code-loader 1.0.122__tar.gz → 1.0.124__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.122 → code_loader-1.0.124}/PKG-INFO +1 -1
  2. {code_loader-1.0.122 → code_loader-1.0.124}/code_loader/contract/datasetclasses.py +4 -4
  3. {code_loader-1.0.122 → code_loader-1.0.124}/code_loader/inner_leap_binder/leapbinder_decorators.py +15 -60
  4. {code_loader-1.0.122 → code_loader-1.0.124}/code_loader/leaploader.py +22 -10
  5. {code_loader-1.0.122 → code_loader-1.0.124}/code_loader/leaploaderbase.py +6 -2
  6. {code_loader-1.0.122 → code_loader-1.0.124}/code_loader/mixpanel_tracker.py +5 -0
  7. {code_loader-1.0.122 → code_loader-1.0.124}/code_loader/utils.py +6 -6
  8. {code_loader-1.0.122 → code_loader-1.0.124}/pyproject.toml +1 -1
  9. {code_loader-1.0.122 → code_loader-1.0.124}/LICENSE +0 -0
  10. {code_loader-1.0.122 → code_loader-1.0.124}/README.md +0 -0
  11. {code_loader-1.0.122 → code_loader-1.0.124}/code_loader/__init__.py +0 -0
  12. {code_loader-1.0.122 → code_loader-1.0.124}/code_loader/contract/__init__.py +0 -0
  13. {code_loader-1.0.122 → code_loader-1.0.124}/code_loader/contract/enums.py +0 -0
  14. {code_loader-1.0.122 → code_loader-1.0.124}/code_loader/contract/exceptions.py +0 -0
  15. {code_loader-1.0.122 → code_loader-1.0.124}/code_loader/contract/mapping.py +0 -0
  16. {code_loader-1.0.122 → code_loader-1.0.124}/code_loader/contract/responsedataclasses.py +0 -0
  17. {code_loader-1.0.122 → code_loader-1.0.124}/code_loader/contract/visualizer_classes.py +0 -0
  18. {code_loader-1.0.122 → code_loader-1.0.124}/code_loader/default_losses.py +0 -0
  19. {code_loader-1.0.122 → code_loader-1.0.124}/code_loader/default_metrics.py +0 -0
  20. {code_loader-1.0.122 → code_loader-1.0.124}/code_loader/experiment_api/__init__.py +0 -0
  21. {code_loader-1.0.122 → code_loader-1.0.124}/code_loader/experiment_api/api.py +0 -0
  22. {code_loader-1.0.122 → code_loader-1.0.124}/code_loader/experiment_api/cli_config_utils.py +0 -0
  23. {code_loader-1.0.122 → code_loader-1.0.124}/code_loader/experiment_api/client.py +0 -0
  24. {code_loader-1.0.122 → code_loader-1.0.124}/code_loader/experiment_api/epoch.py +0 -0
  25. {code_loader-1.0.122 → code_loader-1.0.124}/code_loader/experiment_api/experiment.py +0 -0
  26. {code_loader-1.0.122 → code_loader-1.0.124}/code_loader/experiment_api/experiment_context.py +0 -0
  27. {code_loader-1.0.122 → code_loader-1.0.124}/code_loader/experiment_api/types.py +0 -0
  28. {code_loader-1.0.122 → code_loader-1.0.124}/code_loader/experiment_api/utils.py +0 -0
  29. {code_loader-1.0.122 → code_loader-1.0.124}/code_loader/experiment_api/workingspace_config_utils.py +0 -0
  30. {code_loader-1.0.122 → code_loader-1.0.124}/code_loader/inner_leap_binder/__init__.py +0 -0
  31. {code_loader-1.0.122 → code_loader-1.0.124}/code_loader/inner_leap_binder/leapbinder.py +0 -0
  32. {code_loader-1.0.122 → code_loader-1.0.124}/code_loader/plot_functions/__init__.py +0 -0
  33. {code_loader-1.0.122 → code_loader-1.0.124}/code_loader/plot_functions/plot_functions.py +0 -0
  34. {code_loader-1.0.122 → code_loader-1.0.124}/code_loader/plot_functions/visualize.py +0 -0
  35. {code_loader-1.0.122 → code_loader-1.0.124}/code_loader/visualizers/__init__.py +0 -0
  36. {code_loader-1.0.122 → code_loader-1.0.124}/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.122
