@stdlib/strided
Version:
Strided.
693 lines (672 loc) • 27.9 kB
TypeScript
/*
* @license Apache-2.0
*
* Copyright (c) 2020 The Stdlib Authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// TypeScript Version: 4.1
/// <reference types="@stdlib/types"/>
import { ArrayLike } from '@stdlib/types/array';
/**
* Strided array function.
*
* @param arrays - array containing strided input and output arrays
* @param shape - array containing a single element, the number of indexed elements
* @param strides - array containing the stride lengths for the strided input and output arrays
* @param data - strided array function data (e.g., a callback)
*
* @example
* function strided( arrays, shape, strides, fcn ) {
* var sx;
* var sy;
* var ix;
* var iy;
* var N;
* var x;
* var y;
* var i;
*
* N = shape[ 0 ];
* if ( N <= 0 ) {
* return;
* }
* sx = strides[ 0 ];
* if ( sx < 0 ) {
* ix = (1-N) * sx;
* } else {
* ix = 0;
* }
* sy = strides[ 1 ];
* if ( sy < 0 ) {
* iy = (1-N) * sy;
* } else {
* iy = 0;
* }
* x = arrays[ 0 ];
* y = arrays[ 1 ];
* for ( i = 0; i < N; i++ ) {
* y[ iy ] = fcn( x[ ix ] );
* ix += sx;
* iy += sy;
* }
* }
*/
type StridedArrayFcn = ( arrays: Array<ArrayLike<any>>, shape: Array<number>, strides: Array<number>, data?: any ) => void;
/**
* Strided array function using alternative indexing semantics.
*
* @param arrays - array containing strided input and output arrays
* @param shape - array containing a single element, the number of indexed elements
* @param strides - array containing the stride lengths for the strided input and output arrays
* @param offsets - array containing the starting indices (i.e., index offsets) for the strided input and output arrays
* @param data - strided array function data (e.g., a callback)
*
* @example
* function strided( arrays, shape, strides, offsets, fcn ) {
* var sx;
* var sy;
* var ix;
* var iy;
* var N;
* var x;
* var y;
* var i;
*
* N = shape[ 0 ];
* if ( N <= 0 ) {
* return;
* }
* sx = strides[ 0 ];
* sy = strides[ 1 ];
* ix = offsets[ 0 ];
* iy = offsets[ 1 ];
* x = arrays[ 0 ];
* y = arrays[ 1 ];
* for ( i = 0; i < N; i++ ) {
* y[ iy ] = fcn( x[ ix ] );
* ix += sx;
* iy += sy;
* }
* }
*/
type StridedArrayFcnWithOffsets = ( arrays: Array<ArrayLike<any>>, shape: Array<number>, strides: Array<number>, offsets: Array<number>, data?: any ) => void;
/**
* Interface describing a strided array function dispatcher.
*/
interface Dispatcher {
/**
* Invokes a strided array function based on the provided array data type(s).
*
* @param N - number of indexed elements
* @param dtypeX - data type for `x`
* @param x - strided array
* @param strideX - index increment for `x`
* @throws first argument must be an integer
* @throws input array arguments must be array-like objects
* @throws output array arguments must be array-like objects
* @throws input array strides must be integers
* @throws output array strides must be integers
* @throws input array arguments must have sufficient elements based on the associated stride and the number of indexed elements
* @throws output array arguments must have sufficient elements based on the associated stride and the number of indexed elements
* @throws unable to resolve a strided array function supporting the provided array argument data types
* @returns destination array
*
* @example
* var nullary = require( './../../../base/nullary' );
* var Float64Array = require( '@stdlib/array/float64' );
*
* function value() {
* return 3.14;
* }
*
* var types = [ 'float64' ];
* var data = [ value ];
*
* var strided = dispatch( nullary, types, data, 4, 0, 1 );
*
* // ...
*
* var x = new Float64Array( 5 );
*
* strided( x.length, 'float64', x, 1 );
* // x => <Float64Array>[ 3.14, 3.14, 3.14, 3.14, 3.14 ]
*/
( N: number, dtypeX: any, x: ArrayLike<any>, strideX: number ): ArrayLike<any> | void;
/**
* Invokes a strided array function based on the provided array data type(s) using alternative indexing semantics.
*
* @param N - number of indexed elements
* @param dtypeX - data type for `x`
* @param x - strided array
* @param strideX - index increment for `x`
* @param offsetX - starting index for `x`
* @throws first argument must be an integer
* @throws input array arguments must be array-like objects
* @throws output array arguments must be array-like objects
* @throws input array strides must be integers
* @throws output array strides must be integers
* @throws input array offsets must be nonnegative integers
* @throws output array offsets must be nonnegative integers
* @throws input array arguments must have sufficient elements based on the associated stride and the number of indexed elements
* @throws output array arguments must have sufficient elements based on the associated stride and the number of indexed elements
* @throws unable to resolve a strided array function supporting the provided array argument data types
* @returns destination array
*
* @example
* var nullary = require( './../../../base/nullary' ).ndarray;
* var Float64Array = require( '@stdlib/array/float64' );
*
* function value() {
* return 3.14;
* }
*
* var types = [ 'float64' ];
* var data = [ value ];
*
* var strided = dispatch( nullary, types, data, 5, 0, 1 );
*
* // ...
*
* var x = new Float64Array( 5 );
*
* strided( x.length, 'float64', x, 1, 0 );
* // x => <Float64Array>[ 3.14, 3.14, 3.14, 3.14, 3.14 ]
*/
( N: number, dtypeX: any, x: ArrayLike<any>, strideX: number, offsetX: number ): ArrayLike<any> | void;
/**
* Invokes a strided array function based on the provided array data types.
*
* @param N - number of indexed elements
* @param dtypeX - data type for `x`
* @param x - strided array
* @param strideX - index increment for `x`
* @param dtypeY - data type for `y`
* @param y - strided array
* @param strideY - index increment for `y`
* @throws first argument must be an integer
* @throws input array arguments must be array-like objects
* @throws output array arguments must be array-like objects
* @throws input array strides must be integers
* @throws output array strides must be integers
* @throws input array arguments must have sufficient elements based on the associated stride and the number of indexed elements
* @throws output array arguments must have sufficient elements based on the associated stride and the number of indexed elements
* @throws unable to resolve a strided array function supporting the provided array argument data types
* @returns destination array(s)
*
* @example
* var unary = require( './../../../base/unary' );
* var Float64Array = require( '@stdlib/array/float64' );
* var abs = require( '@stdlib/math/base/special/abs' );
*
* var types = [ 'float64', 'float64' ];
* var data = [ abs ];
*
* var strided = dispatch( unary, types, data, 7, 1, 1 );
*
* // ...
*
* var x = new Float64Array( [ -1.0, -2.0, -3.0 ] );
* var y = new Float64Array( x.length );
*
* strided( x.length, 'float64', x, 1, 'float64', y, 1 );
* // y => <Float64Array>[ 1.0, 2.0, 3.0 ]
*/
( N: number, dtypeX: any, x: ArrayLike<any>, strideX: number, dtypeY: any, y: ArrayLike<any>, strideY: number ): ArrayLike<any> | void;
/**
* Invokes a strided array function based on the provided array data types using alternative indexing semantics.
*
* @param N - number of indexed elements
* @param dtypeX - data type for `x`
* @param x - strided array
* @param strideX - index increment for `x`
* @param offsetX - starting index for `x`
* @param dtypeY - data type for `y`
* @param y - strided array
* @param strideY - index increment for `y`
* @param offsetY - starting index for `y`
* @throws first argument must be an integer
* @throws input array arguments must be array-like objects
* @throws output array arguments must be array-like objects
* @throws input array strides must be integers
* @throws output array strides must be integers
* @throws input array offsets must be nonnegative integers
* @throws output array offsets must be nonnegative integers
* @throws input array arguments must have sufficient elements based on the associated stride and the number of indexed elements
* @throws output array arguments must have sufficient elements based on the associated stride and the number of indexed elements
* @throws unable to resolve a strided array function supporting the provided array argument data types
* @returns destination array(s)
*
* @example
* var unary = require( './../../../base/unary' ).ndarray;
* var Float64Array = require( '@stdlib/array/float64' );
* var abs = require( '@stdlib/math/base/special/abs' );
*
* var types = [ 'float64', 'float64' ];
* var data = [ abs ];
*
* var strided = dispatch( unary, types, data, 9, 1, 1 );
*
* // ...
*
* var x = new Float64Array( [ -1.0, -2.0, -3.0 ] );
* var y = new Float64Array( x.length );
*
* strided( x.length, 'float64', x, 1, 0, 'float64', y, 1, 0 );
* // y => <Float64Array>[ 1.0, 2.0, 3.0 ]
*/
( N: number, dtypeX: any, x: ArrayLike<any>, strideX: number, offsetX: number, dtypeY: any, y: ArrayLike<any>, strideY: number, offsetY: number ): ArrayLike<any> | void;
/**
* Invokes a strided array function based on the provided array data types.
*
* @param N - number of indexed elements
* @param dtypeX - data type for `x`
* @param x - strided array
* @param strideX - index increment for `x`
* @param dtypeY - data type for `y`
* @param y - strided array
* @param strideY - index increment for `y`
* @param dtypeZ - data type for `z`
* @param z - strided array
* @param strideZ - index increment for `z`
* @throws first argument must be an integer
* @throws input array arguments must be array-like objects
* @throws output array arguments must be array-like objects
* @throws input array strides must be integers
* @throws output array strides must be integers
* @throws input array arguments must have sufficient elements based on the associated stride and the number of indexed elements
* @throws output array arguments must have sufficient elements based on the associated stride and the number of indexed elements
* @throws unable to resolve a strided array function supporting the provided array argument data types
* @returns destination array(s)
*
* @example
* var binary = require( './../../../base/binary' );
* var Float64Array = require( '@stdlib/array/float64' );
*
* function add2( x, y ) {
* return x + y;
* }
*
* var types = [ 'float64', 'float64', 'float64' ];
* var data = [ add2 ];
*
* var strided = dispatch( binary, types, data, 10, 2, 1 );
*
* // ...
*
* var x = new Float64Array( [ 1.0, 2.0, 3.0 ] );
* var y = new Float64Array( [ 1.0, 2.0, 3.0 ] );
* var z = new Float64Array( x.length );
*
* strided( x.length, 'float64', x, 1, 'float64', y, 1, 'float64', z, 1 );
* // z => <Float64Array>[ 2.0, 4.0, 6.0 ]
*/
( N: number, dtypeX: any, x: ArrayLike<any>, strideX: number, dtypeY: any, y: ArrayLike<any>, strideY: number, dtypeZ: any, z: ArrayLike<any>, strideZ: number ): ArrayLike<any> | void;
/**
* Invokes a strided array function based on the provided array data types using alternative indexing semantics.
*
* @param N - number of indexed elements
* @param dtypeX - data type for `x`
* @param x - strided array
* @param strideX - index increment for `x`
* @param offsetX - starting index for `x`
* @param dtypeY - data type for `y`
* @param y - strided array
* @param strideY - index increment for `y`
* @param offsetY - starting index for `y`
* @param dtypeZ - data type for `z`
* @param z - strided array
* @param strideZ - index increment for `z`
* @param offsetZ - starting index for `z`
* @throws first argument must be an integer
* @throws input array arguments must be array-like objects
* @throws output array arguments must be array-like objects
* @throws input array strides must be integers
* @throws output array strides must be integers
* @throws input array offsets must be nonnegative integers
* @throws output array offsets must be nonnegative integers
* @throws input array arguments must have sufficient elements based on the associated stride and the number of indexed elements
* @throws output array arguments must have sufficient elements based on the associated stride and the number of indexed elements
* @throws unable to resolve a strided array function supporting the provided array argument data types
* @returns destination array(s)
*
* @example
* var binary = require( './../../../base/binary' ).ndarray;
* var Float64Array = require( '@stdlib/array/float64' );
*
* function add2( x, y ) {
* return x + y;
* }
*
* var types = [ 'float64', 'float64', 'float64' ];
* var data = [ add2 ];
*
* var strided = dispatch( binary, types, data, 13, 2, 1 );
*
* // ...
*
* var x = new Float64Array( [ 1.0, 2.0, 3.0 ] );
* var y = new Float64Array( [ 1.0, 2.0, 3.0 ] );
* var z = new Float64Array( x.length );
*
* strided( x.length, 'float64', x, 1, 0, 'float64', y, 1, 0, 'float64', z, 1, 0 );
* // z => <Float64Array>[ 2.0, 4.0, 6.0 ]
*/
( N: number, dtypeX: any, x: ArrayLike<any>, strideX: number, offsetX: number, dtypeY: any, y: ArrayLike<any>, strideY: number, offsetY: number, dtypeZ: any, z: ArrayLike<any>, strideZ: number, offsetZ: number ): ArrayLike<any> | void;
/**
* Invokes a strided array function based on the provided array data types.
*
* @param N - number of indexed elements
* @param dtypeX - data type for `x`
* @param x - strided array
* @param strideX - index increment for `x`
* @param dtypeY - data type for `y`
* @param y - strided array
* @param strideY - index increment for `y`
* @param dtypeZ - data type for `z`
* @param z - strided array
* @param strideZ - index increment for `z`
* @param dtypeW - data type for `w`
* @param w - strided array
* @param strideW - index increment for `w`
* @throws first argument must be an integer
* @throws input array arguments must be array-like objects
* @throws output array arguments must be array-like objects
* @throws input array strides must be integers
* @throws output array strides must be integers
* @throws input array arguments must have sufficient elements based on the associated stride and the number of indexed elements
* @throws output array arguments must have sufficient elements based on the associated stride and the number of indexed elements
* @throws unable to resolve a strided array function supporting the provided array argument data types
* @returns destination array(s)
*
* @example
* var ternary = require( './../../../base/ternary' );
* var Float64Array = require( '@stdlib/array/float64' );
*
* function add3( x, y, z ) {
* return x + y + z;
* }
*
* var types = [ 'float64', 'float64', 'float64', 'float64' ];
* var data = [ add3 ];
*
* var strided = dispatch( ternary, types, data, 13, 3, 1 );
*
* // ...
*
* var x = new Float64Array( [ 1.0, 2.0, 3.0 ] );
* var y = new Float64Array( [ 1.0, 2.0, 3.0 ] );
* var z = new Float64Array( [ 1.0, 2.0, 3.0 ] );
* var w = new Float64Array( x.length );
*
* strided( x.length, 'float64', x, 1, 'float64', y, 1, 'float64', z, 1, 'float64', w, 1 );
* // w => <Float64Array>[ 3.0, 6.0, 9.0 ]
*/
( N: number, dtypeX: any, x: ArrayLike<any>, strideX: number, dtypeY: any, y: ArrayLike<any>, strideY: number, dtypeZ: any, z: ArrayLike<any>, strideZ: number, dtypeW: any, w: ArrayLike<any>, strideW: number ): ArrayLike<any> | void;
/**
* Invokes a strided array function based on the provided array data types using alternative indexing semantics.
*
* @param N - number of indexed elements
* @param dtypeX - data type for `x`
* @param x - strided array
* @param strideX - index increment for `x`
* @param offsetX - starting index for `x`
* @param dtypeY - data type for `y`
* @param y - strided array
* @param strideY - index increment for `y`
* @param offsetY - starting index for `y`
* @param dtypeZ - data type for `z`
* @param z - strided array
* @param strideZ - index increment for `z`
* @param offsetZ - starting index for `z`
* @param dtypeW - data type for `w`
* @param w - strided array
* @param strideW - index increment for `w`
* @param offsetW - starting index for `w`
* @throws first argument must be an integer
* @throws input array arguments must be array-like objects
* @throws output array arguments must be array-like objects
* @throws input array strides must be integers
* @throws output array strides must be integers
* @throws input array offsets must be nonnegative integers
* @throws output array offsets must be nonnegative integers
* @throws input array arguments must have sufficient elements based on the associated stride and the number of indexed elements
* @throws output array arguments must have sufficient elements based on the associated stride and the number of indexed elements
* @throws unable to resolve a strided array function supporting the provided array argument data types
* @returns destination array(s)
*
* @example
* var ternary = require( './../../../base/ternary' ).ndarray;
* var Float64Array = require( '@stdlib/array/float64' );
*
* function add3( x, y, z ) {
* return x + y + z;
* }
*
* var types = [ 'float64', 'float64', 'float64', 'float64' ];
* var data = [ add3 ];
*
* var strided = dispatch( ternary, types, data, 17, 3, 1 );
*
* // ...
*
* var x = new Float64Array( [ 1.0, 2.0, 3.0 ] );
* var y = new Float64Array( [ 1.0, 2.0, 3.0 ] );
* var z = new Float64Array( [ 1.0, 2.0, 3.0 ] );
* var w = new Float64Array( x.length );
*
* strided( x.length, 'float64', x, 1, 0, 'float64', y, 1, 0, 'float64', z, 1, 0, 'float64', w, 1, 0 );
* // w => <Float64Array>[ 3.0, 6.0, 9.0 ]
*/
( N: number, dtypeX: any, x: ArrayLike<any>, strideX: number, offsetX: number, dtypeY: any, y: ArrayLike<any>, strideY: number, offsetY: number, dtypeZ: any, z: ArrayLike<any>, strideZ: number, offsetZ: number, dtypeW: any, w: ArrayLike<any>, strideW: number, offsetW: number ): ArrayLike<any> | void;
/**
* Invokes a strided array function based on the provided array data types.
*
* @param N - number of indexed elements
* @param dtypeX - data type for `x`
* @param x - strided array
* @param strideX - index increment for `x`
* @param dtypeY - data type for `y`
* @param y - strided array
* @param strideY - index increment for `y`
* @param dtypeZ - data type for `z`
* @param z - strided array
* @param strideZ - index increment for `z`
* @param dtypeW - data type for `w`
* @param w - strided array
* @param strideW - index increment for `w`
* @param args - array arguments (arrays, dtypes, and strides)
* @throws first argument must be an integer
* @throws input array arguments must be array-like objects
* @throws output array arguments must be array-like objects
* @throws input array strides must be integers
* @throws output array strides must be integers
* @throws input array arguments must have sufficient elements based on the associated stride and the number of indexed elements
* @throws output array arguments must have sufficient elements based on the associated stride and the number of indexed elements
* @throws unable to resolve a strided array function supporting the provided array argument data types
* @returns destination array(s)
*
* @example
* var quaternary = require( './../../../base/quaternary' );
* var Float64Array = require( '@stdlib/array/float64' );
*
* function add4( x, y, z, w ) {
* return x + y + z + w;
* }
*
* var types = [ 'float64', 'float64', 'float64', 'float64', 'float64' ];
* var data = [ add4 ];
*
* var strided = dispatch( quaternary, types, data, 16, 4, 1 );
*
* // ...
*
* var x = new Float64Array( [ 1.0, 2.0, 3.0 ] );
* var y = new Float64Array( [ 1.0, 2.0, 3.0 ] );
* var z = new Float64Array( [ 1.0, 2.0, 3.0 ] );
* var w = new Float64Array( [ 1.0, 2.0, 3.0 ] );
* var u = new Float64Array( x.length );
*
* strided( x.length, 'float64', x, 1, 'float64', y, 1, 'float64', z, 1, 'float64', w, 1, 'float64', u, 1 );
* // u => <Float64Array>[ 4.0, 8.0, 12.0 ]
*/
( N: number, dtypeX: any, x: ArrayLike<any>, strideX: number, dtypeY: any, y: ArrayLike<any>, strideY: number, dtypeZ: any, z: ArrayLike<any>, strideZ: number, dtypeW: any, w: ArrayLike<any>, strideW: number, ...args: Array<ArrayLike<any> | number | string> ): ArrayLike<any> | void;
/**
* Invokes a strided array function based on the provided array data types using alternative indexing semantics.
*
* @param N - number of indexed elements
* @param dtypeX - data type for `x`
* @param x - strided array
* @param strideX - index increment for `x`
* @param offsetX - starting index for `x`
* @param dtypeY - data type for `y`
* @param y - strided array
* @param strideY - index increment for `y`
* @param offsetY - starting index for `y`
* @param dtypeZ - data type for `z`
* @param z - strided array
* @param strideZ - index increment for `z`
* @param offsetZ = starting index for `z`
* @param dtypeW - data type for `w`
* @param w - strided array
* @param strideW - index increment for `w`
* @param offsetW - starting index for `w`
* @param args - array arguments (arrays, dtypes, strides, and offsets)
* @throws first argument must be an integer
* @throws input array arguments must be array-like objects
* @throws output array arguments must be array-like objects
* @throws input array strides must be integers
* @throws output array strides must be integers
* @throws input array arguments must have sufficient elements based on the associated stride and the number of indexed elements
* @throws output array arguments must have sufficient elements based on the associated stride and the number of indexed elements
* @throws unable to resolve a strided array function supporting the provided array argument data types
* @returns destination array(s)
*
* @example
* var quaternary = require( './../../../base/quaternary' ).ndarray;
* var Float64Array = require( '@stdlib/array/float64' );
*
* function add4( x, y, z, w ) {
* return x + y + z + w;
* }
*
* var types = [ 'float64', 'float64', 'float64', 'float64', 'float64' ];
* var data = [ add4 ];
*
* var strided = dispatch( quaternary, types, data, 21, 4, 1 );
*
* // ...
*
* var x = new Float64Array( [ 1.0, 2.0, 3.0 ] );
* var y = new Float64Array( [ 1.0, 2.0, 3.0 ] );
* var z = new Float64Array( [ 1.0, 2.0, 3.0 ] );
* var w = new Float64Array( [ 1.0, 2.0, 3.0 ] );
* var u = new Float64Array( x.length );
*
* strided( x.length, 'float64', x, 1, 0, 'float64', y, 1, 0, 'float64', z, 1, 0, 'float64', w, 1, 0, 'float64', u, 1, 0 );
* // u => <Float64Array>[ 4.0, 8.0, 12.0 ]
*/
( N: number, dtypeX: any, x: ArrayLike<any>, strideX: number, offsetX: number, dtypeY: any, y: ArrayLike<any>, strideY: number, offsetY: number, dtypeZ: any, z: ArrayLike<any>, strideZ: number, offsetZ: number, dtypeW: any, w: ArrayLike<any>, strideW: number, offsetW: number, ...args: Array<ArrayLike<any> | number> ): ArrayLike<any> | void;
}
/**
* Returns a strided array function interface which performs multiple dispatch.
*
* @param fcns - list of strided array functions
* @param types - one-dimensional list of strided array argument data types
* @param data - strided array function data (e.g., callbacks)
* @param nargs - total number of strided array function interface arguments (including data types, strides, and offsets)
* @param nin - number of input strided arrays
* @param nout - number of output strided arrays
* @throws first argument must be either a function or an array of functions
* @throws second argument must be an an array-like object
* @throws third argument must be an array-like object or `null`
* @throws third and first arguments must have the same number of elements
* @throws fourth argument must be a positive integer
* @throws fifth argument must be a nonnegative integer
* @throws sixth argument must be a nonnegative integer
* @throws fourth argument must be compatible with the specified number of input and output arrays
* @throws number of types must match the number of functions times the total number of array arguments for each function
* @throws interface must accept at least one strided input and/or output array
* @returns strided array function interface
*
* @example
* var unary = require( '@stdlib/strided/base/unary' );
* var abs = require( '@stdlib/math/base/special/abs' );
* var Float64Array = require( '@stdlib/array/float64' );
*
* var types = [
* 'float64', 'float64'
* ];
*
* var data = [
* abs
* ];
*
* var strided = dispatch( unary, types, data, 7, 1, 1 );
*
* // ...
*
* var x = new Float64Array( [ -1.0, -2.0, -3.0, -4.0, -5.0 ] );
* var y = new Float64Array( [ 0.0, 0.0, 0.0, 0.0, 0.0 ] );
*
* strided( x.length, 'float64', x, 1, 'float64', y, 1 );
* // y => <Float64Array>[ 1.0, 2.0, 3.0, 4.0, 5.0 ]
*/
declare function dispatch( fcns: StridedArrayFcn | ArrayLike<StridedArrayFcn>, types: ArrayLike<any>, data: ArrayLike<any> | null, nargs: number, nin: number, nout: number ): Dispatcher;
/**
* Returns a strided array function interface which performs multiple dispatch and supports alternative indexing semantics.
*
* @param fcns - list of strided array functions
* @param types - one-dimensional list of strided array argument data types
* @param data - strided array function data (e.g., callbacks)
* @param nargs - total number of strided array function interface arguments (including data types and strides)
* @param nin - number of input strided arrays
* @param nout - number of output strided arrays
* @throws first argument must be either a function or an array of functions
* @throws second argument must be an array-like object
* @throws third argument must be an array-like object or `null`
* @throws third and first arguments must have the same number of elements
* @throws fourth argument must be a positive integer
* @throws fifth argument must be a nonnegative integer
* @throws sixth argument must be a nonnegative integer
* @throws fourth argument must be compatible with the specified number of input and output arrays
* @throws number of types must match the number of functions times the total number of array arguments for each function
* @throws interface must accept at least one strided input and/or output array
* @returns strided array function interface
*
* @example
* var unary = require( '@stdlib/strided/base/unary' ).ndarray;
* var abs = require( '@stdlib/math/base/special/abs' );
* var Float64Array = require( '@stdlib/array/float64' );
*
* var types = [
* 'float64', 'float64'
* ];
*
* var data = [
* abs
* ];
*
* var strided = dispatch( unary, types, data, 9, 1, 1 );
*
* // ...
*
* var x = new Float64Array( [ -1.0, -2.0, -3.0, -4.0, -5.0 ] );
* var y = new Float64Array( [ 0.0, 0.0, 0.0, 0.0, 0.0 ] );
*
* strided( x.length, 'float64', x, 1, 0, 'float64', y, 1, 0 );
* // y => <Float64Array>[ 1.0, 2.0, 3.0, 4.0, 5.0 ]
*/
declare function dispatch( fcns: StridedArrayFcnWithOffsets | ArrayLike<StridedArrayFcnWithOffsets>, types: ArrayLike<any>, data: ArrayLike<any> | null, nargs: number, nin: number, nout: number ): Dispatcher;
// EXPORTS //
export = dispatch;