Source code for pyaml.arrays.array
"""
Array configuration
"""
from pydantic import BaseModel, ConfigDict
from pyaml.common.exception import PyAMLException
from ..common.element_holder import ElementHolder
[docs]
class ArrayConfigModel(BaseModel):
"""
Base class for configuration of array of :py:class:`~pyaml.arrays.element.Element`,
:py:class:`~pyaml.arrays.bpm.BPM`, :py:class:`~pyaml.arrays.magnet.Magnet` or
:py:class:`~pyaml.arrays.cfm_magnet.CombinedFunctionMagnet`.
Parameters
----------
name : str
Name of the array
elements : list[str]
List of pyaml element names
"""
model_config = ConfigDict(arbitrary_types_allowed=True, extra="forbid")
name: str
elements: list[str]
[docs]
class ArrayConfig(object):
"""
Base class that implements configuration for access to arrays (families)
"""
def __init__(self, cfg: ArrayConfigModel):
self._cfg = cfg
[docs]
def fill_array(self, holder: ElementHolder):
"""
Fill array with elements from the holder and add the array to
the holder.
Parameters
----------
holder : ElementHolder
The element holder (:py:class:`~pyaml.lattice.simulator.Simulator`
or :py:class:`~pyaml.control.controlsystem.ControlSystem`) to
populate with the array.
Raises
------
PyAMLException
When this method is not overridden in a subclass
"""
raise PyAMLException("Array.fill_array() is not subclassed")
def __repr__(self):
# ArrayConfigModel is a super class
# ConfigModel is expected from sub classes
return repr(self._cfg).replace("ConfigModel", self.__class__.__name__)