code-loader 1.0.197.dev0__tar.gz → 1.0.197.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.197.dev0 → code_loader-1.0.197.dev1}/PKG-INFO +1 -1
  2. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/code_loader/contract/datasetclasses.py +1 -0
  3. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/code_loader/inner_leap_binder/leapbinder.py +23 -3
  4. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/code_loader/inner_leap_binder/leapbinder_decorators.py +7 -2
  5. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/code_loader/leaploader.py +13 -0
  6. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/code_loader/leaploaderbase.py +4 -0
  7. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/pyproject.toml +1 -1
  8. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/LICENSE +0 -0
  9. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/README.md +0 -0
  10. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/code_loader/__init__.py +0 -0
  11. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/code_loader/contract/__init__.py +0 -0
  12. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/code_loader/contract/enums.py +0 -0
  13. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/code_loader/contract/exceptions.py +0 -0
  14. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/code_loader/contract/mapping.py +0 -0
  15. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/code_loader/contract/responsedataclasses.py +0 -0
  16. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/code_loader/contract/sim_config.py +0 -0
  17. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/code_loader/contract/visualizer_classes.py +0 -0
  18. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/code_loader/default_losses.py +0 -0
  19. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/code_loader/default_metrics.py +0 -0
  20. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/code_loader/experiment_api/__init__.py +0 -0
  21. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/code_loader/experiment_api/api.py +0 -0
  22. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/code_loader/experiment_api/cli_config_utils.py +0 -0
  23. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/code_loader/experiment_api/client.py +0 -0
  24. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/code_loader/experiment_api/epoch.py +0 -0
  25. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/code_loader/experiment_api/experiment.py +0 -0
  26. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/code_loader/experiment_api/experiment_context.py +0 -0
  27. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/code_loader/experiment_api/types.py +0 -0
  28. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/code_loader/experiment_api/utils.py +0 -0
  29. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/code_loader/experiment_api/workingspace_config_utils.py +0 -0
  30. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/code_loader/inner_leap_binder/__init__.py +0 -0
  31. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/code_loader/mixpanel_tracker.py +0 -0
  32. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/code_loader/plot_functions/__init__.py +0 -0
  33. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/code_loader/plot_functions/plot_functions.py +0 -0
  34. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/code_loader/plot_functions/visualize.py +0 -0
  35. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/code_loader/utils.py +0 -0
  36. {code_loader-1.0.197.dev0 → code_loader-1.0.197.dev1}/code_loader/visualizers/__init__.py +0 -0
  37. {code_loader-1.0.197.dev0 → code_loader-1.0.197.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.197.dev0
3
+ Version: 1.0.197.dev1
4
4
  Summary:
5
5
  Home-page: https://github.com/tensorleap/code-loader
6
6
  License: MIT
@@ -252,6 +252,7 @@ class MetadataHandler:
252
252
  class CustomLatentSpaceHandler:
253
253
  function: SectionCallableInterface
254
254
  name: str = 'custom_latent_space'
255
+ use_ls_for_analysis: bool = False
255
256
 
256
257
 
257
258
  # How a chain's latent-space vectors are derived from its per-step forward passes.
@@ -514,7 +514,8 @@ class LeapBinder:
514
514
  self.setup_container.metadata.append(MetadataHandler(name, function, metadata_type))
515
515
 
516
516
  def set_custom_latent_space(self, function: SectionCallableInterface,
517
- name: Optional[str] = None) -> None:
517
+ name: Optional[str] = None,
518
+ use_ls_for_analysis: bool = False) -> None:
518
519
  """
519
520
  Register a custom latent space function.
520
521
 
@@ -531,6 +532,10 @@ class LeapBinder:
531
532
  space vec of the sample.
532
533
  name (Optional[str]): Unique name for this custom latent space. Defaults to
533
534
  the reserved single-LS name for backward compatibility.
535
+ use_ls_for_analysis (bool): When True, the engine uses this custom latent
536
+ space for the Out-Of-Distribution and Domain-Gap insights instead of the
537
+ built-in defaults. At most one registered custom latent space may set this;
538
+ registering a second one with the flag raises.
534
539
  """
535
540
  if name is None:
536
541
  name = custom_latent_space_attribute
@@ -540,7 +545,22 @@ class LeapBinder:
540
545
  f"@tensorleap_custom_latent_space must have a unique name "
541
546
  f"(pass name='...' to distinguish them)."
542
547
  )
