code-loader 1.0.174.dev3__tar.gz → 1.0.174.dev5__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 (36) hide show
  1. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/PKG-INFO +1 -1
  2. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/code_loader/inner_leap_binder/leapbinder_decorators.py +21 -20
  3. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/code_loader/leaploader.py +33 -1
  4. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/code_loader/leaploaderbase.py +10 -0
  5. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/pyproject.toml +1 -1
  6. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/LICENSE +0 -0
  7. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/README.md +0 -0
  8. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/code_loader/__init__.py +0 -0
  9. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/code_loader/contract/__init__.py +0 -0
  10. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/code_loader/contract/datasetclasses.py +0 -0
  11. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/code_loader/contract/enums.py +0 -0
  12. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/code_loader/contract/exceptions.py +0 -0
  13. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/code_loader/contract/mapping.py +0 -0
  14. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/code_loader/contract/responsedataclasses.py +0 -0
  15. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/code_loader/contract/visualizer_classes.py +0 -0
  16. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/code_loader/default_losses.py +0 -0
  17. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/code_loader/default_metrics.py +0 -0
  18. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/code_loader/experiment_api/__init__.py +0 -0
  19. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/code_loader/experiment_api/api.py +0 -0
  20. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/code_loader/experiment_api/cli_config_utils.py +0 -0
  21. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/code_loader/experiment_api/client.py +0 -0
  22. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/code_loader/experiment_api/epoch.py +0 -0
  23. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/code_loader/experiment_api/experiment.py +0 -0
  24. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/code_loader/experiment_api/experiment_context.py +0 -0
  25. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/code_loader/experiment_api/types.py +0 -0
  26. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/code_loader/experiment_api/utils.py +0 -0
  27. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/code_loader/experiment_api/workingspace_config_utils.py +0 -0
  28. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/code_loader/inner_leap_binder/__init__.py +0 -0
  29. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/code_loader/inner_leap_binder/leapbinder.py +0 -0
  30. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/code_loader/mixpanel_tracker.py +0 -0
  31. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/code_loader/plot_functions/__init__.py +0 -0
  32. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/code_loader/plot_functions/plot_functions.py +0 -0
  33. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/code_loader/plot_functions/visualize.py +0 -0
  34. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/code_loader/utils.py +0 -0
  35. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/code_loader/visualizers/__init__.py +0 -0
  36. {code_loader-1.0.174.dev3 → code_loader-1.0.174.dev5}/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.174.dev3
3
+ Version: 1.0.174.dev5
4
4
  Summary:
5
5
  Home-page: https://github.com/tensorleap/code-loader
6
6
  License: MIT
@@ -879,7 +879,8 @@ def tensorleap_custom_metric(name: str,
879
879
 
880
880
  def tensorleap_custom_instances_metric(name: str,
881
881
  direction: Union[MetricDirection, Dict[str, MetricDirection]] = _UNSET,
882
- compute_insights: Optional[Union[bool, Dict[str, bool]]] = None):
882
+ compute_insights: Optional[Union[bool, Dict[str, bool]]] = None,
883
+ connects_to=None):
883
884
  name_to_unique_name = defaultdict(set)
884
885
 
