OpenInjectability
OpenInjectability is a transparent Python toolkit for estimating the pressure drop and predicted fluid-resistance force for a declared Newtonian liquid flowing through a specified needle.
Scientific boundary
The model is intentionally narrow:
- In scope: idealized Hagen–Poiseuille needle-fluid resistance for Newtonian liquids with traceable viscosity, needle ID/length, barrel ID, volume, and rate.
- Out of scope: syringe friction, break-loose force, device drivetrain losses, tissue backpressure, human factors, and non-Newtonian rheology.
- A needle gauge label is metadata only; a traceable needle inner diameter is required.
- The result is always named predicted fluid-resistance force, never total device force, “safe,” or “compliant.”
Non-Newtonian or otherwise unsupported inputs fail closed (typed rejection; no fallback rheology model).
Quick start
python -m pip install -e ".[dev,reports]"
openinjectability assess examples/formulation.csv `
--config examples/assessment.json `
--results assessment.json `
--report assessment.md `
--plot force-vs-needle.png `
--audit-bundle audit.zip
PDF and plot output require the reports extra. Markdown and HTML reports require no
optional dependency beyond the core install.
openinjectability version
openinjectability schema --format json
openinjectability validate-input examples/formulation.csv
openinjectability validation-status --json
openinjectability assess-one --viscosity-value 35 --viscosity-temperature 25 `
--use-temperature 25 --rheology-evidence RHEO-1 --needle-id 0.21 `
--needle-length 12.7 --needle-source drawing --barrel-id 6.35 `
--barrel-source syringe --volume 2 --injection-time 15
Literature / experimental panel comparison
Compare a panel JSON of measured fluid-side force (or pressure × barrel area) to the
model. Report status is only experimental_comparison or insufficient_data — this
command never claims independently_validated and does not advance package
validation_status.
openinjectability validate-experimental `
validation/experimental/panel_allmendinger2014_glycerol_digitized.json `
--out validation/experimental/reports/allmendinger2014_digitized
Panel schema and rules: validation/experimental/README.md.
Documentation: docs/scientific-basis.md, docs/input-schema.md, docs/interpretation.md, docs/roadmap.md, docs/phase-status.md, VALIDATION.md, PROJECT_SPECIFICATION.md, project.md.
Backend engine API
For services, notebooks, or another application backend, use the in-memory engine. It does not read files, produce plots or reports, or invoke the CLI. It preserves the same Newtonian-only scientific boundary as the command line.
from openinjectability import AssessmentInput, OpenInjectabilityEngine
engine = OpenInjectabilityEngine()
result = engine.assess(case) # `case` is a validated AssessmentInput
batch = engine.assess_batch([case_a, case_b])
metadata = engine.metadata.to_dict()
assess_batch preserves accepted input order and records each invalid or unsupported
case as a typed RejectedAssessment; it never applies a fallback rheology model. The
returned value remains the predicted fluid-resistance force, not total device force.
Status
Version 0.1.0 is alpha. Development status on PyPI classifiers is 3 - Alpha.
| Area | State |
|---|---|
| Phases A–C (hardening, spec completion, release gates) | Complete |
| Equations / internal reference cases | internal_validation (unit-tested) |
| Independent experimental validation | Pending — package experimental_validation_pending |
| Literature comparison (Allmendinger 2014 digitized panel) | Report status experimental_comparison only; not independently_validated |
| Public PyPI release (Phase E) | Blocked on independent D + credentials |
- Do not describe this release as experimentally validated.
- Digitized figures, geometry setups from papers, or exploratory literature comparisons
under
validation/experimental/are not accepted independent experimental validation evidence. - See VALIDATION.md for the claims-to-evidence map and status vocabulary, and docs/phase-status.md for phase tracking.
Metadata
Release files for openinjectability 0.1.0
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 |
|---|---|---|---|---|
| openinjectability-0.1.0.tar.gz | 33.0 kB | Without provenance | Details for openinjectability-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| openinjectability-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for openinjectability-0.1.0-py3-none-any.whl |
Total release size: 61.5 kB
Release files / openinjectability-0.1.0.tar.gz
| Download URL | openinjectability-0.1.0.tar.gz |
|---|---|
| Size | 33.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
95007f68b1fb4027c91aee09c1ebe13f79bc720506ba19c93c04981adc23f64f
|
|
BLAKE2b-256 checksum How to use checksums |
282d1888e3914aa8e31f7545ed89ebc6ebd76bafb9cb0a471d41ca42e7cf5e22
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.10
|
Release files / openinjectability-0.1.0-py3-none-any.whl
| Download URL | openinjectability-0.1.0-py3-none-any.whl |
|---|---|
| Size | 28.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
410eb83dd464e70a30c3aa3f3942b5cb93bec5747b43cdc193e73c9c86468e81
|
|
BLAKE2b-256 checksum How to use checksums |
67170ae99df86cedaca415c92b5d6ac93bf4db4f0a2b4555fcc8bc92ec2c54b2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.10
|
Security for openinjectability 0.1.0
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
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.