From 79ace9f4b58a52b0b5ec0d39e7c1b138d4bb6b8c Mon Sep 17 00:00:00 2001 From: aman-095 Date: Thu, 13 Jun 2024 18:24:56 +0530 Subject: [PATCH 01/19] feat: add BLAS Level 2 routine for sgemv --- .../@stdlib/blas/base/sgemv/README.md | 265 ++++++++++ .../blas/base/sgemv/benchmark/benchmark.js | 105 ++++ .../base/sgemv/benchmark/benchmark.ndarray.js | 105 ++++ .../@stdlib/blas/base/sgemv/docs/repl.txt | 165 ++++++ .../blas/base/sgemv/docs/types/index.d.ts | 138 +++++ .../blas/base/sgemv/docs/types/test.ts | 500 ++++++++++++++++++ .../@stdlib/blas/base/sgemv/examples/index.js | 38 ++ .../@stdlib/blas/base/sgemv/lib/index.js | 72 +++ .../@stdlib/blas/base/sgemv/lib/main.js | 35 ++ .../@stdlib/blas/base/sgemv/lib/ndarray.js | 166 ++++++ .../@stdlib/blas/base/sgemv/lib/sgemv.js | 173 ++++++ .../@stdlib/blas/base/sgemv/package.json | 68 +++ .../base/sgemv/test/fixtures/julia/REQUIRE | 2 + .../test/fixtures/julia/strides_xnyn.json | 15 + .../test/fixtures/julia/strides_xnyp.json | 15 + .../test/fixtures/julia/strides_xoyo.json | 15 + .../test/fixtures/julia/strides_xoyt.json | 15 + .../test/fixtures/julia/strides_xpyn.json | 15 + .../test/fixtures/julia/strides_xpyp.json | 15 + .../@stdlib/blas/base/sgemv/test/test.js | 82 +++ .../blas/base/sgemv/test/test.ndarray.js | 292 ++++++++++ .../blas/base/sgemv/test/test.sgemv.js | 292 ++++++++++ 22 files changed, 2588 insertions(+) create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/README.md create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/benchmark/benchmark.js create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/benchmark/benchmark.ndarray.js create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/docs/repl.txt create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/docs/types/index.d.ts create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/docs/types/test.ts create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/examples/index.js create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/lib/index.js create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/lib/main.js create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/lib/ndarray.js create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/lib/sgemv.js create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/package.json create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/REQUIRE create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xnyn.json create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xnyp.json create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xoyo.json create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xoyt.json create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xpyn.json create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xpyp.json create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/test.js create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/test.ndarray.js create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/test.sgemv.js diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/README.md b/lib/node_modules/@stdlib/blas/base/sgemv/README.md new file mode 100644 index 000000000000..d02c5510dc80 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/README.md @@ -0,0 +1,265 @@ + + +# sgemv + +> Perform one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y are vectors and A is an m by n matrix. + +
+ +## Usage + +```javascript +var sgemv = require( '@stdlib/blas/base/sgemv' ); +``` + +#### sgemv( ord, trans, M, N, alpha, A, LDA, x, sx, beta, y, sy ) + +Performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y are vectors and A is an m by n matrix. + +```javascript +var Float32Array = require( '@stdlib/array/float32' ); + +var A = new Float32Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] ); +var x = new Float32Array( [ 1.0, 1.0, 1.0 ] ); +var y = new Float32Array( [ 1.0, 1.0 ] ); + +sgemv( 'row-major', 'none', 2, 3, 1.0, A, 3, x, 1, 1.0, y, 1 ); +// y => [ 7.0, 16.0 ] +``` + +The function has the following parameters: + +- **ord**: storage layout. +- **trans**: specifies the operation to be performed. +- **M**: number of rows in the matrix `A`. +- **N**: number of columns in the matrix `A`. +- **alpha**: scalar constant. +- **A**: matrix of coefficients [`Float32Array`][mdn-float32array]. +- **lda**: stride of the first dimension of `A` (leading dimension of `A`). +- **x**: input [`Float32Array`][mdn-float32array]. +- **sx**: index increment for `x`. +- **beta**: scalar constant. +- **y**: output [`Float32Array`][mdn-float32array]. +- **sy**: index increment for `y`. + +The stride parameters determine how operations are performed. For example, to perform one of the vector-matrix operation starting from first index of `x`, + +```javascript +var Float32Array = require( '@stdlib/array/float32' ); + +var A = new Float32Array( [ 1.0, 2.0, 3.0, 4.0 ] ); +var x = new Float32Array( [ 1.0, 1.0 ] ); +var y = new Float32Array( [ 1.0, 1.0 ] ); + +sgemv( 'row-major', 'none', 2, 2, 1.0, A, 2, x, 1, 1.0, y, 1 ); +// y => [ 4.0, 8.0 ] +``` + +Note that indexing is relative to the first index. To introduce an offset, use [`typed array`][mdn-typed-array] views. + + + +```javascript +var Float32Array = require( '@stdlib/array/float32' ); + +// Initial arrays... +var x0 = new Float32Array( [ 1.0, 1.0, 1.0 ] ); +var y0 = new Float32Array( [ 1.0, 1.0 ] ); +var A = new Float32Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] ); + +// Create offset views... +var x1 = new Float32Array( x0.buffer, x0.BYTES_PER_ELEMENT*1 ); // start at 2nd element +var y1 = new Float32Array( y0.buffer, y0.BYTES_PER_ELEMENT*1 ); // start at 4th element + +sgemv( 'row-major', 'none', 2, 2, 1.0, A, 2, x1, -1, 1.0, y1, -1 ); +// y0 => [ 1.0, 8.0 ] +``` + +#### sgemv.ndarray( ord, trans, M, N, alpha, A, LDA, x, sx, ox, beta, y, sy, oy ) + +Performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y are vectors and A is an m by n matrix using alternative indexing semantics. + +```javascript +var Float32Array = require( '@stdlib/array/float32' ); + +var A = new Float32Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] ); +var x = new Float32Array( [ 1.0, 1.0, 1.0 ] ); +var y = new Float32Array( [ 1.0, 1.0 ] ); + +sgemv.ndarray( 'row-major', 'none', 2, 3, 1.0, A, 3, x, 1, 0, 1.0, y, 1, 0 ); +// y => [ 7.0, 16.0 ] +``` + +The function has the following additional parameters: + +- **ox**: starting index for `x`. +- **oy**: starting index for `y`. + +While [`typed array`][mdn-typed-array] views mandate a view offset based on the underlying buffer, the offset parameters support indexing semantics based on starting indices. For example, to perform operation with given `x` and `y` offset values`,..., + +```javascript +var Float32Array = require( '@stdlib/array/float32' ); + +var A = new Float32Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] ); +var x = new Float32Array( [ 1.0, 2.0, 3.0 ] ); +var y = new Float32Array( [ 7.0, 8.0, 9.0, 10.0 ] ); + +sgemv.ndarray( 'row-major', 'none', 2, 3, 1.0, A, 3, x, 1, 0, 1.0, y, -2, 2 ); +// y => [ 39, 8, 23, 10 ] +``` + +
+ + + +
+ +## Notes + +- `sgemv()` corresponds to the [BLAS][blas] level 2 function [`sgemv`][sgemv]. + +
+ + + +
+ +## Examples + + + +```javascript +var discreteUniform = require( '@stdlib/random/array/discrete-uniform' ); +var sgemv = require( '@stdlib/blas/base/sgemv' ); + +var opts = { + 'dtype': 'float32' +}; + +var M = 3; +var N = 3; + +var A = discreteUniform( M*N, 0, 255, opts ); +var x = discreteUniform( N, 0, 255, opts ); +var y = discreteUniform( M, 0, 255, opts ); + +sgemv.ndarray( 'row-major', 'none', M, N, 1.0, A, N, x, -1, 2, 1.0, y, -1, 2 ); +console.log( y ); + +``` + +
+ + + + + +* * * + +
+ +## C APIs + + + +
+ +
+ + + + + +
+ +### Usage + +```c +#include "stdlib/blas/base/sgemv.h" +``` + +#### TODO + +TODO. + +```c +TODO +``` + +TODO + +```c +TODO +``` + +
+ + + + + +
+ +
+ + + + + +
+ +### Examples + +```c +TODO +``` + +
+ + + +
+ + + + + + + + + + + + + + diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/benchmark/benchmark.js b/lib/node_modules/@stdlib/blas/base/sgemv/benchmark/benchmark.js new file mode 100644 index 000000000000..70b3047d01a9 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/benchmark/benchmark.js @@ -0,0 +1,105 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2018 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 bench = require( '@stdlib/bench' ); +var uniform = require( '@stdlib/random/array/uniform' ); +var isnanf = require( '@stdlib/math/base/assert/is-nanf' ); +var pow = require( '@stdlib/math/base/special/pow' ); +var floor = require( '@stdlib/math/base/special/floor' ); +var pkg = require( './../package.json' ).name; +var sgemv = require( './../lib/sgemv.js' ); + + +// VARIABLES // + +var options = { + 'dtype': 'float32' +}; + + +// FUNCTIONS // + +/** +* Creates a benchmark function. +* +* @private +* @param {PositiveInteger} len - array length +* @returns {Function} benchmark function +*/ +function createBenchmark( len ) { + var x = uniform( len, -10.0, 10.0, options ); + var y = uniform( len, -10.0, 10.0, options ); + var A = uniform( len*len, -10.0, 10.0, options ); + return benchmark; + + /** + * Benchmark function. + * + * @private + * @param {Benchmark} b - benchmark instance + */ + function benchmark( b ) { + var z; + var i; + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + z = sgemv( 'row-major', 'none', len, len, 1.0, A, len, x, 1, 1.0, y, 1 ); + if ( isnanf( z[ i%z.length ] ) ) { + b.fail( 'should not return NaN' ); + } + } + b.toc(); + if ( isnanf( z[ i%z.length ] ) ) { + b.fail( 'should not return NaN' ); + } + b.pass( 'benchmark finished' ); + b.end(); + } +} + + +// MAIN // + +/** +* Main execution sequence. +* +* @private +*/ +function main() { + var len; + var min; + var max; + var f; + var i; + + min = 1; // 10^min + max = 6; // 10^max + + for ( i = min; i <= max; i++ ) { + len = floor( pow( pow( 10, i ), 1.0/2.0 ) ); + f = createBenchmark( len ); + bench( pkg+':size='+(len*len), f ); + } +} + +main(); diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/benchmark/benchmark.ndarray.js b/lib/node_modules/@stdlib/blas/base/sgemv/benchmark/benchmark.ndarray.js new file mode 100644 index 000000000000..a5647fccfb0e --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/benchmark/benchmark.ndarray.js @@ -0,0 +1,105 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2018 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 bench = require( '@stdlib/bench' ); +var uniform = require( '@stdlib/random/array/uniform' ); +var isnanf = require( '@stdlib/math/base/assert/is-nanf' ); +var pow = require( '@stdlib/math/base/special/pow' ); +var floor = require( '@stdlib/math/base/special/floor' ); +var pkg = require( './../package.json' ).name; +var sgemv = require( './../lib/ndarray.js' ); + + +// VARIABLES // + +var options = { + 'dtype': 'float32' +}; + + +// FUNCTIONS // + +/** +* Creates a benchmark function. +* +* @private +* @param {PositiveInteger} len - array length +* @returns {Function} benchmark function +*/ +function createBenchmark( len ) { + var x = uniform( len, -10.0, 10.0, options ); + var y = uniform( len, -10.0, 10.0, options ); + var A = uniform( len*len, -10.0, 10.0, options ); + return benchmark; + + /** + * Benchmark function. + * + * @private + * @param {Benchmark} b - benchmark instance + */ + function benchmark( b ) { + var z; + var i; + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + z = sgemv( 'row-major', 'none', len, len, 1.0, A, len, x, 1, 0, 1.0, y, 1, 0 ); + if ( isnanf( z[ i%z.length ] ) ) { + b.fail( 'should not return NaN' ); + } + } + b.toc(); + if ( isnanf( z[ i%z.length ] ) ) { + b.fail( 'should not return NaN' ); + } + b.pass( 'benchmark finished' ); + b.end(); + } +} + + +// MAIN // + +/** +* Main execution sequence. +* +* @private +*/ +function main() { + var len; + var min; + var max; + var f; + var i; + + min = 1; // 10^min + max = 6; // 10^max + + for ( i = min; i <= max; i++ ) { + len = floor( pow( pow( 10, i ), 1.0/2.0 ) ); + f = createBenchmark( len ); + bench( pkg+':ndarray:size='+(len*len), f ); + } +} + +main(); diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/docs/repl.txt b/lib/node_modules/@stdlib/blas/base/sgemv/docs/repl.txt new file mode 100644 index 000000000000..2704b8493f56 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/docs/repl.txt @@ -0,0 +1,165 @@ + +{{alias}}( ord, trans, M, N, alpha, A, lda, x, sx, beta, y, sy ) + Perform one of the matrix-vector operations `y = alpha*A*x + beta*y` + or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y + are vectors and A is an m by n matrix. + + The stride parameters determine how operations are performed. + + Indexing is relative to the first index. To introduce an offset, use typed + array views. + + If `M` or `N` is equal to `0`, the function returns `y` unchanged. + + If `alpha` equals `0` and beta equals `1`, the function returns `y` + unchanged. + + Parameters + ---------- + ord: string + Row-major (C-style) or column-major (Fortran-style) order. + + trans: string + Specifies whether `A` is transpose, conjugate-transpose or none. + + M: integer + Number of rows in `A`. + + N: integer + Number of columns in `A`. + + alpha: number + Scalar. + + A: Float32Array + Matrix. + + lda: integer + Leading dimension. + + x: Float32Array + Input vector `x`. + + sx: integer + Index increment for `x`. + + beta: number + Scalar. + + y: Float32Array + Input/output vector `y`. + + sy: integer + Index increment for `y`. + + Returns + ------- + y: Float32Array + Output array. + + Examples + -------- + // Standard usage: + > var x = new {{alias:@stdlib/array/float32}}( [ 1.0, 1.0 ] ); + > var y = new {{alias:@stdlib/array/float32}}( [ 1.0, 1.0 ] ); + > var A = new {{alias:@stdlib/array/float32}}( [ 1.0, 2.0, 3.0, 4.0 ] ); + > {{alias}}( 'row-major', 'none', 2, 2, 1.0, A, 2, x, 1, 1.0, y, 1 ) + [ 4.0, 8.0 ] + + // Advanced indexing: + > var x = new {{alias:@stdlib/array/float32}}( [ 1.0, 1.0 ] ); + > var y = new {{alias:@stdlib/array/float32}}( [ 1.0, 1.0 ] ); + > var A = new {{alias:@stdlib/array/float32}}( [ 1.0, 2.0, 3.0, 4.0 ] ); + > {{alias}}( 'row-major', 'none', 2, 2, 1.0, A, 2, x, -1, 1.0, y, -1 ) + [ 8.0, 4.0 ] + + // Using typed array views: + > var x0 = new {{alias:@stdlib/array/float32}}( [ 1.0, 1.0, 1.0 ] ); + > var y0 = new {{alias:@stdlib/array/float32}}( [ 1.0, 1.0 ] ); + > var A = new {{alias:@stdlib/array/float32}}( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] ); + > var x1 = new {{alias:@stdlib/array/float32}}( x0.buffer, x0.BYTES_PER_ELEMENT*1 ); + > var y1 = new {{alias:@stdlib/array/float32}}( y0.buffer, y0.BYTES_PER_ELEMENT*1 ); + > {{alias}}( 'row-major', 'none', 2, 2, 1.0, A, 2, x1, -1, 1.0, y1, -1 ) + > y0 + [ 1.0, 8.0 ] + + +{{alias}}.ndarray( ord, trans, M, N, alpha, A, lda, x, sx, ox, beta, y, sy, oy ) + Perform one of the matrix-vector operations `y = alpha*A*x + beta*y` + or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y + are vectors and A is an m by n matrix using alternative indexing semantics. + + While typed array views mandate a view offset based on the underlying + buffer, the offset parameters support indexing semantics based on starting + indices. + + Parameters + ---------- + ord: string + Row-major (C-style) or column-major (Fortran-style) order. + + trans: string + Specifies whether `A` is transposed. + + M: integer + Number of rows in `A`. + + N: integer + Number of columns in `A`. + + alpha: number + Scalar. + + A: Float32Array + Matrix. + + lda: integer + Leading dimension. + + x: Float32Array + Input vector `x`. + + sx: integer + Index increment for `x`. + + ox: integer + Starting index for `x`. + + beta: number + Scalar. + + y: Float32Array + Input/output vector `y`. + + sy: integer + Index increment for `y`. + + oy: integer + Starting index for `y`. + + Returns + ------- + y: Float32Array + Output array. + + Examples + -------- + // Standard usage: + > var x = new {{alias:@stdlib/array/float32}}( [ 1.0, 1.0 ] ); + > var y = new {{alias:@stdlib/array/float32}}( [ 1.0, 1.0 ] ); + > var A = new {{alias:@stdlib/array/float32}}( [ 1.0, 2.0, 3.0, 4.0 ] ); + > var ord = 'row-major'; + > {{alias}}.ndarray( ord, 'none', 2, 2, 1, A, 2, x, 1, 0, 1, y, 1, 0 ) + [ 4.0, 8.0 ] + + // Advanced indexing: + > var x = new {{alias:@stdlib/array/float32}}( [ 1.0, 1.0 ] ); + > var y = new {{alias:@stdlib/array/float32}}( [ 1.0, 1.0 ] ); + > var A = new {{alias:@stdlib/array/float32}}( [ 1.0, 2.0, 3.0, 4.0 ] ); + > var ord = 'row-major'; + > {{alias}}.ndarray( ord, 'none', 2, 2, 1, A, 2, x, -1, 1, 1, y, -1, 1 ) + [ 8.0, 4.0 ] + + See Also + -------- + diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/docs/types/index.d.ts b/lib/node_modules/@stdlib/blas/base/sgemv/docs/types/index.d.ts new file mode 100644 index 000000000000..235b389e8fd0 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/docs/types/index.d.ts @@ -0,0 +1,138 @@ +/* +* @license Apache-2.0 +* +* Copyright (c) 2024 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +// TypeScript Version: 4.1 + +/** +* Storage layouts. +*/ +type Order = 'row-major' | 'column-major'; + +/** +* Upper or lower triangular indicator. +*/ +type Trans = 'none' | 'transpose' | 'conjugate transpose'; + +/** +* Interface describing `ssymv`. +*/ +interface Routine { + /** + * Performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y are vectors and A is an m by n matrix. + * + * @param order - storage layout + * @param trans - specifies the operation to be performed + * @param NonNegative M - number of rows in the matrix `A` + * @param N - number of columns in the matrix `A` + * @param alpha - scalar constant + * @param A - matrix of coefficients + * @param LDA - stride of the first dimension of `A` (a.k.a., leading dimension of the matrix `A`) + * @param x - an `M` element vector + * @param strideX - `x` stride length + * @param beta - scalar constant + * @param y - an `N` element vector + * @param strideY - `y` stride length + * @returns output array `y` + * + * @example + * var Float32Array = require( '@stdlib/array/float32' ); + * + * var A = new Float32Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] ); + * var x = new Float32Array( [ 1.0, 1.0, 1.0 ] ); + * var y = new Float32Array( [ 1.0, 1.0 ] ); + * + * sgemv( 'row-major', 'none', 2, 3, 1.0, A, 3, x, 1, 1.0, y, 1 ); + * // y => [ 7.0, 16.0 ] + */ + ( order: Order, trans: Trans, M: number, N: number, alpha: number, A: Float32Array, LDA: number, x: Float32Array, strideX: number, beta: number, y: Float32Array, strideY: number ): Float32Array; + + /** + * Performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y are vectors and A is an m by n matrix using alternative indexing semantics. + * + * @param order - storage layout + * @param trans - specifies the operation to be performed + * @param NonNegative M - number of rows in the matrix `A` + * @param N - number of columns in the matrix `A` + * @param alpha - scalar constant + * @param A - matrix of coefficients + * @param LDA - stride of the first dimension of `A` (a.k.a., leading dimension of the matrix `A`) + * @param x - an `M` element vector + * @param strideX - `x` stride length + * @param offsetX - `x` index offset + * @param beta - scalar constant + * @param y - an `N` element vector + * @param strideY - `y` stride length + * @param offsetY - `y` index offset + * @returns output array `y` + * + * @example + * var Float32Array = require( '@stdlib/array/float32' ); + * + * var A = new Float32Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] ); + * var x = new Float32Array( [ 1.0, 1.0, 1.0 ] ); + * var y = new Float32Array( [ 1.0, 1.0 ] ); + * + * sgemv( 'row-major', 'none', 2, 3, 1.0, A, 3, x, 1, 0, 1.0, y, 1, 0 ); + * // y => [ 7.0, 16.0 ] + */ + ndarray( order: Order, trans: Trans, M: number, N: number, alpha: number, A: Float32Array, LDA: number, x: Float32Array, strideX: number, offsetX: number, beta: number, y: Float32Array, strideY: number, offsetY: number ): Float32Array; +} + +/** +* Performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y are vectors and A is an m by n matrix. +* +* @param order - storage layout +* @param trans - specifies the operation to be performed +* @param NonNegative M - number of rows in the matrix `A` +* @param N - number of columns in the matrix `A` +* @param alpha - scalar constant +* @param A - matrix of coefficients +* @param LDA - stride of the first dimension of `A` (a.k.a., leading dimension of the matrix `A`) +* @param x - an `M` element vector +* @param strideX - `x` stride length +* @param beta - scalar constant +* @param y - an `N` element vector +* @param strideY - `y` stride length +* @returns output array `y` +* +* @example +* var Float32Array = require( '@stdlib/array/float32' ); +* +* var A = new Float32Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0 ] ); +* var x = new Float32Array( [ 1.0, 1.0, 1.0 ] ); +* var y = new Float32Array( [ 1.0, 1.0, 1.0 ] ); +* +* sgemv( 'row-major', 'none', 3, 3, 1.0, A, 3, x1, -1, 1.0, y1, -1 ); +* // y => [ 25.0, 16.0, 7.0 ] +* +* @example +* var Float32Array = require( '@stdlib/array/float32' ); +* +* var A = new Float32Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0 ] ); +* var x = new Float32Array( [ 1.0, 1.0, 1.0 ] ); +* var y = new Float32Array( [ 1.0, 1.0, 1.0 ] ); +* +* sgemv( 'row-major', 'none', 3, 3, 1.0, A, 3, x1, -1, 2, 1.0, y1, -1, 2 ); +* // y => [ 25.0, 16.0, 7.0 ] +*/ +declare var sgemv: Routine; + + +// EXPORTS // + +export = sgemv; diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/docs/types/test.ts b/lib/node_modules/@stdlib/blas/base/sgemv/docs/types/test.ts new file mode 100644 index 000000000000..5eff29c1ee6f --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/docs/types/test.ts @@ -0,0 +1,500 @@ +/* +* @license Apache-2.0 +* +* Copyright (c) 2024 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. +*/ + +import sgemv = require( './index' ); + + +// TESTS // + +// The function returns a Float32Array... +{ + const x = new Float32Array( 10 ); + const y = new Float32Array( 10 ); + const A = new Float32Array( 20 ); + + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectType Float32Array +} + +// The compiler throws an error if the function is provided a first argument which is not a string... +{ + const x = new Float32Array( 10 ); + const y = new Float32Array( 10 ); + const A = new Float32Array( 20 ); + + sgemv( 10, 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( true, 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( false, 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( null, 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( undefined, 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( [], 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( {}, 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( ( x: number ): number => x, 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a second argument which is not a character... +{ + const x = new Float32Array( 10 ); + const y = new Float32Array( 10 ); + const A = new Float32Array( 20 ); + + sgemv( 'row-major', 10, 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', true, 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', false, 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', null, 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', undefined, 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', [ '1' ], 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', {}, 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', ( x: number ): number => x, 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a third argument which is not a number... +{ + const x = new Float32Array( 10 ); + const y = new Float32Array( 10 ); + const A = new Float32Array( 20 ); + + sgemv( 'row-major', 'none', '10', 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', true, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', false, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', null, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', undefined, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', [], 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', {}, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', ( x: number ): number => x, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a fourth argument which is not a number... +{ + const x = new Float32Array( 10 ); + const y = new Float32Array( 10 ); + const A = new Float32Array( 20 ); + + sgemv( 'row-major', 'none', 10, '10', 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, true, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, false, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, null, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, undefined, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, [], 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, {}, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, ( x: number ): number => x, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a fifth argument which is not a number... +{ + const x = new Float32Array( 10 ); + const y = new Float32Array( 10 ); + const A = new Float32Array( 20 ); + + sgemv( 'row-major', 'none', 10, 10, '10', A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, true, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, false, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, null, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, undefined, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, [], A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, {}, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, ( x: number ): number => x, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a sixth argument which is not a Float32Array... +{ + const x = new Float32Array( 10 ); + const y = new Float32Array( 10 ); + + sgemv( 'row-major', 'none', 10, 10, 1.0, 10, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, '10', 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, true, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, false, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, null, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, undefined, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, [ '1' ], 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, {}, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, ( x: number ): number => x, 10, x, 1, 1.0, y, 1 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a seventh argument which is not a number... +{ + const x = new Float32Array( 10 ); + const y = new Float32Array( 10 ); + const A = new Float32Array( 20 ); + + sgemv( 'row-major', 'none', 10, 10, 1.0, A, '10', x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, true, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, false, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, null, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, undefined, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, [], x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, {}, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, ( x: number ): number => x, x, 1, 1.0, y, 1 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a eighth argument which is not a Float32Array... +{ + const y = new Float32Array( 10 ); + const A = new Float32Array( 20 ); + + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, 10, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, '10', 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, true, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, false, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, null, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, undefined, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, [ '1' ], 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, {}, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, ( x: number ): number => x, 1, 1.0, y, 1 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a ninth argument which is not a number... +{ + const x = new Float32Array( 10 ); + const y = new Float32Array( 10 ); + const A = new Float32Array( 20 ); + + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, '10', 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, true, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, false, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, null, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, undefined, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, [], 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, {}, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, ( x: number ): number => x, 1.0, y, 1 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a tenth argument which is not a number... +{ + const x = new Float32Array( 10 ); + const y = new Float32Array( 10 ); + const A = new Float32Array( 20 ); + + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, '10', y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, true, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, false, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, null, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, undefined, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, [], y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, {}, y, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, ( x: number ): number => x, y, 1 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a eleventh argument which is not a Float32Array... +{ + const x = new Float32Array( 10 ); + const A = new Float32Array( 20 ); + + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, 10, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, '10', 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, true, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, false, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, null, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, undefined, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, [ '1' ], 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, {}, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, ( x: number ): number => x, 1 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a twelvfth argument which is not a number... +{ + const x = new Float32Array( 10 ); + const y = new Float32Array( 10 ); + const A = new Float32Array( 20 ); + + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, '10' ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, true ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, false ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, null ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, undefined ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, [] ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, {} ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, ( x: number ): number => x ); // $ExpectError +} + +// The compiler throws an error if the function is provided an unsupported number of arguments... +{ + const x = new Float32Array( 10 ); + const y = new Float32Array( 10 ); + const A = new Float32Array( 20 ); + + sgemv(); // $ExpectError + sgemv( 'row-major' ); // $ExpectError + sgemv( 'row-major', 'none' ); // $ExpectError + sgemv( 'row-major', 'none', 10 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0 ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y ); // $ExpectError + sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1, 10 ); // $ExpectError +} + +// Attached to main export is an `ndarray` method which returns a Float32Array... +{ + const x = new Float32Array( 10 ); + const y = new Float32Array( 10 ); + const A = new Float32Array( 20 ); + + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectType Float32Array +} + +// The compiler throws an error if the function is provided a first argument which is not a string... +{ + const x = new Float32Array( 10 ); + const y = new Float32Array( 10 ); + const A = new Float32Array( 20 ); + + sgemv.ndarray( 10, 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( true, 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( false, 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( null, 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( undefined, 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( [], 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( {}, 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( ( x: number ): number => x, 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a second argument which is not a character... +{ + const x = new Float32Array( 10 ); + const y = new Float32Array( 10 ); + const A = new Float32Array( 20 ); + + sgemv.ndarray( 'row-major', 10, 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', true, 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', false, 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', null, 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', undefined, 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', [ '1' ], 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', {}, 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', ( x: number ): number => x, 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a third argument which is not a number... +{ + const x = new Float32Array( 10 ); + const y = new Float32Array( 10 ); + const A = new Float32Array( 20 ); + + sgemv.ndarray( 'row-major', 'none', '10', 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', true, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', false, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', null, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', undefined, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', [], 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', {}, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', ( x: number ): number => x, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a fourth argument which is not a number... +{ + const x = new Float32Array( 10 ); + const y = new Float32Array( 10 ); + const A = new Float32Array( 20 ); + + sgemv.ndarray( 'row-major', 'none', 10, '10', 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, true, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, false, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, null, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, undefined, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, [], 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, {}, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, ( x: number ): number => x, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a fifth argument which is not a number... +{ + const x = new Float32Array( 10 ); + const y = new Float32Array( 10 ); + const A = new Float32Array( 20 ); + + sgemv.ndarray( 'row-major', 'none', 10, 10, '10', A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, true, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, false, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, null, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, undefined, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, [], A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, {}, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, ( x: number ): number => x, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a sixth argument which is not a Float32Array... +{ + const x = new Float32Array( 10 ); + const y = new Float32Array( 10 ); + + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, 10, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, '10', 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, true, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, false, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, null, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, undefined, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, [ '1' ], 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, {}, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, ( x: number ): number => x, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a seventh argument which is not a number... +{ + const x = new Float32Array( 10 ); + const y = new Float32Array( 10 ); + const A = new Float32Array( 20 ); + + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, '10', x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, true, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, false, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, null, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, undefined, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, [], x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, {}, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, ( x: number ): number => x, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a eighth argument which is not a Float32Array... +{ + const y = new Float32Array( 10 ); + const A = new Float32Array( 20 ); + + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, 10, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, '10', 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, true, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, false, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, null, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, undefined, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, [ '1' ], 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, {}, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, ( x: number ): number => x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a ninth argument which is not a number... +{ + const x = new Float32Array( 10 ); + const y = new Float32Array( 10 ); + const A = new Float32Array( 20 ); + + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, '10', 0, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, true, 0, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, false, 0, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, null, 0, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, undefined, 0, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, [], 0, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, {}, 0, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, ( x: number ): number => x, 0, 1.0, y, 1 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a tenth argument which is not a number... +{ + const x = new Float32Array( 10 ); + const y = new Float32Array( 10 ); + const A = new Float32Array( 20 ); + + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, '10', 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, true, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, false, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, null, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, undefined, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, [], 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, {}, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, ( x: number ): number => x, 1.0, y, 1 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a eleventh argument which is not a number... +{ + const x = new Float32Array( 10 ); + const y = new Float32Array( 10 ); + const A = new Float32Array( 20 ); + + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, '10', y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, true, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, false, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, null, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, undefined, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, [], y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, {}, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, ( x: number ): number => x, y, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a twelfth argument which is not a Float32Array... +{ + const x = new Float32Array( 10 ); + const A = new Float32Array( 20 ); + + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, 10, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, '10', 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, true, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, false, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, null, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, undefined, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, [ '1' ], 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, {}, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, ( x: number ): number => x, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a thirteenth argument which is not a number... +{ + const x = new Float32Array( 10 ); + const y = new Float32Array( 10 ); + const A = new Float32Array( 20 ); + + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, '10', 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, true, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, false, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, null, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, undefined, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, [], 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, {}, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, ( x: number ): number => x, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a fourteenth argument which is not a number... +{ + const x = new Float32Array( 10 ); + const y = new Float32Array( 10 ); + const A = new Float32Array( 20 ); + + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, '10' ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, true ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, false ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, null ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, undefined ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, [] ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, {} ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, ( x: number ): number => x ); // $ExpectError +} + +// The compiler throws an error if the `ndarray` method is provided an unsupported number of arguments... +{ + const x = new Float32Array( 10 ); + const y = new Float32Array( 10 ); + const A = new Float32Array( 20 ); + + sgemv.ndarray(); // $ExpectError + sgemv.ndarray( 'row-major' ); // $ExpectError + sgemv.ndarray( 'row-major', 'none' ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0, 10 ); // $ExpectError +} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/examples/index.js b/lib/node_modules/@stdlib/blas/base/sgemv/examples/index.js new file mode 100644 index 000000000000..1c807e1be377 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/examples/index.js @@ -0,0 +1,38 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2024 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 */ // FIXME + +'use strict'; + +var discreteUniform = require( '@stdlib/random/array/discrete-uniform' ); +var sgemv = require( './../lib' ); + +var opts = { + 'dtype': 'float32' +}; + +var M = 3; +var N = 3; + +var A = discreteUniform( M*N, 0, 255, opts ); +var x = discreteUniform( N, 0, 255, opts ); +var y = discreteUniform( M, 0, 255, opts ); + +sgemv.ndarray( 'row-major', 'none', M, N, 1.0, A, N, x, -1, 2, 1.0, y, -1, 2 ); +console.log( y ); diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/lib/index.js b/lib/node_modules/@stdlib/blas/base/sgemv/lib/index.js new file mode 100644 index 000000000000..b453be5ef10b --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/lib/index.js @@ -0,0 +1,72 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2024 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'; + +/** +* BLAS level 2 routine to perform one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y are vectors and A is an m by n matrix. +* +* @module @stdlib/blas/base/sgemv +* +* @example +* var Float32Array = require( '@stdlib/array/float32' ); +* var sgemv = require( '@stdlib/blas/base/sgemv' ); +* +* var A = new Float32Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] ); +* var x = new Float32Array( [ 1.0, 1.0, 1.0 ] ); +* var y = new Float32Array( [ 1.0, 1.0 ] ); +* +* sgemv( 'row-major', 'none', 2, 3, 1.0, A, 3, x, 1, 1.0, y, 1 ); +* // y => [ 7.0, 16.0 ] +* +* @example +* var Float32Array = require( '@stdlib/array/float32' ); +* var sgemv = require( '@stdlib/blas/base/sgemv' ); +* +* var A = new Float32Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] ); +* var x = new Float32Array( [ 1.0, 1.0, 1.0 ] ); +* var y = new Float32Array( [ 1.0, 1.0 ] ); +* +* sgemv.ndarray( 'row-major', 'none', 2, 3, 1.0, A, 3, x, 1, 0, 1.0, y, 1, 0 ); +* // y => [ 7.0, 16.0 ] +*/ + +// MODULES // + +var join = require( 'path' ).join; +var tryRequire = require( '@stdlib/utils/try-require' ); +var isError = require( '@stdlib/assert/is-error' ); +var main = require( './main.js' ); + + +// MAIN // + +var sgemv; +var tmp = tryRequire( join( __dirname, './native.js' ) ); +if ( isError( tmp ) ) { + sgemv = main; +} else { + sgemv = tmp; +} + + +// EXPORTS // + +module.exports = sgemv; + +// exports: { "ndarray": "sgemv.ndarray" } diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/lib/main.js b/lib/node_modules/@stdlib/blas/base/sgemv/lib/main.js new file mode 100644 index 000000000000..188acd0dba59 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/lib/main.js @@ -0,0 +1,35 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2024 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 setReadOnly = require( '@stdlib/utils/define-nonenumerable-read-only-property' ); +var sgemv = require( './sgemv.js' ); +var ndarray = require( './ndarray.js' ); + + +// MAIN // + +setReadOnly( sgemv, 'ndarray', ndarray ); + + +// EXPORTS // + +module.exports = sgemv; diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/lib/ndarray.js b/lib/node_modules/@stdlib/blas/base/sgemv/lib/ndarray.js new file mode 100644 index 000000000000..aee9b6879d7e --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/lib/ndarray.js @@ -0,0 +1,166 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2024 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 */ // FIXME + +'use strict'; + +// MODULES // + +var sfill = require( '@stdlib/blas/ext/base/sfill' ); +var max = require( '@stdlib/math/base/special/max' ); +var f32 = require( '@stdlib/number/float64/base/to-float32' ); +var isLayout = require( '@stdlib/blas/base/assert/is-layout' ); +var isMatrixTranspose = require( '@stdlib/blas/base/assert/is-transpose-operation' ); + + +// MAIN // + +/** +* Performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y are vectors and A is an m by n matrix. +* +* @param {string} order - storage layout +* @param {string} trans - specifies the operation to be performed +* @param {NonNegativeInteger} M - number of rows in the matrix `A` +* @param {NonNegativeInteger} N - number of columns in the matrix `A` +* @param {number} alpha - scalar constant +* @param {Float32Array} A - matrix of coefficients +* @param {PositiveInteger} LDA - stride of the first dimension of `A` (a.k.a., leading dimension of the matrix `A`) +* @param {Float32Array} x - an `M` element vector +* @param {integer} strideX - `x` stride length +* @param {NonNegativeInteger} offsetX - `x` starting index +* @param {number} beta - scalar constant +* @param {Float32Array} y - an `N` element vector +* @param {integer} strideY - `y` stride length +* @param {NonNegativeInteger} offsetY - `y` starting index +* @throws {TypeError} first argument must be a valid order +* @throws {TypeError} second argument must specify whether to consider transpose of the given matrix or not +* @throws {RangeError} third argument must be a nonnegative integer +* @throws {RangeError} fourth argument must be a nonnegative integer +* @throws {RangeError} seventh argument must be greater than or equal to max(1,M) +* @throws {RangeError} ninth argument must be non-zero +* @throws {RangeError} thirteenth argument must be non-zero +* @returns {Float32Array} `y` +* +* @example +* var Float32Array = require( '@stdlib/array/float32' ); +* +* var A = new Float32Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] ); +* var x = new Float32Array( [ 1.0, 1.0, 1.0 ] ); +* var y = new Float32Array( [ 1.0, 1.0 ] ); +* +* sgemv( 'row-major', 'none', 2, 3, 1.0, A, 3, x, 1, 0, 1.0, y, 1, 0 ); +* // y => [ 7.0, 16.0 ] +*/ +function sgemv( order, trans, M, N, alpha, A, LDA, x, strideX, offsetX, beta, y, strideY, offsetY ) { + var lenx; + var leny; + var temp; + var ix; + var iy; + var jx; + var jy; + var kx; + var ky; + var i; + var j; + + if ( !isLayout( order ) ) { + throw new TypeError( 'invalid argument. First argument must be a valid order. Value: `%s`.', order ); + } + if ( !isMatrixTranspose( trans ) ) { + throw new TypeError( 'invalid argument. Second argument must specify whether to take transpose, conjugate-transpose or none. Value: `%s`.', trans ); + } + if( M < 0 ) { + throw new RangeError( 'invalid argument. Third argument must be a nonnegative integer. Value: `%d`.', M ); + } + if( N < 0 ) { + throw new RangeError( 'invalid argument. Fourth argument must be a nonnegative integer. Value: `%d`.', N ); + } + if( LDA < max( 1, M ) ) { + throw new RangeError( 'invalid argument. Seventh argument must be greater than or equal to max(1,M). Value: `%d`.', LDA ); + } + if( strideX === 0 ) { + throw new RangeError( 'invalid argument. Ninth argument must be non-zero.' ); + } + if( strideY === 0 ) { + throw new RangeError( 'invalid argument. Thirteenth argument must be non-zero.' ); + } + // Check if we can early return... + if ( M === 0 || N === 0 || ( alpha === 0.0 && beta === 1.0 ) ) { + return y; + } + if ( trans === 'none' ) { + lenx = N; + leny = M; + } else { + lenx = M; + leny = N; + } + kx = offsetX; + ky = offsetY; + // y = beta*y + iy = ky; + if ( beta !== 1.0 ) { + if( beta === 0.0 ) { + sfill( leny, 0.0, y, strideY ); + } else { + for( i = 0; i < leny; i++ ) { + y[ iy ] *= beta; + iy += strideY; + } + } + } + if ( alpha === 0.0 ) { + return y; + } + if ( ( trans === 'none' && order === 'column-major' ) || ( trans !== 'none' && order === 'row-major' ) ) { + // Form y = alpha*A*x + y + jx = kx; + for ( i = 0; i < N; i++ ) { + if ( x[ jx ] !== 0.0 ) { + temp = f32( alpha * x[ jx ] ); + iy = ky; + for ( j = 0; j < M; j++ ) { + y[ iy ] += f32( A[ i * LDA + j ] * temp ); + iy += strideY; + } + } + jx += strideX; + } + } else { + // Form y = alpha*A**T*x + y + jy = ky; + for ( i = 0; i < M; i++ ) { + temp = 0.0; + ix = kx; + for ( j = 0; j < N; j++ ) { + temp += f32( A[ i * LDA + j ] * x[ ix ] ); + ix += strideX; + } + y[ jy ] += f32( alpha * temp ); + jy += strideY; + } + } + return y; +} + + +// EXPORTS // + +module.exports = sgemv; diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/lib/sgemv.js b/lib/node_modules/@stdlib/blas/base/sgemv/lib/sgemv.js new file mode 100644 index 000000000000..b92f1c9dd150 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/lib/sgemv.js @@ -0,0 +1,173 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2024 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 sfill = require( '@stdlib/blas/ext/base/sfill' ); +var max = require( '@stdlib/math/base/special/max' ); +var f32 = require( '@stdlib/number/float64/base/to-float32' ); +var isLayout = require( '@stdlib/blas/base/assert/is-layout' ); +var isMatrixTranspose = require( '@stdlib/blas/base/assert/is-transpose-operation' ); + + +// MAIN // + +/** +* Performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y are vectors and A is an m by n matrix. +* +* @param {string} order - storage layout +* @param {string} trans - specifies the operation to be performed +* @param {NonNegativeInteger} M - number of rows in the matrix `A` +* @param {NonNegativeInteger} N - number of columns in the matrix `A` +* @param {number} alpha - scalar constant +* @param {Float32Array} A - matrix of coefficients +* @param {PositiveInteger} LDA - stride of the first dimension of `A` (a.k.a., leading dimension of the matrix `A`) +* @param {Float32Array} x - an `M` element vector +* @param {integer} strideX - `x` stride length +* @param {number} beta - scalar constant +* @param {Float32Array} y - an `N` element vector +* @param {integer} strideY - `y` stride length +* @throws {TypeError} first argument must be a valid order +* @throws {TypeError} second argument must specify whether to consider transpose of the given matrix or not +* @throws {RangeError} third argument must be a nonnegative integer +* @throws {RangeError} fourth argument must be a nonnegative integer +* @throws {RangeError} seventh argument must be greater than or equal to max(1,M) +* @throws {RangeError} ninth argument must be non-zero +* @throws {RangeError} twelfth argument must be non-zero +* @returns {Float32Array} `y` +* +* @example +* var Float32Array = require( '@stdlib/array/float32' ); +* +* var A = new Float32Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] ); +* var x = new Float32Array( [ 1.0, 1.0, 1.0 ] ); +* var y = new Float32Array( [ 1.0, 1.0 ] ); +* +* sgemv( 'row-major', 'none', 2, 3, 1.0, A, 3, x, 1, 1.0, y, 1 ); +* // y => [ 7.0, 16.0 ] +*/ +function sgemv( order, trans, M, N, alpha, A, LDA, x, strideX, beta, y, strideY ) { // eslint-disable-line max-params + var lenx; + var leny; + var temp; + var ix; + var iy; + var jx; + var jy; + var kx; + var ky; + var i; + var j; + + if ( !isLayout( order ) ) { + throw new TypeError( 'invalid argument. First argument must be a valid order. Value: `%s`.', order ); + } + if ( !isMatrixTranspose( trans ) ) { + throw new TypeError( 'invalid argument. Second argument must specify whether to take transpose, conjugate-transpose or none. Value: `%s`.', trans ); + } + if ( M < 0 ) { + throw new RangeError( 'invalid argument. Third argument must be a nonnegative integer. Value: `%d`.', M ); + } + if ( N < 0 ) { + throw new RangeError( 'invalid argument. Fourth argument must be a nonnegative integer. Value: `%d`.', N ); + } + if ( LDA < max( 1, M ) ) { + throw new RangeError( 'invalid argument. Seventh argument must be greater than or equal to max(1,M). Value: `%d`.', LDA ); + } + if ( strideX === 0 ) { + throw new RangeError( 'invalid argument. Ninth argument must be non-zero.' ); + } + if ( strideY === 0 ) { + throw new RangeError( 'invalid argument. Twelfth argument must be non-zero.' ); + } + // Check if we can early return... + if ( M === 0 || N === 0 || ( alpha === 0.0 && beta === 1.0 ) ) { + return y; + } + if ( trans === 'none' ) { + lenx = N; + leny = M; + } else { + lenx = M; + leny = N; + } + if ( alpha === 0.0 ) { + return y; + } + if ( strideX > 0 ) { + kx = 0; + } else { + kx = ( 1 - lenx ) * strideX; + } + if ( strideY > 0 ) { + ky = 0; + } else { + ky = ( 1 - leny ) * strideY; + } + // Form: y = beta*y + iy = ky; + if ( beta !== 1.0 ) { + if ( beta === 0.0 ) { + sfill( leny, 0.0, y, strideY ); + } else { + for ( i = 0; i < leny; i++ ) { + y[ iy ] *= beta; + iy += strideY; + } + } + } + if ( + ( trans === 'none' && order === 'column-major' ) || + ( trans !== 'none' && order === 'row-major' ) + ) { + // Form y = alpha*A*x + y + jx = kx; + for ( i = 0; i < N; i++ ) { + if ( x[ jx ] !== 0.0 ) { + temp = f32( alpha * x[ jx ] ); + iy = ky; + for ( j = 0; j < M; j++ ) { + y[ iy ] += f32( ( A[ ( i * LDA ) + j ] ) * temp ); + iy += strideY; + } + } + jx += strideX; + } + return y; + } + // Form y = alpha*A**T*x + y + jy = ky; + for ( i = 0; i < M; i++ ) { + temp = 0.0; + ix = kx; + for ( j = 0; j < N; j++ ) { + temp += f32( ( A[ ( i * LDA ) + j ] ) * x[ ix ] ); + ix += strideX; + } + y[ jy ] += f32( alpha * temp ); + jy += strideY; + } + return y; +} + + +// EXPORTS // + +module.exports = sgemv; diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/package.json b/lib/node_modules/@stdlib/blas/base/sgemv/package.json new file mode 100644 index 000000000000..db8bddc2708e --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/package.json @@ -0,0 +1,68 @@ +{ + "name": "@stdlib/blas/base/sgemv", + "version": "0.0.0", + "description": "Perform one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y are vectors and A is an m by n matrix.", + "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": { + "benchmark": "./benchmark", + "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", + "stdmath", + "mathematics", + "math", + "blas", + "level 2", + "sgemv", + "linear", + "algebra", + "subroutines", + "array", + "ndarray", + "float32", + "float", + "float32array" + ] +} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/REQUIRE b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/REQUIRE new file mode 100644 index 000000000000..308c3be89c85 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/REQUIRE @@ -0,0 +1,2 @@ +julia 1.5 +JSON 0.21 diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xnyn.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xnyn.json new file mode 100644 index 000000000000..30f2e9b61d8d --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xnyn.json @@ -0,0 +1,15 @@ +{ + "order": "column-major", + "trans": "none", + "M": 3, + "N": 2, + "alpha": 1, + "lda": 3, + "A": [1, 2, 3, 4, 5, 6], + "x": [1, 2, 3], + "strideX": -1, + "beta": 1, + "y": [7, 8, 9, 10], + "strideY": -2, + "y_out": [ 19, 8, 18, 10 ] +} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xnyp.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xnyp.json new file mode 100644 index 000000000000..e5e7745e9ec9 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xnyp.json @@ -0,0 +1,15 @@ +{ + "order": "column-major", + "trans": "none", + "M": 3, + "N": 3, + "alpha": 1, + "lda": 3, + "A": [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ], + "x": [ 3, 2, 1 ], + "strideX": -1, + "beta": 1, + "y": [ 5, 6, 7, 8, 9, 10 ], + "strideY": 2, + "y_out": [ 35, 6, 43, 8, 51, 10 ] +} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xoyo.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xoyo.json new file mode 100644 index 000000000000..c76e80e8c43e --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xoyo.json @@ -0,0 +1,15 @@ +{ + "order": "row-major", + "trans": "none", + "M": 2, + "N": 1, + "alpha": 0.00000000, + "lda": 3, + "strideX": 1, + "beta": 0.899999976, + "strideY": 1, + "A": [ 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000 ], + "x": [ 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000 ], + "y": [ 0.00000000, 0.00000000, 10.0000000, 20.0000000, 35.0000000, 56.0000000, 84.0000000, 120.000000, 165.000000, 220.000000, 286.000000, 364.000000, 455.000000, 560.000000, 680.000000, 816.000000, 969.000000, 1140.00000, 1330.00000, 1540.00000, 1771.00000, 2024.00000, 2300.00000, 2600.00000, 2925.00000, 3276.00000, 3654.00000, 4060.00000, 4495.00000, 4960.00000, 5456.00000, 5984.00000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000 ], + "y_out": [ 0.00000000, 0.00000000, 10.0000000, 20.0000000, 35.0000000, 56.0000000, 84.0000000, 120.000000, 165.000000, 220.000000, 286.000000, 364.000000, 455.000000, 560.000000, 680.000000, 816.000000, 969.000000, 1140.00000, 1330.00000, 1540.00000, 1771.00000, 2024.00000, 2300.00000, 2600.00000, 2925.00000, 3276.00000, 3654.00000, 4060.00000, 4495.00000, 4960.00000, 5456.00000, 5984.00000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000 ] +} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xoyt.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xoyt.json new file mode 100644 index 000000000000..27dc7ac0ba0f --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xoyt.json @@ -0,0 +1,15 @@ +{ + "order": "row-major", + "trans": "none", + "M": 2, + "N": 1, + "alpha": 0.00000000, + "lda": 3, + "strideX": 1, + "beta": 0.899999976, + "strideY": 2, + "A": [ 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000 ], + "x": [ 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000 ], + "y": [ 0.00000000, 0.00000000, 0.00000000, 20.0000000, 35.0000000, 56.0000000, 84.0000000, 120.000000, 165.000000, 220.000000, 286.000000, 364.000000, 455.000000, 560.000000, 680.000000, 816.000000, 969.000000, 1140.00000, 1330.00000, 1540.00000, 1771.00000, 2024.00000, 2300.00000, 2600.00000, 2925.00000, 3276.00000, 3654.00000, 4060.00000, 4495.00000, 4960.00000, 5456.00000, 5984.00000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000 ], + "y_out": [ 0.00000000, 0.00000000, 0.00000000, 20.0000000, 35.0000000, 56.0000000, 84.0000000, 120.000000, 165.000000, 220.000000, 286.000000, 364.000000, 455.000000, 560.000000, 680.000000, 816.000000, 969.000000, 1140.00000, 1330.00000, 1540.00000, 1771.00000, 2024.00000, 2300.00000, 2600.00000, 2925.00000, 3276.00000, 3654.00000, 4060.00000, 4495.00000, 4960.00000, 5456.00000, 5984.00000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000 ] +} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xpyn.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xpyn.json new file mode 100644 index 000000000000..56edc551bc7b --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xpyn.json @@ -0,0 +1,15 @@ +{ + "order": "row-major", + "trans": "none", + "M": 2, + "N": 3, + "alpha": 1, + "lda": 3, + "A": [ 1, 2, 3, 4, 5, 6 ], + "x": [ 1, 2, 3 ], + "strideX": 1, + "beta": 1, + "y": [ 7, 8, 9, 10 ], + "strideY": -2, + "y_out": [ 39, 8, 23, 10 ] +} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xpyp.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xpyp.json new file mode 100644 index 000000000000..93860e4ed69b --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xpyp.json @@ -0,0 +1,15 @@ +{ + "order": "row-major", + "trans": "none", + "M": 2, + "N": 3, + "alpha": 1, + "lda": 3, + "A": [1, 2, 3, 4, 5, 6], + "x": [1, 1, 1], + "strideX": 1, + "beta": 1, + "y": [1, 1], + "strideY": 1, + "y_out": [ 7.0, 16.0 ] +} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/test.js b/lib/node_modules/@stdlib/blas/base/sgemv/test/test.js new file mode 100644 index 000000000000..2964493396f9 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/test.js @@ -0,0 +1,82 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2024 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 proxyquire = require( 'proxyquire' ); +var IS_BROWSER = require( '@stdlib/assert/is-browser' ); +var sgemv = require( './../lib' ); + + +// VARIABLES // + +var opts = { + 'skip': IS_BROWSER +}; + + +// TESTS // + +tape( 'main export is a function', function test( t ) { + t.ok( true, __filename ); + t.strictEqual( typeof sgemv, 'function', 'main export is a function' ); + t.end(); +}); + +tape( 'attached to the main export is a method providing an ndarray interface', function test( t ) { + t.strictEqual( typeof sgemv.ndarray, 'function', 'method is a function' ); + t.end(); +}); + +tape( 'if a native implementation is available, the main export is the native implementation', opts, function test( t ) { + var sgemv = proxyquire( './../lib', { + '@stdlib/utils/try-require': tryRequire + }); + + t.strictEqual( sgemv, mock, 'returns expected value' ); + t.end(); + + function tryRequire() { + return mock; + } + + function mock() { + // Mock... + } +}); + +tape( 'if a native implementation is not available, the main export is a JavaScript implementation', opts, function test( t ) { + var sgemv; + var main; + + main = require( './../lib/sgemv.js' ); + + sgemv = proxyquire( './../lib', { + '@stdlib/utils/try-require': tryRequire + }); + + t.strictEqual( sgemv, main, 'returns expected value' ); + t.end(); + + function tryRequire() { + return new Error( 'Cannot find module' ); + } +}); diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/test.ndarray.js b/lib/node_modules/@stdlib/blas/base/sgemv/test/test.ndarray.js new file mode 100644 index 000000000000..15a04022a995 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/test.ndarray.js @@ -0,0 +1,292 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2024 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 Float32Array = require( '@stdlib/array/float32' ); +var EPS = require( '@stdlib/constants/float32/eps' ); +var abs = require( '@stdlib/math/base/special/abs' ); +var sgemv = require( './../lib/ndarray.js' ); + + +// FIXTURES // + +var stridesxoyo = require( './fixtures/julia/strides_xoyo.json' ); +var stridesxoyt = require( './fixtures/julia/strides_xoyt.json' ); +var stridexpyp = require( './fixtures/julia/strides_xpyp.json' ); +var stridexnyp = require( './fixtures/julia/strides_xnyp.json' ); +var stridexpyn = require( './fixtures/julia/strides_xpyn.json' ); +var stridexnyn = require( './fixtures/julia/strides_xnyn.json' ); + + +// FUNCTIONS // + +/** +* Tests for element-wise approximate equality. +* +* @private +* @param {Object} t - test object +* @param {Collection} actual - actual values +* @param {Collection} expected - expected values +* @param {number} rtol - relative tolerance +*/ +function isApprox( t, actual, expected, rtol ) { + var delta; + var tol; + var i; + + t.strictEqual( actual.length, expected.length, 'returns expected value' ); + for ( i = 0; i < expected.length; i++ ) { + if ( actual[ i ] === expected[ i ] ) { + t.strictEqual( actual[ i ], expected[ i ], 'returns expected value' ); + } else { + delta = abs( actual[ i ] - expected[ i ] ); + tol = rtol * EPS * abs( expected[ i ] ); + t.ok( delta <= tol, 'within tolerance. actual: '+actual[ i ]+'. expected: '+expected[ i ]+'. delta: '+delta+'. tol: '+tol+'.' ); + } + } +} + + +// TESTS // + +tape( 'main export is a function', function test( t ) { + t.ok( true, __filename ); + t.strictEqual( typeof sgemv, 'function', 'main export is a function' ); + t.end(); +}); + +tape( 'the function has an arity of 14', function test( t ) { + t.strictEqual( sgemv.length, 14, 'returns expected value' ); + t.end(); +}); + +tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y` (sx=1, sy=1)', function test( t ) { + var expected; + var alpha; + var order; + var trans; + var beta; + var lda; + var out; + var a; + var m; + var n; + var x; + var y; + + order = stridesxoyo.order; + trans = stridesxoyo.trans; + + m = stridesxoyo.M; + n = stridesxoyo.N; + lda = stridesxoyo.lda; + + alpha = stridesxoyo.alpha; + beta = stridesxoyo.beta; + + a = new Float32Array( stridesxoyo.A ); + x = new Float32Array( stridesxoyo.x ); + y = new Float32Array( stridesxoyo.y ); + + expected = new Float32Array( stridesxoyo.y_out ); + + out = sgemv( order, trans, m, n, alpha, a, lda, x, 1, 0, beta, y, 1, 0 ); + isApprox( t, y, expected, 2.0 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); + +tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y` (sx=1, sy=2)', function test( t ) { + var expected; + var alpha; + var order; + var trans; + var beta; + var lda; + var out; + var a; + var m; + var n; + var x; + var y; + + order = stridesxoyt.order; + trans = stridesxoyt.trans; + + m = stridesxoyt.M; + n = stridesxoyt.N; + lda = stridesxoyt.lda; + + alpha = stridesxoyt.alpha; + beta = stridesxoyt.beta; + + a = new Float32Array( stridesxoyt.A ); + x = new Float32Array( stridesxoyt.x ); + y = new Float32Array( stridesxoyt.y ); + + expected = new Float32Array( stridesxoyt.y_out ); + + out = sgemv( order, trans, m, n, alpha, a, lda, x, 1, 0, beta, y, 2, 0 ); + isApprox( t, y, expected, 2.0 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); + +tape( 'the function supports `y` offset', function test( t ) { + var expected; + var alpha; + var order; + var trans; + var beta; + var lda; + var out; + var a; + var m; + var n; + var x; + var y; + + order = stridexpyn.order; + trans = stridexpyn.trans; + + m = stridexpyn.M; + n = stridexpyn.N; + lda = stridexpyn.lda; + + alpha = stridexpyn.alpha; + beta = stridexpyn.beta; + + a = new Float32Array( stridexpyn.A ); + x = new Float32Array( stridexpyn.x ); + y = new Float32Array( stridexpyn.y ); + + expected = new Float32Array( stridexpyn.y_out ); + + out = sgemv( order, trans, m, n, alpha, a, lda, x, 1, 0, beta, y, -2, 2 ); + isApprox( t, y, expected, 2.0 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); + +tape( 'the function supports `x` offset', function test( t ) { + var expected; + var alpha; + var order; + var trans; + var beta; + var lda; + var out; + var a; + var m; + var n; + var x; + var y; + + order = stridexnyp.order; + trans = stridexnyp.trans; + + m = stridexnyp.M; + n = stridexnyp.N; + lda = stridexnyp.lda; + + alpha = stridexnyp.alpha; + beta = stridexnyp.beta; + + a = new Float32Array( stridexnyp.A ); + x = new Float32Array( stridexnyp.x ); + y = new Float32Array( stridexnyp.y ); + + expected = new Float32Array( stridexnyp.y_out ); + + out = sgemv( order, trans, m, n, alpha, a, lda, x, -1, 2, beta, y, 2, 0 ); + isApprox( t, y, expected, 2.0 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); + +tape( 'the function returns a reference to the second input array', function test( t ) { + var alpha; + var order; + var trans; + var beta; + var lda; + var out; + var a; + var m; + var n; + var x; + var y; + + order = stridexpyp.order; + trans = stridexpyp.trans; + + m = stridexpyp.M; + n = stridexpyp.N; + lda = stridexpyp.lda; + + alpha = stridexpyp.alpha; + beta = stridexpyp.beta; + + a = new Float32Array( stridexpyp.A ); + x = new Float32Array( stridexpyp.x ); + y = new Float32Array( stridexpyp.y ); + + out = sgemv( order, trans, m, n, alpha, a, lda, x, 1, 0, beta, y, 1, 0 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); + +tape( 'the function supports complex access patterns', function test( t ) { + var expected; + var alpha; + var order; + var trans; + var beta; + var lda; + var out; + var a; + var m; + var n; + var x; + var y; + + order = stridexnyn.order; + trans = stridexnyn.trans; + + m = stridexnyn.M; + n = stridexnyn.N; + lda = stridexnyn.lda; + + alpha = stridexnyn.alpha; + beta = stridexnyn.beta; + + a = new Float32Array( stridexnyn.A ); + x = new Float32Array( stridexnyn.x ); + y = new Float32Array( stridexnyn.y ); + + expected = new Float32Array( stridexnyn.y_out ); + + out = sgemv( order, trans, m, n, alpha, a, lda, x, -1, 1, beta, y, -2, 4 ); + isApprox( t, y, expected, 2.0 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/test.sgemv.js b/lib/node_modules/@stdlib/blas/base/sgemv/test/test.sgemv.js new file mode 100644 index 000000000000..b6f97b3fef70 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/test.sgemv.js @@ -0,0 +1,292 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2024 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 Float32Array = require( '@stdlib/array/float32' ); +var EPS = require( '@stdlib/constants/float32/eps' ); +var abs = require( '@stdlib/math/base/special/abs' ); +var sgemv = require( './../lib/sgemv.js' ); + + +// FIXTURES // + +var stridesxoyo = require( './fixtures/julia/strides_xoyo.json' ); +var stridesxoyt = require( './fixtures/julia/strides_xoyt.json' ); +var stridexpyp = require( './fixtures/julia/strides_xpyp.json' ); +var stridexnyp = require( './fixtures/julia/strides_xnyp.json' ); +var stridexpyn = require( './fixtures/julia/strides_xpyn.json' ); +var stridexnyn = require( './fixtures/julia/strides_xnyn.json' ); + + +// FUNCTIONS // + +/** +* Tests for element-wise approximate equality. +* +* @private +* @param {Object} t - test object +* @param {Collection} actual - actual values +* @param {Collection} expected - expected values +* @param {number} rtol - relative tolerance +*/ +function isApprox( t, actual, expected, rtol ) { + var delta; + var tol; + var i; + + t.strictEqual( actual.length, expected.length, 'returns expected value' ); + for ( i = 0; i < expected.length; i++ ) { + if ( actual[ i ] === expected[ i ] ) { + t.strictEqual( actual[ i ], expected[ i ], 'returns expected value' ); + } else { + delta = abs( actual[ i ] - expected[ i ] ); + tol = rtol * EPS * abs( expected[ i ] ); + t.ok( delta <= tol, 'within tolerance. actual: '+actual[ i ]+'. expected: '+expected[ i ]+'. delta: '+delta+'. tol: '+tol+'.' ); + } + } +} + + +// TESTS // + +tape( 'main export is a function', function test( t ) { + t.ok( true, __filename ); + t.strictEqual( typeof sgemv, 'function', 'main export is a function' ); + t.end(); +}); + +tape( 'the function has an arity of 12', function test( t ) { + t.strictEqual( sgemv.length, 12, 'returns expected value' ); + t.end(); +}); + +tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y` (sx=1, sy=1)', function test( t ) { + var expected; + var alpha; + var order; + var trans; + var beta; + var lda; + var out; + var a; + var m; + var n; + var x; + var y; + + order = stridesxoyo.order; + trans = stridesxoyo.trans; + + m = stridesxoyo.M; + n = stridesxoyo.N; + lda = stridesxoyo.lda; + + alpha = stridesxoyo.alpha; + beta = stridesxoyo.beta; + + a = new Float32Array( stridesxoyo.A ); + x = new Float32Array( stridesxoyo.x ); + y = new Float32Array( stridesxoyo.y ); + + expected = new Float32Array( stridesxoyo.y_out ); + + out = sgemv( order, trans, m, n, alpha, a, lda, x, 1, beta, y, 1 ); + isApprox( t, y, expected, 2.0 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); + +tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y` (sx=1, sy=2)', function test( t ) { + var expected; + var alpha; + var order; + var trans; + var beta; + var lda; + var out; + var a; + var m; + var n; + var x; + var y; + + order = stridesxoyt.order; + trans = stridesxoyt.trans; + + m = stridesxoyt.M; + n = stridesxoyt.N; + lda = stridesxoyt.lda; + + alpha = stridesxoyt.alpha; + beta = stridesxoyt.beta; + + a = new Float32Array( stridesxoyt.A ); + x = new Float32Array( stridesxoyt.x ); + y = new Float32Array( stridesxoyt.y ); + + expected = new Float32Array( stridesxoyt.y_out ); + + out = sgemv( order, trans, m, n, alpha, a, lda, x, 1, beta, y, 2 ); + isApprox( t, y, expected, 2.0 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); + +tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y` (sx=1, sy=-2)', function test( t ) { + var expected; + var alpha; + var order; + var trans; + var beta; + var lda; + var out; + var a; + var m; + var n; + var x; + var y; + + order = stridexpyn.order; + trans = stridexpyn.trans; + + m = stridexpyn.M; + n = stridexpyn.N; + lda = stridexpyn.lda; + + alpha = stridexpyn.alpha; + beta = stridexpyn.beta; + + a = new Float32Array( stridexpyn.A ); + x = new Float32Array( stridexpyn.x ); + y = new Float32Array( stridexpyn.y ); + + expected = new Float32Array( stridexpyn.y_out ); + + out = sgemv( order, trans, m, n, alpha, a, lda, x, 1, beta, y, -2 ); + isApprox( t, y, expected, 2.0 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); + +tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y` (sx=-1, sy=2)', function test( t ) { + var expected; + var alpha; + var order; + var trans; + var beta; + var lda; + var out; + var a; + var m; + var n; + var x; + var y; + + order = stridexnyp.order; + trans = stridexnyp.trans; + + m = stridexnyp.M; + n = stridexnyp.N; + lda = stridexnyp.lda; + + alpha = stridexnyp.alpha; + beta = stridexnyp.beta; + + a = new Float32Array( stridexnyp.A ); + x = new Float32Array( stridexnyp.x ); + y = new Float32Array( stridexnyp.y ); + + expected = new Float32Array( stridexnyp.y_out ); + + out = sgemv( order, trans, m, n, alpha, a, lda, x, -1, beta, y, 2 ); + isApprox( t, y, expected, 2.0 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); + +tape( 'the function returns a reference to the second input array', function test( t ) { + var alpha; + var order; + var trans; + var beta; + var lda; + var out; + var a; + var m; + var n; + var x; + var y; + + order = stridexpyp.order; + trans = stridexpyp.trans; + + m = stridexpyp.M; + n = stridexpyp.N; + lda = stridexpyp.lda; + + alpha = stridexpyp.alpha; + beta = stridexpyp.beta; + + a = new Float32Array( stridexpyp.A ); + x = new Float32Array( stridexpyp.x ); + y = new Float32Array( stridexpyp.y ); + + out = sgemv( order, trans, m, n, alpha, a, lda, x, 1, beta, y, 1 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); + +tape( 'the function supports complex access patterns', function test( t ) { + var expected; + var alpha; + var order; + var trans; + var beta; + var lda; + var out; + var a; + var m; + var n; + var x; + var y; + + order = stridexnyn.order; + trans = stridexnyn.trans; + + m = stridexnyn.M; + n = stridexnyn.N; + lda = stridexnyn.lda; + + alpha = stridexnyn.alpha; + beta = stridexnyn.beta; + + a = new Float32Array( stridexnyn.A ); + x = new Float32Array( stridexnyn.x ); + y = new Float32Array( stridexnyn.y ); + + expected = new Float32Array( stridexnyn.y_out ); + + out = sgemv( order, trans, m, n, alpha, a, lda, x, -1, beta, y, -2 ); + isApprox( t, y, expected, 2.0 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); From 1952fdaf10e265e6f4ffc3e72caa20ccb19623c9 Mon Sep 17 00:00:00 2001 From: aman-095 Date: Sat, 22 Jun 2024 12:55:07 +0530 Subject: [PATCH 02/19] refactor: update implementation and descriptions --- .../@stdlib/blas/base/sgemv/lib/ndarray.js | 12 +++++------- .../@stdlib/blas/base/sgemv/lib/sgemv.js | 2 +- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/lib/ndarray.js b/lib/node_modules/@stdlib/blas/base/sgemv/lib/ndarray.js index aee9b6879d7e..44e39726e7c5 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/lib/ndarray.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/lib/ndarray.js @@ -22,7 +22,8 @@ // MODULES // -var sfill = require( '@stdlib/blas/ext/base/sfill' ); +var sfill = require( '@stdlib/blas/ext/base/sfill' ).ndarray; +var sscal = require('@stdlib/blas/base/sscal').ndarray; var max = require( '@stdlib/math/base/special/max' ); var f32 = require( '@stdlib/number/float64/base/to-float32' ); var isLayout = require( '@stdlib/blas/base/assert/is-layout' ); @@ -32,7 +33,7 @@ var isMatrixTranspose = require( '@stdlib/blas/base/assert/is-transpose-operatio // MAIN // /** -* Performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y are vectors and A is an m by n matrix. +* Performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y are vectors and, A is an m by n matrix. * * @param {string} order - storage layout * @param {string} trans - specifies the operation to be performed @@ -118,12 +119,9 @@ function sgemv( order, trans, M, N, alpha, A, LDA, x, strideX, offsetX, beta, y, iy = ky; if ( beta !== 1.0 ) { if( beta === 0.0 ) { - sfill( leny, 0.0, y, strideY ); + sfill( leny, 0.0, y, strideY, offsetY ); } else { - for( i = 0; i < leny; i++ ) { - y[ iy ] *= beta; - iy += strideY; - } + sscal( leny, beta, y, strideY, offsetY ); } } if ( alpha === 0.0 ) { diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/lib/sgemv.js b/lib/node_modules/@stdlib/blas/base/sgemv/lib/sgemv.js index b92f1c9dd150..7857b0915bb9 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/lib/sgemv.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/lib/sgemv.js @@ -63,7 +63,7 @@ var isMatrixTranspose = require( '@stdlib/blas/base/assert/is-transpose-operatio * sgemv( 'row-major', 'none', 2, 3, 1.0, A, 3, x, 1, 1.0, y, 1 ); * // y => [ 7.0, 16.0 ] */ -function sgemv( order, trans, M, N, alpha, A, LDA, x, strideX, beta, y, strideY ) { // eslint-disable-line max-params +function sgemv( order, trans, M, N, alpha, A, LDA, x, strideX, beta, y, strideY ) { // eslint-disable-line max-params, max-len var lenx; var leny; var temp; From eb816664584b5da6bdc40a01569d26334cafa305 Mon Sep 17 00:00:00 2001 From: aman-095 Date: Mon, 22 Jul 2024 12:40:58 +0530 Subject: [PATCH 03/19] refactor: update implementation, descriptions and examples --- .../blas/base/sgemv/benchmark/benchmark.js | 2 +- .../base/sgemv/benchmark/benchmark.ndarray.js | 2 +- .../@stdlib/blas/base/sgemv/docs/repl.txt | 97 ++-- .../blas/base/sgemv/docs/types/index.d.ts | 66 ++- .../blas/base/sgemv/docs/types/test.ts | 508 ++++++++++-------- .../@stdlib/blas/base/sgemv/examples/index.js | 2 +- .../@stdlib/blas/base/sgemv/lib/base.js | 147 +++++ .../@stdlib/blas/base/sgemv/lib/index.js | 4 +- .../@stdlib/blas/base/sgemv/lib/ndarray.js | 109 +--- .../@stdlib/blas/base/sgemv/lib/sgemv.js | 107 +--- .../test/fixtures/julia/strides_xnyn.json | 2 +- .../test/fixtures/julia/strides_xnyp.json | 2 +- .../test/fixtures/julia/strides_xoyo.json | 2 +- .../test/fixtures/julia/strides_xoyt.json | 2 +- .../test/fixtures/julia/strides_xpyn.json | 2 +- .../test/fixtures/julia/strides_xpyp.json | 2 +- 16 files changed, 560 insertions(+), 496 deletions(-) create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/lib/base.js diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/benchmark/benchmark.js b/lib/node_modules/@stdlib/blas/base/sgemv/benchmark/benchmark.js index 70b3047d01a9..ed278bbefddd 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/benchmark/benchmark.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/benchmark/benchmark.js @@ -63,7 +63,7 @@ function createBenchmark( len ) { b.tic(); for ( i = 0; i < b.iterations; i++ ) { - z = sgemv( 'row-major', 'none', len, len, 1.0, A, len, x, 1, 1.0, y, 1 ); + z = sgemv( 'row-major', 'no-transpose', len, len, 1.0, A, len, x, 1, 1.0, y, 1 ); if ( isnanf( z[ i%z.length ] ) ) { b.fail( 'should not return NaN' ); } diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/benchmark/benchmark.ndarray.js b/lib/node_modules/@stdlib/blas/base/sgemv/benchmark/benchmark.ndarray.js index a5647fccfb0e..e0cf66e348fe 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/benchmark/benchmark.ndarray.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/benchmark/benchmark.ndarray.js @@ -63,7 +63,7 @@ function createBenchmark( len ) { b.tic(); for ( i = 0; i < b.iterations; i++ ) { - z = sgemv( 'row-major', 'none', len, len, 1.0, A, len, x, 1, 0, 1.0, y, 1, 0 ); + z = sgemv( 'row-major', 'no-transpose', len, len, 1.0, A, len, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); if ( isnanf( z[ i%z.length ] ) ) { b.fail( 'should not return NaN' ); } diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/docs/repl.txt b/lib/node_modules/@stdlib/blas/base/sgemv/docs/repl.txt index 2704b8493f56..49a03ad8c643 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/docs/repl.txt +++ b/lib/node_modules/@stdlib/blas/base/sgemv/docs/repl.txt @@ -1,8 +1,8 @@ -{{alias}}( ord, trans, M, N, alpha, A, lda, x, sx, beta, y, sy ) - Perform one of the matrix-vector operations `y = alpha*A*x + beta*y` - or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y - are vectors and A is an m by n matrix. +{{alias}}( ord, tp, M, N, α, A, lda, x, sx, β, y, sy ) + Perform one of the matrix-vector operations `y = α*A*x + β*y` + or `y = α*A**T*x + β*y`, where `α` and `β` are scalars, `x` and `y` + are vectors and `A` is an `M` by `N` matrix. The stride parameters determine how operations are performed. @@ -11,7 +11,7 @@ If `M` or `N` is equal to `0`, the function returns `y` unchanged. - If `alpha` equals `0` and beta equals `1`, the function returns `y` + If `α` equals `0` and β equals `1`, the function returns `y` unchanged. Parameters @@ -19,8 +19,9 @@ ord: string Row-major (C-style) or column-major (Fortran-style) order. - trans: string - Specifies whether `A` is transpose, conjugate-transpose or none. + tp: string + Specifies whether `A` should be transposed, conjugate-transposed, or + not transposed. M: integer Number of rows in `A`. @@ -28,26 +29,27 @@ N: integer Number of columns in `A`. - alpha: number - Scalar. + α: number + Scalar constant. A: Float32Array - Matrix. + Input Matrix. lda: integer - Leading dimension. + Stride of the first dimension of `A` (a.k.a., leading dimension of the + matrix `A`). x: Float32Array - Input vector `x`. + First input vector. sx: integer Index increment for `x`. - beta: number - Scalar. + β: number + Scalar constant. y: Float32Array - Input/output vector `y`. + Second input vector. sy: integer Index increment for `y`. @@ -63,14 +65,16 @@ > var x = new {{alias:@stdlib/array/float32}}( [ 1.0, 1.0 ] ); > var y = new {{alias:@stdlib/array/float32}}( [ 1.0, 1.0 ] ); > var A = new {{alias:@stdlib/array/float32}}( [ 1.0, 2.0, 3.0, 4.0 ] ); - > {{alias}}( 'row-major', 'none', 2, 2, 1.0, A, 2, x, 1, 1.0, y, 1 ) + > var ord = 'row-major'; + > var tp = 'no-transpose'; + > {{alias}}( ord, tp, 2, 2, 1.0, A, 2, x, 1, 1.0, y, 1 ) [ 4.0, 8.0 ] // Advanced indexing: - > var x = new {{alias:@stdlib/array/float32}}( [ 1.0, 1.0 ] ); - > var y = new {{alias:@stdlib/array/float32}}( [ 1.0, 1.0 ] ); - > var A = new {{alias:@stdlib/array/float32}}( [ 1.0, 2.0, 3.0, 4.0 ] ); - > {{alias}}( 'row-major', 'none', 2, 2, 1.0, A, 2, x, -1, 1.0, y, -1 ) + > x = new {{alias:@stdlib/array/float32}}( [ 1.0, 1.0 ] ); + > y = new {{alias:@stdlib/array/float32}}( [ 1.0, 1.0 ] ); + > A = new {{alias:@stdlib/array/float32}}( [ 1.0, 2.0, 3.0, 4.0 ] ); + > {{alias}}( ord, tp, 2, 2, 1.0, A, 2, x, -1, 1.0, y, -1 ) [ 8.0, 4.0 ] // Using typed array views: @@ -79,15 +83,16 @@ > var A = new {{alias:@stdlib/array/float32}}( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] ); > var x1 = new {{alias:@stdlib/array/float32}}( x0.buffer, x0.BYTES_PER_ELEMENT*1 ); > var y1 = new {{alias:@stdlib/array/float32}}( y0.buffer, y0.BYTES_PER_ELEMENT*1 ); - > {{alias}}( 'row-major', 'none', 2, 2, 1.0, A, 2, x1, -1, 1.0, y1, -1 ) + > {{alias}}( ord, tp, 2, 2, 1.0, A, 2, x1, -1, 1.0, y1, -1 ); > y0 [ 1.0, 8.0 ] -{{alias}}.ndarray( ord, trans, M, N, alpha, A, lda, x, sx, ox, beta, y, sy, oy ) - Perform one of the matrix-vector operations `y = alpha*A*x + beta*y` - or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y - are vectors and A is an m by n matrix using alternative indexing semantics. +{{alias}}.ndarray( ord, tp, M, N, α, A, sa1, sa2, oa, x, sx, ox, β, y, sy, oy ) + Perform one of the matrix-vector operations `y = α*A*x + β*y` + or `y = α*A**T*x + β*y`, where `α` and `β` are scalars, `x` and `y` + are vectors and `A` is an `M` by `N` matrix using alternative indexing + semantics. While typed array views mandate a view offset based on the underlying buffer, the offset parameters support indexing semantics based on starting @@ -98,8 +103,9 @@ ord: string Row-major (C-style) or column-major (Fortran-style) order. - trans: string - Specifies whether `A` is transposed. + tp: string + Specifies whether `A` should be transposed, conjugate-transposed, or + not transposed. M: integer Number of rows in `A`. @@ -107,17 +113,23 @@ N: integer Number of columns in `A`. - alpha: number - Scalar. + α: number + Scalar constant. A: Float32Array - Matrix. + Input Matrix. - lda: integer - Leading dimension. + sa1: integer + Stride of the first dimension of `A`. + + sa2: integer + Stride of the second dimension of `A`. + + oa: integer + Starting index for `A`. x: Float32Array - Input vector `x`. + First input vector. sx: integer Index increment for `x`. @@ -125,11 +137,11 @@ ox: integer Starting index for `x`. - beta: number - Scalar. + β: number + Scalar constant. y: Float32Array - Input/output vector `y`. + Second input vector. sy: integer Index increment for `y`. @@ -144,22 +156,13 @@ Examples -------- - // Standard usage: > var x = new {{alias:@stdlib/array/float32}}( [ 1.0, 1.0 ] ); > var y = new {{alias:@stdlib/array/float32}}( [ 1.0, 1.0 ] ); > var A = new {{alias:@stdlib/array/float32}}( [ 1.0, 2.0, 3.0, 4.0 ] ); > var ord = 'row-major'; - > {{alias}}.ndarray( ord, 'none', 2, 2, 1, A, 2, x, 1, 0, 1, y, 1, 0 ) + > var tp = 'no-transpose'; + > {{alias}}.ndarray( ord, tp, 2, 2, 1, A, 2, 1, 0, x, 1, 0, 1, y, 1, 0 ) [ 4.0, 8.0 ] - // Advanced indexing: - > var x = new {{alias:@stdlib/array/float32}}( [ 1.0, 1.0 ] ); - > var y = new {{alias:@stdlib/array/float32}}( [ 1.0, 1.0 ] ); - > var A = new {{alias:@stdlib/array/float32}}( [ 1.0, 2.0, 3.0, 4.0 ] ); - > var ord = 'row-major'; - > {{alias}}.ndarray( ord, 'none', 2, 2, 1, A, 2, x, -1, 1, 1, y, -1, 1 ) - [ 8.0, 4.0 ] - See Also -------- - diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/docs/types/index.d.ts b/lib/node_modules/@stdlib/blas/base/sgemv/docs/types/index.d.ts index 235b389e8fd0..7da05fc5ae67 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/docs/types/index.d.ts +++ b/lib/node_modules/@stdlib/blas/base/sgemv/docs/types/index.d.ts @@ -18,15 +18,9 @@ // TypeScript Version: 4.1 -/** -* Storage layouts. -*/ -type Order = 'row-major' | 'column-major'; +/// -/** -* Upper or lower triangular indicator. -*/ -type Trans = 'none' | 'transpose' | 'conjugate transpose'; +import { Layout, TransposeOperation } from '@stdlib/types/blas'; /** * Interface describing `ssymv`. @@ -36,18 +30,18 @@ interface Routine { * Performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y are vectors and A is an m by n matrix. * * @param order - storage layout - * @param trans - specifies the operation to be performed - * @param NonNegative M - number of rows in the matrix `A` + * @param trans - specifies whether `A` should be transposed, conjugate-transposed, or not transposed + * @param M - number of rows in the matrix `A` * @param N - number of columns in the matrix `A` * @param alpha - scalar constant - * @param A - matrix of coefficients + * @param A - input matrix * @param LDA - stride of the first dimension of `A` (a.k.a., leading dimension of the matrix `A`) - * @param x - an `M` element vector + * @param x - first input vector * @param strideX - `x` stride length * @param beta - scalar constant - * @param y - an `N` element vector + * @param y - second input vector * @param strideY - `y` stride length - * @returns output array `y` + * @returns `y` * * @example * var Float32Array = require( '@stdlib/array/float32' ); @@ -56,29 +50,31 @@ interface Routine { * var x = new Float32Array( [ 1.0, 1.0, 1.0 ] ); * var y = new Float32Array( [ 1.0, 1.0 ] ); * - * sgemv( 'row-major', 'none', 2, 3, 1.0, A, 3, x, 1, 1.0, y, 1 ); + * sgemv( 'row-major', 'no-transpose', 2, 3, 1.0, A, 3, x, 1, 1.0, y, 1 ); * // y => [ 7.0, 16.0 ] */ - ( order: Order, trans: Trans, M: number, N: number, alpha: number, A: Float32Array, LDA: number, x: Float32Array, strideX: number, beta: number, y: Float32Array, strideY: number ): Float32Array; + ( order: Layout, trans: TransposeOperation, M: number, N: number, alpha: number, A: Float32Array, LDA: number, x: Float32Array, strideX: number, beta: number, y: Float32Array, strideY: number ): Float32Array; /** * Performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y are vectors and A is an m by n matrix using alternative indexing semantics. * * @param order - storage layout - * @param trans - specifies the operation to be performed - * @param NonNegative M - number of rows in the matrix `A` + * @param trans - specifies whether `A` should be transposed, conjugate-transposed, or not transposed + * @param M - number of rows in the matrix `A` * @param N - number of columns in the matrix `A` * @param alpha - scalar constant - * @param A - matrix of coefficients - * @param LDA - stride of the first dimension of `A` (a.k.a., leading dimension of the matrix `A`) - * @param x - an `M` element vector + * @param A - input matrix + * @param strideA1 - stride of the first dimension of `A` + * @param strideA2 - stride of the second dimension of `A` + * @param offsetA - starting index for `A` + * @param x - first input vector * @param strideX - `x` stride length - * @param offsetX - `x` index offset + * @param offsetX - starting index for `x` * @param beta - scalar constant - * @param y - an `N` element vector + * @param y - second input vector * @param strideY - `y` stride length - * @param offsetY - `y` index offset - * @returns output array `y` + * @param offsetY - starting index for `y` + * @returns `y` * * @example * var Float32Array = require( '@stdlib/array/float32' ); @@ -87,28 +83,28 @@ interface Routine { * var x = new Float32Array( [ 1.0, 1.0, 1.0 ] ); * var y = new Float32Array( [ 1.0, 1.0 ] ); * - * sgemv( 'row-major', 'none', 2, 3, 1.0, A, 3, x, 1, 0, 1.0, y, 1, 0 ); + * sgemv( 'row-major', 'no-transpose', 2, 3, 1.0, A, 3, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); * // y => [ 7.0, 16.0 ] */ - ndarray( order: Order, trans: Trans, M: number, N: number, alpha: number, A: Float32Array, LDA: number, x: Float32Array, strideX: number, offsetX: number, beta: number, y: Float32Array, strideY: number, offsetY: number ): Float32Array; + ndarray( order: Layout, trans: TransposeOperation, M: number, N: number, alpha: number, A: Float32Array, LDA: number, x: Float32Array, strideX: number, offsetX: number, beta: number, y: Float32Array, strideY: number, offsetY: number ): Float32Array; } /** * Performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y are vectors and A is an m by n matrix. * * @param order - storage layout -* @param trans - specifies the operation to be performed -* @param NonNegative M - number of rows in the matrix `A` +* @param trans - specifies whether `A` should be transposed, conjugate-transposed, or not transposed +* @param M - number of rows in the matrix `A` * @param N - number of columns in the matrix `A` * @param alpha - scalar constant -* @param A - matrix of coefficients +* @param A - input matrix * @param LDA - stride of the first dimension of `A` (a.k.a., leading dimension of the matrix `A`) -* @param x - an `M` element vector +* @param x - first input vector * @param strideX - `x` stride length * @param beta - scalar constant -* @param y - an `N` element vector +* @param y - second input vector * @param strideY - `y` stride length -* @returns output array `y` +* @returns `y` * * @example * var Float32Array = require( '@stdlib/array/float32' ); @@ -117,7 +113,7 @@ interface Routine { * var x = new Float32Array( [ 1.0, 1.0, 1.0 ] ); * var y = new Float32Array( [ 1.0, 1.0, 1.0 ] ); * -* sgemv( 'row-major', 'none', 3, 3, 1.0, A, 3, x1, -1, 1.0, y1, -1 ); +* sgemv( 'row-major', 'no-transpose', 3, 3, 1.0, A, 3, x1, -1, 1.0, y1, -1 ); * // y => [ 25.0, 16.0, 7.0 ] * * @example @@ -127,7 +123,7 @@ interface Routine { * var x = new Float32Array( [ 1.0, 1.0, 1.0 ] ); * var y = new Float32Array( [ 1.0, 1.0, 1.0 ] ); * -* sgemv( 'row-major', 'none', 3, 3, 1.0, A, 3, x1, -1, 2, 1.0, y1, -1, 2 ); +* sgemv( 'row-major', 'no-transpose', 3, 3, 1.0, A, 3, 1, 0, x1, -1, 2, 1.0, y1, -1, 2 ); * // y => [ 25.0, 16.0, 7.0 ] */ declare var sgemv: Routine; diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/docs/types/test.ts b/lib/node_modules/@stdlib/blas/base/sgemv/docs/types/test.ts index 5eff29c1ee6f..7cee2138cf88 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/docs/types/test.ts +++ b/lib/node_modules/@stdlib/blas/base/sgemv/docs/types/test.ts @@ -27,7 +27,7 @@ import sgemv = require( './index' ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectType Float32Array + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectType Float32Array } // The compiler throws an error if the function is provided a first argument which is not a string... @@ -36,14 +36,14 @@ import sgemv = require( './index' ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv( 10, 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( true, 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( false, 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( null, 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( undefined, 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( [], 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( {}, 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( ( x: number ): number => x, 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 10, 'no-transpose', 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( true, 'no-transpose', 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( false, 'no-transpose', 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( null, 'no-transpose', 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( undefined, 'no-transpose', 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( [], 'no-transpose', 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( {}, 'no-transpose', 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( ( x: number ): number => x, 'no-transpose', 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError } // The compiler throws an error if the function is provided a second argument which is not a character... @@ -68,14 +68,14 @@ import sgemv = require( './index' ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv( 'row-major', 'none', '10', 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', true, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', false, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', null, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', undefined, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', [], 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', {}, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', ( x: number ): number => x, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', '10', 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', true, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', false, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', null, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', undefined, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', [], 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', {}, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', ( x: number ): number => x, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError } // The compiler throws an error if the function is provided a fourth argument which is not a number... @@ -84,14 +84,14 @@ import sgemv = require( './index' ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv( 'row-major', 'none', 10, '10', 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, true, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, false, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, null, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, undefined, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, [], 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, {}, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, ( x: number ): number => x, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, '10', 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, true, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, false, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, null, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, undefined, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, [], 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, {}, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, ( x: number ): number => x, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError } // The compiler throws an error if the function is provided a fifth argument which is not a number... @@ -100,14 +100,14 @@ import sgemv = require( './index' ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv( 'row-major', 'none', 10, 10, '10', A, 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, true, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, false, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, null, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, undefined, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, [], A, 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, {}, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, ( x: number ): number => x, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, '10', A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, true, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, false, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, null, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, undefined, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, [], A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, {}, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, ( x: number ): number => x, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError } // The compiler throws an error if the function is provided a sixth argument which is not a Float32Array... @@ -115,15 +115,15 @@ import sgemv = require( './index' ); const x = new Float32Array( 10 ); const y = new Float32Array( 10 ); - sgemv( 'row-major', 'none', 10, 10, 1.0, 10, 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, '10', 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, true, 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, false, 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, null, 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, undefined, 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, [ '1' ], 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, {}, 10, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, ( x: number ): number => x, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, 10, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, '10', 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, true, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, false, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, null, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, undefined, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, [ '1' ], 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, {}, 10, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, ( x: number ): number => x, 10, x, 1, 1.0, y, 1 ); // $ExpectError } // The compiler throws an error if the function is provided a seventh argument which is not a number... @@ -132,14 +132,14 @@ import sgemv = require( './index' ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv( 'row-major', 'none', 10, 10, 1.0, A, '10', x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, true, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, false, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, null, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, undefined, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, [], x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, {}, x, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, ( x: number ): number => x, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, '10', x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, true, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, false, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, null, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, undefined, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, [], x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, {}, x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, ( x: number ): number => x, x, 1, 1.0, y, 1 ); // $ExpectError } // The compiler throws an error if the function is provided a eighth argument which is not a Float32Array... @@ -147,15 +147,15 @@ import sgemv = require( './index' ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, 10, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, '10', 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, true, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, false, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, null, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, undefined, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, [ '1' ], 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, {}, 1, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, ( x: number ): number => x, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 10, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, '10', 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, true, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, false, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, null, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, undefined, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, [ '1' ], 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, {}, 1, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, ( x: number ): number => x, 1, 1.0, y, 1 ); // $ExpectError } // The compiler throws an error if the function is provided a ninth argument which is not a number... @@ -164,14 +164,14 @@ import sgemv = require( './index' ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, '10', 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, true, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, false, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, null, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, undefined, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, [], 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, {}, 1.0, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, ( x: number ): number => x, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, '10', 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, true, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, false, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, null, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, undefined, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, [], 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, {}, 1.0, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, ( x: number ): number => x, 1.0, y, 1 ); // $ExpectError } // The compiler throws an error if the function is provided a tenth argument which is not a number... @@ -180,14 +180,14 @@ import sgemv = require( './index' ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, '10', y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, true, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, false, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, null, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, undefined, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, [], y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, {}, y, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, ( x: number ): number => x, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, 1, '10', y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, 1, true, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, 1, false, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, 1, null, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, 1, undefined, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, 1, [], y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, 1, {}, y, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, 1, ( x: number ): number => x, y, 1 ); // $ExpectError } // The compiler throws an error if the function is provided a eleventh argument which is not a Float32Array... @@ -195,15 +195,15 @@ import sgemv = require( './index' ); const x = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, 10, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, '10', 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, true, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, false, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, null, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, undefined, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, [ '1' ], 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, {}, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, ( x: number ): number => x, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, 1, 1.0, 10, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, 1, 1.0, '10', 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, 1, 1.0, true, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, 1, 1.0, false, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, 1, 1.0, null, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, 1, 1.0, undefined, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, 1, 1.0, [ '1' ], 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, 1, 1.0, {}, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, 1, 1.0, ( x: number ): number => x, 1 ); // $ExpectError } // The compiler throws an error if the function is provided a twelvfth argument which is not a number... @@ -212,14 +212,14 @@ import sgemv = require( './index' ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, '10' ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, true ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, false ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, null ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, undefined ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, [] ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, {} ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, ( x: number ): number => x ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, 1, 1.0, y, '10' ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, 1, 1.0, y, true ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, 1, 1.0, y, false ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, 1, 1.0, y, null ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, 1, 1.0, y, undefined ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, 1, 1.0, y, [] ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, 1, 1.0, y, {} ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, 1, 1.0, y, ( x: number ): number => x ); // $ExpectError } // The compiler throws an error if the function is provided an unsupported number of arguments... @@ -230,17 +230,17 @@ import sgemv = require( './index' ); sgemv(); // $ExpectError sgemv( 'row-major' ); // $ExpectError - sgemv( 'row-major', 'none' ); // $ExpectError - sgemv( 'row-major', 'none', 10 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0 ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y ); // $ExpectError - sgemv( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1, 10 ); // $ExpectError + sgemv( 'row-major', 'no-transpose' ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, 1 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, 1, 1.0 ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, 1, 1.0, y ); // $ExpectError + sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1, 10 ); // $ExpectError } // Attached to main export is an `ndarray` method which returns a Float32Array... @@ -249,7 +249,7 @@ import sgemv = require( './index' ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectType Float32Array + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectType Float32Array } // The compiler throws an error if the function is provided a first argument which is not a string... @@ -258,14 +258,14 @@ import sgemv = require( './index' ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv.ndarray( 10, 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( true, 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( false, 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( null, 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( undefined, 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( [], 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( {}, 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( ( x: number ): number => x, 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 10, 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( true, 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( false, 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( null, 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( undefined, 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( [], 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( {}, 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( ( x: number ): number => x, 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError } // The compiler throws an error if the function is provided a second argument which is not a character... @@ -274,14 +274,14 @@ import sgemv = require( './index' ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv.ndarray( 'row-major', 10, 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', true, 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', false, 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', null, 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', undefined, 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', [ '1' ], 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', {}, 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', ( x: number ): number => x, 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 10, 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', true, 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', false, 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', null, 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', undefined, 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', [ '1' ], 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', {}, 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', ( x: number ): number => x, 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError } // The compiler throws an error if the function is provided a third argument which is not a number... @@ -290,14 +290,14 @@ import sgemv = require( './index' ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv.ndarray( 'row-major', 'none', '10', 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', true, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', false, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', null, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', undefined, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', [], 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', {}, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', ( x: number ): number => x, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', '10', 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', true, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', false, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', null, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', undefined, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', [], 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', {}, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', ( x: number ): number => x, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError } // The compiler throws an error if the function is provided a fourth argument which is not a number... @@ -306,14 +306,14 @@ import sgemv = require( './index' ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv.ndarray( 'row-major', 'none', 10, '10', 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, true, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, false, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, null, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, undefined, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, [], 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, {}, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, ( x: number ): number => x, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, '10', 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, true, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, false, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, null, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, undefined, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, [], 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, {}, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, ( x: number ): number => x, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError } // The compiler throws an error if the function is provided a fifth argument which is not a number... @@ -322,14 +322,14 @@ import sgemv = require( './index' ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv.ndarray( 'row-major', 'none', 10, 10, '10', A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, true, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, false, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, null, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, undefined, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, [], A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, {}, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, ( x: number ): number => x, A, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, '10', A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, true, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, false, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, null, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, undefined, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, [], A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, {}, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, ( x: number ): number => x, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError } // The compiler throws an error if the function is provided a sixth argument which is not a Float32Array... @@ -337,15 +337,15 @@ import sgemv = require( './index' ); const x = new Float32Array( 10 ); const y = new Float32Array( 10 ); - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, 10, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, '10', 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, true, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, false, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, null, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, undefined, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, [ '1' ], 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, {}, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, ( x: number ): number => x, 10, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, 10, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, '10', 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, true, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, false, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, null, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, undefined, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, [ '1' ], 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, {}, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, ( x: number ): number => x, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError } // The compiler throws an error if the function is provided a seventh argument which is not a number... @@ -354,30 +354,30 @@ import sgemv = require( './index' ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, '10', x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, true, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, false, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, null, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, undefined, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, [], x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, {}, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, ( x: number ): number => x, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, '10', 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, true, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, false, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, null, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, undefined, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, [], 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, {}, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, ( x: number ): number => x, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError } -// The compiler throws an error if the function is provided a eighth argument which is not a Float32Array... +// The compiler throws an error if the function is provided a eighth argument which is not a number... { + const x = new Float32Array( 10 ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, 10, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, '10', 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, true, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, false, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, null, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, undefined, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, [ '1' ], 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, {}, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, ( x: number ): number => x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, '10', 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, true, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, false, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, null, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, undefined, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, [], 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, {}, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, ( x: number ): number => x, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError } // The compiler throws an error if the function is provided a ninth argument which is not a number... @@ -386,30 +386,30 @@ import sgemv = require( './index' ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, '10', 0, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, true, 0, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, false, 0, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, null, 0, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, undefined, 0, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, [], 0, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, {}, 0, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, ( x: number ): number => x, 0, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, '10', x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, true, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, false, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, null, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, undefined, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, [], x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, {}, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, ( x: number ): number => x, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError } -// The compiler throws an error if the function is provided a tenth argument which is not a number... +// The compiler throws an error if the function is provided a tenth argument which is not a Float32Array... { - const x = new Float32Array( 10 ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, '10', 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, true, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, false, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, null, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, undefined, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, [], 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, {}, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, ( x: number ): number => x, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, 10, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, '10', 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, true, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, false, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, null, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, undefined, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, [ '1' ], 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, {}, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, ( x: number ): number => x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError } // The compiler throws an error if the function is provided a eleventh argument which is not a number... @@ -418,30 +418,30 @@ import sgemv = require( './index' ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, '10', y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, true, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, false, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, null, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, undefined, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, [], y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, {}, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, ( x: number ): number => x, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, '10', 0, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, true, 0, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, false, 0, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, null, 0, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, undefined, 0, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, [], 0, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, {}, 0, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, ( x: number ): number => x, 0, 1.0, y, 1 ); // $ExpectError } -// The compiler throws an error if the function is provided a twelfth argument which is not a Float32Array... +// The compiler throws an error if the function is provided a twelfth argument which is not a number... { const x = new Float32Array( 10 ); + const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, 10, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, '10', 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, true, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, false, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, null, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, undefined, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, [ '1' ], 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, {}, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, ( x: number ): number => x, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, '10', 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, true, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, false, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, null, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, undefined, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, [], 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, {}, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, ( x: number ): number => x, 1.0, y, 1 ); // $ExpectError } // The compiler throws an error if the function is provided a thirteenth argument which is not a number... @@ -450,30 +450,62 @@ import sgemv = require( './index' ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, '10', 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, true, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, false, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, null, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, undefined, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, [], 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, {}, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, ( x: number ): number => x, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, '10', y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, true, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, false, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, null, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, undefined, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, [], y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, {}, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, ( x: number ): number => x, y, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a fourteenth argument which is not a Float32Array... +{ + const x = new Float32Array( 10 ); + const A = new Float32Array( 20 ); + + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, 10, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, '10', 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, true, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, false, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, null, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, undefined, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, [ '1' ], 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, {}, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, ( x: number ): number => x, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a fifteenth argument which is not a number... +{ + const x = new Float32Array( 10 ); + const y = new Float32Array( 10 ); + const A = new Float32Array( 20 ); + + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, '10', 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, true, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, false, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, null, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, undefined, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, [], 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, {}, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, ( x: number ): number => x, 0 ); // $ExpectError } -// The compiler throws an error if the function is provided a fourteenth argument which is not a number... +// The compiler throws an error if the function is provided a sixteenth argument which is not a number... { const x = new Float32Array( 10 ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, '10' ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, true ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, false ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, null ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, undefined ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, [] ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, {} ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, ( x: number ): number => x ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, '10' ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, true ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, false ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, null ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, undefined ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, [] ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, {} ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, ( x: number ): number => x ); // $ExpectError } // The compiler throws an error if the `ndarray` method is provided an unsupported number of arguments... @@ -484,17 +516,19 @@ import sgemv = require( './index' ); sgemv.ndarray(); // $ExpectError sgemv.ndarray( 'row-major' ); // $ExpectError - sgemv.ndarray( 'row-major', 'none' ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'row-major', 'none', 10, 10, 1.0, A, 10, x, 1, 0, 1.0, y, 1, 0, 10 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose' ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0, 10 ); // $ExpectError } diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/examples/index.js b/lib/node_modules/@stdlib/blas/base/sgemv/examples/index.js index 1c807e1be377..1efd7e6fa214 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/examples/index.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/examples/index.js @@ -34,5 +34,5 @@ var A = discreteUniform( M*N, 0, 255, opts ); var x = discreteUniform( N, 0, 255, opts ); var y = discreteUniform( M, 0, 255, opts ); -sgemv.ndarray( 'row-major', 'none', M, N, 1.0, A, N, x, -1, 2, 1.0, y, -1, 2 ); +sgemv( 'row-major', 'none', M, N, 1.0, A, N, x, -1, 1.0, y, -1 ); console.log( y ); diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/lib/base.js b/lib/node_modules/@stdlib/blas/base/sgemv/lib/base.js new file mode 100644 index 000000000000..5298c0a46166 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/lib/base.js @@ -0,0 +1,147 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2024 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 sfill = require( '@stdlib/blas/ext/base/sfill' ).ndarray; +var sscal = require('@stdlib/blas/base/sscal').ndarray; +var f32 = require( '@stdlib/number/float64/base/to-float32' ); + + +// MAIN // + +/** +* Performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y are vectors and, A is an m by n matrix. +* +* @param {string} order - storage layout +* @param {string} trans - specifies whether `A` should be transposed, conjugate-transposed, or not transposed +* @param {NonNegativeInteger} M - number of rows in the matrix `A` +* @param {NonNegativeInteger} N - number of columns in the matrix `A` +* @param {number} alpha - scalar constant +* @param {Float32Array} A - input matrix +* @param {integer} strideA1 - stride of the first dimension of `A` +* @param {integer} strideA2 - stride of the second dimension of `A` +* @param {NonNegativeInteger} offsetA - starting index for `A` +* @param {Float32Array} x - first input vector +* @param {integer} strideX - `x` stride length +* @param {NonNegativeInteger} offsetX - starting index for `x` +* @param {number} beta - scalar constant +* @param {Float32Array} y - second input vector +* @param {integer} strideY - `y` stride length +* @param {NonNegativeInteger} offsetY - starting index for `y` +* @returns {Float32Array} `y` +* +* @example +* var Float32Array = require( '@stdlib/array/float32' ); +* +* var A = new Float32Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] ); +* var x = new Float32Array( [ 1.0, 1.0, 1.0 ] ); +* var y = new Float32Array( [ 1.0, 1.0 ] ); +* +* sgemv( 'row-major', 'no-transpose', 2, 3, 1.0, A, 3, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); +* // y => [ 7.0, 16.0 ] +*/ +function sgemv( order, trans, M, N, alpha, A, strideA1, strideA2, offsetA, x, strideX, offsetX, beta, y, strideY, offsetY ) { // eslint-disable-line max-params, max-len + var isRowMajor; + var isColMajor; + var leny; + var temp; + var ix1; + var iy1; + var sa0; + var sa1; + var i1; + var i0; + var kx; + var ky; + var oa; + + // Note on variable naming convention: sa#, ix#, i# where # corresponds to the loop number, with `0` being the innermost loop... + + isRowMajor = ( order === 'row-major' ); + isColMajor = ( order === 'column-major' ); + + if ( isRowMajor ) { + // For row-major matrices, the last dimension has the fastest changing index... + sa0 = strideA2; // stride for innermost loop + sa1 = strideA1; // stride for outermost loop + } else { // isColMajor + // For column-major matrices, the first dimension has the fastest changing index... + sa0 = strideA1; // stride for innermost loop + sa1 = strideA2; // stride for outermost loop + } + + kx = offsetX; + ky = offsetY; + leny = N; + if ( trans === 'no-transpose' ) { + leny = M; + } + // y = beta*y + if ( beta !== 1.0 ) { + if ( beta === 0.0 ) { + sfill( leny, 0.0, y, strideY, offsetY ); + } else { + sscal( leny, beta, y, strideY, offsetY ); + } + } + if ( alpha === 0.0 ) { + return y; + } + if ( + ( isColMajor && trans === 'no-transpose' ) || + ( isRowMajor && trans !== 'no-transpose' ) + ) { + // Form y = alpha*A*x + y + ix1 = kx; + for ( i1 = 0; i1 < N; i1++ ) { + if ( x[ ix1 ] !== 0.0 ) { + temp = f32( alpha * x[ ix1 ] ); + oa = offsetA + (sa1*i1); + iy1 = ky; + for ( i0 = 0; i0 < M; i0++ ) { + y[ iy1 ] += f32( A[ oa+(sa0*i0) ] * temp ); + iy1 += strideY; + } + } + ix1 += strideX; + } + return y; + } + // Form y = alpha*A**T*x + y + iy1 = ky; + for ( i1 = 0; i1 < M; i1++ ) { + temp = 0.0; + ix1 = kx; + oa = offsetA + (sa1*i1); + for ( i0 = 0; i0 < N; i0++ ) { + temp += f32( A[ oa+(sa0*i0) ] * x[ ix1 ] ); + ix1 += strideX; + } + y[ iy1 ] += f32( alpha * temp ); + iy1 += strideY; + } + return y; +} + + +// EXPORTS // + +module.exports = sgemv; diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/lib/index.js b/lib/node_modules/@stdlib/blas/base/sgemv/lib/index.js index b453be5ef10b..226e7912555f 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/lib/index.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/lib/index.js @@ -31,7 +31,7 @@ * var x = new Float32Array( [ 1.0, 1.0, 1.0 ] ); * var y = new Float32Array( [ 1.0, 1.0 ] ); * -* sgemv( 'row-major', 'none', 2, 3, 1.0, A, 3, x, 1, 1.0, y, 1 ); +* sgemv( 'row-major', 'no-transpose', 2, 3, 1.0, A, 3, x, 1, 1.0, y, 1 ); * // y => [ 7.0, 16.0 ] * * @example @@ -42,7 +42,7 @@ * var x = new Float32Array( [ 1.0, 1.0, 1.0 ] ); * var y = new Float32Array( [ 1.0, 1.0 ] ); * -* sgemv.ndarray( 'row-major', 'none', 2, 3, 1.0, A, 3, x, 1, 0, 1.0, y, 1, 0 ); +* sgemv.ndarray( 'row-major', 'no-transpose', 2, 3, 1.0, A, 3, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); * // y => [ 7.0, 16.0 ] */ diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/lib/ndarray.js b/lib/node_modules/@stdlib/blas/base/sgemv/lib/ndarray.js index 44e39726e7c5..5f28212d5668 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/lib/ndarray.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/lib/ndarray.js @@ -22,12 +22,10 @@ // MODULES // -var sfill = require( '@stdlib/blas/ext/base/sfill' ).ndarray; -var sscal = require('@stdlib/blas/base/sscal').ndarray; -var max = require( '@stdlib/math/base/special/max' ); -var f32 = require( '@stdlib/number/float64/base/to-float32' ); var isLayout = require( '@stdlib/blas/base/assert/is-layout' ); var isMatrixTranspose = require( '@stdlib/blas/base/assert/is-transpose-operation' ); +var format = require( '@stdlib/string/format' ); +var base = require( './base.js' ); // MAIN // @@ -36,26 +34,27 @@ var isMatrixTranspose = require( '@stdlib/blas/base/assert/is-transpose-operatio * Performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y are vectors and, A is an m by n matrix. * * @param {string} order - storage layout -* @param {string} trans - specifies the operation to be performed +* @param {string} trans - specifies whether `A` should be transposed, conjugate-transposed, or not transposed * @param {NonNegativeInteger} M - number of rows in the matrix `A` * @param {NonNegativeInteger} N - number of columns in the matrix `A` * @param {number} alpha - scalar constant -* @param {Float32Array} A - matrix of coefficients -* @param {PositiveInteger} LDA - stride of the first dimension of `A` (a.k.a., leading dimension of the matrix `A`) -* @param {Float32Array} x - an `M` element vector +* @param {Float32Array} A - input matrix +* @param {integer} strideA1 - stride of the first dimension of `A` +* @param {integer} strideA2 - stride of the second dimension of `A` +* @param {NonNegativeInteger} offsetA - starting index for `A` +* @param {Float32Array} x - first input vector * @param {integer} strideX - `x` stride length -* @param {NonNegativeInteger} offsetX - `x` starting index +* @param {NonNegativeInteger} offsetX - starting index for `x` * @param {number} beta - scalar constant -* @param {Float32Array} y - an `N` element vector +* @param {Float32Array} y - second input vector * @param {integer} strideY - `y` stride length -* @param {NonNegativeInteger} offsetY - `y` starting index +* @param {NonNegativeInteger} offsetY - starting index for `y` * @throws {TypeError} first argument must be a valid order * @throws {TypeError} second argument must specify whether to consider transpose of the given matrix or not * @throws {RangeError} third argument must be a nonnegative integer * @throws {RangeError} fourth argument must be a nonnegative integer -* @throws {RangeError} seventh argument must be greater than or equal to max(1,M) -* @throws {RangeError} ninth argument must be non-zero -* @throws {RangeError} thirteenth argument must be non-zero +* @throws {RangeError} eleventh argument must be non-zero +* @throws {RangeError} fifteenth argument must be non-zero * @returns {Float32Array} `y` * * @example @@ -65,97 +64,33 @@ var isMatrixTranspose = require( '@stdlib/blas/base/assert/is-transpose-operatio * var x = new Float32Array( [ 1.0, 1.0, 1.0 ] ); * var y = new Float32Array( [ 1.0, 1.0 ] ); * -* sgemv( 'row-major', 'none', 2, 3, 1.0, A, 3, x, 1, 0, 1.0, y, 1, 0 ); +* sgemv( 'row-major', 'no-transpose', 2, 3, 1.0, A, 3, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); * // y => [ 7.0, 16.0 ] */ -function sgemv( order, trans, M, N, alpha, A, LDA, x, strideX, offsetX, beta, y, strideY, offsetY ) { - var lenx; - var leny; - var temp; - var ix; - var iy; - var jx; - var jy; - var kx; - var ky; - var i; - var j; - +function sgemv( order, trans, M, N, alpha, A, strideA1, strideA2, offsetA, x, strideX, offsetX, beta, y, strideY, offsetY ) { if ( !isLayout( order ) ) { - throw new TypeError( 'invalid argument. First argument must be a valid order. Value: `%s`.', order ); + throw new TypeError( format( 'invalid argument. First argument must be a valid order. Value: `%s`.', order ) ); } if ( !isMatrixTranspose( trans ) ) { - throw new TypeError( 'invalid argument. Second argument must specify whether to take transpose, conjugate-transpose or none. Value: `%s`.', trans ); + throw new TypeError( format( 'invalid argument. Second argument must specify whether to take transpose, conjugate-transpose or none. Value: `%s`.', trans ) ); } if( M < 0 ) { - throw new RangeError( 'invalid argument. Third argument must be a nonnegative integer. Value: `%d`.', M ); + throw new RangeError( format( 'invalid argument. Third argument must be a nonnegative integer. Value: `%d`.', M ) ); } if( N < 0 ) { - throw new RangeError( 'invalid argument. Fourth argument must be a nonnegative integer. Value: `%d`.', N ); - } - if( LDA < max( 1, M ) ) { - throw new RangeError( 'invalid argument. Seventh argument must be greater than or equal to max(1,M). Value: `%d`.', LDA ); + throw new RangeError( format( 'invalid argument. Fourth argument must be a nonnegative integer. Value: `%d`.', N ) ); } if( strideX === 0 ) { - throw new RangeError( 'invalid argument. Ninth argument must be non-zero.' ); + throw new RangeError( format( 'invalid argument. Eleventh argument must be non-zero.' ) ); } if( strideY === 0 ) { - throw new RangeError( 'invalid argument. Thirteenth argument must be non-zero.' ); + throw new RangeError( format( 'invalid argument. Fifteenth argument must be non-zero.' ) ); } // Check if we can early return... if ( M === 0 || N === 0 || ( alpha === 0.0 && beta === 1.0 ) ) { return y; } - if ( trans === 'none' ) { - lenx = N; - leny = M; - } else { - lenx = M; - leny = N; - } - kx = offsetX; - ky = offsetY; - // y = beta*y - iy = ky; - if ( beta !== 1.0 ) { - if( beta === 0.0 ) { - sfill( leny, 0.0, y, strideY, offsetY ); - } else { - sscal( leny, beta, y, strideY, offsetY ); - } - } - if ( alpha === 0.0 ) { - return y; - } - if ( ( trans === 'none' && order === 'column-major' ) || ( trans !== 'none' && order === 'row-major' ) ) { - // Form y = alpha*A*x + y - jx = kx; - for ( i = 0; i < N; i++ ) { - if ( x[ jx ] !== 0.0 ) { - temp = f32( alpha * x[ jx ] ); - iy = ky; - for ( j = 0; j < M; j++ ) { - y[ iy ] += f32( A[ i * LDA + j ] * temp ); - iy += strideY; - } - } - jx += strideX; - } - } else { - // Form y = alpha*A**T*x + y - jy = ky; - for ( i = 0; i < M; i++ ) { - temp = 0.0; - ix = kx; - for ( j = 0; j < N; j++ ) { - temp += f32( A[ i * LDA + j ] * x[ ix ] ); - ix += strideX; - } - y[ jy ] += f32( alpha * temp ); - jy += strideY; - } - } - return y; + return base( order, trans, M, N, alpha, A, strideA1, strideA2, offsetA, x, strideX, offsetX, beta, y, strideY, offsetY ); } diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/lib/sgemv.js b/lib/node_modules/@stdlib/blas/base/sgemv/lib/sgemv.js index 7857b0915bb9..b9604b4efee4 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/lib/sgemv.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/lib/sgemv.js @@ -20,11 +20,12 @@ // MODULES // -var sfill = require( '@stdlib/blas/ext/base/sfill' ); var max = require( '@stdlib/math/base/special/max' ); -var f32 = require( '@stdlib/number/float64/base/to-float32' ); +var stride2offset = require( '@stdlib/strided/base/stride2offset' ); var isLayout = require( '@stdlib/blas/base/assert/is-layout' ); var isMatrixTranspose = require( '@stdlib/blas/base/assert/is-transpose-operation' ); +var format = require( '@stdlib/string/format' ); +var base = require( './base.js' ); // MAIN // @@ -33,13 +34,13 @@ var isMatrixTranspose = require( '@stdlib/blas/base/assert/is-transpose-operatio * Performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y are vectors and A is an m by n matrix. * * @param {string} order - storage layout -* @param {string} trans - specifies the operation to be performed +* @param {string} trans - specifies whether `A` should be transposed, conjugate-transposed, or not transposed * @param {NonNegativeInteger} M - number of rows in the matrix `A` * @param {NonNegativeInteger} N - number of columns in the matrix `A` * @param {number} alpha - scalar constant -* @param {Float32Array} A - matrix of coefficients +* @param {Float32Array} A - input matrix * @param {PositiveInteger} LDA - stride of the first dimension of `A` (a.k.a., leading dimension of the matrix `A`) -* @param {Float32Array} x - an `M` element vector +* @param {Float32Array} x - first input vector * @param {integer} strideX - `x` stride length * @param {number} beta - scalar constant * @param {Float32Array} y - an `N` element vector @@ -60,111 +61,59 @@ var isMatrixTranspose = require( '@stdlib/blas/base/assert/is-transpose-operatio * var x = new Float32Array( [ 1.0, 1.0, 1.0 ] ); * var y = new Float32Array( [ 1.0, 1.0 ] ); * -* sgemv( 'row-major', 'none', 2, 3, 1.0, A, 3, x, 1, 1.0, y, 1 ); +* sgemv( 'row-major', 'no-transpose', 2, 3, 1.0, A, 3, x, 1, 1.0, y, 1 ); * // y => [ 7.0, 16.0 ] */ function sgemv( order, trans, M, N, alpha, A, LDA, x, strideX, beta, y, strideY ) { // eslint-disable-line max-params, max-len var lenx; var leny; - var temp; - var ix; - var iy; - var jx; - var jy; - var kx; - var ky; - var i; - var j; + var sa1; + var sa2; + var ox; + var oy; if ( !isLayout( order ) ) { - throw new TypeError( 'invalid argument. First argument must be a valid order. Value: `%s`.', order ); + throw new TypeError( format( 'invalid argument. First argument must be a valid order. Value: `%s`.', order ) ); } if ( !isMatrixTranspose( trans ) ) { - throw new TypeError( 'invalid argument. Second argument must specify whether to take transpose, conjugate-transpose or none. Value: `%s`.', trans ); + throw new TypeError( format( 'invalid argument. Second argument must specify whether to take transpose, conjugate-transpose or none. Value: `%s`.', trans ) ); } if ( M < 0 ) { - throw new RangeError( 'invalid argument. Third argument must be a nonnegative integer. Value: `%d`.', M ); + throw new RangeError( format( 'invalid argument. Third argument must be a nonnegative integer. Value: `%d`.', M ) ); } if ( N < 0 ) { - throw new RangeError( 'invalid argument. Fourth argument must be a nonnegative integer. Value: `%d`.', N ); + throw new RangeError( format( 'invalid argument. Fourth argument must be a nonnegative integer. Value: `%d`.', N ) ); } if ( LDA < max( 1, M ) ) { - throw new RangeError( 'invalid argument. Seventh argument must be greater than or equal to max(1,M). Value: `%d`.', LDA ); + throw new RangeError( format( 'invalid argument. Seventh argument must be greater than or equal to max(1,M). Value: `%d`.', LDA ) ); } if ( strideX === 0 ) { - throw new RangeError( 'invalid argument. Ninth argument must be non-zero.' ); + throw new RangeError( format( 'invalid argument. Ninth argument must be non-zero.' ) ); } if ( strideY === 0 ) { - throw new RangeError( 'invalid argument. Twelfth argument must be non-zero.' ); + throw new RangeError( format( 'invalid argument. Twelfth argument must be non-zero.' ) ); } // Check if we can early return... if ( M === 0 || N === 0 || ( alpha === 0.0 && beta === 1.0 ) ) { return y; } - if ( trans === 'none' ) { + if ( trans === 'no-transpose' ) { lenx = N; leny = M; } else { lenx = M; leny = N; } - if ( alpha === 0.0 ) { - return y; - } - if ( strideX > 0 ) { - kx = 0; - } else { - kx = ( 1 - lenx ) * strideX; - } - if ( strideY > 0 ) { - ky = 0; - } else { - ky = ( 1 - leny ) * strideY; - } - // Form: y = beta*y - iy = ky; - if ( beta !== 1.0 ) { - if ( beta === 0.0 ) { - sfill( leny, 0.0, y, strideY ); - } else { - for ( i = 0; i < leny; i++ ) { - y[ iy ] *= beta; - iy += strideY; - } - } - } - if ( - ( trans === 'none' && order === 'column-major' ) || - ( trans !== 'none' && order === 'row-major' ) - ) { - // Form y = alpha*A*x + y - jx = kx; - for ( i = 0; i < N; i++ ) { - if ( x[ jx ] !== 0.0 ) { - temp = f32( alpha * x[ jx ] ); - iy = ky; - for ( j = 0; j < M; j++ ) { - y[ iy ] += f32( ( A[ ( i * LDA ) + j ] ) * temp ); - iy += strideY; - } - } - jx += strideX; - } - return y; - } - // Form y = alpha*A**T*x + y - jy = ky; - for ( i = 0; i < M; i++ ) { - temp = 0.0; - ix = kx; - for ( j = 0; j < N; j++ ) { - temp += f32( ( A[ ( i * LDA ) + j ] ) * x[ ix ] ); - ix += strideX; - } - y[ jy ] += f32( alpha * temp ); - jy += strideY; + ox = stride2offset( lenx, strideX ); + oy = stride2offset( leny, strideY ); + if ( order === 'column-major' ) { + sa1 = 1; + sa2 = LDA; + } else { // order === 'row-major' + sa1 = LDA; + sa2 = 1; } - return y; + return base( order, trans, M, N, alpha, A, sa1, sa2, 0, x, strideX, ox, beta, y, strideY, oy ); //eslint } diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xnyn.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xnyn.json index 30f2e9b61d8d..85e905297cdb 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xnyn.json +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xnyn.json @@ -1,6 +1,6 @@ { "order": "column-major", - "trans": "none", + "trans": "no-transpose", "M": 3, "N": 2, "alpha": 1, diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xnyp.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xnyp.json index e5e7745e9ec9..76edb0060f63 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xnyp.json +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xnyp.json @@ -1,6 +1,6 @@ { "order": "column-major", - "trans": "none", + "trans": "no-transpose", "M": 3, "N": 3, "alpha": 1, diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xoyo.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xoyo.json index c76e80e8c43e..a7761cb17d02 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xoyo.json +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xoyo.json @@ -1,6 +1,6 @@ { "order": "row-major", - "trans": "none", + "trans": "no-transpose", "M": 2, "N": 1, "alpha": 0.00000000, diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xoyt.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xoyt.json index 27dc7ac0ba0f..e88ad7651ad4 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xoyt.json +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xoyt.json @@ -1,6 +1,6 @@ { "order": "row-major", - "trans": "none", + "trans": "no-transpose", "M": 2, "N": 1, "alpha": 0.00000000, diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xpyn.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xpyn.json index 56edc551bc7b..f0be7781ef74 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xpyn.json +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xpyn.json @@ -1,6 +1,6 @@ { "order": "row-major", - "trans": "none", + "trans": "no-transpose", "M": 2, "N": 3, "alpha": 1, diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xpyp.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xpyp.json index 93860e4ed69b..a788624c0ef0 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xpyp.json +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xpyp.json @@ -1,6 +1,6 @@ { "order": "row-major", - "trans": "none", + "trans": "no-transpose", "M": 2, "N": 3, "alpha": 1, From c0d9bbc88d68705e3a807d0f25eb44db77a3c912 Mon Sep 17 00:00:00 2001 From: aman-095 Date: Tue, 23 Jul 2024 12:54:09 +0530 Subject: [PATCH 04/19] test: add test cases supporting strides for A --- .../@stdlib/blas/base/sgemv/lib/base.js | 22 +- .../@stdlib/blas/base/sgemv/lib/ndarray.js | 2 +- .../@stdlib/blas/base/sgemv/lib/sgemv.js | 8 +- .../column_major_complex_access_pattern.json | 19 + .../sgemv/test/fixtures/column_major_nt.json | 20 + .../sgemv/test/fixtures/column_major_oa.json | 19 + .../test/fixtures/column_major_sa1_sa2.json | 19 + .../test/fixtures/column_major_sa1_sa2n.json | 19 + .../test/fixtures/column_major_sa1n_sa2.json | 19 + .../test/fixtures/column_major_sa1n_sa2n.json | 19 + .../sgemv/test/fixtures/column_major_t.json | 20 + .../test/fixtures/column_major_xnyn.json | 20 + .../test/fixtures/column_major_xnyp.json | 20 + .../test/fixtures/column_major_xpyn.json | 20 + .../test/fixtures/column_major_xpyp.json | 20 + .../base/sgemv/test/fixtures/julia/REQUIRE | 2 - .../test/fixtures/julia/strides_xnyn.json | 15 - .../test/fixtures/julia/strides_xnyp.json | 15 - .../test/fixtures/julia/strides_xoyo.json | 15 - .../test/fixtures/julia/strides_xoyt.json | 15 - .../test/fixtures/julia/strides_xpyn.json | 15 - .../test/fixtures/julia/strides_xpyp.json | 15 - .../row_major_complex_access_pattern.json | 19 + .../sgemv/test/fixtures/row_major_nt.json | 20 + .../sgemv/test/fixtures/row_major_oa.json | 19 + .../test/fixtures/row_major_sa1_sa2.json | 19 + .../test/fixtures/row_major_sa1_sa2n.json | 19 + .../test/fixtures/row_major_sa1n_sa2.json | 19 + .../test/fixtures/row_major_sa1n_sa2n.json | 19 + .../base/sgemv/test/fixtures/row_major_t.json | 20 + .../sgemv/test/fixtures/row_major_xnyn.json | 20 + .../sgemv/test/fixtures/row_major_xnyp.json | 20 + .../sgemv/test/fixtures/row_major_xpyn.json | 20 + .../sgemv/test/fixtures/row_major_xpyp.json | 20 + .../blas/base/sgemv/test/test.ndarray.js | 31 +- .../blas/base/sgemv/test/test.sgemv.js | 522 +++++++++++++----- 36 files changed, 903 insertions(+), 242 deletions(-) create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_complex_access_pattern.json create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_nt.json create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_oa.json create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1_sa2.json create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1_sa2n.json create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1n_sa2.json create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1n_sa2n.json create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_t.json create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_xnyn.json create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_xnyp.json create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_xpyn.json create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_xpyp.json delete mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/REQUIRE delete mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xnyn.json delete mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xnyp.json delete mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xoyo.json delete mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xoyt.json delete mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xpyn.json delete mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xpyp.json create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_complex_access_pattern.json create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_nt.json create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_oa.json create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1_sa2.json create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1_sa2n.json create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1n_sa2.json create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1n_sa2n.json create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_t.json create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_xnyn.json create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_xnyp.json create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_xpyn.json create mode 100644 lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_xpyp.json diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/lib/base.js b/lib/node_modules/@stdlib/blas/base/sgemv/lib/base.js index 5298c0a46166..2faaa8066985 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/lib/base.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/lib/base.js @@ -109,29 +109,25 @@ function sgemv( order, trans, M, N, alpha, A, strideA1, strideA2, offsetA, x, st ( isColMajor && trans === 'no-transpose' ) || ( isRowMajor && trans !== 'no-transpose' ) ) { - // Form y = alpha*A*x + y ix1 = kx; for ( i1 = 0; i1 < N; i1++ ) { - if ( x[ ix1 ] !== 0.0 ) { - temp = f32( alpha * x[ ix1 ] ); - oa = offsetA + (sa1*i1); - iy1 = ky; - for ( i0 = 0; i0 < M; i0++ ) { - y[ iy1 ] += f32( A[ oa+(sa0*i0) ] * temp ); - iy1 += strideY; - } + temp = f32( alpha * x[ ix1 ] ); + oa = offsetA + (sa1*i1); + iy1 = ky; + for ( i0 = 0; i0 < M; i0++ ) { + y[ iy1 ] += f32( A[ oa+(sa0*i0) ] * temp ); + iy1 += strideY; } - ix1 += strideX; + ix1 += strideX; } return y; } - // Form y = alpha*A**T*x + y iy1 = ky; - for ( i1 = 0; i1 < M; i1++ ) { + for ( i1 = 0; i1 < N; i1++ ) { temp = 0.0; ix1 = kx; oa = offsetA + (sa1*i1); - for ( i0 = 0; i0 < N; i0++ ) { + for ( i0 = 0; i0 < M; i0++ ) { temp += f32( A[ oa+(sa0*i0) ] * x[ ix1 ] ); ix1 += strideX; } diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/lib/ndarray.js b/lib/node_modules/@stdlib/blas/base/sgemv/lib/ndarray.js index 5f28212d5668..e7043c298265 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/lib/ndarray.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/lib/ndarray.js @@ -90,7 +90,7 @@ function sgemv( order, trans, M, N, alpha, A, strideA1, strideA2, offsetA, x, st if ( M === 0 || N === 0 || ( alpha === 0.0 && beta === 1.0 ) ) { return y; } - return base( order, trans, M, N, alpha, A, strideA1, strideA2, offsetA, x, strideX, offsetX, beta, y, strideY, offsetY ); + return base( order, trans, M, N, alpha, A, strideA1, strideA2, offsetA, x, strideX, offsetX, beta, y, strideY, offsetY ); // eslint-disable-line max-len } diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/lib/sgemv.js b/lib/node_modules/@stdlib/blas/base/sgemv/lib/sgemv.js index b9604b4efee4..3cd6bc43c8ab 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/lib/sgemv.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/lib/sgemv.js @@ -84,9 +84,9 @@ function sgemv( order, trans, M, N, alpha, A, LDA, x, strideX, beta, y, strideY if ( N < 0 ) { throw new RangeError( format( 'invalid argument. Fourth argument must be a nonnegative integer. Value: `%d`.', N ) ); } - if ( LDA < max( 1, M ) ) { - throw new RangeError( format( 'invalid argument. Seventh argument must be greater than or equal to max(1,M). Value: `%d`.', LDA ) ); - } + // if ( LDA < max( 1, N ) ) { + // throw new RangeError( format( 'invalid argument. Seventh argument must be greater than or equal to max(1,M). Value: `%d`.', N, LDA ) ); + // } if ( strideX === 0 ) { throw new RangeError( format( 'invalid argument. Ninth argument must be non-zero.' ) ); } @@ -113,7 +113,7 @@ function sgemv( order, trans, M, N, alpha, A, LDA, x, strideX, beta, y, strideY sa1 = LDA; sa2 = 1; } - return base( order, trans, M, N, alpha, A, sa1, sa2, 0, x, strideX, ox, beta, y, strideY, oy ); //eslint + return base( order, trans, M, N, alpha, A, sa1, sa2, 0, x, strideX, ox, beta, y, strideY, oy ); // eslint-disable-line max-len } diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_complex_access_pattern.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_complex_access_pattern.json new file mode 100644 index 000000000000..c0521f3c6d8e --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_complex_access_pattern.json @@ -0,0 +1,19 @@ +{ + "order": "column-major", + "trans": "no-transpose", + "strideA1": -2, + "strideA2": -5, + "offsetA": 14, + "strideX": -1, + "offsetX": 2, + "strideY": -1, + "offsetY": 2, + "M": 3, + "N": 3, + "alpha": 0.5, + "beta": 0.5, + "A": [ 6, 999, 0, 999, 0, 5, 999, 4, 999, 0, 3, 999, 2, 999, 1 ], + "x": [ 3.0, 2.0, 1.0 ], + "y": [ 1.0, 2.0, 3.0 ], + "y_out": [ 31.0, 10.0, 1.0 ] +} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_nt.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_nt.json new file mode 100644 index 000000000000..4bc9d390233b --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_nt.json @@ -0,0 +1,20 @@ +{ + "order": "column-major", + "trans": "no-transpose", + "M": 4, + "N": 2, + "alpha": 0.5, + "beta": 0.5, + "lda": 4, + "A": [ 1.0, 3.0, 5.0, 7.0, 2.0, 4.0, 6.0, 8.0], + "x": [ 1.0, 2.0 ], + "y": [ 1.0, 2.0, 3.0, 4.0 ], + "strideA1": 1, + "strideA2": 4, + "offsetA": 0, + "strideX": 1, + "offsetX": 0, + "strideY": 1, + "offsetY": 0, + "y_out": [ 3.0, 6.5, 10.0, 13.5 ] +} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_oa.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_oa.json new file mode 100644 index 000000000000..b61295ff3d51 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_oa.json @@ -0,0 +1,19 @@ +{ + "order": "column-major", + "trans": "no-transpose", + "M": 3, + "N": 2, + "alpha": 0.5, + "beta": 0.5, + "A": [ 999.0, 999.0, 999.0, 999.0, 999.0, 1.0, 999.0, 3.0, 999.0, 5.0, 999.0, 999.0, 999.0, 999.0, 999.0, 2.0, 999.0, 4.0, 999.0, 6.0 ], + "x": [ 1.0, 2.0 ], + "y": [ 1.0, 2.0, 3.0 ], + "strideA1": 2, + "strideA2": 10, + "offsetA": 5, + "strideX": 1, + "offsetX": 0, + "strideY": 1, + "offsetY": 0, + "y_out": [ 3.0, 7.5, 10.0 ] +} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1_sa2.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1_sa2.json new file mode 100644 index 000000000000..287968536486 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1_sa2.json @@ -0,0 +1,19 @@ +{ + "order": "column-major", + "trans": "no-transpose", + "M": 3, + "N": 2, + "alpha": 0.5, + "beta": 0.5, + "A": [ 1.0, 999.0, 3.0, 999.0, 5.0, 999.0, 999.0, 999.0, 999.0, 999.0, 2.0, 999.0, 4.0, 999.0, 6.0 ], + "x": [ 1.0, 2.0 ], + "y": [ 1.0, 2.0, 3.0 ], + "strideA1": 2, + "strideA2": 10, + "offsetA": 0, + "strideX": 1, + "offsetX": 0, + "strideY": 1, + "offsetY": 0, + "y_out": [ 3.0, 7.5, 10.0 ] +} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1_sa2n.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1_sa2n.json new file mode 100644 index 000000000000..9b5d8edcd26d --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1_sa2n.json @@ -0,0 +1,19 @@ +{ + "order": "column-major", + "trans": "no-transpose", + "M": 3, + "N": 2, + "alpha": 0.5, + "beta": 0.5, + "A": [ 999.0, 999.0, 999.0, 999.0, 999.0, 2.0, 999.0, 4.0, 999.0, 6.0, 999.0, 999.0, 999.0, 999.0, 999.0, 1.0, 999.0, 3.0, 999.0, 5.0 ], + "x": [ 1.0, 2.0 ], + "y": [ 1.0, 2.0, 3.0 ], + "strideA1": 2, + "strideA2": -10, + "offsetA": 20, + "strideX": 1, + "offsetX": 0, + "strideY": 1, + "offsetY": 0, + "y_out": [ 3.0, 7.5, 10.0 ] +} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1n_sa2.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1n_sa2.json new file mode 100644 index 000000000000..6829ffbc5a8a --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1n_sa2.json @@ -0,0 +1,19 @@ +{ + "order": "column-major", + "trans": "no-transpose", + "M": 3, + "N": 2, + "alpha": 0.5, + "beta": 0.5, + "A": [ 999.0, 999.0, 999.0, 999.0, 999.0, 5.0, 999.0, 3.0, 999.0, 1.0, 999.0, 999.0, 999.0, 999.0, 999.0, 6.0, 999.0, 4.0, 999.0, 2.0 ], + "x": [ 1.0, 2.0 ], + "y": [ 1.0, 2.0, 3.0 ], + "strideA1": -2, + "strideA2": 10, + "offsetA": 9, + "strideX": 1, + "offsetX": 0, + "strideY": 1, + "offsetY": 0, + "y_out": [ 3.0, 7.5, 10.0 ] +} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1n_sa2n.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1n_sa2n.json new file mode 100644 index 000000000000..871a68e6db6e --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1n_sa2n.json @@ -0,0 +1,19 @@ +{ + "order": "column-major", + "trans": "no-transpose", + "M": 3, + "N": 2, + "alpha": 0.5, + "beta": 0.5, + "A": [ 999.0, 999.0, 999.0, 999.0, 999.0, 6.0, 999.0, 4.0, 999.0, 2.0, 999.0, 999.0, 999.0, 999.0, 999.0, 5.0, 999.0, 3.0, 999.0, 1.0 ], + "x": [ 1.0, 2.0 ], + "y": [ 1.0, 2.0, 3.0 ], + "strideA1": -2, + "strideA2": -10, + "offsetA": 24, + "strideX": 1, + "offsetX": 0, + "strideY": 1, + "offsetY": 0, + "y_out": [ 3.0, 7.5, 10.0 ] +} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_t.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_t.json new file mode 100644 index 000000000000..1ac93d99fe4f --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_t.json @@ -0,0 +1,20 @@ +{ + "order": "column-major", + "trans": "transpose", + "M": 2, + "N": 4, + "alpha": 0.5, + "beta": 0.5, + "lda": 2, + "A": [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ], + "x": [ 1.0, 2.0 ], + "y": [ 1.0, 2.0, 3.0, 4.0 ], + "strideA1": 1, + "strideA2": 4, + "offsetA": 0, + "strideX": 1, + "offsetX": 0, + "strideY": 1, + "offsetY": 0, + "y_out": [ 3.0, 6.5, 11.5, 15.5 ] +} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_xnyn.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_xnyn.json new file mode 100644 index 000000000000..284eddccf93f --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_xnyn.json @@ -0,0 +1,20 @@ +{ + "order": "column-major", + "trans": "no-transpose", + "M": 4, + "N": 2, + "alpha": 0.5, + "beta": 0.5, + "lda": 4, + "A": [ 1.0, 3.0, 5.0, 7.0, 2.0, 4.0, 6.0, 8.0], + "x": [ 2.0, 1.0 ], + "y": [ 1.0, 2.0, 3.0, 4.0 ], + "strideA1": 1, + "strideA2": 4, + "offsetA": 0, + "strideX": -1, + "offsetX": 1, + "strideY": -1, + "offsetY": 3, + "y_out": [ 12.0, 9.5, 7.0, 4.5 ] +} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_xnyp.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_xnyp.json new file mode 100644 index 000000000000..e8ff2247130c --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_xnyp.json @@ -0,0 +1,20 @@ +{ + "order": "column-major", + "trans": "no-transpose", + "M": 4, + "N": 2, + "alpha": 0.5, + "beta": 0.5, + "lda": 4, + "A": [ 1.0, 3.0, 5.0, 7.0, 2.0, 4.0, 6.0, 8.0], + "x": [ 2.0, 1.0 ], + "y": [ 1.0, 2.0, 3.0, 4.0 ], + "strideA1": 1, + "strideA2": 4, + "offsetA": 0, + "strideX": -1, + "offsetX": 1, + "strideY": 1, + "offsetY": 0, + "y_out": [ 3.0, 6.5, 10.0, 13.5 ] +} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_xpyn.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_xpyn.json new file mode 100644 index 000000000000..3c275aa0a642 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_xpyn.json @@ -0,0 +1,20 @@ +{ + "order": "column-major", + "trans": "no-transpose", + "M": 4, + "N": 2, + "alpha": 0.5, + "beta": 0.5, + "lda": 4, + "A": [ 1.0, 3.0, 5.0, 7.0, 2.0, 4.0, 6.0, 8.0], + "x": [ 2.0, 1.0 ], + "y": [ 1.0, 2.0, 3.0, 4.0 ], + "strideA1": 1, + "strideA2": 4, + "offsetA": 0, + "strideX": 1, + "offsetX": 0, + "strideY": -1, + "offsetY": 3, + "y_out": [ 11.5, 9.0, 6.5, 4.0 ] +} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_xpyp.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_xpyp.json new file mode 100644 index 000000000000..08e3b227164d --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_xpyp.json @@ -0,0 +1,20 @@ +{ + "order": "column-major", + "trans": "no-transpose", + "M": 4, + "N": 2, + "alpha": 0.5, + "beta": 0.5, + "lda": 4, + "A": [ 1.0, 3.0, 5.0, 7.0, 2.0, 4.0, 6.0, 8.0], + "x": [ 2.0, 1.0 ], + "y": [ 1.0, 2.0, 3.0, 4.0 ], + "strideA1": 1, + "strideA2": 4, + "offsetA": 0, + "strideX": 1, + "offsetX": 0, + "strideY": 1, + "offsetY": 0, + "y_out": [ 2.5, 6.0, 9.5, 13.0 ] +} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/REQUIRE b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/REQUIRE deleted file mode 100644 index 308c3be89c85..000000000000 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/REQUIRE +++ /dev/null @@ -1,2 +0,0 @@ -julia 1.5 -JSON 0.21 diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xnyn.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xnyn.json deleted file mode 100644 index 85e905297cdb..000000000000 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xnyn.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "order": "column-major", - "trans": "no-transpose", - "M": 3, - "N": 2, - "alpha": 1, - "lda": 3, - "A": [1, 2, 3, 4, 5, 6], - "x": [1, 2, 3], - "strideX": -1, - "beta": 1, - "y": [7, 8, 9, 10], - "strideY": -2, - "y_out": [ 19, 8, 18, 10 ] -} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xnyp.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xnyp.json deleted file mode 100644 index 76edb0060f63..000000000000 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xnyp.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "order": "column-major", - "trans": "no-transpose", - "M": 3, - "N": 3, - "alpha": 1, - "lda": 3, - "A": [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ], - "x": [ 3, 2, 1 ], - "strideX": -1, - "beta": 1, - "y": [ 5, 6, 7, 8, 9, 10 ], - "strideY": 2, - "y_out": [ 35, 6, 43, 8, 51, 10 ] -} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xoyo.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xoyo.json deleted file mode 100644 index a7761cb17d02..000000000000 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xoyo.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "order": "row-major", - "trans": "no-transpose", - "M": 2, - "N": 1, - "alpha": 0.00000000, - "lda": 3, - "strideX": 1, - "beta": 0.899999976, - "strideY": 1, - "A": [ 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000 ], - "x": [ 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000 ], - "y": [ 0.00000000, 0.00000000, 10.0000000, 20.0000000, 35.0000000, 56.0000000, 84.0000000, 120.000000, 165.000000, 220.000000, 286.000000, 364.000000, 455.000000, 560.000000, 680.000000, 816.000000, 969.000000, 1140.00000, 1330.00000, 1540.00000, 1771.00000, 2024.00000, 2300.00000, 2600.00000, 2925.00000, 3276.00000, 3654.00000, 4060.00000, 4495.00000, 4960.00000, 5456.00000, 5984.00000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000 ], - "y_out": [ 0.00000000, 0.00000000, 10.0000000, 20.0000000, 35.0000000, 56.0000000, 84.0000000, 120.000000, 165.000000, 220.000000, 286.000000, 364.000000, 455.000000, 560.000000, 680.000000, 816.000000, 969.000000, 1140.00000, 1330.00000, 1540.00000, 1771.00000, 2024.00000, 2300.00000, 2600.00000, 2925.00000, 3276.00000, 3654.00000, 4060.00000, 4495.00000, 4960.00000, 5456.00000, 5984.00000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000 ] -} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xoyt.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xoyt.json deleted file mode 100644 index e88ad7651ad4..000000000000 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xoyt.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "order": "row-major", - "trans": "no-transpose", - "M": 2, - "N": 1, - "alpha": 0.00000000, - "lda": 3, - "strideX": 1, - "beta": 0.899999976, - "strideY": 2, - "A": [ 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000 ], - "x": [ 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000 ], - "y": [ 0.00000000, 0.00000000, 0.00000000, 20.0000000, 35.0000000, 56.0000000, 84.0000000, 120.000000, 165.000000, 220.000000, 286.000000, 364.000000, 455.000000, 560.000000, 680.000000, 816.000000, 969.000000, 1140.00000, 1330.00000, 1540.00000, 1771.00000, 2024.00000, 2300.00000, 2600.00000, 2925.00000, 3276.00000, 3654.00000, 4060.00000, 4495.00000, 4960.00000, 5456.00000, 5984.00000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000 ], - "y_out": [ 0.00000000, 0.00000000, 0.00000000, 20.0000000, 35.0000000, 56.0000000, 84.0000000, 120.000000, 165.000000, 220.000000, 286.000000, 364.000000, 455.000000, 560.000000, 680.000000, 816.000000, 969.000000, 1140.00000, 1330.00000, 1540.00000, 1771.00000, 2024.00000, 2300.00000, 2600.00000, 2925.00000, 3276.00000, 3654.00000, 4060.00000, 4495.00000, 4960.00000, 5456.00000, 5984.00000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000 ] -} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xpyn.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xpyn.json deleted file mode 100644 index f0be7781ef74..000000000000 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xpyn.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "order": "row-major", - "trans": "no-transpose", - "M": 2, - "N": 3, - "alpha": 1, - "lda": 3, - "A": [ 1, 2, 3, 4, 5, 6 ], - "x": [ 1, 2, 3 ], - "strideX": 1, - "beta": 1, - "y": [ 7, 8, 9, 10 ], - "strideY": -2, - "y_out": [ 39, 8, 23, 10 ] -} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xpyp.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xpyp.json deleted file mode 100644 index a788624c0ef0..000000000000 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/julia/strides_xpyp.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "order": "row-major", - "trans": "no-transpose", - "M": 2, - "N": 3, - "alpha": 1, - "lda": 3, - "A": [1, 2, 3, 4, 5, 6], - "x": [1, 1, 1], - "strideX": 1, - "beta": 1, - "y": [1, 1], - "strideY": 1, - "y_out": [ 7.0, 16.0 ] -} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_complex_access_pattern.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_complex_access_pattern.json new file mode 100644 index 000000000000..812eabd43b48 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_complex_access_pattern.json @@ -0,0 +1,19 @@ +{ + "order": "row-major", + "trans": "no-transpose", + "strideA1": -6, + "strideA2": -1, + "offsetA": 14, + "strideX": -1, + "offsetX": 2, + "strideY": -1, + "offsetY": 2, + "alpha": 0.5, + "beta": 0.5, + "M": 3, + "N": 3, + "A": [ 6, 5, 3, 999, 999, 999, 0, 4, 2, 999, 999, 999, 0, 0, 1 ], + "x": [ 3.0, 2.0, 1.0 ], + "y": [ 1.0, 2.0, 3.0 ], + "y_out": [ 31.0, 10.0, 1.0 ] +} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_nt.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_nt.json new file mode 100644 index 000000000000..1c345e420443 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_nt.json @@ -0,0 +1,20 @@ +{ + "order": "row-major", + "trans": "no-transpose", + "M": 4, + "N": 2, + "alpha": 0.5, + "beta": 0.5, + "lda": 2, + "A": [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ], + "x": [ 1.0, 2.0 ], + "y": [ 1.0, 2.0, 3.0, 4.0 ], + "strideA1": 2, + "strideA2": 1, + "offsetA": 0, + "strideX": 1, + "offsetX": 0, + "strideY": 1, + "offsetY": 0, + "y_out": [ 3.0, 6.5, 10.0, 13.5 ] +} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_oa.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_oa.json new file mode 100644 index 000000000000..2f2b1942ae10 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_oa.json @@ -0,0 +1,19 @@ +{ + "order": "row-major", + "trans": "no-transpose", + "M": 3, + "N": 2, + "alpha": 0.5, + "beta": 0.5, + "A": [ 999.0, 1.0, 999.0, 2.0, 999.0, 999.0, 999.0, 999.0, 999.0, 999.0, 999.0, 3.0, 999.0, 4.0, 999.0, 999.0, 999.0, 999.0, 999.0, 999.0, 999.0, 5.0, 999.0, 6.0, 999.0 ], + "x": [ 1.0, 2.0 ], + "y": [ 1.0, 2.0, 3.0 ], + "strideA1": 10, + "strideA2": 2, + "offsetA": 1, + "strideX": 1, + "offsetX": 0, + "strideY": 1, + "offsetY": 0, + "y_out": [ 3.0, 7.5, 10.0 ] +} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1_sa2.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1_sa2.json new file mode 100644 index 000000000000..beee609bc520 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1_sa2.json @@ -0,0 +1,19 @@ +{ + "order": "row-major", + "trans": "no-transpose", + "M": 3, + "N": 2, + "alpha": 0.5, + "beta": 0.5, + "A": [ 1.0, 999.0, 2.0, 999.0, 999.0, 999.0, 999.0, 999.0, 3.0, 999.0, 4.0, 999.0, 999.0, 999.0, 999.0, 999.0, 5.0, 999.0, 6.0, 999.0 ], + "x": [ 1.0, 2.0 ], + "y": [ 1.0, 2.0, 3.0 ], + "strideA1": 8, + "strideA2": 2, + "offsetA": 0, + "strideX": 1, + "offsetX": 0, + "strideY": 1, + "offsetY": 0, + "y_out": [ 3.0, 7.5, 10.0 ] +} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1_sa2n.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1_sa2n.json new file mode 100644 index 000000000000..f3206d8095dc --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1_sa2n.json @@ -0,0 +1,19 @@ +{ + "order": "row-major", + "trans": "no-transpose", + "M": 3, + "N": 2, + "alpha": 0.5, + "beta": 0.5, + "A": [ 999.0, 5.0, 999.0, 6.0, 999.0, 999.0, 999.0, 999.0, 999.0, 999.0, 999.0, 3.0, 999.0, 4.0, 999.0, 999.0, 999.0, 999.0, 999.0, 999.0, 999.0, 1.0, 999.0, 2.0, 999.0 ], + "x": [ 1.0, 2.0 ], + "y": [ 1.0, 2.0, 3.0 ], + "strideA1": -10, + "strideA2": 2, + "offsetA": 21, + "strideX": 1, + "offsetX": 0, + "strideY": 1, + "offsetY": 0, + "y_out": [ 3.0, 7.5, 10.0 ] +} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1n_sa2.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1n_sa2.json new file mode 100644 index 000000000000..2e982cde2a20 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1n_sa2.json @@ -0,0 +1,19 @@ +{ + "order": "row-major", + "trans": "no-transpose", + "M": 3, + "N": 2, + "alpha": 0.5, + "beta": 0.5, + "A": [ 999.0, 2.0, 999.0, 1.0, 999.0, 999.0, 999.0, 999.0, 999.0, 999.0, 999.0, 4.0, 999.0, 3.0, 999.0, 999.0, 999.0, 999.0, 999.0, 999.0, 999.0, 6.0, 999.0, 5.0, 999.0 ], + "x": [ 1.0, 2.0 ], + "y": [ 1.0, 2.0, 3.0 ], + "strideA1": 10, + "strideA2": -2, + "offsetA": 3, + "strideX": 1, + "offsetX": 0, + "strideY": 1, + "offsetY": 0, + "y_out": [ 3.0, 7.5, 10.0 ] +} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1n_sa2n.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1n_sa2n.json new file mode 100644 index 000000000000..a0f8468d2c67 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1n_sa2n.json @@ -0,0 +1,19 @@ +{ + "order": "row-major", + "trans": "no-transpose", + "M": 3, + "N": 2, + "alpha": 0.5, + "beta": 0.5, + "A": [ 999.0, 6.0, 999.0, 5.0, 999.0, 999.0, 999.0, 999.0, 999.0, 999.0, 999.0, 4.0, 999.0, 3.0, 999.0, 999.0, 999.0, 999.0, 999.0, 999.0, 999.0, 2.0, 999.0, 1.0, 999.0 ], + "x": [ 1.0, 2.0 ], + "y": [ 1.0, 2.0, 3.0 ], + "strideA1": -10, + "strideA2": -2, + "offsetA": 24, + "strideX": 1, + "offsetX": 0, + "strideY": 1, + "offsetY": 0, + "y_out": [ 3.0, 7.5, 10.0 ] +} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_t.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_t.json new file mode 100644 index 000000000000..13787547fa4d --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_t.json @@ -0,0 +1,20 @@ +{ + "order": "row-major", + "trans": "transpose", + "M": 4, + "N": 2, + "alpha": 0.5, + "beta": 0.5, + "lda": 4, + "A": [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ], + "x": [ 1.0, 2.0 ], + "y": [ 1.0, 2.0, 3.0, 4.0 ], + "strideA1": 1, + "strideA2": 4, + "offsetA": 0, + "strideX": 1, + "offsetX": 0, + "strideY": 1, + "offsetY": 0, + "y_out": [ 6.0, 8.0, 11.5, 14.0 ] +} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_xnyn.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_xnyn.json new file mode 100644 index 000000000000..71fee7b136b8 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_xnyn.json @@ -0,0 +1,20 @@ +{ + "order": "row-major", + "trans": "no-transpose", + "M": 4, + "N": 2, + "alpha": 0.5, + "beta": 0.5, + "lda": 2, + "A": [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ], + "x": [ 2.0, 1.0 ], + "y": [ 1.0, 2.0, 3.0, 4.0 ], + "strideA1": 2, + "strideA2": 1, + "offsetA": 0, + "strideX": -1, + "offsetX": 1, + "strideY": -1, + "offsetY": 3, + "y_out": [ 12.0, 9.5, 7.0, 4.5 ] +} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_xnyp.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_xnyp.json new file mode 100644 index 000000000000..3075694a1111 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_xnyp.json @@ -0,0 +1,20 @@ +{ + "order": "row-major", + "trans": "no-transpose", + "M": 4, + "N": 2, + "alpha": 0.5, + "beta": 0.5, + "lda": 2, + "A": [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ], + "x": [ 2.0, 1.0 ], + "y": [ 1.0, 2.0, 3.0, 4.0 ], + "strideA1": 2, + "strideA2": 1, + "offsetA": 0, + "strideX": -1, + "offsetX": 1, + "strideY": 1, + "offsetY": 0, + "y_out": [ 3.0, 6.5, 10.0, 13.5 ] +} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_xpyn.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_xpyn.json new file mode 100644 index 000000000000..d3ab52c45feb --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_xpyn.json @@ -0,0 +1,20 @@ +{ + "order": "row-major", + "trans": "no-transpose", + "M": 4, + "N": 2, + "alpha": 0.5, + "beta": 0.5, + "lda": 2, + "A": [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ], + "x": [ 2.0, 1.0 ], + "y": [ 1.0, 2.0, 3.0, 4.0 ], + "strideA1": 2, + "strideA2": 1, + "offsetA": 0, + "strideX": 1, + "offsetX": 0, + "strideY": -1, + "offsetY": 3, + "y_out": [ 11.5, 9.0, 6.5, 4.0 ] +} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_xpyp.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_xpyp.json new file mode 100644 index 000000000000..d5fae06293fc --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_xpyp.json @@ -0,0 +1,20 @@ +{ + "order": "row-major", + "trans": "no-transpose", + "M": 4, + "N": 2, + "alpha": 0.5, + "beta": 0.5, + "lda": 2, + "A": [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ], + "x": [ 2.0, 1.0 ], + "y": [ 1.0, 2.0, 3.0, 4.0 ], + "strideA1": 2, + "strideA2": 1, + "offsetA": 0, + "strideX": 1, + "offsetX": 0, + "strideY": 1, + "offsetY": 0, + "y_out": [ 2.5, 6.0, 9.5, 13.0 ] +} diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/test.ndarray.js b/lib/node_modules/@stdlib/blas/base/sgemv/test/test.ndarray.js index 15a04022a995..46a2e9dcf65f 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/test.ndarray.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/test.ndarray.js @@ -29,12 +29,31 @@ var sgemv = require( './../lib/ndarray.js' ); // FIXTURES // -var stridesxoyo = require( './fixtures/julia/strides_xoyo.json' ); -var stridesxoyt = require( './fixtures/julia/strides_xoyt.json' ); -var stridexpyp = require( './fixtures/julia/strides_xpyp.json' ); -var stridexnyp = require( './fixtures/julia/strides_xnyp.json' ); -var stridexpyn = require( './fixtures/julia/strides_xpyn.json' ); -var stridexnyn = require( './fixtures/julia/strides_xnyn.json' ); +var cap = require( './fixtures/column_major_complex_access_pattern.json' ); +var cnt = require( './fixtures/column_major_nt.json' ); +var ct = require( './fixtures/column_major_t.json' ); +var coa = require( './fixtures/column_major_oa.json' ); +var csa1sa2 = require( './fixtures/column_major_sa1_sa2.json' ); +var csa1nsa2 = require( './fixtures/column_major_sa1n_sa2.json' ); +var csa1sa2n = require( './fixtures/column_major_sa1_sa2n.json' ); +var csa1nsa2n = require( './fixtures/column_major_sa1n_sa2n.json' ); +var cxnyn = require( './fixtures/column_major_xnyn.json' ); +var cxpyn = require( './fixtures/column_major_xpyn.json' ); +var cxnyp = require( './fixtures/column_major_xnyp.json' ); +var cxpyp = require( './fixtures/column_major_xpyp.json' ); + +var rap = require( './fixtures/row_major_complex_access_pattern.json' ); +var rnt = require( './fixtures/row_major_nt.json' ); +var rt = require( './fixtures/row_major_t.json' ); +var roa = require( './fixtures/row_major_oa.json' ); +var rsa1sa2 = require( './fixtures/row_major_sa1_sa2.json' ); +var rsa1nsa2 = require( './fixtures/row_major_sa1n_sa2.json' ); +var rsa1sa2n = require( './fixtures/row_major_sa1_sa2n.json' ); +var rsa1nsa2n = require( './fixtures/row_major_sa1n_sa2n.json' ); +var rxnyn = require( './fixtures/row_major_xnyn.json' ); +var rxpyn = require( './fixtures/row_major_xpyn.json' ); +var rxnyp = require( './fixtures/row_major_xnyp.json' ); +var rxpyp = require( './fixtures/row_major_xpyp.json' ); // FUNCTIONS // diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/test.sgemv.js b/lib/node_modules/@stdlib/blas/base/sgemv/test/test.sgemv.js index b6f97b3fef70..9ba9c94abdf3 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/test.sgemv.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/test.sgemv.js @@ -29,13 +29,19 @@ var sgemv = require( './../lib/sgemv.js' ); // FIXTURES // -var stridesxoyo = require( './fixtures/julia/strides_xoyo.json' ); -var stridesxoyt = require( './fixtures/julia/strides_xoyt.json' ); -var stridexpyp = require( './fixtures/julia/strides_xpyp.json' ); -var stridexnyp = require( './fixtures/julia/strides_xnyp.json' ); -var stridexpyn = require( './fixtures/julia/strides_xpyn.json' ); -var stridexnyn = require( './fixtures/julia/strides_xnyn.json' ); - +var cnt = require( './fixtures/column_major_nt.json' ); +var ct = require( './fixtures/column_major_t.json' ); +var cxnyn = require( './fixtures/column_major_xnyn.json' ); +var cxpyn = require( './fixtures/column_major_xpyn.json' ); +var cxnyp = require( './fixtures/column_major_xnyp.json' ); +var cxpyp = require( './fixtures/column_major_xpyp.json' ); + +var rnt = require( './fixtures/row_major_nt.json' ); +var rt = require( './fixtures/row_major_t.json' ); +var rxnyn = require( './fixtures/row_major_xnyn.json' ); +var rxpyn = require( './fixtures/row_major_xpyn.json' ); +var rxnyp = require( './fixtures/row_major_xnyp.json' ); +var rxpyp = require( './fixtures/row_major_xpyp.json' ); // FUNCTIONS // @@ -79,213 +85,477 @@ tape( 'the function has an arity of 12', function test( t ) { t.end(); }); -tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y` (sx=1, sy=1)', function test( t ) { +tape( 'the function throws an error if provided an invalid first argument', function test( t ) { + var values; + var data; + var i; + + data = rnt; + + values = [ + 'foo', + 'bar', + 'beep', + 'boop' + ]; + + for ( i = 0; i < values.length; i++ ) { + t.throws( badValue( values[ i ] ), TypeError, 'throws an error when provided ' + values[ i ] ); + } + t.end(); + + function badValue( value ) { + return function badValue() { + sgemv( value, data.trans, data.M, data.N, data.alpha, new Float32Array( data.A ), data.LDA, new Float32Array( data.x ), data.strideX, data.beta, new Float32Array( data.y ), data.strideY ); + }; + } +}); + +tape( 'the function throws an error if provided an invalid second argument', function test( t ) { + var values; + var data; + var i; + + data = rnt; + + values = [ + 'foo', + 'bar', + 'beep', + 'boop' + ]; + + for ( i = 0; i < values.length; i++ ) { + t.throws( badValue( values[ i ] ), TypeError, 'throws an error when provided ' + values[ i ] ); + } + t.end(); + + function badValue( value ) { + return function badValue() { + sgemv( data.order, value, data.M, data.N, data.alpha, new Float32Array( data.A ), data.LDA, new Float32Array( data.x ), data.strideX, data.beta, new Float32Array( data.y ), data.strideY ); + }; + } +}); + +tape( 'the function throws an error if provided an invalid third argument', function test( t ) { + var values; + var data; + var i; + + data = rnt; + + values = [ + -1, + -2, + -3 + ]; + + for ( i = 0; i < values.length; i++ ) { + t.throws( badValue( values[ i ] ), RangeError, 'throws an error when provided ' + values[ i ] ); + } + t.end(); + + function badValue( value ) { + return function badValue() { + sgemv( data.order, data.trans, value, data.N, data.alpha, new Float32Array( data.A ), data.LDA, new Float32Array( data.x ), data.strideX, data.beta, new Float32Array( data.y ), data.strideY ); + }; + } +}); + +tape( 'the function throws an error if provided an invalid fourth argument', function test( t ) { + var values; + var data; + var i; + + data = rnt; + + values = [ + -1, + -2, + -3 + ]; + + for ( i = 0; i < values.length; i++ ) { + t.throws( badValue( values[ i ] ), RangeError, 'throws an error when provided ' + values[ i ] ); + } + t.end(); + + function badValue( value ) { + return function badValue() { + sgemv( data.order, data.trans, data.M, value, data.alpha, new Float32Array( data.A ), data.LDA, new Float32Array( data.x ), data.strideX, data.beta, new Float32Array( data.y ), data.strideY ); + }; + } +}); + +// tape( 'the function throws an error if provided an invalid seventh argument', function test( t ) { +// var values; +// var data; +// var i; + +// data = rnt; + +// values = [ +// 2, +// 1, +// 0, +// -1, +// -2, +// -3 +// ]; + +// for ( i = 0; i < values.length; i++ ) { +// t.throws( badValue( values[ i ] ), RangeError, 'throws an error when provided ' + values[ i ] ); +// } +// t.end(); + +// function badValue( value ) { +// return function badValue() { +// sgemv( data.order, data.trans, data.M, rxpyp.N, data.alpha, new Float32Array( data.a ), value, new Float32Array( data.x ), data.strideX, data.beta, new Float32Array( data.y ), data.strideY ); +// }; +// } +// }); + +tape( 'the function throws an error if provided an invalid ninth argument', function test( t ) { + var values; + var data; + var i; + + data = rnt; + + values = [ + 0 + ]; + + for ( i = 0; i < values.length; i++ ) { + t.throws( badValue( values[ i ] ), RangeError, 'throws an error when provided ' + values[ i ] ); + } + t.end(); + + function badValue( value ) { + return function badValue() { + sgemv( data.order, data.trans, data.M, data.N, data.alpha, new Float32Array( data.A ), data.LDA, new Float32Array( data.x ), value, data.beta, new Float32Array( data.y ), data.strideY ); + }; + } +}); + +tape( 'the function throws an error if provided an invalid twelfth argument', function test( t ) { + var values; + var data; + var i; + + data = rnt; + + values = [ + 0 + ]; + + for ( i = 0; i < values.length; i++ ) { + t.throws( badValue( values[ i ] ), RangeError, 'throws an error when provided ' + values[ i ] ); + } + t.end(); + + function badValue( value ) { + return function badValue() { + sgemv( data.order, data.trans, data.M, data.N, data.alpha, new Float32Array( data.A ), data.LDA, new Float32Array( data.x ), data.strideX, data.beta, new Float32Array( data.y ), value ); + }; + } +}); + +tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y` ( row-major, no-transpose )', function test( t ) { var expected; - var alpha; - var order; - var trans; - var beta; - var lda; + var data; var out; var a; - var m; - var n; var x; var y; - order = stridesxoyo.order; - trans = stridesxoyo.trans; + data = rnt; - m = stridesxoyo.M; - n = stridesxoyo.N; - lda = stridesxoyo.lda; + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); - alpha = stridesxoyo.alpha; - beta = stridesxoyo.beta; + expected = new Float32Array( data.y_out ); - a = new Float32Array( stridesxoyo.A ); - x = new Float32Array( stridesxoyo.x ); - y = new Float32Array( stridesxoyo.y ); + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.lda, x, data.strideX, data.beta, y, data.strideY ); + isApprox( t, y, expected, 2.0 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); - expected = new Float32Array( stridesxoyo.y_out ); +tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y` ( column-major, no-transpose )', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; - out = sgemv( order, trans, m, n, alpha, a, lda, x, 1, beta, y, 1 ); + data = cnt; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + expected = new Float32Array( data.y_out ); + + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.lda, x, data.strideX, data.beta, y, data.strideY ); isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); }); -tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y` (sx=1, sy=2)', function test( t ) { +tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y` ( row-major, transpose )', function test( t ) { var expected; - var alpha; - var order; - var trans; - var beta; - var lda; + var data; var out; var a; - var m; - var n; var x; var y; - order = stridesxoyt.order; - trans = stridesxoyt.trans; + data = rt; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + expected = new Float32Array( data.y_out ); + + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.lda, x, data.strideX, data.beta, y, data.strideY ); + isApprox( t, y, expected, 2.0 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); - m = stridesxoyt.M; - n = stridesxoyt.N; - lda = stridesxoyt.lda; +tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y` ( column-major, transpose )', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; - alpha = stridesxoyt.alpha; - beta = stridesxoyt.beta; + data = ct; - a = new Float32Array( stridesxoyt.A ); - x = new Float32Array( stridesxoyt.x ); - y = new Float32Array( stridesxoyt.y ); + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); - expected = new Float32Array( stridesxoyt.y_out ); + expected = new Float32Array( data.y_out ); - out = sgemv( order, trans, m, n, alpha, a, lda, x, 1, beta, y, 2 ); + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.lda, x, data.strideX, data.beta, y, data.strideY ); isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); }); -tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y` (sx=1, sy=-2)', function test( t ) { +tape( 'the function returns a reference to the second input array (row-major)', function test( t ) { + var data; + var out; + var a; + var x; + var y; + + data = rt; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.lda, x, data.strideX, data.beta, y, data.strideY ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); + +tape( 'the function returns a reference to the second input array (column-major)', function test( t ) { + var data; + var out; + var a; + var x; + var y; + + data = ct; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.lda, x, data.strideX, data.beta, y, data.strideY ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); + +tape( 'the function supports specifying an `x` and `y` stride (row-major)', function test( t ) { var expected; - var alpha; - var order; - var trans; - var beta; - var lda; + var data; var out; var a; - var m; - var n; var x; var y; - order = stridexpyn.order; - trans = stridexpyn.trans; + data = rxpyp; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + expected = new Float32Array( data.y_out ); - m = stridexpyn.M; - n = stridexpyn.N; - lda = stridexpyn.lda; + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.lda, x, data.strideX, data.beta, y, data.strideY ); + isApprox( t, y, expected, 2.0 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); + +tape( 'the function supports specifying an `x` and `y` stride (column-major)', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; - alpha = stridexpyn.alpha; - beta = stridexpyn.beta; + data = cxpyp; - a = new Float32Array( stridexpyn.A ); - x = new Float32Array( stridexpyn.x ); - y = new Float32Array( stridexpyn.y ); + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); - expected = new Float32Array( stridexpyn.y_out ); + expected = new Float32Array( data.y_out ); - out = sgemv( order, trans, m, n, alpha, a, lda, x, 1, beta, y, -2 ); + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.lda, x, data.strideX, data.beta, y, data.strideY ); isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); }); -tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y` (sx=-1, sy=2)', function test( t ) { +tape( 'the function supports specifying a negative `x` stride (row-major)', function test( t ) { var expected; - var alpha; - var order; - var trans; - var beta; - var lda; + var data; var out; var a; - var m; - var n; var x; var y; - order = stridexnyp.order; - trans = stridexnyp.trans; + data = rxnyp; - m = stridexnyp.M; - n = stridexnyp.N; - lda = stridexnyp.lda; + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); - alpha = stridexnyp.alpha; - beta = stridexnyp.beta; + expected = new Float32Array( data.y_out ); - a = new Float32Array( stridexnyp.A ); - x = new Float32Array( stridexnyp.x ); - y = new Float32Array( stridexnyp.y ); + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.lda, x, data.strideX, data.beta, y, data.strideY ); + isApprox( t, y, expected, 2.0 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); + +tape( 'the function supports specifying a negative `x` stride (column-major)', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; - expected = new Float32Array( stridexnyp.y_out ); + data = cxnyp; - out = sgemv( order, trans, m, n, alpha, a, lda, x, -1, beta, y, 2 ); + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + expected = new Float32Array( data.y_out ); + + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.lda, x, data.strideX, data.beta, y, data.strideY ); isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); }); -tape( 'the function returns a reference to the second input array', function test( t ) { - var alpha; - var order; - var trans; - var beta; - var lda; +tape( 'the function supports specifying a negative `y` stride (row-major)', function test( t ) { + var expected; + var data; var out; var a; - var m; - var n; var x; var y; - order = stridexpyp.order; - trans = stridexpyp.trans; + data = rxpyn; - m = stridexpyp.M; - n = stridexpyp.N; - lda = stridexpyp.lda; + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); - alpha = stridexpyp.alpha; - beta = stridexpyp.beta; + expected = new Float32Array( data.y_out ); - a = new Float32Array( stridexpyp.A ); - x = new Float32Array( stridexpyp.x ); - y = new Float32Array( stridexpyp.y ); + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.lda, x, data.strideX, data.beta, y, data.strideY ); + isApprox( t, y, expected, 2.0 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); - out = sgemv( order, trans, m, n, alpha, a, lda, x, 1, beta, y, 1 ); +tape( 'the function supports specifying a negative `y` stride (column-major)', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; + + data = cxpyn; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + expected = new Float32Array( data.y_out ); + + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.lda, x, data.strideX, data.beta, y, data.strideY ); + isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); }); -tape( 'the function supports complex access patterns', function test( t ) { +tape( 'the function supports complex access pattern (row-major)', function test( t ) { var expected; - var alpha; - var order; - var trans; - var beta; - var lda; + var data; var out; var a; - var m; - var n; var x; var y; - order = stridexnyn.order; - trans = stridexnyn.trans; + data = rxnyn; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); - m = stridexnyn.M; - n = stridexnyn.N; - lda = stridexnyn.lda; + expected = new Float32Array( data.y_out ); + + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.lda, x, data.strideX, data.beta, y, data.strideY ); + isApprox( t, y, expected, 2.0 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); + +tape( 'the function supports complex access pattern (column-major)', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; - alpha = stridexnyn.alpha; - beta = stridexnyn.beta; + data = cxnyn; - a = new Float32Array( stridexnyn.A ); - x = new Float32Array( stridexnyn.x ); - y = new Float32Array( stridexnyn.y ); + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); - expected = new Float32Array( stridexnyn.y_out ); + expected = new Float32Array( data.y_out ); - out = sgemv( order, trans, m, n, alpha, a, lda, x, -1, beta, y, -2 ); + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.lda, x, data.strideX, data.beta, y, data.strideY ); isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); From 945212f3d3be35bffd64595861a3c131706577d6 Mon Sep 17 00:00:00 2001 From: aman-095 Date: Wed, 24 Jul 2024 12:22:48 +0530 Subject: [PATCH 05/19] test: refactor test and update descriptions --- .../@stdlib/blas/base/sgemv/README.md | 29 +- .../@stdlib/blas/base/sgemv/lib/base.js | 17 +- .../@stdlib/blas/base/sgemv/lib/sgemv.js | 4 - .../column_major_complex_access_pattern.json | 2 +- .../sgemv/test/fixtures/column_major_nt.json | 2 +- .../sgemv/test/fixtures/column_major_oa.json | 2 +- .../test/fixtures/column_major_sa1_sa2.json | 2 +- .../test/fixtures/column_major_sa1_sa2n.json | 4 +- .../test/fixtures/column_major_sa1n_sa2.json | 2 +- .../test/fixtures/column_major_sa1n_sa2n.json | 4 +- .../sgemv/test/fixtures/column_major_t.json | 8 +- .../row_major_complex_access_pattern.json | 4 +- .../sgemv/test/fixtures/row_major_oa.json | 2 +- .../test/fixtures/row_major_sa1_sa2.json | 2 +- .../test/fixtures/row_major_sa1_sa2n.json | 10 +- .../test/fixtures/row_major_sa1n_sa2.json | 10 +- .../test/fixtures/row_major_sa1n_sa2n.json | 4 +- .../base/sgemv/test/fixtures/row_major_t.json | 12 +- .../blas/base/sgemv/test/test.ndarray.js | 744 +++++++++++++++--- .../blas/base/sgemv/test/test.sgemv.js | 31 +- 20 files changed, 687 insertions(+), 208 deletions(-) diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/README.md b/lib/node_modules/@stdlib/blas/base/sgemv/README.md index d02c5510dc80..efd41426fe3e 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/README.md +++ b/lib/node_modules/@stdlib/blas/base/sgemv/README.md @@ -20,7 +20,7 @@ limitations under the License. # sgemv -> Perform one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y are vectors and A is an m by n matrix. +> Perform one of the matrix-vector operations `y = α*A*x + β*y` or `y = α*A**T*x + β*y`, where α and β are scalars, x and y are vectors and A is an m by n matrix.
@@ -30,9 +30,9 @@ limitations under the License. var sgemv = require( '@stdlib/blas/base/sgemv' ); ``` -#### sgemv( ord, trans, M, N, alpha, A, LDA, x, sx, beta, y, sy ) +#### sgemv( ord, trans, M, N, α, A, LDA, x, sx, β, y, sy ) -Performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y are vectors and A is an m by n matrix. +Performs one of the matrix-vector operations `y = α*A*x + β*y` or `y = α*A**T*x + β*y`, where α and β are scalars, x and y are vectors and A is an m by n matrix. ```javascript var Float32Array = require( '@stdlib/array/float32' ); @@ -41,7 +41,7 @@ var A = new Float32Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] ); var x = new Float32Array( [ 1.0, 1.0, 1.0 ] ); var y = new Float32Array( [ 1.0, 1.0 ] ); -sgemv( 'row-major', 'none', 2, 3, 1.0, A, 3, x, 1, 1.0, y, 1 ); +sgemv( 'row-major', 'no-transpose', 2, 3, 1.0, A, 3, x, 1, 1.0, y, 1 ); // y => [ 7.0, 16.0 ] ``` @@ -51,12 +51,12 @@ The function has the following parameters: - **trans**: specifies the operation to be performed. - **M**: number of rows in the matrix `A`. - **N**: number of columns in the matrix `A`. -- **alpha**: scalar constant. +- **α**: scalar constant. - **A**: matrix of coefficients [`Float32Array`][mdn-float32array]. - **lda**: stride of the first dimension of `A` (leading dimension of `A`). - **x**: input [`Float32Array`][mdn-float32array]. - **sx**: index increment for `x`. -- **beta**: scalar constant. +- **β**: scalar constant. - **y**: output [`Float32Array`][mdn-float32array]. - **sy**: index increment for `y`. @@ -69,7 +69,7 @@ var A = new Float32Array( [ 1.0, 2.0, 3.0, 4.0 ] ); var x = new Float32Array( [ 1.0, 1.0 ] ); var y = new Float32Array( [ 1.0, 1.0 ] ); -sgemv( 'row-major', 'none', 2, 2, 1.0, A, 2, x, 1, 1.0, y, 1 ); +sgemv( 'row-major', 'no-transpose', 2, 2, 1.0, A, 2, x, 1, 1.0, y, 1 ); // y => [ 4.0, 8.0 ] ``` @@ -89,13 +89,13 @@ var A = new Float32Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] ); var x1 = new Float32Array( x0.buffer, x0.BYTES_PER_ELEMENT*1 ); // start at 2nd element var y1 = new Float32Array( y0.buffer, y0.BYTES_PER_ELEMENT*1 ); // start at 4th element -sgemv( 'row-major', 'none', 2, 2, 1.0, A, 2, x1, -1, 1.0, y1, -1 ); +sgemv( 'row-major', 'no-transpose', 2, 2, 1.0, A, 2, x1, -1, 1.0, y1, -1 ); // y0 => [ 1.0, 8.0 ] ``` -#### sgemv.ndarray( ord, trans, M, N, alpha, A, LDA, x, sx, ox, beta, y, sy, oy ) +#### sgemv.ndarray( ord, trans, M, N, α, A, sa1, sa2, oa, x, sx, ox, β, y, sy, oy ) -Performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y are vectors and A is an m by n matrix using alternative indexing semantics. +Performs one of the matrix-vector operations `y = α*A*x + β*y` or `y = α*A**T*x + β*y`, where α and β are scalars, x and y are vectors and A is an m by n matrix using alternative indexing semantics. ```javascript var Float32Array = require( '@stdlib/array/float32' ); @@ -104,12 +104,15 @@ var A = new Float32Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] ); var x = new Float32Array( [ 1.0, 1.0, 1.0 ] ); var y = new Float32Array( [ 1.0, 1.0 ] ); -sgemv.ndarray( 'row-major', 'none', 2, 3, 1.0, A, 3, x, 1, 0, 1.0, y, 1, 0 ); +sgemv.ndarray( 'row-major', 'no-transpose', 2, 3, 1.0, A, 3, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // y => [ 7.0, 16.0 ] ``` The function has the following additional parameters: +- **sa1**: stride of the first dimension of `A`. +- **sa2**: stride of the second dimension of `A`. +- **oa**: starting index for `A`. - **ox**: starting index for `x`. - **oy**: starting index for `y`. @@ -122,7 +125,7 @@ var A = new Float32Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] ); var x = new Float32Array( [ 1.0, 2.0, 3.0 ] ); var y = new Float32Array( [ 7.0, 8.0, 9.0, 10.0 ] ); -sgemv.ndarray( 'row-major', 'none', 2, 3, 1.0, A, 3, x, 1, 0, 1.0, y, -2, 2 ); +sgemv.ndarray( 'row-major', 'no-transpose', 2, 3, 1.0, A, 3, 1, 0, x, 1, 0, 1.0, y, -2, 2 ); // y => [ 39, 8, 23, 10 ] ``` @@ -161,7 +164,7 @@ var A = discreteUniform( M*N, 0, 255, opts ); var x = discreteUniform( N, 0, 255, opts ); var y = discreteUniform( M, 0, 255, opts ); -sgemv.ndarray( 'row-major', 'none', M, N, 1.0, A, N, x, -1, 2, 1.0, y, -1, 2 ); +sgemv( 'row-major', 'none', M, N, 1.0, A, N, x, -1, 1.0, y, -1 ); console.log( y ); ``` diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/lib/base.js b/lib/node_modules/@stdlib/blas/base/sgemv/lib/base.js index 2faaa8066985..6be1603741f4 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/lib/base.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/lib/base.js @@ -21,7 +21,7 @@ // MODULES // var sfill = require( '@stdlib/blas/ext/base/sfill' ).ndarray; -var sscal = require('@stdlib/blas/base/sscal').ndarray; +var sscal = require( '@stdlib/blas/base/sscal' ).ndarray; var f32 = require( '@stdlib/number/float64/base/to-float32' ); @@ -59,8 +59,9 @@ var f32 = require( '@stdlib/number/float64/base/to-float32' ); * // y => [ 7.0, 16.0 ] */ function sgemv( order, trans, M, N, alpha, A, strideA1, strideA2, offsetA, x, strideX, offsetX, beta, y, strideY, offsetY ) { // eslint-disable-line max-params, max-len - var isRowMajor; var isColMajor; + var isRowMajor; + var lenx; var leny; var temp; var ix1; @@ -90,8 +91,10 @@ function sgemv( order, trans, M, N, alpha, A, strideA1, strideA2, offsetA, x, st kx = offsetX; ky = offsetY; + lenx = M; leny = N; if ( trans === 'no-transpose' ) { + lenx = N; leny = M; } // y = beta*y @@ -110,24 +113,24 @@ function sgemv( order, trans, M, N, alpha, A, strideA1, strideA2, offsetA, x, st ( isRowMajor && trans !== 'no-transpose' ) ) { ix1 = kx; - for ( i1 = 0; i1 < N; i1++ ) { + for ( i1 = 0; i1 < lenx; i1++ ) { temp = f32( alpha * x[ ix1 ] ); oa = offsetA + (sa1*i1); iy1 = ky; - for ( i0 = 0; i0 < M; i0++ ) { + for ( i0 = 0; i0 < leny; i0++ ) { y[ iy1 ] += f32( A[ oa+(sa0*i0) ] * temp ); iy1 += strideY; } - ix1 += strideX; + ix1 += strideX; } return y; } iy1 = ky; - for ( i1 = 0; i1 < N; i1++ ) { + for ( i1 = 0; i1 < leny; i1++ ) { temp = 0.0; ix1 = kx; oa = offsetA + (sa1*i1); - for ( i0 = 0; i0 < M; i0++ ) { + for ( i0 = 0; i0 < lenx; i0++ ) { temp += f32( A[ oa+(sa0*i0) ] * x[ ix1 ] ); ix1 += strideX; } diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/lib/sgemv.js b/lib/node_modules/@stdlib/blas/base/sgemv/lib/sgemv.js index 3cd6bc43c8ab..ef8f5a7e48f5 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/lib/sgemv.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/lib/sgemv.js @@ -20,7 +20,6 @@ // MODULES // -var max = require( '@stdlib/math/base/special/max' ); var stride2offset = require( '@stdlib/strided/base/stride2offset' ); var isLayout = require( '@stdlib/blas/base/assert/is-layout' ); var isMatrixTranspose = require( '@stdlib/blas/base/assert/is-transpose-operation' ); @@ -84,9 +83,6 @@ function sgemv( order, trans, M, N, alpha, A, LDA, x, strideX, beta, y, strideY if ( N < 0 ) { throw new RangeError( format( 'invalid argument. Fourth argument must be a nonnegative integer. Value: `%d`.', N ) ); } - // if ( LDA < max( 1, N ) ) { - // throw new RangeError( format( 'invalid argument. Seventh argument must be greater than or equal to max(1,M). Value: `%d`.', N, LDA ) ); - // } if ( strideX === 0 ) { throw new RangeError( format( 'invalid argument. Ninth argument must be non-zero.' ) ); } diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_complex_access_pattern.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_complex_access_pattern.json index c0521f3c6d8e..f6b322d628c8 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_complex_access_pattern.json +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_complex_access_pattern.json @@ -15,5 +15,5 @@ "A": [ 6, 999, 0, 999, 0, 5, 999, 4, 999, 0, 3, 999, 2, 999, 1 ], "x": [ 3.0, 2.0, 1.0 ], "y": [ 1.0, 2.0, 3.0 ], - "y_out": [ 31.0, 10.0, 1.0 ] + "y_out": [ 16.0, 6.0, 2.0 ] } diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_nt.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_nt.json index 4bc9d390233b..705194b01e71 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_nt.json +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_nt.json @@ -6,7 +6,7 @@ "alpha": 0.5, "beta": 0.5, "lda": 4, - "A": [ 1.0, 3.0, 5.0, 7.0, 2.0, 4.0, 6.0, 8.0], + "A": [ 1.0, 3.0, 5.0, 7.0, 2.0, 4.0, 6.0, 8.0 ], "x": [ 1.0, 2.0 ], "y": [ 1.0, 2.0, 3.0, 4.0 ], "strideA1": 1, diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_oa.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_oa.json index b61295ff3d51..d4b4fe690ec2 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_oa.json +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_oa.json @@ -15,5 +15,5 @@ "offsetX": 0, "strideY": 1, "offsetY": 0, - "y_out": [ 3.0, 7.5, 10.0 ] + "y_out": [ 3.0, 6.5, 10.0 ] } diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1_sa2.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1_sa2.json index 287968536486..bef23b3049b0 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1_sa2.json +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1_sa2.json @@ -15,5 +15,5 @@ "offsetX": 0, "strideY": 1, "offsetY": 0, - "y_out": [ 3.0, 7.5, 10.0 ] + "y_out": [ 3.0, 6.5, 10.0 ] } diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1_sa2n.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1_sa2n.json index 9b5d8edcd26d..b2a2abd9d19f 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1_sa2n.json +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1_sa2n.json @@ -10,10 +10,10 @@ "y": [ 1.0, 2.0, 3.0 ], "strideA1": 2, "strideA2": -10, - "offsetA": 20, + "offsetA": 15, "strideX": 1, "offsetX": 0, "strideY": 1, "offsetY": 0, - "y_out": [ 3.0, 7.5, 10.0 ] + "y_out": [ 3.0, 6.5, 10.0 ] } diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1n_sa2.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1n_sa2.json index 6829ffbc5a8a..1402036e6aba 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1n_sa2.json +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1n_sa2.json @@ -15,5 +15,5 @@ "offsetX": 0, "strideY": 1, "offsetY": 0, - "y_out": [ 3.0, 7.5, 10.0 ] + "y_out": [ 3.0, 6.5, 10.0 ] } diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1n_sa2n.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1n_sa2n.json index 871a68e6db6e..762f03563f15 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1n_sa2n.json +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1n_sa2n.json @@ -10,10 +10,10 @@ "y": [ 1.0, 2.0, 3.0 ], "strideA1": -2, "strideA2": -10, - "offsetA": 24, + "offsetA": 19, "strideX": 1, "offsetX": 0, "strideY": 1, "offsetY": 0, - "y_out": [ 3.0, 7.5, 10.0 ] + "y_out": [ 3.0, 6.5, 10.0 ] } diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_t.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_t.json index 1ac93d99fe4f..3023078f50b6 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_t.json +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_t.json @@ -7,14 +7,14 @@ "beta": 0.5, "lda": 2, "A": [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ], - "x": [ 1.0, 2.0 ], - "y": [ 1.0, 2.0, 3.0, 4.0 ], + "x": [ 1.0, 2.0, 3.0, 4.0 ], + "y": [ 1.0, 2.0 ], "strideA1": 1, - "strideA2": 4, + "strideA2": 2, "offsetA": 0, "strideX": 1, "offsetX": 0, "strideY": 1, "offsetY": 0, - "y_out": [ 3.0, 6.5, 11.5, 15.5 ] + "y_out": [ 3.0, 6.5 ] } diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_complex_access_pattern.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_complex_access_pattern.json index 812eabd43b48..502c0b47f742 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_complex_access_pattern.json +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_complex_access_pattern.json @@ -13,7 +13,7 @@ "M": 3, "N": 3, "A": [ 6, 5, 3, 999, 999, 999, 0, 4, 2, 999, 999, 999, 0, 0, 1 ], - "x": [ 3.0, 2.0, 1.0 ], + "x": [ 1.0, 2.0, 3.0 ], "y": [ 1.0, 2.0, 3.0 ], - "y_out": [ 31.0, 10.0, 1.0 ] + "y_out": [ 13.0, 8.0, 3.0 ] } diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_oa.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_oa.json index 2f2b1942ae10..548a3027a023 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_oa.json +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_oa.json @@ -15,5 +15,5 @@ "offsetX": 0, "strideY": 1, "offsetY": 0, - "y_out": [ 3.0, 7.5, 10.0 ] + "y_out": [ 3.0, 6.5, 10.0 ] } diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1_sa2.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1_sa2.json index beee609bc520..bc6bab27d31d 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1_sa2.json +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1_sa2.json @@ -15,5 +15,5 @@ "offsetX": 0, "strideY": 1, "offsetY": 0, - "y_out": [ 3.0, 7.5, 10.0 ] + "y_out": [ 3.0, 6.5, 10.0 ] } diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1_sa2n.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1_sa2n.json index f3206d8095dc..10c9b2981c81 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1_sa2n.json +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1_sa2n.json @@ -5,15 +5,15 @@ "N": 2, "alpha": 0.5, "beta": 0.5, - "A": [ 999.0, 5.0, 999.0, 6.0, 999.0, 999.0, 999.0, 999.0, 999.0, 999.0, 999.0, 3.0, 999.0, 4.0, 999.0, 999.0, 999.0, 999.0, 999.0, 999.0, 999.0, 1.0, 999.0, 2.0, 999.0 ], + "A": [ 999.0, 2.0, 999.0, 1.0, 999.0, 999.0, 999.0, 999.0, 999.0, 999.0, 999.0, 4.0, 999.0, 3.0, 999.0, 999.0, 999.0, 999.0, 999.0, 999.0, 999.0, 6.0, 999.0, 5.0, 999.0 ], "x": [ 1.0, 2.0 ], "y": [ 1.0, 2.0, 3.0 ], - "strideA1": -10, - "strideA2": 2, - "offsetA": 21, + "strideA1": 10, + "strideA2": -2, + "offsetA": 3, "strideX": 1, "offsetX": 0, "strideY": 1, "offsetY": 0, - "y_out": [ 3.0, 7.5, 10.0 ] + "y_out": [ 3.0, 6.5, 10.0 ] } diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1n_sa2.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1n_sa2.json index 2e982cde2a20..0ba01f2c9ddf 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1n_sa2.json +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1n_sa2.json @@ -5,15 +5,15 @@ "N": 2, "alpha": 0.5, "beta": 0.5, - "A": [ 999.0, 2.0, 999.0, 1.0, 999.0, 999.0, 999.0, 999.0, 999.0, 999.0, 999.0, 4.0, 999.0, 3.0, 999.0, 999.0, 999.0, 999.0, 999.0, 999.0, 999.0, 6.0, 999.0, 5.0, 999.0 ], + "A": [ 999.0, 5.0, 999.0, 6.0, 999.0, 999.0, 999.0, 999.0, 999.0, 999.0, 999.0, 3.0, 999.0, 4.0, 999.0, 999.0, 999.0, 999.0, 999.0, 999.0, 999.0, 1.0, 999.0, 2.0, 999.0 ], "x": [ 1.0, 2.0 ], "y": [ 1.0, 2.0, 3.0 ], - "strideA1": 10, - "strideA2": -2, - "offsetA": 3, + "strideA1": -10, + "strideA2": 2, + "offsetA": 21, "strideX": 1, "offsetX": 0, "strideY": 1, "offsetY": 0, - "y_out": [ 3.0, 7.5, 10.0 ] + "y_out": [ 3.0, 6.5, 10.0 ] } diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1n_sa2n.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1n_sa2n.json index a0f8468d2c67..74baa651fae8 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1n_sa2n.json +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1n_sa2n.json @@ -10,10 +10,10 @@ "y": [ 1.0, 2.0, 3.0 ], "strideA1": -10, "strideA2": -2, - "offsetA": 24, + "offsetA": 23, "strideX": 1, "offsetX": 0, "strideY": 1, "offsetY": 0, - "y_out": [ 3.0, 7.5, 10.0 ] + "y_out": [ 3.0, 6.5, 10.0 ] } diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_t.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_t.json index 13787547fa4d..ca04d44b2a20 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_t.json +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_t.json @@ -5,16 +5,16 @@ "N": 2, "alpha": 0.5, "beta": 0.5, - "lda": 4, + "lda": 2, "A": [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ], - "x": [ 1.0, 2.0 ], - "y": [ 1.0, 2.0, 3.0, 4.0 ], - "strideA1": 1, - "strideA2": 4, + "x": [ 1.0, 2.0, 3.0, 4.0 ], + "y": [ 1.0, 2.0 ], + "strideA1": 2, + "strideA2": 1, "offsetA": 0, "strideX": 1, "offsetX": 0, "strideY": 1, "offsetY": 0, - "y_out": [ 6.0, 8.0, 11.5, 14.0 ] + "y_out": [ 25.5, 31.0 ] } diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/test.ndarray.js b/lib/node_modules/@stdlib/blas/base/sgemv/test/test.ndarray.js index 46a2e9dcf65f..03814726dba9 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/test.ndarray.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/test.ndarray.js @@ -16,6 +16,8 @@ * limitations under the License. */ +/* eslint-disable max-len */ + 'use strict'; // MODULES // @@ -93,218 +95,718 @@ tape( 'main export is a function', function test( t ) { t.end(); }); -tape( 'the function has an arity of 14', function test( t ) { - t.strictEqual( sgemv.length, 14, 'returns expected value' ); +tape( 'the function has an arity of 16', function test( t ) { + t.strictEqual( sgemv.length, 16, 'returns expected value' ); + t.end(); +}); + +tape( 'the function throws an error if provided an invalid first argument', function test( t ) { + var values; + var data; + var i; + + data = rnt; + + values = [ + 'foo', + 'bar', + 'beep', + 'boop' + ]; + + for ( i = 0; i < values.length; i++ ) { + t.throws( badValue( values[ i ] ), TypeError, 'throws an error when provided ' + values[ i ] ); + } + t.end(); + + function badValue( value ) { + return function badValue() { + sgemv( value, data.trans, data.M, data.N, data.alpha, new Float32Array( data.A ), data.strideA1, data.strideA2, data.offsetA, new Float32Array( data.x ), data.strideX, data.offsetX, data.beta, new Float32Array( data.y ), data.strideY, data.offsetY ); + }; + } +}); + +tape( 'the function throws an error if provided an invalid second argument', function test( t ) { + var values; + var data; + var i; + + data = rnt; + + values = [ + 'foo', + 'bar', + 'beep', + 'boop' + ]; + + for ( i = 0; i < values.length; i++ ) { + t.throws( badValue( values[ i ] ), TypeError, 'throws an error when provided ' + values[ i ] ); + } + t.end(); + + function badValue( value ) { + return function badValue() { + sgemv( data.order, value, data.M, data.N, data.alpha, new Float32Array( data.A ), data.strideA1, data.strideA2, data.offsetA, new Float32Array( data.x ), data.strideX, data.offsetX, data.beta, new Float32Array( data.y ), data.strideY, data.offsetY ); + }; + } +}); + +tape( 'the function throws an error if provided an invalid third argument', function test( t ) { + var values; + var data; + var i; + + data = rnt; + + values = [ + -1, + -2, + -3 + ]; + + for ( i = 0; i < values.length; i++ ) { + t.throws( badValue( values[ i ] ), RangeError, 'throws an error when provided ' + values[ i ] ); + } + t.end(); + + function badValue( value ) { + return function badValue() { + sgemv( data.order, data.trans, value, data.N, data.alpha, new Float32Array( data.A ), data.strideA1, data.strideA2, data.offsetA, new Float32Array( data.x ), data.strideX, data.offsetX, data.beta, new Float32Array( data.y ), data.strideY, data.offsetY ); + }; + } +}); + +tape( 'the function throws an error if provided an invalid fourth argument', function test( t ) { + var values; + var data; + var i; + + data = rnt; + + values = [ + -1, + -2, + -3 + ]; + + for ( i = 0; i < values.length; i++ ) { + t.throws( badValue( values[ i ] ), RangeError, 'throws an error when provided ' + values[ i ] ); + } + t.end(); + + function badValue( value ) { + return function badValue() { + sgemv( data.order, data.trans, data.M, value, data.alpha, new Float32Array( data.A ), data.strideA1, data.strideA2, data.offsetA, new Float32Array( data.x ), data.strideX, data.offsetX, data.beta, new Float32Array( data.y ), data.strideY, data.offsetY ); + }; + } +}); + +tape( 'the function throws an error if provided an invalid eleventh argument', function test( t ) { + var values; + var data; + var i; + + data = rnt; + + values = [ + 0 + ]; + + for ( i = 0; i < values.length; i++ ) { + t.throws( badValue( values[ i ] ), RangeError, 'throws an error when provided ' + values[ i ] ); + } + t.end(); + + function badValue( value ) { + return function badValue() { + sgemv( data.order, data.trans, data.M, data.N, data.alpha, new Float32Array( data.A ), data.strideA1, data.strideA2, data.offsetA, new Float32Array( data.x ), value, data.offsetX, data.beta, new Float32Array( data.y ), data.strideY, data.offsetY ); + }; + } +}); + +tape( 'the function throws an error if provided an invalid fifteenth argument', function test( t ) { + var values; + var data; + var i; + + data = rnt; + + values = [ + 0 + ]; + + for ( i = 0; i < values.length; i++ ) { + t.throws( badValue( values[ i ] ), RangeError, 'throws an error when provided ' + values[ i ] ); + } + t.end(); + + function badValue( value ) { + return function badValue() { + sgemv( data.order, data.trans, data.M, data.N, data.alpha, new Float32Array( data.A ), data.strideA1, data.strideA2, data.offsetA, new Float32Array( data.x ), data.strideX, data.offsetX, data.beta, new Float32Array( data.y ), value, data.offsetY ); + }; + } +}); + +tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y` ( row-major, no-transpose )', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; + + data = rnt; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + expected = new Float32Array( data.y_out ); + + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + isApprox( t, y, expected, 2.0 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); + +tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y` ( column-major, no-transpose )', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; + + data = cnt; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + expected = new Float32Array( data.y_out ); + + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + isApprox( t, y, expected, 2.0 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); + +tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y` ( row-major, transpose )', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; + + data = rt; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + expected = new Float32Array( data.y_out ); + + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + isApprox( t, y, expected, 2.0 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); + +tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y` ( column-major, transpose )', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; + + data = ct; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + expected = new Float32Array( data.y_out ); + + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + isApprox( t, y, expected, 2.0 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); + +tape( 'the function returns a reference to the second input array (row-major)', function test( t ) { + var data; + var out; + var a; + var x; + var y; + + data = rt; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); + +tape( 'the function returns a reference to the second input array (column-major)', function test( t ) { + var data; + var out; + var a; + var x; + var y; + + data = ct; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); + +tape( 'the function supports specifying stride of the first and the second dimension of `A` (row-major)', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; + + data = rsa1sa2; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + expected = new Float32Array( data.y_out ); + + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + isApprox( t, y, expected, 2.0 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); + +tape( 'the function supports specifying stride of the first and the second dimension of `A` (column-major)', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; + + data = csa1sa2; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + expected = new Float32Array( data.y_out ); + + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + isApprox( t, y, expected, 2.0 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); + +tape( 'the function supports a negative `strideA1` parameter (row-major)', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; + + data = rsa1nsa2; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + expected = new Float32Array( data.y_out ); + + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + isApprox( t, y, expected, 2.0 ); + t.strictEqual( out, y, 'returns expected value' ); t.end(); }); -tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y` (sx=1, sy=1)', function test( t ) { +tape( 'the function supports a negative `strideA1` parameter (column-major)', function test( t ) { var expected; - var alpha; - var order; - var trans; - var beta; - var lda; + var data; var out; var a; - var m; - var n; var x; var y; - order = stridesxoyo.order; - trans = stridesxoyo.trans; + data = csa1nsa2; - m = stridesxoyo.M; - n = stridesxoyo.N; - lda = stridesxoyo.lda; + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); - alpha = stridesxoyo.alpha; - beta = stridesxoyo.beta; + expected = new Float32Array( data.y_out ); - a = new Float32Array( stridesxoyo.A ); - x = new Float32Array( stridesxoyo.x ); - y = new Float32Array( stridesxoyo.y ); + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + isApprox( t, y, expected, 2.0 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); + +tape( 'the function supports a negative `strideA2` parameter (row-major)', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; + + data = rsa1sa2n; - expected = new Float32Array( stridesxoyo.y_out ); + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); - out = sgemv( order, trans, m, n, alpha, a, lda, x, 1, 0, beta, y, 1, 0 ); + expected = new Float32Array( data.y_out ); + + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); }); -tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y` (sx=1, sy=2)', function test( t ) { +tape( 'the function supports a negative `strideA2` parameter (column-major)', function test( t ) { var expected; - var alpha; - var order; - var trans; - var beta; - var lda; + var data; var out; var a; - var m; - var n; var x; var y; - order = stridesxoyt.order; - trans = stridesxoyt.trans; + data = csa1sa2n; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); - m = stridesxoyt.M; - n = stridesxoyt.N; - lda = stridesxoyt.lda; + expected = new Float32Array( data.y_out ); + + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + isApprox( t, y, expected, 2.0 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); + +tape( 'the function supports negative strides for `A` (row-major)', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; - alpha = stridesxoyt.alpha; - beta = stridesxoyt.beta; + data = rsa1nsa2n; - a = new Float32Array( stridesxoyt.A ); - x = new Float32Array( stridesxoyt.x ); - y = new Float32Array( stridesxoyt.y ); + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); - expected = new Float32Array( stridesxoyt.y_out ); + expected = new Float32Array( data.y_out ); - out = sgemv( order, trans, m, n, alpha, a, lda, x, 1, 0, beta, y, 2, 0 ); + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); }); -tape( 'the function supports `y` offset', function test( t ) { +tape( 'the function supports negative strides for `A` (column-major)', function test( t ) { var expected; - var alpha; - var order; - var trans; - var beta; - var lda; + var data; var out; var a; - var m; - var n; var x; var y; - order = stridexpyn.order; - trans = stridexpyn.trans; + data = csa1nsa2n; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); - m = stridexpyn.M; - n = stridexpyn.N; - lda = stridexpyn.lda; + expected = new Float32Array( data.y_out ); - alpha = stridexpyn.alpha; - beta = stridexpyn.beta; + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + isApprox( t, y, expected, 2.0 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); - a = new Float32Array( stridexpyn.A ); - x = new Float32Array( stridexpyn.x ); - y = new Float32Array( stridexpyn.y ); +tape( 'the function supports specifying an offset parameter for `A` (row-major)', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; - expected = new Float32Array( stridexpyn.y_out ); + data = roa; - out = sgemv( order, trans, m, n, alpha, a, lda, x, 1, 0, beta, y, -2, 2 ); + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + expected = new Float32Array( data.y_out ); + + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); }); -tape( 'the function supports `x` offset', function test( t ) { +tape( 'the function supports specifying an offset parameter for `A` (column-major)', function test( t ) { var expected; - var alpha; - var order; - var trans; - var beta; - var lda; + var data; var out; var a; - var m; - var n; var x; var y; - order = stridexnyp.order; - trans = stridexnyp.trans; + data = coa; - m = stridexnyp.M; - n = stridexnyp.N; - lda = stridexnyp.lda; + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); - alpha = stridexnyp.alpha; - beta = stridexnyp.beta; + expected = new Float32Array( data.y_out ); - a = new Float32Array( stridexnyp.A ); - x = new Float32Array( stridexnyp.x ); - y = new Float32Array( stridexnyp.y ); + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + isApprox( t, y, expected, 2.0 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); - expected = new Float32Array( stridexnyp.y_out ); +tape( 'the function supports specifying an `x` and `y` stride (row-major)', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; + + data = rxpyp; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); - out = sgemv( order, trans, m, n, alpha, a, lda, x, -1, 2, beta, y, 2, 0 ); + expected = new Float32Array( data.y_out ); + + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); }); -tape( 'the function returns a reference to the second input array', function test( t ) { - var alpha; - var order; - var trans; - var beta; - var lda; +tape( 'the function supports specifying an `x` and `y` stride (column-major)', function test( t ) { + var expected; + var data; var out; var a; - var m; - var n; var x; var y; - order = stridexpyp.order; - trans = stridexpyp.trans; + data = cxpyp; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + expected = new Float32Array( data.y_out ); + + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + isApprox( t, y, expected, 2.0 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); + +tape( 'the function supports specifying a negative `x` stride (row-major)', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; - m = stridexpyp.M; - n = stridexpyp.N; - lda = stridexpyp.lda; + data = rxnyp; - alpha = stridexpyp.alpha; - beta = stridexpyp.beta; + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); - a = new Float32Array( stridexpyp.A ); - x = new Float32Array( stridexpyp.x ); - y = new Float32Array( stridexpyp.y ); + expected = new Float32Array( data.y_out ); - out = sgemv( order, trans, m, n, alpha, a, lda, x, 1, 0, beta, y, 1, 0 ); + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); }); -tape( 'the function supports complex access patterns', function test( t ) { +tape( 'the function supports specifying a negative `x` stride (column-major)', function test( t ) { var expected; - var alpha; - var order; - var trans; - var beta; - var lda; + var data; var out; var a; - var m; - var n; var x; var y; - order = stridexnyn.order; - trans = stridexnyn.trans; + data = cxnyp; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); - m = stridexnyn.M; - n = stridexnyn.N; - lda = stridexnyn.lda; + expected = new Float32Array( data.y_out ); + + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + isApprox( t, y, expected, 2.0 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); + +tape( 'the function supports specifying a negative `y` stride (row-major)', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; + + data = rxpyn; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + expected = new Float32Array( data.y_out ); + + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + isApprox( t, y, expected, 2.0 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); + +tape( 'the function supports specifying a negative `y` stride (column-major)', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; + + data = cxpyn; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + expected = new Float32Array( data.y_out ); + + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + isApprox( t, y, expected, 2.0 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); + +tape( 'the function supports specifying negative strides for `x` and `y` (row-major)', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; + + data = rxnyn; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + expected = new Float32Array( data.y_out ); + + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + isApprox( t, y, expected, 2.0 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); + +tape( 'the function supports specifying negative strides for `x` and `y` (column-major)', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; + + data = cxnyn; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + expected = new Float32Array( data.y_out ); + + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + isApprox( t, y, expected, 2.0 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); + +tape( 'the function supports complex access pattern (row-major)', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; + + data = rap; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + expected = new Float32Array( data.y_out ); + + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + isApprox( t, y, expected, 2.0 ); + t.strictEqual( out, y, 'returns expected value' ); + t.end(); +}); + +tape( 'the function supports complex access pattern (column-major)', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; - alpha = stridexnyn.alpha; - beta = stridexnyn.beta; + data = cap; - a = new Float32Array( stridexnyn.A ); - x = new Float32Array( stridexnyn.x ); - y = new Float32Array( stridexnyn.y ); + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); - expected = new Float32Array( stridexnyn.y_out ); + expected = new Float32Array( data.y_out ); - out = sgemv( order, trans, m, n, alpha, a, lda, x, -1, 1, beta, y, -2, 4 ); + out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/test.sgemv.js b/lib/node_modules/@stdlib/blas/base/sgemv/test/test.sgemv.js index 9ba9c94abdf3..b2a9a4841fbc 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/test.sgemv.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/test.sgemv.js @@ -16,6 +16,8 @@ * limitations under the License. */ +/* eslint-disable max-len */ + 'use strict'; // MODULES // @@ -43,6 +45,7 @@ var rxpyn = require( './fixtures/row_major_xpyn.json' ); var rxnyp = require( './fixtures/row_major_xnyp.json' ); var rxpyp = require( './fixtures/row_major_xpyp.json' ); + // FUNCTIONS // /** @@ -187,34 +190,6 @@ tape( 'the function throws an error if provided an invalid fourth argument', fun } }); -// tape( 'the function throws an error if provided an invalid seventh argument', function test( t ) { -// var values; -// var data; -// var i; - -// data = rnt; - -// values = [ -// 2, -// 1, -// 0, -// -1, -// -2, -// -3 -// ]; - -// for ( i = 0; i < values.length; i++ ) { -// t.throws( badValue( values[ i ] ), RangeError, 'throws an error when provided ' + values[ i ] ); -// } -// t.end(); - -// function badValue( value ) { -// return function badValue() { -// sgemv( data.order, data.trans, data.M, rxpyp.N, data.alpha, new Float32Array( data.a ), value, new Float32Array( data.x ), data.strideX, data.beta, new Float32Array( data.y ), data.strideY ); -// }; -// } -// }); - tape( 'the function throws an error if provided an invalid ninth argument', function test( t ) { var values; var data; From 2910e0b7651b7b7227fa62df32eff12dd7fd6d8f Mon Sep 17 00:00:00 2001 From: aman-095 Date: Wed, 24 Jul 2024 12:26:13 +0530 Subject: [PATCH 06/19] docs: update description --- lib/node_modules/@stdlib/blas/base/sgemv/README.md | 2 +- lib/node_modules/@stdlib/blas/base/sgemv/examples/index.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/README.md b/lib/node_modules/@stdlib/blas/base/sgemv/README.md index efd41426fe3e..2f7b5f2bc9e7 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/README.md +++ b/lib/node_modules/@stdlib/blas/base/sgemv/README.md @@ -164,7 +164,7 @@ var A = discreteUniform( M*N, 0, 255, opts ); var x = discreteUniform( N, 0, 255, opts ); var y = discreteUniform( M, 0, 255, opts ); -sgemv( 'row-major', 'none', M, N, 1.0, A, N, x, -1, 1.0, y, -1 ); +sgemv( 'row-major', 'no-transpose', M, N, 1.0, A, N, x, -1, 1.0, y, -1 ); console.log( y ); ``` diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/examples/index.js b/lib/node_modules/@stdlib/blas/base/sgemv/examples/index.js index 1efd7e6fa214..ff34326f0cd4 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/examples/index.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/examples/index.js @@ -34,5 +34,5 @@ var A = discreteUniform( M*N, 0, 255, opts ); var x = discreteUniform( N, 0, 255, opts ); var y = discreteUniform( M, 0, 255, opts ); -sgemv( 'row-major', 'none', M, N, 1.0, A, N, x, -1, 1.0, y, -1 ); +sgemv( 'row-major', 'no-transpose', M, N, 1.0, A, N, x, -1, 1.0, y, -1 ); console.log( y ); From 1c1b64da51dc1e72bba273917551c9763052df9c Mon Sep 17 00:00:00 2001 From: aman-095 Date: Wed, 24 Jul 2024 12:31:55 +0530 Subject: [PATCH 07/19] chore: resolve lint error --- .../@stdlib/blas/base/sgemv/lib/ndarray.js | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/lib/ndarray.js b/lib/node_modules/@stdlib/blas/base/sgemv/lib/ndarray.js index e7043c298265..a5a3a42cb9e5 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/lib/ndarray.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/lib/ndarray.js @@ -16,8 +16,6 @@ * limitations under the License. */ -/* eslint-disable */ // FIXME - 'use strict'; // MODULES // @@ -67,23 +65,23 @@ var base = require( './base.js' ); * sgemv( 'row-major', 'no-transpose', 2, 3, 1.0, A, 3, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); * // y => [ 7.0, 16.0 ] */ -function sgemv( order, trans, M, N, alpha, A, strideA1, strideA2, offsetA, x, strideX, offsetX, beta, y, strideY, offsetY ) { +function sgemv( order, trans, M, N, alpha, A, strideA1, strideA2, offsetA, x, strideX, offsetX, beta, y, strideY, offsetY ) { // eslint-disable-line max-params, max-len if ( !isLayout( order ) ) { throw new TypeError( format( 'invalid argument. First argument must be a valid order. Value: `%s`.', order ) ); } if ( !isMatrixTranspose( trans ) ) { throw new TypeError( format( 'invalid argument. Second argument must specify whether to take transpose, conjugate-transpose or none. Value: `%s`.', trans ) ); } - if( M < 0 ) { + if ( M < 0 ) { throw new RangeError( format( 'invalid argument. Third argument must be a nonnegative integer. Value: `%d`.', M ) ); } - if( N < 0 ) { + if ( N < 0 ) { throw new RangeError( format( 'invalid argument. Fourth argument must be a nonnegative integer. Value: `%d`.', N ) ); } - if( strideX === 0 ) { + if ( strideX === 0 ) { throw new RangeError( format( 'invalid argument. Eleventh argument must be non-zero.' ) ); } - if( strideY === 0 ) { + if ( strideY === 0 ) { throw new RangeError( format( 'invalid argument. Fifteenth argument must be non-zero.' ) ); } // Check if we can early return... From 6aca791d11b1e8f35b4c483e5e4187539a639b63 Mon Sep 17 00:00:00 2001 From: aman-095 Date: Thu, 25 Jul 2024 09:33:56 +0530 Subject: [PATCH 08/19] chore: apply review change --- .../@stdlib/blas/base/sgemv/docs/types/index.d.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/docs/types/index.d.ts b/lib/node_modules/@stdlib/blas/base/sgemv/docs/types/index.d.ts index 7da05fc5ae67..80c11e1fd66c 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/docs/types/index.d.ts +++ b/lib/node_modules/@stdlib/blas/base/sgemv/docs/types/index.d.ts @@ -23,7 +23,7 @@ import { Layout, TransposeOperation } from '@stdlib/types/blas'; /** -* Interface describing `ssymv`. +* Interface describing `sgemv`. */ interface Routine { /** @@ -86,7 +86,7 @@ interface Routine { * sgemv( 'row-major', 'no-transpose', 2, 3, 1.0, A, 3, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); * // y => [ 7.0, 16.0 ] */ - ndarray( order: Layout, trans: TransposeOperation, M: number, N: number, alpha: number, A: Float32Array, LDA: number, x: Float32Array, strideX: number, offsetX: number, beta: number, y: Float32Array, strideY: number, offsetY: number ): Float32Array; + ndarray( order: Layout, trans: TransposeOperation, M: number, N: number, alpha: number, A: Float32Array, strideA1: number, strideA2: number, offsetA: number, x: Float32Array, strideX: number, offsetX: number, beta: number, y: Float32Array, strideY: number, offsetY: number ): Float32Array; } /** From 6853e6a02445593f71dcc80ea6d7d099dcdc16b4 Mon Sep 17 00:00:00 2001 From: aman-095 Date: Tue, 30 Jul 2024 11:13:18 +0530 Subject: [PATCH 09/19] refactor: update parameter for ndarray, and base implementations --- .../@stdlib/blas/base/sgemv/README.md | 8 +- .../base/sgemv/benchmark/benchmark.ndarray.js | 2 +- .../@stdlib/blas/base/sgemv/docs/repl.txt | 8 +- .../blas/base/sgemv/docs/types/index.d.ts | 9 +- .../blas/base/sgemv/docs/types/test.ts | 317 +++++++++--------- .../@stdlib/blas/base/sgemv/examples/index.js | 2 - .../@stdlib/blas/base/sgemv/lib/base.js | 18 +- .../@stdlib/blas/base/sgemv/lib/index.js | 2 +- .../@stdlib/blas/base/sgemv/lib/ndarray.js | 20 +- .../@stdlib/blas/base/sgemv/lib/sgemv.js | 2 +- .../column_major_complex_access_pattern.json | 1 - .../sgemv/test/fixtures/column_major_oa.json | 1 - .../test/fixtures/column_major_sa1_sa2.json | 1 - .../test/fixtures/column_major_sa1_sa2n.json | 1 - .../test/fixtures/column_major_sa1n_sa2.json | 1 - .../test/fixtures/column_major_sa1n_sa2n.json | 1 - .../row_major_complex_access_pattern.json | 1 - .../sgemv/test/fixtures/row_major_oa.json | 1 - .../test/fixtures/row_major_sa1_sa2.json | 1 - .../test/fixtures/row_major_sa1_sa2n.json | 1 - .../test/fixtures/row_major_sa1n_sa2.json | 1 - .../test/fixtures/row_major_sa1n_sa2n.json | 1 - .../blas/base/sgemv/test/test.ndarray.js | 98 ++---- 23 files changed, 213 insertions(+), 285 deletions(-) diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/README.md b/lib/node_modules/@stdlib/blas/base/sgemv/README.md index 2f7b5f2bc9e7..4e5f921e436e 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/README.md +++ b/lib/node_modules/@stdlib/blas/base/sgemv/README.md @@ -93,9 +93,9 @@ sgemv( 'row-major', 'no-transpose', 2, 2, 1.0, A, 2, x1, -1, 1.0, y1, -1 ); // y0 => [ 1.0, 8.0 ] ``` -#### sgemv.ndarray( ord, trans, M, N, α, A, sa1, sa2, oa, x, sx, ox, β, y, sy, oy ) +#### sgemv.ndarray( trans, M, N, α, A, sa1, sa2, oa, x, sx, ox, β, y, sy, oy ) -Performs one of the matrix-vector operations `y = α*A*x + β*y` or `y = α*A**T*x + β*y`, where α and β are scalars, x and y are vectors and A is an m by n matrix using alternative indexing semantics. +Performs one of the matrix-vector operations `y = α*A*x + β*y` or `y = α*A**T*x + β*y`, using alternative indexing semantics, where α and β are scalars, x and y are vectors and A is an m by n matrix. ```javascript var Float32Array = require( '@stdlib/array/float32' ); @@ -104,7 +104,7 @@ var A = new Float32Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] ); var x = new Float32Array( [ 1.0, 1.0, 1.0 ] ); var y = new Float32Array( [ 1.0, 1.0 ] ); -sgemv.ndarray( 'row-major', 'no-transpose', 2, 3, 1.0, A, 3, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); +sgemv.ndarray( 'no-transpose', 2, 3, 1.0, A, 3, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // y => [ 7.0, 16.0 ] ``` @@ -125,7 +125,7 @@ var A = new Float32Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] ); var x = new Float32Array( [ 1.0, 2.0, 3.0 ] ); var y = new Float32Array( [ 7.0, 8.0, 9.0, 10.0 ] ); -sgemv.ndarray( 'row-major', 'no-transpose', 2, 3, 1.0, A, 3, 1, 0, x, 1, 0, 1.0, y, -2, 2 ); +sgemv.ndarray( 'no-transpose', 2, 3, 1.0, A, 3, 1, 0, x, 1, 0, 1.0, y, -2, 2 ); // y => [ 39, 8, 23, 10 ] ``` diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/benchmark/benchmark.ndarray.js b/lib/node_modules/@stdlib/blas/base/sgemv/benchmark/benchmark.ndarray.js index e0cf66e348fe..40b2d30dbbcb 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/benchmark/benchmark.ndarray.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/benchmark/benchmark.ndarray.js @@ -63,7 +63,7 @@ function createBenchmark( len ) { b.tic(); for ( i = 0; i < b.iterations; i++ ) { - z = sgemv( 'row-major', 'no-transpose', len, len, 1.0, A, len, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); + z = sgemv( 'no-transpose', len, len, 1.0, A, len, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); if ( isnanf( z[ i%z.length ] ) ) { b.fail( 'should not return NaN' ); } diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/docs/repl.txt b/lib/node_modules/@stdlib/blas/base/sgemv/docs/repl.txt index 49a03ad8c643..c6d96a674c59 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/docs/repl.txt +++ b/lib/node_modules/@stdlib/blas/base/sgemv/docs/repl.txt @@ -88,7 +88,7 @@ [ 1.0, 8.0 ] -{{alias}}.ndarray( ord, tp, M, N, α, A, sa1, sa2, oa, x, sx, ox, β, y, sy, oy ) +{{alias}}.ndarray( tp, M, N, α, A, sa1, sa2, oa, x, sx, ox, β, y, sy, oy ) Perform one of the matrix-vector operations `y = α*A*x + β*y` or `y = α*A**T*x + β*y`, where `α` and `β` are scalars, `x` and `y` are vectors and `A` is an `M` by `N` matrix using alternative indexing @@ -100,9 +100,6 @@ Parameters ---------- - ord: string - Row-major (C-style) or column-major (Fortran-style) order. - tp: string Specifies whether `A` should be transposed, conjugate-transposed, or not transposed. @@ -159,9 +156,8 @@ > var x = new {{alias:@stdlib/array/float32}}( [ 1.0, 1.0 ] ); > var y = new {{alias:@stdlib/array/float32}}( [ 1.0, 1.0 ] ); > var A = new {{alias:@stdlib/array/float32}}( [ 1.0, 2.0, 3.0, 4.0 ] ); - > var ord = 'row-major'; > var tp = 'no-transpose'; - > {{alias}}.ndarray( ord, tp, 2, 2, 1, A, 2, 1, 0, x, 1, 0, 1, y, 1, 0 ) + > {{alias}}.ndarray( tp, 2, 2, 1, A, 2, 1, 0, x, 1, 0, 1, y, 1, 0 ) [ 4.0, 8.0 ] See Also diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/docs/types/index.d.ts b/lib/node_modules/@stdlib/blas/base/sgemv/docs/types/index.d.ts index 80c11e1fd66c..f64ff82026e8 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/docs/types/index.d.ts +++ b/lib/node_modules/@stdlib/blas/base/sgemv/docs/types/index.d.ts @@ -56,9 +56,8 @@ interface Routine { ( order: Layout, trans: TransposeOperation, M: number, N: number, alpha: number, A: Float32Array, LDA: number, x: Float32Array, strideX: number, beta: number, y: Float32Array, strideY: number ): Float32Array; /** - * Performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y are vectors and A is an m by n matrix using alternative indexing semantics. + * Performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y`, using alternative indexing semantics, where alpha and beta are scalars, x and y are vectors and A is an m by n matrix. * - * @param order - storage layout * @param trans - specifies whether `A` should be transposed, conjugate-transposed, or not transposed * @param M - number of rows in the matrix `A` * @param N - number of columns in the matrix `A` @@ -83,10 +82,10 @@ interface Routine { * var x = new Float32Array( [ 1.0, 1.0, 1.0 ] ); * var y = new Float32Array( [ 1.0, 1.0 ] ); * - * sgemv( 'row-major', 'no-transpose', 2, 3, 1.0, A, 3, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); + * sgemv( 'no-transpose', 2, 3, 1.0, A, 3, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); * // y => [ 7.0, 16.0 ] */ - ndarray( order: Layout, trans: TransposeOperation, M: number, N: number, alpha: number, A: Float32Array, strideA1: number, strideA2: number, offsetA: number, x: Float32Array, strideX: number, offsetX: number, beta: number, y: Float32Array, strideY: number, offsetY: number ): Float32Array; + ndarray( trans: TransposeOperation, M: number, N: number, alpha: number, A: Float32Array, strideA1: number, strideA2: number, offsetA: number, x: Float32Array, strideX: number, offsetX: number, beta: number, y: Float32Array, strideY: number, offsetY: number ): Float32Array; } /** @@ -123,7 +122,7 @@ interface Routine { * var x = new Float32Array( [ 1.0, 1.0, 1.0 ] ); * var y = new Float32Array( [ 1.0, 1.0, 1.0 ] ); * -* sgemv( 'row-major', 'no-transpose', 3, 3, 1.0, A, 3, 1, 0, x1, -1, 2, 1.0, y1, -1, 2 ); +* sgemv.ndarray( 'no-transpose', 3, 3, 1.0, A, 3, 1, 0, x1, -1, 2, 1.0, y1, -1, 2 ); * // y => [ 25.0, 16.0, 7.0 ] */ declare var sgemv: Routine; diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/docs/types/test.ts b/lib/node_modules/@stdlib/blas/base/sgemv/docs/types/test.ts index 7cee2138cf88..ae0e07e8a0a8 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/docs/types/test.ts +++ b/lib/node_modules/@stdlib/blas/base/sgemv/docs/types/test.ts @@ -249,39 +249,39 @@ import sgemv = require( './index' ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectType Float32Array + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectType Float32Array } -// The compiler throws an error if the function is provided a first argument which is not a string... +// The compiler throws an error if the function is provided a first argument which is not a character... { const x = new Float32Array( 10 ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv.ndarray( 10, 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( true, 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( false, 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( null, 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( undefined, 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( [], 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( {}, 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( ( x: number ): number => x, 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 10, 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( true, 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( false, 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( null, 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( undefined, 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( [ '1' ], 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( {}, 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( ( x: number ): number => x, 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError } -// The compiler throws an error if the function is provided a second argument which is not a character... +// The compiler throws an error if the function is provided a second argument which is not a number... { const x = new Float32Array( 10 ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv.ndarray( 'row-major', 10, 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', true, 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', false, 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', null, 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', undefined, 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', [ '1' ], 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', {}, 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', ( x: number ): number => x, 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', '10', 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', true, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', false, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', null, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', undefined, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', [], 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', {}, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', ( x: number ): number => x, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError } // The compiler throws an error if the function is provided a third argument which is not a number... @@ -290,14 +290,14 @@ import sgemv = require( './index' ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv.ndarray( 'row-major', 'no-transpose', '10', 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', true, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', false, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', null, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', undefined, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', [], 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', {}, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', ( x: number ): number => x, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, '10', 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, true, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, false, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, null, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, undefined, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, [], 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, {}, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, ( x: number ): number => x, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError } // The compiler throws an error if the function is provided a fourth argument which is not a number... @@ -306,46 +306,46 @@ import sgemv = require( './index' ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv.ndarray( 'row-major', 'no-transpose', 10, '10', 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, true, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, false, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, null, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, undefined, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, [], 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, {}, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, ( x: number ): number => x, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, '10', A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, true, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, false, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, null, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, undefined, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, [], A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, {}, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, ( x: number ): number => x, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError } -// The compiler throws an error if the function is provided a fifth argument which is not a number... +// The compiler throws an error if the function is provided a fifth argument which is not a Float32Array... { const x = new Float32Array( 10 ); const y = new Float32Array( 10 ); - const A = new Float32Array( 20 ); - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, '10', A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, true, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, false, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, null, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, undefined, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, [], A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, {}, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, ( x: number ): number => x, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, 10, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, '10', 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, true, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, false, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, null, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, undefined, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, [ '1' ], 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, {}, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, ( x: number ): number => x, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError } -// The compiler throws an error if the function is provided a sixth argument which is not a Float32Array... +// The compiler throws an error if the function is provided a sixth argument which is not a number... { const x = new Float32Array( 10 ); const y = new Float32Array( 10 ); + const A = new Float32Array( 20 ); - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, 10, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, '10', 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, true, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, false, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, null, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, undefined, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, [ '1' ], 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, {}, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, ( x: number ): number => x, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, '10', 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, true, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, false, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, null, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, undefined, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, [], 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, {}, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, ( x: number ): number => x, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError } // The compiler throws an error if the function is provided a seventh argument which is not a number... @@ -354,14 +354,14 @@ import sgemv = require( './index' ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, '10', 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, true, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, false, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, null, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, undefined, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, [], 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, {}, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, ( x: number ): number => x, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, '10', 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, true, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, false, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, null, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, undefined, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, [], 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, {}, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, ( x: number ): number => x, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError } // The compiler throws an error if the function is provided a eighth argument which is not a number... @@ -370,46 +370,46 @@ import sgemv = require( './index' ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, '10', 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, true, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, false, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, null, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, undefined, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, [], 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, {}, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, ( x: number ): number => x, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, '10', x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, true, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, false, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, null, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, undefined, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, [], x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, {}, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, ( x: number ): number => x, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError } -// The compiler throws an error if the function is provided a ninth argument which is not a number... +// The compiler throws an error if the function is provided a ninth argument which is not a Float32Array... { - const x = new Float32Array( 10 ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, '10', x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, true, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, false, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, null, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, undefined, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, [], x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, {}, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, ( x: number ): number => x, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, 10, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, '10', 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, true, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, false, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, null, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, undefined, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, [ '1' ], 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, {}, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, ( x: number ): number => x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError } -// The compiler throws an error if the function is provided a tenth argument which is not a Float32Array... +// The compiler throws an error if the function is provided a tenth argument which is not a number... { + const x = new Float32Array( 10 ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, 10, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, '10', 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, true, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, false, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, null, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, undefined, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, [ '1' ], 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, {}, 1, 0, 1.0, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, ( x: number ): number => x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, '10', 0, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, true, 0, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, false, 0, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, null, 0, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, undefined, 0, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, [], 0, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, {}, 0, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, ( x: number ): number => x, 0, 1.0, y, 1 ); // $ExpectError } // The compiler throws an error if the function is provided a eleventh argument which is not a number... @@ -418,14 +418,14 @@ import sgemv = require( './index' ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, '10', 0, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, true, 0, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, false, 0, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, null, 0, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, undefined, 0, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, [], 0, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, {}, 0, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, ( x: number ): number => x, 0, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, '10', 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, true, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, false, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, null, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, undefined, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, [], 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, {}, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, ( x: number ): number => x, 1.0, y, 1 ); // $ExpectError } // The compiler throws an error if the function is provided a twelfth argument which is not a number... @@ -434,78 +434,62 @@ import sgemv = require( './index' ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, '10', 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, true, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, false, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, null, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, undefined, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, [], 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, {}, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, ( x: number ): number => x, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, '10', y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, true, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, false, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, null, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, undefined, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, [], y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, {}, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, ( x: number ): number => x, y, 1, 0 ); // $ExpectError } -// The compiler throws an error if the function is provided a thirteenth argument which is not a number... +// The compiler throws an error if the function is provided a thirteenth argument which is not a Float32Array... { const x = new Float32Array( 10 ); - const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, '10', y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, true, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, false, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, null, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, undefined, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, [], y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, {}, y, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, ( x: number ): number => x, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, 10, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, '10', 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, true, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, false, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, null, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, undefined, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, [ '1' ], 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, {}, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, ( x: number ): number => x, 1, 0 ); // $ExpectError } -// The compiler throws an error if the function is provided a fourteenth argument which is not a Float32Array... -{ - const x = new Float32Array( 10 ); - const A = new Float32Array( 20 ); - - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, 10, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, '10', 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, true, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, false, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, null, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, undefined, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, [ '1' ], 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, {}, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, ( x: number ): number => x, 1, 0 ); // $ExpectError -} - -// The compiler throws an error if the function is provided a fifteenth argument which is not a number... +// The compiler throws an error if the function is provided a fourteenth argument which is not a number... { const x = new Float32Array( 10 ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, '10', 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, true, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, false, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, null, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, undefined, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, [], 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, {}, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, ( x: number ): number => x, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, '10', 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, true, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, false, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, null, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, undefined, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, [], 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, {}, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, ( x: number ): number => x, 0 ); // $ExpectError } -// The compiler throws an error if the function is provided a sixteenth argument which is not a number... +// The compiler throws an error if the function is provided a fifteenth argument which is not a number... { const x = new Float32Array( 10 ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, '10' ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, true ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, false ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, null ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, undefined ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, [] ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, {} ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, ( x: number ): number => x ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, '10' ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, true ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, false ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, null ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, undefined ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, [] ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, {} ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, ( x: number ): number => x ); // $ExpectError } // The compiler throws an error if the `ndarray` method is provided an unsupported number of arguments... @@ -515,20 +499,19 @@ import sgemv = require( './index' ); const A = new Float32Array( 20 ); sgemv.ndarray(); // $ExpectError - sgemv.ndarray( 'row-major' ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose' ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0, 10 ); // $ExpectError + sgemv.ndarray( 'no-transpose' ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0, 10 ); // $ExpectError } diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/examples/index.js b/lib/node_modules/@stdlib/blas/base/sgemv/examples/index.js index ff34326f0cd4..b41a65b29369 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/examples/index.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/examples/index.js @@ -16,8 +16,6 @@ * limitations under the License. */ -/* eslint-disable */ // FIXME - 'use strict'; var discreteUniform = require( '@stdlib/random/array/discrete-uniform' ); diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/lib/base.js b/lib/node_modules/@stdlib/blas/base/sgemv/lib/base.js index 6be1603741f4..34de764c04f1 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/lib/base.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/lib/base.js @@ -20,6 +20,8 @@ // MODULES // +var isRowMajor = require( '@stdlib/ndarray/base/assert/is-row-major' ); +var isColMajor = require( '@stdlib/ndarray/base/assert/is-column-major' ); var sfill = require( '@stdlib/blas/ext/base/sfill' ).ndarray; var sscal = require( '@stdlib/blas/base/sscal' ).ndarray; var f32 = require( '@stdlib/number/float64/base/to-float32' ); @@ -30,7 +32,6 @@ var f32 = require( '@stdlib/number/float64/base/to-float32' ); /** * Performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y are vectors and, A is an m by n matrix. * -* @param {string} order - storage layout * @param {string} trans - specifies whether `A` should be transposed, conjugate-transposed, or not transposed * @param {NonNegativeInteger} M - number of rows in the matrix `A` * @param {NonNegativeInteger} N - number of columns in the matrix `A` @@ -55,12 +56,10 @@ var f32 = require( '@stdlib/number/float64/base/to-float32' ); * var x = new Float32Array( [ 1.0, 1.0, 1.0 ] ); * var y = new Float32Array( [ 1.0, 1.0 ] ); * -* sgemv( 'row-major', 'no-transpose', 2, 3, 1.0, A, 3, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); +* sgemv( 'no-transpose', 2, 3, 1.0, A, 3, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); * // y => [ 7.0, 16.0 ] */ -function sgemv( order, trans, M, N, alpha, A, strideA1, strideA2, offsetA, x, strideX, offsetX, beta, y, strideY, offsetY ) { // eslint-disable-line max-params, max-len - var isColMajor; - var isRowMajor; +function sgemv( trans, M, N, alpha, A, strideA1, strideA2, offsetA, x, strideX, offsetX, beta, y, strideY, offsetY ) { // eslint-disable-line max-params, max-len var lenx; var leny; var temp; @@ -76,10 +75,7 @@ function sgemv( order, trans, M, N, alpha, A, strideA1, strideA2, offsetA, x, st // Note on variable naming convention: sa#, ix#, i# where # corresponds to the loop number, with `0` being the innermost loop... - isRowMajor = ( order === 'row-major' ); - isColMajor = ( order === 'column-major' ); - - if ( isRowMajor ) { + if ( isRowMajor( [ strideA1, strideA2 ] ) ) { // For row-major matrices, the last dimension has the fastest changing index... sa0 = strideA2; // stride for innermost loop sa1 = strideA1; // stride for outermost loop @@ -109,8 +105,8 @@ function sgemv( order, trans, M, N, alpha, A, strideA1, strideA2, offsetA, x, st return y; } if ( - ( isColMajor && trans === 'no-transpose' ) || - ( isRowMajor && trans !== 'no-transpose' ) + ( isColMajor( [ strideA1, strideA2 ] ) && trans === 'no-transpose' ) || + ( isRowMajor( [ strideA1, strideA2 ] ) && trans !== 'no-transpose' ) ) { ix1 = kx; for ( i1 = 0; i1 < lenx; i1++ ) { diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/lib/index.js b/lib/node_modules/@stdlib/blas/base/sgemv/lib/index.js index 226e7912555f..e8e1f46e8172 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/lib/index.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/lib/index.js @@ -42,7 +42,7 @@ * var x = new Float32Array( [ 1.0, 1.0, 1.0 ] ); * var y = new Float32Array( [ 1.0, 1.0 ] ); * -* sgemv.ndarray( 'row-major', 'no-transpose', 2, 3, 1.0, A, 3, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); +* sgemv.ndarray( 'no-transpose', 2, 3, 1.0, A, 3, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); * // y => [ 7.0, 16.0 ] */ diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/lib/ndarray.js b/lib/node_modules/@stdlib/blas/base/sgemv/lib/ndarray.js index a5a3a42cb9e5..2c4a4a16a7f2 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/lib/ndarray.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/lib/ndarray.js @@ -20,7 +20,6 @@ // MODULES // -var isLayout = require( '@stdlib/blas/base/assert/is-layout' ); var isMatrixTranspose = require( '@stdlib/blas/base/assert/is-transpose-operation' ); var format = require( '@stdlib/string/format' ); var base = require( './base.js' ); @@ -31,7 +30,6 @@ var base = require( './base.js' ); /** * Performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y are vectors and, A is an m by n matrix. * -* @param {string} order - storage layout * @param {string} trans - specifies whether `A` should be transposed, conjugate-transposed, or not transposed * @param {NonNegativeInteger} M - number of rows in the matrix `A` * @param {NonNegativeInteger} N - number of columns in the matrix `A` @@ -47,12 +45,11 @@ var base = require( './base.js' ); * @param {Float32Array} y - second input vector * @param {integer} strideY - `y` stride length * @param {NonNegativeInteger} offsetY - starting index for `y` -* @throws {TypeError} first argument must be a valid order -* @throws {TypeError} second argument must specify whether to consider transpose of the given matrix or not +* @throws {TypeError} first argument must specify whether to consider transpose of the given matrix or not +* @throws {RangeError} second argument must be a nonnegative integer * @throws {RangeError} third argument must be a nonnegative integer -* @throws {RangeError} fourth argument must be a nonnegative integer -* @throws {RangeError} eleventh argument must be non-zero -* @throws {RangeError} fifteenth argument must be non-zero +* @throws {RangeError} tenth argument must be non-zero +* @throws {RangeError} fourteenth argument must be non-zero * @returns {Float32Array} `y` * * @example @@ -62,13 +59,10 @@ var base = require( './base.js' ); * var x = new Float32Array( [ 1.0, 1.0, 1.0 ] ); * var y = new Float32Array( [ 1.0, 1.0 ] ); * -* sgemv( 'row-major', 'no-transpose', 2, 3, 1.0, A, 3, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); +* sgemv( 'no-transpose', 2, 3, 1.0, A, 3, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); * // y => [ 7.0, 16.0 ] */ -function sgemv( order, trans, M, N, alpha, A, strideA1, strideA2, offsetA, x, strideX, offsetX, beta, y, strideY, offsetY ) { // eslint-disable-line max-params, max-len - if ( !isLayout( order ) ) { - throw new TypeError( format( 'invalid argument. First argument must be a valid order. Value: `%s`.', order ) ); - } +function sgemv( trans, M, N, alpha, A, strideA1, strideA2, offsetA, x, strideX, offsetX, beta, y, strideY, offsetY ) { // eslint-disable-line max-params, max-len if ( !isMatrixTranspose( trans ) ) { throw new TypeError( format( 'invalid argument. Second argument must specify whether to take transpose, conjugate-transpose or none. Value: `%s`.', trans ) ); } @@ -88,7 +82,7 @@ function sgemv( order, trans, M, N, alpha, A, strideA1, strideA2, offsetA, x, st if ( M === 0 || N === 0 || ( alpha === 0.0 && beta === 1.0 ) ) { return y; } - return base( order, trans, M, N, alpha, A, strideA1, strideA2, offsetA, x, strideX, offsetX, beta, y, strideY, offsetY ); // eslint-disable-line max-len + return base( trans, M, N, alpha, A, strideA1, strideA2, offsetA, x, strideX, offsetX, beta, y, strideY, offsetY ); // eslint-disable-line max-len } diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/lib/sgemv.js b/lib/node_modules/@stdlib/blas/base/sgemv/lib/sgemv.js index ef8f5a7e48f5..954aa2a3593a 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/lib/sgemv.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/lib/sgemv.js @@ -109,7 +109,7 @@ function sgemv( order, trans, M, N, alpha, A, LDA, x, strideX, beta, y, strideY sa1 = LDA; sa2 = 1; } - return base( order, trans, M, N, alpha, A, sa1, sa2, 0, x, strideX, ox, beta, y, strideY, oy ); // eslint-disable-line max-len + return base( trans, M, N, alpha, A, sa1, sa2, 0, x, strideX, ox, beta, y, strideY, oy ); // eslint-disable-line max-len } diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_complex_access_pattern.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_complex_access_pattern.json index f6b322d628c8..a87cd0111f38 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_complex_access_pattern.json +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_complex_access_pattern.json @@ -1,5 +1,4 @@ { - "order": "column-major", "trans": "no-transpose", "strideA1": -2, "strideA2": -5, diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_oa.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_oa.json index d4b4fe690ec2..92da961fb13a 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_oa.json +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_oa.json @@ -1,5 +1,4 @@ { - "order": "column-major", "trans": "no-transpose", "M": 3, "N": 2, diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1_sa2.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1_sa2.json index bef23b3049b0..6a262d2a7778 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1_sa2.json +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1_sa2.json @@ -1,5 +1,4 @@ { - "order": "column-major", "trans": "no-transpose", "M": 3, "N": 2, diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1_sa2n.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1_sa2n.json index b2a2abd9d19f..c91c334cc3e2 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1_sa2n.json +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1_sa2n.json @@ -1,5 +1,4 @@ { - "order": "column-major", "trans": "no-transpose", "M": 3, "N": 2, diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1n_sa2.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1n_sa2.json index 1402036e6aba..fae84fbff430 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1n_sa2.json +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1n_sa2.json @@ -1,5 +1,4 @@ { - "order": "column-major", "trans": "no-transpose", "M": 3, "N": 2, diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1n_sa2n.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1n_sa2n.json index 762f03563f15..e21c2724e2b7 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1n_sa2n.json +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/column_major_sa1n_sa2n.json @@ -1,5 +1,4 @@ { - "order": "column-major", "trans": "no-transpose", "M": 3, "N": 2, diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_complex_access_pattern.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_complex_access_pattern.json index 502c0b47f742..555645d3c7cd 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_complex_access_pattern.json +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_complex_access_pattern.json @@ -1,5 +1,4 @@ { - "order": "row-major", "trans": "no-transpose", "strideA1": -6, "strideA2": -1, diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_oa.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_oa.json index 548a3027a023..c8c69c1071ba 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_oa.json +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_oa.json @@ -1,5 +1,4 @@ { - "order": "row-major", "trans": "no-transpose", "M": 3, "N": 2, diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1_sa2.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1_sa2.json index bc6bab27d31d..f3ea02405b4d 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1_sa2.json +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1_sa2.json @@ -1,5 +1,4 @@ { - "order": "row-major", "trans": "no-transpose", "M": 3, "N": 2, diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1_sa2n.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1_sa2n.json index 10c9b2981c81..a7b79aa7d772 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1_sa2n.json +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1_sa2n.json @@ -1,5 +1,4 @@ { - "order": "row-major", "trans": "no-transpose", "M": 3, "N": 2, diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1n_sa2.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1n_sa2.json index 0ba01f2c9ddf..14a0b13c491d 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1n_sa2.json +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1n_sa2.json @@ -1,5 +1,4 @@ { - "order": "row-major", "trans": "no-transpose", "M": 3, "N": 2, diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1n_sa2n.json b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1n_sa2n.json index 74baa651fae8..78a6ff3cc584 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1n_sa2n.json +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/fixtures/row_major_sa1n_sa2n.json @@ -1,5 +1,4 @@ { - "order": "row-major", "trans": "no-transpose", "M": 3, "N": 2, diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/test.ndarray.js b/lib/node_modules/@stdlib/blas/base/sgemv/test/test.ndarray.js index 03814726dba9..67c203b712fa 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/test.ndarray.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/test.ndarray.js @@ -95,8 +95,8 @@ tape( 'main export is a function', function test( t ) { t.end(); }); -tape( 'the function has an arity of 16', function test( t ) { - t.strictEqual( sgemv.length, 16, 'returns expected value' ); +tape( 'the function has an arity of 15', function test( t ) { + t.strictEqual( sgemv.length, 15, 'returns expected value' ); t.end(); }); @@ -121,7 +121,7 @@ tape( 'the function throws an error if provided an invalid first argument', func function badValue( value ) { return function badValue() { - sgemv( value, data.trans, data.M, data.N, data.alpha, new Float32Array( data.A ), data.strideA1, data.strideA2, data.offsetA, new Float32Array( data.x ), data.strideX, data.offsetX, data.beta, new Float32Array( data.y ), data.strideY, data.offsetY ); + sgemv( value, data.M, data.N, data.alpha, new Float32Array( data.A ), data.strideA1, data.strideA2, data.offsetA, new Float32Array( data.x ), data.strideX, data.offsetX, data.beta, new Float32Array( data.y ), data.strideY, data.offsetY ); }; } }); @@ -133,32 +133,6 @@ tape( 'the function throws an error if provided an invalid second argument', fun data = rnt; - values = [ - 'foo', - 'bar', - 'beep', - 'boop' - ]; - - for ( i = 0; i < values.length; i++ ) { - t.throws( badValue( values[ i ] ), TypeError, 'throws an error when provided ' + values[ i ] ); - } - t.end(); - - function badValue( value ) { - return function badValue() { - sgemv( data.order, value, data.M, data.N, data.alpha, new Float32Array( data.A ), data.strideA1, data.strideA2, data.offsetA, new Float32Array( data.x ), data.strideX, data.offsetX, data.beta, new Float32Array( data.y ), data.strideY, data.offsetY ); - }; - } -}); - -tape( 'the function throws an error if provided an invalid third argument', function test( t ) { - var values; - var data; - var i; - - data = rnt; - values = [ -1, -2, @@ -172,12 +146,12 @@ tape( 'the function throws an error if provided an invalid third argument', func function badValue( value ) { return function badValue() { - sgemv( data.order, data.trans, value, data.N, data.alpha, new Float32Array( data.A ), data.strideA1, data.strideA2, data.offsetA, new Float32Array( data.x ), data.strideX, data.offsetX, data.beta, new Float32Array( data.y ), data.strideY, data.offsetY ); + sgemv( data.trans, value, data.N, data.alpha, new Float32Array( data.A ), data.strideA1, data.strideA2, data.offsetA, new Float32Array( data.x ), data.strideX, data.offsetX, data.beta, new Float32Array( data.y ), data.strideY, data.offsetY ); }; } }); -tape( 'the function throws an error if provided an invalid fourth argument', function test( t ) { +tape( 'the function throws an error if provided an invalid third argument', function test( t ) { var values; var data; var i; @@ -197,12 +171,12 @@ tape( 'the function throws an error if provided an invalid fourth argument', fun function badValue( value ) { return function badValue() { - sgemv( data.order, data.trans, data.M, value, data.alpha, new Float32Array( data.A ), data.strideA1, data.strideA2, data.offsetA, new Float32Array( data.x ), data.strideX, data.offsetX, data.beta, new Float32Array( data.y ), data.strideY, data.offsetY ); + sgemv( data.trans, data.M, value, data.alpha, new Float32Array( data.A ), data.strideA1, data.strideA2, data.offsetA, new Float32Array( data.x ), data.strideX, data.offsetX, data.beta, new Float32Array( data.y ), data.strideY, data.offsetY ); }; } }); -tape( 'the function throws an error if provided an invalid eleventh argument', function test( t ) { +tape( 'the function throws an error if provided an invalid tenth argument', function test( t ) { var values; var data; var i; @@ -220,12 +194,12 @@ tape( 'the function throws an error if provided an invalid eleventh argument', f function badValue( value ) { return function badValue() { - sgemv( data.order, data.trans, data.M, data.N, data.alpha, new Float32Array( data.A ), data.strideA1, data.strideA2, data.offsetA, new Float32Array( data.x ), value, data.offsetX, data.beta, new Float32Array( data.y ), data.strideY, data.offsetY ); + sgemv( data.trans, data.M, data.N, data.alpha, new Float32Array( data.A ), data.strideA1, data.strideA2, data.offsetA, new Float32Array( data.x ), value, data.offsetX, data.beta, new Float32Array( data.y ), data.strideY, data.offsetY ); }; } }); -tape( 'the function throws an error if provided an invalid fifteenth argument', function test( t ) { +tape( 'the function throws an error if provided an invalid fourteenth argument', function test( t ) { var values; var data; var i; @@ -243,7 +217,7 @@ tape( 'the function throws an error if provided an invalid fifteenth argument', function badValue( value ) { return function badValue() { - sgemv( data.order, data.trans, data.M, data.N, data.alpha, new Float32Array( data.A ), data.strideA1, data.strideA2, data.offsetA, new Float32Array( data.x ), data.strideX, data.offsetX, data.beta, new Float32Array( data.y ), value, data.offsetY ); + sgemv( data.trans, data.M, data.N, data.alpha, new Float32Array( data.A ), data.strideA1, data.strideA2, data.offsetA, new Float32Array( data.x ), data.strideX, data.offsetX, data.beta, new Float32Array( data.y ), value, data.offsetY ); }; } }); @@ -264,7 +238,7 @@ tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x expected = new Float32Array( data.y_out ); - out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + out = sgemv( data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); @@ -286,7 +260,7 @@ tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x expected = new Float32Array( data.y_out ); - out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + out = sgemv( data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); @@ -308,7 +282,7 @@ tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x expected = new Float32Array( data.y_out ); - out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + out = sgemv( data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); @@ -330,7 +304,7 @@ tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x expected = new Float32Array( data.y_out ); - out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + out = sgemv( data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); @@ -349,7 +323,7 @@ tape( 'the function returns a reference to the second input array (row-major)', x = new Float32Array( data.x ); y = new Float32Array( data.y ); - out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + out = sgemv( data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); t.strictEqual( out, y, 'returns expected value' ); t.end(); }); @@ -367,7 +341,7 @@ tape( 'the function returns a reference to the second input array (column-major) x = new Float32Array( data.x ); y = new Float32Array( data.y ); - out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + out = sgemv( data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); t.strictEqual( out, y, 'returns expected value' ); t.end(); }); @@ -388,7 +362,7 @@ tape( 'the function supports specifying stride of the first and the second dimen expected = new Float32Array( data.y_out ); - out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + out = sgemv( data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); @@ -410,7 +384,7 @@ tape( 'the function supports specifying stride of the first and the second dimen expected = new Float32Array( data.y_out ); - out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + out = sgemv( data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); @@ -432,7 +406,7 @@ tape( 'the function supports a negative `strideA1` parameter (row-major)', funct expected = new Float32Array( data.y_out ); - out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + out = sgemv( data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); @@ -454,7 +428,7 @@ tape( 'the function supports a negative `strideA1` parameter (column-major)', fu expected = new Float32Array( data.y_out ); - out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + out = sgemv( data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); @@ -476,7 +450,7 @@ tape( 'the function supports a negative `strideA2` parameter (row-major)', funct expected = new Float32Array( data.y_out ); - out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + out = sgemv( data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); @@ -498,7 +472,7 @@ tape( 'the function supports a negative `strideA2` parameter (column-major)', fu expected = new Float32Array( data.y_out ); - out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + out = sgemv( data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); @@ -520,7 +494,7 @@ tape( 'the function supports negative strides for `A` (row-major)', function tes expected = new Float32Array( data.y_out ); - out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + out = sgemv( data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); @@ -542,7 +516,7 @@ tape( 'the function supports negative strides for `A` (column-major)', function expected = new Float32Array( data.y_out ); - out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + out = sgemv( data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); @@ -564,7 +538,7 @@ tape( 'the function supports specifying an offset parameter for `A` (row-major)' expected = new Float32Array( data.y_out ); - out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + out = sgemv( data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); @@ -586,7 +560,7 @@ tape( 'the function supports specifying an offset parameter for `A` (column-majo expected = new Float32Array( data.y_out ); - out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + out = sgemv( data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); @@ -608,7 +582,7 @@ tape( 'the function supports specifying an `x` and `y` stride (row-major)', func expected = new Float32Array( data.y_out ); - out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + out = sgemv( data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); @@ -630,7 +604,7 @@ tape( 'the function supports specifying an `x` and `y` stride (column-major)', f expected = new Float32Array( data.y_out ); - out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + out = sgemv( data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); @@ -652,7 +626,7 @@ tape( 'the function supports specifying a negative `x` stride (row-major)', func expected = new Float32Array( data.y_out ); - out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + out = sgemv( data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); @@ -674,7 +648,7 @@ tape( 'the function supports specifying a negative `x` stride (column-major)', f expected = new Float32Array( data.y_out ); - out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + out = sgemv( data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); @@ -696,7 +670,7 @@ tape( 'the function supports specifying a negative `y` stride (row-major)', func expected = new Float32Array( data.y_out ); - out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + out = sgemv( data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); @@ -718,7 +692,7 @@ tape( 'the function supports specifying a negative `y` stride (column-major)', f expected = new Float32Array( data.y_out ); - out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + out = sgemv( data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); @@ -740,7 +714,7 @@ tape( 'the function supports specifying negative strides for `x` and `y` (row-ma expected = new Float32Array( data.y_out ); - out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + out = sgemv( data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); @@ -762,7 +736,7 @@ tape( 'the function supports specifying negative strides for `x` and `y` (column expected = new Float32Array( data.y_out ); - out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + out = sgemv( data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); @@ -784,7 +758,7 @@ tape( 'the function supports complex access pattern (row-major)', function test( expected = new Float32Array( data.y_out ); - out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + out = sgemv( data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); @@ -806,7 +780,7 @@ tape( 'the function supports complex access pattern (column-major)', function te expected = new Float32Array( data.y_out ); - out = sgemv( data.order, data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + out = sgemv( data.trans, data.M, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); isApprox( t, y, expected, 2.0 ); t.strictEqual( out, y, 'returns expected value' ); t.end(); From 932e15618614a16f94a2eafba758b4e3bafcee39 Mon Sep 17 00:00:00 2001 From: Athan Reines Date: Thu, 1 Aug 2024 01:47:55 -0700 Subject: [PATCH 10/19] refactor: update error messages and descriptions --- .../@stdlib/blas/base/sgemv/lib/base.js | 66 ++++++++++--------- .../@stdlib/blas/base/sgemv/lib/index.js | 2 +- .../@stdlib/blas/base/sgemv/lib/ndarray.js | 6 +- .../@stdlib/blas/base/sgemv/lib/sgemv.js | 22 +++---- 4 files changed, 49 insertions(+), 47 deletions(-) diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/lib/base.js b/lib/node_modules/@stdlib/blas/base/sgemv/lib/base.js index 34de764c04f1..dfd8bbd07fa1 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/lib/base.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/lib/base.js @@ -21,7 +21,6 @@ // MODULES // var isRowMajor = require( '@stdlib/ndarray/base/assert/is-row-major' ); -var isColMajor = require( '@stdlib/ndarray/base/assert/is-column-major' ); var sfill = require( '@stdlib/blas/ext/base/sfill' ).ndarray; var sscal = require( '@stdlib/blas/base/sscal' ).ndarray; var f32 = require( '@stdlib/number/float64/base/to-float32' ); @@ -30,8 +29,9 @@ var f32 = require( '@stdlib/number/float64/base/to-float32' ); // MAIN // /** -* Performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y are vectors and, A is an m by n matrix. +* Performs one of the matrix-vector operations `y = α*A*x + β*y` or `y = α*A^T*x + β*y`, where `α` and `β` are scalars, `x` and `y` are vectors, and `A` is an `M` by `N` matrix. * +* @private * @param {string} trans - specifies whether `A` should be transposed, conjugate-transposed, or not transposed * @param {NonNegativeInteger} M - number of rows in the matrix `A` * @param {NonNegativeInteger} N - number of columns in the matrix `A` @@ -60,22 +60,22 @@ var f32 = require( '@stdlib/number/float64/base/to-float32' ); * // y => [ 7.0, 16.0 ] */ function sgemv( trans, M, N, alpha, A, strideA1, strideA2, offsetA, x, strideX, offsetX, beta, y, strideY, offsetY ) { // eslint-disable-line max-params, max-len - var lenx; - var leny; - var temp; + var isrm; + var xlen; + var ylen; + var tmp; var ix1; var iy1; var sa0; var sa1; var i1; var i0; - var kx; - var ky; var oa; // Note on variable naming convention: sa#, ix#, i# where # corresponds to the loop number, with `0` being the innermost loop... - if ( isRowMajor( [ strideA1, strideA2 ] ) ) { + isrm = isRowMajor( [ strideA1, strideA2 ] ); + if ( isrm ) { // For row-major matrices, the last dimension has the fastest changing index... sa0 = strideA2; // stride for innermost loop sa1 = strideA1; // stride for outermost loop @@ -84,53 +84,55 @@ function sgemv( trans, M, N, alpha, A, strideA1, strideA2, offsetA, x, strideX, sa0 = strideA1; // stride for innermost loop sa1 = strideA2; // stride for outermost loop } - - kx = offsetX; - ky = offsetY; - lenx = M; - leny = N; if ( trans === 'no-transpose' ) { - lenx = N; - leny = M; + xlen = N; + ylen = M; + } else { + xlen = M; + ylen = N; } // y = beta*y if ( beta !== 1.0 ) { if ( beta === 0.0 ) { - sfill( leny, 0.0, y, strideY, offsetY ); + sfill( ylen, 0.0, y, strideY, offsetY ); } else { - sscal( leny, beta, y, strideY, offsetY ); + sscal( ylen, beta, y, strideY, offsetY ); } } if ( alpha === 0.0 ) { return y; } + // Form: y = α*A*x + y if ( - ( isColMajor( [ strideA1, strideA2 ] ) && trans === 'no-transpose' ) || - ( isRowMajor( [ strideA1, strideA2 ] ) && trans !== 'no-transpose' ) + ( !isrm && trans === 'no-transpose' ) || + ( isrm && trans !== 'no-transpose' ) ) { - ix1 = kx; - for ( i1 = 0; i1 < lenx; i1++ ) { - temp = f32( alpha * x[ ix1 ] ); + ix1 = offsetX; + for ( i1 = 0; i1 < xlen; i1++ ) { + tmp = f32( alpha * x[ ix1 ] ); oa = offsetA + (sa1*i1); - iy1 = ky; - for ( i0 = 0; i0 < leny; i0++ ) { - y[ iy1 ] += f32( A[ oa+(sa0*i0) ] * temp ); + iy1 = offsetY; + for ( i0 = 0; i0 < ylen; i0++ ) { + y[ iy1 ] += f32( A[ oa+(sa0*i0) ] * tmp ); iy1 += strideY; } ix1 += strideX; } return y; } - iy1 = ky; - for ( i1 = 0; i1 < leny; i1++ ) { - temp = 0.0; - ix1 = kx; + // Form: y = α*A^T*x + y + + // ( !isrm && trans === 'no-transpose' ) || ( isrm && trans !== 'no-transpose' ) + iy1 = offsetY; + for ( i1 = 0; i1 < ylen; i1++ ) { + tmp = 0.0; + ix1 = offsetX; oa = offsetA + (sa1*i1); - for ( i0 = 0; i0 < lenx; i0++ ) { - temp += f32( A[ oa+(sa0*i0) ] * x[ ix1 ] ); + for ( i0 = 0; i0 < xlen; i0++ ) { + tmp += f32( A[ oa+(sa0*i0) ] * x[ ix1 ] ); ix1 += strideX; } - y[ iy1 ] += f32( alpha * temp ); + y[ iy1 ] += f32( alpha * tmp ); iy1 += strideY; } return y; diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/lib/index.js b/lib/node_modules/@stdlib/blas/base/sgemv/lib/index.js index e8e1f46e8172..e7ab5debb8b6 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/lib/index.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/lib/index.js @@ -19,7 +19,7 @@ 'use strict'; /** -* BLAS level 2 routine to perform one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y are vectors and A is an m by n matrix. +* BLAS level 2 routine to perform one of the matrix-vector operations `y = α*A*x + β*y` or `y = α*A^T*x + β*y`, where `α` and `β` are scalars, `x` and `y` are vectors, and `A` is an `M` by `N` matrix. * * @module @stdlib/blas/base/sgemv * diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/lib/ndarray.js b/lib/node_modules/@stdlib/blas/base/sgemv/lib/ndarray.js index 2c4a4a16a7f2..e397782fe524 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/lib/ndarray.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/lib/ndarray.js @@ -28,7 +28,7 @@ var base = require( './base.js' ); // MAIN // /** -* Performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y are vectors and, A is an m by n matrix. +* Performs one of the matrix-vector operations `y = α*A*x + β*y` or `y = α*A^T*x + β*y`, where `α` and `β` are scalars, `x` and `y` are vectors, and `A` is an `M` by `N` matrix. * * @param {string} trans - specifies whether `A` should be transposed, conjugate-transposed, or not transposed * @param {NonNegativeInteger} M - number of rows in the matrix `A` @@ -45,7 +45,7 @@ var base = require( './base.js' ); * @param {Float32Array} y - second input vector * @param {integer} strideY - `y` stride length * @param {NonNegativeInteger} offsetY - starting index for `y` -* @throws {TypeError} first argument must specify whether to consider transpose of the given matrix or not +* @throws {TypeError} first argument must be a valid transpose operation * @throws {RangeError} second argument must be a nonnegative integer * @throws {RangeError} third argument must be a nonnegative integer * @throws {RangeError} tenth argument must be non-zero @@ -64,7 +64,7 @@ var base = require( './base.js' ); */ function sgemv( trans, M, N, alpha, A, strideA1, strideA2, offsetA, x, strideX, offsetX, beta, y, strideY, offsetY ) { // eslint-disable-line max-params, max-len if ( !isMatrixTranspose( trans ) ) { - throw new TypeError( format( 'invalid argument. Second argument must specify whether to take transpose, conjugate-transpose or none. Value: `%s`.', trans ) ); + throw new TypeError( format( 'invalid argument. Second argument must be a valid transpose operation. Value: `%s`.', trans ) ); } if ( M < 0 ) { throw new RangeError( format( 'invalid argument. Third argument must be a nonnegative integer. Value: `%d`.', M ) ); diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/lib/sgemv.js b/lib/node_modules/@stdlib/blas/base/sgemv/lib/sgemv.js index 954aa2a3593a..fd3aa466351e 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/lib/sgemv.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/lib/sgemv.js @@ -30,7 +30,7 @@ var base = require( './base.js' ); // MAIN // /** -* Performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y are vectors and A is an m by n matrix. +* Performs one of the matrix-vector operations `y = α*A*x + β*y` or `y = α*A^T*x + β*y`, where `α` and `β` are scalars, `x` and `y` are vectors, and `A` is an `M` by `N` matrix. * * @param {string} order - storage layout * @param {string} trans - specifies whether `A` should be transposed, conjugate-transposed, or not transposed @@ -42,10 +42,10 @@ var base = require( './base.js' ); * @param {Float32Array} x - first input vector * @param {integer} strideX - `x` stride length * @param {number} beta - scalar constant -* @param {Float32Array} y - an `N` element vector +* @param {Float32Array} y - second input vector * @param {integer} strideY - `y` stride length * @throws {TypeError} first argument must be a valid order -* @throws {TypeError} second argument must specify whether to consider transpose of the given matrix or not +* @throws {TypeError} second argument must be a valid transpose operation * @throws {RangeError} third argument must be a nonnegative integer * @throws {RangeError} fourth argument must be a nonnegative integer * @throws {RangeError} seventh argument must be greater than or equal to max(1,M) @@ -64,8 +64,8 @@ var base = require( './base.js' ); * // y => [ 7.0, 16.0 ] */ function sgemv( order, trans, M, N, alpha, A, LDA, x, strideX, beta, y, strideY ) { // eslint-disable-line max-params, max-len - var lenx; - var leny; + var xlen; + var ylen; var sa1; var sa2; var ox; @@ -94,14 +94,14 @@ function sgemv( order, trans, M, N, alpha, A, LDA, x, strideX, beta, y, strideY return y; } if ( trans === 'no-transpose' ) { - lenx = N; - leny = M; + xlen = N; + ylen = M; } else { - lenx = M; - leny = N; + xlen = M; + ylen = N; } - ox = stride2offset( lenx, strideX ); - oy = stride2offset( leny, strideY ); + ox = stride2offset( xlen, strideX ); + oy = stride2offset( ylen, strideY ); if ( order === 'column-major' ) { sa1 = 1; sa2 = LDA; From 77d17dee537d21c0d6828809363ccf1976d2f8fa Mon Sep 17 00:00:00 2001 From: Athan Reines Date: Thu, 1 Aug 2024 01:49:04 -0700 Subject: [PATCH 11/19] fix: update error message --- lib/node_modules/@stdlib/blas/base/sgemv/lib/sgemv.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/lib/sgemv.js b/lib/node_modules/@stdlib/blas/base/sgemv/lib/sgemv.js index fd3aa466351e..3da5ad695415 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/lib/sgemv.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/lib/sgemv.js @@ -75,7 +75,7 @@ function sgemv( order, trans, M, N, alpha, A, LDA, x, strideX, beta, y, strideY throw new TypeError( format( 'invalid argument. First argument must be a valid order. Value: `%s`.', order ) ); } if ( !isMatrixTranspose( trans ) ) { - throw new TypeError( format( 'invalid argument. Second argument must specify whether to take transpose, conjugate-transpose or none. Value: `%s`.', trans ) ); + throw new TypeError( format( 'invalid argument. Second argument must be a valid transpose operation. Value: `%s`.', trans ) ); } if ( M < 0 ) { throw new RangeError( format( 'invalid argument. Third argument must be a nonnegative integer. Value: `%d`.', M ) ); From e9f2f9f7407a11eab76240723658e9f3cf0ec6dc Mon Sep 17 00:00:00 2001 From: Athan Reines Date: Thu, 1 Aug 2024 01:49:36 -0700 Subject: [PATCH 12/19] test: fix test cases and update descriptions --- .../blas/base/sgemv/docs/types/index.d.ts | 6 +-- .../blas/base/sgemv/docs/types/test.ts | 46 +++++++++---------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/docs/types/index.d.ts b/lib/node_modules/@stdlib/blas/base/sgemv/docs/types/index.d.ts index f64ff82026e8..d1921b47f985 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/docs/types/index.d.ts +++ b/lib/node_modules/@stdlib/blas/base/sgemv/docs/types/index.d.ts @@ -27,7 +27,7 @@ import { Layout, TransposeOperation } from '@stdlib/types/blas'; */ interface Routine { /** - * Performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y are vectors and A is an m by n matrix. + * Performs one of the matrix-vector operations `y = α*A*x + β*y` or `y = α*A^T*x + β*y`, where `α` and `β` are scalars, `x` and `y` are vectors, and `A` is an `M` by `N` matrix. * * @param order - storage layout * @param trans - specifies whether `A` should be transposed, conjugate-transposed, or not transposed @@ -56,7 +56,7 @@ interface Routine { ( order: Layout, trans: TransposeOperation, M: number, N: number, alpha: number, A: Float32Array, LDA: number, x: Float32Array, strideX: number, beta: number, y: Float32Array, strideY: number ): Float32Array; /** - * Performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y`, using alternative indexing semantics, where alpha and beta are scalars, x and y are vectors and A is an m by n matrix. + * Performs one of the matrix-vector operations `y = α*A*x + β*y` or `y = α*A^T*x + β*y`, using alternative indexing semantics and where `α` and `β` are scalars, `x` and `y` are vectors, and `A` is an `M` by `N` matrix. * * @param trans - specifies whether `A` should be transposed, conjugate-transposed, or not transposed * @param M - number of rows in the matrix `A` @@ -89,7 +89,7 @@ interface Routine { } /** -* Performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y are vectors and A is an m by n matrix. +* Performs one of the matrix-vector operations `y = α*A*x + β*y` or `y = α*A^T*x + β*y`, where `α` and `β` are scalars, `x` and `y` are vectors, and `A` is an `M` by `N` matrix. * * @param order - storage layout * @param trans - specifies whether `A` should be transposed, conjugate-transposed, or not transposed diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/docs/types/test.ts b/lib/node_modules/@stdlib/blas/base/sgemv/docs/types/test.ts index ae0e07e8a0a8..5d487306e0a9 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/docs/types/test.ts +++ b/lib/node_modules/@stdlib/blas/base/sgemv/docs/types/test.ts @@ -46,7 +46,7 @@ import sgemv = require( './index' ); sgemv( ( x: number ): number => x, 'no-transpose', 10, 10, 1.0, A, 10, x, 1, 1.0, y, 1 ); // $ExpectError } -// The compiler throws an error if the function is provided a second argument which is not a character... +// The compiler throws an error if the function is provided a second argument which is not a string... { const x = new Float32Array( 10 ); const y = new Float32Array( 10 ); @@ -142,7 +142,7 @@ import sgemv = require( './index' ); sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, ( x: number ): number => x, x, 1, 1.0, y, 1 ); // $ExpectError } -// The compiler throws an error if the function is provided a eighth argument which is not a Float32Array... +// The compiler throws an error if the function is provided an eighth argument which is not a Float32Array... { const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); @@ -190,7 +190,7 @@ import sgemv = require( './index' ); sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, 1, ( x: number ): number => x, y, 1 ); // $ExpectError } -// The compiler throws an error if the function is provided a eleventh argument which is not a Float32Array... +// The compiler throws an error if the function is provided an eleventh argument which is not a Float32Array... { const x = new Float32Array( 10 ); const A = new Float32Array( 20 ); @@ -206,7 +206,7 @@ import sgemv = require( './index' ); sgemv( 'row-major', 'no-transpose', 10, 10, 1.0, A, 10, x, 1, 1.0, ( x: number ): number => x, 1 ); // $ExpectError } -// The compiler throws an error if the function is provided a twelvfth argument which is not a number... +// The compiler throws an error if the function is provided a twelfth argument which is not a number... { const x = new Float32Array( 10 ); const y = new Float32Array( 10 ); @@ -252,7 +252,7 @@ import sgemv = require( './index' ); sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectType Float32Array } -// The compiler throws an error if the function is provided a first argument which is not a character... +// The compiler throws an error if the function is provided a first argument which is not a string... { const x = new Float32Array( 10 ); const y = new Float32Array( 10 ); @@ -364,7 +364,7 @@ import sgemv = require( './index' ); sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, ( x: number ): number => x, 0, x, 1, 0, 1.0, y, 1, 0 ); // $ExpectError } -// The compiler throws an error if the function is provided a eighth argument which is not a number... +// The compiler throws an error if the function is provided an eighth argument which is not a number... { const x = new Float32Array( 10 ); const y = new Float32Array( 10 ); @@ -402,30 +402,30 @@ import sgemv = require( './index' ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, '10', 0, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, true, 0, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, false, 0, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, null, 0, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, undefined, 0, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, [], 0, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, {}, 0, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, ( x: number ): number => x, 0, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, '10', 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, true, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, false, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, null, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, undefined, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, [], 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, {}, 0, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, ( x: number ): number => x, 0, 1.0, y, 1, 0 ); // $ExpectError } -// The compiler throws an error if the function is provided a eleventh argument which is not a number... +// The compiler throws an error if the function is provided an eleventh argument which is not a number... { const x = new Float32Array( 10 ); const y = new Float32Array( 10 ); const A = new Float32Array( 20 ); - sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, '10', 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, true, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, false, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, null, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, undefined, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, [], 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, {}, 1.0, y, 1 ); // $ExpectError - sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, ( x: number ): number => x, 1.0, y, 1 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, '10', 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, true, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, false, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, null, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, undefined, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, [], 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, {}, 1.0, y, 1, 0 ); // $ExpectError + sgemv.ndarray( 'no-transpose', 10, 10, 1.0, A, 10, 1, 0, x, 1, ( x: number ): number => x, 1.0, y, 1, 0 ); // $ExpectError } // The compiler throws an error if the function is provided a twelfth argument which is not a number... From 96799f78e39fd283a745ace388031e1e17b709ef Mon Sep 17 00:00:00 2001 From: Athan Reines Date: Thu, 1 Aug 2024 01:50:09 -0700 Subject: [PATCH 13/19] docs: fix text wrapping and update descriptions --- .../@stdlib/blas/base/sgemv/docs/repl.txt | 53 +++++++++---------- 1 file changed, 25 insertions(+), 28 deletions(-) diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/docs/repl.txt b/lib/node_modules/@stdlib/blas/base/sgemv/docs/repl.txt index c6d96a674c59..2863e0a24e15 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/docs/repl.txt +++ b/lib/node_modules/@stdlib/blas/base/sgemv/docs/repl.txt @@ -1,27 +1,24 @@ -{{alias}}( ord, tp, M, N, α, A, lda, x, sx, β, y, sy ) - Perform one of the matrix-vector operations `y = α*A*x + β*y` - or `y = α*A**T*x + β*y`, where `α` and `β` are scalars, `x` and `y` - are vectors and `A` is an `M` by `N` matrix. - - The stride parameters determine how operations are performed. +{{alias}}( ord, trans, M, N, α, A, lda, x, sx, β, y, sy ) + Performs one of the matrix-vector operations `y = α*A*x + β*y` or + `y = α*A**T*x + β*y`, where `α` and `β` are scalars, `x` and `y` are + vectors, and `A` is an `M` by `N` matrix. Indexing is relative to the first index. To introduce an offset, use typed array views. If `M` or `N` is equal to `0`, the function returns `y` unchanged. - If `α` equals `0` and β equals `1`, the function returns `y` - unchanged. + If `α` equals `0` and β equals `1`, the function returns `y` unchanged. Parameters ---------- ord: string Row-major (C-style) or column-major (Fortran-style) order. - tp: string - Specifies whether `A` should be transposed, conjugate-transposed, or - not transposed. + trans: string + Specifies whether `A` should be transposed, conjugate-transposed, or not + transposed. M: integer Number of rows in `A`. @@ -57,7 +54,7 @@ Returns ------- y: Float32Array - Output array. + Second input vector. Examples -------- @@ -66,33 +63,33 @@ > var y = new {{alias:@stdlib/array/float32}}( [ 1.0, 1.0 ] ); > var A = new {{alias:@stdlib/array/float32}}( [ 1.0, 2.0, 3.0, 4.0 ] ); > var ord = 'row-major'; - > var tp = 'no-transpose'; - > {{alias}}( ord, tp, 2, 2, 1.0, A, 2, x, 1, 1.0, y, 1 ) + > var trans = 'no-transpose'; + > {{alias}}( ord, trans, 2, 2, 1.0, A, 2, x, 1, 1.0, y, 1 ) [ 4.0, 8.0 ] // Advanced indexing: > x = new {{alias:@stdlib/array/float32}}( [ 1.0, 1.0 ] ); > y = new {{alias:@stdlib/array/float32}}( [ 1.0, 1.0 ] ); > A = new {{alias:@stdlib/array/float32}}( [ 1.0, 2.0, 3.0, 4.0 ] ); - > {{alias}}( ord, tp, 2, 2, 1.0, A, 2, x, -1, 1.0, y, -1 ) + > {{alias}}( ord, trans, 2, 2, 1.0, A, 2, x, -1, 1.0, y, -1 ) [ 8.0, 4.0 ] // Using typed array views: > var x0 = new {{alias:@stdlib/array/float32}}( [ 1.0, 1.0, 1.0 ] ); > var y0 = new {{alias:@stdlib/array/float32}}( [ 1.0, 1.0 ] ); - > var A = new {{alias:@stdlib/array/float32}}( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] ); + > A = new {{alias:@stdlib/array/float32}}( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] ); > var x1 = new {{alias:@stdlib/array/float32}}( x0.buffer, x0.BYTES_PER_ELEMENT*1 ); > var y1 = new {{alias:@stdlib/array/float32}}( y0.buffer, y0.BYTES_PER_ELEMENT*1 ); - > {{alias}}( ord, tp, 2, 2, 1.0, A, 2, x1, -1, 1.0, y1, -1 ); + > {{alias}}( ord, trans, 2, 2, 1.0, A, 2, x1, -1, 1.0, y1, -1 ); > y0 [ 1.0, 8.0 ] -{{alias}}.ndarray( tp, M, N, α, A, sa1, sa2, oa, x, sx, ox, β, y, sy, oy ) - Perform one of the matrix-vector operations `y = α*A*x + β*y` - or `y = α*A**T*x + β*y`, where `α` and `β` are scalars, `x` and `y` - are vectors and `A` is an `M` by `N` matrix using alternative indexing - semantics. +{{alias}}.ndarray( trans, M, N, α, A, sa1, sa2, oa, x, sx, ox, β, y, sy, oy ) + Performs one of the matrix-vector operations `y = α*A*x + β*y` or + `y = α*A**T*x + β*y`, using alternative indexing semantics and where `α` + and `β` are scalars, `x` and `y` are vectors, and `A` is an `M` by `N` + matrix. While typed array views mandate a view offset based on the underlying buffer, the offset parameters support indexing semantics based on starting @@ -100,9 +97,9 @@ Parameters ---------- - tp: string - Specifies whether `A` should be transposed, conjugate-transposed, or - not transposed. + trans: string + Specifies whether `A` should be transposed, conjugate-transposed, or not + transposed. M: integer Number of rows in `A`. @@ -149,15 +146,15 @@ Returns ------- y: Float32Array - Output array. + Second input vector. Examples -------- > var x = new {{alias:@stdlib/array/float32}}( [ 1.0, 1.0 ] ); > var y = new {{alias:@stdlib/array/float32}}( [ 1.0, 1.0 ] ); > var A = new {{alias:@stdlib/array/float32}}( [ 1.0, 2.0, 3.0, 4.0 ] ); - > var tp = 'no-transpose'; - > {{alias}}.ndarray( tp, 2, 2, 1, A, 2, 1, 0, x, 1, 0, 1, y, 1, 0 ) + > var trans = 'no-transpose'; + > {{alias}}.ndarray( trans, 2, 2, 1, A, 2, 1, 0, x, 1, 0, 1, y, 1, 0 ) [ 4.0, 8.0 ] See Also From 44b8fd70721519cea27b1851659b076ec47407e0 Mon Sep 17 00:00:00 2001 From: Athan Reines Date: Thu, 1 Aug 2024 01:50:33 -0700 Subject: [PATCH 14/19] bench: rename variables --- .../@stdlib/blas/base/sgemv/benchmark/benchmark.js | 12 ++++++------ .../blas/base/sgemv/benchmark/benchmark.ndarray.js | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/benchmark/benchmark.js b/lib/node_modules/@stdlib/blas/base/sgemv/benchmark/benchmark.js index ed278bbefddd..7a9017dbbb55 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/benchmark/benchmark.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/benchmark/benchmark.js @@ -42,13 +42,13 @@ var options = { * Creates a benchmark function. * * @private -* @param {PositiveInteger} len - array length +* @param {PositiveInteger} N - array dimension size * @returns {Function} benchmark function */ -function createBenchmark( len ) { - var x = uniform( len, -10.0, 10.0, options ); - var y = uniform( len, -10.0, 10.0, options ); - var A = uniform( len*len, -10.0, 10.0, options ); +function createBenchmark( N ) { + var x = uniform( N, -10.0, 10.0, options ); + var y = uniform( N, -10.0, 10.0, options ); + var A = uniform( N*N, -10.0, 10.0, options ); return benchmark; /** @@ -63,7 +63,7 @@ function createBenchmark( len ) { b.tic(); for ( i = 0; i < b.iterations; i++ ) { - z = sgemv( 'row-major', 'no-transpose', len, len, 1.0, A, len, x, 1, 1.0, y, 1 ); + z = sgemv( 'row-major', 'no-transpose', N, N, 1.0, A, N, x, 1, 1.0, y, 1 ); if ( isnanf( z[ i%z.length ] ) ) { b.fail( 'should not return NaN' ); } diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/benchmark/benchmark.ndarray.js b/lib/node_modules/@stdlib/blas/base/sgemv/benchmark/benchmark.ndarray.js index 40b2d30dbbcb..a456289dc424 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/benchmark/benchmark.ndarray.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/benchmark/benchmark.ndarray.js @@ -42,13 +42,13 @@ var options = { * Creates a benchmark function. * * @private -* @param {PositiveInteger} len - array length +* @param {PositiveInteger} N - array dimension size * @returns {Function} benchmark function */ -function createBenchmark( len ) { - var x = uniform( len, -10.0, 10.0, options ); - var y = uniform( len, -10.0, 10.0, options ); - var A = uniform( len*len, -10.0, 10.0, options ); +function createBenchmark( N ) { + var x = uniform( N, -10.0, 10.0, options ); + var y = uniform( N, -10.0, 10.0, options ); + var A = uniform( N*N, -10.0, 10.0, options ); return benchmark; /** @@ -63,7 +63,7 @@ function createBenchmark( len ) { b.tic(); for ( i = 0; i < b.iterations; i++ ) { - z = sgemv( 'no-transpose', len, len, 1.0, A, len, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); + z = sgemv( 'no-transpose', N, N, 1.0, A, N, 1, 0, x, 1, 0, 1.0, y, 1, 0 ); if ( isnanf( z[ i%z.length ] ) ) { b.fail( 'should not return NaN' ); } From ce2f75622c5e3a1a6264d4bfaee0cfd56be92f2b Mon Sep 17 00:00:00 2001 From: Athan Reines Date: Thu, 1 Aug 2024 02:01:13 -0700 Subject: [PATCH 15/19] test: update descriptions --- .../blas/base/sgemv/test/test.ndarray.js | 32 +++++++++---------- .../blas/base/sgemv/test/test.sgemv.js | 20 ++++++------ 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/test.ndarray.js b/lib/node_modules/@stdlib/blas/base/sgemv/test/test.ndarray.js index 67c203b712fa..fbee965bf434 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/test.ndarray.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/test.ndarray.js @@ -222,7 +222,7 @@ tape( 'the function throws an error if provided an invalid fourteenth argument', } }); -tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y` ( row-major, no-transpose )', function test( t ) { +tape( 'the function performs one of the matrix-vector operations `y = α*A*x + β*y` or `y = α*A^T*x + β*y` ( row-major, no-transpose )', function test( t ) { var expected; var data; var out; @@ -244,7 +244,7 @@ tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x t.end(); }); -tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y` ( column-major, no-transpose )', function test( t ) { +tape( 'the function performs one of the matrix-vector operations `y = α*A*x + β*y` or `y = α*A^T*x + β*y` ( column-major, no-transpose )', function test( t ) { var expected; var data; var out; @@ -266,7 +266,7 @@ tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x t.end(); }); -tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y` ( row-major, transpose )', function test( t ) { +tape( 'the function performs one of the matrix-vector operations `y = α*A*x + β*y` or `y = α*A^T*x + β*y` ( row-major, transpose )', function test( t ) { var expected; var data; var out; @@ -288,7 +288,7 @@ tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x t.end(); }); -tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y` ( column-major, transpose )', function test( t ) { +tape( 'the function performs one of the matrix-vector operations `y = α*A*x + β*y` or `y = α*A^T*x + β*y` ( column-major, transpose )', function test( t ) { var expected; var data; var out; @@ -310,7 +310,7 @@ tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x t.end(); }); -tape( 'the function returns a reference to the second input array (row-major)', function test( t ) { +tape( 'the function returns a reference to the second input vector (row-major)', function test( t ) { var data; var out; var a; @@ -328,7 +328,7 @@ tape( 'the function returns a reference to the second input array (row-major)', t.end(); }); -tape( 'the function returns a reference to the second input array (column-major)', function test( t ) { +tape( 'the function returns a reference to the second input vector (column-major)', function test( t ) { var data; var out; var a; @@ -346,7 +346,7 @@ tape( 'the function returns a reference to the second input array (column-major) t.end(); }); -tape( 'the function supports specifying stride of the first and the second dimension of `A` (row-major)', function test( t ) { +tape( 'the function supports specifying the strides of the first and second dimensions of `A` (row-major)', function test( t ) { var expected; var data; var out; @@ -368,7 +368,7 @@ tape( 'the function supports specifying stride of the first and the second dimen t.end(); }); -tape( 'the function supports specifying stride of the first and the second dimension of `A` (column-major)', function test( t ) { +tape( 'the function supports specifying the strides of the first and second dimensions of `A` (column-major)', function test( t ) { var expected; var data; var out; @@ -390,7 +390,7 @@ tape( 'the function supports specifying stride of the first and the second dimen t.end(); }); -tape( 'the function supports a negative `strideA1` parameter (row-major)', function test( t ) { +tape( 'the function supports a negative stride for the first dimension of `A` (row-major)', function test( t ) { var expected; var data; var out; @@ -412,7 +412,7 @@ tape( 'the function supports a negative `strideA1` parameter (row-major)', funct t.end(); }); -tape( 'the function supports a negative `strideA1` parameter (column-major)', function test( t ) { +tape( 'the function supports a negative stride for the first dimension of `A` (column-major)', function test( t ) { var expected; var data; var out; @@ -434,7 +434,7 @@ tape( 'the function supports a negative `strideA1` parameter (column-major)', fu t.end(); }); -tape( 'the function supports a negative `strideA2` parameter (row-major)', function test( t ) { +tape( 'the function supports a negative stride for the second dimension of `A` (row-major)', function test( t ) { var expected; var data; var out; @@ -456,7 +456,7 @@ tape( 'the function supports a negative `strideA2` parameter (row-major)', funct t.end(); }); -tape( 'the function supports a negative `strideA2` parameter (column-major)', function test( t ) { +tape( 'the function supports a negative stride for the second dimension of `A` (column-major)', function test( t ) { var expected; var data; var out; @@ -566,7 +566,7 @@ tape( 'the function supports specifying an offset parameter for `A` (column-majo t.end(); }); -tape( 'the function supports specifying an `x` and `y` stride (row-major)', function test( t ) { +tape( 'the function supports specifying `x` and `y` strides (row-major)', function test( t ) { var expected; var data; var out; @@ -588,7 +588,7 @@ tape( 'the function supports specifying an `x` and `y` stride (row-major)', func t.end(); }); -tape( 'the function supports specifying an `x` and `y` stride (column-major)', function test( t ) { +tape( 'the function supports specifying `x` and `y` strides (column-major)', function test( t ) { var expected; var data; var out; @@ -742,7 +742,7 @@ tape( 'the function supports specifying negative strides for `x` and `y` (column t.end(); }); -tape( 'the function supports complex access pattern (row-major)', function test( t ) { +tape( 'the function supports complex access patterns (row-major)', function test( t ) { var expected; var data; var out; @@ -764,7 +764,7 @@ tape( 'the function supports complex access pattern (row-major)', function test( t.end(); }); -tape( 'the function supports complex access pattern (column-major)', function test( t ) { +tape( 'the function supports complex access patterns (column-major)', function test( t ) { var expected; var data; var out; diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/test.sgemv.js b/lib/node_modules/@stdlib/blas/base/sgemv/test/test.sgemv.js index b2a9a4841fbc..8646875a22a5 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/test.sgemv.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/test.sgemv.js @@ -236,7 +236,7 @@ tape( 'the function throws an error if provided an invalid twelfth argument', fu } }); -tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y` ( row-major, no-transpose )', function test( t ) { +tape( 'the function performs one of the matrix-vector operations `y = α*A*x + β*y` or `y = α*A^T*x + β*y` ( row-major, no-transpose )', function test( t ) { var expected; var data; var out; @@ -258,7 +258,7 @@ tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x t.end(); }); -tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y` ( column-major, no-transpose )', function test( t ) { +tape( 'the function performs one of the matrix-vector operations `y = α*A*x + β*y` or `y = α*A^T*x + β*y` ( column-major, no-transpose )', function test( t ) { var expected; var data; var out; @@ -280,7 +280,7 @@ tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x t.end(); }); -tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y` ( row-major, transpose )', function test( t ) { +tape( 'the function performs one of the matrix-vector operations `y = α*A*x + β*y` or `y = α*A^T*x + β*y` ( row-major, transpose )', function test( t ) { var expected; var data; var out; @@ -302,7 +302,7 @@ tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x t.end(); }); -tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y` ( column-major, transpose )', function test( t ) { +tape( 'the function performs one of the matrix-vector operations `y = α*A*x + β*y` or `y = α*A^T*x + β*y` ( column-major, transpose )', function test( t ) { var expected; var data; var out; @@ -324,7 +324,7 @@ tape( 'the function performs one of the matrix-vector operations `y = alpha*A*x t.end(); }); -tape( 'the function returns a reference to the second input array (row-major)', function test( t ) { +tape( 'the function returns a reference to the second input vector (row-major)', function test( t ) { var data; var out; var a; @@ -342,7 +342,7 @@ tape( 'the function returns a reference to the second input array (row-major)', t.end(); }); -tape( 'the function returns a reference to the second input array (column-major)', function test( t ) { +tape( 'the function returns a reference to the second input vector (column-major)', function test( t ) { var data; var out; var a; @@ -360,7 +360,7 @@ tape( 'the function returns a reference to the second input array (column-major) t.end(); }); -tape( 'the function supports specifying an `x` and `y` stride (row-major)', function test( t ) { +tape( 'the function supports specifying `x` and `y` strides (row-major)', function test( t ) { var expected; var data; var out; @@ -382,7 +382,7 @@ tape( 'the function supports specifying an `x` and `y` stride (row-major)', func t.end(); }); -tape( 'the function supports specifying an `x` and `y` stride (column-major)', function test( t ) { +tape( 'the function supports specifying `x` and `y` strides (column-major)', function test( t ) { var expected; var data; var out; @@ -492,7 +492,7 @@ tape( 'the function supports specifying a negative `y` stride (column-major)', f t.end(); }); -tape( 'the function supports complex access pattern (row-major)', function test( t ) { +tape( 'the function supports complex access patterns (row-major)', function test( t ) { var expected; var data; var out; @@ -514,7 +514,7 @@ tape( 'the function supports complex access pattern (row-major)', function test( t.end(); }); -tape( 'the function supports complex access pattern (column-major)', function test( t ) { +tape( 'the function supports complex access patterns (column-major)', function test( t ) { var expected; var data; var out; From db4e586d5ee129109454b898dcfa941250b3e20c Mon Sep 17 00:00:00 2001 From: Athan Reines Date: Thu, 1 Aug 2024 02:02:51 -0700 Subject: [PATCH 16/19] docs: fix examples and update descriptions --- .../@stdlib/blas/base/sgemv/README.md | 38 +++++++++---------- .../@stdlib/blas/base/sgemv/package.json | 2 +- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/README.md b/lib/node_modules/@stdlib/blas/base/sgemv/README.md index 4e5f921e436e..0da4edcd8896 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/README.md +++ b/lib/node_modules/@stdlib/blas/base/sgemv/README.md @@ -20,7 +20,7 @@ limitations under the License. # sgemv -> Perform one of the matrix-vector operations `y = α*A*x + β*y` or `y = α*A**T*x + β*y`, where α and β are scalars, x and y are vectors and A is an m by n matrix. +> Perform one of the matrix-vector operations `y = α*A*x + β*y` or `y = α*A**T*x + β*y`.
@@ -32,7 +32,7 @@ var sgemv = require( '@stdlib/blas/base/sgemv' ); #### sgemv( ord, trans, M, N, α, A, LDA, x, sx, β, y, sy ) -Performs one of the matrix-vector operations `y = α*A*x + β*y` or `y = α*A**T*x + β*y`, where α and β are scalars, x and y are vectors and A is an m by n matrix. +Performs one of the matrix-vector operations `y = α*A*x + β*y` or `y = α*A**T*x + β*y`, where `α` and `β` are scalars, `x` and `y` are vectors, and `A` is an `M` by `N` matrix. ```javascript var Float32Array = require( '@stdlib/array/float32' ); @@ -48,11 +48,11 @@ sgemv( 'row-major', 'no-transpose', 2, 3, 1.0, A, 3, x, 1, 1.0, y, 1 ); The function has the following parameters: - **ord**: storage layout. -- **trans**: specifies the operation to be performed. +- **trans**: specifies whether `A` should be transposed, conjugate-transposed, or not transposed. - **M**: number of rows in the matrix `A`. - **N**: number of columns in the matrix `A`. - **α**: scalar constant. -- **A**: matrix of coefficients [`Float32Array`][mdn-float32array]. +- **A**: input matrix stored in linear memory as a [`Float32Array`][mdn-float32array]. - **lda**: stride of the first dimension of `A` (leading dimension of `A`). - **x**: input [`Float32Array`][mdn-float32array]. - **sx**: index increment for `x`. @@ -60,17 +60,17 @@ The function has the following parameters: - **y**: output [`Float32Array`][mdn-float32array]. - **sy**: index increment for `y`. -The stride parameters determine how operations are performed. For example, to perform one of the vector-matrix operation starting from first index of `x`, +The stride parameters determine how operations are performed. For example, to iterate over every other element in `x` and `y`, ```javascript var Float32Array = require( '@stdlib/array/float32' ); var A = new Float32Array( [ 1.0, 2.0, 3.0, 4.0 ] ); -var x = new Float32Array( [ 1.0, 1.0 ] ); -var y = new Float32Array( [ 1.0, 1.0 ] ); +var x = new Float32Array( [ 1.0, 0.0, 1.0, 0.0 ] ); +var y = new Float32Array( [ 1.0, 0.0, 1.0, 0.0 ] ); -sgemv( 'row-major', 'no-transpose', 2, 2, 1.0, A, 2, x, 1, 1.0, y, 1 ); -// y => [ 4.0, 8.0 ] +sgemv( 'row-major', 'no-transpose', 2, 2, 1.0, A, 2, x, 2, 1.0, y, 2 ); +// y => [ 4.0, 0.0, 8.0, 0.0 ] ``` Note that indexing is relative to the first index. To introduce an offset, use [`typed array`][mdn-typed-array] views. @@ -81,21 +81,21 @@ Note that indexing is relative to the first index. To introduce an offset, use [ var Float32Array = require( '@stdlib/array/float32' ); // Initial arrays... -var x0 = new Float32Array( [ 1.0, 1.0, 1.0 ] ); -var y0 = new Float32Array( [ 1.0, 1.0 ] ); +var x0 = new Float32Array( [ 0.0, 1.0, 1.0 ] ); +var y0 = new Float32Array( [ 0.0, 1.0, 1.0 ] ); var A = new Float32Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] ); // Create offset views... var x1 = new Float32Array( x0.buffer, x0.BYTES_PER_ELEMENT*1 ); // start at 2nd element -var y1 = new Float32Array( y0.buffer, y0.BYTES_PER_ELEMENT*1 ); // start at 4th element +var y1 = new Float32Array( y0.buffer, y0.BYTES_PER_ELEMENT*1 ); // start at 2nd element sgemv( 'row-major', 'no-transpose', 2, 2, 1.0, A, 2, x1, -1, 1.0, y1, -1 ); -// y0 => [ 1.0, 8.0 ] +// y0 => [ 0.0, 8.0, 4.0 ] ``` #### sgemv.ndarray( trans, M, N, α, A, sa1, sa2, oa, x, sx, ox, β, y, sy, oy ) -Performs one of the matrix-vector operations `y = α*A*x + β*y` or `y = α*A**T*x + β*y`, using alternative indexing semantics, where α and β are scalars, x and y are vectors and A is an m by n matrix. +Performs one of the matrix-vector operations `y = α*A*x + β*y` or `y = α*A**T*x + β*y`, using alternative indexing semantics and where `α` and `β` are scalars, `x` and `y` are vectors, and `A` is an `M` by `N` matrix. ```javascript var Float32Array = require( '@stdlib/array/float32' ); @@ -116,16 +116,16 @@ The function has the following additional parameters: - **ox**: starting index for `x`. - **oy**: starting index for `y`. -While [`typed array`][mdn-typed-array] views mandate a view offset based on the underlying buffer, the offset parameters support indexing semantics based on starting indices. For example, to perform operation with given `x` and `y` offset values`,..., +While [`typed array`][mdn-typed-array] views mandate a view offset based on the underlying buffer, the offset parameters support indexing semantics based on starting indices. For example, ```javascript var Float32Array = require( '@stdlib/array/float32' ); var A = new Float32Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] ); -var x = new Float32Array( [ 1.0, 2.0, 3.0 ] ); +var x = new Float32Array( [ 0.0, 1.0, 2.0, 3.0 ] ); var y = new Float32Array( [ 7.0, 8.0, 9.0, 10.0 ] ); -sgemv.ndarray( 'no-transpose', 2, 3, 1.0, A, 3, 1, 0, x, 1, 0, 1.0, y, -2, 2 ); +sgemv.ndarray( 'no-transpose', 2, 3, 1.0, A, 3, 1, 0, x, 1, 1, 1.0, y, -2, 2 ); // y => [ 39, 8, 23, 10 ] ``` @@ -137,7 +137,7 @@ sgemv.ndarray( 'no-transpose', 2, 3, 1.0, A, 3, 1, 0, x, 1, 0, 1.0, y, -2, 2 ); ## Notes -- `sgemv()` corresponds to the [BLAS][blas] level 2 function [`sgemv`][sgemv]. +- `sgemv()` corresponds to the [BLAS][blas] level 2 function [`sgemv`][blas-sgemv].
@@ -257,7 +257,7 @@ TODO [blas]: http://www.netlib.org/blas -[sgemv]: https://www.netlib.org/lapack/explore-html/d7/dda/group__gemv_ga0d35d880b663ad18204bb23bd186e380.html#ga0d35d880b663ad18204bb23bd186e380 +[blas-sgemv]: https://www.netlib.org/lapack/explore-html/d7/dda/group__gemv_ga0d35d880b663ad18204bb23bd186e380.html#ga0d35d880b663ad18204bb23bd186e380 [mdn-float32array]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/package.json b/lib/node_modules/@stdlib/blas/base/sgemv/package.json index db8bddc2708e..78283b0e6817 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/package.json +++ b/lib/node_modules/@stdlib/blas/base/sgemv/package.json @@ -1,7 +1,7 @@ { "name": "@stdlib/blas/base/sgemv", "version": "0.0.0", - "description": "Perform one of the matrix-vector operations `y = alpha*A*x + beta*y` or `y = alpha*A**T*x + beta*y`, where alpha and beta are scalars, x and y are vectors and A is an m by n matrix.", + "description": "Perform one of the matrix-vector operations `y = α*A*x + β*y` or `y = α*A^T*x + β*y`.", "license": "Apache-2.0", "author": { "name": "The Stdlib Authors", From 370ce14b98db52f430af869e4fd772d6db694cac Mon Sep 17 00:00:00 2001 From: Athan Reines Date: Thu, 1 Aug 2024 02:21:54 -0700 Subject: [PATCH 17/19] test: add tests --- .../blas/base/sgemv/test/test.ndarray.js | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/test.ndarray.js b/lib/node_modules/@stdlib/blas/base/sgemv/test/test.ndarray.js index fbee965bf434..5b09c812920d 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/test.ndarray.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/test.ndarray.js @@ -346,6 +346,106 @@ tape( 'the function returns a reference to the second input vector (column-major t.end(); }); +tape( 'if either `M` or `N` is `0`, the function returns the second input vector unchanged (row-major)', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; + + data = rt; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + expected = new Float32Array( data.y ); + + out = sgemv( data.trans, 0, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + t.strictEqual( out, y, 'returns expected value' ); + t.deepEqual( out, expected, 'returns expected value' ); + + out = sgemv( data.trans, data.M, 0, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + t.strictEqual( out, y, 'returns expected value' ); + t.deepEqual( out, expected, 'returns expected value' ); + + t.end(); +}); + +tape( 'if either `M` or `N` is `0`, the function returns the second input vector unchanged (column-major)', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; + + data = ct; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + expected = new Float32Array( data.y ); + + out = sgemv( data.trans, 0, data.N, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + t.strictEqual( out, y, 'returns expected value' ); + t.deepEqual( out, expected, 'returns expected value' ); + + out = sgemv( data.trans, data.M, 0, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, data.beta, y, data.strideY, data.offsetY ); + t.strictEqual( out, y, 'returns expected value' ); + t.deepEqual( out, expected, 'returns expected value' ); + + t.end(); +}); + +tape( 'if `α` is `0` and `β` is `1`, the function returns the second input vector unchanged (row-major)', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; + + data = rt; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + expected = new Float32Array( data.y ); + + out = sgemv( data.trans, data.M, data.N, 0.0, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, 1.0, y, data.strideY, data.offsetY ); + t.strictEqual( out, y, 'returns expected value' ); + t.deepEqual( out, expected, 'returns expected value' ); + + t.end(); +}); + +tape( 'if `α` is `0` and `β` is `1`, the function returns the second input vector unchanged (column-major)', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; + + data = ct; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + expected = new Float32Array( data.y ); + + out = sgemv( data.trans, data.M, data.N, 0.0, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, 1.0, y, data.strideY, data.offsetY ); + t.strictEqual( out, y, 'returns expected value' ); + t.deepEqual( out, expected, 'returns expected value' ); + + t.end(); +}); + tape( 'the function supports specifying the strides of the first and second dimensions of `A` (row-major)', function test( t ) { var expected; var data; From 321e08a603348b6cc5eafb9fd03c2e5118838478 Mon Sep 17 00:00:00 2001 From: Athan Reines Date: Thu, 1 Aug 2024 02:23:17 -0700 Subject: [PATCH 18/19] test: add test cases --- .../blas/base/sgemv/test/test.sgemv.js | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/test.sgemv.js b/lib/node_modules/@stdlib/blas/base/sgemv/test/test.sgemv.js index 8646875a22a5..8f8d17488013 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/test.sgemv.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/test.sgemv.js @@ -360,6 +360,106 @@ tape( 'the function returns a reference to the second input vector (column-major t.end(); }); +tape( 'if either `M` or `N` is `0`, the function returns the second input vector unchanged (row-major)', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; + + data = rt; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + expected = new Float32Array( data.y ); + + out = sgemv( data.order, data.trans, 0, data.N, data.alpha, a, data.lda, x, data.strideX, data.beta, y, data.strideY ); + t.strictEqual( out, y, 'returns expected value' ); + t.deepEqual( out, expected, 'returns expected value' ); + + out = sgemv( data.order, data.trans, data.M, 0, data.alpha, a, data.lda, x, data.strideX, data.beta, y, data.strideY ); + t.strictEqual( out, y, 'returns expected value' ); + t.deepEqual( out, expected, 'returns expected value' ); + + t.end(); +}); + +tape( 'if either `M` or `N` is `0`, the function returns the second input vector unchanged (column-major)', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; + + data = ct; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + expected = new Float32Array( data.y ); + + out = sgemv( data.order, data.trans, 0, data.N, data.alpha, a, data.lda, x, data.strideX, data.beta, y, data.strideY ); + t.strictEqual( out, y, 'returns expected value' ); + t.deepEqual( out, expected, 'returns expected value' ); + + out = sgemv( data.order, data.trans, data.M, 0, data.alpha, a, data.lda, x, data.strideX, data.beta, y, data.strideY ); + t.strictEqual( out, y, 'returns expected value' ); + t.deepEqual( out, expected, 'returns expected value' ); + + t.end(); +}); + +tape( 'if `α` is `0` and `β` is `1`, the function returns the second input vector unchanged (row-major)', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; + + data = rt; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + expected = new Float32Array( data.y ); + + out = sgemv( data.order, data.trans, data.M, data.N, 0.0, a, data.lda, x, data.strideX, 1.0, y, data.strideY ); + t.strictEqual( out, y, 'returns expected value' ); + t.deepEqual( out, expected, 'returns expected value' ); + + t.end(); +}); + +tape( 'if `α` is `0` and `β` is `1`, the function returns the second input vector unchanged (column-major)', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; + + data = ct; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + expected = new Float32Array( data.y ); + + out = sgemv( data.order, data.trans, data.M, data.N, 0.0, a, data.lda, x, data.strideX, 1.0, y, data.strideY ); + t.strictEqual( out, y, 'returns expected value' ); + t.deepEqual( out, expected, 'returns expected value' ); + + t.end(); +}); + tape( 'the function supports specifying `x` and `y` strides (row-major)', function test( t ) { var expected; var data; From d797c4cae3fbc1e8e8ae33605eaa9bff7a8f72c2 Mon Sep 17 00:00:00 2001 From: Athan Reines Date: Thu, 1 Aug 2024 02:31:43 -0700 Subject: [PATCH 19/19] test: add test cases --- .../blas/base/sgemv/test/test.ndarray.js | 46 +++++++++++++++++++ .../blas/base/sgemv/test/test.sgemv.js | 46 +++++++++++++++++++ 2 files changed, 92 insertions(+) diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/test.ndarray.js b/lib/node_modules/@stdlib/blas/base/sgemv/test/test.ndarray.js index 5b09c812920d..faa59c07f817 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/test.ndarray.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/test.ndarray.js @@ -446,6 +446,52 @@ tape( 'if `α` is `0` and `β` is `1`, the function returns the second input vec t.end(); }); +tape( 'if `α` is `0`, the function scales the second input vector by `β` (row-major)', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; + + data = rt; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + expected = new Float32Array( data.y.length ); + + out = sgemv( data.trans, data.M, data.N, 0.0, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, 0.0, y, data.strideY, data.offsetY ); + t.strictEqual( out, y, 'returns expected value' ); + t.deepEqual( out, expected, 'returns expected value' ); + + t.end(); +}); + +tape( 'if `α` is `0`, the function scales the second input vector by `β` (column-major)', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; + + data = ct; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + expected = new Float32Array( data.y.length ); + + out = sgemv( data.trans, data.M, data.N, 0.0, a, data.strideA1, data.strideA2, data.offsetA, x, data.strideX, data.offsetX, 0.0, y, data.strideY, data.offsetY ); + t.strictEqual( out, y, 'returns expected value' ); + t.deepEqual( out, expected, 'returns expected value' ); + + t.end(); +}); + tape( 'the function supports specifying the strides of the first and second dimensions of `A` (row-major)', function test( t ) { var expected; var data; diff --git a/lib/node_modules/@stdlib/blas/base/sgemv/test/test.sgemv.js b/lib/node_modules/@stdlib/blas/base/sgemv/test/test.sgemv.js index 8f8d17488013..fd6c9dc653f5 100644 --- a/lib/node_modules/@stdlib/blas/base/sgemv/test/test.sgemv.js +++ b/lib/node_modules/@stdlib/blas/base/sgemv/test/test.sgemv.js @@ -460,6 +460,52 @@ tape( 'if `α` is `0` and `β` is `1`, the function returns the second input vec t.end(); }); +tape( 'if `α` is `0`, the function scales the second input vector by `β` (row-major)', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; + + data = rt; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + expected = new Float32Array( data.y.length ); + + out = sgemv( data.order, data.trans, data.M, data.N, 0.0, a, data.lda, x, data.strideX, 0.0, y, data.strideY ); + t.strictEqual( out, y, 'returns expected value' ); + t.deepEqual( out, expected, 'returns expected value' ); + + t.end(); +}); + +tape( 'if `α` is `0`, the function scales the second input vector by `β` (column-major)', function test( t ) { + var expected; + var data; + var out; + var a; + var x; + var y; + + data = ct; + + a = new Float32Array( data.A ); + x = new Float32Array( data.x ); + y = new Float32Array( data.y ); + + expected = new Float32Array( data.y.length ); + + out = sgemv( data.order, data.trans, data.M, data.N, 0.0, a, data.lda, x, data.strideX, 0.0, y, data.strideY ); + t.strictEqual( out, y, 'returns expected value' ); + t.deepEqual( out, expected, 'returns expected value' ); + + t.end(); +}); + tape( 'the function supports specifying `x` and `y` strides (row-major)', function test( t ) { var expected; var data;