code-loader 1.0.189__tar.gz → 1.0.190.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.
Files changed (37) hide show
  1. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/PKG-INFO +3 -3
  2. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/code_loader/inner_leap_binder/leapbinder_decorators.py +23 -5
  3. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/code_loader/leaploader.py +0 -20
  4. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/pyproject.toml +1 -1
  5. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/LICENSE +0 -0
  6. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/README.md +0 -0
  7. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/code_loader/__init__.py +0 -0
  8. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/code_loader/contract/__init__.py +0 -0
  9. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/code_loader/contract/datasetclasses.py +0 -0
  10. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/code_loader/contract/enums.py +0 -0
  11. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/code_loader/contract/exceptions.py +0 -0
  12. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/code_loader/contract/mapping.py +0 -0
  13. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/code_loader/contract/responsedataclasses.py +0 -0
  14. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/code_loader/contract/sim_config.py +0 -0
  15. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/code_loader/contract/visualizer_classes.py +0 -0
  16. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/code_loader/default_losses.py +0 -0
  17. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/code_loader/default_metrics.py +0 -0
  18. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/code_loader/experiment_api/__init__.py +0 -0
  19. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/code_loader/experiment_api/api.py +0 -0
  20. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/code_loader/experiment_api/cli_config_utils.py +0 -0
  21. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/code_loader/experiment_api/client.py +0 -0
  22. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/code_loader/experiment_api/epoch.py +0 -0
  23. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/code_loader/experiment_api/experiment.py +0 -0
  24. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/code_loader/experiment_api/experiment_context.py +0 -0
  25. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/code_loader/experiment_api/types.py +0 -0
  26. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/code_loader/experiment_api/utils.py +0 -0
  27. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/code_loader/experiment_api/workingspace_config_utils.py +0 -0
  28. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/code_loader/inner_leap_binder/__init__.py +0 -0
  29. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/code_loader/inner_leap_binder/leapbinder.py +0 -0
  30. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/code_loader/leaploaderbase.py +0 -0
  31. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/code_loader/mixpanel_tracker.py +0 -0
  32. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/code_loader/plot_functions/__init__.py +0 -0
  33. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/code_loader/plot_functions/plot_functions.py +0 -0
  34. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/code_loader/plot_functions/visualize.py +0 -0
  35. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/code_loader/utils.py +0 -0
  36. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/code_loader/visualizers/__init__.py +0 -0
  37. {code_loader-1.0.189 → code_loader-1.0.190.dev0}/code_loader/visualizers/default_visualizers.py +0 -0
@@ -1,8 +1,7 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: code-loader
3
- Version: 1.0.189
3
+ Version: 1.0.190.dev0
4
4
  Summary:
5
- Home-page: https://github.com/tensorleap/code-loader
6
5
  License: MIT
7
6
  Author: dorhar
8
7
  Author-email: doron.harnoy@tensorleap.ai
@@ -20,6 +19,7 @@ Requires-Dist: numpy (>=2.3.2,<3.0.0) ; python_version >= "3.11" and python_vers
20
19
  Requires-Dist: psutil (>=5.9.5,<6.0.0)
21
20
  Requires-Dist: pyyaml (>=6.0.2,<7.0.0)
22
21
  Requires-Dist: requests (>=2.32.3,<3.0.0)
22
+ Project-URL: Homepage, https://github.com/tensorleap/code-loader
23
23
  Project-URL: Repository, https://github.com/tensorleap/code-loader
24
24
  Description-Content-Type: text/markdown
25
25
 
