learning-loop-node 0.10.5__tar.gz → 0.10.6__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.

Files changed (85) hide show
  1. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/PKG-INFO +1 -1
  2. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/annotation/tests/test_annotator_node.py +6 -6
  3. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/detector/detector_node.py +0 -5
  4. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/tests/test_executor.py +1 -0
  5. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/trainer/executor.py +3 -3
  6. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/trainer/tests/conftest.py +2 -2
  7. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/trainer/tests/states/test_state_detecting.py +3 -3
  8. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/pyproject.toml +1 -1
  9. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/README.md +0 -0
  10. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/__init__.py +0 -0
  11. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/annotation/__init__.py +0 -0
  12. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/annotation/annotator_logic.py +0 -0
  13. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/annotation/annotator_node.py +0 -0
  14. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/conftest.py +0 -0
  15. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/data_classes/__init__.py +0 -0
  16. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/data_classes/annotations.py +0 -0
  17. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/data_classes/detections.py +0 -0
  18. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/data_classes/general.py +0 -0
  19. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/data_classes/socket_response.py +0 -0
  20. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/data_classes/training.py +0 -0
  21. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/data_exchanger.py +0 -0
  22. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/detector/__init__.py +0 -0
  23. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/detector/detector_logic.py +0 -0
  24. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/detector/inbox_filter/__init__.py +0 -0
  25. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/detector/inbox_filter/cam_observation_history.py +0 -0
  26. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/detector/inbox_filter/relevance_filter.py +0 -0
  27. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/detector/inbox_filter/tests/test_observation.py +0 -0
  28. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/detector/inbox_filter/tests/test_relevance_group.py +0 -0
  29. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/detector/inbox_filter/tests/test_unexpected_observations_count.py +0 -0
  30. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/detector/outbox.py +0 -0
  31. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/detector/rest/__init__.py +0 -0
  32. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/detector/rest/about.py +0 -0
  33. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/detector/rest/backdoor_controls.py +0 -0
  34. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/detector/rest/detect.py +0 -0
  35. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/detector/rest/operation_mode.py +0 -0
  36. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/detector/rest/upload.py +0 -0
  37. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/detector/tests/__init__.py +0 -0
  38. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/detector/tests/conftest.py +0 -0
  39. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/detector/tests/test.jpg +0 -0
  40. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/detector/tests/test_client_communication.py +0 -0
  41. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/detector/tests/test_outbox.py +0 -0
  42. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/detector/tests/test_relevance_filter.py +0 -0
  43. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/detector/tests/testing_detector.py +0 -0
  44. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/examples/novelty_score_updater.py +0 -0
  45. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/globals.py +0 -0
  46. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/helpers/__init__.py +0 -0
  47. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/helpers/environment_reader.py +0 -0
  48. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/helpers/gdrive_downloader.py +0 -0
  49. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/helpers/log_conf.py +0 -0
  50. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/helpers/misc.py +0 -0
  51. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/loop_communication.py +0 -0
  52. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/node.py +0 -0
  53. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/py.typed +0 -0
  54. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/pytest.ini +0 -0
  55. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/tests/__init__.py +0 -0
  56. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/tests/conftest.py +0 -0
  57. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/tests/test_data/file_1.txt +0 -0
  58. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/tests/test_data/file_2.txt +0 -0
  59. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/tests/test_data/model.json +0 -0
  60. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/tests/test_data_classes.py +0 -0
  61. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/tests/test_downloader.py +0 -0
  62. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/tests/test_helper.py +0 -0
  63. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/tests/test_learning_loop_node.py +0 -0
  64. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/trainer/__init__.py +0 -0
  65. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/trainer/downloader.py +0 -0
  66. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/trainer/io_helpers.py +0 -0
  67. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/trainer/rest/__init__.py +0 -0
  68. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/trainer/rest/backdoor_controls.py +0 -0
  69. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/trainer/rest/controls.py +0 -0
  70. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/trainer/tests/__init__.py +0 -0
  71. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/trainer/tests/state_helper.py +0 -0
  72. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/trainer/tests/states/__init__.py +0 -0
  73. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/trainer/tests/states/test_state_cleanup.py +0 -0
  74. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/trainer/tests/states/test_state_download_train_model.py +0 -0
  75. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/trainer/tests/states/test_state_prepare.py +0 -0
  76. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/trainer/tests/states/test_state_sync_confusion_matrix.py +0 -0
  77. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/trainer/tests/states/test_state_train.py +0 -0
  78. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/trainer/tests/states/test_state_upload_detections.py +0 -0
  79. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/trainer/tests/states/test_state_upload_model.py +0 -0
  80. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/trainer/tests/test_errors.py +0 -0
  81. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/trainer/tests/test_trainer_states.py +0 -0
  82. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/trainer/tests/testing_trainer_logic.py +0 -0
  83. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/trainer/trainer_logic.py +0 -0
  84. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/trainer/trainer_logic_generic.py +0 -0
  85. {learning_loop_node-0.10.5 → learning_loop_node-0.10.6}/learning_loop_node/trainer/trainer_node.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: learning-loop-node
