bec-server 3.150.0__tar.gz → 3.150.2__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.
- {bec_server-3.150.0 → bec_server-3.150.2}/PKG-INFO +1 -1
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/data_processing/cli/launch.py +1 -4
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/device_server/device_server.py +0 -1
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/file_writer/file_writer_manager.py +1 -1
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/beamline_state_manager.py +0 -2
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/direct_scan_worker.py +0 -1
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scan_manager.py +0 -4
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scan_queue.py +0 -1
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scan_worker.py +0 -1
- {bec_server-3.150.0 → bec_server-3.150.2}/pyproject.toml +1 -1
- bec_server-3.150.0/bec_server/data_processing/image_analysis_service.py +0 -142
- bec_server-3.150.0/tests/tests_data_processing/test_image_analysis_service.py +0 -105
- {bec_server-3.150.0 → bec_server-3.150.2}/.gitignore +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/.zed/debug.json +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/README.md +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/__init__.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/actors/__init__.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/actors/actor.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/actors/builtin_actor_manager.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/actors/manager.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/actors/scan_interlock.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/actors/worker.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/bec_server_utils/__init__.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/bec_server_utils/launch.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/bec_server_utils/service_handler.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/bec_server_utils/subprocess_launch.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/bec_server_utils/tmux_launch.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/data_processing/__init__.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/data_processing/cli/__init__.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/data_processing/dap_server.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/data_processing/dap_service.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/data_processing/dap_service_manager.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/data_processing/lmfit1d_service.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/device_server/__init__.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/device_server/bec_message_handler.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/device_server/cli/__init__.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/device_server/cli/launch.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/device_server/devices/__init__.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/device_server/devices/config_update_handler.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/device_server/devices/device_serializer.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/device_server/devices/devicemanager.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/device_server/friendly_device_exceptions.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/device_server/rpc_handler.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/device_server/tests/__init__.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/device_server/tests/utils.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/file_writer/__init__.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/file_writer/async_writer.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/file_writer/cli/__init__.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/file_writer/cli/launch.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/file_writer/default_writer.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/file_writer/file_writer.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/file_writer/merged_dicts.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/file_writer_plugins/__init__.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/file_writer_plugins/cSAXS.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/procedures/Containerfile.bec_linux_base +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/procedures/Containerfile.requirements +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/procedures/Containerfile.worker +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/procedures/__init__.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/procedures/_dev_runner.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/procedures/builtin_procedures.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/procedures/constants.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/procedures/container_utils.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/procedures/container_worker.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/procedures/manager.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/procedures/oop_worker_base.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/procedures/procedure_registry.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/procedures/protocol.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/procedures/subprocess_worker.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/procedures/worker_base.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_bundler/__init__.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_bundler/bec_emitter.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_bundler/cli/__init__.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_bundler/cli/launch.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_bundler/emitter.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_bundler/scan_bundler.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/__init__.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/cli/__init__.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/cli/launch.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/errors.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/generator_scan_worker.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/instruction_handler.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/path_optimization.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scan_assembler.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scan_guard.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scan_gui_models.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scan_plugins/__init__.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scan_plugins/otf_scan.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scan_server.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scan_stubs.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scans/__init__.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scans/acquire.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scans/cont_line_scan.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scans/fermat_scan.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scans/grid_scan.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scans/hexagonal_scan.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scans/legacy_scans.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scans/line_scan.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scans/line_sweep_scan.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scans/list_scan.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scans/log_scan.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scans/move.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scans/multi_region_grid_scan.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scans/multi_region_line_scan.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scans/position_generators.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scans/round_roi_scan.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scans/round_scan.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scans/scan_actions.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scans/scan_argument_modifier.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scans/scan_base.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scans/scan_components.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scans/scan_modifier.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scans/time_scan.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scans/updated_move.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/tests/__init__.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/tests/fixtures.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/tests/scan_fixtures.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/tests/scan_hook_tests.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/tests/utils.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/types.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scihub/__init__.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scihub/atlas/__init__.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scihub/atlas/atlas_active_client_emitter.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scihub/atlas/atlas_connector.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scihub/atlas/atlas_forwarder.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scihub/atlas/atlas_metadata_handler.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scihub/atlas/config_handler.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scihub/cli/__init__.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scihub/cli/launch.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scihub/scihub.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scihub/service_handler/__init__.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scihub/service_handler/service_handler.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/test/__init__.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/test/actor_test_utils.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/bec_server/test/helpers.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_actors/test_actors.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_bec_server_utils/test_main.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_bec_server_utils/test_service_handler.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_bec_server_utils/test_tmux_launch.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_data_processing/conftest.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_data_processing/test_dap_cli_launch.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_data_processing/test_dap_server.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_data_processing/test_dap_service_manager.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_data_processing/test_lmfit1d_service.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_device_server/conftest.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_device_server/test_config_handler.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_device_server/test_device_instructions.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_device_server/test_device_manager_ds.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_device_server/test_device_serializer.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_device_server/test_device_server.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_device_server/test_device_server_cli_launch.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_device_server/test_rpc_handler.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_file_writer/conftest.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_file_writer/test_async_file_writer.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_file_writer/test_file_writer.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_file_writer/test_file_writer_cli_launch.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_file_writer/test_file_writer_manager.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_bundler/conftest.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_bundler/test_bec_emitter.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_bundler/test_scan_bundler.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_bundler/test_scan_bundler_cli_launch.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/conftest.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/scans_v4/__init__.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/scans_v4/test_acquire.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/scans_v4/test_cont_line_scan.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/scans_v4/test_fermat_scan.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/scans_v4/test_grid_scan.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/scans_v4/test_hexagonal_scan.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/scans_v4/test_line_scan.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/scans_v4/test_line_sweep_scan.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/scans_v4/test_list_scan.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/scans_v4/test_log_scan.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/scans_v4/test_move_scan.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/scans_v4/test_multi_region_grid_scan.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/scans_v4/test_multi_region_line_scan.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/scans_v4/test_position_generators.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/scans_v4/test_relative_scan_return_to_start.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/scans_v4/test_round_roi_scan.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/scans_v4/test_round_scan.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/scans_v4/test_scan_actions.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/scans_v4/test_scan_components.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/scans_v4/test_time_scan.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/scans_v4/test_updated_move_scan.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/test_beamline_state_manager.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/test_builtin_actor_manager.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/test_container_utils.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/test_direct_scan_worker.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/test_generator_scan_worker.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/test_instruction_handler.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/test_legacy_scans.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/test_path_optimization.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/test_procedure_container_worker.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/test_procedures.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/test_scan_argument_modifier.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/test_scan_assembler.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/test_scan_guard.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/test_scan_gui_models.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/test_scan_interlock.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/test_scan_modifier.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/test_scan_server_cli_launch.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/test_scan_server_queue.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/test_scan_server_scan_manager.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/test_scan_stub_status.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/test_scan_stubs.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scan_server/test_scan_worker.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scihub/conftest.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scihub/test_atlas_active_client_emitter.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scihub/test_atlas_config_handler.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scihub/test_atlas_connector.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scihub/test_atlas_forwarder.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scihub/test_atlas_metadata_handler.py +0 -0
- {bec_server-3.150.0 → bec_server-3.150.2}/tests/tests_scihub/test_scihub_cli_launch.py +0 -0
|
@@ -8,7 +8,6 @@ import bec_server.data_processing as data_processing
|
|
|
8
8
|
from bec_lib.bec_service import parse_cmdline_args
|
|
9
9
|
from bec_lib.logger import bec_logger
|
|
10
10
|
from bec_lib.redis_connector import RedisConnector
|
|
11
|
-
from bec_server.data_processing.image_analysis_service import ImageAnalysisService
|
|
12
11
|
from bec_server.data_processing.lmfit1d_service import LmfitService1D
|
|
13
12
|
|
|
14
13
|
logger = bec_logger.logger
|
|
@@ -22,9 +21,7 @@ def main():
|
|
|
22
21
|
_, _, config = parse_cmdline_args()
|
|
23
22
|
|
|
24
23
|
bec_server = data_processing.dap_server.DAPServer(
|
|
25
|
-
config=config,
|
|
26
|
-
connector_cls=RedisConnector,
|
|
27
|
-
provided_services=[LmfitService1D, ImageAnalysisService],
|
|
24
|
+
config=config, connector_cls=RedisConnector, provided_services=[LmfitService1D]
|
|
28
25
|
)
|
|
29
26
|
bec_server.start()
|
|
30
27
|
|
|
@@ -429,7 +429,6 @@ class DeviceServer(BECService):
|
|
|
429
429
|
dev.obj.stop()
|
|
430
430
|
except Exception as exc: # pylint: disable=broad-except
|
|
431
431
|
content = traceback.format_exc()
|
|
432
|
-
logger.error(content)
|
|
433
432
|
error_info = messages.ErrorInfo(
|
|
434
433
|
error_message=content,
|
|
435
434
|
compact_error_message=traceback.format_exc(limit=0),
|
|
@@ -424,7 +424,7 @@ class FileWriterManager(BECService):
|
|
|
424
424
|
# pylint: disable=unused-variable
|
|
425
425
|
except Exception as exc:
|
|
426
426
|
content = traceback.format_exc()
|
|
427
|
-
logger.error(f"Failed to write to file {file_path}.
|
|
427
|
+
logger.error(f"Failed to write to file {file_path}.")
|
|
428
428
|
error_info = messages.ErrorInfo(
|
|
429
429
|
error_message=content,
|
|
430
430
|
compact_error_message=traceback.format_exc(limit=0),
|
|
@@ -6,7 +6,6 @@ from bec_lib import bl_states, messages
|
|
|
6
6
|
from bec_lib.alarm_handler import Alarms
|
|
7
7
|
from bec_lib.devicemanager import DeviceManagerBase
|
|
8
8
|
from bec_lib.endpoints import MessageEndpoints
|
|
9
|
-
from bec_lib.logger import bec_logger
|
|
10
9
|
from bec_lib.messages import ErrorInfo
|
|
11
10
|
from bec_lib.redis_connector import RedisConnector
|
|
12
11
|
|
|
@@ -32,7 +31,6 @@ class BeamlineStateManager:
|
|
|
32
31
|
self.update_states(msg)
|
|
33
32
|
except Exception as exc:
|
|
34
33
|
content = traceback.format_exc()
|
|
35
|
-
bec_logger.logger.error(content)
|
|
36
34
|
info = ErrorInfo(
|
|
37
35
|
exception_type=type(exc).__name__,
|
|
38
36
|
error_message=content,
|
|
@@ -187,7 +187,6 @@ class DirectScanWorker:
|
|
|
187
187
|
exc (Exception): The exception that was raised, which will be included in the alarm information.
|
|
188
188
|
"""
|
|
189
189
|
|
|
190
|
-
logger.error(content)
|
|
191
190
|
error_info = messages.ErrorInfo(
|
|
192
191
|
error_message=content,
|
|
193
192
|
compact_error_message=traceback.format_exc(limit=0),
|
|
@@ -115,9 +115,6 @@ class ScanManager:
|
|
|
115
115
|
for name, scan_cls in members:
|
|
116
116
|
|
|
117
117
|
if not scan_cls.scan_name.isidentifier():
|
|
118
|
-
logger.error(
|
|
119
|
-
f"Invalid scan_name '{scan_cls.scan_name}' for scan class {name}. scan_name must be a valid Python identifier, that is, it can only contain letters, numbers, and underscores, and must not start with a number. Skipping."
|
|
120
|
-
)
|
|
121
118
|
self.parent.connector.raise_alarm(
|
|
122
119
|
severity=Alarms.WARNING,
|
|
123
120
|
info=ErrorInfo(
|
|
@@ -130,7 +127,6 @@ class ScanManager:
|
|
|
130
127
|
continue
|
|
131
128
|
|
|
132
129
|
if scan_cls.scan_name in self.available_scans:
|
|
133
|
-
logger.error(f"{scan_cls.scan_name} already exists. Skipping.")
|
|
134
130
|
self.parent.connector.raise_alarm(
|
|
135
131
|
severity=Alarms.WARNING,
|
|
136
132
|
info=ErrorInfo(
|
|
@@ -80,7 +80,6 @@ class ScanWorker(threading.Thread):
|
|
|
80
80
|
# pylint: disable=broad-except
|
|
81
81
|
except Exception as exc:
|
|
82
82
|
content = traceback.format_exc()
|
|
83
|
-
logger.error(content)
|
|
84
83
|
error_info = messages.ErrorInfo(
|
|
85
84
|
error_message=content,
|
|
86
85
|
compact_error_message=traceback.format_exc(limit=0),
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from enum import Enum
|
|
4
|
-
from typing import TYPE_CHECKING
|
|
5
|
-
|
|
6
|
-
import numpy as np
|
|
7
|
-
from scipy.ndimage import center_of_mass
|
|
8
|
-
from typeguard import typechecked
|
|
9
|
-
|
|
10
|
-
from bec_lib.device_monitor_plugin import DeviceMonitorPlugin
|
|
11
|
-
from bec_lib.logger import bec_logger
|
|
12
|
-
from bec_server.data_processing.dap_service import DAPError, DAPServiceBase
|
|
13
|
-
|
|
14
|
-
if TYPE_CHECKING:
|
|
15
|
-
from bec_lib.client import BECClient
|
|
16
|
-
from bec_lib.device import DeviceBase
|
|
17
|
-
from bec_lib.scan_items import ScanItem
|
|
18
|
-
|
|
19
|
-
logger = bec_logger.logger
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
class ReturnType(str, Enum):
|
|
23
|
-
"""The possible return data types for the image analysis service."""
|
|
24
|
-
|
|
25
|
-
MIN = "min"
|
|
26
|
-
MAX = "max"
|
|
27
|
-
MEAN = "mean"
|
|
28
|
-
MEDIAN = "median"
|
|
29
|
-
STD = "std"
|
|
30
|
-
CENTER_OF_MASS = "center_of_mass"
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
class ImageAnalysisService(DAPServiceBase):
|
|
34
|
-
"""Service for image analysis."""
|
|
35
|
-
|
|
36
|
-
def __init__(self, *args, **kwargs):
|
|
37
|
-
super().__init__(*args, **kwargs)
|
|
38
|
-
self.device_monitor_plugin = DeviceMonitorPlugin(self.client.connector)
|
|
39
|
-
self.data = []
|
|
40
|
-
self.device = None
|
|
41
|
-
self.return_type = None
|
|
42
|
-
|
|
43
|
-
def configure(self, scan_item=None, device=None, images=None, return_type=None, **kwargs):
|
|
44
|
-
# TODO Add type hints for np.ndarray and list[np.ndarray] do not work yet in the signature_serializer
|
|
45
|
-
# This will be addressed in a different MR, issue is created #395
|
|
46
|
-
# scan_item: ScanItem | str = None,
|
|
47
|
-
# device: DeviceBase | str = None,
|
|
48
|
-
# images: np.ndarray | list[np.ndarray] | None = None,
|
|
49
|
-
# **kwargs,
|
|
50
|
-
# ):
|
|
51
|
-
"""Configure the image analysis service. Either provide a scan item and a device which
|
|
52
|
-
has a 2D monitor active, or provide the images directly. If no data is found for the input
|
|
53
|
-
the service will return an empty stream output.
|
|
54
|
-
|
|
55
|
-
Args:
|
|
56
|
-
scan_item: Scan Item to consider for the analysis
|
|
57
|
-
device: The device for the 2D monitor data
|
|
58
|
-
images: Alternatively, you can provide the images directly
|
|
59
|
-
return_type: The type of data to return, can be "min", "max", "mean", "median", "std", "center_of_mass"
|
|
60
|
-
"""
|
|
61
|
-
if return_type is None:
|
|
62
|
-
return_type = ReturnType.CENTER_OF_MASS
|
|
63
|
-
else:
|
|
64
|
-
return_type = ReturnType(return_type)
|
|
65
|
-
self.return_type = return_type
|
|
66
|
-
# If images are provided, use them
|
|
67
|
-
if images is not None:
|
|
68
|
-
if isinstance(images, np.ndarray):
|
|
69
|
-
self.data = [images]
|
|
70
|
-
elif isinstance(images, list) and all(
|
|
71
|
-
isinstance(image, np.ndarray) for image in images
|
|
72
|
-
):
|
|
73
|
-
self.data = images
|
|
74
|
-
return
|
|
75
|
-
# Else if scan item is provided, get the images
|
|
76
|
-
if device is None or scan_item is None:
|
|
77
|
-
raise DAPError(
|
|
78
|
-
f"Either provide a device: {device} and scan_id {scan_item} or images {images}"
|
|
79
|
-
)
|
|
80
|
-
self.device = str(device)
|
|
81
|
-
self.data = self.get_images_for_scan_item(scan_id=scan_item)
|
|
82
|
-
|
|
83
|
-
def get_images_for_scan_item(self, scan_id: str) -> list[np.ndarray]:
|
|
84
|
-
"""Get the data for the scan item."""
|
|
85
|
-
self.scan_id = scan_id
|
|
86
|
-
data = self.device_monitor_plugin.get_data_for_scan(device=self.device, scan=self.scan_id)
|
|
87
|
-
if len(data) == 0:
|
|
88
|
-
logger.warning(f"No data found for scan {scan_id} and device {self.device}")
|
|
89
|
-
return data
|
|
90
|
-
|
|
91
|
-
@typechecked
|
|
92
|
-
def compute_statistics(self, images: list[np.ndarray]) -> dict:
|
|
93
|
-
"""Compute the image analysis.
|
|
94
|
-
|
|
95
|
-
Args:
|
|
96
|
-
images: The images to analyze
|
|
97
|
-
|
|
98
|
-
Returns:
|
|
99
|
-
dict: The statistics
|
|
100
|
-
"""
|
|
101
|
-
stacked_images = np.stack(images, axis=0)
|
|
102
|
-
stats = {
|
|
103
|
-
"min": stacked_images.min(axis=(1, 2)),
|
|
104
|
-
"max": stacked_images.max(axis=(1, 2)),
|
|
105
|
-
"mean": stacked_images.mean(axis=(1, 2)),
|
|
106
|
-
"median": np.median(stacked_images, axis=(1, 2)),
|
|
107
|
-
"std": np.std(stacked_images, axis=(1, 2)),
|
|
108
|
-
"center_of_mass": np.array([center_of_mass(img) for img in images]),
|
|
109
|
-
}
|
|
110
|
-
return stats
|
|
111
|
-
|
|
112
|
-
def process(self):
|
|
113
|
-
"""Process the image analysis."""
|
|
114
|
-
stats = self.compute_statistics(self.data)
|
|
115
|
-
metadata = {"scan_id": self.scan_id, "device": self.device, "stats": stats}
|
|
116
|
-
stream_output = self._compute_stream_output(stats)
|
|
117
|
-
return stream_output, metadata
|
|
118
|
-
|
|
119
|
-
@classmethod
|
|
120
|
-
def get_user_friendly_name(cls, *args, **kwargs):
|
|
121
|
-
"""
|
|
122
|
-
Get the user friendly name for the service.
|
|
123
|
-
"""
|
|
124
|
-
return "image_analysis"
|
|
125
|
-
|
|
126
|
-
def _compute_stream_output(self, stats: dict) -> dict:
|
|
127
|
-
"""
|
|
128
|
-
Compute the stream output from the statistics.
|
|
129
|
-
|
|
130
|
-
Args:
|
|
131
|
-
stats (dict): Statistics
|
|
132
|
-
|
|
133
|
-
Returns:
|
|
134
|
-
dict: Stream output
|
|
135
|
-
"""
|
|
136
|
-
if self.return_type == ReturnType.CENTER_OF_MASS:
|
|
137
|
-
return {"x": stats["center_of_mass"].T[0], "y": stats["center_of_mass"].T[1]}
|
|
138
|
-
else:
|
|
139
|
-
ret_type = self.return_type.value
|
|
140
|
-
values = stats[ret_type]
|
|
141
|
-
length = len(values)
|
|
142
|
-
return {"x": np.linspace(0, length - 1, length), "y": values}
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
from unittest import mock
|
|
2
|
-
|
|
3
|
-
import numpy as np
|
|
4
|
-
import pytest
|
|
5
|
-
|
|
6
|
-
from bec_server.data_processing.image_analysis_service import (
|
|
7
|
-
DAPError,
|
|
8
|
-
ImageAnalysisService,
|
|
9
|
-
ReturnType,
|
|
10
|
-
)
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
@pytest.fixture
|
|
14
|
-
def image_analysis_service():
|
|
15
|
-
yield ImageAnalysisService(client=mock.MagicMock())
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
def test_image_analysis_configure(image_analysis_service):
|
|
19
|
-
"""Test the configure method of the image analysis service."""
|
|
20
|
-
|
|
21
|
-
# Test with scan item
|
|
22
|
-
scan_item = mock.MagicMock()
|
|
23
|
-
dummy_data = [np.linspace(0, 1, 100) for _ in range(10)]
|
|
24
|
-
scan_item.return_value = "mock_scan_id"
|
|
25
|
-
with mock.patch.object(
|
|
26
|
-
image_analysis_service, "get_images_for_scan_item", return_value=dummy_data
|
|
27
|
-
):
|
|
28
|
-
image_analysis_service.configure(scan_item=scan_item, device="eiger")
|
|
29
|
-
assert image_analysis_service.data == dummy_data
|
|
30
|
-
assert image_analysis_service.device == "eiger"
|
|
31
|
-
assert image_analysis_service.return_type == ReturnType.CENTER_OF_MASS
|
|
32
|
-
# Reset the imageanalysisService
|
|
33
|
-
image_analysis_service.data = []
|
|
34
|
-
image_analysis_service.device = None
|
|
35
|
-
image_analysis_service.return_type = None
|
|
36
|
-
|
|
37
|
-
# Missing device argument
|
|
38
|
-
with pytest.raises(DAPError):
|
|
39
|
-
image_analysis_service.configure(scan_item=scan_item)
|
|
40
|
-
|
|
41
|
-
# Reset the imageanalysisService
|
|
42
|
-
image_analysis_service.data = []
|
|
43
|
-
image_analysis_service.device = None
|
|
44
|
-
image_analysis_service.return_type = None
|
|
45
|
-
|
|
46
|
-
# Missing scan item
|
|
47
|
-
with pytest.raises(DAPError):
|
|
48
|
-
image_analysis_service.configure(device="eiger")
|
|
49
|
-
|
|
50
|
-
# Reset the imageanalysisService
|
|
51
|
-
image_analysis_service.data = []
|
|
52
|
-
image_analysis_service.device = None
|
|
53
|
-
image_analysis_service.return_type = None
|
|
54
|
-
|
|
55
|
-
# Test with images
|
|
56
|
-
image_analysis_service.configure(images=dummy_data)
|
|
57
|
-
assert image_analysis_service.data == dummy_data
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
def test_get_images_for_scan_item(image_analysis_service):
|
|
61
|
-
"""Test the get_images_for_scan_item method of the image analysis service."""
|
|
62
|
-
|
|
63
|
-
dummy_data = [np.linspace(0, 1, 100) for _ in range(10)]
|
|
64
|
-
|
|
65
|
-
with mock.patch.object(
|
|
66
|
-
image_analysis_service.device_monitor_plugin,
|
|
67
|
-
"get_data_for_scan",
|
|
68
|
-
side_effect=[dummy_data, []],
|
|
69
|
-
):
|
|
70
|
-
# Test with existing scan id
|
|
71
|
-
scan_id = "mock_scan_id"
|
|
72
|
-
image_analysis_service.scan_id = scan_id
|
|
73
|
-
data = image_analysis_service.get_images_for_scan_item(scan_id)
|
|
74
|
-
assert data == dummy_data
|
|
75
|
-
assert image_analysis_service.scan_id == scan_id
|
|
76
|
-
|
|
77
|
-
# Test with empty return
|
|
78
|
-
data = image_analysis_service.get_images_for_scan_item(scan_id)
|
|
79
|
-
assert data == []
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
def test_compute_statistics(image_analysis_service):
|
|
83
|
-
"""Test the compute_statistics method of the image analysis service."""
|
|
84
|
-
|
|
85
|
-
dummy_data = [np.zeros((10, 10)), np.ones((10, 10))]
|
|
86
|
-
stats = image_analysis_service.compute_statistics(dummy_data)
|
|
87
|
-
assert stats["min"].shape == (2,)
|
|
88
|
-
assert stats["max"].shape == (2,)
|
|
89
|
-
assert np.isclose(stats["mean"], np.array([0, 1])).all()
|
|
90
|
-
assert np.isclose(stats["min"], np.array([0, 1])).all()
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
def test_get_stream_output(image_analysis_service):
|
|
94
|
-
"""Test the get_stream_output method of the image analysis service."""
|
|
95
|
-
dummy_data = [np.ones((10, 10)), np.ones((10, 10))]
|
|
96
|
-
stats = image_analysis_service.compute_statistics(dummy_data)
|
|
97
|
-
image_analysis_service.return_type = ReturnType.MIN
|
|
98
|
-
stream_output = image_analysis_service._compute_stream_output(stats)
|
|
99
|
-
assert np.isclose(stream_output["x"], np.linspace(0, 1, 2)).all()
|
|
100
|
-
assert (stream_output["y"] == stats["min"]).all()
|
|
101
|
-
# Test center of Mass
|
|
102
|
-
image_analysis_service.return_type = ReturnType.CENTER_OF_MASS
|
|
103
|
-
stream_output = image_analysis_service._compute_stream_output(stats)
|
|
104
|
-
assert (stream_output["x"] == stats["center_of_mass"].T[0]).all()
|
|
105
|
-
assert (stream_output["y"] == stats["center_of_mass"].T[1]).all()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{bec_server-3.150.0 → bec_server-3.150.2}/bec_server/device_server/devices/config_update_handler.py
RENAMED
|
File without changes
|
{bec_server-3.150.0 → bec_server-3.150.2}/bec_server/device_server/devices/device_serializer.py
RENAMED
|
File without changes
|
|
File without changes
|
{bec_server-3.150.0 → bec_server-3.150.2}/bec_server/device_server/friendly_device_exceptions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{bec_server-3.150.0 → bec_server-3.150.2}/bec_server/procedures/Containerfile.bec_linux_base
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scans/multi_region_grid_scan.py
RENAMED
|
File without changes
|
{bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scans/multi_region_line_scan.py
RENAMED
|
File without changes
|
{bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scans/position_generators.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{bec_server-3.150.0 → bec_server-3.150.2}/bec_server/scan_server/scans/scan_argument_modifier.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|