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

Rotações de Pauli com controle polinomial por partes.

Essa classe implementa uma função polinomial por partes (não necessariamente contínua), f(x)f(x), em amplitudes de qubit, que é definida por meio de pontos de interrupção e coeficientes da seguinte forma. Suponha que os pontos de interrupção (x0,...,xJ)(x_0, ..., x_J) sejam um subconjunto de [0,2n1][0, 2^n-1], em que nn é o número de qubits de estado. Mais adiante, denote os coeficientes correspondentes por [aj,1,...,aj,d][a_{j,1},...,a_{j,d}], em que dd é o grau mais alto entre todos os polinômios.

Então, f(x)f(x) é definido 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}

onde, se for dado o mesmo número de pontos de interrupção que os polinômios, assumimos implicitamente xJ+1=2nx_{J+1} = 2^n.

Nota

Observe o fator 1/21/2 nos coeficientes de f(x)f(x), o que é consistente com as rotações Pauli de Qiskit.

Exemplos

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

Referências

[1] Haener, T., Roetteler, M., e Svore, K. M. (2018). Otimização de circuitos quânticos para operações aritméticas. arXiv:1805.12445

[2] Carrera Vazquez, A., Hiptmair, R., & Woerner, S. (2022). Aprimoramento do algoritmo de sistemas lineares quânticos usando a extrapolação de Richardson. ACM Transactions on Quantum Computing 3, 1, Artigo 2

Descontinuado desde a versão 2.2

A classe qiskit.circuit.library.arithmetic.piecewise_polynomial_pauli_rotations.PiecewisePolynomialPauliRotations está obsoleta desde o Qiskit 2.2. Ele será removido no Qiskit 3.0. Em vez disso, use a classe PiecewisePolynomialPauliRotationsGate.

Parâmetros

  • num_state_qubits (int | None) – O número de qubits que representam o estado.
  • breakpoints (list[int] | None) – Os pontos de ruptura para definir a função linear por trechos. Padroniza para [0].
  • coeffs (list[list[float]] | None) – Os coeficientes dos polinômios para os diferentes segmentos da função linear por partes. coeffs[j][i] é o coeficiente da potência i-ésima de x para o polinômio j-ésimo. O padrão é linear: [[1]].
  • basis (str) – O tipo de rotação Pauli ('X', 'Y', 'Z').
  • name (str) – O nome do circuito.

Atributos

breakpoints

Os pontos de interrupção da função polinomial por partes.

A função é polinomial nos intervalos [point_i, point_{i+1}] onde o último ponto é implicitamente 2**(num_state_qubits + 1).

Retorna

A lista de pontos de interrupção.

coeffs

Os coeficientes dos polinômios.

Retorna

Os coeficientes polinomiais por intervalo como listas aninhadas.

contains_zero_breakpoint

Se 0 é o primeiro ponto de interrupção.

Retorna

True, se 0 for o primeiro ponto de interrupção; caso contrário, False.

mapped_coeffs

Os coeficientes mapeados para a representação interna, pois só comparamos x>=breakpoint.

Retorna

Os coeficientes mapeados.

name

Tipo: str

Um nome legível por humanos para o circuito.

Exemplo

from qiskit import QuantumCircuit

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

Métodos

evaluate

evaluate(x)

GitHub

Avalie classicamente a rotação polinomial por partes.

Parâmetros

x (float) – Valor a ser avaliado.

Retorna

Valor da função polinomial por partes em x.

Tipo de retorno

Valor flutuante

Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.