Skip to main content

No project description provided

Project description

Cedar Python

CI (main)  PyPI version

cedarpy helps you use the (Rust) Cedar Policy library from Python. You can use cedarpy to:

  • check whether a request is authorized by the Cedar Policy engine
  • validate policies against a schema
  • format policies

cedarpy releases correspond to the following Cedar Policy engine versions:

Cedar Policy (engine) releasecedarpy releasecedarpy branch
v4.8.2v4.8.5main
v4.7.2v4.7.1release/4.7.x
v4.1.0v4.1.0release/4.1.x
v2.2.0v0.4.1release/2.2.x

Beginning with v4.1.0, cedarpy's version number indicates the Cedar Policy engine major and minor version that it is based on. cedarpy increases the patch number when releasing backwards-compatible changes and bug fixes. So the cedarpy and Cedar Engine patch versions can and will diverge. Select the cedarpy version that provides the Cedar Policy language and engine features you need.

cedarpy packages are available for the following platforms:

Operating SystemProcessor ArchitecturesPython
Linuxx86_64, aarch643.9 - 3.14
Macx86_64, aarch643.11 - 3.14
Windowsx86_643.9 - 3.14

Note: This project is not officially supported by AWS or the Cedar Policy team.

Using the library

Releases of cedarpy are available on PyPi. You can install the latest release with:

pip install cedarpy

