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.0a1). 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.0a1

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.0a1
File Size Uploaded Provenance Actions
penicillium-0.1.0a1.tar.gz 289.7 kB With provenance Details for penicillium-0.1.0a1.tar.gz

Built distribution (wheel)

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

Total release size: 466.1 kB

Release files / penicillium-0.1.0a1.tar.gz

Download URL penicillium-0.1.0a1.tar.gz
Size 289.7 kB
Tags Source
SHA-256 checksum
How to use checksums
1a1756f951db70d4d9725eff38cdb5e0cfdd2a391f21dce6196392cff1187033
BLAKE2b-256 checksum
How to use checksums
b5e7ed2c6c5763d16dec095927d7775e85d97a36798332eb69ff42cbcf6f8776
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.0a1-py3-none-any.whl

Download URL penicillium-0.1.0a1-py3-none-any.whl
Size 176.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3bd51ea6f3d715ca53afc8b232bb4f12d0fc4e620b6e2fc06c6dd303394e3b55
BLAKE2b-256 checksum
How to use checksums
d96e435e1473c1ba970e30c70a8e6dbba0e502c04c262312576f2b32f48014ff
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.0a1

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.0a1.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