Skip to main content

A high-performance compartment modelling library in Rust and Python.

Project description

Commol

A high-performance compartment modelling library for mathematical modeling using difference equations. Commol provides a clean Python API backed by a fast Rust engine for numerical computations.

⚠️ Alpha Stage Warning: Commol is currently in alpha development. The API is not yet stable and may change between versions without backward compatibility guarantees. Use in production at your own risk.

Features

  • Intuitive Model Building: Fluent API for constructing compartment models
  • Mathematical Expressions: Support for complex mathematical formulas in transition rates (sin, cos, exp, log, etc.)
  • Unit Checking: Automatic dimensional analysis to catch unit errors before simulation
  • High Performance: Rust-powered simulation engine for fast computations
  • Flexible Architecture: Support for stratified populations and conditional transitions
  • Type Safety: Comprehensive validation using Pydantic models
  • Multiple Output Formats: Get results as dictionaries or lists for easy analysis

Installation

# Install from PyPI (once published)
pip install commol

# Or install from source
git clone https://github.com/MUNQU/commol.git
cd commol/py-commol
pip install maturin

# If using a virtual environment, activate it first
# source venv/bin/activate  # On Linux/macOS
# venv\Scripts\activate     # On Windows

maturin develop --release

⚠️ Important: The project directory path must not contain tildes (~) or spaces. Maturin may fail with paths like ~/projects/commol or /home/my projects/commol. Use full paths like /home/username/projects/commol instead.

Quick Start

from commol import ModelBuilder, Simulation

# Build a simple SIR model
model = (
    ModelBuilder(name="Basic SIR", version="1.0")
    .add_bin(id="S", name="Susceptible")
    .add_bin(id="I", name="Infected")
    .add_bin(id="R", name="Recovered")
    .add_parameter(id="beta", value=0.3)
    .add_parameter(id="gamma", value=0.1)
    .add_transition(
        id="infection",
        source=["S"],
        target=["I"],
        rate="beta * S * I / N"
    )
    .add_transition(
        id="recovery",
        source=["I"],
        target=["R"],
        rate="gamma"
    )
    .set_initial_conditions(
        population_size=1000,
        bin_fractions=[
            {"bin": "S", "fraction": 0.99},
            {"bin": "I", "fraction": 0.01},
            {"bin": "R", "fraction": 0.0}
        ]
    )
    .build(typology="DifferenceEquations")
)

# Run simulation
simulation = Simulation(model)
results = simulation.run(num_steps=100)

# Display results
print(f"Final infected: {results['I'][-1]:.0f}")

# Visualize results
from commol import SimulationPlotter

plotter = SimulationPlotter(simulation, results)
plotter.plot_series(output_file="sir_model.png")

Using $compartment Placeholder for Multiple Transitions

When you need to apply the same transition to multiple compartments (like death rates), use the $compartment placeholder instead of writing repetitive code:

model = (
    ModelBuilder(name="SLIR with Deaths", version="1.0")
    .add_bin(id="S", name="Susceptible")
    .add_bin(id="L", name="Latent")
    .add_bin(id="I", name="Infected")
    .add_bin(id="R", name="Recovered")
    .add_parameter(id="beta", value=0.3, unit="1/day")
    .add_parameter(id="gamma", value=0.2, unit="1/day")
    .add_parameter(id="delta", value=0.1, unit="1/day")
    .add_parameter(id="d", value=0.01, unit="1/day")  # Death rate
    .add_transition(
        id="infection",
        source=["S"],
        target=["L"],
        rate="beta * S * I / N"
    )
    .add_transition(
        id="progression",
        source=["L"],
        target=["I"],
        rate="gamma * L"
    )
    .add_transition(
        id="recovery",
        source=["I"],
        target=["R"],
        rate="delta * I"
    )
    # Single transition automatically expands to 4 separate death transitions
    .add_transition(
        id="death",
        source=["S", "L", "I", "R"],
        target=[],
        rate="d * $compartment"  # Expands to: d*S, d*L, d*I, d*R
    )
    .set_initial_conditions(
        population_size=1000,
        bin_fractions=[
            {"bin": "S", "fraction": 0.99},
            {"bin": "L", "fraction": 0.005},
            {"bin": "I", "fraction": 0.005},
            {"bin": "R", "fraction": 0.0}
        ]
    )
    .build(typology="DifferenceEquations")
)

