def test_definition_parameters(self, gate_class): """Verify decompositions from standard equivalence library match definitions.""" n_params = len(_get_free_params(gate_class)) param_vector = ParameterVector('th', n_params) float_vector = [0.1 * i for i in range(n_params)] param_gate = gate_class(*param_vector) float_gate = gate_class(*float_vector) param_entry = std_eqlib.get_entry(param_gate) float_entry = std_eqlib.get_entry(float_gate) if not param_gate.definition or not param_gate.definition.data: return self.assertGreaterEqual(len(param_entry), 1) self.assertGreaterEqual(len(float_entry), 1) param_qc = QuantumCircuit(param_gate.num_qubits) float_qc = QuantumCircuit(float_gate.num_qubits) param_qc.append(param_gate, param_qc.qregs[0]) float_qc.append(float_gate, float_qc.qregs[0]) self.assertTrue(any(equiv == param_qc.decompose() for equiv in param_entry)) self.assertTrue(any(equiv == float_qc.decompose() for equiv in float_entry))
def test_definition_parameters(self, gate_class): """Verify decompositions from standard equivalence library match definitions.""" n_params = len(_get_free_params(gate_class)) param_vector = ParameterVector('th', n_params) float_vector = [0.1 * i for i in range(n_params)] param_gate = gate_class(*param_vector) float_gate = gate_class(*float_vector) param_entry = std_eqlib.get_entry(param_gate) float_entry = std_eqlib.get_entry(float_gate) if not param_gate.definition: self.assertEqual(len(param_entry), 0) self.assertEqual(len(float_entry), 0) return if gate_class is CXGate: # CXGate currently has a definition in terms of CXGate. self.assertEqual(len(param_entry), 0) self.assertEqual(len(float_entry), 0) return self.assertEqual(len(param_entry), 1) self.assertEqual(len(float_entry), 1) param_qc = QuantumCircuit(param_gate.num_qubits) float_qc = QuantumCircuit(float_gate.num_qubits) param_qc.append(param_gate, param_qc.qregs[0]) float_qc.append(float_gate, float_qc.qregs[0]) self.assertEqual(param_entry[0], param_qc.decompose()) self.assertEqual(float_entry[0], float_qc.decompose())
def test_equivalence_phase(self): """Test that the equivalent circuits from the equivalency_library have equal matrix representations""" for gate_class in self._gate_classes: with self.subTest(i=gate_class): n_params = len(_get_free_params(gate_class)) params = [0.1 * i for i in range(1, n_params + 1)] if gate_class.__name__ == "RXXGate": params = [np.pi / 2] if gate_class.__name__ in ["MSGate"]: params[0] = 2 if gate_class.__name__ in ["PauliGate"]: params = ["IXYZ"] if gate_class.__name__ in ["BooleanExpression"]: params = ["x | y"] if gate_class.__name__ in [ "PauliEvolutionGate", "PauliEvolutionGate" ]: continue gate = gate_class(*params) equiv_lib_list = std_eqlib.get_entry(gate) for ieq, equivalency in enumerate(equiv_lib_list): with self.subTest(msg=gate.name + "_" + str(ieq)): op1 = Operator(gate) op2 = Operator(equivalency) self.assertEqual(op1, op2)
def test_equivalence_phase(self): """Test that the equivalent circuits from the equivalency_library have equal matrix representations""" for gate_class in self._gate_classes: with self.subTest(i=gate_class): n_params = len(_get_free_params(gate_class)) params = [0.1 * i for i in range(1, n_params+1)] if gate_class.__name__ == 'RXXGate': params = [np.pi/2] if gate_class.__name__ in ['MSGate']: params[0] = 2 gate = gate_class(*params) equiv_lib_list = std_eqlib.get_entry(gate) for ieq, equivalency in enumerate(equiv_lib_list): with self.subTest(msg=gate.name + '_' + str(ieq)): op1 = Operator(gate) op2 = Operator(equivalency) self.assertEqual(op1, op2)