code-loader 1.0.194__tar.gz → 1.0.195.dev0__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.194 → code_loader-1.0.195.dev0}/PKG-INFO +1 -1
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/inner_leap_binder/leapbinder_decorators.py +4 -3
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/utils.py +23 -17
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/pyproject.toml +1 -1
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/LICENSE +0 -0
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/README.md +0 -0
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/__init__.py +0 -0
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/contract/__init__.py +0 -0
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/contract/datasetclasses.py +0 -0
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/contract/enums.py +0 -0
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/contract/exceptions.py +0 -0
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/contract/mapping.py +0 -0
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/contract/responsedataclasses.py +0 -0
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/contract/sim_config.py +0 -0
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/contract/visualizer_classes.py +0 -0
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/default_losses.py +0 -0
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/default_metrics.py +0 -0
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/experiment_api/__init__.py +0 -0
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/experiment_api/api.py +0 -0
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/experiment_api/cli_config_utils.py +0 -0
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/experiment_api/client.py +0 -0
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/experiment_api/epoch.py +0 -0
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/experiment_api/experiment.py +0 -0
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/experiment_api/experiment_context.py +0 -0
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/experiment_api/types.py +0 -0
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/experiment_api/utils.py +0 -0
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/experiment_api/workingspace_config_utils.py +0 -0
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/inner_leap_binder/__init__.py +0 -0
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/inner_leap_binder/leapbinder.py +0 -0
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/leaploader.py +0 -0
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/leaploaderbase.py +0 -0
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/mixpanel_tracker.py +0 -0
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/plot_functions/__init__.py +0 -0
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/plot_functions/plot_functions.py +0 -0
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/plot_functions/visualize.py +0 -0
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/visualizers/__init__.py +0 -0
- {code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/visualizers/default_visualizers.py +0 -0
|
@@ -1933,9 +1933,10 @@ def tensorleap_autoregressive_step(latent_space_aggregation: str = 'last_step'):
|
|
|
1933
1933
|
state returned by the previous call, and return the next step's full input dict together with
|
|
1934
1934
|
the updated state; returning (None, state) ends the chain — the terminating call still
|
|
1935
1935
|
returns state, so the final step participates in state aggregation. State is never fed to
|
|
1936
|
-
the model;
|
|
1937
|
-
|
|
1938
|
-
|
|
1936
|
+
the model; any picklable nest of builtin/numpy values works (dicts, lists, tuples, sets,
|
|
1937
|
+
numbers, strings, arrays — not user-defined classes, lambdas or open resources, since the
|
|
1938
|
+
platform deserializes state without the integration code), and it rides the platform queue
|
|
1939
|
+
on every step — accumulate reductions, not raw per-step tensors. The hook must be stateless and deterministically seeded (seed stochasticity from
|
|
1939
1940
|
sample_id) — the engine replays steps after crash recovery and relies on identical results.
|
|
1940
1941
|
|
|
1941
1942
|
latent_space_aggregation ('last_step' | 'mean') declares how the chain's latent-space
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import io
|
|
1
2
|
import math
|
|
3
|
+
import pickle
|
|
2
4
|
import sys
|
|
3
5
|
from pathlib import Path
|
|
4
6
|
from types import TracebackType
|
|
@@ -104,27 +106,31 @@ def get_metadata_type_from_variable(variable: Union[Optional[str], int, bool, Op
|
|
|
104
106
|
|
|
105
107
|
|
|
106
108
|
|
|
107
|
-
|
|
109
|
+
# The platform queue transports state as pickled payloads which the engine deserializes
|
|
110
|
+
# WITHOUT the integration code loaded, so a class defined in the user's modules round-trips
|
|
111
|
+
# locally but crashes on the engine. Only modules importable on the engine may resolve.
|
|
112
|
+
_STATE_SAFE_PICKLE_MODULES = ('builtins', 'copyreg', 'collections', 'numpy', 'datetime')
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
class _EngineSafeUnpickler(pickle.Unpickler):
|
|
116
|
+
def find_class(self, module: str, name: str) -> Any:
|
|
117
|
+
if module.split('.')[0] in _STATE_SAFE_PICKLE_MODULES:
|
|
118
|
+
return super().find_class(module, name)
|
|
119
|
+
raise pickle.UnpicklingError(
|
|
120
|
+
f'{module}.{name} is defined in integration code, which is not importable on the '
|
|
121
|
+
f'platform engine')
|
|
108
122
|
|
|
109
123
|
|
|
110
124
|
def validate_autoregressive_state_types(value: Any, path: str = 'state') -> None:
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
raise AssertionError(
|
|
115
|
-
f'autoregressive state validation failed: dict key {key!r} at {path} must be '
|
|
116
|
-
f'a string. Got {type(key).__name__}.')
|
|
117
|
-
validate_autoregressive_state_types(item, f'{path}[{key!r}]')
|
|
118
|
-
return
|
|
119
|
-
if isinstance(value, (list, tuple)):
|
|
120
|
-
for i, item in enumerate(value):
|
|
121
|
-
validate_autoregressive_state_types(item, f'{path}[{i}]')
|
|
122
|
-
return
|
|
123
|
-
if not isinstance(value, AUTOREGRESSIVE_STATE_LEAF_TYPES):
|
|
125
|
+
try:
|
|
126
|
+
_EngineSafeUnpickler(io.BytesIO(pickle.dumps(value))).load()
|
|
127
|
+
except Exception as e:
|
|
124
128
|
raise AssertionError(
|
|
125
|
-
f'autoregressive state validation failed: {path}
|
|
126
|
-
|
|
127
|
-
|
|
129
|
+
f'autoregressive state validation failed: {path} is not serializable ({e}). State '
|
|
130
|
+
'is serialized to the platform queue on every chain step and deserialized without '
|
|
131
|
+
'the integration code — any picklable nest of builtin/numpy values works (dicts, '
|
|
132
|
+
'lists, tuples, sets, numbers, strings, arrays), but user-defined classes, lambdas '
|
|
133
|
+
'and open resources do not.') from e
|
|
128
134
|
|
|
129
135
|
|
|
130
136
|
def autoregressive_nests_equal(a: Any, b: Any) -> bool:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/contract/responsedataclasses.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/experiment_api/cli_config_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/experiment_api/experiment_context.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/inner_leap_binder/leapbinder.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/plot_functions/plot_functions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_loader-1.0.194 → code_loader-1.0.195.dev0}/code_loader/visualizers/default_visualizers.py
RENAMED
|
File without changes
|