def test_2q_local_invariance_simple(self): """Check the local invariance parameters for known simple cases. """ sim = UnitarySimulatorPy() qr = QuantumRegister(2, name='q') qc = QuantumCircuit(qr) U = execute(qc, sim).result().get_unitary() vec = two_qubit_local_invariants(U) assert_allclose(vec, [1, 0, 3]) qr = QuantumRegister(2, name='q') qc = QuantumCircuit(qr) qc.cx(qr[1], qr[0]) U = execute(qc, sim).result().get_unitary() vec = two_qubit_local_invariants(U) assert_allclose(vec, [0, 0, 1]) qr = QuantumRegister(2, name='q') qc = QuantumCircuit(qr) qc.cx(qr[1], qr[0]) qc.cx(qr[0], qr[1]) U = execute(qc, sim).result().get_unitary() vec = two_qubit_local_invariants(U) assert_allclose(vec, [0, 0, -1]) qr = QuantumRegister(2, name='q') qc = QuantumCircuit(qr) qc.swap(qr[1], qr[0]) U = execute(qc, sim).result().get_unitary() vec = two_qubit_local_invariants(U) assert_allclose(vec, [-1, 0, -3])
def test_weyl_coordinates_random(self): """Randomly check Weyl coordinates with local invariants.""" for _ in range(10): U = random_unitary(4).data weyl = weyl_coordinates(U) local_equiv = local_equivalence(weyl) local = two_qubit_local_invariants(U) assert_allclose(local, local_equiv)