code-loader 1.0.164.dev1__tar.gz → 1.0.165.dev2__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.164.dev1 → code_loader-1.0.165.dev2}/PKG-INFO +1 -1
  2. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/code_loader/inner_leap_binder/leapbinder_decorators.py +46 -18
  3. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/pyproject.toml +1 -1
  4. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/LICENSE +0 -0
  5. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/README.md +0 -0
  6. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/code_loader/__init__.py +0 -0
  7. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/code_loader/contract/__init__.py +0 -0
  8. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/code_loader/contract/datasetclasses.py +0 -0
  9. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/code_loader/contract/enums.py +0 -0
  10. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/code_loader/contract/exceptions.py +0 -0
  11. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/code_loader/contract/mapping.py +0 -0
  12. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/code_loader/contract/responsedataclasses.py +0 -0
  13. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/code_loader/contract/visualizer_classes.py +0 -0
  14. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/code_loader/default_losses.py +0 -0
  15. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/code_loader/default_metrics.py +0 -0
  16. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/code_loader/experiment_api/__init__.py +0 -0
  17. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/code_loader/experiment_api/api.py +0 -0
  18. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/code_loader/experiment_api/cli_config_utils.py +0 -0
  19. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/code_loader/experiment_api/client.py +0 -0
  20. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/code_loader/experiment_api/epoch.py +0 -0
  21. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/code_loader/experiment_api/experiment.py +0 -0
  22. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/code_loader/experiment_api/experiment_context.py +0 -0
  23. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/code_loader/experiment_api/types.py +0 -0
  24. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/code_loader/experiment_api/utils.py +0 -0
  25. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/code_loader/experiment_api/workingspace_config_utils.py +0 -0
  26. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/code_loader/inner_leap_binder/__init__.py +0 -0
  27. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/code_loader/inner_leap_binder/leapbinder.py +0 -0
  28. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/code_loader/leaploader.py +0 -0
  29. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/code_loader/leaploaderbase.py +0 -0
  30. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/code_loader/mixpanel_tracker.py +0 -0
  31. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/code_loader/plot_functions/__init__.py +0 -0
  32. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/code_loader/plot_functions/plot_functions.py +0 -0
  33. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/code_loader/plot_functions/visualize.py +0 -0
  34. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/code_loader/utils.py +0 -0
  35. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/code_loader/visualizers/__init__.py +0 -0
  36. {code_loader-1.0.164.dev1 → code_loader-1.0.165.dev2}/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.164.dev1
3
+ Version: 1.0.165.dev2
4
4
  Summary:
5
5
  Home-page: https://github.com/tensorleap/code-loader
6
6
  License: MIT
