function dispatcher( x ) {
		var xdtype;
		var ydtype;
		var opts;
		var err;
		var y;
		if ( isNumber( x ) ) {
			if ( t.number ) {
				return t.number( x );
			}
			throw new TypeError( 'invalid argument. Providing a number is not supported.' );
		}
		if ( isComplexLike( x ) ) {
			if ( t.complex ) {
				return t.complex( x );
			}
			throw new TypeError( 'invalid argument. Providing a complex number is not supported.' );
		}
		opts = {};
		if ( arguments.length > 1 ) {
			err = validate( opts, arguments[ 1 ] );
			if ( err ) {
				throw err;
			}
		}
		if ( isndarrayLike( x ) ) {
			if ( t.ndarray === null ) {
				throw new TypeError( 'invalid argument. Providing an ndarray is not supported.' );
			}
			ydtype = opts.dtype || odtype( x.dtype, OPTS.policy );
			return ndarrayfcn( t.ndarray, x, ydtype, opts.order || x.order );
		}
		if ( isCollection( x ) ) {
			if ( t.array === null ) {
				throw new TypeError( 'invalid argument. Providing an array-like object is not supported.' );
			}
			xdtype = dtype( x ) || 'generic';
			ydtype = opts.dtype || odtype( xdtype, OPTS.policy );
			y = buffer( ydtype, x.length );
			t.array( x.length, xdtype, x, 1, ydtype, y, 1 );
			return y;
		}
		throw new TypeError( format( 'invalid argument. Must provide an argument having a supported data type. Value: `%s`.', x ) );
	}
Function interface which performs dispatch.

@private
@param {(ndarray|Collection|number|Complex)} x - input value
@param {Options} [options] - options
@param {string} [options.dtype] - output array data type
@param {string} [options.order] - output array order (row-major or column-major)
@throws {TypeError} first argument must be a supported data type
@throws {TypeError} options argument must be an object
@throws {TypeError} must provide valid options
@returns {(ndarray|Collection|number|Complex)} results