code-loader 1.0.77__tar.gz → 1.0.77.dev1__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 (31) hide show
  1. {code_loader-1.0.77 → code_loader-1.0.77.dev1}/PKG-INFO +1 -1
  2. {code_loader-1.0.77 → code_loader-1.0.77.dev1}/code_loader/contract/datasetclasses.py +4 -2
  3. {code_loader-1.0.77 → code_loader-1.0.77.dev1}/code_loader/inner_leap_binder/leapbinder.py +42 -16
  4. {code_loader-1.0.77 → code_loader-1.0.77.dev1}/code_loader/inner_leap_binder/leapbinder_decorators.py +5 -4
  5. {code_loader-1.0.77 → code_loader-1.0.77.dev1}/code_loader/leaploader.py +1 -1
  6. {code_loader-1.0.77 → code_loader-1.0.77.dev1}/pyproject.toml +1 -1
  7. {code_loader-1.0.77 → code_loader-1.0.77.dev1}/LICENSE +0 -0
  8. {code_loader-1.0.77 → code_loader-1.0.77.dev1}/README.md +0 -0
  9. {code_loader-1.0.77 → code_loader-1.0.77.dev1}/code_loader/__init__.py +0 -0
  10. {code_loader-1.0.77 → code_loader-1.0.77.dev1}/code_loader/contract/__init__.py +0 -0
  11. {code_loader-1.0.77 → code_loader-1.0.77.dev1}/code_loader/contract/enums.py +0 -0
  12. {code_loader-1.0.77 → code_loader-1.0.77.dev1}/code_loader/contract/exceptions.py +0 -0
  13. {code_loader-1.0.77 → code_loader-1.0.77.dev1}/code_loader/contract/responsedataclasses.py +0 -0
  14. {code_loader-1.0.77 → code_loader-1.0.77.dev1}/code_loader/contract/visualizer_classes.py +0 -0
  15. {code_loader-1.0.77 → code_loader-1.0.77.dev1}/code_loader/default_losses.py +0 -0
  16. {code_loader-1.0.77 → code_loader-1.0.77.dev1}/code_loader/default_metrics.py +0 -0
  17. {code_loader-1.0.77 → code_loader-1.0.77.dev1}/code_loader/experiment_api/__init__.py +0 -0
  18. {code_loader-1.0.77 → code_loader-1.0.77.dev1}/code_loader/experiment_api/api.py +0 -0
  19. {code_loader-1.0.77 → code_loader-1.0.77.dev1}/code_loader/experiment_api/cli_config_utils.py +0 -0
  20. {code_loader-1.0.77 → code_loader-1.0.77.dev1}/code_loader/experiment_api/client.py +0 -0
  21. {code_loader-1.0.77 → code_loader-1.0.77.dev1}/code_loader/experiment_api/epoch.py +0 -0
  22. {code_loader-1.0.77 → code_loader-1.0.77.dev1}/code_loader/experiment_api/experiment.py +0 -0
  23. {code_loader-1.0.77 → code_loader-1.0.77.dev1}/code_loader/experiment_api/experiment_context.py +0 -0
  24. {code_loader-1.0.77 → code_loader-1.0.77.dev1}/code_loader/experiment_api/types.py +0 -0
  25. {code_loader-1.0.77 → code_loader-1.0.77.dev1}/code_loader/experiment_api/utils.py +0 -0
  26. {code_loader-1.0.77 → code_loader-1.0.77.dev1}/code_loader/experiment_api/workingspace_config_utils.py +0 -0
  27. {code_loader-1.0.77 → code_loader-1.0.77.dev1}/code_loader/inner_leap_binder/__init__.py +0 -0
  28. {code_loader-1.0.77 → code_loader-1.0.77.dev1}/code_loader/leaploaderbase.py +0 -0
  29. {code_loader-1.0.77 → code_loader-1.0.77.dev1}/code_loader/utils.py +0 -0
  30. {code_loader-1.0.77 → code_loader-1.0.77.dev1}/code_loader/visualizers/__init__.py +0 -0
  31. {code_loader-1.0.77 → code_loader-1.0.77.dev1}/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.77
3
+ Version: 1.0.77.dev1
4
4
  Summary:
5
5
  Home-page: https://github.com/tensorleap/code-loader
6
6
  License: MIT
@@ -4,7 +4,8 @@ import re
4
4
  import numpy as np
5
5
  import numpy.typing as npt
6
6
 
7
- from code_loader.contract.enums import DataStateType, DataStateEnum, LeapDataType, ConfusionMatrixValue, MetricDirection
7
+ from code_loader.contract.enums import DataStateType, DataStateEnum, LeapDataType, ConfusionMatrixValue, \
8
+ MetricDirection, DatasetMetadataType
8
9
  from code_loader.contract.visualizer_classes import LeapImage, LeapText, LeapGraph, LeapHorizontalBar, \
9
10
  LeapTextMask, LeapImageMask, LeapImageWithBBox, LeapImageWithHeatmap
