leap-model-parser 0.1.256.dev3__tar.gz → 0.1.257__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 (23) hide show
  1. {leap_model_parser-0.1.256.dev3 → leap_model_parser-0.1.257}/PKG-INFO +2 -2
  2. {leap_model_parser-0.1.256.dev3 → leap_model_parser-0.1.257}/leap_model_parser/leap_graph_editor.py +37 -1
  3. {leap_model_parser-0.1.256.dev3 → leap_model_parser-0.1.257}/pyproject.toml +2 -2
  4. {leap_model_parser-0.1.256.dev3 → leap_model_parser-0.1.257}/LICENSE +0 -0
  5. {leap_model_parser-0.1.256.dev3 → leap_model_parser-0.1.257}/README.md +0 -0
  6. {leap_model_parser-0.1.256.dev3 → leap_model_parser-0.1.257}/leap_model_parser/__init__.py +0 -0
  7. {leap_model_parser-0.1.256.dev3 → leap_model_parser-0.1.257}/leap_model_parser/contract/__init__.py +0 -0
  8. {leap_model_parser-0.1.256.dev3 → leap_model_parser-0.1.257}/leap_model_parser/contract/graph.py +0 -0
  9. {leap_model_parser-0.1.256.dev3 → leap_model_parser-0.1.257}/leap_model_parser/contract/importmodelresponse.py +0 -0
  10. {leap_model_parser-0.1.256.dev3 → leap_model_parser-0.1.257}/leap_model_parser/contract/nodedata.py +0 -0
  11. {leap_model_parser-0.1.256.dev3 → leap_model_parser-0.1.257}/leap_model_parser/contract/ui_components.json +0 -0
  12. {leap_model_parser-0.1.256.dev3 → leap_model_parser-0.1.257}/leap_model_parser/keras_json_model_import.py +0 -0
  13. {leap_model_parser-0.1.256.dev3 → leap_model_parser-0.1.257}/leap_model_parser/model_parser.py +0 -0
  14. {leap_model_parser-0.1.256.dev3 → leap_model_parser-0.1.257}/leap_model_parser/utils/__init__.py +0 -0
  15. {leap_model_parser-0.1.256.dev3 → leap_model_parser-0.1.257}/leap_model_parser/utils/layerpedia/__init__.py +0 -0
  16. {leap_model_parser-0.1.256.dev3 → leap_model_parser-0.1.257}/leap_model_parser/utils/layerpedia/layerpedia.py +0 -0
  17. {leap_model_parser-0.1.256.dev3 → leap_model_parser-0.1.257}/leap_model_parser/utils/tlinspection/__init__.py +0 -0
  18. {leap_model_parser-0.1.256.dev3 → leap_model_parser-0.1.257}/leap_model_parser/utils/tlinspection/leapinspection.py +0 -0
  19. {leap_model_parser-0.1.256.dev3 → leap_model_parser-0.1.257}/leap_model_parser/utils/uicomponents/__init__.py +0 -0
  20. {leap_model_parser-0.1.256.dev3 → leap_model_parser-0.1.257}/leap_model_parser/utils/uicomponents/generatenodedata.py +0 -0
  21. {leap_model_parser-0.1.256.dev3 → leap_model_parser-0.1.257}/leap_model_parser/utils/uicomponents/tensorflowinscpection.py +0 -0
  22. {leap_model_parser-0.1.256.dev3 → leap_model_parser-0.1.257}/leap_model_parser/utils/uicomponents/ui_components.json +0 -0
  23. {leap_model_parser-0.1.256.dev3 → leap_model_parser-0.1.257}/leap_model_parser/utils/uicomponents/ui_components_config.yaml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: leap-model-parser
3
- Version: 0.1.256.dev3
3
+ Version: 0.1.257
4
4
  Summary:
5
5
  Home-page: https://github.com/tensorleap/leap-model-parser
6
6
  License: MIT
@@ -17,7 +17,7 @@ Requires-Dist: keras-data-format-converter (==0.1.24)
17
17
  Requires-Dist: leap-model-rebuilder (==0.1.7)
18
18
  Requires-Dist: numpy (>=1.22.3,<2.0.0)
19
19
  Requires-Dist: onnx (==1.13.0)
20
- Requires-Dist: onnx2kerastl (==0.0.198.dev3)
20
+ Requires-Dist: onnx2kerastl (==0.0.198)
21
21
  Requires-Dist: tensorflow (==2.12.0) ; platform_machine == "x86_64"
22
22
  Requires-Dist: tensorflow-io-gcs-filesystem (==0.34.0)
23
23
  Requires-Dist: tensorflow-macos (==2.12.0) ; platform_machine == "arm64"
