code-loader 1.0.208.dev5__tar.gz → 1.0.208.dev6__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.dev5 → code_loader-1.0.208.dev6}/PKG-INFO +1 -1
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/inner_leap_binder/leapbinder_decorators.py +45 -0
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/leaploader.py +9 -1
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/pyproject.toml +1 -1
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/LICENSE +0 -0
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/README.md +0 -0
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/__init__.py +0 -0
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/contract/__init__.py +0 -0
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/contract/datasetclasses.py +0 -0
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/contract/enums.py +0 -0
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/contract/exceptions.py +0 -0
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/contract/mapping.py +0 -0
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/contract/responsedataclasses.py +0 -0
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/contract/sim_config.py +0 -0
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/contract/visualizer_classes.py +0 -0
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/default_losses.py +0 -0
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/default_metrics.py +0 -0
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/experiment_api/__init__.py +0 -0
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/experiment_api/api.py +0 -0
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/experiment_api/cli_config_utils.py +0 -0
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/experiment_api/client.py +0 -0
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/experiment_api/epoch.py +0 -0
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/experiment_api/experiment.py +0 -0
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/experiment_api/experiment_context.py +0 -0
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/experiment_api/types.py +0 -0
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/experiment_api/utils.py +0 -0
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/experiment_api/workingspace_config_utils.py +0 -0
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/inner_leap_binder/__init__.py +0 -0
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/inner_leap_binder/leapbinder.py +0 -0
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/leaploaderbase.py +0 -0
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/mixpanel_tracker.py +0 -0
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/plot_functions/__init__.py +0 -0
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/plot_functions/plot_functions.py +0 -0
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/plot_functions/visualize.py +0 -0
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/utils.py +0 -0
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/visualizers/__init__.py +0 -0
- {code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/visualizers/default_visualizers.py +0 -0
|
@@ -1843,6 +1843,48 @@ def _check_custom_latent_space_width(result, ls_name, reduce, n_components, chan
|
|
|
1843
1843
|
f"reduce=LatentSpaceReduction.RANDOM_PROJECTION."))
|
|
1844
1844
|
|
|
1845
1845
|
|
|
1846
|
+
_FLOAT16_MAX = float(np.finfo(np.float16).max)
|
|
1847
|
+
|
|
1848
|
+
|
|
1849
|
+
def _check_custom_latent_space_values(result: np.ndarray, ls_name: str, has_batch_axis: bool) -> None:
|
|
1850
|
+
"""Reject what no sample could store and warn about values the engine handles per sample."""
|
|
1851
|
+
if isinstance(result, np.ma.MaskedArray):
|
|
1852
|
+
raise Exception(
|
|
1853
|
+
f"tensorleap_custom_latent_space validation failed: '{ls_name}' returned a numpy masked "
|
|
1854
|
+
f"array; the mask would be ignored. Return a plain ndarray, with np.nan for a sample "
|
|
1855
|
+
f"you cannot compute.")
|
|
1856
|
+
if result.dtype.kind not in 'biuf':
|
|
1857
|
+
raise Exception(
|
|
1858
|
+
f"tensorleap_custom_latent_space validation failed: '{ls_name}' returned dtype "
|
|
1859
|
+
f"{result.dtype}. Return a real-valued numeric array (bool, int or float), with np.nan "
|
|
1860
|
+
f"for a sample you cannot compute.")
|
|
1861
|
+
dims = result.shape[1:] if has_batch_axis else result.shape
|
|
1862
|
+
if int(np.prod(dims)) == 0:
|
|
1863
|
+
raise Exception(
|
|
1864
|
+
f"tensorleap_custom_latent_space validation failed: '{ls_name}' returned shape "
|
|
1865
|
+
f"{tuple(result.shape)}, which has no features per sample.")
|
|
1866
|
+
finite = np.isfinite(result)
|
|
1867
|
+
if not finite.all():
|
|
1868
|
+
store_general_warning(
|
|
1869
|
+
key=("tensorleap_custom_latent_space_nonfinite", ls_name),
|
|
1870
|
+
message=(
|
|
1871
|
+
f"Custom latent space '{ls_name}' returned NaN or inf. Those samples are left out of "
|
|
1872
|
+
f"this latent space; if they exceed 5% of the evaluated samples the latent space is "
|
|
1873
|
+
f"dropped."))
|
|
1874
|
+
peak = 0.0
|
|
1875
|
+
if result.size and result.dtype.kind == 'f':
|
|
1876
|
+
peak = float(np.max(np.abs(result), where=finite, initial=0.0))
|
|
1877
|
+
elif result.size and result.dtype.kind in 'iu':
|
|
1878
|
+
peak = float(max(abs(int(result.min())), abs(int(result.max()))))
|
|
1879
|
+
if peak > _FLOAT16_MAX:
|
|
1880
|
+
store_general_warning(
|
|
1881
|
+
key=("tensorleap_custom_latent_space_clipped", ls_name),
|
|
1882
|
+
message=(
|
|
1883
|
+
f"Custom latent space '{ls_name}' returned values beyond +-{_FLOAT16_MAX:.0f}. Latent "
|
|
1884
|
+
f"spaces are stored as float16, so they are clipped to that range; scale or normalize "
|
|
1885
|
+
f"them inside the function to keep their relative size."))
|
|
1886
|
+
|
|
1887
|
+
|
|
1846
1888
|
def tensorleap_custom_latent_space(name: Optional[str] = None, use_ls_for_analysis: bool = False,
|
|
1847
1889
|
reduce: Optional[LatentSpaceReduction] = None,
|
|
1848
1890
|
n_components: int = 512, channel_axis: int = -1):
|
|
@@ -1864,6 +1906,7 @@ def tensorleap_custom_latent_space(name: Optional[str] = None, use_ls_for_analys
|
|
|
1864
1906
|
assert isinstance(single_result, np.ndarray), \
|
|
1865
1907
|
(f'tensorleap_custom_latent_space validation failed: '
|
|
1866
1908
|
f'The return type should be a numpy array. Got {type(single_result)}.')
|
|
1909
|
+
_check_custom_latent_space_values(single_result, ls_name, has_batch_axis=False)
|
|
1867
1910
|
if single_result.ndim > 1:
|
|
1868
1911
|
flat_dim = int(np.prod(single_result.shape))
|
|
1869
1912
|
store_general_warning(
|
|
@@ -1966,6 +2009,7 @@ def _decorate_model_latent_space(user_function, ls_name, use_ls_for_analysis, re
|
|
|
1966
2009
|
f"tensorleap_custom_latent_space validation failed: '{user_function.__name__}' "
|
|
1967
2010
|
f"returned shape {tuple(result.shape)}. A model-computed latent space returns "
|
|
1968
2011
|
f"(batch, d), so the result needs a batch axis and at least one feature axis.")
|
|
2012
|
+
_check_custom_latent_space_values(result, ls_name, has_batch_axis=True)
|
|
1969
2013
|
if leap_binder.batch_size_to_validate:
|
|
1970
2014
|
assert result.shape[0] == leap_binder.batch_size_to_validate, (
|
|
1971
2015
|
f"tensorleap_custom_latent_space validation failed: '{user_function.__name__}' "
|
|
@@ -2052,6 +2096,7 @@ def tensorleap_instance_custom_latent_space(name: Optional[str] = None, use_ls_f
|
|
|
2052
2096
|
assert isinstance(result, np.ndarray), \
|
|
2053
2097
|
(f'tensorleap_instance_custom_latent_space validation failed: '
|
|
2054
2098
|
f'The return type should be a numpy array. Got {type(result)}.')
|
|
2099
|
+
_check_custom_latent_space_values(result, ls_name, has_batch_axis=False)
|
|
2055
2100
|
if result.ndim > 1:
|
|
2056
2101
|
flat_dim = int(np.prod(result.shape))
|
|
2057
2102
|
store_general_warning(
|
|
@@ -55,6 +55,8 @@ 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()
|
|
58
60
|
|
|
59
61
|
try:
|
|
60
62
|
from code_loader.mixpanel_tracker import track_code_loader_loaded
|
|
@@ -1209,6 +1211,7 @@ class LeapLoader(LeapLoaderBase):
|
|
|
1209
1211
|
custom_latent_spaces = {
|
|
1210
1212
|
name: self._to_grouped_list(handler.function(group_ids, preprocess_state))
|
|
1211
1213
|
for name, handler in latent_handlers.items()
|
|
1214
|
+
if name not in self._skipped_custom_latent_spaces
|
|
1212
1215
|
}
|
|
1213
1216
|
|
|
1214
1217
|
return DatasetSample(inputs=inputs, gt=gt, metadata=metadata, metadata_is_none=metadata_is_none,
|
|
@@ -1432,7 +1435,8 @@ class LeapLoader(LeapLoaderBase):
|
|
|
1432
1435
|
instance_id: Optional[int] = None) -> Optional[Dict[str, npt.NDArray[np.float32]]]:
|
|
1433
1436
|
handlers = {handler_name: handler for handler_name, handler
|
|
1434
1437
|
in global_leap_binder.setup_container.custom_latent_spaces.items()
|
|
1435
|
-
if handler.computed_at != CustomLatentSpaceComputedAt.MODEL
|
|
1438
|
+
if handler.computed_at != CustomLatentSpaceComputedAt.MODEL
|
|
1439
|
+
and handler_name not in self._skipped_custom_latent_spaces}
|
|
1436
1440
|
if not handlers:
|
|
1437
1441
|
return None
|
|
1438
1442
|
if preprocess.is_grouped:
|
|
@@ -1459,6 +1463,10 @@ class LeapLoader(LeapLoaderBase):
|
|
|
1459
1463
|
self.exec_script()
|
|
1460
1464
|
return len(global_leap_binder.setup_container.custom_latent_spaces) > 0
|
|
1461
1465
|
|
|
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
|
+
|
|
1462
1470
|
@lru_cache()
|
|
1463
1471
|
def get_custom_latent_space_names(self) -> Tuple[str, ...]:
|
|
1464
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.dev5 → code_loader-1.0.208.dev6}/code_loader/contract/datasetclasses.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/contract/responsedataclasses.py
RENAMED
|
File without changes
|
|
File without changes
|
{code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/contract/visualizer_classes.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/experiment_api/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/experiment_api/cli_config_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/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.dev5 → code_loader-1.0.208.dev6}/code_loader/inner_leap_binder/__init__.py
RENAMED
|
File without changes
|
{code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/inner_leap_binder/leapbinder.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/plot_functions/__init__.py
RENAMED
|
File without changes
|
{code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/plot_functions/plot_functions.py
RENAMED
|
File without changes
|
{code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/plot_functions/visualize.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_loader-1.0.208.dev5 → code_loader-1.0.208.dev6}/code_loader/visualizers/default_visualizers.py
RENAMED
|
File without changes
|