3
+ Version: 1.0.124
4
4
  Summary:
5
5
  Home-page: https://github.com/tensorleap/code-loader
6
6
  License: MIT
@@ -40,10 +40,12 @@ 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
43
44
 
44
45
  def __post_init__(self) -> None:
45
46
  assert self.sample_ids_to_instance_mappings is None, f"Keep sample_ids_to_instance_mappings None when initializing PreprocessResponse"
46
47
  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"
47
49
 
48
50
  if self.length is not None and self.sample_ids is None:
49
51
  self.sample_ids = [i for i in range(self.length)]
@@ -71,9 +73,7 @@ class ElementInstance:
71
73
  mask: npt.NDArray[np.float32]
72
74
 
73
75
  SectionCallableInterface = Callable[[Union[int, str], PreprocessResponse], npt.NDArray[np.float32]]
74
- InstanceCallableInterface = Callable[[Union[int, str], PreprocessResponse, int], Optional[ElementInstance]]
75
- InstanceLengthCallableInterface = Callable[[Union[int, str], PreprocessResponse], int]
76
-
76
+ InstanceCallableInterface = Callable[[Union[int, str], PreprocessResponse], List[ElementInstance]]
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
260
261
  custom_latent_space: Optional[npt.NDArray[np.float32]] = None
261
- instance_masks: Optional[Dict[str, ElementInstance]] = None
262
262
 
@@ -8,8 +8,7 @@ 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, \
12
- InstanceLengthCallableInterface
11
+ ConfusionMatrixElement, SamplePreprocessResponse, PredictionTypeHandler, InstanceCallableInterface, ElementInstance
13
12
  from code_loader.contract.enums import MetricDirection, LeapDataType, DatasetMetadataType
14
13
  from code_loader import leap_binder
15
14
  from code_loader.contract.mapping import NodeMapping, NodeMappingType, NodeConnection
@@ -530,24 +529,29 @@ def tensorleap_preprocess():
530
529
 
531
530
 
532
531
  def tensorleap_element_instance_preprocess(
533
- instance_length_encoder: InstanceLengthCallableInterface):
532
+ instance_mask_encoder: Callable[[str, PreprocessResponse], List[ElementInstance]]):
534
533
  def decorating_function(user_function: Callable[[], List[PreprocessResponse]]):
535
534
  def user_function_instance() -> List[PreprocessResponse]:
536
535
  result = user_function()
537
536
  for preprocess_response in result:
538
537
  sample_ids_to_instance_mappings = {}
539
538
  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_length = instance_length_encoder(sample_id, preprocess_response)
543
- instances_ids = [f'{sample_id}_{instance_id}' for instance_id in range(instances_length)]
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))]
544
544
  sample_ids_to_instance_mappings[sample_id] = instances_ids
545
545
  instance_to_sample_ids_mappings[sample_id] = sample_id
546
- for instance_id in instances_ids:
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):
547
549
  instance_to_sample_ids_mappings[instance_id] = sample_id
550
+ instance_ids_to_names[instance_id] = instance_name
548
551
  all_sample_ids.extend(instances_ids)
549
552
  preprocess_response.sample_ids_to_instance_mappings = sample_ids_to_instance_mappings
550
553
  preprocess_response.instance_to_sample_ids_mappings = instance_to_sample_ids_mappings
554
+ preprocess_response.instance_ids_to_names = instance_ids_to_names
551
555
  preprocess_response.sample_ids = all_sample_ids
552
556
  return result
553
557
 
@@ -616,7 +620,7 @@ def tensorleap_unlabeled_preprocess():
616
620
 
617
621
  def tensorleap_instances_masks_encoder(name: str):
618
622
  def decorating_function(user_function: InstanceCallableInterface):
619
- def _validate_input_args(sample_id: str, preprocess_response: PreprocessResponse, instance_id: int):
623
+ def _validate_input_args(sample_id: str, preprocess_response: PreprocessResponse):
620
624
  assert isinstance(sample_id, str), \
621
625
  (f'tensorleap_instances_masks_encoder validation failed: '
622
626
  f'Argument sample_id should be str. Got {type(sample_id)}.')
@@ -627,61 +631,11 @@ def tensorleap_instances_masks_encoder(name: str):
627
631
  (f'tensorleap_instances_masks_encoder validation failed: '
628
632
  f'Argument sample_id should be as the same type as defined in the preprocess response '
629
633
  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)}.')
