Skip to content

Base

oqd_heisenberg_ion.simulators.preprocess.system.base

System

Defines the model. This includes the Hamiltonian parameters, interaction strengths and the lattice geometry

Source code in src/oqd_heisenberg_ion/simulators/preprocess/system/base.py
class System:
    """
    Defines the model. This includes the Hamiltonian parameters, interaction strengths and the lattice geometry
    """

    def __init__(self, **kwargs):
        """
        Defines the system from key word arguments

        Args:
            **kwargs(dict): key word arguments required to specify the system
        """

        self.model_name = kwargs["hamiltonian_name"]
        hamiltonian_args = HamiltonianFactory.extract_args(self.model_name, **kwargs)
        self.hamiltonian_parameters = HamiltonianFactory.create(self.model_name, **hamiltonian_args)

        self.geometry_name = (
            kwargs["interaction_range"]
            + "_"
            + kwargs["boundary"]
            + "_"
            + kwargs["spatial_dimension"]
            + "_"
            + kwargs["lattice_type"]
        )
        geometry_args = GeometryFactory.extract_args(self.geometry_name, **kwargs)
        self.geometry = GeometryFactory.create(self.geometry_name, **geometry_args)

        self.interaction_range = kwargs["interaction_range"]
        self.interaction_name = self.get_interaction_name(kwargs)
        self.interaction_args = InteractionsFactory.extract_args(self.interaction_name, **kwargs)
        self.interactions = InteractionsFactory.create(self.interaction_name, self.geometry, **self.interaction_args)

    def get_interaction_name(self, kwarg_dict):
        """
        Extracts sets the interaction_name from inputs if long range interactions are specified by inputs

        Args:
            kwarg_dict (dict): contains the interaction_type key value pair

        Returns:
            (str): interaction name
        """

        if self.interaction_range == "long_range":
            return kwarg_dict["interaction_type"]
        else:
            return self.interaction_range

    def compute_h_B(self):
        """
        computes the required h_B parameter for stochastic series expansion based on the field strength, the energy scale and the geometry

        Returns:
            (float): h_B, the field contribution of a single bond in SSE
        """

        h = self.hamiltonian_parameters.h
        J = self.hamiltonian_parameters.J
        num_neighbors = self.geometry.num_neighbors_per_site

        return h / (J * num_neighbors)

    def update_parameters(self, parameter_dict):
        """
        updates a dictionary with system parameters

        Args:
            parameter_dict (dict): parameter set specified as key word arguments

        Returns:
            (dict): updated parameter set
        """

        self.hamiltonian_parameters.update_parameters(parameter_dict)
        self.geometry.update_parameters(parameter_dict)

        return parameter_dict

__init__

Defines the system from key word arguments

Parameters:

  • **kwargs (dict, default: {} ) –

    key word arguments required to specify the system

Source code in src/oqd_heisenberg_ion/simulators/preprocess/system/base.py
def __init__(self, **kwargs):
    """
    Defines the system from key word arguments

    Args:
        **kwargs(dict): key word arguments required to specify the system
    """

    self.model_name = kwargs["hamiltonian_name"]
    hamiltonian_args = HamiltonianFactory.extract_args(self.model_name, **kwargs)
    self.hamiltonian_parameters = HamiltonianFactory.create(self.model_name, **hamiltonian_args)

    self.geometry_name = (
        kwargs["interaction_range"]
        + "_"
        + kwargs["boundary"]
        + "_"
        + kwargs["spatial_dimension"]
        + "_"
        + kwargs["lattice_type"]
    )
    geometry_args = GeometryFactory.extract_args(self.geometry_name, **kwargs)
    self.geometry = GeometryFactory.create(self.geometry_name, **geometry_args)

    self.interaction_range = kwargs["interaction_range"]
    self.interaction_name = self.get_interaction_name(kwargs)
    self.interaction_args = InteractionsFactory.extract_args(self.interaction_name, **kwargs)
    self.interactions = InteractionsFactory.create(self.interaction_name, self.geometry, **self.interaction_args)

get_interaction_name

Extracts sets the interaction_name from inputs if long range interactions are specified by inputs

Parameters:

  • kwarg_dict (dict) –

    contains the interaction_type key value pair

Returns:

  • str

    interaction name

Source code in src/oqd_heisenberg_ion/simulators/preprocess/system/base.py
def get_interaction_name(self, kwarg_dict):
    """
    Extracts sets the interaction_name from inputs if long range interactions are specified by inputs

    Args:
        kwarg_dict (dict): contains the interaction_type key value pair

    Returns:
        (str): interaction name
    """

    if self.interaction_range == "long_range":
        return kwarg_dict["interaction_type"]
    else:
        return self.interaction_range

compute_h_B

computes the required h_B parameter for stochastic series expansion based on the field strength, the energy scale and the geometry

Returns:

  • float

    h_B, the field contribution of a single bond in SSE

Source code in src/oqd_heisenberg_ion/simulators/preprocess/system/base.py
def compute_h_B(self):
    """
    computes the required h_B parameter for stochastic series expansion based on the field strength, the energy scale and the geometry

    Returns:
        (float): h_B, the field contribution of a single bond in SSE
    """

    h = self.hamiltonian_parameters.h
    J = self.hamiltonian_parameters.J
    num_neighbors = self.geometry.num_neighbors_per_site

    return h / (J * num_neighbors)

update_parameters

updates a dictionary with system parameters

Parameters:

  • parameter_dict (dict) –

    parameter set specified as key word arguments

Returns:

  • dict

    updated parameter set

Source code in src/oqd_heisenberg_ion/simulators/preprocess/system/base.py
def update_parameters(self, parameter_dict):
    """
    updates a dictionary with system parameters

    Args:
        parameter_dict (dict): parameter set specified as key word arguments

    Returns:
        (dict): updated parameter set
    """

    self.hamiltonian_parameters.update_parameters(parameter_dict)
    self.geometry.update_parameters(parameter_dict)

    return parameter_dict