Skip to content

Commit d06d4bf

Browse files
committed
transpose orderZDomain
1 parent 9b9406e commit d06d4bf

File tree

1 file changed

+24
-28
lines changed

1 file changed

+24
-28
lines changed

src/transforms/stack.js

Lines changed: 24 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -265,36 +265,30 @@ function orderZ(order) {
265265

266266
// by sum of value (a.k.a. “ascending”)
267267
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+
);
278275
}
279276

280277
// by x = argmax of value
281278
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+
);
292286
}
293287

294288
// by x = argmax of value, but rearranged inside-out by alternating series
295289
// according to the sign of a running divergence of sums
296290
function orderInsideOut(order) {
297-
return (data, X, Y, Z) => {
291+
return orderZDomain(order, (data, X, Y, Z) => {
298292
const I = range(data);
299293
const K = groupSort(
300294
I,
@@ -318,8 +312,8 @@ function orderInsideOut(order) {
318312
Kn.push(k);
319313
}
320314
}
321-
return orderZDomain(order, Z, Kn.reverse().concat(Kp));
322-
};
315+
return Kn.reverse().concat(Kp);
316+
});
323317
}
324318

325319
function orderAscending(O) {
@@ -339,16 +333,18 @@ function orderComparator(f) {
339333
}
340334

341335
function orderGiven(domain) {
342-
return (data, X, Y, Z) => orderZDomain(orderAscending, Z, domain);
336+
return orderZDomain(orderAscending, () => domain);
343337
}
344338

345339
// Given an explicit ordering of distinct values in z, returns a parallel column
346340
// O that can be used with applyOrder to sort stacks. Note that this is a series
347341
// 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+
};
352348
}
353349

354350
function applyOrder(stacks, compare) {

0 commit comments

Comments
 (0)