code-loader 1.0.124__tar.gz → 1.0.124.dev0__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 code-loader might be problematic. Click here for more details.

Files changed (36) hide show
  1. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/PKG-INFO +1 -1
  2. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/code_loader/contract/datasetclasses.py +4 -4
  3. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/code_loader/inner_leap_binder/leapbinder_decorators.py +59 -16
  4. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/code_loader/leaploader.py +6 -8
  5. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/code_loader/leaploaderbase.py +2 -2
  6. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/code_loader/mixpanel_tracker.py +0 -5
  7. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/code_loader/utils.py +6 -6
  8. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/pyproject.toml +1 -1
  9. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/LICENSE +0 -0
  10. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/README.md +0 -0
  11. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/code_loader/__init__.py +0 -0
  12. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/code_loader/contract/__init__.py +0 -0
  13. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/code_loader/contract/enums.py +0 -0
  14. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/code_loader/contract/exceptions.py +0 -0
  15. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/code_loader/contract/mapping.py +0 -0
  16. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/code_loader/contract/responsedataclasses.py +0 -0
  17. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/code_loader/contract/visualizer_classes.py +0 -0
  18. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/code_loader/default_losses.py +0 -0
  19. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/code_loader/default_metrics.py +0 -0
  20. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/code_loader/experiment_api/__init__.py +0 -0
  21. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/code_loader/experiment_api/api.py +0 -0
  22. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/code_loader/experiment_api/cli_config_utils.py +0 -0
  23. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/code_loader/experiment_api/client.py +0 -0
  24. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/code_loader/experiment_api/epoch.py +0 -0
  25. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/code_loader/experiment_api/experiment.py +0 -0
  26. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/code_loader/experiment_api/experiment_context.py +0 -0
  27. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/code_loader/experiment_api/types.py +0 -0
  28. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/code_loader/experiment_api/utils.py +0 -0
  29. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/code_loader/experiment_api/workingspace_config_utils.py +0 -0
  30. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/code_loader/inner_leap_binder/__init__.py +0 -0
  31. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/code_loader/inner_leap_binder/leapbinder.py +0 -0
  32. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/code_loader/plot_functions/__init__.py +0 -0
  33. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/code_loader/plot_functions/plot_functions.py +0 -0
  34. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/code_loader/plot_functions/visualize.py +0 -0
  35. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/code_loader/visualizers/__init__.py +0 -0
  36. {code_loader-1.0.124 → code_loader-1.0.124.dev0}/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.124
3
+ Version: 1.0.124.dev0
4
4
  Summary:
5
5
  Home-page: https://github.com/tensorleap/code-loader
6
6
  License: MIT
@@ -40,12 +40,10 @@ class PreprocessResponse:
40
40
  sample_id_type: Optional[Union[Type[str], Type[int]]] = None
41
41
  sample_ids_to_instance_mappings: Optional[Dict[str, List[str]]] = None # in use only for element instance
42
42
  instance_to_sample_ids_mappings: Optional[Dict[str, str]] = None # in use only for element instance
43
- instance_ids_to_names: Optional[Dict[str, str]] = None # in use only for element instance
44
43
 
45
44
  def __post_init__(self) -> None:
46
45
  assert self.sample_ids_to_instance_mappings is None, f"Keep sample_ids_to_instance_mappings None when initializing PreprocessResponse"
47
46
  assert self.instance_to_sample_ids_mappings is None, f"Keep instance_to_sample_ids_mappings None when initializing PreprocessResponse"
48
- assert self.instance_ids_to_names is None, f"Keep instance_ids_to_names None when initializing PreprocessResponse"
49
47
 
50
48
  if self.length is not None and self.sample_ids is None:
51
49
  self.sample_ids = [i for i in range(self.length)]
@@ -73,7 +71,9 @@ class ElementInstance:
73
71
  mask: npt.NDArray[np.float32]
74
72
 
75
73
  SectionCallableInterface = Callable[[Union[int, str], PreprocessResponse], npt.NDArray[np.float32]]
