Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lib/node_modules/@stdlib/blas/base/dgemm/lib/base.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@

// VARIABLES //

var bsize = blockSize( 'float64', 'float64' ); // TODO: consider using a larger block size

Check warning on line 32 in lib/node_modules/@stdlib/blas/base/dgemm/lib/base.js

View workflow job for this annotation

GitHub Actions / Lint Changed Files

Unexpected 'todo' comment: 'TODO: consider using a larger block size'


// FUNCTIONS //
Expand All @@ -53,7 +53,7 @@
* var bool = isTransposed( 'no-transpose' );
* // returns false
*/
function isTransposed( str ) { // TODO: consider moving to a separate helper utility package

Check warning on line 56 in lib/node_modules/@stdlib/blas/base/dgemm/lib/base.js

View workflow job for this annotation

GitHub Actions / Lint Changed Files

Unexpected 'todo' comment: 'TODO: consider moving to a separate...'
return ( str !== 'no-transpose' );
}

Expand Down Expand Up @@ -85,7 +85,7 @@
* zeros( 2, 3, X, 1, 2, 0 );
* // X => <Float64Array>[ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ]
*/
function zeros( M, N, X, strideX1, strideX2, offsetX ) { // TODO: consider moving to a separate package

Check warning on line 88 in lib/node_modules/@stdlib/blas/base/dgemm/lib/base.js

View workflow job for this annotation

GitHub Actions / Lint Changed Files

Unexpected 'todo' comment: 'TODO: consider moving to a separate...'
var dx0;
var dx1;
var S0;
Expand Down Expand Up @@ -147,7 +147,7 @@
* scal( 2, 3, 5.0, X, 1, 2, 0 );
* // X => <Float64Array>[ 5.0, 10.0, 15.0, 20.0, 25.0, 30.0 ]
*/
function scal( M, N, beta, X, strideX1, strideX2, offsetX ) { // TODO: consider moving to a separate package

Check warning on line 150 in lib/node_modules/@stdlib/blas/base/dgemm/lib/base.js

View workflow job for this annotation

GitHub Actions / Lint Changed Files

Unexpected 'todo' comment: 'TODO: consider moving to a separate...'
var dx0;
var dx1;
var S0;
Expand Down Expand Up @@ -418,7 +418,7 @@
C = scal( M, N, beta, C, strideC1, strideC2, offsetC );
}
// Check whether we can early return...
if ( alpha === 0.0 ) {
if ( alpha === 0.0 || K === 0 ) {
return C;
}
// Determine the memory layouts of `A` and `B`...
Expand Down
60 changes: 60 additions & 0 deletions lib/node_modules/@stdlib/blas/base/dgemm/test/test.dgemm.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ var tape = require( 'tape' );
var Float64Array = require( '@stdlib/array/float64' );
var dscal = require( '@stdlib/blas/base/dscal' );
var resolveEnum = require( '@stdlib/blas/base/transpose-operation-resolve-enum' );
var PINF = require( '@stdlib/constants/float64/pinf' );
var NINF = require( '@stdlib/constants/float64/ninf' );
var dgemm = require( './../lib/dgemm.js' );


Expand Down Expand Up @@ -878,3 +880,61 @@ tape( 'the function supports `conjugate-transpose`, which is equivalent to `tran
t.deepEqual( out, expected, 'returns expected value' );
t.end();
});

tape( 'if `K` is `0`, the function returns the third input matrix scaled by `β`, regardless of the value of `α` and the memory layout', function test( t ) {
var expected;
var alphas;
var out;
var c;
var i;

alphas = [ NaN, PINF, NINF, 2.0 ];
expected = new Float64Array( [ 0.5, 1.0, 1.5, 2.0 ] );

for ( i = 0; i < alphas.length; i++ ) {
c = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] );
out = dgemm( 'row-major', 'no-transpose', 'no-transpose', 2, 2, 0, alphas[ i ], new Float64Array( 0 ), 1, new Float64Array( 0 ), 2, 0.5, c, 2 );
t.strictEqual( out, c, 'returns expected value' );
t.deepEqual( out, expected, 'returns expected value' );

c = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] );
out = dgemm( 'row-major', 'no-transpose', 'transpose', 2, 2, 0, alphas[ i ], new Float64Array( 0 ), 1, new Float64Array( 0 ), 1, 0.5, c, 2 );
t.strictEqual( out, c, 'returns expected value' );
t.deepEqual( out, expected, 'returns expected value' );

c = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] );
out = dgemm( 'column-major', 'transpose', 'no-transpose', 2, 2, 0, alphas[ i ], new Float64Array( 0 ), 2, new Float64Array( 0 ), 2, 0.5, c, 2 );
t.strictEqual( out, c, 'returns expected value' );
t.deepEqual( out, expected, 'returns expected value' );
}
t.end();
});

tape( 'if `K` is `0` and `β` is `0`, the function returns the third input matrix filled with zeros, regardless of the value of `α` and the memory layout', function test( t ) {
var expected;
var alphas;
var out;
var c;
var i;

alphas = [ NaN, PINF, NINF, 2.0 ];
expected = new Float64Array( [ 0.0, 0.0, 0.0, 0.0 ] );

for ( i = 0; i < alphas.length; i++ ) {
c = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] );
out = dgemm( 'row-major', 'no-transpose', 'no-transpose', 2, 2, 0, alphas[ i ], new Float64Array( 0 ), 1, new Float64Array( 0 ), 2, 0.0, c, 2 );
t.strictEqual( out, c, 'returns expected value' );
t.deepEqual( out, expected, 'returns expected value' );

c = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] );
out = dgemm( 'row-major', 'no-transpose', 'transpose', 2, 2, 0, alphas[ i ], new Float64Array( 0 ), 1, new Float64Array( 0 ), 1, 0.0, c, 2 );
t.strictEqual( out, c, 'returns expected value' );
t.deepEqual( out, expected, 'returns expected value' );

c = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] );
out = dgemm( 'column-major', 'transpose', 'no-transpose', 2, 2, 0, alphas[ i ], new Float64Array( 0 ), 2, new Float64Array( 0 ), 2, 0.0, c, 2 );
t.strictEqual( out, c, 'returns expected value' );
t.deepEqual( out, expected, 'returns expected value' );
}
t.end();
});
2 changes: 1 addition & 1 deletion lib/node_modules/@stdlib/blas/base/ggemm/lib/accessors.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@

// VARIABLES //

var bsize = blockSize( 'float64', 'float64' ); // TODO: consider using a larger block size

Check warning on line 32 in lib/node_modules/@stdlib/blas/base/ggemm/lib/accessors.js

View workflow job for this annotation

GitHub Actions / Lint Changed Files

Unexpected 'todo' comment: 'TODO: consider using a larger block size'


// FUNCTIONS //
Expand All @@ -53,7 +53,7 @@
* var bool = isTransposed( 'no-transpose' );
* // returns false
*/
function isTransposed( str ) { // TODO: consider moving to a separate helper utility package

Check warning on line 56 in lib/node_modules/@stdlib/blas/base/ggemm/lib/accessors.js

View workflow job for this annotation

GitHub Actions / Lint Changed Files

Unexpected 'todo' comment: 'TODO: consider moving to a separate...'
return ( str !== 'no-transpose' );
}

