petekstatic 0.1.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. petekstatic-0.1.1/.cargo/config.toml +10 -0
  2. petekstatic-0.1.1/.github/workflows/ci.yml +92 -0
  3. petekstatic-0.1.1/.github/workflows/release.yml +76 -0
  4. petekstatic-0.1.1/.gitignore +42 -0
  5. petekstatic-0.1.1/API.md +1110 -0
  6. petekstatic-0.1.1/CHANGELOG.md +1164 -0
  7. petekstatic-0.1.1/CLAUDE.md +260 -0
  8. petekstatic-0.1.1/Cargo.lock +1982 -0
  9. petekstatic-0.1.1/Cargo.toml +107 -0
  10. petekstatic-0.1.1/LICENSE +91 -0
  11. petekstatic-0.1.1/PKG-INFO +83 -0
  12. petekstatic-0.1.1/README.md +61 -0
  13. petekstatic-0.1.1/SPEC.md +904 -0
  14. petekstatic-0.1.1/benches/mc.rs +371 -0
  15. petekstatic-0.1.1/benches/scatter_condition.rs +72 -0
  16. petekstatic-0.1.1/benches/surface.rs +60 -0
  17. petekstatic-0.1.1/benches/uncertainty_mc.rs +11 -0
  18. petekstatic-0.1.1/crates/petekstatic-py/Cargo.toml +24 -0
  19. petekstatic-0.1.1/crates/petekstatic-py/src/lib.rs +243 -0
  20. petekstatic-0.1.1/pyproject.toml +36 -0
  21. petekstatic-0.1.1/python/petekstatic/__init__.py +20 -0
  22. petekstatic-0.1.1/rustfmt.toml +2 -0
  23. petekstatic-0.1.1/src/data/adapter.rs +171 -0
  24. petekstatic-0.1.1/src/data/logs.rs +137 -0
  25. petekstatic-0.1.1/src/data/mod.rs +24 -0
  26. petekstatic-0.1.1/src/data/petekio/mod.rs +19 -0
  27. petekstatic-0.1.1/src/data/wireframe.rs +398 -0
  28. petekstatic-0.1.1/src/error/error.rs +65 -0
  29. petekstatic-0.1.1/src/error/mod.rs +10 -0
  30. petekstatic-0.1.1/src/grid/box_construction.rs +172 -0
  31. petekstatic-0.1.1/src/grid/cell.rs +55 -0
  32. petekstatic-0.1.1/src/grid/geometry.rs +216 -0
  33. petekstatic-0.1.1/src/grid/grid.rs +141 -0
  34. petekstatic-0.1.1/src/grid/index.rs +113 -0
  35. petekstatic-0.1.1/src/grid/klayer.rs +20 -0
  36. petekstatic-0.1.1/src/grid/mod.rs +29 -0
  37. petekstatic-0.1.1/src/grid/point.rs +53 -0
  38. petekstatic-0.1.1/src/grid/property.rs +102 -0
  39. petekstatic-0.1.1/src/grid/segment.rs +24 -0
  40. petekstatic-0.1.1/src/grid/volume.rs +71 -0
  41. petekstatic-0.1.1/src/gridder/layering.rs +1639 -0
  42. petekstatic-0.1.1/src/gridder/mod.rs +22 -0
  43. petekstatic-0.1.1/src/gridder/surface.rs +1232 -0
  44. petekstatic-0.1.1/src/lib.rs +46 -0
  45. petekstatic-0.1.1/src/model/builder.rs +2952 -0
  46. petekstatic-0.1.1/src/model/draw.rs +378 -0
  47. petekstatic-0.1.1/src/model/mc.rs +1179 -0
  48. petekstatic-0.1.1/src/model/mod.rs +1415 -0
  49. petekstatic-0.1.1/src/model/model.rs +643 -0
  50. petekstatic-0.1.1/src/model/pipeline.rs +1271 -0
  51. petekstatic-0.1.1/src/model/population.rs +208 -0
  52. petekstatic-0.1.1/src/model/provenance.rs +212 -0
  53. petekstatic-0.1.1/src/model/spec.rs +220 -0
  54. petekstatic-0.1.1/src/model/template.rs +2073 -0
  55. petekstatic-0.1.1/src/model/tornado.rs +389 -0
  56. petekstatic-0.1.1/src/model/trend.rs +304 -0
  57. petekstatic-0.1.1/src/model/view/frame.rs +132 -0
  58. petekstatic-0.1.1/src/model/view/map.rs +570 -0
  59. petekstatic-0.1.1/src/model/view/mod.rs +80 -0
  60. petekstatic-0.1.1/src/model/view/section.rs +1508 -0
  61. petekstatic-0.1.1/src/model/view/volume.rs +658 -0
  62. petekstatic-0.1.1/src/model/view/wire.rs +273 -0
  63. petekstatic-0.1.1/src/model/zones.rs +125 -0
  64. petekstatic-0.1.1/src/petro/mod.rs +13 -0
  65. petekstatic-0.1.1/src/petro/power_mean.rs +138 -0
  66. petekstatic-0.1.1/src/petro/upscale.rs +161 -0
  67. petekstatic-0.1.1/src/spill/budget.rs +231 -0
  68. petekstatic-0.1.1/src/spill/mod.rs +30 -0
  69. petekstatic-0.1.1/src/spill/spill.rs +444 -0
  70. petekstatic-0.1.1/src/uncertainty/distribution.rs +150 -0
  71. petekstatic-0.1.1/src/uncertainty/gaussian.rs +94 -0
  72. petekstatic-0.1.1/src/uncertainty/mod.rs +21 -0
  73. petekstatic-0.1.1/src/uncertainty/monte_carlo.rs +70 -0
  74. petekstatic-0.1.1/src/uncertainty/rng.rs +64 -0
  75. petekstatic-0.1.1/src/uncertainty/summary.rs +81 -0
  76. petekstatic-0.1.1/src/volumetrics/backing.rs +409 -0
  77. petekstatic-0.1.1/src/volumetrics/fvf.rs +97 -0
  78. petekstatic-0.1.1/src/volumetrics/grv.rs +469 -0
  79. petekstatic-0.1.1/src/volumetrics/mod.rs +31 -0
  80. petekstatic-0.1.1/src/volumetrics/names.rs +9 -0
  81. petekstatic-0.1.1/src/volumetrics/populate.rs +83 -0
  82. petekstatic-0.1.1/src/volumetrics/valid.rs +65 -0
  83. petekstatic-0.1.1/src/wireframe.rs +135 -0
