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)
| 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)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| 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 logRelease 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 logSecurity 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.
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 logA 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.