def test_dict_io_for_symbolic_parameters(self): for gate_name in self.one_parameter_gates: # Given gate, _ = self.create_gate_with_symbolic_params(gate_name) # When gate_dict = gate.to_dict() gate_dict_serialized = gate.to_dict(serialize_params=True) recreated_gate = Gate.from_dict(gate_dict) recreated_gate_from_serialized = Gate.from_dict(gate_dict_serialized) # Then self.assertEqual(gate, recreated_gate) self.assertEqual(gate, recreated_gate_from_serialized)
def create_gate_with_symbolic_params(self, gate_name, qubit_indices=[0, 1]): if gate_name in self.two_qubit_gates: qubit_list = [Qubit(qubit_indices[0]), Qubit(qubit_indices[1])] else: qubit_list = [Qubit(qubit_indices[0])] params = [] if gate_name in self.one_parameter_gates: params = [Symbol("theta_0")] gate = Gate(gate_name, qubits=qubit_list, params=params) return gate, params
def test_dict_io(self): for gate_name in COMMON_GATES: # Given gate = self.create_gate(gate_name) # When gate_dict = gate.to_dict() recreated_gate = Gate.from_dict(gate_dict) # Then self.assertEqual(gate, recreated_gate)
def test_qiskit_io_for_symbolic_parameters(self): for gate_name in self.one_parameter_gates: # Given gate, params = self.create_gate_with_symbolic_params(gate_name) qreg = qiskit.QuantumRegister(2, "q") creg = qiskit.ClassicalRegister(2, "c") # When qiskit_gate, qreg, creg = gate.to_qiskit(qreg, creg) recreated_gate = Gate.from_qiskit(qiskit_gate, gate.qubits) # Then self.assertEqual(gate, recreated_gate)
def create_gate(self, gate_name, qubit_indices=[0, 1], params=None): if gate_name in self.two_qubit_gates: qubit_list = [Qubit(qubit_indices[0]), Qubit(qubit_indices[1])] else: qubit_list = [Qubit(qubit_indices[0])] if params is None: params = [] if gate_name in self.one_parameter_gates: params = [1.0] if gate_name in self.three_parameter_gates: params = [1.0, 2.0, 3.0] gate = Gate(gate_name, qubits=qubit_list, params=params) return gate
def test_qiskit_io(self): for gate_name in COMMON_GATES: # Given gate = self.create_gate(gate_name) qreg = qiskit.QuantumRegister(2, "q") creg = qiskit.ClassicalRegister(2, "c") # When qiskit_gate, qreg, creg = gate.to_qiskit(qreg, creg) recreated_gate = Gate.from_qiskit(qiskit_gate, gate.qubits) # Then self.assertEqual(gate, recreated_gate)
def test_pyquil_io_for_symbolic_parameters(self): for gate_name in self.one_parameter_gates: # Given gate, _ = self.create_gate_with_symbolic_params(gate_name) # When pyquil_gate = gate.to_pyquil() qubits = [ Qubit.from_pyquil(pyquil_qubit) for pyquil_qubit in pyquil_gate.qubits ] recreated_gate = Gate.from_pyquil(pyquil_gate, qubits) # Then self.assertEqual(gate, recreated_gate)
def test_cirq_io_for_symbolic_parameters(self): for gate_name in self.one_parameter_gates: for param_value in [-pi, 0, pi / 2, pi, 2 * pi, 0.38553]: # Given gate, params = self.create_gate_with_symbolic_params(gate_name) symbols_map = [] for param in params: symbols_map.append((param, param_value)) # When cirq_gate = gate.to_cirq() qubits = [ Qubit.from_cirq(cirq_qubit, cirq_qubit.x) for cirq_qubit in cirq_gate.qubits ] recreated_gate = Gate.from_cirq(cirq_gate, qubits) recreated_gate = Gate.from_cirq(cirq_gate, qubits) gate_evaluated = gate.evaluate(symbols_map) recreated_gate_evaluated = recreated_gate.evaluate(symbols_map) # Then # There were numerical & sympy related issues when comparing gates directly, so in this case we compare the evaluated forms of the gates. self.assertEqual(gate_evaluated, recreated_gate_evaluated)
def test_cirq_io(self): for gate_name in COMMON_GATES: # Given gate = self.create_gate(gate_name) # When cirq_gate = gate.to_cirq() qubits = [ Qubit.from_cirq(cirq_qubit, cirq_qubit.x) for cirq_qubit in cirq_gate.qubits ] recreated_gate = Gate.from_cirq(cirq_gate, qubits) # Then self.assertEqual(gate, recreated_gate)
def test_pyquil_io(self): for gate_name in COMMON_GATES: if gate_name in PYQUIL_IO_XFAIL: continue # Given gate = self.create_gate(gate_name) # When pyquil_gate = gate.to_pyquil() qubits = [ Qubit.from_pyquil(pyquil_qubit) for pyquil_qubit in pyquil_gate.qubits ] recreated_gate = Gate.from_pyquil(pyquil_gate, qubits) # Then self.assertEqual(gate, recreated_gate)
def test_symbolic_params(self): # Given params = [0.5, Symbol("theta_0"), Symbol("theta_0") + 2 * Symbol("theta_1")] target_symbolic_params = [ [], [Symbol("theta_0")], [Symbol("theta_0"), Symbol("theta_1")], ] for param, target_params in zip(params, target_symbolic_params): # Given qubit_list = [Qubit(0)] gate = Gate("Rx", qubits=qubit_list, params=[param]) # When symbolic_params = gate.symbolic_params # Then self.assertEqual(symbolic_params, target_params)