3
- Version: 0.10.5
3
+ Version: 0.10.6
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
@@ -1,3 +1,4 @@
1
+ import asyncio
1
2
  import os
2
3
  from dataclasses import asdict
3
4
  from typing import Dict
@@ -7,10 +8,8 @@ from fastapi.encoders import jsonable_encoder
7
8
 
8
9
  from learning_loop_node.annotation.annotator_logic import AnnotatorLogic
9
10
  from learning_loop_node.annotation.annotator_node import AnnotatorNode
10
- from learning_loop_node.data_classes import (AnnotationData,
11
- AnnotationEventType, Category,
12
- CategoryType, Context, Point,
13
- ToolOutput, UserInput)
11
+ from learning_loop_node.data_classes import (AnnotationData, AnnotationEventType, Category, CategoryType, Context,
12
+ Point, ToolOutput, UserInput)
14
13
 
15
14
 
16
15
  class MockedAnnotatatorLogic(AnnotatorLogic):
@@ -29,7 +28,7 @@ def default_user_input() -> UserInput:
29
28
  coordinate=Point(x=0, y=0),
30
29
  event_type=AnnotationEventType.LeftMouseDown,
31
30
  context=Context(organization='zauberzeug', project='pytest_p'),
32
- image_uuid='501205a9-9b64-3df0-3785-507a677b7f05',
31
+ image_uuid='f786350c-89ca-9424-9b00-720a9a85fe09',
33
32
  category=Category(id='some_id', name='category_1', description='',
34
33
  hotkey='', color='', type=CategoryType.Segmentation)
35
34
  )
@@ -40,7 +39,8 @@ def default_user_input() -> UserInput:
40
39
 
41
40
  @pytest.mark.asyncio
42
41
  async def test_image_download(setup_test_project): # pylint: disable=unused-argument
43
- image_path = '/tmp/learning_loop_lib_data/zauberzeug/pytest_p/images/501205a9-9b64-3df0-3785-507a677b7f05.jpg'
42
+ # TODO: This test depends on a pseudo-random uuid..
43
+ image_path = '/tmp/learning_loop_lib_data/zauberzeug/pytest_p/images/f786350c-89ca-9424-9b00-720a9a85fe09.jpg'
44
44
 
45
45
  assert os.path.exists(image_path) is False
46
46
 
@@ -156,9 +156,6 @@ class DetectorNode(Node):
156
156
 
157
157
  tags = data.get('tags', [])
158
158
  tags.append('picked_by_system')
159
- camera_id = data.get('camera-id', None) or data.get('mac', None)
160
- if camera_id is not None:
161
- tags.append(camera_id)
162
159
 
163
160
  loop = asyncio.get_event_loop()
164
161
  try:
@@ -315,8 +312,6 @@ class DetectorNode(Node):
315
312
  n_po, n_se = len(detections.point_detections), len(detections.segmentation_detections)
316
313
  self.log.info(f'detected:{n_bo} boxes, {n_po} points, {n_se} segs, {n_cl} classes')
317
314
 
318
- if camera_id is not None:
319
- tags.append(camera_id)
320
315
  if autoupload is None or autoupload == 'filtered': # NOTE default is filtered
