@@ -25,14 +25,14 @@ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">blas/e
2525 < div class ='fl pad1y space-right2 '>
2626 < span class ="strong "> 100% </ span >
2727 < span class ="quiet "> Statements</ span >
28- < span class ='fraction '> 171/171 </ span >
28+ < span class ='fraction '> 167/167 </ span >
2929 </ div >
3030
3131
3232 < div class ='fl pad1y space-right2 '>
3333 < span class ="strong "> 100% </ span >
3434 < span class ="quiet "> Branches</ span >
35- < span class ='fraction '> 27/27 </ span >
35+ < span class ='fraction '> 25/25 </ span >
3636 </ div >
3737
3838
@@ -46,7 +46,7 @@ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">blas/e
4646 < div class ='fl pad1y space-right2 '>
4747 < span class ="strong "> 100% </ span >
4848 < span class ="quiet "> Lines</ span >
49- < span class ='fraction '> 171/171 </ span >
49+ < span class ='fraction '> 167/167 </ span >
5050 </ div >
5151
5252
@@ -230,11 +230,7 @@ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">blas/e
230230< a name ='L165 '> </ a > < a href ='#L165 '> 165</ a >
231231< a name ='L166 '> </ a > < a href ='#L166 '> 166</ a >
232232< a name ='L167 '> </ a > < a href ='#L167 '> 167</ a >
233- < a name ='L168 '> </ a > < a href ='#L168 '> 168</ a >
234- < a name ='L169 '> </ a > < a href ='#L169 '> 169</ a >
235- < a name ='L170 '> </ a > < a href ='#L170 '> 170</ a >
236- < a name ='L171 '> </ a > < a href ='#L171 '> 171</ a >
237- < a name ='L172 '> </ a > < a href ='#L172 '> 172</ a > </ td > < td class ="line-coverage quiet "> < span class ="cline-any cline-yes "> 3x</ span >
233+ < a name ='L168 '> </ a > < a href ='#L168 '> 168</ a > </ td > < td class ="line-coverage quiet "> < span class ="cline-any cline-yes "> 3x</ span >
238234< span class ="cline-any cline-yes "> 3x</ span >
239235< span class ="cline-any cline-yes "> 3x</ span >
240236< span class ="cline-any cline-yes "> 3x</ span >
@@ -335,53 +331,51 @@ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">blas/e
335331< span class ="cline-any cline-yes "> 159x</ span >
336332< span class ="cline-any cline-yes "> 159x</ span >
337333< span class ="cline-any cline-yes "> 159x</ span >
338- < span class ="cline-any cline-yes "> 159x</ span >
339334< span class ="cline-any cline-yes "> 41x</ span >
340335< span class ="cline-any cline-yes "> 41x</ span >
341336< span class ="cline-any cline-yes "> 159x</ span >
342337< span class ="cline-any cline-yes "> 41x</ span >
343338< span class ="cline-any cline-yes "> 41x</ span >
339+ < span class ="cline-any cline-yes "> 77x</ span >
340+ < span class ="cline-any cline-yes "> 77x</ span >
341+ < span class ="cline-any cline-yes "> 77x</ span >
342+ < span class ="cline-any cline-yes "> 77x</ span >
343+ < span class ="cline-any cline-yes "> 77x</ span >
344+ < span class ="cline-any cline-yes "> 77x</ span >
345+ < span class ="cline-any cline-yes "> 77x</ span >
346+ < span class ="cline-any cline-yes "> 77x</ span >
347+ < span class ="cline-any cline-yes "> 77x</ span >
344348< span class ="cline-any cline-yes "> 159x</ span >
345- < span class ="cline-any cline-yes "> 1x</ span >
346- < span class ="cline-any cline-yes "> 1x</ span >
347- < span class ="cline-any cline-yes "> 76x</ span >
348- < span class ="cline-any cline-yes "> 76x</ span >
349- < span class ="cline-any cline-yes "> 76x</ span >
350- < span class ="cline-any cline-yes "> 76x</ span >
351- < span class ="cline-any cline-yes "> 76x</ span >
352- < span class ="cline-any cline-yes "> 76x</ span >
353- < span class ="cline-any cline-yes "> 76x</ span >
354- < span class ="cline-any cline-yes "> 76x</ span >
355- < span class ="cline-any cline-yes "> 76x</ span >
356- < span class ="cline-any cline-yes "> 76x</ span >
357- < span class ="cline-any cline-yes "> 159x</ span >
358- < span class ="cline-any cline-yes "> 12x</ span >
359- < span class ="cline-any cline-yes "> 12x</ span >
360- < span class ="cline-any cline-yes "> 9x</ span >
361- < span class ="cline-any cline-yes "> 9x</ span >
362- < span class ="cline-any cline-yes "> 12x</ span >
349+ < span class ="cline-any cline-yes "> 13x</ span >
350+ < span class ="cline-any cline-yes "> 13x</ span >
351+ < span class ="cline-any cline-yes "> 10x</ span >
352+ < span class ="cline-any cline-yes "> 10x</ span >
353+ < span class ="cline-any cline-yes "> 13x</ span >
363354< span class ="cline-any cline-yes "> 64x</ span >
364355< span class ="cline-any cline-yes "> 64x</ span >
365- < span class ="cline-any cline-yes "> 30x</ span >
366- < span class ="cline-any cline-yes "> 30x</ span >
367- < span class ="cline-any cline-yes "> 30x</ span >
356+ < span class ="cline-any cline-yes "> 39x</ span >
357+ < span class ="cline-any cline-yes "> 39x</ span >
368358< span class ="cline-any cline-yes "> 1x</ span >
369359< span class ="cline-any cline-yes "> 1x</ span >
370- < span class ="cline-any cline-yes "> 30x</ span >
371- < span class ="cline-any cline-yes "> 29x</ span >
372- < span class ="cline-any cline-yes "> 9x</ span >
373- < span class ="cline-any cline-yes "> 9x</ span >
374- < span class ="cline-any cline-yes "> 20x</ span >
375- < span class ="cline-any cline-yes "> 20x</ span >
376- < span class ="cline-any cline-yes "> 30x</ span >
377- < span class ="cline-any cline-yes "> 34x</ span >
378- < span class ="cline-any cline-yes "> 34x</ span >
379- < span class ="cline-any cline-yes "> 34x</ span >
380- < span class ="cline-any cline-yes "> 34x</ span >
381- < span class ="cline-any cline-yes "> 34x</ span >
382- < span class ="cline-any cline-yes "> 34x</ span >
360+ < span class ="cline-any cline-yes "> 1x</ span >
361+ < span class ="cline-any cline-yes "> 38x</ span >
362+ < span class ="cline-any cline-yes "> 38x</ span >
363+ < span class ="cline-any cline-yes "> 38x</ span >
364+ < span class ="cline-any cline-yes "> 38x</ span >
365+ < span class ="cline-any cline-yes "> 38x</ span >
383366< span class ="cline-any cline-yes "> 18x</ span >
384367< span class ="cline-any cline-yes "> 18x</ span >
368+ < span class ="cline-any cline-yes "> 20x</ span >
369+ < span class ="cline-any cline-yes "> 20x</ span >
370+ < span class ="cline-any cline-yes "> 39x</ span >
371+ < span class ="cline-any cline-yes "> 25x</ span >
372+ < span class ="cline-any cline-yes "> 25x</ span >
373+ < span class ="cline-any cline-yes "> 25x</ span >
374+ < span class ="cline-any cline-yes "> 25x</ span >
375+ < span class ="cline-any cline-yes "> 25x</ span >
376+ < span class ="cline-any cline-yes "> 25x</ span >
377+ < span class ="cline-any cline-yes "> 9x</ span >
378+ < span class ="cline-any cline-yes "> 9x</ span >
385379< span class ="cline-any cline-yes "> 16x</ span >
386380< span class ="cline-any cline-yes "> 16x</ span >
387381< span class ="cline-any cline-yes "> 159x</ span >
@@ -393,8 +387,6 @@ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">blas/e
393387< span class ="cline-any cline-yes "> 21x</ span >
394388< span class ="cline-any cline-yes "> 21x</ span >
395389< span class ="cline-any cline-yes "> 36x</ span >
396- < span class ="cline-any cline-yes "> 26x</ span >
397- < span class ="cline-any cline-yes "> 26x</ span >
398390< span class ="cline-any cline-yes "> 159x</ span >
399391< span class ="cline-any cline-yes "> 1x</ span >
400392< span class ="cline-any cline-yes "> 1x</ span >
@@ -431,15 +423,15 @@ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">blas/e
431423var isFunction = require( '@stdlib/assert/is-function' );
432424var isPlainObject = require( '@stdlib/assert/is-plain-object' );
433425var isndarrayLike = require( '@stdlib/assert/is-ndarray-like' );
434- var getShape = require( '@stdlib/ndarray/shape ' );
426+ var ndims = require( '@stdlib/ndarray/ndims ' );
435427var format = require( '@stdlib/string/format' );
436428var base = require( './base.js' ).assign;
437429
438430
439431// MAIN //
440432
441433/**
442- * Returns the first index of an element along an ndarray dimension which passes a test implemented by a predicate function and assigns the results to a provided output ndarray.
434+ * Returns the index of the first element along an ndarray dimension which passes a test implemented by a predicate function and assigns the results to a provided output ndarray.
443435*
444436* @param {ndarrayLike} x - input ndarray
445437* @param {ndarrayLike} out - output ndarray
@@ -450,7 +442,7 @@ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">blas/e
450442* @throws {TypeError} function must be provided at least three arguments
451443* @throws {TypeError} first argument must be an ndarray-like object
452444* @throws {TypeError} second argument must be an ndarray-like object
453- * @throws {TypeError} third argument must be a function
445+ * @throws {TypeError} callback argument must be a function
454446* @throws {TypeError} options argument must be an object
455447* @throws {RangeError} dimension index must not exceed input ndarray bounds
456448* @throws {RangeError} first argument must have at least one dimension
@@ -503,7 +495,6 @@ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">blas/e
503495 var opts;
504496 var ctx;
505497 var cb;
506- var sh;
507498
508499 nargs = arguments.length;
509500 if ( !isndarrayLike( x ) ) {
@@ -512,10 +503,6 @@ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">blas/e
512503 if ( !isndarrayLike( out ) ) {
513504 throw new TypeError( format( 'invalid argument. The second argument must be an ndarray. Value: `%s`.', out ) );
514505 }
515- if ( nargs < 3 ) {
516- throw new TypeError( format( 'invalid argument. Function must be provided a callback function. Value: `%s`.', arguments[ 2 ] ) );
517- }
518-
519506 // Initialize an options object:
520507 opts = {
521508 'dims': [ -1 ] // default behavior is to perform a reduction over the last dimension
@@ -525,35 +512,38 @@ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">blas/e
525512 hasOptions = false;
526513
527514 // Case: assign( x, out, clbk )
528- if ( nargs == = 3 ) {
515+ if ( nargs < = 3 ) {
529516 cb = arguments[ 2 ];
530517 if ( !isFunction( cb ) ) {
531- throw new TypeError( format( 'invalid argument. Second argument must be a function. Value: `%s`.', cb ) );
518+ throw new TypeError( format( 'invalid argument. Third argument must be a function. Value: `%s`.', cb ) );
532519 }
533520 }
534- // Case: assign( x, out, options, clbk ) or Case: assign( x, out, clbk, thisArg )
535- else if ( nargs < 5 ) {
536- options = arguments[ 2 ];
537- cb = arguments[ 3 ];
538- if ( isFunction( options ) ) {
539- ctx = cb;
540- cb = options;
541- } else {
521+ // Case: assign( x, out, ???, ??? )
522+ else if ( nargs === 4 ) {
523+ // Case: assign( x, out, clbk, thisArg )
524+ if ( isFunction( arguments[ 2 ] ) ) {
525+ cb = arguments[ 2 ];
526+ ctx = arguments[ 3 ];
527+ }
528+ // Case: assign( x, out, options, clbk )
529+ else {
530+ options = arguments[ 2 ];
531+ cb = arguments[ 3 ];
542532 if ( !isFunction( cb ) ) {
543- throw new TypeError( format( 'invalid argument. Second argument must be a function. Value: `%s`.', cb ) );
533+ throw new TypeError( format( 'invalid argument. Fourth argument must be a function. Value: `%s`.', cb ) );
544534 }
545535 hasOptions = true;
546536 }
547537 }
548538 // Case: assign( x, out, options, clbk, thisArg )
549539 else {
550540 options = arguments[ 2 ];
551- hasOptions = true;
552541 cb = arguments[ 3 ];
542+ ctx = arguments[ 4 ];
553543 if ( !isFunction( cb ) ) {
554- throw new TypeError( format( 'invalid argument. Second argument must be a function. Value: `%s`.', cb ) );
544+ throw new TypeError( format( 'invalid argument. Fourth argument must be a function. Value: `%s`.', cb ) );
555545 }
556- ctx = arguments[ 4 ] ;
546+ hasOptions = true ;
557547 }
558548 if ( hasOptions ) {
559549 if ( !isPlainObject( options ) ) {
@@ -564,9 +554,7 @@ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">blas/e
564554 opts.dims[ 0 ] = options.dim;
565555 }
566556 }
567- // Resolve the list of non-reduced dimensions:
568- sh = getShape( x );
569- if ( sh.length < 1 ) {
557+ if ( ndims( x ) < 1 ) {
570558 throw new RangeError( 'invalid argument. First argument must have at least one dimension.' );
571559 }
572560 return base( x, out, opts, cb, ctx );
@@ -583,7 +571,7 @@ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">blas/e
583571 < div class ='footer quiet pad2 space-top1 center small '>
584572 Code coverage generated by
585573 < a href ="https://istanbul.js.org/ " target ="_blank " rel ="noopener noreferrer "> istanbul</ a >
586- at 2025-08-12T03:46:35.996Z
574+ at 2025-08-12T04:16:10.929Z
587575 </ div >
588576 < script src ="../../../../prettify.js "> </ script >
589577 < script >
0 commit comments