Skip to main content

Parse, store, validate, and emit Crystallographic Information Files (CIF)

Project description

cifflow

Parse, store, validate, and emit Crystallographic Information Files (CIF).

PyPI CI PyPI - Python Version License


What it does

  • Focused on multi-block powder CIF files, but generally applicable
  • Constructs CIF files
    • Parses CIF 1.1 and CIF 2.0 files, including all string types (triple-quoted, multiline text fields, embedded quotes) and save frames
    • Constructs CifFile objects programmatically from Python values (CifWriter), and performs arbitrary edits: add/remove/rename tags, loops, blocks, and save frames
    • Populate default values as defined in the dictionary
  • Loads DDLm dictionaries with full _import.get resolution, producing a typed schema
  • Removes common parse-time artefacts automatically (clean): orphan error tags, duplicate blocks/save frames/tags, loop padding; for anything beyond these automatic fixes, use CifWriter
  • Ingests parsed or constructed CIF data into DuckDB using the dictionary-derived schema: one table per category, foreign keys enforced, unknown tags routed to a fallback tier
  • Emits valid CIF from a populated database in four modes: ORIGINAL, GROUPED, ONE_BLOCK, ALL_BLOCKS
  • Trusts the user — if you pass in multiple blocks, cifflow assumes they all belong together and, failing key value clashes, can be interpreted as a single database/experiment
  • Visualises a schema as a Graphviz DOT string or a self-contained interactive HTML file

Documentation

The full API reference is at rowlesmr.github.io/cifflow.


Key properties

Error-tolerant. The parser never raises on malformed input. Every structural problem produces an explicit error event; parsing continues and all recoverable data is preserved.

No silent data loss. Duplicate tag values are preserved. Tags not mapped by the dictionary go to a fallback table, not a discard pile.

Round-trip fidelity. For well-formed input, emitted CIF re-parses to the same data. All values are stored and emitted as raw strings; ValueType provenance (placeholder . and ? vs quoted equivalents) is preserved throughout.

Canonical caseless names. Block names, save frame names, and tag names are stored in Unicode canonical caseless form (NFC(casefold(NFD(x)))). Lookups are automatically casefolded: cif["ABC"] finds a block stored as "abc".

Streaming parser. The parser is event-driven. CIF source is consumed in a single pass; the IR accumulates events incrementally. The Rust extension provides high-throughput Arrow output without any Python file objects.


Installation

Prebuilt wheels are available for Python 3.10 -- 3.14 with MacOS, Windows, and Linux.

pip install cifflow

To install from source (includes the Rust extension):

git clone https://github.com/rowlesmr/cifflow.git
cd cifflow
pip install -e ".[dev]"
maturin develop

Quick start

Parse a CIF file

from cifflow import build

text = open('structure.cif', encoding='utf-8').read()
cif, errors = build(text)   # never raises; errors is a list[ParseError]

for block_name in cif.blocks:          # block names are always lowercase
    block = cif[block_name]
    print(f'{block_name}: {len(block.tags)} tags, {len(block.loops)} loops')

The best way to resolve errors is to inspect the list of errors, edit the file accordingly, and try again. No assumptions are made about how to correct errors automatically.

Full pipeline: dictionary → DuckDB → CIF

To see what is going on in the lexing, parsing, ingestion, and schema generation phases, see the inspect module.

import pathlib
from cifflow import (
    DictionaryLoader, directory_resolver,
    save_dictionary, load_dictionary,
    generate_schema,
    build, ingest, emit, EmitMode,
)
from cifflow.types import CifVersion

# 1. Load dictionary (with JSON cache to avoid re-parsing on every run)
cache = pathlib.Path('cif_pow_cache.json')
resolver = directory_resolver('data/dictionaries')
if cache.exists():
    dictionary = load_dictionary(cache)
else:
    dictionary = DictionaryLoader(resolver=resolver).load(
        open('data/dictionaries/cif_pow.dic', encoding='utf-8').read())
    save_dictionary(dictionary, cache)

# 2. Derive schema
schema = generate_schema(dictionary)

# 3. Parse CIF
cif, errors = build(open('all_the_data.cif', encoding='utf-8').read())

