learning-loop-node 0.10.8__py3-none-any.whl → 0.10.10__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.

Files changed (55) hide show
  1. learning_loop_node/detector/detector_node.py +1 -1
  2. learning_loop_node/detector/outbox.py +78 -42
  3. learning_loop_node/detector/rest/outbox_mode.py +1 -1
  4. learning_loop_node/tests/annotator/conftest.py +50 -0
  5. learning_loop_node/{annotation/tests → tests/annotator}/test_annotator_node.py +9 -11
  6. learning_loop_node/{detector/tests → tests/detector}/conftest.py +30 -4
  7. learning_loop_node/{detector/inbox_filter/tests → tests/detector/inbox_filter}/test_observation.py +1 -1
  8. learning_loop_node/{detector/inbox_filter/tests → tests/detector/inbox_filter}/test_relevance_group.py +2 -7
  9. learning_loop_node/{detector/inbox_filter/tests → tests/detector/inbox_filter}/test_unexpected_observations_count.py +3 -6
  10. learning_loop_node/tests/detector/pytest.ini +10 -0
  11. learning_loop_node/{detector/tests → tests/detector}/test_client_communication.py +33 -9
  12. learning_loop_node/tests/detector/test_outbox.py +96 -0
  13. learning_loop_node/{detector/tests → tests/detector}/test_relevance_filter.py +8 -6
  14. learning_loop_node/{detector/tests → tests/detector}/testing_detector.py +3 -3
  15. learning_loop_node/tests/general/__init__.py +0 -0
  16. learning_loop_node/tests/general/conftest.py +62 -0
  17. learning_loop_node/tests/general/pytest.ini +10 -0
  18. learning_loop_node/tests/{test_data_classes.py → general/test_data_classes.py} +3 -3
  19. learning_loop_node/tests/{test_downloader.py → general/test_downloader.py} +24 -12
  20. learning_loop_node/tests/general/test_learning_loop_node.py +20 -0
  21. learning_loop_node/tests/test_helper.py +20 -9
  22. learning_loop_node/tests/trainer/__init__.py +0 -0
  23. learning_loop_node/{trainer/tests → tests/trainer}/conftest.py +32 -3
  24. learning_loop_node/tests/trainer/pytest.ini +10 -0
  25. learning_loop_node/{trainer/tests → tests/trainer}/state_helper.py +2 -1
  26. learning_loop_node/tests/trainer/states/__init__.py +0 -0
  27. learning_loop_node/{trainer/tests → tests/trainer}/states/test_state_cleanup.py +2 -2
  28. learning_loop_node/{trainer/tests → tests/trainer}/states/test_state_detecting.py +5 -5
  29. learning_loop_node/{trainer/tests → tests/trainer}/states/test_state_download_train_model.py +3 -3
  30. learning_loop_node/{trainer/tests → tests/trainer}/states/test_state_prepare.py +4 -4
  31. learning_loop_node/{trainer/tests → tests/trainer}/states/test_state_sync_confusion_matrix.py +3 -4
  32. learning_loop_node/{trainer/tests → tests/trainer}/states/test_state_train.py +4 -4
  33. learning_loop_node/{trainer/tests → tests/trainer}/states/test_state_upload_detections.py +6 -6
  34. learning_loop_node/{trainer/tests → tests/trainer}/states/test_state_upload_model.py +4 -4
  35. learning_loop_node/{trainer/tests → tests/trainer}/test_errors.py +3 -3
  36. learning_loop_node/{trainer/tests → tests/trainer}/test_trainer_states.py +4 -4
  37. learning_loop_node/{trainer/tests → tests/trainer}/testing_trainer_logic.py +2 -2
  38. learning_loop_node/{tests → trainer}/test_executor.py +1 -1
  39. learning_loop_node/trainer/trainer_node.py +5 -7
  40. {learning_loop_node-0.10.8.dist-info → learning_loop_node-0.10.10.dist-info}/METADATA +1 -1
  41. learning_loop_node-0.10.10.dist-info/RECORD +93 -0
  42. learning_loop_node/conftest.py +0 -89
  43. learning_loop_node/detector/tests/test_outbox.py +0 -86
  44. learning_loop_node/tests/conftest.py +0 -21
  45. learning_loop_node/tests/test_learning_loop_node.py +0 -18
  46. learning_loop_node-0.10.8.dist-info/RECORD +0 -87
  47. /learning_loop_node/{detector/tests → tests/annotator}/__init__.py +0 -0
  48. /learning_loop_node/{pytest.ini → tests/annotator/pytest.ini} +0 -0
  49. /learning_loop_node/{trainer/tests → tests/detector}/__init__.py +0 -0
  50. /learning_loop_node/{trainer/tests/states → tests/detector/inbox_filter}/__init__.py +0 -0
  51. /learning_loop_node/{detector/tests → tests/detector}/test.jpg +0 -0
  52. /learning_loop_node/tests/{test_data → general/test_data}/file_1.txt +0 -0
  53. /learning_loop_node/tests/{test_data → general/test_data}/file_2.txt +0 -0
  54. /learning_loop_node/tests/{test_data → general/test_data}/model.json +0 -0
  55. {learning_loop_node-0.10.8.dist-info → learning_loop_node-0.10.10.dist-info}/WHEEL +0 -0
