Repository navigation
Releases: kent-tokyo/causasv
Releases · kent-tokyo/causasv
Release list
v0.8.9
What's Changed
- deps(rust): bump serde_json from 1.0.150 to 1.0.151 by @dependabot[bot] in #44
- deps(rust): bump rand from 0.10.2 to 0.10.3 by @dependabot[bot] in #57
- deps(rust): bump indexmap from 2.14.0 to 2.14.2 by @dependabot[bot] in #54
- deps(rust): bump pyo3 from 0.29.0 to 0.29.2 by @dependabot[bot] in #47
- deps(rust): bump thiserror from 2.0.19 to 2.0.20 by @dependabot[bot] in #48
- deps(python): bump ruff from 0.15.20 to 0.16.9 in /py by @dependabot[bot] in #59
Full Changelog: v0.8.8...v0.8.9
v0.8.8
What's Changed
- feat: add Cpdag type — PDAG representation, validation, DAG extension by @kent-tokyo in #38
- feat: land strong d-convex hull graph reduction on main (PR #39 follow-up) by @kent-tokyo in #41
Full Changelog: v0.8.7...v0.8.8
v0.8.7
v0.8.6
What's Changed
- fix: resolve cargo-audit and pip-audit security findings by @kent-tokyo in #34
- feat: quietset label-instability → causasv ASV attribution workflow by @kent-tokyo in #33
- fix: CausalDAG.from_json silently returns an empty graph on standard JSON (P0) by @kent-tokyo in #35
- fix: exact_tree feasibility guard against combinatorial explosion (issue #36) by @kent-tokyo in #37
- ci: bump actions/upload-artifact from 4 to 7 by @dependabot[bot] in #28
- ci: bump actions/download-artifact from 4 to 8 by @dependabot[bot] in #29
- deps(rust): bump rand from 0.10.1 to 0.10.2 by @dependabot[bot] in #30
- deps(rust): bump thiserror from 2.0.18 to 2.0.19 by @dependabot[bot] in #31
- ci: bump actions/setup-python from 6 to 7 by @dependabot[bot] in #32
Full Changelog: v0.8.5...v0.8.6
v0.8.5
v0.8.2
v0.8.1
v0.8.1
Changed
- approx serial path: log-weight normalization now applied consistently across all IS paths. The seeded single-threaded
approximate_asvpath now collects samples before processing and subtractsmax(log_w)beforeexp(), matching the behavior of the batched, adaptive, and adaptive-batched paths. No change to ASV values (self-normalized IS is scale-invariant).
Docs
- README badge count reduced from 11 to 7
- README_ja and README_zh fully synced to v0.8.x feature set
Full Changelog: v0.8.0...v0.8.1
v0.8.0
v0.8.0
Accuracy
- Kahan compensated summation across all IS paths (seeded parallel workers, adaptive_batched)
- Per-batch log-weight normalization in adaptive paths prevents overflow on extreme frontier distributions
src/numerics.rscentralizes numerical helpers
Speed
AsvExplainer::new()cachesparents_mask(eliminates repeated O(n²) setup) andis_rooted_tree(O(n) → O(1) for auto dispatch)approx_adaptive~5× faster than fixed-sampleapproxwhen estimates converge early
Diagnostics
explain_with_diagnostics()returnsfallback_from,fallback_reason, andselected_methodauto()fallback fromexact_dag_sparsetoapproxis always explicit
Testing
- Property-based tests expanded from 7 to 10 axioms (additivity, relabeling invariance, sparse DP consistency)
API Cleanup
Dag::parents_rawnarrowed topub(crate); integration tests use stableDag::parents()APICHANGELOG.mdadded
Docs & Examples
docs/benchmarks.md: full benchmark tablesexamples/benchmark_batched_value_fn.py: demonstratesvalue_fn_batchGIL-reduction benefit
What's Changed
- feat: auto() falls back to approx when exact_dag_sparse hits memory/overflow limit by @kent-tokyo in #26
- feat: Kahan summation + log-weight normalization for approximate ASV by @kent-tokyo in #27
Full Changelog: v0.7.0...v0.8.0
v0.7.0 — sparse exact DP, CI, parallel, batch, ensemble, inspect
What's new in v0.7.0
New exact computation method
exact_dag_sparse: BFS-based sparse order-ideal DP for general DAGs with n ≤ 28. Visits only valid order ideals instead of all 2^n masks — orders-of-magnitude fewer states for sparse DAGs (chains, trees, few branching points). Returnsn_order_ideals,state_ratio, andmemory_mbdiagnostics.auto()dispatch extended: 20 < n ≤ 28 →exact_dag_sparse
Approximate ASV improvements
seed + parallel=True: Deterministic parallel sampling via per-worker splitmix64 seed splitting. Same seed always produces the same result regardless of thread count.value_fn_batch: Acceptvalue_fn_batch(coalitions: list[list[str]]) -> list[float]to amortize Python GIL overhead — reduces call count from O(n_samples × n) to O(n_samples / batch_size).ci=0.95onexplain_adaptive: Returnsci_lowandci_highper feature using normal approximation (z × stderr).
New Python helpers
ASVEnsembleExplainer: Compute ASV across multiple user-supplied DAGs and return mean, std, and rank stability (Kendall τ).dag.inspect(): Structural summary of a DAG — n_nodes, n_edges, is_rooted_tree, max_depth,recommended_method, estimated_dense_states.explain_stability(): Runexplain()with multiple seeds and return mean/std/rank_stability to quantify approximation reliability.
Correctness & reliability
- Overflow guard:
CausasvError::Overflowwhen linear extension counts exceed u64::MAX — no more silent wrong results. - Property-based tests: 7 proptest axiom checks (efficiency, exact==exact_dag, exact_tree==exact, dummy axiom) on randomly generated DAGs.
Graph API
dag.to_json()/dag.from_json(): Round-trippable JSON serialization.dag.ancestors(),dag.descendants(),dag.topological_layers(): Graph traversal helpers.
Breaking changes
None. All public API is backward-compatible.
What's Changed
- feat: add TabularExplainer for sklearn-compatible models by @kent-tokyo in #11
- fix: add version-sync CI job to prevent metadata drift by @kent-tokyo in #12
- feat: add CausalDAG.to_json() and from_json() by @kent-tokyo in #13
- feat: add CausalDAG.ancestors(), descendants(), topological_layers() by @kent-tokyo in #14
- fix: normalize formatting and fix README Paper correspondence (v0.6.1) by @kent-tokyo in #15
- feat: add value_fn_batch for batched coalition evaluation (v0.7.0) by @kent-tokyo in #16
- feat: add deterministic parallel sampling (seed + parallel=True) (v0.8.0) by @kent-tokyo in #17
- feat: add exact_dag_sparse — sparse order-ideal DP for n > 20 DAGs (v0.10.0) by @kent-tokyo in #18
- feat: add ASVEnsembleExplainer for DAG uncertainty quantification (v0.11.0) by @kent-tokyo in #19
- feat: add ci= parameter to explain_adaptive for confidence intervals (v0.9.0) by @kent-tokyo in #20
- feat: add dag.inspect() for DAG structural summary and method recommendation (v0.12.0) by @kent-tokyo in #21
- fix: sync README for v0.7.0 and bump version by @kent-tokyo in #22
- feat: add explain_stability() for seed-stability diagnostics by @kent-tokyo in #23
- feat: add overflow guard to exact DAG DP (CausasvError::Overflow) by @kent-tokyo in #24
- feat: add proptest property-based tests for ASV axioms by @kent-tokyo in #25
New Contributors
- @kent-tokyo made their first contribution in #11
Full Changelog: v0.6.0...v0.7.0
v0.6.0
What's Changed
- deps(rust): Bump criterion from 0.5.1 to 0.8.2 by @dependabot[bot] in #9
- deps(python): Update maturin requirement from <2,>=1 to >=1.14.1,<2 in /py by @dependabot[bot] in #8
- ci: Bump actions/checkout from 4 to 7 by @dependabot[bot] in #1
- deps(rust): Bump rand_chacha from 0.3.1 to 0.10.0 by @dependabot[bot] in #3
- ci: Bump github/codeql-action from 3 to 4 by @dependabot[bot] in #4
- ci: Bump actions/setup-python from 5 to 6 by @dependabot[bot] in #5
- ci: Bump softprops/action-gh-release from 2 to 3 by @dependabot[bot] in #6
- deps(rust): bump pyo3 from 0.23.5 to 0.29.0 by @dependabot[bot] in #7
- deps(rust): bump thiserror from 1.0.69 to 2.0.18 by @dependabot[bot] in #10
New Contributors
- @dependabot[bot] made their first contribution in #9
Full Changelog: v0.5.0...v0.6.0