Skip to content

Commit 2f6e594

Browse files
authored
Merge pull request #85 from python-accelerator-middle-layer/fix-for-empty-array
Fix for empty array
2 parents 9829e79 + 8a3b176 commit 2f6e594

File tree

4 files changed

+35
-10
lines changed

4 files changed

+35
-10
lines changed

pyaml/arrays/bpm_array.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ def __init__(self, arrayName: str, bpms: list[BPM], use_aggregator=True):
7777
self.__hpos = RWBPMSinglePosition(arrayName, bpms, 0)
7878
self.__vpos = RWBPMSinglePosition(arrayName, bpms, 1)
7979

80-
if use_aggregator:
80+
if use_aggregator and len(bpms) > 0:
8181
aggs = self.get_peer().create_bpm_aggregators(bpms)
8282
self.__hvpos.set_aggregator(aggs[0])
8383
self.__hpos.set_aggregator(aggs[1])

pyaml/arrays/element_array.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,15 @@ def __init__(self, arrayName: str, elements: list[Element], use_aggregator=True)
3030
"""
3131
super().__init__(i for i in elements)
3232
self.__name = arrayName
33-
self.__peer = self[0]._peer if len(self) > 0 else None
34-
self.__use_aggretator = use_aggregator
35-
if self.__peer is None or any([m._peer != self.__peer for m in self]):
36-
raise PyAMLException(
37-
f"{self.__class__.__name__} {self.get_name()}: "
38-
"All elements must be attached to the same instance "
39-
"of either a Simulator or a ControlSystem"
40-
)
33+
if len(elements) > 0:
34+
self.__peer = self[0]._peer if len(self) > 0 else None
35+
self.__use_aggretator = use_aggregator
36+
if self.__peer is None or any([m._peer != self.__peer for m in self]):
37+
raise PyAMLException(
38+
f"{self.__class__.__name__} {self.get_name()}: "
39+
"All elements must be attached to the same instance "
40+
"of either a Simulator or a ControlSystem"
41+
)
4142

4243
def get_peer(self):
4344
"""

pyaml/arrays/magnet_array.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ def __init__(self, arrayName: str, magnets: list[Magnet], use_aggregator=True):
103103
self.__rwstrengths = RWMagnetStrength(arrayName, magnets)
104104
self.__rwhardwares = RWMagnetHardware(arrayName, magnets)
105105

106-
if use_aggregator:
106+
if use_aggregator and len(magnets) > 0:
107107
aggs = self.get_peer().create_magnet_strength_aggregator(magnets)
108108
aggh = self.get_peer().create_magnet_harddware_aggregator(magnets)
109109
self.__rwstrengths.set_aggregator(aggs)

tests/test_arrays.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,15 @@
44
import pytest
55

66
from pyaml.accelerator import Accelerator
7+
from pyaml.arrays.bpm import BPM
8+
from pyaml.arrays.bpm import ConfigModel as BPMArrayConfigModel
79
from pyaml.arrays.bpm_array import BPMArray
10+
from pyaml.arrays.cfm_magnet import CombinedFunctionMagnet
11+
from pyaml.arrays.cfm_magnet import ConfigModel as CombinedFunctionMagnetConfigModel
812
from pyaml.arrays.cfm_magnet_array import CombinedFunctionMagnetArray
913
from pyaml.arrays.element_array import ElementArray
14+
from pyaml.arrays.magnet import ConfigModel as MagnetArrayConfigModel
15+
from pyaml.arrays.magnet import Magnet
1016
from pyaml.arrays.magnet_array import MagnetArray
1117
from pyaml.configuration.factory import Factory
1218

@@ -220,4 +226,22 @@ def test_arrays(install_test_package):
220226
magSH1AC = acfm["model_name:SH1A-*"] # All SH1A magnets (CFMs only)
221227
assert isinstance(magSH1AC, ElementArray) and len(magSH1AC) == 32
222228

229+
# Empty arrays
230+
emptyMag = Magnet(MagnetArrayConfigModel(name="EmptyMag", elements=[]))
231+
emptyMag.fill_array(sr.design) # Attach the array
232+
v = sr.design.get_magnets("EmptyMag").strengths.get() # Ensure good attach
233+
assert np.shape(v) == (0,)
234+
235+
emptyBPM = BPM(BPMArrayConfigModel(name="emptyBPM", elements=[]))
236+
emptyBPM.fill_array(sr.design) # Attach the array
237+
v = sr.design.get_bpms("emptyBPM").positions.get() # Ensure good attach
238+
assert np.shape(v) == (0,)
239+
240+
emptyCFM = CombinedFunctionMagnet(
241+
CombinedFunctionMagnetConfigModel(name="emptyCFM", elements=[])
242+
)
243+
emptyCFM.fill_array(sr.design) # Attach the array
244+
v = sr.design.get_cfm_magnets("emptyCFM").strengths.get() # Ensure good attach
245+
assert np.shape(v) == (0,)
246+
223247
Factory.clear()

0 commit comments

Comments
 (0)