cgse 2023.38.0__py3-none-any.whl → 2024.1.4__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.
Files changed (653) hide show
  1. README.md +27 -0
  2. bump.py +85 -0
  3. cgse-2024.1.4.dist-info/METADATA +38 -0
  4. cgse-2024.1.4.dist-info/RECORD +5 -0
  5. {cgse-2023.38.0.dist-info → cgse-2024.1.4.dist-info}/WHEEL +1 -2
  6. cgse-2023.38.0.dist-info/COPYING +0 -674
  7. cgse-2023.38.0.dist-info/COPYING.LESSER +0 -165
  8. cgse-2023.38.0.dist-info/METADATA +0 -144
  9. cgse-2023.38.0.dist-info/RECORD +0 -649
  10. cgse-2023.38.0.dist-info/entry_points.txt +0 -75
  11. cgse-2023.38.0.dist-info/top_level.txt +0 -2
  12. egse/__init__.py +0 -12
  13. egse/__main__.py +0 -32
  14. egse/aeu/aeu.py +0 -5235
  15. egse/aeu/aeu_awg.yaml +0 -265
  16. egse/aeu/aeu_crio.yaml +0 -273
  17. egse/aeu/aeu_cs.py +0 -626
  18. egse/aeu/aeu_devif.py +0 -321
  19. egse/aeu/aeu_main_ui.py +0 -912
  20. egse/aeu/aeu_metrics.py +0 -131
  21. egse/aeu/aeu_protocol.py +0 -463
  22. egse/aeu/aeu_psu.yaml +0 -204
  23. egse/aeu/aeu_ui.py +0 -873
  24. egse/aeu/arbdata/FccdRead.arb +0 -2
  25. egse/aeu/arbdata/FccdRead_min_points.arb +0 -2
  26. egse/aeu/arbdata/HeaterSync_FccdRead.arb +0 -2
  27. egse/aeu/arbdata/HeaterSync_ccdRead25.arb +0 -2
  28. egse/aeu/arbdata/HeaterSync_ccdRead31_25.arb +0 -2
  29. egse/aeu/arbdata/HeaterSync_ccdRead37_50.arb +0 -2
  30. egse/aeu/arbdata/HeaterSync_ccdRead43_75.arb +0 -2
  31. egse/aeu/arbdata/HeaterSync_ccdRead50.arb +0 -2
  32. egse/aeu/arbdata/Heater_FccdRead_min_points.arb +0 -2
  33. egse/aeu/arbdata/ccdRead25.arb +0 -2
  34. egse/aeu/arbdata/ccdRead25_150ms.arb +0 -2
  35. egse/aeu/arbdata/ccdRead31_25.arb +0 -2
  36. egse/aeu/arbdata/ccdRead31_25_150ms.arb +0 -2
  37. egse/aeu/arbdata/ccdRead37_50.arb +0 -2
  38. egse/aeu/arbdata/ccdRead37_50_150ms.arb +0 -2
  39. egse/aeu/arbdata/ccdRead43_75.arb +0 -2
  40. egse/aeu/arbdata/ccdRead43_75_150ms.arb +0 -2
  41. egse/aeu/arbdata/ccdRead50.arb +0 -2
  42. egse/aeu/arbdata/ccdRead50_150ms.arb +0 -2
  43. egse/alert/__init__.py +0 -1049
  44. egse/alert/alertman.yaml +0 -37
  45. egse/alert/alertman_cs.py +0 -234
  46. egse/alert/alertman_ui.py +0 -603
  47. egse/alert/gsm/beaglebone.py +0 -138
  48. egse/alert/gsm/beaglebone.yaml +0 -51
  49. egse/alert/gsm/beaglebone_cs.py +0 -108
  50. egse/alert/gsm/beaglebone_devif.py +0 -130
  51. egse/alert/gsm/beaglebone_protocol.py +0 -48
  52. egse/bits.py +0 -318
  53. egse/camera.py +0 -44
  54. egse/collimator/__init__.py +0 -0
  55. egse/collimator/fcul/__init__.py +0 -0
  56. egse/collimator/fcul/ogse.py +0 -1077
  57. egse/collimator/fcul/ogse.yaml +0 -14
  58. egse/collimator/fcul/ogse_cs.py +0 -154
  59. egse/collimator/fcul/ogse_devif.py +0 -358
  60. egse/collimator/fcul/ogse_protocol.py +0 -129
  61. egse/collimator/fcul/ogse_sim.py +0 -431
  62. egse/collimator/fcul/ogse_ui.py +0 -1108
  63. egse/command.py +0 -699
  64. egse/config.py +0 -410
  65. egse/confman/__init__.py +0 -1015
  66. egse/confman/confman.yaml +0 -67
  67. egse/confman/confman_cs.py +0 -239
  68. egse/confman/confman_ui.py +0 -381
  69. egse/confman/setup_ui.py +0 -565
  70. egse/control.py +0 -442
  71. egse/coordinates/__init__.py +0 -531
  72. egse/coordinates/avoidance.py +0 -103
  73. egse/coordinates/cslmodel.py +0 -127
  74. egse/coordinates/laser_tracker_to_dict.py +0 -120
  75. egse/coordinates/point.py +0 -707
  76. egse/coordinates/pyplot.py +0 -195
  77. egse/coordinates/referenceFrame.py +0 -1279
  78. egse/coordinates/refmodel.py +0 -737
  79. egse/coordinates/rotationMatrix.py +0 -85
  80. egse/coordinates/transform3d_addon.py +0 -419
  81. egse/csl/__init__.py +0 -50
  82. egse/csl/commanding.py +0 -78
  83. egse/csl/icons/hexapod-connected-selected.svg +0 -30
  84. egse/csl/icons/hexapod-connected.svg +0 -30
  85. egse/csl/icons/hexapod-homing-selected.svg +0 -68
  86. egse/csl/icons/hexapod-homing.svg +0 -68
  87. egse/csl/icons/hexapod-retract-selected.svg +0 -56
  88. egse/csl/icons/hexapod-retract.svg +0 -51
  89. egse/csl/icons/hexapod-zero-selected.svg +0 -56
  90. egse/csl/icons/hexapod-zero.svg +0 -56
  91. egse/csl/icons/logo-puna.svg +0 -92
  92. egse/csl/icons/stop.svg +0 -1
  93. egse/csl/initialisation.py +0 -102
  94. egse/csl/mech_pos_settings.yaml +0 -18
  95. egse/das.py +0 -1247
  96. egse/das.yaml +0 -7
  97. egse/data/conf/SETUP_CSL_00000_170620_150000.yaml +0 -5
  98. egse/data/conf/SETUP_CSL_00001_170620_151010.yaml +0 -69
  99. egse/data/conf/SETUP_CSL_00002_170620_151020.yaml +0 -69
  100. egse/data/conf/SETUP_CSL_00003_170620_151030.yaml +0 -69
  101. egse/data/conf/SETUP_CSL_00004_170620_151040.yaml +0 -69
  102. egse/data/conf/SETUP_CSL_00005_170620_151050.yaml +0 -69
  103. egse/data/conf/SETUP_CSL_00006_170620_151060.yaml +0 -69
  104. egse/data/conf/SETUP_CSL_00007_170620_151070.yaml +0 -69
  105. egse/data/conf/SETUP_CSL_00008_170620_151080.yaml +0 -75
  106. egse/data/conf/SETUP_CSL_00010_210308_083016.yaml +0 -138
  107. egse/data/conf/SETUP_INTA_00000_170620_150000.yaml +0 -4
  108. egse/data/conf/SETUP_SRON_00000_170620_150000.yaml +0 -4
  109. egse/decorators.py +0 -415
  110. egse/device.py +0 -269
  111. egse/dpu/__init__.py +0 -2681
  112. egse/dpu/ccd_ui.py +0 -508
  113. egse/dpu/dpu.py +0 -786
  114. egse/dpu/dpu.yaml +0 -153
  115. egse/dpu/dpu_cs.py +0 -272
  116. egse/dpu/dpu_ui.py +0 -668
  117. egse/dpu/fitsgen.py +0 -2077
  118. egse/dpu/fitsgen_test.py +0 -752
  119. egse/dpu/fitsgen_ui.py +0 -399
  120. egse/dpu/hdf5_model.py +0 -332
  121. egse/dpu/hdf5_ui.py +0 -277
  122. egse/dpu/hdf5_viewer.py +0 -506
  123. egse/dpu/hk_ui.py +0 -468
  124. egse/dpu_commands.py +0 -81
  125. egse/dsi/constants.py +0 -220
  126. egse/dsi/esl.py +0 -870
  127. egse/dsi/rmap.py +0 -1042
  128. egse/dsi/rmapci.py +0 -37
  129. egse/dsi/spw.py +0 -154
  130. egse/dsi/spw_state.py +0 -29
  131. egse/dummy.py +0 -258
  132. egse/dyndummy.py +0 -179
  133. egse/env.py +0 -278
  134. egse/exceptions.py +0 -88
  135. egse/fdir/__init__.py +0 -28
  136. egse/fdir/fdir_manager.py +0 -85
  137. egse/fdir/fdir_manager.yaml +0 -51
  138. egse/fdir/fdir_manager_controller.py +0 -228
  139. egse/fdir/fdir_manager_cs.py +0 -164
  140. egse/fdir/fdir_manager_interface.py +0 -25
  141. egse/fdir/fdir_remote.py +0 -73
  142. egse/fdir/fdir_remote.yaml +0 -37
  143. egse/fdir/fdir_remote_controller.py +0 -50
  144. egse/fdir/fdir_remote_cs.py +0 -97
  145. egse/fdir/fdir_remote_interface.py +0 -14
  146. egse/fdir/fdir_remote_popup.py +0 -31
  147. egse/fee/__init__.py +0 -114
  148. egse/fee/f_fee_register.yaml +0 -43
  149. egse/fee/fee.py +0 -631
  150. egse/fee/feesim.py +0 -750
  151. egse/fee/n_fee_hk.py +0 -761
  152. egse/fee/nfee.py +0 -187
  153. egse/filterwheel/__init__.py +0 -4
  154. egse/filterwheel/eksma/__init__.py +0 -24
  155. egse/filterwheel/eksma/fw8smc4.py +0 -661
  156. egse/filterwheel/eksma/fw8smc4.yaml +0 -121
  157. egse/filterwheel/eksma/fw8smc4_cs.py +0 -144
  158. egse/filterwheel/eksma/fw8smc4_devif.py +0 -473
  159. egse/filterwheel/eksma/fw8smc4_protocol.py +0 -81
  160. egse/filterwheel/eksma/fw8smc4_ui.py +0 -940
  161. egse/filterwheel/eksma/fw8smc5.py +0 -111
  162. egse/filterwheel/eksma/fw8smc5.yaml +0 -105
  163. egse/filterwheel/eksma/fw8smc5_controller.py +0 -307
  164. egse/filterwheel/eksma/fw8smc5_cs.py +0 -141
  165. egse/filterwheel/eksma/fw8smc5_interface.py +0 -65
  166. egse/filterwheel/eksma/fw8smc5_simulator.py +0 -29
  167. egse/filterwheel/eksma/fw8smc5_ui.py +0 -1068
  168. egse/filterwheel/eksma/testpythonfw.py +0 -215
  169. egse/fov/__init__.py +0 -65
  170. egse/fov/fov_hk.py +0 -712
  171. egse/fov/fov_ui.py +0 -861
  172. egse/fov/fov_ui_controller.py +0 -140
  173. egse/fov/fov_ui_model.py +0 -200
  174. egse/fov/fov_ui_view.py +0 -345
  175. egse/gimbal/__init__.py +0 -32
  176. egse/gimbal/symetrie/__init__.py +0 -26
  177. egse/gimbal/symetrie/alpha.py +0 -586
  178. egse/gimbal/symetrie/generic_gimbal_ui.py +0 -1521
  179. egse/gimbal/symetrie/gimbal.py +0 -877
  180. egse/gimbal/symetrie/gimbal.yaml +0 -168
  181. egse/gimbal/symetrie/gimbal_cs.py +0 -183
  182. egse/gimbal/symetrie/gimbal_protocol.py +0 -135
  183. egse/gimbal/symetrie/gimbal_ui.py +0 -361
  184. egse/gimbal/symetrie/pmac.py +0 -1006
  185. egse/gimbal/symetrie/pmac_regex.py +0 -83
  186. egse/graph.py +0 -132
  187. egse/gui/__init__.py +0 -47
  188. egse/gui/buttons.py +0 -378
  189. egse/gui/focalplane.py +0 -1281
  190. egse/gui/formatter.py +0 -10
  191. egse/gui/led.py +0 -162
  192. egse/gui/limitswitch.py +0 -143
  193. egse/gui/mechanisms.py +0 -588
  194. egse/gui/states.py +0 -148
  195. egse/gui/stripchart.py +0 -729
  196. egse/gui/switch.py +0 -112
  197. egse/h5.py +0 -274
  198. egse/help/__init__.py +0 -0
  199. egse/help/help_ui.py +0 -126
  200. egse/hexapod/__init__.py +0 -32
  201. egse/hexapod/symetrie/__init__.py +0 -138
  202. egse/hexapod/symetrie/alpha.py +0 -874
  203. egse/hexapod/symetrie/dynalpha.py +0 -1387
  204. egse/hexapod/symetrie/hexapod_ui.py +0 -1516
  205. egse/hexapod/symetrie/pmac.py +0 -1010
  206. egse/hexapod/symetrie/pmac_regex.py +0 -83
  207. egse/hexapod/symetrie/puna.py +0 -1167
  208. egse/hexapod/symetrie/puna.yaml +0 -193
  209. egse/hexapod/symetrie/puna_cs.py +0 -196
  210. egse/hexapod/symetrie/puna_protocol.py +0 -131
  211. egse/hexapod/symetrie/puna_ui.py +0 -434
  212. egse/hexapod/symetrie/punaplus.py +0 -107
  213. egse/hexapod/symetrie/zonda.py +0 -872
  214. egse/hexapod/symetrie/zonda.yaml +0 -337
  215. egse/hexapod/symetrie/zonda_cs.py +0 -172
  216. egse/hexapod/symetrie/zonda_devif.py +0 -415
  217. egse/hexapod/symetrie/zonda_protocol.py +0 -119
  218. egse/hexapod/symetrie/zonda_ui.py +0 -449
  219. egse/hk.py +0 -765
  220. egse/icons/aeu-cs-start.svg +0 -117
  221. egse/icons/aeu-cs-stop.svg +0 -118
  222. egse/icons/aeu-cs.svg +0 -107
  223. egse/icons/aeu_cs-started.svg +0 -112
  224. egse/icons/aeu_cs-stopped.svg +0 -112
  225. egse/icons/aeu_cs.svg +0 -55
  226. egse/icons/alert.svg +0 -1
  227. egse/icons/arrow-double-left.png +0 -0
  228. egse/icons/arrow-double-right.png +0 -0
  229. egse/icons/arrow-up.svg +0 -11
  230. egse/icons/backward.svg +0 -1
  231. egse/icons/busy.svg +0 -1
  232. egse/icons/cleaning.svg +0 -115
  233. egse/icons/color-scheme.svg +0 -1
  234. egse/icons/cs-connected-alert.svg +0 -91
  235. egse/icons/cs-connected-disabled.svg +0 -43
  236. egse/icons/cs-connected.svg +0 -89
  237. egse/icons/cs-not-connected.svg +0 -44
  238. egse/icons/double-left-arrow.svg +0 -1
  239. egse/icons/double-right-arrow.svg +0 -1
  240. egse/icons/erase-disabled.svg +0 -19
  241. egse/icons/erase.svg +0 -59
  242. egse/icons/fitsgen-start.svg +0 -47
  243. egse/icons/fitsgen-stop.svg +0 -48
  244. egse/icons/fitsgen.svg +0 -1
  245. egse/icons/forward.svg +0 -1
  246. egse/icons/fov-hk-start.svg +0 -33
  247. egse/icons/fov-hk-stop.svg +0 -37
  248. egse/icons/fov-hk.svg +0 -1
  249. egse/icons/front-desk.svg +0 -1
  250. egse/icons/home-actioned.svg +0 -15
  251. egse/icons/home-disabled.svg +0 -15
  252. egse/icons/home.svg +0 -13
  253. egse/icons/info.svg +0 -1
  254. egse/icons/invalid.png +0 -0
  255. egse/icons/led-green.svg +0 -20
  256. egse/icons/led-grey.svg +0 -20
  257. egse/icons/led-orange.svg +0 -20
  258. egse/icons/led-red.svg +0 -20
  259. egse/icons/led-square-green.svg +0 -134
  260. egse/icons/led-square-grey.svg +0 -134
  261. egse/icons/led-square-orange.svg +0 -134
  262. egse/icons/led-square-red.svg +0 -134
  263. egse/icons/limit-switch-all-green.svg +0 -115
  264. egse/icons/limit-switch-all-red.svg +0 -117
  265. egse/icons/limit-switch-el+.svg +0 -116
  266. egse/icons/limit-switch-el-.svg +0 -117
  267. egse/icons/location-marker.svg +0 -1
  268. egse/icons/logo-dpu.svg +0 -48
  269. egse/icons/logo-gimbal.svg +0 -112
  270. egse/icons/logo-huber.svg +0 -23
  271. egse/icons/logo-ogse.svg +0 -31
  272. egse/icons/logo-puna.svg +0 -92
  273. egse/icons/logo-tcs.svg +0 -29
  274. egse/icons/logo-zonda.svg +0 -66
  275. egse/icons/maximize.svg +0 -1
  276. egse/icons/meter.svg +0 -1
  277. egse/icons/more.svg +0 -45
  278. egse/icons/n-fee-hk-start.svg +0 -24
  279. egse/icons/n-fee-hk-stop.svg +0 -25
  280. egse/icons/n-fee-hk.svg +0 -83
  281. egse/icons/observing-off.svg +0 -46
  282. egse/icons/observing-on.svg +0 -46
  283. egse/icons/open-document-hdf5.png +0 -0
  284. egse/icons/open-document-hdf5.svg +0 -21
  285. egse/icons/ops-mode.svg +0 -1
  286. egse/icons/play-green.svg +0 -17
  287. egse/icons/plugged-disabled.svg +0 -27
  288. egse/icons/plugged.svg +0 -21
  289. egse/icons/pm_ui.svg +0 -1
  290. egse/icons/power-button-green.svg +0 -27
  291. egse/icons/power-button-red.svg +0 -27
  292. egse/icons/power-button.svg +0 -27
  293. egse/icons/radar.svg +0 -1
  294. egse/icons/radioactive.svg +0 -2
  295. egse/icons/reload.svg +0 -1
  296. egse/icons/remote-control-off.svg +0 -28
  297. egse/icons/remote-control-on.svg +0 -28
  298. egse/icons/repeat-blue.svg +0 -15
  299. egse/icons/repeat.svg +0 -1
  300. egse/icons/settings.svg +0 -1
  301. egse/icons/shrink.svg +0 -1
  302. egse/icons/shutter.svg +0 -1
  303. egse/icons/sign-off.svg +0 -1
  304. egse/icons/sign-on.svg +0 -1
  305. egse/icons/sim-mode.svg +0 -1
  306. egse/icons/small-buttons-go.svg +0 -20
  307. egse/icons/small-buttons-minus.svg +0 -51
  308. egse/icons/small-buttons-plus.svg +0 -51
  309. egse/icons/sponge.svg +0 -220
  310. egse/icons/start-button-disabled.svg +0 -84
  311. egse/icons/start-button.svg +0 -50
  312. egse/icons/stop-button-disabled.svg +0 -84
  313. egse/icons/stop-button.svg +0 -50
  314. egse/icons/stop-red.svg +0 -17
  315. egse/icons/stop.svg +0 -1
  316. egse/icons/switch-disabled-square.svg +0 -87
  317. egse/icons/switch-disabled.svg +0 -15
  318. egse/icons/switch-off-square.svg +0 -87
  319. egse/icons/switch-off.svg +0 -72
  320. egse/icons/switch-on-square.svg +0 -87
  321. egse/icons/switch-on.svg +0 -61
  322. egse/icons/temperature-control.svg +0 -44
  323. egse/icons/th_ui_logo.svg +0 -1
  324. egse/icons/unplugged.svg +0 -23
  325. egse/icons/unvalid.png +0 -0
  326. egse/icons/user-interface.svg +0 -1
  327. egse/icons/vacuum.svg +0 -1
  328. egse/icons/valid.png +0 -0
  329. egse/icons/zoom-to-pixel-dark.svg +0 -64
  330. egse/icons/zoom-to-pixel-white.svg +0 -36
  331. egse/images/big-rotation-stage.png +0 -0
  332. egse/images/connected-100.png +0 -0
  333. egse/images/cross.svg +0 -6
  334. egse/images/disconnected-100.png +0 -0
  335. egse/images/gui-icon.png +0 -0
  336. egse/images/home.svg +0 -6
  337. egse/images/info-icon.png +0 -0
  338. egse/images/led-black.svg +0 -89
  339. egse/images/led-green.svg +0 -85
  340. egse/images/led-orange.svg +0 -85
  341. egse/images/led-red.svg +0 -85
  342. egse/images/load-icon.png +0 -0
  343. egse/images/load-setup.png +0 -0
  344. egse/images/load.png +0 -0
  345. egse/images/pause.png +0 -0
  346. egse/images/play-button.svg +0 -8
  347. egse/images/play.png +0 -0
  348. egse/images/process-status.png +0 -0
  349. egse/images/restart.png +0 -0
  350. egse/images/search.png +0 -0
  351. egse/images/sma.png +0 -0
  352. egse/images/start.png +0 -0
  353. egse/images/stop-button.svg +0 -8
  354. egse/images/stop.png +0 -0
  355. egse/images/switch-off.svg +0 -48
  356. egse/images/switch-on.svg +0 -48
  357. egse/images/undo.png +0 -0
  358. egse/images/update-button.svg +0 -11
  359. egse/imageviewer/exposureselection.py +0 -475
  360. egse/imageviewer/imageviewer.py +0 -198
  361. egse/imageviewer/matchfocalplane.py +0 -179
  362. egse/imageviewer/subfieldposition.py +0 -133
  363. egse/lampcontrol/__init__.py +0 -4
  364. egse/lampcontrol/beaglebone/beaglebone.py +0 -178
  365. egse/lampcontrol/beaglebone/beaglebone.yaml +0 -62
  366. egse/lampcontrol/beaglebone/beaglebone_cs.py +0 -106
  367. egse/lampcontrol/beaglebone/beaglebone_devif.py +0 -150
  368. egse/lampcontrol/beaglebone/beaglebone_protocol.py +0 -73
  369. egse/lampcontrol/energetiq/__init__.py +0 -22
  370. egse/lampcontrol/energetiq/eq99.yaml +0 -98
  371. egse/lampcontrol/energetiq/lampEQ99.py +0 -283
  372. egse/lampcontrol/energetiq/lampEQ99_cs.py +0 -128
  373. egse/lampcontrol/energetiq/lampEQ99_devif.py +0 -158
  374. egse/lampcontrol/energetiq/lampEQ99_encode_decode_errors.py +0 -73
  375. egse/lampcontrol/energetiq/lampEQ99_protocol.py +0 -69
  376. egse/lampcontrol/energetiq/lampEQ99_ui.py +0 -465
  377. egse/lib/CentOS-7/EtherSpaceLink_v34_86.dylib +0 -0
  378. egse/lib/CentOS-8/ESL-RMAP_v34_86.dylib +0 -0
  379. egse/lib/CentOS-8/EtherSpaceLink_v34_86.dylib +0 -0
  380. egse/lib/Debian/ESL-RMAP_v34_86.dylib +0 -0
  381. egse/lib/Debian/EtherSpaceLink_v34_86.dylib +0 -0
  382. egse/lib/Debian/libetherspacelink_v35_21.dylib +0 -0
  383. egse/lib/Linux/ESL-RMAP_v34_86.dylib +0 -0
  384. egse/lib/Linux/EtherSpaceLink_v34_86.dylib +0 -0
  385. egse/lib/Ubuntu-20/ESL-RMAP_v34_86.dylib +0 -0
  386. egse/lib/Ubuntu-20/EtherSpaceLink_v34_86.dylib +0 -0
  387. egse/lib/gssw/python3-gssw_2.2.3+31f63c9f-1_all.deb +0 -0
  388. egse/lib/macOS/ESL-RMAP_v34_86.dylib +0 -0
  389. egse/lib/macOS/EtherSpaceLink_v34_86.dylib +0 -0
  390. egse/lib/ximc/__pycache__/pyximc.cpython-38 2.pyc +0 -0
  391. egse/lib/ximc/__pycache__/pyximc.cpython-38.pyc +0 -0
  392. egse/lib/ximc/libximc.framework/Frameworks/libbindy.dylib +0 -0
  393. egse/lib/ximc/libximc.framework/Frameworks/libxiwrapper.dylib +0 -0
  394. egse/lib/ximc/libximc.framework/Headers/ximc.h +0 -5510
  395. egse/lib/ximc/libximc.framework/Resources/Info.plist +0 -42
  396. egse/lib/ximc/libximc.framework/Resources/keyfile.sqlite +0 -0
  397. egse/lib/ximc/libximc.framework/libbindy.so +0 -0
  398. egse/lib/ximc/libximc.framework/libximc +0 -0
  399. egse/lib/ximc/libximc.framework/libximc.so +0 -0
  400. egse/lib/ximc/libximc.framework/libximc.so.7.0.0 +0 -0
  401. egse/lib/ximc/libximc.framework/libxiwrapper.so +0 -0
  402. egse/lib/ximc/pyximc.py +0 -922
  403. egse/listener.py +0 -73
  404. egse/logger/__init__.py +0 -243
  405. egse/logger/log_cs.py +0 -321
  406. egse/metrics.py +0 -98
  407. egse/mixin.py +0 -464
  408. egse/monitoring.py +0 -95
  409. egse/ni/alarms/__init__.py +0 -26
  410. egse/ni/alarms/cdaq9375.py +0 -300
  411. egse/ni/alarms/cdaq9375.yaml +0 -89
  412. egse/ni/alarms/cdaq9375_cs.py +0 -130
  413. egse/ni/alarms/cdaq9375_devif.py +0 -183
  414. egse/ni/alarms/cdaq9375_protocol.py +0 -48
  415. egse/obs_inspection.py +0 -163
  416. egse/observer.py +0 -41
  417. egse/obsid.py +0 -163
  418. egse/powermeter/__init__.py +0 -0
  419. egse/powermeter/ni/__init__.py +0 -38
  420. egse/powermeter/ni/cdaq9184.py +0 -224
  421. egse/powermeter/ni/cdaq9184.yaml +0 -73
  422. egse/powermeter/ni/cdaq9184_cs.py +0 -130
  423. egse/powermeter/ni/cdaq9184_devif.py +0 -201
  424. egse/powermeter/ni/cdaq9184_protocol.py +0 -48
  425. egse/powermeter/ni/cdaq9184_ui.py +0 -544
  426. egse/powermeter/thorlabs/__init__.py +0 -25
  427. egse/powermeter/thorlabs/pm100a.py +0 -380
  428. egse/powermeter/thorlabs/pm100a.yaml +0 -132
  429. egse/powermeter/thorlabs/pm100a_cs.py +0 -136
  430. egse/powermeter/thorlabs/pm100a_devif.py +0 -127
  431. egse/powermeter/thorlabs/pm100a_protocol.py +0 -80
  432. egse/powermeter/thorlabs/pm100a_ui.py +0 -725
  433. egse/process.py +0 -451
  434. egse/procman/__init__.py +0 -811
  435. egse/procman/cannot_start_process_popup.py +0 -43
  436. egse/procman/procman.yaml +0 -49
  437. egse/procman/procman_cs.py +0 -201
  438. egse/procman/procman_ui.py +0 -2081
  439. egse/protocol.py +0 -603
  440. egse/proxy.py +0 -522
  441. egse/randomwalk.py +0 -140
  442. egse/reg.py +0 -585
  443. egse/reload.py +0 -122
  444. egse/reprocess.py +0 -675
  445. egse/resource.py +0 -333
  446. egse/rst.py +0 -135
  447. egse/search.py +0 -182
  448. egse/serialdevice.py +0 -190
  449. egse/services.py +0 -212
  450. egse/services.yaml +0 -51
  451. egse/settings.py +0 -379
  452. egse/settings.yaml +0 -980
  453. egse/setup.py +0 -1180
  454. egse/shutter/__init__.py +0 -0
  455. egse/shutter/thorlabs/__init__.py +0 -19
  456. egse/shutter/thorlabs/ksc101.py +0 -205
  457. egse/shutter/thorlabs/ksc101.yaml +0 -105
  458. egse/shutter/thorlabs/ksc101_cs.py +0 -136
  459. egse/shutter/thorlabs/ksc101_devif.py +0 -201
  460. egse/shutter/thorlabs/ksc101_protocol.py +0 -69
  461. egse/shutter/thorlabs/ksc101_ui.py +0 -548
  462. egse/shutter/thorlabs/sc10.py +0 -82
  463. egse/shutter/thorlabs/sc10.yaml +0 -52
  464. egse/shutter/thorlabs/sc10_controller.py +0 -81
  465. egse/shutter/thorlabs/sc10_cs.py +0 -108
  466. egse/shutter/thorlabs/sc10_interface.py +0 -25
  467. egse/shutter/thorlabs/sc10_simulator.py +0 -30
  468. egse/simulator.py +0 -41
  469. egse/slack.py +0 -61
  470. egse/socketdevice.py +0 -218
  471. egse/sockets.py +0 -218
  472. egse/spw.py +0 -1479
  473. egse/stages/__init__.py +0 -12
  474. egse/stages/aerotech/ensemble.py +0 -247
  475. egse/stages/aerotech/ensemble.yaml +0 -205
  476. egse/stages/aerotech/ensemble_controller.py +0 -275
  477. egse/stages/aerotech/ensemble_cs.py +0 -110
  478. egse/stages/aerotech/ensemble_interface.py +0 -132
  479. egse/stages/aerotech/ensemble_parameters.py +0 -433
  480. egse/stages/aerotech/ensemble_simulator.py +0 -27
  481. egse/stages/aerotech/mgse_sim.py +0 -193
  482. egse/stages/arun/smd3.py +0 -111
  483. egse/stages/arun/smd3.yaml +0 -68
  484. egse/stages/arun/smd3_controller.py +0 -472
  485. egse/stages/arun/smd3_cs.py +0 -112
  486. egse/stages/arun/smd3_interface.py +0 -53
  487. egse/stages/arun/smd3_simulator.py +0 -27
  488. egse/stages/arun/smd3_stop.py +0 -16
  489. egse/stages/huber/__init__.py +0 -49
  490. egse/stages/huber/smc9300.py +0 -904
  491. egse/stages/huber/smc9300.yaml +0 -63
  492. egse/stages/huber/smc9300_cs.py +0 -178
  493. egse/stages/huber/smc9300_devif.py +0 -345
  494. egse/stages/huber/smc9300_protocol.py +0 -111
  495. egse/stages/huber/smc9300_sim.py +0 -547
  496. egse/stages/huber/smc9300_ui.py +0 -973
  497. egse/state.py +0 -173
  498. egse/statemachine.py +0 -274
  499. egse/storage/__init__.py +0 -1004
  500. egse/storage/persistence.py +0 -2295
  501. egse/storage/storage.yaml +0 -72
  502. egse/storage/storage_cs.py +0 -214
  503. egse/styles/dark.qss +0 -343
  504. egse/styles/default.qss +0 -48
  505. egse/synoptics/__init__.py +0 -412
  506. egse/synoptics/syn.yaml +0 -9
  507. egse/synoptics/syn_cs.py +0 -195
  508. egse/system.py +0 -1408
  509. egse/tcs/__init__.py +0 -14
  510. egse/tcs/tcs.py +0 -874
  511. egse/tcs/tcs.yaml +0 -14
  512. egse/tcs/tcs_cs.py +0 -202
  513. egse/tcs/tcs_devif.py +0 -292
  514. egse/tcs/tcs_protocol.py +0 -177
  515. egse/tcs/tcs_sim.py +0 -177
  516. egse/tcs/tcs_ui.py +0 -543
  517. egse/tdms.py +0 -171
  518. egse/tempcontrol/__init__.py +0 -23
  519. egse/tempcontrol/agilent/agilent34970.py +0 -109
  520. egse/tempcontrol/agilent/agilent34970.yaml +0 -44
  521. egse/tempcontrol/agilent/agilent34970_cs.py +0 -116
  522. egse/tempcontrol/agilent/agilent34970_devif.py +0 -182
  523. egse/tempcontrol/agilent/agilent34970_protocol.py +0 -99
  524. egse/tempcontrol/agilent/agilent34972.py +0 -111
  525. egse/tempcontrol/agilent/agilent34972.yaml +0 -44
  526. egse/tempcontrol/agilent/agilent34972_cs.py +0 -117
  527. egse/tempcontrol/agilent/agilent34972_devif.py +0 -189
  528. egse/tempcontrol/agilent/agilent34972_protocol.py +0 -101
  529. egse/tempcontrol/beaglebone/beaglebone.py +0 -342
  530. egse/tempcontrol/beaglebone/beaglebone.yaml +0 -110
  531. egse/tempcontrol/beaglebone/beaglebone_cs.py +0 -117
  532. egse/tempcontrol/beaglebone/beaglebone_protocol.py +0 -135
  533. egse/tempcontrol/beaglebone/beaglebone_ui.py +0 -681
  534. egse/tempcontrol/digalox/digalox.py +0 -107
  535. egse/tempcontrol/digalox/digalox.yaml +0 -36
  536. egse/tempcontrol/digalox/digalox_cs.py +0 -112
  537. egse/tempcontrol/digalox/digalox_protocol.py +0 -55
  538. egse/tempcontrol/keithley/__init__.py +0 -33
  539. egse/tempcontrol/keithley/daq6510.py +0 -662
  540. egse/tempcontrol/keithley/daq6510.yaml +0 -105
  541. egse/tempcontrol/keithley/daq6510_cs.py +0 -163
  542. egse/tempcontrol/keithley/daq6510_devif.py +0 -343
  543. egse/tempcontrol/keithley/daq6510_protocol.py +0 -78
  544. egse/tempcontrol/keithley/daq6510_sim.py +0 -186
  545. egse/tempcontrol/lakeshore/__init__.py +0 -33
  546. egse/tempcontrol/lakeshore/lsci.py +0 -361
  547. egse/tempcontrol/lakeshore/lsci.yaml +0 -162
  548. egse/tempcontrol/lakeshore/lsci_cs.py +0 -174
  549. egse/tempcontrol/lakeshore/lsci_devif.py +0 -292
  550. egse/tempcontrol/lakeshore/lsci_protocol.py +0 -73
  551. egse/tempcontrol/lakeshore/lsci_ui.py +0 -389
  552. egse/tempcontrol/ni/__init__.py +0 -0
  553. egse/tempcontrol/spid/spid.py +0 -109
  554. egse/tempcontrol/spid/spid.yaml +0 -81
  555. egse/tempcontrol/spid/spid_controller.py +0 -279
  556. egse/tempcontrol/spid/spid_cs.py +0 -136
  557. egse/tempcontrol/spid/spid_protocol.py +0 -107
  558. egse/tempcontrol/spid/spid_ui.py +0 -727
  559. egse/tempcontrol/srs/__init__.py +0 -22
  560. egse/tempcontrol/srs/ptc10.py +0 -875
  561. egse/tempcontrol/srs/ptc10.yaml +0 -227
  562. egse/tempcontrol/srs/ptc10_cs.py +0 -128
  563. egse/tempcontrol/srs/ptc10_devif.py +0 -118
  564. egse/tempcontrol/srs/ptc10_protocol.py +0 -42
  565. egse/tempcontrol/srs/ptc10_ui.py +0 -906
  566. egse/ups/apc/apc.py +0 -236
  567. egse/ups/apc/apc.yaml +0 -45
  568. egse/ups/apc/apc_cs.py +0 -101
  569. egse/ups/apc/apc_protocol.py +0 -125
  570. egse/user.yaml +0 -7
  571. egse/vacuum/beaglebone/beaglebone.py +0 -149
  572. egse/vacuum/beaglebone/beaglebone.yaml +0 -44
  573. egse/vacuum/beaglebone/beaglebone_cs.py +0 -108
  574. egse/vacuum/beaglebone/beaglebone_devif.py +0 -164
  575. egse/vacuum/beaglebone/beaglebone_protocol.py +0 -193
  576. egse/vacuum/beaglebone/beaglebone_ui.py +0 -638
  577. egse/vacuum/instrutech/igm402.py +0 -92
  578. egse/vacuum/instrutech/igm402.yaml +0 -90
  579. egse/vacuum/instrutech/igm402_controller.py +0 -128
  580. egse/vacuum/instrutech/igm402_cs.py +0 -108
  581. egse/vacuum/instrutech/igm402_interface.py +0 -49
  582. egse/vacuum/instrutech/igm402_simulator.py +0 -36
  583. egse/vacuum/keller/kellerBus.py +0 -256
  584. egse/vacuum/keller/leo3.py +0 -102
  585. egse/vacuum/keller/leo3.yaml +0 -38
  586. egse/vacuum/keller/leo3_controller.py +0 -83
  587. egse/vacuum/keller/leo3_cs.py +0 -101
  588. egse/vacuum/keller/leo3_interface.py +0 -33
  589. egse/vacuum/mks/evision.py +0 -86
  590. egse/vacuum/mks/evision.yaml +0 -75
  591. egse/vacuum/mks/evision_cs.py +0 -101
  592. egse/vacuum/mks/evision_devif.py +0 -316
  593. egse/vacuum/mks/evision_interface.py +0 -60
  594. egse/vacuum/mks/evision_simulator.py +0 -24
  595. egse/vacuum/mks/evision_ui.py +0 -704
  596. egse/vacuum/pfeiffer/acp40.py +0 -87
  597. egse/vacuum/pfeiffer/acp40.yaml +0 -60
  598. egse/vacuum/pfeiffer/acp40_controller.py +0 -117
  599. egse/vacuum/pfeiffer/acp40_cs.py +0 -109
  600. egse/vacuum/pfeiffer/acp40_interface.py +0 -40
  601. egse/vacuum/pfeiffer/acp40_simulator.py +0 -39
  602. egse/vacuum/pfeiffer/tc400.py +0 -113
  603. egse/vacuum/pfeiffer/tc400.yaml +0 -83
  604. egse/vacuum/pfeiffer/tc400_controller.py +0 -140
  605. egse/vacuum/pfeiffer/tc400_cs.py +0 -109
  606. egse/vacuum/pfeiffer/tc400_interface.py +0 -70
  607. egse/vacuum/pfeiffer/tc400_simulator.py +0 -24
  608. egse/vacuum/pfeiffer/tpg261.py +0 -81
  609. egse/vacuum/pfeiffer/tpg261.yaml +0 -66
  610. egse/vacuum/pfeiffer/tpg261_controller.py +0 -150
  611. egse/vacuum/pfeiffer/tpg261_cs.py +0 -109
  612. egse/vacuum/pfeiffer/tpg261_interface.py +0 -60
  613. egse/vacuum/pfeiffer/tpg261_simulator.py +0 -24
  614. egse/version.py +0 -174
  615. egse/visitedpositions.py +0 -398
  616. egse/windowing.py +0 -213
  617. egse/zmq/__init__.py +0 -28
  618. egse/zmq/spw.py +0 -160
  619. egse/zmq_ser.py +0 -41
  620. scripts/alerts/cold.yaml +0 -278
  621. scripts/alerts/example_alerts.yaml +0 -54
  622. scripts/alerts/transition.yaml +0 -14
  623. scripts/alerts/warm.yaml +0 -49
  624. scripts/analyse_n_fee_hk_data.py +0 -44
  625. scripts/check_hdf5_files.py +0 -192
  626. scripts/check_register_sync.py +0 -47
  627. scripts/create_hdf5_report.py +0 -295
  628. scripts/csl_model.py +0 -436
  629. scripts/csl_restore_setup.py +0 -230
  630. scripts/export-grafana-dashboards.py +0 -50
  631. scripts/fdir/cs_recovery/fdir_cs_recovery.py +0 -59
  632. scripts/fdir/fdir_table.yaml +0 -70
  633. scripts/fdir/fdir_test_recovery.py +0 -11
  634. scripts/fdir/hw_recovery/fdir_agilent_hw_recovery.py +0 -73
  635. scripts/fdir/limit_recovery/fdir_agilent_limit.py +0 -64
  636. scripts/fdir/limit_recovery/fdir_bb_heater_limit.py +0 -61
  637. scripts/fdir/limit_recovery/fdir_ensemble_limit.py +0 -33
  638. scripts/fdir/limit_recovery/fdir_pressure_limit_recovery.py +0 -71
  639. scripts/fix_csv.py +0 -80
  640. scripts/n_fee_supply_voltage_calculation.py +0 -92
  641. scripts/playground.py +0 -30
  642. scripts/print_hdf5_hk_data.py +0 -68
  643. scripts/print_register_map.py +0 -43
  644. scripts/sron/commanding/control_heaters.py +0 -44
  645. scripts/sron/commanding/pumpdown.py +0 -46
  646. scripts/sron/commanding/set_pid_setpoint.py +0 -19
  647. scripts/sron/commanding/shutdown_bbb_heaters.py +0 -10
  648. scripts/sron/commanding/shutdown_pumps.py +0 -33
  649. scripts/sron/tm_gen/tm_gen_agilent.py +0 -38
  650. scripts/sron/tm_gen/tm_gen_heaters.py +0 -4
  651. scripts/sron/tm_gen/tm_gen_spid.py +0 -13
  652. scripts/update_operational_cgse.py +0 -268
  653. scripts/update_operational_cgse_old.py +0 -273
