Skip to main content

SharpeArena for Python

The Python distribution combines SharpeArena's deterministic point-in-time evaluation sandbox with a Gymnasium-compatible environment and optional adapters for multi-agent, RLVR, offline-RL, MCP, and local-model workflows.

Point-in-time observations prevent future-bar access through the environment API. They do not isolate Python code from the host. Run trusted local code here, or use SharpeBench's digest-pinned container path for an untrusted entrant.

Install

pip install sharpearena

The base install includes NumPy, Gymnasium, the Python package, and the compiled pyo3 extension. Optional integrations are explicit:

pip install "sharpearena[pettingzoo]"
pip install "sharpearena[verifiers]"
pip install "sharpearena[minari]"
pip install "sharpearena[mcp]"

Step a Gymnasium environment

from sharpearena import SharpeArenaEnv

env = SharpeArenaEnv(n_symbols=4, n_days=120, seed=7)
observation, info = env.reset(seed=7)

terminated = truncated = False
while not (terminated or truncated):
    action = env.action_space.sample()
    observation, reward, terminated, truncated, info = env.step(action)

Actions are signed target-weight vectors in the environment's symbol order. The default range is [-1, 1]; pass allow_short=False to make it [0, 1], or set max_weight to change the per-symbol bound.

Importing sharpearena registers the following Gymnasium IDs:

SharpeArena/Calm-v1          SharpeArena/Calm-Eval-v1
SharpeArena/Hard-v1          SharpeArena/Hard-Eval-v1
SharpeArena/Extreme-v1       SharpeArena/Extreme-Eval-v1

The -Eval-v1 environments draw from the disjoint evaluation seed band. The -v1 suffix freezes the environment semantics; a rule change requires a new versioned ID.

Native boundary

sharpearena.sharpearena_py.TradingEnv is the low-level binding. Its boundary is JSON: reset() returns an observation string, and step(decision_json) returns (observation_json, reward, done, info_json). The Python Gymnasium wrapper converts between that wire format and NumPy spaces.

The wheel ships py.typed and a stub for the compiled extension. Typed boundary exceptions distinguish invalid input, invalid JSON, invalid salt, unavailable data, and engine failures.

Scoring and typed unavailability

score_run(returns, n_trials, periods_per_year) returns the pinned SharpeBench CompositeScore as JSON. When the kernel cannot score a series (a non-finite observation, fewer than two observations) the composite carries a typed error beside a no-skill floor rather than an estimate: deflation_error (the deflated Sharpe, its bar and its interval are the floor), bootstrap_error (the bootstrap p-value is the conservative 1.0 sentinel) and selection_error (the selection diagnostic is absent). Reading deflated_sharpe past such a key publishes the floor as a score.

