Skip to main content

Rust computation core and Python bindings for the Climate Risk Commons Framework

Project description

Climate Risk Commons Framework

The Climate Risk Commons Framework provides a reusable Rust computation core and typed Python bindings for climate-risk calculations. It turns climate-hazard distributions into comparable impact microscores, scenario branches, and portfolio-level VaR/CVaR risk metrics.

This repository owns the native computation layer. The Python distribution is named crc-framework and imported as crc_framework. It packages the PyO3 extension together with a typed binding layer. Higher-level, application- specific Python functionality is intended to live in a separate package that depends on and may re-export this API.

Features

  • Empirical, tabulated, and parametric probability distributions
  • Explicit parametric fitting with diagnostics and acceptance constraints
  • Built-in and composable exposure-to-impact transforms
  • Climate impact registry keyed by risk factor and scenario context
  • Microscores that turn distribution quantiles into binary risk outcomes
  • Spanning sets, VaR, CVaR, and factor-level attribution
  • H3-based IPCC region, continent, and country lookups

Installation

Install the published Python wheel with:

python -m pip install crc-framework

The package requires Python 3.9 or later. Installing a compatible prebuilt wheel does not require a Rust toolchain. Building from source requires Rust 1.85 or later and a C compiler suitable for building Python extensions.

Verify the installation:

python -c "import crc_framework; print(crc_framework.__doc__)"

For local development, create an environment and install the project in editable mode:

python -m venv .venv
.venv/bin/python -m pip install --upgrade pip maturin
.venv/bin/python -m pip install -e ".[test]"

After changing Rust code, rebuild the extension:

.venv/bin/maturin develop

Core concepts

Distributions

All calculations are expressed through a distribution interface with pdf, cdf, ppf, quantiles, and sample operations. Scalar and NumPy array inputs are supported for the evaluation methods.

Choose a distribution according to the form of the available data:

  • EmpiricalDistribution for raw observations.
  • TabulatedDistribution for explicit probability/value pairs.
  • FittedDistribution for a known parametric family and its parameters.
  • HurdleDistribution for a point mass followed by a truncated parametric tail.

TabulatedDistribution does not extrapolate by default. Querying outside its declared probability range raises an error unless extrapolate=True is set.

Probability convention

All metric APIs use non-exceedance probability q in [0, 1]. Return periods are accepted only when constructing a tabulated distribution. For upper-tail hazards, a return period T is converted to q = 1 - 1/T; therefore, the upper-tail 100-year return level is queried at q=0.99.

Fitting

Fitting is always explicit. Metrics sample the distribution supplied by the caller and never silently substitute a fitted curve. This makes the modelling choice auditable.

fit_distribution accepts raw observations or an EmpiricalDistribution and selects among the supported families using the Kolmogorov–Smirnov p-value. The supported families are genextreme, weibull_min, weibull_max, skewnorm, gumbel_r, gumbel_l, and genpareto. The returned FitResult includes KS, RMSE, and R-squared diagnostics. Passing a tabulated or fitted distribution is an error: those values are not independent observations.

Use fit_quantiles for probability/value knots. It minimizes weighted value-space differences between the supplied values and the selected family's PPF, requires an explicit family, and reports residual diagnostics rather than KS statistics:

from crc_framework import TabulatedDistribution, fit_quantiles

curve = TabulatedDistribution.from_return_periods(
    [5, 10, 25, 50, 100],
    [0.2, 0.6, 1.1, 1.5, 1.9],
    tail="upper",
)
fit = fit_quantiles(curve, family="gumbel_r")

For a known point mass, use fit_hurdle_quantiles and supply its probability; the framework does not infer an exact mass from sparse zero-valued knots:

from crc_framework import fit_hurdle_quantiles

fit = fit_hurdle_quantiles(
    curve,
    family="gumbel_r",
    atom_probability=0.5,
    atom_location=0.0,
)

TabulatedDistribution remains the lossless interpolation of the supplied knots. Parametric and hurdle fits are lossy, so systems that require source reconstruction must persist the original probability/value pairs separately.

Create microscores from flood exposure

from crc_framework import (
    RiskFactor,
    ScenarioMetadata,
    TabulatedDistribution,
    TransformContext,
    generate_microscores,
    impacts,
)