The $compartment placeholder:

  • Automatically expands to multiple transitions (one per source compartment)
  • Replaces $compartment with the actual compartment name in the rate formula
  • Works with stratified rates for age-structured or location-based models
  • Reduces code duplication and improves maintainability

Example with stratified rates:

.add_transition(
    id="death",
    source=["S", "I", "R"],
    target=[],
    rate="d_base * $compartment",  # Fallback rate
    stratified_rates=[
        {
            "conditions": [{"stratification": "age", "category": "young"}],
            "rate": "d_young * $compartment"  # Lower death rate for young
        },
        {
            "conditions": [{"stratification": "age", "category": "old"}],
            "rate": "d_old * $compartment"  # Higher death rate for old
        }
    ]
)

With Unit Checking

Add units to parameters and bins for automatic dimensional validation and annotated equation display:

model = (
    ModelBuilder(name="SIR with Units", version="1.0", bin_unit="person")
    .add_bin(id="S", name="Susceptible")
    .add_bin(id="I", name="Infected")
    .add_bin(id="R", name="Recovered")
    .add_parameter(id="beta", value=0.5, unit="1/day")  # Rate with units
    .add_parameter(id="gamma", value=0.1, unit="1/day")
    .add_transition(
        id="infection",
        source=["S"],
        target=["I"],
        rate="beta * S * I / N"
    )
    .add_transition(
        id="recovery",
        source=["I"],
        target=["R"],
        rate="gamma * I"
    )
    .set_initial_conditions(
        population_size=1000,
        bin_fractions=[
            {"bin": "S", "fraction": 0.99},
            {"bin": "I", "fraction": 0.01},
            {"bin": "R", "fraction": 0.0}
        ]
    )
    .build(typology="DifferenceEquations")
)

# Validate dimensional consistency
model.check_unit_consistency()  # Ensures all equations have correct units

# Print equations with unit annotations
model.print_equations()
# Output shows:
#   S -> I: beta(1/day) * S(person) * I(person) / N(person) [person/day]
#   I -> R: gamma(1/day) * I(person) [person/day]

# Export equations in LaTeX format for publications
model.print_equations(format="latex")
# Output: \[\frac{dS}{dt} = - (\beta \cdot S \cdot I / N)\]

Note: Units must be defined for ALL parameters and bins, or for NONE. Partial unit definitions will raise a ValueError to prevent inconsistent models.

Model Calibration

Fit model parameters to observed data using optimization algorithms. Parameters to be calibrated should be set to None:

from commol import (
    ModelBuilder,
    Simulation,
    Calibrator,
    CalibrationProblem,
    CalibrationParameter,
    ObservedDataPoint,
    ParticleSwarmConfig,
)

# Build model with unknown parameters
model = (
    ModelBuilder(name="SIR Model", version="1.0")
    .add_bin(id="S", name="Susceptible")
    .add_bin(id="I", name="Infected")
    .add_bin(id="R", name="Recovered")
    .add_parameter(id="beta", value=None)   # To be calibrated
    .add_parameter(id="gamma", value=None)  # To be calibrated
    .add_transition(
        id="infection",
        source=["S"],
        target=["I"],
        rate="beta * S * I / N"
    )
    .add_transition(
        id="recovery",
        source=["I"],
        target=["R"],
        rate="gamma * I"
    )
    .set_initial_conditions(
        population_size=1000,
        bin_fractions=[
            {"bin": "S", "fraction": 0.99},
            {"bin": "I", "fraction": 0.01},
            {"bin": "R", "fraction": 0.0}
        ]
    )
    .build(typology="DifferenceEquations")
)