@@ -1,3 +1,4 @@
1
+ import logging
1
2
  from enum import Enum
2
3
  from typing import Optional, Dict, Any, List
3
4
 
@@ -55,8 +56,16 @@ class LeapGraphEditor:
55
56
  for input_name, node in node_connection.node_inputs.items():
56
57
  input_node_id = self._find_or_add_input_node(node)
57
58
  self._add_connection_to_node(new_loss_node_id, input_name, input_node_id)
59
+ elif node_connection.node.type.value == 'CustomLatentSpace':
60
+ new_latent_space_node_id = self._add_latent_space_node(
61
+ node_connection.node.name,
62
+ node_connection.node.user_unique_name, node_connection.node.arg_names)
63
+ for input_name, node in node_connection.node_inputs.items():
64
+ input_node_id = self._find_or_add_input_node(node)
65
+ self._add_connection_to_node(new_latent_space_node_id, input_name, input_node_id)
58
66
  else:
59
- raise Exception(f"Can't add node of type {node_connection.node.type.name}")
67
+ # Deliberately warn instead of raising, so connection types added by newer code-loaders don't fail the import
68
+ logging.warning(f"Skipping connection of unsupported node type {node_connection.node.type.name}")
60
69
 
61
70
  def model_graph_dict(self) -> Dict[str, Any]:
62
71
  json_model_graph = {}
@@ -81,6 +90,7 @@ class LeapGraphEditor:
81
90
  return None
82
91
 
83
92
  def _replace_prediction_node_name_with_correct_name(self, connections: List[NodeConnection]) -> List[NodeConnection]:
93
+ index_by_resolved_name: Dict[str, int] = {}
84
94
  for connection in connections:
85
95
  if connection.node_inputs is None:
86
96
  continue
@@ -88,6 +98,15 @@ class LeapGraphEditor:
88
98
  if 'Prediction' in input_node.type.value:
89
99
  prediction_index = int(input_node.type.value.replace('Prediction', ''))
90
100
  origin_name = self.keras_model.outputs[prediction_index].node.layer.name
101
+ known_index = index_by_resolved_name.setdefault(origin_name, prediction_index)
102
+ # The same tensor returned twice binds correctly; two tensors of one layer
103
+ # (a shared layer, a multi-output op) cannot be told apart by layer name.
104
+ if (self.keras_model.outputs[known_index] is not
105
+ self.keras_model.outputs[prediction_index]):
106
+ raise Exception(
107
+ f"Prediction{known_index} and Prediction{prediction_index} both resolve to "
108
+ f"layer '{origin_name}', so their bindings are ambiguous; give the model "
109
+ f"outputs distinct layers")
91
110
  input_node.name = origin_name
92
111
 
93
112
  return connections
@@ -176,6 +195,23 @@ class LeapGraphEditor:
176
195
  self.model_graph[new_node_id] = metric_node
177
196
  return new_node_id
178
197
 
198
+ def _add_latent_space_node(self, latent_space_name: str,
199
+ user_unique_name: str, arg_names: List[str]) -> str:
200
+ new_node_id = self._generate_new_node_id()
201
+
202
+ latent_space_node = Node(
203
+ new_node_id,
204
+ 'CustomLatentSpace',
205
+ position=[0, 0],
206
+ data={'latent_space_name': latent_space_name, 'type': 'CustomLatentSpace',
207
+ 'name': latent_space_name,
208
+ 'arg_names': arg_names, "user_unique_name": user_unique_name},
209
+ inputs={},
210
+ outputs={})
211
+
212
+ self.model_graph[new_node_id] = latent_space_node
213
+ return new_node_id
214
+
179
215
  def _add_loss_node(self, loss_name: str, user_unique_name:str, is_custom_loss: bool, arg_names: Optional[List[str]]=None) -> str:
180
216
  new_node_id = self._generate_new_node_id()
181
217
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "leap-model-parser"
3
- version = "0.1.256.dev3"
3
+ version = "0.1.257"
4
4
  description = ""
5
5
  authors = ["idan <idan.yogev@tensorleap.ai>"]
6
6
  license = "MIT"
@@ -18,7 +18,7 @@ tensorflow = {version = "2.12.0", markers = "platform_machine == 'x86_64'"}
18
18
  tensorflow-macos = {version = "2.12.0", markers = "platform_machine == 'arm64'"}
19
19
  numpy = "^1.22.3"
20
20
  onnx = "1.13.0"
21
- onnx2kerastl = "0.0.198.dev3"
21
+ onnx2kerastl = "0.0.198"
22
22
  keras-data-format-converter = "0.1.24"
23
23
  leap-model-rebuilder = "0.1.7"
24
24
  tensorflow-io-gcs-filesystem = "0.34.0"