code-loader 1.0.180.dev1__tar.gz → 1.0.180.dev2__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.dev1 → code_loader-1.0.180.dev2}/PKG-INFO +1 -1
  2. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/code_loader/leaploader.py +64 -0
  3. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/code_loader/leaploaderbase.py +6 -1
  4. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/pyproject.toml +1 -1
  5. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/LICENSE +0 -0
  6. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/README.md +0 -0
  7. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/code_loader/__init__.py +0 -0
  8. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/code_loader/contract/__init__.py +0 -0
  9. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/code_loader/contract/datasetclasses.py +0 -0
  10. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/code_loader/contract/enums.py +0 -0
  11. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/code_loader/contract/exceptions.py +0 -0
  12. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/code_loader/contract/mapping.py +0 -0
  13. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/code_loader/contract/responsedataclasses.py +0 -0
  14. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/code_loader/contract/sim_config.py +0 -0
  15. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/code_loader/contract/visualizer_classes.py +0 -0
  16. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/code_loader/default_losses.py +0 -0
  17. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/code_loader/default_metrics.py +0 -0
  18. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/code_loader/experiment_api/__init__.py +0 -0
  19. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/code_loader/experiment_api/api.py +0 -0
  20. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/code_loader/experiment_api/cli_config_utils.py +0 -0
  21. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/code_loader/experiment_api/client.py +0 -0
  22. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/code_loader/experiment_api/epoch.py +0 -0
  23. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/code_loader/experiment_api/experiment.py +0 -0
  24. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/code_loader/experiment_api/experiment_context.py +0 -0
  25. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/code_loader/experiment_api/types.py +0 -0
  26. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/code_loader/experiment_api/utils.py +0 -0
  27. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/code_loader/experiment_api/workingspace_config_utils.py +0 -0
  28. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/code_loader/inner_leap_binder/__init__.py +0 -0
  29. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/code_loader/inner_leap_binder/leapbinder.py +0 -0
  30. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/code_loader/inner_leap_binder/leapbinder_decorators.py +0 -0
  31. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/code_loader/mixpanel_tracker.py +0 -0
  32. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/code_loader/plot_functions/__init__.py +0 -0
  33. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/code_loader/plot_functions/plot_functions.py +0 -0
  34. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/code_loader/plot_functions/visualize.py +0 -0
  35. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/code_loader/utils.py +0 -0
  36. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/code_loader/visualizers/__init__.py +0 -0
  37. {code_loader-1.0.180.dev1 → code_loader-1.0.180.dev2}/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.dev1
3
+ Version: 1.0.180.dev2
4
4
  Summary:
5
5
  Home-page: https://github.com/tensorleap/code-loader
6
6
  License: MIT
@@ -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,54 @@ 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
+ preprocess_response = sim.function(**kwargs)
329
+ if not isinstance(preprocess_response, PreprocessResponse):
330
+ raise TypeError(
331
+ "Expected PreprocessResponse, got {}".format(type(preprocess_response).__name__)
332
+ )
333
+ if preprocess_response.length < 1:
334
+ raise ValueError("Simulation returned PreprocessResponse with length < 1")
335
+ except Exception as e:
336
+ line_number, file_name, stacktrace = get_root_exception_file_and_line_number()
337
+ test_result.display[TestingSectionEnum.Errors.name] = (
338
+ "{} in file {}, line_number: {}\nStacktrace:\n{}".format(
339
+ repr(e), file_name, line_number, stacktrace
340
+ )
341
+ )
342
+ test_result.is_passed = False
343
+ result_payloads.append(test_result)
344
+ return result_payloads
345
+
346
+ def run_simulation_check(self, sim_name):
347
+ # type: (str) -> Dict[str, npt.NDArray[np.float32]]
348
+ self.exec_script()
349
+ sim = next(
350
+ (s for s in global_leap_binder.setup_container.simulations if s.name == sim_name),
351
+ None,
352
+ )
353
+ if sim is None:
354
+ raise ValueError("No simulation registered with name '{}'".format(sim_name))
355
+ kwargs = _sample_sim_params(sim.sim_config)
356
+ kwargs["N"] = 1
357
+ if "seed" in inspect.signature(sim.function).parameters:
358
+ kwargs["seed"] = 0
359
+ sim_preprocess = sim.function(**kwargs)
360
+ sim_preprocess.state = DataStateType.additional
361
+ result = {}
362
+ for handler in global_leap_binder.setup_container.inputs:
363
+ result[handler.name] = handler.function(0, sim_preprocess)
364
+ return result
365
+
302
366
  @staticmethod
303
367
  def _get_all_dataset_base_handlers() -> List[Union[DatasetBaseHandler, MetadataHandler]]:
304
368
  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,6 @@
1
1
  [tool.poetry]
2
2
  name = "code-loader"
3
- version = "1.0.180.dev1"
3
+ version = "1.0.180.dev2"
4
4
  description = ""
5
5
  authors = ["dorhar <doron.harnoy@tensorleap.ai>"]
6
6
  license = "MIT"