States and Effects#
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
ZeroState
#
The state |0>
from qualtran.bloqs.basic_gates import ZeroState
Example Instances#
zero_state = ZeroState()
Graphical Signature#
from qualtran.drawing import show_bloqs
show_bloqs([zero_state],
['`zero_state`'])
Call Graph#
from qualtran.resource_counting.generalizers import ignore_split_join
zero_state_g, zero_state_sigma = zero_state.call_graph(max_depth=1, generalizer=ignore_split_join)
show_call_graph(zero_state_g)
show_counts_sigma(zero_state_sigma)
Counts totals:
|0>
: 1
ZeroEffect
#
The effect <0|
from qualtran.bloqs.basic_gates import ZeroEffect
Example Instances#
zero_effect = ZeroEffect()
Graphical Signature#
from qualtran.drawing import show_bloqs
show_bloqs([zero_effect],
['`zero_effect`'])
Call Graph#
from qualtran.resource_counting.generalizers import ignore_split_join
zero_effect_g, zero_effect_sigma = zero_effect.call_graph(max_depth=1, generalizer=ignore_split_join)
show_call_graph(zero_effect_g)
show_counts_sigma(zero_effect_sigma)
Counts totals:
<0|
: 1
OneState
#
The state |1>
from qualtran.bloqs.basic_gates import OneState
Example Instances#
one_state = OneState()
Graphical Signature#
from qualtran.drawing import show_bloqs
show_bloqs([one_state],
['`one_state`'])
Call Graph#
from qualtran.resource_counting.generalizers import ignore_split_join
one_state_g, one_state_sigma = one_state.call_graph(max_depth=1, generalizer=ignore_split_join)
show_call_graph(one_state_g)
show_counts_sigma(one_state_sigma)
Counts totals:
|1>
: 1
OneEffect
#
The effect <1|
from qualtran.bloqs.basic_gates import OneEffect
Example Instances#
one_effect = OneEffect()
Graphical Signature#
from qualtran.drawing import show_bloqs
show_bloqs([one_effect],
['`one_effect`'])
Call Graph#
from qualtran.resource_counting.generalizers import ignore_split_join
one_effect_g, one_effect_sigma = one_effect.call_graph(max_depth=1, generalizer=ignore_split_join)
show_call_graph(one_effect_g)
show_counts_sigma(one_effect_sigma)
Counts totals:
<1|
: 1
IntState
#
The state |val> for non-negative integer val
Parameters#
val
: the classical valuebitsize
: The bitsize of the register
Registers#
val
: The register of sizebitsize
which initializes the valueval
.
from qualtran.bloqs.basic_gates import IntState
Example Instances#
int_state = IntState(55, bitsize=8)
Graphical Signature#
from qualtran.drawing import show_bloqs
show_bloqs([int_state],
['`int_state`'])
Call Graph#
from qualtran.resource_counting.generalizers import ignore_split_join
int_state_g, int_state_sigma = int_state.call_graph(max_depth=1, generalizer=ignore_split_join)
show_call_graph(int_state_g)
show_counts_sigma(int_state_sigma)
Counts totals:
ArbitraryClifford(n=8)
: 1
IntEffect
#
The effect <val| for non-negative integer val
Parameters#
val
: the classical valuebitsize
: The bitsize of the register
Registers#
val
: The register of sizebitsize
which de-allocates the valueval
.
from qualtran.bloqs.basic_gates import IntEffect
Example Instances#
int_effect = IntEffect(55, bitsize=8)
Graphical Signature#
from qualtran.drawing import show_bloqs
show_bloqs([int_effect],
['`int_effect`'])
Call Graph#
from qualtran.resource_counting.generalizers import ignore_split_join
int_effect_g, int_effect_sigma = int_effect.call_graph(max_depth=1, generalizer=ignore_split_join)
show_call_graph(int_effect_g)
show_counts_sigma(int_effect_sigma)
Counts totals:
ArbitraryClifford(n=8)
: 1
PlusState
#
The state |+>
from qualtran.bloqs.basic_gates import PlusState
Example Instances#
plus_state = PlusState()
Graphical Signature#
from qualtran.drawing import show_bloqs
show_bloqs([plus_state],
['`plus_state`'])
Call Graph#
from qualtran.resource_counting.generalizers import ignore_split_join
plus_state_g, plus_state_sigma = plus_state.call_graph(max_depth=1, generalizer=ignore_split_join)
show_call_graph(plus_state_g)
show_counts_sigma(plus_state_sigma)
Counts totals:
|+>
: 1
PlusEffect
#
The effect <+|
from qualtran.bloqs.basic_gates import PlusEffect
Example Instances#
plus_effect = PlusEffect()
Graphical Signature#
from qualtran.drawing import show_bloqs
show_bloqs([plus_effect],
['`plus_effect`'])
Call Graph#
from qualtran.resource_counting.generalizers import ignore_split_join
plus_effect_g, plus_effect_sigma = plus_effect.call_graph(max_depth=1, generalizer=ignore_split_join)
show_call_graph(plus_effect_g)
show_counts_sigma(plus_effect_sigma)
Counts totals:
<+|
: 1
MinusState
#
The state |->
from qualtran.bloqs.basic_gates import MinusState
Example Instances#
minus_state = MinusState()
Graphical Signature#
from qualtran.drawing import show_bloqs
show_bloqs([minus_state],
['`minus_state`'])
Call Graph#
from qualtran.resource_counting.generalizers import ignore_split_join
minus_state_g, minus_state_sigma = minus_state.call_graph(max_depth=1, generalizer=ignore_split_join)
show_call_graph(minus_state_g)
show_counts_sigma(minus_state_sigma)
Counts totals:
|->
: 1
MinusEffect
#
The effect <-|
from qualtran.bloqs.basic_gates import MinusEffect
Example Instances#
minus_effect = MinusEffect()
Graphical Signature#
from qualtran.drawing import show_bloqs
show_bloqs([minus_effect],
['`minus_effect`'])
Call Graph#
from qualtran.resource_counting.generalizers import ignore_split_join
minus_effect_g, minus_effect_sigma = minus_effect.call_graph(max_depth=1, generalizer=ignore_split_join)
show_call_graph(minus_effect_g)
show_counts_sigma(minus_effect_sigma)
Counts totals:
<-|
: 1
Properties and Relations#
Creating a Bell state#
We can create a bell state (\(|00\rangle + |11\rangle\)) by cnotting a \(|+\rangle\) state into a \(|0\rangle\) state.
from qualtran.bloqs.basic_gates import CNOT
bb = BloqBuilder()
q0 = bb.add(PlusState())
q1 = bb.add(ZeroState())
q0, q1 = bb.add(CNOT(), ctrl=q0, target=q1)
cbloq = bb.finalize(q0=q0, q1=q1)
show_bloq(cbloq)
print(cbloq.tensor_contract())
/usr/local/google/home/mpharrigan/qualtran/conda-311/lib/python3.11/site-packages/cotengra/hyperoptimizers/hyper.py:57: UserWarning: Couldn't find `optuna`, `cmaes`, `baytune (btb)`, `chocolate`, or `nevergrad` so will use completely random sampling in place of hyper-optimization.
warnings.warn(
/usr/local/google/home/mpharrigan/qualtran/conda-311/lib/python3.11/site-packages/cotengra/hyperoptimizers/hyper.py:76: UserWarning: Couldn't find `optuna`, `cmaes`, `baytune (btb)`, `chocolate`, or `nevergrad` so will use completely random sampling in place of hyper-optimization.
warnings.warn(
[0.70710678+0.j 0. +0.j 0. +0.j 0.70710678+0.j]
PlusState
and ZeroState
provide as_cirq_op
methods for Cirq interoperability, resulting in the familiar cirq.Circuit
for constructing a Bell state.
from cirq.contrib.svg import SVGCircuit
circuit = cbloq.to_cirq_circuit()
SVGCircuit(circuit)