UnitaryGate#

class qiskit.extensions.UnitaryGate(data, label=None)[source]#

Bases: `Gate`

Class quantum gates specified by a unitary matrix.

Example

We can create a unitary gate from a unitary matrix then add it to a quantum circuit. The matrix can also be directly applied to the quantum circuit, see `QuantumCircuit.unitary()`.

```from qiskit import QuantumCircuit
from qiskit.extensions import UnitaryGate

matrix = [[0, 0, 0, 1],
[0, 0, 1, 0],
[1, 0, 0, 0],
[0, 1, 0, 0]]
gate = UnitaryGate(matrix)

circuit = QuantumCircuit(2)
circuit.append(gate, [0, 1])
```

Create a gate from a numeric unitary matrix.

Parameters:
• data (matrix or Operator) â€“ unitary operator.

• label (str) â€“ unitary name for backend [Default: None].

Raises:

ExtensionError â€“ if input data is not an N-qubit unitary operator.

Attributes

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#

return instruction params.

unit#

Get the time unit of duration.

Methods

Add a decomposition of the instruction to the SessionEquivalenceLibrary.

Return the adjoint of the unitary.

assemble()#

Assemble a QasmQobjInstruction

Validation and handling of the arguments and its relationship.

For example, `cx([q[0],q[1]], q[2])` means `cx(q[0], q[2]); cx(q[1], q[2])`. This method yields the arguments in the right grouping. In the given example:

```in: [[q[0],q[1]], q[2]],[]
outs: [q[0], q[2]], []
[q[1], q[2]], []
```

• If len(qargs) == 1:

```[q[0], q[1]] -> [q[0]],[q[1]]
```
• If len(qargs) == 2:

```[[q[0], q[1]], [r[0], r[1]]] -> [q[0], r[0]], [q[1], r[1]]
[[q[0]], [r[0], r[1]]]       -> [q[0], r[0]], [q[0], r[1]]
[[q[0], q[1]], [r[0]]]       -> [q[0], r[0]], [q[1], r[0]]
```
• If len(qargs) >= 3:

```[q[0], q[1]], [r[0], r[1]],  ...] -> [q[0], r[0], ...], [q[1], r[1], ...]
```
Parameters:
• qargs (list) â€“ List of quantum bit arguments.

• cargs (list) â€“ List of classical bit arguments.

Returns:

A tuple with single arguments.

Raises:

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

Return type:
c_if(classical, val)#

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.

conjugate()[source]#

Return the conjugate of the unitary.

control(num_ctrl_qubits=1, label=None, ctrl_state=None)[source]#

Return controlled version of gate

Parameters:
• num_ctrl_qubits (int) â€“ number of controls to add to gate (default=1)

• label (str) â€“ optional gate label

• ctrl_state (int or str or None) â€“ The control state in decimal or as a bit string (e.g. â€˜1011â€™). If None, use 2**num_ctrl_qubits-1.

Returns:

controlled version of gate.

Return type:

UnitaryGate

Raises:
copy(name=None)#

Copy of the instruction.

Parameters:

name (str) â€“ name to be given to the copied circuit, if `None` then the name stays the same.

Returns:

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

Return type:

qiskit.circuit.Instruction

inverse()[source]#

Return the adjoint of the unitary.

is_parameterized()#

Return True .IFF. instruction is parameterized else False

power(exponent)#

Creates a unitary gate as gate^exponent.

Parameters:

exponent (float) â€“ Gate^exponent

Returns:

To which to_matrix is self.to_matrix^exponent.

Return type:

qiskit.extensions.UnitaryGate

Raises:

CircuitError â€“ If Gate is not unitary

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];).

Deprecated since 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.

Parameters:

n (int) â€“ Number of times to repeat the instruction

Returns:

Containing the definition.

Return type:

qiskit.circuit.Instruction

Raises:

CircuitError â€“ If n < 1.

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.

Returns:

a new instruction with

sub-instructions reversed.

Return type:

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.

Parameters:

other (instruction) â€“ other instruction.

Returns:

are self and other equal up to parameter expressions.

Return type:

bool

to_matrix()#

Return a Numpy.array for the gate unitary matrix.

Returns:

if the Gate subclass has a matrix definition.

Return type:

np.ndarray

Raises:

CircuitError â€“ If a Gate subclass does not implement this method an exception will be raised when this base class method is called.

transpose()[source]#

Return the transpose of the unitary.

validate_parameter(parameter)[source]#

Unitary gate parameter has to be an ndarray.