loom.eka.ifelse_circuit
Copyright (c) Entropica Labs Pte Ltd 2025.
Use, distribution and reproduction of this program in its source or compiled form is prohibited without the express written consent of Entropica Labs Pte Ltd.
- class loom.eka.ifelse_circuit.IfElseCircuit(*args, **kwargs)[source]
Bases:
CircuitBranching circuit: executes if_circuit or else_circuit depending on some classical condition circuit.
- channels: tuple[Channel, ...] = FieldInfo(annotation=tuple[Channel, ...], required=False, default_factory=tuple, init=False)
- circuit: tuple[tuple[Circuit, ...], ...] = FieldInfo(annotation=tuple[tuple[Circuit, ...], ...], required=False, default_factory=tuple, init=False)
- condition_circuit: Circuit | None = FieldInfo(annotation=Union[Circuit, NoneType], required=False, default_factory=<lambda>, validate_default=True)
- else_circuit: Circuit | None = FieldInfo(annotation=Union[Circuit, NoneType], required=False, default_factory=<lambda>, validate_default=True)
- flatten()[source]
Flatten the IfElseCircuit by flattening its branches and condition circuit.
- Return type:
- id: str = FieldInfo(annotation=str, required=False, default_factory=<lambda>)
- if_circuit: Circuit | None = FieldInfo(annotation=Union[Circuit, NoneType], required=False, default_factory=<lambda>, validate_default=True)
- property is_condition_single_bit: bool
Check if the condition circuit is a single-bit condition.
- property is_single_gate_conditioned: bool
Whether this is just a single gate conditioned by a classical condition.
- name: str = 'if-else_circuit'
- classmethod unroll(input_circuit)[source]
Unrolls the circuits within the time slices using a Depth First Search algorithm until the final sequence is composed of only base gates. This method preserves the time structure of the circuit (unlike flatten). Note that this method returns the unrolled circuit sequence, not a new Circuit.
- Returns:
The unrolled circuit time sequence
- Return type:
tuple[tuple[Circuit, …], …]