egse/resource.py DELETED
@@ -1,333 +0,0 @@
1
- """
2
- This module provides convenience functions to use resources in your code without
3
- the need to specify an absolute path or try to locate the resources in your local
4
- installation (which is time-consuming, error-prone, and introduces quite some
5
- redundancy).
6
-
7
- Resources can be files of different format that are distributed together with the
8
- source code, e.g.
9
-
10
- * image data
11
- * icons
12
- * YAML files
13
- * binary files, e.g. dynamic libraries
14
- * style files for GUI applications
15
- * calibration files distributed with the source code
16
-
17
- Each of the resources have a fixed location within the source tree and is identified
18
- with a resource identifier. There are a number of default identifier that are defined
19
- as follows:
20
-
21
- * `icons`: located in the sub-folder 'icons'
22
- * `images`: located in the sub-folder 'images'
23
- * `lib`: located in sub-folder 'lib'
24
-
25
- Resource locations are determined during startup at a number of predefined
26
- locations for the following resource identifiers:
27
-
28
- * from known hardcoded folder names, e.g. 'images', 'icons', and 'lib'.
29
-
30
- Resources can be accessed from the code without specifying the absolute pathname,
31
- using a `:/resource_od/` that is known by the resource module. A wildcard can be
32
- introduces after the `resource_id` to indicate the resource is in one of the
33
- sub-directories.
34
-
35
- Example usage:
36
- * get_resource(":/icons/open-document.png")
37
- * get_resource(":/styles/dark.qss")
38
- * get_resource(":/lib/*/EtherSpaceLink_v34_86.dylib")
39
-
40
- A new `resource_id` can be added with the `add_resource_id()` function, specifying a
41
- resource_id string and location. When the `force=True` keyword is given, an existing
42
- resource_id can be changed.
43
-
44
- Alternatives
45
-
46
- The `egse.config` module has a number of alternatives for locating files and resources.
47
-
48
- * find_file(..) and find_files(..)
49
- * find_dir(..) and find_dirs(..)
50
- * get_resource_dirs()
51
- * get_resource_path()
52
-
53
- The functions for finding files and directories are more flexible, but take more
54
- time and effort. They are mainly used for dynamically searching for a file or
55
- folder, not necessarily within the source code location.
56
-
57
- The resource specific functions in the egse.config module will be deprecated when
58
- their functionality is fully replaced by this `egse.resource` module.
59
-
60
- """
61
-
62
- import logging
63
- import re
64
- from pathlib import Path
65
- from typing import Dict
66
- from typing import Union
67
-
68
- from egse.config import find_first_occurrence_of_dir
69
- from egse.config import find_files
70
- from egse.exceptions import InternalError
71
-
72
- MODULE_LOGGER = logging.getLogger(__name__)
73
-
74
-
75
- class ResourceError(Exception):
76
- """Base class, raised when a resource is not defined."""
77
-
78
-
79
- class AmbiguityError(ResourceError):
80
- """Raised when more than one option is possible."""
81
-
82
-
83
- class NoSuchFileError(ResourceError):
84
- """Raised when no file could be found for the given resource."""
85
-
86
-
87
- __all__ = [
88
- "get_resource",
89
- "get_resource_locations",
90
- "add_resource_id",
91
- "initialise_resources",
92
- "ResourceError",
93
- "AmbiguityError",
94
- "NoSuchFileError",
95
- ]
96
-
97
- # Testing regex: https://pythex.org
98
-
99
- PATTERN = re.compile(r"^:/(\w+)/(\*+/)?(.*)$")
100
-
101
- DEFAULT_RESOURCES = {
102
- "icons": "/icons",
103
- "images": "/images",
104
- "lib": "/lib",
105
- "styles": "/styles",
106
- "data": "/data",
107
- "aeudata": "/aeu/arbdata",
108
- }
109
-
110
- resources_root = Path(__file__).parent
111
- resources = {}
112
-
113
- __initialised__ = False
114
-
115
-
116
- def check_if_file_exists(filename: Union[Path, str], resource_id: str = None) -> Path:
117
- """
118
- Check if the given filename exists. If the filename exists, return the filename, else raise a
119
- NoSuchFileError.
120
-
121
- Args:
122
- filename (Path|str): an absolute filename
123
- resource_id (str): a resource identifier
124
-
125
- Return:
126
- The given filename if it exists.
127
-
128
- Raises:
129
- NoSuchFileError if the given filename doesn't exist.
130
- """
131
- filename = Path(filename)
132
- if filename.is_file():
133
- return filename
134
-
135
- if resource_id:
136
- raise NoSuchFileError(
137
- f"The file '{filename.name}' could not be found for the given resource '{resource_id}'")
138
- else:
139
- raise NoSuchFileError(f"The file '{filename.name}' doesn't exist.")
140
-
141
-
142
- def contains_wildcard(filename: str):
143
- """
144
- Returns True if the filename contains a wildcard, otherwise False.
145
- A wildcard is an asterisk '*' or a question mark '?' character.
146
- """
147
- if '*' in filename:
148
- return True
149
- if '?' in filename:
150
- return True
151
-
152
- return False
153
-
154
-
155
- def get_resource_locations() -> Dict[str, Path]:
156
- """
157
- Returns a dictionary of names that can be used as resource location.
158
- The keys are strings that are recognised as valid resource identifiers, the
159
- values are their actual absolute path names.
160
- """
161
- if not __initialised__:
162
- MODULE_LOGGER.warning("Resources have not been initialised.")
163
-
164
- return resources.copy()
165
-
166
-
167
- def initialise_resources(root: Union[Path, str] = Path(__file__).parent):
168
- """
169
- Initialise the default resources.
170
-
171
- The argument `root` specifies the root location for the resources. If not specified,
172
- the location of this module is taken as the root location. So, if you have installed
173
- this package with `pip install`, you should give the location of your project's source
174
- code as the root argument.
175
-
176
- Args:
177
- root (Path|str): the root location for the resources.
178
-
179
- Returns:
180
- None.
181
- """
182
- global resources_root
183
- global __initialised__
184
-
185
- if __initialised__:
186
- MODULE_LOGGER.warning("Resources have already been initialised.")
187
- return
188
-
189
- resources_root = Path(root)
190
-
191
- # the resources with their absolute path names
192
-
193
- for resource_id in DEFAULT_RESOURCES:
194
- folder = find_first_occurrence_of_dir(DEFAULT_RESOURCES[resource_id], root=resources_root)
195
- resources[resource_id] = folder
196
-
197
- MODULE_LOGGER.debug(f"Resources have been defined: {DEFAULT_RESOURCES=}")
198
-
199
- __initialised__ = True
200
-
201
-
202
- def add_resource_id(resource_id: str, location: Union[Path, str], force=False):
203
- """
204
- Adds a resource identifier with the given location. Resources can then be specified
205
- using this resource id.
206
-
207
- The location can be an absolute or relative pathname. In the latter case an
208
- absolute pathname will be constructed using the resource root location that was
209
- given during the initialisation (calling `initialise_resources()`).
210
-
211
- If the resource identifier already exists, a ValueError will be raised unless
212
- you specify the `force=True` argument.
213
-
214
- Args:
215
- resource_id (str): a resource identifier
216
- location (Path|str: an absolute or relative pathname
217
- force (bool): force adding even if the resource_id exists
218
-
219
- Returns:
220
- ValueError if the location can not be determined.
221
- """
222
- # Check if id already exists, overwrite or raise exception?
223
-
224
- if resource_id in resources and force is False:
225
- raise ValueError(f"Resource identifier '{resource_id}' already exists.")
226
-
227
- # Check if location exists and is a directory.
228
-
229
- location = Path(location)
230
-
231
- if location.is_absolute() and location.is_dir():
232
- resources[resource_id] = location
233
-
234
- if not location.is_absolute():
235
- location = resources_root / location
236
- if location.is_dir():
237
- resources[resource_id] = location
238
- else:
239
- raise ValueError(f"Unknown location {location=}")
240
-
241
-
242
- def get_resource(resource_locator: str) -> Path:
243
- """
244
- Returns the absolute Path for the given resource_locator. The resource_locator consists of
245
- a resource_id, an optional wildcard and a filename separated by a forward slash '/' and
246
- started by a colon ':'.
247
-
248
- ':/<resource_id>/[*/]<filename>'
249
-
250
- If the resource_locator starts with a colon ':', the name will be interpreted as a resource_id
251
- and filename combination and parsed as such
252
-
253
- If the resource_locator doesn't start with a colon ':', then the string will be interpreted as a
254
- Path name and returned if that path exists, otherwise a ResourceError is raised.
255
-
256
- The filename can contain the wildcard '*' and/or '?', however the use of a wildcard in the
257
- filename can still only match one unique filename. This can be useful e.g. if you know the
258
- filename except for one part of it like a timestamp. Used, e.g., for matching Setup files which
259
- are unique filenames with a timestamp.
260
-
261
- Args:
262
- resource_locator (str): a special resource name or a filename
263
-
264
- Returns:
265
- a Path with the absolute filename for the resource.
266
-
267
- Raises:
268
- ResourceError when no file could be found or the search is ambiguous.
269
-
270
- """
271
- # Try to match the special resource syntax `:/resource_id/` or `:/resource_id/*/`
272
-
273
- if resource_locator.startswith(':'):
274
-
275
- if not __initialised__:
276
- MODULE_LOGGER.warning("Resources have not been initialised.")
277
-
278
- match = PATTERN.fullmatch(resource_locator)
279
- resource_id = match[1]
280
- filename = match[3]
281
- try:
282
- resource_location = Path(resources[resource_id])
283
- except KeyError:
284
- raise ResourceError(f"Resource not defined: {resource_id}")
285
-
286
- # Match can be only three things
287
- # - None in which case the file must be in the resource location directly
288
- # - '*/' in which case the file must be in a sub-folder of the resource
289
- # - '**/' to find the file in any sub-folder below the given resource
290
-
291
- if match[2] is None:
292
- if contains_wildcard(filename):
293
- files = list(find_files(filename, root=resource_location))
294
-
295
- if len(files) == 1:
296
- filename = files[0]
297
- elif len(files) == 0:
298
- raise NoSuchFileError(f"No file found that matches {filename=} for the given "
299
- f"resource '{resource_id}'.")
300
- else:
301
- raise AmbiguityError(f"The {filename=} found {len(files)} matches for "
302
- f"the given resource '{resource_id}'.")
303
-
304
- return check_if_file_exists(resource_location / filename, resource_id)
305
-
306
- elif match[2] == "*/":
307
- files = list(find_files(filename, root=resource_location))
308
-
309
- if len(files) == 1:
310
- return files[0]
311
- elif len(files) == 0:
312
- raise NoSuchFileError(
313
- f"The {filename=} could not be found for the given resource '{resource_id}'."
314
- )
315
- else:
316
- raise AmbiguityError(f"The {filename=} was found {len(files)} times for "
317
- f"the given resource '{resource_id}'.")
318
- elif match[2] == '**/':
319
- raise NotImplementedError(f"The '**' to walk the tree is not yet implemented.")
320
- else:
321
- raise InternalError(
322
- f"This shouldn't happen, the match is {match[2]=} for {resource_locator=}")
323
- else:
324
- return check_if_file_exists(Path(resource_locator))
325
-
326
-
327
- initialise_resources()
328
-
329
- if __name__ == "__main__":
330
-
331
- import rich
332
- rich.print("Default resources:")
333
- rich.print(get_resource_locations())
egse/rst.py DELETED
@@ -1,135 +0,0 @@
1
- import yaml
2
- import logging
3
- import inspect
4
- import textwrap
5
-
6
- module_logger = logging.getLogger(__name__)
7
-
8
-
9
- def create_args_list(cmd):
10
- s = ""
11
- if 'args' not in cmd:
12
- return s
13
- for arg_name in cmd['args'].keys():
14
- s += f"{arg_name}, "
15
- if 'kwargs' not in cmd:
16
- return s[:-2]
17
- for arg_name in cmd['kwargs'].keys():
18
- s += f"{arg_name}={cmd['kwargs'][arg_name].split('|')[1].strip()}, "
19
- return s[:-2]
20
-
21
-
22
- def handle_description(d):
23
- s = textwrap.indent(inspect.cleandoc(d), " ")
24
- return s + "\n\n"
25
-
26
-
27
- def handle_args(d):
28
- s = ""
29
- for arg_name in d:
30
- arg_type, arg_desc = [x.strip() for x in d[arg_name].split('|', 1)]
31
- s += f" :param {arg_type} {arg_name}: {arg_desc}\n"
32
- return s + "\n\n"
33
-
34
-
35
- def handle_kwargs(d):
36
- s = ""
37
- for arg_name in d:
38
- arg_type, arg_default, arg_desc = [x.strip() for x in d[arg_name].split('|', 2)]
39
- s += f" :param {arg_type} {arg_name}: {arg_desc} [default: {arg_default}]"
40
- return s + "\n\n"
41
-
42
-
43
- def handle_returns(d):
44
- s = ""
45
- if d == "None":
46
- return s
47
- return_type, return_desc = [x.strip() for x in d.split('|', 2)]
48
- s += f" :returns: (*{return_type}*) {return_desc}\n"
49
- # s += f" :rtype: {return_type}\n"
50
- return s + "\n"
51
-
52
-
53
- def handle_todos(d):
54
- return f" .. todo:: {d}\n\n"
55
-
56
-
57
- def handle_notes(d):
58
- return f" .. note:: {d}\n\n"
59
-
60
-
61
- def handle_class_description(d):
62
- s = textwrap.indent(inspect.cleandoc(d), " ")
63
- return s + "\n\n"
64
-
65
-
66
- class RSTError(Exception):
67
- pass
68
-
69
-
70
- class ReStructuredText(object):
71
- """
72
- .. todo:: implement proper indentation though a instance variable or something
73
- .. todo:: there should also be overall class documentation loaded from the YAML file
74
- """
75
-
76
- def __init__(self):
77
- pass
78
-
79
- def _read_yaml(self, filename):
80
- with open(filename, 'r') as stream:
81
- try:
82
- yaml_document = yaml.load(stream)
83
- except yaml.YAMLError as exc:
84
- module_logger.error(exc)
85
- raise RSTError(f"Error loading YAML document {filename}") from exc
86
- return yaml_document
87
-
88
- def create_auto_class_from_yaml(self, yaml_file):
89
-
90
- yaml_document = self._read_yaml(yaml_file)
91
-
92
- class_name = yaml_document['ProxyClass']
93
-
94
- rst_msg = f".. class:: {class_name}\n\n"
95
-
96
- if 'ClassDescription' in yaml_document:
97
- rst_msg += handle_class_description(yaml_document['ClassDescription'])
98
-
99
- cmd_tag = "Commands"
100
-
101
- for cmd in yaml_document[cmd_tag]:
102
- rst_msg += self.create_command(yaml_document[cmd_tag], cmd)
103
- rst_msg += "\n"
104
-
105
- return rst_msg
106
-
107
- def create_command(self, d, cmd):
108
-
109
- rst_msg = f" .. method:: {cmd}({create_args_list(d[cmd])})\n\n"
110
-
111
- d = d[cmd]
112
-
113
- if 'description' in d:
114
- rst_msg += handle_description(d['description'])
115
-
116
- if 'args' in d:
117
- rst_msg += handle_args(d['args'])
118
-
119
- if 'kwargs' in d:
120
- rst_msg += handle_kwargs(d['kwargs'])
121
-
122
- if 'returns' in d:
123
- rst_msg += handle_returns(d['returns'])
124
-
125
- if 'todo' in d:
126
- rst_msg += handle_todos(d['todo'])
127
-
128
- if 'note' in d:
129
- rst_msg += handle_notes(d['note'])
130
-
131
- return rst_msg
132
-
133
-
134
- if __name__ == "__main__":
135
- pass
egse/search.py DELETED
@@ -1,182 +0,0 @@
1
- """
2
- The search module defines some generic search functions.
3
-
4
- This code is taken from the book:
5
-
6
- Classic Computer Science Problems in Python, David Kopec, 2019.
7
- """
8
- from __future__ import annotations
9
-
10
- from collections import deque
11
- from typing import TypeVar, Iterable, Sequence, Generic, List, \
12
- Callable, Set, Deque, Dict, Any, Optional
13
- from typing_extensions import Protocol
14
- from heapq import heappush, heappop
15
-
16
- T = TypeVar('T')
17
-
18
-
19
- def linear_contains(iterable: Iterable[T], key: T) -> bool:
20
- for item in iterable:
21
- if item == key:
22
- return True
23
- return False
24
-
25
-
26
- # Note that Protocol is used here to define the Comparable type with structural
27
- # sub-typing. A Comparable type implements the comparison operators.
28
- # Protocol is defined in PEP-544 [https://www.python.org/dev/peps/pep-0544/]
29
-
30
- C = TypeVar('C', bound='Comparable')
31
-
32
-
33
- class Comparable(Protocol):
34
- def __eq__(self, other: Any) -> bool:
35
- ...
36
-
37
- def __lt__(self: C, other: C) -> bool:
38
- ...
39
-
40
- def __gt__(self: C, other: C) -> bool:
41
- return (not self < other) and self != other
42
-
43
- def __le__(self: C, other: C) -> bool:
44
- return self < other or self == other
45
-
46
- def __ge__(self: C, other: C) -> bool:
47
- return not self < other
48
-
49
-
50
- def binary_contains(sequence: Sequence[C], key: C) -> bool:
51
- low: int = 0
52
- high: int = len(sequence) - 1
53
- while low <= high: # while there is still a search space
54
- mid: int = (low + high) // 2
55
- if sequence[mid] < key:
56
- low = mid + 1
57
- elif sequence[mid] > key:
58
- high = mid - 1
59
- else:
60
- return True
61
- return False
62
-
63
-
64
- class Stack(Generic[T]):
65
- def __init__(self) -> None:
66
- self._container: List[T] = []
67
-
68
- @property
69
- def empty(self) -> bool:
70
- return not self._container
71
-
72
- def push(self, item: T) -> None:
73
- self._container.append(item)
74
-
75
- def pop(self) -> T:
76
- return self._container.pop() # LIFO
77
-
78
- def __repr__(self) -> str:
79
- return repr(self._container)
80
-
81
-
82
- class Node(Generic[T]):
83
- def __init__(self, state: T, parent: Optional[Node], cost: float = 0.0, heuristic: float = 0.0) -> None:
84
- self.state: T = state
85
- self.parent: Optional[Node] = parent
86
- self.cost: float = cost
87
- self.heuristic: float = heuristic
88
-
89
- def __lt__(self, other: Node) -> bool:
90
- return (self.cost + self.heuristic) < (other.cost + other.heuristic)
91
-
92
-
93
- def depth_first_search(initial: T, goal_test: Callable[[T], bool], successors: Callable[[T], List[T]]) -> Optional[Node[T]]:
94
- """
95
- The depth-first search (DFS) algorithm goes as deeply as it can before backtracking to its
96
- last decision point if it reaches a dead end.
97
-
98
- Args:
99
- initial: starting point for the search
100
- goal_test: function that defines if the goal is reached or not
101
- successors: function that returns all possible states that can be visited next
102
-
103
- Returns:
104
- the Node encapsulating the goal state if successful, otherwise None.
105
- """
106
- frontier: Stack[Node[T]] = Stack()
107
- frontier.push(Node(initial, None))
108
- explored: Set[T] = set(initial)
109
-
110
- while not frontier.empty:
111
- current_node: Node[T] = frontier.pop()
112
- current_state: T = current_node.state
113
-
114
- if goal_test(current_state):
115
- return current_node
116
-
117
- for child in successors(current_state):
118
- if child in explored:
119
- continue
120
- explored.add(child)
121
- frontier.push(Node(child, current_node))
122
-
123
- return None # we went through everything and never found goal
124
-
125
-
126
- def node_to_path(node: Node[T]) -> List[T]:
127
- """
128
- Returns the path that was followed from a starting state to reach a goal.
129
-
130
- Args:
131
- node:
132
-
133
- Returns:
134
- a list of states that were visited to reach the final goal.
135
- """
136
- path: List[T] = [node.state]
137
-
138
- while node.parent is not None:
139
- node = node.parent
140
- path.append(node.state)
141
- path.reverse()
142
- return path
143
-
144
-
145
- class Queue(Generic[T]):
146
- def __init__(self) -> None:
147
- self._container: Deque[T] = deque()
148
-
149
- @property
150
- def empty(self) -> bool:
151
- return not self._container
152
-
153
- def push(self, item: T) -> None:
154
- self._container.append(item)
155
-
156
- def pop(self) -> T:
157
- return self._container.popleft()
158
-
159
- def __repr__(self) -> str:
160
- return repr(self._container)
161
-
162
-
163
- def breadth_first_search(initial: T, goal_test: Callable[[T], bool], successors: Callable[[T], List[T]]) -> Optional[Node[T]]:
164
- frontier: Queue[Node[T]] = Queue()
165
- frontier.push(Node(initial, None))
166
- explored: Set[T] = set(initial)
167
-
168
- while not frontier.empty:
169
- current_node: Node[T] = frontier.pop()
170
- current_state: T = current_node.state
171
-
172
- if goal_test(current_state):
173
- return current_node
174
-
175
- for child in successors(current_state):
176
- if child in explored:
177
- continue
178
- explored.add(child)
179
- frontier.push(Node(child, current_node))
180
-
181
- return None # we went through everything and never found goal
182
-