@@ -362,7 +362,7 @@ def tensorleap_load_model(prediction_types: Optional[List[PredictionTypeHandler]
362
362
 
363
363
  class ModelPlaceholder:
364
364
  def __init__(self, prediction_types):
365
- self.model = load_model_func() # TODO- check why this fails on onnx model
365
+ self.model = load_model_func()
366
366
  self.prediction_types = prediction_types
367
367
  _validate_result(self.model)
368
368
 
@@ -532,23 +532,14 @@ def tensorleap_custom_metric(name: str,
532
532
 
533
533
  direction_was_provided = direction is not _UNSET
534
534
 
535
- if not direction_was_provided:
536
- direction = MetricDirection.Downward
537
- if not _call_from_tl_platform:
538
- store_warning_by_param(
539
- param_name="direction",
540
- user_func_name=user_function.__name__,
541
- default_value=direction,
542
- link_to_docs="https://docs.tensorleap.ai/tensorleap-integration/writing-integration-code/custom-metrics"
543
-
544
- )
545
-
546
535
  def _validate_decorators_signature():
547
536
  err_message = f"{user_function.__name__} validation failed.\n"
548
537
  if not isinstance(name, str):
549
538
  raise TypeError(err_message + f"`name` must be a string, got type {type(name).__name__}.")
550
539
  valid_directions = {MetricDirection.Upward, MetricDirection.Downward}
551
- if isinstance(direction, MetricDirection):
540
+ if direction is _UNSET:
541
+ pass
542
+ elif isinstance(direction, MetricDirection):
552
543
  if direction not in valid_directions:
553
544
  raise ValueError(
554
545
  err_message +
@@ -646,6 +637,7 @@ def tensorleap_custom_metric(name: str,
646
637
  f'instead of {leap_binder.batch_size_to_validate}')
647
638
 
648
639
  def _validate_result(result) -> None:
640
+ nonlocal direction
649
641
  validate_output_structure(result, func_name=user_function.__name__,
650
642
  expected_type_name="List[float | int | None | List[ConfusionMatrixElement] ] | NDArray[np.float32] or dictonary with one of these types as its values types")
651
643
  supported_types_message = (f'{user_function.__name__}() validation failed: '
@@ -678,13 +670,17 @@ def tensorleap_custom_metric(name: str,
678
670
  f'{user_function.__name__}() validation failed: The return len {f"of srt{key} value" if key is not None else ""} should be as the batch size.'
679
671
 
680
672
  if isinstance(result, dict):
673
+ result_keys = set(result.keys())
681
674
  for key, value in result.items():
682
675
  _validate_single_metric(value, key)
683
676
 
684
677
  assert isinstance(key, str), \
685
678
  (f'{user_function.__name__}() validation failed: '
686
679
  f'Keys in the return dict should be of type str. Got {type(key)}.')
687
- _validate_single_metric(value)
680
+
681
+ assert direction is _UNSET or isinstance(direction, dict), \
682
+ (f'{user_function.__name__}() validation failed: '
683
+ f'direction should be a dict when using dict results. Got {type(direction)}.') #TODO - remove this assertion so a single value would controll all directions
688
684
 
689
685
  if isinstance(direction, dict):
690
686
  for direction_key in direction:
@@ -693,9 +689,9 @@ def tensorleap_custom_metric(name: str,
693
689
  f'Keys in the direction mapping should be part of result keys. Got key {direction_key}.')
694
690
 
695
691
  if compute_insights is not None:
696
- assert isinstance(compute_insights, (bool, dict)), \
692
+ assert isinstance(compute_insights, dict), \
697
693
  (f'{user_function.__name__}() validation failed: '
698
- f'compute_insights should be bool or dict if using the dict results. Got {type(compute_insights)}.')
694
+ f'compute_insights should be dict if using the dict results. Got {type(compute_insights)}.') #TODO - remove this assertion so a single value would controll all compute_insights
699
695
 
700
696
  if isinstance(compute_insights, dict):
701
697
  for ci_key in compute_insights:
@@ -703,6 +699,25 @@ def tensorleap_custom_metric(name: str,
703
699
  (f'{user_function.__name__}() validation failed: '
704
700
  f'Keys in the compute_insights mapping should be part of result keys. Got key {ci_key}.')
705
701
 
702
+ effective_direction = {} if direction is _UNSET else direction
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}
707
+
708
+ leap_binder.setup_container.metrics[-1].metric_handler_data.direction = effective_direction
709
+
710
+ if defaulted_direction_keys and not _call_from_tl_platform:
711
+ effective_compute_insights = compute_insights or {}
712
+ warning_keys = {key for key in defaulted_direction_keys if effective_compute_insights.get(key, True)}
713
+ if warning_keys:
714
+ store_warning_by_param(
715
+ param_name=f"direction[{warning_keys}]",
716
+ user_func_name=user_function.__name__,
717
+ default_value=MetricDirection.Downward,
718
+ link_to_docs="https://docs.tensorleap.ai/tensorleap-integration/writing-integration-code/custom-metrics"
719
+ )
720
+
706
721
  else:
707
722
  _validate_single_metric(result)
708
723
 
@@ -710,6 +725,21 @@ def tensorleap_custom_metric(name: str,
710
725
  assert isinstance(compute_insights, bool), \
711
726
  (f'{user_function.__name__}() validation failed: '
712
727
  f'compute_insights should be boolean. Got {type(compute_insights)}.')
728
+ if direction is not _UNSET:
729
+ assert isinstance(direction, MetricDirection), \
730
+ (f'{user_function.__name__}() validation failed: '
731
+ f'direction should be a MetricDirection when using a single result. Got {type(direction)}.')
732
+
733
+ else:
734
+ direction = MetricDirection.Downward
735
+ leap_binder.setup_container.metrics[-1].metric_handler_data.direction = direction
736
+ if not _call_from_tl_platform and compute_insights is not False:
737
+ store_warning_by_param(
738
+ param_name="direction",
739
+ user_func_name=user_function.__name__,
740
+ default_value=direction,
741
+ link_to_docs="https://docs.tensorleap.ai/tensorleap-integration/writing-integration-code/custom-metrics"
742
+ )
713
743
 
714
744
  @functools.wraps(user_function)
715
745
  def inner_without_validate(*args, **kwargs):
@@ -1770,5 +1800,3 @@ if not _call_from_tl_platform:
1770
1800
 
1771
1801
 
1772
1802
 
1773
-
1774
-
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "code-loader"
3
- version = "1.0.164.dev1"
3
+ version = "1.0.165.dev2"
4
4
  description = ""
5
5
  authors = ["dorhar <doron.harnoy@tensorleap.ai>"]
6
6
  license = "MIT"