Usage
In [ ]:
Copied!
from qubex.clifford import Clifford, CliffordGenerator, CliffordSequence, Pauli
from qubex.clifford import Clifford, CliffordGenerator, CliffordSequence, Pauli
In [ ]:
Copied!
Pauli(1, "X")
Pauli(1, "X")
In [ ]:
Copied!
Pauli(-1j, "XY")
Pauli(-1j, "XY")
In [ ]:
Copied!
Clifford.I()
Clifford.I()
In [ ]:
Copied!
X90 = Clifford.X90()
Z90 = Clifford.Z90()
print(X90)
print(Z90)
X90 = Clifford.X90()
Z90 = Clifford.Z90()
print(X90)
print(Z90)
In [ ]:
Copied!
X90.inverse
X90.inverse
In [ ]:
Copied!
X90.compose(Z90)
X90.compose(Z90)
In [ ]:
Copied!
X90.compose(X90.inverse).is_identity()
X90.compose(X90.inverse).is_identity()
In [ ]:
Copied!
X90.apply_to(Pauli(1, "Y"))
X90.apply_to(Pauli(1, "Y"))
In [ ]:
Copied!
X90.apply_to(Pauli(1, "Z"))
X90.apply_to(Pauli(1, "Z"))
In [ ]:
Copied!
II = Clifford.II()
XI90 = Clifford.XI90()
IX90 = Clifford.IX90()
ZI90 = Clifford.ZI90()
IZ90 = Clifford.IZ90()
ZX90 = Clifford.ZX90()
CNOT = Clifford.CNOT()
CZ = Clifford.CZ()
SWAP = Clifford.SWAP()
ISWAP = Clifford.ISWAP()
BSWAP = Clifford.BSWAP()
print(II)
print(XI90)
print(IX90)
print(ZI90)
print(IZ90)
print(ZX90)
print(CNOT)
print(CZ)
print(SWAP)
print(ISWAP)
print(BSWAP)
II = Clifford.II()
XI90 = Clifford.XI90()
IX90 = Clifford.IX90()
ZI90 = Clifford.ZI90()
IZ90 = Clifford.IZ90()
ZX90 = Clifford.ZX90()
CNOT = Clifford.CNOT()
CZ = Clifford.CZ()
SWAP = Clifford.SWAP()
ISWAP = Clifford.ISWAP()
BSWAP = Clifford.BSWAP()
print(II)
print(XI90)
print(IX90)
print(ZI90)
print(IZ90)
print(ZX90)
print(CNOT)
print(CZ)
print(SWAP)
print(ISWAP)
print(BSWAP)
In [ ]:
Copied!
XI90.inverse
XI90.inverse
In [ ]:
Copied!
XI90.compose(XI90.inverse)
XI90.compose(XI90.inverse)
In [ ]:
Copied!
ZX90.apply_to(Pauli(1, "IZ"))
ZX90.apply_to(Pauli(1, "IZ"))
In [ ]:
Copied!
seq0 = CliffordSequence.I()
seq0
seq0 = CliffordSequence.I()
seq0
In [ ]:
Copied!
seq1 = seq0.compose(X90)
seq1
seq1 = seq0.compose(X90)
seq1
In [ ]:
Copied!
seq2 = seq1.compose(Z90)
seq2
seq2 = seq1.compose(Z90)
seq2
In [ ]:
Copied!
seq1.clifford
seq1.clifford
In [ ]:
Copied!
seq2.clifford
seq2.clifford
In [ ]:
Copied!
CliffordSequence.II().compose(IX90).compose(XI90).clifford
CliffordSequence.II().compose(IX90).compose(XI90).clifford
In [ ]:
Copied!
generator = CliffordGenerator()
generator = CliffordGenerator()
In [ ]:
Copied!
generator.get_cliffords("1Q")
generator.get_cliffords("1Q")
In [ ]:
Copied!
generator.get_random_clifford_sequences(
n=5,
type="1Q",
seed=0,
)
generator.get_random_clifford_sequences(
n=5,
type="1Q",
seed=0,
)
In [ ]:
Copied!
seqs, inv = generator.create_rb_sequences(
n=10,
type="1Q",
seed=0,
)
print("Random Cliffords:")
for seq in seqs:
print(seq)
print()
print("Inverse of the Clifford sequence:")
print(inv)
seqs, inv = generator.create_rb_sequences(
n=10,
type="1Q",
seed=0,
)
print("Random Cliffords:")
for seq in seqs:
print(seq)
print()
print("Inverse of the Clifford sequence:")
print(inv)
In [ ]:
Copied!
seqs, inv = generator.create_irb_sequences(
n=10,
interleave={
"I": (1, "I"),
"X": (1, "Y"),
"Y": (-1, "X"),
"Z": (1, "Z"),
},
type="1Q",
seed=0,
)
print("Random Cliffords:")
for seq in seqs:
print(seq)
print()
print("Inverse of the Clifford sequence:")
print(inv)
seqs, inv = generator.create_irb_sequences(
n=10,
interleave={
"I": (1, "I"),
"X": (1, "Y"),
"Y": (-1, "X"),
"Z": (1, "Z"),
},
type="1Q",
seed=0,
)
print("Random Cliffords:")
for seq in seqs:
print(seq)
print()
print("Inverse of the Clifford sequence:")
print(inv)
In [ ]:
Copied!
generator.generate_1q_cliffords(max_gates=7)
generator.generate_1q_cliffords(max_gates=7)
In [ ]:
Copied!
generator.save("1Q")
generator.save("1Q")
In [ ]:
Copied!
generator.generate_1q1q_cliffords()
generator.generate_1q1q_cliffords()
In [ ]:
Copied!
generator.save("1Q1Q")
generator.save("1Q1Q")
In [ ]:
Copied!
generator.generate_2q_cliffords(two_qubit_gate=ZX90)
generator.generate_2q_cliffords(two_qubit_gate=ZX90)
In [ ]:
Copied!
generator.save("2Q")
generator.save("2Q")
In [ ]:
Copied!
seqs = generator.get_random_clifford_sequences(
n=10,
type="2Q",
seed=0,
)
display(seqs)
seqs = generator.get_random_clifford_sequences(
n=10,
type="2Q",
seed=0,
)
display(seqs)
In [ ]:
Copied!
seq = seqs[0]
print(seq)
print(seq.clifford)
seq = seqs[0]
print(seq)
print(seq.clifford)
In [ ]:
Copied!
seq_inv = generator.get_inverse(seq, "2Q")
print(seq_inv)
print(seq_inv.clifford)
seq_inv = generator.get_inverse(seq, "2Q")
print(seq_inv)
print(seq_inv.clifford)
In [ ]:
Copied!
seq.clifford.compose(seq_inv.clifford).is_identity()
seq.clifford.compose(seq_inv.clifford).is_identity()
In [ ]:
Copied!
seqs, inv = generator.create_rb_sequences(
n=5,
type="2Q",
seed=0,
)
print("Random Cliffords:")
for seq in seqs:
print(seq)
print()
print("Inverse of the Clifford sequence:")
print(inv)
seqs, inv = generator.create_rb_sequences(
n=5,
type="2Q",
seed=0,
)
print("Random Cliffords:")
for seq in seqs:
print(seq)
print()
print("Inverse of the Clifford sequence:")
print(inv)
In [ ]:
Copied!
seqs, inv = generator.create_irb_sequences(
n=5,
type="2Q",
interleave=Clifford.ZI90(),
)
print("Random Cliffords:")
for seq in seqs:
print(seq)
print()
print("Inverse of the Clifford sequence:")
print(inv)
seqs, inv = generator.create_irb_sequences(
n=5,
type="2Q",
interleave=Clifford.ZI90(),
)
print("Random Cliffords:")
for seq in seqs:
print(seq)
print()
print("Inverse of the Clifford sequence:")
print(inv)