function clacpy( uplo, M, N, A, strideA1, strideA2, offsetA, B, strideB1, strideB2, offsetB ) {
	var viewA;
	var viewB;

	// Reinterpret the input and output arrays as real-valued arrays of interleaved real and imaginary components:
	viewA = reinterpret( A, 0 );
	viewB = reinterpret( B, 0 );

	// Adjust the strides and offsets accordingly:
	strideA1 *= 2;
	strideA2 *= 2;
	strideB1 *= 2;
	strideB2 *= 2;

	offsetA *= 2;
	offsetB *= 2;

	if ( uplo === 'upper' ) {
		copyUpper( M, N, viewA, strideA1, strideA2, offsetA, viewB, strideB1, strideB2, offsetB );
	} else if ( uplo === 'lower' ) {
		copyLower( M, N, viewA, strideA1, strideA2, offsetA, viewB, strideB1, strideB2, offsetB );
	} else {
		copyAll( M, N, viewA, strideA1, strideA2, offsetA, viewB, strideB1, strideB2, offsetB );
	}
	return B;
}
Copies all or part of a matrix `A` to another matrix `B`.

@private
@param {string} uplo - specifies whether to copy the upper or lower triangular/trapezoidal part of matrix `A`
@param {NonNegativeInteger} M - number of rows in matrix `A`
@param {NonNegativeInteger} N - number of columns in matrix `A`
@param {Complex64Array} A - input matrix
@param {integer} strideA1 - stride of the first dimension of `A`
@param {integer} strideA2 - stride of the second dimension of `A`
@param {NonNegativeInteger} offsetA - starting index for `A`
@param {Complex64Array} B - output matrix
@param {integer} strideB1 - stride of the first dimension of `B`
@param {integer} strideB2 - stride of the second dimension of `B`
@param {NonNegativeInteger} offsetB - starting index for `B`
@returns {Complex64Array} `B`

@example
var Complex64Array = require( '@stdlib/array/complex64' );
var realf = require( '@stdlib/complex/float32/real' );
var imagf = require( '@stdlib/complex/float32/imag' );

var A = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );
var B = new Complex64Array( 4 );

clacpy( 'all', 2, 2, A, 2, 1, 0, B, 2, 1, 0 );

var z = B.get( 0 );
// returns <Complex64>

var v = realf( z );
// returns 1.0

v = imagf( z );
// returns 2.0

z = B.get( 1 );
// returns <Complex64>

v = realf( z );
// returns 3.0

v = imagf( z );
// returns 4.0

z = B.get( 2 );
// returns <Complex64>

v = realf( z );
// returns 5.0

v = imagf( z );
// returns 6.0

z = B.get( 3 );
// returns <Complex64>

v = realf( z );
// returns 7.0

v = imagf( z );
// returns 8.0

@example
var Complex64Array = require( '@stdlib/array/complex64' );
var realf = require( '@stdlib/complex/float32/real' );
var imagf = require( '@stdlib/complex/float32/imag' );

var A = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );
var B = new Complex64Array( 4 );

clacpy( 'upper', 2, 2, A, 2, 1, 0, B, 2, 1, 0 );
// B => <Complex64Array>

var z = B.get( 0 );
// returns <Complex64>

var v = realf( z );
// returns 1.0

v = imagf( z );
// returns 2.0

z = B.get( 1 );
// returns <Complex64>

v = realf( z );
// returns 3.0

v = imagf( z );
// returns 4.0

z = B.get( 2 );
// returns <Complex64>

v = realf( z );
// returns 0.0

v = imagf( z );
// returns 0.0

z = B.get( 3 );
// returns <Complex64>

v = realf( z );
// returns 7.0

v = imagf( z );
// returns 8.0

@example
var Complex64Array = require( '@stdlib/array/complex64' );
var realf = require( '@stdlib/complex/float32/real' );
var imagf = require( '@stdlib/complex/float32/imag' );

var A = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );
var B = new Complex64Array( 4 );

clacpy( 'lower', 2, 2, A, 2, 1, 0, B, 2, 1, 0 );

var z = B.get( 0 );
// returns <Complex64>

var v = realf( z );
// returns 1.0

v = imagf( z );
// returns 2.0

z = B.get( 1 );
// returns <Complex64>

v = realf( z );
// returns 0.0

v = imagf( z );
// returns 0.0

z = B.get( 2 );
// returns <Complex64>

v = realf( z );
// returns 5.0

v = imagf( z );
// returns 6.0

z = B.get( 3 );
// returns <Complex64>

v = realf( z );
// returns 7.0

v = imagf( z );
// returns 8.0