Repository navigation
Consume axis-wide coord_shift offset reactions in stochastic execution - #181
Merged
Merged
Conversation
op_system #243 publishes one templated reaction per state for an axis-wide coord_shift, with the shifted axis in a new offsets field rather than in to_axes or pinned. The network compiler rejected these as having inconsistent sum_axes metadata. Validate offsets as nonzero shifts of channel axes that no other destination field covers, and require to_axes, pinned, and offsets together to cover the destination. Each source bin's channel deposits at the shifted coordinate; an off-axis destination yields a donor-only column. Artifacts without offsets compile unchanged. Advance the development op_system pins to the #243 merge. Published dependency requirements are unchanged. Refs #180 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Prescribed direct-SSA events move one unit through every bin and remove it at the absorbing boundary, under NumPy and JAX. Over 1,024 seeded replicates, equal-rate pure aging matches the analytic Poisson bin occupancy, and the exited count matches the Erlang(n, r) distribution function, within five standard errors. A stay boundary conserves every path, and its last bin accumulates the Erlang(n - 1, r) probability. Refs #180 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add a runnable provider example for one-entry aging chains, describe the offset channel contract and absorbing or stay boundaries, state the Poisson occupancy and Erlang exit-time expectations, and record the change. Closes #180 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
op_system #243 lets an aging chain be declared as one axis-wide
coord_shiftentry. Each such entry publishes one templated reaction per state template, and the shifted axis appears in a newoffsetsfield as(axis, step)rather than into_axesorpinned. The network compiler rejected these reactions with "inconsistent sum_axes metadata", so the numerical-engine acceptance test from ACCIDDA/op_system#238 could not run.The compiler now validates
offsetsand expands each source bin into a channel that deposits atk + step. Whenk + stepfalls off the axis, the column only removes the donor (boundary: absorb). Underboundary: stay, the producer already gives those bins zero propensity. Artifacts withoutoffsets, including those from producers that predate it, compile unchanged.The development op_system pins advance to the #243 merge. Published dependency requirements are unchanged.
Closes #180.
Behavior
offsetsmust shift channel axes (from_axes) by a nonzero step, and those axes must not also appear into_axesorpinned. Destination coverage is nowto_axes ∪ pinned ∪ offset axes == full_axes, andsum_axes == from_axes − to_axes − offset axes. Malformed offsets fail with aValueError.Coverage
absorbandstay, forward and backward steps, with no group axis and with a retained group axis in both state-axis orders.offsetsproduce the same network as before. Zero steps, overlapping copied axes, duplicate offsets, and inconsistentsum_axesall fail.absorb, the count that has left matches the Erlang(4, 2) distribution function.stay, every path conserves its total, and the last bin holds the Erlang(3, 2) probability.Docs
Validation
just ci: 592 core tests passed, 2 skipped. 352 provider tests passed (34 new). Formatting, Ruff, and strict mypy passed for both packages.just docs: strict documentation build passed.UV_PYTHON_VERSION=3.13 just build-all: both wheels passed strict metadata checks. The clean core suite passed (579 passed, 2 skipped), and the provider suite passed against installed wheels with op_system from the #243 pin.As with the renewal tests from #179, the new tests require the pinned producer; published op_system 0.5.0 predates axis-wide
coord_shift.Three focused commits: 319, 141, and 70 changed lines (530 total).
🤖 Generated with Claude Code