code-loader 1.0.169__tar.gz → 1.0.169.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 (37) hide show
  1. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/PKG-INFO +1 -1
  2. code_loader-1.0.169.dev1/code_loader/contract/metric_metadata_utils.py +36 -0
  3. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/code_loader/inner_leap_binder/leapbinder_decorators.py +14 -12
  4. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/pyproject.toml +1 -1
  5. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/LICENSE +0 -0
  6. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/README.md +0 -0
  7. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/code_loader/__init__.py +0 -0
  8. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/code_loader/contract/__init__.py +0 -0
  9. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/code_loader/contract/datasetclasses.py +0 -0
  10. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/code_loader/contract/enums.py +0 -0
  11. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/code_loader/contract/exceptions.py +0 -0
  12. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/code_loader/contract/mapping.py +0 -0
  13. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/code_loader/contract/responsedataclasses.py +0 -0
  14. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/code_loader/contract/visualizer_classes.py +0 -0
  15. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/code_loader/default_losses.py +0 -0
  16. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/code_loader/default_metrics.py +0 -0
  17. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/code_loader/experiment_api/__init__.py +0 -0
  18. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/code_loader/experiment_api/api.py +0 -0
  19. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/code_loader/experiment_api/cli_config_utils.py +0 -0
  20. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/code_loader/experiment_api/client.py +0 -0
  21. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/code_loader/experiment_api/epoch.py +0 -0
  22. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/code_loader/experiment_api/experiment.py +0 -0
  23. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/code_loader/experiment_api/experiment_context.py +0 -0
  24. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/code_loader/experiment_api/types.py +0 -0
  25. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/code_loader/experiment_api/utils.py +0 -0
  26. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/code_loader/experiment_api/workingspace_config_utils.py +0 -0
  27. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/code_loader/inner_leap_binder/__init__.py +0 -0
  28. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/code_loader/inner_leap_binder/leapbinder.py +0 -0
  29. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/code_loader/leaploader.py +0 -0
  30. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/code_loader/leaploaderbase.py +0 -0
  31. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/code_loader/mixpanel_tracker.py +0 -0
  32. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/code_loader/plot_functions/__init__.py +0 -0
  33. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/code_loader/plot_functions/plot_functions.py +0 -0
  34. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/code_loader/plot_functions/visualize.py +0 -0
  35. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/code_loader/utils.py +0 -0
  36. {code_loader-1.0.169 → code_loader-1.0.169.dev1}/code_loader/visualizers/__init__.py +0 -0
  37. {code_loader-1.0.169 → code_loader-1.0.169.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.169
3
+ Version: 1.0.169.dev1
4
4
  Summary:
5
5
  Home-page: https://github.com/tensorleap/code-loader
6
6
  License: MIT
@@ -0,0 +1,36 @@
1
+ from typing import Dict, Iterable, Optional, Tuple, Union
2
+
3
+ from code_loader.contract.enums import MetricDirection
4
+
5
+
6
+ def resolve_metric_output_metadata(
7
+ direction: Union[None, MetricDirection, Dict[str, MetricDirection]],
8
+ compute_insights: Optional[Union[bool, Dict[str, bool]]],
9
+ result_keys: Iterable[str],
10
+ ) -> Tuple[Dict[str, MetricDirection], Dict[str, bool]]:
11
+ result_keys = list(result_keys)
12
+
13
+ if isinstance(direction, dict):
14
+ resolved_direction = {
15
+ key: direction.get(key, MetricDirection.Downward)
16
+ for key in result_keys
17
+ }
18
+ elif isinstance(direction, MetricDirection):
19
+ resolved_direction = {key: direction for key in result_keys}
20
+ else:
21
+ resolved_direction = {
22
+ key: MetricDirection.Downward
23
+ for key in result_keys
24
+ }
25
+
26
+ if isinstance(compute_insights, dict):
27
+ resolved_compute_insights = {
28
+ key: compute_insights.get(key, True)
29
+ for key in result_keys
30
+ }
31
+ elif isinstance(compute_insights, bool):
32
+ resolved_compute_insights = {key: compute_insights for key in result_keys}
33
+ else:
34
+ resolved_compute_insights = {key: True for key in result_keys}
35
+
36
+ return resolved_direction, resolved_compute_insights
@@ -21,6 +21,7 @@ from code_loader.contract.datasetclasses import CustomCallableInterfaceMultiArgs
21
21
  ConfusionMatrixElement, SamplePreprocessResponse, PredictionTypeHandler, InstanceCallableInterface, ElementInstance, \
22
22
  InstanceLengthCallableInterface
23
23
  from code_loader.contract.enums import MetricDirection, LeapDataType, DatasetMetadataType, DataStateType
24
+ from code_loader.contract.metric_metadata_utils import resolve_metric_output_metadata
24
25
  from code_loader import leap_binder, LeapLoader
25
26
  from code_loader.contract.mapping import NodeMapping, NodeMappingType, NodeConnection
26
27
  from code_loader.contract.visualizer_classes import LeapImage, LeapImageMask, LeapTextMask, LeapText, LeapGraph, \
@@ -699,21 +700,21 @@ def tensorleap_custom_metric(name: str,
699
700
  (f'{user_function.__name__}() validation failed: '
700
701
  f'Keys in the compute_insights mapping should be part of result keys. Got key {ci_key}.')
701
702
 
702
- effective_direction = {} if direction is _UNSET else direction if isinstance(direction, dict) else {k:direction for k in result_keys}
703
- defaulted_direction_keys = result_keys.difference(effective_direction.keys())
704
-
705
- if defaulted_direction_keys:
706
- effective_direction = {key: effective_direction.get(key, MetricDirection.Downward) for key in result}
703
+ raw_direction = None if direction is _UNSET else direction
704
+ effective_direction, effective_compute_insights = resolve_metric_output_metadata(
705
+ raw_direction,
706
+ compute_insights,
707
+ result.keys(),
708
+ )
709
+ defaulted_direction_keys = {
710
+ key for key in result_keys
711
+ if raw_direction is None or (isinstance(raw_direction, dict) and key not in raw_direction)
712
+ }
707
713
 
708
714
  leap_binder.setup_container.metrics[-1].metric_handler_data.direction = effective_direction
715
+ leap_binder.setup_container.metrics[-1].metric_handler_data.compute_insights = effective_compute_insights
709
716
 
710
717
  if defaulted_direction_keys and not _call_from_tl_platform:
711
- if compute_insights is None:
712
- effective_compute_insights = {}
713
- elif isinstance(compute_insights, dict):
714
- effective_compute_insights = compute_insights
715
- else:
716
- effective_compute_insights = {k: compute_insights for k in result_keys}
717
718
  warning_keys = {key for key in defaulted_direction_keys if effective_compute_insights.get(key, True)}
718
719
  if warning_keys:
719
720
  store_warning_by_param(
@@ -961,6 +962,8 @@ def tensorleap_metadata(
961
962
  def _validate_result(result):
962
963
  supported_result_types = (type(None), int, str, bool, float, dict, np.floating,
963
964
  np.bool_, np.unsignedinteger, np.signedinteger, np.integer)
965
+ validate_output_structure(result, func_name=user_function.__name__,
966
+ expected_type_name=supported_result_types)
964
967
  assert isinstance(result, supported_result_types), \
965
968
  (f'{user_function.__name__}() validation failed: '
966
969
  f'Unsupported return type. Got {type(result)}. should be any of {str(supported_result_types)}')
@@ -1812,4 +1815,3 @@ if not _call_from_tl_platform:
1812
1815
 
1813
1816
 
1814
1817
 
1815
-
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "code-loader"
3
- version = "1.0.169"
3
+ version = "1.0.169.dev1"
4
4
  description = ""
5
5
  authors = ["dorhar <doron.harnoy@tensorleap.ai>"]
6
6
  license = "MIT"