qrunch.quantum.circuits.universal_gate_circuits

Module implementing a circuit that only accepts universal gates.

Classes

CliffordCircuit

CliffordCircuit class for representing quantum circuits consisting only of Clifford gates.

UniversalGateCircuit

UniversalGateCircuit class for representing quantum circuits consisting only of universal gates.

class CliffordCircuit

Bases: Circuit

CliffordCircuit class for representing quantum circuits consisting only of Clifford gates.

The universal gates are CX, H, X, Y, Z, S, Sdg, and global phase.

print can be used to print a diagram of the circuit which preserves the appending order and indices of the gates.

__init__(**kwds)

Helper for @overload to raise when called.

classmethod allowed_gates() tuple[type[Gate], ...]

Gates allowed on the universal gate circuit.

Return type:

tuple[type[Gate], …]

append(gate: Gate) None

Append gate to the end of the circuit.

Parameters:

gate (Gate) – The gate to be appended to the end of the circuit.

Raises:
  • IndexError – When the gate acts on qubits which are not included in the circuit.

  • ValueError – When the name of a gate parameter is already taken by a different parameter in the circuit.

Return type:

None

as_gate(name: str) GateFactory

Return the circuit as a single gate.

Creates a gate function that will apply the circuit as a single gate. The function takes qubit indices as arguments, maps this circuit’s qubits to the new indices, and creates a gate with the new indices.

Parameters:

name (str) – Name of the gate.

Return type:

GateFactory

count_gates() dict[str, int]

Count the number of all gate types in circuit.

Returns:

Dictionary between string representing gate, e.g., X or CX and the gate count.

Return type:

dict[str, int]

classmethod decode(data: dict[str, Any]) Self

Decode a dictionary.

Parameters:

data (dict[str, Any]) – The dictionary representation.

Return type:

Self

encode() dict[str, Any]

Encode the instance into a dictionary.

Return type:

dict[str, Any]

extend(other: Self | Iterable[Gate]) None

Extend self with other by concatenating other to the right of self.

other can be either a circuit or list containing the gates to be appended on self.

Parameters:

other (Self | Iterable[Gate]) – CircuitBase or list of gates to extend with.

Raises:

ValueError – If other is a circuit, and the two circuits do not have the same number of qubits.

Return type:

None

get_parameters() list[Parameter]

Return all unspecified gate parameters present in the circuit.

Returns:

List of unspecified parameters.

Return type:

list[Parameter]

inactive_qubits() set[int]

Return a set of inactive qubits, that is qubits without any gates.

Return type:

set[int]

is_fully_specified() bool

Check if the circuit is fully specified, i.e., whether all parameters have been set.

Returns:

True if circuit is fully specified.

Return type:

bool

property num_gates: int

Number of gates in the circuit.

property num_parameters: int

Number of unspecified gate parameters.

property num_qubits: int

Number of qubits for the circuit to operate on.

sorted_inactive_qubits() tuple[int, ...]

Return the inactive qubits in a sequence of gates, sorted, as a tuple.

Return type:

tuple[int, …]

to_string(*, compact: bool = False, max_character_width: int = 120, max_number_of_decimals: int | None = None, qubit_label_prefix: str = 'q') str

Convert the circuit to a nicely formatted string representation which can be printed.

Parameters:
  • compact (bool) – If True, gates are allowed change order compared to the original order. Defaults to False.

  • max_character_width (int) – Maximum number of characters for each line in the circuit print. Must be at least 50.

  • max_number_of_decimals (int | None) – Maximum number of decimals to use for floats in the circuit. Defaults to None.

  • qubit_label_prefix (str) – Prefix for the qubit labels. Defaults to “q”.

Return type:

str

with_specified_parameters(parameter_value_pairs: dict[Parameter, float] | dict[str, float]) Self

Update the given parameters with the given values in the dictionary.

The parameters can be parsed through the parameter object or the name.

Parameters:

parameter_value_pairs (dict[Parameter, float] | dict[str, float]) – Dictionary containing the parameters or name of parameters and values to be set.

Raises:

