-
Notifications
You must be signed in to change notification settings - Fork 0
Closed
Description
Context
Thanks to the work of @Pichon, I was able to test the current pyaml version on the SOLEIL II digital twin (based on a modified version of the ESRF-EBS simulator).
Here is some user feedback on the current implementation, I propose to discuss it and them to split it in subtasks when we agree on some changes.
For this feedback, I focused on the most basic features of pyAML but I was also able to run the tune response matrix example of @JeanLucPons adapted to the SOLEIL II lattice. I think that with a few modifications to the actual code base, we will not be too far from a version in which we will be able to implement the chosen use cases.
- Version tested: Merge of 30 modular linking between pyat and pyaml elements pyaml#32, commit
be8b5d0e5f2e08f674c7072d3761fd6f6f77bef2 - Background: Limited prior knowledge of the
pyamlcodebase.
General Comments
- Coding Style:
- The codebase uses many
get/setfunctions, which feels un-Pythonic. Consider using properties with getters/setters for a smoother user experience.
- The codebase uses many
- Internal vs. User-facing Methods:
- Clearly distinguish between methods intended for users and internal ones.
- Internal methods should be prefixed with
_or__to hide them from introspection (e.g., in IPython/terminal).
- Function Naming:
- The function
pyaml(used to load.yamlconfigurations) should have a descriptive name, e.g.,load_pymal_config.
- The function
Specific Feedback
pyaml.lattice.simulator.Simulator / pyaml.controlsystem.TangoControlSystem
get_all_magnetsMethod:- Currently returns a
dict, but should return an array to enable filtering/sorting. - Question: Should this be a property instead of a method?
- Currently returns a
- Feature Request:
- Add a property/method to retrieve all elements (magnets, BPMs, devices, etc.), not just magnets.
pyaml.lattice.magnet
__repr__Method:- Should include the
control_mode(e.g.,simulatedvs.live) to avoid confusion.
- Should include the
__str__Method:- Should print detailed information about the magnet, e.g.:
Sextupole(name='SXF2', strength=809.008, currents=[140,...], hardware_name='AN01-AR/EM/SCF.02', control_mode='live', ...)
- Should print detailed information about the magnet, e.g.:
hardware_nameAccessibility:- Should be accessible as a property (at least in "live" mode).
- Current Workaround:
quad.model.get_devices()[0].name() # Returns 'AN14-AR/EM/OH.03-CQLN.13/strength'
- Control System Layer Access:
- Should provide easy access to the Python control system layer (e.g.,
pyTango/pyEPICS). - For Tango, suggest adding a
device_proxyattribute to return theTangoDeviceProxyfor the element.
- Should provide easy access to the Python control system layer (e.g.,
pyaml.arrays.magnet_arrays.MagnetArray
- Subset Handling:
- Subsets (e.g.,
qcorr[0:5]) should return aMagnetArray, not alist.- Bug:
qcorr[0:5].strengths→AttributeError: 'list' object has no attribute 'strengths'.
- Bug:
- Subsets (e.g.,
- The
MagnetArrayclass is currently too simplistic and lacks key features for practical use.- Support heterogeneous
MagnetArray(different magnet types). - Implement element access by:
hardware_namename- Element type filtering
- Support heterogeneous
pyaml.control.abstract_impl.RWStrengthScalar
getMethod:- Currently returns an array instead of a
float.- Example:
quad.strength.get() # Returns [0.0]
- Example:
- Currently returns an array instead of a
pyaml.arrays.magnet_array.RWMagnetStrength
- Setting Values:
- Should support setting RWArrays using a single value (not just arrays of the same shape).
- Bug:
sh1.strengths.set(1)→TypeError: 'float' object is not subscriptable
- Bug:
- Should support setting RWArrays using a single value (not just arrays of the same shape).
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels