@@ -25,14 +25,14 @@ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">blas/e
25
25
< div class ='fl pad1y space-right2 '>
26
26
< span class ="strong "> 100% </ span >
27
27
< span class ="quiet "> Statements</ span >
28
- < span class ='fraction '> 142/142 </ span >
28
+ < span class ='fraction '> 170/170 </ span >
29
29
</ div >
30
30
31
31
32
32
< div class ='fl pad1y space-right2 '>
33
33
< span class ="strong "> 100% </ span >
34
34
< span class ="quiet "> Branches</ span >
35
- < span class ='fraction '> 20/20 </ span >
35
+ < span class ='fraction '> 35/35 </ span >
36
36
</ div >
37
37
38
38
@@ -46,7 +46,7 @@ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">blas/e
46
46
< div class ='fl pad1y space-right2 '>
47
47
< span class ="strong "> 100% </ span >
48
48
< span class ="quiet "> Lines</ span >
49
- < span class ='fraction '> 142/142 </ span >
49
+ < span class ='fraction '> 170/170 </ span >
50
50
</ div >
51
51
52
52
@@ -205,7 +205,35 @@ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">blas/e
205
205
< a name ='L140 '> </ a > < a href ='#L140 '> 140</ a >
206
206
< a name ='L141 '> </ a > < a href ='#L141 '> 141</ a >
207
207
< a name ='L142 '> </ a > < a href ='#L142 '> 142</ a >
208
- < a name ='L143 '> </ a > < a href ='#L143 '> 143</ a > </ td > < td class ="line-coverage quiet "> < span class ="cline-any cline-yes "> 1x</ span >
208
+ < a name ='L143 '> </ a > < a href ='#L143 '> 143</ a >
209
+ < a name ='L144 '> </ a > < a href ='#L144 '> 144</ a >
210
+ < a name ='L145 '> </ a > < a href ='#L145 '> 145</ a >
211
+ < a name ='L146 '> </ a > < a href ='#L146 '> 146</ a >
212
+ < a name ='L147 '> </ a > < a href ='#L147 '> 147</ a >
213
+ < a name ='L148 '> </ a > < a href ='#L148 '> 148</ a >
214
+ < a name ='L149 '> </ a > < a href ='#L149 '> 149</ a >
215
+ < a name ='L150 '> </ a > < a href ='#L150 '> 150</ a >
216
+ < a name ='L151 '> </ a > < a href ='#L151 '> 151</ a >
217
+ < a name ='L152 '> </ a > < a href ='#L152 '> 152</ a >
218
+ < a name ='L153 '> </ a > < a href ='#L153 '> 153</ a >
219
+ < a name ='L154 '> </ a > < a href ='#L154 '> 154</ a >
220
+ < a name ='L155 '> </ a > < a href ='#L155 '> 155</ a >
221
+ < a name ='L156 '> </ a > < a href ='#L156 '> 156</ a >
222
+ < a name ='L157 '> </ a > < a href ='#L157 '> 157</ a >
223
+ < a name ='L158 '> </ a > < a href ='#L158 '> 158</ a >
224
+ < a name ='L159 '> </ a > < a href ='#L159 '> 159</ a >
225
+ < a name ='L160 '> </ a > < a href ='#L160 '> 160</ a >
226
+ < a name ='L161 '> </ a > < a href ='#L161 '> 161</ a >
227
+ < a name ='L162 '> </ a > < a href ='#L162 '> 162</ a >
228
+ < a name ='L163 '> </ a > < a href ='#L163 '> 163</ a >
229
+ < a name ='L164 '> </ a > < a href ='#L164 '> 164</ a >
230
+ < a name ='L165 '> </ a > < a href ='#L165 '> 165</ a >
231
+ < a name ='L166 '> </ a > < a href ='#L166 '> 166</ a >
232
+ < 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 > </ td > < td class ="line-coverage quiet "> < span class ="cline-any cline-yes "> 1x</ span >
209
237
< span class ="cline-any cline-yes "> 1x</ span >
210
238
< span class ="cline-any cline-yes "> 1x</ span >
211
239
< span class ="cline-any cline-yes "> 1x</ span >
@@ -283,65 +311,93 @@ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">blas/e
283
311
< span class ="cline-any cline-yes "> 1x</ span >
284
312
< span class ="cline-any cline-yes "> 1x</ span >
285
313
< span class ="cline-any cline-yes "> 1x</ span >
286
- < span class ="cline-any cline-yes "> 192x</ span >
287
- < span class ="cline-any cline-yes "> 192x</ span >
288
- < span class ="cline-any cline-yes "> 192x</ span >
289
- < span class ="cline-any cline-yes "> 192x</ span >
290
- < span class ="cline-any cline-yes "> 192x</ span >
291
- < span class ="cline-any cline-yes "> 192x</ span >
292
- < span class ="cline-any cline-yes "> 192x</ span >
293
- < span class ="cline-any cline-yes "> 192x</ span >
294
- < span class ="cline-any cline-yes "> 192x</ span >
295
- < span class ="cline-any cline-yes "> 192x</ span >
296
- < span class ="cline-any cline-yes "> 192x</ span >
297
- < span class ="cline-any cline-yes "> 192x</ span >
298
- < span class ="cline-any cline-yes "> 192x</ span >
299
- < span class ="cline-any cline-yes "> 192x</ span >
314
+ < span class ="cline-any cline-yes "> 1x</ span >
315
+ < span class ="cline-any cline-yes "> 198x</ span >
316
+ < span class ="cline-any cline-yes "> 198x</ span >
317
+ < span class ="cline-any cline-yes "> 198x</ span >
318
+ < span class ="cline-any cline-yes "> 198x</ span >
319
+ < span class ="cline-any cline-yes "> 198x</ span >
320
+ < span class ="cline-any cline-yes "> 198x</ span >
321
+ < span class ="cline-any cline-yes "> 198x</ span >
322
+ < span class ="cline-any cline-yes "> 198x</ span >
323
+ < span class ="cline-any cline-yes "> 198x</ span >
324
+ < span class ="cline-any cline-yes "> 198x</ span >
325
+ < span class ="cline-any cline-yes "> 198x</ span >
326
+ < span class ="cline-any cline-yes "> 198x</ span >
327
+ < span class ="cline-any cline-yes "> 198x</ span >
328
+ < span class ="cline-any cline-yes "> 198x</ span >
300
329
< span class ="cline-any cline-yes "> 3x</ span >
301
330
< span class ="cline-any cline-yes "> 3x</ span >
302
- < span class ="cline-any cline-yes "> 129x </ span >
303
- < span class ="cline-any cline-yes "> 129x </ span >
304
- < span class ="cline-any cline-yes "> 129x </ span >
305
- < span class ="cline-any cline-yes "> 192x </ span >
306
- < span class ="cline-any cline-yes "> 51x </ span >
307
- < span class ="cline-any cline-yes "> 51x </ span >
331
+ < span class ="cline-any cline-yes "> 135x </ span >
332
+ < span class ="cline-any cline-yes "> 135x </ span >
333
+ < span class ="cline-any cline-yes "> 135x </ span >
334
+ < span class ="cline-any cline-yes "> 198x </ span >
335
+ < span class ="cline-any cline-yes "> 55x </ span >
336
+ < span class ="cline-any cline-yes "> 55x </ span >
308
337
< span class ="cline-any cline-yes "> 6x</ span >
309
338
< span class ="cline-any cline-yes "> 6x</ span >
310
339
< span class ="cline-any cline-yes "> 6x</ span >
311
- < span class ="cline-any cline-yes "> 45x </ span >
312
- < span class ="cline-any cline-yes "> 51x </ span >
340
+ < span class ="cline-any cline-yes "> 49x </ span >
341
+ < span class ="cline-any cline-yes "> 55x </ span >
313
342
< span class ="cline-any cline-yes "> 3x</ span >
314
343
< span class ="cline-any cline-yes "> 3x</ span >
315
- < span class ="cline-any cline-yes "> 42x</ span >
316
- < span class ="cline-any cline-yes "> 42x</ span >
317
- < span class ="cline-any cline-yes "> 42x</ span >
318
- < span class ="cline-any cline-yes "> 42x</ span >
319
- < span class ="cline-any cline-yes "> 42x</ span >
320
- < span class ="cline-any cline-yes "> 42x</ span >
321
- < span class ="cline-any cline-yes "> 78x</ span >
322
- < span class ="cline-any cline-yes "> 78x</ span >
323
- < span class ="cline-any cline-yes "> 78x</ span >
324
- < span class ="cline-any cline-yes "> 78x</ span >
344
+ < span class ="cline-any cline-yes "> 46x</ span >
345
+ < span class ="cline-any cline-yes "> 55x</ span >
346
+ < span class ="cline-any cline-yes "> 6x</ span >
347
+ < span class ="cline-any cline-yes "> 2x</ span >
348
+ < span class ="cline-any cline-yes "> 6x</ span >
349
+ < span class ="cline-any cline-yes "> 2x</ span >
350
+ < span class ="cline-any cline-yes "> 2x</ span >
351
+ < span class ="cline-any cline-yes "> 2x</ span >
352
+ < span class ="cline-any cline-yes "> 2x</ span >
353
+ < span class ="cline-any cline-yes "> 4x</ span >
354
+ < span class ="cline-any cline-yes "> 4x</ span >
355
+ < span class ="cline-any cline-yes "> 40x</ span >
356
+ < span class ="cline-any cline-yes "> 40x</ span >
357
+ < span class ="cline-any cline-yes "> 40x</ span >
358
+ < span class ="cline-any cline-yes "> 40x</ span >
359
+ < span class ="cline-any cline-yes "> 40x</ span >
360
+ < span class ="cline-any cline-yes "> 40x</ span >
361
+ < span class ="cline-any cline-yes "> 80x</ span >
362
+ < span class ="cline-any cline-yes "> 80x</ span >
363
+ < span class ="cline-any cline-yes "> 80x</ span >
364
+ < span class ="cline-any cline-yes "> 80x</ span >
325
365
< span class ="cline-any cline-yes "> 120x</ span >
326
- < span class ="cline-any cline-yes "> 192x </ span >
366
+ < span class ="cline-any cline-yes "> 198x </ span >
327
367
< span class ="cline-any cline-yes "> 38x</ span >
328
368
< span class ="cline-any cline-yes "> 38x</ span >
329
369
< span class ="cline-any cline-yes "> 23x</ span >
330
370
< span class ="cline-any cline-yes "> 23x</ span >
331
371
< span class ="cline-any cline-yes "> 38x</ span >
332
372
< span class ="cline-any cline-yes "> 82x</ span >
333
373
< span class ="cline-any cline-yes "> 82x</ span >
334
- < span class ="cline-any cline-yes "> 75x </ span >
374
+ < span class ="cline-any cline-yes "> 73x </ span >
335
375
< span class ="cline-any cline-yes "> 48x</ span >
336
- < span class ="cline-any cline-yes "> 75x</ span >
337
- < span class ="cline-any cline-yes "> 27x</ span >
338
- < span class ="cline-any cline-yes "> 27x</ span >
339
- < span class ="cline-any cline-yes "> 71x</ span >
340
- < span class ="cline-any cline-yes "> 82x</ span >
341
- < span class ="cline-any cline-yes "> 7x</ span >
342
- < span class ="cline-any cline-yes "> 7x</ span >
376
+ < span class ="cline-any cline-yes "> 73x</ span >
377
+ < span class ="cline-any cline-yes "> 25x</ span >
378
+ < span class ="cline-any cline-yes "> 25x</ span >
379
+ < span class ="cline-any cline-yes "> 69x</ span >
380
+ < span class ="cline-any cline-yes "> 69x</ span >
381
+ < span class ="cline-any cline-yes "> 9x</ span >
382
+ < span class ="cline-any cline-yes "> 9x</ span >
383
+ < span class ="cline-any cline-yes "> 3x</ span >
384
+ < span class ="cline-any cline-yes "> 1x</ span >
385
+ < span class ="cline-any cline-yes "> 3x</ span >
386
+ < span class ="cline-any cline-yes "> 1x</ span >
387
+ < span class ="cline-any cline-yes "> 1x</ span >
388
+ < span class ="cline-any cline-yes "> 1x</ span >
389
+ < span class ="cline-any cline-yes "> 1x</ span >
390
+ < span class ="cline-any cline-yes "> 3x</ span >
391
+ < span class ="cline-any cline-yes "> 1x</ span >
392
+ < span class ="cline-any cline-yes "> 1x</ span >
393
+ < span class ="cline-any cline-yes "> 1x</ span >
394
+ < span class ="cline-any cline-yes "> 1x</ span >
395
+ < span class ="cline-any cline-yes "> 2x</ span >
396
+ < span class ="cline-any cline-yes "> 9x</ span >
397
+ < span class ="cline-any cline-yes "> 6x</ span >
398
+ < span class ="cline-any cline-yes "> 6x</ span >
343
399
< span class ="cline-any cline-yes "> 107x</ span >
344
- < span class ="cline-any cline-yes "> 192x </ span >
400
+ < span class ="cline-any cline-yes "> 198x </ span >
345
401
< span class ="cline-any cline-yes "> 1x</ span >
346
402
< span class ="cline-any cline-yes "> 1x</ span >
347
403
< span class ="cline-any cline-yes "> 1x</ span >
@@ -371,6 +427,7 @@ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">blas/e
371
427
372
428
var hasOwnProp = require( '@stdlib/assert/has-own-property' );
373
429
var isNumber = require( '@stdlib/assert/is-number' ).isPrimitive;
430
+ var isString = require( '@stdlib/assert/is-string' ).isPrimitive;
374
431
var isndarrayLike = require( '@stdlib/assert/is-ndarray-like' );
375
432
var broadcastScalar = require( '@stdlib/ndarray/base/broadcast-scalar' );
376
433
var maybeBroadcastArray = require( '@stdlib/ndarray/base/maybe-broadcast-array' );
@@ -387,11 +444,11 @@ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">blas/e
387
444
* Sorts an input ndarray along one or more ndarray dimensions using heapsort.
388
445
*
389
446
* @param {ndarrayLike} x - input ndarray
390
- * @param {(ndarrayLike|number)} [sortOrder] - sort order
447
+ * @param {(ndarrayLike|number|string )} [sortOrder] - sort order
391
448
* @param {Options} [options] - function options
392
449
* @param {IntegerArray} [options.dims] - list of dimensions over which to perform operation
393
450
* @throws {TypeError} first argument must be an ndarray-like object
394
- * @throws {TypeError} sort order argument must be either an ndarray-like object or a numeric value
451
+ * @throws {TypeError} sort order argument must be either an ndarray-like object, a numeric value, or a valid string
395
452
* @throws {TypeError} options argument must be an object
396
453
* @throws {RangeError} dimension indices must not exceed input ndarray bounds
397
454
* @throws {RangeError} number of dimension indices must not exceed the number of input ndarray dimensions
@@ -454,6 +511,17 @@ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">blas/e
454
511
if ( isNumber( o ) ) {
455
512
return base( x, broadcastScalar( o, 'generic', [], ord ) );
456
513
}
514
+ // Case: sorthp( x, sortOrder_string )
515
+ if ( isString( o ) ) {
516
+ if ( o === 'asc' || o === 'ascending' ) {
517
+ o = 1.0;
518
+ } else if ( o === 'dsc' || o === 'descending' ) {
519
+ o = -1.0;
520
+ } else {
521
+ throw new TypeError( format( 'invalid argument. Second argument must be a valid sort order. Value: `%s`.', o ) );
522
+ }
523
+ return base( x, broadcastScalar( o, 'generic', [], ord ) );
524
+ }
457
525
// Case: sorthp( x, opts )
458
526
opts = o;
459
527
o = 1.0;
@@ -479,8 +547,24 @@ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">blas/e
479
547
sh = [];
480
548
}
481
549
o = broadcastScalar( o, 'generic', sh, getOrder( x ) );
550
+ }
551
+ // Case: sorthp( x, sortOrder_string, opts )
552
+ else if ( isString( o ) ) {
553
+ if ( o === 'asc' || o === 'ascending' ) {
554
+ o = 1.0;
555
+ } else if ( o === 'dsc' || o === 'descending' ) {
556
+ o = -1.0;
557
+ } else {
558
+ throw new TypeError( format( 'invalid argument. Second argument must be a valid sort order. Value: `%s`.', o ) );
559
+ }
560
+ if ( hasOwnProp( opts, 'dims' ) ) {
561
+ sh = nonCoreShape( getShape( x ), opts.dims );
562
+ } else {
563
+ sh = [];
564
+ }
565
+ o = broadcastScalar( o, 'generic', sh, getOrder( x ) );
482
566
} else {
483
- throw new TypeError( format( 'invalid argument. Second argument must be either an ndarray or a numeric scalar value. Value: `%s`.', o ) );
567
+ throw new TypeError( format( 'invalid argument. Second argument must be either an ndarray, a numeric scalar value, or a valid sort order string . Value: `%s`.', o ) );
484
568
}
485
569
return base( x, o, opts );
486
570
}
@@ -496,7 +580,7 @@ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">blas/e
496
580
< div class ='footer quiet pad2 space-top1 center small '>
497
581
Code coverage generated by
498
582
< a href ="https://istanbul.js.org/ " target ="_blank " rel ="noopener noreferrer "> istanbul</ a >
499
- at 2025-09-18T22:01:17.199Z
583
+ at 2025-09-20T11:15:26.690Z
500
584
</ div >
501
585
< script src ="../../../../prettify.js "> </ script >
502
586
< script >
0 commit comments