code-loader 1.0.166.dev2__tar.gz → 1.0.168__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.166.dev2 → code_loader-1.0.168}/PKG-INFO +1 -1
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/code_loader/inner_leap_binder/leapbinder_decorators.py +31 -24
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/pyproject.toml +3 -1
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/LICENSE +0 -0
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/README.md +0 -0
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/code_loader/__init__.py +0 -0
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/code_loader/contract/__init__.py +0 -0
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/code_loader/contract/datasetclasses.py +0 -0
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/code_loader/contract/enums.py +0 -0
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/code_loader/contract/exceptions.py +0 -0
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/code_loader/contract/mapping.py +0 -0
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/code_loader/contract/responsedataclasses.py +0 -0
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/code_loader/contract/visualizer_classes.py +0 -0
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/code_loader/default_losses.py +0 -0
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/code_loader/default_metrics.py +0 -0
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/code_loader/experiment_api/__init__.py +0 -0
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/code_loader/experiment_api/api.py +0 -0
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/code_loader/experiment_api/cli_config_utils.py +0 -0
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/code_loader/experiment_api/client.py +0 -0
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/code_loader/experiment_api/epoch.py +0 -0
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/code_loader/experiment_api/experiment.py +0 -0
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/code_loader/experiment_api/experiment_context.py +0 -0
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/code_loader/experiment_api/types.py +0 -0
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/code_loader/experiment_api/utils.py +0 -0
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/code_loader/experiment_api/workingspace_config_utils.py +0 -0
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/code_loader/inner_leap_binder/__init__.py +0 -0
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/code_loader/inner_leap_binder/leapbinder.py +0 -0
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/code_loader/leaploader.py +0 -0
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/code_loader/leaploaderbase.py +0 -0
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/code_loader/mixpanel_tracker.py +0 -0
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/code_loader/plot_functions/__init__.py +0 -0
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/code_loader/plot_functions/plot_functions.py +0 -0
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/code_loader/plot_functions/visualize.py +0 -0
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/code_loader/utils.py +0 -0
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/code_loader/visualizers/__init__.py +0 -0
- {code_loader-1.0.166.dev2 → code_loader-1.0.168}/code_loader/visualizers/default_visualizers.py +0 -0
|
@@ -406,12 +406,27 @@ def tensorleap_load_model(prediction_types: Optional[List[PredictionTypeHandler]
|
|
|
406
406
|
coerced = {}
|
|
407
407
|
meta = {i.name: i for i in self.model.get_inputs()}
|
|
408
408
|
|
|
409
|
-
for
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
409
|
+
unexpected = [n for n in float_arrays_inputs.keys() if n not in meta]
|
|
410
|
+
if unexpected:
|
|
411
|
+
raise ValueError(
|
|
412
|
+
f"Input name(s) {sorted(unexpected)} do not match any ONNX model input. "
|
|
413
|
+
f"Expected input names: {[i.name for i in self.model.get_inputs()]}"
|
|
414
|
+
)
|
|
415
|
+
|
|
416
|
+
missing = [n for n in meta if n not in float_arrays_inputs]
|
|
417
|
+
if missing:
|
|
418
|
+
raise KeyError(f"Missing required input(s): {sorted(missing)}")
|
|
414
419
|
|
|
420
|
+
onnx_input_order = [i.name for i in self.model.get_inputs()]
|
|
421
|
+
provided_order = list(float_arrays_inputs.keys())
|
|
422
|
+
if provided_order != onnx_input_order:
|
|
423
|
+
raise ValueError(
|
|
424
|
+
f"Input order mismatch. Provided: {provided_order}, "
|
|
425
|
+
f"expected ONNX order: {onnx_input_order}. "
|
|
426
|
+
f"Reorder your input functions to match the ONNX model's input order."
|
|
427
|
+
)
|
|
428
|
+
|
|
429
|
+
for name, arr in float_arrays_inputs.items():
|
|
415
430
|
info = meta[name]
|
|
416
431
|
onnx_type = info.type
|
|
417
432
|
want_dtype = ONNX_TYPE_TO_NP.get(onnx_type)
|
|
@@ -419,17 +434,11 @@ def tensorleap_load_model(prediction_types: Optional[List[PredictionTypeHandler]
|
|
|
419
434
|
if want_dtype is None:
|
|
420
435
|
raise TypeError(f"Unsupported ONNX input type: {onnx_type}")
|
|
421
436
|
|
|
422
|
-
# Cast dtype if needed
|
|
423
437
|
if arr.dtype != want_dtype:
|
|
424
438
|
arr = arr.astype(want_dtype, copy=False)
|
|
425
439
|
|
|
426
440
|
coerced[name] = arr
|
|
427
441
|
|
|
428
|
-
# Verify required inputs are present
|
|
429
|
-
missing = [n for n in meta if n not in coerced]
|
|
430
|
-
if missing:
|
|
431
|
-
raise KeyError(f"Missing required input(s): {sorted(missing)}")
|
|
432
|
-
|
|
433
442
|
return coerced
|
|
434
443
|
|
|
435
444
|
# onnx runtime interface
|
|
@@ -1067,10 +1076,16 @@ def tensorleap_preprocess():
|
|
|
1067
1076
|
else f"{user_function.__name__}() validation failed: expected to return a single list[{PreprocessResponse.__name__}] object, "
|
|
1068
1077
|
f"but returned {len(result)} objects instead."
|
|
1069
1078
|
)
|
|
1079
|
+
assert len(result) >= 2, \
|
|
1080
|
+
(f'{user_function.__name__}() validation failed: '
|
|
1081
|
+
f'Expected at least 2 PreprocessResponse objects (training and validation), but got {len(result)}.')
|
|
1070
1082
|
for i, response in enumerate(result):
|
|
1071
1083
|
assert isinstance(response, PreprocessResponse), \
|
|
1072
1084
|
(f'{user_function.__name__}() validation failed: '
|
|
1073
1085
|
f'Element #{i} in the return list should be a PreprocessResponse. Got {type(response)}.')
|
|
1086
|
+
assert len(response) > 0, \
|
|
1087
|
+
(f'{user_function.__name__}() validation failed: '
|
|
1088
|
+
f'PreprocessResponse #{i} has length 0. Each PreprocessResponse must have at least one sample.')
|
|
1074
1089
|
assert len(set(result)) == len(result), \
|
|
1075
1090
|
(f'{user_function.__name__}() validation failed: '
|
|
1076
1091
|
f'The return list should not contain duplicate PreprocessResponse objects.')
|
|
@@ -1389,11 +1404,7 @@ def tensorleap_input_encoder(name: str, channel_dim=_UNSET, model_input_index=No
|
|
|
1389
1404
|
|
|
1390
1405
|
def mapping_inner(*args, **kwargs):
|
|
1391
1406
|
class TempMapping:
|
|
1392
|
-
|
|
1393
|
-
return self
|
|
1394
|
-
|
|
1395
|
-
def __iter__(self):
|
|
1396
|
-
return iter([])
|
|
1407
|
+
pass
|
|
1397
1408
|
|
|
1398
1409
|
ret = TempMapping()
|
|
1399
1410
|
ret.node_mapping = mapping_inner.node_mapping
|
|
@@ -1643,8 +1654,8 @@ def tensorleap_status_table():
|
|
|
1643
1654
|
code_mapping_failure = [0]
|
|
1644
1655
|
|
|
1645
1656
|
table = [
|
|
1646
|
-
{"name": "tensorleap_preprocess", "Added to integration": UNKNOWN},
|
|
1647
1657
|
{"name": "tensorleap_integration_test", "Added to integration": UNKNOWN},
|
|
1658
|
+
{"name": "tensorleap_preprocess", "Added to integration": UNKNOWN},
|
|
1648
1659
|
{"name": "tensorleap_input_encoder", "Added to integration": UNKNOWN},
|
|
1649
1660
|
{"name": "tensorleap_gt_encoder", "Added to integration": UNKNOWN},
|
|
1650
1661
|
{"name": "tensorleap_load_model", "Added to integration": UNKNOWN},
|
|
@@ -1728,12 +1739,8 @@ def tensorleap_status_table():
|
|
|
1728
1739
|
mandatory_ready_mess = "\nAll mandatory parts have been successfully set. If no errors accured, you can now push the project to the Tensorleap system or continue to the next optional reccomeded interface,adding: "
|
|
1729
1740
|
code_mapping_failure_mes = "Tensorleap_integration_test code flow failed, check raised exception."
|
|
1730
1741
|
|
|
1731
|
-
|
|
1732
|
-
|
|
1733
|
-
sorted_table = sorted(table, key=lambda row: status_order.get(row["Added to integration"], 3))
|
|
1734
|
-
|
|
1735
|
-
name_width = max(len(row["name"]) for row in sorted_table)
|
|
1736
|
-
status_width = max(len(row["Added to integration"]) for row in sorted_table)
|
|
1742
|
+
name_width = max(len(row["name"]) for row in table)
|
|
1743
|
+
status_width = max(len(row["Added to integration"]) for row in table)
|
|
1737
1744
|
|
|
1738
1745
|
header = f"{'Decorator Name'.ljust(name_width)} | {'Added to integration'.ljust(status_width)}"
|
|
1739
1746
|
sep = "-" * len(header)
|
|
@@ -1741,7 +1748,7 @@ def tensorleap_status_table():
|
|
|
1741
1748
|
print("\n" + header)
|
|
1742
1749
|
print(sep)
|
|
1743
1750
|
|
|
1744
|
-
for row in
|
|
1751
|
+
for row in table:
|
|
1745
1752
|
print(f"{row['name'].ljust(name_width)} | {row['Added to integration'].ljust(status_width)}")
|
|
1746
1753
|
|
|
1747
1754
|
# Determine next_step based on original table order (recommended integration order)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "code-loader"
|
|
3
|
-
version = "1.0.
|
|
3
|
+
version = "1.0.168"
|
|
4
4
|
description = ""
|
|
5
5
|
authors = ["dorhar <doron.harnoy@tensorleap.ai>"]
|
|
6
6
|
license = "MIT"
|
|
@@ -28,6 +28,8 @@ grappa = "^1.0.1"
|
|
|
28
28
|
pytest-cov = "^3.0.0"
|
|
29
29
|
pytest-watch = "^4.2.0"
|
|
30
30
|
mypy = "1.3.0"
|
|
31
|
+
onnxruntime = {version = ">=1.0.0", python = ">=3.10"}
|
|
32
|
+
onnx = {version = ">=1.0.0", python = ">=3.10"}
|
|
31
33
|
|
|
32
34
|
[build-system]
|
|
33
35
|
requires = ["poetry-core>=1.0.0"]
|
|
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.166.dev2 → code_loader-1.0.168}/code_loader/contract/responsedataclasses.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_loader-1.0.166.dev2 → code_loader-1.0.168}/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.166.dev2 → code_loader-1.0.168}/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.166.dev2 → code_loader-1.0.168}/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.166.dev2 → code_loader-1.0.168}/code_loader/plot_functions/plot_functions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_loader-1.0.166.dev2 → code_loader-1.0.168}/code_loader/visualizers/default_visualizers.py
RENAMED
|
File without changes
|