# Define observed data from real outbreak
observed_data = [
    ObservedDataPoint(step=10, compartment="I", value=45.2),
    ObservedDataPoint(step=20, compartment="I", value=78.5),
    ObservedDataPoint(step=30, compartment="I", value=62.3),
]

# Simulation can be created with None values for calibration
simulation = Simulation(model)

# Specify parameters to calibrate with bounds and initial guesses
parameters = [
    CalibrationParameter(
        id="beta",
        parameter_type="parameter",
        min_bound=0.0,
        max_bound=1.0,
        initial_guess=0.3  # Starting point
    ),
    CalibrationParameter(
        id="gamma",
        parameter_type="parameter",
        min_bound=0.0,
        max_bound=1.0,
    ),
]

# Configure optimization algorithm (config type determines the algorithm)
pso_config = ParticleSwarmConfig(
    num_particles=40,
    max_iterations=300,
    verbose=True
)

# Configure calibration problem
problem = CalibrationProblem(
    observed_data=observed_data,
    parameters=parameters,
    loss_function="sse",
    optimization_config=pso_config,  # ParticleSwarmConfig or NelderMeadConfig
)

# Run calibration
calibrator = Calibrator(simulation, problem)
result = calibrator.run()

print(f"Calibrated beta: {result.best_parameters['beta']:.4f}")
print(f"Calibrated gamma: {result.best_parameters['gamma']:.4f}")

# Update model with calibrated parameters
model.update_parameters(result.best_parameters)

# Create new simulation with calibrated model
calibrated_simulation = Simulation(model)
calibrated_results = calibrated_simulation.run(num_steps=100)

Calibrating with Scale Parameters:

When observed data is underreported, use scale parameters to estimate the reporting rate:

# Reported cases (potentially underreported)
reported_cases = [10, 15, 25, 40, 60, 75, 85, 70, 50, 30]

# Link observed data to scale parameter
observed_data = [
    ObservedDataPoint(
        step=idx,
        compartment="I",
        value=cases,
        scale_id="reporting_rate"  # Links to scale parameter
    )
    for idx, cases in enumerate(reported_cases)
]

parameters = [
    CalibrationParameter(
        id="beta",
        parameter_type="parameter",
        min_bound=0.1,
        max_bound=1.0
    ),
    CalibrationParameter(
        id="gamma",
        parameter_type="parameter",
        min_bound=0.05,
        max_bound=0.5
    ),
    CalibrationParameter(
        id="reporting_rate",
        parameter_type="scale",
        min_bound=0.01,
        max_bound=1.0
    ),
]

# Run calibration
result = calibrator.run()

# Separate parameters by type
scale_values = {
    param.id: result.best_parameters[param.id]
    for param in problem.parameters
    if param.parameter_type == "scale"
}

print(f"Calibrated reporting rate: {scale_values['reporting_rate']:.2%}")

# Visualize with scale_values for correct display
plotter.plot_series(observed_data=observed_data, scale_values=scale_values)

Constraining Parameters:

Apply constraints to enforce biological knowledge during calibration.

from commol import CalibrationConstraint

# Add constraint: beta/gamma <= 5 (written as 5 - beta/gamma >= 0)
constraints = [
    CalibrationConstraint(
        id="r0_bound",
        expression="5.0 - beta/gamma",
        description="R0 <= 5",
    )
]

problem = CalibrationProblem(
    observed_data=observed_data,
    parameters=parameters,
    constraints=constraints,  # Include constraints
    loss_function="sse",
    optimization_config=pso_config,
)

result = calibrator.run()

Probabilistic Calibration:

For uncertainty quantification, use probabilistic calibration to get an ensemble of parameter sets:

from commol import ProbabilisticCalibrationConfig

# Configure probabilistic calibration
prob_config = ProbabilisticCalibrationConfig(
    n_runs=20,  # Number of calibration runs
    confidence_level=0.95
)

