Lesson 2b: Writing Workers (Guppy)

Important

This is an alternative lesson to Lesson 2a. It uses Guppy to construct the quantum computation.

In Lesson 2a you wrote a worker that constructs a symbolic quantum circuit and running it on a simulator. In this example we’re going to extend your “my_example_worker” with Guppy functions.

  1. Define a simple parametric Guppy program

  2. Provide parameters at runtime

Note

Guppy is a programming language for Quantum Computers. All code in a Guppy program will be executed in coherence time on the controller. Since it is embedded in Python, we can use the same worker mechanism as before.

Lesson 3 will proceed with the pytket functionality, so you may skip ahead.

Prerequisite

We’re going to extend the existing worker so we assume you have run the prerequisites from before.

As a reminder this was (see 2a):

uv init
uv add tierkreis pytket pytket-qiskit sympy ruff
uv run tkr project init
uv run tkr init worker -n my_example_worker

We’re adding the dependencies for Guppy:

uv add guppylang hugr

Defining the tasks

As before we assume your implementing impl.py of your previously defined worker

# The worker is added here for validity of the example
from tierkreis import Worker

worker = Worker("my_example_worker")
...  # Your previous tasks will be here
Ellipsis

In Guppy, you write programs by using the @guppy annotation and then calling compile. You can do the same from inside a worker function, here we will dynamically construct a n-qubit GHZ state.

from guppylang import comptime, guppy
from guppylang.std.builtins import array, result
from guppylang.std.quantum import cx, h, measure_array, qubit
from hugr.package import Package


@worker.task()
def ghz(size: int) -> Package:
    n = guppy.nat_var("n")

    @guppy
    def build_ghz_state(q: array[qubit, n]) -> None:  # type: ignore
        h(q[0])
        for i in range(n - 1):  # type: ignore
            cx(q[i], q[i + 1])

    @guppy
    def main() -> None:
        q = array(qubit() for _ in range(comptime(size)))  # type: ignore
        build_ghz_state(q)

        result("c", measure_array(q))

    return main.compile()

As before you can provide inputs to the function.

Important

You must call compile() on the main function you wish to run as a task. This will generate a serilaized version of the program (a Hugr), which can be used as value in Tierkreis. The corresponding type is hugr.Package.

Generating stubs

As before generate the api from the cli

uv run tkr init stubs

Using the tasks

Now you can use the newly declared tasks in a graph similar to how you used the builtin functionality or other tasks. You have to import the task API from the worker first which you then can use with a task node. First we declare the graph

# Constructing, put into graphs/main.py
from tierkreis.builder import Graph
from tierkreis.controller.data.models import TKR


graph = Graph(TKR[int], TKR[Package])

and then add the tasks:

# Constructing, put into graphs/main.py
from my_example_worker import ghz  # noqa: F811

program = graph.task(ghz(graph.inputs))
workflow = graph.finish_with_outputs(program)  # type: ignore

Running the graph

As before you know can run the graph, the circuit we have defined already above. The result is an binary represantion of the program.

# Running, put into graphs/main.py
from uuid import UUID


from tierkreis.controller import run_graph
from tierkreis.executor import ShellExecutor
from tierkreis.storage import FileStorage, read_outputs


