@@ -265,36 +265,30 @@ function orderZ(order) {
265
265
266
266
// by sum of value (a.k.a. “ascending”)
267
267
function orderSum ( order ) {
268
- return ( data , X , Y , Z ) =>
269
- orderZDomain (
270
- order ,
271
- Z ,
272
- groupSort (
273
- range ( data ) ,
274
- ( I ) => sum ( I , ( i ) => Y [ i ] ) ,
275
- ( i ) => Z [ i ]
276
- )
277
- ) ;
268
+ return orderZDomain ( order , ( data , X , Y , Z ) =>
269
+ groupSort (
270
+ range ( data ) ,
271
+ ( I ) => sum ( I , ( i ) => Y [ i ] ) ,
272
+ ( i ) => Z [ i ]
273
+ )
274
+ ) ;
278
275
}
279
276
280
277
// by x = argmax of value
281
278
function orderAppearance ( order ) {
282
- return ( data , X , Y , Z ) =>
283
- orderZDomain (
284
- order ,
285
- Z ,
286
- groupSort (
287
- range ( data ) ,
288
- ( I ) => X [ greatest ( I , ( i ) => Y [ i ] ) ] ,
289
- ( i ) => Z [ i ]
290
- )
291
- ) ;
279
+ return orderZDomain ( order , ( data , X , Y , Z ) =>
280
+ groupSort (
281
+ range ( data ) ,
282
+ ( I ) => X [ greatest ( I , ( i ) => Y [ i ] ) ] ,
283
+ ( i ) => Z [ i ]
284
+ )
285
+ ) ;
292
286
}
293
287
294
288
// by x = argmax of value, but rearranged inside-out by alternating series
295
289
// according to the sign of a running divergence of sums
296
290
function orderInsideOut ( order ) {
297
- return ( data , X , Y , Z ) => {
291
+ return orderZDomain ( order , ( data , X , Y , Z ) => {
298
292
const I = range ( data ) ;
299
293
const K = groupSort (
300
294
I ,
@@ -318,8 +312,8 @@ function orderInsideOut(order) {
318
312
Kn . push ( k ) ;
319
313
}
320
314
}
321
- return orderZDomain ( order , Z , Kn . reverse ( ) . concat ( Kp ) ) ;
322
- } ;
315
+ return Kn . reverse ( ) . concat ( Kp ) ;
316
+ } ) ;
323
317
}
324
318
325
319
function orderAscending ( O ) {
@@ -339,16 +333,18 @@ function orderComparator(f) {
339
333
}
340
334
341
335
function orderGiven ( domain ) {
342
- return ( data , X , Y , Z ) => orderZDomain ( orderAscending , Z , domain ) ;
336
+ return orderZDomain ( orderAscending , ( ) => domain ) ;
343
337
}
344
338
345
339
// Given an explicit ordering of distinct values in z, returns a parallel column
346
340
// O that can be used with applyOrder to sort stacks. Note that this is a series
347
341
// order: it will be consistent across stacks.
348
- function orderZDomain ( order , Z , domain ) {
349
- if ( ! Z ) throw new Error ( "missing channel: z" ) ;
350
- domain = new InternMap ( domain . map ( ( d , i ) => [ d , i ] ) ) ;
351
- return order ( Z . map ( ( z ) => domain . get ( z ) ) ) ;
342
+ function orderZDomain ( order , domain ) {
343
+ return ( data , X , Y , Z ) => {
344
+ if ( ! Z ) throw new Error ( "missing channel: z" ) ;
345
+ const map = new InternMap ( domain ( data , X , Y , Z ) . map ( ( d , i ) => [ d , i ] ) ) ;
346
+ return order ( Z . map ( ( z ) => map . get ( z ) ) ) ;
347
+ } ;
352
348
}
353
349
354
350
function applyOrder ( stacks , compare ) {
0 commit comments