Quellcode fΓΌr qiskit.circuit.library.data_preparation.z_feature_map

# This code is part of Qiskit.
#
# (C) Copyright IBM 2017, 2020.
#
# This code is licensed under the Apache License, Version 2.0. You may
# obtain a copy of this license in the LICENSE.txt file in the root directory
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
#
# Any modifications or derivative works of this code must retain this
# copyright notice, and modified files need to carry a notice indicating
# that they have been altered from the originals.

"""Create a new first-order Pauli-Z expansion circuit."""

from typing import Callable, Optional
import numpy as np

from .pauli_feature_map import PauliFeatureMap


[Doku]class ZFeatureMap(PauliFeatureMap): """The first order Pauli Z-evolution circuit. On 3 qubits and with 2 repetitions the circuit is represented by: .. parsed-literal:: β”Œβ”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” ─ H β”œβ”€ U1(2.0*x[0]) β”œβ”€ H β”œβ”€ U1(2.0*x[0]) β”œ β”œβ”€β”€β”€β”€β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”œβ”€β”€β”€β”€β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ ─ H β”œβ”€ U1(2.0*x[1]) β”œβ”€ H β”œβ”€ U1(2.0*x[1]) β”œ β”œβ”€β”€β”€β”€β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”œβ”€β”€β”€β”€β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ ─ H β”œβ”€ U1(2.0*x[2]) β”œβ”€ H β”œβ”€ U1(2.0*x[2]) β”œ β””β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ This is a sub-class of :class:`~qiskit.circuit.library.PauliFeatureMap` where the Pauli strings are fixed as `['Z']`. As a result the first order expansion will be a circuit without entangling gates. Examples: >>> prep = ZFeatureMap(3, reps=3, insert_barriers=True) >>> print(prep) β”Œβ”€β”€β”€β” β–‘ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β–‘ β”Œβ”€β”€β”€β” β–‘ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β–‘ β”Œβ”€β”€β”€β” β–‘ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” q_0: ─ H β”œβ”€β–‘β”€β”€ U1(2.0*x[0]) β”œβ”€β–‘β”€β”€ H β”œβ”€β–‘β”€β”€ U1(2.0*x[0]) β”œβ”€β–‘β”€β”€ H β”œβ”€β–‘β”€β”€ U1(2.0*x[0]) β”œ β”œβ”€β”€β”€β”€ β–‘ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β–‘ β”œβ”€β”€β”€β”€ β–‘ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β–‘ β”œβ”€β”€β”€β”€ β–‘ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ q_1: ─ H β”œβ”€β–‘β”€β”€ U1(2.0*x[1]) β”œβ”€β–‘β”€β”€ H β”œβ”€β–‘β”€β”€ U1(2.0*x[1]) β”œβ”€β–‘β”€β”€ H β”œβ”€β–‘β”€β”€ U1(2.0*x[1]) β”œ β”œβ”€β”€β”€β”€ β–‘ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β–‘ β”œβ”€β”€β”€β”€ β–‘ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β–‘ β”œβ”€β”€β”€β”€ β–‘ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ q_2: ─ H β”œβ”€β–‘β”€β”€ U1(2.0*x[2]) β”œβ”€β–‘β”€β”€ H β”œβ”€β–‘β”€β”€ U1(2.0*x[2]) β”œβ”€β–‘β”€β”€ H β”œβ”€β–‘β”€β”€ U1(2.0*x[2]) β”œ β””β”€β”€β”€β”˜ β–‘ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β–‘ β””β”€β”€β”€β”˜ β–‘ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β–‘ β””β”€β”€β”€β”˜ β–‘ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ >>> data_map = lambda x: x[0]*x[0] + 1 # note: input is an array >>> prep = ZFeatureMap(3, reps=1, data_map_func=data_map) >>> print(prep) β”Œβ”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” q_0: ─ H β”œβ”€ U1(2.0*x[0]**2 + 2.0) β”œ β”œβ”€β”€β”€β”€β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ q_1: ─ H β”œβ”€ U1(2.0*x[1]**2 + 2.0) β”œ β”œβ”€β”€β”€β”€β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ q_2: ─ H β”œβ”€ U1(2.0*x[2]**2 + 2.0) β”œ β””β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ >>> classifier = ZFeatureMap(3, reps=1) + RY(3, reps=1) >>> print(classifier) β”Œβ”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” q_0: ─ H β”œβ”€ U1(2.0*x[0]) β”œβ”€ RY(ΞΈ[0]) β”œβ”€β– β”€β”€β– β”€β”€ RY(ΞΈ[3]) β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”œβ”€β”€β”€β”€β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” q_1: ─ H β”œβ”€ U1(2.0*x[1]) β”œβ”€ RY(ΞΈ[1]) β”œβ”€β– β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β– β”€β”€β”€β”€β”€β”€β”€ RY(ΞΈ[4]) β”œ β”œβ”€β”€β”€β”€β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ q_2: ─ H β”œβ”€ U1(2.0*x[2]) β”œβ”€ RY(ΞΈ[2]) β”œβ”€β”€β”€β”€β– β”€β”€β”€β”€β”€β”€β– β”€β”€β”€β”€β”€β”€β”€ RY(ΞΈ[5]) β”œ β””β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ """ def __init__( self, feature_dimension: int, reps: int = 2, data_map_func: Optional[Callable[[np.ndarray], float]] = None, parameter_prefix: str = "x", insert_barriers: bool = False, name: str = "ZFeatureMap", ) -> None: """Create a new first-order Pauli-Z expansion circuit. Args: feature_dimension: The number of features reps: The number of repeated circuits. Defaults to 2, has a minimum value of 1. data_map_func: A mapping function for data x which can be supplied to override the default mapping from :meth:`self_product`. parameter_prefix: The prefix used if default parameters are generated. insert_barriers: If True, barriers are inserted in between the evolution instructions and hadamard layers. """ super().__init__( feature_dimension=feature_dimension, paulis=["Z"], reps=reps, data_map_func=data_map_func, parameter_prefix=parameter_prefix, insert_barriers=insert_barriers, name=name, )