Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
742 commits
Select commit Hold shift + click to select a range
092e612
docs(tutorial): promote user_homotopy -> HomotopySolver in tutorials
ofloveandhate Jun 29, 2026
ed026a7
build(cli): sync the CLI into python/bertini/_bin for editable/dev in…
ofloveandhate Jun 29, 2026
fb35f01
build(cli): add a `cli` install component for a CLI-only install
ofloveandhate Jun 29, 2026
0bd35c7
docs(readme): add a CLI install note covering every build path
ofloveandhate Jun 29, 2026
7ca5f93
feat(nag): is_nonsolution flag + solutions() filtered getter
ofloveandhate Jun 29, 2026
442a2b8
test(nag): make the nonsolution-count assertions seed-robust; rename …
ofloveandhate Jun 29, 2026
9e8506b
fix(endgames): deterministic, reused c/k probe vector in the Cauchy o…
ofloveandhate Jun 29, 2026
f7a5ecc
test(start-systems): cross-cutting sanity tests for TotalDegree/MHom …
ofloveandhate Jun 29, 2026
b27b595
tools: add run_with_watchdog.sh (hard timeout + process-group kill fo…
ofloveandhate Jun 29, 2026
58834bb
feat(zero-dim): per-path wall-clock timing in solution metadata (path…
ofloveandhate Jun 29, 2026
4a91d48
fix(system): System +=/*= handle structured-block systems instead of …
ofloveandhate Jun 29, 2026
2c2c6a7
docs(precision_models): update solver class-name doctest to the de-te…
ofloveandhate Jun 29, 2026
0fa7f4c
fix(system): make function() work on structured systems; add slices()…
ofloveandhate Jun 29, 2026
de1d057
docs(adr): update ADR-0040 for is_nonsolution + solutions() getter
ofloveandhate Jun 29, 2026
99e2174
feat(describe): show low-precision coefficients in system describe (#…
ofloveandhate Jun 29, 2026
d5d2df8
Merge pull request #49 from ofloveandhate/feature/split_zerodimsolver…
ofloveandhate Jun 29, 2026
e7e20e5
Merge branch 'develop' into feature/cauchy-probe-sanity-timing
ofloveandhate Jun 29, 2026
bcaf8d4
Merge remote-tracking branch 'origin/develop' into feature/amp-endgam…
ofloveandhate Jun 29, 2026
31367da
Merge pull request #50 from ofloveandhate/feature/cauchy-probe-sanity…
ofloveandhate Jun 29, 2026
1beac99
Merge pull request #51 from ofloveandhate/fix/263-function-on-slice-s…
ofloveandhate Jun 29, 2026
676a8f4
Merge remote-tracking branch 'origin/develop' into feature/amp-endgam…
ofloveandhate Jun 29, 2026
6b833d1
Merge pull request #52 from ofloveandhate/fix/264-describe-coefficients
ofloveandhate Jun 29, 2026
02c0e6b
Merge remote-tracking branch 'origin/develop' into feature/amp-endgam…
ofloveandhate Jun 29, 2026
1882d33
bump version to 3.0.0.dev5
ofloveandhate Jun 29, 2026
6e3e36f
fix(docs): moving_slice eval_time_derivative doctest precision mismatch
ofloveandhate Jun 29, 2026
df34030
Merge pull request #53 from ofloveandhate/fix/moving-slice-doctest-pr…
ofloveandhate Jun 29, 2026
6a7c7a6
docs(cpp): add Doxygen doc-lint gate + clean up doc config
ofloveandhate Jun 29, 2026
a2172f8
docs(cpp): correct rotted Doxygen comments across the core
ofloveandhate Jun 29, 2026
7379098
ci: gate the build matrix on the doc lint (fail before any compile)
ofloveandhate Jun 29, 2026
c2b9198
chore: add .git-blame-ignore-revs for future formatting passes
ofloveandhate Jun 29, 2026
24e8c4d
docs(cpp): document the blackbox public API (Phase C)
ofloveandhate Jun 29, 2026
acfdbb5
docs(cpp): document nag_algorithms event/midpath/trace helpers (Phase C)
ofloveandhate Jun 29, 2026
1cf3c07
docs(cpp): document the NID algorithm + datatype scaffolding (Phase C)
ofloveandhate Jun 29, 2026
c3997b0
docs(cpp): document the classic-output formatters (Phase C)
ofloveandhate Jun 29, 2026
ad64132
docs(cpp): document the zero-dim solver (Phase C)
ofloveandhate Jun 29, 2026
8b1fae9
docs(cpp): document the nag algorithm config structs + base (Phase C)
ofloveandhate Jun 29, 2026
ad040f2
feat(endgames): adaptive numeric type for the AMP Cauchy endgame (dou…
ofloveandhate Jun 29, 2026
00188a3
feat(endgames): PowerSeries double-first AMP driver; factor migration…
ofloveandhate Jun 29, 2026
92b451f
test(endgames): prove the PowerSeries double->mpfr migration path
ofloveandhate Jun 29, 2026
0e7c9d1
feat(nag): honest per-solution precision + accuracy in metadata (digi…
ofloveandhate Jun 29, 2026
0a16fb6
docs(tutorial): refresh b1-vs-b2 timing honestly after the adaptive-n…
ofloveandhate Jun 29, 2026
3253391
docs(cpp): document the function_tree expression-tree core (Phase C)
ofloveandhate Jun 29, 2026
0cc1569
fix(start): bound start-system coefficient modulus (replace heavy-tai…
ofloveandhate Jun 30, 2026
22eeda8
docs(cpp): document the endgames subsystem (Phase C)
ofloveandhate Jun 30, 2026
2d9866b
fix(start): bound RootsOfUnity (binomial) constant modulus too
ofloveandhate Jun 30, 2026
2ec6f3c
docs(cpp): document the trackers subsystem (Phase C)
ofloveandhate Jun 30, 2026
e67f074
refactor(start): rename start systems to TotalDegreeBinomial / TotalD…
ofloveandhate Jun 30, 2026
df14838
refactor(metadata): rename endgame_success -> endgame_success_code (a…
ofloveandhate Jun 30, 2026
22d6571
docs(cpp): document the system subsystem (Phase C)
ofloveandhate Jun 30, 2026
615105b
docs(cpp): document the detail subsystem (Phase C)
ofloveandhate Jun 30, 2026
b15002c
docs(cpp): document the io subsystem (Phase C)
ofloveandhate Jun 30, 2026
b3dbc0f
docs(cpp): document parallel, pool, and nag_datatypes (Phase C)
ofloveandhate Jun 30, 2026
b2fd42b
fix(patch): draw patch coefficients with bounded modulus (away from 0…
ofloveandhate Jun 30, 2026
410b09b
docs(cpp): document the top-level headers; ratchet reaches 0 (Phase C)
ofloveandhate Jun 30, 2026
a5e08eb
Merge pull request #54 from ofloveandhate/feature/cpp-doc-lint
ofloveandhate Jun 30, 2026
efef3d9
Merge remote-tracking branch 'origin/develop' into feature/amp-endgam…
ofloveandhate Jun 30, 2026
344dea0
docs(cpp)+rename: document 55's new entities for the doc-lint; final_…
ofloveandhate Jun 30, 2026
e7da229
fix(slice): draw slice coefficients with bounded modulus (away from 0…
ofloveandhate Jun 30, 2026
714df41
docs(adr): ADR-0041 — bounded-modulus random coefficients (start syst…
ofloveandhate Jun 30, 2026
93a81f8
feat(random): conjugate-orthonormal random matrices (RandomConjugateO…
ofloveandhate Jun 30, 2026
2f198ec
test(docs): un-gate the crossed_paths doc example -- the fast endgame…
ofloveandhate Jun 30, 2026
2b0a8b6
Merge pull request #55 from ofloveandhate/feature/amp-endgame-numeric…
ofloveandhate Jun 30, 2026
3e699a3
bump version to 3.0.0.dev6
ofloveandhate Jun 30, 2026
febfd62
fix(mhom): serialize all MHomogeneous members so MPI workers get a va…
ofloveandhate Jun 30, 2026
f3d0134
docs(scaling): refresh solving_at_scale timing tables on a 16-core M3…
ofloveandhate Jun 30, 2026
853ee9b
fix(parse): strip % comments when reading a classic input FILE (Berti…
ofloveandhate Jun 30, 2026
861e3ca
test(printing): magnitude-independent terse coefficient bound (fix fl…
ofloveandhate Jun 30, 2026
ab65ed7
feat(system): symbolic Jacobian (matrix of expression nodes) + natura…
ofloveandhate Jun 30, 2026
3dd5fa3
feat(python): bind the symbolic Jacobian -> bertini.jacobian + System…
ofloveandhate Jun 30, 2026
fb434c8
test(jacobian): cover every block type (linear-forms, slice, products…
ofloveandhate Jun 30, 2026
c5ade48
feat(random): bertini.random_matrix (orthonormal / bounded-modulus / …
ofloveandhate Jun 30, 2026
2212c80
feat(criticality): nullvector critical-points recipe -- test, tutoria…
ofloveandhate Jun 30, 2026
342cffa
fix(system): snapshot pre-homogenization functions BEFORE resizing ho…
ofloveandhate Jun 30, 2026
eeb866e
docs(criticality): explain critical points as branch points (where th…
ofloveandhate Jun 30, 2026
cfa7c32
docs(criticality): fix the projection-direction arrow (project ALONG …
ofloveandhate Jul 1, 2026
4e8ed6e
docs(criticality): fix two section-underline lengths (sphinx warnings)
ofloveandhate Jul 1, 2026
24440cc
fix(slp): stop over-reading the instruction tape by one word in Eval
ofloveandhate Jul 1, 2026
d45a5b4
prototype(slp-cse): power-fold x*x -> x^2 at operator*= (binary/adjac…
ofloveandhate Jul 1, 2026
e19c888
feat(slp-cse): flatten + sort + power-fold products in CanonicalizeNa…
ofloveandhate Jul 1, 2026
7bf9ad2
feat(slp-cse): instruction-level value-numbering in the SLP compiler
ofloveandhate Jul 1, 2026
9f876e1
fix(slp-cse): don't splice divisor sub-products when flattening (avoi…
ofloveandhate Jul 1, 2026
641ec02
fix(function_tree): correct group-degree of an integer power of a sum
ofloveandhate Jul 1, 2026
a25436a
Merge pull request #56 from ofloveandhate/fix/parallel_serialization
ofloveandhate Jul 1, 2026
2bdd4b9
Merge pull request #58 from ofloveandhate/fix/slp-eval-tape-overread
ofloveandhate Jul 1, 2026
9ec829e
Merge remote-tracking branch 'origin/develop' into feature/symbolic-j…
ofloveandhate Jul 1, 2026
6d073b1
docs(cpp): document NodeMatrix rows/cols members + note the doc-lint …
ofloveandhate Jul 1, 2026
ad99d58
test(slp-cse): env-var A/B toggles + isolated SLP benchmark
ofloveandhate Jul 1, 2026
1759501
docs(criticality): make the tutorial honest -- full reducible curve, …
ofloveandhate Jul 1, 2026
a0a187e
Merge remote-tracking branch 'origin/develop' into feature/slp-cse-fo…
ofloveandhate Jul 1, 2026
2e7a762
Merge pull request #59 from ofloveandhate/feature/symbolic-jacobian
ofloveandhate Jul 1, 2026
1c71696
Merge pull request #60 from ofloveandhate/feature/slp-cse-fold-and-va…
ofloveandhate Jul 1, 2026
8e99d6b
docs(tutorials): one folder per tutorial (index.rst) with owned assets
ofloveandhate Jul 1, 2026
3ea5832
chore(examples): delete dead/redundant example scripts
ofloveandhate Jul 1, 2026
7655702
docs(tutorials): complete runnable script at the bottom of 5 tutorials
ofloveandhate Jul 1, 2026
f1feec7
docs(tutorials): complete runnable script at the bottom of 5 more tut…
ofloveandhate Jul 1, 2026
06afbcf
docs(tutorials): complete runnable script at the bottom of 6 more tut…
ofloveandhate Jul 1, 2026
ba635f8
docs(tutorials): complete runnable script at the bottom of the 3 plot…
ofloveandhate Jul 1, 2026
cd3aaa9
tools: refresh_doc_artifacts.py -- one entry point, timings/plots split
ofloveandhate Jul 1, 2026
0f2d9ea
docs(solving_at_scale): numbers as data, not prose
ofloveandhate Jul 1, 2026
35c5438
build(version): single-source VERSION file + full version in C++/CLI
ofloveandhate Jul 1, 2026
f79e5b7
updated year
ofloveandhate Jul 1, 2026
d2be4fb
docs(detailed): auto-generate the API reference with autosummary :rec…
ofloveandhate Jul 1, 2026
b716285
Merge pull request #61 from ofloveandhate/feature/version-single-sour…
ofloveandhate Jul 1, 2026
476b4f5
feat(parsing,system): Unicode identifiers + collision-safe path varia…
ofloveandhate Jul 1, 2026
8b35e5f
fix(python): stop leaking os/sys/info into the bertini.* namespace
ofloveandhate Jul 1, 2026
5c49a71
feat(function_tree): validate variable names are well-formed identifiers
ofloveandhate Jul 1, 2026
9d1f04d
feat(naming): allow emoji in variable names, including multi-code-poi…
ofloveandhate Jul 1, 2026
9881bb2
docs(refresh): timing-freshness release gate + critical_points plot r…
ofloveandhate Jul 1, 2026
7c70cf7
Merge pull request #63 from ofloveandhate/feature/docs_structure
ofloveandhate Jul 1, 2026
22aa5c1
Merge pull request #62 from ofloveandhate/feature/unicode-identifiers…
ofloveandhate Jul 1, 2026
2917e81
Bump version to 3.0.0.dev7
ofloveandhate Jul 1, 2026
9e6672d
feat(python): flatten public API — hoists, root enums, constants, ope…
ofloveandhate Jul 2, 2026
5dc3f68
feat(python): introduce flat bertini.symbolics (renames function_tree)
ofloveandhate Jul 2, 2026
c392f0b
feat(python): dissolve linalg into System methods + top-level coeffic…
ofloveandhate Jul 2, 2026
a94dcfd
feat(python): hide NID/WitnessSet/Differential and make_* from the pu…
ofloveandhate Jul 2, 2026
dfdc586
feat(python): rename numeric types (_mp), spell out endgames, Variabl…
ofloveandhate Jul 2, 2026
36b6c2d
docs: add namespace-flattening migration guide (skeleton)
ofloveandhate Jul 2, 2026
b19213b
docs(adr): ADR-0042 System content identity — canonical encoding, sta…
ofloveandhate Jul 2, 2026
bf445b6
refactor: sweep tutorials, examples, and tests to the flat API
ofloveandhate Jul 2, 2026
901a05e
feat(detail): self-contained SHA-256 (FIPS 180-4) + Digest256, pinned…
ofloveandhate Jul 2, 2026
ba7a84c
refactor: remove deprecated aliases (function_tree, linalg, CapWords …
ofloveandhate Jul 2, 2026
2702e56
feat(slp): hash-cons SLPPrograms — ContentHash/SameContent + weak int…
ofloveandhate Jul 2, 2026
37dfb19
feat(function_tree): canonical exact node encoding — the persistent-i…
ofloveandhate Jul 2, 2026
0ec80a9
feat(system): ContentDigest/Hash/IsSame — persistent System content i…
ofloveandhate Jul 2, 2026
ee7e6ee
feat(system): Seal()/IsSealed() — hashcons-on-freeze; structural muta…
ofloveandhate Jul 2, 2026
cfd4804
feat(system): InternSystem — digest-keyed weak intern table for Syste…
ofloveandhate Jul 2, 2026
840b0bc
feat(function_tree): node::Reintern — re-intern deserialized DAGs ont…
ofloveandhate Jul 2, 2026
5520a87
feat(system): re-intern-on-load — System::ReinternNodes + LoadSystemU…
ofloveandhate Jul 2, 2026
4fc2848
feat(python): System content-identity surface — content_digest/is_sam…
ofloveandhate Jul 2, 2026
66992ad
docs: curated "everyday API" reference tier
ofloveandhate Jul 2, 2026
55a49c0
fix(system): ContentDigest never writes shared state — Seal() is the …
ofloveandhate Jul 2, 2026
158536e
docs: finalize the namespace migration guide
ofloveandhate Jul 2, 2026
8d68250
refactor: remove multiprec.Vector (eigenpy gives numpy interop directly)
ofloveandhate Jul 2, 2026
cd5be8a
prototype(ledger): pure-Python ledger v0 — memoized solve + kill-and-…
ofloveandhate Jul 2, 2026
2be31e3
refactor(endgames): rename EndgameConfig.max_num_newton_iterations ->…
ofloveandhate Jul 2, 2026
92abc95
fix(zerodim): make Tolerances.final_tolerance the endgame's tolerance…
ofloveandhate Jul 2, 2026
58a2d32
prototype(ledger): point at the renamed arc doc (structured-output-di…
ofloveandhate Jul 2, 2026
5b253bd
prototype(ledger): chains — ensure_continued, provenance_chain, and t…
ofloveandhate Jul 2, 2026
4990b7a
prototype(ledger): curve-decomposition sketch — the long-chain demo +…
ofloveandhate Jul 2, 2026
55e2ff2
prototype(ledger): humane journal naming + on-disk summary — no more …
ofloveandhate Jul 2, 2026
98884b9
prototype(ledger): self-documenting directory — README/INDEX, humane …
ofloveandhate Jul 2, 2026
8a3f22f
prototype(ledger): result records + RESULTS.txt — signal vs noise
ofloveandhate Jul 2, 2026
ada9e9c
prototype(ledger): ambient records + save(name, thing) + results.json
ofloveandhate Jul 2, 2026
48b44a8
prototype(ledger): save(stuff) with no name — the full magic
ofloveandhate Jul 2, 2026
ca7cc26
prototype(ledger): rename to solve()/continue_from() — the verb is solve
ofloveandhate Jul 2, 2026
8fa140b
prototype(ledger): saved() pairs with save(); results are run-handles
ofloveandhate Jul 2, 2026
8b9b754
Merge pull request #65 from ofloveandhate/feature/namespace_flattening
ofloveandhate Jul 2, 2026
98d2057
Merge pull request #66 from ofloveandhate/feature/config_model_cleanup
ofloveandhate Jul 2, 2026
5cbeb6d
Merge pull request #64 from ofloveandhate/feature/hashconsing_systems
ofloveandhate Jul 2, 2026
34153c6
Merge remote-tracking branch 'origin/develop' into feature/ledger_v0_…
ofloveandhate Jul 2, 2026
ba9d7ba
prototype(ledger): adapt to flattened namespace (post develop merge)
ofloveandhate Jul 2, 2026
6942591
docs: one-time deterministic regeneration of committed plot images
ofloveandhate Jul 2, 2026
bccdd4e
feat(records): config canonical encodings + persistent digests (rung …
ofloveandhate Jul 2, 2026
61ac114
feat(records): seed-rooted randomness — the b2rand/1 pinned draw stre…
ofloveandhate Jul 2, 2026
7072e87
Merge branch 'feature/ledger_v0_prototype' into feature/config_digests
ofloveandhate Jul 2, 2026
b614e67
feat(records): the structured output directory in C++ — ledgerrec/1 (…
ofloveandhate Jul 2, 2026
b4084ff
feat(records): the solver seam — solve() is ensure-answered (rung 4, …
ofloveandhate Jul 2, 2026
f664959
feat(records): the casual surface — solve/save/load, Solution, CLI de…
ofloveandhate Jul 3, 2026
e823105
docs: doctest builds aim ambient records at a temp dir
ofloveandhate Jul 3, 2026
c8e3da5
fix(records): the CLI shakedown — dedupe, configs archived, input arc…
ofloveandhate Jul 3, 2026
3b50f43
refactor(records): one results file — pretty, self-complete results.j…
ofloveandhate Jul 3, 2026
3c7c3ea
fix(records): diverged is a verdict, not a failure — three-way path s…
ofloveandhate Jul 3, 2026
46c0841
feat(records): run headers say which software wrote them — producer {…
ofloveandhate Jul 3, 2026
f29b60c
feat(records): the FULL settings join the ask — tracker + endgame con…
ofloveandhate Jul 3, 2026
3cb9fa9
feat(records): annotate() — margin notes on recorded points, C++ core…
ofloveandhate Jul 3, 2026
19fb0ad
feat(records): chains and givens — start provenance flows through the…
ofloveandhate Jul 3, 2026
4525934
feat(records): user-coordinate endpoints + provenance walking — the d…
ofloveandhate Jul 3, 2026
fb3a03e
chore(records): retire the ledger_v0 prototype; chained_homotopies ex…
ofloveandhate Jul 3, 2026
8e848cb
feat(records): the one-line off switch — bertini.recording(False); em…
ofloveandhate Jul 3, 2026
f8444ae
feat(records): navigation and visualization — runs/tracks DataFrames,…
ofloveandhate Jul 3, 2026
8d7b739
docs(records): chained_homotopies tutorial + the feature documented —…
ofloveandhate Jul 3, 2026
edcba39
docs(records): the chain tutorial teaches the yoga — truncated lineag…
ofloveandhate Jul 3, 2026
e3ebd48
fix(trackers): fully initialize default AMPConfig (deterministic epsi…
ofloveandhate Jul 3, 2026
d1a6c99
fix(endgames): the junk-success bug — a residual gate on Cauchy conve…
ofloveandhate Jul 3, 2026
60b03a2
docs(records): plot_chain gains a legend and a chain-depth axis label
ofloveandhate Jul 3, 2026
0fc97a2
Merge pull request #69 from ofloveandhate/fix/amp-config-uninitialize…
ofloveandhate Jul 3, 2026
08d83e0
docs(records): flow diagrams (CLI + Python), junk-success bug diagram…
ofloveandhate Jul 3, 2026
c49c00a
Revert "fix(endgames): the junk-success bug — a residual gate on Cauc…
ofloveandhate Jul 3, 2026
ec482a5
docs+fix(records): endgame fix split to its own PR; views write atomi…
ofloveandhate Jul 3, 2026
b15b2ef
test(records): stage-digest diagnostics for the cross-platform seed f…
ofloveandhate Jul 3, 2026
672516e
fix(endgames): max_num_refinements default 15 -> 4 — quadratic Newton…
ofloveandhate Jul 3, 2026
51fb139
chore: development notes move out of docs/ — the junk-success write-u…
ofloveandhate Jul 3, 2026
a326117
Merge pull request #67 from ofloveandhate/feature/regen_plots
ofloveandhate Jul 3, 2026
ddf6334
fix(endgames): the pole-component operating-zone check — Cauchy never…
ofloveandhate Jul 3, 2026
7e027f0
perf(linalg): stateful in-place mpc LU solver, replacing Eigen Partia…
ofloveandhate Jul 3, 2026
7413ec0
fix(random): draw composition order is a contract — the x86/arm archi…
ofloveandhate Jul 4, 2026
1addc93
docs(adr): bring 0043/0046/0047 current — ask composition, JSON confi…
ofloveandhate Jul 4, 2026
c4728b8
perf(linalg): reciprocal-multiply pivot scaling + extend LU parity to…
ofloveandhate Jul 4, 2026
6876585
fix(records): one shared OutputDirectory per directory per process
ofloveandhate Jul 4, 2026
8dd132a
feat(records): records_dir(path) is the one-line ambient switch for b…
ofloveandhate Jul 4, 2026
88b171a
rename: 'hydrate' -> 'recall' across API and prose
ofloveandhate Jul 4, 2026
4f936ec
fix(records): record_to binding uses the process-shared OutputDirectory
ofloveandhate Jul 4, 2026
f5ad69e
ci(diag): gdb backtrace for the container CLI SIGSEGV before wheel py…
ofloveandhate Jul 4, 2026
9054567
ci: pin patchelf 0.17.2.1 in the manylinux container for wheel repair
ofloveandhate Jul 5, 2026
5dd7bdd
Merge pull request #71 from ofloveandhate/feature/perf-round2
ofloveandhate Jul 5, 2026
8b6eb31
format(records): definitions get a human face; systems archive exactly
ofloveandhate Jul 5, 2026
1e3489f
fix(records): config JSON view decodes exact encodings into readable …
ofloveandhate Jul 5, 2026
d52935b
format(records): role labels in given filenames
ofloveandhate Jul 5, 2026
24d9513
ci: mirror-sync failures warn instead of redden; Windows C++ timeout …
ofloveandhate Jul 5, 2026
95a5b01
format(records): systems archive with a structured JSON parts view; c…
ofloveandhate Jul 5, 2026
ae6c20f
ci: patchelf verdict is in -- diagnostic becomes a permanent CLI smok…
ofloveandhate Jul 5, 2026
c689ecf
ci: fix the CLI smoke line -- xargs -I does not substitute the comman…
ofloveandhate Jul 5, 2026
4b08096
Merge pull request #70 from ofloveandhate/feature/cauchy_pole_compone…
ofloveandhate Jul 5, 2026
3cbbe04
format(records): b2rec/1 schema token; target_digest only; consistent…
ofloveandhate Jul 5, 2026
0aae5e5
Merge remote-tracking branch 'origin/develop' into feature/config_dig…
ofloveandhate Jul 5, 2026
133cc2f
feat(records): b2cfgenc/2 -- encode the new Cauchy pole-growth settin…
ofloveandhate Jul 5, 2026
4578c35
test: adapt to the pole-zone check (#70); un-xfail the junk-success pin
ofloveandhate Jul 5, 2026
a34f7ff
docs: CLAUDE.md learns the records subsystem + digest discipline; ADR…
ofloveandhate Jul 5, 2026
b21a495
docs: correct the paths-ignore claim -- PR events filter on the whole…
ofloveandhate Jul 5, 2026
493fe36
feat(records): effective per-solve seeds + the tracked homotopy is ar…
ofloveandhate Jul 5, 2026
40f913a
feat(records): records on by default for the bare solver classes
ofloveandhate Jul 6, 2026
a5fa3da
format(records): three truth stores -- history asks, results/ holds, …
ofloveandhate Jul 6, 2026
e449114
feat(records): recall events -- the narrative stays complete; INDEX c…
ofloveandhate Jul 6, 2026
68cf767
Bump version from 3.0.0.dev7 to 3.0.0.dev8
ofloveandhate Jul 6, 2026
7728d95
fix(records): a solve leaves the session as it found it; the ask's ta…
ofloveandhate Jul 6, 2026
662ea0d
fix(endgames): Cauchy watches the endpoint for infinity; drop the pol…
ofloveandhate Jul 6, 2026
f9aca4a
towards a more structured tutorials
ofloveandhate Jul 6, 2026
08c978b
Merge pull request #72 from ofloveandhate/feature/docs_july2026
ofloveandhate Jul 6, 2026
8fcd9be
fix(endgames): security truncation only in the operating zone (cyclic…
ofloveandhate Jul 6, 2026
7e9ab73
Merge remote-tracking branch 'origin/develop' into feature/config_dig…
ofloveandhate Jul 6, 2026
e6a5687
docs: place record-keeping tutorials; rename solution_dataframe; flat…
ofloveandhate Jul 6, 2026
8fe1fb7
chore: gitignore stray _doctest_build; point doctest builds at build/…
ofloveandhate Jul 6, 2026
1d62901
docs: furo theme + build fixes; drop rtd extension; lift the Full API…
ofloveandhate Jul 6, 2026
446a97b
docs: make the bertini module title a heading on the API page; drop t…
ofloveandhate Jul 6, 2026
e2dd1c6
ci(macos): --without-mpi in the wheel Boost build, matching Linux
ofloveandhate Jul 6, 2026
d4da8e9
ci: single-source the Boost version into a BOOST_VERSION env var
ofloveandhate Jul 6, 2026
d801418
docs(adr): note the three-store layout (0045/0047); add ADR-0048 for …
ofloveandhate Jul 6, 2026
18037e7
Merge pull request #68 from ofloveandhate/feature/config_digests
ofloveandhate Jul 6, 2026
79d73c5
bump version to 3.0.0.dev9
ofloveandhate Jul 6, 2026
44d439b
CLI, so many bugfixes, block structured systems, mhom exposed, user h…
ofloveandhate Jul 6, 2026
2c7d89b
ci(publish): don't skip the whole release when the timing gate is ski…
ofloveandhate Jul 7, 2026
0aa9280
ci(publish): don't skip the release when the timing gate is skipped (…
ofloveandhate Jul 7, 2026
7bf4aeb
ci(publish): fix downstream skip + prerelease misclassification
ofloveandhate Jul 7, 2026
a429eaa
ci(test): install matplotlib in every test env (close the matplotlib …
ofloveandhate Jul 7, 2026
826bc86
ci(deps): add prebuilt manylinux Boost+eigenpy image (producer)
ofloveandhate Jul 7, 2026
9ba00de
ci(deps): expand image to the complete Linux build+test env
ofloveandhate Jul 7, 2026
2740211
ci(deps): install scipy for the eigenpy build in the image
ofloveandhate Jul 7, 2026
0dcd24f
docs(conf): show the package version (not a commit hash) on the front…
ofloveandhate Jul 7, 2026
6b1eb50
docs(tools): add versioned-docs assembler (tools/assemble_versioned_d…
ofloveandhate Jul 7, 2026
34dae0c
ci(docs): deploy versioned docs to a persistent docs-store branch
ofloveandhate Jul 7, 2026
e5444c6
ci(docs): install sympy + networkx for the Sphinx autosummary import …
ofloveandhate Jul 7, 2026
8496d9d
ci(deps): macOS prebuilt Boost+eigenpy tarball producer
ofloveandhate Jul 7, 2026
210ca03
ci(macos): consume prebuilt deps tarballs + mpi4py for 0 skips
ofloveandhate Jul 7, 2026
b4884c7
ci(windows): persist ccache across runs for the wheel build (experiment)
ofloveandhate Jul 7, 2026
fc28855
ci(deps): parallelize the image build (per-CPython matrix + assemble)
ofloveandhate Jul 7, 2026
18e26a3
ci: single-source Boost/Eigen/eigenpy versions; bumps trigger the image
ofloveandhate Jul 7, 2026
edab423
ci: add workflow_dispatch `os` input to target specific OS(es)
ofloveandhate Jul 7, 2026
e72ad9b
ci(linux): build wheels against the prebuilt GHCR deps image
ofloveandhate Jul 7, 2026
e8202eb
ci: skip the macOS wheel-test job when the matrix has no macOS
ofloveandhate Jul 7, 2026
d942b5e
bump version to 3.0.0rc1
ofloveandhate Jul 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
13 changes: 13 additions & 0 deletions .git-blame-ignore-revs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Commits listed here are skipped by `git blame` so that large, purely mechanical
# changes (whitespace, indentation, reformatting) do not obscure the real authorship
# of each line. GitHub honours this file automatically. Locally, run once:
#
# git config blame.ignoreRevsFile .git-blame-ignore-revs
#
# RULES:
# * Only add commits that are PURELY formatting -- no behavioural or semantic
# change, no documentation-content change. Keep such passes in their own
# isolated commit so the whole commit can be safely ignored.
# * Add the full 40-character commit SHA, with a comment naming what it did.
#
# (No revisions yet -- add the whitespace/indentation pass SHA here when it lands.)
10 changes: 10 additions & 0 deletions .github/ci-deps-versions.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Single source of truth for the C++ dependency versions pinned across CI: the wheel/test
# workflow (build_and_test.yml), the Linux deps image (build-ci-image.yml), and the macOS
# deps tarballs (build-macos-deps.yml) all read this file. Bumping a version here is what
# triggers a rebuild of the prebuilt Linux image (this path is in build-ci-image.yml's filter).
#
# Plain KEY=VALUE so it can be `. sourced` in bash and mirrored into $GITHUB_ENV / job outputs.
# Bump deliberately: an ABI change must be matched by rebuilt image + tarballs (ADR-0006).
BOOST_VERSION=1.90.0
EIGEN_VERSION=3.4.0
EIGENPY_VERSION=3.13.0
101 changes: 101 additions & 0 deletions .github/workflows/build-ci-image.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
name: Build CI deps image 🐳

# Builds the manylinux + prebuilt Boost/Boost.Python + eigenpy image consumed by the wheel matrix.
# The expensive per-CPython Boost builds run in PARALLEL (one matrix runner each, inside the
# manylinux container via docker run); a final job assembles them into the image and pushes it to
# ghcr.io/bertiniteam/b2-manylinux-deps, tagged by TOOLCHAIN KEY. Rare: only on docker/ changes or
# dispatch.
#
# OWNER: the package lands under whichever org runs this; it MUST run in bertiniteam/b2 (its token
# can only push to that org's GHCR).

on:
workflow_dispatch:
push:
branches: [develop]
paths:
- 'docker/manylinux-deps/**'
- '.github/workflows/build-ci-image.yml'
- '.github/ci-deps-versions.env' # a version bump here rebuilds the image

concurrency:
group: ci-image-${{ github.ref }}
cancel-in-progress: true

env:
# BOOST_VERSION / EIGEN_VERSION / EIGENPY_VERSION are single-sourced in
# .github/ci-deps-versions.env and loaded per-job (see the "Load dep versions" steps).
MANYLINUX_TAG: "mlx2_34"
MANYLINUX_IMAGE: "quay.io/pypa/manylinux_2_34_x86_64"
IMAGE: "ghcr.io/bertiniteam/b2-manylinux-deps"

jobs:
build-deps:
name: Boost+eigenpy ${{ matrix.pytag }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
pytag: [cp310-cp310, cp311-cp311, cp312-cp312, cp313-cp313, cp314-cp314]
steps:
- uses: actions/checkout@v5
- name: Load dep versions
run: cat .github/ci-deps-versions.env >> "$GITHUB_ENV"
- name: Build Boost+eigenpy for ${{ matrix.pytag }} (manylinux)
run: |
docker run --rm -v "$PWD:/work" -w /work \
-e BOOST_VERSION -e EIGEN_VERSION -e EIGENPY_VERSION \
"$MANYLINUX_IMAGE" \
bash docker/manylinux-deps/build-python-deps.sh "${{ matrix.pytag }}"
- uses: actions/upload-artifact@v5
with:
name: deps-${{ matrix.pytag }}
path: deps-${{ matrix.pytag }}.tar.gz
if-no-files-found: error

assemble-and-push:
name: Assemble & push image
needs: build-deps
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v5

- name: Load dep versions
run: cat .github/ci-deps-versions.env >> "$GITHUB_ENV"

- name: Collect prebuilt deps into the build context
uses: actions/download-artifact@v5
with:
pattern: deps-*
merge-multiple: true
path: docker/manylinux-deps/deps

- name: Compute toolchain tag
id: tag
run: |
echo "key=boost${BOOST_VERSION}-eigen${EIGEN_VERSION}-eigenpy${EIGENPY_VERSION}-${MANYLINUX_TAG}" >> "$GITHUB_OUTPUT"
echo "Image: $IMAGE:boost${BOOST_VERSION}-eigen${EIGEN_VERSION}-eigenpy${EIGENPY_VERSION}-${MANYLINUX_TAG}"
ls -lh docker/manylinux-deps/deps

- name: Log in to GHCR
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build & push (assembly only -- fast)
uses: docker/build-push-action@v6
with:
context: docker/manylinux-deps
push: true
tags: |
${{ env.IMAGE }}:${{ steps.tag.outputs.key }}
${{ env.IMAGE }}:latest
build-args: |
BOOST_VERSION=${{ env.BOOST_VERSION }}
EIGEN_VERSION=${{ env.EIGEN_VERSION }}
EIGENPY_VERSION=${{ env.EIGENPY_VERSION }}
97 changes: 97 additions & 0 deletions .github/workflows/build-macos-deps.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
name: Build macOS deps tarballs 🍏

# macOS has no container, so the Linux image trick doesn't apply. The analog: build Boost
# (incl. per-CPython Boost.Python) + eigenpy ONCE per toolchain and publish them as GitHub
# Release assets, which the wheel job downloads instead of recompiling every run. Release
# storage is a separate quota, so this sidesteps the 10 GB Actions-cache ceiling too.
#
# Runs rarely -- only when the Dockerfile-equivalent recipe or the pinned versions change,
# or on demand. Assets are attached to the `ci-deps` prerelease and named by TOOLCHAIN KEY
# + arch + CPython, so the wheel job pins an exact match (never a silent ABI swap; ADR-0006).
#
# The build steps MIRROR build_and_test.yml's CIBW_BEFORE_BUILD_MACOS exactly (same prefix
# /tmp/deps-py and hardcode-dll-paths, so a downloaded tarball extracts back to /tmp/deps-py
# and delocate is happy).

on:
workflow_dispatch:
push:
branches: [develop]
paths:
- '.github/workflows/build-macos-deps.yml'
- '.github/ci-deps-versions.env' # a version bump here rebuilds the macOS tarballs

concurrency:
group: macos-deps-${{ github.ref }}
cancel-in-progress: true

env:
# BOOST_VERSION / EIGENPY_VERSION are single-sourced in .github/ci-deps-versions.env
# and loaded by the "Load dep versions" step below.
RELEASE_TAG: "ci-deps" # a permanent prerelease that just holds CI dep bundles

jobs:
build-macos-deps:
name: macOS deps py${{ matrix.python-version }}
runs-on: macos-14 # arm64
permissions:
contents: write # create/upload the ci-deps release assets
strategy:
fail-fast: false
matrix:
python-version: ['3.10', '3.11', '3.12', '3.13', '3.14']
steps:
- uses: actions/checkout@v5
- name: Load dep versions
run: cat .github/ci-deps-versions.env >> "$GITHUB_ENV"
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

- name: Install host libs (CPython-independent)
run: brew install gmp mpfr libmpc eigen@3

- name: Build Boost + eigenpy into /tmp/deps-py
run: |
set -euo pipefail
PY="$(which python)"
"$PY" -m pip install -q scikit-build-core numpy scipy
rm -rf /tmp/deps-py && mkdir -p /tmp/deps-py
PY_VER="$("$PY" -c 'import sys;print(f"{sys.version_info.major}.{sys.version_info.minor}")')"
PY_INC="$("$PY" -c 'import sysconfig;print(sysconfig.get_path("include"))')"
PY_LIB="$("$PY" -c 'import sysconfig;print(sysconfig.get_config_var("LIBDIR") or "")')"
cd /tmp
BU="boost_$(echo "${BOOST_VERSION}" | tr . _)"
curl -fsSL -o "$BU.tar.bz2" "https://archives.boost.io/release/${BOOST_VERSION}/source/$BU.tar.bz2"
rm -rf "$BU" && tar xjf "$BU.tar.bz2"
cd "$BU"
./bootstrap.sh --with-python="$PY" --prefix=/tmp/deps-py
printf 'using python : %s : %s : %s : %s ;\n' "$PY_VER" "$PY" "$PY_INC" "$PY_LIB" > user-config.jam
./b2 install -j"$(sysctl -n hw.ncpu)" --user-config=user-config.jam python="$PY_VER" \
--without-mpi hardcode-dll-paths=true dll-path=/tmp/deps-py/lib
cd /tmp
rm -rf "eigenpy-${EIGENPY_VERSION}" && tar zxf "eigenpy-${EIGENPY_VERSION}.tar.gz" 2>/dev/null || \
{ curl -fsSL -o "eigenpy-${EIGENPY_VERSION}.tar.gz" "https://github.com/stack-of-tasks/eigenpy/releases/download/v${EIGENPY_VERSION}/eigenpy-${EIGENPY_VERSION}.tar.gz"; tar zxf "eigenpy-${EIGENPY_VERSION}.tar.gz"; }
cd "eigenpy-${EIGENPY_VERSION}" && mkdir -p bld && cd bld
cmake .. -DCMAKE_PREFIX_PATH="/tmp/deps-py;/opt/homebrew" -DCMAKE_INSTALL_PREFIX=/tmp/deps-py \
-DCMAKE_BUILD_TYPE=Release -DPython3_EXECUTABLE="$PY" \
-DPython3_NumPy_INCLUDE_DIR="$("$PY" -c 'import numpy;print(numpy.get_include())')" \
-DBUILD_TESTING=OFF
make -j2 install

- name: Package + publish the tarball
env:
GH_TOKEN: ${{ github.token }}
run: |
set -euo pipefail
PY_TAG="cp$(echo '${{ matrix.python-version }}' | tr -d .)"
KEY="boost${BOOST_VERSION}-eigenpy${EIGENPY_VERSION}"
ASSET="deps-macos14-arm64-${PY_TAG}-${KEY}.tar.gz"
tar czf "$ASSET" -C /tmp deps-py
ls -lh "$ASSET"
# Ensure the holder release exists (idempotent), then upload/replace this asset.
gh release view "$RELEASE_TAG" --repo "$GITHUB_REPOSITORY" >/dev/null 2>&1 \
|| gh release create "$RELEASE_TAG" --repo "$GITHUB_REPOSITORY" --prerelease \
--title "CI dependency bundles" \
--notes "Prebuilt Boost + eigenpy bundles consumed by the wheel matrix. Not a software release."
gh release upload "$RELEASE_TAG" "$ASSET" --repo "$GITHUB_REPOSITORY" --clobber
Loading
Loading