Source code for braket.ahs.hamiltonian

# Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
#
#     http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.

from __future__ import annotations

from typing import Optional

from braket.ahs.discretization_types import DiscretizationProperties


[docs] class Hamiltonian: def __init__(self, terms: Optional[list[Hamiltonian]] = None): r"""A Hamiltonian representing a system to be simulated. A Hamiltonian :math:`H` may be expressed as a sum of multiple terms .. math:: H = \sum_i H_i """ self._terms = terms or [] @property def terms(self) -> list[Hamiltonian]: """list[Hamiltonian]: The list of terms in this Hamiltonian.""" return self._terms
[docs] def discretize(self, properties: DiscretizationProperties) -> Hamiltonian: """Creates a discretized version of the Hamiltonian. Args: properties (DiscretizationProperties): Capabilities of a device that represent the resolution with which the device can implement the parameters. Returns: Hamiltonian: A new discretized Hamiltonian. """ terms = [term.discretize(properties) for term in self.terms] return Hamiltonian(terms=terms)
def __iadd__(self, other: Hamiltonian) -> Hamiltonian: if type(self) is not Hamiltonian: raise ValueError(f"Unable to modify Hamiltonian of type {type(self)}") self._terms.extend(other.terms) return self def __add__(self, other: Hamiltonian) -> Hamiltonian: terms = [] terms.extend(self.terms) terms.extend(other.terms) return Hamiltonian(terms)