diff --git a/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/README.md b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/README.md new file mode 100644 index 000000000000..0d5064af3248 --- /dev/null +++ b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/README.md @@ -0,0 +1,1258 @@ + + +# kernel + +> Return a kernel for applying a one-dimensional strided array reduction function to an input ndarray and assigning results to an output ndarray. + +
+ +
+ + + +
+ +## Usage + +```javascript +var kernel = require( '@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked' ); +``` + +#### kernel( ndims ) + +Returns a kernel for applying a one-dimensional strided array reduction function to an input ndarray and assigning results to an output ndarray. + + + +```javascript +var Float64Array = require( '@stdlib/array/float64' ); +var ndarray2array = require( '@stdlib/ndarray/base/to-array' ); +var gsum = require( '@stdlib/blas/ext/base/ndarray/gsum' ); + +// Create data buffers: +var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); +var ybuf = new Float64Array( [ 0.0, 0.0, 0.0 ] ); + +// Define the array shapes: +var xsh = [ 1, 3, 2, 2 ]; +var ysh = [ 1, 3 ]; + +// Define the array strides: +var sx = [ 12, 4, 2, 1 ]; +var sy = [ 3, 1 ]; + +// Define the index offsets: +var ox = 0; +var oy = 0; + +// Create an input ndarray descriptor: +var x = { + 'dtype': 'float64', + 'data': xbuf, + 'shape': xsh, + 'strides': sx, + 'offset': ox, + 'order': 'row-major' +}; + +// Create an output ndarray descriptor: +var y = { + 'dtype': 'float64', + 'data': ybuf, + 'shape': ysh, + 'strides': sy, + 'offset': oy, + 'order': 'row-major' +}; + +// Initialize ndarray descriptors representing subarray views: +var views = [ + { + 'dtype': x.dtype, + 'data': x.data, + 'shape': [ 2, 2 ], + 'strides': [ 2, 1 ], + 'offset': x.offset, + 'order': x.order + } +]; + +// Define a reshape strategy: +function strategy( x ) { + return { + 'dtype': x.dtype, + 'data': x.data, + 'shape': [ 4 ], + 'strides': [ 1 ], + 'offset': x.offset, + 'order': x.order + }; +} + +// Resolve a kernel: +var f = kernel( 2 ); + +// Perform a reduction: +f( gsum, [ x, y ], views, [ 12, 4 ], strategy, {} ); + +var arr = ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ); +// returns [ [ 10.0, 26.0, 42.0 ] ] +``` + +The function accepts the following arguments: + +- **ndims**: number of loop dimensions. + +If the function is provided an `ndims` value greater than the maximum number of supported loop dimensions, the function returns `null`. + +```javascript +var f = kernel( 100000 ); +// returns null +``` + +The returned function accepts the following arguments: + +- **fcn**: wrapper for a one-dimensional strided array reduction function. +- **arrays**: array containing one input ndarray [descriptor][@stdlib/ndarray/base/descriptor] and one output ndarray [descriptor][@stdlib/ndarray/base/descriptor], followed by any additional ndarray arguments. +- **views**: initialized ndarray [descriptors][@stdlib/ndarray/base/descriptor] representing subarray views. +- **strides**: loop dimension strides for the input ndarray. +- **strategy**: input ndarray reshape strategy. +- **options**: function options which are passed through to `fcn`. + +The returned function iterates over ndarray elements according to the memory layout of the input ndarray. + + + +#### kernel.kernel0d( fcn, arrays, views, strides, strategy, options ) + + + +Performs a reduction over a list of specified dimensions in an input ndarray and assigns results to a provided output ndarray. + + + +```javascript +var Float64Array = require( '@stdlib/array/float64' ); +var ndarray2array = require( '@stdlib/ndarray/base/to-array' ); +var gsum = require( '@stdlib/blas/ext/base/ndarray/gsum' ); + +// Create data buffers: +var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); +var ybuf = new Float64Array( [ 0.0 ] ); + +// Define the array shapes: +var xsh = [ 2, 2 ]; +var ysh = []; + +// Define the array strides: +var sx = [ 2, 1 ]; +var sy = [ 0 ]; + +// Define the index offsets: +var ox = 0; +var oy = 0; + +// Create an input ndarray descriptor: +var x = { + 'dtype': 'float64', + 'data': xbuf, + 'shape': xsh, + 'strides': sx, + 'offset': ox, + 'order': 'row-major' +}; + +// Create an output ndarray descriptor: +var y = { + 'dtype': 'float64', + 'data': ybuf, + 'shape': ysh, + 'strides': sy, + 'offset': oy, + 'order': 'row-major' +}; + +// Define a reshape strategy: +function strategy( x ) { + return { + 'dtype': x.dtype, + 'data': x.data, + 'shape': [ 4 ], + 'strides': [ 1 ], + 'offset': x.offset, + 'order': x.order + }; +} + +// Perform a reduction: +kernel.kernel0d( gsum, [ x, y ], [], [], strategy, {} ); + +var v = y.data; +// returns [ 10.0 ] +``` + +The function has the following parameters: + +- **fcn**: wrapper for a one-dimensional strided array reduction function. +- **arrays**: array containing one input ndarray [descriptor][@stdlib/ndarray/base/descriptor] and one output ndarray [descriptor][@stdlib/ndarray/base/descriptor], followed by any additional ndarray arguments. +- **views**: initialized ndarray [descriptors][@stdlib/ndarray/base/descriptor] representing subarray views. +- **strides**: loop dimension strides for the input ndarray. Should have zero elements. +- **strategy**: input ndarray reshape strategy. +- **options**: function options which are passed through to `fcn`. + +The `views` and `strides` parameters are unused. Providing empty arrays for these parameters is recommended in order to ensure a monomorphic API. + + + +#### kernel.kernel1d( fcn, arrays, views, strides, strategy, options ) + + + +Performs a reduction over an input ndarray and assigns results to a provided output ndarray. + + + +```javascript +var Float64Array = require( '@stdlib/array/float64' ); +var ndarray2array = require( '@stdlib/ndarray/base/to-array' ); +var gsum = require( '@stdlib/blas/ext/base/ndarray/gsum' ); + +// Create data buffers: +var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); +var ybuf = new Float64Array( [ 0.0, 0.0, 0.0 ] ); + +// Define the array shapes: +var xsh = [ 3, 2, 2 ]; +var ysh = [ 3 ]; + +// Define the array strides: +var sx = [ 4, 2, 1 ]; +var sy = [ 1 ]; + +// Define the index offsets: +var ox = 0; +var oy = 0; + +// Create an input ndarray descriptor: +var x = { + 'dtype': 'float64', + 'data': xbuf, + 'shape': xsh, + 'strides': sx, + 'offset': ox, + 'order': 'row-major' +}; + +// Create an output ndarray descriptor: +var y = { + 'dtype': 'float64', + 'data': ybuf, + 'shape': ysh, + 'strides': sy, + 'offset': oy, + 'order': 'row-major' +}; + +// Initialize ndarray descriptors representing subarray views: +var views = [ + { + 'dtype': x.dtype, + 'data': x.data, + 'shape': [ 2, 2 ], + 'strides': [ 2, 1 ], + 'offset': x.offset, + 'order': x.order + } +]; + +// Define a reshape strategy: +function strategy( x ) { + return { + 'dtype': x.dtype, + 'data': x.data, + 'shape': [ 4 ], + 'strides': [ 1 ], + 'offset': x.offset, + 'order': x.order + }; +} + +// Perform a reduction: +kernel.kernel1d( gsum, [ x, y ], views, [ 4 ], strategy, {} ); + +var arr = ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ); +// returns [ 10.0, 26.0, 42.0 ] +``` + +The function has the following parameters: + +- **fcn**: wrapper for a one-dimensional strided array reduction function. +- **arrays**: array containing one input ndarray [descriptor][@stdlib/ndarray/base/descriptor] and one output ndarray [descriptor][@stdlib/ndarray/base/descriptor], followed by any additional ndarray arguments. +- **views**: initialized ndarray [descriptors][@stdlib/ndarray/base/descriptor] representing subarray views. +- **strides**: loop dimension strides for the input ndarray. Should have one element. +- **strategy**: input ndarray reshape strategy. +- **options**: function options which are passed through to `fcn`. + + + +#### kernel.kernel2d( fcn, arrays, views, strides, strategy, options ) + + + +Performs a reduction over an input ndarray and assigns results to a provided output ndarray. + + + +```javascript +var Float64Array = require( '@stdlib/array/float64' ); +var ndarray2array = require( '@stdlib/ndarray/base/to-array' ); +var gsum = require( '@stdlib/blas/ext/base/ndarray/gsum' ); + +// Create data buffers: +var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); +var ybuf = new Float64Array( [ 0.0, 0.0, 0.0 ] ); + +// Define the array shapes: +var xsh = [ 1, 3, 2, 2 ]; +var ysh = [ 1, 3 ]; + +// Define the array strides: +var sx = [ 12, 4, 2, 1 ]; +var sy = [ 3, 1 ]; + +// Define the index offsets: +var ox = 0; +var oy = 0; + +// Create an input ndarray descriptor: +var x = { + 'dtype': 'float64', + 'data': xbuf, + 'shape': xsh, + 'strides': sx, + 'offset': ox, + 'order': 'row-major' +}; + +// Create an output ndarray descriptor: +var y = { + 'dtype': 'float64', + 'data': ybuf, + 'shape': ysh, + 'strides': sy, + 'offset': oy, + 'order': 'row-major' +}; + +// Initialize ndarray descriptors representing subarray views: +var views = [ + { + 'dtype': x.dtype, + 'data': x.data, + 'shape': [ 2, 2 ], + 'strides': [ 2, 1 ], + 'offset': x.offset, + 'order': x.order + } +]; + +// Define a reshape strategy: +function strategy( x ) { + return { + 'dtype': x.dtype, + 'data': x.data, + 'shape': [ 4 ], + 'strides': [ 1 ], + 'offset': x.offset, + 'order': x.order + }; +} + +// Perform a reduction: +kernel.kernel2d( gsum, [ x, y ], views, [ 12, 4 ], strategy, {} ); + +var arr = ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ); +// returns [ [ 10.0, 26.0, 42.0 ] ] +``` + +The function has the following parameters: + +- **fcn**: wrapper for a one-dimensional strided array reduction function. +- **arrays**: array containing one input ndarray [descriptor][@stdlib/ndarray/base/descriptor] and one output ndarray [descriptor][@stdlib/ndarray/base/descriptor], followed by any additional ndarray arguments. +- **views**: initialized ndarray [descriptors][@stdlib/ndarray/base/descriptor] representing subarray views. +- **strides**: loop dimension strides for the input ndarray. Should have two elements. +- **strategy**: input ndarray reshape strategy. +- **options**: function options which are passed through to `fcn`. + + + +#### kernel.kernel3d( fcn, arrays, views, strides, strategy, options ) + + + +Performs a reduction over an input ndarray and assigns results to a provided output ndarray. + + + +```javascript +var Float64Array = require( '@stdlib/array/float64' ); +var ndarray2array = require( '@stdlib/ndarray/base/to-array' ); +var gsum = require( '@stdlib/blas/ext/base/ndarray/gsum' ); + +// Create data buffers: +var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); +var ybuf = new Float64Array( [ 0.0, 0.0, 0.0 ] ); + +// Define the array shapes: +var xsh = [ 1, 1, 3, 2, 2 ]; +var ysh = [ 1, 1, 3 ]; + +// Define the array strides: +var sx = [ 12, 12, 4, 2, 1 ]; +var sy = [ 3, 3, 1 ]; + +// Define the index offsets: +var ox = 0; +var oy = 0; + +// Create an input ndarray descriptor: +var x = { + 'dtype': 'float64', + 'data': xbuf, + 'shape': xsh, + 'strides': sx, + 'offset': ox, + 'order': 'row-major' +}; + +// Create an output ndarray descriptor: +var y = { + 'dtype': 'float64', + 'data': ybuf, + 'shape': ysh, + 'strides': sy, + 'offset': oy, + 'order': 'row-major' +}; + +// Initialize ndarray descriptors representing subarray views: +var views = [ + { + 'dtype': x.dtype, + 'data': x.data, + 'shape': [ 2, 2 ], + 'strides': [ 2, 1 ], + 'offset': x.offset, + 'order': x.order + } +]; + +// Define a reshape strategy: +function strategy( x ) { + return { + 'dtype': x.dtype, + 'data': x.data, + 'shape': [ 4 ], + 'strides': [ 1 ], + 'offset': x.offset, + 'order': x.order + }; +} + +// Perform a reduction: +kernel.kernel3d( gsum, [ x, y ], views, [ 12, 12, 4 ], strategy, {} ); + +var arr = ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ); +// returns [ [ [ 10.0, 26.0, 42.0 ] ] ] +``` + +The function has the following parameters: + +- **fcn**: wrapper for a one-dimensional strided array reduction function. +- **arrays**: array containing one input ndarray [descriptor][@stdlib/ndarray/base/descriptor] and one output ndarray [descriptor][@stdlib/ndarray/base/descriptor], followed by any additional ndarray arguments. +- **views**: initialized ndarray [descriptors][@stdlib/ndarray/base/descriptor] representing subarray views. +- **strides**: loop dimension strides for the input ndarray. Should have three elements. +- **strategy**: input ndarray reshape strategy. +- **options**: function options which are passed through to `fcn`. + + + +#### kernel.kernel4d( fcn, arrays, views, strides, strategy, options ) + + + +Performs a reduction over an input ndarray and assigns results to a provided output ndarray. + + + +```javascript +var Float64Array = require( '@stdlib/array/float64' ); +var ndarray2array = require( '@stdlib/ndarray/base/to-array' ); +var gsum = require( '@stdlib/blas/ext/base/ndarray/gsum' ); + +// Create data buffers: +var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); +var ybuf = new Float64Array( [ 0.0, 0.0, 0.0 ] ); + +// Define the array shapes: +var xsh = [ 1, 1, 1, 3, 2, 2 ]; +var ysh = [ 1, 1, 1, 3 ]; + +// Define the array strides: +var sx = [ 12, 12, 12, 4, 2, 1 ]; +var sy = [ 3, 3, 3, 1 ]; + +// Define the index offsets: +var ox = 0; +var oy = 0; + +// Create an input ndarray descriptor: +var x = { + 'dtype': 'float64', + 'data': xbuf, + 'shape': xsh, + 'strides': sx, + 'offset': ox, + 'order': 'row-major' +}; + +// Create an output ndarray descriptor: +var y = { + 'dtype': 'float64', + 'data': ybuf, + 'shape': ysh, + 'strides': sy, + 'offset': oy, + 'order': 'row-major' +}; + +// Initialize ndarray descriptors representing subarray views: +var views = [ + { + 'dtype': x.dtype, + 'data': x.data, + 'shape': [ 2, 2 ], + 'strides': [ 2, 1 ], + 'offset': x.offset, + 'order': x.order + } +]; + +// Define a reshape strategy: +function strategy( x ) { + return { + 'dtype': x.dtype, + 'data': x.data, + 'shape': [ 4 ], + 'strides': [ 1 ], + 'offset': x.offset, + 'order': x.order + }; +} + +// Perform a reduction: +kernel.kernel4d( gsum, [ x, y ], views, [ 12, 12, 12, 4 ], strategy, {} ); + +var arr = ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ); +// returns [ [ [ [ 10.0, 26.0, 42.0 ] ] ] ] +``` + +The function has the following parameters: + +- **fcn**: wrapper for a one-dimensional strided array reduction function. +- **arrays**: array containing one input ndarray [descriptor][@stdlib/ndarray/base/descriptor] and one output ndarray [descriptor][@stdlib/ndarray/base/descriptor], followed by any additional ndarray arguments. +- **views**: initialized ndarray [descriptors][@stdlib/ndarray/base/descriptor] representing subarray views. +- **strides**: loop dimension strides for the input ndarray. Should have four elements. +- **strategy**: input ndarray reshape strategy. +- **options**: function options which are passed through to `fcn`. + + + +#### kernel.kernel5d( fcn, arrays, views, strides, strategy, options ) + + + +Performs a reduction over an input ndarray and assigns results to a provided output ndarray. + + + +```javascript +var Float64Array = require( '@stdlib/array/float64' ); +var ndarray2array = require( '@stdlib/ndarray/base/to-array' ); +var gsum = require( '@stdlib/blas/ext/base/ndarray/gsum' ); + +// Create data buffers: +var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); +var ybuf = new Float64Array( [ 0.0, 0.0, 0.0 ] ); + +// Define the array shapes: +var xsh = [ 1, 1, 1, 1, 3, 2, 2 ]; +var ysh = [ 1, 1, 1, 1, 3 ]; + +// Define the array strides: +var sx = [ 12, 12, 12, 12, 4, 2, 1 ]; +var sy = [ 3, 3, 3, 3, 1 ]; + +// Define the index offsets: +var ox = 0; +var oy = 0; + +// Create an input ndarray descriptor: +var x = { + 'dtype': 'float64', + 'data': xbuf, + 'shape': xsh, + 'strides': sx, + 'offset': ox, + 'order': 'row-major' +}; + +// Create an output ndarray descriptor: +var y = { + 'dtype': 'float64', + 'data': ybuf, + 'shape': ysh, + 'strides': sy, + 'offset': oy, + 'order': 'row-major' +}; + +// Initialize ndarray descriptors representing subarray views: +var views = [ + { + 'dtype': x.dtype, + 'data': x.data, + 'shape': [ 2, 2 ], + 'strides': [ 2, 1 ], + 'offset': x.offset, + 'order': x.order + } +]; + +// Define a reshape strategy: +function strategy( x ) { + return { + 'dtype': x.dtype, + 'data': x.data, + 'shape': [ 4 ], + 'strides': [ 1 ], + 'offset': x.offset, + 'order': x.order + }; +} + +// Perform a reduction: +kernel.kernel5d( gsum, [ x, y ], views, [ 12, 12, 12, 12, 4 ], strategy, {} ); + +var arr = ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ); +// returns [ [ [ [ [ 10.0, 26.0, 42.0 ] ] ] ] ] +``` + +The function has the following parameters: + +- **fcn**: wrapper for a one-dimensional strided array reduction function. +- **arrays**: array containing one input ndarray [descriptor][@stdlib/ndarray/base/descriptor] and one output ndarray [descriptor][@stdlib/ndarray/base/descriptor], followed by any additional ndarray arguments. +- **views**: initialized ndarray [descriptors][@stdlib/ndarray/base/descriptor] representing subarray views. +- **strides**: loop dimension strides for the input ndarray. Should have five elements. +- **strategy**: input ndarray reshape strategy. +- **options**: function options which are passed through to `fcn`. + + + +#### kernel.kernel6d( fcn, arrays, views, strides, strategy, options ) + + + +Performs a reduction over an input ndarray and assigns results to a provided output ndarray. + + + +```javascript +var Float64Array = require( '@stdlib/array/float64' ); +var ndarray2array = require( '@stdlib/ndarray/base/to-array' ); +var gsum = require( '@stdlib/blas/ext/base/ndarray/gsum' ); + +// Create data buffers: +var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); +var ybuf = new Float64Array( [ 0.0, 0.0, 0.0 ] ); + +// Define the array shapes: +var xsh = [ 1, 1, 1, 1, 1, 3, 2, 2 ]; +var ysh = [ 1, 1, 1, 1, 1, 3 ]; + +// Define the array strides: +var sx = [ 12, 12, 12, 12, 12, 4, 2, 1 ]; +var sy = [ 3, 3, 3, 3, 3, 1 ]; + +// Define the index offsets: +var ox = 0; +var oy = 0; + +// Create an input ndarray descriptor: +var x = { + 'dtype': 'float64', + 'data': xbuf, + 'shape': xsh, + 'strides': sx, + 'offset': ox, + 'order': 'row-major' +}; + +// Create an output ndarray descriptor: +var y = { + 'dtype': 'float64', + 'data': ybuf, + 'shape': ysh, + 'strides': sy, + 'offset': oy, + 'order': 'row-major' +}; + +// Initialize ndarray descriptors representing subarray views: +var views = [ + { + 'dtype': x.dtype, + 'data': x.data, + 'shape': [ 2, 2 ], + 'strides': [ 2, 1 ], + 'offset': x.offset, + 'order': x.order + } +]; + +// Define a reshape strategy: +function strategy( x ) { + return { + 'dtype': x.dtype, + 'data': x.data, + 'shape': [ 4 ], + 'strides': [ 1 ], + 'offset': x.offset, + 'order': x.order + }; +} + +// Perform a reduction: +kernel.kernel6d( gsum, [ x, y ], views, [ 12, 12, 12, 12, 12, 4 ], strategy, {} ); + +var arr = ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ); +// returns [ [ [ [ [ [ 10.0, 26.0, 42.0 ] ] ] ] ] ] +``` + +The function has the following parameters: + +- **fcn**: wrapper for a one-dimensional strided array reduction function. +- **arrays**: array containing one input ndarray [descriptor][@stdlib/ndarray/base/descriptor] and one output ndarray [descriptor][@stdlib/ndarray/base/descriptor], followed by any additional ndarray arguments. +- **views**: initialized ndarray [descriptors][@stdlib/ndarray/base/descriptor] representing subarray views. +- **strides**: loop dimension strides for the input ndarray. Should have six elements. +- **strategy**: input ndarray reshape strategy. +- **options**: function options which are passed through to `fcn`. + + + +#### kernel.kernel7d( fcn, arrays, views, strides, strategy, options ) + + + +Performs a reduction over an input ndarray and assigns results to a provided output ndarray. + + + +```javascript +var Float64Array = require( '@stdlib/array/float64' ); +var ndarray2array = require( '@stdlib/ndarray/base/to-array' ); +var gsum = require( '@stdlib/blas/ext/base/ndarray/gsum' ); + +// Create data buffers: +var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); +var ybuf = new Float64Array( [ 0.0, 0.0, 0.0 ] ); + +// Define the array shapes: +var xsh = [ 1, 1, 1, 1, 1, 1, 3, 2, 2 ]; +var ysh = [ 1, 1, 1, 1, 1, 1, 3 ]; + +// Define the array strides: +var sx = [ 12, 12, 12, 12, 12, 12, 4, 2, 1 ]; +var sy = [ 3, 3, 3, 3, 3, 3, 1 ]; + +// Define the index offsets: +var ox = 0; +var oy = 0; + +// Create an input ndarray descriptor: +var x = { + 'dtype': 'float64', + 'data': xbuf, + 'shape': xsh, + 'strides': sx, + 'offset': ox, + 'order': 'row-major' +}; + +// Create an output ndarray descriptor: +var y = { + 'dtype': 'float64', + 'data': ybuf, + 'shape': ysh, + 'strides': sy, + 'offset': oy, + 'order': 'row-major' +}; + +// Initialize ndarray descriptors representing subarray views: +var views = [ + { + 'dtype': x.dtype, + 'data': x.data, + 'shape': [ 2, 2 ], + 'strides': [ 2, 1 ], + 'offset': x.offset, + 'order': x.order + } +]; + +// Define a reshape strategy: +function strategy( x ) { + return { + 'dtype': x.dtype, + 'data': x.data, + 'shape': [ 4 ], + 'strides': [ 1 ], + 'offset': x.offset, + 'order': x.order + }; +} + +// Perform a reduction: +kernel.kernel7d( gsum, [ x, y ], views, [ 12, 12, 12, 12, 12, 12, 4 ], strategy, {} ); + +var arr = ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ); +// returns [ [ [ [ [ [ [ 10.0, 26.0, 42.0 ] ] ] ] ] ] ] +``` + +The function has the following parameters: + +- **fcn**: wrapper for a one-dimensional strided array reduction function. +- **arrays**: array containing one input ndarray [descriptor][@stdlib/ndarray/base/descriptor] and one output ndarray [descriptor][@stdlib/ndarray/base/descriptor], followed by any additional ndarray arguments. +- **views**: initialized ndarray [descriptors][@stdlib/ndarray/base/descriptor] representing subarray views. +- **strides**: loop dimension strides for the input ndarray. Should have seven elements. +- **strategy**: input ndarray reshape strategy. +- **options**: function options which are passed through to `fcn`. + + + +#### kernel.kernel8d( fcn, arrays, views, strides, strategy, options ) + + + +Performs a reduction over an input ndarray and assigns results to a provided output ndarray. + + + +```javascript +var Float64Array = require( '@stdlib/array/float64' ); +var ndarray2array = require( '@stdlib/ndarray/base/to-array' ); +var gsum = require( '@stdlib/blas/ext/base/ndarray/gsum' ); + +// Create data buffers: +var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); +var ybuf = new Float64Array( [ 0.0, 0.0, 0.0 ] ); + +// Define the array shapes: +var xsh = [ 1, 1, 1, 1, 1, 1, 1, 3, 2, 2 ]; +var ysh = [ 1, 1, 1, 1, 1, 1, 1, 3 ]; + +// Define the array strides: +var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 2, 1 ]; +var sy = [ 3, 3, 3, 3, 3, 3, 3, 1 ]; + +// Define the index offsets: +var ox = 0; +var oy = 0; + +// Create an input ndarray descriptor: +var x = { + 'dtype': 'float64', + 'data': xbuf, + 'shape': xsh, + 'strides': sx, + 'offset': ox, + 'order': 'row-major' +}; + +// Create an output ndarray descriptor: +var y = { + 'dtype': 'float64', + 'data': ybuf, + 'shape': ysh, + 'strides': sy, + 'offset': oy, + 'order': 'row-major' +}; + +// Initialize ndarray descriptors representing subarray views: +var views = [ + { + 'dtype': x.dtype, + 'data': x.data, + 'shape': [ 2, 2 ], + 'strides': [ 2, 1 ], + 'offset': x.offset, + 'order': x.order + } +]; + +// Define a reshape strategy: +function strategy( x ) { + return { + 'dtype': x.dtype, + 'data': x.data, + 'shape': [ 4 ], + 'strides': [ 1 ], + 'offset': x.offset, + 'order': x.order + }; +} + +// Perform a reduction: +kernel.kernel8d( gsum, [ x, y ], views, [ 12, 12, 12, 12, 12, 12, 12, 4 ], strategy, {} ); + +var arr = ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ); +// returns [ [ [ [ [ [ [ [ 10.0, 26.0, 42.0 ] ] ] ] ] ] ] ] +``` + +The function has the following parameters: + +- **fcn**: wrapper for a one-dimensional strided array reduction function. +- **arrays**: array containing one input ndarray [descriptor][@stdlib/ndarray/base/descriptor] and one output ndarray [descriptor][@stdlib/ndarray/base/descriptor], followed by any additional ndarray arguments. +- **views**: initialized ndarray [descriptors][@stdlib/ndarray/base/descriptor] representing subarray views. +- **strides**: loop dimension strides for the input ndarray. Should have eight elements. +- **strategy**: input ndarray reshape strategy. +- **options**: function options which are passed through to `fcn`. + + + +#### kernel.kernel9d( fcn, arrays, views, strides, strategy, options ) + + + +Performs a reduction over an input ndarray and assigns results to a provided output ndarray. + + + +```javascript +var Float64Array = require( '@stdlib/array/float64' ); +var ndarray2array = require( '@stdlib/ndarray/base/to-array' ); +var gsum = require( '@stdlib/blas/ext/base/ndarray/gsum' ); + +// Create data buffers: +var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); +var ybuf = new Float64Array( [ 0.0, 0.0, 0.0 ] ); + +// Define the array shapes: +var xsh = [ 1, 1, 1, 1, 1, 1, 1, 1, 3, 2, 2 ]; +var ysh = [ 1, 1, 1, 1, 1, 1, 1, 1, 3 ]; + +// Define the array strides: +var sx = [ 12, 12, 12, 12, 12, 12, 12, 12, 4, 2, 1 ]; +var sy = [ 3, 3, 3, 3, 3, 3, 3, 3, 1 ]; + +// Define the index offsets: +var ox = 0; +var oy = 0; + +// Create an input ndarray descriptor: +var x = { + 'dtype': 'float64', + 'data': xbuf, + 'shape': xsh, + 'strides': sx, + 'offset': ox, + 'order': 'row-major' +}; + +// Create an output ndarray descriptor: +var y = { + 'dtype': 'float64', + 'data': ybuf, + 'shape': ysh, + 'strides': sy, + 'offset': oy, + 'order': 'row-major' +}; + +// Initialize ndarray descriptors representing subarray views: +var views = [ + { + 'dtype': x.dtype, + 'data': x.data, + 'shape': [ 2, 2 ], + 'strides': [ 2, 1 ], + 'offset': x.offset, + 'order': x.order + } +]; + +// Define a reshape strategy: +function strategy( x ) { + return { + 'dtype': x.dtype, + 'data': x.data, + 'shape': [ 4 ], + 'strides': [ 1 ], + 'offset': x.offset, + 'order': x.order + }; +} + +// Perform a reduction: +kernel.kernel9d( gsum, [ x, y ], views, [ 12, 12, 12, 12, 12, 12, 12, 12, 4 ], strategy, {} ); + +var arr = ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ); +// returns [ [ [ [ [ [ [ [ [ 10.0, 26.0, 42.0 ] ] ] ] ] ] ] ] ] +``` + +The function has the following parameters: + +- **fcn**: wrapper for a one-dimensional strided array reduction function. +- **arrays**: array containing one input ndarray [descriptor][@stdlib/ndarray/base/descriptor] and one output ndarray [descriptor][@stdlib/ndarray/base/descriptor], followed by any additional ndarray arguments. +- **views**: initialized ndarray [descriptors][@stdlib/ndarray/base/descriptor] representing subarray views. +- **strides**: loop dimension strides for the input ndarray. Should have nine elements. +- **strategy**: input ndarray reshape strategy. +- **options**: function options which are passed through to `fcn`. + + + +#### kernel.kernel10d( fcn, arrays, views, strides, strategy, options ) + + + +Performs a reduction over an input ndarray and assigns results to a provided output ndarray. + + + +```javascript +var Float64Array = require( '@stdlib/array/float64' ); +var ndarray2array = require( '@stdlib/ndarray/base/to-array' ); +var gsum = require( '@stdlib/blas/ext/base/ndarray/gsum' ); + +// Create data buffers: +var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); +var ybuf = new Float64Array( [ 0.0, 0.0, 0.0 ] ); + +// Define the array shapes: +var xsh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 2, 2 ]; +var ysh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 3 ]; + +// Define the array strides: +var sx = [ 12, 12, 12, 12, 12, 12, 12, 12, 12, 4, 2, 1 ]; +var sy = [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 1 ]; + +// Define the index offsets: +var ox = 0; +var oy = 0; + +// Create an input ndarray descriptor: +var x = { + 'dtype': 'float64', + 'data': xbuf, + 'shape': xsh, + 'strides': sx, + 'offset': ox, + 'order': 'row-major' +}; + +// Create an output ndarray descriptor: +var y = { + 'dtype': 'float64', + 'data': ybuf, + 'shape': ysh, + 'strides': sy, + 'offset': oy, + 'order': 'row-major' +}; + +// Initialize ndarray descriptors representing subarray views: +var views = [ + { + 'dtype': x.dtype, + 'data': x.data, + 'shape': [ 2, 2 ], + 'strides': [ 2, 1 ], + 'offset': x.offset, + 'order': x.order + } +]; + +// Define a reshape strategy: +function strategy( x ) { + return { + 'dtype': x.dtype, + 'data': x.data, + 'shape': [ 4 ], + 'strides': [ 1 ], + 'offset': x.offset, + 'order': x.order + }; +} + +// Perform a reduction: +kernel.kernel10d( gsum, [ x, y ], views, [ 12, 12, 12, 12, 12, 12, 12, 12, 12, 4 ], strategy, {} ); + +var arr = ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ); +// returns [ [ [ [ [ [ [ [ [ [ 10.0, 26.0, 42.0 ] ] ] ] ] ] ] ] ] ] +``` + +The function has the following parameters: + +- **fcn**: wrapper for a one-dimensional strided array reduction function. +- **arrays**: array containing one input ndarray [descriptor][@stdlib/ndarray/base/descriptor] and one output ndarray [descriptor][@stdlib/ndarray/base/descriptor], followed by any additional ndarray arguments. +- **views**: initialized ndarray [descriptors][@stdlib/ndarray/base/descriptor] representing subarray views. +- **strides**: loop dimension strides for the input ndarray. Should have ten elements. +- **strategy**: input ndarray reshape strategy. +- **options**: function options which are passed through to `fcn`. + +
+ + + +
+ +## Notes + +- The output ndarray is expected to have the same dimensions as the non-reduced dimensions of the input ndarray. + +- Any additional ndarray arguments are expected to have the same leading dimensions as the non-reduced dimensions of the input ndarray. + +- When calling the reduction function, any additional ndarray arguments are provided as k-dimensional subarrays, where `k = M - N` with `M` being the number of dimensions in an ndarray argument and `N` being the number of non-reduced dimensions in the input ndarray. For example, if an input ndarray has three dimensions, the number of reduced dimensions is two, and an additional ndarray argument has one dimension, thus matching the number of non-reduced dimensions in the input ndarray, the reduction function is provided a zero-dimensional subarray as an additional ndarray argument. In the same scenario but where an additional ndarray argument has two dimensions, thus exceeding the number of non-reduced dimensions in the input ndarray, the reduction function is provided a one-dimensional subarray as an additional ndarray argument. + +- The reduction function is expected to have the following signature: + + ```text + fcn( arrays[, options] ) + ``` + + where + + - **arrays**: array containing a one-dimensional subarray of the input ndarray and any additional ndarray arguments as subarrays. + - **options**: function options (_optional_). + +- For very high-dimensional ndarrays which are non-contiguous, one should consider copying the underlying data to contiguous memory before performing a reduction in order to achieve better performance. + +
+ + + +
+ +## Examples + + + + + +```javascript +var Float64Array = require( '@stdlib/array/float64' ); +var ndarray2array = require( '@stdlib/ndarray/base/to-array' ); +var gsum = require( '@stdlib/blas/ext/base/ndarray/gsum' ); +var strategy = require( '@stdlib/ndarray/base/kernels/generic/unary-strided1d/strategy' ); +var kernel = require( '@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked' ); + +// Create data buffers: +var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); +var ybuf = new Float64Array( [ 0.0, 0.0, 0.0 ] ); + +// Define the array shapes: +var xsh = [ 1, 1, 1, 1, 3, 2, 2 ]; +var ysh = [ 1, 1, 1, 1, 3 ]; + +// Define the array strides: +var sx = [ 12, 12, 12, 12, 4, 2, 1 ]; +var sy = [ 3, 3, 3, 3, 1 ]; + +// Define the index offsets: +var ox = 0; +var oy = 0; + +// Create an input ndarray descriptor: +var x = { + 'dtype': 'float64', + 'data': xbuf, + 'shape': xsh, + 'strides': sx, + 'offset': ox, + 'order': 'row-major' +}; + +// Create an output ndarray descriptor: +var y = { + 'dtype': 'float64', + 'data': ybuf, + 'shape': ysh, + 'strides': sy, + 'offset': oy, + 'order': 'row-major' +}; + +// Initialize ndarray descriptors representing subarray views: +var views = [ + { + 'dtype': x.dtype, + 'data': x.data, + 'shape': [ 2, 2 ], + 'strides': [ 2, 1 ], + 'offset': x.offset, + 'order': x.order + } +]; + +// Resolve a reshape strategy for iterating over subarray views: +var strategyX = strategy( views[ 0 ] ).input; + +// Resolve a kernel: +var f = kernel( 5 ); + +// Perform a reduction: +f( gsum, [ x, y ], views, [ 12, 12, 12, 12, 4 ], strategyX, {} ); + +console.log( ndarray2array( x.data, x.shape, x.strides, x.offset, x.order ) ); +console.log( ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ) ); +``` + +
+ + + + + + + + + + + + diff --git a/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/docs/repl.txt b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/docs/repl.txt new file mode 100644 index 000000000000..e9b21b97f550 --- /dev/null +++ b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/docs/repl.txt @@ -0,0 +1,328 @@ + +{{alias}}( ndims ) + Returns a kernel for applying a one-dimensional strided array reduction + function to an input ndarray and assigning results to an output ndarray. + + The returned function has the following parameters: + + - fcn: wrapper for a one-dimensional strided array reduction function. + - arrays: array containing one input ndarray descriptor and one output + ndarray descriptor, followed by any additional ndarray arguments. + - views: initialized ndarray descriptors representing subarray views. + - strides: loop dimension strides for the input ndarray. + - strategy: input ndarray reshape strategy. + - options: function options which are passed through to `fcn`. + + If `ndims` is greater than the maximum supported number of loop dimensions, + the function returns `null`. + + Parameters + ---------- + ndims: integer + Number of loop dimensions. + + Returns + ------- + fcn: Function|null + Kernel function. + + Examples + -------- + > var f = {{alias}}( 2 ) + + + +{{alias}}.kernel0d( fcn, arr, views, sx, strategy, opts ) + Performs a reduction over a list of specified dimensions in an input ndarray + and assigns results to a provided output ndarray. + + The `views` and `sx` parameters are unused. Providing empty arrays for these + parameters is recommended in order to ensure a monomorphic API. + + Parameters + ---------- + fcn: Function + Wrapper for a one-dimensional strided array reduction function. + + arr: Array + Array containing one input ndarray descriptor and one output ndarray + descriptor, followed by any additional ndarray arguments. + + views: Array + Initialized ndarray descriptors representing subarray views. + + sx: Array + Loop dimension strides for the input ndarray. Should have zero elements. + + strategy: Function + Input ndarray reshape strategy. + + opts: Object + Function options which are passed through to `fcn`. + + +{{alias}}.kernel1d( fcn, arr, views, sx, strategy, opts ) + Performs a reduction over an input ndarray and assigns results to a provided + output ndarray. + + Parameters + ---------- + fcn: Function + Wrapper for a one-dimensional strided array reduction function. + + arr: Array + Array containing one input ndarray descriptor and one output ndarray + descriptor, followed by any additional ndarray arguments. + + views: Array + Initialized ndarray descriptors representing subarray views. + + sx: Array + Loop dimension strides for the input ndarray. Should have one element. + + strategy: Function + Input ndarray reshape strategy. + + opts: Object + Function options which are passed through to `fcn`. + + +{{alias}}.kernel2d( fcn, arr, views, sx, strategy, opts ) + Performs a reduction over an input ndarray and assigns results to a provided + output ndarray. + + Parameters + ---------- + fcn: Function + Wrapper for a one-dimensional strided array reduction function. + + arr: Array + Array containing one input ndarray descriptor and one output ndarray + descriptor, followed by any additional ndarray arguments. + + views: Array + Initialized ndarray descriptors representing subarray views. + + sx: Array + Loop dimension strides for the input ndarray. Should have two elements. + + strategy: Function + Input ndarray reshape strategy. + + opts: Object + Function options which are passed through to `fcn`. + + +{{alias}}.kernel3d( fcn, arr, views, sx, strategy, opts ) + Performs a reduction over an input ndarray and assigns results to a provided + output ndarray. + + Parameters + ---------- + fcn: Function + Wrapper for a one-dimensional strided array reduction function. + + arr: Array + Array containing one input ndarray descriptor and one output ndarray + descriptor, followed by any additional ndarray arguments. + + views: Array + Initialized ndarray descriptors representing subarray views. + + sx: Array + Loop dimension strides for the input ndarray. Should have three + elements. + + strategy: Function + Input ndarray reshape strategy. + + opts: Object + Function options which are passed through to `fcn`. + + +{{alias}}.kernel4d( fcn, arr, views, sx, strategy, opts ) + Performs a reduction over an input ndarray and assigns results to a provided + output ndarray. + + Parameters + ---------- + fcn: Function + Wrapper for a one-dimensional strided array reduction function. + + arr: Array + Array containing one input ndarray descriptor and one output ndarray + descriptor, followed by any additional ndarray arguments. + + views: Array + Initialized ndarray descriptors representing subarray views. + + sx: Array + Loop dimension strides for the input ndarray. Should have four elements. + + strategy: Function + Input ndarray reshape strategy. + + opts: Object + Function options which are passed through to `fcn`. + + +{{alias}}.kernel5d( fcn, arr, views, sx, strategy, opts ) + Performs a reduction over an input ndarray and assigns results to a provided + output ndarray. + + Parameters + ---------- + fcn: Function + Wrapper for a one-dimensional strided array reduction function. + + arr: Array + Array containing one input ndarray descriptor and one output ndarray + descriptor, followed by any additional ndarray arguments. + + views: Array + Initialized ndarray descriptors representing subarray views. + + sx: Array + Loop dimension strides for the input ndarray. Should have five elements. + + strategy: Function + Input ndarray reshape strategy. + + opts: Object + Function options which are passed through to `fcn`. + + +{{alias}}.kernel6d( fcn, arr, views, sx, strategy, opts ) + Performs a reduction over an input ndarray and assigns results to a provided + output ndarray. + + Parameters + ---------- + fcn: Function + Wrapper for a one-dimensional strided array reduction function. + + arr: Array + Array containing one input ndarray descriptor and one output ndarray + descriptor, followed by any additional ndarray arguments. + + views: Array + Initialized ndarray descriptors representing subarray views. + + sx: Array + Loop dimension strides for the input ndarray. Should have six elements. + + strategy: Function + Input ndarray reshape strategy. + + opts: Object + Function options which are passed through to `fcn`. + + +{{alias}}.kernel7d( fcn, arr, views, sx, strategy, opts ) + Performs a reduction over an input ndarray and assigns results to a provided + output ndarray. + + Parameters + ---------- + fcn: Function + Wrapper for a one-dimensional strided array reduction function. + + arr: Array + Array containing one input ndarray descriptor and one output ndarray + descriptor, followed by any additional ndarray arguments. + + views: Array + Initialized ndarray descriptors representing subarray views. + + sx: Array + Loop dimension strides for the input ndarray. Should have seven + elements. + + strategy: Function + Input ndarray reshape strategy. + + opts: Object + Function options which are passed through to `fcn`. + + +{{alias}}.kernel8d( fcn, arr, views, sx, strategy, opts ) + Performs a reduction over an input ndarray and assigns results to a provided + output ndarray. + + Parameters + ---------- + fcn: Function + Wrapper for a one-dimensional strided array reduction function. + + arr: Array + Array containing one input ndarray descriptor and one output ndarray + descriptor, followed by any additional ndarray arguments. + + views: Array + Initialized ndarray descriptors representing subarray views. + + sx: Array + Loop dimension strides for the input ndarray. Should have eight + elements. + + strategy: Function + Input ndarray reshape strategy. + + opts: Object + Function options which are passed through to `fcn`. + + +{{alias}}.kernel9d( fcn, arr, views, sx, strategy, opts ) + Performs a reduction over an input ndarray and assigns results to a provided + output ndarray. + + Parameters + ---------- + fcn: Function + Wrapper for a one-dimensional strided array reduction function. + + arr: Array + Array containing one input ndarray descriptor and one output ndarray + descriptor, followed by any additional ndarray arguments. + + views: Array + Initialized ndarray descriptors representing subarray views. + + sx: Array + Loop dimension strides for the input ndarray. Should have nine elements. + + strategy: Function + Input ndarray reshape strategy. + + opts: Object + Function options which are passed through to `fcn`. + + +{{alias}}.kernel10d( fcn, arr, views, sx, strategy, opts ) + Performs a reduction over an input ndarray and assigns results to a provided + output ndarray. + + Parameters + ---------- + fcn: Function + Wrapper for a one-dimensional strided array reduction function. + + arr: Array + Array containing one input ndarray descriptor and one output ndarray + descriptor, followed by any additional ndarray arguments. + + views: Array + Initialized ndarray descriptors representing subarray views. + + sx: Array + Loop dimension strides for the input ndarray. Should have ten elements. + + strategy: Function + Input ndarray reshape strategy. + + opts: Object + Function options which are passed through to `fcn`. + + See Also + -------- + diff --git a/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/examples/index.js b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/examples/index.js new file mode 100644 index 000000000000..7029e52af2d4 --- /dev/null +++ b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/examples/index.js @@ -0,0 +1,87 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 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. +*/ + +/* eslint-disable max-len */ + +'use strict'; + +var Float64Array = require( '@stdlib/array/float64' ); +var ndarray2array = require( '@stdlib/ndarray/base/to-array' ); +var gsum = require( '@stdlib/blas/ext/base/ndarray/gsum' ); +var strategy = require( '@stdlib/ndarray/base/kernels/generic/unary-strided1d/strategy' ); +var kernel = require( './../lib' ); + +// Create data buffers: +var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); +var ybuf = new Float64Array( [ 0.0, 0.0, 0.0 ] ); + +// Define the array shapes: +var xsh = [ 1, 1, 1, 1, 3, 2, 2 ]; +var ysh = [ 1, 1, 1, 1, 3 ]; + +// Define the array strides: +var sx = [ 12, 12, 12, 12, 4, 2, 1 ]; +var sy = [ 3, 3, 3, 3, 1 ]; + +// Define the index offsets: +var ox = 0; +var oy = 0; + +// Create an input ndarray descriptor: +var x = { + 'dtype': 'float64', + 'data': xbuf, + 'shape': xsh, + 'strides': sx, + 'offset': ox, + 'order': 'row-major' +}; + +// Create an output ndarray descriptor: +var y = { + 'dtype': 'float64', + 'data': ybuf, + 'shape': ysh, + 'strides': sy, + 'offset': oy, + 'order': 'row-major' +}; + +// Initialize ndarray descriptors representing subarray views: +var views = [ + { + 'dtype': x.dtype, + 'data': x.data, + 'shape': [ 2, 2 ], + 'strides': [ 2, 1 ], + 'offset': x.offset, + 'order': x.order + } +]; + +// Resolve a reshape strategy for iterating over subarray views: +var strategyX = strategy( views[ 0 ] ).input; + +// Resolve a kernel: +var f = kernel( 5 ); + +// Perform a reduction: +f( gsum, [ x, y ], views, [ 12, 12, 12, 12, 4 ], strategyX, {} ); + +console.log( ndarray2array( x.data, x.shape, x.strides, x.offset, x.order ) ); +console.log( ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ) ); diff --git a/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/0d.js b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/0d.js new file mode 100644 index 000000000000..c4fdbb969c87 --- /dev/null +++ b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/0d.js @@ -0,0 +1,111 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 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. +*/ + +'use strict'; + +// MODULES // + +var without = require( '@stdlib/array/base/without' ); + + +// MAIN // + +/** +* Performs a reduction over a list of specified dimensions in an input ndarray and assigns results to a provided output ndarray. +* +* ## Notes +* +* - The `views` and `strides` parameters are unused. Providing empty arrays for these parameters is recommended in order to ensure a monomorphic API. +* +* @private +* @param {Function} fcn - wrapper for a one-dimensional strided array reduction function +* @param {Array} arrays - ndarray descriptors +* @param {Array} views - initialized ndarray descriptors representing subarray views +* @param {Array} strides - loop dimension strides for the input ndarray +* @param {Function} strategy - input ndarray reshape strategy +* @param {Options} opts - function options +* @returns {void} +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* var ndarray2array = require( '@stdlib/ndarray/base/to-array' ); +* var gsum = require( '@stdlib/blas/ext/base/ndarray/gsum' ); +* +* // Create data buffers: +* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); +* var ybuf = new Float64Array( [ 0.0 ] ); +* +* // Define the array shapes: +* var xsh = [ 2, 2 ]; +* var ysh = []; +* +* // Define the array strides: +* var sx = [ 2, 1 ]; +* var sy = [ 0 ]; +* +* // Define the index offsets: +* var ox = 0; +* var oy = 0; +* +* // Create an input ndarray descriptor: +* var x = { +* 'dtype': 'float64', +* 'data': xbuf, +* 'shape': xsh, +* 'strides': sx, +* 'offset': ox, +* 'order': 'row-major' +* }; +* +* // Create an output ndarray descriptor: +* var y = { +* 'dtype': 'float64', +* 'data': ybuf, +* 'shape': ysh, +* 'strides': sy, +* 'offset': oy, +* 'order': 'row-major' +* }; +* +* // Define a reshape strategy: +* function strategy( x ) { +* return { +* 'dtype': x.dtype, +* 'data': x.data, +* 'shape': [ 4 ], +* 'strides': [ 1 ], +* 'offset': x.offset, +* 'order': x.order +* }; +* } +* +* // Perform a reduction: +* kernel( gsum, [ x, y ], [], [], strategy, {} ); +* +* var v = y.data; +* // returns [ 10.0 ] +*/ +function kernel( fcn, arrays, views, strides, strategy, opts ) { + arrays[ 0 ] = strategy( arrays[ 0 ] ); + arrays[ 1 ].data[ arrays[ 1 ].offset ] = fcn( without( arrays, 1 ), opts ); +} + + +// EXPORTS // + +module.exports = kernel; diff --git a/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/10d.js b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/10d.js new file mode 100644 index 000000000000..b6b689b2afc7 --- /dev/null +++ b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/10d.js @@ -0,0 +1,282 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 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. +*/ + +/* eslint-disable max-depth */ + +'use strict'; + +// MODULES // + +var isRowMajor = require( '@stdlib/ndarray/base/assert/is-row-major' ); +var copyIndexed = require( '@stdlib/array/base/copy-indexed' ); +var incrementOffsets = require( '@stdlib/ndarray/base/kernels/utils/increment-offsets' ); +var offsets = require( '@stdlib/ndarray/base/offsets' ); +var setViewOffsets = require( './set_view_offsets.js' ); + + +// MAIN // + +/** +* Performs a reduction over an input ndarray and assigns results to a provided output ndarray. +* +* @private +* @param {Function} fcn - wrapper for a one-dimensional strided array reduction function +* @param {Array} arrays - ndarray descriptors +* @param {Array} views - initialized ndarray descriptors representing subarray views +* @param {Array} strides - loop dimension strides for the input ndarray +* @param {Function} strategy - input ndarray reshape strategy +* @param {Options} opts - function options +* @returns {void} +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* var ndarray2array = require( '@stdlib/ndarray/base/to-array' ); +* var gsum = require( '@stdlib/blas/ext/base/ndarray/gsum' ); +* +* // Create data buffers: +* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); +* var ybuf = new Float64Array( [ 0.0, 0.0, 0.0 ] ); +* +* // Define the array shapes: +* var xsh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 2, 2 ]; +* var ysh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 3 ]; +* +* // Define the array strides: +* var sx = [ 12, 12, 12, 12, 12, 12, 12, 12, 12, 4, 2, 1 ]; +* var sy = [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 1 ]; +* +* // Define the index offsets: +* var ox = 0; +* var oy = 0; +* +* // Create an input ndarray descriptor: +* var x = { +* 'dtype': 'float64', +* 'data': xbuf, +* 'shape': xsh, +* 'strides': sx, +* 'offset': ox, +* 'order': 'row-major' +* }; +* +* // Create an output ndarray descriptor: +* var y = { +* 'dtype': 'float64', +* 'data': ybuf, +* 'shape': ysh, +* 'strides': sy, +* 'offset': oy, +* 'order': 'row-major' +* }; +* +* // Initialize ndarray descriptors representing subarray views: +* var views = [ +* { +* 'dtype': x.dtype, +* 'data': x.data, +* 'shape': [ 2, 2 ], +* 'strides': [ 2, 1 ], +* 'offset': x.offset, +* 'order': x.order +* } +* ]; +* +* // Define a reshape strategy: +* function strategy( x ) { +* return { +* 'dtype': x.dtype, +* 'data': x.data, +* 'shape': [ 4 ], +* 'strides': [ 1 ], +* 'offset': x.offset, +* 'order': x.order +* }; +* } +* +* // Perform a reduction: +* kernel( gsum, [ x, y ], views, [ 12, 12, 12, 12, 12, 12, 12, 12, 12, 4 ], strategy, {} ); +* +* var arr = ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ); +* // returns [ [ [ [ [ [ [ [ [ [ 10.0, 26.0, 42.0 ] ] ] ] ] ] ] ] ] ] +*/ +function kernel( fcn, arrays, views, strides, strategy, opts ) { // eslint-disable-line max-statements + var ybuf; + var dv0; + var dv1; + var dv2; + var dv3; + var dv4; + var dv5; + var dv6; + var dv7; + var dv8; + var dv9; + var sh; + var S0; + var S1; + var S2; + var S3; + var S4; + var S5; + var S6; + var S7; + var S8; + var S9; + var sv; + var iv; + var i0; + var i1; + var i2; + var i3; + var i4; + var i5; + var i6; + var i7; + var i8; + var i9; + var y; + var v; + var i; + + // Note on variable naming convention: S#, dv#, i# where # corresponds to the loop number, with `0` being the innermost loop... + + // Resolve the output ndarray and associated shape: + y = arrays[ 1 ]; + sh = y.shape; + + // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... + if ( isRowMajor( strides ) ) { + // For row-major ndarrays, the last dimensions have the fastest changing indices... + S0 = sh[ 9 ]; + S1 = sh[ 8 ]; + S2 = sh[ 7 ]; + S3 = sh[ 6 ]; + S4 = sh[ 5 ]; + S5 = sh[ 4 ]; + S6 = sh[ 3 ]; + S7 = sh[ 2 ]; + S8 = sh[ 1 ]; + S9 = sh[ 0 ]; + dv0 = [ strides[9] ]; // offset increment for innermost loop + dv1 = [ strides[8] - ( S0*strides[9] ) ]; + dv2 = [ strides[7] - ( S1*strides[8] ) ]; + dv3 = [ strides[6] - ( S2*strides[7] ) ]; + dv4 = [ strides[5] - ( S3*strides[6] ) ]; + dv5 = [ strides[4] - ( S4*strides[5] ) ]; + dv6 = [ strides[3] - ( S5*strides[4] ) ]; + dv7 = [ strides[2] - ( S6*strides[3] ) ]; + dv8 = [ strides[1] - ( S7*strides[2] ) ]; + dv9 = [ strides[0] - ( S8*strides[1] ) ]; // offset increment for outermost loop + for ( i = 1; i < arrays.length; i++ ) { + sv = arrays[ i ].strides; + dv0.push( sv[9] ); + dv1.push( sv[8] - ( S0*sv[9] ) ); + dv2.push( sv[7] - ( S1*sv[8] ) ); + dv3.push( sv[6] - ( S2*sv[7] ) ); + dv4.push( sv[5] - ( S3*sv[6] ) ); + dv5.push( sv[4] - ( S4*sv[5] ) ); + dv6.push( sv[3] - ( S5*sv[4] ) ); + dv7.push( sv[2] - ( S6*sv[3] ) ); + dv8.push( sv[1] - ( S7*sv[2] ) ); + dv9.push( sv[0] - ( S8*sv[1] ) ); + } + } else { // order === 'column-major' + // For column-major ndarrays, the first dimensions have the fastest changing indices... + S0 = sh[ 0 ]; + S1 = sh[ 1 ]; + S2 = sh[ 2 ]; + S3 = sh[ 3 ]; + S4 = sh[ 4 ]; + S5 = sh[ 5 ]; + S6 = sh[ 6 ]; + S7 = sh[ 7 ]; + S8 = sh[ 8 ]; + S9 = sh[ 9 ]; + dv0 = [ strides[0] ]; // offset increment for innermost loop + dv1 = [ strides[1] - ( S0*strides[0] ) ]; + dv2 = [ strides[2] - ( S1*strides[1] ) ]; + dv3 = [ strides[3] - ( S2*strides[2] ) ]; + dv4 = [ strides[4] - ( S3*strides[3] ) ]; + dv5 = [ strides[5] - ( S4*strides[4] ) ]; + dv6 = [ strides[6] - ( S5*strides[5] ) ]; + dv7 = [ strides[7] - ( S6*strides[6] ) ]; + dv8 = [ strides[8] - ( S7*strides[7] ) ]; + dv9 = [ strides[9] - ( S8*strides[8] ) ]; // offset increment for outermost loop + for ( i = 1; i < arrays.length; i++ ) { + sv = arrays[ i ].strides; + dv0.push( sv[0] ); + dv1.push( sv[1] - ( S0*sv[0] ) ); + dv2.push( sv[2] - ( S1*sv[1] ) ); + dv3.push( sv[3] - ( S2*sv[2] ) ); + dv4.push( sv[4] - ( S3*sv[3] ) ); + dv5.push( sv[5] - ( S4*sv[4] ) ); + dv6.push( sv[6] - ( S5*sv[5] ) ); + dv7.push( sv[7] - ( S6*sv[6] ) ); + dv8.push( sv[8] - ( S7*sv[7] ) ); + dv9.push( sv[9] - ( S8*sv[8] ) ); + } + } + // Resolve a list of pointers to the first indexed elements in the respective ndarrays: + iv = offsets( arrays ); + + // Shallow copy the list of views to an internal array so that we can update with reshaped views without impacting the original list of views: + v = copyIndexed( views ); + + // Cache a reference to the output ndarray buffer: + ybuf = y.data; + + // Iterate over the non-reduced ndarray dimensions... + for ( i9 = 0; i9 < S9; i9++ ) { + for ( i8 = 0; i8 < S8; i8++ ) { + for ( i7 = 0; i7 < S7; i7++ ) { + for ( i6 = 0; i6 < S6; i6++ ) { + for ( i5 = 0; i5 < S5; i5++ ) { + for ( i4 = 0; i4 < S4; i4++ ) { + for ( i3 = 0; i3 < S3; i3++ ) { + for ( i2 = 0; i2 < S2; i2++ ) { + for ( i1 = 0; i1 < S1; i1++ ) { + for ( i0 = 0; i0 < S0; i0++ ) { + setViewOffsets( views, iv ); + v[ 0 ] = strategy( views[ 0 ] ); + ybuf[ iv[1] ] = fcn( v, opts ); + incrementOffsets( iv, dv0 ); + } + incrementOffsets( iv, dv1 ); + } + incrementOffsets( iv, dv2 ); + } + incrementOffsets( iv, dv3 ); + } + incrementOffsets( iv, dv4 ); + } + incrementOffsets( iv, dv5 ); + } + incrementOffsets( iv, dv6 ); + } + incrementOffsets( iv, dv7 ); + } + incrementOffsets( iv, dv8 ); + } + incrementOffsets( iv, dv9 ); + } +} + + +// EXPORTS // + +module.exports = kernel; diff --git a/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/1d.js b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/1d.js new file mode 100644 index 000000000000..4c777ae58010 --- /dev/null +++ b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/1d.js @@ -0,0 +1,158 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 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. +*/ + +'use strict'; + +// MODULES // + +var copyIndexed = require( '@stdlib/array/base/copy-indexed' ); +var incrementOffsets = require( '@stdlib/ndarray/base/kernels/utils/increment-offsets' ); +var offsets = require( '@stdlib/ndarray/base/offsets' ); +var setViewOffsets = require( './set_view_offsets.js' ); + + +// MAIN // + +/** +* Performs a reduction over an input ndarray and assigns results to a provided output ndarray. +* +* @private +* @param {Function} fcn - wrapper for a one-dimensional strided array reduction function +* @param {Array} arrays - ndarray descriptors +* @param {Array} views - initialized ndarray descriptors representing subarray views +* @param {Array} strides - loop dimension strides for the input ndarray +* @param {Function} strategy - input ndarray reshape strategy +* @param {Options} opts - function options +* @returns {void} +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* var ndarray2array = require( '@stdlib/ndarray/base/to-array' ); +* var gsum = require( '@stdlib/blas/ext/base/ndarray/gsum' ); +* +* // Create data buffers: +* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); +* var ybuf = new Float64Array( [ 0.0, 0.0, 0.0 ] ); +* +* // Define the array shapes: +* var xsh = [ 3, 2, 2 ]; +* var ysh = [ 3 ]; +* +* // Define the array strides: +* var sx = [ 4, 2, 1 ]; +* var sy = [ 1 ]; +* +* // Define the index offsets: +* var ox = 0; +* var oy = 0; +* +* // Create an input ndarray descriptor: +* var x = { +* 'dtype': 'float64', +* 'data': xbuf, +* 'shape': xsh, +* 'strides': sx, +* 'offset': ox, +* 'order': 'row-major' +* }; +* +* // Create an output ndarray descriptor: +* var y = { +* 'dtype': 'float64', +* 'data': ybuf, +* 'shape': ysh, +* 'strides': sy, +* 'offset': oy, +* 'order': 'row-major' +* }; +* +* // Initialize ndarray descriptors representing subarray views: +* var views = [ +* { +* 'dtype': x.dtype, +* 'data': x.data, +* 'shape': [ 2, 2 ], +* 'strides': [ 2, 1 ], +* 'offset': x.offset, +* 'order': x.order +* } +* ]; +* +* // Define a reshape strategy: +* function strategy( x ) { +* return { +* 'dtype': x.dtype, +* 'data': x.data, +* 'shape': [ 4 ], +* 'strides': [ 1 ], +* 'offset': x.offset, +* 'order': x.order +* }; +* } +* +* // Perform a reduction: +* kernel( gsum, [ x, y ], views, [ 4 ], strategy, {} ); +* +* var arr = ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ); +* // returns [ 10.0, 26.0, 42.0 ] +*/ +function kernel( fcn, arrays, views, strides, strategy, opts ) { + var ybuf; + var dv0; + var sh; + var S0; + var iv; + var i0; + var y; + var v; + var i; + + // Note on variable naming convention: S#, dv#, i# where # corresponds to the loop number, with `0` being the innermost loop... + + // Resolve the output ndarray and associated shape: + y = arrays[ 1 ]; + sh = y.shape; + + // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... + S0 = sh[ 0 ]; + dv0 = [ strides[0] ]; + for ( i = 1; i < arrays.length; i++ ) { + dv0.push( arrays[i].strides[0] ); + } + // Resolve a list of pointers to the first indexed elements in the respective ndarrays: + iv = offsets( arrays ); + + // Shallow copy the list of views to an internal array so that we can update with reshaped views without impacting the original list of views: + v = copyIndexed( views ); + + // Cache a reference to the output ndarray buffer: + ybuf = y.data; + + // Iterate over the non-reduced ndarray dimensions... + for ( i0 = 0; i0 < S0; i0++ ) { + setViewOffsets( views, iv ); + v[ 0 ] = strategy( views[ 0 ] ); + ybuf[ iv[1] ] = fcn( v, opts ); + incrementOffsets( iv, dv0 ); + } +} + + +// EXPORTS // + +module.exports = kernel; diff --git a/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/2d.js b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/2d.js new file mode 100644 index 000000000000..597967bf1ea7 --- /dev/null +++ b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/2d.js @@ -0,0 +1,184 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 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. +*/ + +'use strict'; + +// MODULES // + +var isRowMajor = require( '@stdlib/ndarray/base/assert/is-row-major' ); +var copyIndexed = require( '@stdlib/array/base/copy-indexed' ); +var incrementOffsets = require( '@stdlib/ndarray/base/kernels/utils/increment-offsets' ); +var offsets = require( '@stdlib/ndarray/base/offsets' ); +var setViewOffsets = require( './set_view_offsets.js' ); + + +// MAIN // + +/** +* Performs a reduction over an input ndarray and assigns results to a provided output ndarray. +* +* @private +* @param {Function} fcn - wrapper for a one-dimensional strided array reduction function +* @param {Array} arrays - ndarray descriptors +* @param {Array} views - initialized ndarray descriptors representing subarray views +* @param {Array} strides - loop dimension strides for the input ndarray +* @param {Function} strategy - input ndarray reshape strategy +* @param {Options} opts - function options +* @returns {void} +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* var ndarray2array = require( '@stdlib/ndarray/base/to-array' ); +* var gsum = require( '@stdlib/blas/ext/base/ndarray/gsum' ); +* +* // Create data buffers: +* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); +* var ybuf = new Float64Array( [ 0.0, 0.0, 0.0 ] ); +* +* // Define the array shapes: +* var xsh = [ 1, 3, 2, 2 ]; +* var ysh = [ 1, 3 ]; +* +* // Define the array strides: +* var sx = [ 12, 4, 2, 1 ]; +* var sy = [ 3, 1 ]; +* +* // Define the index offsets: +* var ox = 0; +* var oy = 0; +* +* // Create an input ndarray descriptor: +* var x = { +* 'dtype': 'float64', +* 'data': xbuf, +* 'shape': xsh, +* 'strides': sx, +* 'offset': ox, +* 'order': 'row-major' +* }; +* +* // Create an output ndarray descriptor: +* var y = { +* 'dtype': 'float64', +* 'data': ybuf, +* 'shape': ysh, +* 'strides': sy, +* 'offset': oy, +* 'order': 'row-major' +* }; +* +* // Initialize ndarray descriptors representing subarray views: +* var views = [ +* { +* 'dtype': x.dtype, +* 'data': x.data, +* 'shape': [ 2, 2 ], +* 'strides': [ 2, 1 ], +* 'offset': x.offset, +* 'order': x.order +* } +* ]; +* +* // Define a reshape strategy: +* function strategy( x ) { +* return { +* 'dtype': x.dtype, +* 'data': x.data, +* 'shape': [ 4 ], +* 'strides': [ 1 ], +* 'offset': x.offset, +* 'order': x.order +* }; +* } +* +* // Perform a reduction: +* kernel( gsum, [ x, y ], views, [ 12, 4 ], strategy, {} ); +* +* var arr = ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ); +* // returns [ [ 10.0, 26.0, 42.0 ] ] +*/ +function kernel( fcn, arrays, views, strides, strategy, opts ) { + var ybuf; + var dv0; + var dv1; + var sh; + var S0; + var S1; + var sv; + var iv; + var i0; + var i1; + var y; + var v; + var i; + + // Note on variable naming convention: S#, dv#, i# where # corresponds to the loop number, with `0` being the innermost loop... + + // Resolve the output ndarray and associated shape: + y = arrays[ 1 ]; + sh = y.shape; + + // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... + if ( isRowMajor( strides ) ) { + // For row-major ndarrays, the last dimensions have the fastest changing indices... + S0 = sh[ 1 ]; + S1 = sh[ 0 ]; + dv0 = [ strides[1] ]; // offset increment for innermost loop + dv1 = [ strides[0] - ( S0*strides[1] ) ]; // offset increment for outermost loop + for ( i = 1; i < arrays.length; i++ ) { + sv = arrays[ i ].strides; + dv0.push( sv[1] ); + dv1.push( sv[0] - ( S0*sv[1] ) ); + } + } else { // order === 'column-major' + // For column-major ndarrays, the first dimensions have the fastest changing indices... + S0 = sh[ 0 ]; + S1 = sh[ 1 ]; + dv0 = [ strides[0] ]; // offset increment for innermost loop + dv1 = [ strides[1] - ( S0*strides[0] ) ]; // offset increment for outermost loop + for ( i = 1; i < arrays.length; i++ ) { + sv = arrays[ i ].strides; + dv0.push( sv[0] ); + dv1.push( sv[1] - ( S0*sv[0] ) ); + } + } + // Resolve a list of pointers to the first indexed elements in the respective ndarrays: + iv = offsets( arrays ); + + // Shallow copy the list of views to an internal array so that we can update with reshaped views without impacting the original list of views: + v = copyIndexed( views ); + + // Cache a reference to the output ndarray buffer: + ybuf = y.data; + + // Iterate over the non-reduced ndarray dimensions... + for ( i1 = 0; i1 < S1; i1++ ) { + for ( i0 = 0; i0 < S0; i0++ ) { + setViewOffsets( views, iv ); + v[ 0 ] = strategy( views[ 0 ] ); + ybuf[ iv[1] ] = fcn( v, opts ); + incrementOffsets( iv, dv0 ); + } + incrementOffsets( iv, dv1 ); + } +} + + +// EXPORTS // + +module.exports = kernel; diff --git a/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/3d.js b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/3d.js new file mode 100644 index 000000000000..3f16969f88ea --- /dev/null +++ b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/3d.js @@ -0,0 +1,196 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 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. +*/ + +'use strict'; + +// MODULES // + +var isRowMajor = require( '@stdlib/ndarray/base/assert/is-row-major' ); +var copyIndexed = require( '@stdlib/array/base/copy-indexed' ); +var incrementOffsets = require( '@stdlib/ndarray/base/kernels/utils/increment-offsets' ); +var offsets = require( '@stdlib/ndarray/base/offsets' ); +var setViewOffsets = require( './set_view_offsets.js' ); + + +// MAIN // + +/** +* Performs a reduction over an input ndarray and assigns results to a provided output ndarray. +* +* @private +* @param {Function} fcn - wrapper for a one-dimensional strided array reduction function +* @param {Array} arrays - ndarray descriptors +* @param {Array} views - initialized ndarray descriptors representing subarray views +* @param {Array} strides - loop dimension strides for the input ndarray +* @param {Function} strategy - input ndarray reshape strategy +* @param {Options} opts - function options +* @returns {void} +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* var ndarray2array = require( '@stdlib/ndarray/base/to-array' ); +* var gsum = require( '@stdlib/blas/ext/base/ndarray/gsum' ); +* +* // Create data buffers: +* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); +* var ybuf = new Float64Array( [ 0.0, 0.0, 0.0 ] ); +* +* // Define the array shapes: +* var xsh = [ 1, 1, 3, 2, 2 ]; +* var ysh = [ 1, 1, 3 ]; +* +* // Define the array strides: +* var sx = [ 12, 12, 4, 2, 1 ]; +* var sy = [ 3, 3, 1 ]; +* +* // Define the index offsets: +* var ox = 0; +* var oy = 0; +* +* // Create an input ndarray descriptor: +* var x = { +* 'dtype': 'float64', +* 'data': xbuf, +* 'shape': xsh, +* 'strides': sx, +* 'offset': ox, +* 'order': 'row-major' +* }; +* +* // Create an output ndarray descriptor: +* var y = { +* 'dtype': 'float64', +* 'data': ybuf, +* 'shape': ysh, +* 'strides': sy, +* 'offset': oy, +* 'order': 'row-major' +* }; +* +* // Initialize ndarray descriptors representing subarray views: +* var views = [ +* { +* 'dtype': x.dtype, +* 'data': x.data, +* 'shape': [ 2, 2 ], +* 'strides': [ 2, 1 ], +* 'offset': x.offset, +* 'order': x.order +* } +* ]; +* +* // Define a reshape strategy: +* function strategy( x ) { +* return { +* 'dtype': x.dtype, +* 'data': x.data, +* 'shape': [ 4 ], +* 'strides': [ 1 ], +* 'offset': x.offset, +* 'order': x.order +* }; +* } +* +* // Perform a reduction: +* kernel( gsum, [ x, y ], views, [ 12, 12, 4 ], strategy, {} ); +* +* var arr = ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ); +* // returns [ [ [ 10.0, 26.0, 42.0 ] ] ] +*/ +function kernel( fcn, arrays, views, strides, strategy, opts ) { + var ybuf; + var dv0; + var dv1; + var dv2; + var sh; + var S0; + var S1; + var S2; + var sv; + var iv; + var i0; + var i1; + var i2; + var y; + var v; + var i; + + // Note on variable naming convention: S#, dv#, i# where # corresponds to the loop number, with `0` being the innermost loop... + + // Resolve the output ndarray and associated shape: + y = arrays[ 1 ]; + sh = y.shape; + + // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... + if ( isRowMajor( strides ) ) { + // For row-major ndarrays, the last dimensions have the fastest changing indices... + S0 = sh[ 2 ]; + S1 = sh[ 1 ]; + S2 = sh[ 0 ]; + dv0 = [ strides[2] ]; // offset increment for innermost loop + dv1 = [ strides[1] - ( S0*strides[2] ) ]; + dv2 = [ strides[0] - ( S1*strides[1] ) ]; // offset increment for outermost loop + for ( i = 1; i < arrays.length; i++ ) { + sv = arrays[ i ].strides; + dv0.push( sv[2] ); + dv1.push( sv[1] - ( S0*sv[2] ) ); + dv2.push( sv[0] - ( S1*sv[1] ) ); + } + } else { // order === 'column-major' + // For column-major ndarrays, the first dimensions have the fastest changing indices... + S0 = sh[ 0 ]; + S1 = sh[ 1 ]; + S2 = sh[ 2 ]; + dv0 = [ strides[0] ]; // offset increment for innermost loop + dv1 = [ strides[1] - ( S0*strides[0] ) ]; + dv2 = [ strides[2] - ( S1*strides[1] ) ]; // offset increment for outermost loop + for ( i = 1; i < arrays.length; i++ ) { + sv = arrays[ i ].strides; + dv0.push( sv[0] ); + dv1.push( sv[1] - ( S0*sv[0] ) ); + dv2.push( sv[2] - ( S1*sv[1] ) ); + } + } + // Resolve a list of pointers to the first indexed elements in the respective ndarrays: + iv = offsets( arrays ); + + // Shallow copy the list of views to an internal array so that we can update with reshaped views without impacting the original list of views: + v = copyIndexed( views ); + + // Cache a reference to the output ndarray buffer: + ybuf = y.data; + + // Iterate over the non-reduced ndarray dimensions... + for ( i2 = 0; i2 < S2; i2++ ) { + for ( i1 = 0; i1 < S1; i1++ ) { + for ( i0 = 0; i0 < S0; i0++ ) { + setViewOffsets( views, iv ); + v[ 0 ] = strategy( views[ 0 ] ); + ybuf[ iv[1] ] = fcn( v, opts ); + incrementOffsets( iv, dv0 ); + } + incrementOffsets( iv, dv1 ); + } + incrementOffsets( iv, dv2 ); + } +} + + +// EXPORTS // + +module.exports = kernel; diff --git a/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/4d.js b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/4d.js new file mode 100644 index 000000000000..a6defa4507fd --- /dev/null +++ b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/4d.js @@ -0,0 +1,208 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 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. +*/ + +'use strict'; + +// MODULES // + +var isRowMajor = require( '@stdlib/ndarray/base/assert/is-row-major' ); +var copyIndexed = require( '@stdlib/array/base/copy-indexed' ); +var incrementOffsets = require( '@stdlib/ndarray/base/kernels/utils/increment-offsets' ); +var offsets = require( '@stdlib/ndarray/base/offsets' ); +var setViewOffsets = require( './set_view_offsets.js' ); + + +// MAIN // + +/** +* Performs a reduction over an input ndarray and assigns results to a provided output ndarray. +* +* @private +* @param {Function} fcn - wrapper for a one-dimensional strided array reduction function +* @param {Array} arrays - ndarray descriptors +* @param {Array} views - initialized ndarray descriptors representing subarray views +* @param {Array} strides - loop dimension strides for the input ndarray +* @param {Function} strategy - input ndarray reshape strategy +* @param {Options} opts - function options +* @returns {void} +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* var ndarray2array = require( '@stdlib/ndarray/base/to-array' ); +* var gsum = require( '@stdlib/blas/ext/base/ndarray/gsum' ); +* +* // Create data buffers: +* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); +* var ybuf = new Float64Array( [ 0.0, 0.0, 0.0 ] ); +* +* // Define the array shapes: +* var xsh = [ 1, 1, 1, 3, 2, 2 ]; +* var ysh = [ 1, 1, 1, 3 ]; +* +* // Define the array strides: +* var sx = [ 12, 12, 12, 4, 2, 1 ]; +* var sy = [ 3, 3, 3, 1 ]; +* +* // Define the index offsets: +* var ox = 0; +* var oy = 0; +* +* // Create an input ndarray descriptor: +* var x = { +* 'dtype': 'float64', +* 'data': xbuf, +* 'shape': xsh, +* 'strides': sx, +* 'offset': ox, +* 'order': 'row-major' +* }; +* +* // Create an output ndarray descriptor: +* var y = { +* 'dtype': 'float64', +* 'data': ybuf, +* 'shape': ysh, +* 'strides': sy, +* 'offset': oy, +* 'order': 'row-major' +* }; +* +* // Initialize ndarray descriptors representing subarray views: +* var views = [ +* { +* 'dtype': x.dtype, +* 'data': x.data, +* 'shape': [ 2, 2 ], +* 'strides': [ 2, 1 ], +* 'offset': x.offset, +* 'order': x.order +* } +* ]; +* +* // Define a reshape strategy: +* function strategy( x ) { +* return { +* 'dtype': x.dtype, +* 'data': x.data, +* 'shape': [ 4 ], +* 'strides': [ 1 ], +* 'offset': x.offset, +* 'order': x.order +* }; +* } +* +* // Perform a reduction: +* kernel( gsum, [ x, y ], views, [ 12, 12, 12, 4 ], strategy, {} ); +* +* var arr = ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ); +* // returns [ [ [ [ 10.0, 26.0, 42.0 ] ] ] ] +*/ +function kernel( fcn, arrays, views, strides, strategy, opts ) { + var ybuf; + var dv0; + var dv1; + var dv2; + var dv3; + var sh; + var S0; + var S1; + var S2; + var S3; + var sv; + var iv; + var i0; + var i1; + var i2; + var i3; + var y; + var v; + var i; + + // Note on variable naming convention: S#, dv#, i# where # corresponds to the loop number, with `0` being the innermost loop... + + // Resolve the output ndarray and associated shape: + y = arrays[ 1 ]; + sh = y.shape; + + // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... + if ( isRowMajor( strides ) ) { + // For row-major ndarrays, the last dimensions have the fastest changing indices... + S0 = sh[ 3 ]; + S1 = sh[ 2 ]; + S2 = sh[ 1 ]; + S3 = sh[ 0 ]; + dv0 = [ strides[3] ]; // offset increment for innermost loop + dv1 = [ strides[2] - ( S0*strides[3] ) ]; + dv2 = [ strides[1] - ( S1*strides[2] ) ]; + dv3 = [ strides[0] - ( S2*strides[1] ) ]; // offset increment for outermost loop + for ( i = 1; i < arrays.length; i++ ) { + sv = arrays[ i ].strides; + dv0.push( sv[3] ); + dv1.push( sv[2] - ( S0*sv[3] ) ); + dv2.push( sv[1] - ( S1*sv[2] ) ); + dv3.push( sv[0] - ( S2*sv[1] ) ); + } + } else { // order === 'column-major' + // For column-major ndarrays, the first dimensions have the fastest changing indices... + S0 = sh[ 0 ]; + S1 = sh[ 1 ]; + S2 = sh[ 2 ]; + S3 = sh[ 3 ]; + dv0 = [ strides[0] ]; // offset increment for innermost loop + dv1 = [ strides[1] - ( S0*strides[0] ) ]; + dv2 = [ strides[2] - ( S1*strides[1] ) ]; + dv3 = [ strides[3] - ( S2*strides[2] ) ]; // offset increment for outermost loop + for ( i = 1; i < arrays.length; i++ ) { + sv = arrays[ i ].strides; + dv0.push( sv[0] ); + dv1.push( sv[1] - ( S0*sv[0] ) ); + dv2.push( sv[2] - ( S1*sv[1] ) ); + dv3.push( sv[3] - ( S2*sv[2] ) ); + } + } + // Resolve a list of pointers to the first indexed elements in the respective ndarrays: + iv = offsets( arrays ); + + // Shallow copy the list of views to an internal array so that we can update with reshaped views without impacting the original list of views: + v = copyIndexed( views ); + + // Cache a reference to the output ndarray buffer: + ybuf = y.data; + + // Iterate over the non-reduced ndarray dimensions... + for ( i3 = 0; i3 < S3; i3++ ) { + for ( i2 = 0; i2 < S2; i2++ ) { + for ( i1 = 0; i1 < S1; i1++ ) { + for ( i0 = 0; i0 < S0; i0++ ) { + setViewOffsets( views, iv ); + v[ 0 ] = strategy( views[ 0 ] ); + ybuf[ iv[1] ] = fcn( v, opts ); + incrementOffsets( iv, dv0 ); + } + incrementOffsets( iv, dv1 ); + } + incrementOffsets( iv, dv2 ); + } + incrementOffsets( iv, dv3 ); + } +} + + +// EXPORTS // + +module.exports = kernel; diff --git a/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/5d.js b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/5d.js new file mode 100644 index 000000000000..4f9c74b40eeb --- /dev/null +++ b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/5d.js @@ -0,0 +1,220 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 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. +*/ + +'use strict'; + +// MODULES // + +var isRowMajor = require( '@stdlib/ndarray/base/assert/is-row-major' ); +var copyIndexed = require( '@stdlib/array/base/copy-indexed' ); +var incrementOffsets = require( '@stdlib/ndarray/base/kernels/utils/increment-offsets' ); +var offsets = require( '@stdlib/ndarray/base/offsets' ); +var setViewOffsets = require( './set_view_offsets.js' ); + + +// MAIN // + +/** +* Performs a reduction over an input ndarray and assigns results to a provided output ndarray. +* +* @private +* @param {Function} fcn - wrapper for a one-dimensional strided array reduction function +* @param {Array} arrays - ndarray descriptors +* @param {Array} views - initialized ndarray descriptors representing subarray views +* @param {Array} strides - loop dimension strides for the input ndarray +* @param {Function} strategy - input ndarray reshape strategy +* @param {Options} opts - function options +* @returns {void} +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* var ndarray2array = require( '@stdlib/ndarray/base/to-array' ); +* var gsum = require( '@stdlib/blas/ext/base/ndarray/gsum' ); +* +* // Create data buffers: +* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); +* var ybuf = new Float64Array( [ 0.0, 0.0, 0.0 ] ); +* +* // Define the array shapes: +* var xsh = [ 1, 1, 1, 1, 3, 2, 2 ]; +* var ysh = [ 1, 1, 1, 1, 3 ]; +* +* // Define the array strides: +* var sx = [ 12, 12, 12, 12, 4, 2, 1 ]; +* var sy = [ 3, 3, 3, 3, 1 ]; +* +* // Define the index offsets: +* var ox = 0; +* var oy = 0; +* +* // Create an input ndarray descriptor: +* var x = { +* 'dtype': 'float64', +* 'data': xbuf, +* 'shape': xsh, +* 'strides': sx, +* 'offset': ox, +* 'order': 'row-major' +* }; +* +* // Create an output ndarray descriptor: +* var y = { +* 'dtype': 'float64', +* 'data': ybuf, +* 'shape': ysh, +* 'strides': sy, +* 'offset': oy, +* 'order': 'row-major' +* }; +* +* // Initialize ndarray descriptors representing subarray views: +* var views = [ +* { +* 'dtype': x.dtype, +* 'data': x.data, +* 'shape': [ 2, 2 ], +* 'strides': [ 2, 1 ], +* 'offset': x.offset, +* 'order': x.order +* } +* ]; +* +* // Define a reshape strategy: +* function strategy( x ) { +* return { +* 'dtype': x.dtype, +* 'data': x.data, +* 'shape': [ 4 ], +* 'strides': [ 1 ], +* 'offset': x.offset, +* 'order': x.order +* }; +* } +* +* // Perform a reduction: +* kernel( gsum, [ x, y ], views, [ 12, 12, 12, 12, 4 ], strategy, {} ); +* +* var arr = ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ); +* // returns [ [ [ [ [ 10.0, 26.0, 42.0 ] ] ] ] ] +*/ +function kernel( fcn, arrays, views, strides, strategy, opts ) { + var ybuf; + var dv0; + var dv1; + var dv2; + var dv3; + var dv4; + var sh; + var S0; + var S1; + var S2; + var S3; + var S4; + var sv; + var iv; + var i0; + var i1; + var i2; + var i3; + var i4; + var y; + var v; + var i; + + // Note on variable naming convention: S#, dv#, i# where # corresponds to the loop number, with `0` being the innermost loop... + + // Resolve the output ndarray and associated shape: + y = arrays[ 1 ]; + sh = y.shape; + + // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... + if ( isRowMajor( strides ) ) { + // For row-major ndarrays, the last dimensions have the fastest changing indices... + S0 = sh[ 4 ]; + S1 = sh[ 3 ]; + S2 = sh[ 2 ]; + S3 = sh[ 1 ]; + S4 = sh[ 0 ]; + dv0 = [ strides[4] ]; // offset increment for innermost loop + dv1 = [ strides[3] - ( S0*strides[4] ) ]; + dv2 = [ strides[2] - ( S1*strides[3] ) ]; + dv3 = [ strides[1] - ( S2*strides[2] ) ]; + dv4 = [ strides[0] - ( S3*strides[1] ) ]; // offset increment for outermost loop + for ( i = 1; i < arrays.length; i++ ) { + sv = arrays[ i ].strides; + dv0.push( sv[4] ); + dv1.push( sv[3] - ( S0*sv[4] ) ); + dv2.push( sv[2] - ( S1*sv[3] ) ); + dv3.push( sv[1] - ( S2*sv[2] ) ); + dv4.push( sv[0] - ( S3*sv[1] ) ); + } + } else { // order === 'column-major' + // For column-major ndarrays, the first dimensions have the fastest changing indices... + S0 = sh[ 0 ]; + S1 = sh[ 1 ]; + S2 = sh[ 2 ]; + S3 = sh[ 3 ]; + S4 = sh[ 4 ]; + dv0 = [ strides[0] ]; // offset increment for innermost loop + dv1 = [ strides[1] - ( S0*strides[0] ) ]; + dv2 = [ strides[2] - ( S1*strides[1] ) ]; + dv3 = [ strides[3] - ( S2*strides[2] ) ]; + dv4 = [ strides[4] - ( S3*strides[3] ) ]; // offset increment for outermost loop + for ( i = 1; i < arrays.length; i++ ) { + sv = arrays[ i ].strides; + dv0.push( sv[0] ); + dv1.push( sv[1] - ( S0*sv[0] ) ); + dv2.push( sv[2] - ( S1*sv[1] ) ); + dv3.push( sv[3] - ( S2*sv[2] ) ); + dv4.push( sv[4] - ( S3*sv[3] ) ); + } + } + // Resolve a list of pointers to the first indexed elements in the respective ndarrays: + iv = offsets( arrays ); + + // Shallow copy the list of views to an internal array so that we can update with reshaped views without impacting the original list of views: + v = copyIndexed( views ); + + // Cache a reference to the output ndarray buffer: + ybuf = y.data; + + // Iterate over the non-reduced ndarray dimensions... + for ( i4 = 0; i4 < S4; i4++ ) { + for ( i3 = 0; i3 < S3; i3++ ) { + for ( i2 = 0; i2 < S2; i2++ ) { + for ( i1 = 0; i1 < S1; i1++ ) { + for ( i0 = 0; i0 < S0; i0++ ) { + setViewOffsets( views, iv ); + v[ 0 ] = strategy( views[ 0 ] ); + ybuf[ iv[1] ] = fcn( v, opts ); + incrementOffsets( iv, dv0 ); + } + incrementOffsets( iv, dv1 ); + } + incrementOffsets( iv, dv2 ); + } + incrementOffsets( iv, dv3 ); + } + incrementOffsets( iv, dv4 ); + } +} + + +// EXPORTS // + +module.exports = kernel; diff --git a/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/6d.js b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/6d.js new file mode 100644 index 000000000000..c63339eb5bbd --- /dev/null +++ b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/6d.js @@ -0,0 +1,234 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 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. +*/ + +/* eslint-disable max-depth */ + +'use strict'; + +// MODULES // + +var isRowMajor = require( '@stdlib/ndarray/base/assert/is-row-major' ); +var copyIndexed = require( '@stdlib/array/base/copy-indexed' ); +var incrementOffsets = require( '@stdlib/ndarray/base/kernels/utils/increment-offsets' ); +var offsets = require( '@stdlib/ndarray/base/offsets' ); +var setViewOffsets = require( './set_view_offsets.js' ); + + +// MAIN // + +/** +* Performs a reduction over an input ndarray and assigns results to a provided output ndarray. +* +* @private +* @param {Function} fcn - wrapper for a one-dimensional strided array reduction function +* @param {Array} arrays - ndarray descriptors +* @param {Array} views - initialized ndarray descriptors representing subarray views +* @param {Array} strides - loop dimension strides for the input ndarray +* @param {Function} strategy - input ndarray reshape strategy +* @param {Options} opts - function options +* @returns {void} +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* var ndarray2array = require( '@stdlib/ndarray/base/to-array' ); +* var gsum = require( '@stdlib/blas/ext/base/ndarray/gsum' ); +* +* // Create data buffers: +* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); +* var ybuf = new Float64Array( [ 0.0, 0.0, 0.0 ] ); +* +* // Define the array shapes: +* var xsh = [ 1, 1, 1, 1, 1, 3, 2, 2 ]; +* var ysh = [ 1, 1, 1, 1, 1, 3 ]; +* +* // Define the array strides: +* var sx = [ 12, 12, 12, 12, 12, 4, 2, 1 ]; +* var sy = [ 3, 3, 3, 3, 3, 1 ]; +* +* // Define the index offsets: +* var ox = 0; +* var oy = 0; +* +* // Create an input ndarray descriptor: +* var x = { +* 'dtype': 'float64', +* 'data': xbuf, +* 'shape': xsh, +* 'strides': sx, +* 'offset': ox, +* 'order': 'row-major' +* }; +* +* // Create an output ndarray descriptor: +* var y = { +* 'dtype': 'float64', +* 'data': ybuf, +* 'shape': ysh, +* 'strides': sy, +* 'offset': oy, +* 'order': 'row-major' +* }; +* +* // Initialize ndarray descriptors representing subarray views: +* var views = [ +* { +* 'dtype': x.dtype, +* 'data': x.data, +* 'shape': [ 2, 2 ], +* 'strides': [ 2, 1 ], +* 'offset': x.offset, +* 'order': x.order +* } +* ]; +* +* // Define a reshape strategy: +* function strategy( x ) { +* return { +* 'dtype': x.dtype, +* 'data': x.data, +* 'shape': [ 4 ], +* 'strides': [ 1 ], +* 'offset': x.offset, +* 'order': x.order +* }; +* } +* +* // Perform a reduction: +* kernel( gsum, [ x, y ], views, [ 12, 12, 12, 12, 12, 4 ], strategy, {} ); +* +* var arr = ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ); +* // returns [ [ [ [ [ [ 10.0, 26.0, 42.0 ] ] ] ] ] ] +*/ +function kernel( fcn, arrays, views, strides, strategy, opts ) { + var ybuf; + var dv0; + var dv1; + var dv2; + var dv3; + var dv4; + var dv5; + var sh; + var S0; + var S1; + var S2; + var S3; + var S4; + var S5; + var sv; + var iv; + var i0; + var i1; + var i2; + var i3; + var i4; + var i5; + var y; + var v; + var i; + + // Note on variable naming convention: S#, dv#, i# where # corresponds to the loop number, with `0` being the innermost loop... + + // Resolve the output ndarray and associated shape: + y = arrays[ 1 ]; + sh = y.shape; + + // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... + if ( isRowMajor( strides ) ) { + // For row-major ndarrays, the last dimensions have the fastest changing indices... + S0 = sh[ 5 ]; + S1 = sh[ 4 ]; + S2 = sh[ 3 ]; + S3 = sh[ 2 ]; + S4 = sh[ 1 ]; + S5 = sh[ 0 ]; + dv0 = [ strides[5] ]; // offset increment for innermost loop + dv1 = [ strides[4] - ( S0*strides[5] ) ]; + dv2 = [ strides[3] - ( S1*strides[4] ) ]; + dv3 = [ strides[2] - ( S2*strides[3] ) ]; + dv4 = [ strides[1] - ( S3*strides[2] ) ]; + dv5 = [ strides[0] - ( S4*strides[1] ) ]; // offset increment for outermost loop + for ( i = 1; i < arrays.length; i++ ) { + sv = arrays[ i ].strides; + dv0.push( sv[5] ); + dv1.push( sv[4] - ( S0*sv[5] ) ); + dv2.push( sv[3] - ( S1*sv[4] ) ); + dv3.push( sv[2] - ( S2*sv[3] ) ); + dv4.push( sv[1] - ( S3*sv[2] ) ); + dv5.push( sv[0] - ( S4*sv[1] ) ); + } + } else { // order === 'column-major' + // For column-major ndarrays, the first dimensions have the fastest changing indices... + S0 = sh[ 0 ]; + S1 = sh[ 1 ]; + S2 = sh[ 2 ]; + S3 = sh[ 3 ]; + S4 = sh[ 4 ]; + S5 = sh[ 5 ]; + dv0 = [ strides[0] ]; // offset increment for innermost loop + dv1 = [ strides[1] - ( S0*strides[0] ) ]; + dv2 = [ strides[2] - ( S1*strides[1] ) ]; + dv3 = [ strides[3] - ( S2*strides[2] ) ]; + dv4 = [ strides[4] - ( S3*strides[3] ) ]; + dv5 = [ strides[5] - ( S4*strides[4] ) ]; // offset increment for outermost loop + for ( i = 1; i < arrays.length; i++ ) { + sv = arrays[ i ].strides; + dv0.push( sv[0] ); + dv1.push( sv[1] - ( S0*sv[0] ) ); + dv2.push( sv[2] - ( S1*sv[1] ) ); + dv3.push( sv[3] - ( S2*sv[2] ) ); + dv4.push( sv[4] - ( S3*sv[3] ) ); + dv5.push( sv[5] - ( S4*sv[4] ) ); + } + } + // Resolve a list of pointers to the first indexed elements in the respective ndarrays: + iv = offsets( arrays ); + + // Shallow copy the list of views to an internal array so that we can update with reshaped views without impacting the original list of views: + v = copyIndexed( views ); + + // Cache a reference to the output ndarray buffer: + ybuf = y.data; + + // Iterate over the non-reduced ndarray dimensions... + for ( i5 = 0; i5 < S5; i5++ ) { + for ( i4 = 0; i4 < S4; i4++ ) { + for ( i3 = 0; i3 < S3; i3++ ) { + for ( i2 = 0; i2 < S2; i2++ ) { + for ( i1 = 0; i1 < S1; i1++ ) { + for ( i0 = 0; i0 < S0; i0++ ) { + setViewOffsets( views, iv ); + v[ 0 ] = strategy( views[ 0 ] ); + ybuf[ iv[1] ] = fcn( v, opts ); + incrementOffsets( iv, dv0 ); + } + incrementOffsets( iv, dv1 ); + } + incrementOffsets( iv, dv2 ); + } + incrementOffsets( iv, dv3 ); + } + incrementOffsets( iv, dv4 ); + } + incrementOffsets( iv, dv5 ); + } +} + + +// EXPORTS // + +module.exports = kernel; diff --git a/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/7d.js b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/7d.js new file mode 100644 index 000000000000..d05786304417 --- /dev/null +++ b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/7d.js @@ -0,0 +1,246 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 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. +*/ + +/* eslint-disable max-depth */ + +'use strict'; + +// MODULES // + +var isRowMajor = require( '@stdlib/ndarray/base/assert/is-row-major' ); +var copyIndexed = require( '@stdlib/array/base/copy-indexed' ); +var incrementOffsets = require( '@stdlib/ndarray/base/kernels/utils/increment-offsets' ); +var offsets = require( '@stdlib/ndarray/base/offsets' ); +var setViewOffsets = require( './set_view_offsets.js' ); + + +// MAIN // + +/** +* Performs a reduction over an input ndarray and assigns results to a provided output ndarray. +* +* @private +* @param {Function} fcn - wrapper for a one-dimensional strided array reduction function +* @param {Array} arrays - ndarray descriptors +* @param {Array} views - initialized ndarray descriptors representing subarray views +* @param {Array} strides - loop dimension strides for the input ndarray +* @param {Function} strategy - input ndarray reshape strategy +* @param {Options} opts - function options +* @returns {void} +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* var ndarray2array = require( '@stdlib/ndarray/base/to-array' ); +* var gsum = require( '@stdlib/blas/ext/base/ndarray/gsum' ); +* +* // Create data buffers: +* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); +* var ybuf = new Float64Array( [ 0.0, 0.0, 0.0 ] ); +* +* // Define the array shapes: +* var xsh = [ 1, 1, 1, 1, 1, 1, 3, 2, 2 ]; +* var ysh = [ 1, 1, 1, 1, 1, 1, 3 ]; +* +* // Define the array strides: +* var sx = [ 12, 12, 12, 12, 12, 12, 4, 2, 1 ]; +* var sy = [ 3, 3, 3, 3, 3, 3, 1 ]; +* +* // Define the index offsets: +* var ox = 0; +* var oy = 0; +* +* // Create an input ndarray descriptor: +* var x = { +* 'dtype': 'float64', +* 'data': xbuf, +* 'shape': xsh, +* 'strides': sx, +* 'offset': ox, +* 'order': 'row-major' +* }; +* +* // Create an output ndarray descriptor: +* var y = { +* 'dtype': 'float64', +* 'data': ybuf, +* 'shape': ysh, +* 'strides': sy, +* 'offset': oy, +* 'order': 'row-major' +* }; +* +* // Initialize ndarray descriptors representing subarray views: +* var views = [ +* { +* 'dtype': x.dtype, +* 'data': x.data, +* 'shape': [ 2, 2 ], +* 'strides': [ 2, 1 ], +* 'offset': x.offset, +* 'order': x.order +* } +* ]; +* +* // Define a reshape strategy: +* function strategy( x ) { +* return { +* 'dtype': x.dtype, +* 'data': x.data, +* 'shape': [ 4 ], +* 'strides': [ 1 ], +* 'offset': x.offset, +* 'order': x.order +* }; +* } +* +* // Perform a reduction: +* kernel( gsum, [ x, y ], views, [ 12, 12, 12, 12, 12, 12, 4 ], strategy, {} ); +* +* var arr = ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ); +* // returns [ [ [ [ [ [ [ 10.0, 26.0, 42.0 ] ] ] ] ] ] ] +*/ +function kernel( fcn, arrays, views, strides, strategy, opts ) { + var ybuf; + var dv0; + var dv1; + var dv2; + var dv3; + var dv4; + var dv5; + var dv6; + var sh; + var S0; + var S1; + var S2; + var S3; + var S4; + var S5; + var S6; + var sv; + var iv; + var i0; + var i1; + var i2; + var i3; + var i4; + var i5; + var i6; + var y; + var v; + var i; + + // Note on variable naming convention: S#, dv#, i# where # corresponds to the loop number, with `0` being the innermost loop... + + // Resolve the output ndarray and associated shape: + y = arrays[ 1 ]; + sh = y.shape; + + // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... + if ( isRowMajor( strides ) ) { + // For row-major ndarrays, the last dimensions have the fastest changing indices... + S0 = sh[ 6 ]; + S1 = sh[ 5 ]; + S2 = sh[ 4 ]; + S3 = sh[ 3 ]; + S4 = sh[ 2 ]; + S5 = sh[ 1 ]; + S6 = sh[ 0 ]; + dv0 = [ strides[6] ]; // offset increment for innermost loop + dv1 = [ strides[5] - ( S0*strides[6] ) ]; + dv2 = [ strides[4] - ( S1*strides[5] ) ]; + dv3 = [ strides[3] - ( S2*strides[4] ) ]; + dv4 = [ strides[2] - ( S3*strides[3] ) ]; + dv5 = [ strides[1] - ( S4*strides[2] ) ]; + dv6 = [ strides[0] - ( S5*strides[1] ) ]; // offset increment for outermost loop + for ( i = 1; i < arrays.length; i++ ) { + sv = arrays[ i ].strides; + dv0.push( sv[6] ); + dv1.push( sv[5] - ( S0*sv[6] ) ); + dv2.push( sv[4] - ( S1*sv[5] ) ); + dv3.push( sv[3] - ( S2*sv[4] ) ); + dv4.push( sv[2] - ( S3*sv[3] ) ); + dv5.push( sv[1] - ( S4*sv[2] ) ); + dv6.push( sv[0] - ( S5*sv[1] ) ); + } + } else { // order === 'column-major' + // For column-major ndarrays, the first dimensions have the fastest changing indices... + S0 = sh[ 0 ]; + S1 = sh[ 1 ]; + S2 = sh[ 2 ]; + S3 = sh[ 3 ]; + S4 = sh[ 4 ]; + S5 = sh[ 5 ]; + S6 = sh[ 6 ]; + dv0 = [ strides[0] ]; // offset increment for innermost loop + dv1 = [ strides[1] - ( S0*strides[0] ) ]; + dv2 = [ strides[2] - ( S1*strides[1] ) ]; + dv3 = [ strides[3] - ( S2*strides[2] ) ]; + dv4 = [ strides[4] - ( S3*strides[3] ) ]; + dv5 = [ strides[5] - ( S4*strides[4] ) ]; + dv6 = [ strides[6] - ( S5*strides[5] ) ]; // offset increment for outermost loop + for ( i = 1; i < arrays.length; i++ ) { + sv = arrays[ i ].strides; + dv0.push( sv[0] ); + dv1.push( sv[1] - ( S0*sv[0] ) ); + dv2.push( sv[2] - ( S1*sv[1] ) ); + dv3.push( sv[3] - ( S2*sv[2] ) ); + dv4.push( sv[4] - ( S3*sv[3] ) ); + dv5.push( sv[5] - ( S4*sv[4] ) ); + dv6.push( sv[6] - ( S5*sv[5] ) ); + } + } + // Resolve a list of pointers to the first indexed elements in the respective ndarrays: + iv = offsets( arrays ); + + // Shallow copy the list of views to an internal array so that we can update with reshaped views without impacting the original list of views: + v = copyIndexed( views ); + + // Cache a reference to the output ndarray buffer: + ybuf = y.data; + + // Iterate over the non-reduced ndarray dimensions... + for ( i6 = 0; i6 < S6; i6++ ) { + for ( i5 = 0; i5 < S5; i5++ ) { + for ( i4 = 0; i4 < S4; i4++ ) { + for ( i3 = 0; i3 < S3; i3++ ) { + for ( i2 = 0; i2 < S2; i2++ ) { + for ( i1 = 0; i1 < S1; i1++ ) { + for ( i0 = 0; i0 < S0; i0++ ) { + setViewOffsets( views, iv ); + v[ 0 ] = strategy( views[ 0 ] ); + ybuf[ iv[1] ] = fcn( v, opts ); + incrementOffsets( iv, dv0 ); + } + incrementOffsets( iv, dv1 ); + } + incrementOffsets( iv, dv2 ); + } + incrementOffsets( iv, dv3 ); + } + incrementOffsets( iv, dv4 ); + } + incrementOffsets( iv, dv5 ); + } + incrementOffsets( iv, dv6 ); + } +} + + +// EXPORTS // + +module.exports = kernel; diff --git a/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/8d.js b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/8d.js new file mode 100644 index 000000000000..188213f3be27 --- /dev/null +++ b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/8d.js @@ -0,0 +1,258 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 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. +*/ + +/* eslint-disable max-depth */ + +'use strict'; + +// MODULES // + +var isRowMajor = require( '@stdlib/ndarray/base/assert/is-row-major' ); +var copyIndexed = require( '@stdlib/array/base/copy-indexed' ); +var incrementOffsets = require( '@stdlib/ndarray/base/kernels/utils/increment-offsets' ); +var offsets = require( '@stdlib/ndarray/base/offsets' ); +var setViewOffsets = require( './set_view_offsets.js' ); + + +// MAIN // + +/** +* Performs a reduction over an input ndarray and assigns results to a provided output ndarray. +* +* @private +* @param {Function} fcn - wrapper for a one-dimensional strided array reduction function +* @param {Array} arrays - ndarray descriptors +* @param {Array} views - initialized ndarray descriptors representing subarray views +* @param {Array} strides - loop dimension strides for the input ndarray +* @param {Function} strategy - input ndarray reshape strategy +* @param {Options} opts - function options +* @returns {void} +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* var ndarray2array = require( '@stdlib/ndarray/base/to-array' ); +* var gsum = require( '@stdlib/blas/ext/base/ndarray/gsum' ); +* +* // Create data buffers: +* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); +* var ybuf = new Float64Array( [ 0.0, 0.0, 0.0 ] ); +* +* // Define the array shapes: +* var xsh = [ 1, 1, 1, 1, 1, 1, 1, 3, 2, 2 ]; +* var ysh = [ 1, 1, 1, 1, 1, 1, 1, 3 ]; +* +* // Define the array strides: +* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 2, 1 ]; +* var sy = [ 3, 3, 3, 3, 3, 3, 3, 1 ]; +* +* // Define the index offsets: +* var ox = 0; +* var oy = 0; +* +* // Create an input ndarray descriptor: +* var x = { +* 'dtype': 'float64', +* 'data': xbuf, +* 'shape': xsh, +* 'strides': sx, +* 'offset': ox, +* 'order': 'row-major' +* }; +* +* // Create an output ndarray descriptor: +* var y = { +* 'dtype': 'float64', +* 'data': ybuf, +* 'shape': ysh, +* 'strides': sy, +* 'offset': oy, +* 'order': 'row-major' +* }; +* +* // Initialize ndarray descriptors representing subarray views: +* var views = [ +* { +* 'dtype': x.dtype, +* 'data': x.data, +* 'shape': [ 2, 2 ], +* 'strides': [ 2, 1 ], +* 'offset': x.offset, +* 'order': x.order +* } +* ]; +* +* // Define a reshape strategy: +* function strategy( x ) { +* return { +* 'dtype': x.dtype, +* 'data': x.data, +* 'shape': [ 4 ], +* 'strides': [ 1 ], +* 'offset': x.offset, +* 'order': x.order +* }; +* } +* +* // Perform a reduction: +* kernel( gsum, [ x, y ], views, [ 12, 12, 12, 12, 12, 12, 12, 4 ], strategy, {} ); +* +* var arr = ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ); +* // returns [ [ [ [ [ [ [ [ 10.0, 26.0, 42.0 ] ] ] ] ] ] ] ] +*/ +function kernel( fcn, arrays, views, strides, strategy, opts ) { // eslint-disable-line max-statements + var ybuf; + var dv0; + var dv1; + var dv2; + var dv3; + var dv4; + var dv5; + var dv6; + var dv7; + var sh; + var S0; + var S1; + var S2; + var S3; + var S4; + var S5; + var S6; + var S7; + var sv; + var iv; + var i0; + var i1; + var i2; + var i3; + var i4; + var i5; + var i6; + var i7; + var y; + var v; + var i; + + // Note on variable naming convention: S#, dv#, i# where # corresponds to the loop number, with `0` being the innermost loop... + + // Resolve the output ndarray and associated shape: + y = arrays[ 1 ]; + sh = y.shape; + + // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... + if ( isRowMajor( strides ) ) { + // For row-major ndarrays, the last dimensions have the fastest changing indices... + S0 = sh[ 7 ]; + S1 = sh[ 6 ]; + S2 = sh[ 5 ]; + S3 = sh[ 4 ]; + S4 = sh[ 3 ]; + S5 = sh[ 2 ]; + S6 = sh[ 1 ]; + S7 = sh[ 0 ]; + dv0 = [ strides[7] ]; // offset increment for innermost loop + dv1 = [ strides[6] - ( S0*strides[7] ) ]; + dv2 = [ strides[5] - ( S1*strides[6] ) ]; + dv3 = [ strides[4] - ( S2*strides[5] ) ]; + dv4 = [ strides[3] - ( S3*strides[4] ) ]; + dv5 = [ strides[2] - ( S4*strides[3] ) ]; + dv6 = [ strides[1] - ( S5*strides[2] ) ]; + dv7 = [ strides[0] - ( S6*strides[1] ) ]; // offset increment for outermost loop + for ( i = 1; i < arrays.length; i++ ) { + sv = arrays[ i ].strides; + dv0.push( sv[7] ); + dv1.push( sv[6] - ( S0*sv[7] ) ); + dv2.push( sv[5] - ( S1*sv[6] ) ); + dv3.push( sv[4] - ( S2*sv[5] ) ); + dv4.push( sv[3] - ( S3*sv[4] ) ); + dv5.push( sv[2] - ( S4*sv[3] ) ); + dv6.push( sv[1] - ( S5*sv[2] ) ); + dv7.push( sv[0] - ( S6*sv[1] ) ); + } + } else { // order === 'column-major' + // For column-major ndarrays, the first dimensions have the fastest changing indices... + S0 = sh[ 0 ]; + S1 = sh[ 1 ]; + S2 = sh[ 2 ]; + S3 = sh[ 3 ]; + S4 = sh[ 4 ]; + S5 = sh[ 5 ]; + S6 = sh[ 6 ]; + S7 = sh[ 7 ]; + dv0 = [ strides[0] ]; // offset increment for innermost loop + dv1 = [ strides[1] - ( S0*strides[0] ) ]; + dv2 = [ strides[2] - ( S1*strides[1] ) ]; + dv3 = [ strides[3] - ( S2*strides[2] ) ]; + dv4 = [ strides[4] - ( S3*strides[3] ) ]; + dv5 = [ strides[5] - ( S4*strides[4] ) ]; + dv6 = [ strides[6] - ( S5*strides[5] ) ]; + dv7 = [ strides[7] - ( S6*strides[6] ) ]; // offset increment for outermost loop + for ( i = 1; i < arrays.length; i++ ) { + sv = arrays[ i ].strides; + dv0.push( sv[0] ); + dv1.push( sv[1] - ( S0*sv[0] ) ); + dv2.push( sv[2] - ( S1*sv[1] ) ); + dv3.push( sv[3] - ( S2*sv[2] ) ); + dv4.push( sv[4] - ( S3*sv[3] ) ); + dv5.push( sv[5] - ( S4*sv[4] ) ); + dv6.push( sv[6] - ( S5*sv[5] ) ); + dv7.push( sv[7] - ( S6*sv[6] ) ); + } + } + // Resolve a list of pointers to the first indexed elements in the respective ndarrays: + iv = offsets( arrays ); + + // Shallow copy the list of views to an internal array so that we can update with reshaped views without impacting the original list of views: + v = copyIndexed( views ); + + // Cache a reference to the output ndarray buffer: + ybuf = y.data; + + // Iterate over the non-reduced ndarray dimensions... + for ( i7 = 0; i7 < S7; i7++ ) { + for ( i6 = 0; i6 < S6; i6++ ) { + for ( i5 = 0; i5 < S5; i5++ ) { + for ( i4 = 0; i4 < S4; i4++ ) { + for ( i3 = 0; i3 < S3; i3++ ) { + for ( i2 = 0; i2 < S2; i2++ ) { + for ( i1 = 0; i1 < S1; i1++ ) { + for ( i0 = 0; i0 < S0; i0++ ) { + setViewOffsets( views, iv ); + v[ 0 ] = strategy( views[ 0 ] ); + ybuf[ iv[1] ] = fcn( v, opts ); + incrementOffsets( iv, dv0 ); + } + incrementOffsets( iv, dv1 ); + } + incrementOffsets( iv, dv2 ); + } + incrementOffsets( iv, dv3 ); + } + incrementOffsets( iv, dv4 ); + } + incrementOffsets( iv, dv5 ); + } + incrementOffsets( iv, dv6 ); + } + incrementOffsets( iv, dv7 ); + } +} + + +// EXPORTS // + +module.exports = kernel; diff --git a/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/9d.js b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/9d.js new file mode 100644 index 000000000000..d9fe3b5f84cd --- /dev/null +++ b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/9d.js @@ -0,0 +1,270 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 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. +*/ + +/* eslint-disable max-depth */ + +'use strict'; + +// MODULES // + +var isRowMajor = require( '@stdlib/ndarray/base/assert/is-row-major' ); +var copyIndexed = require( '@stdlib/array/base/copy-indexed' ); +var incrementOffsets = require( '@stdlib/ndarray/base/kernels/utils/increment-offsets' ); +var offsets = require( '@stdlib/ndarray/base/offsets' ); +var setViewOffsets = require( './set_view_offsets.js' ); + + +// MAIN // + +/** +* Performs a reduction over an input ndarray and assigns results to a provided output ndarray. +* +* @private +* @param {Function} fcn - wrapper for a one-dimensional strided array reduction function +* @param {Array} arrays - ndarray descriptors +* @param {Array} views - initialized ndarray descriptors representing subarray views +* @param {Array} strides - loop dimension strides for the input ndarray +* @param {Function} strategy - input ndarray reshape strategy +* @param {Options} opts - function options +* @returns {void} +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* var ndarray2array = require( '@stdlib/ndarray/base/to-array' ); +* var gsum = require( '@stdlib/blas/ext/base/ndarray/gsum' ); +* +* // Create data buffers: +* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); +* var ybuf = new Float64Array( [ 0.0, 0.0, 0.0 ] ); +* +* // Define the array shapes: +* var xsh = [ 1, 1, 1, 1, 1, 1, 1, 1, 3, 2, 2 ]; +* var ysh = [ 1, 1, 1, 1, 1, 1, 1, 1, 3 ]; +* +* // Define the array strides: +* var sx = [ 12, 12, 12, 12, 12, 12, 12, 12, 4, 2, 1 ]; +* var sy = [ 3, 3, 3, 3, 3, 3, 3, 3, 1 ]; +* +* // Define the index offsets: +* var ox = 0; +* var oy = 0; +* +* // Create an input ndarray descriptor: +* var x = { +* 'dtype': 'float64', +* 'data': xbuf, +* 'shape': xsh, +* 'strides': sx, +* 'offset': ox, +* 'order': 'row-major' +* }; +* +* // Create an output ndarray descriptor: +* var y = { +* 'dtype': 'float64', +* 'data': ybuf, +* 'shape': ysh, +* 'strides': sy, +* 'offset': oy, +* 'order': 'row-major' +* }; +* +* // Initialize ndarray descriptors representing subarray views: +* var views = [ +* { +* 'dtype': x.dtype, +* 'data': x.data, +* 'shape': [ 2, 2 ], +* 'strides': [ 2, 1 ], +* 'offset': x.offset, +* 'order': x.order +* } +* ]; +* +* // Define a reshape strategy: +* function strategy( x ) { +* return { +* 'dtype': x.dtype, +* 'data': x.data, +* 'shape': [ 4 ], +* 'strides': [ 1 ], +* 'offset': x.offset, +* 'order': x.order +* }; +* } +* +* // Perform a reduction: +* kernel( gsum, [ x, y ], views, [ 12, 12, 12, 12, 12, 12, 12, 12, 4 ], strategy, {} ); +* +* var arr = ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ); +* // returns [ [ [ [ [ [ [ [ [ 10.0, 26.0, 42.0 ] ] ] ] ] ] ] ] ] +*/ +function kernel( fcn, arrays, views, strides, strategy, opts ) { // eslint-disable-line max-statements + var ybuf; + var dv0; + var dv1; + var dv2; + var dv3; + var dv4; + var dv5; + var dv6; + var dv7; + var dv8; + var sh; + var S0; + var S1; + var S2; + var S3; + var S4; + var S5; + var S6; + var S7; + var S8; + var sv; + var iv; + var i0; + var i1; + var i2; + var i3; + var i4; + var i5; + var i6; + var i7; + var i8; + var y; + var v; + var i; + + // Note on variable naming convention: S#, dv#, i# where # corresponds to the loop number, with `0` being the innermost loop... + + // Resolve the output ndarray and associated shape: + y = arrays[ 1 ]; + sh = y.shape; + + // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... + if ( isRowMajor( strides ) ) { + // For row-major ndarrays, the last dimensions have the fastest changing indices... + S0 = sh[ 8 ]; + S1 = sh[ 7 ]; + S2 = sh[ 6 ]; + S3 = sh[ 5 ]; + S4 = sh[ 4 ]; + S5 = sh[ 3 ]; + S6 = sh[ 2 ]; + S7 = sh[ 1 ]; + S8 = sh[ 0 ]; + dv0 = [ strides[8] ]; // offset increment for innermost loop + dv1 = [ strides[7] - ( S0*strides[8] ) ]; + dv2 = [ strides[6] - ( S1*strides[7] ) ]; + dv3 = [ strides[5] - ( S2*strides[6] ) ]; + dv4 = [ strides[4] - ( S3*strides[5] ) ]; + dv5 = [ strides[3] - ( S4*strides[4] ) ]; + dv6 = [ strides[2] - ( S5*strides[3] ) ]; + dv7 = [ strides[1] - ( S6*strides[2] ) ]; + dv8 = [ strides[0] - ( S7*strides[1] ) ]; // offset increment for outermost loop + for ( i = 1; i < arrays.length; i++ ) { + sv = arrays[ i ].strides; + dv0.push( sv[8] ); + dv1.push( sv[7] - ( S0*sv[8] ) ); + dv2.push( sv[6] - ( S1*sv[7] ) ); + dv3.push( sv[5] - ( S2*sv[6] ) ); + dv4.push( sv[4] - ( S3*sv[5] ) ); + dv5.push( sv[3] - ( S4*sv[4] ) ); + dv6.push( sv[2] - ( S5*sv[3] ) ); + dv7.push( sv[1] - ( S6*sv[2] ) ); + dv8.push( sv[0] - ( S7*sv[1] ) ); + } + } else { // order === 'column-major' + // For column-major ndarrays, the first dimensions have the fastest changing indices... + S0 = sh[ 0 ]; + S1 = sh[ 1 ]; + S2 = sh[ 2 ]; + S3 = sh[ 3 ]; + S4 = sh[ 4 ]; + S5 = sh[ 5 ]; + S6 = sh[ 6 ]; + S7 = sh[ 7 ]; + S8 = sh[ 8 ]; + dv0 = [ strides[0] ]; // offset increment for innermost loop + dv1 = [ strides[1] - ( S0*strides[0] ) ]; + dv2 = [ strides[2] - ( S1*strides[1] ) ]; + dv3 = [ strides[3] - ( S2*strides[2] ) ]; + dv4 = [ strides[4] - ( S3*strides[3] ) ]; + dv5 = [ strides[5] - ( S4*strides[4] ) ]; + dv6 = [ strides[6] - ( S5*strides[5] ) ]; + dv7 = [ strides[7] - ( S6*strides[6] ) ]; + dv8 = [ strides[8] - ( S7*strides[7] ) ]; // offset increment for outermost loop + for ( i = 1; i < arrays.length; i++ ) { + sv = arrays[ i ].strides; + dv0.push( sv[0] ); + dv1.push( sv[1] - ( S0*sv[0] ) ); + dv2.push( sv[2] - ( S1*sv[1] ) ); + dv3.push( sv[3] - ( S2*sv[2] ) ); + dv4.push( sv[4] - ( S3*sv[3] ) ); + dv5.push( sv[5] - ( S4*sv[4] ) ); + dv6.push( sv[6] - ( S5*sv[5] ) ); + dv7.push( sv[7] - ( S6*sv[6] ) ); + dv8.push( sv[8] - ( S7*sv[7] ) ); + } + } + // Resolve a list of pointers to the first indexed elements in the respective ndarrays: + iv = offsets( arrays ); + + // Shallow copy the list of views to an internal array so that we can update with reshaped views without impacting the original list of views: + v = copyIndexed( views ); + + // Cache a reference to the output ndarray buffer: + ybuf = y.data; + + // Iterate over the non-reduced ndarray dimensions... + for ( i8 = 0; i8 < S8; i8++ ) { + for ( i7 = 0; i7 < S7; i7++ ) { + for ( i6 = 0; i6 < S6; i6++ ) { + for ( i5 = 0; i5 < S5; i5++ ) { + for ( i4 = 0; i4 < S4; i4++ ) { + for ( i3 = 0; i3 < S3; i3++ ) { + for ( i2 = 0; i2 < S2; i2++ ) { + for ( i1 = 0; i1 < S1; i1++ ) { + for ( i0 = 0; i0 < S0; i0++ ) { + setViewOffsets( views, iv ); + v[ 0 ] = strategy( views[ 0 ] ); + ybuf[ iv[1] ] = fcn( v, opts ); + incrementOffsets( iv, dv0 ); + } + incrementOffsets( iv, dv1 ); + } + incrementOffsets( iv, dv2 ); + } + incrementOffsets( iv, dv3 ); + } + incrementOffsets( iv, dv4 ); + } + incrementOffsets( iv, dv5 ); + } + incrementOffsets( iv, dv6 ); + } + incrementOffsets( iv, dv7 ); + } + incrementOffsets( iv, dv8 ); + } +} + + +// EXPORTS // + +module.exports = kernel; diff --git a/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/index.js b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/index.js new file mode 100644 index 000000000000..666cde575f58 --- /dev/null +++ b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/index.js @@ -0,0 +1,136 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 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. +*/ + +'use strict'; + +/** +* Return a kernel for applying a one-dimensional strided array reduction function to an input ndarray and assigning results to an output ndarray. +* +* @module @stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* var ndarray2array = require( '@stdlib/ndarray/base/to-array' ); +* var gsum = require( '@stdlib/blas/ext/base/ndarray/gsum' ); +* var kernel = require( '@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked' ); +* +* // Create data buffers: +* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); +* var ybuf = new Float64Array( [ 0.0, 0.0, 0.0 ] ); +* +* // Define the array shapes: +* var xsh = [ 1, 3, 2, 2 ]; +* var ysh = [ 1, 3 ]; +* +* // Define the array strides: +* var sx = [ 12, 4, 2, 1 ]; +* var sy = [ 3, 1 ]; +* +* // Define the index offsets: +* var ox = 0; +* var oy = 0; +* +* // Create an input ndarray descriptor: +* var x = { +* 'dtype': 'float64', +* 'data': xbuf, +* 'shape': xsh, +* 'strides': sx, +* 'offset': ox, +* 'order': 'row-major' +* }; +* +* // Create an output ndarray descriptor: +* var y = { +* 'dtype': 'float64', +* 'data': ybuf, +* 'shape': ysh, +* 'strides': sy, +* 'offset': oy, +* 'order': 'row-major' +* }; +* +* // Initialize ndarray descriptors representing subarray views: +* var views = [ +* { +* 'dtype': x.dtype, +* 'data': x.data, +* 'shape': [ 2, 2 ], +* 'strides': [ 2, 1 ], +* 'offset': x.offset, +* 'order': x.order +* } +* ]; +* +* // Define a reshape strategy: +* function strategy( x ) { +* return { +* 'dtype': x.dtype, +* 'data': x.data, +* 'shape': [ 4 ], +* 'strides': [ 1 ], +* 'offset': x.offset, +* 'order': x.order +* }; +* } +* +* // Resolve a kernel: +* var f = kernel( 2 ); +* +* // Perform a reduction: +* f( gsum, [ x, y ], views, [ 12, 4 ], strategy, {} ); +* +* var arr = ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ); +* // returns [ [ 10.0, 26.0, 42.0 ] ] +*/ + +// MODULES // + +var setReadOnly = require( '@stdlib/utils/define-nonenumerable-read-only-property' ); +var kernel0d = require( './0d.js' ); +var kernel1d = require( './1d.js' ); +var kernel2d = require( './2d.js' ); +var kernel3d = require( './3d.js' ); +var kernel4d = require( './4d.js' ); +var kernel5d = require( './5d.js' ); +var kernel6d = require( './6d.js' ); +var kernel7d = require( './7d.js' ); +var kernel8d = require( './8d.js' ); +var kernel9d = require( './9d.js' ); +var kernel10d = require( './10d.js' ); +var main = require( './main.js' ); + + +// MAIN // + +setReadOnly( main, 'kernel0d', kernel0d ); +setReadOnly( main, 'kernel1d', kernel1d ); +setReadOnly( main, 'kernel2d', kernel2d ); +setReadOnly( main, 'kernel3d', kernel3d ); +setReadOnly( main, 'kernel4d', kernel4d ); +setReadOnly( main, 'kernel5d', kernel5d ); +setReadOnly( main, 'kernel6d', kernel6d ); +setReadOnly( main, 'kernel7d', kernel7d ); +setReadOnly( main, 'kernel8d', kernel8d ); +setReadOnly( main, 'kernel9d', kernel9d ); +setReadOnly( main, 'kernel10d', kernel10d ); + + +// EXPORTS // + +module.exports = main; diff --git a/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/main.js b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/main.js new file mode 100644 index 000000000000..d2071fb99b6a --- /dev/null +++ b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/main.js @@ -0,0 +1,146 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 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. +*/ + +'use strict'; + +// MODULES // + +var kernel0d = require( './0d.js' ); +var kernel1d = require( './1d.js' ); +var kernel2d = require( './2d.js' ); +var kernel3d = require( './3d.js' ); +var kernel4d = require( './4d.js' ); +var kernel5d = require( './5d.js' ); +var kernel6d = require( './6d.js' ); +var kernel7d = require( './7d.js' ); +var kernel8d = require( './8d.js' ); +var kernel9d = require( './9d.js' ); +var kernel10d = require( './10d.js' ); + + +// VARIABLES // + +var KERNELS = [ + kernel0d, + kernel1d, + kernel2d, + kernel3d, + kernel4d, + kernel5d, + kernel6d, + kernel7d, + kernel8d, + kernel9d, + kernel10d +]; +var MAX_DIMS = KERNELS.length - 1; + + +// MAIN // + +/** +* Returns a kernel for applying a one-dimensional strided array reduction function to an input ndarray and assigning results to an output ndarray. +* +* @param {integer} ndims - number of loop dimensions +* @returns {(Function|null)} kernel function or null +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* var ndarray2array = require( '@stdlib/ndarray/base/to-array' ); +* var gsum = require( '@stdlib/blas/ext/base/ndarray/gsum' ); +* +* // Create data buffers: +* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); +* var ybuf = new Float64Array( [ 0.0, 0.0, 0.0 ] ); +* +* // Define the array shapes: +* var xsh = [ 1, 3, 2, 2 ]; +* var ysh = [ 1, 3 ]; +* +* // Define the array strides: +* var sx = [ 12, 4, 2, 1 ]; +* var sy = [ 3, 1 ]; +* +* // Define the index offsets: +* var ox = 0; +* var oy = 0; +* +* // Create an input ndarray descriptor: +* var x = { +* 'dtype': 'float64', +* 'data': xbuf, +* 'shape': xsh, +* 'strides': sx, +* 'offset': ox, +* 'order': 'row-major' +* }; +* +* // Create an output ndarray descriptor: +* var y = { +* 'dtype': 'float64', +* 'data': ybuf, +* 'shape': ysh, +* 'strides': sy, +* 'offset': oy, +* 'order': 'row-major' +* }; +* +* // Initialize ndarray descriptors representing subarray views: +* var views = [ +* { +* 'dtype': x.dtype, +* 'data': x.data, +* 'shape': [ 2, 2 ], +* 'strides': [ 2, 1 ], +* 'offset': x.offset, +* 'order': x.order +* } +* ]; +* +* // Define a reshape strategy: +* function strategy( x ) { +* return { +* 'dtype': x.dtype, +* 'data': x.data, +* 'shape': [ 4 ], +* 'strides': [ 1 ], +* 'offset': x.offset, +* 'order': x.order +* }; +* } +* +* // Resolve a kernel: +* var f = kernel( 2 ); +* +* // Perform a reduction: +* f( gsum, [ x, y ], views, [ 12, 4 ], strategy, {} ); +* +* var arr = ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ); +* // returns [ [ 10.0, 26.0, 42.0 ] ] +*/ +function kernel( ndims ) { + if ( ndims < 0 || ndims > MAX_DIMS ) { + return null; + } + return KERNELS[ ndims ]; +} + + +// EXPORTS // + +module.exports = kernel; diff --git a/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/set_view_offsets.js b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/set_view_offsets.js new file mode 100644 index 000000000000..a47fe32887d3 --- /dev/null +++ b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/lib/set_view_offsets.js @@ -0,0 +1,52 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 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. +*/ + +'use strict'; + +// MAIN // + +/** +* Sets view offsets according to a list of index offsets. +* +* ## Notes +* +* - This function skips the second element in the list of index offsets, as that is assumed to correspond to the output ndarray which does not have a corresponding view. Meaning, the list of views is expected to have `N` elements, and the list of index offsets is expected to have `N+1` elements. +* - This function mutates the provided view objects. +* +* @private +* @param {Array} views - list of ndarray descriptors representing ndarray views +* @param {Array} offsets - list of index offsets +* @returns {Array} updated views +*/ +function setViewOffsets( views, offsets ) { + var i; + var j; + for ( i = 0, j = 0; i < offsets.length; i++ ) { + if ( i === 1 ) { // note: expected to correspond to the output ndarray which does not have a corresponding view + continue; + } + views[ j ].offset = offsets[ i ]; + j += 1; + } + return views; +} + + +// EXPORTS // + +module.exports = setViewOffsets; diff --git a/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/package.json b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/package.json new file mode 100644 index 000000000000..d2f22d2c8d6e --- /dev/null +++ b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/package.json @@ -0,0 +1,65 @@ +{ + "name": "@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked", + "version": "0.0.0", + "description": "Return a kernel for applying a one-dimensional strided array reduction function to an input ndarray and assigning results to an output ndarray.", + "license": "Apache-2.0", + "author": { + "name": "The Stdlib Authors", + "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" + }, + "contributors": [ + { + "name": "The Stdlib Authors", + "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" + } + ], + "main": "./lib", + "directories": { + "doc": "./docs", + "example": "./examples", + "lib": "./lib", + "test": "./test" + }, + "types": "./docs/types", + "scripts": {}, + "homepage": "https://github.com/stdlib-js/stdlib", + "repository": { + "type": "git", + "url": "git://github.com/stdlib-js/stdlib.git" + }, + "bugs": { + "url": "https://github.com/stdlib-js/stdlib/issues" + }, + "dependencies": {}, + "devDependencies": {}, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "keywords": [ + "stdlib", + "base", + "strided", + "array", + "ndarray", + "unary", + "reduce", + "reduction", + "accumulate", + "accumulation", + "vector", + "kernel" + ], + "__stdlib__": {} +} diff --git a/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/test/test.js b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/test/test.js new file mode 100644 index 000000000000..053851cfb7f7 --- /dev/null +++ b/lib/node_modules/@stdlib/ndarray/base/kernels/generic/unary-reduce-strided1d/unblocked/test/test.js @@ -0,0 +1,35 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 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. +*/ + +'use strict'; + +// MODULES // + +var tape = require( 'tape' ); +var kernel = require( './../lib' ); + + +// TESTS // + +tape( 'main export is a function', function test( t ) { + t.ok( true, __filename ); + t.strictEqual( typeof kernel, 'function', 'main export is a function' ); + t.end(); +}); + +// FIXME: add tests