Skip to main content

StochX

CI Documentation Python License

StochX is a lightweight Python library for turning stochastic-process mathematics into executable, validated, and testable objects.

It is designed around a simple idea: each mathematical object should have a clear Python representation, a predictable API, numerical validation, and runnable examples.

What makes StochX different

StochX is not limited to discrete-time Markov chains. Its public stochastic API is organized around several connected mathematical objects:

Area Main objects
Discrete-time Markov chains MarkovChain
Poisson processes PoissonProcess, NonHomogeneousPoissonProcess
Continuous-time Markov chains ContinuousTimeMarkovChain, CTMCPath
Birth-death processes BirthDeathProcess
Finite probability spaces FiniteProbabilitySpace, RandomVariable, Partition
Conditional expectation FiniteProbabilitySpace, RandomVariable
Filtrations and martingales Filtration, Martingale, StoppingTime, StoppedProcess

Two features are particularly central to the library:

  • CTMC numerical flexibility: transition probabilities can be evaluated using the matrix-exponential route or a uniformization implementation.
  • Mathematical continuity: finite conditional expectation, filtrations, martingales, and stopping times are first-class public objects rather than separate utilities.

Installation

python -m pip install stochx

For development:

python -m pip install -e ".[dev]"

For documentation development:

python -m pip install -e ".[docs]"
mkdocs serve

Quick start

Discrete-time Markov chain

import numpy as np
from stochx.stochastic import MarkovChain, empirical_state_frequencies

P = [
    [0.7, 0.3],
    [0.4, 0.6],
]

chain = MarkovChain(P, states=["A", "B"])

print(chain.n_step_transition(5))
print(chain.stationary_distribution())

path = chain.simulate(
    10_000,
    initial_state="A",
    rng=np.random.default_rng(0),
)
print(empirical_state_frequencies(path, chain.states))

Continuous-time Markov chain

from stochx.stochastic import ContinuousTimeMarkovChain

Q = [
    [-2.0, 2.0],
    [1.0, -1.0],
]

chain = ContinuousTimeMarkovChain(Q, states=["A", "B"])

print(chain.transition_matrix(2.0))
print(chain.transition_matrix_at(2.0, method="uniformization"))

Public API

The public stochastic namespace is available from stochx.stochastic:

from stochx.stochastic import (
    BirthDeathProcess,
    CTMCPath,
    ContinuousTimeMarkovChain,
    FiniteProbabilitySpace,
    Filtration,
    MarkovChain,
    Martingale,
    NonHomogeneousPoissonProcess,
    Partition,
    PoissonProcess,
    RandomVariable,
    StoppedProcess,
    StoppingTime,
    empirical_state_frequencies,
)

The complete reference is maintained in the API documentation.

Examples

Every major mathematical area has a runnable example, and examples/07_api_operations.py provides a broader public-API gallery.

examples/
├── 01_discrete_markov_chain.py
├── 02_poisson_process.py
├── 03_continuous_markov_chain.py
├── 04_birth_death_process.py
├── 05_conditional_expectation.py
├── 06_martingale.py
└── 07_api_operations.py

The CI suite executes every examples/*.py file.

Documentation

The documentation site separates three concerns:

  • Course material for the mathematical development.
  • API Reference for Python classes, properties, methods, validation rules, and examples.
  • Worked Examples for end-to-end executable usage.

Start at the documentation site.

Development and quality gates

The repository uses GitHub Actions to run the stochastic test suite on Python 3.10, 3.11, and 3.12. The CI pipeline also checks:

  • public API docstring coverage;
  • API-reference page coverage;
  • documentation structure;
  • runnable example coverage;
  • strict MkDocs builds.

Run the main stochastic suite locally with:

pytest -q tests/test_stochastic_*.py --disable-warnings

Run the release-surface checks with:

pytest -q \
  tests/test_docstring_coverage.py \
  tests/test_stochastic_example_coverage.py \
  tests/test_api_documentation_coverage.py \
  tests/test_documentation_coverage.py

Build the package locally before a release:

python -m build
python -m twine check dist/*

Versioning

StochX follows semantic versioning for public API changes:

  • MAJOR for incompatible public API changes;
  • MINOR for backwards-compatible features;
  • PATCH for backwards-compatible fixes.

The package version is defined once in stochx/__init__.py and is used by the build configuration, avoiding separate version values that can drift.

Release status

StochX is currently in the early development stage. PyPI publishing is prepared through a tag-based release workflow, but releases are not automatically published until the repository's PyPI trusted publisher is configured.

License

MIT

Metadata

Release files for stochx 0.2.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 stochx 0.2.0
File Size Uploaded
stochx-0.2.0.tar.gz 72.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for stochx 0.2.0
File Interpreter ABI Platform
stochx-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 110.0 kB

Release files / stochx-0.2.0.tar.gz

Download URL stochx-0.2.0.tar.gz
Size 72.2 kB
Tags Source
SHA-256 checksum
How to use checksums
605dc64214d80f05d45eb0351a18a271c2fad51ca6d820306640498b66a822c8
BLAKE2b-256 checksum
How to use checksums
fd0a369f902758b03703c6d619dbd65df71e0f0e2ead2bba9fe745a75941c57b
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 Aug 16, 2026.

Transparency log

Release files / stochx-0.2.0-py3-none-any.whl

Download URL stochx-0.2.0-py3-none-any.whl
Size 37.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6fc204c584c918bb7c840dcbfc57f2e548baea4f51214ddc7de49aa5431cd1af
BLAKE2b-256 checksum
How to use checksums
14acf3ee36fd33bc4a1698f365b3d47c1c80141bf63417bbc5fd253a991198bd
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 Aug 16, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 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