"""
QDA (Quantum Discrete Adiabatic) Linear System Solver Implementation
"""
from typing import Callable
import numpy as np
import pysparq as ps
[文档]
def compute_fs(s: float, kappa: float, p: float) -> float:
"""Compute the interpolation parameter f(s)."""
...
[文档]
def compute_rotation_matrix(fs: float) -> list[complex]:
"""Compute the rotation matrix R_s for block encoding."""
...
[文档]
def chebyshev_T(n: int, x: float) -> float:
"""Compute Chebyshev polynomial T_n(x)."""
...
[文档]
def dolph_chebyshev(epsilon: float, l: int, phi: float) -> float:
"""Compute Dolph-Chebyshev window function."""
...
[文档]
def compute_fourier_coeffs(epsilon: float, l: int) -> list[float]:
"""Compute Fourier coefficients for Dolph-Chebyshev filter."""
...
[文档]
def calculate_angles(coeffs: list[float]) -> list[float]:
"""Calculate rotation angles from coefficients for state preparation."""
...
[文档]
class BlockEncoding:
"""Placeholder for block encoding implementation."""
_condition_regs: list[str]
_condition_bits: list[tuple[str | int, int]]
def __init__(self, A: np.ndarray, data_size: int = ...) -> None: ...
[文档]
def conditioned_by_all_ones(
self, conds: str | list[str]
) -> "BlockEncoding": ...
def __call__(self, state: ps.SparseState) -> None: ...
[文档]
def dag(self, state: ps.SparseState) -> None: ...
[文档]
class StatePreparation:
"""Placeholder for state preparation implementation."""
_condition_regs: list[str]
_condition_bits: list[tuple[str | int, int]]
def __init__(self, b: np.ndarray) -> None: ...
[文档]
def conditioned_by_all_ones(
self, conds: str | list[str]
) -> "StatePreparation": ...
def __call__(self, state: ps.SparseState) -> None: ...
[文档]
def dag(self, state: ps.SparseState) -> None: ...
[文档]
class BlockEncodingHs:
"""Block encoding of the interpolating Hamiltonian H(s)."""
[文档]
enc_A: BlockEncoding
[文档]
enc_b: StatePreparation
_condition_regs: list[str]
_condition_bits: list[tuple[str | int, int]]
def __init__(
self,
enc_A: BlockEncoding,
enc_b: StatePreparation,
main_reg: str,
anc_UA: str,
anc_1: str,
anc_2: str,
anc_3: str,
anc_4: str,
fs: float,
) -> None: ...
[文档]
def conditioned_by_all_ones(
self, conds: str | list[str]
) -> "BlockEncodingHs": ...
def __call__(self, state: ps.SparseState) -> None: ...
[文档]
def dag(self, state: ps.SparseState) -> None: ...
[文档]
class BlockEncodingHsPD:
"""Positive-definite version of block encoding H(s)."""
[文档]
enc_A: BlockEncoding
[文档]
enc_b: StatePreparation
def __init__(
self,
enc_A: BlockEncoding,
enc_b: StatePreparation,
main_reg: str,
anc_UA: str,
anc_1: str,
anc_2: str,
anc_3: str,
anc_4: str,
fs: float,
) -> None: ...
def __call__(self, state: ps.SparseState) -> None: ...
[文档]
class WalkS:
"""Quantum walk operator at parameter s."""
[文档]
is_positive_definite: bool
[文档]
enc_Hs: BlockEncodingHs | BlockEncodingHsPD
_condition_regs: list[str]
_condition_bits: list[tuple[str | int, int]]
def __init__(
self,
enc_A: BlockEncoding,
enc_b: StatePreparation,
main_reg: str,
anc_UA: str,
anc_1: str,
anc_2: str,
anc_3: str,
anc_4: str,
s: float,
kappa: float,
p: float,
is_positive_definite: bool = ...,
) -> None: ...
[文档]
def conditioned_by_all_ones(
self, conds: str | list[str]
) -> "WalkS": ...
[文档]
def conditioned_by_bit(self, reg: str, pos: int) -> "WalkS": ...
[文档]
def clear_conditions(self) -> None: ...
def __call__(self, state: ps.SparseState) -> None: ...
[文档]
def dag(self, state: ps.SparseState) -> None: ...
[文档]
class LCU:
"""Linear Combination of Unitaries for QDA."""
def __init__(self, walk: WalkS, index_reg: str, log_file: str = ...) -> None: ...
def __call__(self, state: ps.SparseState) -> None: ...
[文档]
def dag(self, state: ps.SparseState) -> None: ...
[文档]
class Filtering:
"""Dolph-Chebyshev filtering for QDA."""
def __init__(
self,
walk: WalkS,
index_reg: str,
anc_h: str,
epsilon: float = ...,
l: int = ...,
) -> None: ...
def __call__(self, state: ps.SparseState) -> float: ...
[文档]
def classical_to_quantum(
A: np.ndarray, b: np.ndarray
) -> tuple[np.ndarray, np.ndarray, Callable[[np.ndarray], np.ndarray]]:
"""Convert classical linear system to quantum-compatible form."""
...
[文档]
def qda_solve(
A: np.ndarray,
b: np.ndarray,
kappa: float | None = ...,
p: float = ...,
eps: float = ...,
step_rate: float = ...,
) -> np.ndarray:
"""Solve Ax = b using QDA algorithm."""
...
[文档]
def create_qda_demo() -> str:
"""Generate a demo script for QDA solver."""
...