76
- InstanceCallableInterface = Callable[[Union[int, str], PreprocessResponse], List[ElementInstance]]
74
+ InstanceCallableInterface = Callable[[Union[int, str], PreprocessResponse, int], Optional[ElementInstance]]
75
+ InstanceLengthCallableInterface = Callable[[Union[int, str], PreprocessResponse], int]
76
+
77
77
 
78
78
  MetadataSectionCallableInterface = Union[
79
79
  Callable[[Union[int, str], PreprocessResponse], int],
@@ -257,6 +257,6 @@ class DatasetSample:
257
257
  metadata_is_none: Dict[str, bool]
258
258
  index: Union[int, str]
259
259
  state: DataStateEnum
260
- instance_masks: Optional[Dict[str, List[ElementInstance]]] = None
261
260
  custom_latent_space: Optional[npt.NDArray[np.float32]] = None
261
+ instance_masks: Optional[Dict[str, ElementInstance]] = None
262
262
 
@@ -8,7 +8,8 @@ import numpy.typing as npt
8
8
  from code_loader.contract.datasetclasses import CustomCallableInterfaceMultiArgs, \
9
9
  CustomMultipleReturnCallableInterfaceMultiArgs, ConfusionMatrixCallableInterfaceMultiArgs, CustomCallableInterface, \
10
10
  VisualizerCallableInterface, MetadataSectionCallableInterface, PreprocessResponse, SectionCallableInterface, \
11
- ConfusionMatrixElement, SamplePreprocessResponse, PredictionTypeHandler, InstanceCallableInterface, ElementInstance
11
+ ConfusionMatrixElement, SamplePreprocessResponse, PredictionTypeHandler, InstanceCallableInterface, ElementInstance, \
12
+ InstanceLengthCallableInterface
12
13
  from code_loader.contract.enums import MetricDirection, LeapDataType, DatasetMetadataType
13
14
  from code_loader import leap_binder
14
15
  from code_loader.contract.mapping import NodeMapping, NodeMappingType, NodeConnection
@@ -529,29 +530,24 @@ def tensorleap_preprocess():
529
530
 
530
531
 
531
532
  def tensorleap_element_instance_preprocess(
532
- instance_mask_encoder: Callable[[str, PreprocessResponse], List[ElementInstance]]):
533
+ instance_length_encoder: InstanceLengthCallableInterface):
533
534
  def decorating_function(user_function: Callable[[], List[PreprocessResponse]]):
534
535
  def user_function_instance() -> List[PreprocessResponse]:
535
536
  result = user_function()
536
537
  for preprocess_response in result:
537
538
  sample_ids_to_instance_mappings = {}
538
539
  instance_to_sample_ids_mappings = {}
539
- instance_ids_to_names = {}
540
540
  all_sample_ids = preprocess_response.sample_ids.copy()
541
541
  for sample_id in preprocess_response.sample_ids:
542
- instances_masks = instance_mask_encoder(sample_id, preprocess_response)
543
- instances_ids = [f'{sample_id}_{instance_id}' for instance_id in range(len(instances_masks))]
542
+ instances_length = instance_length_encoder(sample_id, preprocess_response)
543
+ instances_ids = [f'{sample_id}_{instance_id}' for instance_id in range(instances_length)]
544
544
  sample_ids_to_instance_mappings[sample_id] = instances_ids
545
545
  instance_to_sample_ids_mappings[sample_id] = sample_id
546
- instance_names = [instance.name for instance in instances_masks]
547
- instance_ids_to_names[sample_id] = 'none'
548
- for instance_id, instance_name in zip(instances_ids, instance_names):
546
+ for instance_id in instances_ids:
549
547
  instance_to_sample_ids_mappings[instance_id] = sample_id
550
- instance_ids_to_names[instance_id] = instance_name
551
548
  all_sample_ids.extend(instances_ids)
552
549
  preprocess_response.sample_ids_to_instance_mappings = sample_ids_to_instance_mappings
553
550
  preprocess_response.instance_to_sample_ids_mappings = instance_to_sample_ids_mappings