633
634
 
634
635
  def _validate_result(result):
635
- assert isinstance(result, ElementInstance) or (result is None), \
636
+ assert isinstance(result, list), \
636
637
  (f'tensorleap_instances_masks_encoder validation failed: '
637
- f'Unsupported return type. Should be a ElementInstance or None. Got {type(result)}.')
638
-
639
- def inner_without_validate(sample_id, preprocess_response, instance_id):
640
- global _called_from_inside_tl_decorator
641
- _called_from_inside_tl_decorator += 1
642
-
643
- try:
644
- result = user_function(sample_id, preprocess_response, instance_id)
645
- finally:
646
- _called_from_inside_tl_decorator -= 1
647
-
648
- return result
649
-
650
- leap_binder.set_instance_masks(inner_without_validate, name)
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)}.')
638
+ f'Unsupported return type. Should be a numpy array. Got {type(result)}.')
685
639
 
686
640
  def inner_without_validate(sample_id, preprocess_response):
687
641
  global _called_from_inside_tl_decorator
@@ -694,7 +648,7 @@ def tensorleap_instances_length_encoder(name: str):
694
648
 
695
649
  return result
696
650
 
697
- # leap_binder.set_instance_masks(inner_without_validate, name). # TODO: do i need this?
651
+ leap_binder.set_instance_masks(inner_without_validate, name)
698
652
 
699
653
  def inner(sample_id, preprocess_response):
700
654
  if os.environ.get(mapping_runtime_mode_env_var_mame):
@@ -711,6 +665,7 @@ def tensorleap_instances_length_encoder(name: str):
711
665
 
712
666
  return decorating_function
713
667
 
668
+
714
669
  def tensorleap_input_encoder(name: str, channel_dim=-1, model_input_index=None):
715
670
  def decorating_function(user_function: SectionCallableInterface):
716
671
  for input_handler in leap_binder.setup_container.inputs:
@@ -157,7 +157,7 @@ class LeapLoader(LeapLoaderBase):
157
157
  for prediction_type in setup.prediction_types
158
158
  }
159
159
 
160
- def get_sample(self, state: DataStateEnum, sample_id: Union[int, str], instance_id: int = None) -> DatasetSample:
160
+ def get_sample(self, state: DataStateEnum, sample_id: Union[int, str]) -> DatasetSample:
161
161
  self.exec_script()
162
162
  preprocess_result = self._preprocess_result()
163
163
  if state == DataStateEnum.unlabeled and sample_id not in preprocess_result[state].sample_ids:
@@ -171,17 +171,30 @@ class LeapLoader(LeapLoaderBase):
171
171
  preprocess_result[
172
172
  state])
173
173
 
174
- instance_mask = self._get_instances_masks(state, sample_id, instance_id)
175
174
  sample = DatasetSample(inputs=self._get_inputs(state, sample_id),
176
175
  gt=None if state == DataStateEnum.unlabeled else self._get_gt(state, sample_id),
177
176
  metadata=metadata,
178
177
  metadata_is_none=metadata_is_none,
179
178
  index=sample_id,
180
179
  state=state,
181
- custom_latent_space=custom_latent_space,
182
- instance_masks = instance_mask)
180
+ custom_latent_space=custom_latent_space)
183
181
  return sample
184
182
 
183
+ def get_sample_with_masks(self, state: DataStateEnum, sample_id: Union[int, str]) -> DatasetSample:
184
+ self.exec_script()
185
+ preprocess_result = self._preprocess_result()
186
+ if state == DataStateEnum.unlabeled and sample_id not in preprocess_result[state].sample_ids:
187
+ self._preprocess_result(update_unlabeled_preprocess=True)
188
+
189
+ metadata, metadata_is_none = self._get_metadata(state, sample_id)
190
+ sample = DatasetSample(inputs=self._get_inputs(state, sample_id),
191
+ gt=None if state == DataStateEnum.unlabeled else self._get_gt(state, sample_id),
192
+ metadata=metadata,
193
+ metadata_is_none=metadata_is_none,
194
+ index=sample_id,
195
+ state=state,
196
+ instance_masks=self._get_instances_masks(state, sample_id))
197
+ return sample
185
198
 
186
199
  def check_dataset(self) -> DatasetIntegParseResult:
187
200
  test_payloads: List[DatasetTestResultPayload] = []
@@ -471,14 +484,13 @@ class LeapLoader(LeapLoaderBase):
471
484
  def _get_inputs(self, state: DataStateEnum, sample_id: Union[int, str]) -> Dict[str, npt.NDArray[np.float32]]:
472
485
  return self._get_dataset_handlers(global_leap_binder.setup_container.inputs, state, sample_id)
473
486
 
474
- def _get_instances_masks(self, state: DataStateEnum, sample_id: Union[int, str], instance_id: int) -> Optional[Dict[str, ElementInstance]]:
475
- if instance_id is None:
476
- return None
487
+ def _get_instances_masks(self, state: DataStateEnum, sample_id: Union[int, str]) -> Dict[
488
+ str, List[ElementInstance]]:
477
489
  preprocess_result = self._preprocess_result()
478
490
  preprocess_state = preprocess_result[state]
479
491
  result_agg = {}
480
492
  for handler in global_leap_binder.setup_container.instance_masks:
481
- handler_result = handler.function(sample_id, preprocess_state, instance_id)
493
+ handler_result = handler.function(sample_id, preprocess_state)
482
494
  handler_name = handler.name
483
495
  result_agg[handler_name] = handler_result
484
496
  return result_agg
@@ -558,7 +570,7 @@ class LeapLoader(LeapLoaderBase):
558
570
  self.exec_script()
559
571
  return global_leap_binder.setup_container.custom_latent_space is not None
560
572
 
561
- def get_instances_data(self, state: DataStateEnum) -> Tuple[Dict[str, List[str]], Dict[str, str]]:
573
+ def get_instances_data(self, state: DataStateEnum) -> Tuple[Dict[str, List[str]], Dict[str, str], Dict[str, str]]:
562
574
  """
563
575
  This Method get the data state and returns two dictionaries that holds the mapping of the sample ids to their
564
576
  instances and the other way around and the sample ids array.
@@ -571,4 +583,4 @@ class LeapLoader(LeapLoaderBase):
571
583
  """
572
584
  preprocess_result = self._preprocess_result()
573
585
  preprocess_state = preprocess_result[state]
574
- return preprocess_state.sample_ids_to_instance_mappings, preprocess_state.instance_to_sample_ids_mappings
586
+ return preprocess_state.sample_ids_to_instance_mappings, preprocess_state.instance_to_sample_ids_mappings, preprocess_state.instance_ids_to_names
@@ -61,11 +61,15 @@ class LeapLoaderBase:
61
61
  pass
62
62
 
63
63
  @abstractmethod
64
- def get_sample(self, state: DataStateEnum, sample_id: Union[int, str], instance_id: int = None) -> DatasetSample:
64
+ def get_sample(self, state: DataStateEnum, sample_id: Union[int, str]) -> DatasetSample:
65
65
  pass
66
66
 
67
67
  @abstractmethod
68
- def get_instances_data(self, state: DataStateEnum) -> Tuple[Dict[str, List[str]], Dict[str, str]]:
68
+ def get_sample_with_masks(self, state: DataStateEnum, sample_id: Union[int, str]) -> DatasetSample:
69
+ pass
70
+
71
+ @abstractmethod
72
+ def get_instances_data(self, state: DataStateEnum) -> Tuple[Dict[str, List[str]], Dict[str, str], Dict[str, str]]:
69
73
  pass
70
74
 
71
75
  @abstractmethod
@@ -94,6 +94,10 @@ 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
+
97
101
  try:
98
102
  distinct_id = self._get_distinct_id()
99
103
 
@@ -106,6 +110,7 @@ class MixpanelTracker:
106
110
  '$device_id': device_id, # Always use device_id for $device_id
107
111
  'python_version': f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}",
108
112
  'platform': os.name,
113
+ 'is_tensorleap_platform': os.environ.get('IS_TENSORLEAP_PLATFORM')
109
114
  }
110
115
 
111
116
  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) -> InstanceCallableInterface:
22
- def numpy_encoder_function(idx: Union[int, str], samples: PreprocessResponse, element_idx: Union[int, str]) -> 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)
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)
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.122"
3
+ version = "1.0.124"
4
4
  description = ""
5
5
  authors = ["dorhar <doron.harnoy@tensorleap.ai>"]
6
6
  license = "MIT"
File without changes
File without changes