From 208fab2e21fb1a16e1618f53f739e81039fee075 Mon Sep 17 00:00:00 2001 From: Samarth Kolarkar Date: Sat, 19 Sep 2026 02:06:23 +0530 Subject: [PATCH] feat: add float16 dtype support to ndarray/base/broadcast-scalar --- .../broadcast-scalar/benchmark/benchmark.js | 19 ++++++++++++ .../broadcast-scalar/docs/types/index.d.ts | 29 ++++++++++++++++++- .../base/broadcast-scalar/docs/types/test.ts | 1 + .../base/broadcast-scalar/test/test.js | 19 ++++++++++++ 4 files changed, 67 insertions(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/ndarray/base/broadcast-scalar/benchmark/benchmark.js b/lib/node_modules/@stdlib/ndarray/base/broadcast-scalar/benchmark/benchmark.js index c350c78c7910..26456ad6228e 100644 --- a/lib/node_modules/@stdlib/ndarray/base/broadcast-scalar/benchmark/benchmark.js +++ b/lib/node_modules/@stdlib/ndarray/base/broadcast-scalar/benchmark/benchmark.js @@ -69,6 +69,25 @@ bench( format( '%s:dtype=float32', pkg ), function benchmark( b ) { b.end(); }); +bench( format( '%s:dtype=float16', pkg ), function benchmark( b ) { + var x; + var i; + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + x = broadcastScalar( i, 'float16', [ 2, 2 ], 'row-major' ); + if ( x.length !== 4 ) { + b.fail( 'should have length 4' ); + } + } + b.toc(); + if ( !isndarrayLike( x ) ) { + b.fail( 'should return an ndarray' ); + } + b.pass( 'benchmark finished' ); + b.end(); +}); + bench( format( '%s:dtype=complex128', pkg ), function benchmark( b ) { var x; var v; diff --git a/lib/node_modules/@stdlib/ndarray/base/broadcast-scalar/docs/types/index.d.ts b/lib/node_modules/@stdlib/ndarray/base/broadcast-scalar/docs/types/index.d.ts index d61a736c43a8..bb1a9eb41746 100644 --- a/lib/node_modules/@stdlib/ndarray/base/broadcast-scalar/docs/types/index.d.ts +++ b/lib/node_modules/@stdlib/ndarray/base/broadcast-scalar/docs/types/index.d.ts @@ -21,7 +21,7 @@ /// import { ComplexLike } from '@stdlib/types/complex'; -import { ndarray, float64ndarray, float32ndarray, int32ndarray, int16ndarray, int8ndarray, uint32ndarray, uint16ndarray, uint8ndarray, uint8cndarray, complex128ndarray, complex64ndarray, DataType, Shape, Order } from '@stdlib/types/ndarray'; +import { ndarray, float64ndarray, float32ndarray, float16ndarray, int32ndarray, int16ndarray, int8ndarray, uint32ndarray, uint16ndarray, uint8ndarray, uint8cndarray, complex128ndarray, complex64ndarray, DataType, Shape, Order } from '@stdlib/types/ndarray'; /** * Broadcasts a scalar value to an ndarray having a specified shape. @@ -77,6 +77,33 @@ declare function broadcastScalar( value: number, dtype: 'float64', shape: Shape, */ declare function broadcastScalar( value: number, dtype: 'float32', shape: Shape, order: Order ): float32ndarray; +/** +* Broadcasts a scalar value to an ndarray having a specified shape. +* +* @param value - scalar value +* @param dtype - array data type +* @param shape - array shape +* @param order - array order +* @returns ndarray +* +* @example +* var getShape = require( '@stdlib/ndarray/shape' ); +* var getDType = require( '@stdlib/ndarray/dtype' ); +* +* var x = broadcastScalar( 1.0, 'float16', [ 2, 2 ], 'row-major' ); +* // returns +* +* var sh = getShape( x ); +* // returns [ 2, 2 ] +* +* var dt = String( getDType( x ) ); +* // returns 'float16' +* +* var v = x.get( 0, 1 ); +* // returns 1.0 +*/ +declare function broadcastScalar( value: number, dtype: 'float16', shape: Shape, order: Order ): float16ndarray; + /** * Broadcasts a scalar value to an ndarray having a specified shape. * diff --git a/lib/node_modules/@stdlib/ndarray/base/broadcast-scalar/docs/types/test.ts b/lib/node_modules/@stdlib/ndarray/base/broadcast-scalar/docs/types/test.ts index ba14852ff709..199737397866 100644 --- a/lib/node_modules/@stdlib/ndarray/base/broadcast-scalar/docs/types/test.ts +++ b/lib/node_modules/@stdlib/ndarray/base/broadcast-scalar/docs/types/test.ts @@ -25,6 +25,7 @@ import broadcastScalar = require( './index' ); { broadcastScalar( 1.0, 'float64', [ 2, 2 ], 'row-major' ); // $ExpectType float64ndarray broadcastScalar( 1.0, 'float32', [ 2, 2 ], 'row-major' ); // $ExpectType float32ndarray + broadcastScalar( 1.0, 'float16', [ 2, 2 ], 'row-major' ); // $ExpectType float16ndarray broadcastScalar( 1.0, 'complex128', [ 2, 2 ], 'row-major' ); // $ExpectType complex128ndarray broadcastScalar( 1.0, 'complex64', [ 2, 2 ], 'row-major' ); // $ExpectType complex64ndarray broadcastScalar( 1.0, 'int32', [ 2, 2 ], 'row-major' ); // $ExpectType int32ndarray diff --git a/lib/node_modules/@stdlib/ndarray/base/broadcast-scalar/test/test.js b/lib/node_modules/@stdlib/ndarray/base/broadcast-scalar/test/test.js index 716bbcd7ada0..d14b9d994791 100644 --- a/lib/node_modules/@stdlib/ndarray/base/broadcast-scalar/test/test.js +++ b/lib/node_modules/@stdlib/ndarray/base/broadcast-scalar/test/test.js @@ -23,6 +23,7 @@ var tape = require( 'tape' ); var Float64Array = require( '@stdlib/array/float64' ); var Float32Array = require( '@stdlib/array/float32' ); +var Float16Array = require( '@stdlib/array/float16' ); var Int32Array = require( '@stdlib/array/int32' ); var Uint32Array = require( '@stdlib/array/uint32' ); var Int16Array = require( '@stdlib/array/int16' ); @@ -121,6 +122,24 @@ tape( 'the function returns a broadcasted ndarray (dtype=float32)', function tes t.end(); }); +tape( 'the function returns a broadcasted ndarray (dtype=float16)', function test( t ) { + var expected; + var arr; + + expected = new Float16Array( [ 1.0 ] ); + arr = broadcastScalar( 1.0, 'float16', [ 3, 3 ], 'column-major' ); + + t.strictEqual( instanceOf( arr, base ), true, 'returns expected value' ); + t.strictEqual( String( getDType( arr ) ), 'float16', 'returns expected value' ); + t.deepEqual( getShape( arr ), [ 3, 3 ], 'returns expected value' ); + t.strictEqual( instanceOf( getData( arr ), Float16Array ), true, 'returns expected value' ); + t.deepEqual( getData( arr ), expected, 'returns expected value' ); + t.strictEqual( getOrder( arr ), 'column-major', 'returns expected value' ); + t.strictEqual( numel( arr ), 9, 'returns expected value' ); + + t.end(); +}); + tape( 'the function returns a broadcasted ndarray (dtype=int32)', function test( t ) { var expected; var arr;