LEARN/INSTALL

Install

One command, and no dependencies. Prebuilt wheels cover Linux, macOS and Windows on CPython 3.11 and up.

pip install tradefloor

python -c "import tradefloor as tf; \
  print(tf.__version__)"

From PyPI

No dependencies The core package pulls nothing in. Read results into polars, pandas, pyarrow or duckdb if you want them.
CPython 3.11 and up Prebuilt wheels for Linux x86_64 and aarch64, macOS arm64 and x86_64, and Windows x86_64.
Rust core The engine is compiled. Nothing here is a Python loop over ticks.

What a version promises

The API can still move before 1.0. A published result can not. A change to a simulated trajectory arrives as a new preset with a new name. It is never an edit to a preset that ships. A run that you cited last month therefore reproduces this month.

A trajectory change is a breaking change

Whatever its size. A market that runs differently from the same seed invalidates every published result that cited it.

Old presets never move

Every preset from pt-v1 onward stays selectable and reproduces bit for bit, so an old result replays under its own name.

A citation names software, not a run

A RunManifest names the run: package version, preset, seed, universe fingerprint, macro conditions, scenario and strategy.

The determinism check

Every release builds five targets, runs one fixed simulation inside each, and compares the digests. A disagreement stops the release. This is why the crate ships its own exp, log, sin and cos The crate does not call the platform libm, because the platform libm does not agree with itself across operating systems.

linux-x86_64 digests match
linux-aarch64 digests match
macos-arm64 digests match
macos-x86_64 digests match
windows-x86_64 digests match
A person does a check of the WebAssembly build by hand, because it needs a toolchain that CI does not carry. On 2026-08-24 the native and wasm32 builds hashed the same fixed simulation, twelve instruments over five days on pt-v3, to 2b2f3141...

Presets and the era boundary

Fifteen presets ship, pt-v1 through pt-v14. You can select all of them, and all of them reproduce bit for bit.

7/14 pt-v3 0.1.x
13/14 pt-v10 0.2.0
14/14 pt-v12 0.3.0
14/14 pt-v14 0.4.0

Statistics in band over two years, thirty seeds, for whichever preset was the default at that release. Each step between bars is an era boundary.

pt-v14 became the default on 2026-08-28. That date is an era boundary, because every trajectory from the default changed. You can not compare a run from before that date to a run from after it, unless each run names its preset.

What fully specifies a run

Package version, model preset, universe fingerprint, and seed. The preset pins the coefficients. The package version pins the implementation. This is measured, not asserted: pt-v1, pt-v2 and pt-v3 give identical market digests under 0.1.4 and 0.2.0.

All pages