554
- preprocess_response.instance_ids_to_names = instance_ids_to_names
555
551
  preprocess_response.sample_ids = all_sample_ids
556
552
  return result
557
553
 
@@ -620,7 +616,7 @@ def tensorleap_unlabeled_preprocess():
620
616
 
621
617
  def tensorleap_instances_masks_encoder(name: str):
622
618
  def decorating_function(user_function: InstanceCallableInterface):
623
- def _validate_input_args(sample_id: str, preprocess_response: PreprocessResponse):
619
+ def _validate_input_args(sample_id: str, preprocess_response: PreprocessResponse, instance_id: int):
624
620
  assert isinstance(sample_id, str), \
625
621
  (f'tensorleap_instances_masks_encoder validation failed: '
626
622
  f'Argument sample_id should be str. Got {type(sample_id)}.')
@@ -631,18 +627,21 @@ def tensorleap_instances_masks_encoder(name: str):
631
627
  (f'tensorleap_instances_masks_encoder validation failed: '
632
628
  f'Argument sample_id should be as the same type as defined in the preprocess response '
633
629
  f'{preprocess_response.sample_id_type}. Got {type(sample_id)}.')
630
+ assert isinstance(instance_id, int), \
631
+ (f'tensorleap_instances_masks_encoder validation failed: '
632
+ f'Argument instance_id should be int. Got {type(instance_id)}.')
634
633
 
635
634
  def _validate_result(result):
636
- assert isinstance(result, list), \
635
+ assert isinstance(result, ElementInstance) or (result is None), \
637
636
  (f'tensorleap_instances_masks_encoder validation failed: '
638
- f'Unsupported return type. Should be a numpy array. Got {type(result)}.')
637
+ f'Unsupported return type. Should be a ElementInstance or None. Got {type(result)}.')
639
638
 
640
- def inner_without_validate(sample_id, preprocess_response):
639
+ def inner_without_validate(sample_id, preprocess_response, instance_id):
641
640
  global _called_from_inside_tl_decorator
642
641
  _called_from_inside_tl_decorator += 1
643
642
 
644
643
  try:
645
- result = user_function(sample_id, preprocess_response)
644
+ result = user_function(sample_id, preprocess_response, instance_id)
646
645
  finally:
647
646
  _called_from_inside_tl_decorator -= 1
648
647
 
@@ -650,6 +649,51 @@ def tensorleap_instances_masks_encoder(name: str):
650
649
 
651
650
  leap_binder.set_instance_masks(inner_without_validate, name)
652
651
 
652
+ def inner(sample_id, preprocess_response, instance_id):
653
+ if os.environ.get(mapping_runtime_mode_env_var_mame):
654
+ return None
655
+
656
+ _validate_input_args(sample_id, preprocess_response, instance_id)
657
+
658
+ result = inner_without_validate(sample_id, preprocess_response, instance_id)
659
+
660
+ _validate_result(result)
661
+ return result
662
+
663
+ return inner
664
+
665
+ return decorating_function
666
+
667
+ def tensorleap_instances_length_encoder(name: str):
668
+ def decorating_function(user_function: InstanceLengthCallableInterface):
669
+ def _validate_input_args(sample_id: str, preprocess_response: PreprocessResponse):
670
+ assert isinstance(sample_id, str), \
671
+ (f'tensorleap_instances_length_encoder validation failed: '
672
+ f'Argument sample_id should be str. Got {type(sample_id)}.')
673
+ assert isinstance(preprocess_response, PreprocessResponse), \
674
+ (f'tensorleap_instances_length_encoder validation failed: '
675
+ f'Argument preprocess_response should be a PreprocessResponse. Got {type(preprocess_response)}.')
676
+ assert type(sample_id) == preprocess_response.sample_id_type, \
677
+ (f'tensorleap_instances_length_encoder validation failed: '
678
+ f'Argument sample_id should be as the same type as defined in the preprocess response '
679
+ f'{preprocess_response.sample_id_type}. Got {type(sample_id)}.')
680
+
681
+ def _validate_result(result):
682
+ assert isinstance(result, int), \
683
+ (f'tensorleap_instances_length_encoder validation failed: '
684
+ f'Unsupported return type. Should be a int. Got {type(result)}.')
685
+
686
+ def inner_without_validate(sample_id, preprocess_response):
687
+ global _called_from_inside_tl_decorator
688
+ _called_from_inside_tl_decorator += 1
689
+
690
+ try:
691
+ result = user_function(sample_id, preprocess_response)
692
+ finally:
693
+ _called_from_inside_tl_decorator -= 1
694
+
695
+ return result
696
+
653
697
  def inner(sample_id, preprocess_response):