exposure = TabulatedDistribution.from_return_periods(
    periods=[10, 20, 50, 100, 200, 500],
    values=[0.1, 0.2, 0.5, 0.9, 1.4, 2.0],
    tail="upper",
)

impact = impacts.for_factor(
    RiskFactor.CFLOOD,
    context=TransformContext(
        continent="Europe",
        building_type="Commercial buildings",
    ),
)(exposure)

suite = generate_microscores(
    exposure,
    impact=impact,
    probabilities=[0.95, 0.99],
    metadata=ScenarioMetadata(factor=RiskFactor.CFLOOD.value),
)

generate_microscores returns a MicroscoreSuite. Use suite.scores to inspect sampled exposure and impact values, suite.at(q) to obtain the binary outcome at a requested probability, and exposure_statistics and impact_statistics for summary diagnostics.

Fit observations explicitly

import numpy as np

from crc_framework import EmpiricalDistribution, FitConstraints, fit_distribution

observations = np.array([0.1, 0.2, 0.4, 0.7, 1.1, 1.8])
empirical = EmpiricalDistribution(observations)
fit = fit_distribution(
    empirical,
    family="auto",
    constraints=FitConstraints(probability=0.99, maximum_value=3.0),
)
median = fit.distribution.ppf(0.5)
print(fit.distribution.family, fit.diagnostics.ks_pvalue, median)

Pass family="auto" (the default) to select a family, a family name to fit a specific family, or use fit_all to inspect every candidate. Use quality_metrics to calculate diagnostics for a selected fitted distribution.

Evaluate impacts

Impact functions expose two deliberately distinct operations:

  • impact.evaluate(values, context=...) evaluates event-aligned exposure values. Input shape and order are preserved, including for decreasing or non-monotonic callables. This is the appropriate operation when return periods continue to identify the source hazard events.
  • impact(distribution, probabilities=..., context=...) transforms an exposure distribution into an impact distribution. Decreasing built-in transforms reorder the resulting quantiles so the output remains a valid distribution for risk metrics.

The built-in LinearImpact, SigmoidImpact, and PiecewiseLinearImpact support both operations. CallableImpact adapts a vectorized NumPy callable for point evaluation, while the backward-compatible CallableTransform also supports distribution transformation.

import numpy as np

from crc_framework import CallableImpact, LinearImpact, generate_microscores

impact_function = LinearImpact(slope=0.25, maximum=1.0)
event_impacts = impact_function.evaluate(np.array([0.5, 2.0]))
impact = impact_function(exposure)
suite = generate_microscores(
    exposure,
    impact=impact,
    probabilities=[0.95, 0.99],
)

custom = CallableImpact(lambda values: np.clip(values / 2.0, 0.0, 1.0))
custom_event_impacts = custom.evaluate(np.array([0.5, 2.0]))

impacts.for_factor(...) selects a registry-backed climate transform. Supply a TransformContext with the relevant geography, building type, and historical values; pass overrides when an application needs to replace transform parameters. Registry-backed impacts support the same point and distribution interfaces, with point evaluation delegated directly to the native registry.

Aggregate factor outcomes

Each microscore can be converted to a BinaryOutcome. Combine outcomes into the full set of independent downside/upside branches, then calculate VaR and CVaR at one or more confidence levels:

from crc_framework import BinaryOutcome, compute_risk, compute_spanning_set

outcomes = [
    BinaryOutcome("flood", downside_probability=0.05, downside_impact=0.4),
    BinaryOutcome("fire", downside_probability=0.10, downside_impact=0.2),
]

branches = compute_spanning_set(outcomes)
risk = compute_risk(outcomes, levels=[0.80, 0.95])
level_95 = risk.at(0.95)

print(len(branches))  # 4: two possible outcomes per factor
print(level_95.var, level_95.cvar)

Branch generation grows as 2**n for n factors. Set max_branches on compute_spanning_set or compute_risk to enforce an application-specific limit. RiskLevel.attribution reports each factor's contribution to VaR and CVaR.

Spatial helpers

Spatial helpers accept an H3 cell as an integer or string, normalize it to H3 resolution 4, and return None when no reference mapping exists.

