Skip to main content

aadc-ode

ODE integration with exact adjoints on aadc-ng.

Two families of solvers:

C++ kernel replay (on tape) — the RHS f(y, p) is recorded once into its own tape, and each step records a compute block that replays it.

Solver Method For
bdf_solve Semi-implicit Euler, frozen Jacobian Stiff systems
rk4_solve Classical Runge-Kutta 4th order Non-stiff, fixed step

Python discrete adjoint — adaptive integration forward, then a backward sweep computes exact dJ/dp via vector-Jacobian products from the AAD kernel.

Solver Method For
adaptive_rk45 Dormand-Prince 4(5), adaptive step Non-stiff, high accuracy
fixed_rk4 Classical RK4, fixed step Non-stiff
discrete_adjoint Backward sweep (one VJP per stage) Exact dJ/dp for ERK

What "exact" means here, because it is the one place a knowledgeable user could be misled: exact for the discrete map with the recorded step sequence. The accepted steps h_list are frozen and the adaptive controller is not differentiated — that is the semantics of the cited paper, not an approximation introduced by this port. It is also why the backward sweep needs the forward solve's time grid and cannot invent one:

t_list, x_list, h_list, k_stages = aadc_ode.adaptive_rk45(f, x0, (t0, tf))
dJdp = aadc_ode.discrete_adjoint(aad_rhs, x_list, h_list, k_stages,
                                 aadc_ode.DORMAND_PRINCE_45, p,
                                 dJdx_T=dJdx_T,
                                 t_list=t_list)     # <- pass it

Pass t_list (or t0= if that is all you have). Omitting both reconstructs the stage times from 0.0, which is correct only for an autonomous RHS or a solve that started at t=0 — and wrong, silently, otherwise. It now warns; t0=0.0 is how an autonomous RHS says so and silences it.

AadRhs records the RHS once and replays that one recording at every stage of every step, so a plain if x[0] > 0: inside the RHS freezes its branch at the recording point and uses it at states arbitrarily far away — wrong values and flipped derivatives. Recording therefore raises if the tape reports any active-to-passive conversion; use iif / a masked blend, or allow_passive=True if the branch really is constant over the whole trajectory.

The discrete adjoint is the method from:

R. Martins, E. Lakshtanov. A C++ implementation of the discrete adjoint sensitivity analysis method for explicit adaptive Runge-Kutta methods enabled by automatic adjoint differentiation and SIMD vectorization. Applied Mathematics and Computation, 2025. arXiv:2410.01911

src/bdf.{hpp,cpp}            C++ library: KernelBlock, LUSolveBlock, drivers
src/bdf_selftest.cpp         native checks, incl. the two Python cannot express
bindings/aadcbdf_pybind.cpp  ONE type_caster — where gradients are won or lost
packaging/aadc_ode/          wheel: C++ extension + Python solvers (rk, adjoint)
tests/                       every assertion is on a DERIVATIVE
ci/build.sh · ci/build.ps1   compile + link (no code generation step)

Build and test

. ci/pins.env && SDK_VER="$SDK_VERSION" SDK_SRC_VERSION="$SDK_SRC_VERSION" \
  CORE_WHEEL_VERSION="$CORE_WHEEL_VERSION" bash ci/build.sh python3.10 python3.11 python3.12 python3.13 python3.14
pip install dist/aadc_ode-*.whl
pytest tests/ -q

A requested interpreter that is not installed is a fatal error (matching ci/build.ps1). For a local run that should just build whatever is present, set STRICT=0 to skip missing interpreters instead.

Windows: powershell -File ci\build.ps1 -Pythons 3.10,3.11,3.12,3.13,3.14, from inside an MSVC environment. CI covers linux-x86_64, linux-aarch64, macos-arm64 and windows-x64.

Use

import aadc, aadc_ode

lam = [1.0, 10.0, 100.0, 1000.0]

# 1. Record the RHS once, in ordinary Python.
k = aadc_ode.Kernel()
states, _ = k.begin(n_states=4)
k.end([-lam[i] * states[i] for i in range(4)])

# 2. Record the loop onto an outer tape. 100 steps -> 100 blocks, ONE kernel.
f = aadc.Functions()
f.start_recording()
y0   = [aadc.idouble(1.0) for _ in range(4)]
args = [v.mark_as_input() for v in y0]
xT   = aadc_ode.bdf_solve(k, y0, dt=1e-3, n_steps=100, jac_lag=10)
cost = sum((x * x for x in xT[1:]), xT[0] * xT[0])
out  = cost.mark_as_output()
f.stop_recording()

# 3. Replay and differentiate, at any point — not just the recording point.
ws = f.create_workspace()
for a in args:
    ws.set_val(a, 1.0)