A constant track (every return equal, such as the flat baseline's all-zero series) has a sample variance of zero and so no Sharpe ratio. The pinned kernel would still score it, so score_run withholds it: deflation_error reads returns must not be constant: a constant series has no Sharpe ratio (or Sharpe ratio is not finite for a track whose computed standard deviation underflows to zero), deflated_sharpe and psr read the 0.0 floor, the interval and rolling Sharpe fields are absent or null, and passed_k and rank_eligible are false. The seed bootstrap (deflated_sharpe_ci, paired_dsr_diff) raises ValueError with the same reason. The predicate is value equality, not a volatility tolerance, so a dispersed track keeps its score.

sharpearena.kernel_score is the one place a consumer reads the ranked numbers:

  • kernel_deflated_sharpe(composite) and kernel_psr(composite) return the finite value or raise KernelScoreUnavailable(reason, errors) naming every typed error key present. Selection, ranking inputs and the paper producers use these and stop.
  • kernel_score_or_unavailable(composite, key="deflated_sharpe") returns the float or the reason string unavailable_scoring_kernel_error: <key>: <message> for rows that must be recorded (eval-seed snapshots, generalization and regime rows, the PettingZoo leaderboard, trace meta, the local-field journal). kernel_score_difference makes a gap unavailable when either side is; is_kernel_score_unavailable tests a recorded cell.

Every score_run consumer in this package goes through these helpers; none substitutes a default. The multi-agent ranking places an unscorable agent after every scored one with the reason in its cell.

Other surfaces

Task Surface
Batched Gymnasium rollout SharpeArenaVectorEnv or gymnasium.make_vec(...)
Multi-agent environment MultiAgentSharpeArenaEnv with the pettingzoo extra
RLVR / Prime RL load_environment() with the verifiers extra
Offline RL export to_minari, to_minari_train_test with the minari extra
External tool server MCP server with the mcp extra
Evidence field sharpearena-local-field and the model transport shims; raw schema 2 records source-labelled per-request duration and token/retry accounting
Benchmark compilation sharpearena-compile-bench; bridge schema 2 adds a validated, rank-neutral p50/p95 operational profile beside score submissions
Strategy search sharpearena-strategy-search

See the repository's Gymnasium guide, training guide, and agent contract for the full workflows.

Build from source

python -m maturin develop --manifest-path crates/sharpearena-py/Cargo.toml

License

MIT OR Apache-2.0

Metadata

Release files for sharpearena 0.30.0

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

Source distribution (sdist)

Source distribution for sharpearena 0.30.0
File Size Uploaded
sharpearena-0.30.0.tar.gz 776.6 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for sharpearena 0.30.0
File
sharpearena-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64 Details
sharpearena-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details
sharpearena-0.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64 Details
sharpearena-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64 Details

Total release size: 5.6 MB

Release files / sharpearena-0.30.0.tar.gz

Download URL sharpearena-0.30.0.tar.gz
Size 776.6 kB
Tags Source
SHA-256 checksum
How to use checksums
a774460be52b6e1128133ba4f8e0e6cb67d23f557df81261255225be4b66d8a8
BLAKE2b-256 checksum
How to use checksums
508c9dcb7107f04bfffb6403427008b1c9aa1e4d096dd293dfbbc950ca31f5f2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.

Transparency log

Release files / sharpearena-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL sharpearena-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.2 MB
Tags CPython 3.13 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
d65375fde89df272218c36d37c6b7fa7e9a470aa3e9a5044b403d9ac204ed9a5
BLAKE2b-256 checksum
How to use checksums
58f99c5b8339ac87b4c80b2317f7687805ac3b640a8852a5e32d8dd88e271429
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.

Transparency log

Release files / sharpearena-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL sharpearena-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.2 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
ef70024b4d217777d7d25d81da8a5b411048b72316f895363f336a1607111426
BLAKE2b-256 checksum
How to use checksums
8e6777c492c56cff6e7e98162b75828004b5524972205e0b9946cd5315495a8a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.

Transparency log

Release files / sharpearena-0.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL sharpearena-0.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.2 MB
Tags CPython 3.11 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
9541bbc988d49826642ddb03f5b56ac3ed81b7d73f14208a7160f906bacf0aac
BLAKE2b-256 checksum
How to use checksums
50e5962fd0434eee24bb8b9d59f65fe5df102fa19bd9a14210178af4fcf901dd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.

Transparency log

Release files / sharpearena-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL sharpearena-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.2 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
7a1662e0d1392eed7632993f059e586205de4bb5735dbeceb20eee3d95cbb952
BLAKE2b-256 checksum
How to use checksums
5933a8a8054024fd9254ef7a0a5a91b6f5d5baabba6552cbb7176fa2997487cd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.

Transparency log

Release history Release notifications | RSS feed

0.31.0

5 release files

This release

0.30.0 This release

5 release files

0.29.0

5 release files

0.28.0

5 release files

0.27.0

5 release files

0.26.0

5 release files

0.25.0

5 release files

0.21.0

5 release files

0.20.0

5 release files

0.19.0

5 release files

0.18.0

5 release files

0.17.0

5 release files

0.16.0

5 release files

0.15.0

5 release files

0.14.0

5 release files

0.13.0

5 release files

0.12.0

5 release files

0.11.1

5 release files

0.10.0

5 release files

0.9.0

5 release files

0.8.0

5 release files

0.7.0

5 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