diff --git a/pyproject.toml b/pyproject.toml index aaceea4..a5aaa5d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "zmqruntime" -version = "0.4.1" +version = "0.5.0" description = "Generic ZMQ-based distributed execution framework" authors = [{name = "Tristan Simas", email = "tristan.simas@mail.mcgill.ca"}] license = {text = "MIT"} diff --git a/src/zmqruntime/__init__.py b/src/zmqruntime/__init__.py index 19453a8..f1db076 100644 --- a/src/zmqruntime/__init__.py +++ b/src/zmqruntime/__init__.py @@ -124,8 +124,6 @@ "ViewerBatchMessageWirePayload": "zmqruntime.viewer_protocol", "ViewerBatchWireField": "zmqruntime.viewer_protocol", "ViewerComponentMetadataPayload": "zmqruntime.viewer_protocol", - "ViewerComponentMode": "zmqruntime.viewer_protocol", - "ViewerComponentModeGroups": "zmqruntime.viewer_protocol", "ViewerControlReplyHeader": "zmqruntime.viewer_protocol", "ViewerControlReplyPayload": "zmqruntime.viewer_protocol", "ViewerControlResponseField": "zmqruntime.viewer_protocol", @@ -241,8 +239,6 @@ "ViewerControlReplyHeader", "ViewerControlReplyPayload", "ViewerControlResponseField", - "ViewerComponentMode", - "ViewerComponentModeGroups", "ViewerComponentMetadataPayload", "ViewerProtocolStatus", "ViewerTransportEndpoint", diff --git a/src/zmqruntime/viewer_protocol.py b/src/zmqruntime/viewer_protocol.py index d7922ba..fe271af 100644 --- a/src/zmqruntime/viewer_protocol.py +++ b/src/zmqruntime/viewer_protocol.py @@ -282,41 +282,6 @@ class ViewerSourceSpatialWireField(str, Enum): SOURCE_SPATIAL_SHAPE_YX = "source_spatial_shape_yx" -class ViewerComponentMode(str, Enum): - """Viewer component placement modes shared by stream receivers.""" - - STACK = "stack" - LAYER = "layer" - SLICE = "slice" - WINDOW = "window" - CHANNEL = "channel" - FRAME = "frame" - - -@dataclass(frozen=True) -class ViewerComponentModeGroups: - """Components grouped by viewer placement mode for a display payload.""" - - components_by_mode: Mapping[str, tuple[str, ...]] - unsupported_component_modes: Mapping[str, str] - - def components_for_mode( - self, - mode: ViewerComponentMode | str | Enum, - ) -> tuple[str, ...]: - mode_value = viewer_component_mode_value(mode) - if mode_value not in self.components_by_mode: - raise ValueError(f"Viewer component mode groups missing mode {mode_value!r}.") - return self.components_by_mode[mode_value] - - def require_all_supported(self, context: str) -> None: - if self.unsupported_component_modes: - raise ValueError( - f"Unsupported viewer component modes for {context}: " - f"{dict(self.unsupported_component_modes)!r}." - ) - - ViewerBatchWireField: TypeAlias = ViewerWireField ViewerBatchItemWireField: TypeAlias = ViewerWireField ViewerDisplayConfigWireField: TypeAlias = ViewerWireField @@ -448,45 +413,6 @@ class ViewerBatchDisplayPayload: default_factory=dict ) - def components_for_mode( - self, - mode: ViewerComponentMode | str | Enum, - ) -> tuple[str, ...]: - mode_value = viewer_component_mode_value(mode) - components: list[str] = [] - for component in self.component_order: - if component not in self.component_modes: - raise ValueError( - f"Viewer display payload missing mode for component {component!r}." - ) - if viewer_component_mode_value(self.component_modes[component]) == mode_value: - components.append(component) - return tuple(components) - - def component_mode_groups( - self, - supported_modes: Sequence[ViewerComponentMode | str | Enum], - ) -> ViewerComponentModeGroups: - supported_mode_values = tuple(viewer_component_mode_value(mode) for mode in supported_modes) - components_by_mode: dict[str, list[str]] = {mode: [] for mode in supported_mode_values} - unsupported_component_modes: dict[str, str] = {} - for component in self.component_order: - if component not in self.component_modes: - raise ValueError( - f"Viewer display payload missing mode for component {component!r}." - ) - mode_value = viewer_component_mode_value(self.component_modes[component]) - if mode_value in components_by_mode: - components_by_mode[mode_value].append(component) - else: - unsupported_component_modes[component] = mode_value - return ViewerComponentModeGroups( - components_by_mode={ - mode: tuple(components) for mode, components in components_by_mode.items() - }, - unsupported_component_modes=unsupported_component_modes, - ) - def to_wire_mapping(self) -> dict[str, ViewerWireValue]: payload: dict[str, ViewerWireValue] = { ViewerDisplayConfigWireField.COMPONENT_MODES.value: ViewerWirePayload.mapping( @@ -507,14 +433,6 @@ def to_wire_mapping(self) -> dict[str, ViewerWireValue]: return payload -def viewer_component_mode_value(mode: ViewerComponentMode | str | Enum) -> str: - """Return the canonical wire value for a viewer component mode.""" - - if isinstance(mode, Enum): - return str(mode.value) - return str(mode) - - @dataclass(frozen=True) class ViewerBatchItemPayload: """One item inside a shared viewer batch message.""" diff --git a/tests/test_viewer_protocol.py b/tests/test_viewer_protocol.py index 4a6685d..976f377 100644 --- a/tests/test_viewer_protocol.py +++ b/tests/test_viewer_protocol.py @@ -13,7 +13,6 @@ ViewerBatchMessagePayload, ViewerBatchWireField, ViewerComponentMetadataPayload, - ViewerComponentMode, ViewerDisplayConfigWireField, ViewerImageIntensityControlOptions, ViewerNativeImageIntensityPresentation, @@ -190,10 +189,6 @@ def display_image(self, image_data, metadata) -> None: del image_data, metadata -def test_viewer_component_modes_distinguish_napari_layers_from_plane_slices(): - assert ViewerComponentMode.LAYER.value == "layer" - assert ViewerComponentMode.SLICE.value == "slice" - def test_streaming_server_inheritance_owns_viewer_process_usage(monkeypatch): usage = ProcessResourceUsage(memory_mb=12.5, cpu_percent=3.0) @@ -240,7 +235,7 @@ def test_viewer_batch_message_normalizes_nested_mapping_proxy_to_json_wire(): message = ViewerBatchMessagePayload.from_parts( images=[item], display_payload=ViewerBatchDisplayPayload( - component_modes={"channel": ViewerComponentMode.CHANNEL}, + component_modes={"channel": "channel"}, component_order=("channel",), extra={ ViewerDisplayConfigWireField.IMAGES_DIR: "/tmp/openhcs",