pyrestoolbox 3.8.6__tar.gz → 3.8.7__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.
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/.github/workflows/build-wheels.yml +4 -22
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/.github/workflows/tests.yml +14 -11
- pyrestoolbox-3.8.7/Cargo.lock +409 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/Cargo.toml +3 -2
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/PKG-INFO +1 -1
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyproject.toml +1 -1
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/docs/changelist.rst +6 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/docs/simtools.rst +1 -1
- pyrestoolbox-3.8.7/src/gwr.rs +605 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/lib.rs +1 -1
- pyrestoolbox-3.8.7/src/mpfloat.rs +242 -0
- pyrestoolbox-3.8.6/Cargo.lock +0 -230
- pyrestoolbox-3.8.6/src/bessel.rs +0 -202
- pyrestoolbox-3.8.6/src/gwr.rs +0 -653
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/.github/complexity-baseline.json +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/.github/scripts/check_complexity.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/.gitignore +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/LICENSE +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/MANIFEST.in +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/README.rst +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/ResToolbox/privacy_policy.md +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/build_pure_python.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/clippy.toml +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/mcp/Dockerfile +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/mcp/README.md +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/mcp/pyproject.toml +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/mcp/pyrestoolbox_mcp/__init__.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/mcp/pyrestoolbox_mcp/serialize.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/mcp/pyrestoolbox_mcp/server.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/mcp/tests/test_server.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/__init__.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/_accelerator.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/brine/__init__.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/brine/_lib_dielectric.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/brine/_lib_maoduan_viscosity.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/brine/_lib_pitzer_params.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/brine/_lib_salting_library.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/brine/_lib_vle_engine.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/brine/appelo_volumes.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/brine/brine.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/brine/iapws_viscosity.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/brine/jones_dole_viscosity.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/brine/kestin_nacl_viscosity.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/brine/pr_vphi.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/brine/viscosity_route.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/brine/vphi_route.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/classes/__init__.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/classes/classes.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/constants/__init__.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/constants/constants.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/dca/__init__.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/dca/dca.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/docs/brine.rst +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/docs/dca.rst +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/docs/examples.ipynb +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/docs/gas.rst +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/docs/img/bot.png +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/docs/img/bot_PVTO.png +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/docs/img/bot_img.png +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/docs/img/dry_gas.png +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/docs/img/grid_sat_df.png +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/docs/img/influence.png +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/docs/img/properties_df.png +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/docs/img/sgof.png +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/docs/img/swof.png +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/docs/index.rst +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/docs/layer.rst +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/docs/library.rst +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/docs/matbal.rst +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/docs/nodal.rst +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/docs/nodal_examples.ipynb +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/docs/nodal_hydrate_demo.ipynb +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/docs/oil.rst +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/docs/plyasunov.rst +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/docs/recommend.rst +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/docs/sensitivity.rst +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/gas/__init__.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/gas/_hydrate.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/gas/gas.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/layer/__init__.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/layer/layer.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/library/__init__.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/library/component_library.xlsx +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/library/library.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/matbal/__init__.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/matbal/matbal.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/nodal/__init__.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/nodal/nodal.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/oil/__init__.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/oil/_compressibility.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/oil/_constants.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/oil/_correlations.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/oil/_density.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/oil/_harmonize.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/oil/_pvt_class.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/oil/_rate.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/oil/_separator.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/oil/_tables.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/oil/_utils.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/plyasunov/__init__.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/plyasunov/iapws_if97.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/plyasunov/plyasunov_model.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/plyasunov/water_properties.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/recommend/__init__.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/recommend/recommend.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/sensitivity/__init__.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/sensitivity/sensitivity.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/shared_fns/__init__.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/shared_fns/shared_fns.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/simtools/__init__.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/simtools/_aquifer.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/simtools/_decks.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/simtools/_pvt_tables.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/simtools/_relperm.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/simtools/_vfp.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/simtools/simtools.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/validate/__init__.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/pyrestoolbox/validate/validate.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/setup.cfg +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/setup.py +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/brine_visc/mod.rs +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/brine_visc/salt.rs +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/brine_visc/water.rs +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/critical_properties/mod.rs +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/dca/hyperbolic.rs +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/dca/mod.rs +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/dca/ransac.rs +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/gas_viscosity/mod.rs +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/matbal/mod.rs +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/matbal/objective.rs +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/oil/density.rs +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/oil/mod.rs +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/pseudopressure.rs +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/spycher_pruess/mod.rs +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/spycher_pruess/solubility.rs +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/vle/alpha.rs +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/vle/bip.rs +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/vle/components.rs +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/vle/eos.rs +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/vle/flash.rs +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/vle/fugacity.rs +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/vle/k_init.rs +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/vle/mod.rs +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/vle/rachford_rice.rs +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/vlp/constants.rs +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/vlp/friction.rs +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/vlp/holdup_bb.rs +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/vlp/holdup_gray.rs +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/vlp/holdup_wg.rs +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/vlp/ift.rs +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/vlp/march.rs +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/vlp/mod.rs +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/vlp/pvt_helpers.rs +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/vlp/static_column.rs +0 -0
- {pyrestoolbox-3.8.6 → pyrestoolbox-3.8.7}/src/zfactor/mod.rs +0 -0
|
@@ -27,18 +27,10 @@ jobs:
|
|
|
27
27
|
python-version: "3.12"
|
|
28
28
|
|
|
29
29
|
- name: Install Rust toolchain
|
|
30
|
-
if: matrix.os != 'windows-latest'
|
|
31
30
|
uses: dtolnay/rust-toolchain@stable
|
|
32
31
|
with:
|
|
33
32
|
targets: ${{ matrix.os == 'macos-14' && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }}
|
|
34
33
|
|
|
35
|
-
- name: Install Rust toolchain (Windows GNU)
|
|
36
|
-
if: matrix.os == 'windows-latest'
|
|
37
|
-
run: |
|
|
38
|
-
rustup toolchain install stable-x86_64-pc-windows-gnu
|
|
39
|
-
rustup default stable-x86_64-pc-windows-gnu
|
|
40
|
-
shell: bash
|
|
41
|
-
|
|
42
34
|
- name: Build wheels via cibuildwheel
|
|
43
35
|
uses: pypa/cibuildwheel@v2.23
|
|
44
36
|
env:
|
|
@@ -50,23 +42,12 @@ jobs:
|
|
|
50
42
|
CIBW_SKIP: "*-win32 *-manylinux_i686 *-musllinux*"
|
|
51
43
|
# maturin needs Rust in the build container
|
|
52
44
|
CIBW_BEFORE_ALL_LINUX: >
|
|
53
|
-
yum install -y m4 diffutils &&
|
|
54
45
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
|
|
55
46
|
CIBW_ENVIRONMENT_LINUX: 'PATH="$HOME/.cargo/bin:$PATH"'
|
|
56
47
|
# macOS: build native arch only per runner (no cross-compilation)
|
|
57
48
|
CIBW_ARCHS_MACOS: "arm64"
|
|
58
49
|
CIBW_ARCHS_LINUX: "x86_64"
|
|
59
50
|
CIBW_ARCHS_WINDOWS: "AMD64"
|
|
60
|
-
# Windows: use gnu target so GMP can build with MinGW GCC.
|
|
61
|
-
# MSYS2 is pre-installed on windows-latest runners.
|
|
62
|
-
CIBW_BEFORE_ALL_WINDOWS: >
|
|
63
|
-
C:\msys64\usr\bin\pacman.exe -S --noconfirm
|
|
64
|
-
mingw-w64-x86_64-gcc
|
|
65
|
-
m4
|
|
66
|
-
diffutils
|
|
67
|
-
make
|
|
68
|
-
CIBW_ENVIRONMENT_WINDOWS: >
|
|
69
|
-
PATH="C:\\msys64\\mingw64\\bin;C:\\msys64\\usr\\bin;$PATH"
|
|
70
51
|
# Rust cross-compile env for macOS x86_64 on arm64 runner
|
|
71
52
|
CIBW_ENVIRONMENT_MACOS: >
|
|
72
53
|
CARGO_BUILD_TARGET="aarch64-apple-darwin"
|
|
@@ -80,9 +61,10 @@ jobs:
|
|
|
80
61
|
# missing OpenBLAS (this broke the v3.6.0 first build attempt - the
|
|
81
62
|
# skip is load-bearing, do not remove it). Linux import + full-suite
|
|
82
63
|
# coverage lives in .github/workflows/tests.yml instead.
|
|
83
|
-
# Also skip
|
|
84
|
-
#
|
|
85
|
-
|
|
64
|
+
# Also skip cp39 (dependency ilt-inversion may not have matching
|
|
65
|
+
# wheels on PyPI yet). macOS tests run again: the skip was for an
|
|
66
|
+
# MPFR symbol issue, and the crate no longer links GMP/MPFR.
|
|
67
|
+
CIBW_TEST_SKIP: "*-manylinux* cp39-*"
|
|
86
68
|
|
|
87
69
|
- uses: actions/upload-artifact@v6
|
|
88
70
|
with:
|
|
@@ -30,9 +30,18 @@ jobs:
|
|
|
30
30
|
run: python3 -m pytest pyrestoolbox/tests/ -q
|
|
31
31
|
|
|
32
32
|
# ── Full test suite with Rust extension (includes parity tests) ──────
|
|
33
|
+
# Linux plus macOS and Windows: the extension is pure Rust (astro-float), so
|
|
34
|
+
# every platform builds it with the default toolchain and runs the suite.
|
|
33
35
|
test-with-rust:
|
|
34
|
-
name: Rust-accelerated (parity tests)
|
|
35
|
-
runs-on:
|
|
36
|
+
name: Rust-accelerated (parity tests)${{ matrix.os != 'ubuntu-latest' && format(' - {0}', matrix.os) || '' }}
|
|
37
|
+
runs-on: ${{ matrix.os }}
|
|
38
|
+
strategy:
|
|
39
|
+
fail-fast: false
|
|
40
|
+
matrix:
|
|
41
|
+
os: [ubuntu-latest, macos-14, windows-latest]
|
|
42
|
+
defaults:
|
|
43
|
+
run:
|
|
44
|
+
shell: bash
|
|
36
45
|
steps:
|
|
37
46
|
- uses: actions/checkout@v5
|
|
38
47
|
|
|
@@ -43,9 +52,6 @@ jobs:
|
|
|
43
52
|
- name: Install Rust toolchain
|
|
44
53
|
uses: dtolnay/rust-toolchain@stable
|
|
45
54
|
|
|
46
|
-
- name: Install m4 (needed by gmp-mpfr-sys for the rug crate)
|
|
47
|
-
run: sudo apt-get update -qq && sudo apt-get install -y -qq m4
|
|
48
|
-
|
|
49
55
|
- name: Install dependencies
|
|
50
56
|
run: pip install numpy scipy pandas tabulate openpyxl mpmath ilt-inversion pytest maturin
|
|
51
57
|
|
|
@@ -55,13 +61,13 @@ jobs:
|
|
|
55
61
|
# Tests import the repo source tree, so the compiled extension must
|
|
56
62
|
# live inside it for the Rust paths to load.
|
|
57
63
|
- name: Copy extension into source tree
|
|
58
|
-
run:
|
|
64
|
+
run: python -c "import glob, zipfile; z = zipfile.ZipFile(glob.glob('dist/*.whl')[0]); [z.extract(n, '.') for n in z.namelist() if n.startswith('pyrestoolbox/_native')]"
|
|
59
65
|
|
|
60
66
|
- name: Verify Rust extension loads
|
|
61
|
-
run:
|
|
67
|
+
run: python -c "from pyrestoolbox._accelerator import get_status; s = get_status(); print(s); assert s['rust_available'], s"
|
|
62
68
|
|
|
63
69
|
- name: Run full test suite (Rust + parity)
|
|
64
|
-
run:
|
|
70
|
+
run: python -m pytest pyrestoolbox/tests/ -q
|
|
65
71
|
|
|
66
72
|
# ── MCP server (separate distribution in mcp/) on both SDK majors ────
|
|
67
73
|
# The server picks FastMCP (1.x) or MCPServer (2.x) at import; test both so
|
|
@@ -117,9 +123,6 @@ jobs:
|
|
|
117
123
|
with:
|
|
118
124
|
components: clippy
|
|
119
125
|
|
|
120
|
-
- name: Install m4 (needed by gmp-mpfr-sys for the rug crate)
|
|
121
|
-
run: sudo apt-get update -qq && sudo apt-get install -y -qq m4
|
|
122
|
-
|
|
123
126
|
- name: Clippy
|
|
124
127
|
run: cargo clippy --all-targets -- -D warnings
|
|
125
128
|
|
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
# This file is automatically @generated by Cargo.
|
|
2
|
+
# It is not intended for manual editing.
|
|
3
|
+
version = 4
|
|
4
|
+
|
|
5
|
+
[[package]]
|
|
6
|
+
name = "astro-float"
|
|
7
|
+
version = "0.9.6"
|
|
8
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
9
|
+
checksum = "2cf6ecd69dd6fbe3763187ff2fa2b0e475b79f04ed86f631a7bc6b04ede0355e"
|
|
10
|
+
dependencies = [
|
|
11
|
+
"astro-float-macro",
|
|
12
|
+
"astro-float-num",
|
|
13
|
+
]
|
|
14
|
+
|
|
15
|
+
[[package]]
|
|
16
|
+
name = "astro-float-macro"
|
|
17
|
+
version = "0.4.6"
|
|
18
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
19
|
+
checksum = "9c007205ae7076600c8a59022866990afac02ff186f9031839f67ecce4df2146"
|
|
20
|
+
dependencies = [
|
|
21
|
+
"astro-float-num",
|
|
22
|
+
"proc-macro2",
|
|
23
|
+
"quote",
|
|
24
|
+
"syn 1.0.109",
|
|
25
|
+
]
|
|
26
|
+
|
|
27
|
+
[[package]]
|
|
28
|
+
name = "astro-float-num"
|
|
29
|
+
version = "0.3.7"
|
|
30
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
31
|
+
checksum = "bc7f6a0312e8f5845f84241b21bd2394d49940b6bc333c6a84f992e6dc9ebb85"
|
|
32
|
+
dependencies = [
|
|
33
|
+
"itertools",
|
|
34
|
+
"lazy_static",
|
|
35
|
+
"rand",
|
|
36
|
+
"serde",
|
|
37
|
+
]
|
|
38
|
+
|
|
39
|
+
[[package]]
|
|
40
|
+
name = "autocfg"
|
|
41
|
+
version = "1.5.0"
|
|
42
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
43
|
+
checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
|
|
44
|
+
|
|
45
|
+
[[package]]
|
|
46
|
+
name = "cfg-if"
|
|
47
|
+
version = "1.0.4"
|
|
48
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
49
|
+
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
|
|
50
|
+
|
|
51
|
+
[[package]]
|
|
52
|
+
name = "crossbeam-deque"
|
|
53
|
+
version = "0.8.8"
|
|
54
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
55
|
+
checksum = "622f3fc73690be383c7214310406f28a90e6edeadc3cea882f9d71e495b9711a"
|
|
56
|
+
dependencies = [
|
|
57
|
+
"crossbeam-epoch",
|
|
58
|
+
"crossbeam-utils",
|
|
59
|
+
]
|
|
60
|
+
|
|
61
|
+
[[package]]
|
|
62
|
+
name = "crossbeam-epoch"
|
|
63
|
+
version = "0.9.21"
|
|
64
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
65
|
+
checksum = "dc74980687109a3b14c72fd458107bf0baa1da1a1a805e178d15501ba9b86d9d"
|
|
66
|
+
dependencies = [
|
|
67
|
+
"crossbeam-utils",
|
|
68
|
+
]
|
|
69
|
+
|
|
70
|
+
[[package]]
|
|
71
|
+
name = "crossbeam-utils"
|
|
72
|
+
version = "0.8.23"
|
|
73
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
74
|
+
checksum = "a31eee39dddec8330830986fcd7625edb5a24ec90ea038215273bbc3adb08ac6"
|
|
75
|
+
|
|
76
|
+
[[package]]
|
|
77
|
+
name = "either"
|
|
78
|
+
version = "1.19.0"
|
|
79
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
80
|
+
checksum = "0e9c71c2167ca323c882b99918929403426e2373ea17242ff5653e0d5e1058be"
|
|
81
|
+
|
|
82
|
+
[[package]]
|
|
83
|
+
name = "getrandom"
|
|
84
|
+
version = "0.2.17"
|
|
85
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
86
|
+
checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0"
|
|
87
|
+
dependencies = [
|
|
88
|
+
"cfg-if",
|
|
89
|
+
"libc",
|
|
90
|
+
"wasi",
|
|
91
|
+
]
|
|
92
|
+
|
|
93
|
+
[[package]]
|
|
94
|
+
name = "heck"
|
|
95
|
+
version = "0.5.0"
|
|
96
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
97
|
+
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
|
|
98
|
+
|
|
99
|
+
[[package]]
|
|
100
|
+
name = "indoc"
|
|
101
|
+
version = "2.0.7"
|
|
102
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
103
|
+
checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706"
|
|
104
|
+
dependencies = [
|
|
105
|
+
"rustversion",
|
|
106
|
+
]
|
|
107
|
+
|
|
108
|
+
[[package]]
|
|
109
|
+
name = "itertools"
|
|
110
|
+
version = "0.10.5"
|
|
111
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
112
|
+
checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
|
|
113
|
+
dependencies = [
|
|
114
|
+
"either",
|
|
115
|
+
]
|
|
116
|
+
|
|
117
|
+
[[package]]
|
|
118
|
+
name = "lazy_static"
|
|
119
|
+
version = "1.5.1"
|
|
120
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
121
|
+
checksum = "20870f649af7073d53e38067b2a84312175d56ea15217e1b15bc83506ec50afb"
|
|
122
|
+
|
|
123
|
+
[[package]]
|
|
124
|
+
name = "libc"
|
|
125
|
+
version = "0.2.184"
|
|
126
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
127
|
+
checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af"
|
|
128
|
+
|
|
129
|
+
[[package]]
|
|
130
|
+
name = "memoffset"
|
|
131
|
+
version = "0.9.1"
|
|
132
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
133
|
+
checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
|
|
134
|
+
dependencies = [
|
|
135
|
+
"autocfg",
|
|
136
|
+
]
|
|
137
|
+
|
|
138
|
+
[[package]]
|
|
139
|
+
name = "once_cell"
|
|
140
|
+
version = "1.21.4"
|
|
141
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
142
|
+
checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
|
|
143
|
+
|
|
144
|
+
[[package]]
|
|
145
|
+
name = "portable-atomic"
|
|
146
|
+
version = "1.13.1"
|
|
147
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
148
|
+
checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49"
|
|
149
|
+
|
|
150
|
+
[[package]]
|
|
151
|
+
name = "ppv-lite86"
|
|
152
|
+
version = "0.2.21"
|
|
153
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
154
|
+
checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
|
|
155
|
+
dependencies = [
|
|
156
|
+
"zerocopy",
|
|
157
|
+
]
|
|
158
|
+
|
|
159
|
+
[[package]]
|
|
160
|
+
name = "proc-macro2"
|
|
161
|
+
version = "1.0.106"
|
|
162
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
163
|
+
checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
|
|
164
|
+
dependencies = [
|
|
165
|
+
"unicode-ident",
|
|
166
|
+
]
|
|
167
|
+
|
|
168
|
+
[[package]]
|
|
169
|
+
name = "pyo3"
|
|
170
|
+
version = "0.23.5"
|
|
171
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
172
|
+
checksum = "7778bffd85cf38175ac1f545509665d0b9b92a198ca7941f131f85f7a4f9a872"
|
|
173
|
+
dependencies = [
|
|
174
|
+
"cfg-if",
|
|
175
|
+
"indoc",
|
|
176
|
+
"libc",
|
|
177
|
+
"memoffset",
|
|
178
|
+
"once_cell",
|
|
179
|
+
"portable-atomic",
|
|
180
|
+
"pyo3-build-config",
|
|
181
|
+
"pyo3-ffi",
|
|
182
|
+
"pyo3-macros",
|
|
183
|
+
"unindent",
|
|
184
|
+
]
|
|
185
|
+
|
|
186
|
+
[[package]]
|
|
187
|
+
name = "pyo3-build-config"
|
|
188
|
+
version = "0.23.5"
|
|
189
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
190
|
+
checksum = "94f6cbe86ef3bf18998d9df6e0f3fc1050a8c5efa409bf712e661a4366e010fb"
|
|
191
|
+
dependencies = [
|
|
192
|
+
"once_cell",
|
|
193
|
+
"target-lexicon",
|
|
194
|
+
]
|
|
195
|
+
|
|
196
|
+
[[package]]
|
|
197
|
+
name = "pyo3-ffi"
|
|
198
|
+
version = "0.23.5"
|
|
199
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
200
|
+
checksum = "e9f1b4c431c0bb1c8fb0a338709859eed0d030ff6daa34368d3b152a63dfdd8d"
|
|
201
|
+
dependencies = [
|
|
202
|
+
"libc",
|
|
203
|
+
"pyo3-build-config",
|
|
204
|
+
]
|
|
205
|
+
|
|
206
|
+
[[package]]
|
|
207
|
+
name = "pyo3-macros"
|
|
208
|
+
version = "0.23.5"
|
|
209
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
210
|
+
checksum = "fbc2201328f63c4710f68abdf653c89d8dbc2858b88c5d88b0ff38a75288a9da"
|
|
211
|
+
dependencies = [
|
|
212
|
+
"proc-macro2",
|
|
213
|
+
"pyo3-macros-backend",
|
|
214
|
+
"quote",
|
|
215
|
+
"syn 2.0.117",
|
|
216
|
+
]
|
|
217
|
+
|
|
218
|
+
[[package]]
|
|
219
|
+
name = "pyo3-macros-backend"
|
|
220
|
+
version = "0.23.5"
|
|
221
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
222
|
+
checksum = "fca6726ad0f3da9c9de093d6f116a93c1a38e417ed73bf138472cf4064f72028"
|
|
223
|
+
dependencies = [
|
|
224
|
+
"heck",
|
|
225
|
+
"proc-macro2",
|
|
226
|
+
"pyo3-build-config",
|
|
227
|
+
"quote",
|
|
228
|
+
"syn 2.0.117",
|
|
229
|
+
]
|
|
230
|
+
|
|
231
|
+
[[package]]
|
|
232
|
+
name = "pyrestoolbox-native"
|
|
233
|
+
version = "3.8.7"
|
|
234
|
+
dependencies = [
|
|
235
|
+
"astro-float",
|
|
236
|
+
"pyo3",
|
|
237
|
+
"rayon",
|
|
238
|
+
]
|
|
239
|
+
|
|
240
|
+
[[package]]
|
|
241
|
+
name = "quote"
|
|
242
|
+
version = "1.0.45"
|
|
243
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
244
|
+
checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
|
|
245
|
+
dependencies = [
|
|
246
|
+
"proc-macro2",
|
|
247
|
+
]
|
|
248
|
+
|
|
249
|
+
[[package]]
|
|
250
|
+
name = "rand"
|
|
251
|
+
version = "0.8.8"
|
|
252
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
253
|
+
checksum = "e058c7de0b26af77780c769414d6257830bb240f3c38477dbc2c16e5f54d6d4c"
|
|
254
|
+
dependencies = [
|
|
255
|
+
"libc",
|
|
256
|
+
"rand_chacha",
|
|
257
|
+
"rand_core",
|
|
258
|
+
]
|
|
259
|
+
|
|
260
|
+
[[package]]
|
|
261
|
+
name = "rand_chacha"
|
|
262
|
+
version = "0.3.1"
|
|
263
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
264
|
+
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
|
|
265
|
+
dependencies = [
|
|
266
|
+
"ppv-lite86",
|
|
267
|
+
"rand_core",
|
|
268
|
+
]
|
|
269
|
+
|
|
270
|
+
[[package]]
|
|
271
|
+
name = "rand_core"
|
|
272
|
+
version = "0.6.4"
|
|
273
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
274
|
+
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
|
|
275
|
+
dependencies = [
|
|
276
|
+
"getrandom",
|
|
277
|
+
]
|
|
278
|
+
|
|
279
|
+
[[package]]
|
|
280
|
+
name = "rayon"
|
|
281
|
+
version = "1.12.0"
|
|
282
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
283
|
+
checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d"
|
|
284
|
+
dependencies = [
|
|
285
|
+
"either",
|
|
286
|
+
"rayon-core",
|
|
287
|
+
]
|
|
288
|
+
|
|
289
|
+
[[package]]
|
|
290
|
+
name = "rayon-core"
|
|
291
|
+
version = "1.13.0"
|
|
292
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
293
|
+
checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91"
|
|
294
|
+
dependencies = [
|
|
295
|
+
"crossbeam-deque",
|
|
296
|
+
"crossbeam-utils",
|
|
297
|
+
]
|
|
298
|
+
|
|
299
|
+
[[package]]
|
|
300
|
+
name = "rustversion"
|
|
301
|
+
version = "1.0.22"
|
|
302
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
303
|
+
checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
|
|
304
|
+
|
|
305
|
+
[[package]]
|
|
306
|
+
name = "serde"
|
|
307
|
+
version = "1.0.229"
|
|
308
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
309
|
+
checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba"
|
|
310
|
+
dependencies = [
|
|
311
|
+
"serde_core",
|
|
312
|
+
]
|
|
313
|
+
|
|
314
|
+
[[package]]
|
|
315
|
+
name = "serde_core"
|
|
316
|
+
version = "1.0.229"
|
|
317
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
318
|
+
checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48"
|
|
319
|
+
dependencies = [
|
|
320
|
+
"serde_derive",
|
|
321
|
+
]
|
|
322
|
+
|
|
323
|
+
[[package]]
|
|
324
|
+
name = "serde_derive"
|
|
325
|
+
version = "1.0.229"
|
|
326
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
327
|
+
checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348"
|
|
328
|
+
dependencies = [
|
|
329
|
+
"proc-macro2",
|
|
330
|
+
"quote",
|
|
331
|
+
"syn 3.0.9",
|
|
332
|
+
]
|
|
333
|
+
|
|
334
|
+
[[package]]
|
|
335
|
+
name = "syn"
|
|
336
|
+
version = "1.0.109"
|
|
337
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
338
|
+
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
|
|
339
|
+
dependencies = [
|
|
340
|
+
"proc-macro2",
|
|
341
|
+
"quote",
|
|
342
|
+
"unicode-ident",
|
|
343
|
+
]
|
|
344
|
+
|
|
345
|
+
[[package]]
|
|
346
|
+
name = "syn"
|
|
347
|
+
version = "2.0.117"
|
|
348
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
349
|
+
checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
|
|
350
|
+
dependencies = [
|
|
351
|
+
"proc-macro2",
|
|
352
|
+
"quote",
|
|
353
|
+
"unicode-ident",
|
|
354
|
+
]
|
|
355
|
+
|
|
356
|
+
[[package]]
|
|
357
|
+
name = "syn"
|
|
358
|
+
version = "3.0.9"
|
|
359
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
360
|
+
checksum = "d78c8dee4c7bf0e14673097256fed6142ce9d3b85a408189d07482442145823b"
|
|
361
|
+
dependencies = [
|
|
362
|
+
"proc-macro2",
|
|
363
|
+
"quote",
|
|
364
|
+
"unicode-ident",
|
|
365
|
+
]
|
|
366
|
+
|
|
367
|
+
[[package]]
|
|
368
|
+
name = "target-lexicon"
|
|
369
|
+
version = "0.12.16"
|
|
370
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
371
|
+
checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
|
|
372
|
+
|
|
373
|
+
[[package]]
|
|
374
|
+
name = "unicode-ident"
|
|
375
|
+
version = "1.0.24"
|
|
376
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
377
|
+
checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
|
|
378
|
+
|
|
379
|
+
[[package]]
|
|
380
|
+
name = "unindent"
|
|
381
|
+
version = "0.2.4"
|
|
382
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
383
|
+
checksum = "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3"
|
|
384
|
+
|
|
385
|
+
[[package]]
|
|
386
|
+
name = "wasi"
|
|
387
|
+
version = "0.11.1+wasi-snapshot-preview1"
|
|
388
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
389
|
+
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
|
|
390
|
+
|
|
391
|
+
[[package]]
|
|
392
|
+
name = "zerocopy"
|
|
393
|
+
version = "0.8.63"
|
|
394
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
395
|
+
checksum = "e5fe1f8f1b06191a00962174c61aa5005e0bb391a6d80d07e24d115c01a92ed8"
|
|
396
|
+
dependencies = [
|
|
397
|
+
"zerocopy-derive",
|
|
398
|
+
]
|
|
399
|
+
|
|
400
|
+
[[package]]
|
|
401
|
+
name = "zerocopy-derive"
|
|
402
|
+
version = "0.8.63"
|
|
403
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
404
|
+
checksum = "863ad3ac83293fb4d740aedbfdc9240dd8d1a50c1099acd76ce80ce7c7230c7f"
|
|
405
|
+
dependencies = [
|
|
406
|
+
"proc-macro2",
|
|
407
|
+
"quote",
|
|
408
|
+
"syn 2.0.117",
|
|
409
|
+
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "pyrestoolbox-native"
|
|
3
|
-
version = "3.8.
|
|
3
|
+
version = "3.8.7"
|
|
4
4
|
edition = "2021"
|
|
5
5
|
license = "GPL-3.0-or-later"
|
|
6
6
|
description = "Rust acceleration extensions for pyResToolbox"
|
|
@@ -11,8 +11,9 @@ name = "_native"
|
|
|
11
11
|
crate-type = ["cdylib"]
|
|
12
12
|
|
|
13
13
|
[dependencies]
|
|
14
|
+
astro-float = "0.9.6"
|
|
14
15
|
pyo3 = { version = "0.23", features = ["extension-module"] }
|
|
15
|
-
|
|
16
|
+
rayon = "1.12.0"
|
|
16
17
|
|
|
17
18
|
[profile.release]
|
|
18
19
|
opt-level = 3
|
|
@@ -4,7 +4,7 @@ build-backend = "maturin"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pyrestoolbox"
|
|
7
|
-
version = "3.8.
|
|
7
|
+
version = "3.8.7"
|
|
8
8
|
description = "pyResToolbox - A collection of Reservoir Engineering Utilities"
|
|
9
9
|
license = {text = "GPL-3.0-or-later"}
|
|
10
10
|
authors = [{name = "Mark W. Burgoyne", email = "mark.w.burgoyne@gmail.com"}]
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
Changelist in 3.8.7:
|
|
2
|
+
|
|
3
|
+
- **SIMTOOLS: ``influence_tables`` Rust path runs on all CPU threads.** The Bessel evaluations, transform values and GWR accelerations are spread across threads (output identical at any thread count). On a 4-core, 8-thread machine the 126-point table takes 0.06 s at M=7 (0.19 s on one thread, 0.09 s for the 3.8.6 MPFR build) and 0.51 s at M=32 (1.81 s, 1.51 s). For comparison, gwr_inversion 2.0.0's built-in bounded radial transform takes 0.40 s at M=7 on one core and 0.15 s with ``workers=8``, at identical accuracy. ``RAYON_NUM_THREADS`` limits the thread count; see the ``influence_tables`` documentation.
|
|
4
|
+
|
|
5
|
+
- **PACKAGING: the Rust extension no longer needs a C toolchain, and macOS wheels are tested again.** The multiprecision arithmetic behind ``simtools.influence_tables`` moved from the ``rug`` crate (GMP and MPFR, compiled from C) to the pure-Rust ``astro-float`` crate. Windows wheels now build with the standard MSVC Rust toolchain instead of MinGW and MSYS2, building from the sdist needs only Rust (no ``m4``), and the macOS wheel import tests that were skipped for an MPFR linking issue run again. Results agree with the MPFR build to the last bit of f64 output at M of 18 and above, and to within 2.8e-10 (relative) at M=7 and 1.4e-13 at M=12, about four orders of magnitude below the inversion's own error. On one thread it is slower than the MPFR build, partly recovered by evaluating each argument's four Bessel functions from one set of power series and sharing the values at sqrt(s) across ReD: a 126-point table takes 0.19 s at the default M=7 against 0.09 s before (2.1x), narrowing to 1.2x at M=32 (1.81 vs 1.51 s).
|
|
6
|
+
|
|
1
7
|
Changelist in 3.8.6:
|
|
2
8
|
|
|
3
9
|
- **SIMTOOLS: ``influence_tables`` Rust path now holds the precision the inversion needs (results move).** The Rust Gaver-Wynn-Rho inversion evaluates the Van Everdingen-Hurst transform with its own MPFR Bessel functions, and those carried less precision than GWR needs (about 2.1M digits). The series-to-asymptotic switch was fixed at x = 25, where the asymptotic expansion is good to only about 22 digits; the K-series ran with half the guard bits its cancellation needs; pi in the asymptotic prefactors and Euler's constant in the K0 series were f64 or 50-digit constants; and the I1 asymptotic expansion had a sign error. The switch now depends on the working precision, the guard bits match the cancellation, all constants are MPFR, and the I1 sign is corrected. Against a reference converged to 1e-14, the worst point on a 126-point table (ReD 1.5-20, tD 0.01-200) is now 2.2e-5 at M=7 (was 4.5e-5), 1.4e-8 at M=12 (was 1.6e-4), 3.2e-11 at M=18 (was 6.7e-3) and 2e-16 at M=32 (ReD 1.5 at tD 0.044 returned 20.07 against 0.2175), the same convergence as the pure-Python path. At the default M=7 the README example table (ReD 1.5-1000) moves by up to 4.6e-5 relative (ReD 1.5, tD 0.027: 0.172801 to 0.172809), 6e-7 on average. Run time is unchanged or a little shorter (121 against 138 ms for that table at M=7).
|
|
@@ -152,7 +152,7 @@ pyrestoolbox.simtools.influence_tables
|
|
|
152
152
|
|
|
153
153
|
Solves Van Everdingin & Hurst Constant Terminal Rate solution via inverse Laplace transform and optionally writes out ECLIPSE styled AQUTAB include file.
|
|
154
154
|
|
|
155
|
-
The Rust extension (in every prebuilt wheel) does the inversion with no extra packages. Without it, the pure-Python fallback needs the optional ``aquifer`` extra (``ilt-inversion``, ``mpmath``, ``gmpy2``): ``pip install 'pyrestoolbox[aquifer]'``. Calling ``influence_tables`` on the pure-Python path without them raises ``ImportError``.
|
|
155
|
+
The Rust extension (in every prebuilt wheel) does the inversion with no extra packages, using all available CPU threads; set the environment variable ``RAYON_NUM_THREADS`` before importing pyrestoolbox to limit them (for example ``RAYON_NUM_THREADS=1`` when running several processes side by side). The result does not depend on the thread count. Without it, the pure-Python fallback needs the optional ``aquifer`` extra (``ilt-inversion``, ``mpmath``, ``gmpy2``): ``pip install 'pyrestoolbox[aquifer]'``. Calling ``influence_tables`` on the pure-Python path without them raises ``ImportError``.
|
|
156
156
|
|
|
157
157
|
Returns a tuple of;
|
|
158
158
|
1. Dimensionless time list
|