code-loader 1.0.174.dev2__tar.gz → 1.0.174.dev3__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.dev2 → code_loader-1.0.174.dev3}/PKG-INFO +1 -1
  2. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/code_loader/inner_leap_binder/leapbinder.py +44 -1
  3. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/code_loader/inner_leap_binder/leapbinder_decorators.py +20 -21
  4. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/pyproject.toml +1 -1
  5. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/LICENSE +0 -0
  6. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/README.md +0 -0
  7. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/code_loader/__init__.py +0 -0
  8. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/code_loader/contract/__init__.py +0 -0
  9. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/code_loader/contract/datasetclasses.py +0 -0
  10. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/code_loader/contract/enums.py +0 -0
  11. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/code_loader/contract/exceptions.py +0 -0
  12. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/code_loader/contract/mapping.py +0 -0
  13. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/code_loader/contract/responsedataclasses.py +0 -0
  14. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/code_loader/contract/visualizer_classes.py +0 -0
  15. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/code_loader/default_losses.py +0 -0
  16. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/code_loader/default_metrics.py +0 -0
  17. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/code_loader/experiment_api/__init__.py +0 -0
  18. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/code_loader/experiment_api/api.py +0 -0
  19. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/code_loader/experiment_api/cli_config_utils.py +0 -0
  20. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/code_loader/experiment_api/client.py +0 -0
  21. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/code_loader/experiment_api/epoch.py +0 -0
  22. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/code_loader/experiment_api/experiment.py +0 -0
  23. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/code_loader/experiment_api/experiment_context.py +0 -0
  24. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/code_loader/experiment_api/types.py +0 -0
  25. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/code_loader/experiment_api/utils.py +0 -0
  26. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/code_loader/experiment_api/workingspace_config_utils.py +0 -0
  27. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/code_loader/inner_leap_binder/__init__.py +0 -0
  28. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/code_loader/leaploader.py +0 -0
  29. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/code_loader/leaploaderbase.py +0 -0
  30. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/code_loader/mixpanel_tracker.py +0 -0
  31. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/code_loader/plot_functions/__init__.py +0 -0
  32. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/code_loader/plot_functions/plot_functions.py +0 -0
  33. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/code_loader/plot_functions/visualize.py +0 -0
  34. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/code_loader/utils.py +0 -0
  35. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/code_loader/visualizers/__init__.py +0 -0
  36. {code_loader-1.0.174.dev2 → code_loader-1.0.174.dev3}/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.dev2
3
+ Version: 1.0.174.dev3
4
4
  Summary:
5
5
  Home-page: https://github.com/tensorleap/code-loader
6
6
  License: MIT
@@ -12,7 +12,7 @@ from code_loader.contract.datasetclasses import SectionCallableInterface, InputH
12
12
  CustomCallableInterfaceMultiArgs, ConfusionMatrixCallableInterfaceMultiArgs, LeapData, \
13
13
  CustomMultipleReturnCallableInterfaceMultiArgs, DatasetBaseHandler, custom_latent_space_attribute, \
14
14
  RawInputsForHeatmap, VisualizerHandlerData, MetricHandlerData, CustomLossHandlerData, SamplePreprocessResponse, \
15
- ElementInstanceMasksHandler, InstanceCallableInterface, CustomLatentSpaceHandler
15
+ ElementInstanceMasksHandler, InstanceCallableInterface, CustomLatentSpaceHandler, InstanceMetricHandler
16
16
  from code_loader.contract.enums import LeapDataType, DataStateEnum, DataStateType, MetricDirection, DatasetMetadataType
17
17
  from code_loader.contract.mapping import NodeConnection, NodeMapping, NodeMappingType
18
18
  from code_loader.contract.responsedataclasses import DatasetTestResultPayload, LeapAnalysisConfiguration
@@ -335,6 +335,49 @@ class LeapBinder:
335
335
  metric_handler_data = MetricHandlerData(name, regular_arg_names, direction, compute_insights)
336
336
  self.setup_container.metrics.append(MetricHandler(metric_handler_data, function))
337
337
 
