leap-model-parser 0.1.257.dev2__tar.gz → 0.1.258__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.257.dev2 → leap_model_parser-0.1.258}/PKG-INFO +1 -1
  2. {leap_model_parser-0.1.257.dev2 → leap_model_parser-0.1.258}/leap_model_parser/leap_graph_editor.py +17 -0
  3. {leap_model_parser-0.1.257.dev2 → leap_model_parser-0.1.258}/pyproject.toml +1 -1
  4. {leap_model_parser-0.1.257.dev2 → leap_model_parser-0.1.258}/LICENSE +0 -0
  5. {leap_model_parser-0.1.257.dev2 → leap_model_parser-0.1.258}/README.md +0 -0
  6. {leap_model_parser-0.1.257.dev2 → leap_model_parser-0.1.258}/leap_model_parser/__init__.py +0 -0
  7. {leap_model_parser-0.1.257.dev2 → leap_model_parser-0.1.258}/leap_model_parser/contract/__init__.py +0 -0
  8. {leap_model_parser-0.1.257.dev2 → leap_model_parser-0.1.258}/leap_model_parser/contract/graph.py +0 -0
  9. {leap_model_parser-0.1.257.dev2 → leap_model_parser-0.1.258}/leap_model_parser/contract/importmodelresponse.py +0 -0
  10. {leap_model_parser-0.1.257.dev2 → leap_model_parser-0.1.258}/leap_model_parser/contract/nodedata.py +0 -0
  11. {leap_model_parser-0.1.257.dev2 → leap_model_parser-0.1.258}/leap_model_parser/contract/ui_components.json +0 -0
  12. {leap_model_parser-0.1.257.dev2 → leap_model_parser-0.1.258}/leap_model_parser/keras_json_model_import.py +0 -0
  13. {leap_model_parser-0.1.257.dev2 → leap_model_parser-0.1.258}/leap_model_parser/model_parser.py +0 -0
  14. {leap_model_parser-0.1.257.dev2 → leap_model_parser-0.1.258}/leap_model_parser/utils/__init__.py +0 -0
  15. {leap_model_parser-0.1.257.dev2 → leap_model_parser-0.1.258}/leap_model_parser/utils/layerpedia/__init__.py +0 -0
  16. {leap_model_parser-0.1.257.dev2 → leap_model_parser-0.1.258}/leap_model_parser/utils/layerpedia/layerpedia.py +0 -0
  17. {leap_model_parser-0.1.257.dev2 → leap_model_parser-0.1.258}/leap_model_parser/utils/tlinspection/__init__.py +0 -0
  18. {leap_model_parser-0.1.257.dev2 → leap_model_parser-0.1.258}/leap_model_parser/utils/tlinspection/leapinspection.py +0 -0
  19. {leap_model_parser-0.1.257.dev2 → leap_model_parser-0.1.258}/leap_model_parser/utils/uicomponents/__init__.py +0 -0
  20. {leap_model_parser-0.1.257.dev2 → leap_model_parser-0.1.258}/leap_model_parser/utils/uicomponents/generatenodedata.py +0 -0
  21. {leap_model_parser-0.1.257.dev2 → leap_model_parser-0.1.258}/leap_model_parser/utils/uicomponents/tensorflowinscpection.py +0 -0
  22. {leap_model_parser-0.1.257.dev2 → leap_model_parser-0.1.258}/leap_model_parser/utils/uicomponents/ui_components.json +0 -0
  23. {leap_model_parser-0.1.257.dev2 → leap_model_parser-0.1.258}/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.257.dev2
3
+ Version: 0.1.258
4
4
  Summary:
5
5
  Home-page: https://github.com/tensorleap/leap-model-parser
6
6
  License: MIT
@@ -64,6 +64,7 @@ class LeapGraphEditor:
64
64
  input_node_id = self._find_or_add_input_node(node)
65
65
  self._add_connection_to_node(new_latent_space_node_id, input_name, input_node_id)
66
66
  else:
67
+ # Deliberately warn instead of raising, so connection types added by newer code-loaders don't fail the import
67
68
  logging.warning(f"Skipping connection of unsupported node type {node_connection.node.type.name}")
68
69
 
69
70
  def model_graph_dict(self) -> Dict[str, Any]:
@@ -88,6 +89,16 @@ class LeapGraphEditor:
88
89
  return node
89
90
  return None
90
91
 
92
+ @staticmethod
93
+ def _expected_output_count(connections: List[NodeConnection]) -> int:
94
+ # The integration test refers to model outputs as Prediction0, Prediction1, ...; it expects
95
+ # at least as many outputs as its highest index + 1.
96
+ indices = [int(input_node.type.value.replace('Prediction', ''))
97
+ for connection in connections if connection.node_inputs is not None
98
+ for input_node in connection.node_inputs.values()
99
+ if 'Prediction' in input_node.type.value]
100
+ return max(indices) + 1 if indices else 0
101
+
91
102
  def _replace_prediction_node_name_with_correct_name(self, connections: List[NodeConnection]) -> List[NodeConnection]:
92
103
  index_by_resolved_name: Dict[str, int] = {}
93
104
  for connection in connections:
@@ -96,6 +107,12 @@ class LeapGraphEditor:
96
107
  for input_name, input_node in connection.node_inputs.items():
97
108
  if 'Prediction' in input_node.type.value:
98
109
  prediction_index = int(input_node.type.value.replace('Prediction', ''))
110
+ n_outputs = len(self.keras_model.outputs)
111
+ if prediction_index >= n_outputs:
112
+ expected = self._expected_output_count(connections)
113
+ raise Exception(
114
+ f"The model has {n_outputs} output{'' if n_outputs == 1 else 's'}, "
115
+ f"the integration expects {expected}.")
99
116
  origin_name = self.keras_model.outputs[prediction_index].node.layer.name
100
117
  known_index = index_by_resolved_name.setdefault(origin_name, prediction_index)
101
118
  # The same tensor returned twice binds correctly; two tensors of one layer
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "leap-model-parser"
3
- version = "0.1.257.dev2"
3
+ version = "0.1.258"
4
4
  description = ""
5
5
  authors = ["idan <idan.yogev@tensorleap.ai>"]
6
6
  license = "MIT"