Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Penicillium: a Python implementation of the IndPenSim penicillin fermentation simulator

IndPenSim for Python: validated, pip-installable, fast. Penicillium is a maintained implementation of IndPenSim, the industrial-scale (100 m³) fed-batch penicillin fermentation simulator of Goldrick et al. (2015, 2019), the benchmark process for bioprocess monitoring, soft sensors, fault detection and control.

  • Installs anywhere. Python 3.10 or later; tested on Linux, macOS and Windows with Python 3.10 to 3.14; no compiler, no MATLAB.
  • Follows IndPenSim. Checked line by line against IndPenSim V2.01; 14 of 15 batches of V2.01 (run in GNU Octave) replayed within 0.1 % on yield. Against the published 100-batch data set, no significant difference detected in the yield distributions of recipe-driven, operator-controlled and faulty batches (KS p = 0.31-0.93; the tests have low power) (validation).
  • Fast. 0.6 s per 230 h batch; about 380 batches per minute in parallel on an Intel Core i7-7700HQ (benchmarks).
  • Ready for ML and control. One-call campaigns with labels and batch-wise splits, Gymnasium environments, Minari datasets and a differentiable JAX model.
  • Reproducible. Random inputs bit-identical and trajectories within about 1e-4 on Linux, macOS and Windows.
  • Honest about its limits. Fixed fault windows, true values in the sensor-fault channels and the other known limitations are listed on the first page of the documentation (limitations).
  • Open licence. MIT, with the parts derived from IndPenSim also under IndPenSim's BSD 3-Clause licence; documented provenance (licensing).

Status: alpha (0.1.0a0). The API may still change.

Documentation: https://penicillium.readthedocs.io

Install

pip install "penicillium[fast]"        # with the Numba backend (recommended)

Other extras: gym, minari, jax, dcs, parquet, notebooks, docs, dev (installation).

Example

from penicillium import Simulator

result = Simulator().run(seed=1)  # one 230 h batch, 1150 samples of 12 min
print(result.total_yield)  # harvested penicillin, kg
df = result.to_pandas()  # 55 channels, indexed by time in hours

Learn more

Tutorials Nine notebooks, one per feature: first batch, recipes and control, faults, lab data and Raman, campaigns and fault detection, soft sensors, reinforcement learning, the JAX model, the command line
User guide The process and the model, every option, variables and units, campaigns, the operator console, FAQ
Validation What is checked against IndPenSim and the published data, and the results; differences and quirks
Case studies Replications of Goldrick et al. (2015, 2019), a comparison with the published 100-batch data, a statistical check of the noise model

All of these are on the documentation site, https://penicillium.readthedocs.io.

From a clone of the repository, run the tests: pytest -m "not slow" (seconds) or pytest (adds full batches, ~4 min).

Citation

If you use Penicillium, cite IndPenSim and this package (CITATION.cff; see citing):

  • S. Goldrick, A. Ştefan, D. Lovett, G. Montague, B. Lennox. The development of an industrial-scale fed-batch fermentation simulation. Journal of Biotechnology 193 (2015) 70-82. doi:10.1016/j.jbiotec.2014.10.029
  • S. Goldrick, C. A. Duran-Villalobos, K. Jankauskas, D. Lovett, S. S. Farid, B. Lennox. Modern day monitoring and control challenges outlined on an industrial-scale benchmark fermentation process. Computers and Chemical Engineering 130 (2019) 106471. doi:10.1016/j.compchemeng.2019.05.037

Licence

Penicillium is released under the MIT License. Its process model, controllers, recipes, fault profiles and reference Raman spectrum derive from IndPenSim, Copyright (c) 2016, Stephen Goldrick, distributed under the BSD 3-Clause License; that notice applies to those parts too. It is not endorsed by IndPenSim's authors or by University College London. Full texts are in LICENSE and NOTICE.

Metadata

Release files for penicillium 0.1.0a0

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

Source distribution (sdist)

Source distribution for penicillium 0.1.0a0
File Size Uploaded Provenance Actions
penicillium-0.1.0a0.tar.gz 289.6 kB With provenance Details for penicillium-0.1.0a0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for penicillium 0.1.0a0
File Interpreter ABI Platform Actions
penicillium-0.1.0a0-py3-none-any.whl Python 3 none any Details for penicillium-0.1.0a0-py3-none-any.whl

Total release size: 466.0 kB

Release files / penicillium-0.1.0a0.tar.gz

Download URL penicillium-0.1.0a0.tar.gz
Size 289.6 kB
Tags Source
SHA-256 checksum
How to use checksums
c9b8524f6235068e0601b1a13eb02681efef20f216918eb40ad2fba7e85aa2a1
BLAKE2b-256 checksum
How to use checksums
795986582c3ae51cfdadbd243551d500c61b46c363477ec8e0e4eb515b8590f4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 29, 2026.

Transparency log

Release files / penicillium-0.1.0a0-py3-none-any.whl

Download URL penicillium-0.1.0a0-py3-none-any.whl
Size 176.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f34370d9c2f4a5c80b7768a15907e90626937d3bcd56e460506ecde66d9542fb
BLAKE2b-256 checksum
How to use checksums
cbc323800d2397a24bd44b04f25e17a2267b6367b9f39a11f7598c80ec21f259
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 29, 2026.

Transparency log

Security for penicillium 0.1.0a0

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.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for penicillium-0.1.0a0.tar.gz

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 Oct 29, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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