10
11
 
@@ -196,6 +197,7 @@ class GroundTruthHandler(DatasetBaseHandler):
196
197
  class MetadataHandler:
197
198
  name: str
198
199
  function: MetadataSectionCallableInterface
200
+ metadata_type: Optional[Union[DatasetMetadataType, Dict[str, DatasetMetadataType]]] = None
199
201
 
200
202
 
201
203
  @dataclass
@@ -232,6 +234,6 @@ class DatasetIntegrationSetup:
232
234
  class DatasetSample:
233
235
  inputs: Dict[str, npt.NDArray[np.float32]]
234
236
  gt: Optional[Dict[str, npt.NDArray[np.float32]]]
235
- metadata: Dict[str, Union[str, int, bool, float]]
237
+ metadata: Dict[str, Union[Optional[str], int, bool, Optional[float]]]
236
238
  index: Union[int, str]
237
239
  state: DataStateEnum
@@ -11,7 +11,7 @@ from code_loader.contract.datasetclasses import SectionCallableInterface, InputH
11
11
  CustomCallableInterfaceMultiArgs, ConfusionMatrixCallableInterfaceMultiArgs, LeapData, \
12
12
  CustomMultipleReturnCallableInterfaceMultiArgs, DatasetBaseHandler, custom_latent_space_attribute, \
13
13
  RawInputsForHeatmap, VisualizerHandlerData, MetricHandlerData, CustomLossHandlerData, SamplePreprocessResponse
14
- from code_loader.contract.enums import LeapDataType, DataStateEnum, DataStateType, MetricDirection
14
+ from code_loader.contract.enums import LeapDataType, DataStateEnum, DataStateType, MetricDirection, DatasetMetadataType
15
15
  from code_loader.contract.responsedataclasses import DatasetTestResultPayload
16
16
  from code_loader.contract.visualizer_classes import map_leap_data_type_to_visualizer_class
17
17
  from code_loader.default_losses import loss_name_to_function
@@ -333,7 +333,8 @@ class LeapBinder:
333
333
 
334
334
  self._encoder_names.append(name)
335
335
 
336
- def set_metadata(self, function: MetadataSectionCallableInterface, name: str) -> None:
336
+ def set_metadata(self, function: MetadataSectionCallableInterface, name: str,
337
+ metadata_type: Optional[Union[DatasetMetadataType, Dict[str, DatasetMetadataType]]] = None) -> None:
337
338
  """
338
339
  Set the metadata handler function. This function is used for measuring and analyzing external variable values per sample, which is recommended for analysis within the Tensorleap platform.
339
340
 
@@ -368,7 +369,7 @@ class LeapBinder:
368
369
  leap_binder.set_metadata(metadata_handler_index, name='metadata_index')
369
370
  leap_binder.set_metadata(metadata_handler_image_mean, name='metadata_image_mean')
370
371
  """
371
- self.setup_container.metadata.append(MetadataHandler(name, function))
372
+ self.setup_container.metadata.append(MetadataHandler(name, function, metadata_type))
372
373
 
373
374
  def set_custom_layer(self, custom_layer: Type[Any], name: str, inspect_layer: bool = False,
374
375
  kernel_index: Optional[int] = None, use_custom_latent_space: bool = False) -> None:
@@ -469,19 +470,44 @@ class LeapBinder:
469
470
  assert preprocess_response.sample_ids is not None
470
471
  raw_result = dataset_base_handler.function(preprocess_response.sample_ids[0], preprocess_response)
471
472
  handler_type = 'metadata' if isinstance(dataset_base_handler, MetadataHandler) else None