ws.forward()
ws.set_diff(out, 1.0)
ws.reverse()
print([ws.diff(a) for a in args])

begin hands back copies of the library-owned input variables, and that direction is the whole design. An aadc-ng tape slot is keyed by the address of its variable, and this binding marshals Real by value — so a mark_states(y) taking your list would mark throwaway copies while you kept using the originals. Zero gradients, nothing raised. With begin, your expressions sit downstream of the real inputs and the adjoint reaches them.

Design notes

Four properties that affect how you can use this package, rather than how it came to be:

Lane-generic blocks. The compute blocks are ComputeBlockT, so a tape containing them runs on a vector workspace as well as a scalar one. The avx2_lanes self test drives four AVX2 lanes with four different initial conditions and requires them to reproduce four scalar runs bitwise:

PASS avx2_lanes    4 lanes vs 4 scalar runs, worst |delta| = 0.000e+00

One reverse sweep per step, not one per state. A kernel block seeds every output with the outer adjoint and reverses once, computing x̄ += Jᵀȳ directly instead of assembling a full Jacobian. On a 27-state model that is one sweep per step rather than 27.

Thread-safe replay. Each thread gets its own kernel replay workspace. The concurrent_replay self test runs eight threads against one tape and requires bitwise agreement with the sequential run.

The frozen Jacobian is an option, and it is an approximation. The semi-implicit step's cached 1 - dt·J_ii is a record-time constant: replaying with bumped inputs reuses the Jacobian captured while recording. That is the standard semi-implicit trade — the Jacobian is a preconditioner, not part of the answer — but it is an approximation to the derivative of the scheme. freeze_jacobian=False turns it off; jac_lag=1 refreshes it every step.

What is not differentiated

luSolve takes the LU factorisation and pivot vector as passive data and differentiates only the right-hand side. That is the right split for a BDF step — the iteration matrix is a preconditioner rebuilt from the cached Jacobian, not a differentiable input — but it is a real limitation for anyone wanting dx/dA. Adding it means differentiating the factorisation itself (Ā = -x̄ xᵀ and friends), which is a separate piece of work.

Testing philosophy

Every test asserts a derivative. A binding that passivates Real, a second libaadc-ng image, or a block whose reverse never reaches the outer tape all produce values correct to the last digit and gradients of exactly zero — so a value check proves nothing.

The stiff adjoints are checked against a closed form, not finite differences. By T = 0.1 the λ=1000 component has decayed to ~1e-60, and a central difference of a quantity that small is pure cancellation noise; FD gets that adjoint wrong by 0.15%, which would either fail a correct implementation or force a tolerance loose enough to accept a wrong one.

The avx2_lanes and concurrent_replay checks are native C++ and bound as aadc_ode.selftest(). They have to be: aadc_ng's own Python external-function block is scalar-only and its callbacks are Jacobian-supplying, so a Python-only suite could not exercise either — and those are precisely the capabilities this package adds.

Packaging

Per-interpreter (pybind11 is not abi3), on top of the abi3 aadc_ng, bridged by the _aadc_ng._C_API capsule. This wheel ships no libaadc-ng: it links the copy inside the installed aadc_ng wheel and finds it again by RPATH ($ORIGIN/../aadc_ng, @loader_path/../aadc_ng, and on Windows by import order — delvewheel is deliberately not run).

Recording state is thread-local inside libaadc-ng, so a second image gives the extension and the aadc module private recording contexts. For this package that failure would be total: every entry point either opens a recording or records a block onto one someone else opened. test_exactly_one_library_image asserts it directly.

Unlike aadc-example-pybind11 this build does not define AADCNG_ALLOW_TO_PASSIVE_BOOL. That macro enables active-to-passive bool conversions across the whole translation unit, and a package whose entire purpose is keeping an exact adjoint through a stiff solver should not switch on implicit passivation to compile itself. bdf.hpp includes only <aadcNG/idoubleNG.h> — never the <aadcNG/aadcNG.h> umbrella — which keeps the deleted iboolNG::operator bool() doing its job.

Licence and support

aadc-ode is distributed under the MatLogica EULA and depends on the aadc core, which runs in Community Edition unless licensed — non-commercial and academic use only. The full licence and the third-party notices travel inside the wheel, under aadc_ode-<version>.dist-info/licenses/.

For commercial licensing, advanced features or support: matlogica.com · info@matlogica.com

Metadata