# # 3.5 Edit CIF - to fix errors or alter content
# writer = CifWriter(cif.version, cif)
# for block in writer.blocks:
#    # Do alterations
# cif = writer.build() # raises ValueError if any errors present

# 4. Ingest into an in-memory DuckDB database
#    Pass a file path string to persist: ingest(cif, 'output.db', schema=schema)
conn, warnings = ingest(cif, schema=schema)

# # 4.5 Generate any default values
# generate_defaults(conn, schema)

# 5. Emit CIF
output = emit(conn, schema, mode=EmitMode.ORIGINAL, version=CifVersion.CIF_2_0)
open('output.cif', 'w', encoding='utf-8').write(output)

See example_workflow.py in the repository root for a fully annotated end-to-end demonstration covering all four emission modes, type-cast export, and fidelity checking.

The full API reference is at rowlesmr.github.io/cifflow.


Architecture

Parser → Event Stream → IR → Dictionary-aware Mapping → DuckDB → Output/API
Layer Responsibility
Lexer Tokenisation, ValueType assignment
Parser Token sequence interpretation, error recovery, event emission
IR (CIFModel) Event accumulation, loop validation, multiline text transformation
Dictionary DDLm parsing, schema derivation
DuckDB Persistent storage: structured tables when a dictionary is present, fallback tier otherwise
Output Valid CIF regeneration

Layer responsibilities are strictly separated. The parser does not know about the dictionary. The dictionary does not know about the IR. The output layer only reads from DuckDB.


Status

Everything should work. Issues, suggestions, and requests gladly recieved.


Development

Run the fast test suite (excludes tests that load large real-world CIF files):

python -m pytest -m "not slow"

Run the full suite including slow tests:

python -m pytest

After modifying the Rust extension, recompile before running Python tests:

maturin develop

License

Apache 2.0. See LICENSE.

The bundled JavaScript files (viz.js 2.1.2 and svg-pan-zoom 3.6.1) used by visualise_schema_html are MIT-licensed. Licence notices are in src/cifflow/dictionary/js/LICENSES.txt.

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

cifflow-0.1.13.tar.gz (1.1 MB view details)

Uploaded Source

Built Distributions

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

cifflow-0.1.13-cp314-cp314-win_amd64.whl (1.1 MB view details)

Uploaded CPython 3.14Windows x86-64

cifflow-0.1.13-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

cifflow-0.1.13-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (1.6 MB view details)

Uploaded CPython 3.14macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

cifflow-0.1.13-cp313-cp313-win_amd64.whl (1.1 MB view details)

Uploaded CPython 3.13Windows x86-64

cifflow-0.1.13-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

cifflow-0.1.13-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (1.6 MB view details)

Uploaded CPython 3.13macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

cifflow-0.1.13-cp312-cp312-win_amd64.whl (1.1 MB view details)

Uploaded CPython 3.12Windows x86-64

cifflow-0.1.13-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

cifflow-0.1.13-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (1.6 MB view details)

Uploaded CPython 3.12macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

cifflow-0.1.13-cp311-cp311-win_amd64.whl (1.1 MB view details)

Uploaded CPython 3.11Windows x86-64

cifflow-0.1.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

cifflow-0.1.13-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (1.6 MB view details)

Uploaded CPython 3.11macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

cifflow-0.1.13-cp310-cp310-win_amd64.whl (1.1 MB view details)

Uploaded CPython 3.10Windows x86-64

cifflow-0.1.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

cifflow-0.1.13-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (1.6 MB view details)

Uploaded CPython 3.10macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

File details

Details for the file cifflow-0.1.13.tar.gz.

File metadata

  • Download URL: cifflow-0.1.13.tar.gz
  • Upload date:
  • Size: 1.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for cifflow-0.1.13.tar.gz
Algorithm Hash digest
SHA256 766225b24ce91524350881c20f3a1ee9b60c53ca64e266d7b7ab1c01b7416e9f
MD5 20122ba75c668c15c3a25582ddf460b5
BLAKE2b-256 30000bb7c47a6a69216358e3c059e33e74e339344dc63f5493e9f03de1d716c7

See more details on using hashes here.

Provenance

The following attestation bundles were made for cifflow-0.1.13.tar.gz:

Publisher: release.yml on rowlesmr/cifflow

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

File details

