AADC records a C++ or Python model as it runs and compiles the recording to machine code. The kernel runs 6× to 1000× faster than the code it came from, returns every derivative at an adjoint factor below one, runs the same recording on AVX2, AVX-512, Apple Silicon and ARM, and, in our latest release, keeps a record a validator can read.
Major Wall Street and global banks run it on more than $4 trillion of derivatives. The same compiler trains a gas storage dispatch policy, prices an insurer's variable annuities and differentiates a robot's trajectory optimiser. The community edition is free.
$ pip install aadc Successfully installed aadc-2.22.2 >>> f.compile("auto") 1,000,000 FX trades priced in 0.4 s >>> ws.reverse() 2,564 sensitivities in 2.0 ms $ AADC_TRACE=1 ./price 74,428 steps recorded, 100% attributed >>> targets AVX2 AVX-512 Apple Silicon ARM NVIDIA, in development
Recognised by
and are asked for sensitivities, a calibration or an optimiser the code was never written for.
not a description of what the model is meant to do.
and know where it hurt: the tape, the calibration, the discontinuities, the rewrite.
Change the scalar type, run the model once. The recording is the whole calculation: every operation, comparison and input. How it works →
The recording becomes a kernel: vectorised, multi-threaded, built for the CPU it runs on. The same recording compiles for AVX2, AVX-512, Apple Silicon and ARM; NVIDIA double precision is in development. Benchmarks →
Every sensitivity in one reverse pass, exact, at adjoint factor below one. Calibration inside the model is differentiated through automatically. Automatic IFT, Risk.net 2022 →
AADC_TRACE=1 ties every step to the file and line that produced it and hands the record to the validator: every hard-coded constant with its line, every market-dependent branch with its distance to switching, which inputs a number depends on and which it provably does not. AADC Tracer →
Kernels are binaries. Source stays on-premises; the kernel goes to the cloud, the desk or a live server, and is thrown away when the model changes. Deployment →
Barrier and autocall Greeks are noisy if we bump and biased if we smooth, and the smoothing width is tuned per product.Greeks for autocallables →
The model calibrates on every call, so the adjoint stops at the solver.Automatic IFT →
Risk runs overnight; the desk wants it at eleven; nobody will rewrite the library.ORE live risk →
The tape does not fit in memory on long paths, American Monte Carlo, or a thirty-year book.AAD for American Monte Carlo →
Hand-written adjoints cover part of the solver and break with every model change.How it works →
Validation reconstructs what the code does by hand, and the documentation drifted at the last rebuild.AADC Tracer →
The research is in Python; production is assumed to need C++.Python Accelerator →
The library is tied to a vendor's roadmap, or it is ours and costs a team to maintain.Open-source libraries →
Reinforcement learning took four hours on our dispatch problem and still found a worse schedule.Gas storage dispatch →
Our trajectory optimiser's gradients get slower with every variable we add.Differentiable simulation →
Python, free for non-commercial and academic use. The interpreter and every JIT backend at full speed on AVX2, Apple Silicon and ARM. Python 3.10 to 3.14 on Linux, macOS and Windows.
C++ and Python. The C++ SDK, AVX-512, kernels compiled ahead of time for deployment, production use, the Tracer on your production binary, and the engineers who wrote the compiler, on your code. NVIDIA double precision is in development.