338
+ def add_custom_instance_metric(self,
339
+ function: Union[CustomCallableInterfaceMultiArgs,
340
+ CustomMultipleReturnCallableInterfaceMultiArgs,
341
+ ConfusionMatrixCallableInterfaceMultiArgs],
342
+ name: str,
343
+ direction: Optional[
344
+ Union[MetricDirection, Dict[str, MetricDirection]]] = MetricDirection.Downward,
345
+ compute_insights: Optional[Union[bool, Dict[str, bool]]] = None) -> None:
346
+ """
347
+ Add a custom metric to the setup.
348
+
349
+ Args:
350
+ function (Union[CustomCallableInterfaceMultiArgs, CustomMultipleReturnCallableInterfaceMultiArgs, ConfusionMatrixCallableInterfaceMultiArgs]): The custom metric function.
351
+ name (str): The name of the custom metric.
352
+ direction (Optional[Union[MetricDirection, Dict[str, MetricDirection]]]): The direction of the metric, either
353
+ MetricDirection.Upward or MetricDirection.Downward, in case custom metric return a dictionary of metrics we can
354
+ supply a dictionary of directions correspondingly.
355
+ - MetricDirection.Upward: Indicates that higher values of the metric are better and should be maximized.
356
+ - MetricDirection.Downward: Indicates that lower values of the metric are better and should be minimized.
357
+ compute_insights (Union[bool, Dict[str, bool]]): Whether to compute insights or not. in case custom metric
358
+ return a dictionary of metrics we can supply a dictionary of values correspondingly
359
+
360
+
361
+
362
+ Example:
363
+ def custom_metric_function(y_true, y_pred):
364
+ return np.mean(np.abs(y_true - y_pred))
365
+
366
+ leap_binder.add_custom_metric(custom_metric_function, name='custom_metric', direction=MetricDirection.Downward)
367
+ """
368
+
369
+ regular_arg_names = inspect.getfullargspec(function)[0]
370
+ preprocess_response_arg_name = None
371
+ for arg_name, arg_type in inspect.getfullargspec(function).annotations.items():
372
+ if arg_type == SamplePreprocessResponse:
373
+ if preprocess_response_arg_name is not None:
374
+ raise Exception("only one argument can be of type SamplePreprocessResponse")
375
+ preprocess_response_arg_name = arg_name
376
+ regular_arg_names.remove(arg_name)
377
+
378
+ metric_handler_data = MetricHandlerData(name, regular_arg_names, direction, compute_insights)
379
+ self.setup_container.instance_metrics.append(InstanceMetricHandler(metric_handler_data, function))
380
+
338
381
  def add_prediction(self, name: str, labels: List[str], channel_dim: int = -1, prediction_index: Optional[int]=None) -> None:
339
382
  """
340
383
  Add prediction labels to the setup.
@@ -879,8 +879,7 @@ 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,
883
- connects_to=None):
882
+ compute_insights: Optional[Union[bool, Dict[str, bool]]] = None):
884
883
  name_to_unique_name = defaultdict(set)
885
884
 
886
885
  def decorating_function(
@@ -943,21 +942,21 @@ def tensorleap_custom_instances_metric(name: str,
943
942
  err_message +
944
943
  f"Invalid type for compute_insights['{k}']: expected bool, got type {type(v).__name__}."
945
944
  )
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
- )
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
+ # )
961
960
 
962
961
  _validate_decorators_signature()
963
962
 
@@ -1037,11 +1036,11 @@ def tensorleap_custom_instances_metric(name: str,
1037
1036
  except (TypeError, ValueError):
1038
1037
  pass
1039
1038
 
1040
- leap_binder.add_custom_metric(inner_without_validate, name, direction, compute_insights)
1039
+ leap_binder.add_custom_instance_metric(inner_without_validate, name, direction, compute_insights)
1041
1040
 
1042
- if connects_to is not None:
1043
- arg_names = leap_binder.setup_container.metrics[-1].metric_handler_data.arg_names
1044
- _add_mapping_connections(connects_to, arg_names, NodeMappingType.Metric, name)
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)
1045
1044
 
1046
1045
  def inner(*args, **kwargs):
1047
1046
  if not _call_from_tl_platform:
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "code-loader"
3
- version = "1.0.174.dev2"
3
+ version = "1.0.174.dev3"
4
4
  description = ""
5
5
  authors = ["dorhar <doron.harnoy@tensorleap.ai>"]
6
6
  license = "MIT"