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.0b2.tar.gz (298.8 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.0b2-cp314-cp314-win_amd64.whl (2.3 MB view details)

Uploaded CPython 3.14Windows x86-64

commol-0.1.0b2-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

commol-0.1.0b2-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.2 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

commol-0.1.0b2-cp314-cp314-macosx_11_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

commol-0.1.0b2-cp314-cp314-macosx_10_12_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

commol-0.1.0b2-cp313-cp313-win_amd64.whl (2.2 MB view details)

Uploaded CPython 3.13Windows x86-64

commol-0.1.0b2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

commol-0.1.0b2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

commol-0.1.0b2-cp313-cp313-macosx_11_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

commol-0.1.0b2-cp313-cp313-macosx_10_12_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

commol-0.1.0b2-cp312-cp312-win_amd64.whl (2.2 MB view details)

Uploaded CPython 3.12Windows x86-64

commol-0.1.0b2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

commol-0.1.0b2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

commol-0.1.0b2-cp312-cp312-macosx_11_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

commol-0.1.0b2-cp312-cp312-macosx_10_12_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: commol-0.1.0b2.tar.gz
  • Upload date:
  • Size: 298.8 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.0b2.tar.gz
Algorithm Hash digest
SHA256 ee9afd128cc79ebc5272e2b7e9909f64cc80a08973550e4d0c18e38307d1d40f
MD5 677310a77690a7f9135b3eb300925aff
BLAKE2b-256 d26bd6d5c90de038a074fa6b0503974cac9a5de2c0c6852e30bda3e16889c700

See more details on using hashes here.

Provenance

The following attestation bundles were made for commol-0.1.0b2.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.0b2-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: commol-0.1.0b2-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.0b2-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 a192a58370928abc2d571c59b2f34b8752bd1b08dd9f3864fa9201d464a599b8
MD5 ee0a391263056163f65a0ecf2b9715d4
BLAKE2b-256 61951ede96a301c2e3abf7a6a39e1eba9071484714418b3beca56582dc543966

See more details on using hashes here.

Provenance

The following attestation bundles were made for commol-0.1.0b2-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.0b2-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for commol-0.1.0b2-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4e6df744335ea08e92f668a9e8bd4e94056f3bfdd56f99c8b08a7b90ed46a719
MD5 aa1afbbf67437b44a98f9cced7aa93a8
BLAKE2b-256 7ceacaa9abed5cd87c910b8054099ce58afaddb719c21790503f2c762ba87d47

See more details on using hashes here.

Provenance

The following attestation bundles were made for commol-0.1.0b2-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.0b2-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for commol-0.1.0b2-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 dc076c96c7c4dec2e38f991d471f8f5d24a82bc363d9773e058f04b1fbb663f5
MD5 acd85e30b48e144a37bb966bc5e9aae3
BLAKE2b-256 4b19160f73d783c4027b7ef4b3541b9d1a8392b6697b177b9d547778c2da8d4c

See more details on using hashes here.

Provenance

The following attestation bundles were made for commol-0.1.0b2-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.0b2-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for commol-0.1.0b2-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1d7b910e433e9c32e496dde091e8597d3c40d3889ec451a3473b70a73ee00bc4
MD5 04d5c580a34945896e2827f8b22dca74
BLAKE2b-256 688fe2a31c879902ece66240cf5cb10510846bdddbd2320bd0ec44bfc50cb887

See more details on using hashes here.

Provenance

The following attestation bundles were made for commol-0.1.0b2-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.0b2-cp314-cp314-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for commol-0.1.0b2-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 89d2157013510768ee57bcde606e682fe18aac2922629f869f4b6d07ed535ab0
MD5 ea9ca13987e822a6401b248e5970d1e0
BLAKE2b-256 62e7f292e703248b3518afd8c947ff90927444517189fbcb6c12f0741275d57e

See more details on using hashes here.

Provenance

The following attestation bundles were made for commol-0.1.0b2-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.0b2-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: commol-0.1.0b2-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 2.2 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.0b2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 838dc51186fff94b8ad34ede5f54ba6cea534dc59f9d0eaf215d87eccf9d8e61
MD5 d6da51b3daa0728af866a5f75e87be3b
BLAKE2b-256 44204233220ae196cb1f7b091837c3f31dbb480e264ac1988edd519bff50e10d

See more details on using hashes here.

Provenance

The following attestation bundles were made for commol-0.1.0b2-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.0b2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for commol-0.1.0b2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f88d9b29681ee3f5e9d32625eeb70a82eea2b81e1546141b825e59bfa2524b66
MD5 a867a54cc401628da8db82bc50b2a1d3
BLAKE2b-256 46efa61d2ba1eb8756b276f3733d589cbae41d8e360090d08e740d6600535f6d

See more details on using hashes here.

Provenance

The following attestation bundles were made for commol-0.1.0b2-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.0b2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for commol-0.1.0b2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 451c53fe97661f4904fd9936d493b3fb0e80c3e88c8066dcdcd47a0922819cb6
MD5 367082b5b36fd7e1bdebc680452e5931
BLAKE2b-256 8d9fa4fc1edc1e90ac9ffb8ddf3ef9babc3ca8b5f115be85df215af275fbe7a1

See more details on using hashes here.

Provenance

The following attestation bundles were made for commol-0.1.0b2-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.0b2-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for commol-0.1.0b2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4a8a2be25b3892a947317587bae177f295174d58ae4cd760603aedd594e5252e
MD5 807530728a1c1fd9ff734f519ee02e63
BLAKE2b-256 a0325845c585ed74269ad7a46c451b45bf32440182738bae0d71274fd4142b3d

See more details on using hashes here.

Provenance

The following attestation bundles were made for commol-0.1.0b2-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.0b2-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for commol-0.1.0b2-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 d42557410c3cc7f1c160aa9be8f1e807f84f7556345430f314b71acc78c81e69
MD5 8c864a48de27ca9d868bdbea08cb6e89
BLAKE2b-256 86e94741ed2d8d650d79034dfa6819205a280087e4aee565d3bf5d6f78bbe8ff

See more details on using hashes here.

Provenance

The following attestation bundles were made for commol-0.1.0b2-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.0b2-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: commol-0.1.0b2-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 2.2 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.0b2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 a1cf95a8cb07dfc98c02e7a18299695fddc9dc593f1529c847081d8e9d4b3b4a
MD5 512c7555c60651cbad8988ea9ee60639
BLAKE2b-256 070968dc50c7942a37d8ce40af9c1516634e5a61f625edfb27e58be9f26bd468

See more details on using hashes here.

Provenance

The following attestation bundles were made for commol-0.1.0b2-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.0b2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for commol-0.1.0b2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 dc7cdc0fa67e1eb1a93d4801fabf181071483946b966ec3976d0080a45e6202b
MD5 67bd125f688d60820e1d6ff5f3c07b26
BLAKE2b-256 dfa532b10f4d6e6e7c86abd3085e677099001a20c179882d782d360f8f3e3d69

See more details on using hashes here.

Provenance

The following attestation bundles were made for commol-0.1.0b2-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.0b2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for commol-0.1.0b2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 26c10fb8eae08b2fa61d157e050e442d275b62a2f652b0a3be401dfe4ce08d5b
MD5 367b28216e776ed96648afdea1f97ad3
BLAKE2b-256 361982260a02510e4f3276196538c488cbec31b1f40a9dd68287c9832f538f06

See more details on using hashes here.

Provenance

The following attestation bundles were made for commol-0.1.0b2-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.0b2-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for commol-0.1.0b2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c09813ac62a6f3c8574f3c0946086966bc159afbdde8cde1cd61e02b6059ade0
MD5 e5c03c5d5df5bffa1098bccea813c94c
BLAKE2b-256 1785941534c9a4c598547b4585b46d288bb46b303b3ae08cbcc6983cb7e9e5ec

See more details on using hashes here.

Provenance

The following attestation bundles were made for commol-0.1.0b2-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.0b2-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for commol-0.1.0b2-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3baa8fe7e69a7d86ae20ee6e9e396617bb8c541261bcc591f5578027cdcf5abb
MD5 1c82e848086b95e17cc294319879e29b
BLAKE2b-256 616846d43e7ed52012a3b506be75f58231dab1d231e6b8b01335fcda918fcc49

See more details on using hashes here.

Provenance

The following attestation bundles were made for commol-0.1.0b2-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