# Pinned on purpose: a benchmark whose dependency set moves under it is not a
# benchmark. These are the exact versions the harness was validated against, and
# they are recorded again inside every results JSON so a reader can tell whether
# two runs are comparable.
#
# manifoldbt itself is NOT pinned here: the workflow installs the version under
# test (`pip install manifoldbt==X`), so the same lock file serves every release.
#
# raptorbt has no dependency of its own, so pinning it moves nothing else in the
# set. It does pin the *interpreter*, though: it is built against pyo3 0.20.3,
# whose maximum supported CPython is 3.12, so there is no cp313 wheel in any
# release up to 0.9.0 and a source build refuses outright ("the configured
# Python interpreter version (3.13) is newer than PyO3's maximum supported
# version (3.12)"). That is why the workflow runs 3.12: comparing engines means
# running them in one environment, and the environment has to be one they all
# support.
vectorbt==0.28.4
# plotly is vectorbt's transitive dependency, and it was the hole in this
# lock: unpinned, pip resolved plotly 7.0.0 the day it landed on PyPI, and
# vectorbt 0.28.4's own template references the mapbox traces that 7.0
# removed -- `import vectorbt` died before a single bar was benchmarked.
# Exactly the failure mode the header above describes. 6.9.0 is the last
# 6.x line and the one this harness is validated against.
plotly==6.9.0
raptorbt==0.9.0
# NautilusTrader: an event-driven engine with a Rust core and a Python API. It
# asks for Python >=3.12,<3.15 and publishes cp312 wheels (checked on Linux,
# manylinux_2_35, and on Windows), so it sits inside the interpreter that raptorbt
# already pins us to. 1.231.0 is the latest stable release; it is pinned in
# requirements-nautilus.txt, see fsspec below for why.
# Its runtime dependencies, pinned for the same reason plotly is above: nothing
# in the set is allowed to move because a transitive dependency shipped a
# release the day before the run. numpy, pandas and psutil are already pinned
# further down; uvloop is what it installs on Linux and macOS only.
msgspec==0.22.0
portion==2.6.3
sortedcontainers==2.4.0
click==8.5.0
# fsspec: NautilusTrader asks for exactly 2026.2.0, which is inside the range of
# GHSA-27vj-qcqg-25rc (fixed in 2026.6.0). It is installed with --no-deps from
# requirements-nautilus.txt, after this file, so the patched pin below is the
# one that lands.
fsspec==2026.9.0
pyarrow==26.0.0
pytz==2026.5
tzdata==2026.5
tqdm==4.70.1
uvloop==0.22.1 ; sys_platform != "win32"
numpy==2.4.3
numba==0.64.0
pandas==2.3.3
psutil==7.2.2
