code-loader 1.0.44__tar.gz → 1.0.45__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.
Files changed (28) hide show
  1. {code_loader-1.0.44 → code_loader-1.0.45}/PKG-INFO +1 -1
  2. code_loader-1.0.45/code_loader/code_inegration_processes_manager.py +83 -0
  3. {code_loader-1.0.44 → code_loader-1.0.45}/code_loader/inner_leap_binder/leapbinder.py +0 -2
  4. {code_loader-1.0.44 → code_loader-1.0.45}/code_loader/leaploader.py +4 -4
  5. {code_loader-1.0.44 → code_loader-1.0.45}/pyproject.toml +1 -1
  6. {code_loader-1.0.44 → code_loader-1.0.45}/LICENSE +0 -0
  7. {code_loader-1.0.44 → code_loader-1.0.45}/README.md +0 -0
  8. {code_loader-1.0.44 → code_loader-1.0.45}/code_loader/__init__.py +0 -0
  9. {code_loader-1.0.44 → code_loader-1.0.45}/code_loader/contract/__init__.py +0 -0
  10. {code_loader-1.0.44 → code_loader-1.0.45}/code_loader/contract/datasetclasses.py +0 -0
  11. {code_loader-1.0.44 → code_loader-1.0.45}/code_loader/contract/enums.py +0 -0
  12. {code_loader-1.0.44 → code_loader-1.0.45}/code_loader/contract/exceptions.py +0 -0
  13. {code_loader-1.0.44 → code_loader-1.0.45}/code_loader/contract/responsedataclasses.py +0 -0
  14. {code_loader-1.0.44 → code_loader-1.0.45}/code_loader/contract/visualizer_classes.py +0 -0
  15. {code_loader-1.0.44 → code_loader-1.0.45}/code_loader/experiment_api/__init__.py +0 -0
  16. {code_loader-1.0.44 → code_loader-1.0.45}/code_loader/experiment_api/api.py +0 -0
  17. {code_loader-1.0.44 → code_loader-1.0.45}/code_loader/experiment_api/cli_config_utils.py +0 -0
  18. {code_loader-1.0.44 → code_loader-1.0.45}/code_loader/experiment_api/client.py +0 -0
  19. {code_loader-1.0.44 → code_loader-1.0.45}/code_loader/experiment_api/epoch.py +0 -0
  20. {code_loader-1.0.44 → code_loader-1.0.45}/code_loader/experiment_api/experiment.py +0 -0
  21. {code_loader-1.0.44 → code_loader-1.0.45}/code_loader/experiment_api/experiment_context.py +0 -0
  22. {code_loader-1.0.44 → code_loader-1.0.45}/code_loader/experiment_api/types.py +0 -0
  23. {code_loader-1.0.44 → code_loader-1.0.45}/code_loader/experiment_api/utils.py +0 -0
  24. {code_loader-1.0.44 → code_loader-1.0.45}/code_loader/experiment_api/workingspace_config_utils.py +0 -0
  25. {code_loader-1.0.44 → code_loader-1.0.45}/code_loader/inner_leap_binder/__init__.py +0 -0
  26. {code_loader-1.0.44 → code_loader-1.0.45}/code_loader/utils.py +0 -0
  27. {code_loader-1.0.44 → code_loader-1.0.45}/code_loader/visualizers/__init__.py +0 -0
  28. {code_loader-1.0.44 → code_loader-1.0.45}/code_loader/visualizers/default_visualizers.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: code-loader
3
- Version: 1.0.44
3
+ Version: 1.0.45
4
4
  Summary:
5
5
  Home-page: https://github.com/tensorleap/code-loader
6
6
  License: MIT