Details for the file cifflow-0.1.13-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: cifflow-0.1.13-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for cifflow-0.1.13-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 8a37dc2a8f5b294c292b58736aeca99e69ab57ea9ccec7d7b1dea180fba48af2
MD5 ab91209bc5d2eae3304a5ea791251e30
BLAKE2b-256 b203d68afc02284ddc819eb0b6f07ddd6b218bd8f5676154619517ccdebb8e72

See more details on using hashes here.

Provenance

The following attestation bundles were made for cifflow-0.1.13-cp314-cp314-win_amd64.whl:

Publisher: release.yml on rowlesmr/cifflow

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

File details

Details for the file cifflow-0.1.13-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cifflow-0.1.13-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 63216eb11fc6fcac29f6597f7591ee9ebba4f4a82ab423336324046f302e3fee
MD5 f71d6e9864f809439e128ed4208868ed
BLAKE2b-256 0a5990a87a9a0a8e55305b412b4b6198b1383788dfc4057e3eb04354a85f5ebf

See more details on using hashes here.

Provenance

The following attestation bundles were made for cifflow-0.1.13-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on rowlesmr/cifflow

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

File details

Details for the file cifflow-0.1.13-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for cifflow-0.1.13-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 4fb4a7296b80093704533451300bf63b048ce84f44b7235e9320d63c46851597
MD5 5905e53bb942483ae6dadb58a1c8ea4d
BLAKE2b-256 d0c89db4265610f20d8b00c6a51355f572d13783fcece2fe3f05b4792a18e3b4

See more details on using hashes here.

Provenance

The following attestation bundles were made for cifflow-0.1.13-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: release.yml on rowlesmr/cifflow

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

File details

Details for the file cifflow-0.1.13-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: cifflow-0.1.13-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for cifflow-0.1.13-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 d0c27d9078ecd1a3962b09551db932086cb685a64492e1b8cb8e611054ddaefd
MD5 08ef26122d490d891c92d8b3c43e7197
BLAKE2b-256 c5d51fa8a861a77dadbfb109c0b27c0bda51f07e72bdda38fd0f4611ababff3c

See more details on using hashes here.

Provenance

The following attestation bundles were made for cifflow-0.1.13-cp313-cp313-win_amd64.whl:

Publisher: release.yml on rowlesmr/cifflow

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

File details

Details for the file cifflow-0.1.13-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cifflow-0.1.13-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 89917ddf34396187d80907f10ef48fe48f5d6d884ee00873ff308228a58ffe56
MD5 f820a1049d86fcff5ab6d6e1a3935972
BLAKE2b-256 2eb22ea1c5174589e347a21a40bc0a049a8f7a13dd45bb366fbfdf0929bd06c5

See more details on using hashes here.

Provenance

The following attestation bundles were made for cifflow-0.1.13-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on rowlesmr/cifflow

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

File details

Details for the file cifflow-0.1.13-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for cifflow-0.1.13-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 9b18f96bf22cbb125ffac7f29f0ab39505924dd8ef249619e1e9ac4d385e9584
MD5 1d34731c3ca3963358002a0761fabc2d
BLAKE2b-256 8ffb06f84535253706193cbb0348e334682a217960c2d7f52b1d08f5c52de4be

See more details on using hashes here.

Provenance

The following attestation bundles were made for cifflow-0.1.13-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: release.yml on rowlesmr/cifflow

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

File details

Details for the file cifflow-0.1.13-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: cifflow-0.1.13-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for cifflow-0.1.13-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 ba01ca8e7acf4539c9340fe2d51c61ca6bdc248a181600889e647d28922ea037
MD5 a45b04b32cd83f61569be3cf43044089
BLAKE2b-256 b13553219c119d7dc1368583a7aa9ad88218d5c9769c1508350c1594ad158e91

See more details on using hashes here.

Provenance

The following attestation bundles were made for cifflow-0.1.13-cp312-cp312-win_amd64.whl:

Publisher: release.yml on rowlesmr/cifflow

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

File details

Details for the file cifflow-0.1.13-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cifflow-0.1.13-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8872227e89a6f79cf7f1f8ecacc0c6af1c6947f499ade24ef65bb79db8bc49c7
MD5 1e6fefda1897278ef1f666774cb04922
BLAKE2b-256 7abba3f855efe0c19da3857743b0c24e9019c667b2d1c0c6c23764c128108b27