654
698
  if os.environ.get(mapping_runtime_mode_env_var_mame):
655
699
  return None
@@ -665,7 +709,6 @@ def tensorleap_instances_masks_encoder(name: str):
665
709
 
666
710
  return decorating_function
667
711
 
668
-
669
712
  def tensorleap_input_encoder(name: str, channel_dim=-1, model_input_index=None):
670
713
  def decorating_function(user_function: SectionCallableInterface):
671
714
  for input_handler in leap_binder.setup_container.inputs:
@@ -170,7 +170,6 @@ class LeapLoader(LeapLoaderBase):
170
170
  custom_latent_space = global_leap_binder.setup_container.custom_latent_space.function(sample_id,
171
171
  preprocess_result[
172
172
  state])
173
-
174
173
  sample = DatasetSample(inputs=self._get_inputs(state, sample_id),
175
174
  gt=None if state == DataStateEnum.unlabeled else self._get_gt(state, sample_id),
176
175
  metadata=metadata,
@@ -180,7 +179,7 @@ class LeapLoader(LeapLoaderBase):
180
179
  custom_latent_space=custom_latent_space)
181
180
  return sample
182
181
 
183
- def get_sample_with_masks(self, state: DataStateEnum, sample_id: Union[int, str]) -> DatasetSample:
182
+ def get_sample_with_masks(self, state: DataStateEnum, sample_id: Union[int, str], instance_id: int) -> DatasetSample:
184
183
  self.exec_script()
185
184
  preprocess_result = self._preprocess_result()
186
185
  if state == DataStateEnum.unlabeled and sample_id not in preprocess_result[state].sample_ids:
@@ -193,7 +192,7 @@ class LeapLoader(LeapLoaderBase):
193
192
  metadata_is_none=metadata_is_none,
194
193
  index=sample_id,
195
194
  state=state,
196
- instance_masks=self._get_instances_masks(state, sample_id))
195
+ instance_masks=self._get_instances_masks(state, sample_id, instance_id))
197
196
  return sample
198
197
 
199
198
  def check_dataset(self) -> DatasetIntegParseResult:
@@ -484,13 +483,12 @@ class LeapLoader(LeapLoaderBase):
484
483
  def _get_inputs(self, state: DataStateEnum, sample_id: Union[int, str]) -> Dict[str, npt.NDArray[np.float32]]:
485
484
  return self._get_dataset_handlers(global_leap_binder.setup_container.inputs, state, sample_id)
486
485
 
487
- def _get_instances_masks(self, state: DataStateEnum, sample_id: Union[int, str]) -> Dict[
488
- str, List[ElementInstance]]:
486
+ def _get_instances_masks(self, state: DataStateEnum, sample_id: Union[int, str], instance_id: int) -> Dict[str, ElementInstance]:
489
487
  preprocess_result = self._preprocess_result()
490
488
  preprocess_state = preprocess_result[state]
491
489
  result_agg = {}
492
490
  for handler in global_leap_binder.setup_container.instance_masks:
493
- handler_result = handler.function(sample_id, preprocess_state)
491
+ handler_result = handler.function(sample_id, preprocess_state, instance_id)
494
492
  handler_name = handler.name
495
493
  result_agg[handler_name] = handler_result
496
494
  return result_agg
@@ -570,7 +568,7 @@ class LeapLoader(LeapLoaderBase):
570
568
  self.exec_script()
571
569
  return global_leap_binder.setup_container.custom_latent_space is not None
