Skip to content

Commit

Permalink
update defaults to align with graphviz
Browse files Browse the repository at this point in the history
  • Loading branch information
erikbrinkman committed Mar 20, 2022
1 parent 06f2f9a commit 2d3f65e
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 17 deletions.
14 changes: 10 additions & 4 deletions src/sugiyama/decross/two-layer.ts
Expand Up @@ -8,7 +8,9 @@ import { DecrossOperator } from ".";
import { bigrams, Up } from "../../utils";
import { TwolayerOperator as OrderOperator } from "../twolayer";
import { agg, AggOperator } from "../twolayer/agg";
import { greedy, GreedyOperator } from "../twolayer/greedy";
import { crossings, SugiNode } from "../utils";
import { dfs, DfsOperator } from "./dfs";

type Inits<N = never, L = never> = readonly [
DecrossOperator<N, L>,
Expand Down Expand Up @@ -72,7 +74,7 @@ export interface TwoLayerOperator<Ops extends Operators = Operators>

/**
* Sets the number of passes to make, more takes longer, but might result in
* a better output. (default: 1)
* a better output. (default: 24)
*/
passes(val: number): TwoLayerOperator<Ops>;
/**
Expand Down Expand Up @@ -190,8 +192,8 @@ function buildOperator<N, L, O extends Operators<N, L>>(
}

export type DefaultTwoLayerOperator = TwoLayerOperator<{
order: AggOperator;
inits: [DecrossOperator<unknown, unknown>];
order: GreedyOperator<AggOperator>;
inits: [DfsOperator, DfsOperator];
}>;

/**
Expand All @@ -204,5 +206,9 @@ export function twoLayer(...args: never[]): DefaultTwoLayerOperator {
`got arguments to twoLayer(${args}), but constructor takes no arguments.`
);
}
return buildOperator({ order: agg(), inits: [() => undefined], passes: 1 });
return buildOperator({
order: greedy().base(agg()),
inits: [dfs(), dfs().topDown(false)],
passes: 24
});
}
14 changes: 6 additions & 8 deletions src/sugiyama/index.ts
Expand Up @@ -11,14 +11,15 @@ import {
simplex as coordSimplex
} from "./coord/simplex";
import { DecrossOperator } from "./decross";
import { twoLayer, TwoLayerOperator } from "./decross/two-layer";
import {
DefaultTwoLayerOperator as DefaultTwoLayer,
twoLayer
} from "./decross/two-layer";
import { LayeringOperator } from "./layering";
import {
DefaultSimplexOperator as DefaultLayering,
simplex as layerSimplex
} from "./layering/simplex";
import { agg, AggOperator } from "./twolayer/agg";
import { greedy, GreedyOperator } from "./twolayer/greedy";
import {
scaleLayers,
sugify,
Expand Down Expand Up @@ -531,10 +532,7 @@ function defaultNodeSize(node?: DagNode): [number, number] {

export type DefaultSugiyamaOperator = SugiyamaOperator<{
layering: DefaultLayering;
decross: TwoLayerOperator<{
order: GreedyOperator<AggOperator>;
inits: [DecrossOperator<unknown, unknown>];
}>;
decross: DefaultTwoLayer;
coord: DefaultCoord;
sugiNodeSize: WrappedNodeSizeAccessor<DefaultNodeSizeAccessor>;
nodeSize: DefaultNodeSizeAccessor;
Expand All @@ -561,7 +559,7 @@ export function sugiyama(...args: never[]): DefaultSugiyamaOperator {
} else {
return buildOperator({
layering: layerSimplex(),
decross: twoLayer().order(greedy().base(agg())),
decross: twoLayer(),
coord: coordSimplex(),
size: null,
nodeSize: defaultNodeSize,
Expand Down
2 changes: 1 addition & 1 deletion src/sugiyama/twolayer/agg.ts
Expand Up @@ -293,5 +293,5 @@ export function agg(...args: never[]): AggOperator {
`got arguments to agg(${args}), but constructor takes no arguments.`
);
}
return buildOperator({ factory: medianFactory });
return buildOperator({ factory: weightedMedianFactory });
}
8 changes: 4 additions & 4 deletions test/sugiyama/decross/two-layer.test.ts
Expand Up @@ -17,9 +17,9 @@ test("twoLayer() propagates to both layers", () => {
twoLayer()(layers);
const inds = layers.map((layer) => layer.map(getIndex));
expect(inds).toEqual([
[0, 1],
[1, 0],
[1, 0]
[0, 1],
[0, 1]
]);
});

Expand All @@ -31,8 +31,8 @@ test("twoLayer() propagates down and up", () => {
twoLayer()(layers);
const inds = layers.map((layer) => layer.map(getIndex));
expect(inds).toEqual([
[0, 1, 3, 2],
[1, 0]
[2, 3, 1, 0],
[0, 1]
]);
});

Expand Down

0 comments on commit 2d3f65e

Please sign in to comment.