from crc_framework import lookup_geography, lookup_ipcc_region

cell = 600550049193132031
geography = lookup_geography(cell)
region = lookup_ipcc_region(cell)

if geography is not None:
    print(geography.continent, geography.countries)
print(region)

lookup_continent returns a continent name, lookup_ipcc_region returns the IPCC region, and lookup_geography returns a Geography object with the continent and intersecting ISO3 country codes.

Public API

The package exports the following primary interfaces:

  • Distributions: EmpiricalDistribution, TabulatedDistribution, FittedDistribution, HurdleDistribution, fit_distribution, fit_quantiles, fit_hurdle_quantiles, fit_all, and quality_metrics.
  • Transforms: impacts, ImpactRegistry, ImpactFunction, ClimateImpact, LinearImpact, SigmoidImpact, PiecewiseLinearImpact, CallableImpact, and CallableTransform.
  • Metrics: generate_microscores, compute_spanning_set, and compute_risk.
  • Models and constants: ScenarioMetadata, TransformContext, RiskFactor, Pathway, RISK_FACTORS, PATHWAYS, and HORIZONS.
  • Spatial lookup: lookup_continent, lookup_ipcc_region, and lookup_geography.

Package structure

  • crates/core contains the reusable Rust algorithms and reference data.
  • src/lib.rs exposes the Rust core through PyO3.
  • python/crc_framework contains the typed Python binding layer and type information shipped in the wheel.

Consumers should import the stable crc_framework API rather than importing crc_framework._core directly. The _core module is an implementation detail and may change between releases.

License

CRC Framework is licensed under the GNU Affero General Public License, version 3 or any later version (AGPL-3.0-or-later). See LICENSE.

Parts of the numerical distribution implementation are derived from or informed by SciPy and Cephes. Their applicable copyright notices and license terms are preserved in THIRD_PARTY_NOTICES.md.

Development

cargo fmt --all -- --check
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspace
.venv/bin/python -m mypy
.venv/bin/python -m pytest
.venv/bin/maturin build --release

Run maturin develop again after changing the Rust extension. Python-only changes are available directly from the editable installation.

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

crc_framework-0.2.0.tar.gz (5.8 MB view details)

Uploaded Source

Built Distributions

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

crc_framework-0.2.0-cp314-cp314t-manylinux_2_28_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ x86-64

