Ejemplo n.º 1
0
    def test_parameter_prefix(self):
        """Test the Parameter prefix"""
        encoding_pauli = PauliFeatureMap(feature_dimension=2,
                                         reps=2,
                                         paulis=["ZY"],
                                         parameter_prefix="p")
        encoding_z = ZFeatureMap(feature_dimension=2,
                                 reps=2,
                                 parameter_prefix="q")
        encoding_zz = ZZFeatureMap(feature_dimension=2,
                                   reps=2,
                                   parameter_prefix="r")
        x = ParameterVector("x", 2)
        y = Parameter("y")

        self.assertEqual(
            str(encoding_pauli.parameters),
            "ParameterView([ParameterVectorElement(p[0]), ParameterVectorElement(p[1])])",
        )
        self.assertEqual(
            str(encoding_z.parameters),
            "ParameterView([ParameterVectorElement(q[0]), ParameterVectorElement(q[1])])",
        )
        self.assertEqual(
            str(encoding_zz.parameters),
            "ParameterView([ParameterVectorElement(r[0]), ParameterVectorElement(r[1])])",
        )

        encoding_pauli_param_x = encoding_pauli.assign_parameters(x)
        encoding_z_param_x = encoding_z.assign_parameters(x)
        encoding_zz_param_x = encoding_zz.assign_parameters(x)

        self.assertEqual(
            str(encoding_pauli_param_x.parameters),
            "ParameterView([ParameterVectorElement(x[0]), ParameterVectorElement(x[1])])",
        )
        self.assertEqual(
            str(encoding_z_param_x.parameters),
            "ParameterView([ParameterVectorElement(x[0]), ParameterVectorElement(x[1])])",
        )
        self.assertEqual(
            str(encoding_zz_param_x.parameters),
            "ParameterView([ParameterVectorElement(x[0]), ParameterVectorElement(x[1])])",
        )

        encoding_pauli_param_y = encoding_pauli.assign_parameters({1, y})
        encoding_z_param_y = encoding_z.assign_parameters({1, y})
        encoding_zz_param_y = encoding_zz.assign_parameters({1, y})

        self.assertEqual(str(encoding_pauli_param_y.parameters),
                         "ParameterView([Parameter(y)])")
        self.assertEqual(str(encoding_z_param_y.parameters),
                         "ParameterView([Parameter(y)])")
        self.assertEqual(str(encoding_zz_param_y.parameters),
                         "ParameterView([Parameter(y)])")
    def test_partial_large_circuit(self, method):
        np.random.seed(21)

        featuremap = ZFeatureMap(2, reps=1)
        featuremap.assign_parameters(np.random.random(
            featuremap.num_parameters), inplace=True)

        ansatz = RealAmplitudes(2, reps=1)
        params = ansatz.ordered_parameters[:]
        values = np.random.random(ansatz.num_parameters)
        init = Statevector.from_int(1, dims=(2, 2))

        circuit = featuremap.compose(ansatz)

        grad = StateGradient(X ^ X, circuit, init, params)
        grads = getattr(grad, method)(dict(zip(params, values)))
        ref = [-0.7700884147948044, 0.011116605029003569, -0.6889501710944109, 
               -0.07972088641561373]

        np.testing.assert_array_almost_equal(grads, ref)
Ejemplo n.º 3
0
    def _build(self):
        # wipe current state
        self._data = []
        self._parameter_table = ParameterTable()

        # get UCCSD circuit
        featmap = ZFeatureMap(self.num_qubits, reps=self.reps)
        ansatz = RealAmplitudes(self.num_qubits,
                                reps=self.reps,
                                entanglement='circular')

        # store the parameters in a list for assigning them
        self._params = ansatz.ordered_parameters

        # set the data circuit with some input data
        featmap.assign_parameters(np.random.random(featmap.num_parameters),
                                  inplace=True)

        # combine the circuit
        self.compose(featmap, inplace=True)
        self.compose(ansatz, inplace=True)