PiecewisePolynomialPauliRotations
class qiskit.circuit.library.PiecewisePolynomialPauliRotations(num_state_qubits=None, breakpoints=None, coeffs=None, basis='Y', name='pw_poly')
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), , 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 sejam um subconjunto de , em que é o número de qubits de estado. Mais adiante, denote os coeficientes correspondentes por , em que é o grau mais alto entre todos os polinômios.
Então, é definido como:
onde, se for dado o mesmo número de pontos de interrupção que os polinômios, assumimos implicitamente .
Observe o fator nos coeficientes de , 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
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