Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
73cdc25
target
jph00 Nov 1, 2026
96ea793
nbs/foundations.qmd
jph00 Nov 2, 2026
f0cca85
Graph rewrite checkpoint
jph00 Nov 2, 2026
9f1d721
Graph rewrite checkpoint 2
jph00 Nov 2, 2026
a3e7fdf
over-complex checkpoint
jph00 Nov 2, 2026
750d27c
Checkpoint simplified graph foundation
jph00 Nov 3, 2026
43c2c99
Integrate unified graph contracts across frontends
jph00 Nov 3, 2026
9a7834a
Checkpoint foundation correctness before selective-write redesign
jph00 Nov 3, 2026
496023c
Restore selective writes and native write derivatives through the sha…
jph00 Nov 3, 2026
6c06617
Add polynomial JVP rule, fill-aware Join with widening, typed operato…
jph00 Nov 3, 2026
710685a
Prepare calls once via CallView/RunView, observe declared parameters,…
jph00 Nov 3, 2026
b40f07b
Checkpoint one-graph design and test harness on Syd1
jph00 Nov 4, 2026
33200df
Checkpoint demand-aware publication and selectable test coverage
jph00 Nov 4, 2026
1776f8e
Checkpoint canonical coverage fixtures and input-description diagnostics
jph00 Nov 4, 2026
5de1573
Checkpoint row-owned math and diagnostic captures
jph00 Nov 4, 2026
38fb3f4
Use the default empty math factories for system rows
jph00 Nov 4, 2026
97560dd
Checkpoint operator construction and integer conversion fixes
jph00 Nov 4, 2026
3822572
Checkpoint count-based refill stamps and Python protocol completion
jph00 Nov 4, 2026
4066a3e
Checkpoint observed host readback and restored route coverage
jph00 Nov 4, 2026
b300d5d
Preserve optional leaf roles in the shared readback walk
jph00 Nov 4, 2026
3a67b48
Checkpoint call admission and explicit execution boundaries
jph00 Nov 4, 2026
332726e
Checkpoint stored-input proofs and shared syntax classification
jph00 Nov 4, 2026
75c69f9
Use prepared canonical parameters for primitive inverses
jph00 Nov 4, 2026
a2a5e02
Checkpoint block lowering and checked execution diagnostics
jph00 Nov 4, 2026
30af627
Preserve logical folds, integer widths and scalar read coordinates
jph00 Nov 4, 2026
6d5a692
Keep JIT mismatch diagnostics safe for scalar results
jph00 Nov 4, 2026
84c7790
Preserve structural product roots and compiled fold totals
jph00 Nov 4, 2026
a5fba2d
Select original JIT test sizes for bounded checks
jph00 Nov 4, 2026
e1c0982
Restore structural identities and observe inverse serialization
jph00 Nov 4, 2026
8d3bb28
Own the character fold result description
jph00 Nov 4, 2026
790e6d5
Route selections through shared reads and preserve fill tangents
jph00 Nov 4, 2026
a92f5d9
Unify prototype evaluation, frame agreement and late name resolution
jph00 Nov 4, 2026
0dc69b3
Preserve empty picks, observe Boolean inverses and join ordinary kinds
jph00 Nov 4, 2026
ad3970d
Checkpoint special restoration with temporary wspan diagnostics
jph00 Nov 4, 2026
591662a
Correct the Betainc input borrow
jph00 Nov 4, 2026
dc0dd1d
Use actual framed cells and semantic test comparisons
jph00 Nov 4, 2026
138ecab
Checkpoint the graph-repair tree before the eager release
jph00 Nov 5, 2026
d18f5a5
Take the engine from 96ea793 for the eager release
jph00 Nov 5, 2026
08c0123
Checkpoint: eager release on current rustymath (integration run 29)
jph00 Nov 6, 2026
4871fb8
Eager release: external review round (integration run 37)
jph00 Nov 6, 2026
ea84661
Checkpoint eager engine before release review
jph00 Nov 6, 2026
ef2e2e4
Unify eager storage and transform boundaries
jph00 Nov 6, 2026
8c4e3cc
Avoid session access for untransformed pending values
jph00 Nov 6, 2026
981e304
Read instruction-budget fixtures from the test source
jph00 Nov 7, 2026
f18ae48
Read speed measurements independently of optional report metadata
jph00 Nov 7, 2026
36de960
Restore structured array routes and calibrate Syd1 budgets
jph00 Nov 7, 2026
0a54ada
Share fusion and autodiff programs and make numeric domains explicit
jph00 Nov 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 6 additions & 7 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
@@ -1,21 +1,20 @@
# rustc runs LLVM's straight-line (SLP) vectorizer only at opt-level 3. `passes` adds it to our opt-level 2 builds.
# With LTO, rustc runs these passes before the link step, and the loop vectorizer only at it. `loop-vectorize` runs first. Otherwise SLP packs the lanes of a short inner loop, and the loop vectorizer then leaves the outer loop alone.
# A target's own `rustflags` replace these. The x86-64 and wasm entries repeat the passes.
[build]
rustflags = ["-C", "passes=loop-vectorize,slp-vectorizer"]
# Cargo joins the rustflags of every matching `target` entry. `cfg(all())` matches every target.
[target.'cfg(all())']
rustflags = ["-Zshare-generics=yes"]

