Indexing#

from qualtran import Bloq, CompositeBloq, BloqBuilder, Signature, Register
from qualtran import QBit, QInt, QUInt, QAny
from qualtran.drawing import show_bloq, show_call_graph, show_counts_sigma
from typing import *
import numpy as np
import sympy
import cirq

ToContiguousIndex#

Build a contiguous register s from mu and nu.

\[ s = \nu (\nu + 1) / 2 + \mu \]

Assuming nu is zero indexed (in contrast to the THC paper which assumes 1, hence the slightly different formula).

Parameters#

  • bitsize: number of bits for mu and nu registers.

  • s_bitsize: Number of bits for contiguous register.

Registers#

  • mu: input register

  • nu: input register

  • s: output contiguous register

References#

from qualtran.bloqs.arithmetic.conversions import ToContiguousIndex

Example Instances#

to_contg_index = ToContiguousIndex(bitsize=4, s_bitsize=8)

Graphical Signature#

from qualtran.drawing import show_bloqs
show_bloqs([to_contg_index],
           ['`to_contg_index`'])

Call Graph#

from qualtran.resource_counting.generalizers import ignore_split_join
to_contg_index_g, to_contg_index_sigma = to_contg_index.call_graph(max_depth=1, generalizer=ignore_split_join)
show_call_graph(to_contg_index_g)
show_counts_sigma(to_contg_index_sigma)
../../../_images/27f4f160e82a7dcb9f05d342f950b5ab5b4ba1e52971dbf6fe23c4a9cca0398b.svg

Counts totals:

  • Toffoli: 19