Repository navigation
Re-vendor RuleMonkey 3.11.0 to 3.12.0 - #1220
Merged
Merged
Conversation
Refresh third_party/rulemonkey with scripts/vendor_rulemonkey.py at tag v3.12.0 (richardposner/RuleMonkey@9df2984), from 3.11.0 (f11c251). This refresh needed the two-repo ordering. This tree's expression.hpp and expression.cpp had moved past 3.11.0's ExprTk sync pin (6ce2276), so richardposner/RuleMonkey#120 re-synced RuleMonkey's standalone copy to bngsim 4361958 before the release was cut, and --summary reports the pin matching this tree. What reaches method="rm" and RuleMonkeySession: - functions settle in dependency order, so one that reads a function listed after it in the XML no longer reads a stale value; a table function indexed by a function no longer overflows the stack; a function that reads a table function gets its whole expression (richardposner/RuleMonkey#111); - a rate law that reads reactant_N() through a helper function fires at its own rule's count (richardposner/RuleMonkey#59); - RuleMonkey keeps its clock as a per-call origin plus elapsed time (richardposner/RuleMonkey#110). bngsim already ran clock-free models on elapsed time; a model that reads the clock runs on absolute model time since #1022, and now keeps its waiting times there. #1059's decay, with g() made to read time(), 10 seeds, A0 at t0 + 2 against 1e5*e^-1 = 36788: 36733 (z = -1.1) from t0 = 0, 1e9, 1e12 and 1e13 alike, where #1059 reports 22743 (z = -291) at 1e12 on 3.11.0; - a session that runs out of events moves its clock to t_end, so the next segment from t_end runs. A clock-reading model that decays out now reports current_time = 10.0 after simulate(0, 10, 10), and simulate(10, 20, 10) runs; - a non-finite t_end, a NaN segment start and a NaN in sample_times are refused. RuleMonkey's Arrhenius changes (richardposner/RuleMonkey#109) do not reach users yet: refuse_rulemonkey_energy_misreads still refuses every shape 3.11.0 misread, and lifting it is #1058. The one bngsim test that changes is test_rulemonkey_names_an_energy_rule_shape_it_refuses_itself, which matched 3.11.0's wording of RuleMonkey's own refusal of a state-change Arrhenius rule. RuleMonkey still refuses it by name; the message now reads "outside the shapes RM runs: it changes a state ...". run_ensemble() is new in RuleMonkey's API, and bngsim does not call it. RuleMonkey's include/ changed only by addition, so nothing bngsim compiles against changed signature. librulemonkey now links Threads::Threads, found by RuleMonkey's own CMakeLists.txt under add_subdirectory().
scripts/RULEMONKEY_VENDORING.md still named 3.11.0 (f11c251) as the vendored commit; VENDOR.json now records v3.12.0 at 9df2984. Unlike the two refreshes before it, this one needed the two-repo ordering the doc describes, and the doc now says so and names the upstream sync, richardposner/RuleMonkey#120 (ExprTk sync pin 6ce2276 -> 4361958).
This was referenced Oct 23, 2026
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.
Refresh
third_party/rulemonkeywithscripts/vendor_rulemonkey.pyat tagv3.12.0(richardposner/RuleMonkey@9df2984), from 3.11.0 (f11c251). The second commit records the new baseline inscripts/RULEMONKEY_VENDORING.md.Two-repo ordering, done upstream first
This tree's
expression.hppandexpression.cpphad moved past 3.11.0's ExprTk sync pin (6ce2276), so theEXPRTK_SYNC_FILESguard would have refused the tag. richardposner/RuleMonkey#120 re-synced RuleMonkey's standalone copy to bngsim4361958before the release was cut.--summaryreportsExprTk sync pin: 4361958… (matches current BNGsim tree), and that pin is still current onmainat 02bb304.What reaches
method="rm"andRuleMonkeySessionreactant_N()through a helper (Local-function product rate law silently yields zero propensity (no reactions fire) richardposner/RuleMonkey#59): such a rate law fires at its own rule's count, where it never fired before.t_start(A run from a large t_start loses its waiting times to rounding: keep the clock as origin + elapsed richardposner/RuleMonkey#110). RuleMonkey keeps its clock as a per-call origin plus elapsed time. bngsim already ran clock-free models on elapsed time. A model that reads the clock has run on absolute model time since Re-vendor RuleMonkey 3.11.0: lift method='rm''s time() and time-TFUN refusals, run rm on absolute model time, and pick up the RuleMonkey fixes since 3.10.1 #1022, and now keeps its waiting times there. I measured SSA, and rm on a model that reads the clock, lose waiting times to rounding at a large absolute t_start (z = -287 at 1e12, silent) #1059's decay withg()made to readtime(), 10 seeds,A0at t0 + 2 against 1e5·e⁻¹ = 36788. It gives 36733 (z = −1.1) from t0 = 0, 1e9, 1e12 and 1e13 alike; SSA, and rm on a model that reads the clock, lose waiting times to rounding at a large absolute t_start (z = -287 at 1e12, silent) #1059 reports 22743 (z = −291) at 1e12 on 3.11.0. That is thermhalf of SSA, and rm on a model that reads the clock, lose waiting times to rounding at a large absolute t_start (z = -287 at 1e12, silent) #1059. Thessahalf is bngsim's own engine and is not touched here.t_end. A clock-reading model that decays out now reportscurrent_time == 10.0aftersimulate(0, 10, 10), andsimulate(10, 20, 10)runs.t_end, a NaN segment start and a NaN insample_timesare refused.RuleMonkey's Arrhenius work (richardposner/RuleMonkey#109) does not reach users yet.
refuse_rulemonkey_energy_misreadsstill refuses every shape 3.11.0 misread, and lifting it is #1058.run_ensemble()is new in RuleMonkey's API, and bngsim does not call it. RuleMonkey'sinclude/changed only by addition, so nothing bngsim compiles against changes signature.librulemonkeynow linksThreads::Threads, found by RuleMonkey's ownCMakeLists.txtunderadd_subdirectory().The one test change
test_rulemonkey_names_an_energy_rule_shape_it_refuses_itselfmatched 3.11.0's wording of RuleMonkey's own refusal of a state-change Arrhenius rule ("binding/unbinding shape"). RuleMonkey still refuses that rule by name, now as "outside the shapes RM runs: it changes a state …", and the test matches that.Verified
vendor_rulemonkey.py --summary, then--checkbefore writing (it reported the expected 18-path drift and no guard failures), then the refresh, then--checkagain: "matches v3.12.0 @ 9df2984".scripts/rebuild_editable.py, with no warnings from RuleMonkey's sources.test_rulemonkey.py38 passed, andtest_timeout.py -k rulemonkey10 passed.scripts/local_ci.py wheel --python 3.12: ALL PASS, including the RuleMonkey session smoke.python/testsrun passed, twice. The first push's SSH connection timed out during a 29-minute cold-cache run; the second passed again and pushed.Changelog:
changelog.d/+rulemonkey-3-12-0.fixed.md.Follow-ups: #1058 (lift
refuse_rulemonkey_energy_misreads, tracked upstream as richardposner/RuleMonkey#118), and #1059'sssahalf.