Skip to main content

JSON Schema validation for cryowire configuration files

Project description

cryowire

cryowire

Python library and CLI for dilution refrigerator wiring configuration — data models, validation, diagram generation, and programmatic building.

Website Docs

Installation

pip install cryowire

CLI

Initialize a data project

cryowire init ./my-data

Generates .cryowire.yaml, components.yaml, and templates/ directory. Edit these to match your lab's components and standard wiring modules.

Create a new cooldown

cryowire new my-cryo --qubits 8 --chip-name "sample-8q"

Build & validate

cryowire build my-cryo/2026/cd001/     # cooldown.yaml, wiring.svg, README.md
cryowire validate my-cryo/2026/cd001/  # JSON Schema + Pydantic validation
cryowire diagram my-cryo/2026/cd001/   # wiring diagram only
cryowire summary my-cryo/2026/cd001/   # summary table

Commands

Command Description
cryowire init [dir] Initialize a new data project
cryowire new <cryo> Create a new cooldown under <cryo>/<YYYY>/cdNNN/
cryowire build <dir> Build cooldown.yaml, expand modules, generate diagram and README
cryowire validate <dir> Validate YAML against schema and Pydantic models
cryowire diagram <dir> Generate a wiring diagram (SVG/PNG)
cryowire summary <dir> Print wiring summary table

Features

Module Description
models Pydantic v2 models (Stage, Component types, WiringConfig)
validate JSON Schema validation against cryowire-spec
loader YAML loading, module expansion, component catalog
builder Programmatic cooldown generation from Python code
summary Wiring summary tables (terminal, Markdown, HTML)
diagram Publication-quality wiring diagrams (matplotlib)
cli Command-line interface (init, new, build, validate, diagram, summary)

Python API

Build a cooldown

from cryowire import (
    Amplifier, Attenuator, ChipConfig, CooldownBuilder,
    CooldownMetadata, Filter, Isolator, Stage,
)

# 1. Component catalog
catalog = {
    "XMA-10dB": Attenuator(model="XMA-2082-6431-10", value_dB=10),
    "XMA-20dB": Attenuator(model="XMA-2082-6431-20", value_dB=20),
    "Eccosorb": Filter(model="XMA-EF-03", filter_type="Eccosorb"),
    "K&L-LPF": Filter(model="K&L-5VLF", filter_type="Lowpass"),
    "RT-AMP": Amplifier(model="MITEQ-AFS3", amplifier_type="RT", gain_dB=20),
    "LNF-HEMT": Amplifier(model="LNF-LNC03_14A", amplifier_type="HEMT", gain_dB=40),
    "LNF-ISO": Isolator(model="LNF-ISC4_12A"),
}

# 2. Build cooldown (reference components by key)
cooldown = (
    CooldownBuilder(
        chip=ChipConfig(name="sample-8q", num_qubits=8, qubits_per_readout_line=4),
        metadata=CooldownMetadata(cryo="your-cryo", cooldown_id="cd001", date="2026-03-06"),
        catalog=catalog,
        control={
            Stage.K50: ["XMA-10dB"],
            Stage.K4: ["XMA-20dB"],
            Stage.MXC: ["XMA-20dB", "Eccosorb"],
        },
        readout_send={Stage.K50: ["XMA-10dB"], Stage.K4: ["XMA-10dB"]},
        readout_return={
            Stage.RT: ["RT-AMP"],
            Stage.K50: ["LNF-HEMT"],
            Stage.CP: ["LNF-ISO", "LNF-ISO"],
        },
    )
    .add("C00", Stage.STILL, "K&L-LPF")
    .remove("RR00", Stage.CP, index=1)
    .build()
)

# 3. Per-line overrides (context manager)
with cooldown.for_lines("C03", "C05") as lines:
    lines.remove(Stage.MXC, component_type=Filter)
    lines.replace(Stage.K4, 0, "XMA-10dB")