problem = CalibrationProblem(
    observed_data=observed_data,
    parameters=parameters,
    loss_function="sse",
    optimization_config=pso_config,
    probabilistic_config=prob_config,  # Enable probabilistic mode
)

# Run probabilistic calibration
calibrator = Calibrator(simulation, problem)
prob_result = calibrator.run_probabilistic()

Documentation

Full Documentation

Development

For contributors and developers:

Local Development

# Clone repository
git clone https://github.com/MUNQU/commol.git
cd commol

# Create and activate virtual environment
python -m venv venv

source venv/bin/activate  # On Linux/macOS
venv\Scripts\activate   # On Windows

# Install Python dependencies
cd py-commol
pip install -e ".[dev,docs]"

# Build Rust workspace
cd ..
cargo build --workspace

# Build Python extension (with virtual environment activated)
cd py-commol
maturin develop --release

# Run tests
pytest
cd ..
cargo test --workspace

# Build documentation locally
cd py-commol
mkdocs serve

⚠️ Path Requirements: Ensure the project path contains no tildes (~) or spaces. Maturin may fail otherwise.

💡 Tip: Make sure your virtual environment is activated before running maturin develop.

License

Commol is licensed under the MIT License. See LICENSE for details.

Authors

Citation

If you use Commol in your research, please cite:

