cgse 2024.7.0__py3-none-any.whl → 2025.0.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- README.md +27 -0
- bump.py +85 -0
- cgse-2025.0.2.dist-info/METADATA +38 -0
- cgse-2025.0.2.dist-info/RECORD +5 -0
- {cgse-2024.7.0.dist-info → cgse-2025.0.2.dist-info}/WHEEL +1 -2
- cgse-2024.7.0.dist-info/COPYING +0 -674
- cgse-2024.7.0.dist-info/COPYING.LESSER +0 -165
- cgse-2024.7.0.dist-info/METADATA +0 -144
- cgse-2024.7.0.dist-info/RECORD +0 -660
- cgse-2024.7.0.dist-info/entry_points.txt +0 -75
- cgse-2024.7.0.dist-info/top_level.txt +0 -2
- egse/__init__.py +0 -12
- egse/__main__.py +0 -32
- egse/aeu/aeu.py +0 -5238
- egse/aeu/aeu_awg.yaml +0 -265
- egse/aeu/aeu_crio.yaml +0 -273
- egse/aeu/aeu_cs.py +0 -627
- egse/aeu/aeu_devif.py +0 -321
- egse/aeu/aeu_main_ui.py +0 -903
- egse/aeu/aeu_metrics.py +0 -131
- egse/aeu/aeu_protocol.py +0 -463
- egse/aeu/aeu_psu.yaml +0 -204
- egse/aeu/aeu_ui.py +0 -873
- egse/aeu/arbdata/FccdRead.arb +0 -2
- egse/aeu/arbdata/FccdRead_min_points.arb +0 -2
- egse/aeu/arbdata/HeaterSync_FccdRead.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead25.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead31_25.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead37_50.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead43_75.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead50.arb +0 -2
- egse/aeu/arbdata/Heater_FccdRead_min_points.arb +0 -2
- egse/aeu/arbdata/ccdRead25.arb +0 -2
- egse/aeu/arbdata/ccdRead25_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead31_25.arb +0 -2
- egse/aeu/arbdata/ccdRead31_25_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead37_50.arb +0 -2
- egse/aeu/arbdata/ccdRead37_50_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead43_75.arb +0 -2
- egse/aeu/arbdata/ccdRead43_75_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead50.arb +0 -2
- egse/aeu/arbdata/ccdRead50_150ms.arb +0 -2
- egse/alert/__init__.py +0 -1049
- egse/alert/alertman.yaml +0 -37
- egse/alert/alertman_cs.py +0 -233
- egse/alert/alertman_ui.py +0 -600
- egse/alert/gsm/beaglebone.py +0 -138
- egse/alert/gsm/beaglebone.yaml +0 -51
- egse/alert/gsm/beaglebone_cs.py +0 -108
- egse/alert/gsm/beaglebone_devif.py +0 -122
- egse/alert/gsm/beaglebone_protocol.py +0 -46
- egse/bits.py +0 -318
- egse/camera.py +0 -44
- egse/collimator/__init__.py +0 -0
- egse/collimator/fcul/__init__.py +0 -0
- egse/collimator/fcul/ogse.py +0 -1077
- egse/collimator/fcul/ogse.yaml +0 -14
- egse/collimator/fcul/ogse_cs.py +0 -154
- egse/collimator/fcul/ogse_devif.py +0 -358
- egse/collimator/fcul/ogse_protocol.py +0 -132
- egse/collimator/fcul/ogse_sim.py +0 -431
- egse/collimator/fcul/ogse_ui.py +0 -1108
- egse/command.py +0 -699
- egse/config.py +0 -410
- egse/confman/__init__.py +0 -1058
- egse/confman/confman.yaml +0 -70
- egse/confman/confman_cs.py +0 -240
- egse/confman/confman_ui.py +0 -381
- egse/confman/setup_ui.py +0 -565
- egse/control.py +0 -632
- egse/coordinates/__init__.py +0 -534
- egse/coordinates/avoidance.py +0 -100
- egse/coordinates/cslmodel.py +0 -127
- egse/coordinates/laser_tracker_to_dict.py +0 -122
- egse/coordinates/point.py +0 -707
- egse/coordinates/pyplot.py +0 -194
- egse/coordinates/referenceFrame.py +0 -1279
- egse/coordinates/refmodel.py +0 -737
- egse/coordinates/rotationMatrix.py +0 -85
- egse/coordinates/transform3d_addon.py +0 -419
- egse/csl/__init__.py +0 -50
- egse/csl/commanding.py +0 -78
- egse/csl/icons/hexapod-connected-selected.svg +0 -30
- egse/csl/icons/hexapod-connected.svg +0 -30
- egse/csl/icons/hexapod-homing-selected.svg +0 -68
- egse/csl/icons/hexapod-homing.svg +0 -68
- egse/csl/icons/hexapod-retract-selected.svg +0 -56
- egse/csl/icons/hexapod-retract.svg +0 -51
- egse/csl/icons/hexapod-zero-selected.svg +0 -56
- egse/csl/icons/hexapod-zero.svg +0 -56
- egse/csl/icons/logo-puna.svg +0 -92
- egse/csl/icons/stop.svg +0 -1
- egse/csl/initialisation.py +0 -102
- egse/csl/mech_pos_settings.yaml +0 -18
- egse/das.py +0 -1240
- egse/das.yaml +0 -7
- egse/data/conf/SETUP_CSL_00000_170620_150000.yaml +0 -5
- egse/data/conf/SETUP_CSL_00001_170620_151010.yaml +0 -69
- egse/data/conf/SETUP_CSL_00002_170620_151020.yaml +0 -69
- egse/data/conf/SETUP_CSL_00003_170620_151030.yaml +0 -69
- egse/data/conf/SETUP_CSL_00004_170620_151040.yaml +0 -69
- egse/data/conf/SETUP_CSL_00005_170620_151050.yaml +0 -69
- egse/data/conf/SETUP_CSL_00006_170620_151060.yaml +0 -69
- egse/data/conf/SETUP_CSL_00007_170620_151070.yaml +0 -69
- egse/data/conf/SETUP_CSL_00008_170620_151080.yaml +0 -75
- egse/data/conf/SETUP_CSL_00010_210308_083016.yaml +0 -138
- egse/data/conf/SETUP_INTA_00000_170620_150000.yaml +0 -4
- egse/data/conf/SETUP_SRON_00000_170620_150000.yaml +0 -4
- egse/decorators.py +0 -514
- egse/device.py +0 -269
- egse/dpu/__init__.py +0 -2698
- egse/dpu/ccd_ui.py +0 -514
- egse/dpu/dpu.py +0 -783
- egse/dpu/dpu.yaml +0 -153
- egse/dpu/dpu_cs.py +0 -272
- egse/dpu/dpu_ui.py +0 -671
- egse/dpu/fitsgen.py +0 -2096
- egse/dpu/fitsgen_ui.py +0 -399
- egse/dpu/hdf5_model.py +0 -332
- egse/dpu/hdf5_ui.py +0 -277
- egse/dpu/hdf5_viewer.py +0 -506
- egse/dpu/hk_ui.py +0 -468
- egse/dpu_commands.py +0 -81
- egse/dsi/__init__.py +0 -33
- egse/dsi/_libesl.py +0 -232
- egse/dsi/constants.py +0 -296
- egse/dsi/esl.py +0 -630
- egse/dsi/rmap.py +0 -444
- egse/dsi/rmapci.py +0 -39
- egse/dsi/spw.py +0 -335
- egse/dsi/spw_state.py +0 -29
- egse/dummy.py +0 -318
- egse/dyndummy.py +0 -179
- egse/env.py +0 -278
- egse/exceptions.py +0 -88
- egse/fdir/__init__.py +0 -26
- egse/fdir/fdir_manager.py +0 -85
- egse/fdir/fdir_manager.yaml +0 -37
- egse/fdir/fdir_manager_controller.py +0 -136
- egse/fdir/fdir_manager_cs.py +0 -164
- egse/fdir/fdir_manager_interface.py +0 -15
- egse/fdir/fdir_remote.py +0 -73
- egse/fdir/fdir_remote.yaml +0 -30
- egse/fdir/fdir_remote_controller.py +0 -30
- egse/fdir/fdir_remote_cs.py +0 -94
- egse/fdir/fdir_remote_interface.py +0 -9
- egse/fdir/fdir_remote_popup.py +0 -26
- egse/fee/__init__.py +0 -106
- egse/fee/f_fee_register.yaml +0 -43
- egse/fee/feesim.py +0 -914
- egse/fee/n_fee_hk.py +0 -768
- egse/fee/nfee.py +0 -188
- egse/filterwheel/__init__.py +0 -4
- egse/filterwheel/eksma/__init__.py +0 -49
- egse/filterwheel/eksma/fw8smc4.py +0 -657
- egse/filterwheel/eksma/fw8smc4.yaml +0 -121
- egse/filterwheel/eksma/fw8smc4_cs.py +0 -144
- egse/filterwheel/eksma/fw8smc4_devif.py +0 -473
- egse/filterwheel/eksma/fw8smc4_protocol.py +0 -82
- egse/filterwheel/eksma/fw8smc4_ui.py +0 -940
- egse/filterwheel/eksma/fw8smc5.py +0 -115
- egse/filterwheel/eksma/fw8smc5.yaml +0 -105
- egse/filterwheel/eksma/fw8smc5_controller.py +0 -307
- egse/filterwheel/eksma/fw8smc5_cs.py +0 -141
- egse/filterwheel/eksma/fw8smc5_interface.py +0 -65
- egse/filterwheel/eksma/fw8smc5_simulator.py +0 -29
- egse/filterwheel/eksma/fw8smc5_ui.py +0 -1065
- egse/filterwheel/eksma/testpythonfw.py +0 -215
- egse/fov/__init__.py +0 -65
- egse/fov/fov_hk.py +0 -710
- egse/fov/fov_ui.py +0 -859
- egse/fov/fov_ui_controller.py +0 -140
- egse/fov/fov_ui_model.py +0 -200
- egse/fov/fov_ui_view.py +0 -345
- egse/gimbal/__init__.py +0 -32
- egse/gimbal/symetrie/__init__.py +0 -26
- egse/gimbal/symetrie/alpha.py +0 -586
- egse/gimbal/symetrie/generic_gimbal_ui.py +0 -1521
- egse/gimbal/symetrie/gimbal.py +0 -877
- egse/gimbal/symetrie/gimbal.yaml +0 -168
- egse/gimbal/symetrie/gimbal_cs.py +0 -183
- egse/gimbal/symetrie/gimbal_protocol.py +0 -138
- egse/gimbal/symetrie/gimbal_ui.py +0 -361
- egse/gimbal/symetrie/pmac.py +0 -1006
- egse/gimbal/symetrie/pmac_regex.py +0 -83
- egse/graph.py +0 -132
- egse/gui/__init__.py +0 -47
- egse/gui/buttons.py +0 -378
- egse/gui/focalplane.py +0 -1285
- egse/gui/formatter.py +0 -10
- egse/gui/led.py +0 -162
- egse/gui/limitswitch.py +0 -143
- egse/gui/mechanisms.py +0 -587
- egse/gui/states.py +0 -148
- egse/gui/stripchart.py +0 -729
- egse/gui/styles.qss +0 -48
- egse/gui/switch.py +0 -112
- egse/h5.py +0 -274
- egse/help/__init__.py +0 -0
- egse/help/help_ui.py +0 -126
- egse/hexapod/__init__.py +0 -32
- egse/hexapod/symetrie/__init__.py +0 -137
- egse/hexapod/symetrie/alpha.py +0 -874
- egse/hexapod/symetrie/dynalpha.py +0 -1387
- egse/hexapod/symetrie/hexapod_ui.py +0 -1516
- egse/hexapod/symetrie/pmac.py +0 -1010
- egse/hexapod/symetrie/pmac_regex.py +0 -83
- egse/hexapod/symetrie/puna.py +0 -1167
- egse/hexapod/symetrie/puna.yaml +0 -193
- egse/hexapod/symetrie/puna_cs.py +0 -195
- egse/hexapod/symetrie/puna_protocol.py +0 -134
- egse/hexapod/symetrie/puna_ui.py +0 -433
- egse/hexapod/symetrie/punaplus.py +0 -107
- egse/hexapod/symetrie/zonda.py +0 -872
- egse/hexapod/symetrie/zonda.yaml +0 -337
- egse/hexapod/symetrie/zonda_cs.py +0 -172
- egse/hexapod/symetrie/zonda_devif.py +0 -414
- egse/hexapod/symetrie/zonda_protocol.py +0 -123
- egse/hexapod/symetrie/zonda_ui.py +0 -449
- egse/hk.py +0 -791
- egse/icons/aeu-cs-start.svg +0 -117
- egse/icons/aeu-cs-stop.svg +0 -118
- egse/icons/aeu-cs.svg +0 -107
- egse/icons/aeu_cs-started.svg +0 -112
- egse/icons/aeu_cs-stopped.svg +0 -112
- egse/icons/aeu_cs.svg +0 -55
- egse/icons/alert.svg +0 -1
- egse/icons/arrow-double-left.png +0 -0
- egse/icons/arrow-double-right.png +0 -0
- egse/icons/arrow-up.svg +0 -11
- egse/icons/backward.svg +0 -1
- egse/icons/busy.svg +0 -1
- egse/icons/cleaning.svg +0 -115
- egse/icons/color-scheme.svg +0 -1
- egse/icons/cs-connected-alert.svg +0 -91
- egse/icons/cs-connected-disabled.svg +0 -43
- egse/icons/cs-connected.svg +0 -89
- egse/icons/cs-not-connected.svg +0 -44
- egse/icons/double-left-arrow.svg +0 -1
- egse/icons/double-right-arrow.svg +0 -1
- egse/icons/erase-disabled.svg +0 -19
- egse/icons/erase.svg +0 -59
- egse/icons/fitsgen-start.svg +0 -47
- egse/icons/fitsgen-stop.svg +0 -48
- egse/icons/fitsgen.svg +0 -1
- egse/icons/forward.svg +0 -1
- egse/icons/fov-hk-start.svg +0 -33
- egse/icons/fov-hk-stop.svg +0 -37
- egse/icons/fov-hk.svg +0 -1
- egse/icons/front-desk.svg +0 -1
- egse/icons/home-actioned.svg +0 -15
- egse/icons/home-disabled.svg +0 -15
- egse/icons/home.svg +0 -13
- egse/icons/info.svg +0 -1
- egse/icons/invalid.png +0 -0
- egse/icons/led-green.svg +0 -20
- egse/icons/led-grey.svg +0 -20
- egse/icons/led-orange.svg +0 -20
- egse/icons/led-red.svg +0 -20
- egse/icons/led-square-green.svg +0 -134
- egse/icons/led-square-grey.svg +0 -134
- egse/icons/led-square-orange.svg +0 -134
- egse/icons/led-square-red.svg +0 -134
- egse/icons/limit-switch-all-green.svg +0 -115
- egse/icons/limit-switch-all-red.svg +0 -117
- egse/icons/limit-switch-el+.svg +0 -116
- egse/icons/limit-switch-el-.svg +0 -117
- egse/icons/location-marker.svg +0 -1
- egse/icons/logo-dpu.svg +0 -48
- egse/icons/logo-gimbal.svg +0 -112
- egse/icons/logo-huber.svg +0 -23
- egse/icons/logo-ogse.svg +0 -31
- egse/icons/logo-puna.svg +0 -92
- egse/icons/logo-tcs.svg +0 -29
- egse/icons/logo-zonda.svg +0 -66
- egse/icons/maximize.svg +0 -1
- egse/icons/meter.svg +0 -1
- egse/icons/more.svg +0 -45
- egse/icons/n-fee-hk-start.svg +0 -24
- egse/icons/n-fee-hk-stop.svg +0 -25
- egse/icons/n-fee-hk.svg +0 -83
- egse/icons/observing-off.svg +0 -46
- egse/icons/observing-on.svg +0 -46
- egse/icons/open-document-hdf5.png +0 -0
- egse/icons/open-document-hdf5.svg +0 -21
- egse/icons/ops-mode.svg +0 -1
- egse/icons/play-green.svg +0 -17
- egse/icons/plugged-disabled.svg +0 -27
- egse/icons/plugged.svg +0 -21
- egse/icons/pm_ui.svg +0 -1
- egse/icons/power-button-green.svg +0 -27
- egse/icons/power-button-red.svg +0 -27
- egse/icons/power-button.svg +0 -27
- egse/icons/radar.svg +0 -1
- egse/icons/radioactive.svg +0 -2
- egse/icons/reload.svg +0 -1
- egse/icons/remote-control-off.svg +0 -28
- egse/icons/remote-control-on.svg +0 -28
- egse/icons/repeat-blue.svg +0 -15
- egse/icons/repeat.svg +0 -1
- egse/icons/settings.svg +0 -1
- egse/icons/shrink.svg +0 -1
- egse/icons/shutter.svg +0 -1
- egse/icons/sign-off.svg +0 -1
- egse/icons/sign-on.svg +0 -1
- egse/icons/sim-mode.svg +0 -1
- egse/icons/small-buttons-go.svg +0 -20
- egse/icons/small-buttons-minus.svg +0 -51
- egse/icons/small-buttons-plus.svg +0 -51
- egse/icons/sponge.svg +0 -220
- egse/icons/start-button-disabled.svg +0 -84
- egse/icons/start-button.svg +0 -50
- egse/icons/stop-button-disabled.svg +0 -84
- egse/icons/stop-button.svg +0 -50
- egse/icons/stop-red.svg +0 -17
- egse/icons/stop.svg +0 -1
- egse/icons/switch-disabled-square.svg +0 -87
- egse/icons/switch-disabled.svg +0 -15
- egse/icons/switch-off-square.svg +0 -87
- egse/icons/switch-off.svg +0 -72
- egse/icons/switch-on-square.svg +0 -87
- egse/icons/switch-on.svg +0 -61
- egse/icons/temperature-control.svg +0 -44
- egse/icons/th_ui_logo.svg +0 -1
- egse/icons/unplugged.svg +0 -23
- egse/icons/unvalid.png +0 -0
- egse/icons/user-interface.svg +0 -1
- egse/icons/vacuum.svg +0 -1
- egse/icons/valid.png +0 -0
- egse/icons/zoom-to-pixel-dark.svg +0 -64
- egse/icons/zoom-to-pixel-white.svg +0 -36
- egse/images/big-rotation-stage.png +0 -0
- egse/images/connected-100.png +0 -0
- egse/images/cross.svg +0 -6
- egse/images/disconnected-100.png +0 -0
- egse/images/gui-icon.png +0 -0
- egse/images/home.svg +0 -6
- egse/images/info-icon.png +0 -0
- egse/images/led-black.svg +0 -89
- egse/images/led-green.svg +0 -85
- egse/images/led-orange.svg +0 -85
- egse/images/led-red.svg +0 -85
- egse/images/load-icon.png +0 -0
- egse/images/load-setup.png +0 -0
- egse/images/load.png +0 -0
- egse/images/pause.png +0 -0
- egse/images/play-button.svg +0 -8
- egse/images/play.png +0 -0
- egse/images/process-status.png +0 -0
- egse/images/restart.png +0 -0
- egse/images/search.png +0 -0
- egse/images/sma.png +0 -0
- egse/images/start.png +0 -0
- egse/images/stop-button.svg +0 -8
- egse/images/stop.png +0 -0
- egse/images/switch-off.svg +0 -48
- egse/images/switch-on.svg +0 -48
- egse/images/undo.png +0 -0
- egse/images/update-button.svg +0 -11
- egse/imageviewer/exposureselection.py +0 -475
- egse/imageviewer/imageviewer.py +0 -198
- egse/imageviewer/matchfocalplane.py +0 -179
- egse/imageviewer/subfieldposition.py +0 -133
- egse/lampcontrol/__init__.py +0 -4
- egse/lampcontrol/beaglebone/beaglebone.py +0 -178
- egse/lampcontrol/beaglebone/beaglebone.yaml +0 -62
- egse/lampcontrol/beaglebone/beaglebone_cs.py +0 -106
- egse/lampcontrol/beaglebone/beaglebone_devif.py +0 -150
- egse/lampcontrol/beaglebone/beaglebone_protocol.py +0 -73
- egse/lampcontrol/energetiq/__init__.py +0 -22
- egse/lampcontrol/energetiq/eq99.yaml +0 -98
- egse/lampcontrol/energetiq/lampEQ99.py +0 -283
- egse/lampcontrol/energetiq/lampEQ99_cs.py +0 -128
- egse/lampcontrol/energetiq/lampEQ99_devif.py +0 -158
- egse/lampcontrol/energetiq/lampEQ99_encode_decode_errors.py +0 -73
- egse/lampcontrol/energetiq/lampEQ99_protocol.py +0 -71
- egse/lampcontrol/energetiq/lampEQ99_ui.py +0 -465
- egse/lib/CentOS-7/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/CentOS-8/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/CentOS-8/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Debian/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Debian/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Debian/libetherspacelink_v35_21.dylib +0 -0
- egse/lib/Linux/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Linux/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Ubuntu-20/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Ubuntu-20/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/gssw/python3-gssw_2.2.3+31f63c9f-1_all.deb +0 -0
- egse/lib/ximc/__pycache__/pyximc.cpython-38 2.pyc +0 -0
- egse/lib/ximc/__pycache__/pyximc.cpython-38.pyc +0 -0
- egse/lib/ximc/libximc.framework/Frameworks/libbindy.dylib +0 -0
- egse/lib/ximc/libximc.framework/Frameworks/libxiwrapper.dylib +0 -0
- egse/lib/ximc/libximc.framework/Headers/ximc.h +0 -5510
- egse/lib/ximc/libximc.framework/Resources/Info.plist +0 -42
- egse/lib/ximc/libximc.framework/Resources/keyfile.sqlite +0 -0
- egse/lib/ximc/libximc.framework/libbindy.so +0 -0
- egse/lib/ximc/libximc.framework/libximc +0 -0
- egse/lib/ximc/libximc.framework/libximc.so +0 -0
- egse/lib/ximc/libximc.framework/libximc.so.7.0.0 +0 -0
- egse/lib/ximc/libximc.framework/libxiwrapper.so +0 -0
- egse/lib/ximc/pyximc.py +0 -922
- egse/listener.py +0 -179
- egse/logger/__init__.py +0 -243
- egse/logger/log_cs.py +0 -321
- egse/metrics.py +0 -102
- egse/mixin.py +0 -464
- egse/monitoring.py +0 -95
- egse/ni/alarms/__init__.py +0 -26
- egse/ni/alarms/cdaq9375.py +0 -300
- egse/ni/alarms/cdaq9375.yaml +0 -89
- egse/ni/alarms/cdaq9375_cs.py +0 -130
- egse/ni/alarms/cdaq9375_devif.py +0 -183
- egse/ni/alarms/cdaq9375_protocol.py +0 -48
- egse/obs_inspection.py +0 -165
- egse/observer.py +0 -41
- egse/obsid.py +0 -163
- egse/powermeter/__init__.py +0 -0
- egse/powermeter/ni/__init__.py +0 -38
- egse/powermeter/ni/cdaq9184.py +0 -224
- egse/powermeter/ni/cdaq9184.yaml +0 -73
- egse/powermeter/ni/cdaq9184_cs.py +0 -130
- egse/powermeter/ni/cdaq9184_devif.py +0 -201
- egse/powermeter/ni/cdaq9184_protocol.py +0 -48
- egse/powermeter/ni/cdaq9184_ui.py +0 -544
- egse/powermeter/thorlabs/__init__.py +0 -25
- egse/powermeter/thorlabs/pm100a.py +0 -380
- egse/powermeter/thorlabs/pm100a.yaml +0 -132
- egse/powermeter/thorlabs/pm100a_cs.py +0 -136
- egse/powermeter/thorlabs/pm100a_devif.py +0 -127
- egse/powermeter/thorlabs/pm100a_protocol.py +0 -80
- egse/powermeter/thorlabs/pm100a_ui.py +0 -725
- egse/process.py +0 -451
- egse/procman/__init__.py +0 -834
- egse/procman/cannot_start_process_popup.py +0 -43
- egse/procman/procman.yaml +0 -49
- egse/procman/procman_cs.py +0 -201
- egse/procman/procman_ui.py +0 -2081
- egse/protocol.py +0 -605
- egse/proxy.py +0 -531
- egse/randomwalk.py +0 -140
- egse/reg.py +0 -585
- egse/reload.py +0 -122
- egse/reprocess.py +0 -693
- egse/resource.py +0 -333
- egse/rmap.py +0 -406
- egse/rst.py +0 -135
- egse/search.py +0 -182
- egse/serialdevice.py +0 -190
- egse/services.py +0 -247
- egse/services.yaml +0 -68
- egse/settings.py +0 -379
- egse/settings.yaml +0 -980
- egse/setup.py +0 -1181
- egse/shutter/__init__.py +0 -0
- egse/shutter/thorlabs/__init__.py +0 -19
- egse/shutter/thorlabs/ksc101.py +0 -205
- egse/shutter/thorlabs/ksc101.yaml +0 -105
- egse/shutter/thorlabs/ksc101_cs.py +0 -136
- egse/shutter/thorlabs/ksc101_devif.py +0 -201
- egse/shutter/thorlabs/ksc101_protocol.py +0 -71
- egse/shutter/thorlabs/ksc101_ui.py +0 -548
- egse/shutter/thorlabs/sc10.py +0 -82
- egse/shutter/thorlabs/sc10.yaml +0 -52
- egse/shutter/thorlabs/sc10_controller.py +0 -81
- egse/shutter/thorlabs/sc10_cs.py +0 -108
- egse/shutter/thorlabs/sc10_interface.py +0 -25
- egse/shutter/thorlabs/sc10_simulator.py +0 -30
- egse/simulator.py +0 -41
- egse/slack.py +0 -61
- egse/socketdevice.py +0 -218
- egse/sockets.py +0 -218
- egse/spw.py +0 -1401
- egse/stages/__init__.py +0 -12
- egse/stages/aerotech/ensemble.py +0 -245
- egse/stages/aerotech/ensemble.yaml +0 -205
- egse/stages/aerotech/ensemble_controller.py +0 -275
- egse/stages/aerotech/ensemble_cs.py +0 -110
- egse/stages/aerotech/ensemble_interface.py +0 -132
- egse/stages/aerotech/ensemble_parameters.py +0 -433
- egse/stages/aerotech/ensemble_simulator.py +0 -27
- egse/stages/aerotech/mgse_sim.py +0 -188
- egse/stages/arun/smd3.py +0 -110
- egse/stages/arun/smd3.yaml +0 -68
- egse/stages/arun/smd3_controller.py +0 -470
- egse/stages/arun/smd3_cs.py +0 -112
- egse/stages/arun/smd3_interface.py +0 -53
- egse/stages/arun/smd3_simulator.py +0 -27
- egse/stages/arun/smd3_stop.py +0 -16
- egse/stages/huber/__init__.py +0 -49
- egse/stages/huber/smc9300.py +0 -920
- egse/stages/huber/smc9300.yaml +0 -63
- egse/stages/huber/smc9300_cs.py +0 -178
- egse/stages/huber/smc9300_devif.py +0 -345
- egse/stages/huber/smc9300_protocol.py +0 -113
- egse/stages/huber/smc9300_sim.py +0 -547
- egse/stages/huber/smc9300_ui.py +0 -973
- egse/state.py +0 -173
- egse/statemachine.py +0 -274
- egse/storage/__init__.py +0 -1067
- egse/storage/persistence.py +0 -2295
- egse/storage/storage.yaml +0 -79
- egse/storage/storage_cs.py +0 -231
- egse/styles/dark.qss +0 -343
- egse/styles/default.qss +0 -48
- egse/synoptics/__init__.py +0 -417
- egse/synoptics/syn.yaml +0 -9
- egse/synoptics/syn_cs.py +0 -195
- egse/system.py +0 -1611
- egse/tcs/__init__.py +0 -14
- egse/tcs/tcs.py +0 -879
- egse/tcs/tcs.yaml +0 -14
- egse/tcs/tcs_cs.py +0 -202
- egse/tcs/tcs_devif.py +0 -292
- egse/tcs/tcs_protocol.py +0 -180
- egse/tcs/tcs_sim.py +0 -177
- egse/tcs/tcs_ui.py +0 -543
- egse/tdms.py +0 -171
- egse/tempcontrol/__init__.py +0 -23
- egse/tempcontrol/agilent/agilent34970.py +0 -109
- egse/tempcontrol/agilent/agilent34970.yaml +0 -44
- egse/tempcontrol/agilent/agilent34970_cs.py +0 -114
- egse/tempcontrol/agilent/agilent34970_devif.py +0 -182
- egse/tempcontrol/agilent/agilent34970_protocol.py +0 -96
- egse/tempcontrol/agilent/agilent34972.py +0 -111
- egse/tempcontrol/agilent/agilent34972.yaml +0 -44
- egse/tempcontrol/agilent/agilent34972_cs.py +0 -115
- egse/tempcontrol/agilent/agilent34972_devif.py +0 -189
- egse/tempcontrol/agilent/agilent34972_protocol.py +0 -98
- egse/tempcontrol/beaglebone/beaglebone.py +0 -341
- egse/tempcontrol/beaglebone/beaglebone.yaml +0 -110
- egse/tempcontrol/beaglebone/beaglebone_cs.py +0 -117
- egse/tempcontrol/beaglebone/beaglebone_protocol.py +0 -134
- egse/tempcontrol/beaglebone/beaglebone_ui.py +0 -674
- egse/tempcontrol/digalox/digalox.py +0 -115
- egse/tempcontrol/digalox/digalox.yaml +0 -36
- egse/tempcontrol/digalox/digalox_cs.py +0 -108
- egse/tempcontrol/digalox/digalox_protocol.py +0 -56
- egse/tempcontrol/keithley/__init__.py +0 -33
- egse/tempcontrol/keithley/daq6510.py +0 -662
- egse/tempcontrol/keithley/daq6510.yaml +0 -105
- egse/tempcontrol/keithley/daq6510_cs.py +0 -163
- egse/tempcontrol/keithley/daq6510_devif.py +0 -343
- egse/tempcontrol/keithley/daq6510_protocol.py +0 -79
- egse/tempcontrol/keithley/daq6510_sim.py +0 -186
- egse/tempcontrol/lakeshore/__init__.py +0 -33
- egse/tempcontrol/lakeshore/lsci.py +0 -361
- egse/tempcontrol/lakeshore/lsci.yaml +0 -162
- egse/tempcontrol/lakeshore/lsci_cs.py +0 -174
- egse/tempcontrol/lakeshore/lsci_devif.py +0 -292
- egse/tempcontrol/lakeshore/lsci_protocol.py +0 -76
- egse/tempcontrol/lakeshore/lsci_ui.py +0 -387
- egse/tempcontrol/ni/__init__.py +0 -0
- egse/tempcontrol/spid/spid.py +0 -109
- egse/tempcontrol/spid/spid.yaml +0 -81
- egse/tempcontrol/spid/spid_controller.py +0 -279
- egse/tempcontrol/spid/spid_cs.py +0 -136
- egse/tempcontrol/spid/spid_protocol.py +0 -107
- egse/tempcontrol/spid/spid_ui.py +0 -723
- egse/tempcontrol/srs/__init__.py +0 -22
- egse/tempcontrol/srs/ptc10.py +0 -867
- egse/tempcontrol/srs/ptc10.yaml +0 -227
- egse/tempcontrol/srs/ptc10_cs.py +0 -128
- egse/tempcontrol/srs/ptc10_devif.py +0 -116
- egse/tempcontrol/srs/ptc10_protocol.py +0 -39
- egse/tempcontrol/srs/ptc10_ui.py +0 -906
- egse/ups/apc/apc.py +0 -236
- egse/ups/apc/apc.yaml +0 -45
- egse/ups/apc/apc_cs.py +0 -101
- egse/ups/apc/apc_protocol.py +0 -125
- egse/user.yaml +0 -7
- egse/vacuum/beaglebone/beaglebone.py +0 -149
- egse/vacuum/beaglebone/beaglebone.yaml +0 -44
- egse/vacuum/beaglebone/beaglebone_cs.py +0 -108
- egse/vacuum/beaglebone/beaglebone_devif.py +0 -159
- egse/vacuum/beaglebone/beaglebone_protocol.py +0 -192
- egse/vacuum/beaglebone/beaglebone_ui.py +0 -638
- egse/vacuum/instrutech/igm402.py +0 -91
- egse/vacuum/instrutech/igm402.yaml +0 -90
- egse/vacuum/instrutech/igm402_controller.py +0 -124
- egse/vacuum/instrutech/igm402_cs.py +0 -108
- egse/vacuum/instrutech/igm402_interface.py +0 -49
- egse/vacuum/instrutech/igm402_simulator.py +0 -36
- egse/vacuum/keller/kellerBus.py +0 -256
- egse/vacuum/keller/leo3.py +0 -100
- egse/vacuum/keller/leo3.yaml +0 -38
- egse/vacuum/keller/leo3_controller.py +0 -81
- egse/vacuum/keller/leo3_cs.py +0 -101
- egse/vacuum/keller/leo3_interface.py +0 -33
- egse/vacuum/mks/evision.py +0 -86
- egse/vacuum/mks/evision.yaml +0 -75
- egse/vacuum/mks/evision_cs.py +0 -101
- egse/vacuum/mks/evision_devif.py +0 -313
- egse/vacuum/mks/evision_interface.py +0 -60
- egse/vacuum/mks/evision_simulator.py +0 -24
- egse/vacuum/mks/evision_ui.py +0 -701
- egse/vacuum/pfeiffer/acp40.py +0 -87
- egse/vacuum/pfeiffer/acp40.yaml +0 -60
- egse/vacuum/pfeiffer/acp40_controller.py +0 -117
- egse/vacuum/pfeiffer/acp40_cs.py +0 -109
- egse/vacuum/pfeiffer/acp40_interface.py +0 -40
- egse/vacuum/pfeiffer/acp40_simulator.py +0 -37
- egse/vacuum/pfeiffer/tc400.py +0 -87
- egse/vacuum/pfeiffer/tc400.yaml +0 -83
- egse/vacuum/pfeiffer/tc400_controller.py +0 -136
- egse/vacuum/pfeiffer/tc400_cs.py +0 -109
- egse/vacuum/pfeiffer/tc400_interface.py +0 -70
- egse/vacuum/pfeiffer/tc400_simulator.py +0 -35
- egse/vacuum/pfeiffer/tpg261.py +0 -80
- egse/vacuum/pfeiffer/tpg261.yaml +0 -66
- egse/vacuum/pfeiffer/tpg261_controller.py +0 -150
- egse/vacuum/pfeiffer/tpg261_cs.py +0 -109
- egse/vacuum/pfeiffer/tpg261_interface.py +0 -59
- egse/vacuum/pfeiffer/tpg261_simulator.py +0 -23
- egse/version.py +0 -174
- egse/visitedpositions.py +0 -398
- egse/windowing.py +0 -213
- egse/zmq/__init__.py +0 -28
- egse/zmq/spw.py +0 -160
- egse/zmq_ser.py +0 -41
- scripts/alerts/cold.yaml +0 -278
- scripts/alerts/example_alerts.yaml +0 -54
- scripts/alerts/transition.yaml +0 -14
- scripts/alerts/warm.yaml +0 -49
- scripts/analyse_n_fee_hk_data.py +0 -52
- scripts/check_hdf5_files.py +0 -192
- scripts/check_register_sync.py +0 -47
- scripts/check_tcs_calib_coef.py +0 -90
- scripts/correct_ccd_cold_temperature_cal.py +0 -157
- scripts/create_hdf5_report.py +0 -293
- scripts/csl_model.py +0 -420
- scripts/csl_restore_setup.py +0 -229
- scripts/export-grafana-dashboards.py +0 -49
- scripts/fdir/cs_recovery/fdir_cs_recovery.py +0 -54
- scripts/fdir/fdir_table.yaml +0 -70
- scripts/fdir/fdir_test_recovery.py +0 -10
- scripts/fdir/hw_recovery/fdir_agilent_hw_recovery.py +0 -73
- scripts/fdir/limit_recovery/fdir_agilent_limit.py +0 -61
- scripts/fdir/limit_recovery/fdir_bb_heater_limit.py +0 -59
- scripts/fdir/limit_recovery/fdir_ensemble_limit.py +0 -33
- scripts/fdir/limit_recovery/fdir_pressure_limit_recovery.py +0 -71
- scripts/fix_csv.py +0 -80
- scripts/ias/correct_ccd_temp_cal_elfique.py +0 -43
- scripts/ias/correct_ccd_temp_cal_floreffe.py +0 -43
- scripts/ias/correct_trp_swap_achel.py +0 -199
- scripts/inta/correct_ccd_temp_cal_duvel.py +0 -43
- scripts/inta/correct_ccd_temp_cal_gueuze.py +0 -43
- scripts/n_fee_supply_voltage_calculation.py +0 -92
- scripts/playground.py +0 -30
- scripts/print_hdf5_hk_data.py +0 -68
- scripts/print_register_map.py +0 -43
- scripts/remove_lines_between_matches.py +0 -188
- scripts/sron/commanding/control_heaters.py +0 -44
- scripts/sron/commanding/pumpdown.py +0 -46
- scripts/sron/commanding/set_pid_setpoint.py +0 -19
- scripts/sron/commanding/shutdown_bbb_heaters.py +0 -10
- scripts/sron/commanding/shutdown_pumps.py +0 -33
- scripts/sron/correct_mgse_coordinates_brigand_chimay.py +0 -272
- scripts/sron/correct_trp_swap_brigand.py +0 -204
- scripts/sron/gimbal_conversions.py +0 -75
- scripts/sron/tm_gen/tm_gen_agilent.py +0 -37
- scripts/sron/tm_gen/tm_gen_heaters.py +0 -4
- scripts/sron/tm_gen/tm_gen_spid.py +0 -13
- scripts/update_operational_cgse.py +0 -268
- scripts/update_operational_cgse_old.py +0 -273
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
# Setup generated by:
|
|
2
|
-
#
|
|
3
|
-
# Setup.to_yaml_file(setup, filename='/Users/sara/work/Instrumentation/Plato/softwareDevelopment/plato-common-egse/src/egse/data/conf/SETUP_CSL_00010_210308_083016.yaml')
|
|
4
|
-
#
|
|
5
|
-
# Created on 2021-03-08T08:30:16.511+0000
|
|
6
|
-
|
|
7
|
-
Setup:
|
|
8
|
-
site_id: CSL
|
|
9
|
-
|
|
10
|
-
gse:
|
|
11
|
-
aeu:
|
|
12
|
-
crio:
|
|
13
|
-
device: class//egse.aeu.aeu.CRIOProxy
|
|
14
|
-
device_name: AEU cRIO
|
|
15
|
-
ID: National Instruments cRIO-9063
|
|
16
|
-
calibration:
|
|
17
|
-
n_cam_ocp: [0.268, 0.462, 0.476, 0.156, -0.559, 1.262]
|
|
18
|
-
n_cam_ovp: [36.06, 16.775, 6.95, 6.95, -6.924, 4.819]
|
|
19
|
-
n_cam_uvp: [34, 15.7, 6.5, 6.5, -6.5, 4.45]
|
|
20
|
-
f_cam_ocp: [0.269, 1.135, 0.821, 2.0, -0.287, 3.861]
|
|
21
|
-
f_cam_ovp: [34.145, 17.76, 8.43, 5.992, -8.316, 5.94]
|
|
22
|
-
f_cam_uvp: [30.8, 15.6, 7.3, 5.0, -7.1, 4.9]
|
|
23
|
-
psu1:
|
|
24
|
-
device: class//egse.aeu.aeu.PSUProxy
|
|
25
|
-
device_args: [1]
|
|
26
|
-
device_name: AEU PSU1
|
|
27
|
-
ID: KIKUSUI PMX35-1A
|
|
28
|
-
calibration:
|
|
29
|
-
n_cam_current: 0.35
|
|
30
|
-
n_cam_ocp: 0.35
|
|
31
|
-
n_cam_voltage: 34.9
|
|
32
|
-
n_cam_ovp: 37.86
|
|
33
|
-
f_cam_current: 0.35
|
|
34
|
-
f_cam_ocp: 0.35
|
|
35
|
-
f_cam_voltage: 31.8
|
|
36
|
-
f_cam_ovp: 36.94
|
|
37
|
-
psu2:
|
|
38
|
-
device: class//egse.aeu.aeu.PSUProxy
|
|
39
|
-
device_args: [2]
|
|
40
|
-
device_name: AEU PSU2
|
|
41
|
-
ID: KIKUSUI PMX18-2A
|
|
42
|
-
calibration:
|
|
43
|
-
n_cam_current: 0.59
|
|
44
|
-
n_cam_ocp: 0.59
|
|
45
|
-
n_cam_voltage: 16.35
|
|
46
|
-
n_cam_ovp: 17.575
|
|
47
|
-
f_cam_current: 1.41
|
|
48
|
-
f_cam_ocp: 1.41
|
|
49
|
-
f_cam_voltage: 16.2
|
|
50
|
-
f_cam_ovp: 19.8
|
|
51
|
-
psu3:
|
|
52
|
-
device: class//egse.aeu.aeu.PSUProxy
|
|
53
|
-
device_args: [3]
|
|
54
|
-
device_name: AEU PSU3
|
|
55
|
-
ID: KIKUSUI PMX18-2A
|
|
56
|
-
calibration:
|
|
57
|
-
n_cam_current: 0.6
|
|
58
|
-
n_cam_ocp: 0.6
|
|
59
|
-
n_cam_voltage: 6.75
|
|
60
|
-
n_cam_ovp: 7.3
|
|
61
|
-
f_cam_current: 1.028
|
|
62
|
-
f_cam_ocp: 1.028
|
|
63
|
-
f_cam_voltage: 7.9
|
|
64
|
-
f_cam_ovp: 8.88
|
|
65
|
-
psu4:
|
|
66
|
-
device: class//egse.aeu.aeu.PSUProxy
|
|
67
|
-
device_args: [4]
|
|
68
|
-
device_name: AEU PSU4
|
|
69
|
-
ID: KIKUSUI PMX18-2A
|
|
70
|
-
calibration:
|
|
71
|
-
n_cam_current: 0.22
|
|
72
|
-
n_cam_ocp: 0.22
|
|
73
|
-
n_cam_voltage: 6.75
|
|
74
|
-
n_cam_ovp: 7.3
|
|
75
|
-
f_cam_current: 2.1
|
|
76
|
-
f_cam_ocp: 2.1
|
|
77
|
-
f_cam_voltage: 5.75
|
|
78
|
-
f_cam_ovp: 6.29
|
|
79
|
-
psu5:
|
|
80
|
-
device: class//egse.aeu.aeu.PSUProxy
|
|
81
|
-
device_args: [5]
|
|
82
|
-
device_name: AEU PSU5
|
|
83
|
-
ID: KIKUSUI PMX18-2A
|
|
84
|
-
calibration:
|
|
85
|
-
n_cam_current: 0.7
|
|
86
|
-
n_cam_ocp: 0.7
|
|
87
|
-
n_cam_voltage: 6.75
|
|
88
|
-
n_cam_ovp: 7.27
|
|
89
|
-
f_cam_current: 0.303
|
|
90
|
-
f_cam_ocp: 0.303
|
|
91
|
-
f_cam_voltage: 7.7
|
|
92
|
-
f_cam_ovp: 8.76
|
|
93
|
-
psu6:
|
|
94
|
-
device: class//egse.aeu.aeu.PSUProxy
|
|
95
|
-
device_args: [6]
|
|
96
|
-
device_name: AEU PSU6
|
|
97
|
-
ID: KIKUSUI PMX18-5A
|
|
98
|
-
calibration:
|
|
99
|
-
n_cam_current: 1.59
|
|
100
|
-
n_cam_ocp: 1.59
|
|
101
|
-
n_cam_voltage: 4.63
|
|
102
|
-
n_cam_ovp: 5.09
|
|
103
|
-
f_cam_current: 4.67
|
|
104
|
-
f_cam_ocp: 4.67
|
|
105
|
-
f_cam_voltage: 5.65
|
|
106
|
-
f_cam_ovp: 6.34
|
|
107
|
-
awg1:
|
|
108
|
-
device: class//egse.aeu.aeu.AWGProxy
|
|
109
|
-
device_args: [1]
|
|
110
|
-
device_name: AEU AWG1
|
|
111
|
-
ID: THURLBY THANDAR TGF4162
|
|
112
|
-
calibration:
|
|
113
|
-
output_load: 50
|
|
114
|
-
amplitude: 2.7
|
|
115
|
-
dc_offset: 1.35
|
|
116
|
-
duty_cycle: 50
|
|
117
|
-
frequency: 50000000
|
|
118
|
-
awg2:
|
|
119
|
-
device: class//egse.aeu.aeu.AWGProxy
|
|
120
|
-
device_args: [2]
|
|
121
|
-
device_name: AEU AWG2
|
|
122
|
-
ID: THURLBY THANDAR TGF4042
|
|
123
|
-
calibration:
|
|
124
|
-
output_load: 50
|
|
125
|
-
amplitude: 2.7
|
|
126
|
-
dc_offset: 1.35
|
|
127
|
-
n_cam_sync_data:
|
|
128
|
-
A: SyncData//(A | 25.00 | ArbDataFile//(N_CCD_READ_25) | ArbDataFile//(SVM_SYNC_CCD_READ_25) | 0.006667)
|
|
129
|
-
B: SyncData//(B | 31.25 | ArbDataFile//(N_CCD_READ_31_25) | ArbDataFile//(SVM_SYNC_CCD_READ_31_25) | 0.016)
|
|
130
|
-
C: SyncData//(C | 37.50 | ArbDataFile//(N_CCD_READ_37_50) | ArbDataFile//(SVM_SYNC_CCD_READ_37_50) | 0.006667)
|
|
131
|
-
D: SyncData//(D | 43.75 | ArbDataFile//(N_CCD_READ_43_75) | ArbDataFile//(SVM_SYNC_CCD_READ_43_75) | 0.0114286)
|
|
132
|
-
E: SyncData//(E | 50.00 | ArbDataFile//(N_CCD_READ_50) | ArbDataFile//(SVM_SYNC_CCD_READ_50) | 0.006667)
|
|
133
|
-
f_cam_sync_data:
|
|
134
|
-
F: SyncData//(F | 2.5 | ArbDataFile//(F_CCD_READ) | ArbDataFile//(SVM_SYNC_F_CAM) | 0.006667)
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
history:
|
|
138
|
-
10: Introduce AEU
|
egse/decorators.py
DELETED
|
@@ -1,514 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
A collection of useful decorator functions.
|
|
3
|
-
"""
|
|
4
|
-
import cProfile
|
|
5
|
-
import functools
|
|
6
|
-
import logging
|
|
7
|
-
import pstats
|
|
8
|
-
import time
|
|
9
|
-
import types
|
|
10
|
-
import warnings
|
|
11
|
-
from typing import Callable
|
|
12
|
-
from typing import List
|
|
13
|
-
from typing import Optional
|
|
14
|
-
|
|
15
|
-
from egse.settings import Settings
|
|
16
|
-
from egse.system import get_caller_info
|
|
17
|
-
|
|
18
|
-
MODULE_LOGGER = logging.getLogger(__name__)
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
def static_vars(**kwargs):
|
|
22
|
-
"""
|
|
23
|
-
Define static variables in a function.
|
|
24
|
-
|
|
25
|
-
The static variable can be accessed with <function name>.<variable name> inside the function body.
|
|
26
|
-
|
|
27
|
-
@static_vars(count=0)
|
|
28
|
-
def special_count():
|
|
29
|
-
return special_count.count += 2
|
|
30
|
-
|
|
31
|
-
"""
|
|
32
|
-
def decorator(func):
|
|
33
|
-
for kw in kwargs:
|
|
34
|
-
setattr(func, kw, kwargs[kw])
|
|
35
|
-
return func
|
|
36
|
-
return decorator
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
def dynamic_interface(func):
|
|
40
|
-
"""Adds a static variable `__dynamic_interface` to a method.
|
|
41
|
-
|
|
42
|
-
The intended use of this function is as a decorator for functions in an interface class.
|
|
43
|
-
|
|
44
|
-
The static variable is currently used by the Proxy class to check if a method
|
|
45
|
-
is meant to be overridden dynamically. The idea behind this is to loosen the contract
|
|
46
|
-
of an abstract base class (ABC) into an interface. For an ABC, the abstract methods
|
|
47
|
-
must be implemented at construction/initialization. This is not possible for the Proxy
|
|
48
|
-
subclasses as they load their commands (i.e. methods) from the control server, and the
|
|
49
|
-
method will be added to the Proxy interface after loading. Nevertheless, we like the
|
|
50
|
-
interface already defined for auto-completion during development or interactive use.
|
|
51
|
-
|
|
52
|
-
When a Proxy subclass that implements an interface with methods decorated by
|
|
53
|
-
the `@dynamic_interface` does overwrite one or more of the decorated methods statically,
|
|
54
|
-
these methods will not be dynamically overwritten when loading the interface from the
|
|
55
|
-
control server. A warning will be logged instead.
|
|
56
|
-
"""
|
|
57
|
-
setattr(func, "__dynamic_interface", True)
|
|
58
|
-
return func
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
def query_command(func):
|
|
62
|
-
"""Adds a static variable `__query_command` to a method.
|
|
63
|
-
"""
|
|
64
|
-
|
|
65
|
-
setattr(func, "__query_command", True)
|
|
66
|
-
return func
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
def transaction_command(func):
|
|
70
|
-
"""Adds a static variable `__transaction_command` to a method.
|
|
71
|
-
"""
|
|
72
|
-
|
|
73
|
-
setattr(func, "__transaction_command", True)
|
|
74
|
-
return func
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
def read_command(func):
|
|
78
|
-
"""Adds a static variable `__read_command` to a method.
|
|
79
|
-
"""
|
|
80
|
-
|
|
81
|
-
setattr(func, "__read_command", True)
|
|
82
|
-
return func
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
def write_command(func):
|
|
86
|
-
"""Adds a static variable `__write_command` to a method.
|
|
87
|
-
"""
|
|
88
|
-
|
|
89
|
-
setattr(func, "__write_command", True)
|
|
90
|
-
return func
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
def timer(*, level: int = logging.INFO, precision: int = 4):
|
|
94
|
-
"""
|
|
95
|
-
Print the runtime of the decorated function.
|
|
96
|
-
|
|
97
|
-
Args:
|
|
98
|
-
level: the logging level for the time message [default=INFO]
|
|
99
|
-
precision: the number of decimals for the time [default=3 (ms)]
|
|
100
|
-
"""
|
|
101
|
-
|
|
102
|
-
def actual_decorator(func):
|
|
103
|
-
@functools.wraps(func)
|
|
104
|
-
def wrapper_timer(*args, **kwargs):
|
|
105
|
-
start_time = time.perf_counter()
|
|
106
|
-
value = func(*args, **kwargs)
|
|
107
|
-
end_time = time.perf_counter()
|
|
108
|
-
run_time = end_time - start_time
|
|
109
|
-
MODULE_LOGGER.log(level, f"Finished {func.__name__!r} in {run_time:.{precision}f} secs")
|
|
110
|
-
return value
|
|
111
|
-
|
|
112
|
-
return wrapper_timer
|
|
113
|
-
return actual_decorator
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
def time_it(count: int = 1000):
|
|
117
|
-
"""Print the runtime of the decorated function.
|
|
118
|
-
|
|
119
|
-
This is a simple replacement for the builtin ``timeit`` function. The purpose is to simplify
|
|
120
|
-
calling a function with some parameters.
|
|
121
|
-
|
|
122
|
-
The intended way to call this is as a function:
|
|
123
|
-
|
|
124
|
-
value = function(args)
|
|
125
|
-
|
|
126
|
-
value = time_it(10_000)(function)(args)
|
|
127
|
-
|
|
128
|
-
The `time_it` function can be called as a decorator in which case it will always call the
|
|
129
|
-
function `count` times which is probably not what you want.
|
|
130
|
-
|
|
131
|
-
Args:
|
|
132
|
-
count (int): the number of executions [default=1000].
|
|
133
|
-
|
|
134
|
-
Returns:
|
|
135
|
-
value: the return value of the last function execution.
|
|
136
|
-
|
|
137
|
-
See also:
|
|
138
|
-
the ``Timer`` context manager located in ``egse.system``.
|
|
139
|
-
|
|
140
|
-
Usage:
|
|
141
|
-
@time_it(count=10000)
|
|
142
|
-
def function(args):
|
|
143
|
-
pass
|
|
144
|
-
|
|
145
|
-
time_it(10000)(function)(args)
|
|
146
|
-
"""
|
|
147
|
-
|
|
148
|
-
def actual_decorator(func):
|
|
149
|
-
@functools.wraps(func)
|
|
150
|
-
def wrapper_timer(*args, **kwargs):
|
|
151
|
-
start_time = time.perf_counter()
|
|
152
|
-
for _ in range(count):
|
|
153
|
-
value = func(*args, **kwargs)
|
|
154
|
-
end_time = time.perf_counter()
|
|
155
|
-
run_time = end_time - start_time
|
|
156
|
-
logging.info(f"Finished {func.__name__!r} in {run_time/count:.4f} secs (total time: {run_time:.2f}s, "
|
|
157
|
-
f"count: {count})")
|
|
158
|
-
return value
|
|
159
|
-
|
|
160
|
-
return wrapper_timer
|
|
161
|
-
return actual_decorator
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
def debug(func):
|
|
165
|
-
"""Print the function signature and return value"""
|
|
166
|
-
|
|
167
|
-
@functools.wraps(func)
|
|
168
|
-
def wrapper_debug(*args, **kwargs):
|
|
169
|
-
if __debug__:
|
|
170
|
-
args_repr = [repr(a) for a in args]
|
|
171
|
-
kwargs_repr = [f"{k}={v!r}" for k, v in kwargs.items()]
|
|
172
|
-
signature = ", ".join(args_repr + kwargs_repr)
|
|
173
|
-
MODULE_LOGGER.debug(f"Calling {func.__name__}({signature})")
|
|
174
|
-
value = func(*args, **kwargs)
|
|
175
|
-
MODULE_LOGGER.debug(f"{func.__name__!r} returned {value!r}")
|
|
176
|
-
else:
|
|
177
|
-
value = func(*args, **kwargs)
|
|
178
|
-
return value
|
|
179
|
-
|
|
180
|
-
return wrapper_debug
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
def profile_func(output_file=None, sort_by='cumulative', lines_to_print=None, strip_dirs=False):
|
|
184
|
-
"""A time profiler decorator.
|
|
185
|
-
|
|
186
|
-
This code was taken from: https://gist.github.com/ekhoda/2de44cf60d29ce24ad29758ce8635b78
|
|
187
|
-
|
|
188
|
-
Inspired by and modified the profile decorator of Giampaolo Rodola:
|
|
189
|
-
http://code.activestate.com/recipes/577817-profile-decorator/
|
|
190
|
-
|
|
191
|
-
Args:
|
|
192
|
-
output_file: str or None. Default is None
|
|
193
|
-
Path of the output file. If only name of the file is given, it's
|
|
194
|
-
saved in the current directory.
|
|
195
|
-
If it's None, the name of the decorated function is used.
|
|
196
|
-
sort_by: str or SortKey enum or tuple/list of str/SortKey enum
|
|
197
|
-
Sorting criteria for the Stats object.
|
|
198
|
-
For a list of valid string and SortKey refer to:
|
|
199
|
-
https://docs.python.org/3/library/profile.html#pstats.Stats.sort_stats
|
|
200
|
-
lines_to_print: int or None
|
|
201
|
-
Number of lines to print. Default (None) is for all the lines.
|
|
202
|
-
This is useful in reducing the size of the printout, especially
|
|
203
|
-
that sorting by 'cumulative', the time consuming operations
|
|
204
|
-
are printed toward the top of the file.
|
|
205
|
-
strip_dirs: bool
|
|
206
|
-
Whether to remove the leading path info from file names.
|
|
207
|
-
This is also useful in reducing the size of the printout
|
|
208
|
-
|
|
209
|
-
Returns:
|
|
210
|
-
Profile of the decorated function
|
|
211
|
-
"""
|
|
212
|
-
|
|
213
|
-
def inner(func):
|
|
214
|
-
@functools.wraps(func)
|
|
215
|
-
def wrapper(*args, **kwargs):
|
|
216
|
-
_output_file = output_file or func.__name__ + '.prof'
|
|
217
|
-
pr = cProfile.Profile()
|
|
218
|
-
pr.enable()
|
|
219
|
-
retval = func(*args, **kwargs)
|
|
220
|
-
pr.disable()
|
|
221
|
-
pr.dump_stats(_output_file)
|
|
222
|
-
|
|
223
|
-
with open(_output_file, 'w') as f:
|
|
224
|
-
ps = pstats.Stats(pr, stream=f)
|
|
225
|
-
if strip_dirs:
|
|
226
|
-
ps.strip_dirs()
|
|
227
|
-
if isinstance(sort_by, (tuple, list)):
|
|
228
|
-
ps.sort_stats(*sort_by)
|
|
229
|
-
else:
|
|
230
|
-
ps.sort_stats(sort_by)
|
|
231
|
-
ps.print_stats(lines_to_print)
|
|
232
|
-
return retval
|
|
233
|
-
|
|
234
|
-
return wrapper
|
|
235
|
-
|
|
236
|
-
return inner
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
def profile(func):
|
|
240
|
-
"""Print the function signature and return value"""
|
|
241
|
-
if not hasattr(profile, "counter"):
|
|
242
|
-
profile.counter = 0
|
|
243
|
-
|
|
244
|
-
@functools.wraps(func)
|
|
245
|
-
def wrapper_profile(*args, **kwargs):
|
|
246
|
-
if Settings.profiling():
|
|
247
|
-
profile.counter += 1
|
|
248
|
-
args_repr = [repr(a) for a in args]
|
|
249
|
-
kwargs_repr = [f"{k}={v!r}" for k, v in kwargs.items()]
|
|
250
|
-
signature = ", ".join(args_repr + kwargs_repr)
|
|
251
|
-
caller = get_caller_info()
|
|
252
|
-
prefix = f"PROFILE[{profile.counter}]: "
|
|
253
|
-
MODULE_LOGGER.info(f"{prefix}Calling {func.__name__}({signature})")
|
|
254
|
-
MODULE_LOGGER.info(f"{' ' * len(prefix)}from {caller.filename} at {caller.lineno}.")
|
|
255
|
-
value = func(*args, **kwargs)
|
|
256
|
-
MODULE_LOGGER.info(f"{prefix}{func.__name__!r} returned {value!r}")
|
|
257
|
-
profile.counter -= 1
|
|
258
|
-
else:
|
|
259
|
-
value = func(*args, **kwargs)
|
|
260
|
-
return value
|
|
261
|
-
|
|
262
|
-
return wrapper_profile
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
class Profiler:
|
|
266
|
-
|
|
267
|
-
@classmethod
|
|
268
|
-
def count(cls):
|
|
269
|
-
return CountCalls
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
class CountCalls:
|
|
273
|
-
def __init__(self, func):
|
|
274
|
-
self.func = func
|
|
275
|
-
self.count = 0
|
|
276
|
-
|
|
277
|
-
def __call__(self, *args, **kwargs):
|
|
278
|
-
self.count += 1
|
|
279
|
-
return self.func(*args, **kwargs)
|
|
280
|
-
|
|
281
|
-
def get_count(self):
|
|
282
|
-
return self.count
|
|
283
|
-
|
|
284
|
-
# The __get__ method is here to make the decorator work with instance methods (methods inside a class)
|
|
285
|
-
# as well. It ensures that when the decorated method is called on an instance, the self argument is
|
|
286
|
-
# correctly passed to the method.
|
|
287
|
-
|
|
288
|
-
def __get__(self, instance, owner):
|
|
289
|
-
if instance is None:
|
|
290
|
-
return self
|
|
291
|
-
else:
|
|
292
|
-
return types.MethodType(self, instance)
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
def to_be_implemented(func):
|
|
296
|
-
"""Print a warning message that this function/method has to be implemented."""
|
|
297
|
-
|
|
298
|
-
@functools.wraps(func)
|
|
299
|
-
def wrapper_tbi(*args, **kwargs):
|
|
300
|
-
MODULE_LOGGER.warning(f"The function/method {func.__name__} is not yet implemented.")
|
|
301
|
-
return func(*args, **kwargs)
|
|
302
|
-
|
|
303
|
-
return wrapper_tbi
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
# Taken and adapted from https://github.com/QCoDeS/Qcodes
|
|
307
|
-
|
|
308
|
-
def deprecate(reason: Optional[str] = None,
|
|
309
|
-
alternative: Optional[str] = None) -> Callable:
|
|
310
|
-
"""
|
|
311
|
-
Deprecate a function or method. This will print a warning with the function name and where
|
|
312
|
-
it is called from. If the optional parameters `reason` and `alternative` are given, that
|
|
313
|
-
information will be printed with the warning.
|
|
314
|
-
|
|
315
|
-
:param reason: provide a short explanation why this function is deprecated. Generates 'because {reason}'
|
|
316
|
-
:param alternative: provides an alternative function/parameters to be used. Generates 'Use {alternative} as an alternative'
|
|
317
|
-
:return: the decorated function
|
|
318
|
-
"""
|
|
319
|
-
|
|
320
|
-
def actual_decorator(func: Callable) -> Callable:
|
|
321
|
-
@functools.wraps(func)
|
|
322
|
-
def decorated_func(*args, **kwargs):
|
|
323
|
-
caller = get_caller_info(2)
|
|
324
|
-
msg = f'The function \"{func.__name__}\" used at {caller.filename}:{caller.lineno} is deprecated'
|
|
325
|
-
if reason is not None:
|
|
326
|
-
msg += f', because {reason}'
|
|
327
|
-
if alternative is not None:
|
|
328
|
-
msg += f'. Use {alternative} as an alternative'
|
|
329
|
-
msg += '.'
|
|
330
|
-
warnings.warn(msg, DeprecationWarning, stacklevel=2)
|
|
331
|
-
return func(*args, **kwargs)
|
|
332
|
-
|
|
333
|
-
decorated_func.__doc__ = (
|
|
334
|
-
f"This function is DEPRECATED, because {reason}, use {alternative} as an alternative.\n"
|
|
335
|
-
)
|
|
336
|
-
return decorated_func
|
|
337
|
-
|
|
338
|
-
return actual_decorator
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
def singleton(cls):
|
|
342
|
-
"""
|
|
343
|
-
Use class as a singleton.
|
|
344
|
-
|
|
345
|
-
from: https://wiki.python.org/moin/PythonDecoratorLibrary#Singleton
|
|
346
|
-
"""
|
|
347
|
-
|
|
348
|
-
cls.__new_original__ = cls.__new__
|
|
349
|
-
|
|
350
|
-
@functools.wraps(cls.__new__)
|
|
351
|
-
def singleton_new(cls, *args, **kw):
|
|
352
|
-
it = cls.__dict__.get('__it__')
|
|
353
|
-
if it is not None:
|
|
354
|
-
return it
|
|
355
|
-
|
|
356
|
-
cls.__it__ = it = cls.__new_original__(cls, *args, **kw)
|
|
357
|
-
it.__init_original__(*args, **kw)
|
|
358
|
-
return it
|
|
359
|
-
|
|
360
|
-
cls.__new__ = singleton_new
|
|
361
|
-
cls.__init_original__ = cls.__init__
|
|
362
|
-
cls.__init__ = object.__init__
|
|
363
|
-
|
|
364
|
-
return cls
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
def borg(cls):
|
|
368
|
-
"""
|
|
369
|
-
Use the Borg pattern to make a class with a shared state between its instances and sub-classes.
|
|
370
|
-
|
|
371
|
-
from: http://code.activestate.com/recipes/66531-singleton-we-dont-need-no-stinkin-singleton-the-bo/
|
|
372
|
-
"""
|
|
373
|
-
|
|
374
|
-
cls._shared_state = {}
|
|
375
|
-
orig_init = cls.__init__
|
|
376
|
-
|
|
377
|
-
def new_init(self, *args, **kwargs):
|
|
378
|
-
self.__dict__ = cls._shared_state
|
|
379
|
-
orig_init(self, *args, **kwargs)
|
|
380
|
-
|
|
381
|
-
cls.__init__ = new_init
|
|
382
|
-
|
|
383
|
-
return cls
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
class classproperty:
|
|
387
|
-
"""Defines a read-only class property.
|
|
388
|
-
|
|
389
|
-
Usage:
|
|
390
|
-
|
|
391
|
-
>>> class Message:
|
|
392
|
-
... def __init__(self, msg):
|
|
393
|
-
... self._msg = msg
|
|
394
|
-
...
|
|
395
|
-
... @classproperty
|
|
396
|
-
... def name(cls):
|
|
397
|
-
... return cls.__name__
|
|
398
|
-
|
|
399
|
-
>>> msg = Message("a simple doctest")
|
|
400
|
-
>>> assert "Message" == msg.name
|
|
401
|
-
|
|
402
|
-
"""
|
|
403
|
-
def __init__(self, func):
|
|
404
|
-
self.func = func
|
|
405
|
-
|
|
406
|
-
def __get__(self, instance, owner):
|
|
407
|
-
return self.func(owner)
|
|
408
|
-
|
|
409
|
-
def __set__(self, instance, value):
|
|
410
|
-
raise AttributeError(
|
|
411
|
-
f"Cannot change class property '{self.func.__name__}' for class '{instance.__class__.__name__}'.")
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
class Nothing:
|
|
415
|
-
"""Just to get a nice repr for Nothing. It is kind of a Null object..."""
|
|
416
|
-
def __repr__(self):
|
|
417
|
-
return "<Nothing>"
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
def spy_on_attr_change(obj: object, obj_name: str = None) -> None:
|
|
421
|
-
"""
|
|
422
|
-
Tweak an object to show attributes changing. The changes are reported as WARNING log messages
|
|
423
|
-
in the `egse.spy` logger.
|
|
424
|
-
|
|
425
|
-
Note this is not a decorator, but a function that changes the class of an object.
|
|
426
|
-
|
|
427
|
-
Note that this function is a debugging aid and should not be used in production code!
|
|
428
|
-
|
|
429
|
-
Args:
|
|
430
|
-
obj (object): any object that you want to monitor
|
|
431
|
-
obj_name (str): the variable name of the object that was given in the code, if None than
|
|
432
|
-
the class name will be printed.
|
|
433
|
-
|
|
434
|
-
Examples:
|
|
435
|
-
|
|
436
|
-
>>> class X:
|
|
437
|
-
... pass
|
|
438
|
-
>>> x = X()
|
|
439
|
-
>>> spy_on_attr_change(x, obj_name="x")
|
|
440
|
-
>>> x.a = 5
|
|
441
|
-
|
|
442
|
-
From: https://nedbatchelder.com/blog/202206/adding_a_dunder_to_an_object.html
|
|
443
|
-
"""
|
|
444
|
-
logger = logging.getLogger("egse.spy")
|
|
445
|
-
|
|
446
|
-
class Wrapper(obj.__class__):
|
|
447
|
-
|
|
448
|
-
def __setattr__(self, name, value):
|
|
449
|
-
old = getattr(self, name, Nothing())
|
|
450
|
-
logger.warning(
|
|
451
|
-
f"Spy: in {obj_name or obj.__class__.__name__} -> {name}: {old!r} -> {value!r}")
|
|
452
|
-
return super().__setattr__(name, value)
|
|
453
|
-
|
|
454
|
-
class_name = obj.__class__.__name__
|
|
455
|
-
obj.__class__ = Wrapper
|
|
456
|
-
obj.__class__.__name__ = class_name
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
def retry(times: int = 3, wait: float = 10.0, exceptions: List = None):
|
|
460
|
-
"""
|
|
461
|
-
Decorator that retries a function multiple times with a delay between attempts.
|
|
462
|
-
|
|
463
|
-
This decorator can be applied to a function to handle specified exceptions by
|
|
464
|
-
retrying the function execution. It will make up to 'times' attempts with a
|
|
465
|
-
waiting period of 'wait' seconds between each attempt. Any exception from the
|
|
466
|
-
list provided in the `exceptions` argument will be ignored for the given `times`.
|
|
467
|
-
|
|
468
|
-
If after times attempts still an exception is raised, it will be passed through the
|
|
469
|
-
calling function, otherwise the functions return value will be returned.
|
|
470
|
-
|
|
471
|
-
Args:
|
|
472
|
-
times (int, optional): The number of retry attempts. Defaults to 3.
|
|
473
|
-
wait (float, optional): The waiting period between retries in seconds. Defaults to 10.0.
|
|
474
|
-
exceptions (List[Exception] or None, optional): List of exception types to catch and retry.
|
|
475
|
-
Defaults to None, which catches all exceptions.
|
|
476
|
-
|
|
477
|
-
Returns:
|
|
478
|
-
Callable: The decorated function.
|
|
479
|
-
|
|
480
|
-
Example:
|
|
481
|
-
Apply the retry decorator to a function with specific retry settings:
|
|
482
|
-
|
|
483
|
-
@retry(times=5, wait=15.0, exceptions=[ConnectionError, TimeoutError])
|
|
484
|
-
def my_function():
|
|
485
|
-
# Function logic here
|
|
486
|
-
|
|
487
|
-
Note:
|
|
488
|
-
The decorator catches specified exceptions and retries the function, logging
|
|
489
|
-
information about each retry attempt.
|
|
490
|
-
|
|
491
|
-
"""
|
|
492
|
-
|
|
493
|
-
exceptions = [Exception] if exceptions is None else exceptions
|
|
494
|
-
|
|
495
|
-
def actual_decorator(func: Callable) -> Callable:
|
|
496
|
-
|
|
497
|
-
@functools.wraps(func)
|
|
498
|
-
def decorated_func(*args, **kwargs):
|
|
499
|
-
previous_exception = None
|
|
500
|
-
for n in range(times):
|
|
501
|
-
try:
|
|
502
|
-
return func(*args, **kwargs)
|
|
503
|
-
except tuple(exceptions) as exc:
|
|
504
|
-
previous_exception = exc
|
|
505
|
-
if n < times:
|
|
506
|
-
MODULE_LOGGER.info(
|
|
507
|
-
f"Retry {n + 1}: {func.__name__} will be executing again in {wait}s. "
|
|
508
|
-
f"Received a {previous_exception!r}."
|
|
509
|
-
)
|
|
510
|
-
time.sleep(wait)
|
|
511
|
-
raise previous_exception
|
|
512
|
-
return decorated_func
|
|
513
|
-
|
|
514
|
-
return actual_decorator
|