crc_framework-0.2.0-cp314-cp314t-macosx_11_0_arm64.whl (3.1 MB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

crc_framework-0.2.0-cp314-cp314t-macosx_10_12_x86_64.whl (3.0 MB view details)

Uploaded CPython 3.14tmacOS 10.12+ x86-64

crc_framework-0.2.0-cp314-cp314-manylinux_2_28_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64

crc_framework-0.2.0-cp313-cp313t-macosx_11_0_arm64.whl (3.1 MB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

crc_framework-0.2.0-cp313-cp313t-macosx_10_12_x86_64.whl (3.0 MB view details)

Uploaded CPython 3.13tmacOS 10.12+ x86-64

crc_framework-0.2.0-cp313-cp313-manylinux_2_28_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

crc_framework-0.2.0-cp312-cp312-manylinux_2_28_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

crc_framework-0.2.0-cp312-cp312-macosx_11_0_arm64.whl (3.1 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

crc_framework-0.2.0-cp312-cp312-macosx_10_12_x86_64.whl (3.0 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

crc_framework-0.2.0-cp311-cp311-manylinux_2_28_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

crc_framework-0.2.0-cp311-cp311-macosx_11_0_arm64.whl (3.1 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

crc_framework-0.2.0-cp311-cp311-macosx_10_12_x86_64.whl (3.0 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

File details

Details for the file crc_framework-0.2.0.tar.gz.

File metadata

  • Download URL: crc_framework-0.2.0.tar.gz
  • Upload date:
  • Size: 5.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for crc_framework-0.2.0.tar.gz
Algorithm Hash digest
SHA256 96466d9261432db56238b16f3cd76d911a2d3455e0928e3a3feac8548bd1d31c
MD5 a4f6cc4af60d6ddefb73e50e70c5cfe9
BLAKE2b-256 f5557c48f133effc81b50ddb4ad8560b021569aad2fe786fa00abe731794fca1

See more details on using hashes here.

Provenance

The following attestation bundles were made for crc_framework-0.2.0.tar.gz:

Publisher: release.yaml on RiskThinking/crc-framework-rs

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

File details

Details for the file crc_framework-0.2.0-cp314-cp314t-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for crc_framework-0.2.0-cp314-cp314t-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5347fa348680397cce3c92c45b582039ffb70fa8909092e230463f88897c2cec
MD5 2c8a729cfc2584bf67f63e83b951048c
BLAKE2b-256 eddca579547a996bbc5bde5a1dff9239c9e79793065cdc9a9ccacc3882d05b0b

See more details on using hashes here.

Provenance

The following attestation bundles were made for crc_framework-0.2.0-cp314-cp314t-manylinux_2_28_x86_64.whl:

Publisher: release.yaml on RiskThinking/crc-framework-rs

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

File details

Details for the file crc_framework-0.2.0-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for crc_framework-0.2.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3638c7a6e747af6ac0ffce30d03a54317bc898acbbe944e169b0c41f98e1c779
MD5 0373b269903d9ad67e646c9b29279527
BLAKE2b-256 2bd2aa71be522968efbede66d426c4282eafa1b5f9ff03c9ad1db4377d1288fd

See more details on using hashes here.

Provenance

The following attestation bundles were made for crc_framework-0.2.0-cp314-cp314t-macosx_11_0_arm64.whl:

Publisher: release.yaml on RiskThinking/crc-framework-rs

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

File details

Details for the file crc_framework-0.2.0-cp314-cp314t-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for crc_framework-0.2.0-cp314-cp314t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 1282ccff8c4fda45acf799dbd07a3e83b61c94d06e2e464a3e591cb41ad00a20
MD5 56e3a675ebe7ea293351fa0e2330e56b
BLAKE2b-256 f9f18bd0082c3716c2a1ecb4ead174d8478cf084b1f64493391195c7f8b5c471

See more details on using hashes here.

Provenance

The following attestation bundles were made for crc_framework-0.2.0-cp314-cp314t-macosx_10_12_x86_64.whl:

Publisher: release.yaml on RiskThinking/crc-framework-rs

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

File details

Details for the file crc_framework-0.2.0-cp314-cp314-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for crc_framework-0.2.0-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 dbf8822e8c56fb639d263dfa91b363428e54b68e412d2d844ad4d78959a0dca0
MD5 44fb717d6f731d43ed7ee8817668296b
BLAKE2b-256 58bd4b84efcd11cab412c8db6eeb4a9b1cf60414cbda46b4578f7d38482b2981

See more details on using hashes here.

Provenance

The following attestation bundles were made for crc_framework-0.2.0-cp314-cp314-manylinux_2_28_x86_64.whl:

Publisher: release.yaml on RiskThinking/crc-framework-rs

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

File details

Details for the file crc_framework-0.2.0-cp313-cp313t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for crc_framework-0.2.0-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 71efec12e7ee56484ba2d61e4919ee7c5e37e4d7f166dba719142878d436e9eb
MD5 22832a75e27b71a39ad0d77989043772
BLAKE2b-256 17f7a18215202a681fa1e7fb11f485c21e85ffd7b015e6444e67bb919dca2482

See more details on using hashes here.

Provenance

The following attestation bundles were made for crc_framework-0.2.0-cp313-cp313t-macosx_11_0_arm64.whl:

Publisher: release.yaml on RiskThinking/crc-framework-rs

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

File details

Details for the file crc_framework-0.2.0-cp313-cp313t-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for crc_framework-0.2.0-cp313-cp313t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 1cabaf5dd6bb63b4a9fe1128a0917a506664905d4f26483dce5fd962950a9dd6
MD5 91d4459ea3943784d6d5cabffae0dc95
BLAKE2b-256 5ddff318ba1cafd69fa66b04ba575a79b346864662dee0e62ad90000faa33f11

See more details on using hashes here.

Provenance

The following attestation bundles were made for crc_framework-0.2.0-cp313-cp313t-macosx_10_12_x86_64.whl:

Publisher: release.yaml on RiskThinking/crc-framework-rs

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

File details

Details for the file crc_framework-0.2.0-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for crc_framework-0.2.0-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2fc7e8373ba8a801c7d511c3e354322dfa3f21b1d1b9c781dc2c06d88daac01f
MD5 f1d20a54869435d9c075d129eb75bbcf
BLAKE2b-256 32f218e0f32e42a95ae70865501c95bd24aa5ba5e1f6639cf61696941a4071fb

See more details on using hashes here.

Provenance

The following attestation bundles were made for crc_framework-0.2.0-cp313-cp313-manylinux_2_28_x86_64.whl:

Publisher: release.yaml on RiskThinking/crc-framework-rs

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

File details

Details for the file crc_framework-0.2.0-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for crc_framework-0.2.0-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7582230132a6c19002ec6e94a2623cb0448246ff5e986402cae6f4d8ef2cfc05
MD5 56941fc24ef426e9d0284e000966c24f
BLAKE2b-256 5141362fb5f01fe33da4b7dcdfae482b6d6ba01fdbbb15b7b719c528ce9e7c89

See more details on using hashes here.

Provenance

The following attestation bundles were made for crc_framework-0.2.0-cp312-cp312-manylinux_2_28_x86_64.whl:

Publisher: release.yaml on RiskThinking/crc-framework-rs

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

File details

Details for the file crc_framework-0.2.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for crc_framework-0.2.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ad6c3e1551428fd055d35761e4281f2ce4c67051e46ecdedf31c98ebd0bc5ff2
MD5 d77f89615e20806eebcb0287afd9fbf3
BLAKE2b-256 6ced3f4519e4fd8c6e634c3e8c5e4e9ea0658bc23ec92a937de10cca680e4001

See more details on using hashes here.

Provenance

The following attestation bundles were made for crc_framework-0.2.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: release.yaml on RiskThinking/crc-framework-rs

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

File details

Details for the file crc_framework-0.2.0-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for crc_framework-0.2.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 32d53116d298b642df7ff018c113e5a04f270c8996de06b22dcac14d315aa410
MD5 4e85d222b7d9a167dd7e70e6d797f64e
BLAKE2b-256 3840e5cbf76e6b6b9c8592a72b8008cb34e04b61b15ad8d464a2ee19e54254a6

See more details on using hashes here.

Provenance

The following attestation bundles were made for crc_framework-0.2.0-cp312-cp312-macosx_10_12_x86_64.whl:

Publisher: release.yaml on RiskThinking/crc-framework-rs

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

File details

Details for the file crc_framework-0.2.0-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for crc_framework-0.2.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d47498c6f9a5ac6492f92a5d88294bbe4f7ec6dbd433f54516fd626078995540
MD5 fc05bb42d282f81842d9e858a1e7ac6a
BLAKE2b-256 0b2ee80226db02ca35f046870ddf7b6530dd44a6d1e2834d3982f6c7083d15f7

See more details on using hashes here.

Provenance

The following attestation bundles were made for crc_framework-0.2.0-cp311-cp311-manylinux_2_28_x86_64.whl:

Publisher: release.yaml on RiskThinking/crc-framework-rs

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

File details

Details for the file crc_framework-0.2.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for crc_framework-0.2.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3ca5b4e6a9e4a4d6afb329eb3370831223eece86191bf4bc00728529ecfd9efb
MD5 df0cc17ed075fe2fae451cad93237d7b
BLAKE2b-256 cfd1981e36947395321a645b08f12f5424b752aa92bb13d035ba5e4088ed9966

See more details on using hashes here.

Provenance

The following attestation bundles were made for crc_framework-0.2.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: release.yaml on RiskThinking/crc-framework-rs

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

File details

Details for the file crc_framework-0.2.0-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for crc_framework-0.2.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 bb0aabad160dbe9e1189bd74568c42fae4807b00ec7e485efc3cbe93e3e78dd2
MD5 9a3794af906eebb8708c30fee1e117f8
BLAKE2b-256 d242a8ed55d51d6dadba3eed9c7061d8a4609762fa1cce2132be5a8b3cc00837

See more details on using hashes here.

Provenance

The following attestation bundles were made for crc_framework-0.2.0-cp311-cp311-macosx_10_12_x86_64.whl:

Publisher: release.yaml on RiskThinking/crc-framework-rs

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