Skip to main content
IBM Quantum Platform

PiecewisePolynomialPauliRotations

class qiskit.circuit.library.PiecewisePolynomialPauliRotations(num_state_qubits=None, breakpoints=None, coeffs=None, basis='Y', name='pw_poly')

GitHub

Bases : FunctionalPauliRotations

Rotations de Pauli contrôlées par la polynomie.

Cette classe met en œuvre une fonction polynomiale par morceaux (pas nécessairement continue), f(x)f(x), sur les amplitudes des qubits, qui est définie par des points de rupture et des coefficients comme suit. Supposons que les points d'arrêt (x0,...,xJ)(x_0, ..., x_J) soient un sous-ensemble de [0,2n1][0, 2^n-1], où nn est le nombre de qubits d'état. Plus loin, nous désignons les coefficients correspondants par [aj,1,...,aj,d][a_{j,1},...,a_{j,d}], où dd est le degré le plus élevé de tous les polynômes.

Le site f(x)f(x) est alors défini comme suit :

f(x)={0,x<x0i=0i=daj,i/2xi,xjx<xj+1f(x) = \begin{cases} 0, x < x_0 \\ \sum_{i=0}^{i=d}a_{j,i}/2 x^i, x_j \leq x < x_{j+1} \end{cases}

où si l'on donne le même nombre de points d'arrêt que les polynômes, nous supposons implicitement xJ+1=2nx_{J+1} = 2^n.

Remarque

Notez le facteur 1/21/2 dans les coefficients de f(x)f(x), ce qui est cohérent avec les rotations de Pauli de Qiskit.

Exemples

>>> from qiskit import QuantumCircuit
>>> from qiskit.circuit.library.arithmetic.piecewise_polynomial_pauli_rotations import\
... PiecewisePolynomialPauliRotations
>>> qubits, breakpoints, coeffs = (2, [0, 2], [[0, -1.2],[-1, 1, 3]])
>>> poly_r = PiecewisePolynomialPauliRotations(num_state_qubits=qubits,
...breakpoints=breakpoints, coeffs=coeffs)
>>>
>>> qc = QuantumCircuit(poly_r.num_qubits)
>>> qc.h(list(range(qubits)));
>>> qc.append(poly_r.to_instruction(), list(range(qc.num_qubits)));
>>> qc.draw()
     ┌───┐┌──────────┐
q_0: ┤ H ├┤0
     ├───┤│          │
q_1: ┤ H ├┤1
     └───┘│          │
q_2: ─────┤2
          │  pw_poly │
q_3: ─────┤3
          │          │
q_4: ─────┤4
          │          │
q_5: ─────┤5
          └──────────┘

Références :

[1] Haener, T., Roetteler, M., et Svore, K. M. (2018). Optimisation des circuits quantiques pour l'arithmétique. arXiv:1805.12445

[2] Carrera Vazquez, A., Hiptmair, R. et Woerner, S. (2022). Amélioration de l'algorithme des systèmes linéaires quantiques à l'aide de l'extrapolation de Richardson. ACM Transactions on Quantum Computing 3, 1, Article 2

Déclassé depuis la version 2.2

La classe qiskit.circuit.library.arithmetic.piecewise_polynomial_pauli_rotations.PiecewisePolynomialPauliRotations est obsolète depuis Qiskit 2.2. Elle sera supprimée à Qiskit 3.0. Utilisez plutôt la classe PiecewisePolynomialPauliRotationsGate.

Paramètres

  • num_state_qubits (int | None) – Le nombre de qubits représentant l'état.
  • breakpoints (list[int] | None) – Les points de coupure permettant de définir la fonction linéaire par morceaux. Prend par défaut la valeur [0].
  • coeffs (list[list[float]] | None) – Les coefficients des polynômes correspondant aux différents segments de la fonction linéaire par morceaux. coeffs[j][i] est le coefficient du i-ième pouvoir de x pour le j-ième polynôme. La valeur par défaut est « linéaire » : [[1]].
  • basis (str) – Le type de rotation de Pauli ('X', 'Y', 'Z').
  • name (str) – Le nom du circuit.

Attributs

breakpoints

Les points de rupture de la fonction polynomiale par morceaux.

La fonction est polynomiale dans les intervalles [point_i, point_{i+1}] où le dernier point est implicitement 2**(num_state_qubits + 1).

Retours

La liste des points d'arrêt.

coeffs

Les coefficients des polynômes.

Retours

Les coefficients polynomiaux par intervalle sous forme de listes imbriquées.

contains_zero_breakpoint

Si 0 est le premier point d'arrêt.

Retours

Vrai, si 0 est le premier point d'arrêt, sinon Faux.

mapped_coeffs

Les coefficients correspondent à la représentation interne, puisque nous ne comparons que x>=point de rupture.

Retours

Les coefficients cartographiés.

name

Type : str

Un nom lisible par l'homme pour le circuit.

Exemple

from qiskit import QuantumCircuit

qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)
my_circuit

Méthodes

evaluate

evaluate(x)

GitHub

Évaluer classiquement la rotation polynomiale par morceaux.

Paramètres

x (float) – Valeur à évaluer.

Retours

Valeur de la fonction polynomiale par morceaux en x.

Type de retour

Float

Cette page a-t-elle été utile ?
Signaler un bogue, une coquille ou proposer du contenu sur GitHub.