572
570
 
573
- def get_instances_data(self, state: DataStateEnum) -> Tuple[Dict[str, List[str]], Dict[str, str], Dict[str, str]]:
571
+ def get_instances_data(self, state: DataStateEnum) -> Tuple[Dict[str, List[str]], Dict[str, str]]:
574
572
  """
575
573
  This Method get the data state and returns two dictionaries that holds the mapping of the sample ids to their
576
574
  instances and the other way around and the sample ids array.
@@ -583,4 +581,4 @@ class LeapLoader(LeapLoaderBase):
583
581
  """
584
582
  preprocess_result = self._preprocess_result()
585
583
  preprocess_state = preprocess_result[state]
586
- return preprocess_state.sample_ids_to_instance_mappings, preprocess_state.instance_to_sample_ids_mappings, preprocess_state.instance_ids_to_names
584
+ return preprocess_state.sample_ids_to_instance_mappings, preprocess_state.instance_to_sample_ids_mappings
@@ -65,11 +65,11 @@ class LeapLoaderBase:
65
65
  pass
66
66
 
67
67
  @abstractmethod
68
- def get_sample_with_masks(self, state: DataStateEnum, sample_id: Union[int, str]) -> DatasetSample:
68
+ def get_sample_with_masks(self, state: DataStateEnum, sample_id: Union[int, str], instance_id: int) -> DatasetSample:
69
69
  pass
70
70
 
71
71
  @abstractmethod
72
- def get_instances_data(self, state: DataStateEnum) -> Tuple[Dict[str, List[str]], Dict[str, str], Dict[str, str]]:
72
+ def get_instances_data(self, state: DataStateEnum) -> Tuple[Dict[str, List[str]], Dict[str, str]]:
73
73
  pass
74
74
 
75
75
  @abstractmethod
@@ -94,10 +94,6 @@ class MixpanelTracker:
94
94
  Args:
95
95
  event_properties: Optional additional properties to include in the event
96
96
  """
97
- # Skip tracking if IS_TENSORLEAP_PLATFORM environment variable is set to 'true'
98
- if os.environ.get('IS_TENSORLEAP_PLATFORM') == 'true':
99
- return
100
-
101
97
  try:
102
98
  distinct_id = self._get_distinct_id()
103
99
 
@@ -110,7 +106,6 @@ class MixpanelTracker:
110
106
  '$device_id': device_id, # Always use device_id for $device_id
111
107
  'python_version': f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}",
112
108
  'platform': os.name,
113
- 'is_tensorleap_platform': os.environ.get('IS_TENSORLEAP_PLATFORM')
114
109
  }
115
110
 
116
111
  if tensorleap_user_id:
@@ -18,12 +18,12 @@ def to_numpy_return_wrapper(encoder_function: SectionCallableInterface) -> Secti
18
18
 
19
19
  return numpy_encoder_function
20
20
 
21
- def to_numpy_return_masks_wrapper(encoder_function: InstanceCallableInterface) -> Callable[
22
- [Union[int, str], PreprocessResponse], List[ElementInstance]]:
23
- def numpy_encoder_function(idx: Union[int, str], samples: PreprocessResponse) -> List[ElementInstance]:
24
- result = encoder_function(idx, samples)
25
- for res in result:
26
- res.mask = np.array(res.mask)
21
+ def to_numpy_return_masks_wrapper(encoder_function: InstanceCallableInterface) -> InstanceCallableInterface:
22
+ def numpy_encoder_function(idx: Union[int, str], samples: PreprocessResponse, element_idx: int) -> Union[ElementInstance, None]:
23
+ result = encoder_function(idx, samples, element_idx)
24
+ if result is None:
25
+ return None
26
+ result.mask = np.array(result.mask)
27
27
  return result
28
28
  return numpy_encoder_function
29
29
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "code-loader"
3
- version = "1.0.124"
3
+ version = "1.0.124.dev0"
4
4
  description = ""
5
5
  authors = ["dorhar <doron.harnoy@tensorleap.ai>"]
6
6
  license = "MIT"