885
886
  def decorating_function(
@@ -942,21 +943,21 @@ def tensorleap_custom_instances_metric(name: str,
942
943
  err_message +
943
944
  f"Invalid type for compute_insights['{k}']: expected bool, got type {type(v).__name__}."
944
945
  )
945
- # if connects_to is not None:
946
- # valid_types = (str, list, tuple, set)
947
- # if not isinstance(connects_to, valid_types):
948
- # raise TypeError(
949
- # err_message +
950
- # f"`connects_to` must be one of {valid_types}, got type {type(connects_to).__name__}."
951
- # )
952
- # if isinstance(connects_to, (list, tuple, set)):
953
- # invalid_elems = [f"{type(e).__name__}" for e in connects_to if not isinstance(e, str)]
954
- # if invalid_elems:
955
- # raise TypeError(
956
- # err_message +
957
- # f"All elements in `connects_to` must be strings, "
958
- # f"but found element types: {invalid_elems}."
959
- # )
946
+ if connects_to is not None:
947
+ valid_types = (str, list, tuple, set)
948
+ if not isinstance(connects_to, valid_types):
949
+ raise TypeError(
950
+ err_message +
951
+ f"`connects_to` must be one of {valid_types}, got type {type(connects_to).__name__}."
952
+ )
953
+ if isinstance(connects_to, (list, tuple, set)):
954
+ invalid_elems = [f"{type(e).__name__}" for e in connects_to if not isinstance(e, str)]
955
+ if invalid_elems:
956
+ raise TypeError(
957
+ err_message +
958
+ f"All elements in `connects_to` must be strings, "
959
+ f"but found element types: {invalid_elems}."
960
+ )
960
961
 
961
962
  _validate_decorators_signature()
962
963
 
@@ -1038,9 +1039,9 @@ def tensorleap_custom_instances_metric(name: str,
1038
1039
 
1039
1040
  leap_binder.add_custom_instance_metric(inner_without_validate, name, direction, compute_insights)
1040
1041
 
1041
- # if connects_to is not None:
1042
- # arg_names = leap_binder.setup_container.metrics[-1].metric_handler_data.arg_names
1043
- # _add_mapping_connections(connects_to, arg_names, NodeMappingType.Metric, name)
1042
+ if connects_to is not None:
1043
+ arg_names = leap_binder.setup_container.instance_metrics[-1].metric_handler_data.arg_names
1044
+ _add_mapping_connections(connects_to, arg_names, NodeMappingType.Metric, name)
1044
1045
 
1045
1046
  def inner(*args, **kwargs):
1046
1047
  if not _call_from_tl_platform:
@@ -1071,7 +1072,7 @@ def tensorleap_custom_instances_metric(name: str,
1071
1072
 
1072
1073
  return None
1073
1074
 
1074
- mapping_inner.arg_names = leap_binder.setup_container.metrics[-1].metric_handler_data.arg_names
1075
+ mapping_inner.arg_names = leap_binder.setup_container.instance_metrics[-1].metric_handler_data.arg_names
1075
1076
  mapping_inner.name = name
1076
1077
 
1077
1078
  def final_inner(*args, **kwargs):
@@ -16,7 +16,7 @@ from code_loader.contract.datasetclasses import DatasetSample, DatasetBaseHandle
16
16
  PreprocessResponse, VisualizerHandler, LeapData, \
17
17
  PredictionTypeHandler, MetadataHandler, CustomLayerHandler, MetricHandler, VisualizerHandlerData, MetricHandlerData, \
18
18
  MetricCallableReturnType, CustomLossHandlerData, CustomLossHandler, RawInputsForHeatmap, SamplePreprocessResponse, \
19
- ElementInstance, custom_latent_space_attribute, DatasetIntegrationSetup
19
+ ElementInstance, custom_latent_space_attribute, DatasetIntegrationSetup, InstanceMetricHandler
20
20
  from code_loader.contract.enums import DataStateEnum, TestingSectionEnum, DataStateType, DatasetMetadataType
21
21
  from code_loader.contract.exceptions import DatasetScriptException
22
22
  from code_loader.contract.responsedataclasses import DatasetIntegParseResult, DatasetTestResultPayload, \
@@ -109,6 +109,24 @@ class LeapLoader(LeapLoaderBase):
109
109
  for metric_handler in setup.metrics
110
110
  }
111
111
 
112
+ @lru_cache()
113
+ def instance_metric_by_name(self) -> Dict[str, MetricHandlerData]:
114
+ self.exec_script()
115
+ setup = global_leap_binder.setup_container
116
+ return {
117
+ handler.metric_handler_data.name: handler.metric_handler_data
118
+ for handler in setup.instance_metrics
119
+ }
120
+
121
+ @lru_cache()
122
+ def _instance_metric_handler_by_name(self) -> Dict[str, InstanceMetricHandler]:
123
+ self.exec_script()
124
+ setup = global_leap_binder.setup_container
125
+ return {
126
+ handler.metric_handler_data.name: handler
127
+ for handler in setup.instance_metrics
128
+ }
129
+
112
130
  @lru_cache()
113
131
  def visualizer_by_name(self) -> Dict[str, VisualizerHandlerData]:
114
132
  self.exec_script()
@@ -292,6 +310,20 @@ class LeapLoader(LeapLoaderBase):
292
310
 
293
311
  return metric_handler.function(**input_tensors_by_arg_name)
294
312
 
313
+ def run_instance_metric(self, metric_name: str, sample_ids: np.array, state: DataStateEnum,
314
+ input_tensors_by_arg_name: Dict[str, npt.NDArray[np.float32]]
315
+ ) -> Dict[int, npt.NDArray[np.float32]]:
316
+ self._preprocess_result()
317
+
318
+ handler = self._instance_metric_handler_by_name()[metric_name]
319
+ preprocess_response_arg_name = self._get_preprocess_response_arg_name(handler.function)
320
+
321
+ if preprocess_response_arg_name is not None:
322
+ input_tensors_by_arg_name[preprocess_response_arg_name] = SamplePreprocessResponse(
323
+ sample_ids, self._preprocess_result()[state])
324
+
325
+ return handler.function(**input_tensors_by_arg_name)
326
+
295
327
  @staticmethod
296
328
  def _get_preprocess_response_arg_name(
297
329
  func: Callable) -> Optional[str]:
@@ -44,6 +44,10 @@ class LeapLoaderBase:
44
44
  def metric_by_name(self) -> Dict[str, MetricHandlerData]:
45
45
  pass
46
46
 
47
+ @abstractmethod
48
+ def instance_metric_by_name(self) -> Dict[str, MetricHandlerData]:
49
+ pass
50
+
47
51
  @abstractmethod
48
52
  def visualizer_by_name(self) -> Dict[str, VisualizerHandlerData]:
49
53
  pass
@@ -100,6 +104,12 @@ class LeapLoaderBase:
100
104
  input_tensors_by_arg_name: Dict[str, npt.NDArray[np.float32]]) -> MetricCallableReturnType:
101
105
  pass
102
106
 
107
+ @abstractmethod
108
+ def run_instance_metric(self, metric_name: str, sample_ids: np.array, state: DataStateEnum,
109
+ input_tensors_by_arg_name: Dict[str, npt.NDArray[np.float32]]
110
+ ) -> Dict[int, npt.NDArray[np.float32]]:
111
+ pass
112
+
103
113
  @abstractmethod
104
114
  def run_custom_loss(self, custom_loss_name: str, sample_ids: np.array, state: DataStateEnum,
105
115
  input_tensors_by_arg_name: Dict[str, npt.NDArray[np.float32]]):
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "code-loader"
3
- version = "1.0.174.dev3"
3
+ version = "1.0.174.dev5"
4
4
  description = ""
5
5
  authors = ["dorhar <doron.harnoy@tensorleap.ai>"]
6
6
  license = "MIT"