See more details on using hashes here.

Provenance

The following attestation bundles were made for cifflow-0.1.13-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on rowlesmr/cifflow

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

File details

Details for the file cifflow-0.1.13-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for cifflow-0.1.13-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 f67ee368437dc1d0d5501dad8bfdb35b9fc307fd8114fb6241dc4096fb446c6f
MD5 9a020f3c0b5987fa268f67ed4393d5b4
BLAKE2b-256 e2e85b0bdedefe53e5315a9c46e4d682e3e9d61b6fce835e0cce1806eab4ec51

See more details on using hashes here.

Provenance

The following attestation bundles were made for cifflow-0.1.13-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: release.yml on rowlesmr/cifflow

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

File details

Details for the file cifflow-0.1.13-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: cifflow-0.1.13-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for cifflow-0.1.13-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 6e1b53d360ad7c8dd3dc627078b188bdc7ce2d966539501da3140d3a714a78c4
MD5 10f0cfb3a97e50ce69465d523be348e1
BLAKE2b-256 c3585919b22781fda004a951bc22c00e207ca952c23f3a1fd7cd89f7f951a882

See more details on using hashes here.

Provenance

The following attestation bundles were made for cifflow-0.1.13-cp311-cp311-win_amd64.whl:

Publisher: release.yml on rowlesmr/cifflow

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

File details

Details for the file cifflow-0.1.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cifflow-0.1.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d7bfb9947f35cb7ef208aa644ec7a0bef0c24dfbd9756ea9bc2385497007538a
MD5 081a440d01e52a21122e0b11dda735ed
BLAKE2b-256 392d1ce641c8c1648c83cedf101c8729b79f79dc37bacef840ee7dad4e774ec2

See more details on using hashes here.

Provenance

The following attestation bundles were made for cifflow-0.1.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on rowlesmr/cifflow

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

File details

Details for the file cifflow-0.1.13-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for cifflow-0.1.13-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 46c4d482b5ee1c0da09344ab9774a3bb0c0f60d904bb57bd48702088e4056fdb
MD5 3f9fb3ec9e151a1b74d7573160dc593d
BLAKE2b-256 0ce8dc0194b4b9d0f91f1c88f2f23fe58d6138d57b443e83b76d33fa0d9924ca

See more details on using hashes here.

Provenance

The following attestation bundles were made for cifflow-0.1.13-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: release.yml on rowlesmr/cifflow

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

File details

Details for the file cifflow-0.1.13-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: cifflow-0.1.13-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for cifflow-0.1.13-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 7f4f06ae8e0eeb8ed0c080ea028559b7327b511368a71bf12f4e717b9e3668df
MD5 8ed1263798da744097d775dcf57f5b2b
BLAKE2b-256 93d2fb9fd79248b6bdb212689f0a05fbc63e3af22c3bd619678fde5f4257de21

See more details on using hashes here.

Provenance

The following attestation bundles were made for cifflow-0.1.13-cp310-cp310-win_amd64.whl:

Publisher: release.yml on rowlesmr/cifflow

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

File details

Details for the file cifflow-0.1.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cifflow-0.1.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8cd0a27975994b9a19267d7179a25f189f5dfd3d6f8f6cd8f29ea33b497cc947
MD5 8d34f8007602d1288e9ca875607ac03e
BLAKE2b-256 24fa30c4a0aac1c9d86c1fe98ac2f2aba1d99675a4eaefe9a5e14be095bfa4ae

See more details on using hashes here.

Provenance

The following attestation bundles were made for cifflow-0.1.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on rowlesmr/cifflow

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

File details

Details for the file cifflow-0.1.13-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for cifflow-0.1.13-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 ca8140fe24b6e0c1cbc1380282b9950826aec52e7c4153266e3623bdb2be9f60
MD5 7af90dab2f591781967d7cacbaece81c
BLAKE2b-256 f2a62acdc0611d55464fcf29e928ab0e999fac479897976cfa7eb42e61029452

See more details on using hashes here.

Provenance

The following attestation bundles were made for cifflow-0.1.13-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: release.yml on rowlesmr/cifflow

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