learning-loop-node 0.13.7__py3-none-any.whl → 0.15.0__py3-none-any.whl
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/data_classes/__init__.py +2 -2
- learning_loop_node/data_classes/image_metadata.py +5 -0
- learning_loop_node/data_classes/training.py +3 -2
- learning_loop_node/data_exchanger.py +3 -3
- learning_loop_node/detector/detector_logic.py +8 -5
- learning_loop_node/detector/detector_node.py +105 -44
- learning_loop_node/detector/inbox_filter/relevance_filter.py +11 -9
- learning_loop_node/detector/outbox.py +134 -44
- learning_loop_node/detector/rest/detect.py +3 -3
- learning_loop_node/detector/rest/upload.py +4 -3
- learning_loop_node/helpers/background_tasks.py +78 -0
- learning_loop_node/helpers/run.py +21 -0
- learning_loop_node/node.py +11 -4
- learning_loop_node/tests/annotator/conftest.py +9 -4
- learning_loop_node/tests/annotator/test_annotator_node.py +10 -2
- learning_loop_node/tests/detector/inbox_filter/test_unexpected_observations_count.py +4 -3
- learning_loop_node/tests/detector/test_client_communication.py +1 -23
- learning_loop_node/tests/detector/test_outbox.py +7 -16
- learning_loop_node/tests/detector/test_relevance_filter.py +3 -3
- learning_loop_node/tests/general/conftest.py +8 -2
- learning_loop_node/tests/trainer/conftest.py +2 -2
- learning_loop_node/trainer/trainer_logic_generic.py +16 -4
- {learning_loop_node-0.13.7.dist-info → learning_loop_node-0.15.0.dist-info}/METADATA +35 -38
- {learning_loop_node-0.13.7.dist-info → learning_loop_node-0.15.0.dist-info}/RECORD +25 -23
- {learning_loop_node-0.13.7.dist-info → learning_loop_node-0.15.0.dist-info}/WHEEL +0 -0
|
@@ -30,10 +30,10 @@ async def test_filter_is_used_by_node(test_detector_node: DetectorNode, autouplo
|
|
|
30
30
|
assert test_detector_node.outbox.path.startswith('/tmp')
|
|
31
31
|
assert len(get_outbox_files(test_detector_node.outbox)) == 0
|
|
32
32
|
|
|
33
|
-
image = np.fromfile(file=test_image_path, dtype=np.uint8)
|
|
34
|
-
_ = await test_detector_node.get_detections(image, '00:.....',
|
|
33
|
+
image = bytes(np.fromfile(file=test_image_path, dtype=np.uint8))
|
|
34
|
+
_ = await test_detector_node.get_detections(image, tags=[], camera_id='00:.....', autoupload=autoupload)
|
|
35
35
|
# NOTE adding second images with identical detections
|
|
36
|
-
_ = await test_detector_node.get_detections(image, '00:.....',
|
|
36
|
+
_ = await test_detector_node.get_detections(image, tags=[], camera_id='00:.....', autoupload=autoupload)
|
|
37
37
|
await asyncio.sleep(.5) # files are stored asynchronously
|
|
38
38
|
|
|
39
39
|
assert len(get_outbox_files(test_detector_node.outbox)) == expected_file_count, \
|
|
@@ -2,6 +2,7 @@ import asyncio
|
|
|
2
2
|
import logging
|
|
3
3
|
import os
|
|
4
4
|
import shutil
|
|
5
|
+
import sys
|
|
5
6
|
|
|
6
7
|
import pytest
|
|
7
8
|
|
|
@@ -15,7 +16,12 @@ from ...loop_communication import LoopCommunicator
|
|
|
15
16
|
async def create_project_for_module():
|
|
16
17
|
|
|
17
18
|
loop_communicator = LoopCommunicator()
|
|
18
|
-
|
|
19
|
+
try:
|
|
20
|
+
await loop_communicator.delete("/zauberzeug/projects/pytest_nodelib_general", timeout=10)
|
|
21
|
+
except Exception:
|
|
22
|
+
logging.warning("Failed to delete project pytest_nodelib_general")
|
|
23
|
+
sys.exit(1)
|
|
24
|
+
|
|
19
25
|
await asyncio.sleep(1)
|
|
20
26
|
project_configuration = {
|
|
21
27
|
'project_name': 'pytest_nodelib_general', 'inbox': 0, 'annotate': 0, 'review': 0, 'complete': 3, 'image_style': 'beautiful',
|
|
@@ -23,7 +29,7 @@ async def create_project_for_module():
|
|
|
23
29
|
'trainings': 1, 'box_detections': 3, 'box_annotations': 0}
|
|
24
30
|
assert (await loop_communicator.post("/zauberzeug/projects/generator", json=project_configuration)).status_code == 200
|
|
25
31
|
yield
|
|
26
|
-
await loop_communicator.delete("/zauberzeug/projects/pytest_nodelib_general
|
|
32
|
+
await loop_communicator.delete("/zauberzeug/projects/pytest_nodelib_general", timeout=10)
|
|
27
33
|
await loop_communicator.shutdown()
|
|
28
34
|
|
|
29
35
|
|
|
@@ -35,7 +35,7 @@ async def test_initialized_trainer_node():
|
|
|
35
35
|
'training_number': 0,
|
|
36
36
|
'model_variant': '',
|
|
37
37
|
'hyperparameters': {
|
|
38
|
-
'resolution':
|
|
38
|
+
'resolution': 832,
|
|
39
39
|
'fliplr': 0.5,
|
|
40
40
|
'flipud': 0.5}
|
|
41
41
|
})
|
|
@@ -58,7 +58,7 @@ async def test_initialized_trainer():
|
|
|
58
58
|
'training_number': 0,
|
|
59
59
|
'model_variant': '',
|
|
60
60
|
'hyperparameters': {
|
|
61
|
-
'resolution':
|
|
61
|
+
'resolution': 832,
|
|
62
62
|
'fliplr': 0.5,
|
|
63
63
|
'flipud': 0.5}
|
|
64
64
|
})
|
|
@@ -6,13 +6,25 @@ import sys
|
|
|
6
6
|
import time
|
|
7
7
|
from abc import ABC, abstractmethod
|
|
8
8
|
from dataclasses import asdict
|
|
9
|
-
from typing import TYPE_CHECKING, Callable, Coroutine, Dict, List, Optional
|
|
9
|
+
from typing import TYPE_CHECKING, Any, Callable, Coroutine, Dict, List, Optional
|
|
10
10
|
|
|
11
11
|
from fastapi.encoders import jsonable_encoder
|
|
12
12
|
|
|
13
|
-
from ..data_classes import
|
|
13
|
+
from ..data_classes import (
|
|
14
|
+
Context,
|
|
15
|
+
Errors,
|
|
16
|
+
PretrainedModel,
|
|
17
|
+
Training,
|
|
18
|
+
TrainingOut,
|
|
19
|
+
TrainingStateData,
|
|
20
|
+
TrainingStatus,
|
|
21
|
+
)
|
|
14
22
|
from ..enums import TrainerState
|
|
15
|
-
from ..helpers.misc import
|
|
23
|
+
from ..helpers.misc import (
|
|
24
|
+
create_project_folder,
|
|
25
|
+
delete_all_training_folders,
|
|
26
|
+
is_valid_uuid4,
|
|
27
|
+
)
|
|
16
28
|
from .downloader import TrainingsDownloader
|
|
17
29
|
from .exceptions import CriticalError, NodeNeedsRestartError
|
|
18
30
|
from .io_helpers import ActiveTrainingIO, EnvironmentVars, LastTrainingIO
|
|
@@ -66,7 +78,7 @@ class TrainerLogicGeneric(ABC):
|
|
|
66
78
|
return self._training
|
|
67
79
|
|
|
68
80
|
@property
|
|
69
|
-
def hyperparameters(self) ->
|
|
81
|
+
def hyperparameters(self) -> Dict[str, Any]:
|
|
70
82
|
assert self._training is not None, 'Training should have data'
|
|
71
83
|
return self._training.hyperparameters
|
|
72
84
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: learning-loop-node
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.15.0
|
|
4
4
|
Summary: Python Library for Nodes which connect to the Zauberzeug Learning Loop
|
|
5
5
|
Home-page: https://github.com/zauberzeug/learning_loop_node
|
|
6
6
|
License: MIT
|
|
@@ -100,11 +100,16 @@ You can additionally provide the following camera parameters:
|
|
|
100
100
|
- `autoupload`: configures auto-submission to the learning loop; `filtered` (default), `all`, `disabled` (example curl parameter `-H 'autoupload: all'`)
|
|
101
101
|
- `camera-id`: a string which groups images for submission together (example curl parameter `-H 'camera-id: front_cam'`)
|
|
102
102
|
|
|
103
|
+
To use the socketio interface, the caller needs to connect to the detector node's socketio server and emit the `detect` or `batch_detect` event with the image data and image metadata. Example code can be found [in the rosys implementation](https://github.com/zauberzeug/rosys/blob/main/rosys/vision/detector_hardware.py).
|
|
104
|
+
|
|
103
105
|
The detector also has a sio **upload endpoint** that can be used to upload images and detections to the learning loop. The function receives a json dictionary, with the following entries:
|
|
104
106
|
|
|
105
107
|
- `image`: the image data in jpg format
|
|
106
108
|
- `tags`: a list of strings. If not provided the tag is `picked_by_system`
|
|
107
109
|
- `detections`: a dictionary representing the detections. UUIDs for the classes are automatically determined based on the category names. This field is optional. If not provided, no detections are uploaded.
|
|
110
|
+
- `source`: optional source identifier for the image
|
|
111
|
+
- `creation_date`: optional creation date for the image
|
|
112
|
+
- `upload_priority`: boolean flag to prioritize the upload (defaults to False)
|
|
108
113
|
|
|
109
114
|
The endpoint returns None if the upload was successful and an error message otherwise.
|
|
110
115
|
|
|
@@ -187,58 +192,52 @@ Upload a model with
|
|
|
187
192
|
The model should now be available for the format 'format_a'
|
|
188
193
|
`curl "https://learning-loop.ai/api/zauberzeug/projects/demo/models?format=format_a"`
|
|
189
194
|
|
|
190
|
-
|
|
191
|
-
|
|
195
|
+
```json
|
|
192
196
|
{
|
|
193
|
-
"models": [
|
|
194
|
-
{
|
|
195
|
-
"id": "3c20d807-f71c-40dc-a996-8a8968aa5431",
|
|
196
|
-
"version": "4.0",
|
|
197
|
-
"formats": [
|
|
198
|
-
"format_a"
|
|
199
|
-
],
|
|
200
|
-
"created": "2021-06-01T06:28:21.289092",
|
|
201
|
-
"comment": "uploaded at 2021-06-01 06:28:21.288442",
|
|
202
|
-
...
|
|
197
|
+
"models": [
|
|
198
|
+
{
|
|
199
|
+
"id": "3c20d807-f71c-40dc-a996-8a8968aa5431",
|
|
200
|
+
"version": "4.0",
|
|
201
|
+
"formats": [
|
|
202
|
+
"format_a"
|
|
203
|
+
],
|
|
204
|
+
"created": "2021-06-01T06:28:21.289092",
|
|
205
|
+
"comment": "uploaded at 2021-06-01 06:28:21.288442",
|
|
206
|
+
...
|
|
207
|
+
}
|
|
208
|
+
]
|
|
203
209
|
}
|
|
204
|
-
]
|
|
205
|
-
}
|
|
206
|
-
|
|
207
210
|
```
|
|
208
211
|
|
|
209
212
|
but not in the format_b
|
|
210
213
|
`curl "https://learning-loop.ai/api/zauberzeug/projects/demo/models?format=format_b"`
|
|
211
214
|
|
|
212
|
-
```
|
|
213
|
-
|
|
215
|
+
```json
|
|
214
216
|
{
|
|
215
|
-
"models": []
|
|
217
|
+
"models": []
|
|
216
218
|
}
|
|
217
|
-
|
|
218
219
|
```
|
|
219
220
|
|
|
220
221
|
Connect the Node to the Learning Loop by simply starting the container.
|
|
221
222
|
After a short time the converted model should be available as well.
|
|
222
223
|
`curl https://learning-loop.ai/api/zauberzeug/projects/demo/models?format=format_b`
|
|
223
224
|
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
{
|
|
227
|
-
"models": [
|
|
225
|
+
```json
|
|
228
226
|
{
|
|
229
|
-
"
|
|
230
|
-
|
|
231
|
-
"
|
|
232
|
-
"
|
|
233
|
-
"
|
|
234
|
-
|
|
235
|
-
"
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
227
|
+
"models": [
|
|
228
|
+
{
|
|
229
|
+
"id": "3c20d807-f71c-40dc-a996-8a8968aa5431",
|
|
230
|
+
"version": "4.0",
|
|
231
|
+
"formats": [
|
|
232
|
+
"format_a",
|
|
233
|
+
"format_b",
|
|
234
|
+
],
|
|
235
|
+
"created": "2021-06-01T06:28:21.289092",
|
|
236
|
+
"comment": "uploaded at 2021-06-01 06:28:21.288442",
|
|
237
|
+
...
|
|
238
|
+
}
|
|
239
|
+
]
|
|
240
240
|
}
|
|
241
|
-
|
|
242
241
|
```
|
|
243
242
|
|
|
244
243
|
## About Models (the currency between Nodes)
|
|
@@ -257,6 +256,4 @@ After a short time the converted model should be available as well.
|
|
|
257
256
|
- Nodes add properties to `model.json`, which contains all the information which are needed by subsequent nodes. These are typically the properties:
|
|
258
257
|
- `resolution`: resolution in which the model expects images (as `int`, since the resolution is mostly square - later, ` resolution_x`` resolution_y ` would also be conceivable or `resolutions` to give a list of possible resolutions)
|
|
259
258
|
- `categories`: list of categories with name, id, (later also type), in the order in which they are used by the model -- this is neccessary to be robust about renamings
|
|
260
|
-
```
|
|
261
|
-
````
|
|
262
259
|
|
|
@@ -2,30 +2,30 @@ learning_loop_node/__init__.py,sha256=onN5s8-x_xBsCM6NLmJO0Ym1sJHeCFaGw8qb0oQZmz
|
|
|
2
2
|
learning_loop_node/annotation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
3
|
learning_loop_node/annotation/annotator_logic.py,sha256=BTaopkJZkIf1CI5lfsVKsxbxoUIbDJrevavuQUT5e_c,1000
|
|
4
4
|
learning_loop_node/annotation/annotator_node.py,sha256=Ac6tuiO-Ne8m8XLDBK_ucRhofiudRUIjL1nM-rkUkGE,4156
|
|
5
|
-
learning_loop_node/data_classes/__init__.py,sha256=
|
|
5
|
+
learning_loop_node/data_classes/__init__.py,sha256=ZFVeouHrQtonaEw6_S7TwKQUpgvldyv8P1M9IVrURpY,1267
|
|
6
6
|
learning_loop_node/data_classes/annotations.py,sha256=NfMlTv2_5AfVY_JDM4tbjETFjSN2S2I2LJJPMMcDT50,966
|
|
7
7
|
learning_loop_node/data_classes/detections.py,sha256=7vqcS0EK8cmDjRDckHlpSZDZ9YO6qajRmYvx-oxatFc,5425
|
|
8
8
|
learning_loop_node/data_classes/general.py,sha256=r7fVfuQvbo8qOTT7zylgfM45TbIvYu8bkDIAZ3wszqA,7397
|
|
9
|
-
learning_loop_node/data_classes/image_metadata.py,sha256=
|
|
9
|
+
learning_loop_node/data_classes/image_metadata.py,sha256=YccDyHMbnOrRr4-9hHbCNBpuhlZem5M64c0ZbZXTASY,1764
|
|
10
10
|
learning_loop_node/data_classes/socket_response.py,sha256=tIdt-oYf6ULoJIDYQCecNM9OtWR6_wJ9tL0Ksu83Vko,655
|
|
11
|
-
learning_loop_node/data_classes/training.py,sha256=
|
|
12
|
-
learning_loop_node/data_exchanger.py,sha256=
|
|
11
|
+
learning_loop_node/data_classes/training.py,sha256=TybwcCDf_NUaDUaOj30lPm-7Z3Qk9XFRibEX5qIv96Y,5737
|
|
12
|
+
learning_loop_node/data_exchanger.py,sha256=nd9JNPLn9amIeTcSIyUPpbE97ORAcb5yNphvmpgWSUQ,9095
|
|
13
13
|
learning_loop_node/detector/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
14
|
-
learning_loop_node/detector/detector_logic.py,sha256=
|
|
15
|
-
learning_loop_node/detector/detector_node.py,sha256=
|
|
14
|
+
learning_loop_node/detector/detector_logic.py,sha256=YmsEsqSr0CUUWKtSR7EFU92HA90NvdYiPZGDQKXJUxU,2462
|
|
15
|
+
learning_loop_node/detector/detector_node.py,sha256=ywbBOZE8jvOLG_Fa4wD9XOZtnDV2xTjmxutWWvF7jyo,29629
|
|
16
16
|
learning_loop_node/detector/exceptions.py,sha256=C6KbNPlSbtfgDrZx2Hbhm7Suk9jVoR3fMRCO0CkrMsQ,196
|
|
17
17
|
learning_loop_node/detector/inbox_filter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
18
18
|
learning_loop_node/detector/inbox_filter/cam_observation_history.py,sha256=1PHgXRrhSQ34HSFw7mdX8ndRxHf_i1aP5nXXnrZxhAY,3312
|
|
19
|
-
learning_loop_node/detector/inbox_filter/relevance_filter.py,sha256=
|
|
20
|
-
learning_loop_node/detector/outbox.py,sha256=
|
|
19
|
+
learning_loop_node/detector/inbox_filter/relevance_filter.py,sha256=rI46jL9ZuI0hiDVxWCfXllB8DlQyyewNs6oZ6MnglMc,1540
|
|
20
|
+
learning_loop_node/detector/outbox.py,sha256=KjQ2C8OokFtXtSOUKiYihADGI4QgkBX8QVRV109Bdr0,12716
|
|
21
21
|
learning_loop_node/detector/rest/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
22
22
|
learning_loop_node/detector/rest/about.py,sha256=evHJ2svUZY_DFz0FSef5u9c5KW4Uc3GL7EbPinG9-dg,583
|
|
23
23
|
learning_loop_node/detector/rest/backdoor_controls.py,sha256=ZNaFOvC0OLWNtcLiG-NIqS_y1kkLP4csgk3CHhp8Gis,885
|
|
24
|
-
learning_loop_node/detector/rest/detect.py,sha256=
|
|
24
|
+
learning_loop_node/detector/rest/detect.py,sha256=wYf9cCgtImMgnHbrcE6GMXE2aBopdZciKvGmc92ZCGw,2533
|
|
25
25
|
learning_loop_node/detector/rest/model_version_control.py,sha256=P4FOG0U9HT6QtCoNt-1s1pT6drtgdVjGZWEuCAyuNmA,1370
|
|
26
26
|
learning_loop_node/detector/rest/operation_mode.py,sha256=1_xfutA_6nzdb4Q_jZiHQ5m_wA83bcG5jSIy-sfNIvk,1575
|
|
27
27
|
learning_loop_node/detector/rest/outbox_mode.py,sha256=H8coDNbgLGEfXmKQrhtXWeUHBAHpnrdZktuHXQz0xis,1148
|
|
28
|
-
learning_loop_node/detector/rest/upload.py,sha256=
|
|
28
|
+
learning_loop_node/detector/rest/upload.py,sha256=GMDKyN3UNfzsKq5GtBBlv828lht0bztgqRqT_PQHkZM,1250
|
|
29
29
|
learning_loop_node/enums/__init__.py,sha256=tjSrhztIQ8W656_QuXfTbbVNtH_wDXP5hpYZgzfgRhc,285
|
|
30
30
|
learning_loop_node/enums/annotator.py,sha256=mtTAw-8LJIrHcYkBjYHCZuhYEEHS6QzSK8k6BhLusvQ,285
|
|
31
31
|
learning_loop_node/enums/detector.py,sha256=Qvm5LWWR9BfsDxHEQ8YzaPaUuSmp4BescYuV4X4ikwE,512
|
|
@@ -34,34 +34,36 @@ learning_loop_node/enums/trainer.py,sha256=VaD63guLO4aKgVfXT0EryPlXKQGegSET3Cp4R
|
|
|
34
34
|
learning_loop_node/examples/novelty_score_updater.py,sha256=1DRgM9lxjFV-q2JvGDDsNLz_ic_rhEZ9wc6ZdjcxwPE,2038
|
|
35
35
|
learning_loop_node/globals.py,sha256=tgw_8RYOipPV9aYlyUhYtXfUxvJKRvfUk6u-qVAtZmY,174
|
|
36
36
|
learning_loop_node/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
37
|
+
learning_loop_node/helpers/background_tasks.py,sha256=sNKyHyk9J5vNn-0GG1OzNJbB-F7GXGcbCWKE3MbRrno,3346
|
|
37
38
|
learning_loop_node/helpers/environment_reader.py,sha256=6DxDJecLHxiGczByhyVa_JssAwwft7vuNCGaEzoSY2I,1662
|
|
38
39
|
learning_loop_node/helpers/gdrive_downloader.py,sha256=zeYJciTAJVRpu_eFjwgYLCpIa6hU1d71anqEBb564Rk,1145
|
|
39
40
|
learning_loop_node/helpers/log_conf.py,sha256=hqVAa_9NnYEU6N0dcOKmph82p7MpgKqeF_eomTLYzWY,961
|
|
40
41
|
learning_loop_node/helpers/misc.py,sha256=J29iBmsEUAraKKDN1m1NKiHQ3QrP5ub5HBU6cllSP2g,7384
|
|
42
|
+
learning_loop_node/helpers/run.py,sha256=_uox-j3_K_bL3yCAwy3JYSOiIxrnhzVxyxWpCe8_J9U,876
|
|
41
43
|
learning_loop_node/loop_communication.py,sha256=opulqBKRLXlUQgjA3t0pg8CNA-JXJRCPPUspRxRuuGw,7556
|
|
42
|
-
learning_loop_node/node.py,sha256
|
|
44
|
+
learning_loop_node/node.py,sha256=-Tw8kbvDKm8bPMm51MsFEOQKxPJx3n6DZ65cWGVQ5Zw,11262
|
|
43
45
|
learning_loop_node/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
44
46
|
learning_loop_node/rest.py,sha256=omwlRHLnyG-kgCBVnZDk5_SAPobL9g7slWeX21wsPGw,1551
|
|
45
47
|
learning_loop_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
46
48
|
learning_loop_node/tests/annotator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
47
|
-
learning_loop_node/tests/annotator/conftest.py,sha256=
|
|
49
|
+
learning_loop_node/tests/annotator/conftest.py,sha256=e83I8WNAUgCFmum1GCx_nSjP9uwAoPIwPk72elypNQY,2098
|
|
48
50
|
learning_loop_node/tests/annotator/pytest.ini,sha256=8QdjmawLy1zAzXrJ88or1kpFDhJw0W5UOnDfGGs_igU,262
|
|
49
|
-
learning_loop_node/tests/annotator/test_annotator_node.py,sha256=
|
|
51
|
+
learning_loop_node/tests/annotator/test_annotator_node.py,sha256=AuTqFvFyQYuxEdkNmjBZqBB7RYRgpoSuDsi7SjBVHfo,1997
|
|
50
52
|
learning_loop_node/tests/detector/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
51
53
|
learning_loop_node/tests/detector/conftest.py,sha256=gut-RaacarhWJNCvGEz7O7kj3cS7vJ4SvAxCmR87PIw,5263
|
|
52
54
|
learning_loop_node/tests/detector/inbox_filter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
53
55
|
learning_loop_node/tests/detector/inbox_filter/test_observation.py,sha256=k4WYdvnuV7d_r7zI4M2aA8WuBjm0aycQ0vj1rGE2q4w,1370
|
|
54
56
|
learning_loop_node/tests/detector/inbox_filter/test_relevance_group.py,sha256=r-wABFQVsTNTjv7vYGr8wbHfOWy43F_B14ZDWHfiZ-A,7613
|
|
55
|
-
learning_loop_node/tests/detector/inbox_filter/test_unexpected_observations_count.py,sha256=
|
|
57
|
+
learning_loop_node/tests/detector/inbox_filter/test_unexpected_observations_count.py,sha256=JbUnPZVjzdtAlp6cTZVAdXUluQYNueGU9eITNJKY-tU,1710
|
|
56
58
|
learning_loop_node/tests/detector/pytest.ini,sha256=8QdjmawLy1zAzXrJ88or1kpFDhJw0W5UOnDfGGs_igU,262
|
|
57
59
|
learning_loop_node/tests/detector/test.jpg,sha256=msA-vHPmvPiro_D102Qmn1fn4vNfooqYYEXPxZUmYpk,161390
|
|
58
|
-
learning_loop_node/tests/detector/test_client_communication.py,sha256=
|
|
60
|
+
learning_loop_node/tests/detector/test_client_communication.py,sha256=cVviUmAwbLY3LsJcY-D3ve-Jwxk9WVOrVupeh-PdKtA,8013
|
|
59
61
|
learning_loop_node/tests/detector/test_detector_node.py,sha256=0ZMV6coAvdq-nH8CwY9_LR2tUcH9VLcAB1CWuwHQMpo,3023
|
|
60
|
-
learning_loop_node/tests/detector/test_outbox.py,sha256=
|
|
61
|
-
learning_loop_node/tests/detector/test_relevance_filter.py,sha256=
|
|
62
|
+
learning_loop_node/tests/detector/test_outbox.py,sha256=8L2k792oBhS82fnw2D7sw-Kh1vok_-4PzGjrK7r1WpM,2629
|
|
63
|
+
learning_loop_node/tests/detector/test_relevance_filter.py,sha256=7oTXW4AuObk7NxMqGSwnjcspH3-QUbSdCYlz9hvzV78,2079
|
|
62
64
|
learning_loop_node/tests/detector/testing_detector.py,sha256=MZajybyzISz2G1OENfLHgZhBcLCYzTR4iN9JkWpq5-s,551
|
|
63
65
|
learning_loop_node/tests/general/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
64
|
-
learning_loop_node/tests/general/conftest.py,sha256=
|
|
66
|
+
learning_loop_node/tests/general/conftest.py,sha256=kEtkuVA2wgny-YBkLDn7Ff5j6ShOPghQUU0cH9IIl_8,2430
|
|
65
67
|
learning_loop_node/tests/general/pytest.ini,sha256=8QdjmawLy1zAzXrJ88or1kpFDhJw0W5UOnDfGGs_igU,262
|
|
66
68
|
learning_loop_node/tests/general/test_data/file_1.txt,sha256=Lis06nfvbFPVCBZyEgQlfI_Nle2YDq1GQBlYvEfFtxw,19
|
|
67
69
|
learning_loop_node/tests/general/test_data/file_2.txt,sha256=Xp8EETGhZBdVAgb4URowSSpOytwwwJdV0Renkdur7R8,19
|
|
@@ -71,7 +73,7 @@ learning_loop_node/tests/general/test_downloader.py,sha256=y4GcUyR0OAfrwltd6eyQg
|
|
|
71
73
|
learning_loop_node/tests/general/test_learning_loop_node.py,sha256=SZd-VChpWnnsPN46pr4E_LL3ZevYx6psU-AWdVeOFpQ,770
|
|
72
74
|
learning_loop_node/tests/test_helper.py,sha256=Xajn6BWJqeD36YAETwdcJd6awY2NPmaOis3gWgFc97k,2909
|
|
73
75
|
learning_loop_node/tests/trainer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
74
|
-
learning_loop_node/tests/trainer/conftest.py,sha256=
|
|
76
|
+
learning_loop_node/tests/trainer/conftest.py,sha256=eJUUBVRTmwcEooEN29hIa3eNuo0ogAPNn7Vqs9FSRDM,3660
|
|
75
77
|
learning_loop_node/tests/trainer/pytest.ini,sha256=8QdjmawLy1zAzXrJ88or1kpFDhJw0W5UOnDfGGs_igU,262
|
|
76
78
|
learning_loop_node/tests/trainer/state_helper.py,sha256=MDe9opeKruip74FoRFff8MSWGiQNFqDpPtIEIbgPnFc,919
|
|
77
79
|
learning_loop_node/tests/trainer/states/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -95,8 +97,8 @@ learning_loop_node/trainer/rest/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm
|
|
|
95
97
|
learning_loop_node/trainer/rest/backdoor_controls.py,sha256=ZnK8ypY5r_q0-YZbtaOxhQThzuZvMsQHM5gJGESd_dE,5131
|
|
96
98
|
learning_loop_node/trainer/test_executor.py,sha256=6BVGDN_6f5GEMMEvDLSG1yzMybSvgXaP5uYpSfsVPP0,2224
|
|
97
99
|
learning_loop_node/trainer/trainer_logic.py,sha256=eK-01qZzi10UjLMCQX8vy5eW2FoghPj3rzzDC-s3Si4,8792
|
|
98
|
-
learning_loop_node/trainer/trainer_logic_generic.py,sha256=
|
|
100
|
+
learning_loop_node/trainer/trainer_logic_generic.py,sha256=InEheL0oWwQNa4E6gyt1NAgjBZCetrP-kZHL3LAAIRs,26911
|
|
99
101
|
learning_loop_node/trainer/trainer_node.py,sha256=Dl4ZQAjjXQggibeBjvhXAoFClw1ZX2Kkt3v_fjrJnCI,4508
|
|
100
|
-
learning_loop_node-0.
|
|
101
|
-
learning_loop_node-0.
|
|
102
|
-
learning_loop_node-0.
|
|
102
|
+
learning_loop_node-0.15.0.dist-info/METADATA,sha256=WuE54Oj2Jc2fSkuvmIFQW5y_TKGZ9b81W87JQE6HJTU,13509
|
|
103
|
+
learning_loop_node-0.15.0.dist-info/WHEEL,sha256=WGfLGfLX43Ei_YORXSnT54hxFygu34kMpcQdmgmEwCQ,88
|
|
104
|
+
learning_loop_node-0.15.0.dist-info/RECORD,,
|
|
File without changes
|