storage = FileStorage(workflow_id=UUID(int=12347), name="Guppy example graph")
storage.clean_graph_files()
executor = ShellExecutor(registry_path=None, workflow_dir=storage.workflow_dir)
run_graph(storage, executor, workflow, 3)  # single import
output = read_outputs(workflow, storage)
print(output)
Package(modules=[Hugr(module_root=Node(0), entrypoint=Node(1), _nodes=[NodeData(op=Module(), parent=None, metadata=NodeMetadata({'name': '__main__', 'core.used_extensions': [{'name': 'collections.borrow_arr', 'version': '0.2.0'}, {'name': 'prelude', 'version': '0.2.1'}, {'name': 'arithmetic.int.types', 'version': '0.1.0'}, {'name': 'tket.quantum', 'version': '0.2.1'}, {'name': 'arithmetic.conversions', 'version': '0.1.0'}, {'name': 'arithmetic.int', 'version': '0.1.0'}, {'name': 'tket.bool', 'version': '0.2.0'}, {'name': 'collections.array', 'version': '0.1.1'}, {'name': 'tket.result', 'version': '0.2.0'}, {'name': 'tket.guppy', 'version': '0.2.0'}, {'name': 'arithmetic.float.types', 'version': '0.1.0'}, {'name': 'tket.rotation', 'version': '0.2.0'}], 'core.generator': {'name': 'guppylang (guppylang-internals-v0.36.1)', 'version': '0.21.16'}})), NodeData(op=FuncDefn(f_name='tkr_my_example_worker_impl.impl.ghz.<locals>.main', inputs=[], params=[], visibility='Public'), parent=Node(0), metadata=NodeMetadata({'unitary': 0})), NodeData(op=Input(types=[]), parent=Node(1), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(1), metadata=NodeMetadata({})), NodeData(op=CFG(inputs=[]), parent=Node(1), metadata=NodeMetadata({})), NodeData(op=DataflowBlock(inputs=[], _sum=Unit), parent=Node(4), metadata=NodeMetadata({})), NodeData(op=Input(types=[]), parent=Node(5), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(5), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='new_all_borrowed', signature=OpDefSig(poly_func=PolyFuncType(params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], body=FunctionType([], [ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=None)), TypeTypeArg(ty=$1)])])), binary=False), description='Create a new borrow array that contains no elements', misc={}), signature=FunctionType([], [ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[BoundedNatArg(n=3), TypeTypeArg(ty=Qubit)])]), args=[BoundedNatArg(n=3), TypeTypeArg(ty=Qubit)]), parent=Node(5), metadata=NodeMetadata({})), NodeData(op=Const(0), parent=Node(5), metadata=NodeMetadata({})), NodeData(op=LoadConst(int<6>), parent=Node(5), metadata=NodeMetadata({})), NodeData(op=Call(signature=PolyFuncType(params=[BoundedNatArg(n=3)], body=FunctionType([], [Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))])), instantiation=FunctionType([], [Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))]), type_args=[BoundedNatArg(n=3)]), parent=Node(5), metadata=NodeMetadata({})), NodeData(op=UnpackTuple([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(5), metadata=NodeMetadata({})), NodeData(op=MakeTuple([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(5), metadata=NodeMetadata({})), NodeData(op=TailLoop(just_inputs=[Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))], rest=[ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[BoundedNatArg(n=3), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(5), metadata=NodeMetadata({})), NodeData(op=Input(types=[Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])), ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[BoundedNatArg(n=3), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(14), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(14), metadata=NodeMetadata({})), NodeData(op=UnpackTuple([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(14), metadata=NodeMetadata({})), NodeData(op=MakeTuple([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(14), metadata=NodeMetadata({})), NodeData(op=Call(signature=PolyFuncType(params=[], body=FunctionType([Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))], [Option(Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))))])), instantiation=FunctionType([Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))], [Option(Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))))]), type_args=[]), parent=Node(14), metadata=NodeMetadata({})), NodeData(op=Conditional(sum_ty=Option(Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])))), other_inputs=[ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[BoundedNatArg(n=3), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(14), metadata=NodeMetadata({})), NodeData(op=Case(inputs=[ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[BoundedNatArg(n=3), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(20), metadata=NodeMetadata({})), NodeData(op=Input(types=[ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[BoundedNatArg(n=3), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(21), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(21), metadata=NodeMetadata({})), NodeData(op=Right([Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))], []), parent=Node(21), metadata=NodeMetadata({})), NodeData(op=Case(inputs=[Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))), ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[BoundedNatArg(n=3), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(20), metadata=NodeMetadata({})), NodeData(op=Input(types=[Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))), ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[BoundedNatArg(n=3), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(25), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(25), metadata=NodeMetadata({})), NodeData(op=UnpackTuple([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))]), parent=Node(25), metadata=NodeMetadata({})), NodeData(op=UnpackTuple([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(25), metadata=NodeMetadata({})), NodeData(op=MakeTuple([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(25), metadata=NodeMetadata({})), NodeData(op=MakeTuple([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))]), parent=Node(25), metadata=NodeMetadata({})), NodeData(op=UnpackTuple([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))]), parent=Node(25), metadata=NodeMetadata({})), NodeData(op=Left([Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))], []), parent=Node(25), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='QAlloc', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([], [Qubit])), binary=False), description='QAlloc', misc={'commutation': []}), signature=FunctionType([], [Qubit]), args=[]), parent=Node(25), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='itousize', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], [USize])), binary=False), description='convert a 64b unsigned integer to its usize representation', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], [ExtType(type_def=TypeDef(name='usize', description='usize', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])]), args=[]), parent=Node(25), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='return', signature=OpDefSig(poly_func=PolyFuncType(params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], body=FunctionType([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=None)), TypeTypeArg(ty=$1)]), USize, $1], [ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=None)), TypeTypeArg(ty=$1)])])), binary=False), description='Put an element into a borrow array (panicking if there is an element already)', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[BoundedNatArg(n=3), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='usize', description='usize', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]), Qubit], [ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[BoundedNatArg(n=3), TypeTypeArg(ty=Qubit)])]), args=[BoundedNatArg(n=3), TypeTypeArg(ty=Qubit)]), parent=Node(25), metadata=NodeMetadata({})), NodeData(op=Const(1), parent=Node(25), metadata=NodeMetadata({})), NodeData(op=LoadConst(int<6>), parent=Node(25), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='iadd', signature=OpDefSig(poly_func=PolyFuncType(params=[BoundedNatParam(upper_bound=7)], body=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=7))]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=7))])], [ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=7))])])), binary=False), description='addition modulo 2^N (signed and unsigned versions are the same op)', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], [ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), args=[BoundedNatArg(n=6)]), parent=Node(25), metadata=NodeMetadata({})), NodeData(op=Call(signature=PolyFuncType(params=[BoundedNatArg(n=3)], body=FunctionType([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[BoundedNatArg(n=3), TypeTypeArg(ty=Qubit)])], [ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[BoundedNatArg(n=3), TypeTypeArg(ty=Qubit)])])), instantiation=FunctionType([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[BoundedNatArg(n=3), TypeTypeArg(ty=Qubit)])], [ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[BoundedNatArg(n=3), TypeTypeArg(ty=Qubit)])]), type_args=[BoundedNatArg(n=3)]), parent=Node(5), metadata=NodeMetadata({})), NodeData(op=MakeTuple([]), parent=Node(5), metadata=NodeMetadata({})), NodeData(op=Call(signature=PolyFuncType(params=[BoundedNatArg(n=3)], body=FunctionType([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[BoundedNatArg(n=3), TypeTypeArg(ty=Qubit)])], [ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[BoundedNatArg(n=3), TypeTypeArg(ty=ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]))])])), instantiation=FunctionType([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[BoundedNatArg(n=3), TypeTypeArg(ty=Qubit)])], [ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[BoundedNatArg(n=3), TypeTypeArg(ty=ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]))])]), type_args=[BoundedNatArg(n=3)]), parent=Node(5), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='clone', signature=OpDefSig(poly_func=PolyFuncType(params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Copyable)], body=FunctionType([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=None)), TypeTypeArg(ty=$1)])], [ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=None)), TypeTypeArg(ty=$1)]), ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=None)), TypeTypeArg(ty=$1)])])), binary=False), description='Clones an array with copyable elements', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[BoundedNatArg(n=3), TypeTypeArg(ty=ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]))])], [ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[BoundedNatArg(n=3), TypeTypeArg(ty=ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]))]), ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[BoundedNatArg(n=3), TypeTypeArg(ty=ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]))])]), args=[BoundedNatArg(n=3), TypeTypeArg(ty=ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]))]), parent=Node(5), metadata=NodeMetadata({})), NodeData(op=LoadFunc(signature=PolyFuncType(params=[], body=FunctionType([ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [Bool])), instantiation=FunctionType([ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [Bool]), type_args=[]), parent=Node(5), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='scan', signature=OpDefSig(poly_func=PolyFuncType(params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear), TypeTypeParam(bound=TypeBound.Linear), ListParam(param=TypeTypeParam(bound=TypeBound.Linear))], body=FunctionType([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=None)), TypeTypeArg(ty=$1)]), FunctionType([$1, $3], [$2, $3]), $3], [ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=None)), TypeTypeArg(ty=$2)]), $3])), binary=False), description='A combination of map and foldl. Applies a function to each element of the array with an accumulator that is passed through from start to finish. Returns the resulting array and the final state of the accumulator.', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[BoundedNatArg(n=3), TypeTypeArg(ty=ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]))]), FunctionType([ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [Bool])], [ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[BoundedNatArg(n=3), TypeTypeArg(ty=Bool)])]), args=[BoundedNatArg(n=3), TypeTypeArg(ty=ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])), TypeTypeArg(ty=Bool), ListArg(elems=[])]), parent=Node(5), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='to_array', signature=OpDefSig(poly_func=PolyFuncType(params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], body=FunctionType([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=None)), TypeTypeArg(ty=$1)])], [ExtType(type_def=TypeDef(name='array', description='Fixed-length array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=None)), TypeTypeArg(ty=$1)])])), binary=False), description='Turns `borrow_array` into `array`', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[BoundedNatArg(n=3), TypeTypeArg(ty=Bool)])], [ExtType(type_def=TypeDef(name='array', description='Fixed-length array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[BoundedNatArg(n=3), TypeTypeArg(ty=Bool)])]), args=[BoundedNatArg(n=3), TypeTypeArg(ty=Bool)]), parent=Node(5), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='result_array_bool', signature=OpDefSig(poly_func=PolyFuncType(params=[StringParam(), BoundedNatParam(upper_bound=None)], body=FunctionType([ExtType(type_def=TypeDef(name='array', description='Fixed-length array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[VariableArg(idx=1, param=BoundedNatParam(upper_bound=None)), TypeTypeArg(ty=Bool)])], [])), binary=False), description='Report an array of boolean results.', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='array', description='Fixed-length array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[BoundedNatArg(n=3), TypeTypeArg(ty=Bool)])], []), args=[StringArg(value='c'), BoundedNatArg(n=3)]), parent=Node(5), metadata=NodeMetadata({})), NodeData(op=MakeTuple([]), parent=Node(5), metadata=NodeMetadata({})), NodeData(op=Tag(tag=0, sum_ty=Unit), parent=Node(5), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='drop', signature=OpDefSig(poly_func=PolyFuncType(params=[TypeTypeParam(bound=TypeBound.Linear)], body=FunctionType([$0], [])), binary=False), description='Drop the input wire. Applicable to guppy affine types only.', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[BoundedNatArg(n=3), TypeTypeArg(ty=ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]))])], []), args=[TypeTypeArg(ty=ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[BoundedNatArg(n=3), TypeTypeArg(ty=ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]))]))]), parent=Node(5), metadata=NodeMetadata({})), NodeData(op=ExitBlock(), parent=Node(4), metadata=NodeMetadata({})), NodeData(op=FuncDefn(f_name='guppylang.std.iter._range_comptime', inputs=[], params=[BoundedNatParam(upper_bound=None)], visibility='Private'), parent=Node(0), metadata=NodeMetadata({'unitary': 0})), NodeData(op=Input(types=[]), parent=Node(52), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(52), metadata=NodeMetadata({})), NodeData(op=CFG(inputs=[]), parent=Node(52), metadata=NodeMetadata({})), NodeData(op=DataflowBlock(inputs=[], _sum=Tuple(Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])))), parent=Node(55), metadata=NodeMetadata({})), NodeData(op=Input(types=[]), parent=Node(56), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(56), metadata=NodeMetadata({})), NodeData(op=Const(0), parent=Node(56), metadata=NodeMetadata({})), NodeData(op=LoadConst(int<6>), parent=Node(56), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='load_nat', signature=OpDefSig(poly_func=PolyFuncType(params=[BoundedNatParam(upper_bound=None)], body=FunctionType([], [USize])), binary=False), description='Loads a generic bounded nat parameter into a usize runtime value.', misc={}), signature=FunctionType([], [ExtType(type_def=TypeDef(name='usize', description='usize', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])]), args=[TypeTypeArg(ty=$0)]), parent=Node(56), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='ifromusize', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([USize], [ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])])), binary=False), description='convert a usize to a 64b unsigned integer', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='usize', description='usize', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), args=[]), parent=Node(56), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='iu_to_s', signature=OpDefSig(poly_func=PolyFuncType(params=[BoundedNatParam(upper_bound=7)], body=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=7))])], [ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=7))])])), binary=False), description='convert unsigned to signed by taking absolute value', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], [ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), args=[BoundedNatArg(n=6)]), parent=Node(56), metadata=NodeMetadata({})), NodeData(op=Const(1), parent=Node(56), metadata=NodeMetadata({})), NodeData(op=LoadConst(int<6>), parent=Node(56), metadata=NodeMetadata({})), NodeData(op=MakeTuple([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(56), metadata=NodeMetadata({})), NodeData(op=Tag(tag=0, sum_ty=Unit), parent=Node(56), metadata=NodeMetadata({})), NodeData(op=ExitBlock(), parent=Node(55), metadata=NodeMetadata({})), NodeData(op=FuncDefn(f_name='guppylang.std.iter.Range.__next__', inputs=[Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))], params=[], visibility='Private'), parent=Node(0), metadata=NodeMetadata({'unitary': 0})), NodeData(op=Input(types=[Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))]), parent=Node(69), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(69), metadata=NodeMetadata({})), NodeData(op=CFG(inputs=[Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))]), parent=Node(69), metadata=NodeMetadata({})), NodeData(op=DataflowBlock(inputs=[Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))], _sum=Either(left=[ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], right=[ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])])), parent=Node(72), metadata=NodeMetadata({})), NodeData(op=Input(types=[Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))]), parent=Node(73), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(73), metadata=NodeMetadata({})), NodeData(op=UnpackTuple([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(73), metadata=NodeMetadata({})), NodeData(op=Const(0), parent=Node(73), metadata=NodeMetadata({})), NodeData(op=LoadConst(int<6>), parent=Node(73), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='ige_s', signature=OpDefSig(poly_func=PolyFuncType(params=[BoundedNatParam(upper_bound=7)], body=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=7))]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=7))])], [Bool])), binary=False), description='"greater than or equal" as signed integers', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], [Bool]), args=[BoundedNatArg(n=6)]), parent=Node(73), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='make_opaque', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([Bool], [ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])])), binary=False), description='Convert a Hugr bool_t (a unit sum) into an tket.bool.', misc={}), signature=FunctionType([Bool], [ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])]), args=[]), parent=Node(73), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='read', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [Bool])), binary=False), description='Convert a tket.bool into a Hugr bool_t (a unit sum).', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [Bool]), args=[]), parent=Node(73), metadata=NodeMetadata({})), NodeData(op=ExitBlock(), parent=Node(72), metadata=NodeMetadata({})), NodeData(op=DataflowBlock(inputs=[ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], _sum=Tuple(ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))), parent=Node(72), metadata=NodeMetadata({})), NodeData(op=Input(types=[ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(83), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(83), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='ige_s', signature=OpDefSig(poly_func=PolyFuncType(params=[BoundedNatParam(upper_bound=7)], body=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=7))]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=7))])], [Bool])), binary=False), description='"greater than or equal" as signed integers', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], [Bool]), args=[BoundedNatArg(n=6)]), parent=Node(83), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='make_opaque', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([Bool], [ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])])), binary=False), description='Convert a Hugr bool_t (a unit sum) into an tket.bool.', misc={}), signature=FunctionType([Bool], [ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])]), args=[]), parent=Node(83), metadata=NodeMetadata({})), NodeData(op=Tag(tag=0, sum_ty=Unit), parent=Node(83), metadata=NodeMetadata({})), NodeData(op=DataflowBlock(inputs=[ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], _sum=Tuple(ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))), parent=Node(72), metadata=NodeMetadata({})), NodeData(op=Input(types=[ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(89), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(89), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='ile_s', signature=OpDefSig(poly_func=PolyFuncType(params=[BoundedNatParam(upper_bound=7)], body=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=7))]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=7))])], [Bool])), binary=False), description='"less than or equal" as signed integers', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], [Bool]), args=[BoundedNatArg(n=6)]), parent=Node(89), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='make_opaque', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([Bool], [ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])])), binary=False), description='Convert a Hugr bool_t (a unit sum) into an tket.bool.', misc={}), signature=FunctionType([Bool], [ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])]), args=[]), parent=Node(89), metadata=NodeMetadata({})), NodeData(op=Tag(tag=0, sum_ty=Unit), parent=Node(89), metadata=NodeMetadata({})), NodeData(op=DataflowBlock(inputs=[ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], _sum=Either(left=[ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], right=[])), parent=Node(72), metadata=NodeMetadata({})), NodeData(op=Input(types=[ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(95), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(95), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='read', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [Bool])), binary=False), description='Convert a tket.bool into a Hugr bool_t (a unit sum).', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [Bool]), args=[]), parent=Node(95), metadata=NodeMetadata({})), NodeData(op=Conditional(sum_ty=Bool, other_inputs=[ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(95), metadata=NodeMetadata({})), NodeData(op=Case(inputs=[ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(99), metadata=NodeMetadata({})), NodeData(op=Input(types=[ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(100), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(100), metadata=NodeMetadata({})), NodeData(op=Left([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], []), parent=Node(100), metadata=NodeMetadata({})), NodeData(op=Case(inputs=[ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(99), metadata=NodeMetadata({})), NodeData(op=Input(types=[ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(104), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(104), metadata=NodeMetadata({})), NodeData(op=Right([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], []), parent=Node(104), metadata=NodeMetadata({})), NodeData(op=DataflowBlock(inputs=[], _sum=Tuple(Option(Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])))))), parent=Node(72), metadata=NodeMetadata({})), NodeData(op=Input(types=[]), parent=Node(108), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(108), metadata=NodeMetadata({})), NodeData(op=Left([], [Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])))]), parent=Node(108), metadata=NodeMetadata({})), NodeData(op=Tag(tag=0, sum_ty=Unit), parent=Node(108), metadata=NodeMetadata({})), NodeData(op=DataflowBlock(inputs=[ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], _sum=Tuple(Option(Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])))))), parent=Node(72), metadata=NodeMetadata({})), NodeData(op=Input(types=[ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(113), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(113), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='iadd', signature=OpDefSig(poly_func=PolyFuncType(params=[BoundedNatParam(upper_bound=7)], body=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=7))]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=7))])], [ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=7))])])), binary=False), description='addition modulo 2^N (signed and unsigned versions are the same op)', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], [ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), args=[BoundedNatArg(n=6)]), parent=Node(113), metadata=NodeMetadata({})), NodeData(op=MakeTuple([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(113), metadata=NodeMetadata({})), NodeData(op=MakeTuple([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))]), parent=Node(113), metadata=NodeMetadata({})), NodeData(op=Some(Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])))), parent=Node(113), metadata=NodeMetadata({})), NodeData(op=Tag(tag=0, sum_ty=Unit), parent=Node(113), metadata=NodeMetadata({})), NodeData(op=FuncDefn(f_name='tkr_my_example_worker_impl.impl.ghz.<locals>.build_ghz_state', inputs=[ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)])], params=[BoundedNatParam(upper_bound=None)], visibility='Private'), parent=Node(0), metadata=NodeMetadata({'unitary': 0})), NodeData(op=Input(types=[ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)])]), parent=Node(121), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(121), metadata=NodeMetadata({})), NodeData(op=CFG(inputs=[ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)])]), parent=Node(121), metadata=NodeMetadata({})), NodeData(op=DataflowBlock(inputs=[ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)])], _sum=Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]))), parent=Node(124), metadata=NodeMetadata({})), NodeData(op=Input(types=[ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)])]), parent=Node(125), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(125), metadata=NodeMetadata({})), NodeData(op=Const(0), parent=Node(125), metadata=NodeMetadata({})), NodeData(op=LoadConst(int<6>), parent=Node(125), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='itousize', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], [USize])), binary=False), description='convert a 64b unsigned integer to its usize representation', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], [ExtType(type_def=TypeDef(name='usize', description='usize', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])]), args=[]), parent=Node(125), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='borrow', signature=OpDefSig(poly_func=PolyFuncType(params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], body=FunctionType([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=None)), TypeTypeArg(ty=$1)]), USize], [ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=None)), TypeTypeArg(ty=$1)]), $1])), binary=False), description='Take an element from a borrow array (panicking if it was already taken before)', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='usize', description='usize', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), Qubit]), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), parent=Node(125), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='H', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([Qubit], [Qubit])), binary=False), description='H', misc={'commutation': []}), signature=FunctionType([Qubit], [Qubit]), args=[]), parent=Node(125), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='itousize', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], [USize])), binary=False), description='convert a 64b unsigned integer to its usize representation', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], [ExtType(type_def=TypeDef(name='usize', description='usize', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])]), args=[]), parent=Node(125), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='return', signature=OpDefSig(poly_func=PolyFuncType(params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], body=FunctionType([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=None)), TypeTypeArg(ty=$1)]), USize, $1], [ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=None)), TypeTypeArg(ty=$1)])])), binary=False), description='Put an element into a borrow array (panicking if there is an element already)', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='usize', description='usize', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]), Qubit], [ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)])]), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), parent=Node(125), metadata=NodeMetadata({})), NodeData(op=MakeTuple([]), parent=Node(125), metadata=NodeMetadata({})), NodeData(op=MakeTuple([]), parent=Node(125), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='load_nat', signature=OpDefSig(poly_func=PolyFuncType(params=[BoundedNatParam(upper_bound=None)], body=FunctionType([], [USize])), binary=False), description='Loads a generic bounded nat parameter into a usize runtime value.', misc={}), signature=FunctionType([], [ExtType(type_def=TypeDef(name='usize', description='usize', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])]), args=[TypeTypeArg(ty=$0)]), parent=Node(125), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='ifromusize', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([USize], [ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])])), binary=False), description='convert a usize to a 64b unsigned integer', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='usize', description='usize', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), args=[]), parent=Node(125), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='iu_to_s', signature=OpDefSig(poly_func=PolyFuncType(params=[BoundedNatParam(upper_bound=7)], body=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=7))])], [ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=7))])])), binary=False), description='convert unsigned to signed by taking absolute value', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], [ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), args=[BoundedNatArg(n=6)]), parent=Node(125), metadata=NodeMetadata({})), NodeData(op=Const(1), parent=Node(125), metadata=NodeMetadata({})), NodeData(op=LoadConst(int<6>), parent=Node(125), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='isub', signature=OpDefSig(poly_func=PolyFuncType(params=[BoundedNatParam(upper_bound=7)], body=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=7))]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=7))])], [ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=7))])])), binary=False), description='subtraction modulo 2^N (signed and unsigned versions are the same op)', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], [ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), args=[BoundedNatArg(n=6)]), parent=Node(125), metadata=NodeMetadata({})), NodeData(op=Call(signature=PolyFuncType(params=[], body=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], [Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))])), instantiation=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], [Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))]), type_args=[]), parent=Node(125), metadata=NodeMetadata({})), NodeData(op=Call(signature=PolyFuncType(params=[], body=FunctionType([Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))], [Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))])), instantiation=FunctionType([Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))], [Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))]), type_args=[]), parent=Node(125), metadata=NodeMetadata({})), NodeData(op=UnpackTuple([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(125), metadata=NodeMetadata({})), NodeData(op=Tag(tag=0, sum_ty=Unit), parent=Node(125), metadata=NodeMetadata({})), NodeData(op=ExitBlock(), parent=Node(124), metadata=NodeMetadata({})), NodeData(op=DataflowBlock(inputs=[ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)])], _sum=Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]))), parent=Node(124), metadata=NodeMetadata({})), NodeData(op=Input(types=[ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)])]), parent=Node(148), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(148), metadata=NodeMetadata({})), NodeData(op=Tag(tag=0, sum_ty=Unit), parent=Node(148), metadata=NodeMetadata({})), NodeData(op=DataflowBlock(inputs=[ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)])], _sum=Either(left=[Option(Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])))), ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)])], right=[Option(Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])))), ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)])])), parent=Node(124), metadata=NodeMetadata({})), NodeData(op=Input(types=[ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)])]), parent=Node(152), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(152), metadata=NodeMetadata({})), NodeData(op=MakeTuple([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(152), metadata=NodeMetadata({})), NodeData(op=Call(signature=PolyFuncType(params=[], body=FunctionType([Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))], [Option(Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))))])), instantiation=FunctionType([Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))], [Option(Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))))]), type_args=[]), parent=Node(152), metadata=NodeMetadata({})), NodeData(op=Conditional(sum_ty=Option(Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])))), other_inputs=[]), parent=Node(152), metadata=NodeMetadata({})), NodeData(op=Case(inputs=[]), parent=Node(157), metadata=NodeMetadata({})), NodeData(op=Input(types=[]), parent=Node(158), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(158), metadata=NodeMetadata({})), NodeData(op=Left([], [Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])))]), parent=Node(158), metadata=NodeMetadata({})), NodeData(op=Const(ConstBool(False)), parent=Node(158), metadata=NodeMetadata({})), NodeData(op=LoadConst(bool), parent=Node(158), metadata=NodeMetadata({})), NodeData(op=Case(inputs=[Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])))]), parent=Node(157), metadata=NodeMetadata({})), NodeData(op=Input(types=[Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])))]), parent=Node(164), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(164), metadata=NodeMetadata({})), NodeData(op=Some(Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])))), parent=Node(164), metadata=NodeMetadata({})), NodeData(op=Const(ConstBool(True)), parent=Node(164), metadata=NodeMetadata({})), NodeData(op=LoadConst(bool), parent=Node(164), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='read', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [Bool])), binary=False), description='Convert a tket.bool into a Hugr bool_t (a unit sum).', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [Bool]), args=[]), parent=Node(152), metadata=NodeMetadata({})), NodeData(op=DataflowBlock(inputs=[ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)])], _sum=Tuple(ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]))), parent=Node(124), metadata=NodeMetadata({})), NodeData(op=Input(types=[ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)])]), parent=Node(171), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(171), metadata=NodeMetadata({})), NodeData(op=Tag(tag=0, sum_ty=Unit), parent=Node(171), metadata=NodeMetadata({})), NodeData(op=DataflowBlock(inputs=[Option(Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])))), ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)])], _sum=Tuple(ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]))), parent=Node(124), metadata=NodeMetadata({})), NodeData(op=Input(types=[Option(Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])))), ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)])]), parent=Node(175), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(175), metadata=NodeMetadata({})), NodeData(op=Conditional(sum_ty=Option(Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])))), other_inputs=[]), parent=Node(175), metadata=NodeMetadata({})), NodeData(op=Case(inputs=[]), parent=Node(178), metadata=NodeMetadata({})), NodeData(op=Input(types=[]), parent=Node(179), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(179), metadata=NodeMetadata({})), NodeData(op=Case(inputs=[Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])))]), parent=Node(178), metadata=NodeMetadata({})), NodeData(op=Input(types=[Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])))]), parent=Node(182), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(182), metadata=NodeMetadata({})), NodeData(op=Const(ConstError({'signal': 1, 'message': 'Option.unwrap: value is `Some`'})), parent=Node(182), metadata=NodeMetadata({})), NodeData(op=LoadConst(error), parent=Node(182), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='panic', signature=OpDefSig(poly_func=PolyFuncType(params=[ListParam(param=TypeTypeParam(bound=TypeBound.Linear)), ListParam(param=TypeTypeParam(bound=TypeBound.Linear))], body=FunctionType([ExtType(type_def=TypeDef(name='error', description='Simple opaque error type.', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]), $0], [$1])), binary=False), description='Panic with input error', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='error', description='Simple opaque error type.', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])))], []), args=[ListArg(elems=[TypeTypeArg(ty=Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))))]), ListArg(elems=[])]), parent=Node(182), metadata=NodeMetadata({})), NodeData(op=MakeTuple([]), parent=Node(175), metadata=NodeMetadata({})), NodeData(op=Tag(tag=0, sum_ty=Unit), parent=Node(175), metadata=NodeMetadata({})), NodeData(op=DataflowBlock(inputs=[Option(Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])))), ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)])], _sum=Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]))), parent=Node(124), metadata=NodeMetadata({})), NodeData(op=Input(types=[Option(Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])))), ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)])]), parent=Node(190), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(190), metadata=NodeMetadata({})), NodeData(op=Conditional(sum_ty=Option(Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])))), other_inputs=[]), parent=Node(190), metadata=NodeMetadata({})), NodeData(op=Case(inputs=[]), parent=Node(193), metadata=NodeMetadata({})), NodeData(op=Input(types=[]), parent=Node(194), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(194), metadata=NodeMetadata({})), NodeData(op=Const(ConstError({'signal': 1, 'message': 'Option.unwrap: value is `Nothing`'})), parent=Node(194), metadata=NodeMetadata({})), NodeData(op=LoadConst(error), parent=Node(194), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='panic', signature=OpDefSig(poly_func=PolyFuncType(params=[ListParam(param=TypeTypeParam(bound=TypeBound.Linear)), ListParam(param=TypeTypeParam(bound=TypeBound.Linear))], body=FunctionType([ExtType(type_def=TypeDef(name='error', description='Simple opaque error type.', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]), $0], [$1])), binary=False), description='Panic with input error', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='error', description='Simple opaque error type.', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])))]), args=[ListArg(elems=[]), ListArg(elems=[TypeTypeArg(ty=Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))))])]), parent=Node(194), metadata=NodeMetadata({})), NodeData(op=Case(inputs=[Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])))]), parent=Node(193), metadata=NodeMetadata({})), NodeData(op=Input(types=[Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])))]), parent=Node(200), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(200), metadata=NodeMetadata({})), NodeData(op=UnpackTuple([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))]), parent=Node(190), metadata=NodeMetadata({})), NodeData(op=UnpackTuple([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(190), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='itousize', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], [USize])), binary=False), description='convert a 64b unsigned integer to its usize representation', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], [ExtType(type_def=TypeDef(name='usize', description='usize', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])]), args=[]), parent=Node(190), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='borrow', signature=OpDefSig(poly_func=PolyFuncType(params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], body=FunctionType([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=None)), TypeTypeArg(ty=$1)]), USize], [ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=None)), TypeTypeArg(ty=$1)]), $1])), binary=False), description='Take an element from a borrow array (panicking if it was already taken before)', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='usize', description='usize', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), Qubit]), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), parent=Node(190), metadata=NodeMetadata({})), NodeData(op=Const(1), parent=Node(190), metadata=NodeMetadata({})), NodeData(op=LoadConst(int<6>), parent=Node(190), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='iadd', signature=OpDefSig(poly_func=PolyFuncType(params=[BoundedNatParam(upper_bound=7)], body=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=7))]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=7))])], [ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=7))])])), binary=False), description='addition modulo 2^N (signed and unsigned versions are the same op)', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], [ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), args=[BoundedNatArg(n=6)]), parent=Node(190), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='itousize', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], [USize])), binary=False), description='convert a 64b unsigned integer to its usize representation', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], [ExtType(type_def=TypeDef(name='usize', description='usize', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])]), args=[]), parent=Node(190), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='borrow', signature=OpDefSig(poly_func=PolyFuncType(params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], body=FunctionType([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=None)), TypeTypeArg(ty=$1)]), USize], [ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=None)), TypeTypeArg(ty=$1)]), $1])), binary=False), description='Take an element from a borrow array (panicking if it was already taken before)', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='usize', description='usize', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), Qubit]), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), parent=Node(190), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='CX', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([Qubit, Qubit], [Qubit, Qubit])), binary=False), description='CX', misc={'commutation': [[0, 'Z'], [1, 'X']]}), signature=FunctionType([Qubit, Qubit], [Qubit, Qubit]), args=[]), parent=Node(190), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='itousize', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], [USize])), binary=False), description='convert a 64b unsigned integer to its usize representation', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], [ExtType(type_def=TypeDef(name='usize', description='usize', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])]), args=[]), parent=Node(190), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='return', signature=OpDefSig(poly_func=PolyFuncType(params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], body=FunctionType([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=None)), TypeTypeArg(ty=$1)]), USize, $1], [ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=None)), TypeTypeArg(ty=$1)])])), binary=False), description='Put an element into a borrow array (panicking if there is an element already)', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='usize', description='usize', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]), Qubit], [ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)])]), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), parent=Node(190), metadata=NodeMetadata({})), NodeData(op=MakeTuple([]), parent=Node(190), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='itousize', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], [USize])), binary=False), description='convert a 64b unsigned integer to its usize representation', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], [ExtType(type_def=TypeDef(name='usize', description='usize', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])]), args=[]), parent=Node(190), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='return', signature=OpDefSig(poly_func=PolyFuncType(params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], body=FunctionType([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=None)), TypeTypeArg(ty=$1)]), USize, $1], [ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=None)), TypeTypeArg(ty=$1)])])), binary=False), description='Put an element into a borrow array (panicking if there is an element already)', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='usize', description='usize', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]), Qubit], [ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)])]), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), parent=Node(190), metadata=NodeMetadata({})), NodeData(op=MakeTuple([]), parent=Node(190), metadata=NodeMetadata({})), NodeData(op=MakeTuple([]), parent=Node(190), metadata=NodeMetadata({})), NodeData(op=Tag(tag=0, sum_ty=Unit), parent=Node(190), metadata=NodeMetadata({})), NodeData(op=FuncDefn(f_name='guppylang.std.quantum.measure_array', inputs=[ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)])], params=[BoundedNatParam(upper_bound=None)], visibility='Private'), parent=Node(0), metadata=NodeMetadata({'unitary': 0})), NodeData(op=Input(types=[ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)])]), parent=Node(221), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(221), metadata=NodeMetadata({})), NodeData(op=CFG(inputs=[ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)])]), parent=Node(221), metadata=NodeMetadata({})), NodeData(op=DataflowBlock(inputs=[ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)])], _sum=Tuple(ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]))]))), parent=Node(224), metadata=NodeMetadata({})), NodeData(op=Input(types=[ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)])]), parent=Node(225), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(225), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='new_all_borrowed', signature=OpDefSig(poly_func=PolyFuncType(params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], body=FunctionType([], [ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=None)), TypeTypeArg(ty=$1)])])), binary=False), description='Create a new borrow array that contains no elements', misc={}), signature=FunctionType([], [ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]))])]), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]))]), parent=Node(225), metadata=NodeMetadata({})), NodeData(op=Const(0), parent=Node(225), metadata=NodeMetadata({})), NodeData(op=LoadConst(int<6>), parent=Node(225), metadata=NodeMetadata({})), NodeData(op=Call(signature=PolyFuncType(params=[TypeTypeArg(ty=Qubit), TypeTypeArg(ty=$0)], body=FunctionType([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)])], [Tuple(ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))])), instantiation=FunctionType([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)])], [Tuple(ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))]), type_args=[TypeTypeArg(ty=Qubit), TypeTypeArg(ty=$0)]), parent=Node(225), metadata=NodeMetadata({})), NodeData(op=UnpackTuple([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(225), metadata=NodeMetadata({})), NodeData(op=MakeTuple([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(225), metadata=NodeMetadata({})), NodeData(op=TailLoop(just_inputs=[Tuple(ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))], rest=[ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]))]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(225), metadata=NodeMetadata({})), NodeData(op=Input(types=[Tuple(ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])), ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]))]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(234), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(234), metadata=NodeMetadata({})), NodeData(op=UnpackTuple([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(234), metadata=NodeMetadata({})), NodeData(op=MakeTuple([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(234), metadata=NodeMetadata({})), NodeData(op=Call(signature=PolyFuncType(params=[TypeTypeArg(ty=Qubit), TypeTypeArg(ty=$0)], body=FunctionType([Tuple(ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))], [Option(Tuple(Qubit, Tuple(ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))))])), instantiation=FunctionType([Tuple(ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))], [Option(Tuple(Qubit, Tuple(ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))))]), type_args=[TypeTypeArg(ty=Qubit), TypeTypeArg(ty=$0)]), parent=Node(234), metadata=NodeMetadata({})), NodeData(op=Conditional(sum_ty=Option(Tuple(Qubit, Tuple(ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])))), other_inputs=[ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]))]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(234), metadata=NodeMetadata({})), NodeData(op=Case(inputs=[ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]))]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(240), metadata=NodeMetadata({})), NodeData(op=Input(types=[ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]))]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(241), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(241), metadata=NodeMetadata({})), NodeData(op=Right([Tuple(ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))], []), parent=Node(241), metadata=NodeMetadata({})), NodeData(op=Case(inputs=[Tuple(Qubit, Tuple(ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))), ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]))]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(240), metadata=NodeMetadata({})), NodeData(op=Input(types=[Tuple(Qubit, Tuple(ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))), ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]))]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(245), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(245), metadata=NodeMetadata({})), NodeData(op=UnpackTuple([Qubit, Tuple(ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))]), parent=Node(245), metadata=NodeMetadata({})), NodeData(op=UnpackTuple([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(245), metadata=NodeMetadata({})), NodeData(op=MakeTuple([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(245), metadata=NodeMetadata({})), NodeData(op=MakeTuple([Qubit, Tuple(ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))]), parent=Node(245), metadata=NodeMetadata({})), NodeData(op=UnpackTuple([Qubit, Tuple(ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))]), parent=Node(245), metadata=NodeMetadata({})), NodeData(op=Left([Tuple(ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=Qubit)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))], []), parent=Node(245), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='MeasureFree', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([Qubit], [ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])])), binary=False), description='MeasureFree', misc={'commutation': []}), signature=FunctionType([Qubit], [ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])]), args=[]), parent=Node(245), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='itousize', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], [USize])), binary=False), description='convert a 64b unsigned integer to its usize representation', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], [ExtType(type_def=TypeDef(name='usize', description='usize', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])]), args=[]), parent=Node(245), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='return', signature=OpDefSig(poly_func=PolyFuncType(params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], body=FunctionType([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=None)), TypeTypeArg(ty=$1)]), USize, $1], [ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=None)), TypeTypeArg(ty=$1)])])), binary=False), description='Put an element into a borrow array (panicking if there is an element already)', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]))]), ExtType(type_def=TypeDef(name='usize', description='usize', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]), ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]))])]), args=[TypeTypeArg(ty=$0), TypeTypeArg(ty=ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]))]), parent=Node(245), metadata=NodeMetadata({})), NodeData(op=Const(1), parent=Node(245), metadata=NodeMetadata({})), NodeData(op=LoadConst(int<6>), parent=Node(245), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='iadd', signature=OpDefSig(poly_func=PolyFuncType(params=[BoundedNatParam(upper_bound=7)], body=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=7))]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=7))])], [ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=7))])])), binary=False), description='addition modulo 2^N (signed and unsigned versions are the same op)', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], [ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), args=[BoundedNatArg(n=6)]), parent=Node(245), metadata=NodeMetadata({})), NodeData(op=Tag(tag=0, sum_ty=Unit), parent=Node(225), metadata=NodeMetadata({})), NodeData(op=ExitBlock(), parent=Node(224), metadata=NodeMetadata({})), NodeData(op=FuncDefn(f_name='array.__read_bool.1', inputs=[ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], params=[], visibility='Private'), parent=Node(0), metadata=NodeMetadata({})), NodeData(op=Input(types=[ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])]), parent=Node(262), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(262), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='read', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [Bool])), binary=False), description='Convert a tket.bool into a Hugr bool_t (a unit sum).', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [Bool]), args=[]), parent=Node(262), metadata=NodeMetadata({})), NodeData(op=FuncDefn(f_name='guppylang.std.array.array.__iter__', inputs=[ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$1), TypeTypeArg(ty=$0)])], params=[TypeTypeParam(bound=TypeBound.Linear), BoundedNatParam(upper_bound=None)], visibility='Private'), parent=Node(0), metadata=NodeMetadata({'unitary': 0})), NodeData(op=Input(types=[ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$1), TypeTypeArg(ty=$0)])]), parent=Node(266), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(266), metadata=NodeMetadata({})), NodeData(op=CFG(inputs=[ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$1), TypeTypeArg(ty=$0)])]), parent=Node(266), metadata=NodeMetadata({})), NodeData(op=DataflowBlock(inputs=[ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$1), TypeTypeArg(ty=$0)])], _sum=Tuple(Tuple(ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$1), TypeTypeArg(ty=$0)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])))), parent=Node(269), metadata=NodeMetadata({})), NodeData(op=Input(types=[ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$1), TypeTypeArg(ty=$0)])]), parent=Node(270), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(270), metadata=NodeMetadata({})), NodeData(op=Const(0), parent=Node(270), metadata=NodeMetadata({})), NodeData(op=LoadConst(int<6>), parent=Node(270), metadata=NodeMetadata({})), NodeData(op=MakeTuple([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$1), TypeTypeArg(ty=$0)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(270), metadata=NodeMetadata({})), NodeData(op=Tag(tag=0, sum_ty=Unit), parent=Node(270), metadata=NodeMetadata({})), NodeData(op=ExitBlock(), parent=Node(269), metadata=NodeMetadata({})), NodeData(op=FuncDefn(f_name='guppylang.std.array.ArrayIter.__next__', inputs=[Tuple(ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$1), TypeTypeArg(ty=$0)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))], params=[TypeTypeParam(bound=TypeBound.Linear), BoundedNatParam(upper_bound=None)], visibility='Private'), parent=Node(0), metadata=NodeMetadata({'unitary': 0})), NodeData(op=Input(types=[Tuple(ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$1), TypeTypeArg(ty=$0)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))]), parent=Node(278), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(278), metadata=NodeMetadata({})), NodeData(op=CFG(inputs=[Tuple(ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$1), TypeTypeArg(ty=$0)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))]), parent=Node(278), metadata=NodeMetadata({})), NodeData(op=DataflowBlock(inputs=[Tuple(ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$1), TypeTypeArg(ty=$0)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))], _sum=Either(left=[ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$1), TypeTypeArg(ty=$0)])], right=[ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$1), TypeTypeArg(ty=$0)])])), parent=Node(281), metadata=NodeMetadata({})), NodeData(op=Input(types=[Tuple(ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$1), TypeTypeArg(ty=$0)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))]), parent=Node(282), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(282), metadata=NodeMetadata({})), NodeData(op=UnpackTuple([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$1), TypeTypeArg(ty=$0)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(282), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='load_nat', signature=OpDefSig(poly_func=PolyFuncType(params=[BoundedNatParam(upper_bound=None)], body=FunctionType([], [USize])), binary=False), description='Loads a generic bounded nat parameter into a usize runtime value.', misc={}), signature=FunctionType([], [ExtType(type_def=TypeDef(name='usize', description='usize', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])]), args=[TypeTypeArg(ty=$1)]), parent=Node(282), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='ifromusize', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([USize], [ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])])), binary=False), description='convert a usize to a 64b unsigned integer', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='usize', description='usize', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), args=[]), parent=Node(282), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='iu_to_s', signature=OpDefSig(poly_func=PolyFuncType(params=[BoundedNatParam(upper_bound=7)], body=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=7))])], [ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=7))])])), binary=False), description='convert unsigned to signed by taking absolute value', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], [ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), args=[BoundedNatArg(n=6)]), parent=Node(282), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='ilt_s', signature=OpDefSig(poly_func=PolyFuncType(params=[BoundedNatParam(upper_bound=7)], body=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=7))]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=7))])], [Bool])), binary=False), description='"less than" as signed integers', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], [Bool]), args=[BoundedNatArg(n=6)]), parent=Node(282), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='make_opaque', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([Bool], [ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])])), binary=False), description='Convert a Hugr bool_t (a unit sum) into an tket.bool.', misc={}), signature=FunctionType([Bool], [ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])]), args=[]), parent=Node(282), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='read', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [Bool])), binary=False), description='Convert a tket.bool into a Hugr bool_t (a unit sum).', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [Bool]), args=[]), parent=Node(282), metadata=NodeMetadata({})), NodeData(op=Conditional(sum_ty=Bool, other_inputs=[ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(282), metadata=NodeMetadata({})), NodeData(op=Case(inputs=[ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(292), metadata=NodeMetadata({})), NodeData(op=Input(types=[ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(293), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(293), metadata=NodeMetadata({})), NodeData(op=Left([], [ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(293), metadata=NodeMetadata({})), NodeData(op=Case(inputs=[ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(292), metadata=NodeMetadata({})), NodeData(op=Input(types=[ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(297), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(297), metadata=NodeMetadata({})), NodeData(op=Some(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])), parent=Node(297), metadata=NodeMetadata({})), NodeData(op=ExitBlock(), parent=Node(281), metadata=NodeMetadata({})), NodeData(op=DataflowBlock(inputs=[ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$1), TypeTypeArg(ty=$0)])], _sum=Tuple(Option(Tuple($0, Tuple(ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$1), TypeTypeArg(ty=$0)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])))))), parent=Node(281), metadata=NodeMetadata({})), NodeData(op=Input(types=[ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$1), TypeTypeArg(ty=$0)])]), parent=Node(302), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(302), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='itousize', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], [USize])), binary=False), description='convert a 64b unsigned integer to its usize representation', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], [ExtType(type_def=TypeDef(name='usize', description='usize', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])]), args=[]), parent=Node(302), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='borrow', signature=OpDefSig(poly_func=PolyFuncType(params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], body=FunctionType([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=None)), TypeTypeArg(ty=$1)]), USize], [ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=None)), TypeTypeArg(ty=$1)]), $1])), binary=False), description='Take an element from a borrow array (panicking if it was already taken before)', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$1), TypeTypeArg(ty=$0)]), ExtType(type_def=TypeDef(name='usize', description='usize', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$1), TypeTypeArg(ty=$0)]), $0]), args=[TypeTypeArg(ty=$1), TypeTypeArg(ty=$0)]), parent=Node(302), metadata=NodeMetadata({})), NodeData(op=Const(1), parent=Node(302), metadata=NodeMetadata({})), NodeData(op=LoadConst(int<6>), parent=Node(302), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='iadd', signature=OpDefSig(poly_func=PolyFuncType(params=[BoundedNatParam(upper_bound=7)], body=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=7))]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=7))])], [ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=7))])])), binary=False), description='addition modulo 2^N (signed and unsigned versions are the same op)', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], [ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), args=[BoundedNatArg(n=6)]), parent=Node(302), metadata=NodeMetadata({})), NodeData(op=MakeTuple([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$1), TypeTypeArg(ty=$0)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(302), metadata=NodeMetadata({})), NodeData(op=MakeTuple([$0, Tuple(ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$1), TypeTypeArg(ty=$0)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))]), parent=Node(302), metadata=NodeMetadata({})), NodeData(op=Some(Tuple($0, Tuple(ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$1), TypeTypeArg(ty=$0)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])))), parent=Node(302), metadata=NodeMetadata({})), NodeData(op=Tag(tag=0, sum_ty=Unit), parent=Node(302), metadata=NodeMetadata({})), NodeData(op=DataflowBlock(inputs=[ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$1), TypeTypeArg(ty=$0)])], _sum=Tuple(Option(Tuple($0, Tuple(ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$1), TypeTypeArg(ty=$0)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])))))), parent=Node(281), metadata=NodeMetadata({})), NodeData(op=Input(types=[ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$1), TypeTypeArg(ty=$0)])]), parent=Node(314), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(314), metadata=NodeMetadata({})), NodeData(op=ExtOp(_op_def=OpDef(name='discard_all_borrowed', signature=OpDefSig(poly_func=PolyFuncType(params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], body=FunctionType([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[VariableArg(idx=0, param=BoundedNatParam(upper_bound=None)), TypeTypeArg(ty=$1)])], [])), binary=False), description='Discard a borrow array where all elements have been borrowed', misc={}), signature=FunctionType([ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$1), TypeTypeArg(ty=$0)])], []), args=[TypeTypeArg(ty=$1), TypeTypeArg(ty=$0)]), parent=Node(314), metadata=NodeMetadata({})), NodeData(op=MakeTuple([]), parent=Node(314), metadata=NodeMetadata({})), NodeData(op=Left([], [Tuple($0, Tuple(ExtType(type_def=TypeDef(name='borrow_array', description='Fixed-length borrow array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[TypeTypeArg(ty=$1), TypeTypeArg(ty=$0)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])))]), parent=Node(314), metadata=NodeMetadata({})), NodeData(op=Tag(tag=0, sum_ty=Unit), parent=Node(314), metadata=NodeMetadata({})), NodeData(op=FuncDefn(f_name='guppylang.std.iter.Range.__iter__', inputs=[Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))], params=[], visibility='Private'), parent=Node(0), metadata=NodeMetadata({'unitary': 0})), NodeData(op=Input(types=[Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))]), parent=Node(321), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(321), metadata=NodeMetadata({})), NodeData(op=CFG(inputs=[Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))]), parent=Node(321), metadata=NodeMetadata({})), NodeData(op=DataflowBlock(inputs=[Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))], _sum=Tuple(Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])))), parent=Node(324), metadata=NodeMetadata({})), NodeData(op=Input(types=[Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]))]), parent=Node(325), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(325), metadata=NodeMetadata({})), NodeData(op=UnpackTuple([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(325), metadata=NodeMetadata({})), NodeData(op=MakeTuple([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(325), metadata=NodeMetadata({})), NodeData(op=Tag(tag=0, sum_ty=Unit), parent=Node(325), metadata=NodeMetadata({})), NodeData(op=ExitBlock(), parent=Node(324), metadata=NodeMetadata({})), NodeData(op=FuncDefn(f_name='guppylang.std.iter._range1', inputs=[ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], params=[], visibility='Private'), parent=Node(0), metadata=NodeMetadata({'unitary': 0})), NodeData(op=Input(types=[ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(332), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(332), metadata=NodeMetadata({})), NodeData(op=CFG(inputs=[ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(332), metadata=NodeMetadata({})), NodeData(op=DataflowBlock(inputs=[ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])], _sum=Tuple(Tuple(ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])))), parent=Node(335), metadata=NodeMetadata({})), NodeData(op=Input(types=[ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(336), metadata=NodeMetadata({})), NodeData(op=Output(), parent=Node(336), metadata=NodeMetadata({})), NodeData(op=Const(0), parent=Node(336), metadata=NodeMetadata({})), NodeData(op=LoadConst(int<6>), parent=Node(336), metadata=NodeMetadata({})), NodeData(op=Const(1), parent=Node(336), metadata=NodeMetadata({})), NodeData(op=LoadConst(int<6>), parent=Node(336), metadata=NodeMetadata({})), NodeData(op=MakeTuple([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)]), ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[BoundedNatArg(n=6)])]), parent=Node(336), metadata=NodeMetadata({})), NodeData(op=Tag(tag=0, sum_ty=Unit), parent=Node(336), metadata=NodeMetadata({})), NodeData(op=ExitBlock(), parent=Node(335), metadata=NodeMetadata({}))], _links=BiMap({_SubPort(port=OutPort(Node(9), 0), sub_offset=0): _SubPort(port=InPort(Node(10), 0), sub_offset=0), _SubPort(port=OutPort(Node(37), 0), sub_offset=0): _SubPort(port=InPort(Node(38), 0), sub_offset=0), _SubPort(port=OutPort(Node(26), -1), sub_offset=0): _SubPort(port=InPort(Node(34), -1), sub_offset=0), _SubPort(port=OutPort(Node(34), -1), sub_offset=0): _SubPort(port=InPort(Node(27), -1), sub_offset=0), _SubPort(port=OutPort(Node(15), -1), sub_offset=0): _SubPort(port=InPort(Node(19), -1), sub_offset=0), _SubPort(port=OutPort(Node(19), -1), sub_offset=0): _SubPort(port=InPort(Node(20), -1), sub_offset=0), _SubPort(port=OutPort(Node(20), -1), sub_offset=0): _SubPort(port=InPort(Node(16), -1), sub_offset=0), _SubPort(port=OutPort(Node(6), -1), sub_offset=0): _SubPort(port=InPort(Node(11), -1), sub_offset=0), _SubPort(port=OutPort(Node(11), -1), sub_offset=0): _SubPort(port=InPort(Node(14), -1), sub_offset=0), _SubPort(port=OutPort(Node(14), -1), sub_offset=0): _SubPort(port=InPort(Node(40), -1), sub_offset=0), _SubPort(port=OutPort(Node(40), -1), sub_offset=0): _SubPort(port=InPort(Node(42), -1), sub_offset=0), _SubPort(port=OutPort(Node(42), -1), sub_offset=0): _SubPort(port=InPort(Node(47), -1), sub_offset=0), _SubPort(port=OutPort(Node(47), -1), sub_offset=0): _SubPort(port=InPort(Node(7), -1), sub_offset=0), _SubPort(port=OutPort(Node(2), -1), sub_offset=0): _SubPort(port=InPort(Node(4), -1), sub_offset=0), _SubPort(port=OutPort(Node(4), -1), sub_offset=0): _SubPort(port=InPort(Node(3), -1), sub_offset=0), _SubPort(port=OutPort(Node(59), 0), sub_offset=0): _SubPort(port=InPort(Node(60), 0), sub_offset=0), _SubPort(port=OutPort(Node(64), 0), sub_offset=0): _SubPort(port=InPort(Node(65), 0), sub_offset=0), _SubPort(port=OutPort(Node(77), 0), sub_offset=0): _SubPort(port=InPort(Node(78), 0), sub_offset=0), _SubPort(port=OutPort(Node(128), 0), sub_offset=0): _SubPort(port=InPort(Node(129), 0), sub_offset=0), _SubPort(port=OutPort(Node(140), 0), sub_offset=0): _SubPort(port=InPort(Node(141), 0), sub_offset=0), _SubPort(port=OutPort(Node(126), -1), sub_offset=0): _SubPort(port=InPort(Node(143), -1), sub_offset=0), _SubPort(port=OutPort(Node(143), -1), sub_offset=0): _SubPort(port=InPort(Node(144), -1), sub_offset=0), _SubPort(port=OutPort(Node(144), -1), sub_offset=0): _SubPort(port=InPort(Node(127), -1), sub_offset=0), _SubPort(port=OutPort(Node(162), 0), sub_offset=0): _SubPort(port=InPort(Node(163), 0), sub_offset=0), _SubPort(port=OutPort(Node(168), 0), sub_offset=0): _SubPort(port=InPort(Node(169), 0), sub_offset=0), _SubPort(port=OutPort(Node(153), -1), sub_offset=0): _SubPort(port=InPort(Node(156), -1), sub_offset=0), _SubPort(port=OutPort(Node(156), -1), sub_offset=0): _SubPort(port=InPort(Node(154), -1), sub_offset=0), _SubPort(port=OutPort(Node(185), 0), sub_offset=0): _SubPort(port=InPort(Node(186), 0), sub_offset=0), _SubPort(port=OutPort(Node(183), -1), sub_offset=0): _SubPort(port=InPort(Node(187), -1), sub_offset=0), _SubPort(port=OutPort(Node(187), -1), sub_offset=0): _SubPort(port=InPort(Node(184), -1), sub_offset=0), _SubPort(port=OutPort(Node(176), -1), sub_offset=0): _SubPort(port=InPort(Node(178), -1), sub_offset=0), _SubPort(port=OutPort(Node(178), -1), sub_offset=0): _SubPort(port=InPort(Node(177), -1), sub_offset=0), _SubPort(port=OutPort(Node(197), 0), sub_offset=0): _SubPort(port=InPort(Node(198), 0), sub_offset=0), _SubPort(port=OutPort(Node(195), -1), sub_offset=0): _SubPort(port=InPort(Node(199), -1), sub_offset=0), _SubPort(port=OutPort(Node(199), -1), sub_offset=0): _SubPort(port=InPort(Node(196), -1), sub_offset=0), _SubPort(port=OutPort(Node(207), 0), sub_offset=0): _SubPort(port=InPort(Node(208), 0), sub_offset=0), _SubPort(port=OutPort(Node(191), -1), sub_offset=0): _SubPort(port=InPort(Node(193), -1), sub_offset=0), _SubPort(port=OutPort(Node(193), -1), sub_offset=0): _SubPort(port=InPort(Node(192), -1), sub_offset=0), _SubPort(port=OutPort(Node(122), -1), sub_offset=0): _SubPort(port=InPort(Node(124), -1), sub_offset=0), _SubPort(port=OutPort(Node(124), -1), sub_offset=0): _SubPort(port=InPort(Node(123), -1), sub_offset=0), _SubPort(port=OutPort(Node(229), 0), sub_offset=0): _SubPort(port=InPort(Node(230), 0), sub_offset=0), _SubPort(port=OutPort(Node(257), 0), sub_offset=0): _SubPort(port=InPort(Node(258), 0), sub_offset=0), _SubPort(port=OutPort(Node(246), -1), sub_offset=0): _SubPort(port=InPort(Node(254), -1), sub_offset=0), _SubPort(port=OutPort(Node(254), -1), sub_offset=0): _SubPort(port=InPort(Node(247), -1), sub_offset=0), _SubPort(port=OutPort(Node(235), -1), sub_offset=0): _SubPort(port=InPort(Node(239), -1), sub_offset=0), _SubPort(port=OutPort(Node(239), -1), sub_offset=0): _SubPort(port=InPort(Node(240), -1), sub_offset=0), _SubPort(port=OutPort(Node(240), -1), sub_offset=0): _SubPort(port=InPort(Node(236), -1), sub_offset=0), _SubPort(port=OutPort(Node(226), -1), sub_offset=0): _SubPort(port=InPort(Node(231), -1), sub_offset=0), _SubPort(port=OutPort(Node(231), -1), sub_offset=0): _SubPort(port=InPort(Node(234), -1), sub_offset=0), _SubPort(port=OutPort(Node(234), -1), sub_offset=0): _SubPort(port=InPort(Node(227), -1), sub_offset=0), _SubPort(port=OutPort(Node(222), -1), sub_offset=0): _SubPort(port=InPort(Node(224), -1), sub_offset=0), _SubPort(port=OutPort(Node(224), -1), sub_offset=0): _SubPort(port=InPort(Node(223), -1), sub_offset=0), _SubPort(port=OutPort(Node(273), 0), sub_offset=0): _SubPort(port=InPort(Node(274), 0), sub_offset=0), _SubPort(port=OutPort(Node(307), 0), sub_offset=0): _SubPort(port=InPort(Node(308), 0), sub_offset=0), _SubPort(port=OutPort(Node(339), 0), sub_offset=0): _SubPort(port=InPort(Node(340), 0), sub_offset=0), _SubPort(port=OutPort(Node(341), 0), sub_offset=0): _SubPort(port=InPort(Node(342), 0), sub_offset=0), _SubPort(port=OutPort(Node(5), 0), sub_offset=0): _SubPort(port=InPort(Node(51), 0), sub_offset=0), _SubPort(port=OutPort(Node(49), 0), sub_offset=0): _SubPort(port=InPort(Node(7), 0), sub_offset=0), _SubPort(port=OutPort(Node(8), 0), sub_offset=0): _SubPort(port=InPort(Node(14), 1), sub_offset=0), _SubPort(port=OutPort(Node(10), 0), sub_offset=0): _SubPort(port=InPort(Node(14), 2), sub_offset=0), _SubPort(port=OutPort(Node(11), 0), sub_offset=0): _SubPort(port=InPort(Node(12), 0), sub_offset=0), _SubPort(port=OutPort(Node(12), 0), sub_offset=0): _SubPort(port=InPort(Node(13), 0), sub_offset=0), _SubPort(port=OutPort(Node(12), 1), sub_offset=0): _SubPort(port=InPort(Node(13), 1), sub_offset=0), _SubPort(port=OutPort(Node(12), 2), sub_offset=0): _SubPort(port=InPort(Node(13), 2), sub_offset=0), _SubPort(port=OutPort(Node(13), 0), sub_offset=0): _SubPort(port=InPort(Node(14), 0), sub_offset=0), _SubPort(port=OutPort(Node(14), 0), sub_offset=0): _SubPort(port=InPort(Node(40), 0), sub_offset=0), _SubPort(port=OutPort(Node(15), 0), sub_offset=0): _SubPort(port=InPort(Node(17), 0), sub_offset=0), _SubPort(port=OutPort(Node(15), 1), sub_offset=0): _SubPort(port=InPort(Node(20), 1), sub_offset=0), _SubPort(port=OutPort(Node(15), 2), sub_offset=0): _SubPort(port=InPort(Node(20), 2), sub_offset=0), _SubPort(port=OutPort(Node(20), 0), sub_offset=0): _SubPort(port=InPort(Node(16), 0), sub_offset=0), _SubPort(port=OutPort(Node(20), 1), sub_offset=0): _SubPort(port=InPort(Node(16), 1), sub_offset=0), _SubPort(port=OutPort(Node(20), 2), sub_offset=0): _SubPort(port=InPort(Node(16), 2), sub_offset=0), _SubPort(port=OutPort(Node(17), 0), sub_offset=0): _SubPort(port=InPort(Node(18), 0), sub_offset=0), _SubPort(port=OutPort(Node(17), 1), sub_offset=0): _SubPort(port=InPort(Node(18), 1), sub_offset=0), _SubPort(port=OutPort(Node(17), 2), sub_offset=0): _SubPort(port=InPort(Node(18), 2), sub_offset=0), _SubPort(port=OutPort(Node(18), 0), sub_offset=0): _SubPort(port=InPort(Node(19), 0), sub_offset=0), _SubPort(port=OutPort(Node(19), 0), sub_offset=0): _SubPort(port=InPort(Node(20), 0), sub_offset=0), _SubPort(port=OutPort(Node(22), 0), sub_offset=0): _SubPort(port=InPort(Node(23), 1), sub_offset=0), _SubPort(port=OutPort(Node(22), 1), sub_offset=0): _SubPort(port=InPort(Node(23), 2), sub_offset=0), _SubPort(port=OutPort(Node(24), 0), sub_offset=0): _SubPort(port=InPort(Node(23), 0), sub_offset=0), _SubPort(port=OutPort(Node(26), 0), sub_offset=0): _SubPort(port=InPort(Node(28), 0), sub_offset=0), _SubPort(port=OutPort(Node(26), 1), sub_offset=0): _SubPort(port=InPort(Node(36), 0), sub_offset=0), _SubPort(port=OutPort(Node(26), 2), sub_offset=0): _SubPort(port=InPort(Node(35), 0), sub_offset=0), _SubPort(port=OutPort(Node(26), 2), sub_offset=1): _SubPort(port=InPort(Node(39), 0), sub_offset=0), _SubPort(port=OutPort(Node(33), 0), sub_offset=0): _SubPort(port=InPort(Node(27), 0), sub_offset=0), _SubPort(port=OutPort(Node(36), 0), sub_offset=0): _SubPort(port=InPort(Node(27), 1), sub_offset=0), _SubPort(port=OutPort(Node(39), 0), sub_offset=0): _SubPort(port=InPort(Node(27), 2), sub_offset=0), _SubPort(port=OutPort(Node(28), 0), sub_offset=0): _SubPort(port=InPort(Node(31), 0), sub_offset=0), _SubPort(port=OutPort(Node(28), 1), sub_offset=0): _SubPort(port=InPort(Node(29), 0), sub_offset=0), _SubPort(port=OutPort(Node(29), 0), sub_offset=0): _SubPort(port=InPort(Node(30), 0), sub_offset=0), _SubPort(port=OutPort(Node(29), 1), sub_offset=0): _SubPort(port=InPort(Node(30), 1), sub_offset=0), _SubPort(port=OutPort(Node(29), 2), sub_offset=0): _SubPort(port=InPort(Node(30), 2), sub_offset=0), _SubPort(port=OutPort(Node(30), 0), sub_offset=0): _SubPort(port=InPort(Node(31), 1), sub_offset=0), _SubPort(port=OutPort(Node(31), 0), sub_offset=0): _SubPort(port=InPort(Node(32), 0), sub_offset=0), _SubPort(port=OutPort(Node(32), 1), sub_offset=0): _SubPort(port=InPort(Node(33), 0), sub_offset=0), _SubPort(port=OutPort(Node(34), 0), sub_offset=0): _SubPort(port=InPort(Node(36), 2), sub_offset=0), _SubPort(port=OutPort(Node(35), 0), sub_offset=0): _SubPort(port=InPort(Node(36), 1), sub_offset=0), _SubPort(port=OutPort(Node(38), 0), sub_offset=0): _SubPort(port=InPort(Node(39), 1), sub_offset=0), _SubPort(port=OutPort(Node(40), 0), sub_offset=0): _SubPort(port=InPort(Node(42), 0), sub_offset=0), _SubPort(port=OutPort(Node(42), 0), sub_offset=0): _SubPort(port=InPort(Node(43), 0), sub_offset=0), _SubPort(port=OutPort(Node(43), 0), sub_offset=0): _SubPort(port=InPort(Node(45), 0), sub_offset=0), _SubPort(port=OutPort(Node(43), 1), sub_offset=0): _SubPort(port=InPort(Node(50), 0), sub_offset=0), _SubPort(port=OutPort(Node(44), 0), sub_offset=0): _SubPort(port=InPort(Node(45), 1), sub_offset=0), _SubPort(port=OutPort(Node(45), 0), sub_offset=0): _SubPort(port=InPort(Node(46), 0), sub_offset=0), _SubPort(port=OutPort(Node(46), 0), sub_offset=0): _SubPort(port=InPort(Node(47), 0), sub_offset=0), _SubPort(port=OutPort(Node(55), 0), sub_offset=0): _SubPort(port=InPort(Node(54), 0), sub_offset=0), _SubPort(port=OutPort(Node(56), 0), sub_offset=0): _SubPort(port=InPort(Node(68), 0), sub_offset=0), _SubPort(port=OutPort(Node(67), 0), sub_offset=0): _SubPort(port=InPort(Node(58), 0), sub_offset=0), _SubPort(port=OutPort(Node(66), 0), sub_offset=0): _SubPort(port=InPort(Node(58), 1), sub_offset=0), _SubPort(port=OutPort(Node(60), 0), sub_offset=0): _SubPort(port=InPort(Node(66), 0), sub_offset=0), _SubPort(port=OutPort(Node(61), 0), sub_offset=0): _SubPort(port=InPort(Node(62), 0), sub_offset=0), _SubPort(port=OutPort(Node(62), 0), sub_offset=0): _SubPort(port=InPort(Node(63), 0), sub_offset=0), _SubPort(port=OutPort(Node(63), 0), sub_offset=0): _SubPort(port=InPort(Node(66), 1), sub_offset=0), _SubPort(port=OutPort(Node(65), 0), sub_offset=0): _SubPort(port=InPort(Node(66), 2), sub_offset=0), _SubPort(port=OutPort(Node(70), 0), sub_offset=0): _SubPort(port=InPort(Node(72), 0), sub_offset=0), _SubPort(port=OutPort(Node(72), 0), sub_offset=0): _SubPort(port=InPort(Node(71), 0), sub_offset=0), _SubPort(port=OutPort(Node(73), 0), sub_offset=0): _SubPort(port=InPort(Node(89), 0), sub_offset=0), _SubPort(port=OutPort(Node(73), 1), sub_offset=0): _SubPort(port=InPort(Node(83), 0), sub_offset=0), _SubPort(port=OutPort(Node(74), 0), sub_offset=0): _SubPort(port=InPort(Node(76), 0), sub_offset=0), _SubPort(port=OutPort(Node(81), 0), sub_offset=0): _SubPort(port=InPort(Node(75), 0), sub_offset=0), _SubPort(port=OutPort(Node(76), 0), sub_offset=0): _SubPort(port=InPort(Node(75), 1), sub_offset=0), _SubPort(port=OutPort(Node(76), 2), sub_offset=0): _SubPort(port=InPort(Node(75), 2), sub_offset=0), _SubPort(port=OutPort(Node(76), 2), sub_offset=1): _SubPort(port=InPort(Node(79), 0), sub_offset=0), _SubPort(port=OutPort(Node(76), 1), sub_offset=0): _SubPort(port=InPort(Node(75), 3), sub_offset=0), _SubPort(port=OutPort(Node(78), 0), sub_offset=0): _SubPort(port=InPort(Node(79), 1), sub_offset=0), _SubPort(port=OutPort(Node(79), 0), sub_offset=0): _SubPort(port=InPort(Node(80), 0), sub_offset=0), _SubPort(port=OutPort(Node(80), 0), sub_offset=0): _SubPort(port=InPort(Node(81), 0), sub_offset=0), _SubPort(port=OutPort(Node(108), 0), sub_offset=0): _SubPort(port=InPort(Node(82), 0), sub_offset=0), _SubPort(port=OutPort(Node(113), 0), sub_offset=0): _SubPort(port=InPort(Node(82), 0), sub_offset=1), _SubPort(port=OutPort(Node(83), 0), sub_offset=0): _SubPort(port=InPort(Node(95), 0), sub_offset=0), _SubPort(port=OutPort(Node(89), 0), sub_offset=0): _SubPort(port=InPort(Node(95), 0), sub_offset=1), _SubPort(port=OutPort(Node(84), 0), sub_offset=0): _SubPort(port=InPort(Node(85), 2), sub_offset=0), _SubPort(port=OutPort(Node(84), 0), sub_offset=1): _SubPort(port=InPort(Node(86), 0), sub_offset=0), _SubPort(port=OutPort(Node(84), 1), sub_offset=0): _SubPort(port=InPort(Node(85), 3), sub_offset=0), _SubPort(port=OutPort(Node(84), 2), sub_offset=0): _SubPort(port=InPort(Node(85), 4), sub_offset=0), _SubPort(port=OutPort(Node(84), 2), sub_offset=1): _SubPort(port=InPort(Node(86), 1), sub_offset=0), _SubPort(port=OutPort(Node(88), 0), sub_offset=0): _SubPort(port=InPort(Node(85), 0), sub_offset=0), _SubPort(port=OutPort(Node(87), 0), sub_offset=0): _SubPort(port=InPort(Node(85), 1), sub_offset=0), _SubPort(port=OutPort(Node(86), 0), sub_offset=0): _SubPort(port=InPort(Node(87), 0), sub_offset=0), _SubPort(port=OutPort(Node(90), 0), sub_offset=0): _SubPort(port=InPort(Node(91), 2), sub_offset=0), _SubPort(port=OutPort(Node(90), 0), sub_offset=1): _SubPort(port=InPort(Node(92), 0), sub_offset=0), _SubPort(port=OutPort(Node(90), 1), sub_offset=0): _SubPort(port=InPort(Node(91), 3), sub_offset=0), _SubPort(port=OutPort(Node(90), 2), sub_offset=0): _SubPort(port=InPort(Node(91), 4), sub_offset=0), _SubPort(port=OutPort(Node(90), 2), sub_offset=1): _SubPort(port=InPort(Node(92), 1), sub_offset=0), _SubPort(port=OutPort(Node(94), 0), sub_offset=0): _SubPort(port=InPort(Node(91), 0), sub_offset=0), _SubPort(port=OutPort(Node(93), 0), sub_offset=0): _SubPort(port=InPort(Node(91), 1), sub_offset=0), _SubPort(port=OutPort(Node(92), 0), sub_offset=0): _SubPort(port=InPort(Node(93), 0), sub_offset=0), _SubPort(port=OutPort(Node(95), 0), sub_offset=0): _SubPort(port=InPort(Node(113), 0), sub_offset=0), _SubPort(port=OutPort(Node(95), 1), sub_offset=0): _SubPort(port=InPort(Node(108), 0), sub_offset=0), _SubPort(port=OutPort(Node(96), 0), sub_offset=0): _SubPort(port=InPort(Node(98), 0), sub_offset=0), _SubPort(port=OutPort(Node(96), 1), sub_offset=0): _SubPort(port=InPort(Node(99), 1), sub_offset=0), _SubPort(port=OutPort(Node(96), 2), sub_offset=0): _SubPort(port=InPort(Node(99), 2), sub_offset=0), _SubPort(port=OutPort(Node(96), 3), sub_offset=0): _SubPort(port=InPort(Node(99), 3), sub_offset=0), _SubPort(port=OutPort(Node(99), 0), sub_offset=0): _SubPort(port=InPort(Node(97), 0), sub_offset=0), _SubPort(port=OutPort(Node(98), 0), sub_offset=0): _SubPort(port=InPort(Node(99), 0), sub_offset=0), _SubPort(port=OutPort(Node(101), 0), sub_offset=0): _SubPort(port=InPort(Node(103), 0), sub_offset=0), _SubPort(port=OutPort(Node(101), 1), sub_offset=0): _SubPort(port=InPort(Node(103), 1), sub_offset=0), _SubPort(port=OutPort(Node(101), 2), sub_offset=0): _SubPort(port=InPort(Node(103), 2), sub_offset=0), _SubPort(port=OutPort(Node(103), 0), sub_offset=0): _SubPort(port=InPort(Node(102), 0), sub_offset=0), _SubPort(port=OutPort(Node(107), 0), sub_offset=0): _SubPort(port=InPort(Node(106), 0), sub_offset=0), _SubPort(port=OutPort(Node(112), 0), sub_offset=0): _SubPort(port=InPort(Node(110), 0), sub_offset=0), _SubPort(port=OutPort(Node(111), 0), sub_offset=0): _SubPort(port=InPort(Node(110), 1), sub_offset=0), _SubPort(port=OutPort(Node(114), 0), sub_offset=0): _SubPort(port=InPort(Node(116), 0), sub_offset=0), _SubPort(port=OutPort(Node(114), 0), sub_offset=1): _SubPort(port=InPort(Node(118), 0), sub_offset=0), _SubPort(port=OutPort(Node(114), 1), sub_offset=0): _SubPort(port=InPort(Node(116), 1), sub_offset=0), _SubPort(port=OutPort(Node(114), 1), sub_offset=1): _SubPort(port=InPort(Node(117), 2), sub_offset=0), _SubPort(port=OutPort(Node(114), 2), sub_offset=0): _SubPort(port=InPort(Node(117), 1), sub_offset=0), _SubPort(port=OutPort(Node(120), 0), sub_offset=0): _SubPort(port=InPort(Node(115), 0), sub_offset=0), _SubPort(port=OutPort(Node(119), 0), sub_offset=0): _SubPort(port=InPort(Node(115), 1), sub_offset=0), _SubPort(port=OutPort(Node(116), 0), sub_offset=0): _SubPort(port=InPort(Node(117), 0), sub_offset=0), _SubPort(port=OutPort(Node(117), 0), sub_offset=0): _SubPort(port=InPort(Node(118), 1), sub_offset=0), _SubPort(port=OutPort(Node(118), 0), sub_offset=0): _SubPort(port=InPort(Node(119), 0), sub_offset=0), _SubPort(port=OutPort(Node(122), 0), sub_offset=0): _SubPort(port=InPort(Node(124), 0), sub_offset=0), _SubPort(port=OutPort(Node(124), 0), sub_offset=0): _SubPort(port=InPort(Node(123), 0), sub_offset=0), _SubPort(port=OutPort(Node(125), 0), sub_offset=0): _SubPort(port=InPort(Node(148), 0), sub_offset=0), _SubPort(port=OutPort(Node(190), 0), sub_offset=0): _SubPort(port=InPort(Node(148), 0), sub_offset=1), _SubPort(port=OutPort(Node(126), 0), sub_offset=0): _SubPort(port=InPort(Node(131), 0), sub_offset=0), _SubPort(port=OutPort(Node(146), 0), sub_offset=0): _SubPort(port=InPort(Node(127), 0), sub_offset=0), _SubPort(port=OutPort(Node(145), 0), sub_offset=0): _SubPort(port=InPort(Node(127), 1), sub_offset=0), _SubPort(port=OutPort(Node(145), 2), sub_offset=0): _SubPort(port=InPort(Node(127), 2), sub_offset=0), _SubPort(port=OutPort(Node(145), 1), sub_offset=0): _SubPort(port=InPort(Node(127), 3), sub_offset=0), _SubPort(port=OutPort(Node(134), 0), sub_offset=0): _SubPort(port=InPort(Node(127), 4), sub_offset=0), _SubPort(port=OutPort(Node(129), 0), sub_offset=0): _SubPort(port=InPort(Node(130), 0), sub_offset=0), _SubPort(port=OutPort(Node(129), 0), sub_offset=1): _SubPort(port=InPort(Node(133), 0), sub_offset=0), _SubPort(port=OutPort(Node(130), 0), sub_offset=0): _SubPort(port=InPort(Node(131), 1), sub_offset=0), _SubPort(port=OutPort(Node(131), 0), sub_offset=0): _SubPort(port=InPort(Node(134), 0), sub_offset=0), _SubPort(port=OutPort(Node(131), 1), sub_offset=0): _SubPort(port=InPort(Node(132), 0), sub_offset=0), _SubPort(port=OutPort(Node(132), 0), sub_offset=0): _SubPort(port=InPort(Node(134), 2), sub_offset=0), _SubPort(port=OutPort(Node(133), 0), sub_offset=0): _SubPort(port=InPort(Node(134), 1), sub_offset=0), _SubPort(port=OutPort(Node(137), 0), sub_offset=0): _SubPort(port=InPort(Node(138), 0), sub_offset=0), _SubPort(port=OutPort(Node(138), 0), sub_offset=0): _SubPort(port=InPort(Node(139), 0), sub_offset=0), _SubPort(port=OutPort(Node(139), 0), sub_offset=0): _SubPort(port=InPort(Node(142), 0), sub_offset=0), _SubPort(port=OutPort(Node(141), 0), sub_offset=0): _SubPort(port=InPort(Node(142), 1), sub_offset=0), _SubPort(port=OutPort(Node(142), 0), sub_offset=0): _SubPort(port=InPort(Node(143), 0), sub_offset=0), _SubPort(port=OutPort(Node(143), 0), sub_offset=0): _SubPort(port=InPort(Node(144), 0), sub_offset=0), _SubPort(port=OutPort(Node(144), 0), sub_offset=0): _SubPort(port=InPort(Node(145), 0), sub_offset=0), _SubPort(port=OutPort(Node(171), 0), sub_offset=0): _SubPort(port=InPort(Node(147), 0), sub_offset=0), _SubPort(port=OutPort(Node(148), 0), sub_offset=0): _SubPort(port=InPort(Node(152), 0), sub_offset=0), _SubPort(port=OutPort(Node(149), 0), sub_offset=0): _SubPort(port=InPort(Node(150), 1), sub_offset=0), _SubPort(port=OutPort(Node(149), 1), sub_offset=0): _SubPort(port=InPort(Node(150), 2), sub_offset=0), _SubPort(port=OutPort(Node(149), 2), sub_offset=0): _SubPort(port=InPort(Node(150), 3), sub_offset=0), _SubPort(port=OutPort(Node(149), 3), sub_offset=0): _SubPort(port=InPort(Node(150), 4), sub_offset=0), _SubPort(port=OutPort(Node(151), 0), sub_offset=0): _SubPort(port=InPort(Node(150), 0), sub_offset=0), _SubPort(port=OutPort(Node(152), 0), sub_offset=0): _SubPort(port=InPort(Node(175), 0), sub_offset=0), _SubPort(port=OutPort(Node(152), 1), sub_offset=0): _SubPort(port=InPort(Node(190), 0), sub_offset=0), _SubPort(port=OutPort(Node(153), 0), sub_offset=0): _SubPort(port=InPort(Node(155), 0), sub_offset=0), _SubPort(port=OutPort(Node(153), 1), sub_offset=0): _SubPort(port=InPort(Node(155), 2), sub_offset=0), _SubPort(port=OutPort(Node(153), 2), sub_offset=0): _SubPort(port=InPort(Node(155), 1), sub_offset=0), _SubPort(port=OutPort(Node(153), 3), sub_offset=0): _SubPort(port=InPort(Node(154), 2), sub_offset=0), _SubPort(port=OutPort(Node(170), 0), sub_offset=0): _SubPort(port=InPort(Node(154), 0), sub_offset=0), _SubPort(port=OutPort(Node(157), 1), sub_offset=0): _SubPort(port=InPort(Node(154), 1), sub_offset=0), _SubPort(port=OutPort(Node(155), 0), sub_offset=0): _SubPort(port=InPort(Node(156), 0), sub_offset=0), _SubPort(port=OutPort(Node(156), 0), sub_offset=0): _SubPort(port=InPort(Node(157), 0), sub_offset=0), _SubPort(port=OutPort(Node(157), 0), sub_offset=0): _SubPort(port=InPort(Node(170), 0), sub_offset=0), _SubPort(port=OutPort(Node(163), 0), sub_offset=0): _SubPort(port=InPort(Node(160), 0), sub_offset=0), _SubPort(port=OutPort(Node(161), 0), sub_offset=0): _SubPort(port=InPort(Node(160), 1), sub_offset=0), _SubPort(port=OutPort(Node(165), 0), sub_offset=0): _SubPort(port=InPort(Node(167), 0), sub_offset=0), _SubPort(port=OutPort(Node(169), 0), sub_offset=0): _SubPort(port=InPort(Node(166), 0), sub_offset=0), _SubPort(port=OutPort(Node(167), 0), sub_offset=0): _SubPort(port=InPort(Node(166), 1), sub_offset=0), _SubPort(port=OutPort(Node(175), 0), sub_offset=0): _SubPort(port=InPort(Node(171), 0), sub_offset=0), _SubPort(port=OutPort(Node(172), 0), sub_offset=0): _SubPort(port=InPort(Node(173), 1), sub_offset=0), _SubPort(port=OutPort(Node(174), 0), sub_offset=0): _SubPort(port=InPort(Node(173), 0), sub_offset=0), _SubPort(port=OutPort(Node(176), 0), sub_offset=0): _SubPort(port=InPort(Node(178), 0), sub_offset=0), _SubPort(port=OutPort(Node(176), 1), sub_offset=0): _SubPort(port=InPort(Node(177), 1), sub_offset=0), _SubPort(port=OutPort(Node(189), 0), sub_offset=0): _SubPort(port=InPort(Node(177), 0), sub_offset=0), _SubPort(port=OutPort(Node(183), 0), sub_offset=0): _SubPort(port=InPort(Node(187), 1), sub_offset=0), _SubPort(port=OutPort(Node(186), 0), sub_offset=0): _SubPort(port=InPort(Node(187), 0), sub_offset=0), _SubPort(port=OutPort(Node(191), 0), sub_offset=0): _SubPort(port=InPort(Node(193), 0), sub_offset=0), _SubPort(port=OutPort(Node(191), 1), sub_offset=0): _SubPort(port=InPort(Node(206), 0), sub_offset=0), _SubPort(port=OutPort(Node(220), 0), sub_offset=0): _SubPort(port=InPort(Node(192), 0), sub_offset=0), _SubPort(port=OutPort(Node(204), 0), sub_offset=0): _SubPort(port=InPort(Node(192), 1), sub_offset=0), _SubPort(port=OutPort(Node(204), 2), sub_offset=0): _SubPort(port=InPort(Node(192), 2), sub_offset=0), _SubPort(port=OutPort(Node(204), 1), sub_offset=0): _SubPort(port=InPort(Node(192), 3), sub_offset=0), _SubPort(port=OutPort(Node(217), 0), sub_offset=0): _SubPort(port=InPort(Node(192), 4), sub_offset=0), _SubPort(port=OutPort(Node(193), 0), sub_offset=0): _SubPort(port=InPort(Node(203), 0), sub_offset=0), _SubPort(port=OutPort(Node(199), 0), sub_offset=0): _SubPort(port=InPort(Node(196), 0), sub_offset=0), _SubPort(port=OutPort(Node(198), 0), sub_offset=0): _SubPort(port=InPort(Node(199), 0), sub_offset=0), _SubPort(port=OutPort(Node(201), 0), sub_offset=0): _SubPort(port=InPort(Node(202), 0), sub_offset=0), _SubPort(port=OutPort(Node(203), 0), sub_offset=0): _SubPort(port=InPort(Node(205), 0), sub_offset=0), _SubPort(port=OutPort(Node(203), 0), sub_offset=1): _SubPort(port=InPort(Node(209), 0), sub_offset=0), _SubPort(port=OutPort(Node(203), 0), sub_offset=2): _SubPort(port=InPort(Node(213), 0), sub_offset=0), _SubPort(port=OutPort(Node(203), 1), sub_offset=0): _SubPort(port=InPort(Node(204), 0), sub_offset=0), _SubPort(port=OutPort(Node(205), 0), sub_offset=0): _SubPort(port=InPort(Node(206), 1), sub_offset=0), _SubPort(port=OutPort(Node(206), 0), sub_offset=0): _SubPort(port=InPort(Node(211), 0), sub_offset=0), _SubPort(port=OutPort(Node(206), 1), sub_offset=0): _SubPort(port=InPort(Node(212), 0), sub_offset=0), _SubPort(port=OutPort(Node(208), 0), sub_offset=0): _SubPort(port=InPort(Node(209), 1), sub_offset=0), _SubPort(port=OutPort(Node(209), 0), sub_offset=0): _SubPort(port=InPort(Node(210), 0), sub_offset=0), _SubPort(port=OutPort(Node(209), 0), sub_offset=1): _SubPort(port=InPort(Node(216), 0), sub_offset=0), _SubPort(port=OutPort(Node(210), 0), sub_offset=0): _SubPort(port=InPort(Node(211), 1), sub_offset=0), _SubPort(port=OutPort(Node(211), 0), sub_offset=0): _SubPort(port=InPort(Node(214), 0), sub_offset=0), _SubPort(port=OutPort(Node(211), 1), sub_offset=0): _SubPort(port=InPort(Node(212), 1), sub_offset=0), _SubPort(port=OutPort(Node(212), 0), sub_offset=0): _SubPort(port=InPort(Node(214), 2), sub_offset=0), _SubPort(port=OutPort(Node(212), 1), sub_offset=0): _SubPort(port=InPort(Node(217), 2), sub_offset=0), _SubPort(port=OutPort(Node(213), 0), sub_offset=0): _SubPort(port=InPort(Node(214), 1), sub_offset=0), _SubPort(port=OutPort(Node(214), 0), sub_offset=0): _SubPort(port=InPort(Node(217), 0), sub_offset=0), _SubPort(port=OutPort(Node(216), 0), sub_offset=0): _SubPort(port=InPort(Node(217), 1), sub_offset=0), _SubPort(port=OutPort(Node(222), 0), sub_offset=0): _SubPort(port=InPort(Node(224), 0), sub_offset=0), _SubPort(port=OutPort(Node(224), 0), sub_offset=0): _SubPort(port=InPort(Node(223), 0), sub_offset=0), _SubPort(port=OutPort(Node(225), 0), sub_offset=0): _SubPort(port=InPort(Node(261), 0), sub_offset=0), _SubPort(port=OutPort(Node(226), 0), sub_offset=0): _SubPort(port=InPort(Node(231), 0), sub_offset=0), _SubPort(port=OutPort(Node(260), 0), sub_offset=0): _SubPort(port=InPort(Node(227), 0), sub_offset=0), _SubPort(port=OutPort(Node(234), 0), sub_offset=0): _SubPort(port=InPort(Node(227), 1), sub_offset=0), _SubPort(port=OutPort(Node(228), 0), sub_offset=0): _SubPort(port=InPort(Node(234), 1), sub_offset=0), _SubPort(port=OutPort(Node(230), 0), sub_offset=0): _SubPort(port=InPort(Node(234), 2), sub_offset=0), _SubPort(port=OutPort(Node(231), 0), sub_offset=0): _SubPort(port=InPort(Node(232), 0), sub_offset=0), _SubPort(port=OutPort(Node(232), 0), sub_offset=0): _SubPort(port=InPort(Node(233), 0), sub_offset=0), _SubPort(port=OutPort(Node(232), 1), sub_offset=0): _SubPort(port=InPort(Node(233), 1), sub_offset=0), _SubPort(port=OutPort(Node(233), 0), sub_offset=0): _SubPort(port=InPort(Node(234), 0), sub_offset=0), _SubPort(port=OutPort(Node(235), 0), sub_offset=0): _SubPort(port=InPort(Node(237), 0), sub_offset=0), _SubPort(port=OutPort(Node(235), 1), sub_offset=0): _SubPort(port=InPort(Node(240), 1), sub_offset=0), _SubPort(port=OutPort(Node(235), 2), sub_offset=0): _SubPort(port=InPort(Node(240), 2), sub_offset=0), _SubPort(port=OutPort(Node(240), 0), sub_offset=0): _SubPort(port=InPort(Node(236), 0), sub_offset=0), _SubPort(port=OutPort(Node(240), 1), sub_offset=0): _SubPort(port=InPort(Node(236), 1), sub_offset=0), _SubPort(port=OutPort(Node(240), 2), sub_offset=0): _SubPort(port=InPort(Node(236), 2), sub_offset=0), _SubPort(port=OutPort(Node(237), 0), sub_offset=0): _SubPort(port=InPort(Node(238), 0), sub_offset=0), _SubPort(port=OutPort(Node(237), 1), sub_offset=0): _SubPort(port=InPort(Node(238), 1), sub_offset=0), _SubPort(port=OutPort(Node(238), 0), sub_offset=0): _SubPort(port=InPort(Node(239), 0), sub_offset=0), _SubPort(port=OutPort(Node(239), 0), sub_offset=0): _SubPort(port=InPort(Node(240), 0), sub_offset=0), _SubPort(port=OutPort(Node(242), 0), sub_offset=0): _SubPort(port=InPort(Node(243), 1), sub_offset=0), _SubPort(port=OutPort(Node(242), 1), sub_offset=0): _SubPort(port=InPort(Node(243), 2), sub_offset=0), _SubPort(port=OutPort(Node(244), 0), sub_offset=0): _SubPort(port=InPort(Node(243), 0), sub_offset=0), _SubPort(port=OutPort(Node(246), 0), sub_offset=0): _SubPort(port=InPort(Node(248), 0), sub_offset=0), _SubPort(port=OutPort(Node(246), 1), sub_offset=0): _SubPort(port=InPort(Node(256), 0), sub_offset=0), _SubPort(port=OutPort(Node(246), 2), sub_offset=0): _SubPort(port=InPort(Node(255), 0), sub_offset=0), _SubPort(port=OutPort(Node(246), 2), sub_offset=1): _SubPort(port=InPort(Node(259), 0), sub_offset=0), _SubPort(port=OutPort(Node(253), 0), sub_offset=0): _SubPort(port=InPort(Node(247), 0), sub_offset=0), _SubPort(port=OutPort(Node(256), 0), sub_offset=0): _SubPort(port=InPort(Node(247), 1), sub_offset=0), _SubPort(port=OutPort(Node(259), 0), sub_offset=0): _SubPort(port=InPort(Node(247), 2), sub_offset=0), _SubPort(port=OutPort(Node(248), 0), sub_offset=0): _SubPort(port=InPort(Node(251), 0), sub_offset=0), _SubPort(port=OutPort(Node(248), 1), sub_offset=0): _SubPort(port=InPort(Node(249), 0), sub_offset=0), _SubPort(port=OutPort(Node(249), 0), sub_offset=0): _SubPort(port=InPort(Node(250), 0), sub_offset=0), _SubPort(port=OutPort(Node(249), 1), sub_offset=0): _SubPort(port=InPort(Node(250), 1), sub_offset=0), _SubPort(port=OutPort(Node(250), 0), sub_offset=0): _SubPort(port=InPort(Node(251), 1), sub_offset=0), _SubPort(port=OutPort(Node(251), 0), sub_offset=0): _SubPort(port=InPort(Node(252), 0), sub_offset=0), _SubPort(port=OutPort(Node(252), 0), sub_offset=0): _SubPort(port=InPort(Node(254), 0), sub_offset=0), _SubPort(port=OutPort(Node(252), 1), sub_offset=0): _SubPort(port=InPort(Node(253), 0), sub_offset=0), _SubPort(port=OutPort(Node(254), 0), sub_offset=0): _SubPort(port=InPort(Node(256), 2), sub_offset=0), _SubPort(port=OutPort(Node(255), 0), sub_offset=0): _SubPort(port=InPort(Node(256), 1), sub_offset=0), _SubPort(port=OutPort(Node(258), 0), sub_offset=0): _SubPort(port=InPort(Node(259), 1), sub_offset=0), _SubPort(port=OutPort(Node(263), 0), sub_offset=0): _SubPort(port=InPort(Node(265), 0), sub_offset=0), _SubPort(port=OutPort(Node(265), 0), sub_offset=0): _SubPort(port=InPort(Node(264), 0), sub_offset=0), _SubPort(port=OutPort(Node(267), 0), sub_offset=0): _SubPort(port=InPort(Node(269), 0), sub_offset=0), _SubPort(port=OutPort(Node(269), 0), sub_offset=0): _SubPort(port=InPort(Node(268), 0), sub_offset=0), _SubPort(port=OutPort(Node(270), 0), sub_offset=0): _SubPort(port=InPort(Node(277), 0), sub_offset=0), _SubPort(port=OutPort(Node(271), 0), sub_offset=0): _SubPort(port=InPort(Node(275), 0), sub_offset=0), _SubPort(port=OutPort(Node(276), 0), sub_offset=0): _SubPort(port=InPort(Node(272), 0), sub_offset=0), _SubPort(port=OutPort(Node(275), 0), sub_offset=0): _SubPort(port=InPort(Node(272), 1), sub_offset=0), _SubPort(port=OutPort(Node(274), 0), sub_offset=0): _SubPort(port=InPort(Node(275), 1), sub_offset=0), _SubPort(port=OutPort(Node(279), 0), sub_offset=0): _SubPort(port=InPort(Node(281), 0), sub_offset=0), _SubPort(port=OutPort(Node(281), 0), sub_offset=0): _SubPort(port=InPort(Node(280), 0), sub_offset=0), _SubPort(port=OutPort(Node(282), 0), sub_offset=0): _SubPort(port=InPort(Node(314), 0), sub_offset=0), _SubPort(port=OutPort(Node(282), 1), sub_offset=0): _SubPort(port=InPort(Node(302), 0), sub_offset=0), _SubPort(port=OutPort(Node(283), 0), sub_offset=0): _SubPort(port=InPort(Node(285), 0), sub_offset=0), _SubPort(port=OutPort(Node(292), 0), sub_offset=0): _SubPort(port=InPort(Node(284), 0), sub_offset=0), _SubPort(port=OutPort(Node(285), 0), sub_offset=0): _SubPort(port=InPort(Node(284), 1), sub_offset=0), _SubPort(port=OutPort(Node(285), 1), sub_offset=0): _SubPort(port=InPort(Node(289), 0), sub_offset=0), _SubPort(port=OutPort(Node(285), 1), sub_offset=1): _SubPort(port=InPort(Node(292), 1), sub_offset=0), _SubPort(port=OutPort(Node(286), 0), sub_offset=0): _SubPort(port=InPort(Node(287), 0), sub_offset=0), _SubPort(port=OutPort(Node(287), 0), sub_offset=0): _SubPort(port=InPort(Node(288), 0), sub_offset=0), _SubPort(port=OutPort(Node(288), 0), sub_offset=0): _SubPort(port=InPort(Node(289), 1), sub_offset=0), _SubPort(port=OutPort(Node(289), 0), sub_offset=0): _SubPort(port=InPort(Node(290), 0), sub_offset=0), _SubPort(port=OutPort(Node(290), 0), sub_offset=0): _SubPort(port=InPort(Node(291), 0), sub_offset=0), _SubPort(port=OutPort(Node(291), 0), sub_offset=0): _SubPort(port=InPort(Node(292), 0), sub_offset=0), _SubPort(port=OutPort(Node(296), 0), sub_offset=0): _SubPort(port=InPort(Node(295), 0), sub_offset=0), _SubPort(port=OutPort(Node(298), 0), sub_offset=0): _SubPort(port=InPort(Node(300), 0), sub_offset=0), _SubPort(port=OutPort(Node(300), 0), sub_offset=0): _SubPort(port=InPort(Node(299), 0), sub_offset=0), _SubPort(port=OutPort(Node(302), 0), sub_offset=0): _SubPort(port=InPort(Node(301), 0), sub_offset=0), _SubPort(port=OutPort(Node(314), 0), sub_offset=0): _SubPort(port=InPort(Node(301), 0), sub_offset=1), _SubPort(port=OutPort(Node(303), 0), sub_offset=0): _SubPort(port=InPort(Node(305), 0), sub_offset=0), _SubPort(port=OutPort(Node(303), 0), sub_offset=1): _SubPort(port=InPort(Node(309), 0), sub_offset=0), _SubPort(port=OutPort(Node(303), 1), sub_offset=0): _SubPort(port=InPort(Node(306), 0), sub_offset=0), _SubPort(port=OutPort(Node(313), 0), sub_offset=0): _SubPort(port=InPort(Node(304), 0), sub_offset=0), _SubPort(port=OutPort(Node(312), 0), sub_offset=0): _SubPort(port=InPort(Node(304), 1), sub_offset=0), _SubPort(port=OutPort(Node(305), 0), sub_offset=0): _SubPort(port=InPort(Node(306), 1), sub_offset=0), _SubPort(port=OutPort(Node(306), 0), sub_offset=0): _SubPort(port=InPort(Node(310), 0), sub_offset=0), _SubPort(port=OutPort(Node(306), 1), sub_offset=0): _SubPort(port=InPort(Node(311), 0), sub_offset=0), _SubPort(port=OutPort(Node(308), 0), sub_offset=0): _SubPort(port=InPort(Node(309), 1), sub_offset=0), _SubPort(port=OutPort(Node(309), 0), sub_offset=0): _SubPort(port=InPort(Node(310), 1), sub_offset=0), _SubPort(port=OutPort(Node(310), 0), sub_offset=0): _SubPort(port=InPort(Node(311), 1), sub_offset=0), _SubPort(port=OutPort(Node(311), 0), sub_offset=0): _SubPort(port=InPort(Node(312), 0), sub_offset=0), _SubPort(port=OutPort(Node(315), 0), sub_offset=0): _SubPort(port=InPort(Node(317), 0), sub_offset=0), _SubPort(port=OutPort(Node(320), 0), sub_offset=0): _SubPort(port=InPort(Node(316), 0), sub_offset=0), _SubPort(port=OutPort(Node(319), 0), sub_offset=0): _SubPort(port=InPort(Node(316), 1), sub_offset=0), _SubPort(port=OutPort(Node(322), 0), sub_offset=0): _SubPort(port=InPort(Node(324), 0), sub_offset=0), _SubPort(port=OutPort(Node(324), 0), sub_offset=0): _SubPort(port=InPort(Node(323), 0), sub_offset=0), _SubPort(port=OutPort(Node(325), 0), sub_offset=0): _SubPort(port=InPort(Node(331), 0), sub_offset=0), _SubPort(port=OutPort(Node(326), 0), sub_offset=0): _SubPort(port=InPort(Node(328), 0), sub_offset=0), _SubPort(port=OutPort(Node(330), 0), sub_offset=0): _SubPort(port=InPort(Node(327), 0), sub_offset=0), _SubPort(port=OutPort(Node(329), 0), sub_offset=0): _SubPort(port=InPort(Node(327), 1), sub_offset=0), _SubPort(port=OutPort(Node(328), 0), sub_offset=0): _SubPort(port=InPort(Node(329), 0), sub_offset=0), _SubPort(port=OutPort(Node(328), 1), sub_offset=0): _SubPort(port=InPort(Node(329), 1), sub_offset=0), _SubPort(port=OutPort(Node(328), 2), sub_offset=0): _SubPort(port=InPort(Node(329), 2), sub_offset=0), _SubPort(port=OutPort(Node(333), 0), sub_offset=0): _SubPort(port=InPort(Node(335), 0), sub_offset=0), _SubPort(port=OutPort(Node(335), 0), sub_offset=0): _SubPort(port=InPort(Node(334), 0), sub_offset=0), _SubPort(port=OutPort(Node(336), 0), sub_offset=0): _SubPort(port=InPort(Node(345), 0), sub_offset=0), _SubPort(port=OutPort(Node(337), 0), sub_offset=0): _SubPort(port=InPort(Node(343), 1), sub_offset=0), _SubPort(port=OutPort(Node(344), 0), sub_offset=0): _SubPort(port=InPort(Node(338), 0), sub_offset=0), _SubPort(port=OutPort(Node(343), 0), sub_offset=0): _SubPort(port=InPort(Node(338), 1), sub_offset=0), _SubPort(port=OutPort(Node(340), 0), sub_offset=0): _SubPort(port=InPort(Node(343), 0), sub_offset=0), _SubPort(port=OutPort(Node(342), 0), sub_offset=0): _SubPort(port=InPort(Node(343), 2), sub_offset=0), _SubPort(port=OutPort(Node(52), 0), sub_offset=0): _SubPort(port=InPort(Node(11), 0), sub_offset=0), _SubPort(port=OutPort(Node(69), 0), sub_offset=0): _SubPort(port=InPort(Node(19), 1), sub_offset=0), _SubPort(port=OutPort(Node(121), 0), sub_offset=0): _SubPort(port=InPort(Node(40), 1), sub_offset=0), _SubPort(port=OutPort(Node(221), 0), sub_offset=0): _SubPort(port=InPort(Node(42), 1), sub_offset=0), _SubPort(port=OutPort(Node(262), 0), sub_offset=0): _SubPort(port=InPort(Node(44), 0), sub_offset=0), _SubPort(port=OutPort(Node(332), 0), sub_offset=0): _SubPort(port=InPort(Node(143), 1), sub_offset=0), _SubPort(port=OutPort(Node(321), 0), sub_offset=0): _SubPort(port=InPort(Node(144), 1), sub_offset=0), _SubPort(port=OutPort(Node(69), 0), sub_offset=1): _SubPort(port=InPort(Node(156), 1), sub_offset=0), _SubPort(port=OutPort(Node(266), 0), sub_offset=0): _SubPort(port=InPort(Node(231), 1), sub_offset=0), _SubPort(port=OutPort(Node(278), 0), sub_offset=0): _SubPort(port=InPort(Node(239), 1), sub_offset=0)}), _free_nodes=[])], extensions=[Extension(name='tket.quantum', version=SemanticVersion(major=0, minor=2, patch=1, prerelease=None, build=None), types={}, operations={'CRz': OpDef(name='CRz', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([Qubit, Qubit, ExtType(type_def=TypeDef(name='rotation', description='rotation type expressed as number of half turns', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [Qubit, Qubit])), binary=False), description='CRz', misc={'commutation': []}), 'CX': OpDef(name='CX', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([Qubit, Qubit], [Qubit, Qubit])), binary=False), description='CX', misc={'commutation': [[0, 'Z'], [1, 'X']]}), 'CY': OpDef(name='CY', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([Qubit, Qubit], [Qubit, Qubit])), binary=False), description='CY', misc={'commutation': []}), 'CZ': OpDef(name='CZ', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([Qubit, Qubit], [Qubit, Qubit])), binary=False), description='CZ', misc={'commutation': [[0, 'Z'], [1, 'Z']]}), 'H': OpDef(name='H', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([Qubit], [Qubit])), binary=False), description='H', misc={'commutation': []}), 'Measure': OpDef(name='Measure', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([Qubit], [Qubit, Bool])), binary=False), description='Measure', misc={'commutation': [[0, 'Z']]}), 'MeasureFree': OpDef(name='MeasureFree', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([Qubit], [ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])])), binary=False), description='MeasureFree', misc={'commutation': []}), 'QAlloc': OpDef(name='QAlloc', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([], [Qubit])), binary=False), description='QAlloc', misc={'commutation': []}), 'QFree': OpDef(name='QFree', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([Qubit], [])), binary=False), description='QFree', misc={'commutation': []}), 'Reset': OpDef(name='Reset', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([Qubit], [Qubit])), binary=False), description='Reset', misc={'commutation': []}), 'Rx': OpDef(name='Rx', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([Qubit, ExtType(type_def=TypeDef(name='rotation', description='rotation type expressed as number of half turns', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [Qubit])), binary=False), description='Rx', misc={'commutation': [[0, 'X']]}), 'Ry': OpDef(name='Ry', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([Qubit, ExtType(type_def=TypeDef(name='rotation', description='rotation type expressed as number of half turns', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [Qubit])), binary=False), description='Ry', misc={'commutation': []}), 'Rz': OpDef(name='Rz', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([Qubit, ExtType(type_def=TypeDef(name='rotation', description='rotation type expressed as number of half turns', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [Qubit])), binary=False), description='Rz', misc={'commutation': [[0, 'Z']]}), 'S': OpDef(name='S', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([Qubit], [Qubit])), binary=False), description='S', misc={'commutation': [[0, 'Z']]}), 'Sdg': OpDef(name='Sdg', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([Qubit], [Qubit])), binary=False), description='Sdg', misc={'commutation': [[0, 'Z']]}), 'T': OpDef(name='T', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([Qubit], [Qubit])), binary=False), description='T', misc={'commutation': [[0, 'Z']]}), 'Tdg': OpDef(name='Tdg', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([Qubit], [Qubit])), binary=False), description='Tdg', misc={'commutation': [[0, 'Z']]}), 'Toffoli': OpDef(name='Toffoli', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([Qubit, Qubit, Qubit], [Qubit, Qubit, Qubit])), binary=False), description='Toffoli', misc={'commutation': []}), 'TryQAlloc': OpDef(name='TryQAlloc', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([], [Option(Qubit)])), binary=False), description='TryQAlloc', misc={'commutation': []}), 'V': OpDef(name='V', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([Qubit], [Qubit])), binary=False), description='V', misc={'commutation': [[0, 'X']]}), 'Vdg': OpDef(name='Vdg', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([Qubit], [Qubit])), binary=False), description='Vdg', misc={'commutation': [[0, 'X']]}), 'X': OpDef(name='X', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([Qubit], [Qubit])), binary=False), description='X', misc={'commutation': [[0, 'X']]}), 'Y': OpDef(name='Y', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([Qubit], [Qubit])), binary=False), description='Y', misc={'commutation': [[0, 'Y']]}), 'Z': OpDef(name='Z', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([Qubit], [Qubit])), binary=False), description='Z', misc={'commutation': [[0, 'Z']]}), 'symbolic_angle': OpDef(name='symbolic_angle', signature=OpDefSig(poly_func=PolyFuncType(params=[StringParam()], body=FunctionType([], [ExtType(type_def=TypeDef(name='rotation', description='rotation type expressed as number of half turns', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])])), binary=False), description='Store a sympy expression that can be evaluated to an angle.', misc={})}), Extension(name='tket.bool', version=SemanticVersion(major=0, minor=2, patch=0, prerelease=None, build=None), types={'bool': TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable))}, operations={'and': OpDef(name='and', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]), ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])])), binary=False), description='Logical AND between two tket.bools.', misc={}), 'eq': OpDef(name='eq', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]), ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])])), binary=False), description='Equality between two tket.bools.', misc={}), 'make_opaque': OpDef(name='make_opaque', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([Bool], [ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])])), binary=False), description='Convert a Hugr bool_t (a unit sum) into an tket.bool.', misc={}), 'not': OpDef(name='not', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])])), binary=False), description='Negation of a tket.bool.', misc={}), 'or': OpDef(name='or', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]), ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])])), binary=False), description='Logical OR between two tket.bools.', misc={}), 'read': OpDef(name='read', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [Bool])), binary=False), description='Convert a tket.bool into a Hugr bool_t (a unit sum).', misc={}), 'xor': OpDef(name='xor', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]), ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [ExtType(type_def=TypeDef(name='bool', description='An opaque bool type', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])])), binary=False), description='Logical XOR between two tket.bools.', misc={})}), Extension(name='tket.result', version=SemanticVersion(major=0, minor=2, patch=0, prerelease=None, build=None), types={}, operations={'result_array_bool': OpDef(name='result_array_bool', signature=OpDefSig(poly_func=PolyFuncType(params=[StringParam(), BoundedNatParam(upper_bound=None)], body=FunctionType([ExtType(type_def=TypeDef(name='array', description='Fixed-length array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[VariableArg(idx=1, param=BoundedNatParam(upper_bound=None)), TypeTypeArg(ty=Bool)])], [])), binary=False), description='Report an array of boolean results.', misc={}), 'result_array_f64': OpDef(name='result_array_f64', signature=OpDefSig(poly_func=PolyFuncType(params=[StringParam(), BoundedNatParam(upper_bound=None)], body=FunctionType([ExtType(type_def=TypeDef(name='array', description='Fixed-length array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[VariableArg(idx=1, param=BoundedNatParam(upper_bound=None)), TypeTypeArg(ty=ExtType(type_def=TypeDef(name='float64', description='64-bit IEEE 754-2019 floating-point value', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]))])], [])), binary=False), description='Report an array of floating-point results.', misc={}), 'result_array_int': OpDef(name='result_array_int', signature=OpDefSig(poly_func=PolyFuncType(params=[StringParam(), BoundedNatParam(upper_bound=None), BoundedNatParam(upper_bound=7)], body=FunctionType([ExtType(type_def=TypeDef(name='array', description='Fixed-length array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[VariableArg(idx=1, param=BoundedNatParam(upper_bound=None)), TypeTypeArg(ty=ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=2, param=BoundedNatParam(upper_bound=7))]))])], [])), binary=False), description='Report an array of signed integer results.', misc={}), 'result_array_uint': OpDef(name='result_array_uint', signature=OpDefSig(poly_func=PolyFuncType(params=[StringParam(), BoundedNatParam(upper_bound=None), BoundedNatParam(upper_bound=7)], body=FunctionType([ExtType(type_def=TypeDef(name='array', description='Fixed-length array', params=[BoundedNatParam(upper_bound=None), TypeTypeParam(bound=TypeBound.Linear)], bound=ExplicitBound(bound=TypeBound.Linear)), args=[VariableArg(idx=1, param=BoundedNatParam(upper_bound=None)), TypeTypeArg(ty=ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=2, param=BoundedNatParam(upper_bound=7))]))])], [])), binary=False), description='Report an array of unsigned integer results.', misc={}), 'result_bool': OpDef(name='result_bool', signature=OpDefSig(poly_func=PolyFuncType(params=[StringParam()], body=FunctionType([Bool], [])), binary=False), description='Report a boolean result.', misc={}), 'result_f64': OpDef(name='result_f64', signature=OpDefSig(poly_func=PolyFuncType(params=[StringParam()], body=FunctionType([ExtType(type_def=TypeDef(name='float64', description='64-bit IEEE 754-2019 floating-point value', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [])), binary=False), description='Report a floating-point result.', misc={}), 'result_int': OpDef(name='result_int', signature=OpDefSig(poly_func=PolyFuncType(params=[StringParam(), BoundedNatParam(upper_bound=7)], body=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=1, param=BoundedNatParam(upper_bound=7))])], [])), binary=False), description='Report a signed integer result.', misc={}), 'result_uint': OpDef(name='result_uint', signature=OpDefSig(poly_func=PolyFuncType(params=[StringParam(), BoundedNatParam(upper_bound=7)], body=FunctionType([ExtType(type_def=TypeDef(name='int', description='integral value of a given bit width', params=[BoundedNatParam(upper_bound=7)], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[VariableArg(idx=1, param=BoundedNatParam(upper_bound=7))])], [])), binary=False), description='Report an unsigned integer result.', misc={})}), Extension(name='tket.guppy', version=SemanticVersion(major=0, minor=2, patch=0, prerelease=None, build=None), types={}, operations={'drop': OpDef(name='drop', signature=OpDefSig(poly_func=PolyFuncType(params=[TypeTypeParam(bound=TypeBound.Linear)], body=FunctionType([$0], [])), binary=False), description='Drop the input wire. Applicable to guppy affine types only.', misc={})}), Extension(name='tket.rotation', version=SemanticVersion(major=0, minor=2, patch=0, prerelease=None, build=None), types={'rotation': TypeDef(name='rotation', description='rotation type expressed as number of half turns', params=[], bound=ExplicitBound(bound=TypeBound.Copyable))}, operations={'from_halfturns': OpDef(name='from_halfturns', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([ExtType(type_def=TypeDef(name='float64', description='64-bit IEEE 754-2019 floating-point value', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [Option(ExtType(type_def=TypeDef(name='rotation', description='rotation type expressed as number of half turns', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]))])), binary=False), description='Construct rotation from number of half-turns (would be multiples of PI in radians). Returns None if the float is non-finite.', misc={}), 'from_halfturns_unchecked': OpDef(name='from_halfturns_unchecked', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([ExtType(type_def=TypeDef(name='float64', description='64-bit IEEE 754-2019 floating-point value', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [ExtType(type_def=TypeDef(name='rotation', description='rotation type expressed as number of half turns', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])])), binary=False), description='Construct rotation from number of half-turns (would be multiples of PI in radians). Panics if the float is non-finite.', misc={}), 'radd': OpDef(name='radd', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([ExtType(type_def=TypeDef(name='rotation', description='rotation type expressed as number of half turns', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[]), ExtType(type_def=TypeDef(name='rotation', description='rotation type expressed as number of half turns', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [ExtType(type_def=TypeDef(name='rotation', description='rotation type expressed as number of half turns', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])])), binary=False), description='Add two angles together (experimental).', misc={}), 'to_halfturns': OpDef(name='to_halfturns', signature=OpDefSig(poly_func=PolyFuncType(params=[], body=FunctionType([ExtType(type_def=TypeDef(name='rotation', description='rotation type expressed as number of half turns', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])], [ExtType(type_def=TypeDef(name='float64', description='64-bit IEEE 754-2019 floating-point value', params=[], bound=ExplicitBound(bound=TypeBound.Copyable)), args=[])])), binary=False), description='Convert rotation to number of half-turns (would be multiples of PI in radians).', misc={})})])