@@ -23,16 +23,16 @@ <h1><a href="index.html">All files</a> assign.js</h1>
2323 < div class ='clearfix '>
2424
2525 < div class ='fl pad1y space-right2 '>
26- < span class ="strong "> 98.19 % </ span >
26+ < span class ="strong "> 98.46 % </ span >
2727 < span class ="quiet "> Statements</ span >
28- < span class ='fraction '> 109/111 </ span >
28+ < span class ='fraction '> 128/130 </ span >
2929 </ div >
3030
3131
3232 < div class ='fl pad1y space-right2 '>
33- < span class ="strong "> 90 % </ span >
33+ < span class ="strong "> 93.75 % </ span >
3434 < span class ="quiet "> Branches</ span >
35- < span class ='fraction '> 9/10 </ span >
35+ < span class ='fraction '> 15/16 </ span >
3636 </ div >
3737
3838
@@ -44,9 +44,9 @@ <h1><a href="index.html">All files</a> assign.js</h1>
4444
4545
4646 < div class ='fl pad1y space-right2 '>
47- < span class ="strong "> 98.19 % </ span >
47+ < span class ="strong "> 98.46 % </ span >
4848 < span class ="quiet "> Lines</ span >
49- < span class ='fraction '> 109/111 </ span >
49+ < span class ='fraction '> 128/130 </ span >
5050 </ div >
5151
5252
@@ -174,7 +174,26 @@ <h1><a href="index.html">All files</a> assign.js</h1>
174174< a name ='L109 '> </ a > < a href ='#L109 '> 109</ a >
175175< a name ='L110 '> </ a > < a href ='#L110 '> 110</ a >
176176< a name ='L111 '> </ a > < a href ='#L111 '> 111</ a >
177- < a name ='L112 '> </ a > < a href ='#L112 '> 112</ a > </ td > < td class ="line-coverage quiet "> < span class ="cline-any cline-yes "> 3x</ span >
177+ < a name ='L112 '> </ a > < a href ='#L112 '> 112</ a >
178+ < a name ='L113 '> </ a > < a href ='#L113 '> 113</ a >
179+ < a name ='L114 '> </ a > < a href ='#L114 '> 114</ a >
180+ < a name ='L115 '> </ a > < a href ='#L115 '> 115</ a >
181+ < a name ='L116 '> </ a > < a href ='#L116 '> 116</ a >
182+ < a name ='L117 '> </ a > < a href ='#L117 '> 117</ a >
183+ < a name ='L118 '> </ a > < a href ='#L118 '> 118</ a >
184+ < a name ='L119 '> </ a > < a href ='#L119 '> 119</ a >
185+ < a name ='L120 '> </ a > < a href ='#L120 '> 120</ a >
186+ < a name ='L121 '> </ a > < a href ='#L121 '> 121</ a >
187+ < a name ='L122 '> </ a > < a href ='#L122 '> 122</ a >
188+ < a name ='L123 '> </ a > < a href ='#L123 '> 123</ a >
189+ < a name ='L124 '> </ a > < a href ='#L124 '> 124</ a >
190+ < a name ='L125 '> </ a > < a href ='#L125 '> 125</ a >
191+ < a name ='L126 '> </ a > < a href ='#L126 '> 126</ a >
192+ < a name ='L127 '> </ a > < a href ='#L127 '> 127</ a >
193+ < a name ='L128 '> </ a > < a href ='#L128 '> 128</ a >
194+ < a name ='L129 '> </ a > < a href ='#L129 '> 129</ a >
195+ < a name ='L130 '> </ a > < a href ='#L130 '> 130</ a >
196+ < a name ='L131 '> </ a > < a href ='#L131 '> 131</ a > </ td > < td class ="line-coverage quiet "> < span class ="cline-any cline-yes "> 3x</ span >
178197< span class ="cline-any cline-yes "> 3x</ span >
179198< span class ="cline-any cline-yes "> 3x</ span >
180199< span class ="cline-any cline-yes "> 3x</ span >
@@ -266,6 +285,8 @@ <h1><a href="index.html">All files</a> assign.js</h1>
266285< span class ="cline-any cline-yes "> 96x</ span >
267286< span class ="cline-any cline-yes "> 96x</ span >
268287< span class ="cline-any cline-yes "> 96x</ span >
288+ < span class ="cline-any cline-yes "> 96x</ span >
289+ < span class ="cline-any cline-yes "> 96x</ span >
269290< span class ="cline-any cline-yes "> 20x</ span >
270291< span class ="cline-any cline-yes "> 20x</ span >
271292< span class ="cline-any cline-yes "> 96x</ span >
@@ -275,9 +296,26 @@ <h1><a href="index.html">All files</a> assign.js</h1>
275296< span class ="cline-any cline-yes "> 20x</ span >
276297< span class ="cline-any cline-yes "> 20x</ span >
277298< span class ="cline-any cline-yes "> 56x</ span >
299+ < span class ="cline-any cline-yes "> 56x</ span >
300+ < span class ="cline-any cline-yes "> 56x</ span >
278301< span class ="cline-any cline-yes "> 96x</ span >
279302< span class ="cline-any cline-yes "> 47x</ span >
280303< span class ="cline-any cline-yes "> 47x</ span >
304+ < span class ="cline-any cline-yes "> 47x</ span >
305+ < span class ="cline-any cline-yes "> 38x</ span >
306+ < span class ="cline-any cline-yes "> 38x</ span >
307+ < span class ="cline-any cline-yes "> 38x</ span >
308+ < span class ="cline-any cline-yes "> 37x</ span >
309+ < span class ="cline-any cline-yes "> 37x</ span >
310+ < span class ="cline-any cline-yes "> 37x</ span >
311+ < span class ="cline-any cline-yes "> 37x</ span >
312+ < span class ="cline-any cline-yes "> 38x</ span >
313+ < span class ="cline-any cline-yes "> 38x</ span >
314+ < span class ="cline-any cline-yes "> 38x</ span >
315+ < span class ="cline-any cline-yes "> 9x</ span >
316+ < span class ="cline-any cline-yes "> 9x</ span >
317+ < span class ="cline-any cline-yes "> 9x</ span >
318+ < span class ="cline-any cline-yes "> 9x</ span >
281319< span class ="cline-any cline-yes "> 9x</ span >
282320< span class ="cline-any cline-yes "> 96x</ span >
283321< span class ="cline-any cline-yes "> 3x</ span >
@@ -307,7 +345,7 @@ <h1><a href="index.html">All files</a> assign.js</h1>
307345
308346// MODULES //
309347
310- var isNdarrayLike = require( '@stdlib/assert/is-ndarray-like' );
348+ var isndarrayLike = require( '@stdlib/assert/is-ndarray-like' );
311349var format = require( '@stdlib/string/format' );
312350var maybeBroadcastArrays = require( '@stdlib/ndarray/base/maybe-broadcast-arrays' );
313351var base = require( './base.js' );
@@ -375,21 +413,40 @@ <h1><a href="index.html">All files</a> assign.js</h1>
375413* // returns 5.0
376414*/
377415function assign( x, mask, out ) {
416+ var opts;
378417 var arrs;
379- if ( !isNdarrayLike( x ) ) {
418+ var key;
419+ if ( !isndarrayLike( x ) ) {
380420 throw new TypeError( format( 'invalid argument. First argument must be an ndarray-like object. Value: `%s`.', x ) );
381421 }
382- if ( !isNdarrayLike ( mask ) ) < span class ="branch-0 cbranch-no " title ="branch not covered " > {</ span >
422+ if ( !isndarrayLike ( mask ) ) < span class ="branch-0 cbranch-no " title ="branch not covered " > {</ span >
383423< span class ="cstat-no " title ="statement not covered " > throw new TypeError( format( 'invalid argument. Second argument must be an ndarray-like object. Value: `%s`.', mask ) );</ span >
384424< span class ="cstat-no " title ="statement not covered " > }</ span >
385- if ( !isNdarrayLike ( out ) ) {
425+ if ( !isndarrayLike ( out ) ) {
386426 throw new TypeError( format( 'invalid argument. Third argument must be an ndarray-like object. Value: `%s`.', out ) );
387427 }
388428 arrs = maybeBroadcastArrays( [ x, mask ] );
429+
430+ // Always explicitly specify output dtype to match the data input (first array):
389431 if ( arguments.length > 3 ) {
390- return base.assign( arrs[ 0 ], arrs[ 1 ], out, arguments[ 3 ] );
432+ opts = arguments[ 3 ];
433+ // Only add dtype if opts is an object and doesn't already have dtype specified:
434+ if ( opts !== null && typeof opts === 'object' && !Array.isArray( opts ) && opts.dtype === void 0 ) {
435+ // Create a new options object with all original properties plus dtype:
436+ var newOpts = {};
437+ for ( key in opts ) {
438+ if ( opts.hasOwnProperty( key ) ) {
439+ newOpts[ key ] = opts[ key ];
440+ }
441+ }
442+ newOpts.dtype = arrs[ 0 ].dtype;
443+ return base.assign( arrs[ 0 ], arrs[ 1 ], out, newOpts );
444+ }
445+ // Otherwise pass through as-is (will be validated by base):
446+ return base.assign( arrs[ 0 ], arrs[ 1 ], out, opts );
391447 }
392- return base.assign( arrs[ 0 ], arrs[ 1 ], out );
448+ opts = { 'dtype': arrs[ 0 ].dtype };
449+ return base.assign( arrs[ 0 ], arrs[ 1 ], out, opts );
393450}
394451
395452
@@ -403,7 +460,7 @@ <h1><a href="index.html">All files</a> assign.js</h1>
403460 < div class ='footer quiet pad2 space-top1 center small '>
404461 Code coverage generated by
405462 < a href ="https://istanbul.js.org/ " target ="_blank " rel ="noopener noreferrer "> istanbul</ a >
406- at 2025-12-17T19:27:43.228Z
463+ at 2025-12-18T09:22:16.543Z
407464 </ div >
408465 < script src ="prettify.js "> </ script >
409466 < script >
0 commit comments