(See the Developing section for how to use artifacts you've built locally.)

Authorizing access with Cedar policies in Python

Now you can use the library to authorize access with Cedar from your Python project using the is_authorized function. Here's an example of basic use:

from cedarpy import is_authorized, AuthzResult, Decision

policies: str = "//a string containing cedar policies"
entities: list = [  # a list of Cedar entities; can also be a json-formatted string of Cedar entities
    {"uid": {"__entity": { "type" : "User", "id" : "alice" }}, "attrs": {}, "parents": []}
    # ...
]
request = {
    "principal": 'User::"bob"',
    "action": 'Action::"view"',
    "resource": 'Photo::"1234-abcd"',
    "context": {}
}

authz_result: AuthzResult = is_authorized(request, policies, entities)

# so you can assert on the decision like:
assert Decision.Allow == authz_result.decision

# or use the 'allowed' convenience method 
assert authz_result.allowed

# or even via AuthzResult's attribute subscripting support 
assert authz_result['allowed']

The AuthzResult class also provides diagnostics and metrics for the access evaluation request.

See the unit tests for more examples of use and expected behavior.

Authorize a batch of requests

You can also authorize a batch of requests with the is_authorized_batch function. is_authorized_batch accepts a list of requests to evaluate against shared policies, entities, and schema.

Batch authorization is often much more efficient (+10x) than processing authorization requests one by one with is_authorized. This is because the most expensive part of the authorization process is transforming the policies, entities, and schema into objects that Cedar can evaluate. See RFC: support batch authorization requests for details.

Here's an example of how to use is_authorized_batch and the optional request-result correlation_id:

batch_id:str = randomstr()
requests: List[dict] = []
for action_name in action_names:
    requests.append({
        "principal": f'User::"{user_id}"',
        "action": f'Action::"{action_name}"',
        "resource": f'Resource::"{resource_id}"',
        "context": context_keys,
        "correlation_id": f"authz_req::{batch_id}-{action_name}"
    })

# ... resolve get policies, entities, schema ...

# process authorizations in batch
authz_results: List[AuthzResult] = is_authorized_batch(requests=requests, policies=policies, entities=entities, schema=schema)

# ... verify results came back in correct order via correlation_id ...
for request, result, in zip(requests, authz_results):
    assert request.get('correlation_id') == result.correlation_id

cedar-py returns the list of AuthzResult objects in the same order as the list of requests provided in the batch.

The above example also supplies an optional correlation_id in the request so that you can verify results are returned in the correct order or otherwise map a request to a result.

Reusing parsed policies for performance

Parsing the policy set (PolicySet::from_str) is the dominant per-call cost in is_authorized. When your policies are static, for example a code-checked policy set loaded once at startup in a long-running service or AWS Lambda, you can parse them a single time into a reusable PolicySet handle and pass that handle wherever you'd pass a policies string. This skips the re-parse on every call.

from cedarpy import PolicySet, is_authorized, is_authorized_batch, Decision

policies: str = "// a string containing cedar policies"

# Parse once (e.g. at process/Lambda cold start). Parse errors raise ValueError here,
# rather than being folded into an authorization result.
policy_set = PolicySet.from_str(policies)

# Reuse the handle across many requests — no re-parse per call:
authz_result = is_authorized(request, policy_set, entities)
authz_results = is_authorized_batch(requests, policy_set, entities)

The PolicySet handle is accepted anywhere a policies string is accepted: is_authorized, is_authorized_batch, and is_authorized_partial. Passing a plain string still works exactly as before; the handle is purely opt-in and fully backwards compatible. The handle's memory is released automatically when the last Python reference is dropped.

A PolicySet can also be built from the Cedar JSON (EST) policy format with PolicySet.from_json_str(...), and supports len(policy_set) (number of policies) and str(policy_set) (the policy set rendered back to Cedar text).

This complements batch authorization: batching amortizes entity/schema parsing across a set of requests evaluated together, while a reusable PolicySet amortizes policy parsing across calls made at different times. The two compose. The speedup grows with policy size — in the project's benchmark suite (release build, ~10-entity calls) reuse is ~1.3x on a single-rule policy but ~9x on a typical production-scale policy (~16 KB / 60 rules), where it removes ~1.4 ms of policy parsing per call.

On a successful evaluation the result's metrics reflect the reuse: parse_policies_duration_micros measures only the (near-zero) borrow rather than the original parse, and metrics["policies_pre_parsed"] is 1 (it is 0 when policies are passed as a string and parsed on that call). As with all metrics, these keys are present only on successful evaluations — an error result carries an empty metrics map.

Note: reuse applies to the policy set. Entities and schema are still parsed on each call.

Partially authorizing a request with unknowns

Sometimes you can't fully evaluate a request up front. A resource entity may not be loaded from the database yet, the caller may not have picked a resource, or context may be filled in by a downstream service. is_authorized_partial evaluates whatever is known and returns residual policies for the parts that aren't.

is_authorized_partial returns either:

  • Decision.Allow or Decision.Deny when the unknowns can't change the outcome, or
  • Decision.NoDecision plus residual policies for the caller to re-evaluate once the unknowns are bound.
from cedarpy import is_authorized_partial, PartialAuthzResult, Decision

# Allow access to all principals when the resource is public
policies: str = 'permit(principal, action, resource) when { resource.public == true };'

# Resource entity hasn't been loaded from the database yet
entities: list = []

request = {
    "principal": 'User::"alice"',
    "action": 'Action::"view"',
    "resource": 'Photo::"photo1"',
    "context": {},
}

result: PartialAuthzResult = is_authorized_partial(request, policies, entities)

# Cedar can't decide yet: the policy depends on resource.public,
# but Photo::"photo1" hasn't been loaded.
assert result.decision == Decision.NoDecision

# Which entities Cedar needs you to load before it can decide:
assert result.diagnostics.unknown_entities == ['Photo::"photo1"']

# Which policies are still unresolved, identified by the auto-generated policy id:
assert result.diagnostics.nontrivial_residuals == ['policy0']

Now you can load the unknown entities and re-evaluate access with is_authorized to get a final decision:

from cedarpy import is_authorized

# Load Photo::"photo1" from the database and transform to its Cedar entity representation
entities = [
    {"uid": {"__entity": {"type": "Photo", "id": "photo1"}},
     "attrs": {"public": True}, "parents": []}
]

final_result = is_authorized(request, policies, entities) # new entities; same request and policies
assert final_result.decision == Decision.Allow

Note: A partial-eval result is not a final authorization decision. Always re-run is_authorized once unknowns are bound.

See the Partial Authorization Guide for edge cases, residual structure, and advanced patterns (SQL translation, Cedar text re-evaluation).

Validating policies against a schema

You can use validate_policies to validate Cedar policies against a schema before deploying them. Validation catches common mistakes like typos in entity types, invalid actions, type mismatches, and unsafe access to optional attributes—errors that would otherwise cause policies to silently fail at runtime.

This is particularly useful in CI/CD pipelines to catch policy errors before they reach production. See the Cedar validation documentation for details on what the validator checks.

Here's an example of basic use:

from cedarpy import validate_policies, ValidationResult

policies: str = "// a string containing Cedar policies"
schema: str = "// a Cedar schema as JSON string, Cedar schema string, or Python dict"

result: ValidationResult = validate_policies(policies, schema)

# so you can check validation passed like:
assert result.validation_passed

# or use ValidationResult in a boolean context
assert result  # True if validation passed

# and if validation fails, iterate over errors:
for error in result.errors:
    print(f"error: {error}")

The ValidationResult class provides the validation outcome and a list of ValidationError objects when validation fails.

See the unit tests for more examples of use and expected behavior.

Formatting Cedar policies

You can use format_policies to pretty-print Cedar policies according to convention.

from cedarpy import format_policies

policies: str = """
    permit(
        principal,
        action == Action::"edit",
        resource
    )
    when {
        resource.owner == principal
    };
"""

print(format_policies(policies))
# permit (
#   principal,
#   action == Action::"edit",
#   resource
# )
# when { resource.owner == principal };

Developing

You'll need a few things to get started:

  • Python +3.9
  • Rust and cargo

This project is built on the PyO3 and maturin projects. These projects are designed to enable Python to use Rust code and vice versa.

The most common development commands are in the Makefile

Create virtual env

First create a Python virtual environment for this project with: make venv-dev

In addition to creating a dedicated virtual environment, this will install cedar-py's dependencies.

If this works you should be able to run the following command:

maturin --help

Build and run cedar-py tests

Ensure the cedar-py virtual environment is active by sourcing it in your shell:

source venv-dev/bin/activate

Now run:

make quick

The make quick command will build the Rust source code with maturin and run the project's tests with pytest.

If all goes well, you should see output like:

(venv-dev) swedish-chef:cedar-py skuenzli$ make quick
Performing quick build
set -e ;\
	maturin develop ;\
	pytest
📦 Including license file "/path/to/cedar-py/LICENSE"
🔗 Found pyo3 bindings
🐍 Found CPython 3.9 at /path/to/cedar-py/venv-dev/bin/python
📡 Using build options features from pyproject.toml
Ignoring maturin: markers 'extra == "dev"' don't match your environment
Ignoring pip-tools: markers 'extra == "dev"' don't match your environment
Ignoring pytest: markers 'extra == "dev"' don't match your environment
💻 Using `MACOSX_DEPLOYMENT_TARGET=11.0` for aarch64-apple-darwin by default
   Compiling cedarpy v0.1.0 (/path/to/cedar-py)
    Finished dev [unoptimized + debuginfo] target(s) in 3.06s
📦 Built wheel for CPython 3.9 to /var/folders/k2/tnw8n1c54tv8nt4557pfx3440000gp/T/.tmpO6aj6c/cedarpy-0.1.0-cp39-cp39-macosx_11_0_arm64.whl
🛠 Installed cedarpy-0.1.0
================================================================================================ test session starts ================================================================================================
platform darwin -- Python 3.9.12, pytest-7.4.0, pluggy-1.2.0
rootdir: /path/to/cedar-py
configfile: pyproject.toml
testpaths: tests/unit
collected 10 items

tests/unit/test_authorize.py::AuthorizeTestCase::test_authorize_basic_ALLOW PASSED                                                                                                                            [ 10%]
tests/unit/test_authorize.py::AuthorizeTestCase::test_authorize_basic_DENY PASSED                                                                                                                             [ 20%]

... snip ... # a bunch of tests passing - please write more!
tests/unit/test_import_module.py::InvokeModuleTestFunctionTestCase::test_invoke_parse_test_policy PASSED                                                                                                      [100%]

================================================================================================ 10 passed in 0.51s =================================================================================================

Integration tests

This project supports validating correctness with official Cedar integration tests. To run those tests you'll need to retrieve the cedar-integration-tests data with:

make submodules

Then you can run:

make integration-tests

cedar-py currently passes all 74 tests defined in the example_use_cases, multi, ip, and decimal suites. The integration tests also validate policies against schemas when shouldValidate is set in the test definition. See test_cedar_integration_tests.py for details.

Corpus tests

The upstream cedar-integration-tests repository also ships a fuzzer-generated corpus (corpus-tests.tar.gz) — 7,462 test files containing 59,696 individual request cases. cedar-py passes all 59,696. Runs are kept in a separate target since the suite takes a few minutes:

make corpus-tests

The runner mirrors the leniency rules used by the upstream Rust runner (cedar-testing/tests/cedar-policy/corpus_tests.rs) and cedar-java's SharedIntegrationTests: reasons compared as a set, errors compared by count, and policy/schema parse failures (cedarpy's NoDecision) soft-pass when the fixture's expected decision is Deny. See test_cedar_corpus_tests.py for details.