@@ -0,0 +1,10 @@
1
+ # PyO3 extension-module builds on macOS must defer Python symbol resolution to
2
+ # the host interpreter at import time (the symbols aren't linked). maturin sets
3
+ # this itself when building wheels; this makes plain `cargo build` /
4
+ # `maturin develop` of the `petekstatic-py` cdylib link on macOS too. Scoped to
5
+ # Apple targets, so Linux/Windows builds are unaffected.
6
+ [target.x86_64-apple-darwin]
7
+ rustflags = ["-C", "link-arg=-undefined", "-C", "link-arg=dynamic_lookup"]
8
+
9
+ [target.aarch64-apple-darwin]
10
+ rustflags = ["-C", "link-arg=-undefined", "-C", "link-arg=dynamic_lookup"]
@@ -0,0 +1,92 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ env:
10
+ CARGO_TERM_COLOR: always
11
+
12
+ jobs:
13
+ rust:
14
+ name: fmt / clippy / test
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+ - uses: dtolnay/rust-toolchain@stable
19
+ with:
20
+ components: clippy, rustfmt
21
+ - uses: Swatinem/rust-cache@v2
22
+ - name: fmt
23
+ run: cargo fmt --all --check
24
+ - name: clippy (warnings = errors)
25
+ run: cargo clippy --workspace --all-targets -- -D warnings
26
+ - name: test
27
+ run: cargo test --workspace
28
+
29
+ wheel:
30
+ # Build the abi3-py310 wheel and install + pytest it on each interpreter so
31
+ # a per-version link/ABI break surfaces here, not for users.
32
+ name: wheel build + pytest (py ${{ matrix.python-version }})
33
+ runs-on: ubuntu-latest
34
+ strategy:
35
+ fail-fast: false
36
+ matrix:
37
+ python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
38
+ steps:
39
+ - uses: actions/checkout@v4
40
+ - uses: dtolnay/rust-toolchain@stable
41
+ - uses: Swatinem/rust-cache@v2
42
+ - uses: actions/setup-python@v5
43
+ with:
44
+ python-version: ${{ matrix.python-version }}
45
+ allow-prereleases: true
46
+ - name: install maturin + pytest
47
+ run: pip install maturin pytest
48
+ - name: build release wheel
49
+ run: maturin build --release --out dist
50
+ - name: install wheel
51
+ run: pip install --find-links dist --no-index petekstatic
52
+ - name: pytest (wheel surface)
53
+ run: pytest python/tests -q
54
+ - name: import + build_flat_model smoke
55
+ run: |
56
+ python - <<'PY'
57
+ import petekstatic
58
+ m = petekstatic.build_flat_model()
59
+ ip = m.in_place(boi=1.25)
60
+ assert ip["ooip_sm3"] > 0.0
61
+ print("petekstatic ok:", ip["ooip_sm3"])
62
+ PY
63
+
64
+ wheel-windows:
65
+ # Windows release-target tripwire: the 0.1.0 release shipped with NO
66
+ # win_amd64 wheel and nobody noticed until a user hit it. This job builds
67
+ # + installs + smokes the wheel on windows-latest so a missing/broken
68
+ # Windows target fails CI, not a user's `pip install`. One interpreter is
69
+ # enough (abi3-py310); the smoke, not the full pytest, is the point.
70
+ name: wheel build + smoke (windows)
71
+ runs-on: windows-latest
72
+ steps:
73
+ - uses: actions/checkout@v4
74
+ - uses: dtolnay/rust-toolchain@stable
75
+ - uses: Swatinem/rust-cache@v2
76
+ - uses: actions/setup-python@v5
77
+ with:
78
+ python-version: "3.11"
79
+ - name: install maturin
80
+ run: pip install maturin
81
+ - name: build release wheel
82
+ run: maturin build --release --out dist
83
+ - name: install wheel
84
+ run: pip install --find-links dist --no-index petekstatic
85
+ - name: import + build_flat_model smoke
86
+ shell: python
87
+ run: |
88
+ import petekstatic
89
+ m = petekstatic.build_flat_model()
90
+ ip = m.in_place(boi=1.25)
91
+ assert ip["ooip_sm3"] > 0.0
92
+ print("petekstatic ok on windows:", ip["ooip_sm3"])
@@ -0,0 +1,76 @@
1
+ name: release
2
+ on:
3
+ push:
4
+ tags: ["v*"]
5
+ permissions:
6
+ contents: read
7
+ jobs:
8
+ gates:
9
+ # Same rust gates as ci.yml — a tag can only publish what passes them.
10
+ name: gates (fmt / clippy / test)
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+ - uses: dtolnay/rust-toolchain@stable
15
+ with:
16
+ components: clippy, rustfmt
17
+ - uses: Swatinem/rust-cache@v2
18
+ - name: fmt
19
+ run: cargo fmt --all --check
20
+ - name: clippy (warnings = errors)
21
+ run: cargo clippy --workspace --all-targets -- -D warnings
22
+ - name: test
23
+ run: cargo test --workspace
24
+ build-wheels:
25
+ name: wheels (${{ matrix.os }}-${{ matrix.target }})
26
+ needs: gates
27
+ runs-on: ${{ matrix.os }}
28
+ strategy:
29
+ fail-fast: false
30
+ matrix:
31
+ include:
32
+ - { os: ubuntu-latest, target: x86_64 }
33
+ - { os: ubuntu-latest, target: aarch64 }
34
+ - { os: macos-latest, target: aarch64 }
35
+ - { os: macos-latest, target: x86_64 }
36
+ - { os: windows-latest, target: x64 }
37
+ steps:
38
+ - uses: actions/checkout@v4
39
+ - uses: actions/setup-python@v5
40
+ with: { python-version: "3.x" }
41
+ - name: Build wheels
42
+ uses: PyO3/maturin-action@v1
43
+ with:
44
+ target: ${{ matrix.target }}
45
+ args: --release --out dist
46
+ manylinux: auto
47
+ - uses: actions/upload-artifact@v4
48
+ with:
49
+ name: wheels-${{ matrix.os }}-${{ matrix.target }}
50
+ path: dist
51
+ sdist:
52
+ name: build sdist
53
+ needs: gates
54
+ runs-on: ubuntu-latest
55
+ steps:
56
+ - uses: actions/checkout@v4
57
+ - name: Build sdist
58
+ uses: PyO3/maturin-action@v1
59
+ with:
60
+ command: sdist
61
+ args: --out dist
62
+ - uses: actions/upload-artifact@v4
63
+ with:
64
+ name: wheels-sdist
65
+ path: dist
66
+ publish:
67
+ name: publish to PyPI (trusted publishing)
68
+ needs: [gates, build-wheels, sdist]
69
+ runs-on: ubuntu-latest
70
+ environment: pypi
71
+ permissions:
72
+ id-token: write
73
+ steps:
74
+ - uses: actions/download-artifact@v4
75
+ with: { pattern: wheels-*, merge-multiple: true, path: dist }
76
+ - uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,42 @@
1
+ # Rust / Cargo
2
+ /target/
3
+ **/*.rs.bk
4
+ # Library crate — do not commit the lockfile; let downstreams pin.
5
+ Cargo.lock
6
+
7
+ # Python / PyO3 (py feature, maturin)
8
+ __pycache__/
9
+ *.so
10
+ *.pyd
11
+ .venv/
12
+ .pytest_cache/
13
+ .ruff_cache/
14
+ .mypy_cache/
15
+
16
+ # Local dev working folder — see dev-docs/README.md for the canonical layout.
17
+ # Durable dirs (plans/, designs/, bench/scripts/, bench/results/, todos.md) +
18
+ # time-boxed dirs auto-purged by the dev-docs-cleanup skill: temp/ (>1d, offload
19
+ # large output here to dodge the response token gate), bench/out/ (>14d, heavy
20
+ # generated artifacts), bin/ (>7d, soft-deleted docs). All local, never committed.
21
+ /dev-docs/
22
+
23
+ # Cross-project coordination channel — see inbox/README.md. unread/ + read/,
24
+ # operated by the read-inbox / notify skills. Local working state, never committed.
25
+ /inbox/
26
+
27
+ # Local Claude Code tooling (skills/config) — working state, never committed
28
+ # (matches the petekTools/petekSim convention).
29
+ /.claude/
30
+
31
+ # OS noise
32
+ .DS_Store
33
+
34
+ # Python build artifacts
35
+ /dist/
36
+ *.whl
37
+
38
+ # MkDocs build output
39
+ /site/
40
+
41
+ # Local coordinator-graph MCP config (machine-specific absolute path)
42
+ /.mcp.json