@@ -1,89 +0,0 @@
1
-
2
- import asyncio
3
- import logging
4
- import os
5
- import shutil
6
-
7
- import pytest
8
-
9
- from learning_loop_node.data_classes import (BoxDetection,
10
- ClassificationDetection, Context,
11
- Detections, Point, PointDetection,
12
- SegmentationDetection, Shape)
13
-
14
- from .data_exchanger import DataExchanger
15
- from .globals import GLOBALS
16
- from .loop_communication import LoopCommunicator
17
-
18
-
19
- @pytest.fixture()
20
- async def glc():
21
- loop_communicator = LoopCommunicator()
22
- yield loop_communicator
23
- await loop_communicator.shutdown()
24
-
25
-
26
- @pytest.fixture()
27
- async def data_exchanger():
28
- loop_communicator = LoopCommunicator()
29
- context = Context(organization='zauberzeug', project='pytest')
30
- dx = DataExchanger(context, loop_communicator)
31
- yield dx
32
- await loop_communicator.shutdown()
33
-
34
-
35
- @pytest.fixture()
36
- async def setup_test_project(): # pylint: disable=redefined-outer-name
37
- loop_communicator = LoopCommunicator()
38
- await loop_communicator.delete("/zauberzeug/projects/pytest_p?keep_images=true")
39
- await asyncio.sleep(1)
40
- project_conf = {
41
- 'project_name': 'pytest_p', 'inbox': 0, 'annotate': 0, 'review': 0, 'complete': 3, 'image_style': 'beautiful',
42
- 'box_categories': 2, 'point_categories': 2, 'segmentation_categories': 2, 'thumbs': False, 'tags': 0,
43
- 'trainings': 1, 'box_detections': 3, 'box_annotations': 0}
44
- assert (await loop_communicator.post("/zauberzeug/projects/generator", json=project_conf)).status_code == 200
45
- yield
46
- await loop_communicator.delete("/zauberzeug/projects/pytest_p?keep_images=true")
47
- await loop_communicator.shutdown()
48
-
49
-
50
- @pytest.fixture(autouse=True, scope='session')
51
- def clear_loggers():
52
- """Remove handlers from all loggers"""
53
- # see https://github.com/pytest-dev/pytest/issues/5502
54
- yield
55
-
56
- loggers = [logging.getLogger()] + list(logging.Logger.manager.loggerDict.values())
57
- for logger in loggers:
58
- if not isinstance(logger, logging.Logger):
59
- continue
60
- handlers = getattr(logger, 'handlers', [])
61
- for handler in handlers:
62
- logger.removeHandler(handler)
63
-
64
-
65
- @pytest.fixture(autouse=True, scope='function')
66
- def data_folder():
67
- GLOBALS.data_folder = '/tmp/learning_loop_lib_data'
68
- shutil.rmtree(GLOBALS.data_folder, ignore_errors=True)
69
- os.makedirs(GLOBALS.data_folder, exist_ok=True)
70
- yield
71
- shutil.rmtree(GLOBALS.data_folder, ignore_errors=True)
72
-
73
-
74
- def get_dummy_detections():
75
- return Detections(
76
- box_detections=[
77
- BoxDetection(category_name='some_category_name', x=1, y=2, height=3, width=4,
78
- model_name='some_model', confidence=.42, category_id='some_id')],
79
- point_detections=[
80
- PointDetection(category_name='some_category_name_2', x=10, y=12,
81
- model_name='some_model', confidence=.42, category_id='some_id_2')],
82
- segmentation_detections=[
83
- SegmentationDetection(category_name='some_category_name_3',
84
- shape=Shape(points=[Point(x=1, y=1)]),
85
- model_name='some_model', confidence=.42,
86
- category_id='some_id_3')],
87
- classification_detections=[
88
- ClassificationDetection(category_name='some_category_name_4', model_name='some_model',
89
- confidence=.42, category_id='some_id_4')])
@@ -1,86 +0,0 @@
1
- import os
2
- import shutil
3
- from time import sleep
4
-
5
- import numpy as np
6
- import pytest
7
- from PIL import Image
8
-
9
- from learning_loop_node.data_classes import Detections
10
- from learning_loop_node.detector.detector_node import DetectorNode
11
- from learning_loop_node.detector.outbox import Outbox
12
-
13
- # pylint: disable=redefined-outer-name
14
-
15
-
16
- @pytest.fixture()
17
- def test_outbox():
18
- os.environ['LOOP_ORGANIZATION'] = 'zauberzeug'
19
- os.environ['LOOP_PROJECT'] = 'demo'
20
- test_outbox = Outbox()
21
- shutil.rmtree(test_outbox.path, ignore_errors=True)
22
- os.mkdir(test_outbox.path)
23
-
24
- yield test_outbox
25
- test_outbox.set_mode('stopped')
26
- shutil.rmtree(test_outbox.path, ignore_errors=True)
27
-
28
-
29
- def test_files_are_deleted_after_sending(test_outbox: Outbox):
30
- assert test_outbox.path.startswith('/tmp')
31
- os.mkdir(f'{test_outbox.path}/test')
32
- with open(f'{test_outbox.path}/test/image.json', 'w') as f:
33
- f.write('{"box_detections":[]}')
34
- f.close()
35
-
36
- img = Image.new('RGB', (60, 30), color=(73, 109, 137))
37
- img.save(f'{test_outbox.path}/test/image.jpg')
38
-
39
- items = test_outbox.get_data_files()
40
- assert len(items) == 1
41
-
42
- test_outbox.upload()
43
-
44
- items = test_outbox.get_data_files()
45
- assert len(items) == 0
46
-
47
-
48
- def test_saving_opencv_image(test_outbox: Outbox):
49
- img = np.ones((300, 300, 1), np.uint8)*255
50
- test_outbox.save(img.tobytes())
51
- items = test_outbox.get_data_files()
52
- assert len(items) == 1
53
-
54
-
55
- def test_saving_binary(test_outbox: Outbox):
56
- assert len(test_outbox.get_data_files()) == 0
57
- save_test_image_to_outbox(test_outbox)
58
- assert len(test_outbox.get_data_files()) == 1
59
-
60
-
61
- @pytest.mark.asyncio
62
- async def test_files_are_automatically_uploaded(test_detector_node: DetectorNode):
63
- test_detector_node.outbox.save(Image.new('RGB', (60, 30), color=(73, 109, 137)).tobytes(), Detections())
64
- assert len(test_detector_node.outbox.get_data_files()) == 1
65
-
66
- assert len(test_detector_node.outbox.get_data_files()) == 1
67
-
68
-
69
- def test_set_outbox_mode(test_outbox: Outbox):
70
- test_outbox.set_mode('stopped')
71
- save_test_image_to_outbox(outbox=test_outbox)
72
- sleep(6)
73
- assert len(test_outbox.get_data_files()) == 1, 'File was cleared even though outbox should be stopped'
74
- test_outbox.set_mode('continuous_upload')
75
- sleep(6)
76
- assert len(test_outbox.get_data_files()) == 0, 'File was not cleared even though outbox should be in continuous_upload'
77
-
78
- ### Helper functions ###
79
-
80
-
81
- def save_test_image_to_outbox(outbox: Outbox):
82
- img = Image.new('RGB', (60, 30), color=(73, 109, 137))
83
- img.save('/tmp/image.jpg')
84
- with open('/tmp/image.jpg', 'rb') as f:
85
- data = f.read()
86
- outbox.save(data)
@@ -1,21 +0,0 @@
1
- import asyncio
2
-
3
- import pytest
4
-
5
- from learning_loop_node.loop_communication import LoopCommunicator
6
-
7
-
8
- @pytest.fixture(autouse=True, scope='function')
9
- async def create_project_for_module():
10
-
11
- loop_communicator = LoopCommunicator()
12
- await loop_communicator.delete("/zauberzeug/projects/pytest?keep_images=true")
13
- await asyncio.sleep(1)
14
- project_configuration = {
15
- 'project_name': 'pytest', 'inbox': 0, 'annotate': 0, 'review': 0, 'complete': 3, 'image_style': 'beautiful',
16
- 'box_categories': 2, 'point_categories': 2, 'segmentation_categories': 2, 'thumbs': False, 'tags': 0,
17
- 'trainings': 1, 'box_detections': 3, 'box_annotations': 0}
18
- assert (await loop_communicator.post("/zauberzeug/projects/generator", json=project_configuration)).status_code == 200
19
- yield
20
- await loop_communicator.delete("/zauberzeug/projects/pytest?keep_images=true")
21
- await loop_communicator.shutdown()
@@ -1,18 +0,0 @@
1
- from typing import List
2
-
3
- import pytest
4
-
5
- from learning_loop_node.helpers.misc import create_resource_paths
6
-
7
-
8
- @pytest.mark.parametrize("image_ids,expected_urls,expected_ids", [
9
- (['some_id'], ['/zauberzeug/projects/pytest/images/some_id/main'], ['some_id']),
10
- (['some_id_1', 'some_id_2'], ['/zauberzeug/projects/pytest/images/some_id_1/main',
11
- '/zauberzeug/projects/pytest/images/some_id_2/main'], ['some_id_1', 'some_id_2']),
12
- ([], [], [])
13
- ])
14
- def test_resource_path_creation(image_ids: List[str], expected_urls: List[str], expected_ids: List['str']):
15
- urls, ids = create_resource_paths('zauberzeug', 'pytest', image_ids)
16
-
17
- assert urls == expected_urls
18
- assert ids == expected_ids
@@ -1,87 +0,0 @@
1
- learning_loop_node/__init__.py,sha256=onN5s8-x_xBsCM6NLmJO0Ym1sJHeCFaGw8qb0oQZmz8,364
2
- learning_loop_node/annotation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- learning_loop_node/annotation/annotator_logic.py,sha256=BTaopkJZkIf1CI5lfsVKsxbxoUIbDJrevavuQUT5e_c,1000
4
- learning_loop_node/annotation/annotator_node.py,sha256=wk11CQtM3A0Dr7efCn_Mw2X7ql5xn2sgEJzrIeSBC6Q,4043
5
- learning_loop_node/annotation/tests/test_annotator_node.py,sha256=VdwM7Z0vqmwewmijmUPduo9hxZYn5y1nlFauxnjxoDs,2046
6
- learning_loop_node/conftest.py,sha256=Q_8Dbl3RwI8X_Y5Zvzstr6NJEqY3KldZXVx618OLdb4,3492
7
- learning_loop_node/data_classes/__init__.py,sha256=wCX88lDgbb8V-gtVCVe9i-NvvZuMe5FX7eD_UJgYYXw,1305
8
- learning_loop_node/data_classes/annotations.py,sha256=iInU0Nuy_oYT_sj4k_n-W0UShCBI2cHQYrt8imymbtM,1211
9
- learning_loop_node/data_classes/detections.py,sha256=1BcU5PNzIbryWcj2xJ6ysLBTBwGOdv9SxSJiUG8WEmw,4349
10
- learning_loop_node/data_classes/general.py,sha256=44GJrJvGfPwDUmRsS7If9uSlE6KPP50LGUX91VzesLw,4664
11
- learning_loop_node/data_classes/socket_response.py,sha256=tIdt-oYf6ULoJIDYQCecNM9OtWR6_wJ9tL0Ksu83Vko,655
12
- learning_loop_node/data_classes/training.py,sha256=hnMHZMk-WNRERyo7U97qL09v1tIdhnzPfTH-JgifLwU,6164
13
- learning_loop_node/data_exchanger.py,sha256=BTrXwjNkG9KgtUxil_ijMggql8sZDKXQm26xdKQr8_0,8459
14
- learning_loop_node/detector/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
- learning_loop_node/detector/detector_logic.py,sha256=se0jRFbV7BfTvCuCI3gcUllSYIZ5dxTkvdISe6pPTRg,1660
16
- learning_loop_node/detector/detector_node.py,sha256=ggnjv0lbSpgIAda-omUYiMAUAlktaWzGClH_iZ4Axd4,16689
17
- learning_loop_node/detector/inbox_filter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
- learning_loop_node/detector/inbox_filter/cam_observation_history.py,sha256=TD346I9ymtIP0_CJXCIKMRuiXbfVVanXNu_iHAwDd7Q,3318
19
- learning_loop_node/detector/inbox_filter/relevance_filter.py,sha256=s2FuwZ-tD_5obkSutstjc8pE_hLGbrv9WjrEO9t8rJ8,1011
20
- learning_loop_node/detector/inbox_filter/tests/test_observation.py,sha256=ORN08yjprqmgmtU25RsVysniyrWX-qGvqFN8ZkkYxow,1385
21
- learning_loop_node/detector/inbox_filter/tests/test_relevance_group.py,sha256=RUgsk1CnKSOCRZBzNjE7AZTqk06-yelgUqvHFRLH7_I,7865
22
- learning_loop_node/detector/inbox_filter/tests/test_unexpected_observations_count.py,sha256=y_dFUV21h6uZc90Q43s0u4oivJfuCNWlk5iXAWiXGgc,1804
23
- learning_loop_node/detector/outbox.py,sha256=xxshif8SRpkyjKrc1dVNW3QUg-DROtXG2NB8i50A5ho,6918
24
- learning_loop_node/detector/rest/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
- learning_loop_node/detector/rest/about.py,sha256=-PNqlQI_tzRvoSI_UR9rX8-5GeiENNpRDQ4Ylw3wYVs,607
26
- learning_loop_node/detector/rest/backdoor_controls.py,sha256=38axRG66Z3_Q6bYKa7Hw-ldChEAu-dJcBM_Sl_17Ozo,1725
27
- learning_loop_node/detector/rest/detect.py,sha256=8Rl1swANKgHc42P1z75t_PErQxpCKKPdAsKqDIZgdNU,1873
28
- learning_loop_node/detector/rest/operation_mode.py,sha256=eIo6_56qyZECftf4AEN8wJMABIojC0TRazvWeg0Uj_s,1664
29
- learning_loop_node/detector/rest/outbox_mode.py,sha256=N62NOb9cJZCkZTVC6iJVr6hX9slLR7Aym0WwTYinl7A,1012
30
- learning_loop_node/detector/rest/upload.py,sha256=IPzxJPayD7_Gx5uYC1lVJwWxdnQgM8MYGa5NugXVosY,544
31
- learning_loop_node/detector/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
- learning_loop_node/detector/tests/conftest.py,sha256=v08N5_jvQyeqQkOzkTaanCwwVd75Rf-tc1M2-fgiv54,3254
33
- learning_loop_node/detector/tests/test.jpg,sha256=msA-vHPmvPiro_D102Qmn1fn4vNfooqYYEXPxZUmYpk,161390
34
- learning_loop_node/detector/tests/test_client_communication.py,sha256=pgmRvn6FunXQgijgYNkJAz7X3Hv8f52YbK4XF9EfVKk,5240
35
- learning_loop_node/detector/tests/test_outbox.py,sha256=_d-RdBBAadAW56O7oP5b2mYQ_D3u36T5QjzkcmFx24c,2661
36
- learning_loop_node/detector/tests/test_relevance_filter.py,sha256=FzeOU6k17VIQvAHR8fjHbcPeAE7D7C-2Yxol0lDrMEM,1981
37
- learning_loop_node/detector/tests/testing_detector.py,sha256=2DSwIYJDOG4ixOGU8OxjsZQgaOdVU7_d3ASKsSkf8qc,564
38
- learning_loop_node/examples/novelty_score_updater.py,sha256=1DRgM9lxjFV-q2JvGDDsNLz_ic_rhEZ9wc6ZdjcxwPE,2038
39
- learning_loop_node/globals.py,sha256=tgw_8RYOipPV9aYlyUhYtXfUxvJKRvfUk6u-qVAtZmY,174
40
- learning_loop_node/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
- learning_loop_node/helpers/environment_reader.py,sha256=OtCTDc0KT9r-SMygkZB_Mw-ZIJPfUZVyUzHJoDCgJP8,1658
42
- learning_loop_node/helpers/gdrive_downloader.py,sha256=zeYJciTAJVRpu_eFjwgYLCpIa6hU1d71anqEBb564Rk,1145
43
- learning_loop_node/helpers/log_conf.py,sha256=3yd-jaMOeD5cRIgA5w_BH2L5odf8c4-ZjD89Bdqwe44,824
44
- learning_loop_node/helpers/misc.py,sha256=j4is8Rv0ttnCqF-R-wP3xwEi67OI6IBJav5Woo5lyDk,7701
45
- learning_loop_node/loop_communication.py,sha256=rG5MdavSTaREZ6OWfAUIT_qkkYPw3is2_FujLmHQeIc,6576
46
- learning_loop_node/node.py,sha256=pJg3mO7Egwtu7ewzWWgEXMtCG17u7yZjFt-KeN9n7rM,8010
47
- learning_loop_node/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
- learning_loop_node/pytest.ini,sha256=8QdjmawLy1zAzXrJ88or1kpFDhJw0W5UOnDfGGs_igU,262
49
- learning_loop_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
- learning_loop_node/tests/conftest.py,sha256=vFj8jjwSBzt6IAIxEo7y0rN0I94SPkK2pZsMvrvET5Q,920
51
- learning_loop_node/tests/test_data/file_1.txt,sha256=Lis06nfvbFPVCBZyEgQlfI_Nle2YDq1GQBlYvEfFtxw,19
52
- learning_loop_node/tests/test_data/file_2.txt,sha256=Xp8EETGhZBdVAgb4URowSSpOytwwwJdV0Renkdur7R8,19
53
- learning_loop_node/tests/test_data/model.json,sha256=_xNDucGOWila8gWnu8yFfrqmQ45Xq-_39eLKzjRtvpE,516
54
- learning_loop_node/tests/test_data_classes.py,sha256=m8LEk1quGErxuPzNdW_ExqQjkwE4u7ribwnTdyeiHR8,788
55
- learning_loop_node/tests/test_downloader.py,sha256=RkXNVQJkfPddGzxfJgSF7kc-V6Qp1OOvYYuhQ9g_ls4,2806
56
- learning_loop_node/tests/test_executor.py,sha256=DuwYv-27R0fUqkcMmIiArXhiPhDnLzgNC4vp2r6Jyj4,2250
57
- learning_loop_node/tests/test_helper.py,sha256=AjOrTu3dHIlJLYI0mxcNx8MCmFF6IjLhHtPzuai4O9E,2334
58
- learning_loop_node/tests/test_learning_loop_node.py,sha256=4qWi1ovBzebUAbvw8ecSa-TBGKYuJvlKe2AMnMZ-Qs8,701
59
- learning_loop_node/trainer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
- learning_loop_node/trainer/downloader.py,sha256=qzx7zzObcFEvRVQFe8gi8KJNIapASi1_XssbspXD1Rw,1469
61
- learning_loop_node/trainer/exceptions.py,sha256=hLLDGncC6PLZjKg4lZBpu-QA8itQIxiuxExz1uptgnw,40
62
- learning_loop_node/trainer/executor.py,sha256=-0BxDqmAI1NCiISi7Rw8McJQfgxxVy1gSa1epYuL3U0,3942
63
- learning_loop_node/trainer/io_helpers.py,sha256=Ylxz8HAId0Jlz95So5kXdJEp1yKQuwroDKIhbTUscF4,7257
64
- learning_loop_node/trainer/rest/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
65
- learning_loop_node/trainer/rest/backdoor_controls.py,sha256=YQcG0KwxzKDNYeMtHrSwr26q__N7ty0o6Kar6CLWAd0,5869
66
- learning_loop_node/trainer/rest/controls.py,sha256=XF37i2edeMHKdSXyJc4ZqaTZ38u6d3u3Sb3C-Mwyfko,934
67
- learning_loop_node/trainer/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
- learning_loop_node/trainer/tests/conftest.py,sha256=qUmcHPme19AD6K6sQektX63iZecdqPRHKQ2CVNoBzNg,2455
69
- learning_loop_node/trainer/tests/state_helper.py,sha256=igoGqTBqcqqFcDng2i7ctC67bYR1hLPDl4G_mNRG6r8,934
70
- learning_loop_node/trainer/tests/states/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
71
- learning_loop_node/trainer/tests/states/test_state_cleanup.py,sha256=tiL31hSjg1Bl2obzg2ufAVpil5qW0YkpDCpSHPqXQrk,1312
72
- learning_loop_node/trainer/tests/states/test_state_detecting.py,sha256=8DSCurMPNuCq1zJ3rC-UA5-IoEcvWGdivHGmXCiakdo,3829
73
- learning_loop_node/trainer/tests/states/test_state_download_train_model.py,sha256=rNRXIyqyHzHz4fXY1Lsf7WKg8FFVFYfFPIevMCBBcCY,2940
74
- learning_loop_node/trainer/tests/states/test_state_prepare.py,sha256=fx9_bgPTaR5ANVB8n_hW8dXcaJIh_iKEnInmhzamZ9E,2432
75
- learning_loop_node/trainer/tests/states/test_state_sync_confusion_matrix.py,sha256=zfNbHB3GFSJXXoEkW-8PYtmX62md3feWp4oisyzs8A4,4773
76
- learning_loop_node/trainer/tests/states/test_state_train.py,sha256=j1vedjH2EwLTgHhon6eR9ttp-Sw9ozR9-9QgAKlFO-M,3248
77
- learning_loop_node/trainer/tests/states/test_state_upload_detections.py,sha256=u31gC0-Z2EVTnia1dyY2yNGDGAeyIXPfObBgrEWHhVQ,7674
78
- learning_loop_node/trainer/tests/states/test_state_upload_model.py,sha256=lWjIqjWBpWppjgX5U9yw_EZw8Zl2BD0cjuZYoMk4ccQ,3751
79
- learning_loop_node/trainer/tests/test_errors.py,sha256=8H-kjs9kEBoHWcQVJIZvW5zcwCs1VQI5Tf5I0VSbCUA,2245
80
- learning_loop_node/trainer/tests/test_trainer_states.py,sha256=OBrClH6srAM2hqqel2xTtfHCeTKYZlG_S4KO2G2GrS4,1147
81
- learning_loop_node/trainer/tests/testing_trainer_logic.py,sha256=eKvCRznWNzHctBEmgiSVemTcLDfCvy80IuhmxkFpvvI,3915
82
- learning_loop_node/trainer/trainer_logic.py,sha256=PJxiO1chPdvpq8UTtzv_nVam9CouCswX9b1FnRwT2Tw,8411
83
- learning_loop_node/trainer/trainer_logic_generic.py,sha256=AzllMMiUPP_CMkjIVqse8wY50Cg5RDnk5y5ERVUjtZg,25801
84
- learning_loop_node/trainer/trainer_node.py,sha256=bcyOMeLXrLuLgsPqS8lwEOSZ6vCjGLgT0pLXgaylI1Q,4155
85
- learning_loop_node-0.10.8.dist-info/METADATA,sha256=TAvIF5I8xB6G4_bXVZs0BOoeyYdUDuMbm-WjUg1G1tw,10383
86
- learning_loop_node-0.10.8.dist-info/WHEEL,sha256=WGfLGfLX43Ei_YORXSnT54hxFygu34kMpcQdmgmEwCQ,88
87
- learning_loop_node-0.10.8.dist-info/RECORD,,