Using locally-built artifacts

If you used make quick above, then a development build of the cedarpy module will already be installed in the virtual environment.

If you want to use your local cedarpy changes in another Python environment, you'll need to build a release with:

make release

The release process will build a wheel and output it into target/wheels/

Now you can install that file with pip, e.g.:

pip install --force-reinstall /path/to/cedar-py/target/wheels/ccedarpy-*.whl

Contributing

This project is in its early stages and contributions are welcome. Please check the project's GitHub issues for work we've already identified.

Some ways to contribute are:

  • Use the project and report experience and issues
  • Document usage and limitations
  • Enhance the library with additional functionality you need
  • Add test cases, particularly those from cedar-integration-tests

You can reach people interested in this project in the #cedar-py channel of the Cedar Policy Slack workspace.

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

cedarpy-4.8.5.tar.gz (385.8 kB view details)

Uploaded Source

Built Distributions

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

cedarpy-4.8.5-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.5 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

cedarpy-4.8.5-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.4 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

cedarpy-4.8.5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.5 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ x86-64

cedarpy-4.8.5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.4 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64

cedarpy-4.8.5-cp314-cp314-win_amd64.whl (3.9 MB view details)

Uploaded CPython 3.14Windows x86-64

cedarpy-4.8.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.5 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

cedarpy-4.8.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.4 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

