GateWrapEnvironment#

class GateWrapEnvironment(name=None)[source]#

This environment allows to hide complexity in the circuit visualisation. Operations appended inside this environment are bundled into a single Instruction object.

The functionality of this Quantum Environments can also be used with the gate_wrap decorator.

After compiling, the wrapped instruction can be retrieved using the .instruction attribute.

Parameters
namestring, optional

The name of the resulting gate. The default is None.

Examples

We create some QuantumVariable and execute some gates inside a GateWrapEnvironment:

from qrisp import QuantumVariable, GateWrapEnvironment, x, y, z

qv = QuantumVariable(3)

gwe = GateWrapEnvironment("example")

with gwe:
    x(qv[0])
    y(qv[1])

z(qv[2])
>>> print(qv.qs)
QuantumCircuit:
--------------
      ┌──────────┐
qv.0: ┤0         ├
      │  example │
qv.1: ┤1         ├
      └──┬───┬───┘
qv.2: ───┤ Z ├────
         └───┘
Live QuantumVariables:
---------------------
QuantumVariable qv

We can access the instruction, which has been appended using the .instruction attribute:

>>> instruction = gwe.instruction
>>> print(instruction.op.definition)
       ┌───┐
qb_41: ┤ X ├
       ├───┤
qb_42: ┤ Y ├
       └───┘

Using the gate_wrap decorator we can quickly gate wrap functions:

from qrisp import gate_wrap

@gate_wrap
def example_function(qv):
    x(qv[0])
    y(qv[1])
    z(qv[2])

example_function(qv)
>>> print(qv.qs)
QuantumCircuit:
--------------
      ┌──────────┐┌───────────────────┐
qv.0: ┤0         ├┤0                  ├
      │  example ││                   │
qv.1: ┤1         ├┤1 example_function ├
      └──┬───┬───┘│                   │
qv.2: ───┤ Z ├────┤2                  ├
         └───┘    └───────────────────┘
Live QuantumVariables:
---------------------
QuantumVariable qv