@@ -25,14 +25,14 @@ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">ndarra
2525 < div class ='fl pad1y space-right2 '>
2626 < span class ="strong "> 100% </ span >
2727 < span class ="quiet "> Statements</ span >
28- < span class ='fraction '> 149/149 </ span >
28+ < span class ='fraction '> 81/81 </ 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 '> 8/8 </ span >
35+ < span class ='fraction '> 2/2 </ span >
3636 </ div >
3737
3838
@@ -46,7 +46,7 @@ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">ndarra
4646 < div class ='fl pad1y space-right2 '>
4747 < span class ="strong "> 100% </ span >
4848 < span class ="quiet "> Lines</ span >
49- < span class ='fraction '> 149/149 </ span >
49+ < span class ='fraction '> 81/81 </ span >
5050 </ div >
5151
5252
@@ -144,75 +144,7 @@ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">ndarra
144144< a name ='L79 '> </ a > < a href ='#L79 '> 79</ a >
145145< a name ='L80 '> </ a > < a href ='#L80 '> 80</ a >
146146< a name ='L81 '> </ a > < a href ='#L81 '> 81</ a >
147- < a name ='L82 '> </ a > < a href ='#L82 '> 82</ a >
148- < a name ='L83 '> </ a > < a href ='#L83 '> 83</ a >
149- < a name ='L84 '> </ a > < a href ='#L84 '> 84</ a >
150- < a name ='L85 '> </ a > < a href ='#L85 '> 85</ a >
151- < a name ='L86 '> </ a > < a href ='#L86 '> 86</ a >
152- < a name ='L87 '> </ a > < a href ='#L87 '> 87</ a >
153- < a name ='L88 '> </ a > < a href ='#L88 '> 88</ a >
154- < a name ='L89 '> </ a > < a href ='#L89 '> 89</ a >
155- < a name ='L90 '> </ a > < a href ='#L90 '> 90</ a >
156- < a name ='L91 '> </ a > < a href ='#L91 '> 91</ a >
157- < a name ='L92 '> </ a > < a href ='#L92 '> 92</ a >
158- < a name ='L93 '> </ a > < a href ='#L93 '> 93</ a >
159- < a name ='L94 '> </ a > < a href ='#L94 '> 94</ a >
160- < a name ='L95 '> </ a > < a href ='#L95 '> 95</ a >
161- < a name ='L96 '> </ a > < a href ='#L96 '> 96</ a >
162- < a name ='L97 '> </ a > < a href ='#L97 '> 97</ a >
163- < a name ='L98 '> </ a > < a href ='#L98 '> 98</ a >
164- < a name ='L99 '> </ a > < a href ='#L99 '> 99</ a >
165- < a name ='L100 '> </ a > < a href ='#L100 '> 100</ a >
166- < a name ='L101 '> </ a > < a href ='#L101 '> 101</ a >
167- < a name ='L102 '> </ a > < a href ='#L102 '> 102</ a >
168- < a name ='L103 '> </ a > < a href ='#L103 '> 103</ a >
169- < a name ='L104 '> </ a > < a href ='#L104 '> 104</ a >
170- < a name ='L105 '> </ a > < a href ='#L105 '> 105</ a >
171- < a name ='L106 '> </ a > < a href ='#L106 '> 106</ a >
172- < a name ='L107 '> </ a > < a href ='#L107 '> 107</ a >
173- < a name ='L108 '> </ a > < a href ='#L108 '> 108</ a >
174- < a name ='L109 '> </ a > < a href ='#L109 '> 109</ a >
175- < a name ='L110 '> </ a > < a href ='#L110 '> 110</ a >
176- < a name ='L111 '> </ a > < a href ='#L111 '> 111</ a >
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 >
197- < a name ='L132 '> </ a > < a href ='#L132 '> 132</ a >
198- < a name ='L133 '> </ a > < a href ='#L133 '> 133</ a >
199- < a name ='L134 '> </ a > < a href ='#L134 '> 134</ a >
200- < a name ='L135 '> </ a > < a href ='#L135 '> 135</ a >
201- < a name ='L136 '> </ a > < a href ='#L136 '> 136</ a >
202- < a name ='L137 '> </ a > < a href ='#L137 '> 137</ a >
203- < a name ='L138 '> </ a > < a href ='#L138 '> 138</ a >
204- < a name ='L139 '> </ a > < a href ='#L139 '> 139</ a >
205- < a name ='L140 '> </ a > < a href ='#L140 '> 140</ a >
206- < a name ='L141 '> </ a > < a href ='#L141 '> 141</ a >
207- < a name ='L142 '> </ a > < a href ='#L142 '> 142</ a >
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 > </ td > < td class ="line-coverage quiet "> < span class ="cline-any cline-yes "> 1x</ span >
147+ < a name ='L82 '> </ a > < a href ='#L82 '> 82</ a > </ td > < td class ="line-coverage quiet "> < span class ="cline-any cline-yes "> 1x</ span >
216148< span class ="cline-any cline-yes "> 1x</ span >
217149< span class ="cline-any cline-yes "> 1x</ span >
218150< span class ="cline-any cline-yes "> 1x</ span >
@@ -279,74 +211,6 @@ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">ndarra
279211< span class ="cline-any cline-yes "> 1x</ span >
280212< span class ="cline-any cline-yes "> 1x</ span >
281213< span class ="cline-any cline-yes "> 1x</ span >
282- < span class ="cline-any cline-yes "> 1x</ span >
283- < span class ="cline-any cline-yes "> 1x</ span >
284- < span class ="cline-any cline-yes "> 1x</ span >
285- < span class ="cline-any cline-yes "> 1x</ span >
286- < span class ="cline-any cline-yes "> 1x</ span >
287- < span class ="cline-any cline-yes "> 1x</ span >
288- < span class ="cline-any cline-yes "> 1x</ span >
289- < span class ="cline-any cline-yes "> 1x</ span >
290- < span class ="cline-any cline-yes "> 1x</ span >
291- < span class ="cline-any cline-yes "> 1x</ span >
292- < span class ="cline-any cline-yes "> 6x</ span >
293- < span class ="cline-any cline-yes "> 6x</ span >
294- < span class ="cline-any cline-yes "> 6x</ span >
295- < span class ="cline-any cline-yes "> 6x</ span >
296- < span class ="cline-any cline-yes "> 6x</ span >
297- < span class ="cline-any cline-yes "> 6x</ span >
298- < span class ="cline-any cline-yes "> 6x</ span >
299- < span class ="cline-any cline-yes "> 6x</ span >
300- < span class ="cline-any cline-yes "> 6x</ span >
301- < span class ="cline-any cline-yes "> 6x</ span >
302- < span class ="cline-any cline-yes "> 6x</ span >
303- < span class ="cline-any cline-yes "> 6x</ span >
304- < span class ="cline-any cline-yes "> 6x</ span >
305- < span class ="cline-any cline-yes "> 6x</ span >
306- < span class ="cline-any cline-yes "> 6x</ span >
307- < span class ="cline-any cline-yes "> 6x</ span >
308- < span class ="cline-any cline-yes "> 6x</ span >
309- < span class ="cline-any cline-yes "> 6x</ span >
310- < span class ="cline-any cline-yes "> 6x</ span >
311- < span class ="cline-any cline-yes "> 6x</ span >
312- < span class ="cline-any cline-yes "> 6x</ span >
313- < span class ="cline-any cline-yes "> 6x</ span >
314- < span class ="cline-any cline-yes "> 6x</ span >
315- < span class ="cline-any cline-yes "> 6x</ span >
316- < span class ="cline-any cline-yes "> 6x</ span >
317- < span class ="cline-any cline-yes "> 6x</ span >
318- < span class ="cline-any cline-yes "> 6x</ span >
319- < span class ="cline-any cline-yes "> 2x</ span >
320- < span class ="cline-any cline-yes "> 2x</ span >
321- < span class ="cline-any cline-yes "> 6x</ span >
322- < span class ="cline-any cline-yes "> 1x</ span >
323- < span class ="cline-any cline-yes "> 1x</ span >
324- < span class ="cline-any cline-yes "> 1x</ span >
325- < span class ="cline-any cline-yes "> 1x</ span >
326- < span class ="cline-any cline-yes "> 1x</ span >
327- < span class ="cline-any cline-yes "> 1x</ span >
328- < span class ="cline-any cline-yes "> 1x</ span >
329- < span class ="cline-any cline-yes "> 4x</ span >
330- < span class ="cline-any cline-yes "> 3x</ span >
331- < span class ="cline-any cline-yes "> 3x</ span >
332- < span class ="cline-any cline-yes "> 3x</ span >
333- < span class ="cline-any cline-yes "> 9x</ span >
334- < span class ="cline-any cline-yes "> 9x</ span >
335- < span class ="cline-any cline-yes "> 4x</ span >
336- < span class ="cline-any cline-yes "> 4x</ span >
337- < span class ="cline-any cline-yes "> 4x</ span >
338- < span class ="cline-any cline-yes "> 9x</ span >
339- < span class ="cline-any cline-yes "> 3x</ span >
340- < span class ="cline-any cline-yes "> 3x</ span >
341- < span class ="cline-any cline-yes "> 3x</ span >
342- < span class ="cline-any cline-yes "> 6x</ span >
343- < span class ="cline-any cline-yes "> 6x</ span >
344- < span class ="cline-any cline-yes "> 6x</ span >
345- < span class ="cline-any cline-yes "> 6x</ span >
346- < span class ="cline-any cline-yes "> 6x</ span >
347- < span class ="cline-any cline-yes "> 6x</ span >
348- < span class ="cline-any cline-yes "> 6x</ span >
349- < span class ="cline-any cline-yes "> 6x</ span >
350214< span class ="cline-any cline-yes "> 6x</ span >
351215< span class ="cline-any cline-yes "> 6x</ span >
352216< span class ="cline-any cline-yes "> 6x</ span >
@@ -383,17 +247,7 @@ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">ndarra
383247
384248// MODULES //
385249
386- var zeroTo = require( '@stdlib/array/base/zero-to' );
387- var copy = require( '@stdlib/array/base/copy-indexed' );
388- var take = require( '@stdlib/array/base/take-indexed' );
389- var strides2order = require( '@stdlib/ndarray/base/strides2order' );
390- var sort2ins = require( './sort2ins.js' );
391-
392-
393- // VARIABLES //
394-
395- // Number of arrays:
396- var N = 3;
250+ var loopOrder = require( '@stdlib/ndarray/base/loop-interchange-order' );
397251
398252
399253// MAIN //
@@ -423,7 +277,7 @@ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">ndarra
423277* var sy = [ 24, 8, 1 ]; // row-major
424278* var sz = [ 1, -2, 6 ]; // column-major
425279*
426- * var o = loopOrder ( sh, sx, sy, sz );
280+ * var o = binaryLoopOrder ( sh, sx, sy, sz );
427281* // returns {...}
428282*
429283* var ssh = o.sh;
@@ -438,86 +292,28 @@ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">ndarra
438292* var ssz = o.sz;
439293* // returns [ 6, -2, 1 ]
440294*/
441- function loopOrder( sh, sx, sy, sz ) {
442- var idx;
443- var tmp;
444- var max;
445- var len;
446- var arr;
447- var ox;
448- var oy;
449- var oz;
450- var i;
451- var j;
452-
453- // Initialize a loop interchange index array for generating a loop order permutation:
454- idx = zeroTo( sh.length );
455-
456- // Determine the order (layout) of each array:
457- ox = strides2order( sx );
458- oy = strides2order( sy );
459- oz = strides2order( sz );
460-
461- // Determine which array should be used to generate the loop order:
462- tmp = [ [], [], [], [] ];
463- tmp[ ox ].push( sx );
464- tmp[ oy ].push( sy );
465- tmp[ oz ].push( sz );
466- max = tmp[ 0 ].length;
467- if ( max === N ) {
468- // If all arrays are "disorganized", then just use the first array, as, generally, each array is likely to be as un-ideal as every other:
469- arr = sx;
470- } else if ( max === N-1 ) {
471- // If all but one array is "disorganized", find the "organized" array...
472- for ( i = 1; i < 4; i++ ) {
473- if ( tmp[ i ].length ) {
474- arr = tmp[ i ][ 0 ];
475- break;
476- }
477- }
478- } else {
479- // Find the layout which is most common...
480- j = 0;
481- for ( i = 1; i < 4; i++ ) {
482- len = tmp[ i ].length;
483- if ( len >= max ) {
484- max = len;
485- j = i;
486- }
487- }
488- // Use the strides of the first array having the most common layout:
489- arr = tmp[ j ][ 0 ];
490- }
491- // Sort array strides in increasing order (of magnitude):
492- arr = copy( arr );
493- sort2ins( arr, idx );
494-
495- // Permute the shape and array strides based on the sorted strides:
496- sh = take( sh, idx );
497- sx = take( sx, idx );
498- sy = take( sy, idx );
499- sz = take( sz, idx );
500-
295+ function binaryLoopOrder( sh, sx, sy, sz ) {
296+ var tmp = loopOrder( sh, [ sx, sy, sz ] );
501297 return {
502- 'sh': sh ,
503- 'sx': sx ,
504- 'sy': sy ,
505- 'sz': sz
298+ 'sh': tmp[ 0 ] ,
299+ 'sx': tmp[ 1 ] ,
300+ 'sy': tmp[ 2 ] ,
301+ 'sz': tmp[ 3 ]
506302 };
507303}
508304
509305
510306// EXPORTS //
511307
512- module.exports = loopOrder ;
308+ module.exports = binaryLoopOrder ;
513309 </ pre > </ td > </ tr > </ table > </ pre >
514310
515311 < div class ='push '> </ div > <!-- for sticky footer -->
516312 </ div > <!-- /wrapper -->
517313 < div class ='footer quiet pad2 space-top1 center small '>
518314 Code coverage generated by
519315 < a href ="https://istanbul.js.org/ " target ="_blank " rel ="noopener noreferrer "> istanbul</ a >
520- at 2025-05-08T01:24:57.641Z
316+ at 2025-05-12T09:47:13.872Z
521317 </ div >
522318 < script src ="../../../../prettify.js "> </ script >
523319 < script >
0 commit comments