Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
100d208
feat(perturbation-sim): outage perturbation-shape simulator
claude Jun 16, 2026
660d617
feat(perturbation-sim): PyPSA-Eur/OSM CSV ingest + Iberian real-data …
claude Jun 16, 2026
5cb1f9e
feat(perturbation-sim): basin/HHTL field tier (Kron + Cheeger + effec…
claude Jun 16, 2026
40735ca
feat(perturbation-sim): sketch.rs + splat.rs prototypes (VSA/Hamming …
claude Jun 16, 2026
7b738f8
feat(perturbation-sim): model.rs — data-shaped scoping + competing ag…
claude Jun 16, 2026
f6eeaee
docs(perturbation-sim): DATA_SOURCES.md — provenance ledger by model …
claude Jun 16, 2026
d261f1f
docs(perturbation-sim): blackout ground-truth sources + the voltage-v…
claude Jun 16, 2026
60d4be1
docs(perturbation-sim): add REE transmission quality-of-service audit…
claude Jun 16, 2026
fd8bbb6
docs(perturbation-sim): add i-DE DSO hosting-capacity map (per-substa…
claude Jun 16, 2026
4f1a362
docs(perturbation-sim): reconstructed Iberian-blackout sequence from …
claude Jun 16, 2026
3ca269b
feat(perturbation-sim): AC power-flow fork + stats + validation harness
claude Jun 16, 2026
3907321
docs(perturbation-sim): publish ODbL topology as a Release asset (not…
claude Jun 16, 2026
94f6dd8
feat(perturbation-sim): wire ndarray::simd Walsh-Hadamard (Morton-pyr…
claude Jun 16, 2026
8bfc599
docs(perturbation-sim): VISUALIZE.md — figure spec, journal/pitch pro…
claude Jun 16, 2026
d2328f5
docs(perturbation-sim): VISUALIZE.md fig 2 — Morton-tile pyramid + 4-…
claude Jun 16, 2026
e5910d4
fix(perturbation-sim): address Codex P2 review on #504
claude Jun 16, 2026
29c797d
feat(perturbation-sim): weakest_links example — N-1 weak-link ranking…
claude Jun 16, 2026
fa061e4
docs(perturbation-sim): correct SIMD labels — AVX-512 (v4) yes, AMX no
claude Jun 16, 2026
50a005c
perf+docs(perturbation-sim): fast weakest_links (Fiedler sensitivity)…
claude Jun 16, 2026
3b8f93d
fix(perturbation-sim): weakest_links prints sens/λ₂ in scientific not…
claude Jun 16, 2026
f64d60d
docs(perturbation-sim): bilingual DE/EN paper (PAPER.md)
claude Jun 16, 2026
84e6480
feat(perturbation-sim): hhtl_levels — the 4 theorems × 4 HHTL tiers +…
claude Jun 16, 2026
dd76d76
feat(perturbation-sim): reinforce what-if + PAPER §4.4 — the two-axis…
claude Jun 16, 2026
8e656fc
feat(perturbation-sim): time/inertia mediator + collapse-number law +…
claude Jun 16, 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
6 changes: 6 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,12 @@ exclude = [
"crates/learning",
"crates/jc",
"crates/sigker",
# Outage perturbation-shape simulator — standalone zero-dep research crate.
# The applied companion to jc: supplies the genuine eigenvalue-perturbation
# result (Weyl/Davis-Kahan on the weighted Laplacian) that jc::weyl
# (equidistribution) is NOT, composed with a DC-power-flow/LODF cascade.
# Verify via `cargo test --manifest-path crates/perturbation-sim/Cargo.toml`.
"crates/perturbation-sim",
# Place/Residue golden-spiral codec — standalone, with a MANDATORY git dep on
# the AdaWorldAPI ndarray fork (the SIMD foundation). Verified via
# `cargo test --manifest-path crates/helix/Cargo.toml`.
Expand Down
171 changes: 171 additions & 0 deletions crates/perturbation-sim/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

62 changes: 62 additions & 0 deletions crates/perturbation-sim/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
[package]
name = "perturbation-sim"
version = "0.1.0"
edition = "2021"
license = "Apache-2.0"
description = "Spectral + edge-propagation outage simulator: models the perturbation SHAPE of a cascading grid failure. Weyl/Davis-Kahan eigenvalue-perturbation of the weighted graph Laplacian (a line trip = low-rank perturbation E) composed with a DC-power-flow / LODF cascade. Standalone, zero-dep, deterministic — the applied companion to lance-graph crates/jc (jc::weyl = equidistribution; this crate is the missing eigenvalue-perturbation pillar) and jc::ewa_sandwich (edge propagation)."

# Standalone research crate (excluded from the lance-graph workspace, like jc /
# sigker / helix). Verify with:
# cargo test --manifest-path crates/perturbation-sim/Cargo.toml
# cargo run --manifest-path crates/perturbation-sim/Cargo.toml --example simulate
[features]
# Route the Morton/Walsh pyramid transform through ndarray's SIMD
# (AVX-512 under x86-64-v4) Walsh–Hadamard. AMX is int8/bf16 tile-GEMM and is
# NOT used (this crate's WHT is f32, its field tier f64). Default OFF → stays
# zero-dep with the scalar `fwht` fallback. Build accelerated with:
# RUSTFLAGS='-C target-cpu=x86-64-v4' cargo … --features ndarray-simd
# (or target-cpu=native locally). All SIMD comes from `ndarray::simd` per the
# workspace rule — never raw intrinsics here.
ndarray-simd = ["dep:ndarray"]

[dependencies]
# The AdaWorldAPI fork ("The Foundation"), optional + behind `ndarray-simd`.
# Sourced by GIT (not a local path): an optional *path* dep is read at manifest
# resolution, so a clean checkout without the sibling `../../../ndarray` fails
# even with the feature OFF — breaking the zero-dep default (codex P2 on #504,
# the helix-#460 lesson). A git source resolves remotely and is only fetched/
# built when `ndarray-simd` activates it. Local-dev alternative: swap to
# ndarray = { path = "../../../ndarray", optional = true, default-features = false, features = ["std"] }
ndarray = { git = "https://github.com/AdaWorldAPI/ndarray.git", branch = "master", optional = true, default-features = false, features = ["std"] }

[lib]
name = "perturbation_sim"
path = "src/lib.rs"

[[example]]
name = "simulate"
path = "examples/simulate.rs"

[[example]]
name = "iberian"
path = "examples/iberian.rs"

[[example]]
name = "validate"
path = "examples/validate.rs"

[[example]]
name = "weakest_links"
path = "examples/weakest_links.rs"

[[example]]
name = "hhtl_levels"
path = "examples/hhtl_levels.rs"

[[example]]
name = "reinforce"
path = "examples/reinforce.rs"

[[example]]
name = "hhtl_resident"
path = "examples/hhtl_resident.rs"
Loading
Loading