code-loader 1.0.180.dev5__tar.gz → 1.0.181.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.180.dev5 → code_loader-1.0.181.dev1}/PKG-INFO +1 -1
  2. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/code_loader/contract/datasetclasses.py +1 -1
  3. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/code_loader/leaploader.py +75 -1
  4. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/code_loader/leaploaderbase.py +6 -1
  5. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/pyproject.toml +2 -1
  6. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/LICENSE +0 -0
  7. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/README.md +0 -0
  8. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/code_loader/__init__.py +0 -0
  9. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/code_loader/contract/__init__.py +0 -0
  10. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/code_loader/contract/enums.py +0 -0
  11. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/code_loader/contract/exceptions.py +0 -0
  12. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/code_loader/contract/mapping.py +0 -0
  13. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/code_loader/contract/responsedataclasses.py +0 -0
  14. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/code_loader/contract/sim_config.py +0 -0
  15. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/code_loader/contract/visualizer_classes.py +0 -0
  16. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/code_loader/default_losses.py +0 -0
  17. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/code_loader/default_metrics.py +0 -0
  18. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/code_loader/experiment_api/__init__.py +0 -0
  19. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/code_loader/experiment_api/api.py +0 -0
  20. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/code_loader/experiment_api/cli_config_utils.py +0 -0
  21. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/code_loader/experiment_api/client.py +0 -0
  22. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/code_loader/experiment_api/epoch.py +0 -0
  23. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/code_loader/experiment_api/experiment.py +0 -0
  24. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/code_loader/experiment_api/experiment_context.py +0 -0
  25. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/code_loader/experiment_api/types.py +0 -0
  26. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/code_loader/experiment_api/utils.py +0 -0
  27. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/code_loader/experiment_api/workingspace_config_utils.py +0 -0
  28. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/code_loader/inner_leap_binder/__init__.py +0 -0
  29. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/code_loader/inner_leap_binder/leapbinder.py +0 -0
  30. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/code_loader/inner_leap_binder/leapbinder_decorators.py +0 -0
  31. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/code_loader/mixpanel_tracker.py +0 -0
  32. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/code_loader/plot_functions/__init__.py +0 -0
  33. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/code_loader/plot_functions/plot_functions.py +0 -0
  34. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/code_loader/plot_functions/visualize.py +0 -0
  35. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/code_loader/utils.py +0 -0
  36. {code_loader-1.0.180.dev5 → code_loader-1.0.181.dev1}/code_loader/visualizers/__init__.py +0 -0
  37. {code_loader-1.0.180.dev5 → code_loader-1.0.181.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.180.dev5
3
+ Version: 1.0.181.dev1
4
4
  Summary:
5
5
  Home-page: https://github.com/tensorleap/code-loader
6
6
  License: MIT
@@ -13,7 +13,7 @@ from code_loader.contract.sim_config import SimConfig
13
13
 
14
14
  custom_latent_space_attribute = "custom_latent_space"
15
15
 
16
- _simulation_context: dict = {"active": False}
16
+ _simulation_context: Dict[str, bool] = {"active": False}
17
17
 
18
18
 
19
19
  @dataclass
@@ -16,7 +16,7 @@ from code_loader.contract.datasetclasses import DatasetSample, DatasetBaseHandle
16
16
  PreprocessResponse, VisualizerHandler, LeapData, \
17
17
  PredictionTypeHandler, MetadataHandler, CustomLayerHandler, MetricHandler, VisualizerHandlerData, MetricHandlerData, \
18
18
  MetricCallableReturnType, CustomLossHandlerData, CustomLossHandler, RawInputsForHeatmap, SamplePreprocessResponse, \
19
- ElementInstance, custom_latent_space_attribute, DatasetIntegrationSetup, InstanceMetricHandler
19
+ ElementInstance, custom_latent_space_attribute, DatasetIntegrationSetup, InstanceMetricHandler, _simulation_context
20
20
  from code_loader.contract.enums import DataStateEnum, TestingSectionEnum, DataStateType, DatasetMetadataType
21
21
  from code_loader.contract.exceptions import DatasetScriptException
22
22
  from code_loader.contract.responsedataclasses import DatasetIntegParseResult, DatasetTestResultPayload, \
@@ -38,6 +38,20 @@ def _serialize_sim_bounds(bounds) -> dict:
38
38
  raise ValueError(f"Unknown bounds type: {type(bounds)}")
39
39
 
40
40
 
41
+ def _sample_sim_params(sim_config):
42
+ # type: (Dict[str, Any]) -> Dict[str, Any]
43
+ params = {}
44
+ for name, param_config in sim_config.items():
45
+ bounds = param_config.bounds
46
+ if isinstance(bounds, FloatBounds):
47
+ params[name] = (bounds.min + bounds.max) / 2.0
48
+ elif isinstance(bounds, IntBounds):
49
+ params[name] = int((bounds.min + bounds.max) / 2)
50
+ else: # CategoricalBounds
51
+ params[name] = bounds.values[0]
52
+ return params
53
+
54
+
41
55
  class LeapLoader(LeapLoaderBase):
42
56
  def __init__(self, code_path: str, code_entry_name: str):
43
57
  super().__init__(code_path, code_entry_name)
@@ -223,6 +237,8 @@ class LeapLoader(LeapLoaderBase):
223
237
  test_payloads.append(preprocess_test_payload)
224
238
  handlers_test_payloads = self._check_handlers()
225
239
  test_payloads.extend(handlers_test_payloads)
240
+ simulation_test_payloads = self._check_simulations()
241
+ test_payloads.extend(simulation_test_payloads)
226
242
  is_valid = all([payload.is_passed for payload in test_payloads])
227
243
  setup_response = self.get_dataset_setup_response(handlers_test_payloads)
228
244
 
@@ -299,6 +315,64 @@ class LeapLoader(LeapLoaderBase):
299
315
  result_payloads.extend(test_result)
300
316
  return result_payloads
301
317
 
318
+ def _check_simulations(self):
319
+ # type: () -> List[DatasetTestResultPayload]
320
+ result_payloads = []
321
+ for sim in global_leap_binder.setup_container.simulations:
322
+ test_result = DatasetTestResultPayload(sim.name)
323
+ try:
324
+ kwargs = _sample_sim_params(sim.sim_config)
325
+ kwargs["N"] = 1
326
+ if "seed" in inspect.signature(sim.function).parameters:
327
+ kwargs["seed"] = 0
328
+ _simulation_context["active"] = True
329
+ try:
330
+ preprocess_response = sim.function(**kwargs)
331
+ finally:
332
+ _simulation_context["active"] = False
333
+ preprocess_response.state = DataStateType.additional
334
+ if not isinstance(preprocess_response, PreprocessResponse):
335
+ raise TypeError(
336
+ "Expected PreprocessResponse, got {}".format(type(preprocess_response).__name__)
337
+ )
338
+ if preprocess_response.length < 1:
339
+ raise ValueError("Simulation returned PreprocessResponse with length < 1")
340
+ except Exception as e:
341
+ line_number, file_name, stacktrace = get_root_exception_file_and_line_number()
342
+ test_result.display[TestingSectionEnum.Errors.name] = (
343
+ "{} in file {}, line_number: {}\nStacktrace:\n{}".format(
344
+ repr(e), file_name, line_number, stacktrace
345
+ )
346
+ )
347
+ test_result.is_passed = False
348
+ result_payloads.append(test_result)
349
+ return result_payloads
350
+
351
+ def run_simulation_check(self, sim_name):
352
+ # type: (str) -> Dict[str, npt.NDArray[np.float32]]
353
+ self.exec_script()
354
+ sim = next(
355
+ (s for s in global_leap_binder.setup_container.simulations if s.name == sim_name),
356
+ None,
357
+ )
358
+ if sim is None:
359
+ raise ValueError("No simulation registered with name '{}'".format(sim_name))
360
+ kwargs = _sample_sim_params(sim.sim_config)
361
+ kwargs["N"] = 1
362
+ if "seed" in inspect.signature(sim.function).parameters:
363
+ kwargs["seed"] = 0
364
+ _simulation_context["active"] = True
365
+ try:
366
+ sim_preprocess = sim.function(**kwargs)
367
+ finally:
368
+ _simulation_context["active"] = False
369
+ sim_preprocess.state = DataStateType.additional
370
+ sim_preprocess.tl_generated = True
371
+ result = {}
372
+ for handler in global_leap_binder.setup_container.inputs:
373
+ result[handler.name] = handler.function(0, sim_preprocess)
374
+ return result
375
+
302
376
  @staticmethod
303
377
  def _get_all_dataset_base_handlers() -> List[Union[DatasetBaseHandler, MetadataHandler]]:
304
378
  all_dataset_base_handlers: List[Union[DatasetBaseHandler, MetadataHandler]] = []
@@ -2,7 +2,7 @@
2
2
 
3
3
  from abc import abstractmethod
4
4
 
5
- from typing import Dict, List, Union, Type, Optional, Tuple
5
+ from typing import Any, Dict, List, Union, Type, Optional, Tuple
6
6
 
7
7
  import numpy as np
8
8
  import numpy.typing as npt
@@ -153,6 +153,11 @@ class LeapLoaderBase:
153
153
  def get_heatmap_visualizer_raw_vis_input_arg_name(self, visualizer_name: str) -> Optional[str]:
154
154
  pass
155
155
 
156
+ @abstractmethod
157
+ def run_simulation_check(self, sim_name):
158
+ # type: (str) -> Dict[str, Any]
159
+ pass
160
+
156
161
  def is_custom_latent_space(self) -> bool:
157
162
  if not self.code_entry_name or not self.code_path:
158
163
  return False
@@ -1,6 +1,7 @@
1
1
  [tool.poetry]
2
2
  name = "code-loader"
3
- version = "1.0.180.dev5"
3
+
4
+ version = "1.0.181.dev1"
4
5
  description = ""
5
6
  authors = ["dorhar <doron.harnoy@tensorleap.ai>"]
6
7
  license = "MIT"