diff --git a/lib/node_modules/@stdlib/blas/base/dgemm/lib/ndarray.js b/lib/node_modules/@stdlib/blas/base/dgemm/lib/ndarray.js deleted file mode 100644 index 4b4b1cd6e5c6..000000000000 --- a/lib/node_modules/@stdlib/blas/base/dgemm/lib/ndarray.js +++ /dev/null @@ -1,91 +0,0 @@ -/** -* @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 isMatrixTranspose = require( '@stdlib/blas/base/assert/is-transpose-operation' ); -var format = require( '@stdlib/string/format' ); -var base = require( './base.js' ); - - -// MAIN // - -/** -* Performs the matrix-matrix operation `C = α*op(A)*op(B) + β*C` where `op(X)` is either `op(X) = X` or `op(X) = X^T`, `α` and `β` are scalars, `A`, `B`, and `C` are matrices, with `op(A)` an `M` by `K` matrix, `op(B)` a `K` by `N` matrix, and `C` an `M` by `N` matrix. -* -* @param {string} transA - specifies whether `A` should be transposed, conjugate-transposed, or not transposed -* @param {string} transB - specifies whether `B` should be transposed, conjugate-transposed, or not transposed -* @param {NonNegativeInteger} M - number of rows in the matrix `op(A)` and in the matrix `C` -* @param {NonNegativeInteger} N - number of columns in the matrix `op(B)` and in the matrix `C` -* @param {NonNegativeInteger} K - number of columns in the matrix `op(A)` and number of rows in the matrix `op(B)` -* @param {number} alpha - scalar constant -* @param {Float64Array} A - first 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 {Float64Array} B - second matrix -* @param {integer} strideB1 - stride of the first dimension of `B` -* @param {integer} strideB2 - stride of the second dimension of `B` -* @param {NonNegativeInteger} offsetB - starting index for `B` -* @param {number} beta - scalar constant -* @param {Float64Array} C - third matrix -* @param {integer} strideC1 - stride of the first dimension of `C` -* @param {integer} strideC2 - stride of the second dimension of `C` -* @param {NonNegativeInteger} offsetC - starting index for `C` -* @throws {TypeError} first argument must be a valid transpose operation -* @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} fifth argument must be a nonnegative integer -* @returns {Float64Array} `C` -* -* @example -* var Float64Array = require( '@stdlib/array/float64' ); -* -* var A = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); -* var B = new Float64Array( [ 1.0, 1.0, 0.0, 1.0 ] ); -* var C = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); -* -* dgemm( 'no-transpose', 'no-transpose', 2, 2, 2, 1.0, A, 2, 1, 0, B, 2, 1, 0, 1.0, C, 2, 1, 0 ); -* // C => [ 2.0, 5.0, 6.0, 11.0 ] -*/ -function dgemm( transA, transB, M, N, K, alpha, A, strideA1, strideA2, offsetA, B, strideB1, strideB2, offsetB, beta, C, strideC1, strideC2, offsetC ) { // eslint-disable-line max-params, max-len - if ( !isMatrixTranspose( transA ) ) { - throw new TypeError( format( 'invalid argument. First argument must be a valid transpose operation. Value: `%s`.', transA ) ); - } - if ( !isMatrixTranspose( transB ) ) { - throw new TypeError( format( 'invalid argument. Second argument must be a valid transpose operation. Value: `%s`.', transB ) ); - } - if ( M < 0 ) { - throw new RangeError( format( 'invalid argument. Third argument must be a nonnegative integer. Value: `%d`.', M ) ); - } - if ( N < 0 ) { - throw new RangeError( format( 'invalid argument. Fourth argument must be a nonnegative integer. Value: `%d`.', M ) ); - } - if ( K < 0 ) { - throw new RangeError( format( 'invalid argument. Fifth argument must be a nonnegative integer. Value: `%d`.', K ) ); - } - return base( transA, transB, M, N, K, alpha, A, strideA1, strideA2, offsetA, B, strideB1, strideB2, offsetB, beta, C, strideC1, strideC2, offsetC ); // eslint-disable-line max-len -} - - -// EXPORTS // - -module.exports = dgemm; diff --git a/lib/node_modules/@stdlib/blas/base/dgemm/test/test.ndarray.js b/lib/node_modules/@stdlib/blas/base/dgemm/test/test.ndarray.js deleted file mode 100644 index d8f193ad8bbd..000000000000 --- a/lib/node_modules/@stdlib/blas/base/dgemm/test/test.ndarray.js +++ /dev/null @@ -1,1443 +0,0 @@ -/** -* @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 max-len */ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var Float64Array = require( '@stdlib/array/float64' ); -var ones = require( '@stdlib/array/ones' ); -var filled = require( '@stdlib/array/filled' ); -var dscal = require( '@stdlib/blas/base/dscal' ); -var dgemm = require( './../lib/ndarray.js' ); - - -// FIXTURES // - -var cacbccntantb = require( './fixtures/ca_cb_cc_nta_ntb.json' ); -var cacbccntatb = require( './fixtures/ca_cb_cc_nta_tb.json' ); -var cacbcctantb = require( './fixtures/ca_cb_cc_ta_ntb.json' ); -var cacbcctatb = require( './fixtures/ca_cb_cc_ta_tb.json' ); -var cacbrcntantb = require( './fixtures/ca_cb_rc_nta_ntb.json' ); -var cacbrcntatb = require( './fixtures/ca_cb_rc_nta_tb.json' ); -var cacbrctantb = require( './fixtures/ca_cb_rc_ta_ntb.json' ); -var cacbrctatb = require( './fixtures/ca_cb_rc_ta_tb.json' ); -var carbccntantb = require( './fixtures/ca_rb_cc_nta_ntb.json' ); -var carbccntatb = require( './fixtures/ca_rb_cc_nta_tb.json' ); -var carbcctantb = require( './fixtures/ca_rb_cc_ta_ntb.json' ); -var carbcctatb = require( './fixtures/ca_rb_cc_ta_tb.json' ); -var carbrcntantb = require( './fixtures/ca_rb_rc_nta_ntb.json' ); -var carbrcntatb = require( './fixtures/ca_rb_rc_nta_tb.json' ); -var carbrctantb = require( './fixtures/ca_rb_rc_ta_ntb.json' ); -var carbrctatb = require( './fixtures/ca_rb_rc_ta_tb.json' ); - -var racbccntantb = require( './fixtures/ra_cb_cc_nta_ntb.json' ); -var racbccntatb = require( './fixtures/ra_cb_cc_nta_tb.json' ); -var racbcctantb = require( './fixtures/ra_cb_cc_ta_ntb.json' ); -var racbcctatb = require( './fixtures/ra_cb_cc_ta_tb.json' ); -var racbrcntantb = require( './fixtures/ra_cb_rc_nta_ntb.json' ); -var racbrcntatb = require( './fixtures/ra_cb_rc_nta_tb.json' ); -var racbrctantb = require( './fixtures/ra_cb_rc_ta_ntb.json' ); -var racbrctatb = require( './fixtures/ra_cb_rc_ta_tb.json' ); -var rarbccntantb = require( './fixtures/ra_rb_cc_nta_ntb.json' ); -var rarbccntatb = require( './fixtures/ra_rb_cc_nta_tb.json' ); -var rarbcctantb = require( './fixtures/ra_rb_cc_ta_ntb.json' ); -var rarbcctatb = require( './fixtures/ra_rb_cc_ta_tb.json' ); -var rarbrcntantb = require( './fixtures/ra_rb_rc_nta_ntb.json' ); -var rarbrcntatb = require( './fixtures/ra_rb_rc_nta_tb.json' ); -var rarbrctantb = require( './fixtures/ra_rb_rc_ta_ntb.json' ); -var rarbrctatb = require( './fixtures/ra_rb_rc_ta_tb.json' ); - -var carbcctantbsa1sa2 = require( './fixtures/ca_rb_cc_ta_ntb_sa1_sa2.json' ); -var carbcctantbsa1nsa2 = require( './fixtures/ca_rb_cc_ta_ntb_sa1n_sa2.json' ); -var carbcctantbsa1sa2n = require( './fixtures/ca_rb_cc_ta_ntb_sa1_sa2n.json' ); -var carbcctantbsa1nsa2n = require( './fixtures/ca_rb_cc_ta_ntb_sa1n_sa2n.json' ); -var rarbcctantbsb1sb2 = require( './fixtures/ra_rb_cc_ta_ntb_sb1_sb2.json' ); -var rarbcctantbsb1nsb2 = require( './fixtures/ra_rb_cc_ta_ntb_sb1n_sb2.json' ); -var rarbcctantbsb1sb2n = require( './fixtures/ra_rb_cc_ta_ntb_sb1_sb2n.json' ); -var rarbcctantbsb1nsb2n = require( './fixtures/ra_rb_cc_ta_ntb_sb1n_sb2n.json' ); -var racbrcntatbsc1sc2 = require( './fixtures/ra_cb_rc_nta_tb_sc1_sc2.json' ); -var racbrcntatbsc1nsc2 = require( './fixtures/ra_cb_rc_nta_tb_sc1n_sc2.json' ); -var racbrcntatbsc1sc2n = require( './fixtures/ra_cb_rc_nta_tb_sc1_sc2n.json' ); -var racbrcntatbsc1nsc2n = require( './fixtures/ra_cb_rc_nta_tb_sc1n_sc2n.json' ); -var rarbrcntantboa = require( './fixtures/ra_rb_rc_nta_ntb_oa.json' ); -var rarbrcntantbob = require( './fixtures/ra_rb_rc_nta_ntb_ob.json' ); -var rarbrcntantboc = require( './fixtures/ra_rb_rc_nta_ntb_oc.json' ); -var cap = require( './fixtures/ra_rb_rc_nta_ntb_complex_access_pattern.json' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof dgemm, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function has an arity of 19', function test( t ) { - t.strictEqual( dgemm.length, 19, '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 = rarbrcntantb; - - 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() { - dgemm( value, data.transB, data.M, data.N, data.K, data.alpha, new Float64Array( data.A ), data.strideA1, data.strideA2, data.offsetA, new Float64Array( data.B ), data.strideB1, data.strideB2, data.offsetB, data.beta, new Float64Array( data.C ), data.strideC1, data.strideC2, data.offsetC ); - }; - } -}); - -tape( 'the function throws an error if provided an invalid second argument', function test( t ) { - var values; - var data; - var i; - - data = rarbrcntantb; - - 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() { - dgemm( data.transA, value, data.M, data.N, data.K, data.alpha, new Float64Array( data.A ), data.strideA1, data.strideA2, data.offsetA, new Float64Array( data.B ), data.strideB1, data.strideB2, data.offsetB, data.beta, new Float64Array( data.C ), data.strideC1, data.strideC2, data.offsetC ); - }; - } -}); - -tape( 'the function throws an error if provided an invalid third argument', function test( t ) { - var values; - var data; - var i; - - data = rarbrcntantb; - - 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() { - dgemm( data.transA, data.transB, value, data.N, data.K, data.alpha, new Float64Array( data.A ), data.strideA1, data.strideA2, data.offsetA, new Float64Array( data.B ), data.strideB1, data.strideB2, data.offsetB, data.beta, new Float64Array( data.C ), data.strideC1, data.strideC2, data.offsetC ); - }; - } -}); - -tape( 'the function throws an error if provided an invalid fourth argument', function test( t ) { - var values; - var data; - var i; - - data = rarbrcntantb; - - 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() { - dgemm( data.transA, data.transB, data.M, value, data.K, data.alpha, new Float64Array( data.A ), data.strideA1, data.strideA2, data.offsetA, new Float64Array( data.B ), data.strideB1, data.strideB2, data.offsetB, data.beta, new Float64Array( data.C ), data.strideC1, data.strideC2, data.offsetC ); - }; - } -}); - -tape( 'the function throws an error if provided an invalid fifth argument', function test( t ) { - var values; - var data; - var i; - - data = rarbrcntantb; - - 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() { - dgemm( data.transA, data.transB, data.M, data.N, value, data.alpha, new Float64Array( data.A ), data.strideA1, data.strideA2, data.offsetA, new Float64Array( data.B ), data.strideB1, data.strideB2, data.offsetB, data.beta, new Float64Array( data.C ), data.strideC1, data.strideC2, data.offsetC ); - }; - } -}); - -tape( 'the function performs the matrix-matrix operation `C = α*op(A)*op(B) + β*C` (column_major, column_major, column_major, no-transpose, no-transpose)', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = cacbccntantb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function performs the matrix-matrix operation `C = α*op(A)*op(B) + β*C` (column_major, column_major, column_major, transpose, no-transpose)', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = cacbcctantb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function performs the matrix-matrix operation `C = α*op(A)*op(B) + β*C` (column_major, column_major, column_major, no-transpose, transpose)', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = cacbccntatb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function performs the matrix-matrix operation `C = α*op(A)*op(B) + β*C` (column_major, column_major, column_major, transpose, transpose)', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = cacbcctatb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function performs the matrix-matrix operation `C = α*op(A)*op(B) + β*C` (column_major, column_major, row_major, no-transpose, no-transpose)', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = cacbrcntantb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function performs the matrix-matrix operation `C = α*op(A)*op(B) + β*C` (column_major, column_major, row_major, transpose, no-transpose)', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = cacbrctantb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function performs the matrix-matrix operation `C = α*op(A)*op(B) + β*C` (column_major, column_major, row_major, no-transpose, transpose)', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = cacbrcntatb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function performs the matrix-matrix operation `C = α*op(A)*op(B) + β*C` (column_major, column_major, row_major, transpose, transpose)', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = cacbrctatb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function performs the matrix-matrix operation `C = α*op(A)*op(B) + β*C` (column_major, row_major, column_major, no-transpose, no-transpose)', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = carbccntantb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function performs the matrix-matrix operation `C = α*op(A)*op(B) + β*C` (column_major, row_major, column_major, transpose, no-transpose)', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = carbcctantb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function performs the matrix-matrix operation `C = α*op(A)*op(B) + β*C` (column_major, row_major, column_major, no-transpose, transpose)', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = carbccntatb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function performs the matrix-matrix operation `C = α*op(A)*op(B) + β*C` (column_major, row_major, column_major, transpose, transpose)', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = carbcctatb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function performs the matrix-matrix operation `C = α*op(A)*op(B) + β*C` (column_major, row_major, row_major, no-transpose, no-transpose)', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = carbrcntantb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function performs the matrix-matrix operation `C = α*op(A)*op(B) + β*C` (column_major, row_major, row_major, transpose, no-transpose)', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = carbrctantb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function performs the matrix-matrix operation `C = α*op(A)*op(B) + β*C` (column_major, row_major, row_major, no-transpose, transpose)', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = carbrcntatb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function performs the matrix-matrix operation `C = α*op(A)*op(B) + β*C` (column_major, row_major, row_major, transpose, transpose)', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = carbrctatb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function performs the matrix-matrix operation `C = α*op(A)*op(B) + β*C` (row_major, column_major, column_major, no-transpose, no-transpose)', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = racbccntantb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function performs the matrix-matrix operation `C = α*op(A)*op(B) + β*C` (row_major, column_major, column_major, transpose, no-transpose)', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = racbcctantb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function performs the matrix-matrix operation `C = α*op(A)*op(B) + β*C` (row_major, column_major, column_major, no-transpose, transpose)', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = racbccntatb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function performs the matrix-matrix operation `C = α*op(A)*op(B) + β*C` (row_major, column_major, column_major, transpose, transpose)', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = racbcctatb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function performs the matrix-matrix operation `C = α*op(A)*op(B) + β*C` (row_major, column_major, row_major, no-transpose, no-transpose)', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = racbrcntantb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function performs the matrix-matrix operation `C = α*op(A)*op(B) + β*C` (row_major, column_major, row_major, transpose, no-transpose)', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = racbrctantb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function performs the matrix-matrix operation `C = α*op(A)*op(B) + β*C` (row_major, column_major, row_major, no-transpose, transpose)', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = racbrcntatb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function performs the matrix-matrix operation `C = α*op(A)*op(B) + β*C` (row_major, column_major, row_major, transpose, transpose)', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = racbrctatb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function performs the matrix-matrix operation `C = α*op(A)*op(B) + β*C` (row_major, row_major, column_major, no-transpose, no-transpose)', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = rarbccntantb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function performs the matrix-matrix operation `C = α*op(A)*op(B) + β*C` (row_major, row_major, column_major, transpose, no-transpose)', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = rarbcctantb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function performs the matrix-matrix operation `C = α*op(A)*op(B) + β*C` (row_major, row_major, column_major, no-transpose, transpose)', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = rarbccntatb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function performs the matrix-matrix operation `C = α*op(A)*op(B) + β*C` (row_major, row_major, column_major, transpose, transpose)', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = rarbcctatb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function performs the matrix-matrix operation `C = α*op(A)*op(B) + β*C` (row_major, row_major, row_major, no-transpose, no-transpose)', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = rarbrcntantb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function performs the matrix-matrix operation `C = α*op(A)*op(B) + β*C` (row_major, row_major, row_major, transpose, no-transpose)', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = rarbrctantb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function performs the matrix-matrix operation `C = α*op(A)*op(B) + β*C` (row_major, row_major, row_major, no-transpose, transpose)', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = rarbrcntatb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function performs the matrix-matrix operation `C = α*op(A)*op(B) + β*C` (row_major, row_major, row_major, transpose, transpose)', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = rarbrctatb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function returns a reference to the third input matrix', function test( t ) { - var data; - var out; - var a; - var b; - var c; - - data = rarbrcntantb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.end(); -}); - -tape( 'if either `M` or `N` is `0`, the function returns the third input matrix unchanged', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = rarbrctatb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C ); - - out = dgemm( data.transA, data.transB, 0, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - - out = dgemm( data.transA, data.transB, data.M, 0, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'if `α` or `K` is `0` and `β` is `1`, the function returns the third input matrix unchanged', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = rarbrctatb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, 0.0, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, 1.0, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - - out = dgemm( data.transA, data.transB, data.M, data.N, 0, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, 1.0, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'if `α` is `0` and `β` is `0`, the function returns the third input matrix filled with zeros', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = rarbrctatb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( c.length ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, 0.0, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, 0.0, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - - t.end(); -}); - -tape( 'if `α` is `0` and `β` is neither `0` nor `1`, the function returns the third input matrix scaled by `β`', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = rarbrctatb; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = dscal( c.length, 10.0, new Float64Array( c ), 1 ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, 0.0, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, 10.0, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, '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`', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = carbcctantbsa1sa2; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function supports a negative stride for the first dimension of `A`', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = carbcctantbsa1nsa2; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function supports a negative stride for the second dimension of `A`', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = carbcctantbsa1sa2n; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function supports negative strides for `A`', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = carbcctantbsa1nsa2n; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function supports specifying an offset parameter for `A`', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = rarbrcntantboa; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, '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 `B`', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = rarbcctantbsb1sb2; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function supports a negative stride for the first dimension of `B`', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = rarbcctantbsb1nsb2; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function supports a negative stride for the second dimension of `B`', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = rarbcctantbsb1sb2n; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function supports negative strides for `B`', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = rarbcctantbsb1nsb2n; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function supports specifying an offset parameter for `B`', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = rarbrcntantbob; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, '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 `C`', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = racbrcntatbsc1sc2; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function supports a negative stride for the first dimension of `C`', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = racbrcntatbsc1nsc2; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function supports a negative stride for the second dimension of `C`', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = racbrcntatbsc1sc2n; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function supports negative strides for `C`', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = racbrcntatbsc1nsc2n; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function supports specifying an offset parameter for `C`', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = rarbrcntantboc; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function supports complex access patterns', function test( t ) { - var expected; - var data; - var out; - var a; - var b; - var c; - - data = cap; - - a = new Float64Array( data.A ); - b = new Float64Array( data.B ); - c = new Float64Array( data.C ); - - expected = new Float64Array( data.C_out ); - - out = dgemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function supports computation over large arrays (row-major, row-major, row-major)', function test( t ) { - var expected; - var out; - var N; - var a; - var b; - var c; - - N = 100; - - a = ones( N*N, 'float64' ); - b = ones( a.length, 'float64' ); - c = new Float64Array( a.length ); - - expected = filled( N, a.length, 'float64' ); - - out = dgemm( 'no-transpose', 'no-transpose', N, N, N, 1.0, a, N, 1, 0, b, N, 1, 0, 1.0, c, N, 1, 0 ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function supports computation over large arrays (column-major, column-major, column-major)', function test( t ) { - var expected; - var out; - var N; - var a; - var b; - var c; - - N = 100; - - a = ones( N*N, 'float64' ); - b = ones( a.length, 'float64' ); - c = new Float64Array( a.length ); - - expected = filled( N, a.length, 'float64' ); - - out = dgemm( 'no-transpose', 'no-transpose', N, N, N, 1.0, a, 1, N, 0, b, 1, N, 0, 1.0, c, 1, N, 0 ); - t.strictEqual( out, c, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); - t.end(); -}); diff --git a/lib/node_modules/@stdlib/blas/base/dgemv/lib/ndarray.js b/lib/node_modules/@stdlib/blas/base/dgemv/lib/ndarray.js index 4e25ea9d2f01..abed14fd706d 100644 --- a/lib/node_modules/@stdlib/blas/base/dgemv/lib/ndarray.js +++ b/lib/node_modules/@stdlib/blas/base/dgemv/lib/ndarray.js @@ -73,10 +73,10 @@ function dgemv( trans, M, N, alpha, A, strideA1, strideA2, offsetA, x, strideX, throw new RangeError( format( 'invalid argument. Third argument must be a nonnegative integer. Value: `%d`.', N ) ); } if ( strideX === 0 ) { - throw new RangeError( format( 'invalid argument. Tenth argument must be non-zero.' ) ); + throw new RangeError( format( 'invalid argument. Tenth argument must be non-zero.', strideX ) ); } if ( strideY === 0 ) { - throw new RangeError( format( 'invalid argument. Fourteenth argument must be non-zero.' ) ); + throw new RangeError( format( 'invalid argument. Fourteenth argument must be non-zero.', strideY ) ); } // Check if we can early return... if ( M === 0 || N === 0 || ( alpha === 0.0 && beta === 1.0 ) ) {