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 sizebitsizewhich 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 sizebitsizewhich 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())
[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)