IfElseOp#

class qiskit.circuit.IfElseOp(condition, true_body, false_body=None, label=None)[source]#

Bases : ControlFlowOp

A circuit operation which executes a program (true_body) if a provided condition (condition) evaluates to true, and optionally evaluates another program (false_body) otherwise.

ParamĂštres:
  • condition (tuple[ClassicalRegister, int] | tuple[Clbit, int] | expr.Expr) – A condition to be evaluated at circuit runtime which, if true, will trigger the evaluation of true_body. Can be specified as either a tuple of a ClassicalRegister to be tested for equality with a given int, or as a tuple of a Clbit to be compared to either a bool or an int.

  • true_body (QuantumCircuit) – A program to be executed if condition evaluates to true.

  • false_body (QuantumCircuit | None) – A optional program to be executed if condition evaluates to false.

  • label (str | None) – An optional label for identifying the instruction.

If provided, false_body must be of the same num_qubits and num_clbits as true_body.

The classical bits used in condition must be a subset of those attached to the circuit on which this IfElseOp will be appended.

Circuit symbol:

     ┌───────────┐
q_0: ─0          ├
     │           │
q_1: ─1          ├
     │  if_else  │
q_2: ─2          ├
     │           │
c_0: ╡0          ╞
     └───────────┘

Create a new instruction.

ParamĂštres:
  • name (str) – instruction name

  • num_qubits (int) – instruction’s qubit width

  • num_clbits (int) – instruction’s clbit width

  • params (list[int|float|complex|str|ndarray|list|ParameterExpression]) – list of parameters

  • duration (int or float) – instruction’s duration. it must be integer if unit is “dt”

  • unit (str) – time unit of duration

  • label (str or None) – An optional label for identifying the instruction.

LĂšve:
  • CircuitError – when the register is not in the correct format.

  • TypeError – when the optional label is provided, but it is not a string.

Attributes

blocks#
condition_bits#

Get Clbits in condition.

decompositions#

Get the decompositions of the instruction from the SessionEquivalenceLibrary.

definition#

Return definition in terms of other basic gates.

duration#

Get the duration.

label#

Return instruction label

name#

Return the name.

num_clbits#

Return the number of clbits.

num_qubits#

Return the number of qubits.

params#
unit#

Get the time unit of duration.

Methods

add_decomposition(decomposition)#

Add a decomposition of the instruction to the SessionEquivalenceLibrary.

assemble()#

Assemble a QasmQobjInstruction

broadcast_arguments(qargs, cargs)#

Validation of the arguments.

ParamĂštres:
  • qargs (List) – List of quantum bit arguments.

  • cargs (List) – List of classical bit arguments.

Yields:

Tuple(List, List) – A tuple with single arguments.

LĂšve:

CircuitError – If the input is not valid. For example, the number of arguments does not match the gate expectation.

c_if(classical, val)[source]#

Set a classical equality condition on this instruction between the register or cbit classical and value val.

Note

This is a setter method, not an additive one. Calling this multiple times will silently override any previously set condition; it does not stack.

copy(name=None)#

Copy of the instruction.

ParamĂštres:

name (str) – name to be given to the copied circuit, if None then the name stays the same.

Renvoie:

a copy of the current instruction, with the name updated if it was provided

Type renvoyé:

qiskit.circuit.Instruction

inverse()#

Invert this instruction.

If the instruction is composite (i.e. has a definition), then its definition will be recursively inverted.

Special instructions inheriting from Instruction can implement their own inverse (e.g. T and Tdg, Barrier, etc.)

Renvoie:

a fresh instruction for the inverse

Type renvoyé:

qiskit.circuit.Instruction

LĂšve:

CircuitError – if the instruction is not composite and an inverse has not been implemented for it.

is_parameterized()#

Return True .IFF. instruction is parameterized else False

qasm()#

Return a default OpenQASM string for the instruction.

Derived instructions may override this to print in a different format (e.g. measure q[0] -> c[0];).

ObsolĂšte depuis la version 0.25.0: The method qiskit.circuit.instruction.Instruction.qasm() is deprecated as of qiskit-terra 0.25.0. It will be removed no earlier than 3 months after the release date. Correct exporting to OpenQASM 2 is the responsibility of a larger exporter; it cannot safely be done on an object-by-object basis without context. No replacement will be provided, because the premise is wrong.

repeat(n)#

Creates an instruction with gate repeated n amount of times.

ParamĂštres:

n (int) – Number of times to repeat the instruction

Renvoie:

Containing the definition.

Type renvoyé:

qiskit.circuit.Instruction

LĂšve:

CircuitError – If n < 1.

replace_blocks(blocks)[source]#

Replace blocks and return new instruction.

ParamĂštres:

blocks (Iterable[QuantumCircuit]) – Iterable of circuits for « if » and « else » condition. If there is no « else » circuit it may be set to None or omitted.

Renvoie:

New IfElseOp with replaced blocks.

Type renvoyé:

IfElseOp

reverse_ops()#

For a composite instruction, reverse the order of sub-instructions.

This is done by recursively reversing all sub-instructions. It does not invert any gate.

Renvoie:

a new instruction with

sub-instructions reversed.

Type renvoyé:

qiskit.circuit.Instruction

soft_compare(other)#

Soft comparison between gates. Their names, number of qubits, and classical bit numbers must match. The number of parameters must match. Each parameter is compared. If one is a ParameterExpression then it is not taken into account.

ParamĂštres:

other (instruction) – other instruction.

Renvoie:

are self and other equal up to parameter expressions.

Type renvoyé:

bool

validate_parameter(parameter)#

Instruction parameters has no validation or normalization.