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: Circuit

Branching circuit: executes if_circuit or else_circuit depending on some classical condition circuit.

classmethod as_gate()[source]

Represent IfElseCircuit as a gate.

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)
circuit_seq()[source]

Returns the sequence of sub-circuits in the circuit field.

condition_circuit: Circuit | None = FieldInfo(annotation=Union[Circuit, NoneType], required=False, default_factory=<lambda>, validate_default=True)
static construct_padded_circuit_time_sequence()[source]

Construct a padded circuit time sequence.

detailed_str()[source]

Return a detailed string representation of the circuit.

Return type:

str

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:

IfElseCircuit

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, …], …]

classmethod validate_circuit_branches(circuit)[source]

Assign default empty Circuit if None, and wrap base gates into Circuit if needed.

Return type:

Circuit

classmethod validate_condition_circuit(value)[source]

Provide a default condition circuit if none is provided. Otherwise, check if the condition circuit is classical. Throw an error if that is not the case.

Return type:

Circuit