@@ -0,0 +1,83 @@
1
+ # mypy: ignore-errors
2
+ import traceback
3
+ from dataclasses import dataclass
4
+
5
+ from typing import List, Tuple, Optional
6
+
7
+ from multiprocessing import Process, Queue
8
+
9
+ from code_loader.leap_loader_parallelized_base import LeapLoaderParallelizedBase
10
+ from code_loader.leaploader import LeapLoader
11
+ from code_loader.contract.enums import DataStateEnum
12
+ from code_loader.metric_calculator_parallelized import MetricCalculatorParallelized
13
+ from code_loader.samples_generator_parallelized import SamplesGeneratorParallelized
14
+
15
+
16
+ @dataclass
17
+ class SampleSerializableError:
18
+ state: DataStateEnum
19
+ index: int
20
+ leap_script_trace: str
21
+ exception_as_str: str
22
+
23
+
24
+ class CodeIntegrationProcessesManager:
25
+ def __init__(self, code_path: str, code_entry_name: str, n_workers: Optional[int] = 2,
26
+ max_samples_in_queue: int = 128) -> None:
27
+ self.metric_calculator_parallelized = MetricCalculatorParallelized(code_path, code_entry_name)
28
+ self.samples_generator_parallelized = SamplesGeneratorParallelized(code_path, code_entry_name)
29
+
30
+ def _create_and_start_process(self) -> Process:
31
+ process = self.multiprocessing_context.Process(
32
+ target=CodeIntegrationProcessesManager._process_func,
33
+ args=(self.code_path, self.code_entry_name, self._inputs_waiting_to_be_process,
34
+ self._ready_processed_results))
35
+ process.daemon = True
36
+ process.start()
37
+ return process
38
+
39
+ def _run_and_warm_first_process(self):
40
+ process = self._create_and_start_process()
41
+ self.processes = [process]
42
+
43
+ # needed in order to make sure the preprocess func runs once in nonparallel
44
+ self._start_process_inputs([(DataStateEnum.training, 0)])
45
+ self._get_next_ready_processed_result()
46
+
47
+ def _operation_decider(self):
48
+ if self.metric_calculator_parallelized._ready_processed_results.empty() and not \
49
+ self.metric_calculator_parallelized._inputs_waiting_to_be_process.empty():
50
+ return 'metric'
51
+
52
+ if self.samples_generator_parallelized._ready_processed_results.empty() and not \
53
+ self.samples_generator_parallelized._inputs_waiting_to_be_process.empty():
54
+ return 'dataset'
55
+
56
+
57
+
58
+
59
+ @staticmethod
60
+ def _process_func(code_path: str, code_entry_name: str,
61
+ samples_to_process: Queue, ready_samples: Queue,
62
+ metrics_to_process: Queue, ready_metrics: Queue) -> None:
63
+ import os
64
+ os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
65
+
66
+ leap_loader = LeapLoader(code_path, code_entry_name)
67
+ while True:
68
+
69
+ # decide on sample or metric to process
70
+ state, idx = samples_to_process.get(block=True)
71
+ leap_loader._preprocess_result()
72
+ try:
73
+ sample = leap_loader.get_sample(state, idx)
74
+ except Exception as e:
75
+ leap_script_trace = traceback.format_exc().split('File "<string>"')[-1]
76
+ ready_samples.put(SampleSerializableError(state, idx, leap_script_trace, str(e)))
77
+ continue
78
+
79
+ ready_samples.put(sample)
80
+
81
+ def generate_samples(self, sample_identities: List[Tuple[DataStateEnum, int]]):
82
+ return self.start_process_inputs(sample_identities)
83
+
@@ -420,14 +420,12 @@ class LeapBinder:
420
420
  ]
421
421
  for i, (single_metadata_name, single_metadata_result) in enumerate(raw_result.items()):
422
422
  metadata_test_result = metadata_test_result_payloads[i]
423
- assert isinstance(single_metadata_result, (float, int, str, bool))
424
423
  result_shape = get_shape(single_metadata_result)
425
424
  metadata_test_result.shape = result_shape
426
425
  metadata_test_result.raw_result = single_metadata_result
427
426
  metadata_test_result.handler_type = handler_type
428
427
  test_result = metadata_test_result_payloads
429
428
  else:
430
- assert not isinstance(raw_result, dict)
431
429
  result_shape = get_shape(raw_result)
432
430
  test_result[0].shape = result_shape
433
431
  test_result[0].raw_result = raw_result
@@ -233,13 +233,13 @@ class LeapLoader:
233
233
  if hasattr(handler_test_payload.raw_result, 'tolist'):
234
234
  handler_test_payload.raw_result = handler_test_payload.raw_result.tolist()
235
235
  metadata_type = type(handler_test_payload.raw_result)
236
- if metadata_type == int:
236
+ if metadata_type == int or isinstance(handler_test_payload.raw_result, (np.unsignedinteger, np.signedinteger)):
237
237
  metadata_type = float
238
- if metadata_type == str:
238
+ if isinstance(handler_test_payload.raw_result, str):
239
239
  dataset_metadata_type = DatasetMetadataType.string
240
- elif metadata_type == bool:
240
+ elif metadata_type == bool or isinstance(handler_test_payload.raw_result, np.bool_):
241
241
  dataset_metadata_type = DatasetMetadataType.boolean
242
- elif metadata_type == float:
242
+ elif metadata_type == float or isinstance(handler_test_payload.raw_result, np.floating):
243
243
  dataset_metadata_type = DatasetMetadataType.float
244
244
  else:
245
245
  raise Exception(f"Unsupported return type of metadata {handler_test_payload.name}."
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "code-loader"
3
- version = "1.0.44"
3
+ version = "1.0.45"
4
4
  description = ""
5
5
  authors = ["dorhar <doron.harnoy@tensorleap.ai>"]
6
6
  license = "MIT"
File without changes
File without changes