diff --git a/lib.py b/lib.py index 3af7e11..7fb1243 100644 --- a/lib.py +++ b/lib.py @@ -650,6 +650,7 @@ class UnitaryOperator(LinearTransformation, UnitaryMatrix): extended_m[1].append(I) else: this_partial = self.partials[next_partial] + # TODO: This works only with C_partial :((( if this_partial == C_partial: extended_m[0].append(s("|0><0|")) 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>") # test Toffoli gate - # assert TOFF.on(s("|000>")) == s("|000>") - # assert TOFF.on(s("|100>")) == s("|100>") - # assert TOFF.on(s("|110>")) == s("|111>") + assert TOFF.on(s("|000>")) == s("|000>") + assert TOFF.on(s("|100>")) == s("|100>") + 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>") @@ -1275,13 +1279,6 @@ class QuantumCircuit(object): self.add_row(row_data) 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) def step(self):