cedarpy-4.8.5-cp314-cp314-macosx_11_0_arm64.whl (4.0 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

cedarpy-4.8.5-cp314-cp314-macosx_10_12_x86_64.whl (4.1 MB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

cedarpy-4.8.5-cp313-cp313-win_amd64.whl (3.9 MB view details)

Uploaded CPython 3.13Windows x86-64

cedarpy-4.8.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.5 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

cedarpy-4.8.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.4 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

cedarpy-4.8.5-cp313-cp313-macosx_11_0_arm64.whl (4.0 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

cedarpy-4.8.5-cp313-cp313-macosx_10_12_x86_64.whl (4.1 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

cedarpy-4.8.5-cp312-cp312-win_amd64.whl (3.9 MB view details)

Uploaded CPython 3.12Windows x86-64

cedarpy-4.8.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

cedarpy-4.8.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

cedarpy-4.8.5-cp312-cp312-macosx_11_0_arm64.whl (4.0 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

cedarpy-4.8.5-cp312-cp312-macosx_10_12_x86_64.whl (4.1 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

cedarpy-4.8.5-cp311-cp311-win_amd64.whl (3.9 MB view details)

Uploaded CPython 3.11Windows x86-64

cedarpy-4.8.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

cedarpy-4.8.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

cedarpy-4.8.5-cp311-cp311-macosx_11_0_arm64.whl (4.0 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

cedarpy-4.8.5-cp311-cp311-macosx_10_12_x86_64.whl (4.1 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

cedarpy-4.8.5-cp310-cp310-win_amd64.whl (3.9 MB view details)

Uploaded CPython 3.10Windows x86-64

cedarpy-4.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

cedarpy-4.8.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.4 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

cedarpy-4.8.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.5 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

cedarpy-4.8.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.4 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

File details

Details for the file cedarpy-4.8.5.tar.gz.

File metadata

  • Download URL: cedarpy-4.8.5.tar.gz
  • Upload date:
  • Size: 385.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.14.1

File hashes

Hashes for cedarpy-4.8.5.tar.gz
Algorithm Hash digest
SHA256 29caffc957030b515f4c6e7caebd9bb870877c08d8cabc82a9d0664aeaa14761
MD5 cee84faf657c2ef64e15e0c9b14d31e0
BLAKE2b-256 c16276f3989c8f36e8c112d3e12236aeb2bacb5e35d70f471e219e0020f1d623

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.5-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.5-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 afb2436de801125f146fbe671ad3d6e5d64d309726bc93053993fdab247a079b
MD5 fc6ccc499930c96e0293fb9998ba88ca
BLAKE2b-256 7e42630d1d0c7710be62a6f2576d9ac0a99d69f5d77873dd3d3c4cfb5f82d4eb

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.5-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.5-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c1abcf87ffb133cd182c6666ddeb5be8dc542531be0b8723cdab89b4ba230332
MD5 c7417bb0efec0ec128bd030724eaaba6
BLAKE2b-256 20c74ee57f67c1c56a92a17b0177ac32867c446c02d9d0e0ff888012c3342f89

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 55aa9ba1467c5e7dad86df63ad87af0eafca3053fb235c03134322eb66eb9b7b
MD5 5e92b18eea559a874a49bb00831ed5ac
BLAKE2b-256 c6fa4b2e07029c66b272644759da26d2c7fd3043232b354b6fd0462d658a5eee

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2f0efc46dbdf79074f996fdbbfb24fdac58a90a4f570fe69fb1de4482220e615
MD5 c0263011ffc0ff016323201c0171c0c8
BLAKE2b-256 c41dbbaf63a2e999323de44692e47914b8020c21e4b7cd21d115e801cd8beec4

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.5-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: cedarpy-4.8.5-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 3.9 MB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.14.1

File hashes

Hashes for cedarpy-4.8.5-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 acea9fd36f5ee096f0c5be2b8f0f4383ac3456882f296c7a446b3a8c0e3d4b4b
MD5 3bcf208af577d63fdaa30403dc48e534
BLAKE2b-256 eed1340538218f8ffca457e045194e6b75a9638cb7e89861c540787be8322806

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3c9c74ec0a073ed93e552afecfc7969265e59160da65332c4492227a145576c6
MD5 4c822e099eb5bbf70b22ea4687e44c21
BLAKE2b-256 354ccf165efe99d92283a262977147c970d9d5ecd5916d31cb126c1116c4fad8

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5d109345ab8adb7f00b1458523867609c318f2c71b5d0b9290af34ce69ce349d
MD5 09fbe0f69c1ba72810a2a35790f5c4ec
BLAKE2b-256 8cbf766af46db084f5ad701f34565cff4fb764b1b49c9b6eeb49194763d40f6b

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.5-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.5-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1f0288c5af3e27b8435f82d85c3e0d066efc5b88ba3edd449d528893daaddd1e
MD5 24aa233436a3542b4175d46abae64642
BLAKE2b-256 c34696c7006eebe55e7175a748ad55cead2140b063ed1c545a6e8f0c64db6f05

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.5-cp314-cp314-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.5-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 d2808819a6a31023b70c466542f56d40c90a3314c1dcd43a9dcdb69d7eb4607e
MD5 70802d04e544a1a4a60f285be627e11b
BLAKE2b-256 822dcc9808f065c69df9db93535c1761cdc70f70f28b5b67cb3ff82f94480b48

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.5-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: cedarpy-4.8.5-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 3.9 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.14.1

File hashes

Hashes for cedarpy-4.8.5-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 279a9404e2e321e3d258c97ea0af41a4832c399e6cce9b389aa2076c7d3b9145
MD5 b9c87cc20530c2ab2f07a8978a88d402
BLAKE2b-256 9b4eda7401f08f7df52f4403e63fa613bce3d5b1565aee891668d9f36dd20707

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 85043d1c5b2950a379353979229668225e655bf739b7ee85e8fe27299d9122e5
MD5 9c269f278e8541f1a3ff44e9f3ea56d7
BLAKE2b-256 b45572112a5e0adf95b2fbaace9beba80a64685927ba3b084a9354466eab64ed

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9e3012c030ec8651f45a37ef625f15e0781d16d6e7936a49e18f3d3a2dcbda89
MD5 9bd26b2f9dea27d3e8e8c1a0e7016d8c
BLAKE2b-256 c30821f80c911b7709535bbce1d74ac6dcc2e85f77878cc6fe50fb5de38ba76a

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.5-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.5-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1ef109409cc5bb4ad2139cb43723f0586b2fc5ea2588dd29ac84954d5ef76248
MD5 840a27bb76fe21e9ecefc303e01c6afd
BLAKE2b-256 00c62b3525afba063a170ec0e0b388aa90574dc4d34e19c53f35072015a0ca34

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.5-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.5-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 6a6bb2ec814e48ecb6a0213b09ac6c85a98c648d6f50e93a8a266f0f01989973
MD5 66a2dddab4a7d9fc30b211df5bb730e4
BLAKE2b-256 3ebc15e6335efa2d9a778a076fda7bfe08caa0a1878bfa088842289ffec8d0a7

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.5-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: cedarpy-4.8.5-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 3.9 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.14.1

File hashes

Hashes for cedarpy-4.8.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 75b4a39396608140f04aea5678867b714b8581a953ab27777ed46fb9fca09ad3
MD5 c75537e3f57ea268c48345a6ec8ab7fc
BLAKE2b-256 1906251299a547c570f964cb872049ce2e2e077bebe9094fbb8ff1a7e5c35f01

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 64c87e34e88d3df3ce6f252f35d38133e3b0948b27f4e785298b7c6dd019b14d
MD5 6acf92d6ecf53960e9c4a897d686790b
BLAKE2b-256 e5f0fe0a52ade2a509116bfab3114c347fb7d79ba20b3c98d15b31a596034138

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e3a3369cfa2277efee76e3e82008cec1863168878020166c0cfbb35b84a42875
MD5 c49472a1ea9855f304b4792d55a36a9d
BLAKE2b-256 47fc2a1849c5c9afd5f80d05e81286c52181f32e33abb6ec9a8ef66902169105

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.5-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 273324d2f359b9598c08919d38f605083c23ffec0581aa17ad8c8c712767b47a
MD5 b4b4f4f00182efe81497acd88701ac37
BLAKE2b-256 6bd17a78097f94a7b3b597e9ff4212f4066de8a490b8f758ffa52260e5514877

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.5-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.5-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 55fbd7364b26d5345f35c3deed521909f86dde58f9f8d2eb32e27d94e5ee8bcc
MD5 b6a3bc10bd6ec04197c70d9fa92b70f9
BLAKE2b-256 3d1732e6cb11ecc9c2ef1ff0da78d8e5f4fda4c164c3056a249008fb9adb5969

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.5-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: cedarpy-4.8.5-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 3.9 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.14.1

File hashes

Hashes for cedarpy-4.8.5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 271e11d05c0f6b41ed466a3f0c8d26e0241716da5d2bcf0e3a3c281a0737b394
MD5 7b3371e127362877ef29cbd7ab3ddb25
BLAKE2b-256 409aa5c6a87c78d282cef235bc7145de5ef3e10f788006d26c031d41dbf4eea3

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2cccf3bfca98542fdc30855679f41ad55935c939f31ea95a026b6082d6346c48
MD5 9ff1e202be2013ba71657cbd9db1de68
BLAKE2b-256 5aae377940e58129f88a8902debca2042afc24cc4bc6bd4851de13f2afe07bc6

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b5a3701ac166651a647082a5931828f067f095b6307b2335b9a87e66f3c44bcf
MD5 3a7058d8c9e143be04727c0f6596e157
BLAKE2b-256 81bd29a58468da4923657d4045a666577ef2062bf60a0b63c1b1fb5cb7f0685c

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.5-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.5-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fb3d4c5bc09fce87d6e1823a4509e5fbd539e2ff79941ffcb2b1396150c198d1
MD5 04a7413d7531f44821a636509b548db7
BLAKE2b-256 09099f2aa5d497f6931c81a9adf8f4698198d177d48be43366205e839a951cf3

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.5-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.5-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 eac09243f39813a91ff0bc08c3b78f15344f150658c640c67280c0231497dc48
MD5 b6146a32d91d08785fbed31880e80dfc
BLAKE2b-256 5a2cafb0f21cbe16a9ae43683d2bd9a5168549f3db99f3fad2bdd44f0956a0a7

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.5-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: cedarpy-4.8.5-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 3.9 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.14.1

File hashes

Hashes for cedarpy-4.8.5-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 f8dd17a65eae1d72ef2e0d6ed7992cb8eda84b01db6b4d2d3c45b187f61fd9a8
MD5 5e879076e40213b3bd78cff8344aa396
BLAKE2b-256 f9f32f416f88957465b59e69b05fdb53f885f752f0eae2a08b8ce0e0578f4248

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6925968924990b0a1a36391d45c56c25cfe26fb0005452321216ee2c3d3b3190
MD5 5bf057288df0aae9e3db2dbeca673b47
BLAKE2b-256 98502c6fb30c7ba623fd5bbe52690d4b84b1b84c060c00121dc362e828c2f1fd

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2fbba0cc75ce36244e2cf57ebba7db0e298f077bd9f141178ac4027ea3056ca6
MD5 205f3098bc662ab3c1d7b19dedc4bae6
BLAKE2b-256 76a726a53ff24b3b22ad49ab8718889c86ef9b6ddcf776d169bd6fac3b71df86

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3e655995ec8fe892a15472e9d6fb48d5c2a9640c3ed250c839ba12c1d00fb269
MD5 03cefb18e55569a95f73b9d1e0aff1ca
BLAKE2b-256 90aa428ef476f13006efc0eed25f264f182cf4d6164522443864b28da5264e54

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1b4ae615db3b1524420e1fb9706735aa325d8d6e1f287392c9078f5fb95eb56b
MD5 6d7cb4fc96fa915e18b288b715254a65
BLAKE2b-256 a655006a1b038a17b0678607f2915228cb06a02a1db27d8ecd201250f9a7486b

See more details on using hashes here.

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