All notable changes to this project are documented in this file.
v1.3.0 (2026-05-17)
Enhancements
HypergraphSVG.to_svg/2— improved force-directed layout with better handling of large hyperedges and more compact spacing; added title option for SVGsMultiwayGraphSVG.to_svg/2— fit-to-width layout — when the:widthoption is provided, the graph's horizontal positions are now scaled so the layout fills exactly the requested width. Previously the:widthoption only set the canvas size without adjusting node positions.
v1.2.0 (2026-05-17)
New features
Analytics.estimate_ricci_scalar/1— estimates the Ricci scalar curvature $R$ of a hypergraph from the geodesic ball growth correction: $V(r) \approx C_d\, r^d (1 - R\, r^2 / (6(d+2)))$. A linear regression of $\Delta(r) = \log V(r) - d \log r$ against $r^2$ gives the slope $-R/(6(d+2))$, from which $R$ is recovered. Positive values indicate sphere-like (positive) curvature; negative values indicate hyperbolic-like (negative) curvature; values near zero indicate flat Euclidean geometry. Returnsnilfor graphs with fewer than 6 vertices.wolfram_model.livemd— interactive Livebook notebook covering Wolfram Physics theory, all major module features, and geometry examples (dimension estimation, Ricci curvature across flat/sphere/evolved hypergraphs).
v1.1.0 (2026-05-15)
New features
WolframModel.HypergraphSVG— SVG rendering of a hypergraph state using a force-directed spring layout. Unary edges render as dashed rings, binary edges as directed arrows, and N-ary edges as translucent coloured polygons.evolution_to_svg/2produces a horizontal strip of panels, one per generation snapshot.WolframModel.MultiwayGraphSVG— hierarchical (BFS-level) layout of the multiway DAG returned bymultiway_explore_dag/2. Nodes are labelled with vertex count, edge count, and generation; the root is highlighted; edges are drawn as cubic Bézier curves.WolframModel.BranchialGraphSVG— circular layout of the branchial graph returned bybranchial_graph/1. Nodes are coloured by rule name with a rule-name legend; conflict edges are drawn dashed.WolframModel.GeodesicPlotSVG— dual-panel SVG line chart showing geodesic ball growth: a linearV(r)vsrpanel and a log-log panel with a best-fit slope labelledd≈…giving the estimated spatial dimension. Uses the same hypergraph-native BFS asAnalytics.estimate_dimension/1.
v1.0.0 (2026-05-15)
Breaking changes
causally_invariant?/1now accepts an optionaldepthargument (causally_invariant?/2); callers that relied on the 1-arity form are unaffected (default depth is2).- Fresh-vertex substitution is now memoised per rule application: a single unbound atom tag produces one stable vertex ID across all replacement hyperedges in the same application. Code that relied on each hyperedge receiving a distinct fresh ID for the same tag will observe different IDs.
New features
- N-pattern rule matching —
WolframModel.Matcher.match/2now supports rules with any number of input hyperedges via recursive backtracking. Previously only 1- and 2-pattern rules were supported. Update orderings —
evolve_step/2acceptsordering: :first | :leftmost | :randomto select which rule match is applied.- Parallel evolution —
evolve_parallel/1greedily applies all non-conflicting matches in a single model step. - Fixpoint detection —
fixpoint?/1andevolve_until_fixpoint/3. - Multiway DAG —
multiway_explore_dag/2returns a proper DAG (%{root:, nodes:, edges:}) where converging branches share nodes. - Improved causal invariance —
causally_invariant?/2now tests both non-overlapping pairs (commutativity) and overlapping pairs (local Church–Rosser property up to configurable depth). - Hypergraph-native dimension estimation —
Analytics.estimate_dimension/1now uses hypergraph BFS (traversal through whole hyperedges) and up to 10 seed vertices. - Conservation law detection —
Analytics.detect_conserved_quantities/1scans the evolution history for conserved vertex count, edge count, total degree, and their parities. - Rule notation parser/printer — new
WolframModel.Rulemodule withparse/2andto_string/1for the standard Wolfram notation{{1,2},{1,3}} -> {{2,3},{1,4}}. - Rule equivalence —
RuleAnalysis.canonical_form/1andRuleAnalysis.equivalent?/2check structural isomorphism up to variable renaming. - Wolfram benchmark rules —
RuleSet.rule_set(:wolfram, key)andRuleSet.wolfram_rules/0expose five canonical rules from the Wolfram Physics Project (including the 3-pattern triangle rule).
v0.3.0 (2026-05-15)
- Generalised fresh vertex substitution: any unbound atom in a rule replacement
is now treated as a new-vertex tag, removing the hardcoded
:new/:center/:parallel/:new1/:new2/:new3special-cases - Fixed
causal_network_data/1to derive edges from pre-computedparent_ids(O(n) instead of O(n²)) and removed deadcausally_related?/2 - Fixed
calculate_clustering_coefficient/1guard to usemap_size/1instead oflength/1on a map (guard now fires correctly for small adjacency maps) - Added
WolframModel.foliations/1— spacelike event layers (foliations of the causal partial order) - Added
WolframModel.branchial_graph/1— branchial connections between conflicting/overlapping rule matches at the current state - Added
WolframModel.causally_invariant?/1— confluence check: verifies that all pairs of non-overlapping rule applications commute - Added
WolframModel.export_event_graph/1— exports causal events as a%{nodes, edges}graph using storedparent_ids - Added
WolframModel.Analytics.estimate_dimension/1— estimates effective spatial dimension via geodesic ball growth and log-log regression - Added
WolframModel.RuleAnalysismodule withreversible?/1,self_complementary?/1,introduces_new_vertices?/1,hyperedge_delta/1, andarity/1
v0.2.0 (2025-12-29)
- Added property tests for two-hyperedge patterns
- Improved deterministic matching
- Enhanced event/cause indexing and analytics
- Fixed various invariants and Dialyzer warnings