From 798fb454ddbb8032144469691b51e6838014d9b3 Mon Sep 17 00:00:00 2001 From: "Dr. Dennis Wittich" Date: Fri, 6 Dec 2024 10:40:37 +0100 Subject: [PATCH] move enums to separate files and module --- .../app_code/annotation_tool.py | 8 +++---- .../tests/test_demo_annotation_tool.py | 6 ++--- learning_loop_node/data_classes/__init__.py | 15 ++++++------- .../data_classes/annotations.py | 12 +--------- learning_loop_node/data_classes/general.py | 9 ++------ learning_loop_node/data_classes/training.py | 22 +------------------ learning_loop_node/detector/detector_node.py | 9 +------- learning_loop_node/detector/outbox.py | 7 +----- .../detector/rest/operation_mode.py | 11 ++-------- learning_loop_node/enums/__init__.py | 6 +++++ learning_loop_node/enums/annotator.py | 11 ++++++++++ learning_loop_node/enums/detector.py | 18 +++++++++++++++ learning_loop_node/enums/general.py | 9 ++++++++ learning_loop_node/enums/trainer.py | 22 +++++++++++++++++++ .../tests/annotator/test_annotator_node.py | 4 ++-- .../tests/general/test_data_classes.py | 3 ++- .../trainer/states/test_state_detecting.py | 2 +- .../states/test_state_download_train_model.py | 2 +- .../trainer/states/test_state_prepare.py | 3 ++- .../test_state_sync_confusion_matrix.py | 2 +- .../tests/trainer/states/test_state_train.py | 2 +- .../states/test_state_upload_detections.py | 3 ++- .../trainer/states/test_state_upload_model.py | 3 ++- .../tests/trainer/test_errors.py | 2 +- .../tests/trainer/test_trainer_states.py | 3 ++- learning_loop_node/trainer/trainer_logic.py | 3 ++- .../trainer/trainer_logic_generic.py | 4 ++-- mock_annotator/app_code/mock_annotator.py | 3 ++- mock_trainer/app_code/mock_trainer_logic.py | 7 +++--- .../app_code/tests/test_mock_trainer.py | 3 ++- 30 files changed, 116 insertions(+), 98 deletions(-) create mode 100644 learning_loop_node/enums/__init__.py create mode 100644 learning_loop_node/enums/annotator.py create mode 100644 learning_loop_node/enums/detector.py create mode 100644 learning_loop_node/enums/general.py create mode 100644 learning_loop_node/enums/trainer.py diff --git a/demo_segmentation_tool/app_code/annotation_tool.py b/demo_segmentation_tool/app_code/annotation_tool.py index 83d1182b..a9458282 100644 --- a/demo_segmentation_tool/app_code/annotation_tool.py +++ b/demo_segmentation_tool/app_code/annotation_tool.py @@ -10,9 +10,8 @@ import numpy as np from learning_loop_node.annotation.annotator_logic import AnnotatorLogic -from learning_loop_node.data_classes import (AnnotationEventType, Point, - SegmentationAnnotation, Shape, - ToolOutput, UserInput) +from learning_loop_node.data_classes import Point, SegmentationAnnotation, Shape, ToolOutput, UserInput +from learning_loop_node.enums import AnnotationEventType KWONLY_SLOTS = {'kw_only': True, 'slots': True} if sys.version_info >= (3, 10) else {} @@ -63,7 +62,8 @@ def create_path(pixel: List[Point]) -> str: class SegmentationTool(AnnotatorLogic): - async def handle_user_input(self, user_input: UserInput, history: History) -> ToolOutput: + # TODO: fix signature + async def handle_user_input(self, user_input: UserInput, history: History) -> ToolOutput: # type: ignore coordinate = user_input.data.coordinate output = ToolOutput(svg="", annotation=None) diff --git a/demo_segmentation_tool/app_code/tests/test_demo_annotation_tool.py b/demo_segmentation_tool/app_code/tests/test_demo_annotation_tool.py index dfdc8723..90292c06 100644 --- a/demo_segmentation_tool/app_code/tests/test_demo_annotation_tool.py +++ b/demo_segmentation_tool/app_code/tests/test_demo_annotation_tool.py @@ -1,7 +1,5 @@ -from learning_loop_node.data_classes import (AnnotationData, - AnnotationEventType, Category, - CategoryType, Context, Point, - UserInput) +from learning_loop_node.data_classes import AnnotationData, Category, Context, Point, UserInput +from learning_loop_node.enums import AnnotationEventType, CategoryType class MockAsyncClient(): # pylint: disable=too-few-public-methods diff --git a/learning_loop_node/data_classes/__init__.py b/learning_loop_node/data_classes/__init__.py index 67c9a50c..aab05cd0 100644 --- a/learning_loop_node/data_classes/__init__.py +++ b/learning_loop_node/data_classes/__init__.py @@ -1,20 +1,19 @@ -from .annotations import AnnotationData, AnnotationEventType, SegmentationAnnotation, ToolOutput, UserInput +from .annotations import AnnotationData, SegmentationAnnotation, ToolOutput, UserInput from .detections import (BoxDetection, ClassificationDetection, Detections, Observation, Point, PointDetection, SegmentationDetection, Shape) -from .general import (AboutResponse, AnnotationNodeStatus, Category, CategoryType, Context, DetectionStatus, - ErrorConfiguration, ModelInformation, ModelVersionResponse, NodeState, NodeStatus) +from .general import (AboutResponse, AnnotationNodeStatus, Category, Context, DetectionStatus, ErrorConfiguration, + ModelInformation, ModelVersionResponse, NodeState, NodeStatus) from .image_metadata import ImageMetadata from .socket_response import SocketResponse -from .training import (Errors, PretrainedModel, TrainerState, Training, TrainingError, TrainingOut, TrainingStateData, - TrainingStatus) +from .training import Errors, PretrainedModel, Training, TrainingError, TrainingOut, TrainingStateData, TrainingStatus __all__ = [ - 'AboutResponse', 'AnnotationData', 'AnnotationEventType', 'SegmentationAnnotation', 'ToolOutput', 'UserInput', + 'AboutResponse', 'AnnotationData', 'SegmentationAnnotation', 'ToolOutput', 'UserInput', 'BoxDetection', 'ClassificationDetection', 'ImageMetadata', 'Observation', 'Point', 'PointDetection', 'SegmentationDetection', 'Shape', 'Detections', - 'AnnotationNodeStatus', 'Category', 'CategoryType', 'Context', 'DetectionStatus', 'ErrorConfiguration', + 'AnnotationNodeStatus', 'Category', 'Context', 'DetectionStatus', 'ErrorConfiguration', 'ModelInformation', 'NodeState', 'NodeStatus', 'ModelVersionResponse', 'SocketResponse', - 'Errors', 'PretrainedModel', 'TrainerState', 'Training', + 'Errors', 'PretrainedModel', 'Training', 'TrainingError', 'TrainingOut', 'TrainingStateData', 'TrainingStatus', ] diff --git a/learning_loop_node/data_classes/annotations.py b/learning_loop_node/data_classes/annotations.py index 194e9879..3dc84b37 100644 --- a/learning_loop_node/data_classes/annotations.py +++ b/learning_loop_node/data_classes/annotations.py @@ -1,24 +1,14 @@ import sys from dataclasses import dataclass -from enum import Enum from typing import Optional, Union +from ..enums import AnnotationEventType from .detections import Point, Shape from .general import Category, Context KWONLY_SLOTS = {'kw_only': True, 'slots': True} if sys.version_info >= (3, 10) else {} -class AnnotationEventType(str, Enum): - LeftMouseDown = 'left_mouse_down' - RightMouseDown = 'right_mouse_down' - MouseMove = 'mouse_move' - LeftMouseUp = 'left_mouse_up' - RightMouseUp = 'right_mouse_up' - KeyUp = 'key_up' - KeyDown = 'key_down' - - @dataclass(**KWONLY_SLOTS) class AnnotationData(): coordinate: Point diff --git a/learning_loop_node/data_classes/general.py b/learning_loop_node/data_classes/general.py index b7b353b8..cbdd686c 100644 --- a/learning_loop_node/data_classes/general.py +++ b/learning_loop_node/data_classes/general.py @@ -8,14 +8,9 @@ from dacite import from_dict -KWONLY_SLOTS = {'kw_only': True, 'slots': True} if sys.version_info >= (3, 10) else {} - +from ..enums import CategoryType -class CategoryType(str, Enum): - Box = 'box' - Point = 'point' - Segmentation = 'segmentation' - Classification = 'classification' +KWONLY_SLOTS = {'kw_only': True, 'slots': True} if sys.version_info >= (3, 10) else {} @dataclass(**KWONLY_SLOTS) diff --git a/learning_loop_node/data_classes/training.py b/learning_loop_node/data_classes/training.py index 42f0d74b..69df8ca2 100644 --- a/learning_loop_node/data_classes/training.py +++ b/learning_loop_node/data_classes/training.py @@ -2,11 +2,11 @@ import sys import time from dataclasses import dataclass, field -from enum import Enum from pathlib import Path from typing import Any, Dict, List, Optional from uuid import uuid4 +from ..enums import TrainerState from ..helpers.misc import create_image_folder, create_training_folder # pylint: disable=no-name-in-module from .general import Category, Context @@ -21,26 +21,6 @@ class PretrainedModel(): description: str -class TrainerState(str, Enum): - Idle = 'idle' - Initialized = 'initialized' - Preparing = 'preparing' - DataDownloading = 'data_downloading' - DataDownloaded = 'data_downloaded' - TrainModelDownloading = 'train_model_downloading' - TrainModelDownloaded = 'train_model_downloaded' - TrainingRunning = 'running' - TrainingFinished = 'training_finished' - ConfusionMatrixSyncing = 'confusion_matrix_syncing' - ConfusionMatrixSynced = 'confusion_matrix_synced' - TrainModelUploading = 'train_model_uploading' - TrainModelUploaded = 'train_model_uploaded' - Detecting = 'detecting' - Detected = 'detected' - DetectionUploading = 'detection_uploading' - ReadyForCleanup = 'ready_for_cleanup' - - @dataclass(**KWONLY_SLOTS) class TrainingStatus(): id: str # NOTE this must not be changed, but tests wont detect a change -> update tests! diff --git a/learning_loop_node/detector/detector_node.py b/learning_loop_node/detector/detector_node.py index 65269068..114e09c0 100644 --- a/learning_loop_node/detector/detector_node.py +++ b/learning_loop_node/detector/detector_node.py @@ -5,7 +5,6 @@ import subprocess from dataclasses import asdict from datetime import datetime -from enum import Enum from threading import Thread from typing import Dict, List, Optional @@ -19,6 +18,7 @@ ModelVersionResponse, Shape) from ..data_classes.socket_response import SocketResponse from ..data_exchanger import DataExchanger, DownloadError +from ..enums import OperationMode, VersionMode from ..globals import GLOBALS from ..helpers import environment_reader from ..node import Node @@ -32,13 +32,6 @@ from .rest import operation_mode as rest_mode from .rest import outbox_mode as rest_outbox_mode from .rest import upload as rest_upload -from .rest.operation_mode import OperationMode - - -class VersionMode(str, Enum): - FollowLoop = 'follow_loop' # will follow the loop - SpecificVersion = 'specific_version' # will follow the specific version - Pause = 'pause' # will pause the updates class DetectorNode(Node): diff --git a/learning_loop_node/detector/outbox.py b/learning_loop_node/detector/outbox.py index 201b2457..f4af9fe1 100644 --- a/learning_loop_node/detector/outbox.py +++ b/learning_loop_node/detector/outbox.py @@ -7,7 +7,6 @@ from asyncio import Task from dataclasses import asdict from datetime import datetime -from enum import Enum from glob import glob from io import BufferedReader, TextIOWrapper from multiprocessing import Event @@ -20,15 +19,11 @@ from fastapi.encoders import jsonable_encoder from ..data_classes import ImageMetadata +from ..enums import OutboxMode from ..globals import GLOBALS from ..helpers import environment_reader -class OutboxMode(Enum): - CONTINUOUS_UPLOAD = 'continuous_upload' - STOPPED = 'stopped' - - class Outbox(): def __init__(self) -> None: self.log = logging.getLogger() diff --git a/learning_loop_node/detector/rest/operation_mode.py b/learning_loop_node/detector/rest/operation_mode.py index 7ab74523..0bac5489 100644 --- a/learning_loop_node/detector/rest/operation_mode.py +++ b/learning_loop_node/detector/rest/operation_mode.py @@ -1,24 +1,17 @@ import logging -from enum import Enum from typing import TYPE_CHECKING from fastapi import APIRouter, HTTPException, Request from fastapi.responses import PlainTextResponse +from ...enums import OperationMode + if TYPE_CHECKING: from learning_loop_node.detector.detector_node import DetectorNode router = APIRouter() -class OperationMode(str, Enum): - Startup = 'startup' # used until model is loaded - Idle = 'idle' # will check and perform updates - Detecting = 'detecting' # Blocks updates - -# NOTE: This is only ment to be used by a detector node - - @router.put("/operation_mode") async def put_operation_mode(request: Request): ''' diff --git a/learning_loop_node/enums/__init__.py b/learning_loop_node/enums/__init__.py new file mode 100644 index 00000000..191ca97d --- /dev/null +++ b/learning_loop_node/enums/__init__.py @@ -0,0 +1,6 @@ +from .annotator import AnnotationEventType +from .detector import OperationMode, OutboxMode, VersionMode +from .general import CategoryType +from .trainer import TrainerState + +__all__ = ['VersionMode', 'OperationMode', 'OutboxMode', 'AnnotationEventType', 'CategoryType', 'TrainerState'] diff --git a/learning_loop_node/enums/annotator.py b/learning_loop_node/enums/annotator.py new file mode 100644 index 00000000..add77442 --- /dev/null +++ b/learning_loop_node/enums/annotator.py @@ -0,0 +1,11 @@ +from enum import Enum + + +class AnnotationEventType(str, Enum): + LeftMouseDown = 'left_mouse_down' + RightMouseDown = 'right_mouse_down' + MouseMove = 'mouse_move' + LeftMouseUp = 'left_mouse_up' + RightMouseUp = 'right_mouse_up' + KeyUp = 'key_up' + KeyDown = 'key_down' diff --git a/learning_loop_node/enums/detector.py b/learning_loop_node/enums/detector.py new file mode 100644 index 00000000..a5ed7056 --- /dev/null +++ b/learning_loop_node/enums/detector.py @@ -0,0 +1,18 @@ +from enum import Enum + + +class VersionMode(str, Enum): + FollowLoop = 'follow_loop' # will follow the loop + SpecificVersion = 'specific_version' # will follow the specific version + Pause = 'pause' # will pause the updates + + +class OperationMode(str, Enum): + Startup = 'startup' # used until model is loaded + Idle = 'idle' # will check and perform updates + Detecting = 'detecting' # Blocks updates + + +class OutboxMode(Enum): + CONTINUOUS_UPLOAD = 'continuous_upload' + STOPPED = 'stopped' diff --git a/learning_loop_node/enums/general.py b/learning_loop_node/enums/general.py new file mode 100644 index 00000000..8ae54c75 --- /dev/null +++ b/learning_loop_node/enums/general.py @@ -0,0 +1,9 @@ + +from enum import Enum + + +class CategoryType(str, Enum): + Box = 'box' + Point = 'point' + Segmentation = 'segmentation' + Classification = 'classification' diff --git a/learning_loop_node/enums/trainer.py b/learning_loop_node/enums/trainer.py new file mode 100644 index 00000000..a3932668 --- /dev/null +++ b/learning_loop_node/enums/trainer.py @@ -0,0 +1,22 @@ + +from enum import Enum + + +class TrainerState(str, Enum): + Idle = 'idle' + Initialized = 'initialized' + Preparing = 'preparing' + DataDownloading = 'data_downloading' + DataDownloaded = 'data_downloaded' + TrainModelDownloading = 'train_model_downloading' + TrainModelDownloaded = 'train_model_downloaded' + TrainingRunning = 'running' + TrainingFinished = 'training_finished' + ConfusionMatrixSyncing = 'confusion_matrix_syncing' + ConfusionMatrixSynced = 'confusion_matrix_synced' + TrainModelUploading = 'train_model_uploading' + TrainModelUploaded = 'train_model_uploaded' + Detecting = 'detecting' + Detected = 'detected' + DetectionUploading = 'detection_uploading' + ReadyForCleanup = 'ready_for_cleanup' diff --git a/learning_loop_node/tests/annotator/test_annotator_node.py b/learning_loop_node/tests/annotator/test_annotator_node.py index b5e517db..c6d7ba03 100644 --- a/learning_loop_node/tests/annotator/test_annotator_node.py +++ b/learning_loop_node/tests/annotator/test_annotator_node.py @@ -7,8 +7,8 @@ from ...annotation.annotator_logic import AnnotatorLogic from ...annotation.annotator_node import AnnotatorNode -from ...data_classes import (AnnotationData, AnnotationEventType, Category, CategoryType, Context, Point, ToolOutput, - UserInput) +from ...data_classes import AnnotationData, Category, Context, Point, ToolOutput, UserInput +from ...enums import AnnotationEventType, CategoryType class MockedAnnotatatorLogic(AnnotatorLogic): diff --git a/learning_loop_node/tests/general/test_data_classes.py b/learning_loop_node/tests/general/test_data_classes.py index 83563e33..028050a4 100644 --- a/learning_loop_node/tests/general/test_data_classes.py +++ b/learning_loop_node/tests/general/test_data_classes.py @@ -3,7 +3,8 @@ from dacite import from_dict from fastapi.encoders import jsonable_encoder -from ...data_classes import AnnotationData, AnnotationEventType, Category, Context, Point +from ...data_classes import AnnotationData, Category, Context, Point +from ...enums import AnnotationEventType # Used by all Nodes diff --git a/learning_loop_node/tests/trainer/states/test_state_detecting.py b/learning_loop_node/tests/trainer/states/test_state_detecting.py index 87f3dc08..a6f9caf5 100644 --- a/learning_loop_node/tests/trainer/states/test_state_detecting.py +++ b/learning_loop_node/tests/trainer/states/test_state_detecting.py @@ -1,6 +1,6 @@ import asyncio -from ....data_classes import TrainerState +from ....enums import TrainerState from ....trainer.trainer_logic import TrainerLogic from ...test_helper import get_dummy_detections from ..state_helper import assert_training_state, create_active_training_file diff --git a/learning_loop_node/tests/trainer/states/test_state_download_train_model.py b/learning_loop_node/tests/trainer/states/test_state_download_train_model.py index 2de6c52f..8e822575 100644 --- a/learning_loop_node/tests/trainer/states/test_state_download_train_model.py +++ b/learning_loop_node/tests/trainer/states/test_state_download_train_model.py @@ -2,7 +2,7 @@ import asyncio import os -from ....data_classes import TrainerState +from ....enums import TrainerState from ... import test_helper from ..state_helper import assert_training_state, create_active_training_file from ..testing_trainer_logic import TestingTrainerLogic diff --git a/learning_loop_node/tests/trainer/states/test_state_prepare.py b/learning_loop_node/tests/trainer/states/test_state_prepare.py index 7c926399..3dcd37e4 100644 --- a/learning_loop_node/tests/trainer/states/test_state_prepare.py +++ b/learning_loop_node/tests/trainer/states/test_state_prepare.py @@ -1,6 +1,7 @@ import asyncio -from ....data_classes import Context, TrainerState +from ....data_classes import Context +from ....enums import TrainerState from ....trainer.trainer_logic import TrainerLogic from ..state_helper import assert_training_state, create_active_training_file from ..testing_trainer_logic import TestingTrainerLogic diff --git a/learning_loop_node/tests/trainer/states/test_state_sync_confusion_matrix.py b/learning_loop_node/tests/trainer/states/test_state_sync_confusion_matrix.py index 55b8e9c4..8b44e62b 100644 --- a/learning_loop_node/tests/trainer/states/test_state_sync_confusion_matrix.py +++ b/learning_loop_node/tests/trainer/states/test_state_sync_confusion_matrix.py @@ -3,7 +3,7 @@ from pytest_mock import MockerFixture # pip install pytest-mock -from ....data_classes import TrainerState +from ....enums import TrainerState from ....trainer.trainer_logic import TrainerLogic from ....trainer.trainer_node import TrainerNode from ..state_helper import assert_training_state, create_active_training_file diff --git a/learning_loop_node/tests/trainer/states/test_state_train.py b/learning_loop_node/tests/trainer/states/test_state_train.py index 536923e4..c68939d5 100644 --- a/learning_loop_node/tests/trainer/states/test_state_train.py +++ b/learning_loop_node/tests/trainer/states/test_state_train.py @@ -1,4 +1,4 @@ -from ....data_classes import TrainerState +from ....enums import TrainerState from ...test_helper import condition from ..state_helper import assert_training_state, create_active_training_file from ..testing_trainer_logic import TestingTrainerLogic diff --git a/learning_loop_node/tests/trainer/states/test_state_upload_detections.py b/learning_loop_node/tests/trainer/states/test_state_upload_detections.py index 2b1f2cdb..2ecd4f29 100644 --- a/learning_loop_node/tests/trainer/states/test_state_upload_detections.py +++ b/learning_loop_node/tests/trainer/states/test_state_upload_detections.py @@ -3,7 +3,8 @@ import pytest from dacite import from_dict -from ....data_classes import BoxDetection, Context, Detections, TrainerState +from ....data_classes import BoxDetection, Context, Detections +from ....enums import TrainerState from ....loop_communication import LoopCommunicator from ....trainer.trainer_logic import TrainerLogic from ...test_helper import get_dummy_detections diff --git a/learning_loop_node/tests/trainer/states/test_state_upload_model.py b/learning_loop_node/tests/trainer/states/test_state_upload_model.py index a6744e1f..123fe1d4 100644 --- a/learning_loop_node/tests/trainer/states/test_state_upload_model.py +++ b/learning_loop_node/tests/trainer/states/test_state_upload_model.py @@ -2,7 +2,8 @@ from pytest_mock import MockerFixture -from ....data_classes import Context, TrainerState +from ....data_classes import Context +from ....enums import TrainerState from ....trainer.trainer_logic import TrainerLogic from ..state_helper import assert_training_state, create_active_training_file from ..testing_trainer_logic import TestingTrainerLogic diff --git a/learning_loop_node/tests/trainer/test_errors.py b/learning_loop_node/tests/trainer/test_errors.py index eb2da89a..348af1b1 100644 --- a/learning_loop_node/tests/trainer/test_errors.py +++ b/learning_loop_node/tests/trainer/test_errors.py @@ -3,7 +3,7 @@ import pytest -from ...data_classes import TrainerState +from ...enums import TrainerState from .state_helper import assert_training_state, create_active_training_file from .testing_trainer_logic import TestingTrainerLogic diff --git a/learning_loop_node/tests/trainer/test_trainer_states.py b/learning_loop_node/tests/trainer/test_trainer_states.py index 9910f085..ccd4b498 100644 --- a/learning_loop_node/tests/trainer/test_trainer_states.py +++ b/learning_loop_node/tests/trainer/test_trainer_states.py @@ -1,7 +1,8 @@ from uuid import uuid4 -from ...data_classes import Context, TrainerState, Training +from ...data_classes import Context, Training +from ...enums import TrainerState from ...trainer.io_helpers import LastTrainingIO from ...trainer.trainer_node import TrainerNode from .testing_trainer_logic import TestingTrainerLogic diff --git a/learning_loop_node/trainer/trainer_logic.py b/learning_loop_node/trainer/trainer_logic.py index 9392c0c9..4d2993b1 100644 --- a/learning_loop_node/trainer/trainer_logic.py +++ b/learning_loop_node/trainer/trainer_logic.py @@ -9,7 +9,8 @@ from dacite import from_dict -from ..data_classes import Detections, ModelInformation, TrainerState, TrainingError +from ..data_classes import Detections, ModelInformation, TrainingError +from ..enums import TrainerState from ..helpers.misc import create_image_folder, create_project_folder, images_for_ids, is_valid_uuid4 from .executor import Executor from .trainer_logic_generic import TrainerLogicGeneric diff --git a/learning_loop_node/trainer/trainer_logic_generic.py b/learning_loop_node/trainer/trainer_logic_generic.py index 9cd8d8ff..5b706828 100644 --- a/learning_loop_node/trainer/trainer_logic_generic.py +++ b/learning_loop_node/trainer/trainer_logic_generic.py @@ -10,8 +10,8 @@ from fastapi.encoders import jsonable_encoder -from ..data_classes import (Context, Errors, PretrainedModel, TrainerState, Training, TrainingOut, TrainingStateData, - TrainingStatus) +from ..data_classes import Context, Errors, PretrainedModel, Training, TrainingOut, TrainingStateData, TrainingStatus +from ..enums import TrainerState from ..helpers.misc import create_project_folder, delete_all_training_folders, is_valid_uuid4 from .downloader import TrainingsDownloader from .exceptions import CriticalError, NodeNeedsRestartError diff --git a/mock_annotator/app_code/mock_annotator.py b/mock_annotator/app_code/mock_annotator.py index 8af485ac..8a7c7bb2 100644 --- a/mock_annotator/app_code/mock_annotator.py +++ b/mock_annotator/app_code/mock_annotator.py @@ -5,7 +5,8 @@ from typing import Dict, Optional from learning_loop_node.annotation.annotator_logic import AnnotatorLogic -from learning_loop_node.data_classes import AnnotationEventType, ToolOutput +from learning_loop_node.data_classes import ToolOutput +from learning_loop_node.enums import AnnotationEventType # NOTE: This is a mock annotator tool. It is used for testing purposes only. diff --git a/mock_trainer/app_code/mock_trainer_logic.py b/mock_trainer/app_code/mock_trainer_logic.py index 74439d9e..153c370c 100644 --- a/mock_trainer/app_code/mock_trainer_logic.py +++ b/mock_trainer/app_code/mock_trainer_logic.py @@ -4,9 +4,10 @@ import time from typing import Dict, List, Optional -from learning_loop_node.data_classes import (BoxDetection, CategoryType, ClassificationDetection, Detections, - ErrorConfiguration, ModelInformation, Point, PointDetection, - PretrainedModel, SegmentationDetection, Shape, TrainingStateData) +from learning_loop_node.data_classes import (BoxDetection, ClassificationDetection, Detections, ErrorConfiguration, + ModelInformation, Point, PointDetection, PretrainedModel, + SegmentationDetection, Shape, TrainingStateData) +from learning_loop_node.enums import CategoryType from learning_loop_node.trainer.trainer_logic import TrainerLogic from . import progress_simulator diff --git a/mock_trainer/app_code/tests/test_mock_trainer.py b/mock_trainer/app_code/tests/test_mock_trainer.py index 79b2e087..19990084 100644 --- a/mock_trainer/app_code/tests/test_mock_trainer.py +++ b/mock_trainer/app_code/tests/test_mock_trainer.py @@ -3,7 +3,8 @@ import pytest -from learning_loop_node.data_classes import Context, TrainerState, Training +from learning_loop_node.data_classes import Context, Training +from learning_loop_node.enums import TrainerState from learning_loop_node.globals import GLOBALS from learning_loop_node.trainer.executor import Executor