cgse 0.17.2__tar.gz → 0.17.4__tar.gz
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.
- {cgse-0.17.2 → cgse-0.17.4}/CHANGELOG.md +20 -3
- {cgse-0.17.2 → cgse-0.17.4}/PKG-INFO +1 -1
- {cgse-0.17.2 → cgse-0.17.4/docs/admin_guide}/make-a-release.md +43 -4
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/pyproject.toml +1 -1
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/hk.py +2 -2
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/log.py +8 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/socketdevice.py +5 -4
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/system.py +5 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-coordinates/pyproject.toml +3 -3
- cgse-0.17.4/libs/cgse-coordinates/src/egse/coordinates/__init__.py +229 -0
- cgse-0.17.4/libs/cgse-coordinates/src/egse/coordinates/avoidance.py +91 -0
- cgse-0.17.4/libs/cgse-coordinates/src/egse/coordinates/cslmodel.py +118 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-coordinates/src/egse/coordinates/laser_tracker_to_dict.py +16 -25
- cgse-0.17.4/libs/cgse-coordinates/src/egse/coordinates/point.py +833 -0
- cgse-0.17.4/libs/cgse-coordinates/src/egse/coordinates/pyplot.py +203 -0
- cgse-0.17.4/libs/cgse-coordinates/src/egse/coordinates/reference_frame.py +1417 -0
- cgse-0.17.4/libs/cgse-coordinates/src/egse/coordinates/refmodel.py +828 -0
- cgse-0.17.4/libs/cgse-coordinates/src/egse/coordinates/rotation_matrix.py +95 -0
- cgse-0.17.4/libs/cgse-coordinates/src/egse/coordinates/transform3d_addon.py +501 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-coordinates/tests/test_avoidance.py +2 -2
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-coordinates/tests/test_coordinates_plot.py +5 -5
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-coordinates/tests/test_coordinates_serialize.py +13 -9
- cgse-0.17.4/libs/cgse-coordinates/tests/test_point.py +90 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-coordinates/tests/test_reference_frames.py +134 -128
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-coordinates/tests/test_refmodel.py +39 -27
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/pyproject.toml +1 -1
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/cgse_core/_stop.py +1 -2
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/control.py +2 -1
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/dummy.py +17 -8
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/procman/procman_cs.py +1 -1
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/procman/procman_ui.py +5 -2
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/registry/client.py +8 -4
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/registry/server.py +2 -2
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/tests/fixtures/services.py +9 -3
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/tests/test_connect.py +5 -4
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/tests/test_logger.py +5 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/pyproject.toml +1 -1
- {cgse-0.17.2 → cgse-0.17.4}/mkdocs.yml +2 -0
- {cgse-0.17.2 → cgse-0.17.4}/overrides/.icons/custom/gear.svg +92 -92
- cgse-0.17.4/projects/ariel/ariel-facility/README.MD +89 -0
- cgse-0.17.4/projects/ariel/ariel-facility/pyproject.toml +63 -0
- cgse-0.17.4/projects/ariel/ariel-facility/src/ariel_facility/cgse_explore.py +19 -0
- cgse-0.17.4/projects/ariel/ariel-facility/src/ariel_facility/cgse_services.py +46 -0
- cgse-0.17.4/projects/ariel/ariel-facility/src/ariel_facility/settings.yaml +20 -0
- cgse-0.17.4/projects/ariel/ariel-facility/src/egse/ariel/facility/database.py +214 -0
- cgse-0.17.4/projects/ariel/ariel-facility/src/egse/ariel/facility/hk.py +341 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/ariel/ariel-tcu/README.md +1 -1
- {cgse-0.17.2 → cgse-0.17.4}/projects/ariel/ariel-tcu/pyproject.toml +3 -3
- {cgse-0.17.2 → cgse-0.17.4}/projects/ariel/ariel-tcu/src/ariel_tcu/settings.yaml +4 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/__init__.py +12 -7
- {cgse-0.17.2 → cgse-0.17.4}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu.py +108 -16
- {cgse-0.17.2 → cgse-0.17.4}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu_cmd_utils.py +65 -8
- {cgse-0.17.2 → cgse-0.17.4}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu_cs.py +56 -32
- {cgse-0.17.2 → cgse-0.17.4}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu_devif.py +27 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu_protocol.py +2 -2
- cgse-0.17.4/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu_ui.py +693 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/cgse-tools/pyproject.toml +1 -1
- cgse-0.17.4/projects/generic/digilent/README.md +6 -0
- cgse-0.17.4/projects/generic/digilent/pyproject.toml +81 -0
- cgse-0.17.4/projects/generic/digilent/src/digilent/cgse_explore.py +19 -0
- cgse-0.17.4/projects/generic/digilent/src/digilent/cgse_services.py +59 -0
- cgse-0.17.4/projects/generic/digilent/src/digilent/settings.yaml +23 -0
- cgse-0.17.4/projects/generic/digilent/src/egse/digilent/digilent.py +2809 -0
- cgse-0.17.4/projects/generic/digilent/src/egse/digilent/measurpoint/digilent_devif.py +278 -0
- cgse-0.17.4/projects/generic/digilent/src/egse/digilent/measurpoint/dt8874/__init__.py +21 -0
- cgse-0.17.4/projects/generic/digilent/src/egse/digilent/measurpoint/dt8874/dt8874.py +71 -0
- cgse-0.17.4/projects/generic/digilent/src/egse/digilent/measurpoint/dt8874/dt8874.yaml +43 -0
- cgse-0.17.4/projects/generic/digilent/src/egse/digilent/measurpoint/dt8874/dt8874_cs.py +335 -0
- cgse-0.17.4/projects/generic/digilent/src/egse/digilent/measurpoint/dt8874/dt8874_devif.py +14 -0
- cgse-0.17.4/projects/generic/digilent/src/egse/digilent/measurpoint/dt8874/dt8874_protocol.py +148 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/pyproject.toml +1 -1
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_adev.py +2 -2
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/lakeshore-tempcontrol/pyproject.toml +1 -1
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/symetrie-hexapod/pyproject.toml +1 -1
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/dynalpha.py +1 -1
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod.py +47 -45
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.py +2 -2
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_cs.py +1 -1
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_protocol.py +1 -1
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_cs.py +1 -1
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_cs.py +1 -1
- cgse-0.17.4/projects/generic/symetrie-hexapod/src/symetrie_hexapod/settings.yaml +60 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/plato/plato-fits/pyproject.toml +1 -1
- cgse-0.17.4/projects/plato/plato-hdf5/README.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/plato/plato-hdf5/pyproject.toml +1 -1
- cgse-0.17.4/projects/plato/plato-spw/README.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/plato/plato-spw/pyproject.toml +1 -1
- {cgse-0.17.2 → cgse-0.17.4}/pyproject.toml +1 -1
- cgse-0.17.2/.pylintrc +0 -5
- cgse-0.17.2/duckdb_metrics.db +0 -0
- cgse-0.17.2/duckdb_metrics.db.wal +0 -0
- cgse-0.17.2/justfile +0 -69
- cgse-0.17.2/libs/cgse-common/justfile +0 -20
- cgse-0.17.2/libs/cgse-common/service_registry.db +0 -0
- cgse-0.17.2/libs/cgse-common/src/egse/plugins/metrics/duckdb.py +0 -442
- cgse-0.17.2/libs/cgse-common/src/egse/plugins/metrics/timescaledb.py +0 -596
- cgse-0.17.2/libs/cgse-common/src/egse/ratelimit.py +0 -275
- cgse-0.17.2/libs/cgse-common/tests/test_ratelimit.py +0 -365
- cgse-0.17.2/libs/cgse-coordinates/src/cgse_coordinates/settings.yaml +0 -16
- cgse-0.17.2/libs/cgse-coordinates/src/egse/coordinates/__init__.py +0 -536
- cgse-0.17.2/libs/cgse-coordinates/src/egse/coordinates/avoidance.py +0 -99
- cgse-0.17.2/libs/cgse-coordinates/src/egse/coordinates/cslmodel.py +0 -127
- cgse-0.17.2/libs/cgse-coordinates/src/egse/coordinates/point.py +0 -707
- cgse-0.17.2/libs/cgse-coordinates/src/egse/coordinates/pyplot.py +0 -191
- cgse-0.17.2/libs/cgse-coordinates/src/egse/coordinates/referenceFrame.py +0 -1251
- cgse-0.17.2/libs/cgse-coordinates/src/egse/coordinates/refmodel.py +0 -720
- cgse-0.17.2/libs/cgse-coordinates/src/egse/coordinates/rotationMatrix.py +0 -82
- cgse-0.17.2/libs/cgse-coordinates/src/egse/coordinates/transform3d_addon.py +0 -437
- cgse-0.17.2/libs/cgse-coordinates/tests/test_point.py +0 -90
- cgse-0.17.2/libs/cgse-core/service_registry.db +0 -0
- cgse-0.17.2/libs/cgse-core/service_registry.db-shm +0 -0
- cgse-0.17.2/libs/cgse-core/service_registry.db-wal +0 -0
- cgse-0.17.2/libs/cgse-core/src/egse/async_control.py +0 -1085
- cgse-0.17.2/libs/cgse-core/src/egse/async_control_claude.py +0 -807
- cgse-0.17.2/libs/cgse-core/src/egse/confman/confman_acs.py +0 -35
- cgse-0.17.2/libs/cgse-core/src/egse/metricshub/server.py +0 -271
- cgse-0.17.2/libs/cgse-core/src/egse/notifyhub/test.py +0 -303
- cgse-0.17.2/libs/cgse-core/tests/fixtures/log_cs.start.out +0 -13
- cgse-0.17.2/libs/cgse-core/tests/marimo/intro.py +0 -116
- cgse-0.17.2/libs/cgse-core/tests/simple_server.py +0 -135
- cgse-0.17.2/libs/cgse-core/tests/test_async_control.py +0 -68
- cgse-0.17.2/libs/cgse-core/tests/test_proxy.py +0 -16
- cgse-0.17.2/projects/generic/keithley-tempcontrol/justfile +0 -25
- cgse-0.17.2/projects/generic/keithley-tempcontrol/service_registry.db +0 -0
- cgse-0.17.2/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_acs.py +0 -3
- cgse-0.17.2/projects/generic/keithley-tempcontrol/tests/script_daq6510_central_heating.py +0 -53
- cgse-0.17.2/projects/generic/keithley-tempcontrol/tests/script_plot_readings.py +0 -60
- cgse-0.17.2/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_sim.py +0 -252
- cgse-0.17.2/projects/generic/symetrie-hexapod/src/symetrie_hexapod/settings.yaml +0 -15
- cgse-0.17.2/projects/generic/symetrie-hexapod/tests/test_puna_cs.py +0 -12
- cgse-0.17.2/scratch/advanced-process-monitoring.py +0 -111
- cgse-0.17.2/scratch/live-process-monitoring.py +0 -67
- cgse-0.17.2/scratch/match-case.py +0 -41
- cgse-0.17.2/scratch/mock-version.py +0 -3
- cgse-0.17.2/scratch/processes.json +0 -7680
- cgse-0.17.2/scratch/simple-process-monitoring.py +0 -72
- cgse-0.17.2/scratch/test_version_behavior.py +0 -35
- cgse-0.17.2/scratch/understanding-the-mocking-library.py +0 -82
- cgse-0.17.2/scratch/understanding_the_with_statement.py +0 -37
- cgse-0.17.2/service_registry.db +0 -0
- cgse-0.17.2/test_service_registry.db +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/.env.example +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/.github/workflows/ruff-format-check.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/.gitignore +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/README.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/bump.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/conftest.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/api/bits.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/api/calibration.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/api/command.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/api/config.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/api/control.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/api/counter.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/api/decorators.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/api/device.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/api/dicts.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/api/dummy.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/api/env.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/api/exceptions.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/api/heartbeat.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/api/hk.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/api/index.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/api/listener.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/api/metrics.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/api/mixin.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/api/monitoring.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/api/observer.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/api/obsid.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/api/persistence.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/api/plugin.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/api/process.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/api/reload.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/api/settings.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/api/setup.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/api/system.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/custom_theme/main.html +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/dev_guide/coding_style.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/dev_guide/docs.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/dev_guide/dotenv.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/dev_guide/index.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/dev_guide/installation.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/dev_guide/monitoring.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/dev_guide/monorepo.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/dev_guide/nox.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/dev_guide/plugins.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/dev_guide/project-configuration.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/dev_guide/unit_testing.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/dev_guide/uv.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/dev_guide/versioning.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/getting_started.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/help.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/images/cli-cgse.png +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/images/github-fork-clone-dark.png +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/images/github-fork-clone.png +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/images/grafana-queries.png +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/images/icons/cgse-logo-blue.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/images/icons/cgse-logo.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/index.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/initialize.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/libs/cgse-common/images/load_methods.png +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/libs/cgse-common/index.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/libs/cgse-common/settings.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/libs/cgse-common/setup.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/libs/cgse-coordinates/index.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/libs/cgse-core/index.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/libs/cgse-core/notifyhub.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/libs/cgse-core/registry.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/libs/cgse-gui/index.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/libs/index.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/package_list.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/projects/cgse-tools.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/projects/index.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/projects/symetrie-hexapod.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/roadmap.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/stylesheets/custom.css +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/stylesheets/extra.css +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/tutorial.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/user_guide/cli.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/user_guide/env.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/docs/user_guide/index.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/README.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/noxfile.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/cgse_common/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/cgse_common/cgse.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/cgse_common/settings.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/bits.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/calibration.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/config.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/counter.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/decorators.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/device.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/dicts.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/env.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/exceptions.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/heartbeat.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/metrics.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/observer.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/obsid.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/persistence.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/plugin.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/plugins/metrics/influxdb.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/process.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/py.typed +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/randomwalk.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/reload.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/resource.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/response.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/scpi.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/settings.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/settings.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/setup.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/signal.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/state.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/task.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/version.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/src/egse/zmq_ser.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/conftest.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/COPYING +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00028_201028_155259.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00029_201028_155331.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00030_210311_134043.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00080_210917_105245.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00081_210922_142259.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/CSL/conf/SETUP_CSL_00082_210923_094458.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/CSL1/README.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/CSL2/README.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/IAS/README.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/INTA/README.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/LAB23/README.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00027_211119_140441.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00028_211119_160406.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00029_211119_172918.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00030_211122_103604.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/SRON/conf/SETUP_SRON_00031_211123_124900.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/common/telemetry/tm-dictionary-default.csv +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/conf/SETUP_20250114_1519.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/conf/config-file.toml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/data/cal_coeff_1234.csv +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/data/calibration.csv +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/data/calibration.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/data/command.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/data/corrupt.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/data/data-file.txt +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/data/empty_data_file.txt +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/data/empty_yaml_file.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/data/local_settings.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/data/new_local_settings.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/data/test_setup.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/icons/hourglass.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/icons/keyboard.png +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/icons/soap_sponge.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/lib/dev1/shared-lib.so +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/data/lib/dev2/shared-lib.so +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/fixtures/default_env.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/fixtures/helpers.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/scripts/empty_process.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/scripts/handle_sigterm.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/scripts/process_with_children.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/scripts/raise_value_error.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/scripts/void-0.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/scripts/void-1.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/test_bits.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/test_config.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/test_decorators.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/test_device.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/test_env.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/test_fixtures.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/test_hk.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/test_influxdb_plugin.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/test_log.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/test_metrics.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/test_plugin.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/test_process.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/test_resource.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/test_response.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/test_settings.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/test_setup.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/test_signal.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/test_socketdevice.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/test_state.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/test_system.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/test_task.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/test_version.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-common/tests/test_zmq_ser.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-coordinates/README.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-coordinates/src/cgse_coordinates/__init__.py +0 -0
- /cgse-0.17.2/identifier.sqlite → /cgse-0.17.4/libs/cgse-coordinates/src/cgse_coordinates/settings.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-coordinates/tests/test_ref_model.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/README.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/cgse_core/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/cgse_core/_start.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/cgse_core/_status.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/cgse_core/cgse_explore.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/cgse_core/services.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/cgse_core/settings.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/_setup_core.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/command.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/confman/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/confman/__main__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/confman/confman.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/confman/confman_cs.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/connect.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/icons/busy.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/icons/operational-mode.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/icons/pm_ui.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/icons/simulator-mode.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/icons/start-process-button.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/icons/stop-process-button.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/icons/user-interface.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/listener.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/logger/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/logger/__main__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/logger/log_cs.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/mixin.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/monitoring.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/notifyhub/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/notifyhub/client.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/notifyhub/event.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/notifyhub/server.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/notifyhub/services.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/procman/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/procman/procman.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/procman/procman_protocol.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/protocol.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/proxy.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/registry/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/registry/backend.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/registry/service.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/services.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/services.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/storage/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/storage/__main__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/storage/persistence.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/storage/storage.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/src/egse/storage/storage_cs.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/tests/conftest.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/tests/data/local_settings.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/tests/fixtures/default_env.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/tests/fixtures/helpers.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/tests/script_subscribe_to_notifyhub.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/tests/script_test_async_registry_client.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/tests/script_test_registry_client_server.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/tests/script_test_service_registry_server.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/tests/script_test_sync_registry_client.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/tests/services.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/tests/stress_test_registry_server.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/tests/test_client_server_interaction.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/tests/test_cm_cs.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/tests/test_command.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/tests/test_confman_setups.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/tests/test_control.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/tests/test_dummy.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/tests/test_event_notification.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/tests/test_extensions.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/tests/test_listener.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/tests/test_mixin.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/tests/test_notify_hub.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/tests/test_protocol.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/tests/test_registry_backend.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/tests/test_registry_service.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/tests/test_server_running.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/tests/test_server_running_with_fixture.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/tests/test_settings_core.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-core/tests/test_zmq_microservice.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/README.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/buttons.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-start.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/aeu-cs-stop.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/aeu-cs.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-started.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/aeu_cs-stopped.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/aeu_cs.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/alert.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/arrow-double-left.png +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/arrow-double-right.png +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/arrow-up.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/backward.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/busy.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/cleaning.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/color-scheme.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/cs-connected-alert.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/cs-connected-disabled.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/cs-connected.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/cs-not-connected.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/double-left-arrow.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/double-right-arrow.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/erase-disabled.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/erase.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/fitsgen-start.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/fitsgen-stop.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/fitsgen.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/forward.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/fov-hk-start.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/fov-hk-stop.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/fov-hk.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/front-desk.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/home-actioned.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/home-disabled.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/home.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/info.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/invalid.png +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/led-green.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/led-grey.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/led-orange.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/led-red.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/led-square-green.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/led-square-grey.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/led-square-orange.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/led-square-red.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-green.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/limit-switch-all-red.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el+.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/limit-switch-el-.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/location-marker.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/logo-dpu.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/logo-gimbal.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/logo-huber.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/logo-ogse.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/logo-puna.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/logo-tcs.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/logo-zonda.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/maximize.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/meter.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/more.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-start.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk-stop.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/n-fee-hk.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/observing-off.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/observing-on.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.png +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/open-document-hdf5.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/ops-mode.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/play-green.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/plugged-disabled.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/plugged.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/pm_ui.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/power-button-green.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/power-button-red.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/power-button.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/radar.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/radioactive.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/reload.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/remote-control-off.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/remote-control-on.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/repeat-blue.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/repeat.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/settings.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/shrink.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/shutter.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/sign-off.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/sign-on.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/sim-mode.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/small-buttons-go.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/small-buttons-minus.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/small-buttons-plus.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/sponge.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/start-button-disabled.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/start-button.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/stop-button-disabled.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/stop-button.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/stop-red.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/stop.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/switch-disabled-square.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/switch-disabled.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/switch-off-square.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/switch-off.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/switch-on-square.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/switch-on.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/temperature-control.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/th_ui_logo.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/unplugged.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/unvalid.png +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/user-interface.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/vacuum.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/valid.png +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-dark.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/icons/zoom-to-pixel-white.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/led.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/limitswitch.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/states.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/styles/dark.qss +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/styles/default.qss +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/styles.qss +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/libs/cgse-gui/src/egse/gui/switch.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/noxfile.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/overrides/.icons/custom/dbend-dark.svg +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/overrides/.icons/custom/dbend-light.svg +0 -0
- {cgse-0.17.2/libs/cgse-core/src/egse/metricshub → cgse-0.17.4/projects/ariel/ariel-facility/src/ariel_facility}/__init__.py +0 -0
- {cgse-0.17.2/projects/ariel/ariel-tcu/src/ariel_tcu → cgse-0.17.4/projects/ariel/ariel-facility/src/egse/ariel/facility}/__init__.py +0 -0
- {cgse-0.17.2/projects/generic/cgse-tools/src/cgse_tools → cgse-0.17.4/projects/ariel/ariel-tcu/src/ariel_tcu}/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/ariel/ariel-tcu/src/ariel_tcu/cgse_explore.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/ariel/ariel-tcu/src/ariel_tcu/cgse_services.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/ariel/ariel-tcu/src/egse/ariel/tcu/tcu.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/ariel/ariel-tcu/tests/test_tcu.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/ariel/ariel-tcu/tests/test_tcu_cmd_utils.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/cgse-tools/README.md +0 -0
- {cgse-0.17.2/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol → cgse-0.17.4/projects/generic/cgse-tools/src/cgse_tools}/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/cgse-tools/src/cgse_tools/cgse_clock.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/cgse-tools/src/cgse_tools/cgse_commands.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/cgse-tools/src/cgse_tools/cgse_services.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/cgse-tools/src/egse/tools/status.py +0 -0
- {cgse-0.17.2/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol → cgse-0.17.4/projects/generic/digilent/src/digilent}/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/README.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/noxfile.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_cs.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_dev.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_mon.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_protocol.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/src/egse/tempcontrol/keithley/daq6510_sim.py +0 -0
- {cgse-0.17.2/projects/generic/symetrie-hexapod/src/symetrie_hexapod → cgse-0.17.4/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol}/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_explore.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/cgse_services.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/src/keithley_tempcontrol/settings.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/tests/script_daq6510_mon.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/tests/test_adev.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/keithley-tempcontrol/tests/test_dev.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/lakeshore-tempcontrol/README.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_cs.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_devif.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/lakeshore-tempcontrol/src/egse/tempcontrol/lakeshore/lakeshore336_protocol.py +0 -0
- /cgse-0.17.2/projects/plato/plato-hdf5/README.md → /cgse-0.17.4/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_explore.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/cgse_services.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/lakeshore-tempcontrol/src/lakeshore_tempcontrol/settings.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/lakeshore-tempcontrol/tests/test_lakeshore336_simulator.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/symetrie-hexapod/README.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/alpha.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/hexapod_ui.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/joran_ui.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/pmac_regex.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_protocol.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/puna_ui.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/punaplus.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda.yaml +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_devif.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_protocol.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/egse/hexapod/symetrie/zonda_ui.py +0 -0
- /cgse-0.17.2/projects/plato/plato-spw/README.md → /cgse-0.17.4/projects/generic/symetrie-hexapod/src/symetrie_hexapod/__init__.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_explore.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/symetrie-hexapod/src/symetrie_hexapod/cgse_services.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/symetrie-hexapod/tests/test_puna.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/generic/symetrie-hexapod/tests/test_puna_simulator.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/plato/plato-fits/README.md +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/plato/plato-fits/src/egse/plugins/storage/fits.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/plato/plato-hdf5/src/egse/plugins/storage/hdf5.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/projects/plato/plato-spw/src/egse/spw.py +0 -0
- {cgse-0.17.2 → cgse-0.17.4}/ruff.toml +0 -0
|
@@ -8,6 +8,19 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
|
8
8
|
|
|
9
9
|
## [Unreleased]
|
|
10
10
|
|
|
11
|
+
## [0.17.4] - 2026-01-27
|
|
12
|
+
|
|
13
|
+
- Extracting HK from Ariel facility database
|
|
14
|
+
- Re-shuffled hexapod settings
|
|
15
|
+
- Cleaned up cgse-coordinates
|
|
16
|
+
- Maintenance on cgse-core
|
|
17
|
+
- Implementation of Digilent MEASURpoint DT8874
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
## [0.17.3] - 2025-11-29
|
|
21
|
+
|
|
22
|
+
In the previous release, uncommitted and untracked files were released by mistake. This release fixes this. Nothings has been changed with respect of release 0.17.2, except the removal of the uncommitted and untracked files.
|
|
23
|
+
|
|
11
24
|
|
|
12
25
|
## [0.17.2] - 2025-11-28
|
|
13
26
|
|
|
@@ -28,9 +41,9 @@ This release is mainly on maintenance and improvements to the `cgse-common` pack
|
|
|
28
41
|
- Changed the return value of the different `get_version_*()` functions to return "0.0.0" when the version cannot
|
|
29
42
|
be determined. Previously, these functions returned None. [#215]
|
|
30
43
|
- Improvements to `redirect_output_to_log()`: the file can be an absolute path, added a guard to overwrite [#217]
|
|
31
|
-
- A warning message is now logged when you try to read the last few lines from a non-existing file
|
|
44
|
+
- A warning message is now logged when you try to read the last few lines from a non-existing file [#218]
|
|
32
45
|
- InitializationError = InitialisationError, to be conform to the styling guide promoting the use of standard
|
|
33
|
-
American English for code, comments and docs
|
|
46
|
+
American English for code, comments and docs [#218]
|
|
34
47
|
|
|
35
48
|
### Added
|
|
36
49
|
- Added a `from_string()` class method to Settings. This is mainly for testing and when you need to load
|
|
@@ -197,7 +210,9 @@ This release is mainly on maintenance and improvements to the `cgse-common` pack
|
|
|
197
210
|
- Renamed `cgse` subcommands `registry` → `reg`, `notify` → `not`.
|
|
198
211
|
|
|
199
212
|
|
|
200
|
-
[Unreleased]: https://github.com/IvS-KULeuven/cgse/compare/v0.17.
|
|
213
|
+
[Unreleased]: https://github.com/IvS-KULeuven/cgse/compare/v0.17.3...HEAD
|
|
214
|
+
[0.17.3]: https://github.com/IvS-KULeuven/cgse/compare/v0.17.2...v0.17.3
|
|
215
|
+
[0.17.2]: https://github.com/IvS-KULeuven/cgse/compare/v0.17.1...v0.17.2
|
|
201
216
|
[0.17.1]: https://github.com/IvS-KULeuven/cgse/compare/v0.17.0...v0.17.1
|
|
202
217
|
[0.17.0]: https://github.com/IvS-KULeuven/cgse/compare/v0.16.14...v0.17.0
|
|
203
218
|
[0.16.14]: https://github.com/IvS-KULeuven/cgse/compare/v0.16.13...v0.16.14
|
|
@@ -216,6 +231,8 @@ This release is mainly on maintenance and improvements to the `cgse-common` pack
|
|
|
216
231
|
[0.16.1]: https://github.com/IvS-KULeuven/cgse/compare/v0.16.0...v0.16.1
|
|
217
232
|
[0.16.0]: https://github.com/IvS-KULeuven/cgse/compare/v0.15.1...v0.16.0
|
|
218
233
|
|
|
234
|
+
[#219]: https://github.com/IvS-KULeuven/cgse/pull/219
|
|
235
|
+
[#218]: https://github.com/IvS-KULeuven/cgse/pull/218
|
|
219
236
|
[#217]: https://github.com/IvS-KULeuven/cgse/pull/217
|
|
220
237
|
[#216]: https://github.com/IvS-KULeuven/cgse/pull/216
|
|
221
238
|
[#215]: https://github.com/IvS-KULeuven/cgse/pull/215
|
|
@@ -1,26 +1,65 @@
|
|
|
1
|
+
## Making a release
|
|
1
2
|
|
|
2
|
-
|
|
3
|
+
The first thing to do is to properly format your code changes, run:
|
|
3
4
|
|
|
4
|
-
|
|
5
|
+
```bash
|
|
6
|
+
uvx ruff format
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
You should be on the branch with the developments that you want to push and merge the pull request on GitHub before making the release.
|
|
5
10
|
|
|
6
|
-
- run `uvx ruff format`
|
|
7
11
|
- commit all changes with a proper message
|
|
12
|
+
- push changes to `origin`
|
|
13
|
+
- create a pull request (possibly needs a review)
|
|
14
|
+
- merge the pull request
|
|
15
|
+
|
|
16
|
+
When all pull requests that should go into the release are merged, checkout main again and pull all the latest changes:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
git checkout main
|
|
20
|
+
git pull upstream main
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Now, create the release branch: e.g. `release/v0.17.3`
|
|
24
|
+
|
|
25
|
+
- `git checkout -b release/v0.17.3`
|
|
8
26
|
- add all notable changes to the CHANGELOG file
|
|
9
27
|
- fix the links in the headers if needed
|
|
10
28
|
- add links to the different pull requests
|
|
11
29
|
- commit the CHANGELOG file
|
|
12
30
|
- bump the version number: `uv run bump.py [patch|minor|major]`
|
|
13
31
|
- commit all `pyproject.toml` files after the version bump
|
|
14
|
-
- push the changes to
|
|
32
|
+
- push the changes to `origin`
|
|
15
33
|
- create (and merge) a pull request, use the CHANGELOG as description
|
|
34
|
+
|
|
35
|
+
In order to prevent publishing all remaining uncommitted changes and untracked files too, stash all changes and untracked files:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
git stash push -u -m "All development work"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Publish the new release
|
|
42
|
+
|
|
43
|
+
(also check the docs: [Building and publishing packages](https://ivs-kuleuven.github.io/cgse/dev_guide/uv/#building-and-publishing-all-packages))
|
|
44
|
+
|
|
45
|
+
Now, build and publish the packages:
|
|
46
|
+
|
|
16
47
|
- remove the old distributions: `rm -r dist`
|
|
17
48
|
- build the packages: `uv build --all-packages`
|
|
18
49
|
- publish the packages to PyPI: `uv publish --token $UV_PUBLISH_TOKEN`
|
|
19
50
|
|
|
51
|
+
Put back the changes and untracked files:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
git checkout main
|
|
55
|
+
git pull upstream main
|
|
56
|
+
git stash pop
|
|
57
|
+
```
|
|
20
58
|
|
|
21
59
|
## Tag the new release
|
|
22
60
|
|
|
23
61
|
- create a tag for the commit of the bump: `git tag <version number> <commit hash>`, e.g. `git tag v0.16.0 559bbfc`
|
|
62
|
+
- you can find the commit hash with: `git log --oneline`
|
|
24
63
|
- push the tag to upstream: `git push upstream <tag name>`, e.g. `git push upstream v0.16.0`
|
|
25
64
|
|
|
26
65
|
|
|
@@ -51,8 +51,8 @@ class TmDictionaryColumns(str, Enum):
|
|
|
51
51
|
""" # noqa
|
|
52
52
|
|
|
53
53
|
STORAGE_MNEMONIC = "Storage mnemonic"
|
|
54
|
-
CORRECT_HK_NAMES = "
|
|
55
|
-
ORIGINAL_EGSE_HK_NAMES = "Original name in
|
|
54
|
+
CORRECT_HK_NAMES = "CGSE mnemonic"
|
|
55
|
+
ORIGINAL_EGSE_HK_NAMES = "Original name in CGSE"
|
|
56
56
|
SYNOPTICS_ORIGIN = f"Origin of synoptics at {get_site_id()}"
|
|
57
57
|
TIMESTAMP_NAMES = "Name of corresponding timestamp"
|
|
58
58
|
DESCRIPTION = "Description"
|
|
@@ -131,6 +131,14 @@ for handler in root_logger.handlers:
|
|
|
131
131
|
handler.addFilter(NonEGSEFilter())
|
|
132
132
|
handler.addFilter(PackageFilter())
|
|
133
133
|
|
|
134
|
+
try:
|
|
135
|
+
from textual.logging import TextualHandler
|
|
136
|
+
|
|
137
|
+
root_logger.addHandler(TextualHandler())
|
|
138
|
+
except ImportError:
|
|
139
|
+
pass
|
|
140
|
+
|
|
141
|
+
|
|
134
142
|
logger = egse_logger
|
|
135
143
|
|
|
136
144
|
if __name__ == "__main__":
|
|
@@ -17,6 +17,9 @@ from egse.device import DeviceTransport
|
|
|
17
17
|
from egse.log import logger
|
|
18
18
|
from egse.system import type_name
|
|
19
19
|
|
|
20
|
+
SEPARATOR = b"\x03"
|
|
21
|
+
SEPARATOR_STR = SEPARATOR.decode()
|
|
22
|
+
|
|
20
23
|
|
|
21
24
|
class SocketDevice(DeviceConnectionInterface, DeviceTransport):
|
|
22
25
|
"""Base class that implements the socket interface."""
|
|
@@ -33,7 +36,7 @@ class SocketDevice(DeviceConnectionInterface, DeviceTransport):
|
|
|
33
36
|
port: int,
|
|
34
37
|
connect_timeout: float = 3.0,
|
|
35
38
|
read_timeout: float | None = 1.0,
|
|
36
|
-
separator:
|
|
39
|
+
separator: bytes = SEPARATOR,
|
|
37
40
|
):
|
|
38
41
|
super().__init__()
|
|
39
42
|
self.is_connection_open = False
|
|
@@ -92,8 +95,6 @@ class SocketDevice(DeviceConnectionInterface, DeviceTransport):
|
|
|
92
95
|
raise ConnectionError(f"{self.device_name}: socket address info error for {self.hostname}") from exc
|
|
93
96
|
except socket.herror as exc:
|
|
94
97
|
raise ConnectionError(f"{self.device_name}: socket host address error for {self.hostname}") from exc
|
|
95
|
-
except socket.timeout as exc:
|
|
96
|
-
raise TimeoutError(f"{self.device_name}: socket timeout error for {self.hostname}:{self.port}") from exc
|
|
97
98
|
except OSError as exc:
|
|
98
99
|
raise ConnectionError(f"{self.device_name}: OSError caught ({exc}).") from exc
|
|
99
100
|
|
|
@@ -269,7 +270,7 @@ class AsyncSocketDevice(AsyncDeviceInterface, AsyncDeviceTransport):
|
|
|
269
270
|
port: int,
|
|
270
271
|
connect_timeout: float = 3.0,
|
|
271
272
|
read_timeout: float | None = 1.0,
|
|
272
|
-
separator:
|
|
273
|
+
separator: bytes = SEPARATOR,
|
|
273
274
|
):
|
|
274
275
|
super().__init__()
|
|
275
276
|
self.hostname = hostname
|
|
@@ -2283,6 +2283,11 @@ def kebab_to_title(kebab_str: str) -> str:
|
|
|
2283
2283
|
return kebab_str.replace("-", " ").title()
|
|
2284
2284
|
|
|
2285
2285
|
|
|
2286
|
+
def title_to_kebab(title_str: str) -> str:
|
|
2287
|
+
"""Convert Title Case (each word capitalized) to kebab-case"""
|
|
2288
|
+
return title_str.replace(" ", "-").lower()
|
|
2289
|
+
|
|
2290
|
+
|
|
2286
2291
|
def snake_to_title(snake_str: str) -> str:
|
|
2287
2292
|
"""Convert snake_case to Title Case (each word capitalized)"""
|
|
2288
2293
|
return snake_str.replace("_", " ").title()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "cgse-coordinates"
|
|
3
|
-
version = "0.17.
|
|
3
|
+
version = "0.17.4"
|
|
4
4
|
description = "Reference Frames and Coordinate Transofrmations for CGSE"
|
|
5
5
|
authors = [
|
|
6
6
|
{name = "IvS KU Leuven"}
|
|
@@ -28,8 +28,8 @@ dependencies = [
|
|
|
28
28
|
[project.entry-points."cgse.version"]
|
|
29
29
|
cgse-coordinates = 'egse.version:get_version_installed'
|
|
30
30
|
|
|
31
|
-
[project.entry-points."cgse.settings"]
|
|
32
|
-
cgse-coordinates = "cgse_coordinates:settings.yaml"
|
|
31
|
+
#[project.entry-points."cgse.settings"]
|
|
32
|
+
#cgse-coordinates = "cgse_coordinates:settings.yaml"
|
|
33
33
|
|
|
34
34
|
[tool.pytest.ini_options]
|
|
35
35
|
pythonpath = "src"
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import ast
|
|
2
|
+
import logging
|
|
3
|
+
import re
|
|
4
|
+
from typing import Dict
|
|
5
|
+
from typing import List
|
|
6
|
+
from typing import Optional
|
|
7
|
+
from typing import Union
|
|
8
|
+
|
|
9
|
+
import numpy as np
|
|
10
|
+
from egse.setup import navdict
|
|
11
|
+
|
|
12
|
+
logger = logging.getLogger(__name__)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def dict_to_ref_model(model_def: Union[Dict, List]) -> navdict:
|
|
16
|
+
"""Creates a reference frames model from a dictionary or list of reference frame definitions.
|
|
17
|
+
|
|
18
|
+
When a list is provided, the items in the list must be ReferenceFrames.
|
|
19
|
+
|
|
20
|
+
The reference frame definitions are usually read from a YAML file or returned by a Setup, but can also be just
|
|
21
|
+
ReferenceFrame objects.
|
|
22
|
+
|
|
23
|
+
ReferenceFrame definitions have the following format:
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
ReferenceFrame://(<definition>)
|
|
27
|
+
```
|
|
28
|
+
where `<definition>` has the following elements, separated by '` | `':
|
|
29
|
+
* a translation matrix
|
|
30
|
+
* a rotation matrix
|
|
31
|
+
* the name of the reference frame
|
|
32
|
+
* the name of the reference for this reference frame
|
|
33
|
+
* a dictionary of links
|
|
34
|
+
|
|
35
|
+
Args:
|
|
36
|
+
model_def (dict or list): Definition of the reference model.
|
|
37
|
+
|
|
38
|
+
Returns:
|
|
39
|
+
Dictionary representing the reference frames model.
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
ref_model = navdict()
|
|
43
|
+
ref_links = {}
|
|
44
|
+
|
|
45
|
+
from egse.coordinates.reference_frame import ReferenceFrame
|
|
46
|
+
|
|
47
|
+
def create_ref_frame(name, data) -> Union[ReferenceFrame, str]:
|
|
48
|
+
# This is a recursive function that creates a reference frame based on the given data.
|
|
49
|
+
# * When the data is already a ReferenceFrame, it just returns data
|
|
50
|
+
# * When data starts with the special string `ReferenceFrame//`, the data string is parsed
|
|
51
|
+
# and a corresponding ReferenceFrame is returned
|
|
52
|
+
# * When there is no match, the data is returned unaltered.
|
|
53
|
+
#
|
|
54
|
+
# SIDE EFFECT:
|
|
55
|
+
# * In the process, the outer ref-model and ref_links are updated.
|
|
56
|
+
|
|
57
|
+
if isinstance(data, ReferenceFrame):
|
|
58
|
+
return data
|
|
59
|
+
|
|
60
|
+
match = re.match(r"ReferenceFrame//\((.*)\)$", data)
|
|
61
|
+
if not match:
|
|
62
|
+
return data
|
|
63
|
+
|
|
64
|
+
translation, rotation, name, ref_name, links = match[1].split(" | ")
|
|
65
|
+
|
|
66
|
+
# All links are processed later
|
|
67
|
+
|
|
68
|
+
ref_links[name] = ast.literal_eval(links)
|
|
69
|
+
|
|
70
|
+
if ref_name == name == "Master":
|
|
71
|
+
ref_model.add(ref_name, ReferenceFrame.create_master())
|
|
72
|
+
return ref_model["Master"]
|
|
73
|
+
|
|
74
|
+
if ref_name not in ref_model:
|
|
75
|
+
ref_model.add(ref_name, create_ref_frame(ref_name, model_def[ref_name]))
|
|
76
|
+
|
|
77
|
+
ref_frame = ReferenceFrame.from_translation_rotation(
|
|
78
|
+
deserialize_array(translation),
|
|
79
|
+
deserialize_array(rotation),
|
|
80
|
+
name=name,
|
|
81
|
+
reference_frame=ref_model[ref_name],
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
return ref_frame
|
|
85
|
+
|
|
86
|
+
# if the given model_def is a list, turn it into a dict
|
|
87
|
+
|
|
88
|
+
if isinstance(model_def, list):
|
|
89
|
+
model_def = {frame.name: frame for frame in model_def}
|
|
90
|
+
|
|
91
|
+
for key, value in model_def.items():
|
|
92
|
+
if key not in ref_model:
|
|
93
|
+
ref_model.add(key, create_ref_frame(key, value))
|
|
94
|
+
|
|
95
|
+
# Process all the links
|
|
96
|
+
|
|
97
|
+
for ref_name, link_names in ref_links.items():
|
|
98
|
+
ref = ref_model[ref_name]
|
|
99
|
+
for link_name in link_names:
|
|
100
|
+
if link_name not in ref.linked_to:
|
|
101
|
+
ref.add_link(ref_model[link_name])
|
|
102
|
+
|
|
103
|
+
return ref_model
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def ref_model_to_dict(ref_model) -> navdict:
|
|
107
|
+
"""Creates a dictionary with reference frames definitions that define a reference model.
|
|
108
|
+
|
|
109
|
+
Args:
|
|
110
|
+
ref_model: A dictionary representing the reference frames model or a list of reference frames.
|
|
111
|
+
|
|
112
|
+
Returns:
|
|
113
|
+
Dictionary of reference frame definitions.
|
|
114
|
+
"""
|
|
115
|
+
|
|
116
|
+
if isinstance(ref_model, dict):
|
|
117
|
+
ref_model = ref_model.values()
|
|
118
|
+
|
|
119
|
+
# take each key (which is a reference frame) and serialize it
|
|
120
|
+
|
|
121
|
+
model_def = {}
|
|
122
|
+
|
|
123
|
+
for ref in ref_model:
|
|
124
|
+
translation, rotation = ref.get_translation_rotation_vectors()
|
|
125
|
+
links = [ref.name for ref in ref.linked_to]
|
|
126
|
+
model_def[ref.name] = (
|
|
127
|
+
f"ReferenceFrame//("
|
|
128
|
+
f"{serialize_array(translation, precision=6)} | "
|
|
129
|
+
f"{serialize_array(rotation, precision=6)} | "
|
|
130
|
+
f"{ref.name} | "
|
|
131
|
+
f"{ref.reference_frame.name} | "
|
|
132
|
+
f"{links})"
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
return navdict(model_def)
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def serialize_array(arr: Union[np.ndarray, list], precision: int = 4) -> str:
|
|
139
|
+
"""Returns a string representation of a numpy array.
|
|
140
|
+
|
|
141
|
+
>>> serialize_array([1,2,3])
|
|
142
|
+
'[1, 2, 3]'
|
|
143
|
+
>>> serialize_array([[1,2,3], [4,5,6]])
|
|
144
|
+
'[[1, 2, 3], [4, 5, 6]]'
|
|
145
|
+
>>> serialize_array([[1,2.2,3], [4.3,5,6]])
|
|
146
|
+
'[[1.0000, 2.2000, 3.0000], [4.3000, 5.0000, 6.0000]]'
|
|
147
|
+
>>> serialize_array([[1,2.2,3], [4.3,5,6]], precision=2)
|
|
148
|
+
'[[1.00, 2.20, 3.00], [4.30, 5.00, 6.00]]'
|
|
149
|
+
|
|
150
|
+
Args:
|
|
151
|
+
arr: One- or-two dimensional numpy array or list.
|
|
152
|
+
precision (int): number of digits of precision
|
|
153
|
+
Returns:
|
|
154
|
+
A string representing the input array.
|
|
155
|
+
"""
|
|
156
|
+
if isinstance(arr, list):
|
|
157
|
+
arr = np.array(arr)
|
|
158
|
+
msg = np.array2string(
|
|
159
|
+
arr,
|
|
160
|
+
separator=", ",
|
|
161
|
+
suppress_small=True,
|
|
162
|
+
formatter={"float_kind": lambda x: f"{x:.{precision}f}"},
|
|
163
|
+
).replace("\n", "")
|
|
164
|
+
return msg
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
def deserialize_array(arr_str: str) -> Optional[np.ndarray]:
|
|
168
|
+
"""Returns a numpy array from the given string.
|
|
169
|
+
|
|
170
|
+
The input string is interpreted as a one or two-dimensional array, with commas or spaces separating the columns,
|
|
171
|
+
and semicolons separating the rows.
|
|
172
|
+
|
|
173
|
+
>>> deserialize_array('1,2,3')
|
|
174
|
+
array([1, 2, 3])
|
|
175
|
+
>>> deserialize_array('1 2 3')
|
|
176
|
+
array([1, 2, 3])
|
|
177
|
+
>>> deserialize_array('1,2,3;4,5,6')
|
|
178
|
+
array([[1, 2, 3],
|
|
179
|
+
[4, 5, 6]])
|
|
180
|
+
>>> deserialize_array("[[1,2,3], [4,5,6]]")
|
|
181
|
+
array([[1, 2, 3],
|
|
182
|
+
[4, 5, 6]])
|
|
183
|
+
|
|
184
|
+
Args:
|
|
185
|
+
arr_str: String representation of a numpy array.
|
|
186
|
+
|
|
187
|
+
Returns:
|
|
188
|
+
One- or two-dimensional numpy array or `None` when input string cannot be parsed into a numpy array.
|
|
189
|
+
"""
|
|
190
|
+
|
|
191
|
+
import re
|
|
192
|
+
|
|
193
|
+
arr_str = re.sub(r"\],\s*\[", "];[", arr_str)
|
|
194
|
+
try:
|
|
195
|
+
arr = np.array(_convert_from_string(arr_str))
|
|
196
|
+
return arr if ";" in arr_str else arr.flatten()
|
|
197
|
+
except ValueError as exc:
|
|
198
|
+
logger.error(f"Input string could not be parsed into a numpy array: {exc}")
|
|
199
|
+
return None
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
def _convert_from_string(data: str) -> list[list]:
|
|
203
|
+
# This function was copied from:
|
|
204
|
+
# https://github.com/numpy/numpy/blob/v1.19.0/numpy/matrixlib/defmatrix.py#L14
|
|
205
|
+
# We include the function here because the np.matrix class is deprecated and will be removed.
|
|
206
|
+
# This function is what we actually needed from np.matrix.
|
|
207
|
+
|
|
208
|
+
# This function can be replaced with np.fromstring()
|
|
209
|
+
|
|
210
|
+
for char in "[]":
|
|
211
|
+
data = data.replace(char, "")
|
|
212
|
+
|
|
213
|
+
rows = data.split(";")
|
|
214
|
+
new_data = []
|
|
215
|
+
count = 0
|
|
216
|
+
for row in rows:
|
|
217
|
+
trow = row.split(",")
|
|
218
|
+
new_row = []
|
|
219
|
+
for col in trow:
|
|
220
|
+
temp = col.split()
|
|
221
|
+
new_row.extend(map(ast.literal_eval, temp))
|
|
222
|
+
if count == 0:
|
|
223
|
+
n_cols = len(new_row)
|
|
224
|
+
elif len(new_row) != n_cols:
|
|
225
|
+
raise ValueError("Rows not the same size.")
|
|
226
|
+
count += 1
|
|
227
|
+
new_data.append(new_row)
|
|
228
|
+
|
|
229
|
+
return new_data
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
|
|
3
|
+
from egse.coordinates.point import Points
|
|
4
|
+
from egse.coordinates.reference_frame import ReferenceFrame
|
|
5
|
+
from egse.setup import Setup, load_setup
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def is_avoidance_ok(hexusr: ReferenceFrame, hexobj: ReferenceFrame, setup: Setup = None, verbose: bool = False):
|
|
9
|
+
"""Checks whether the FPA is outside the avoidance volume around L6.
|
|
10
|
+
|
|
11
|
+
This function is used to verify that a requested movement of the PUNA hexapod will not cause the FPA to enter the
|
|
12
|
+
avoidance volume around L6.
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
Args:
|
|
16
|
+
hexusr (ReferenceFrame): User Reference Frame for the PUNA hexapod. Its xy-plane corresponds to the maximum
|
|
17
|
+
height of FPA_SEN. Its z-axis points away from the FPA.
|
|
18
|
+
hexobj (ReferenceFrame): Object Reference Frame for the PUNA hexapod. Its xy-plane coincides with FPA_SEN. Its
|
|
19
|
+
z-axis points towards L6.
|
|
20
|
+
setup (Setup): Setup object containing the default reference frames.
|
|
21
|
+
verbose (bool): Indicates whether to print verbose output.
|
|
22
|
+
|
|
23
|
+
Returns:
|
|
24
|
+
True if the FPA is outside the avoidance volume around L6; False otherwise.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
setup = setup or load_setup()
|
|
28
|
+
|
|
29
|
+
# A. HORIZONTAL AVOIDANCE
|
|
30
|
+
# Ensure that the centre of L6, materialised by HEX_USR (incl. z-direction security wrt TOU_L6) stays within a
|
|
31
|
+
# given radius of the origin of FPA_SEN
|
|
32
|
+
|
|
33
|
+
# Clearance = the tolerance in every horizontal direction (3 mm; PLATO-KUL-PL-ICD-0001 v1.2)
|
|
34
|
+
clearance_xy = setup.camera.fpa.avoidance.clearance_xy
|
|
35
|
+
|
|
36
|
+
# Projection of the origin of HEX_USR on the xy-plane of FPA_SEN
|
|
37
|
+
l6xy = hexusr.get_origin().express_in(hexobj)[:2]
|
|
38
|
+
|
|
39
|
+
# !! This is a verification of the current situation
|
|
40
|
+
# -> need to replace by a simulation of the forthcoming movement in the building block
|
|
41
|
+
horizontal_check = (l6xy[0] ** 2.0 + l6xy[1] ** 2.0) < clearance_xy * clearance_xy
|
|
42
|
+
|
|
43
|
+
# B. VERTICAL AVOIDANCE
|
|
44
|
+
# Ensure that the CCD never hits L6.
|
|
45
|
+
# - The definition of HEX_USR includes a tolerance below L6 (1.65 mm).
|
|
46
|
+
# - We include a tolerance above FPA_SEN here (0.3 mm).
|
|
47
|
+
# - We define a collection of points to act at the vertices. of the avoidance volume above the FPA
|
|
48
|
+
|
|
49
|
+
# Clearance = vertical uncertainty on the CCD location (0.3 mm; PLATO-KUL-PL-ICD-0001 v1.2)
|
|
50
|
+
clearance_z = setup.camera.fpa.avoidance.clearance_z
|
|
51
|
+
|
|
52
|
+
# Vertices = Points representing the vertices of the avoidance volume above the FPA (60)
|
|
53
|
+
vertices_nb = setup.camera.fpa.avoidance.vertices_nb
|
|
54
|
+
# All vertices are on a circle of radius 'vertices_radius' (100 mm)
|
|
55
|
+
vertices_radius = setup.camera.fpa.avoidance.vertices_radius
|
|
56
|
+
|
|
57
|
+
angles = np.linspace(0, np.pi * 2, vertices_nb, endpoint=False)
|
|
58
|
+
vertices_x = np.cos(angles) * vertices_radius
|
|
59
|
+
vertices_y = np.sin(angles) * vertices_radius
|
|
60
|
+
vertices_z = np.ones_like(angles) * clearance_z
|
|
61
|
+
|
|
62
|
+
# The collection of points defining the avoidance volume around FPA_SEN
|
|
63
|
+
|
|
64
|
+
vert_obj = Points(
|
|
65
|
+
coordinates=np.array([vertices_x, vertices_y, vertices_z]), reference_frame=hexobj, name="vert_obj"
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
# Their coordinates in HEX_USR
|
|
69
|
+
# NB: vert_obj is a Points object, vert_usr is an array
|
|
70
|
+
vert_usr = vert_obj.express_in(hexusr)
|
|
71
|
+
|
|
72
|
+
# !! Same as above : this is verifying the current situation, not the one after a planned movement
|
|
73
|
+
# Verify that all vertices ("protecting" FPA_SEN) are below the x-y plane of HEX_USR ("protecting" L6)
|
|
74
|
+
vertical_check = np.all(vert_usr[2, :] < 0.0)
|
|
75
|
+
|
|
76
|
+
if verbose:
|
|
77
|
+
printdict = {True: "OK", False: "NOT OK"}
|
|
78
|
+
print(f"HORIZONTAL AVOIDANCE: {printdict[horizontal_check]}")
|
|
79
|
+
print(f" VERTICAL AVOIDANCE: {printdict[vertical_check]}")
|
|
80
|
+
|
|
81
|
+
if verbose > 1:
|
|
82
|
+
print(f"Points Coordinates")
|
|
83
|
+
coobj = vert_obj.coordinates
|
|
84
|
+
for i in range(vertices_nb):
|
|
85
|
+
print(f"{i} OBJ {np.round(coobj[:3, i], 6)} --> USR {np.round(vert_usr[:3, i], 6)}")
|
|
86
|
+
vert_z = vert_usr[2, :]
|
|
87
|
+
vert_zi = np.where(vert_z == np.max(vert_z))
|
|
88
|
+
print(f"#vertices at max z : {len(vert_zi[0])}")
|
|
89
|
+
print(f"First one: vertex {vert_zi[0][0]} : {np.round(vert_usr[:3, vert_zi[0][0]], 6)}")
|
|
90
|
+
|
|
91
|
+
return horizontal_check and vertical_check
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"""
|
|
2
|
+
A CSL reference frame model which has knowledge about the CSL Setup, and the PUNA Hexapod model.
|
|
3
|
+
|
|
4
|
+
The CSL Reference Frame Model incorporates a Hexapod PUNA model which is represented by the
|
|
5
|
+
Reference Frames HEXUSR, HEXOBJ, HEXMEC, and HEXPLT. A number of methods are defined here that
|
|
6
|
+
assume these four reference frames exist in the model and behave like a proper hexapod simulator.
|
|
7
|
+
Those methods start with the name `hexapod_`, e.g. `hexapod_goto_zero_position()`.
|
|
8
|
+
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
import numpy as np
|
|
12
|
+
from egse.coordinates.refmodel import ReferenceFrameModel
|
|
13
|
+
|
|
14
|
+
HEXUSR = "hexusr"
|
|
15
|
+
HEXMEC = "hexmec"
|
|
16
|
+
HEXOBJ = "hexobj"
|
|
17
|
+
HEXPLT = "hexplt"
|
|
18
|
+
HEXOBUSR = "hexobusr"
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class CSLReferenceFrameModel(ReferenceFrameModel):
|
|
22
|
+
"""
|
|
23
|
+
The CSL reference Frame Model is a specific reference model that adds convenience methods for manipulating the
|
|
24
|
+
Hexapod PUNA which is part of the overall CSL Setup.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
_DEGREES_DEFAULT = ReferenceFrameModel._DEGREES_DEFAULT
|
|
28
|
+
|
|
29
|
+
def _create_obusr(self) -> None:
|
|
30
|
+
"""Creates the Object User Reference Frame if it does not exist yet."""
|
|
31
|
+
|
|
32
|
+
if HEXOBUSR in self:
|
|
33
|
+
return
|
|
34
|
+
|
|
35
|
+
hexusr = self.get_frame(HEXUSR)
|
|
36
|
+
hexobj = self.get_frame(HEXOBJ)
|
|
37
|
+
|
|
38
|
+
transformation = hexusr.get_active_transformation_to(hexobj)
|
|
39
|
+
|
|
40
|
+
self.add_frame(HEXOBUSR, transformation=transformation, reference=HEXUSR)
|
|
41
|
+
self.add_link(HEXOBUSR, HEXOBJ)
|
|
42
|
+
|
|
43
|
+
def hexapod_move_absolute(self, translation: np.ndarray, rotation: np.ndarray, degrees: bool = _DEGREES_DEFAULT):
|
|
44
|
+
"""Moves/defines the Object Coordinate System expressed in the invariant User Coordinate System.
|
|
45
|
+
|
|
46
|
+
The rotation centre coincides with the Object Coordinates System origin and the movements are controlled with
|
|
47
|
+
translation components first (Tx, Ty, tZ) and then the rotation components (Rx, Ry, Rz).
|
|
48
|
+
|
|
49
|
+
Args:
|
|
50
|
+
translation (np.ndarray): Translation vector.
|
|
51
|
+
rotation (np.ndarray): Rotation vector.
|
|
52
|
+
degrees (bool): Indicates whether the rotation angles are specified in degrees, rather than radians.
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
self.move_absolute_self(HEXOBUSR, translation, rotation, degrees=degrees)
|
|
56
|
+
|
|
57
|
+
def hexapod_move_relative_object(
|
|
58
|
+
self, translation: np.ndarray, rotation: np.ndarray, degrees: bool = _DEGREES_DEFAULT
|
|
59
|
+
):
|
|
60
|
+
"""Moves the object relative to its current position and orientation
|
|
61
|
+
|
|
62
|
+
The relative movement is expressed in the object coordinate system.
|
|
63
|
+
|
|
64
|
+
Args:
|
|
65
|
+
translation (np.ndarray): Translation vector.
|
|
66
|
+
rotation (np.ndarray): Rotation vector.
|
|
67
|
+
degrees (bool): Indicates whether the rotation angles are specified in degrees, rather than radians.
|
|
68
|
+
"""
|
|
69
|
+
|
|
70
|
+
self.move_relative_self(HEXOBJ, translation, rotation, degrees=degrees)
|
|
71
|
+
|
|
72
|
+
def hexapod_move_relative_user(
|
|
73
|
+
self, translation: np.ndarray, rotation: np.ndarray, degrees: bool = _DEGREES_DEFAULT
|
|
74
|
+
) -> None:
|
|
75
|
+
"""Moves the object relative to its current object position and orientation.
|
|
76
|
+
|
|
77
|
+
The relative movement is expressed in the (invariant) user coordinate system.
|
|
78
|
+
|
|
79
|
+
Args:
|
|
80
|
+
translation (np.ndarray): Translation vector.
|
|
81
|
+
rotation (np.ndarray): Rotation vector.
|
|
82
|
+
degrees (bool): Indicates whether the rotation angles are specified in degrees, rather than radians.
|
|
83
|
+
"""
|
|
84
|
+
|
|
85
|
+
self.move_relative_other_local(HEXOBJ, HEXUSR, translation, rotation, degrees=degrees)
|
|
86
|
+
|
|
87
|
+
def hexapod_configure_coordinates(
|
|
88
|
+
self,
|
|
89
|
+
usr_trans: np.ndarray,
|
|
90
|
+
usr_rot: np.ndarray,
|
|
91
|
+
obj_trans: np.ndarray,
|
|
92
|
+
obj_rot: np.ndarray,
|
|
93
|
+
) -> None:
|
|
94
|
+
"""Changes the definition of the User Coordinate System and the Object Coordinate System in the hexapod.
|
|
95
|
+
|
|
96
|
+
Args:
|
|
97
|
+
usr_trans (np.ndarray): Translation vector used to define the User Coordinate System relative to the Machine Coordinate System.
|
|
98
|
+
usr_rot (np.ndarray): Rotation vector used to define the User Coordinate System relative to the Machine Coordinate System.
|
|
99
|
+
obj_trans (np.ndarray): Translation vector used to define the Object Coordinate System relative to the Platform Coordinate System.
|
|
100
|
+
obj_rot (np.ndarray): Rotation vector used to define the Object Coordinate System relative to the Platoform Coordinate System.
|
|
101
|
+
"""
|
|
102
|
+
|
|
103
|
+
self.remove_link(HEXUSR, HEXMEC)
|
|
104
|
+
self.remove_link(HEXOBJ, HEXPLT)
|
|
105
|
+
self.get_frame(HEXUSR).set_translation_rotation(usr_trans, usr_rot)
|
|
106
|
+
self.get_frame(HEXOBJ).set_translation_rotation(obj_trans, obj_rot)
|
|
107
|
+
self.add_link(HEXUSR, HEXMEC)
|
|
108
|
+
self.add_link(HEXOBJ, HEXPLT)
|
|
109
|
+
|
|
110
|
+
def hexapod_goto_zero_position(self) -> None:
|
|
111
|
+
"""Instructs the hexapod to go to its zero position"""
|
|
112
|
+
|
|
113
|
+
self.move_absolute_self(HEXPLT, translation=np.array([0, 0, 0]), rotation=np.array([0, 0, 0]))
|
|
114
|
+
|
|
115
|
+
def hexapod_goto_retracted_position(self) -> None:
|
|
116
|
+
"""Instructs the hexapod to go to its retracted position."""
|
|
117
|
+
|
|
118
|
+
self.move_absolute_self(HEXPLT, translation=np.array([0, 0, -20]), rotation=np.array([0, 0, 0]))
|