clifft-cirq converts parameter-resolved qubit cirq.Circuit instances into
Clifft circuit text and provides a small Cirq-style sampler facade on top of
Clifft. Parameter-resolved means the circuit has no symbolic parameters left,
for example after cirq.resolve_parameters.
See Clifft's Circuit Inputs guide for how this adapter fits with other Clifft input paths.
pip install clifft-cirqimport cirq
import clifft_cirq
q0, q1 = cirq.LineQubit.range(2)
circuit = cirq.Circuit(
cirq.H(q0),
cirq.CNOT(q0, q1),
cirq.measure(q0, q1, key="m"),
)
converted = clifft_cirq.to_clifft_text(circuit)
print(converted.clifft_text)
sampler = clifft_cirq.ClifftSampler(seed=123)
result = sampler.run(circuit, repetitions=1000)The converter returns:
clifft_text: text accepted by Clifft's parser.qubit_map: the deterministic mapping from Cirq qubits to Clifft integer qubits.measurement_map: measurement-key metadata used to rebuild acirq.Result.
- Qubit circuits with parameter-resolved operations.
- Sampling behavior and measurement distributions up to unconditional global phase.
- Mid-circuit measurements and resets.
- Measurement keys that appear once each.
- Common one-, two-, and three-qubit gates, including
H, Pauli gates, special-angle axis powers,CX,CZ,SWAP,ISWAP,CH,CCX,CCZ, and Clifft half-turn rotations such asR_XandR_ZZ. - Operations that Cirq can decompose into supported operations.
The converter uses rotations instead of same-named Clifft sqrt gates when
Clifft and Cirq conventions differ. Unsupported operations raise
UnsupportedCirqOperationError with the failing operation.
- Qudits.
- Unresolved symbolic parameters at the
to_clifft_textboundary. - Repeated measurement keys, such as
cirq.measure(q0, key="m")followed bycirq.measure(q1, key="m"). - Arbitrary classical control.
- Measurement confusion maps.
- Cirq noise channels.
- Device, timing, calibration, duration, and tag semantics.
- Stochastic noise, leakage, loss, and other noncomputational models.
uv sync --group dev
uv run pytest
uv run ruff check .
uv run ruff format --check .The package depends on clifft>=0.8 and uses its symbolic compiler and sampler
APIs. CI should keep testing both the Cirq floor and the latest allowed
cirq-core<2 range.