@software{commol2025,
  title = {Commol: A High-Performance Compartment Modelling Library},
  author = {
    Villanueva Micó, Rafael J.
    and Andreu Vilarroig, Carlos
    and Martínez Rodríguez, David
  },
  year = {2025},
  url = {https://github.com/MUNQU/commol}
}

Support

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

commol-0.1.0b3.tar.gz (371.2 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

commol-0.1.0b3-cp314-cp314-win_amd64.whl (2.3 MB view details)

Uploaded CPython 3.14Windows x86-64

commol-0.1.0b3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

commol-0.1.0b3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.3 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

commol-0.1.0b3-cp314-cp314-macosx_11_0_arm64.whl (2.1 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

commol-0.1.0b3-cp314-cp314-macosx_10_12_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

commol-0.1.0b3-cp313-cp313-win_amd64.whl (2.3 MB view details)

Uploaded CPython 3.13Windows x86-64

commol-0.1.0b3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

commol-0.1.0b3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.3 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

commol-0.1.0b3-cp313-cp313-macosx_11_0_arm64.whl (2.1 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

commol-0.1.0b3-cp313-cp313-macosx_10_12_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

commol-0.1.0b3-cp312-cp312-win_amd64.whl (2.3 MB view details)

Uploaded CPython 3.12Windows x86-64

commol-0.1.0b3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

commol-0.1.0b3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

commol-0.1.0b3-cp312-cp312-macosx_11_0_arm64.whl (2.1 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

commol-0.1.0b3-cp312-cp312-macosx_10_12_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

File details

Details for the file commol-0.1.0b3.tar.gz.

File metadata

  • Download URL: commol-0.1.0b3.tar.gz
  • Upload date:
  • Size: 371.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for commol-0.1.0b3.tar.gz
Algorithm Hash digest
SHA256 672eefc5d96f003fa11064758399f9cafdd6c3f646ffe31b8613943169ab3433
MD5 e85e3acc0cee77b9cf048edf5e84236a
BLAKE2b-256 13e0757b76199d2c9521782dea85e02abbf1bd6484884e69462c0055acb4ff8f

See more details on using hashes here.

Provenance

The following attestation bundles were made for commol-0.1.0b3.tar.gz:

Publisher: release.yaml on MUNQU/commol

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file commol-0.1.0b3-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: commol-0.1.0b3-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 2.3 MB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for commol-0.1.0b3-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 7ee225680d33e80236fad5b76440d8295caebcb0e8f46c2260287e7497120ebe
MD5 f551b06fbc5daa44c657d57ecd0a7d52
BLAKE2b-256 e1cb8564626ec7ae693437002f31ed5830101554af45a92c0464f4d64530ce7e

See more details on using hashes here.

Provenance

The following attestation bundles were made for commol-0.1.0b3-cp314-cp314-win_amd64.whl:

Publisher: release.yaml on MUNQU/commol

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file commol-0.1.0b3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for commol-0.1.0b3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c8b17700530e8be284f612a0e16af6b1bbc4cc80c6d1f9fa0cdebede07b12cc9
MD5 dce04958af09b87ab8ad64319d13ffc1
BLAKE2b-256 7eb5bab28e135532dae8386ed86fd3fcd61d623d341f4c93f6ddaab2538e991d

See more details on using hashes here.

Provenance

The following attestation bundles were made for commol-0.1.0b3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yaml on MUNQU/commol

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file commol-0.1.0b3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for commol-0.1.0b3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e308ec39cd1a72782ed5b05574dbe679602b7501bfaa188146fca3bbae3c86e2
MD5 a60c62d05c8f7fe9c783b681421cca9e
BLAKE2b-256 2df4451970acbdddf10c5410f5d2b0a5e394140b6ab3bd7e98c25a504384968e

See more details on using hashes here.

Provenance

The following attestation bundles were made for commol-0.1.0b3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yaml on MUNQU/commol

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file commol-0.1.0b3-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for commol-0.1.0b3-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b8beff328830ed4c9153888e7776ceebb41deddba06139796f5c3c651b029c3b
MD5 0f577853d91a4f2a68e376993bdc7032
BLAKE2b-256 257b719e896fc8a36d57ad03ab8f4e35a8b03ad04cd93a940196d1baf349cae3

See more details on using hashes here.

Provenance

The following attestation bundles were made for commol-0.1.0b3-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: release.yaml on MUNQU/commol

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file commol-0.1.0b3-cp314-cp314-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for commol-0.1.0b3-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 8da3e9b7e7da9c11abb74433b9aa1a57425e743e511a3bfe807eb28d93f230a4
MD5 54fb21f9151f645bb8a33f65f1903762
BLAKE2b-256 a0370bd9a8a53be8e8de93b36fb67403a524609581b7ce2ba16eca05450b3deb

See more details on using hashes here.

Provenance

The following attestation bundles were made for commol-0.1.0b3-cp314-cp314-macosx_10_12_x86_64.whl:

Publisher: release.yaml on MUNQU/commol

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file commol-0.1.0b3-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: commol-0.1.0b3-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 2.3 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for commol-0.1.0b3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 6ed4f2a01483027dd6d58d9343a27069823907aac46baffdd9ed8cecb94f9c43
MD5 5e353f06600167b69a269bcb0dba21e5
BLAKE2b-256 4abaf2bcdcb760359f6ba397bc4d77cf93ee50f473d8f13c22b8d604f8abe3f5

See more details on using hashes here.

Provenance

The following attestation bundles were made for commol-0.1.0b3-cp313-cp313-win_amd64.whl:

Publisher: release.yaml on MUNQU/commol

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file commol-0.1.0b3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for commol-0.1.0b3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 448328398178c8b95f3d24ba4ffd1b561cb20128185f9bd8aedcd08b0d8ccf9f
MD5 f52510017759b53c8fbaf85cf09bd621
BLAKE2b-256 2771fffe4fd0af1cbc4df42bf1b26a69aeae0eb3d60b753eff933a0c1b60063d

See more details on using hashes here.

Provenance

The following attestation bundles were made for commol-0.1.0b3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yaml on MUNQU/commol

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file commol-0.1.0b3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for commol-0.1.0b3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 401c03b5df3719026749a4a7838935bdf6dd8df1f0646fa24210c6787aaeca38
MD5 b5be34b91ad787cf19604548b444331d
BLAKE2b-256 07178c00ae6151937c1df72920982a59dc315bf15759b602cc800b61936c23d6

See more details on using hashes here.

Provenance

The following attestation bundles were made for commol-0.1.0b3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yaml on MUNQU/commol

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file commol-0.1.0b3-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for commol-0.1.0b3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c726cc0a53242b238a1b8805bd4c0ae18049127339ec0737cefdf2d5271664da
MD5 e5230b88ecb33f02ad895cd8db2752d1
BLAKE2b-256 bc175e7bb73f43719a2a02ef911f79a7720a026a77ace51653c876d89852e24c

See more details on using hashes here.

Provenance

The following attestation bundles were made for commol-0.1.0b3-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: release.yaml on MUNQU/commol

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file commol-0.1.0b3-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for commol-0.1.0b3-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 27496391afe2161b03606fd3c09ae91bc2dc6b7ed6956e5813f8ad3569cfb4ea
MD5 1f6c1ff3284a02ca24b7f66d273efc67
BLAKE2b-256 fc40dcdaf643614dfccec2ab320214abafb67385125fc773c6abdc4649c7a815

See more details on using hashes here.

Provenance

The following attestation bundles were made for commol-0.1.0b3-cp313-cp313-macosx_10_12_x86_64.whl:

Publisher: release.yaml on MUNQU/commol

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file commol-0.1.0b3-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: commol-0.1.0b3-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 2.3 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for commol-0.1.0b3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 1ad0056afed6bbe9061ba1f7fc74597935effb6cbd7aab8d4ff62b159119c5b0
MD5 fb4d1ba63f49eb42eda4e5a38f4c90a0
BLAKE2b-256 33e466e6dff48da82618d531d1540993434bc54ac5e9ae6c775e64149400499a

See more details on using hashes here.

Provenance

The following attestation bundles were made for commol-0.1.0b3-cp312-cp312-win_amd64.whl:

Publisher: release.yaml on MUNQU/commol

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file commol-0.1.0b3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for commol-0.1.0b3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 317c674f10341292ef4ad71bf1a815d0a9071b1fc5b7cdc8e7d04acc831cb3cb
MD5 ca2e0047ff446454308006d6c43ba84f
BLAKE2b-256 6ce35ea8496dc28c14c8c7e54cc1010ca9dba585a6d754ea3a6819dad1fb7ea5

See more details on using hashes here.

Provenance

The following attestation bundles were made for commol-0.1.0b3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yaml on MUNQU/commol

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file commol-0.1.0b3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for commol-0.1.0b3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6de7e8a6273b73d69080b852b498e4a4641ae64c7176e521d8a478f10584d189
MD5 4fba41986ba6b6d8f6012233afcfd5bb
BLAKE2b-256 5630083aeb6c91c94757bf4dfdab2c4208ee1e0990d0dd11af5a6c7b5b7f3b55

See more details on using hashes here.

Provenance

The following attestation bundles were made for commol-0.1.0b3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yaml on MUNQU/commol

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file commol-0.1.0b3-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for commol-0.1.0b3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b943f764d32a11e30fedee160ab803682b851b6838cb774a63235b1f54d7ea47
MD5 81f60e4d4f36aace70d88bfd91a50905
BLAKE2b-256 011f4a03bdc46a417e2e62352f38f32e3cbeab7cb08d86957b5ddf55f764e95b

See more details on using hashes here.

Provenance

The following attestation bundles were made for commol-0.1.0b3-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: release.yaml on MUNQU/commol

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file commol-0.1.0b3-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for commol-0.1.0b3-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 69387357775c149727e39e5aadb35a65267582c238731d44f6f08e77b17bff4c
MD5 9fc8e42ddf895bc53a42843991dc39d9
BLAKE2b-256 e5b3d6b92c43ad566e0aa0475eea92117c464e956c0e281a80ba13d73b61c7bc

See more details on using hashes here.

Provenance

The following attestation bundles were made for commol-0.1.0b3-cp312-cp312-macosx_10_12_x86_64.whl:

Publisher: release.yaml on MUNQU/commol

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page