472
- if isinstance(dataset_base_handler, MetadataHandler) and isinstance(raw_result, dict):
473
- metadata_test_result_payloads = [
474
- DatasetTestResultPayload(f'{dataset_base_handler.name}_{single_metadata_name}')
475
- for single_metadata_name, single_metadata_result in raw_result.items()
476
- ]
477
- for i, (single_metadata_name, single_metadata_result) in enumerate(raw_result.items()):
478
- metadata_test_result = metadata_test_result_payloads[i]
479
-
480
- result_shape = get_shape(single_metadata_result)
481
- metadata_test_result.shape = result_shape
482
- metadata_test_result.raw_result = single_metadata_result
483
- metadata_test_result.handler_type = handler_type
484
- test_result = metadata_test_result_payloads
473
+ if isinstance(dataset_base_handler, MetadataHandler):
474
+ if isinstance(raw_result, dict):
475
+ metadata_test_result_payloads = [
476
+ DatasetTestResultPayload(f'{dataset_base_handler.name}_{single_metadata_name}')
477
+ for single_metadata_name, single_metadata_result in raw_result.items()
478
+ ]
479
+ for i, (single_metadata_name, single_metadata_result) in enumerate(raw_result.items()):
480
+ metadata_test_result = metadata_test_result_payloads[i]
481
+
482
+ metadata_type = None
483
+ if single_metadata_result is None:
484
+ if dataset_base_handler.metadata_type is None:
485
+ raise Exception(f"Metadata {single_metadata_name} is None and no metadata type is provided")
486
+ elif isinstance(dataset_base_handler.metadata_type, dict):
487
+ if single_metadata_name not in dataset_base_handler.metadata_type:
488
+ raise Exception(f"Metadata {single_metadata_name} is None and no metadata type is provided")
489
+ metadata_type = dataset_base_handler.metadata_type[single_metadata_name]
490
+ else:
491
+ raise Exception(f"Metadata {single_metadata_name} is None and no metadata type is provided")
492
+
493
+ result_shape = get_shape(single_metadata_result)
494
+ metadata_test_result.shape = result_shape
495
+ metadata_test_result.raw_result = (
496
+ single_metadata_result) if single_metadata_result is not None else metadata_type
497
+ metadata_test_result.handler_type = handler_type
498
+ test_result = metadata_test_result_payloads
499
+ else:
500
+ if raw_result is None:
501
+ if dataset_base_handler.metadata_type is None:
502
+ raise Exception(f"Metadata {dataset_base_handler.name} is None and no metadata type is provided")
503
+ elif isinstance(dataset_base_handler.metadata_type, dict):
504
+ raise Exception(f"Metadata {dataset_base_handler.name} is None and no metadata type is provided")
505
+ metadata_type = dataset_base_handler.metadata_type
506
+
507
+ result_shape = get_shape(raw_result)
508
+ test_result[0].shape = result_shape
509
+ test_result[0].raw_result = raw_result if raw_result is not None else metadata_type
510
+ test_result[0].handler_type = handler_type
485
511
  else:
486
512
  result_shape = get_shape(raw_result)
487
513
  test_result[0].shape = result_shape
@@ -9,7 +9,7 @@ from code_loader.contract.datasetclasses import CustomCallableInterfaceMultiArgs
9
9
  CustomMultipleReturnCallableInterfaceMultiArgs, ConfusionMatrixCallableInterfaceMultiArgs, CustomCallableInterface, \
10
10
  VisualizerCallableInterface, MetadataSectionCallableInterface, PreprocessResponse, SectionCallableInterface, \
11
11
  ConfusionMatrixElement, SamplePreprocessResponse
12
- from code_loader.contract.enums import MetricDirection, LeapDataType
12
+ from code_loader.contract.enums import MetricDirection, LeapDataType, DatasetMetadataType
13
13
  from code_loader import leap_binder
14
14
  from code_loader.contract.visualizer_classes import LeapImage, LeapImageMask, LeapTextMask, LeapText, LeapGraph, \
15
15
  LeapHorizontalBar, LeapImageWithBBox, LeapImageWithHeatmap
@@ -160,14 +160,15 @@ def tensorleap_custom_visualizer(name: str, visualizer_type: LeapDataType,
160
160
  return decorating_function
161
161
 
162
162
 
163
- def tensorleap_metadata(name: str):
163
+ def tensorleap_metadata(
164
+ name: str, metadata_type: Optional[Union[DatasetMetadataType, Dict[str, DatasetMetadataType]]] = None):
164
165
  def decorating_function(user_function: MetadataSectionCallableInterface):
165
166
  for metadata_handler in leap_binder.setup_container.metadata:
166
167
  if metadata_handler.name == name:
167
168
  raise Exception(f'Metadata with name {name} already exists. '
168
169
  f'Please choose another')
169
170
 
170
- leap_binder.set_metadata(user_function, name)
171
+ leap_binder.set_metadata(user_function, name, metadata_type)
171
172
 
172
173
  def _validate_input_args(sample_id: Union[int, str], preprocess_response: PreprocessResponse):
173
174
  assert isinstance(sample_id, (int, str)), \
@@ -182,7 +183,7 @@ def tensorleap_metadata(name: str):
182
183
  f'{preprocess_response.sample_id_type}. Got {type(sample_id)}.')
183
184
 
184
185
  def _validate_result(result):
185
- supported_result_types = (int, str, bool, float, dict, np.floating,
186
+ supported_result_types = (type(None), int, str, bool, float, dict, np.floating,
186
187
  np.bool_, np.unsignedinteger, np.signedinteger, np.integer)
187
188
  assert isinstance(result, supported_result_types), \
188
189
  (f'tensorleap_metadata validation failed: '
@@ -46,7 +46,7 @@ class LeapLoader(LeapLoaderBase):
46
46
 
47
47
  def evaluate_module(self) -> None:
48
48
  def append_path_recursively(full_path: str) -> None:
49
- if self.code_path not in full_path or full_path == '/':
49
+ if '/' not in full_path or full_path == '/':
50
50
  return
51
51
 
52
52
  parent_path = str(Path(full_path).parent)
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "code-loader"
3
- version = "1.0.77"
3
+ version = "1.0.77.dev1"
4
4
  description = ""
5
5
  authors = ["dorhar <doron.harnoy@tensorleap.ai>"]
6
6
  license = "MIT"
File without changes