ValueError – If a parameter or parameter name is not present in the circuit.

Returns:

New circuit equivalent to the original circuit but with the parameters specified.

Return type:

CircuitBase

class UniversalGateCircuit

Bases: Circuit

UniversalGateCircuit class for representing quantum circuits consisting only of universal gates.

The universal gates are Rx, Ry, Rz, CX, and P.

print can be used to print a diagram of the circuit which preserves the appending order and indices of the gates.

__init__(**kwds)

Helper for @overload to raise when called.

classmethod allowed_gates() tuple[type[Gate], ...]

Gates allowed on the universal gate circuit.

Return type:

tuple[type[Gate], …]

append(gate: Gate) None

Append gate to the end of the circuit.

Parameters:

gate (Gate) – The gate to be appended to the end of the circuit.

Raises:
  • IndexError – When the gate acts on qubits which are not included in the circuit.

  • ValueError – When the name of a gate parameter is already taken by a different parameter in the circuit.

Return type:

None

as_gate(name: str) GateFactory

Return the circuit as a single gate.

Creates a gate function that will apply the circuit as a single gate. The function takes qubit indices as arguments, maps this circuit’s qubits to the new indices, and creates a gate with the new indices.

Parameters:

name (str) – Name of the gate.

Return type:

GateFactory

count_gates() dict[str, int]

Count the number of all gate types in circuit.

Returns:

Dictionary between string representing gate, e.g., X or CX and the gate count.

Return type:

dict[str, int]

classmethod decode(data: dict[str, Any]) Self

Decode a dictionary.

Parameters:

data (dict[str, Any]) – The dictionary representation.

Return type:

Self

encode() dict[str, Any]

Encode the instance into a dictionary.

Return type:

dict[str, Any]

extend(other: Self | Iterable[Gate]) None

Extend self with other by concatenating other to the right of self.

other can be either a circuit or list containing the gates to be appended on self.

Parameters:

other (Self | Iterable[Gate]) – CircuitBase or list of gates to extend with.

Raises:

ValueError – If other is a circuit, and the two circuits do not have the same number of qubits.

Return type:

None

get_parameters() list[Parameter]

Return all unspecified gate parameters present in the circuit.

Returns:

List of unspecified parameters.

Return type:

list[Parameter]

inactive_qubits() set[int]

Return a set of inactive qubits, that is qubits without any gates.

Return type:

set[int]

is_fully_specified() bool

Check if the circuit is fully specified, i.e., whether all parameters have been set.

Returns:

True if circuit is fully specified.

Return type:

bool

property num_gates: int

Number of gates in the circuit.

property num_parameters: int

Number of unspecified gate parameters.

property num_qubits: int

Number of qubits for the circuit to operate on.

sorted_inactive_qubits() tuple[int, ...]

Return the inactive qubits in a sequence of gates, sorted, as a tuple.

Return type:

tuple[int, …]

to_string(*, compact: bool = False, max_character_width: int = 120, max_number_of_decimals: int | None = None, qubit_label_prefix: str = 'q') str

Convert the circuit to a nicely formatted string representation which can be printed.

Parameters:
  • compact (bool) – If True, gates are allowed change order compared to the original order. Defaults to False.

  • max_character_width (int) – Maximum number of characters for each line in the circuit print. Must be at least 50.

  • max_number_of_decimals (int | None) – Maximum number of decimals to use for floats in the circuit. Defaults to None.

  • qubit_label_prefix (str) – Prefix for the qubit labels. Defaults to “q”.

Return type:

str

with_specified_parameters(parameter_value_pairs: dict[Parameter, float] | dict[str, float]) Self

Update the given parameters with the given values in the dictionary.

The parameters can be parsed through the parameter object or the name.

Parameters:

parameter_value_pairs (dict[Parameter, float] | dict[str, float]) – Dictionary containing the parameters or name of parameters and values to be set.

Raises:

ValueError – If a parameter or parameter name is not present in the circuit.

Returns:

New circuit equivalent to the original circuit but with the parameters specified.

Return type:

CircuitBase