Multi-Paulis#

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

MultiTargetCNOT#

Implements single control, multi-target \(C[X^{\otimes n}]\) gate.

Implements \(|0><0| I + |1><1| X^{\otimes n}\) using a circuit of depth \(2\log(n) + 1\) containing only CNOT gates.

References#

from qualtran.bloqs.mcmt import MultiTargetCNOT

Example Instances#

n = sympy.Symbol('n')
c_multi_not_symb = MultiTargetCNOT(bitsize=n)
c_multi_not = MultiTargetCNOT(bitsize=5)

Graphical Signature#

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

Call Graph#

from qualtran.resource_counting.generalizers import ignore_split_join
c_multi_not_symb_g, c_multi_not_symb_sigma = c_multi_not_symb.call_graph(max_depth=1, generalizer=ignore_split_join)
show_call_graph(c_multi_not_symb_g)
show_counts_sigma(c_multi_not_symb_sigma)
../../_images/b8aa0c1d77b8fe2126772571970e300920d6ed28e7f12c93fd3ddce8d0e27d9f.svg

Counts totals:

  • MultiTargetCNOT: 1

MultiControlX#

Implements multi-control, single-target X gate.

Reduces multiple controls to a single control using an And ladder. See class ControlledViaAnd for details on construction.

Alternatively, one can directly use XGate().controlled(CtrlSpec(cvs=cvs))

Parameters#

  • cvs: a tuple of n control bits, or a HasLength(n) to control by n 1s.

Registers#

  • controls: control register of type QBit and shape (n,).

  • target: single qubit target register.

from qualtran.bloqs.mcmt import MultiControlX

Example Instances#

ccpauli = MultiControlX(cvs=(1, 0, 1, 0, 1))

Graphical Signature#

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

Call Graph#

from qualtran.resource_counting.generalizers import ignore_split_join
ccpauli_g, ccpauli_sigma = ccpauli.call_graph(max_depth=1, generalizer=ignore_split_join)
show_call_graph(ccpauli_g)
show_counts_sigma(ccpauli_sigma)
../../_images/580eb5f2af37945cefbd4976a9de9b795926899a3937b9a989e20e7dd5cebaa6.svg

Counts totals:

  • C[5][XGate]: 1