learning-loop-node 0.10.9__tar.gz → 0.10.10__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.
Potentially problematic release.
This version of learning-loop-node might be problematic. Click here for more details.
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/PKG-INFO +1 -1
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/detector/outbox.py +15 -11
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/detector/test_client_communication.py +21 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/detector/test_outbox.py +1 -1
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/pyproject.toml +1 -1
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/README.md +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/__init__.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/annotation/__init__.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/annotation/annotator_logic.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/annotation/annotator_node.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/data_classes/__init__.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/data_classes/annotations.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/data_classes/detections.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/data_classes/general.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/data_classes/socket_response.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/data_classes/training.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/data_exchanger.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/detector/__init__.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/detector/detector_logic.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/detector/detector_node.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/detector/inbox_filter/__init__.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/detector/inbox_filter/cam_observation_history.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/detector/inbox_filter/relevance_filter.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/detector/rest/__init__.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/detector/rest/about.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/detector/rest/backdoor_controls.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/detector/rest/detect.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/detector/rest/operation_mode.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/detector/rest/outbox_mode.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/detector/rest/upload.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/examples/novelty_score_updater.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/globals.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/helpers/__init__.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/helpers/environment_reader.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/helpers/gdrive_downloader.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/helpers/log_conf.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/helpers/misc.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/loop_communication.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/node.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/py.typed +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/__init__.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/annotator/__init__.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/annotator/conftest.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/annotator/pytest.ini +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/annotator/test_annotator_node.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/detector/__init__.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/detector/conftest.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/detector/inbox_filter/__init__.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/detector/inbox_filter/test_observation.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/detector/inbox_filter/test_relevance_group.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/detector/inbox_filter/test_unexpected_observations_count.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/detector/pytest.ini +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/detector/test.jpg +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/detector/test_relevance_filter.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/detector/testing_detector.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/general/__init__.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/general/conftest.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/general/pytest.ini +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/general/test_data/file_1.txt +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/general/test_data/file_2.txt +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/general/test_data/model.json +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/general/test_data_classes.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/general/test_downloader.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/general/test_learning_loop_node.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/test_helper.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/trainer/__init__.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/trainer/conftest.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/trainer/pytest.ini +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/trainer/state_helper.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/trainer/states/__init__.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/trainer/states/test_state_cleanup.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/trainer/states/test_state_detecting.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/trainer/states/test_state_download_train_model.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/trainer/states/test_state_prepare.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/trainer/states/test_state_sync_confusion_matrix.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/trainer/states/test_state_train.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/trainer/states/test_state_upload_detections.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/trainer/states/test_state_upload_model.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/trainer/test_errors.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/trainer/test_trainer_states.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/trainer/testing_trainer_logic.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/trainer/__init__.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/trainer/downloader.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/trainer/exceptions.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/trainer/executor.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/trainer/io_helpers.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/trainer/rest/__init__.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/trainer/rest/backdoor_controls.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/trainer/rest/controls.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/trainer/test_executor.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/trainer/trainer_logic.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/trainer/trainer_logic_generic.py +0 -0
- {learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/trainer/trainer_node.py +0 -0
{learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/detector/outbox.py
RENAMED
|
@@ -14,9 +14,9 @@ from multiprocessing import Event
|
|
|
14
14
|
from multiprocessing.synchronize import Event as SyncEvent
|
|
15
15
|
from typing import List, Optional, Tuple, Union
|
|
16
16
|
|
|
17
|
+
import aiohttp
|
|
17
18
|
import PIL
|
|
18
19
|
import PIL.Image # type: ignore
|
|
19
|
-
import requests
|
|
20
20
|
from fastapi.encoders import jsonable_encoder
|
|
21
21
|
|
|
22
22
|
from ..data_classes import Detections
|
|
@@ -64,7 +64,10 @@ class Outbox():
|
|
|
64
64
|
detections = Detections()
|
|
65
65
|
if not tags:
|
|
66
66
|
tags = []
|
|
67
|
-
identifier = datetime.now().isoformat(sep='_', timespec='
|
|
67
|
+
identifier = datetime.now().isoformat(sep='_', timespec='microseconds')
|
|
68
|
+
if os.path.exists(self.path + '/' + identifier):
|
|
69
|
+
self.log.error('Directory with identifier %s already exists', identifier)
|
|
70
|
+
return
|
|
68
71
|
tmp = f'{GLOBALS.data_folder}/tmp/{identifier}'
|
|
69
72
|
detections.tags = tags
|
|
70
73
|
detections.date = identifier
|
|
@@ -97,11 +100,11 @@ class Outbox():
|
|
|
97
100
|
self.log.info('continuous upload started')
|
|
98
101
|
assert self.shutdown_event is not None
|
|
99
102
|
while not self.shutdown_event.is_set():
|
|
100
|
-
self.upload()
|
|
103
|
+
await self.upload()
|
|
101
104
|
await asyncio.sleep(5)
|
|
102
105
|
self.log.info('continuous upload ended')
|
|
103
106
|
|
|
104
|
-
def upload(self):
|
|
107
|
+
async def upload(self):
|
|
105
108
|
items = self.get_data_files()
|
|
106
109
|
if not items:
|
|
107
110
|
self.log.debug('No images found to upload')
|
|
@@ -113,11 +116,11 @@ class Outbox():
|
|
|
113
116
|
if self.shutdown_event.is_set():
|
|
114
117
|
break
|
|
115
118
|
try:
|
|
116
|
-
self._upload_batch(batch_items)
|
|
119
|
+
await self._upload_batch(batch_items)
|
|
117
120
|
except Exception:
|
|
118
121
|
self.log.exception('Could not upload files')
|
|
119
122
|
|
|
120
|
-
def _upload_batch(self, items: List[str]):
|
|
123
|
+
async def _upload_batch(self, items: List[str]):
|
|
121
124
|
|
|
122
125
|
# NOTE: keys are not relevant for the server, but using a fixed key like 'files'
|
|
123
126
|
# results in a post failure on the first run of the test in a docker environment (WTF)
|
|
@@ -127,7 +130,8 @@ class Outbox():
|
|
|
127
130
|
data += [('files', open(f'{item}/image.jpg', 'rb')) for item in items]
|
|
128
131
|
|
|
129
132
|
try:
|
|
130
|
-
|
|
133
|
+
async with aiohttp.ClientSession() as session:
|
|
134
|
+
response = await session.post(self.target_uri, data=data, timeout=self.UPLOAD_TIMEOUT_S)
|
|
131
135
|
except Exception:
|
|
132
136
|
self.log.exception('Could not upload images')
|
|
133
137
|
return
|
|
@@ -136,21 +140,21 @@ class Outbox():
|
|
|
136
140
|
for _, file in data:
|
|
137
141
|
file.close()
|
|
138
142
|
|
|
139
|
-
if response.
|
|
143
|
+
if response.status == 200:
|
|
140
144
|
self.upload_counter += len(items)
|
|
141
145
|
for item in items:
|
|
142
146
|
shutil.rmtree(item, ignore_errors=True)
|
|
143
147
|
self.log.info('Uploaded %s images successfully', len(items))
|
|
144
148
|
|
|
145
|
-
elif response.
|
|
149
|
+
elif response.status == 422:
|
|
146
150
|
if len(items) == 1:
|
|
147
151
|
self.log.error('Broken content in image: %s\n Skipping.', items[0])
|
|
148
152
|
shutil.rmtree(items[0], ignore_errors=True)
|
|
149
153
|
return
|
|
150
154
|
|
|
151
155
|
self.log.exception('Broken content in batch. Splitting and retrying')
|
|
152
|
-
self._upload_batch(items[:len(items)//2])
|
|
153
|
-
self._upload_batch(items[len(items)//2:])
|
|
156
|
+
await self._upload_batch(items[:len(items)//2])
|
|
157
|
+
await self._upload_batch(items[len(items)//2:])
|
|
154
158
|
else:
|
|
155
159
|
self.log.error('Could not upload images: %s', response.content)
|
|
156
160
|
|
|
@@ -121,3 +121,24 @@ async def test_rest_outbox_mode(test_detector_node: DetectorNode):
|
|
|
121
121
|
check_switch_to_mode('stopped')
|
|
122
122
|
check_switch_to_mode('continuous_upload')
|
|
123
123
|
check_switch_to_mode('stopped')
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
async def test_api_responsive_during_large_upload(test_detector_node: DetectorNode):
|
|
127
|
+
assert len(get_outbox_files(test_detector_node.outbox)) == 0
|
|
128
|
+
|
|
129
|
+
with open(test_image_path, 'rb') as f:
|
|
130
|
+
image_bytes = f.read()
|
|
131
|
+
|
|
132
|
+
for _ in range(100):
|
|
133
|
+
test_detector_node.outbox.save(image_bytes)
|
|
134
|
+
|
|
135
|
+
outbox_size_early = len(get_outbox_files(test_detector_node.outbox))
|
|
136
|
+
await asyncio.sleep(5) # NOTE: we wait 5 seconds because the continuous upload is running every 5 seconds
|
|
137
|
+
|
|
138
|
+
# check if api is still responsive
|
|
139
|
+
response = requests.get(f'http://localhost:{GLOBALS.detector_port}/outbox_mode', timeout=2)
|
|
140
|
+
assert response.status_code == 200
|
|
141
|
+
|
|
142
|
+
await asyncio.sleep(5)
|
|
143
|
+
outbox_size_late = len(get_outbox_files(test_detector_node.outbox))
|
|
144
|
+
assert outbox_size_early > outbox_size_late > 0, 'The outbox should have been partially emptied.'
|
|
@@ -52,7 +52,7 @@ async def test_outbox_upload_is_successful(test_outbox: Outbox):
|
|
|
52
52
|
await asyncio.sleep(1)
|
|
53
53
|
test_outbox.save(get_test_image_binary())
|
|
54
54
|
assert await wait_for_outbox_count(test_outbox, 2)
|
|
55
|
-
test_outbox.upload()
|
|
55
|
+
await test_outbox.upload()
|
|
56
56
|
assert await wait_for_outbox_count(test_outbox, 0)
|
|
57
57
|
assert test_outbox.upload_counter == 2
|
|
58
58
|
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/annotation/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/data_classes/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/data_classes/general.py
RENAMED
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/data_classes/training.py
RENAMED
|
File without changes
|
{learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/data_exchanger.py
RENAMED
|
File without changes
|
{learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/detector/__init__.py
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.10.9 → learning_loop_node-0.10.10}/learning_loop_node/detector/rest/about.py
RENAMED
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/detector/rest/detect.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/detector/rest/upload.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/helpers/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/helpers/log_conf.py
RENAMED
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/loop_communication.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/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
|
|
File without changes
|
{learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/detector/test.jpg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/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.10.9 → learning_loop_node-0.10.10}/learning_loop_node/tests/test_helper.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/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.10.9 → learning_loop_node-0.10.10}/learning_loop_node/trainer/__init__.py
RENAMED
|
File without changes
|
{learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/trainer/downloader.py
RENAMED
|
File without changes
|
{learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/trainer/exceptions.py
RENAMED
|
File without changes
|
{learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/trainer/executor.py
RENAMED
|
File without changes
|
{learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/trainer/io_helpers.py
RENAMED
|
File without changes
|
{learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/trainer/rest/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/trainer/rest/controls.py
RENAMED
|
File without changes
|
{learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/trainer/test_executor.py
RENAMED
|
File without changes
|
{learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/trainer/trainer_logic.py
RENAMED
|
File without changes
|
|
File without changes
|
{learning_loop_node-0.10.9 → learning_loop_node-0.10.10}/learning_loop_node/trainer/trainer_node.py
RENAMED
|
File without changes
|