321
316
  Thread(target=self.relevance_filter.may_upload_detections,
322
317
  args=(detections, camera_id, raw_image, tags)).start()
@@ -44,6 +44,7 @@ async def test_executor_lifecycle():
44
44
 
45
45
  assert not executor.is_running()
46
46
  sleep(1)
47
+ # NOTE: It happend that this process became a zombie process which leads to repeated test failures -> restart machine required
47
48
  assert_process_is_running('some_executable.sh', False)
48
49
 
49
50
 
@@ -3,7 +3,7 @@ import logging
3
3
  import os
4
4
  import shlex
5
5
  from io import BufferedWriter
6
- from typing import List, Optional
6
+ from typing import List, Optional, Dict
7
7
 
8
8
 
9
9
  class Executor:
@@ -16,7 +16,7 @@ class Executor:
16
16
 
17
17
  self.path = base_path
18
18
  self.log_file_path = f'{self.path}/{log_name}'
19
- self.log_file: None | BufferedWriter = None
19
+ self.log_file: Optional[BufferedWriter] = None
20
20
  self._process: Optional[asyncio.subprocess.Process] = None # pylint: disable=no-member
21
21
  os.makedirs(self.path, exist_ok=True)
22
22
 
@@ -26,7 +26,7 @@ class Executor:
26
26
  return self._process
27
27
  return None
28
28
 
29
- async def start(self, cmd: str, env: Optional[dict[str, str]] = None) -> None:
29
+ async def start(self, cmd: str, env: Optional[Dict[str, str]] = None) -> None:
30
30
  """Start the process with the given command and environment variables."""
31
31
 
32
32
  full_env = os.environ.copy()
@@ -29,7 +29,7 @@ async def test_initialized_trainer_node():
29
29
  trainer._node = node
30
30
  trainer._init_new_training(context=Context(organization='zauberzeug', project='demo'),
31
31
  details={'categories': [],
32
- 'id': '917d5c7f-403d-7e92-f95f-577f79c2273a', # version 1.2 of demo project
32
+ 'id': '00000000-0000-0000-0000-000000000012', # version 1.2 of demo project
33
33
  'training_number': 0,
34
34
  'resolution': 800,
35
35
  'flip_rl': False,
@@ -49,7 +49,7 @@ async def test_initialized_trainer():
49
49
  trainer._node = node
50
50
  trainer._init_new_training(context=Context(organization='zauberzeug', project='demo'),
51
51
  details={'categories': [],
52
- 'id': '917d5c7f-403d-7e92-f95f-577f79c2273a', # version 1.2 of demo project
52
+ 'id': '00000000-0000-0000-0000-000000000012', # version 1.2 of demo project
53
53
  'training_number': 0,
54
54
  'resolution': 800,
55
55
  'flip_rl': False,
@@ -14,11 +14,11 @@ def trainer_has_error(trainer: TrainerLogic):
14
14
  return trainer.errors.has_error_for(error_key)
15
15
 
16
16
 
17
- async def test_successful_detecting(test_initialized_trainer: TestingTrainerLogic): # NOTE was a flaky test
17
+ async def test_successful_detecting(test_initialized_trainer: TestingTrainerLogic):
18
18
  trainer = test_initialized_trainer
19
19
  create_active_training_file(trainer, training_state='train_model_uploaded',
20
- model_uuid_for_detecting='917d5c7f-403d-7e92-f95f-577f79c2273a')
21
- # trainer.load_active_training()
20
+ model_uuid_for_detecting='00000000-0000-0000-0000-000000000011') # NOTE: this is the hard coded model uuid for zauberzeug/demo (model version 1.1)
21
+
22
22
  _ = asyncio.get_running_loop().create_task(
23
23
  trainer._perform_state('do_detections', TrainerState.Detecting, TrainerState.Detected, trainer._do_detections))
24
24
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "learning_loop_node"
3
- version = "v0.10.5"
3
+ version = "v0.10.6"
4
4
  description = "Python Library for Nodes which connect to the Zauberzeug Learning Loop"
5
5
  authors = ["Zauberzeug GmbH <info@zauberzeug.com>"]
6
6
  license = "MIT"