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

Rotaciones Pauli controladas a trozos.

Esta clase implementa una función polinómica a trozos (no necesariamente continua), f(x)f(x), sobre las amplitudes de los qubits, que se define mediante puntos de ruptura y coeficientes de la siguiente manera. Supongamos que los puntos de ruptura (x0,...,xJ)(x_0, ..., x_J) son un subconjunto de [0,2n1][0, 2^n-1], donde nn es el número de qubits de estado. Más adelante, denotemos los coeficientes correspondientes por [aj,1,...,aj,d][a_{j,1},...,a_{j,d}], donde dd es el grado más alto entre todos los polinomios.

Entonces f(x)f(x) se define como:

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}

donde si se da el mismo número de puntos de ruptura que de polinomios, asumimos implícitamente xJ+1=2nx_{J+1} = 2^n.

Nota

Nótese el factor 1/21/2 en los coeficientes de f(x)f(x), esto es consistente con las rotaciones Pauli de Qiskit.

Ejemplos

>>> 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
          └──────────┘

Referencias:

[1] Haener, T., Roetteler, M., y Svore, K. M. (2018). Optimización de circuitos cuánticos para la aritmética. arXiv:1805.12445

[2] Carrera Vázquez, A., Hiptmair, R., & Woerner, S. (2022). Mejora del algoritmo de sistemas lineales cuánticos mediante la extrapolación de Richardson. ACM Transactions on Quantum Computing 3, 1, Artículo 2

Obsoleto desde la versión 2.2

La clase qiskit.circuit.library.arithmetic.piecewise_polynomial_pauli_rotations.PiecewisePolynomialPauliRotations está obsoleta a partir de Qiskit 2.2. Se eliminará en Qiskit 3.0. En su lugar, utilice la clase PiecewisePolynomialPauliRotationsGate.

Parámetros

  • num_state_qubits (int | None) – El número de qubits que representan el estado.
  • breakpoints (list[int] | None) – Los puntos de inflexión para definir la función lineal por tramos. El valor predeterminado es [0].
  • coeffs (list[list[float]] | None) – Los coeficientes de los polinomios correspondientes a los distintos segmentos de la función lineal por tramos. coeffs[j][i] es el coeficiente del i-ésimo poder de x en el j-ésimo polinomio. El valor predeterminado es «lineal»: [[1]].
  • basis (str) – El tipo de rotación Pauli ('X', 'Y', 'Z').
  • name (str) – El nombre del circuito.

Atributos

breakpoints

Los puntos de ruptura de la función polinómica a trozos.

La función es polinómica en los intervalos [point_i, point_{i+1}] donde el último punto es implícitamente 2**(num_state_qubits + 1).

Devuelve

La lista de puntos de interrupción.

coeffs

Los coeficientes de los polinomios.

Devuelve

Los coeficientes polinómicos por intervalo como listas anidadas.

contains_zero_breakpoint

Si 0 es el primer punto de interrupción.

Devuelve

True, si 0 es el primer punto de interrupción, en caso contrario False.

mapped_coeffs

Los coeficientes mapeados a la representación interna, ya que sólo comparamos x>=breakpoint.

Devuelve

Los coeficientes mapeados.

name

Tipo: str

Un nombre legible para el circuito.

Ejemplo

from qiskit import QuantumCircuit

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

Métodos

evaluate

evaluate(x)

GitHub

Evalúa clásicamente la rotación polinómica a trozos.

Parámetros

x (float) – Valor al que debe evaluarse.

Devuelve

Valor de la función polinómica a trozos en x.

Tipo de retorno

Float

¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.