# Summary (terminal / markdown / html)
cooldown.summary()
md = cooldown.summary(fmt="markdown")

# Publication-quality SVG diagram
cooldown.diagram(output="wiring.svg", representative=True)

# Export YAML files
cooldown.write("output/")

Load & inspect an existing cooldown

from cryowire import load_cooldown, print_summary, generate_diagram

metadata, control, readout_send, readout_return = load_cooldown("path/to/cooldown")

print_summary(control, readout_send, readout_return)
generate_diagram(control, readout_send, readout_return, output="wiring.svg")

Template-based generation

from cryowire import build_cooldown

build_cooldown(
    output_dir="your-cryo/2026/cd001",
    cryo="your-cryo",
    chip_name="sample-chip",
    num_qubits=16,
)

Validate YAML files

from cryowire import validate_wiring, validate_metadata
import yaml

with open("control.yaml") as f:
    data = yaml.safe_load(f)

validate_wiring(data)      # raises jsonschema.ValidationError on failure
validate_metadata(meta)

Component Types

Class Fields Diagram Label Example
Attenuator value_dB 10 dB Attenuator(model="XMA-10dB", value_dB=10)
Filter filter_type Lowpass / FLT Filter(model="K&L", filter_type="Lowpass")
Isolator ISO Isolator(model="LNF-ISC4_12A")
Amplifier amplifier_type, gain_dB +40 dB Amplifier(model="HEMT", gain_dB=40)

All components share model and serial fields, and expose label, summary_label, attenuation, gain properties.

Schemas

This package bundles JSON Schema files from cryowire-spec:

Schema Function Validates
wiring.schema.json validate_wiring() control.yaml, readout_send.yaml, readout_return.yaml
metadata.schema.json validate_metadata() metadata.yaml
components.schema.json validate_components() components.yaml
chip.schema.json validate_chip() chip.yaml

Documentation

Full documentation is available at cryowire.github.io/cryowire.

Examples

A Jupyter notebook tutorial is available in the examples/notebooks/ directory.

pip install cryowire jupyter
jupyter notebook examples/notebooks/tutorial.ipynb

The notebook covers builder usage, summary tables, SVG diagram rendering, and component add/remove/replace operations.

Try it online in the Playground — no installation required.

Development

uv sync
uv run pytest

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

cryowire-0.0.5.tar.gz (522.2 kB view details)

Uploaded Source

Built Distribution

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

cryowire-0.0.5-py3-none-any.whl (44.7 kB view details)

Uploaded Python 3

File details

Details for the file cryowire-0.0.5.tar.gz.

File metadata

  • Download URL: cryowire-0.0.5.tar.gz
  • Upload date:
  • Size: 522.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for cryowire-0.0.5.tar.gz
Algorithm Hash digest
SHA256 248820198beaf93ab5719e5b7d42a1c1a93255fb0fcd915dc2593ad537df4f50
MD5 01a98572b75aacf2c3186201bed83118
BLAKE2b-256 9b59e3035b07ef836a162c5173b5efd274e6a4f9a2b9acaea62c534c869f038c

See more details on using hashes here.

Provenance

The following attestation bundles were made for cryowire-0.0.5.tar.gz:

Publisher: publish.yml on cryowire/cryowire

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

File details

Details for the file cryowire-0.0.5-py3-none-any.whl.

File metadata

  • Download URL: cryowire-0.0.5-py3-none-any.whl
  • Upload date:
  • Size: 44.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for cryowire-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 d78e9d175b0caeebc95fd7f3ce8bd155cb78d26f85981aeb6e2308af7a55b620
MD5 9099c69f84e4555b8bd1ed1bf08ef7d3
BLAKE2b-256 f1261e2d0e0104d9984e3bae808ae61c603fedc048e430fce1c2fd5af6d31868

See more details on using hashes here.

Provenance

The following attestation bundles were made for cryowire-0.0.5-py3-none-any.whl:

Publisher: publish.yml on cryowire/cryowire

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