code-loader 1.0.208.dev7__tar.gz → 1.0.208.dev8__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.
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/PKG-INFO +1 -1
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/inner_leap_binder/leapbinder.py +0 -5
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/inner_leap_binder/leapbinder_decorators.py +26 -13
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/leaploader.py +9 -9
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/pyproject.toml +1 -1
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/LICENSE +0 -0
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/README.md +0 -0
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/__init__.py +0 -0
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/contract/__init__.py +0 -0
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/contract/datasetclasses.py +0 -0
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/contract/enums.py +0 -0
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/contract/exceptions.py +0 -0
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/contract/mapping.py +0 -0
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/contract/responsedataclasses.py +0 -0
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/contract/sim_config.py +0 -0
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/contract/visualizer_classes.py +0 -0
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/default_losses.py +0 -0
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/default_metrics.py +0 -0
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/experiment_api/__init__.py +0 -0
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/experiment_api/api.py +0 -0
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/experiment_api/cli_config_utils.py +0 -0
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/experiment_api/client.py +0 -0
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/experiment_api/epoch.py +0 -0
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/experiment_api/experiment.py +0 -0
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/experiment_api/experiment_context.py +0 -0
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/experiment_api/types.py +0 -0
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/experiment_api/utils.py +0 -0
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/experiment_api/workingspace_config_utils.py +0 -0
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/inner_leap_binder/__init__.py +0 -0
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/leaploaderbase.py +0 -0
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/mixpanel_tracker.py +0 -0
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/plot_functions/__init__.py +0 -0
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/plot_functions/plot_functions.py +0 -0
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/plot_functions/visualize.py +0 -0
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/utils.py +0 -0
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/visualizers/__init__.py +0 -0
- {code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/visualizers/default_visualizers.py +0 -0
{code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/inner_leap_binder/leapbinder.py
RENAMED
|
@@ -85,11 +85,6 @@ def _reject_stringized_sample_preprocess_response(function: Callable[..., Any],
|
|
|
85
85
|
"This breaks Tensorleap type detection, so it must be referenced as a real type.")
|
|
86
86
|
|
|
87
87
|
|
|
88
|
-
def _reject_stringized_preprocess_response(function: Callable[..., Any], arg_name: str, annotation: Any) -> None:
|
|
89
|
-
_reject_stringized_annotation(
|
|
90
|
-
function, arg_name, annotation, PreprocessResponse,
|
|
91
|
-
"Tensorleap uses that annotation to tell a dataset-computed custom latent space from a "
|
|
92
|
-
"model-computed one, so it must be a real type.")
|
|
93
88
|
|
|
94
89
|
|
|
95
90
|
|
|
@@ -7,6 +7,7 @@ import warnings
|
|
|
7
7
|
import logging
|
|
8
8
|
from collections import defaultdict
|
|
9
9
|
import functools
|
|
10
|
+
import typing
|
|
10
11
|
from functools import lru_cache
|
|
11
12
|
from pathlib import Path
|
|
12
13
|
from typing import Optional, Union, Callable, List, Dict, Set, Any
|
|
@@ -36,7 +37,7 @@ from code_loader.contract.visualizer_classes import LeapImage, LeapImageMask, Le
|
|
|
36
37
|
LeapHorizontalBar, LeapImageWithBBox, LeapImageWithHeatmap, LeapVideo, LeapAudio, LeapValidationError, \
|
|
37
38
|
map_leap_data_type_to_visualizer_class
|
|
38
39
|
from code_loader.inner_leap_binder.leapbinder import mapping_runtime_mode_env_var_mame, \
|
|
39
|
-
|
|
40
|
+
_reject_stringized_sample_preprocess_response
|
|
40
41
|
from code_loader.mixpanel_tracker import clear_integration_events, AnalyticsEvent, emit_integration_event_once
|
|
41
42
|
|
|
42
43
|
_called_from_inside_tl_decorator = 0
|
|
@@ -1751,15 +1752,32 @@ def tensorleap_metadata(
|
|
|
1751
1752
|
return decorating_function
|
|
1752
1753
|
|
|
1753
1754
|
|
|
1755
|
+
def _is_preprocess_response_type(annotation: Any) -> bool:
|
|
1756
|
+
if isinstance(annotation, type):
|
|
1757
|
+
return issubclass(annotation, PreprocessResponse)
|
|
1758
|
+
return any(_is_preprocess_response_type(arg) for arg in get_args(annotation))
|
|
1759
|
+
|
|
1760
|
+
|
|
1754
1761
|
def _classify_custom_latent_space_signature(user_function) -> str:
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1762
|
+
"""Dataset-computed when a parameter is typed PreprocessResponse (a subclass or an
|
|
1763
|
+
Optional[...] of it included), model-computed otherwise."""
|
|
1764
|
+
params = list(inspect.signature(user_function).parameters.values())
|
|
1765
|
+
hints = typing.get_type_hints(user_function)
|
|
1766
|
+
preprocess_params = [p.name for p in params if _is_preprocess_response_type(hints.get(p.name))]
|
|
1767
|
+
if preprocess_params:
|
|
1768
|
+
positional = [p.name for p in params
|
|
1769
|
+
if p.kind in (inspect.Parameter.POSITIONAL_ONLY, inspect.Parameter.POSITIONAL_OR_KEYWORD)]
|
|
1770
|
+
if positional[1:2] != preprocess_params[:1] or len(preprocess_params) > 1:
|
|
1771
|
+
raise Exception(
|
|
1772
|
+
f"tensorleap_custom_latent_space validation failed: '{user_function.__name__}' is "
|
|
1773
|
+
f"dataset-computed (it takes a PreprocessResponse), so it is called as "
|
|
1774
|
+
f"{user_function.__name__}(sample_id, preprocess) and its PreprocessResponse must be "
|
|
1775
|
+
f"the second positional parameter, and the only one. Got parameters "
|
|
1776
|
+
f"{[p.name for p in params]} with PreprocessResponse on {preprocess_params}.")
|
|
1777
|
+
return 'dataset'
|
|
1759
1778
|
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
if second not in argspec.annotations:
|
|
1779
|
+
if len(params) == 2 and params[1].name not in hints:
|
|
1780
|
+
first, second = params[0].name, params[1].name
|
|
1763
1781
|
raise Exception(
|
|
1764
1782
|
f"tensorleap_custom_latent_space validation failed: '{user_function.__name__}' has "
|
|
1765
1783
|
f"exactly two parameters ('{first}', '{second}') and '{second}' has no type "
|
|
@@ -1771,11 +1789,6 @@ def _classify_custom_latent_space_signature(user_function) -> str:
|
|
|
1771
1789
|
f"If you are upgrading an existing project, this signature used to be accepted "
|
|
1772
1790
|
f"unannotated as dataset-computed; add ': PreprocessResponse' to '{second}' to keep "
|
|
1773
1791
|
f"the previous behavior.")
|
|
1774
|
-
|
|
1775
|
-
annotation = argspec.annotations[second]
|
|
1776
|
-
_reject_stringized_preprocess_response(user_function, second, annotation)
|
|
1777
|
-
if annotation is PreprocessResponse:
|
|
1778
|
-
return 'dataset'
|
|
1779
1792
|
return 'model'
|
|
1780
1793
|
|
|
1781
1794
|
|
|
@@ -55,8 +55,6 @@ class LeapLoader(LeapLoaderBase):
|
|
|
55
55
|
self._preprocess_result_cached = None
|
|
56
56
|
self._synthetic_lookup: Dict[str, Tuple[PreprocessResponse, Any]] = {}
|
|
57
57
|
self._synthetic_populator: Optional[Callable[[str], None]] = None
|
|
58
|
-
# Dataset-computed custom LS the engine dropped for this job; get_sample stops computing them.
|
|
59
|
-
self._skipped_custom_latent_spaces: FrozenSet[str] = frozenset()
|
|
60
58
|
|
|
61
59
|
try:
|
|
62
60
|
from code_loader.mixpanel_tracker import track_code_loader_loaded
|
|
@@ -1208,10 +1206,17 @@ class LeapLoader(LeapLoaderBase):
|
|
|
1208
1206
|
if any(handler.instance_aware for handler in latent_handlers.values()):
|
|
1209
1207
|
raise Exception(
|
|
1210
1208
|
"instance-aware custom latent spaces are not supported with grouped preprocess responses")
|
|
1209
|
+
# TODO: support model-computed custom latent spaces on grouped datasets (skip them here,
|
|
1210
|
+
# as the per-sample path does, once the grouped metrics path is verified to compute them).
|
|
1211
|
+
model_ls_names = [name for name, handler in latent_handlers.items()
|
|
1212
|
+
if handler.computed_at == CustomLatentSpaceComputedAt.MODEL]
|
|
1213
|
+
if model_ls_names:
|
|
1214
|
+
raise Exception(
|
|
1215
|
+
f"model-computed custom latent spaces {model_ls_names} are not supported with "
|
|
1216
|
+
f"grouped preprocess responses yet")
|
|
1211
1217
|
custom_latent_spaces = {
|
|
1212
1218
|
name: self._to_grouped_list(handler.function(group_ids, preprocess_state))
|
|
1213
1219
|
for name, handler in latent_handlers.items()
|
|
1214
|
-
if name not in self._skipped_custom_latent_spaces
|
|
1215
1220
|
}
|
|
1216
1221
|
|
|
1217
1222
|
return DatasetSample(inputs=inputs, gt=gt, metadata=metadata, metadata_is_none=metadata_is_none,
|
|
@@ -1435,8 +1440,7 @@ class LeapLoader(LeapLoaderBase):
|
|
|
1435
1440
|
instance_id: Optional[int] = None) -> Optional[Dict[str, npt.NDArray[np.float32]]]:
|
|
1436
1441
|
handlers = {handler_name: handler for handler_name, handler
|
|
1437
1442
|
in global_leap_binder.setup_container.custom_latent_spaces.items()
|
|
1438
|
-
if handler.computed_at != CustomLatentSpaceComputedAt.MODEL
|
|
1439
|
-
and handler_name not in self._skipped_custom_latent_spaces}
|
|
1443
|
+
if handler.computed_at != CustomLatentSpaceComputedAt.MODEL}
|
|
1440
1444
|
if not handlers:
|
|
1441
1445
|
return None
|
|
1442
1446
|
if preprocess.is_grouped:
|
|
@@ -1463,10 +1467,6 @@ class LeapLoader(LeapLoaderBase):
|
|
|
1463
1467
|
self.exec_script()
|
|
1464
1468
|
return len(global_leap_binder.setup_container.custom_latent_spaces) > 0
|
|
1465
1469
|
|
|
1466
|
-
def set_skipped_custom_latent_spaces(self, names: Iterable[str]) -> None:
|
|
1467
|
-
"""Stop computing these dataset-computed custom latent spaces in get_sample(s)."""
|
|
1468
|
-
self._skipped_custom_latent_spaces = frozenset(names)
|
|
1469
|
-
|
|
1470
1470
|
@lru_cache()
|
|
1471
1471
|
def get_custom_latent_space_names(self) -> Tuple[str, ...]:
|
|
1472
1472
|
"""Names of all registered custom latent spaces, in registration order.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/contract/datasetclasses.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/contract/responsedataclasses.py
RENAMED
|
File without changes
|
|
File without changes
|
{code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/contract/visualizer_classes.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/experiment_api/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/experiment_api/cli_config_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/experiment_api/experiment.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/inner_leap_binder/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/plot_functions/__init__.py
RENAMED
|
File without changes
|
{code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/plot_functions/plot_functions.py
RENAMED
|
File without changes
|
{code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/plot_functions/visualize.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_loader-1.0.208.dev7 → code_loader-1.0.208.dev8}/code_loader/visualizers/default_visualizers.py
RENAMED
|
File without changes
|