def test_binding_parameters_does_not_change_parameters_without_free_symbols(
            self):
        theta = sympy.Symbol("theta")
        gate = MatrixFactoryGate("V", example_one_qubit_matrix_factory, (1, 2),
                                 1)

        new_gate = gate.bind({theta: 5.0})

        assert new_gate.params == (1, 2)
    def test_binding_parameters_with_symbol_outside_of_free_symbols_does_not_raise(
        self, ):
        gamma, theta = sympy.symbols("gamma, theta")
        params = (theta, 2 * theta)
        gate = MatrixFactoryGate("U", example_one_qubit_matrix_factory, params,
                                 1)

        new_gate = gate.bind({gamma: 0.5, theta: 1})

        assert new_gate.params == (1, 2)
    def test_replace_parameters_correctly_gives_instance_with_correctly_set_parameters(
        self, ):
        theta = sympy.Symbol("theta")
        gate = MatrixFactoryGate("V", example_one_qubit_matrix_factory, (1, 2),
                                 1)

        new_gate = gate.replace_params((theta, 0.5))

        assert new_gate == MatrixFactoryGate("V",
                                             example_one_qubit_matrix_factory,
                                             (theta, 0.5), 1)
    def test_binding_parameters_creates_new_instance_with_substituted_free_params(
            self):
        gamma, theta, x, y = sympy.symbols("gamma, theta, x, y")
        params = (theta, x + y)
        gate = MatrixFactoryGate("U", example_one_qubit_matrix_factory, params,
                                 1)

        new_gate = gate.bind({theta: 0.5, x: gamma, y: 3})

        assert new_gate.name == gate.name
        assert new_gate.matrix_factory == gate.matrix_factory
        assert new_gate.num_qubits == gate.num_qubits
        assert new_gate.params == (0.5, gamma + 3)
示例#5
0
def _gate_definition_from_matrix_factory_gate(
    gate: _gates.MatrixFactoryGate, ) -> _gates.CustomGateDefinition:
    symbols = tuple(
        sympy.Symbol(f"theta_{i}") for i in range(len(gate.params)))
    template_matrix = gate.matrix_factory(*symbols)
    return _gates.CustomGateDefinition(
        gate_name=gate.name,
        matrix=template_matrix,
        params_ordering=symbols,
    )
    def test_applying_gate_returns_operation_with_correct_gate_and_indices(
            self):
        theta = sympy.Symbol("theta")
        gamma = sympy.Symbol("gamma")
        gate = MatrixFactoryGate("A", example_two_qubit_matrix_factory,
                                 (theta, gamma, 42), 2)
        operation = gate(4, 1)

        assert operation.gate == gate
        assert operation.qubit_indices == (4, 1)
 def test_constructs_its_matrix_by_calling_factory_with_bound_parameter(
         self, params, factory, num_qubits):
     wrapped_factory = Mock(wraps=factory)
     gate = MatrixFactoryGate("U", wrapped_factory, params, num_qubits)
     assert gate.matrix == factory(*params)
     wrapped_factory.assert_called_once_with(*params)
 def test_applying_dagger_and_replacing_parameters_commutes(self):
     gate = MatrixFactoryGate("V", example_one_qubit_matrix_factory, (1, 0),
                              1)
     new_params = (sympy.Symbol("theta"), 4.2)
     assert (gate.dagger.replace_params(new_params) == gate.replace_params(
         new_params).dagger)
 def test_dagger_of_dagger_is_the_same_as_original_gate(self):
     gate = MatrixFactoryGate("V", example_one_qubit_matrix_factory, (1, 0),
                              1)
     assert gate.dagger.dagger is gate
    def test_binding_gates_in_dagger_is_propagated_to_wrapped_gate(self):
        theta = sympy.Symbol("theta")
        gate = MatrixFactoryGate("V", example_one_qubit_matrix_factory,
                                 (theta, 0), 1)

        assert gate.dagger.bind({theta: 0.5}) == gate.bind({theta: 0.5}).dagger
 def test_dagger_of_hermitian_gate_is_the_same_gate(self):
     gate = MatrixFactoryGate("V",
                              example_one_qubit_matrix_factory, (1, 0),
                              1,
                              is_hermitian=True)
     assert gate.dagger is gate
 def test_dagger_has_the_same_params_and_num_qubits_as_wrapped_gate(self):
     gate = MatrixFactoryGate("U", example_two_qubit_matrix_factory,
                              (0.5, 0.1, sympy.Symbol("a")), 2)
     assert gate.dagger.num_qubits == gate.num_qubits
     assert gate.dagger.params == gate.params
 def test_daggers_matrix_is_adjoint_of_original_gates_matrix(self):
     gate = MatrixFactoryGate("V", example_one_qubit_matrix_factory, (1, 2),
                              1)
     assert gate.dagger.matrix == gate.matrix.adjoint()