learning-loop-node 0.18.0__tar.gz → 0.18.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.
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/PKG-INFO +1 -1
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/detector/detector_logic.py +22 -5
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/detector/detector_node.py +12 -13
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/pyproject.toml +1 -1
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/README.md +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/__init__.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/annotation/__init__.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/annotation/annotator_logic.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/annotation/annotator_node.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/data_classes/__init__.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/data_classes/annotation_data.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/data_classes/annotations.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/data_classes/detections.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/data_classes/general.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/data_classes/image_metadata.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/data_classes/socket_response.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/data_classes/training.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/data_exchanger.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/detector/__init__.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/detector/exceptions.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/detector/inbox_filter/__init__.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/detector/inbox_filter/cam_observation_history.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/detector/inbox_filter/relevance_filter.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/detector/outbox.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/detector/rest/__init__.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/detector/rest/about.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/detector/rest/backdoor_controls.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/detector/rest/detect.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/detector/rest/model_version_control.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/detector/rest/operation_mode.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/detector/rest/outbox_mode.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/detector/rest/upload.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/enums/__init__.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/enums/annotator.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/enums/detector.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/enums/general.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/enums/trainer.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/examples/novelty_score_updater.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/globals.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/helpers/__init__.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/helpers/background_tasks.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/helpers/environment_reader.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/helpers/gdrive_downloader.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/helpers/log_conf.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/helpers/misc.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/helpers/run.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/loop_communication.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/node.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/py.typed +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/rest.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/__init__.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/annotator/__init__.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/annotator/conftest.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/annotator/pytest.ini +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/annotator/test_annotator_node.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/detector/__init__.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/detector/conftest.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/detector/inbox_filter/__init__.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/detector/inbox_filter/test_observation.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/detector/inbox_filter/test_relevance_group.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/detector/inbox_filter/test_unexpected_observations_count.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/detector/pytest.ini +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/detector/test.jpg +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/detector/test_client_communication.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/detector/test_detector_node.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/detector/test_outbox.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/detector/test_relevance_filter.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/detector/testing_detector.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/general/__init__.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/general/conftest.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/general/pytest.ini +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/general/test_data/file_1.txt +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/general/test_data/file_2.txt +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/general/test_data/model.json +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/general/test_data_classes.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/general/test_downloader.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/general/test_learning_loop_node.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/test_helper.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/trainer/__init__.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/trainer/conftest.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/trainer/pytest.ini +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/trainer/state_helper.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/trainer/states/__init__.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/trainer/states/test_state_cleanup.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/trainer/states/test_state_detecting.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/trainer/states/test_state_download_train_model.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/trainer/states/test_state_prepare.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/trainer/states/test_state_sync_confusion_matrix.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/trainer/states/test_state_train.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/trainer/states/test_state_upload_detections.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/trainer/states/test_state_upload_model.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/trainer/test_errors.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/trainer/test_trainer_states.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/trainer/testing_trainer_logic.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/trainer/__init__.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/trainer/downloader.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/trainer/exceptions.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/trainer/executor.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/trainer/io_helpers.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/trainer/rest/__init__.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/trainer/rest/backdoor_controls.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/trainer/test_executor.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/trainer/trainer_logic.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/trainer/trainer_logic_generic.py +0 -0
- {learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/trainer/trainer_node.py +0 -0
|
@@ -21,6 +21,12 @@ class DetectorLogic():
|
|
|
21
21
|
self.model_info = None
|
|
22
22
|
|
|
23
23
|
def load_model_info_and_init_model(self):
|
|
24
|
+
"""
|
|
25
|
+
Load model information from disk and initialize the model.
|
|
26
|
+
|
|
27
|
+
The detector node uses a lock to make sure that this is not called
|
|
28
|
+
concurrently with evaluate() or batch_evaluate().
|
|
29
|
+
"""
|
|
24
30
|
logging.info('Loading model from %s', GLOBALS.data_folder)
|
|
25
31
|
self.model_info = ModelInformation.load_from_disk(f'{GLOBALS.data_folder}/model')
|
|
26
32
|
if self.model_info is None:
|
|
@@ -42,21 +48,32 @@ class DetectorLogic():
|
|
|
42
48
|
|
|
43
49
|
@abstractmethod
|
|
44
50
|
def init(self):
|
|
45
|
-
"""
|
|
51
|
+
"""
|
|
52
|
+
Initialize the model.
|
|
53
|
+
|
|
54
|
+
Called when a (new) model was loaded.
|
|
55
|
+
Model information available via `self.model_info`
|
|
56
|
+
The detector node uses a lock to make sure that this is not called
|
|
57
|
+
concurrently with evaluate() or batch_evaluate().
|
|
58
|
+
"""
|
|
46
59
|
|
|
47
60
|
@abstractmethod
|
|
48
61
|
def evaluate(self, image: np.ndarray) -> ImageMetadata:
|
|
49
|
-
"""
|
|
62
|
+
"""
|
|
63
|
+
Evaluate the image and return the detections.
|
|
50
64
|
|
|
51
65
|
Called by the detector node when an image should be evaluated (REST or SocketIO).
|
|
52
66
|
The resulting detections should be stored in the ImageMetadata.
|
|
53
67
|
Tags stored in the ImageMetadata will be uploaded to the learning loop.
|
|
54
|
-
The function should return empty metadata if the detector is not initialized.
|
|
68
|
+
The function should return empty metadata if the detector is not initialized.
|
|
69
|
+
"""
|
|
55
70
|
|
|
56
71
|
@abstractmethod
|
|
57
72
|
def batch_evaluate(self, images: List[np.ndarray]) -> ImagesMetadata:
|
|
58
|
-
"""
|
|
73
|
+
"""
|
|
74
|
+
Evaluate a batch of images and return the detections.
|
|
59
75
|
|
|
60
76
|
The resulting detections per image should be stored in the ImagesMetadata.
|
|
61
77
|
Tags stored in the ImagesMetadata will be uploaded to the learning loop.
|
|
62
|
-
The function should return empty metadata if the detector is not initialized.
|
|
78
|
+
The function should return empty metadata if the detector is not initialized.
|
|
79
|
+
"""
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/detector/detector_node.py
RENAMED
|
@@ -190,13 +190,13 @@ class DetectorNode(Node):
|
|
|
190
190
|
|
|
191
191
|
# simulate startup
|
|
192
192
|
await self.detector_logic.soft_reload()
|
|
193
|
-
self.
|
|
193
|
+
await self._load_model_info_and_init_model()
|
|
194
194
|
self.operation_mode = OperationMode.Idle
|
|
195
195
|
|
|
196
196
|
async def on_startup(self) -> None:
|
|
197
197
|
try:
|
|
198
198
|
self.outbox.ensure_continuous_upload()
|
|
199
|
-
self.
|
|
199
|
+
await self._load_model_info_and_init_model()
|
|
200
200
|
except Exception:
|
|
201
201
|
self.log.exception("error during 'startup'")
|
|
202
202
|
self.operation_mode = OperationMode.Idle
|
|
@@ -217,7 +217,7 @@ class DetectorNode(Node):
|
|
|
217
217
|
# Initialize the Socket.IO server with 20MB buffer size
|
|
218
218
|
self.sio = socketio.AsyncServer(
|
|
219
219
|
async_mode='asgi',
|
|
220
|
-
max_http_buffer_size=
|
|
220
|
+
max_http_buffer_size=64 * 1024 * 1024, # 64 MiB
|
|
221
221
|
)
|
|
222
222
|
# Initialize and mount the ASGI app
|
|
223
223
|
self.sio_app = socketio.ASGIApp(self.sio, socketio_path='/socket.io')
|
|
@@ -522,7 +522,7 @@ class DetectorNode(Node):
|
|
|
522
522
|
self.log.info('Updated symlink for model to %s', os.readlink(model_symlink))
|
|
523
523
|
|
|
524
524
|
try:
|
|
525
|
-
self.
|
|
525
|
+
await self._load_model_info_and_init_model()
|
|
526
526
|
except NodeNeedsRestartError:
|
|
527
527
|
self.log.error('Node needs restart')
|
|
528
528
|
sys.exit(0)
|
|
@@ -535,6 +535,10 @@ class DetectorNode(Node):
|
|
|
535
535
|
await self._sync_status_with_loop()
|
|
536
536
|
# self.reload(reason='new model installed')
|
|
537
537
|
|
|
538
|
+
async def _load_model_info_and_init_model(self) -> None:
|
|
539
|
+
async with self.detection_lock:
|
|
540
|
+
self.detector_logic.load_model_info_and_init_model()
|
|
541
|
+
|
|
538
542
|
# ================================== API Implementations ==================================
|
|
539
543
|
|
|
540
544
|
async def set_operation_mode(self, mode: OperationMode):
|
|
@@ -570,11 +574,8 @@ class DetectorNode(Node):
|
|
|
570
574
|
cares about uploading to the loop and returns the detections as ImageMetadata object.
|
|
571
575
|
"""
|
|
572
576
|
|
|
573
|
-
|
|
574
|
-
try:
|
|
577
|
+
async with self.detection_lock:
|
|
575
578
|
metadata = await run.io_bound(self.detector_logic.evaluate, image)
|
|
576
|
-
finally:
|
|
577
|
-
self.detection_lock.release()
|
|
578
579
|
|
|
579
580
|
metadata.tags.extend(tags)
|
|
580
581
|
metadata.source = source
|
|
@@ -606,14 +607,12 @@ class DetectorNode(Node):
|
|
|
606
607
|
"""
|
|
607
608
|
Processing function for the detector node when a a batch inference is requested via SocketIO.
|
|
608
609
|
|
|
609
|
-
This function infers the detections from all images,
|
|
610
|
+
This function infers the detections from all images,
|
|
611
|
+
cares about uploading to the loop and returns the detections as a list of ImageMetadata.
|
|
610
612
|
"""
|
|
611
613
|
|
|
612
|
-
|
|
613
|
-
try:
|
|
614
|
+
async with self.detection_lock:
|
|
614
615
|
all_detections = await run.io_bound(self.detector_logic.batch_evaluate, images)
|
|
615
|
-
finally:
|
|
616
|
-
self.detection_lock.release()
|
|
617
616
|
|
|
618
617
|
for metadata in all_detections.items:
|
|
619
618
|
metadata.tags.extend(tags)
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/annotation/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/data_classes/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/data_classes/general.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/data_classes/training.py
RENAMED
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/data_exchanger.py
RENAMED
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/detector/__init__.py
RENAMED
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/detector/exceptions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/detector/outbox.py
RENAMED
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/detector/rest/__init__.py
RENAMED
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/detector/rest/about.py
RENAMED
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/detector/rest/detect.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/detector/rest/upload.py
RENAMED
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/enums/__init__.py
RENAMED
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/enums/annotator.py
RENAMED
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/enums/detector.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/helpers/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/helpers/log_conf.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/loop_communication.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/__init__.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
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/detector/pytest.ini
RENAMED
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/detector/test.jpg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/general/__init__.py
RENAMED
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/general/conftest.py
RENAMED
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/general/pytest.ini
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/test_helper.py
RENAMED
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/trainer/__init__.py
RENAMED
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/trainer/conftest.py
RENAMED
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/tests/trainer/pytest.ini
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
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/trainer/__init__.py
RENAMED
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/trainer/downloader.py
RENAMED
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/trainer/exceptions.py
RENAMED
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/trainer/executor.py
RENAMED
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/trainer/io_helpers.py
RENAMED
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/trainer/rest/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/trainer/test_executor.py
RENAMED
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/trainer/trainer_logic.py
RENAMED
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.18.0 → learning_loop_node-0.18.2}/learning_loop_node/trainer/trainer_node.py
RENAMED
|
File without changes
|