# rustymath uses Accelerate's per-thread BLAS controls on macOS.
[env]
MACOSX_DEPLOYMENT_TARGET = "15.0"
RUSTC_BOOTSTRAP = "1"

# x86-64 builds need a CPU with AVX2 (x86-64-v3). The kernels rely on its rounding and wider vector instructions.
[target.'cfg(target_arch = "x86_64")']
rustflags = ["-C", "target-cpu=x86-64-v3", "-C", "passes=loop-vectorize,slp-vectorizer"]
rustflags = ["-C", "target-cpu=x86-64-v3"]

# The browser build uses wasm's 128-bit SIMD, which current browsers all support.
# Its main stack is 4 MiB, against rustc's default of 1 MiB. An evaluation then keeps `eval::room`'s 1 MiB red zone on it and grows no 16 MiB segment.
[target.wasm32-unknown-unknown]
rustflags = ["-C", "target-feature=+simd128", "-C", "passes=loop-vectorize,slp-vectorizer", "-C", "link-arg=-zstack-size=4194304"]
rustflags = ["-C", "target-feature=+simd128", "-C", "link-arg=-zstack-size=4194304"]

[alias]
# Builds the npm package into `wasm/pkg/`. `xtask` builds optimised, because its wasm-bindgen pass runs on every call.
Expand Down
3 changes: 0 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,6 @@ jobs:
manylinux: auto
# This runs inside the manylinux container, whose old glibc lets the binary run on older Linux distributions.
before-script-linux: export PATH="/opt/python/cp311-cp311/bin:$PATH" && python3.11 -m pip install 'fastws-cli>=0.0.29' && ${{ env.STAGE_BPL }}
- name: Time the release build
continue-on-error: true
run: bin/${{ matrix.binary }} --costs tests/speed
- uses: actions/upload-artifact@v7
with:
name: wheels-${{ matrix.os }}
Expand Down
40 changes: 0 additions & 40 deletions .github/workflows/speed.yml

This file was deleted.