543
- self.setup_container.custom_latent_spaces[name] = CustomLatentSpaceHandler(function, name)
548
+ if use_ls_for_analysis:
549
+ already_flagged = [
550
+ existing_name
551
+ for existing_name, handler in self.setup_container.custom_latent_spaces.items()
552
+ if handler.use_ls_for_analysis
553
+ ]
554
+ if already_flagged:
555
+ raise Exception(
556
+ f"use_ls_for_analysis=True is already set on custom latent space "
557
+ f"'{already_flagged[0]}'. Only one custom latent space may set "
558
+ f"use_ls_for_analysis=True (it selects the latent space used for the "
559
+ f"Out-Of-Distribution and Domain-Gap insights). Set it on '{name}' "
560
+ f"or '{already_flagged[0]}', not both."
561
+ )
562
+ self.setup_container.custom_latent_spaces[name] = CustomLatentSpaceHandler(
563
+ function, name, use_ls_for_analysis)
544
564
 
545
565
  def set_autoregressive_step(self, function: AutoregressiveStepCallableInterface,
546
566
  latent_space_aggregation: str = 'last_step') -> None:
@@ -906,7 +926,7 @@ class LeapBinder:
906
926
  "Element instances are not supported together with tensorleap_autoregressive_step: "
907
927
  "instance generation masks the sample's encoded inputs, which do not exist in an "
908
928
  "autoregressive integration. Remove the instance encoders or the autoregressive hook.")
909
- if self.setup_container.custom_latent_space is not None:
929
+ if self.setup_container.custom_latent_spaces:
910
930
  raise Exception(
911
931
  "tensorleap_custom_latent_space is not supported together with "
912
932
  "tensorleap_autoregressive_step: the custom latent space function only sees "
@@ -1621,7 +1621,11 @@ def tensorleap_metadata(
1621
1621
  return decorating_function
1622
1622
 
1623
1623
 
1624
- def tensorleap_custom_latent_space(name: Optional[str] = None):
1624
+ def tensorleap_custom_latent_space(name: Optional[str] = None, use_ls_for_analysis: bool = False):
1625
+ assert isinstance(use_ls_for_analysis, bool), \
1626
+ ("tensorleap_custom_latent_space validation failed: use_ls_for_analysis must be a bool. "
1627
+ f"Got {type(use_ls_for_analysis)}.")
1628
+
1625
1629
  def decorating_function(user_function: SectionCallableInterface):
1626
1630
  ls_name = name if name is not None else user_function.__name__
1627
1631
  def _validate_input_args(sample_id: Union[int, str], preprocess_response: PreprocessResponse):
@@ -1664,7 +1668,8 @@ def tensorleap_custom_latent_space(name: Optional[str] = None):
1664
1668
 
1665
1669
  return result
1666
1670
 
1667
- leap_binder.set_custom_latent_space(inner_without_validate, ls_name)
1671
+ leap_binder.set_custom_latent_space(inner_without_validate, ls_name,
1672
+ use_ls_for_analysis=use_ls_for_analysis)
1668
1673
 
1669
1674
  def inner(sample_id, preprocess_response):
1670
1675
  if os.environ.get(mapping_runtime_mode_env_var_mame):
@@ -1076,6 +1076,19 @@ class LeapLoader(LeapLoaderBase):
1076
1076
  self.exec_script()
1077
1077
  return tuple(global_leap_binder.setup_container.custom_latent_spaces.keys())
1078
1078
 
1079
+ @lru_cache()
1080
+ def get_custom_latent_space_for_analysis(self) -> Optional[str]:
1081
+ """Name of the custom latent space flagged with use_ls_for_analysis=True, if any.
1082
+
1083
+ The engine uses this latent space for the Out-Of-Distribution and Domain-Gap
1084
+ insights instead of the built-in defaults. Returns None when no custom latent
1085
+ space set the flag. At most one is flagged (enforced at registration time)."""
1086
+ self.exec_script()
1087
+ for name, handler in global_leap_binder.setup_container.custom_latent_spaces.items():
1088
+ if handler.use_ls_for_analysis:
1089
+ return name
1090
+ return None
1091
+
1079
1092
  @lru_cache()
1080
1093
  def has_autoregressive_step(self) -> bool:
1081
1094
  self.exec_script()
@@ -222,6 +222,10 @@ class LeapLoaderBase:
222
222
  def get_custom_latent_space_names(self) -> Tuple[str, ...]:
223
223
  pass
224
224
 
225
+ @abstractmethod
226
+ def get_custom_latent_space_for_analysis(self) -> Optional[str]:
227
+ pass
228
+
225
229
  @abstractmethod
226
230
  def get_heatmap_visualizer_raw_vis_input_arg_name(self, visualizer_name: str) -> Optional[str]:
227
231
  pass
@@ -1,7 +1,7 @@
1
1
  [tool.poetry]
2
2
  name = "code-loader"
3
3
 
4
- version = "1.0.197.dev0"
4
+ version = "1.0.197.dev1"
5
5
  description = ""
6
6
  authors = ["dorhar <doron.harnoy@tensorleap.ai>"]
7
7
  license = "MIT"