code-loader 1.0.92.dev5__tar.gz → 1.0.93.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.

Potentially problematic release.


This version of code-loader might be problematic. Click here for more details.

Files changed (32) hide show
  1. {code_loader-1.0.92.dev5 → code_loader-1.0.93.dev2}/PKG-INFO +3 -3
  2. {code_loader-1.0.92.dev5 → code_loader-1.0.93.dev2}/code_loader/contract/visualizer_classes.py +2 -6
  3. {code_loader-1.0.92.dev5 → code_loader-1.0.93.dev2}/code_loader/inner_leap_binder/leapbinder_decorators.py +152 -14
  4. {code_loader-1.0.92.dev5 → code_loader-1.0.93.dev2}/pyproject.toml +1 -1
  5. {code_loader-1.0.92.dev5 → code_loader-1.0.93.dev2}/LICENSE +0 -0
  6. {code_loader-1.0.92.dev5 → code_loader-1.0.93.dev2}/README.md +0 -0
  7. {code_loader-1.0.92.dev5 → code_loader-1.0.93.dev2}/code_loader/__init__.py +0 -0
  8. {code_loader-1.0.92.dev5 → code_loader-1.0.93.dev2}/code_loader/contract/__init__.py +0 -0
  9. {code_loader-1.0.92.dev5 → code_loader-1.0.93.dev2}/code_loader/contract/datasetclasses.py +0 -0
  10. {code_loader-1.0.92.dev5 → code_loader-1.0.93.dev2}/code_loader/contract/enums.py +0 -0
  11. {code_loader-1.0.92.dev5 → code_loader-1.0.93.dev2}/code_loader/contract/exceptions.py +0 -0
  12. {code_loader-1.0.92.dev5 → code_loader-1.0.93.dev2}/code_loader/contract/mapping.py +0 -0
  13. {code_loader-1.0.92.dev5 → code_loader-1.0.93.dev2}/code_loader/contract/responsedataclasses.py +0 -0
  14. {code_loader-1.0.92.dev5 → code_loader-1.0.93.dev2}/code_loader/default_losses.py +0 -0
  15. {code_loader-1.0.92.dev5 → code_loader-1.0.93.dev2}/code_loader/default_metrics.py +0 -0
  16. {code_loader-1.0.92.dev5 → code_loader-1.0.93.dev2}/code_loader/experiment_api/__init__.py +0 -0
  17. {code_loader-1.0.92.dev5 → code_loader-1.0.93.dev2}/code_loader/experiment_api/api.py +0 -0
  18. {code_loader-1.0.92.dev5 → code_loader-1.0.93.dev2}/code_loader/experiment_api/cli_config_utils.py +0 -0
  19. {code_loader-1.0.92.dev5 → code_loader-1.0.93.dev2}/code_loader/experiment_api/client.py +0 -0
  20. {code_loader-1.0.92.dev5 → code_loader-1.0.93.dev2}/code_loader/experiment_api/epoch.py +0 -0
  21. {code_loader-1.0.92.dev5 → code_loader-1.0.93.dev2}/code_loader/experiment_api/experiment.py +0 -0
  22. {code_loader-1.0.92.dev5 → code_loader-1.0.93.dev2}/code_loader/experiment_api/experiment_context.py +0 -0
  23. {code_loader-1.0.92.dev5 → code_loader-1.0.93.dev2}/code_loader/experiment_api/types.py +0 -0
  24. {code_loader-1.0.92.dev5 → code_loader-1.0.93.dev2}/code_loader/experiment_api/utils.py +0 -0
  25. {code_loader-1.0.92.dev5 → code_loader-1.0.93.dev2}/code_loader/experiment_api/workingspace_config_utils.py +0 -0
  26. {code_loader-1.0.92.dev5 → code_loader-1.0.93.dev2}/code_loader/inner_leap_binder/__init__.py +0 -0
  27. {code_loader-1.0.92.dev5 → code_loader-1.0.93.dev2}/code_loader/inner_leap_binder/leapbinder.py +0 -0
  28. {code_loader-1.0.92.dev5 → code_loader-1.0.93.dev2}/code_loader/leaploader.py +0 -0
  29. {code_loader-1.0.92.dev5 → code_loader-1.0.93.dev2}/code_loader/leaploaderbase.py +0 -0
  30. {code_loader-1.0.92.dev5 → code_loader-1.0.93.dev2}/code_loader/utils.py +0 -0
  31. {code_loader-1.0.92.dev5 → code_loader-1.0.93.dev2}/code_loader/visualizers/__init__.py +0 -0
  32. {code_loader-1.0.92.dev5 → code_loader-1.0.93.dev2}/code_loader/visualizers/default_visualizers.py +0 -0
