Source code for geqo.utils._all_.helpers

import sympy as sym
import numpy as np
from numpy.typing import NDArray

from geqo.utils._numpy_.helpers import (
    getSingleQubitOperationOnRegister as getSingleQubitOperationOnRegisterNumpy,
    partialTrace as partialTraceNumpy,
)
from geqo.utils._sympy_.helpers import (
    getSingleQubitOperationOnRegister as getSingleQubitOperationOnRegisterSympy,
    partialTrace as partialTraceSympy,
)


[docs] def getSingleQubitOperationOnRegister( u: sym.Matrix | NDArray, numberQubits: int, targets: list[int] ) -> sym.Matrix | NDArray: """Apply single-qubit operation to specific qubits in register.""" if isinstance(u, np.ndarray): return getSingleQubitOperationOnRegisterNumpy(u, numberQubits, targets) return getSingleQubitOperationOnRegisterSympy(u, numberQubits, targets)
[docs] def partialTrace( rho: sym.Matrix | NDArray, qubits: list[int], dropTargets: list[int] ) -> tuple[sym.Matrix, sym.Matrix] | tuple[NDArray, NDArray]: """Compute partial trace of density matrix.""" if isinstance(rho, np.ndarray): return partialTraceNumpy(rho, qubits, dropTargets) return partialTraceSympy(rho, qubits, dropTargets)