10 changes: 2 additions & 8 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@ jobs:
runs-on: ubicloud-standard-4-ubuntu-2604
steps:
- uses: actions/checkout@v7
# The speed tests' costs for large new arrays depend on whether the kernel gives them transparent huge pages.
- run: cat /sys/kernel/mm/transparent_hugepage/enabled
# `tests/highlighting.mjs` reads the TextMate grammar through `shiki`, which `package.json` pins.
- run: npm ci
- uses: dtolnay/rust-toolchain@stable
Expand All @@ -32,8 +30,7 @@ jobs:
- run: node tests/input.mjs
- run: node tests/highlighting.mjs
if: ${{ !cancelled() }}
# With `BASEDPL_COSTS`, the speed tests here and in the `wasm` job log every case's cost, which `basedpl.bpltests.logged_costs` reads.
- run: BASEDPL_COSTS=1 cargo test
- run: cargo test --release
if: ${{ !cancelled() }}
- run: pytest -q
if: ${{ !cancelled() }}
Expand All @@ -49,16 +46,13 @@ jobs:
- uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32-unknown-unknown
# V8's frame sizes decide the recursion test's margin. Each Node major keeps one V8 version. `.node-version` pins the major that both wasm jobs use.
# V8's frame sizes decide the recursion test's margin. Each Node major keeps one V8 version. `.node-version` pins the major for the wasm correctness checks.
- uses: actions/setup-node@v7
with:
node-version-file: .node-version
- run: cargo generate-lockfile
# The `Speed` workflow's `wasm` job restores this cache, by its `shared-key`.
- uses: Swatinem/rust-cache@v2
with:
shared-key: wasm
- run: cargo wasm --strip
- run: node --test tests/wasm.mjs
- run: BASEDPL_COSTS=1 node --no-liftoff --test tests/wasm-speed.mjs
if: ${{ !cancelled() }}
23 changes: 13 additions & 10 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ rust-version = "1.98"
license = "Apache-2.0"

[workspace.dependencies]
rustymath = { version = ">=0.1.54, <1", default-features = false }
rustymath-buffer = ">=0.1.53, <1"
rustymath = { version = ">=0.1.55, <1", default-features = false }
rustymath-buffer = ">=0.1.55, <1"
pyo3 = ">=0.29.2, <1"
pyo3-build-config = ">=0.29.2, <1"
ctrlc = ">=3.5.2, <4"
Expand All @@ -34,11 +34,16 @@ doctest = false
# Without a unit-test build, `cargo test` compiles the library only once.
test = false

# Plain `cargo test` skips the timing suite; `cargo test --test speed` runs it.
[[test]]
name = "speed"
test = false

[profile.test]
inherits = "release"

[profile.release]
opt-level = 2
opt-level = 3
# Thin LTO across the crate's own codegen units, Cargo's default. Incremental builds put `#[inline]` helpers such as iterator adapters in codegen units of their own, where only LTO can inline them.
lto = false
overflow-checks = false
Expand All @@ -49,6 +54,8 @@ debug = false

[profile.dist]
inherits = "release"
lto = "thin"
codegen-units = 16
incremental = false
strip = true

Expand All @@ -60,7 +67,7 @@ debug-assertions = true
[features]
default = ["native"]
# rustymath's own linear algebra, beside Accelerate on macOS, for `RUSTYMATH_NATIVE=1`. The Mac release builds turn it off.
native = ["rustymath/native"]
native = ["rustymath/default"]

[dependencies]
csv = "1"
Expand All @@ -81,7 +88,8 @@ plotters = { git = "https://github.com/AnswerDotAI/plotters.git", branch = "mast
base64 = ">=0.22.1, <1"
stacker = ">=0.1.25, <1"
bytemuck = { version = ">=1.25.2, <2", features = ["extern_crate_alloc"] }
json5 = ">=1.3.1, <2"
# 1.3.7 rounds integers beyond 64 bits to floats through deserialize_any.
json5 = "=1.3.1"
roxmltree = { version = ">=0.21.1, <1", default-features = false, features = ["std"] }
sha2 = ">=0.10.9, <1"
uuid = { version = ">=1.26.1, <2", features = ["v1", "v3", "v4", "v5", "v6", "v7", "v8"] }
Expand Down Expand Up @@ -125,10 +133,5 @@ wasm-bindgen = ">=0.2.129, <0.3"
# `eval::room` reads the stack pointer for the room left on the browser's main stack, where stacker reports none.
psm = ">=0.1.32, <0.2"

# `tests/units.rs` reads the development build's object files.
[dev-dependencies]
object = { version = ">=0.39.1, <1", default-features = false, features = ["read"] }
rustc-demangle = ">=0.1.28, <1"

[build-dependencies]
serde_json = "1"
Loading
Loading