Source code for finesse.simulations.base

import numpy as np
from copy import deepcopy
from finesse import constants


cdef rebuild_model_settings(d) :
    """
    Rebuilds the model settings from a dictionary.

    Parameters
    ----------
    d : dict
        A dictionary where each key-value pair represents a setting name and its value.

    Returns
    -------
    ModelSettings
        A new `ModelSettings` object with its attributes set according to `d`.

    """
    s = ModelSettings()
    for k,v in d.items():
        setattr(s, k, v)
    return s


[docs]cdef class ModelSettings: """ A class used to represent the settings of a model. Attributes ---------- phase_config : PhaseConfig The configuration of the phase. homs_view : ndarray A view on the higher order modes (HOMs). max_n : int
The maximum n value in the HOMs. max_m : int The maximum m value in the HOMs. num_HOMs : int The number of HOMs. lambda0 : float The wavelength. f0 : float The frequency, calculated as the speed of light divided by the wavelength. k0 : float The wave number, calculated as 2*pi divided by the wavelength. Methods ------- __reduce__() Returns a tuple that can be used to rebuild the object using `rebuild_model_settings`. set_lambda0(value) Sets the wavelength and updates the frequency and wave number accordingly. """ def __init__(self): self.phase_config = PhaseConfig() self.homs_view = None self.max_n = 0 self.max_m = 0 self.num_HOMs = 0 self.set_lambda0(1064e-9) def __reduce__(self): """ Returns a tuple that can be used to rebuild the object using `rebuild_model_settings`. Returns ------- tuple A tuple containing the `rebuild_model_settings` function and a dictionary of the object's attributes. """ # This is all to get around that memoryviews can't be deepcopied d = {"homs_view": np.asarray(self.homs_view)} d.update( { _: deepcopy(getattr(self, _)) for _ in dir(self) if not _.startswith("__") and _ not in d and not callable(getattr(self, _)) } ) return rebuild_model_settings, (d,) @property def homs(self): """ Returns a view on the higher order modes (HOMs). Returns ------- ndarray A view on the HOMs. """ return np.asarray(self.homs_view) @homs.setter def homs(self, value): """ Sets the HOMs and updates the maximum n and m values and the number of HOMs. Parameters ---------- value : ndarray The new HOMs. """ self.homs_view = value self.max_n = np.max(self.homs_view[:,0]) self.max_m = np.max(self.homs_view[:,1]) self.num_HOMs = self.homs_view.shape[0] def set_lambda0(self, value): """ Sets the wavelength and updates the frequency and wave number accordingly. Parameters ---------- value : float The new wavelength. """ self.lambda0 = value self.f0 = constants.C_LIGHT / self.lambda0 self.k0 = 2.0 * constants.PI / self.lambda0
[docs]cdef class PhaseConfig: # TODO maybe this can be removed, not sure if it's used anywhere # other than in the model settings pass