test some adjacent toffoli gates
This commit is contained in:
parent
60a11f143e
commit
b98ffcb396
17
lib.py
17
lib.py
@ -650,6 +650,7 @@ class UnitaryOperator(LinearTransformation, UnitaryMatrix):
|
|||||||
extended_m[1].append(I)
|
extended_m[1].append(I)
|
||||||
else:
|
else:
|
||||||
this_partial = self.partials[next_partial]
|
this_partial = self.partials[next_partial]
|
||||||
|
# TODO: This works only with C_partial :(((
|
||||||
if this_partial == C_partial:
|
if this_partial == C_partial:
|
||||||
extended_m[0].append(s("|0><0|"))
|
extended_m[0].append(s("|0><0|"))
|
||||||
extended_m[1].append(s("|1><1|"))
|
extended_m[1].append(s("|1><1|"))
|
||||||
@ -1002,9 +1003,12 @@ def test_partials():
|
|||||||
assert CNOT.on(s("|1000>"), which_qbit=[0, 3]) == s("|1001>")
|
assert CNOT.on(s("|1000>"), which_qbit=[0, 3]) == s("|1001>")
|
||||||
|
|
||||||
# test Toffoli gate
|
# test Toffoli gate
|
||||||
# assert TOFF.on(s("|000>")) == s("|000>")
|
assert TOFF.on(s("|000>")) == s("|000>")
|
||||||
# assert TOFF.on(s("|100>")) == s("|100>")
|
assert TOFF.on(s("|100>")) == s("|100>")
|
||||||
# assert TOFF.on(s("|110>")) == s("|111>")
|
assert TOFF.on(s("|110>")) == s("|111>")
|
||||||
|
assert TOFF.on(s("|111>")) == s("|110>")
|
||||||
|
|
||||||
|
# TODO: This doesn't work :(((
|
||||||
# assert TOFF.on(s("|1100>"), which_qbit=[0, 1, 3]) == s("|1101>")
|
# assert TOFF.on(s("|1100>"), which_qbit=[0, 1, 3]) == s("|1101>")
|
||||||
|
|
||||||
|
|
||||||
@ -1275,13 +1279,6 @@ class QuantumCircuit(object):
|
|||||||
self.add_row(row_data)
|
self.add_row(row_data)
|
||||||
|
|
||||||
def compose_quantum_state(self, step):
|
def compose_quantum_state(self, step):
|
||||||
partials = [op for op in step if isinstance(op, PartialQubit)]
|
|
||||||
# TODO: No more than 1 TwoQubitGate **OR** UnitaryOperator can be
|
|
||||||
# used in a step
|
|
||||||
for partial in partials:
|
|
||||||
two_qubit_op = partial.operator
|
|
||||||
two_qubit_op.verify_step()
|
|
||||||
return two_qubit_op.compose(step)
|
|
||||||
return reduce((lambda x, y: x * y), step)
|
return reduce((lambda x, y: x * y), step)
|
||||||
|
|
||||||
def step(self):
|
def step(self):
|
||||||
|
Loading…
Reference in New Issue
Block a user