nirs4all-ui 0.1.12 → 0.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -1
- package/assets/brands/README.md +28 -8
- package/assets/brands/dag-ml/favicon.ico +0 -0
- package/assets/brands/dag-ml/horizontal-dark.svg +5 -0
- package/assets/brands/dag-ml/horizontal.png +0 -0
- package/assets/brands/dag-ml/horizontal.svg +5 -0
- package/assets/brands/dag-ml/icon-180.png +0 -0
- package/assets/brands/dag-ml/icon-256.png +0 -0
- package/assets/brands/dag-ml/icon-32.png +0 -0
- package/assets/brands/dag-ml/icon-512.png +0 -0
- package/assets/brands/dag-ml/icon.svg +3 -0
- package/assets/brands/dag-ml/og.png +0 -0
- package/assets/brands/dag-ml/stacked-dark.svg +5 -0
- package/assets/brands/dag-ml/stacked.png +0 -0
- package/assets/brands/dag-ml/stacked.svg +5 -0
- package/assets/brands/dag-ml-data/favicon.ico +0 -0
- package/assets/brands/dag-ml-data/horizontal-dark.svg +6 -0
- package/assets/brands/dag-ml-data/horizontal.png +0 -0
- package/assets/brands/dag-ml-data/horizontal.svg +6 -0
- package/assets/brands/dag-ml-data/icon-180.png +0 -0
- package/assets/brands/dag-ml-data/icon-256.png +0 -0
- package/assets/brands/dag-ml-data/icon-32.png +0 -0
- package/assets/brands/dag-ml-data/icon-512.png +0 -0
- package/assets/brands/dag-ml-data/icon.svg +3 -0
- package/assets/brands/dag-ml-data/og.png +0 -0
- package/assets/brands/dag-ml-data/stacked-dark.svg +6 -0
- package/assets/brands/dag-ml-data/stacked.png +0 -0
- package/assets/brands/dag-ml-data/stacked.svg +6 -0
- package/assets/brands/nirs4all/favicon.ico +0 -0
- package/assets/brands/nirs4all/horizontal-dark.svg +36 -0
- package/assets/brands/nirs4all/horizontal.png +0 -0
- package/assets/brands/nirs4all/horizontal.svg +35 -11
- package/assets/brands/nirs4all/icon-180.png +0 -0
- package/assets/brands/nirs4all/icon-256.png +0 -0
- package/assets/brands/nirs4all/icon-32.png +0 -0
- package/assets/brands/nirs4all/icon-512.png +0 -0
- package/assets/brands/nirs4all/icon.svg +32 -7
- package/assets/brands/nirs4all/og.png +0 -0
- package/assets/brands/nirs4all/stacked-dark.svg +36 -0
- package/assets/brands/nirs4all/stacked.png +0 -0
- package/assets/brands/nirs4all/stacked.svg +35 -11
- package/assets/brands/nirs4all-benchmarks/favicon.ico +0 -0
- package/assets/brands/nirs4all-benchmarks/horizontal-dark.svg +37 -0
- package/assets/brands/nirs4all-benchmarks/horizontal.png +0 -0
- package/assets/brands/nirs4all-benchmarks/horizontal.svg +37 -0
- package/assets/brands/nirs4all-benchmarks/icon-180.png +0 -0
- package/assets/brands/nirs4all-benchmarks/icon-256.png +0 -0
- package/assets/brands/nirs4all-benchmarks/icon-32.png +0 -0
- package/assets/brands/nirs4all-benchmarks/icon-512.png +0 -0
- package/assets/brands/nirs4all-benchmarks/icon.svg +33 -0
- package/assets/brands/nirs4all-benchmarks/og.png +0 -0
- package/assets/brands/nirs4all-benchmarks/stacked-dark.svg +36 -0
- package/assets/brands/nirs4all-benchmarks/stacked.png +0 -0
- package/assets/brands/nirs4all-benchmarks/stacked.svg +36 -0
- package/assets/brands/nirs4all-cluster/favicon.ico +0 -0
- package/assets/brands/nirs4all-cluster/horizontal-dark.svg +37 -0
- package/assets/brands/nirs4all-cluster/horizontal.png +0 -0
- package/assets/brands/nirs4all-cluster/horizontal.svg +37 -0
- package/assets/brands/nirs4all-cluster/icon-180.png +0 -0
- package/assets/brands/nirs4all-cluster/icon-256.png +0 -0
- package/assets/brands/nirs4all-cluster/icon-32.png +0 -0
- package/assets/brands/nirs4all-cluster/icon-512.png +0 -0
- package/assets/brands/nirs4all-cluster/icon.svg +33 -0
- package/assets/brands/nirs4all-cluster/og.png +0 -0
- package/assets/brands/nirs4all-cluster/stacked-dark.svg +36 -0
- package/assets/brands/nirs4all-cluster/stacked.png +0 -0
- package/assets/brands/nirs4all-cluster/stacked.svg +36 -0
- package/assets/brands/nirs4all-core/favicon.ico +0 -0
- package/assets/brands/nirs4all-core/horizontal-dark.svg +37 -0
- package/assets/brands/nirs4all-core/horizontal.png +0 -0
- package/assets/brands/nirs4all-core/horizontal.svg +36 -11
- package/assets/brands/nirs4all-core/icon-180.png +0 -0
- package/assets/brands/nirs4all-core/icon-256.png +0 -0
- package/assets/brands/nirs4all-core/icon-32.png +0 -0
- package/assets/brands/nirs4all-core/icon-512.png +0 -0
- package/assets/brands/nirs4all-core/icon.svg +32 -7
- package/assets/brands/nirs4all-core/og.png +0 -0
- package/assets/brands/nirs4all-core/stacked-dark.svg +36 -0
- package/assets/brands/nirs4all-core/stacked.png +0 -0
- package/assets/brands/nirs4all-core/stacked.svg +35 -11
- package/assets/brands/nirs4all-datasets/favicon.ico +0 -0
- package/assets/brands/nirs4all-datasets/horizontal-dark.svg +37 -0
- package/assets/brands/nirs4all-datasets/horizontal.png +0 -0
- package/assets/brands/nirs4all-datasets/horizontal.svg +37 -0
- package/assets/brands/nirs4all-datasets/icon-180.png +0 -0
- package/assets/brands/nirs4all-datasets/icon-256.png +0 -0
- package/assets/brands/nirs4all-datasets/icon-32.png +0 -0
- package/assets/brands/nirs4all-datasets/icon-512.png +0 -0
- package/assets/brands/nirs4all-datasets/icon.svg +33 -0
- package/assets/brands/nirs4all-datasets/og.png +0 -0
- package/assets/brands/nirs4all-datasets/stacked-dark.svg +36 -0
- package/assets/brands/nirs4all-datasets/stacked.png +0 -0
- package/assets/brands/nirs4all-datasets/stacked.svg +36 -0
- package/assets/brands/nirs4all-device/favicon.ico +0 -0
- package/assets/brands/nirs4all-device/horizontal-dark.svg +37 -0
- package/assets/brands/nirs4all-device/horizontal.png +0 -0
- package/assets/brands/nirs4all-device/horizontal.svg +37 -0
- package/assets/brands/nirs4all-device/icon-180.png +0 -0
- package/assets/brands/nirs4all-device/icon-256.png +0 -0
- package/assets/brands/nirs4all-device/icon-32.png +0 -0
- package/assets/brands/nirs4all-device/icon-512.png +0 -0
- package/assets/brands/nirs4all-device/icon.svg +33 -0
- package/assets/brands/nirs4all-device/og.png +0 -0
- package/assets/brands/nirs4all-device/stacked-dark.svg +36 -0
- package/assets/brands/nirs4all-device/stacked.png +0 -0
- package/assets/brands/nirs4all-device/stacked.svg +36 -0
- package/assets/brands/nirs4all-formats/favicon.ico +0 -0
- package/assets/brands/nirs4all-formats/horizontal-dark.svg +37 -0
- package/assets/brands/nirs4all-formats/horizontal.png +0 -0
- package/assets/brands/nirs4all-formats/horizontal.svg +37 -0
- package/assets/brands/nirs4all-formats/icon-180.png +0 -0
- package/assets/brands/nirs4all-formats/icon-256.png +0 -0
- package/assets/brands/nirs4all-formats/icon-32.png +0 -0
- package/assets/brands/nirs4all-formats/icon-512.png +0 -0
- package/assets/brands/nirs4all-formats/icon.svg +33 -0
- package/assets/brands/nirs4all-formats/og.png +0 -0
- package/assets/brands/nirs4all-formats/stacked-dark.svg +36 -0
- package/assets/brands/nirs4all-formats/stacked.png +0 -0
- package/assets/brands/nirs4all-formats/stacked.svg +36 -0
- package/assets/brands/nirs4all-io/favicon.ico +0 -0
- package/assets/brands/nirs4all-io/horizontal-dark.svg +37 -0
- package/assets/brands/nirs4all-io/horizontal.png +0 -0
- package/assets/brands/nirs4all-io/horizontal.svg +37 -0
- package/assets/brands/nirs4all-io/icon-180.png +0 -0
- package/assets/brands/nirs4all-io/icon-256.png +0 -0
- package/assets/brands/nirs4all-io/icon-32.png +0 -0
- package/assets/brands/nirs4all-io/icon-512.png +0 -0
- package/assets/brands/nirs4all-io/icon.svg +33 -0
- package/assets/brands/nirs4all-io/og.png +0 -0
- package/assets/brands/nirs4all-io/stacked-dark.svg +36 -0
- package/assets/brands/nirs4all-io/stacked.png +0 -0
- package/assets/brands/nirs4all-io/stacked.svg +36 -0
- package/assets/brands/nirs4all-methods/favicon.ico +0 -0
- package/assets/brands/nirs4all-methods/horizontal-dark.svg +37 -0
- package/assets/brands/nirs4all-methods/horizontal.png +0 -0
- package/assets/brands/nirs4all-methods/horizontal.svg +37 -0
- package/assets/brands/nirs4all-methods/icon-180.png +0 -0
- package/assets/brands/nirs4all-methods/icon-256.png +0 -0
- package/assets/brands/nirs4all-methods/icon-32.png +0 -0
- package/assets/brands/nirs4all-methods/icon-512.png +0 -0
- package/assets/brands/nirs4all-methods/icon.svg +33 -0
- package/assets/brands/nirs4all-methods/og.png +0 -0
- package/assets/brands/nirs4all-methods/stacked-dark.svg +36 -0
- package/assets/brands/nirs4all-methods/stacked.png +0 -0
- package/assets/brands/nirs4all-methods/stacked.svg +36 -0
- package/assets/brands/nirs4all-papers/favicon.ico +0 -0
- package/assets/brands/nirs4all-papers/horizontal-dark.svg +37 -0
- package/assets/brands/nirs4all-papers/horizontal.png +0 -0
- package/assets/brands/nirs4all-papers/horizontal.svg +37 -0
- package/assets/brands/nirs4all-papers/icon-180.png +0 -0
- package/assets/brands/nirs4all-papers/icon-256.png +0 -0
- package/assets/brands/nirs4all-papers/icon-32.png +0 -0
- package/assets/brands/nirs4all-papers/icon-512.png +0 -0
- package/assets/brands/nirs4all-papers/icon.svg +33 -0
- package/assets/brands/nirs4all-papers/og.png +0 -0
- package/assets/brands/nirs4all-papers/stacked-dark.svg +36 -0
- package/assets/brands/nirs4all-papers/stacked.png +0 -0
- package/assets/brands/nirs4all-papers/stacked.svg +36 -0
- package/assets/brands/nirs4all-providers/favicon.ico +0 -0
- package/assets/brands/nirs4all-providers/horizontal-dark.svg +37 -0
- package/assets/brands/nirs4all-providers/horizontal.png +0 -0
- package/assets/brands/nirs4all-providers/horizontal.svg +36 -11
- package/assets/brands/nirs4all-providers/icon-180.png +0 -0
- package/assets/brands/nirs4all-providers/icon-256.png +0 -0
- package/assets/brands/nirs4all-providers/icon-32.png +0 -0
- package/assets/brands/nirs4all-providers/icon-512.png +0 -0
- package/assets/brands/nirs4all-providers/icon.svg +32 -7
- package/assets/brands/nirs4all-providers/og.png +0 -0
- package/assets/brands/nirs4all-providers/stacked-dark.svg +36 -0
- package/assets/brands/nirs4all-providers/stacked.png +0 -0
- package/assets/brands/nirs4all-providers/stacked.svg +35 -11
- package/assets/brands/nirs4all-quality/favicon.ico +0 -0
- package/assets/brands/nirs4all-quality/horizontal-dark.svg +36 -0
- package/assets/brands/nirs4all-quality/horizontal.svg +35 -11
- package/assets/brands/nirs4all-quality/icon-180.png +0 -0
- package/assets/brands/nirs4all-quality/icon-256.png +0 -0
- package/assets/brands/nirs4all-quality/icon-32.png +0 -0
- package/assets/brands/nirs4all-quality/icon-512.png +0 -0
- package/assets/brands/nirs4all-quality/icon.svg +32 -7
- package/assets/brands/nirs4all-quality/og.png +0 -0
- package/assets/brands/nirs4all-quality/stacked-dark.svg +36 -0
- package/assets/brands/nirs4all-quality/stacked.svg +35 -11
- package/assets/brands/nirs4all-repository/favicon.ico +0 -0
- package/assets/brands/nirs4all-repository/horizontal-dark.svg +37 -0
- package/assets/brands/nirs4all-repository/horizontal.png +0 -0
- package/assets/brands/nirs4all-repository/horizontal.svg +37 -0
- package/assets/brands/nirs4all-repository/icon-180.png +0 -0
- package/assets/brands/nirs4all-repository/icon-256.png +0 -0
- package/assets/brands/nirs4all-repository/icon-32.png +0 -0
- package/assets/brands/nirs4all-repository/icon-512.png +0 -0
- package/assets/brands/nirs4all-repository/icon.svg +33 -0
- package/assets/brands/nirs4all-repository/og.png +0 -0
- package/assets/brands/nirs4all-repository/stacked-dark.svg +36 -0
- package/assets/brands/nirs4all-repository/stacked.png +0 -0
- package/assets/brands/nirs4all-repository/stacked.svg +36 -0
- package/assets/brands/nirs4all-studio/favicon.ico +0 -0
- package/assets/brands/nirs4all-studio/horizontal-dark.svg +37 -0
- package/assets/brands/nirs4all-studio/horizontal.png +0 -0
- package/assets/brands/nirs4all-studio/horizontal.svg +37 -0
- package/assets/brands/nirs4all-studio/icon-180.png +0 -0
- package/assets/brands/nirs4all-studio/icon-256.png +0 -0
- package/assets/brands/nirs4all-studio/icon-32.png +0 -0
- package/assets/brands/nirs4all-studio/icon-512.png +0 -0
- package/assets/brands/nirs4all-studio/icon.svg +33 -0
- package/assets/brands/nirs4all-studio/og.png +0 -0
- package/assets/brands/nirs4all-studio/stacked-dark.svg +36 -0
- package/assets/brands/nirs4all-studio/stacked.png +0 -0
- package/assets/brands/nirs4all-studio/stacked.svg +36 -0
- package/assets/brands/nirs4all-tools/favicon.ico +0 -0
- package/assets/brands/nirs4all-tools/horizontal-dark.svg +37 -0
- package/assets/brands/nirs4all-tools/horizontal.png +0 -0
- package/assets/brands/nirs4all-tools/horizontal.svg +37 -0
- package/assets/brands/nirs4all-tools/icon-180.png +0 -0
- package/assets/brands/nirs4all-tools/icon-256.png +0 -0
- package/assets/brands/nirs4all-tools/icon-32.png +0 -0
- package/assets/brands/nirs4all-tools/icon-512.png +0 -0
- package/assets/brands/nirs4all-tools/icon.svg +33 -0
- package/assets/brands/nirs4all-tools/og.png +0 -0
- package/assets/brands/nirs4all-tools/stacked-dark.svg +36 -0
- package/assets/brands/nirs4all-tools/stacked.png +0 -0
- package/assets/brands/nirs4all-tools/stacked.svg +36 -0
- package/assets/brands/nirs4all-ui/favicon.ico +0 -0
- package/assets/brands/nirs4all-ui/horizontal-dark.svg +37 -0
- package/assets/brands/nirs4all-ui/horizontal.png +0 -0
- package/assets/brands/nirs4all-ui/horizontal.svg +36 -11
- package/assets/brands/nirs4all-ui/icon-180.png +0 -0
- package/assets/brands/nirs4all-ui/icon-256.png +0 -0
- package/assets/brands/nirs4all-ui/icon-32.png +0 -0
- package/assets/brands/nirs4all-ui/icon-512.png +0 -0
- package/assets/brands/nirs4all-ui/icon.svg +32 -7
- package/assets/brands/nirs4all-ui/og.png +0 -0
- package/assets/brands/nirs4all-ui/stacked-dark.svg +36 -0
- package/assets/brands/nirs4all-ui/stacked.png +0 -0
- package/assets/brands/nirs4all-ui/stacked.svg +35 -11
- package/assets/brands/nirs4all-web/favicon.ico +0 -0
- package/assets/brands/nirs4all-web/horizontal-dark.svg +37 -0
- package/assets/brands/nirs4all-web/horizontal.png +0 -0
- package/assets/brands/nirs4all-web/horizontal.svg +37 -0
- package/assets/brands/nirs4all-web/icon-180.png +0 -0
- package/assets/brands/nirs4all-web/icon-256.png +0 -0
- package/assets/brands/nirs4all-web/icon-32.png +0 -0
- package/assets/brands/nirs4all-web/icon-512.png +0 -0
- package/assets/brands/nirs4all-web/icon.svg +33 -0
- package/assets/brands/nirs4all-web/og.png +0 -0
- package/assets/brands/nirs4all-web/stacked-dark.svg +36 -0
- package/assets/brands/nirs4all-web/stacked.png +0 -0
- package/assets/brands/nirs4all-web/stacked.svg +36 -0
- package/assets/chains.css +601 -0
- package/assets/conformal.css +323 -0
- package/assets/dag.css +446 -0
- package/assets/motion/nirs-spectra.svg +26 -9
- package/assets/viz.css +152 -0
- package/dist/brand/index.d.ts +24 -126
- package/dist/brand/index.d.ts.map +1 -1
- package/dist/brand/index.js +52 -200
- package/dist/brand/index.js.map +1 -1
- package/dist/chains/ChainExplorer.d.ts +34 -0
- package/dist/chains/ChainExplorer.d.ts.map +1 -0
- package/dist/chains/ChainExplorer.js +119 -0
- package/dist/chains/ChainExplorer.js.map +1 -0
- package/dist/chains/ChainNodeHub.d.ts +31 -0
- package/dist/chains/ChainNodeHub.d.ts.map +1 -0
- package/dist/chains/ChainNodeHub.js +150 -0
- package/dist/chains/ChainNodeHub.js.map +1 -0
- package/dist/chains/ChainNodeOrbit.d.ts +31 -0
- package/dist/chains/ChainNodeOrbit.d.ts.map +1 -0
- package/dist/chains/ChainNodeOrbit.js +158 -0
- package/dist/chains/ChainNodeOrbit.js.map +1 -0
- package/dist/chains/ChainScoreBeeswarm.d.ts +25 -0
- package/dist/chains/ChainScoreBeeswarm.d.ts.map +1 -0
- package/dist/chains/ChainScoreBeeswarm.js +84 -0
- package/dist/chains/ChainScoreBeeswarm.js.map +1 -0
- package/dist/chains/NodeEffectForest.d.ts +33 -0
- package/dist/chains/NodeEffectForest.d.ts.map +1 -0
- package/dist/chains/NodeEffectForest.js +85 -0
- package/dist/chains/NodeEffectForest.js.map +1 -0
- package/dist/chains/PositionEffectHeatmap.d.ts +25 -0
- package/dist/chains/PositionEffectHeatmap.d.ts.map +1 -0
- package/dist/chains/PositionEffectHeatmap.js +77 -0
- package/dist/chains/PositionEffectHeatmap.js.map +1 -0
- package/dist/chains/SequenceEffectHeatmap.d.ts +22 -0
- package/dist/chains/SequenceEffectHeatmap.d.ts.map +1 -0
- package/dist/chains/SequenceEffectHeatmap.js +74 -0
- package/dist/chains/SequenceEffectHeatmap.js.map +1 -0
- package/dist/chains/_cx.d.ts +2 -0
- package/dist/chains/_cx.d.ts.map +1 -0
- package/dist/chains/_cx.js +8 -0
- package/dist/chains/_cx.js.map +1 -0
- package/dist/chains/analysis.d.ts +100 -0
- package/dist/chains/analysis.d.ts.map +1 -0
- package/dist/chains/analysis.js +440 -0
- package/dist/chains/analysis.js.map +1 -0
- package/dist/chains/colors.d.ts +26 -0
- package/dist/chains/colors.d.ts.map +1 -0
- package/dist/chains/colors.js +58 -0
- package/dist/chains/colors.js.map +1 -0
- package/dist/chains/contract.d.ts +54 -0
- package/dist/chains/contract.d.ts.map +1 -0
- package/dist/chains/contract.js +125 -0
- package/dist/chains/contract.js.map +1 -0
- package/dist/chains/index.d.ts +35 -0
- package/dist/chains/index.d.ts.map +1 -0
- package/dist/chains/index.js +41 -0
- package/dist/chains/index.js.map +1 -0
- package/dist/chains/normalize.d.ts +27 -0
- package/dist/chains/normalize.d.ts.map +1 -0
- package/dist/chains/normalize.js +104 -0
- package/dist/chains/normalize.js.map +1 -0
- package/dist/chains/radial.d.ts +21 -0
- package/dist/chains/radial.d.ts.map +1 -0
- package/dist/chains/radial.js +52 -0
- package/dist/chains/radial.js.map +1 -0
- package/dist/chains/types.d.ts +240 -0
- package/dist/chains/types.d.ts.map +1 -0
- package/dist/chains/types.js +52 -0
- package/dist/chains/types.js.map +1 -0
- package/dist/components/ConformalPredictionTree.d.ts +79 -0
- package/dist/components/ConformalPredictionTree.d.ts.map +1 -0
- package/dist/components/ConformalPredictionTree.js +223 -0
- package/dist/components/ConformalPredictionTree.js.map +1 -0
- package/dist/components/DatasetResultCard.d.ts +33 -0
- package/dist/components/DatasetResultCard.d.ts.map +1 -0
- package/dist/components/DatasetResultCard.js +9 -0
- package/dist/components/DatasetResultCard.js.map +1 -0
- package/dist/components/PerClassTable.d.ts +27 -0
- package/dist/components/PerClassTable.d.ts.map +1 -0
- package/dist/components/PerClassTable.js +9 -0
- package/dist/components/PerClassTable.js.map +1 -0
- package/dist/components/PredictionCard.d.ts +27 -0
- package/dist/components/PredictionCard.d.ts.map +1 -0
- package/dist/components/PredictionCard.js +6 -0
- package/dist/components/PredictionCard.js.map +1 -0
- package/dist/components/RankingsTable.d.ts +28 -0
- package/dist/components/RankingsTable.d.ts.map +1 -0
- package/dist/components/RankingsTable.js +14 -0
- package/dist/components/RankingsTable.js.map +1 -0
- package/dist/components/ScoreCardTree.d.ts +31 -0
- package/dist/components/ScoreCardTree.d.ts.map +1 -0
- package/dist/components/ScoreCardTree.js +17 -0
- package/dist/components/ScoreCardTree.js.map +1 -0
- package/dist/components/index.d.ts +6 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +6 -0
- package/dist/components/index.js.map +1 -1
- package/dist/conformal/index.d.ts +2 -0
- package/dist/conformal/index.d.ts.map +1 -0
- package/dist/conformal/index.js +2 -0
- package/dist/conformal/index.js.map +1 -0
- package/dist/conformal/result.d.ts +224 -0
- package/dist/conformal/result.d.ts.map +1 -0
- package/dist/conformal/result.js +461 -0
- package/dist/conformal/result.js.map +1 -0
- package/dist/dag/DagGraphView.d.ts +35 -0
- package/dist/dag/DagGraphView.d.ts.map +1 -0
- package/dist/dag/DagGraphView.js +424 -0
- package/dist/dag/DagGraphView.js.map +1 -0
- package/dist/dag/_cx.d.ts +2 -0
- package/dist/dag/_cx.d.ts.map +1 -0
- package/dist/dag/_cx.js +8 -0
- package/dist/dag/_cx.js.map +1 -0
- package/dist/dag/collapse.d.ts +81 -0
- package/dist/dag/collapse.d.ts.map +1 -0
- package/dist/dag/collapse.js +210 -0
- package/dist/dag/collapse.js.map +1 -0
- package/dist/dag/colors.d.ts +19 -0
- package/dist/dag/colors.d.ts.map +1 -0
- package/dist/dag/colors.js +54 -0
- package/dist/dag/colors.js.map +1 -0
- package/dist/dag/fromCompiledGraph.d.ts +27 -0
- package/dist/dag/fromCompiledGraph.d.ts.map +1 -0
- package/dist/dag/fromCompiledGraph.js +133 -0
- package/dist/dag/fromCompiledGraph.js.map +1 -0
- package/dist/dag/hierarchy.d.ts +38 -0
- package/dist/dag/hierarchy.d.ts.map +1 -0
- package/dist/dag/hierarchy.js +75 -0
- package/dist/dag/hierarchy.js.map +1 -0
- package/dist/dag/index.d.ts +28 -0
- package/dist/dag/index.d.ts.map +1 -0
- package/dist/dag/index.js +33 -0
- package/dist/dag/index.js.map +1 -0
- package/dist/dag/layout.d.ts +57 -0
- package/dist/dag/layout.d.ts.map +1 -0
- package/dist/dag/layout.js +267 -0
- package/dist/dag/layout.js.map +1 -0
- package/dist/dag/locale.d.ts +31 -0
- package/dist/dag/locale.d.ts.map +1 -0
- package/dist/dag/locale.js +32 -0
- package/dist/dag/locale.js.map +1 -0
- package/dist/dag/shape.d.ts +48 -0
- package/dist/dag/shape.d.ts.map +1 -0
- package/dist/dag/shape.js +263 -0
- package/dist/dag/shape.js.map +1 -0
- package/dist/dag/types.d.ts +106 -0
- package/dist/dag/types.d.ts.map +1 -0
- package/dist/dag/types.js +56 -0
- package/dist/dag/types.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/keywordRegistry/index.d.ts +9 -0
- package/dist/keywordRegistry/index.d.ts.map +1 -0
- package/dist/keywordRegistry/index.js +9 -0
- package/dist/keywordRegistry/index.js.map +1 -0
- package/dist/keywordRegistry/registry.d.ts +107 -0
- package/dist/keywordRegistry/registry.d.ts.map +1 -0
- package/dist/keywordRegistry/registry.js +234 -0
- package/dist/keywordRegistry/registry.js.map +1 -0
- package/dist/robustness/index.d.ts +12 -0
- package/dist/robustness/index.d.ts.map +1 -0
- package/dist/robustness/index.js +12 -0
- package/dist/robustness/index.js.map +1 -0
- package/dist/robustness/modes.d.ts +15 -0
- package/dist/robustness/modes.d.ts.map +1 -0
- package/dist/robustness/modes.js +64 -0
- package/dist/robustness/modes.js.map +1 -0
- package/dist/robustness/scenarios.d.ts +38 -0
- package/dist/robustness/scenarios.d.ts.map +1 -0
- package/dist/robustness/scenarios.js +159 -0
- package/dist/robustness/scenarios.js.map +1 -0
- package/dist/robustness/summary.d.ts +135 -0
- package/dist/robustness/summary.d.ts.map +1 -0
- package/dist/robustness/summary.js +284 -0
- package/dist/robustness/summary.js.map +1 -0
- package/dist/styles/index.d.ts +19 -1
- package/dist/styles/index.d.ts.map +1 -1
- package/dist/styles/index.js +21 -0
- package/dist/styles/index.js.map +1 -1
- package/dist/tuning/index.d.ts +3 -0
- package/dist/tuning/index.d.ts.map +1 -0
- package/dist/tuning/index.js +3 -0
- package/dist/tuning/index.js.map +1 -0
- package/dist/tuning/result.d.ts +144 -0
- package/dist/tuning/result.d.ts.map +1 -0
- package/dist/tuning/result.js +277 -0
- package/dist/tuning/result.js.map +1 -0
- package/dist/tuning/searchSpace.d.ts +54 -0
- package/dist/tuning/searchSpace.d.ts.map +1 -0
- package/dist/tuning/searchSpace.js +118 -0
- package/dist/tuning/searchSpace.js.map +1 -0
- package/dist/viz/BiasVarianceBars.d.ts +27 -0
- package/dist/viz/BiasVarianceBars.d.ts.map +1 -0
- package/dist/viz/BiasVarianceBars.js +53 -0
- package/dist/viz/BiasVarianceBars.js.map +1 -0
- package/dist/viz/BoxPlot.d.ts +24 -0
- package/dist/viz/BoxPlot.d.ts.map +1 -0
- package/dist/viz/BoxPlot.js +50 -0
- package/dist/viz/BoxPlot.js.map +1 -0
- package/dist/viz/ConformalIntervalStrip.d.ts +66 -0
- package/dist/viz/ConformalIntervalStrip.d.ts.map +1 -0
- package/dist/viz/ConformalIntervalStrip.js +167 -0
- package/dist/viz/ConformalIntervalStrip.js.map +1 -0
- package/dist/viz/ConfusionMatrix.d.ts +24 -0
- package/dist/viz/ConfusionMatrix.d.ts.map +1 -0
- package/dist/viz/ConfusionMatrix.js +39 -0
- package/dist/viz/ConfusionMatrix.js.map +1 -0
- package/dist/viz/FeatureImportanceBar.d.ts +26 -0
- package/dist/viz/FeatureImportanceBar.d.ts.map +1 -0
- package/dist/viz/FeatureImportanceBar.js +49 -0
- package/dist/viz/FeatureImportanceBar.js.map +1 -0
- package/dist/viz/FoldStabilityLines.d.ts +29 -0
- package/dist/viz/FoldStabilityLines.d.ts.map +1 -0
- package/dist/viz/FoldStabilityLines.js +57 -0
- package/dist/viz/FoldStabilityLines.js.map +1 -0
- package/dist/viz/Histogram.d.ts +33 -0
- package/dist/viz/Histogram.d.ts.map +1 -0
- package/dist/viz/Histogram.js +64 -0
- package/dist/viz/Histogram.js.map +1 -0
- package/dist/viz/PcaScatter.d.ts +36 -0
- package/dist/viz/PcaScatter.d.ts.map +1 -0
- package/dist/viz/PcaScatter.js +72 -0
- package/dist/viz/PcaScatter.js.map +1 -0
- package/dist/viz/PipelineFlow.d.ts +28 -0
- package/dist/viz/PipelineFlow.d.ts.map +1 -0
- package/dist/viz/PipelineFlow.js +57 -0
- package/dist/viz/PipelineFlow.js.map +1 -0
- package/dist/viz/PredictionScatter.d.ts +41 -0
- package/dist/viz/PredictionScatter.d.ts.map +1 -0
- package/dist/viz/PredictionScatter.js +41 -0
- package/dist/viz/PredictionScatter.js.map +1 -0
- package/dist/viz/ResidualPlot.d.ts +32 -0
- package/dist/viz/ResidualPlot.d.ts.map +1 -0
- package/dist/viz/ResidualPlot.js +58 -0
- package/dist/viz/ResidualPlot.js.map +1 -0
- package/dist/viz/ScoreHeatmap.d.ts +30 -0
- package/dist/viz/ScoreHeatmap.d.ts.map +1 -0
- package/dist/viz/ScoreHeatmap.js +61 -0
- package/dist/viz/ScoreHeatmap.js.map +1 -0
- package/dist/viz/ScoreSummary.d.ts +23 -0
- package/dist/viz/ScoreSummary.d.ts.map +1 -0
- package/dist/viz/ScoreSummary.js +32 -0
- package/dist/viz/ScoreSummary.js.map +1 -0
- package/dist/viz/ShapBeeswarm.d.ts +29 -0
- package/dist/viz/ShapBeeswarm.d.ts.map +1 -0
- package/dist/viz/ShapBeeswarm.js +60 -0
- package/dist/viz/ShapBeeswarm.js.map +1 -0
- package/dist/viz/SpectraPlot.d.ts +50 -0
- package/dist/viz/SpectraPlot.d.ts.map +1 -0
- package/dist/viz/SpectraPlot.js +46 -0
- package/dist/viz/SpectraPlot.js.map +1 -0
- package/dist/viz/WaterfallChart.d.ts +30 -0
- package/dist/viz/WaterfallChart.d.ts.map +1 -0
- package/dist/viz/WaterfallChart.js +73 -0
- package/dist/viz/WaterfallChart.js.map +1 -0
- package/dist/viz/_cx.d.ts +2 -0
- package/dist/viz/_cx.d.ts.map +1 -0
- package/dist/viz/_cx.js +8 -0
- package/dist/viz/_cx.js.map +1 -0
- package/dist/viz/geometry.d.ts +87 -0
- package/dist/viz/geometry.d.ts.map +1 -0
- package/dist/viz/geometry.js +208 -0
- package/dist/viz/geometry.js.map +1 -0
- package/dist/viz/index.d.ts +33 -0
- package/dist/viz/index.d.ts.map +1 -0
- package/dist/viz/index.js +38 -0
- package/dist/viz/index.js.map +1 -0
- package/dist/viz/theme.d.ts +50 -0
- package/dist/viz/theme.d.ts.map +1 -0
- package/dist/viz/theme.js +100 -0
- package/dist/viz/theme.js.map +1 -0
- package/package.json +34 -2
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Color mapping for the chain-effect explorer.
|
|
3
|
+
*
|
|
4
|
+
* Reuses the canonical nirs4all `viz` teal system as the single source of truth
|
|
5
|
+
* (same hues as {@link file://../viz/PipelineFlow.tsx PipelineFlow} and the DAG
|
|
6
|
+
* viewer), so the explorer sits inside the existing design language. Two color
|
|
7
|
+
* jobs only:
|
|
8
|
+
* - **role identity** → the categorical brand hues (small chips beside a text
|
|
9
|
+
* label, so identity is never color-alone);
|
|
10
|
+
* - **effect polarity** → the brand diverging ramp pivoted on the analysis
|
|
11
|
+
* baseline (better = cool/blue, worse = warm/red, gray at the baseline). The
|
|
12
|
+
* diverging ramp is CVD-safe and every cell also prints its value.
|
|
13
|
+
*/
|
|
14
|
+
import { clamp } from "../viz/geometry.js";
|
|
15
|
+
import { N4_VIZ_COLORS, rampAt } from "../viz/theme.js";
|
|
16
|
+
/**
|
|
17
|
+
* Chains-local diverging ramp: teal (better) → warm neutral → burnt amber
|
|
18
|
+
* (worse). Stays inside the nirs4all teal system (unlike the blue↔red SHAP
|
|
19
|
+
* ramp) and is a CVD-safe blue-green/orange pair; the neutral midpoint matches
|
|
20
|
+
* the warm surface, and every cell also prints its value (redundant encoding).
|
|
21
|
+
*/
|
|
22
|
+
const CHAIN_DIVERGING_STOPS = ["#0f766e", "#ece9e2", "#c2620e"];
|
|
23
|
+
export const CHAIN_ROLE_COLORS = {
|
|
24
|
+
split: N4_VIZ_COLORS.indigo,
|
|
25
|
+
preprocess: N4_VIZ_COLORS.cyan,
|
|
26
|
+
feature: N4_VIZ_COLORS.violet,
|
|
27
|
+
augmentation: N4_VIZ_COLORS.green,
|
|
28
|
+
model: N4_VIZ_COLORS.teal,
|
|
29
|
+
target: N4_VIZ_COLORS.slate,
|
|
30
|
+
other: N4_VIZ_COLORS.slate,
|
|
31
|
+
};
|
|
32
|
+
/** Resolve a role color, honoring per-host overrides. */
|
|
33
|
+
export function roleColor(role, overrides) {
|
|
34
|
+
return overrides?.[role] ?? CHAIN_ROLE_COLORS[role];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Diverging color for a goodness value relative to the baseline.
|
|
38
|
+
* `value > baseline` (better) → cool/blue; `value < baseline` (worse) → warm/red;
|
|
39
|
+
* `≈ baseline` → neutral gray. `halfRange` sets the saturation span.
|
|
40
|
+
*/
|
|
41
|
+
export function effectColor(value, baseline, halfRange) {
|
|
42
|
+
if (!Number.isFinite(value))
|
|
43
|
+
return "transparent";
|
|
44
|
+
const span = halfRange > 0 ? halfRange : 1;
|
|
45
|
+
const delta = value - baseline;
|
|
46
|
+
// t=0 → teal (better), t=0.5 → neutral, t=1 → amber (worse)
|
|
47
|
+
const t = clamp(0.5 - (0.5 * delta) / span, 0, 1);
|
|
48
|
+
return rampAt(CHAIN_DIVERGING_STOPS, t);
|
|
49
|
+
}
|
|
50
|
+
/** Ink for text drawn on top of an {@link effectColor} fill. */
|
|
51
|
+
export function effectTextColor(value, baseline, halfRange) {
|
|
52
|
+
if (!Number.isFinite(value))
|
|
53
|
+
return "var(--n4-color-muted, #64748b)";
|
|
54
|
+
const span = halfRange > 0 ? halfRange : 1;
|
|
55
|
+
// strong fills (far from baseline) get light ink; near-baseline grays get dark ink
|
|
56
|
+
return Math.abs(value - baseline) > span * 0.45 ? "#f8fafc" : "#0f172a";
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=colors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colors.js","sourceRoot":"","sources":["../../src/chains/colors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGxD;;;;;GAKG;AACH,MAAM,qBAAqB,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAU,CAAC;AAEzE,MAAM,CAAC,MAAM,iBAAiB,GAA4C;IACxE,KAAK,EAAE,aAAa,CAAC,MAAM;IAC3B,UAAU,EAAE,aAAa,CAAC,IAAI;IAC9B,OAAO,EAAE,aAAa,CAAC,MAAM;IAC7B,YAAY,EAAE,aAAa,CAAC,KAAK;IACjC,KAAK,EAAE,aAAa,CAAC,IAAI;IACzB,MAAM,EAAE,aAAa,CAAC,KAAK;IAC3B,KAAK,EAAE,aAAa,CAAC,KAAK;CAC3B,CAAC;AAEF,yDAAyD;AACzD,MAAM,UAAU,SAAS,CAAC,IAAmB,EAAE,SAAkD;IAC/F,OAAO,SAAS,EAAE,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC;AACtD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa,EAAE,QAAgB,EAAE,SAAiB;IAC5E,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,aAAa,CAAC;IAClD,MAAM,IAAI,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC/B,4DAA4D;IAC5D,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAClD,OAAO,MAAM,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,eAAe,CAAC,KAAa,EAAE,QAAgB,EAAE,SAAiB;IAChF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,gCAAgC,CAAC;IACrE,MAAM,IAAI,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,mFAAmF;IACnF,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1E,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serialized contract for the chain-effect analysis — the seam to `dag-ml`.
|
|
3
|
+
*
|
|
4
|
+
* The *authoritative* analysis is a coordination concern that lives native in
|
|
5
|
+
* `dag-ml` (over its `ScoreSet` + `GraphPlan` node identities, with per-dataset
|
|
6
|
+
* normalization and fingerprints). It serializes to the snake_case artifact
|
|
7
|
+
* below — mirroring how `TuningResult` / `CalibratedRunResult` reach this
|
|
8
|
+
* package. {@link parseChainEffectAnalysis} validates and projects it into the
|
|
9
|
+
* camelCase {@link ChainEffectAnalysis} view-model the charts render, trusting
|
|
10
|
+
* the producer's authoritative `goodness`/`baseline` verbatim. Token effects
|
|
11
|
+
* and the position/sequence matrices are *derived* views, so the wire artifact
|
|
12
|
+
* stays lean (metric + lens + baseline + points).
|
|
13
|
+
*
|
|
14
|
+
* {@link toChainEffectArtifact} does the reverse for tests, demos, and hosts
|
|
15
|
+
* that want to persist the descriptive view-model in the same shape.
|
|
16
|
+
*/
|
|
17
|
+
import type { ChainEffectAnalysis } from "./types.js";
|
|
18
|
+
export declare const CHAIN_EFFECT_SCHEMA_ID: "https://github.com/GBeurier/dag-ml/schemas/chain_effect_analysis.v1.schema.json";
|
|
19
|
+
export declare const CHAIN_EFFECT_SCHEMA_VERSION: 1;
|
|
20
|
+
/** Wire spelling of {@link ScoreLens}. */
|
|
21
|
+
export type ChainEffectLensWire = "raw" | "rank_by_dataset" | "z_by_dataset";
|
|
22
|
+
export interface ChainEffectStepArtifact {
|
|
23
|
+
token: string;
|
|
24
|
+
label?: string;
|
|
25
|
+
role: string;
|
|
26
|
+
}
|
|
27
|
+
export interface ChainEffectPointArtifact {
|
|
28
|
+
id: string;
|
|
29
|
+
score: number;
|
|
30
|
+
goodness: number;
|
|
31
|
+
dataset?: string | null;
|
|
32
|
+
source?: string | null;
|
|
33
|
+
ordered_tokens: readonly ChainEffectStepArtifact[];
|
|
34
|
+
}
|
|
35
|
+
export interface ChainEffectMetricArtifact {
|
|
36
|
+
key: string;
|
|
37
|
+
label: string;
|
|
38
|
+
lower_is_better: boolean;
|
|
39
|
+
}
|
|
40
|
+
export interface ChainEffectAnalysisArtifact {
|
|
41
|
+
schema_id: string;
|
|
42
|
+
schema_version: number;
|
|
43
|
+
metric: ChainEffectMetricArtifact;
|
|
44
|
+
lens: ChainEffectLensWire;
|
|
45
|
+
baseline?: number | null;
|
|
46
|
+
points: readonly ChainEffectPointArtifact[];
|
|
47
|
+
}
|
|
48
|
+
/** Structural guard for a serialized chain-effect artifact. */
|
|
49
|
+
export declare function isChainEffectAnalysisArtifact(value: unknown): value is ChainEffectAnalysisArtifact;
|
|
50
|
+
/** Validate + project a serialized artifact into the render-ready view-model. */
|
|
51
|
+
export declare function parseChainEffectAnalysis(value: unknown): ChainEffectAnalysis;
|
|
52
|
+
/** Serialize a view-model back to the wire artifact (tests / demos / hosts). */
|
|
53
|
+
export declare function toChainEffectArtifact(analysis: ChainEffectAnalysis): ChainEffectAnalysisArtifact;
|
|
54
|
+
//# sourceMappingURL=contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/chains/contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAuD,MAAM,YAAY,CAAC;AAG3G,eAAO,MAAM,sBAAsB,EACjC,iFAA0F,CAAC;AAC7F,eAAO,MAAM,2BAA2B,EAAG,CAAU,CAAC;AAEtD,0CAA0C;AAC1C,MAAM,MAAM,mBAAmB,GAAG,KAAK,GAAG,iBAAiB,GAAG,cAAc,CAAC;AAc7E,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,cAAc,EAAE,SAAS,uBAAuB,EAAE,CAAC;CACpD;AAED,MAAM,WAAW,yBAAyB;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,yBAAyB,CAAC;IAClC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,SAAS,wBAAwB,EAAE,CAAC;CAC7C;AA8BD,+DAA+D;AAC/D,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,2BAA2B,CAWlG;AAaD,iFAAiF;AACjF,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,CAwB5E;AAED,gFAAgF;AAChF,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,2BAA2B,CAwBhG"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serialized contract for the chain-effect analysis — the seam to `dag-ml`.
|
|
3
|
+
*
|
|
4
|
+
* The *authoritative* analysis is a coordination concern that lives native in
|
|
5
|
+
* `dag-ml` (over its `ScoreSet` + `GraphPlan` node identities, with per-dataset
|
|
6
|
+
* normalization and fingerprints). It serializes to the snake_case artifact
|
|
7
|
+
* below — mirroring how `TuningResult` / `CalibratedRunResult` reach this
|
|
8
|
+
* package. {@link parseChainEffectAnalysis} validates and projects it into the
|
|
9
|
+
* camelCase {@link ChainEffectAnalysis} view-model the charts render, trusting
|
|
10
|
+
* the producer's authoritative `goodness`/`baseline` verbatim. Token effects
|
|
11
|
+
* and the position/sequence matrices are *derived* views, so the wire artifact
|
|
12
|
+
* stays lean (metric + lens + baseline + points).
|
|
13
|
+
*
|
|
14
|
+
* {@link toChainEffectArtifact} does the reverse for tests, demos, and hosts
|
|
15
|
+
* that want to persist the descriptive view-model in the same shape.
|
|
16
|
+
*/
|
|
17
|
+
import { buildAnalysis } from "./analysis.js";
|
|
18
|
+
import { coerceChainRole } from "./types.js";
|
|
19
|
+
export const CHAIN_EFFECT_SCHEMA_ID = "https://github.com/GBeurier/dag-ml/schemas/chain_effect_analysis.v1.schema.json";
|
|
20
|
+
export const CHAIN_EFFECT_SCHEMA_VERSION = 1;
|
|
21
|
+
const LENS_FROM_WIRE = {
|
|
22
|
+
raw: "raw",
|
|
23
|
+
rank_by_dataset: "rankByDataset",
|
|
24
|
+
z_by_dataset: "zByDataset",
|
|
25
|
+
};
|
|
26
|
+
const LENS_TO_WIRE = {
|
|
27
|
+
raw: "raw",
|
|
28
|
+
rankByDataset: "rank_by_dataset",
|
|
29
|
+
zByDataset: "z_by_dataset",
|
|
30
|
+
};
|
|
31
|
+
function isRecord(value) {
|
|
32
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
33
|
+
}
|
|
34
|
+
function isMetric(value) {
|
|
35
|
+
return (isRecord(value) &&
|
|
36
|
+
typeof value.key === "string" &&
|
|
37
|
+
typeof value.label === "string" &&
|
|
38
|
+
typeof value.lower_is_better === "boolean");
|
|
39
|
+
}
|
|
40
|
+
function isStepArtifact(value) {
|
|
41
|
+
return isRecord(value) && typeof value.token === "string" && typeof value.role === "string";
|
|
42
|
+
}
|
|
43
|
+
function isPointArtifact(value) {
|
|
44
|
+
return (isRecord(value) &&
|
|
45
|
+
typeof value.id === "string" &&
|
|
46
|
+
typeof value.score === "number" &&
|
|
47
|
+
typeof value.goodness === "number" &&
|
|
48
|
+
Array.isArray(value.ordered_tokens) &&
|
|
49
|
+
value.ordered_tokens.every(isStepArtifact));
|
|
50
|
+
}
|
|
51
|
+
/** Structural guard for a serialized chain-effect artifact. */
|
|
52
|
+
export function isChainEffectAnalysisArtifact(value) {
|
|
53
|
+
return (isRecord(value) &&
|
|
54
|
+
value.schema_id === CHAIN_EFFECT_SCHEMA_ID &&
|
|
55
|
+
typeof value.schema_version === "number" &&
|
|
56
|
+
isMetric(value.metric) &&
|
|
57
|
+
typeof value.lens === "string" &&
|
|
58
|
+
value.lens in LENS_FROM_WIRE &&
|
|
59
|
+
Array.isArray(value.points) &&
|
|
60
|
+
value.points.every(isPointArtifact));
|
|
61
|
+
}
|
|
62
|
+
function dedupeArtifactTokens(steps) {
|
|
63
|
+
const seen = new Set();
|
|
64
|
+
const out = [];
|
|
65
|
+
for (const step of steps) {
|
|
66
|
+
if (seen.has(step.token))
|
|
67
|
+
continue;
|
|
68
|
+
seen.add(step.token);
|
|
69
|
+
out.push({ token: step.token, label: step.label ?? step.token, role: coerceChainRole(step.role) });
|
|
70
|
+
}
|
|
71
|
+
return out;
|
|
72
|
+
}
|
|
73
|
+
/** Validate + project a serialized artifact into the render-ready view-model. */
|
|
74
|
+
export function parseChainEffectAnalysis(value) {
|
|
75
|
+
if (!isChainEffectAnalysisArtifact(value)) {
|
|
76
|
+
throw new Error("Invalid chain-effect analysis artifact");
|
|
77
|
+
}
|
|
78
|
+
const metric = {
|
|
79
|
+
key: value.metric.key,
|
|
80
|
+
label: value.metric.label,
|
|
81
|
+
lowerIsBetter: value.metric.lower_is_better,
|
|
82
|
+
};
|
|
83
|
+
const lens = LENS_FROM_WIRE[value.lens];
|
|
84
|
+
const points = value.points.map((point) => {
|
|
85
|
+
const ordered = dedupeArtifactTokens(point.ordered_tokens);
|
|
86
|
+
return {
|
|
87
|
+
id: point.id,
|
|
88
|
+
score: point.score,
|
|
89
|
+
goodness: point.goodness,
|
|
90
|
+
dataset: point.dataset ?? "∗",
|
|
91
|
+
source: point.source ?? "∗",
|
|
92
|
+
tokens: ordered.map((token) => token.token),
|
|
93
|
+
orderedTokens: ordered,
|
|
94
|
+
};
|
|
95
|
+
});
|
|
96
|
+
const baseline = typeof value.baseline === "number" && Number.isFinite(value.baseline) ? value.baseline : undefined;
|
|
97
|
+
return buildAnalysis(points, { metric, lens, baseline });
|
|
98
|
+
}
|
|
99
|
+
/** Serialize a view-model back to the wire artifact (tests / demos / hosts). */
|
|
100
|
+
export function toChainEffectArtifact(analysis) {
|
|
101
|
+
return {
|
|
102
|
+
schema_id: CHAIN_EFFECT_SCHEMA_ID,
|
|
103
|
+
schema_version: CHAIN_EFFECT_SCHEMA_VERSION,
|
|
104
|
+
metric: {
|
|
105
|
+
key: analysis.metric.key,
|
|
106
|
+
label: analysis.metric.label,
|
|
107
|
+
lower_is_better: analysis.metric.lowerIsBetter,
|
|
108
|
+
},
|
|
109
|
+
lens: LENS_TO_WIRE[analysis.lens],
|
|
110
|
+
baseline: analysis.baseline,
|
|
111
|
+
points: analysis.points.map((point) => ({
|
|
112
|
+
id: point.id,
|
|
113
|
+
score: point.score,
|
|
114
|
+
goodness: point.goodness,
|
|
115
|
+
dataset: point.dataset === "∗" ? null : point.dataset,
|
|
116
|
+
source: point.source === "∗" ? null : point.source,
|
|
117
|
+
ordered_tokens: point.orderedTokens.map((token) => ({
|
|
118
|
+
token: token.token,
|
|
119
|
+
label: token.label,
|
|
120
|
+
role: token.role,
|
|
121
|
+
})),
|
|
122
|
+
})),
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/chains/contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* nirs4all-ui `chains` domain — the chain-effect explorer.
|
|
3
|
+
*
|
|
4
|
+
* Turns a corpus of *hundreds* of executed linear pipelines ("chains", e.g.
|
|
5
|
+
* `SNV → SavGol → PLS`), each with a comparable score, into the influence of
|
|
6
|
+
* each node: a global ranking (which steps help / hurt), a position profile
|
|
7
|
+
* (early / mid / late, 1st vs 2nd), an order matrix ("MSC after SNV?"), and a
|
|
8
|
+
* with/without distribution shift — across datasets and sources (multisource,
|
|
9
|
+
* multimodal). Per-dataset rank / z normalization makes heterogeneous datasets
|
|
10
|
+
* comparable.
|
|
11
|
+
*
|
|
12
|
+
* Same package boundary as the rest of nirs4all-ui: presentational + local UI
|
|
13
|
+
* state only — NO app state, network/IO, storage, or runtime execution. The
|
|
14
|
+
* *authoritative* analysis (per-dataset normalization with lineage) is a
|
|
15
|
+
* coordination concern that lives native in `dag-ml`; this domain renders its
|
|
16
|
+
* serialized artifact via {@link parseChainEffectAnalysis} and also ships a
|
|
17
|
+
* descriptive {@link fromScoredChains} adapter (the `viz/geometry` tier) so
|
|
18
|
+
* hosts can render from a raw scored-chain list today. A default stylesheet
|
|
19
|
+
* ships at `nirs4all-ui/assets/chains.css`.
|
|
20
|
+
*
|
|
21
|
+
* Consumed as `nirs4all-ui/chains`.
|
|
22
|
+
*/
|
|
23
|
+
export * from "./types.js";
|
|
24
|
+
export { CHAIN_ROLE_COLORS, roleColor, effectColor, effectTextColor } from "./colors.js";
|
|
25
|
+
export { orientedValue, percentileRanks, zScores, computeChainPoints, dedupeOrderedTokens } from "./normalize.js";
|
|
26
|
+
export { stat, buildAnalysis, fromScoredChains, positionMatrix, sequenceMatrix, tokenContexts, nodeNeighbors, nodeFlow, type BuildAnalysisMeta, type PositionMatrixOptions, type SequenceMatrixOptions, type TokenContextsOptions, type NodeNeighborsOptions, type NodeFlowOptions, } from "./analysis.js";
|
|
27
|
+
export { CHAIN_EFFECT_SCHEMA_ID, CHAIN_EFFECT_SCHEMA_VERSION, isChainEffectAnalysisArtifact, parseChainEffectAnalysis, toChainEffectArtifact, type ChainEffectAnalysisArtifact, type ChainEffectPointArtifact, type ChainEffectStepArtifact, type ChainEffectMetricArtifact, type ChainEffectLensWire, } from "./contract.js";
|
|
28
|
+
export { NodeEffectForest, type NodeEffectForestProps, type ForestSort } from "./NodeEffectForest.js";
|
|
29
|
+
export { PositionEffectHeatmap, type PositionEffectHeatmapProps } from "./PositionEffectHeatmap.js";
|
|
30
|
+
export { SequenceEffectHeatmap, type SequenceEffectHeatmapProps } from "./SequenceEffectHeatmap.js";
|
|
31
|
+
export { ChainScoreBeeswarm, type ChainScoreBeeswarmProps } from "./ChainScoreBeeswarm.js";
|
|
32
|
+
export { ChainExplorer, type ChainExplorerProps } from "./ChainExplorer.js";
|
|
33
|
+
export { ChainNodeOrbit, type ChainNodeOrbitProps } from "./ChainNodeOrbit.js";
|
|
34
|
+
export { ChainNodeHub, type ChainNodeHubProps } from "./ChainNodeHub.js";
|
|
35
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/chains/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,cAAc,YAAY,CAAC;AAG3B,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGzF,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAClH,OAAO,EACL,IAAI,EACJ,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,aAAa,EACb,aAAa,EACb,QAAQ,EACR,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,eAAe,GACrB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,6BAA6B,EAC7B,wBAAwB,EACxB,qBAAqB,EACrB,KAAK,2BAA2B,EAChC,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,GACzB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACtG,OAAO,EAAE,qBAAqB,EAAE,KAAK,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACpG,OAAO,EAAE,qBAAqB,EAAE,KAAK,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACpG,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAG3F,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* nirs4all-ui `chains` domain — the chain-effect explorer.
|
|
3
|
+
*
|
|
4
|
+
* Turns a corpus of *hundreds* of executed linear pipelines ("chains", e.g.
|
|
5
|
+
* `SNV → SavGol → PLS`), each with a comparable score, into the influence of
|
|
6
|
+
* each node: a global ranking (which steps help / hurt), a position profile
|
|
7
|
+
* (early / mid / late, 1st vs 2nd), an order matrix ("MSC after SNV?"), and a
|
|
8
|
+
* with/without distribution shift — across datasets and sources (multisource,
|
|
9
|
+
* multimodal). Per-dataset rank / z normalization makes heterogeneous datasets
|
|
10
|
+
* comparable.
|
|
11
|
+
*
|
|
12
|
+
* Same package boundary as the rest of nirs4all-ui: presentational + local UI
|
|
13
|
+
* state only — NO app state, network/IO, storage, or runtime execution. The
|
|
14
|
+
* *authoritative* analysis (per-dataset normalization with lineage) is a
|
|
15
|
+
* coordination concern that lives native in `dag-ml`; this domain renders its
|
|
16
|
+
* serialized artifact via {@link parseChainEffectAnalysis} and also ships a
|
|
17
|
+
* descriptive {@link fromScoredChains} adapter (the `viz/geometry` tier) so
|
|
18
|
+
* hosts can render from a raw scored-chain list today. A default stylesheet
|
|
19
|
+
* ships at `nirs4all-ui/assets/chains.css`.
|
|
20
|
+
*
|
|
21
|
+
* Consumed as `nirs4all-ui/chains`.
|
|
22
|
+
*/
|
|
23
|
+
// --- view-model contract + role vocabulary ---
|
|
24
|
+
export * from "./types.js";
|
|
25
|
+
// --- palette (reuses the viz teal system) ---
|
|
26
|
+
export { CHAIN_ROLE_COLORS, roleColor, effectColor, effectTextColor } from "./colors.js";
|
|
27
|
+
// --- pure engine (reusable by hosts / tests) ---
|
|
28
|
+
export { orientedValue, percentileRanks, zScores, computeChainPoints, dedupeOrderedTokens } from "./normalize.js";
|
|
29
|
+
export { stat, buildAnalysis, fromScoredChains, positionMatrix, sequenceMatrix, tokenContexts, nodeNeighbors, nodeFlow, } from "./analysis.js";
|
|
30
|
+
// --- serialized dag-ml artifact seam ---
|
|
31
|
+
export { CHAIN_EFFECT_SCHEMA_ID, CHAIN_EFFECT_SCHEMA_VERSION, isChainEffectAnalysisArtifact, parseChainEffectAnalysis, toChainEffectArtifact, } from "./contract.js";
|
|
32
|
+
// --- presentational charts ---
|
|
33
|
+
export { NodeEffectForest } from "./NodeEffectForest.js";
|
|
34
|
+
export { PositionEffectHeatmap } from "./PositionEffectHeatmap.js";
|
|
35
|
+
export { SequenceEffectHeatmap } from "./SequenceEffectHeatmap.js";
|
|
36
|
+
export { ChainScoreBeeswarm } from "./ChainScoreBeeswarm.js";
|
|
37
|
+
// --- the interactive explorers ---
|
|
38
|
+
export { ChainExplorer } from "./ChainExplorer.js";
|
|
39
|
+
export { ChainNodeOrbit } from "./ChainNodeOrbit.js";
|
|
40
|
+
export { ChainNodeHub } from "./ChainNodeHub.js";
|
|
41
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/chains/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,gDAAgD;AAChD,cAAc,YAAY,CAAC;AAE3B,+CAA+C;AAC/C,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEzF,kDAAkD;AAClD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAClH,OAAO,EACL,IAAI,EACJ,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,aAAa,EACb,aAAa,EACb,QAAQ,GAOT,MAAM,eAAe,CAAC;AAEvB,0CAA0C;AAC1C,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,6BAA6B,EAC7B,wBAAwB,EACxB,qBAAqB,GAMtB,MAAM,eAAe,CAAC;AAEvB,gCAAgC;AAChC,OAAO,EAAE,gBAAgB,EAA+C,MAAM,uBAAuB,CAAC;AACtG,OAAO,EAAE,qBAAqB,EAAmC,MAAM,4BAA4B,CAAC;AACpG,OAAO,EAAE,qBAAqB,EAAmC,MAAM,4BAA4B,CAAC;AACpG,OAAO,EAAE,kBAAkB,EAAgC,MAAM,yBAAyB,CAAC;AAE3F,oCAAoC;AACpC,OAAO,EAAE,aAAa,EAA2B,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAA4B,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,YAAY,EAA0B,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Score normalization — turn raw scored chains into a comparable "goodness".
|
|
3
|
+
*
|
|
4
|
+
* Pure, framework-free. This is the *descriptive* normalizer: the same
|
|
5
|
+
* view-model tier as `viz/geometry`. The authoritative, lineage-tracked
|
|
6
|
+
* normalization is a `dag-ml` coordination concern; when its artifact is
|
|
7
|
+
* available the goodness is read from it verbatim ({@link file://./contract.ts})
|
|
8
|
+
* and this module is bypassed.
|
|
9
|
+
*/
|
|
10
|
+
import type { ChainMetric, ChainPoint, ChainStep, ChainTokenRef, ScoredChain, ScoreLens } from "./types.js";
|
|
11
|
+
/** Orient a score so higher is always better. */
|
|
12
|
+
export declare function orientedValue(score: number, lowerIsBetter: boolean): number;
|
|
13
|
+
/**
|
|
14
|
+
* Percentile rank of each value within the list, in `[0, 1]` (1 = largest).
|
|
15
|
+
* Ties share their averaged rank. A single value maps to `0.5`.
|
|
16
|
+
*/
|
|
17
|
+
export declare function percentileRanks(values: readonly number[]): number[];
|
|
18
|
+
/** Sample z-score of each value (mean 0, unit sd); a zero-spread list → all 0. */
|
|
19
|
+
export declare function zScores(values: readonly number[]): number[];
|
|
20
|
+
/** First-occurrence-ordered, deduped token references for a step list. */
|
|
21
|
+
export declare function dedupeOrderedTokens(steps: readonly ChainStep[]): ChainTokenRef[];
|
|
22
|
+
/**
|
|
23
|
+
* Project scored chains to comparable {@link ChainPoint}s under a lens.
|
|
24
|
+
* Chains with a non-finite score should be filtered out by the caller.
|
|
25
|
+
*/
|
|
26
|
+
export declare function computeChainPoints(chains: readonly ScoredChain[], metric: ChainMetric, lens: ScoreLens): ChainPoint[];
|
|
27
|
+
//# sourceMappingURL=normalize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/chains/normalize.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5G,iDAAiD;AACjD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,GAAG,MAAM,CAE3E;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAenE;AAED,kFAAkF;AAClF,wBAAgB,OAAO,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAM3D;AAED,0EAA0E;AAC1E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,aAAa,EAAE,CAShF;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,SAAS,WAAW,EAAE,EAC9B,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,SAAS,GACd,UAAU,EAAE,CAmCd"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Score normalization — turn raw scored chains into a comparable "goodness".
|
|
3
|
+
*
|
|
4
|
+
* Pure, framework-free. This is the *descriptive* normalizer: the same
|
|
5
|
+
* view-model tier as `viz/geometry`. The authoritative, lineage-tracked
|
|
6
|
+
* normalization is a `dag-ml` coordination concern; when its artifact is
|
|
7
|
+
* available the goodness is read from it verbatim ({@link file://./contract.ts})
|
|
8
|
+
* and this module is bypassed.
|
|
9
|
+
*/
|
|
10
|
+
import { mean, stdDev } from "../viz/geometry.js";
|
|
11
|
+
import { coerceChainRole } from "./types.js";
|
|
12
|
+
/** Orient a score so higher is always better. */
|
|
13
|
+
export function orientedValue(score, lowerIsBetter) {
|
|
14
|
+
return lowerIsBetter ? -score : score;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Percentile rank of each value within the list, in `[0, 1]` (1 = largest).
|
|
18
|
+
* Ties share their averaged rank. A single value maps to `0.5`.
|
|
19
|
+
*/
|
|
20
|
+
export function percentileRanks(values) {
|
|
21
|
+
const n = values.length;
|
|
22
|
+
if (n === 0)
|
|
23
|
+
return [];
|
|
24
|
+
if (n === 1)
|
|
25
|
+
return [0.5];
|
|
26
|
+
const order = values.map((value, index) => ({ value, index })).sort((a, b) => a.value - b.value);
|
|
27
|
+
const ranks = new Array(n);
|
|
28
|
+
let i = 0;
|
|
29
|
+
while (i < n) {
|
|
30
|
+
let j = i;
|
|
31
|
+
while (j + 1 < n && order[j + 1].value === order[i].value)
|
|
32
|
+
j += 1;
|
|
33
|
+
const averaged = (i + j) / 2 / (n - 1);
|
|
34
|
+
for (let k = i; k <= j; k += 1)
|
|
35
|
+
ranks[order[k].index] = averaged;
|
|
36
|
+
i = j + 1;
|
|
37
|
+
}
|
|
38
|
+
return ranks;
|
|
39
|
+
}
|
|
40
|
+
/** Sample z-score of each value (mean 0, unit sd); a zero-spread list → all 0. */
|
|
41
|
+
export function zScores(values) {
|
|
42
|
+
if (values.length === 0)
|
|
43
|
+
return [];
|
|
44
|
+
const mu = mean(values);
|
|
45
|
+
const sd = stdDev(values);
|
|
46
|
+
if (!Number.isFinite(sd) || sd === 0)
|
|
47
|
+
return values.map(() => 0);
|
|
48
|
+
return values.map((value) => (value - mu) / sd);
|
|
49
|
+
}
|
|
50
|
+
/** First-occurrence-ordered, deduped token references for a step list. */
|
|
51
|
+
export function dedupeOrderedTokens(steps) {
|
|
52
|
+
const seen = new Set();
|
|
53
|
+
const out = [];
|
|
54
|
+
for (const step of steps) {
|
|
55
|
+
if (seen.has(step.token))
|
|
56
|
+
continue;
|
|
57
|
+
seen.add(step.token);
|
|
58
|
+
out.push({ token: step.token, label: step.label ?? step.token, role: coerceChainRole(step.role) });
|
|
59
|
+
}
|
|
60
|
+
return out;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Project scored chains to comparable {@link ChainPoint}s under a lens.
|
|
64
|
+
* Chains with a non-finite score should be filtered out by the caller.
|
|
65
|
+
*/
|
|
66
|
+
export function computeChainPoints(chains, metric, lens) {
|
|
67
|
+
const oriented = chains.map((chain) => orientedValue(chain.score, metric.lowerIsBetter));
|
|
68
|
+
const goodness = new Array(chains.length);
|
|
69
|
+
if (lens === "raw") {
|
|
70
|
+
for (let i = 0; i < chains.length; i += 1)
|
|
71
|
+
goodness[i] = oriented[i];
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
const groups = new Map();
|
|
75
|
+
chains.forEach((chain, index) => {
|
|
76
|
+
const key = chain.dataset ?? "∗";
|
|
77
|
+
const bucket = groups.get(key);
|
|
78
|
+
if (bucket)
|
|
79
|
+
bucket.push(index);
|
|
80
|
+
else
|
|
81
|
+
groups.set(key, [index]);
|
|
82
|
+
});
|
|
83
|
+
for (const indices of groups.values()) {
|
|
84
|
+
const values = indices.map((index) => oriented[index]);
|
|
85
|
+
const transformed = lens === "rankByDataset" ? percentileRanks(values) : zScores(values);
|
|
86
|
+
indices.forEach((index, k) => {
|
|
87
|
+
goodness[index] = transformed[k];
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return chains.map((chain, index) => {
|
|
92
|
+
const ordered = dedupeOrderedTokens(chain.steps);
|
|
93
|
+
return {
|
|
94
|
+
id: chain.id,
|
|
95
|
+
score: chain.score,
|
|
96
|
+
goodness: goodness[index],
|
|
97
|
+
dataset: chain.dataset ?? "∗",
|
|
98
|
+
source: chain.source ?? "∗",
|
|
99
|
+
tokens: ordered.map((token) => token.token),
|
|
100
|
+
orderedTokens: ordered,
|
|
101
|
+
};
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=normalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/chains/normalize.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared radial geometry for the chain sunburst / hub navigators.
|
|
3
|
+
*
|
|
4
|
+
* Pure, framework-free SVG path + angle helpers, so {@link ChainNodeOrbit} and
|
|
5
|
+
* {@link ChainNodeHub} render from one tested source.
|
|
6
|
+
*/
|
|
7
|
+
import type { FlowNode } from "./types.js";
|
|
8
|
+
export declare const TAU: number;
|
|
9
|
+
/** 12 o'clock — where every ring starts, sweeping clockwise. */
|
|
10
|
+
export declare const START: number;
|
|
11
|
+
/** Cartesian point on a circle of radius `r` at `angle` (radians). */
|
|
12
|
+
export declare function polar(cx0: number, cy0: number, r: number, angle: number): [number, number];
|
|
13
|
+
/** Donut segment between two radii and two angles (clockwise). */
|
|
14
|
+
export declare function annularSector(cx0: number, cy0: number, rInner: number, rOuter: number, a0: number, a1: number): string;
|
|
15
|
+
/** Full pie slice from the centre to `rOuter`. */
|
|
16
|
+
export declare function pieSector(cx0: number, cy0: number, rOuter: number, a0: number, a1: number): string;
|
|
17
|
+
/** Deepest level with nodes in a flow tree. */
|
|
18
|
+
export declare function treeDepth(nodes: readonly FlowNode[]): number;
|
|
19
|
+
/** Tangential label rotation (degrees) at a mid-angle, flipped to stay upright. */
|
|
20
|
+
export declare function labelRotation(mid: number): number;
|
|
21
|
+
//# sourceMappingURL=radial.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radial.d.ts","sourceRoot":"","sources":["../../src/chains/radial.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,eAAO,MAAM,GAAG,QAAc,CAAC;AAC/B,gEAAgE;AAChE,eAAO,MAAM,KAAK,QAAe,CAAC;AAElC,sEAAsE;AACtE,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAE1F;AAED,kEAAkE;AAClE,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAatH;AAED,kDAAkD;AAClD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAKlG;AAED,+CAA+C;AAC/C,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,MAAM,CAI5D;AAED,mFAAmF;AACnF,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKjD"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared radial geometry for the chain sunburst / hub navigators.
|
|
3
|
+
*
|
|
4
|
+
* Pure, framework-free SVG path + angle helpers, so {@link ChainNodeOrbit} and
|
|
5
|
+
* {@link ChainNodeHub} render from one tested source.
|
|
6
|
+
*/
|
|
7
|
+
import { round } from "../viz/geometry.js";
|
|
8
|
+
export const TAU = Math.PI * 2;
|
|
9
|
+
/** 12 o'clock — where every ring starts, sweeping clockwise. */
|
|
10
|
+
export const START = -Math.PI / 2;
|
|
11
|
+
/** Cartesian point on a circle of radius `r` at `angle` (radians). */
|
|
12
|
+
export function polar(cx0, cy0, r, angle) {
|
|
13
|
+
return [cx0 + r * Math.cos(angle), cy0 + r * Math.sin(angle)];
|
|
14
|
+
}
|
|
15
|
+
/** Donut segment between two radii and two angles (clockwise). */
|
|
16
|
+
export function annularSector(cx0, cy0, rInner, rOuter, a0, a1) {
|
|
17
|
+
const large = a1 - a0 > Math.PI ? 1 : 0;
|
|
18
|
+
const [x0o, y0o] = polar(cx0, cy0, rOuter, a0);
|
|
19
|
+
const [x1o, y1o] = polar(cx0, cy0, rOuter, a1);
|
|
20
|
+
const [x1i, y1i] = polar(cx0, cy0, rInner, a1);
|
|
21
|
+
const [x0i, y0i] = polar(cx0, cy0, rInner, a0);
|
|
22
|
+
return [
|
|
23
|
+
`M${round(x0o)} ${round(y0o)}`,
|
|
24
|
+
`A${round(rOuter)} ${round(rOuter)} 0 ${large} 1 ${round(x1o)} ${round(y1o)}`,
|
|
25
|
+
`L${round(x1i)} ${round(y1i)}`,
|
|
26
|
+
`A${round(rInner)} ${round(rInner)} 0 ${large} 0 ${round(x0i)} ${round(y0i)}`,
|
|
27
|
+
"Z",
|
|
28
|
+
].join(" ");
|
|
29
|
+
}
|
|
30
|
+
/** Full pie slice from the centre to `rOuter`. */
|
|
31
|
+
export function pieSector(cx0, cy0, rOuter, a0, a1) {
|
|
32
|
+
const large = a1 - a0 > Math.PI ? 1 : 0;
|
|
33
|
+
const [x0, y0] = polar(cx0, cy0, rOuter, a0);
|
|
34
|
+
const [x1, y1] = polar(cx0, cy0, rOuter, a1);
|
|
35
|
+
return `M${round(cx0)} ${round(cy0)} L${round(x0)} ${round(y0)} A${round(rOuter)} ${round(rOuter)} 0 ${large} 1 ${round(x1)} ${round(y1)} Z`;
|
|
36
|
+
}
|
|
37
|
+
/** Deepest level with nodes in a flow tree. */
|
|
38
|
+
export function treeDepth(nodes) {
|
|
39
|
+
let depth = 0;
|
|
40
|
+
for (const node of nodes)
|
|
41
|
+
depth = Math.max(depth, 1 + treeDepth(node.children));
|
|
42
|
+
return depth;
|
|
43
|
+
}
|
|
44
|
+
/** Tangential label rotation (degrees) at a mid-angle, flipped to stay upright. */
|
|
45
|
+
export function labelRotation(mid) {
|
|
46
|
+
let deg = (mid * 180) / Math.PI + 90;
|
|
47
|
+
deg = ((deg % 360) + 360) % 360;
|
|
48
|
+
if (deg > 90 && deg < 270)
|
|
49
|
+
deg -= 180;
|
|
50
|
+
return round(deg);
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=radial.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radial.js","sourceRoot":"","sources":["../../src/chains/radial.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAG3C,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;AAC/B,gEAAgE;AAChE,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;AAElC,sEAAsE;AACtE,MAAM,UAAU,KAAK,CAAC,GAAW,EAAE,GAAW,EAAE,CAAS,EAAE,KAAa;IACtE,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,aAAa,CAAC,GAAW,EAAE,GAAW,EAAE,MAAc,EAAE,MAAc,EAAE,EAAU,EAAE,EAAU;IAC5G,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IAC/C,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IAC/C,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IAC/C,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IAC/C,OAAO;QACL,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;QAC9B,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;QAC7E,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;QAC9B,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;QAC7E,GAAG;KACJ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,GAAW,EAAE,MAAc,EAAE,EAAU,EAAE,EAAU;IACxF,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IAC7C,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IAC7C,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC;AAC/I,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,SAAS,CAAC,KAA0B;IAClD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACrC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IAChC,IAAI,GAAG,GAAG,EAAE,IAAI,GAAG,GAAG,GAAG;QAAE,GAAG,IAAI,GAAG,CAAC;IACtC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;AACpB,CAAC"}
|