@@ -1,7 +1,8 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.1
2
2
  Name: code-loader
3
- Version: 1.0.92.dev5
3
+ Version: 1.0.93.dev2
4
4
  Summary:
5
+ Home-page: https://github.com/tensorleap/code-loader
5
6
  License: MIT
6
7
  Author: dorhar
7
8
  Author-email: doron.harnoy@tensorleap.ai
@@ -16,7 +17,6 @@ Requires-Dist: numpy (>=1.22.3,<2.0.0)
16
17
  Requires-Dist: psutil (>=5.9.5,<6.0.0)
17
18
  Requires-Dist: pyyaml (>=6.0.2,<7.0.0)
18
19
  Requires-Dist: requests (>=2.32.3,<3.0.0)
19
- Project-URL: Homepage, https://github.com/tensorleap/code-loader
20
20
  Project-URL: Repository, https://github.com/tensorleap/code-loader
21
21
  Description-Content-Type: text/markdown
22
22
 
@@ -121,23 +121,19 @@ class LeapGraph:
121
121
  x_label = 'Frequency [Seconds]'
122
122
  y_label = 'Amplitude [Voltage]'
123
123
  x_range = (0.1, 3.0)
124
- legend = ['experiment1', 'experiment2', 'experiment3']
125
- leap_graph = LeapGraph(data=graph_data, x_label=x_label, y_label=y_label, x_range=x_range, legend=legend)
124
+ leap_graph = LeapGraph(data=graph_data, x_label=x_label, y_label=y_label, x_range=x_range)
126
125
  """
127
126
  data: npt.NDArray[np.float32]
128
127
  type: LeapDataType = LeapDataType.Graph
129
128
  x_label: Optional[str] = None
130
129
  y_label: Optional[str] = None
131
130
  x_range: Optional[Tuple[float,float]] = None
132
- legend: Optional[List[str]] = None
133
131
 
134
132
  def __post_init__(self) -> None:
135
133
  validate_type(self.type, LeapDataType.Graph)
136
134
  validate_type(type(self.data), np.ndarray)
137
135
  validate_type(self.data.dtype, np.float32)
138
- validate_type(len(self.data.shape), 2, f'Graph must be of shape 2')
139
- if self.legend:
140
- validate_type(self.data.shape[1], len(self.legend), 'Number of labels supplied should equal the number of graphs')
136
+ validate_type(len(self.data.shape), 2, 'Graph must be of shape 2')
141
137
  validate_type(type(self.x_label), [str, type(None)], 'x_label must be a string or None')
142
138
  validate_type(type(self.y_label), [str, type(None)], 'y_label must be a string or None')
143
139
  validate_type(type(self.x_range), [tuple, type(None)], 'x_range must be a tuple or None')
@@ -1,5 +1,5 @@
1
1
  # mypy: ignore-errors
2
-
2
+ import os
3
3
  from typing import Optional, Union, Callable, List, Dict
4
4
 
5
5
  import numpy as np
@@ -16,14 +16,74 @@ from code_loader.contract.visualizer_classes import LeapImage, LeapImageMask, Le
16
16
  LeapHorizontalBar, LeapImageWithBBox, LeapImageWithHeatmap
17
17
 
18
18
 
19
+ mapping_runtime_mode_env_var_mame = '__mapping_runtime_mode__'
20
+
21
+
22
+ def _add_mapping_connection(user_unique_name, connection_destinations, arg_names, name, node_mapping_type):
23
+ main_node_mapping = NodeMapping(name, node_mapping_type, user_unique_name, arg_names=arg_names)
24
+ node_inputs = {}
25
+ for arg_name, destination in zip(arg_names, connection_destinations):
26
+ node_inputs[arg_name] = destination.node_mapping
27
+
28
+ leap_binder.mapping_connections.append(NodeConnection(main_node_mapping, node_inputs))
29
+
30
+
19
31
  def _add_mapping_connections(connects_to, arg_names, node_mapping_type, name):
20
32
  for user_unique_name, connection_destinations in connects_to.items():
21
- main_node_mapping = NodeMapping(name, node_mapping_type, user_unique_name, arg_names=arg_names)
22
- node_inputs = {}
23
- for arg_name, destination in zip(arg_names, connection_destinations):
24
- node_inputs[arg_name] = destination.node_mapping
33
+ _add_mapping_connection(user_unique_name, connection_destinations, arg_names, name, node_mapping_type)
34
+
35
+
36
+
37
+
38
+ def tensorleap_load_model():
39
+ def decorating_function(load_model_func):
40
+ class TempMapping:
41
+ pass
42
+
43
+ def mapping_inner():
44
+ class ModelOutputPlaceholder:
45
+ def __init__(self):
46
+ self.node_mapping = NodeMapping('', NodeMappingType.Prediction0)
47
+
48
+ def __getitem__(self, key):
49
+ assert isinstance(key, int), \
50
+ f'Expected key to be an int, got {type(key)} instead.'
51
+
52
+ ret = TempMapping()
53
+ ret.node_mapping = NodeMapping('', NodeMappingType(f'Prediction{str(key)}'))
54
+ return ret
55
+
56
+ class ModelPlaceholder:
57
+ #keras interface
58
+ def __call__(self, arg):
59
+ if isinstance(arg, list):
60
+ for i, elem in enumerate(arg):
61
+ elem.node_mapping.type = NodeMappingType[f'Input{str(i)}']
62
+ else:
63
+ arg.node_mapping.type = NodeMappingType.Input0
64
+
65
+ return ModelOutputPlaceholder()
66
+
67
+ # onnx runtime interface
68
+ def run(self, output_names, input_dict):
69
+ assert output_names is None
70
+ assert isinstance(input_dict, dict), \
71
+ f'Expected input_dict to be a dict, got {type(input_dict)} instead.'
72
+ for i, elem in enumerate(input_dict.values()):
73
+ elem.node_mapping.type = NodeMappingType[f'Input{str(i)}']
74
+
75
+ return ModelOutputPlaceholder()
76
+
77
+ return ModelPlaceholder()
78
+
79
+
80
+ if os.environ[mapping_runtime_mode_env_var_mame]:
81
+ return mapping_inner
82
+ else:
83
+ return load_model_func
84
+
85
+ return decorating_function
25
86
 
26
- leap_binder.mapping_connections.append(NodeConnection(main_node_mapping, node_inputs))
27
87
 
28
88
 
29
89
  def tensorleap_custom_metric(name: str,
@@ -31,8 +91,8 @@ def tensorleap_custom_metric(name: str,
31
91
  compute_insights: Optional[Union[bool, Dict[str, bool]]] = None,
32
92
  connects_to=None):
33
93
  def decorating_function(user_function: Union[CustomCallableInterfaceMultiArgs,
34
- CustomMultipleReturnCallableInterfaceMultiArgs,
35
- ConfusionMatrixCallableInterfaceMultiArgs]):
94
+ CustomMultipleReturnCallableInterfaceMultiArgs,
95
+ ConfusionMatrixCallableInterfaceMultiArgs]):
36
96
  for metric_handler in leap_binder.setup_container.metrics:
37
97
  if metric_handler.metric_handler_data.name == name:
38
98
  raise Exception(f'Metric with name {name} already exists. '
@@ -119,14 +179,31 @@ def tensorleap_custom_metric(name: str,
119
179
  (f'tensorleap_custom_metric validation failed: '
120
180
  f'compute_insights should be boolean. Got {type(compute_insights)}.')
121
181
 
122
-
123
182
  def inner(*args, **kwargs):
124
183
  _validate_input_args(*args, **kwargs)
125
184
  result = user_function(*args, **kwargs)
126
185
  _validate_result(result)
127
186
  return result
128
187
 
129
- return inner
188
+ def mapping_inner(*args, **kwargs):
189
+ user_unique_name = mapping_inner.name
190
+ if 'user_unique_name' in kwargs:
191
+ user_unique_name = kwargs['user_unique_name']
192
+
193
+ ordered_connections = [kwargs[n] for n in mapping_inner.arg_names if n in kwargs]
194
+ ordered_connections = list(args) + ordered_connections
195
+ _add_mapping_connection(user_unique_name, ordered_connections, mapping_inner.arg_names,
196
+ mapping_inner.name, NodeMappingType.Metric)
197
+
198
+ return None
199
+
200
+ mapping_inner.arg_names = leap_binder.setup_container.metrics[-1].metric_handler_data.arg_names
201
+ mapping_inner.name = name
202
+
203
+ if os.environ[mapping_runtime_mode_env_var_mame]:
204
+ return mapping_inner
205
+ else:
206
+ return inner
130
207
 
131
208
  return decorating_function
132
209
 
@@ -186,7 +263,25 @@ def tensorleap_custom_visualizer(name: str, visualizer_type: LeapDataType,
186
263
  _validate_result(result)
187
264
  return result
188
265
 
189
- return inner
266
+ def mapping_inner(*args, **kwargs):
267
+ user_unique_name = mapping_inner.name
268
+ if 'user_unique_name' in kwargs:
269
+ user_unique_name = kwargs['user_unique_name']
270
+
271
+ ordered_connections = [kwargs[n] for n in mapping_inner.arg_names if n in kwargs]
272
+ ordered_connections = list(args) + ordered_connections
273
+ _add_mapping_connection(user_unique_name, ordered_connections, mapping_inner.arg_names,
274
+ mapping_inner.name, NodeMappingType.Visualizer)
275
+
276
+ return None
277
+
278
+ mapping_inner.arg_names = leap_binder.setup_container.visualizers[-1].visualizer_handler_data.arg_names
279
+ mapping_inner.name = name
280
+
281
+ if os.environ[mapping_runtime_mode_env_var_mame]:
282
+ return mapping_inner
283
+ else:
284
+ return inner
190
285
 
191
286
  return decorating_function
192
287
 
@@ -340,7 +435,21 @@ def tensorleap_input_encoder(name: str, channel_dim=-1, model_input_index=None):
340
435
  node_mapping_type = NodeMappingType(f'Input{str(model_input_index)}')
341
436
  inner.node_mapping = NodeMapping(name, node_mapping_type)
342
437
 
343
- return inner
438
+
439
+ def mapping_inner(*args, **kwargs):
440
+ class TempMapping:
441
+ pass
442
+ ret = TempMapping()
443
+ ret.node_mapping = mapping_inner.node_mapping
444
+
445
+ return ret
446
+
447
+ mapping_inner.node_mapping = NodeMapping(name, node_mapping_type)
448
+
449
+ if os.environ[mapping_runtime_mode_env_var_mame]:
450
+ return mapping_inner
451
+ else:
452
+ return inner
344
453
 
345
454
  return decorating_function
346
455
 
@@ -382,9 +491,20 @@ def tensorleap_gt_encoder(name: str):
382
491
 
383
492
  inner.node_mapping = NodeMapping(name, NodeMappingType.GroundTruth)
384
493
 
385
- return inner
494
+ def mapping_inner(*args, **kwargs):
495
+ class TempMapping:
496
+ pass
497
+ ret = TempMapping()
498
+ ret.node_mapping = mapping_inner.node_mapping
499
+
500
+ return ret
386
501
 
502
+ mapping_inner.node_mapping = NodeMapping(name, NodeMappingType.GroundTruth)
387
503
 
504
+ if os.environ[mapping_runtime_mode_env_var_mame]:
505
+ return mapping_inner
506
+ else:
507
+ return inner
388
508
 
389
509
  return decorating_function
390
510
 
@@ -440,7 +560,25 @@ def tensorleap_custom_loss(name: str, connects_to=None):
440
560
  _validate_result(result)
441
561
  return result
442
562
 
443
- return inner
563
+ def mapping_inner(*args, **kwargs):
564
+ user_unique_name = mapping_inner.name
565
+ if 'user_unique_name' in kwargs:
566
+ user_unique_name = kwargs['user_unique_name']
567
+
568
+ ordered_connections = [kwargs[n] for n in mapping_inner.arg_names if n in kwargs]
569
+ ordered_connections = list(args) + ordered_connections
570
+ _add_mapping_connection(user_unique_name, ordered_connections, mapping_inner.arg_names,
571
+ mapping_inner.name, NodeMappingType.CustomLoss)
572
+
573
+ return None
574
+
575
+ mapping_inner.arg_names = leap_binder.setup_container.custom_loss_handlers[-1].custom_loss_handler_data.arg_names
576
+ mapping_inner.name = name
577
+
578
+ if os.environ[mapping_runtime_mode_env_var_mame]:
579
+ return mapping_inner
580
+ else:
581
+ return inner
444
582
 
445
583
  return decorating_function
446
584
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "code-loader"
3
- version = "1.0.92.dev5"
3
+ version = "1.0.93.dev2"
4
4
  description = ""
5
5
  authors = ["dorhar <doron.harnoy@tensorleap.ai>"]
6
6
  license = "MIT"