Release files for aadc-ode 0.6.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for aadc-ode 0.6.5
File
aadc_ode-0.6.5-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
aadc_ode-0.6.5-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
aadc_ode-0.6.5-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 Details
aadc_ode-0.6.5-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details
aadc_ode-0.6.5-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
aadc_ode-0.6.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
aadc_ode-0.6.5-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ ARM64, Linux glibc 2.26+ ARM64 Details
aadc_ode-0.6.5-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
aadc_ode-0.6.5-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
aadc_ode-0.6.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
aadc_ode-0.6.5-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 Details
aadc_ode-0.6.5-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
aadc_ode-0.6.5-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
aadc_ode-0.6.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
aadc_ode-0.6.5-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 Details
aadc_ode-0.6.5-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
aadc_ode-0.6.5-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
aadc_ode-0.6.5-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
aadc_ode-0.6.5-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 Details
aadc_ode-0.6.5-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details

Total release size: 3.9 MB

Release files / aadc_ode-0.6.5-cp314-cp314-win_amd64.whl

Download URL aadc_ode-0.6.5-cp314-cp314-win_amd64.whl
Size 169.7 kB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
34457db98e24a6f73a19f547a67599081413b4821902a0a8f1910dece8964710
BLAKE2b-256 checksum
How to use checksums
427bee451650485cd28d761a2c4f69d572fc1edc3509b745ea3bc7a8b1af5de9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.2

Release files / aadc_ode-0.6.5-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL aadc_ode-0.6.5-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 219.9 kB
Tags CPython 3.14 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
39d92580a76a7714916dda4e100dfc973e963566c60e2f5f16c42f7ba4210fb4
BLAKE2b-256 checksum
How to use checksums
3fb40c78cc6b2a0977feeaddffb27d606574c3eb3b49c56c5f7b89672e0408e5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.2

Release files / aadc_ode-0.6.5-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL aadc_ode-0.6.5-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 208.0 kB
Tags CPython 3.14 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
cf153a6fcb7b0db9d3b26d17892f10a3a31521182668f23fe8503b6f7a39f19a
BLAKE2b-256 checksum
How to use checksums
1e630c2b477b591cb7457122bacb168c897e8a6156a4b11d842410f8c8f5bcf1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.2

Release files / aadc_ode-0.6.5-cp314-cp314-macosx_11_0_arm64.whl

Download URL aadc_ode-0.6.5-cp314-cp314-macosx_11_0_arm64.whl
Size 179.9 kB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
9db3a7932b8afadc338ae965e765d34cb10a319346e7415e748c67ffff3492d6
BLAKE2b-256 checksum
How to use checksums
7cea11b22f17a68d2a00b915d1b126416bd20b3c4ba95f75507acb0fe43ceb4f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.2

Release files / aadc_ode-0.6.5-cp313-cp313-win_amd64.whl

Download URL aadc_ode-0.6.5-cp313-cp313-win_amd64.whl
Size 165.8 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
5915814336685ddca268522ab698adf7ea566ebf57266a81e91d884222d360b0
BLAKE2b-256 checksum
How to use checksums
acace50ab5c51d8d65af024558dc0494f15603cd1a6f0612fe4e3d979cd9f4ec
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.2

Release files / aadc_ode-0.6.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL aadc_ode-0.6.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 219.6 kB
Tags CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
ae0c4b2364a9e58c83ede3f0487fabf427c18fd0f67913dc7bc6edbf173d9b5d
BLAKE2b-256 checksum
How to use checksums
c5e4e3be57e83c8458f1dbb8ab6989c1c574aacabe539dfe35013665931989e6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.2

Release files / aadc_ode-0.6.5-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL aadc_ode-0.6.5-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 207.3 kB
Tags CPython 3.13 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
5d33313e78904850a4feab55bd27a56c44cbb1025b2bb382266a2503987cb320
BLAKE2b-256 checksum
How to use checksums
ad058d3729f3229e1c57b8dd81b0c0706973eea57f5a3ede9f04b5b5931424d4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.2

Release files / aadc_ode-0.6.5-cp313-cp313-macosx_11_0_arm64.whl

Download URL aadc_ode-0.6.5-cp313-cp313-macosx_11_0_arm64.whl
Size 179.6 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
aa43f2de6c5d5e958669a5b9f10b97fb09c90b8ce8750b2a1acda8957cb79389
BLAKE2b-256 checksum
How to use checksums
2c80daf59367d3c2e3d4f5751bf086c7aa201325317ed40c42591121ea81b0b0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.2

Release files / aadc_ode-0.6.5-cp312-cp312-win_amd64.whl

Download URL aadc_ode-0.6.5-cp312-cp312-win_amd64.whl
Size 165.8 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
aaa09a1dbdc2885fb721d948c1f988b08083c0ced69fd3ed96663811b2e40c57
BLAKE2b-256 checksum
How to use checksums
aea8486dc9a9f84c366ae7161eea6d0e95da52c633c9909868f2b747846930b4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.2

