Source code for qdk_chemistry.algorithms.time_evolution.builder.base

"""QDK/Chemistry time evolution unitary builder abstractions."""

# --------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See LICENSE.txt in the project root for license information.
# --------------------------------------------------------------------------------------------

from abc import abstractmethod

from qdk_chemistry.algorithms.base import Algorithm, AlgorithmFactory
from qdk_chemistry.data import QubitHamiltonian, TimeEvolutionUnitary

__all__: list[str] = ["TimeEvolutionBuilder", "TimeEvolutionBuilderFactory"]


[docs] class TimeEvolutionBuilder(Algorithm): """Base class for time evolution Builders in QDK/Chemistry algorithms."""
[docs] def __init__(self): """Initialize the TimeEvolutionBuilder.""" super().__init__()
@abstractmethod def _run_impl(self, qubit_hamiltonian: QubitHamiltonian, time: float) -> TimeEvolutionUnitary: """Construct a TimeEvolutionUnitary representing the time evolution unitary for the given QubitHamiltonian. Args: qubit_hamiltonian: The qubit Hamiltonian. time: The evolution time. Returns: TimeEvolutionUnitary: A TimeEvolutionUnitary representing the evolution of the given QubitHamiltonian. """ # ------------------------------------------------------------------ # Shared helpers used by Trotter, qDRIFT, and partially-randomized # builders. # ------------------------------------------------------------------ @staticmethod def _pauli_label_to_map(label: str) -> dict[int, str]: """Translate a Pauli label to a mapping ``qubit -> {X, Y, Z}``. Args: label: Pauli string label in little-endian ordering. Returns: Dictionary assigning each non-identity qubit index to its Pauli axis. """ mapping: dict[int, str] = {} for index, char in enumerate(reversed(label)): # reversed: right-most char -> qubit 0 if char != "I": mapping[index] = char return mapping
[docs] class TimeEvolutionBuilderFactory(AlgorithmFactory): """Factory class for creating TimeEvolutionBuilder instances."""
[docs] def algorithm_type_name(self) -> str: """Return time_evolution_builder as the algorithm type name.""" return "time_evolution_builder"
[docs] def default_algorithm_name(self) -> str: """Return Trotter as the default algorithm name.""" return "trotter"