code-loader 1.0.169.dev2__tar.gz → 1.0.171__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.dev2 → code_loader-1.0.171}/PKG-INFO +1 -1
  2. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/code_loader/inner_leap_binder/leapbinder_decorators.py +12 -12
  3. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/code_loader/mixpanel_tracker.py +20 -0
  4. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/pyproject.toml +1 -1
  5. code_loader-1.0.169.dev2/code_loader/contract/metric_metadata_utils.py +0 -36
  6. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/LICENSE +0 -0
  7. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/README.md +0 -0
  8. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/code_loader/__init__.py +0 -0
  9. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/code_loader/contract/__init__.py +0 -0
  10. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/code_loader/contract/datasetclasses.py +0 -0
  11. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/code_loader/contract/enums.py +0 -0
  12. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/code_loader/contract/exceptions.py +0 -0
  13. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/code_loader/contract/mapping.py +0 -0
  14. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/code_loader/contract/responsedataclasses.py +0 -0
  15. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/code_loader/contract/visualizer_classes.py +0 -0
  16. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/code_loader/default_losses.py +0 -0
  17. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/code_loader/default_metrics.py +0 -0
  18. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/code_loader/experiment_api/__init__.py +0 -0
  19. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/code_loader/experiment_api/api.py +0 -0
  20. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/code_loader/experiment_api/cli_config_utils.py +0 -0
  21. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/code_loader/experiment_api/client.py +0 -0
  22. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/code_loader/experiment_api/epoch.py +0 -0
  23. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/code_loader/experiment_api/experiment.py +0 -0
  24. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/code_loader/experiment_api/experiment_context.py +0 -0
  25. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/code_loader/experiment_api/types.py +0 -0
  26. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/code_loader/experiment_api/utils.py +0 -0
  27. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/code_loader/experiment_api/workingspace_config_utils.py +0 -0
  28. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/code_loader/inner_leap_binder/__init__.py +0 -0
  29. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/code_loader/inner_leap_binder/leapbinder.py +0 -0
  30. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/code_loader/leaploader.py +0 -0
  31. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/code_loader/leaploaderbase.py +0 -0
  32. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/code_loader/plot_functions/__init__.py +0 -0
  33. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/code_loader/plot_functions/plot_functions.py +0 -0
  34. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/code_loader/plot_functions/visualize.py +0 -0
  35. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/code_loader/utils.py +0 -0
  36. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/code_loader/visualizers/__init__.py +0 -0
  37. {code_loader-1.0.169.dev2 → code_loader-1.0.171}/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.dev2
3
+ Version: 1.0.171
4
4
  Summary:
5
5
  Home-page: https://github.com/tensorleap/code-loader
6
6
  License: MIT
@@ -21,7 +21,6 @@ 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
25
24
  from code_loader import leap_binder, LeapLoader
26
25
  from code_loader.contract.mapping import NodeMapping, NodeMappingType, NodeConnection
27
26
  from code_loader.contract.visualizer_classes import LeapImage, LeapImageMask, LeapTextMask, LeapText, LeapGraph, \
@@ -700,21 +699,21 @@ def tensorleap_custom_metric(name: str,
700
699
  (f'{user_function.__name__}() validation failed: '
701
700
  f'Keys in the compute_insights mapping should be part of result keys. Got key {ci_key}.')
702
701
 
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
- }
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}
713
707
 
714
708
  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
716
709
 
717
710
  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}
718
717
  warning_keys = {key for key in defaulted_direction_keys if effective_compute_insights.get(key, True)}
719
718
  if warning_keys:
720
719
  store_warning_by_param(
@@ -1815,3 +1814,4 @@ if not _call_from_tl_platform:
1815
1814
 
1816
1815
 
1817
1816
 
1817
+
@@ -13,6 +13,7 @@ import mixpanel # type: ignore[import]
13
13
  logger = logging.getLogger(__name__)
14
14
 
15
15
  TRACKING_VERSION = '1'
16
+ TL_DISABLE_ANALYTICS_ENV_VAR = 'TL_DISABLE_ANALYTICS'
16
17
 
17
18
 
18
19
  class AnalyticsEvent(str, Enum):
@@ -143,6 +144,10 @@ class MixpanelTracker:
143
144
  # Skip tracking if IS_TENSORLEAP_PLATFORM environment variable is set to 'true'
144
145
  if os.environ.get('IS_TENSORLEAP_PLATFORM') == 'true':
145
146
  return
147
+
148
+ # Skip tracking if TL_DISABLE_ANALYTICS environment variable is set
149
+ if os.environ.get(TL_DISABLE_ANALYTICS_ENV_VAR):
150
+ return
146
151
 
147
152
  try:
148
153
  distinct_id = self._get_distinct_id()
@@ -199,11 +204,24 @@ def get_tracker() -> MixpanelTracker:
199
204
  return _tracker
200
205
 
201
206
 
207
+ def _is_analytics_disabled() -> bool:
208
+ return bool(os.environ.get(TL_DISABLE_ANALYTICS_ENV_VAR))
209
+
210
+
211
+ def disable_analytics() -> None:
212
+ """Programmatically disable all analytics/Mixpanel tracking."""
213
+ os.environ[TL_DISABLE_ANALYTICS_ENV_VAR] = 'true'
214
+
215
+
202
216
  def track_code_loader_loaded(event_properties: Optional[Dict[str, Any]] = None) -> None:
217
+ if _is_analytics_disabled():
218
+ return
203
219
  get_tracker().track_code_loader_loaded(event_properties)
204
220
 
205
221
 
206
222
  def track_integration_test_event(event_name: Union[str, AnalyticsEvent], event_properties: Optional[Dict[str, Any]] = None) -> None:
223
+ if _is_analytics_disabled():
224
+ return
207
225
  get_tracker().track_integration_test_event(event_name, event_properties)
208
226
 
209
227
 
@@ -213,6 +231,8 @@ _integration_events_emitted: Set[str] = set()
213
231
 
214
232
  def emit_integration_event_once(event_name: Union[str, AnalyticsEvent], props: Dict[str, Any]) -> None:
215
233
  """Emit an integration test event only once per test run."""
234
+ if _is_analytics_disabled():
235
+ return
216
236
  event_name_str = str(event_name)
217
237
  if event_name_str in _integration_events_emitted:
218
238
  return
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "code-loader"
3
- version = "1.0.169.dev2"
3
+ version = "1.0.171"
4
4
  description = ""
5
5
  authors = ["dorhar <doron.harnoy@tensorleap.ai>"]
6
6
  license = "MIT"
@@ -1,36 +0,0 @@
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