Release files / aadc_ode-0.6.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL aadc_ode-0.6.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 219.5 kB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
e71eb09526ce0644c7c16554db7f583631e3443aa4e8cbc8334af942b64e0d24
BLAKE2b-256 checksum
How to use checksums
02f8245d56c072e2fc912c3da4511ea79cba3b88dda22c9fbc8c295156d663e7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.2

Release files / aadc_ode-0.6.5-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL aadc_ode-0.6.5-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 207.2 kB
Tags CPython 3.12 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
a90e33e7620eed6729053481d0bfcde78502addefe6315cc847b6d4262903165
BLAKE2b-256 checksum
How to use checksums
27a26d491ca94aff9234504fea02d8844fd5c6691e91d18551120758e985ea0d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.2

Release files / aadc_ode-0.6.5-cp312-cp312-macosx_11_0_arm64.whl

Download URL aadc_ode-0.6.5-cp312-cp312-macosx_11_0_arm64.whl
Size 179.5 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
cd41c15a6ca87f52a28383c50f0e3ee511d1ccbc3e14a0335e3981f64ea12129
BLAKE2b-256 checksum
How to use checksums
0f7c03616c5d2732ede87afa4247c90771dccfa9feb97ac3efdcfafc8e63256f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.2

Release files / aadc_ode-0.6.5-cp311-cp311-win_amd64.whl

Download URL aadc_ode-0.6.5-cp311-cp311-win_amd64.whl
Size 165.1 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
d970eff80c231007869409e233af746b2dc2a0df106eca34a2827ef5734ea539
BLAKE2b-256 checksum
How to use checksums
cf9e432459d567e7cd6ad5b40ba3e3fc1c2c2d79636ce5d86d9dd4a0e1af23f5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.2

Release files / aadc_ode-0.6.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL aadc_ode-0.6.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 218.4 kB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
890a283c3562064c7fe2708506c1aed7901f964142fbd78970acc74613016018
BLAKE2b-256 checksum
How to use checksums
4438c5d58293050fd909ea756e4b11aaff2b0177b1d83b4975e01d0eedaabe5a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.2

Release files / aadc_ode-0.6.5-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL aadc_ode-0.6.5-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 208.2 kB
Tags CPython 3.11 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
bc85133f17cd2b59053f06fad58c0880927b7dd07aa3b7aad24c1061f38578be
BLAKE2b-256 checksum
How to use checksums
b66c5f0489511dbd578055b7995b5bf7049bba21932e1abab43efca628e84f89
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.2

Release files / aadc_ode-0.6.5-cp311-cp311-macosx_11_0_arm64.whl

Download URL aadc_ode-0.6.5-cp311-cp311-macosx_11_0_arm64.whl
Size 178.8 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
3f405de7a46b02556b704d54aac3ef04c7d3123692bdb9ef483302d84b32e1fe
BLAKE2b-256 checksum
How to use checksums
2edd9ed575ca92a6d0cca6e8c2f3040c5c24d4df3c08b7cb0d17c474fbd4314b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.2

Release files / aadc_ode-0.6.5-cp310-cp310-win_amd64.whl

Download URL aadc_ode-0.6.5-cp310-cp310-win_amd64.whl
Size 164.4 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
468bb4a1da387e97a22e04cf5da37cd4eff3832179674775a68110d81499d1c6
BLAKE2b-256 checksum
How to use checksums
7762d531dbbd74a94d777d9a81b0c1ab10157dbe30bfef1c342abb99c32c33f6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.2

Release files / aadc_ode-0.6.5-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL aadc_ode-0.6.5-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 216.7 kB
Tags CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
87e49c56664d55b0ef132c02e7015ba7cd509151b7c991f85f8a689adae9c488
BLAKE2b-256 checksum
How to use checksums
a067f1690da396f55745435eea2737c77a0a667d1e403dead7de037b57e8b0b4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.2

Release files / aadc_ode-0.6.5-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL aadc_ode-0.6.5-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 206.7 kB
Tags CPython 3.10 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
f0a71a4eaacf8392d17113c4c94c8fe1e3f107a1fa8efdccc16f22e5a8cc5031
BLAKE2b-256 checksum
How to use checksums
71843f96ac158e243a9e7c15f5e0dbd281ff8e3152cdd2dbb20f16fa97f1b322
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.2

Release files / aadc_ode-0.6.5-cp310-cp310-macosx_11_0_arm64.whl

Download URL aadc_ode-0.6.5-cp310-cp310-macosx_11_0_arm64.whl
Size 177.5 kB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
8f8a66ef05faeace12dc4ae8cd598a522670034606498e92d77b9db9fe9d5efa
BLAKE2b-256 checksum
How to use checksums
eb6d9171de8f421ca51fc6d2491016be219f6147300eb268d10f9c1ea5768261
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.2

Release history Release notifications | RSS feed

This release

0.6.5 This release

20 release files

0.6.3

20 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page