@@ -197,11 +197,11 @@ def validate_output_structure(result, func_name: str, expected_type_name="np.nda
197
197
  def batch_warning(result, func_name):
198
198
  if len(result.shape) > 0 and result.shape[0] == 1:
199
199
  warnings.warn(
200
- f"{func_name} warning: Tensorleap will add a batch dimension at axis 0 to the output of {func_name}, "
201
- f"although the detected size of axis 0 is already 1. "
202
- f"This may lead to an extra batch dimension (e.g., shape (1, 1, ...)). "
203
- f"Please ensure that the output of '{func_name}' is not already batched "
204
- f"to avoid computation errors."
200
+ f"{func_name} warning: Tensorleap will add a batch dimension at axis 0 of "
201
+ f"{func_name}'s output, but axis 0 is already size 1 — this can produce a "
202
+ f"doubly-batched shape (e.g. (1, 1, ...)). If axis 0 is a real dimension "
203
+ f"(e.g. a single channel) and not an accidental batch, you can ignore this; "
204
+ f"only fix it if you pre-batched the output."
205
205
  )
206
206
 
207
207
 
@@ -349,6 +349,14 @@ def _safe_get_item(key):
349
349
 
350
350
 
351
351
  def tensorleap_load_model(prediction_types: Optional[List[PredictionTypeHandler]] = _UNSET):
352
+ """Register the model-loading function.
353
+
354
+ ``prediction_types``: declare one ``PredictionTypeHandler`` per model output, in
355
+ output order. Multi-output models must declare an entry for EVERY output — the
356
+ count is validated against the model's outputs — so for an output you don't consume
357
+ as a prediction, pass a throwaway handler to satisfy the count. Omit the argument
358
+ only when the model has a single prediction output.
359
+ """
352
360
  prediction_types_was_provided = prediction_types is not _UNSET
353
361
 
354
362
  if not prediction_types_was_provided:
@@ -567,6 +575,9 @@ def tensorleap_load_model(prediction_types: Optional[List[PredictionTypeHandler]
567
575
  def get_inputs(self):
568
576
  return self.model.get_inputs()
569
577
 
578
+ def get_outputs(self):
579
+ return self.model.get_outputs()
580
+
570
581
  model_placeholder = ModelPlaceholder(prediction_types)
571
582
  if not _call_from_tl_platform:
572
583
  update_env_params_func("tensorleap_load_model", "v")
@@ -631,6 +642,13 @@ def tensorleap_load_model(prediction_types: Optional[List[PredictionTypeHandler]
631
642
 
632
643
  return FollowInputIndex()
633
644
 
645
+ def get_outputs(self):
646
+ # Mapping-mode counterpart of the ONNX-run get_outputs(): in mapping
647
+ # mode outputs are reached by index, and get_outputs()[i] resolves to
648
+ # Prediction{i} — exactly like run()/__call__, which also return a
649
+ # ModelOutputPlaceholder. Reusing it keeps the mapping unchanged.
650
+ return ModelOutputPlaceholder()
651
+
634
652
  return ModelPlaceholder()
635
653
 
636
654
  def final_inner(*args, **kwargs):
@@ -320,9 +320,6 @@ class LeapLoader(LeapLoaderBase):
320
320
  try:
321
321
  self.exec_script()
322
322
 
323
- integration_test_test_payload = self._check_integration_test_exists()
324
- test_payloads.append(integration_test_test_payload)
325
-
326
323
  preprocess_test_payload = self._check_preprocess()
327
324
  test_payloads.append(preprocess_test_payload)
328
325
  handlers_test_payloads = self._check_handlers()
@@ -359,23 +356,6 @@ class LeapLoader(LeapLoaderBase):
359
356
  engine_file_contract=EngineFileContract(global_leap_binder.mapping_connections,
360
357
  global_leap_binder.leap_analysis_configuration))
361
358
 
362
- def _check_integration_test_exists(self) -> DatasetTestResultPayload:
363
- test_result = DatasetTestResultPayload('integration_test')
364
- # Only enforced on the Tensorleap platform (i.e. during a push / inspection,
365
- # where IS_TENSORLEAP_PLATFORM=true). Running code-loader locally or in unit
366
- # tests must not require the decorator, so pre-decorator integrations and
367
- # local check runs keep working unchanged.
368
- is_on_platform = os.environ.get('IS_TENSORLEAP_PLATFORM') == 'true'
369
- if is_on_platform and global_leap_binder.integration_test_func is None:
370
- test_result.is_passed = False
371
- test_result.display[TestingSectionEnum.Errors.name] = (
372
- "No integration test was found in your integration file. A valid Tensorleap "
373
- "integration file must define an integration test function decorated with "
374
- "@tensorleap_integration_test. Without it the integration cannot be validated "
375
- "and the push is aborted. See the mnist leap_integration.py for a valid example."
376
- )
377
- return test_result
378
-
379
359
  def _check_preprocess(self) -> DatasetTestResultPayload:
380
360
  test_result = DatasetTestResultPayload('preprocess')
381
361
  try:
@@ -1,7 +1,7 @@
1
1
  [tool.poetry]
2
2
  name = "code-loader"
3
3
 
4
- version = "1.0.189"
4
+ version = "1.0.190.dev0"
5
5
  description = ""
6
6
  authors = ["dorhar <doron.harnoy@tensorleap.ai>"]
7
7
  license = "MIT"