Expand Down Expand Up @@ -89,7 +89,7 @@
* zeros( 2, 3, arraylike2object( toAccessorArray( X ) ), 1, 2, 0 );
* // X => [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ]
*/
function zeros( M, N, X, strideX1, strideX2, offsetX ) { // TODO: consider moving to a separate package

Check warning on line 92 in lib/node_modules/@stdlib/blas/base/ggemm/lib/accessors.js

View workflow job for this annotation

GitHub Actions / Lint Changed Files

Unexpected 'todo' comment: 'TODO: consider moving to a separate...'
var xbuf;
var set;
var dx0;
Expand Down Expand Up @@ -163,7 +163,7 @@
* scal( 2, 3, 5.0, arraylike2object( toAccessorArray( X ) ), 1, 2, 0 );
* // X => [ 5.0, 10.0, 15.0, 20.0, 25.0, 30.0 ]
*/
function scal( M, N, beta, X, strideX1, strideX2, offsetX ) { // TODO: consider moving to a separate package

Check warning on line 166 in lib/node_modules/@stdlib/blas/base/ggemm/lib/accessors.js

View workflow job for this annotation

GitHub Actions / Lint Changed Files

Unexpected 'todo' comment: 'TODO: consider moving to a separate...'
var xbuf;
var get;
var set;
Expand Down Expand Up @@ -497,7 +497,7 @@
C = scal( M, N, beta, C, strideC1, strideC2, offsetC );
}
// Check whether we can early return...
if ( alpha === 0.0 ) {
if ( alpha === 0.0 || K === 0 ) {
return C;
}
// Determine the memory layouts of `A` and `B`...
Expand Down
2 changes: 1 addition & 1 deletion lib/node_modules/@stdlib/blas/base/ggemm/lib/base.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@

// VARIABLES //

var bsize = blockSize( 'float64', 'float64' ); // TODO: consider using a larger block size

Check warning on line 34 in lib/node_modules/@stdlib/blas/base/ggemm/lib/base.js

View workflow job for this annotation

GitHub Actions / Lint Changed Files

Unexpected 'todo' comment: 'TODO: consider using a larger block size'


// FUNCTIONS //
Expand All @@ -55,7 +55,7 @@
* var bool = isTransposed( 'no-transpose' );
* // returns false
*/
function isTransposed( str ) { // TODO: consider moving to a separate helper utility package

Check warning on line 58 in lib/node_modules/@stdlib/blas/base/ggemm/lib/base.js

View workflow job for this annotation

GitHub Actions / Lint Changed Files

Unexpected 'todo' comment: 'TODO: consider moving to a separate...'
return ( str !== 'no-transpose' );
}

Expand Down Expand Up @@ -416,7 +416,7 @@
C = scal( M, N, beta, C, strideC1, strideC2, offsetC );
}
// Check whether we can early return...
if ( alpha === 0.0 ) {
if ( alpha === 0.0 || K === 0 ) {
return C;
}
// Determine the memory layouts of `A` and `B`...
Expand Down
126 changes: 126 additions & 0 deletions lib/node_modules/@stdlib/blas/base/ggemm/test/test.main.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ var gfill = require( '@stdlib/blas/ext/base/gfill' );
var toAccessorArray = require( '@stdlib/array/base/to-accessor-array' );
var copy = require( '@stdlib/array/base/copy' );
var resolveEnum = require( '@stdlib/blas/base/transpose-operation-resolve-enum' );
var PINF = require( '@stdlib/constants/float64/pinf' );
var NINF = require( '@stdlib/constants/float64/ninf' );
var ggemm = require( './../lib/main.js' );


Expand Down Expand Up @@ -1591,3 +1593,127 @@ tape( 'the function supports `conjugate-transpose`, which is equivalent to `tran
t.deepEqual( out, expected, 'returns expected value' );
t.end();
});

tape( 'if `K` is `0`, the function returns the third input matrix scaled by `β`, regardless of the value of `α` and the memory layout', function test( t ) {
var expected;
var alphas;
var out;
var c;
var i;

alphas = [ NaN, PINF, NINF, 2.0 ];
expected = [ 0.5, 1.0, 1.5, 2.0 ];

for ( i = 0; i < alphas.length; i++ ) {
c = [ 1.0, 2.0, 3.0, 4.0 ];
out = ggemm( 'row-major', 'no-transpose', 'no-transpose', 2, 2, 0, alphas[ i ], [], 1, [], 2, 0.5, c, 2 );
t.strictEqual( out, c, 'returns expected value' );
t.deepEqual( out, expected, 'returns expected value' );

c = [ 1.0, 2.0, 3.0, 4.0 ];
out = ggemm( 'row-major', 'no-transpose', 'transpose', 2, 2, 0, alphas[ i ], [], 1, [], 1, 0.5, c, 2 );
t.strictEqual( out, c, 'returns expected value' );
t.deepEqual( out, expected, 'returns expected value' );

c = [ 1.0, 2.0, 3.0, 4.0 ];
out = ggemm( 'column-major', 'transpose', 'no-transpose', 2, 2, 0, alphas[ i ], [], 2, [], 2, 0.5, c, 2 );
t.strictEqual( out, c, 'returns expected value' );
t.deepEqual( out, expected, 'returns expected value' );
}
t.end();
});

tape( 'if `K` is `0` and `β` is `0`, the function returns the third input matrix filled with zeros, regardless of the value of `α` and the memory layout', function test( t ) {
var expected;
var alphas;
var out;
var c;
var i;

alphas = [ NaN, PINF, NINF, 2.0 ];
expected = [ 0.0, 0.0, 0.0, 0.0 ];

for ( i = 0; i < alphas.length; i++ ) {
c = [ 1.0, 2.0, 3.0, 4.0 ];
out = ggemm( 'row-major', 'no-transpose', 'no-transpose', 2, 2, 0, alphas[ i ], [], 1, [], 2, 0.0, c, 2 );
t.strictEqual( out, c, 'returns expected value' );
t.deepEqual( out, expected, 'returns expected value' );

c = [ 1.0, 2.0, 3.0, 4.0 ];
out = ggemm( 'row-major', 'no-transpose', 'transpose', 2, 2, 0, alphas[ i ], [], 1, [], 1, 0.0, c, 2 );
t.strictEqual( out, c, 'returns expected value' );
t.deepEqual( out, expected, 'returns expected value' );

c = [ 1.0, 2.0, 3.0, 4.0 ];
out = ggemm( 'column-major', 'transpose', 'no-transpose', 2, 2, 0, alphas[ i ], [], 2, [], 2, 0.0, c, 2 );
t.strictEqual( out, c, 'returns expected value' );
t.deepEqual( out, expected, 'returns expected value' );
}
t.end();
});

tape( 'if `K` is `0`, the function returns the third input matrix scaled by `β`, regardless of the value of `α` and the memory layout (accessors)', function test( t ) {
var expected;
var alphas;
var cbuf;
var out;
var c;
var i;

alphas = [ NaN, PINF, NINF, 2.0 ];
expected = [ 0.5, 1.0, 1.5, 2.0 ];

for ( i = 0; i < alphas.length; i++ ) {
cbuf = [ 1.0, 2.0, 3.0, 4.0 ];
c = toAccessorArray( cbuf );
out = ggemm( 'row-major', 'no-transpose', 'no-transpose', 2, 2, 0, alphas[ i ], toAccessorArray( [] ), 1, toAccessorArray( [] ), 2, 0.5, c, 2 );
t.strictEqual( out, c, 'returns expected value' );
t.deepEqual( cbuf, expected, 'returns expected value' );

cbuf = [ 1.0, 2.0, 3.0, 4.0 ];
c = toAccessorArray( cbuf );
out = ggemm( 'row-major', 'no-transpose', 'transpose', 2, 2, 0, alphas[ i ], toAccessorArray( [] ), 1, toAccessorArray( [] ), 1, 0.5, c, 2 );
t.strictEqual( out, c, 'returns expected value' );
t.deepEqual( cbuf, expected, 'returns expected value' );

cbuf = [ 1.0, 2.0, 3.0, 4.0 ];
c = toAccessorArray( cbuf );
out = ggemm( 'column-major', 'transpose', 'no-transpose', 2, 2, 0, alphas[ i ], toAccessorArray( [] ), 2, toAccessorArray( [] ), 2, 0.5, c, 2 );
t.strictEqual( out, c, 'returns expected value' );
t.deepEqual( cbuf, expected, 'returns expected value' );
}
t.end();
});

tape( 'if `K` is `0` and `β` is `0`, the function returns the third input matrix filled with zeros, regardless of the value of `α` and the memory layout (accessors)', function test( t ) {
var expected;
var alphas;
var cbuf;
var out;
var c;
var i;

alphas = [ NaN, PINF, NINF, 2.0 ];
expected = [ 0.0, 0.0, 0.0, 0.0 ];

for ( i = 0; i < alphas.length; i++ ) {
cbuf = [ 1.0, 2.0, 3.0, 4.0 ];
c = toAccessorArray( cbuf );
out = ggemm( 'row-major', 'no-transpose', 'no-transpose', 2, 2, 0, alphas[ i ], toAccessorArray( [] ), 1, toAccessorArray( [] ), 2, 0.0, c, 2 );
t.strictEqual( out, c, 'returns expected value' );
t.deepEqual( cbuf, expected, 'returns expected value' );

cbuf = [ 1.0, 2.0, 3.0, 4.0 ];
c = toAccessorArray( cbuf );
out = ggemm( 'row-major', 'no-transpose', 'transpose', 2, 2, 0, alphas[ i ], toAccessorArray( [] ), 1, toAccessorArray( [] ), 1, 0.0, c, 2 );
t.strictEqual( out, c, 'returns expected value' );
t.deepEqual( cbuf, expected, 'returns expected value' );

cbuf = [ 1.0, 2.0, 3.0, 4.0 ];
c = toAccessorArray( cbuf );
out = ggemm( 'column-major', 'transpose', 'no-transpose', 2, 2, 0, alphas[ i ], toAccessorArray( [] ), 2, toAccessorArray( [] ), 2, 0.0, c, 2 );
t.strictEqual( out, c, 'returns expected value' );
t.deepEqual( cbuf, expected, 'returns expected value' );
}
t.end();
});
2 changes: 1 addition & 1 deletion lib/node_modules/@stdlib/blas/base/sgemm/lib/base.js
Original file line number Diff line number Diff line change
Expand Up @@ -419,7 +419,7 @@ function sgemm( transA, transB, M, N, K, alpha, A, strideA1, strideA2, offsetA,
C = scal( M, N, beta, C, strideC1, strideC2, offsetC );
}
// Check whether we can early return...
if ( alpha === 0.0 ) {
if ( alpha === 0.0 || K === 0 ) {
return C;
}
// Determine the memory layouts of `A` and `B`...
Expand Down
60 changes: 60 additions & 0 deletions lib/node_modules/@stdlib/blas/base/sgemm/test/test.sgemm.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ var tape = require( 'tape' );
var Float32Array = require( '@stdlib/array/float32' );
var sscal = require( '@stdlib/blas/base/sscal' );
var resolveEnum = require( '@stdlib/blas/base/transpose-operation-resolve-enum' );
var PINF = require( '@stdlib/constants/float32/pinf' );
var NINF = require( '@stdlib/constants/float32/ninf' );
var sgemm = require( './../lib/sgemm.js' );


Expand Down Expand Up @@ -878,3 +880,61 @@ tape( 'the function supports `conjugate-transpose`, which is equivalent to `tran
t.deepEqual( out, expected, 'returns expected value' );
t.end();
});

tape( 'if `K` is `0`, the function returns the third input matrix scaled by `β`, regardless of the value of `α` and the memory layout', function test( t ) {
var expected;
var alphas;
var out;
var c;
var i;

alphas = [ NaN, PINF, NINF, 2.0 ];
expected = new Float32Array( [ 0.5, 1.0, 1.5, 2.0 ] );

for ( i = 0; i < alphas.length; i++ ) {
c = new Float32Array( [ 1.0, 2.0, 3.0, 4.0 ] );
out = sgemm( 'row-major', 'no-transpose', 'no-transpose', 2, 2, 0, alphas[ i ], new Float32Array( 0 ), 1, new Float32Array( 0 ), 2, 0.5, c, 2 );
t.strictEqual( out, c, 'returns expected value' );
t.deepEqual( out, expected, 'returns expected value' );

c = new Float32Array( [ 1.0, 2.0, 3.0, 4.0 ] );
out = sgemm( 'row-major', 'no-transpose', 'transpose', 2, 2, 0, alphas[ i ], new Float32Array( 0 ), 1, new Float32Array( 0 ), 1, 0.5, c, 2 );
t.strictEqual( out, c, 'returns expected value' );
t.deepEqual( out, expected, 'returns expected value' );

c = new Float32Array( [ 1.0, 2.0, 3.0, 4.0 ] );
out = sgemm( 'column-major', 'transpose', 'no-transpose', 2, 2, 0, alphas[ i ], new Float32Array( 0 ), 2, new Float32Array( 0 ), 2, 0.5, c, 2 );
t.strictEqual( out, c, 'returns expected value' );
t.deepEqual( out, expected, 'returns expected value' );
}
t.end();
});

tape( 'if `K` is `0` and `β` is `0`, the function returns the third input matrix filled with zeros, regardless of the value of `α` and the memory layout', function test( t ) {
var expected;
var alphas;
var out;
var c;
var i;

alphas = [ NaN, PINF, NINF, 2.0 ];
expected = new Float32Array( [ 0.0, 0.0, 0.0, 0.0 ] );

for ( i = 0; i < alphas.length; i++ ) {
c = new Float32Array( [ 1.0, 2.0, 3.0, 4.0 ] );
out = sgemm( 'row-major', 'no-transpose', 'no-transpose', 2, 2, 0, alphas[ i ], new Float32Array( 0 ), 1, new Float32Array( 0 ), 2, 0.0, c, 2 );
t.strictEqual( out, c, 'returns expected value' );
t.deepEqual( out, expected, 'returns expected value' );

c = new Float32Array( [ 1.0, 2.0, 3.0, 4.0 ] );
out = sgemm( 'row-major', 'no-transpose', 'transpose', 2, 2, 0, alphas[ i ], new Float32Array( 0 ), 1, new Float32Array( 0 ), 1, 0.0, c, 2 );
t.strictEqual( out, c, 'returns expected value' );
t.deepEqual( out, expected, 'returns expected value' );

c = new Float32Array( [ 1.0, 2.0, 3.0, 4.0 ] );
out = sgemm( 'column-major', 'transpose', 'no-transpose', 2, 2, 0, alphas[ i ], new Float32Array( 0 ), 2, new Float32Array( 0 ), 2, 0.0, c, 2 );
t.strictEqual( out, c, 'returns expected value' );
t.deepEqual( out, expected, 'returns expected value' );
}
t.end();
});
Loading