@@ -278,9 +278,11 @@ def run(
278278 outputs = self ._run_local (node , inputs , results )
279279 else :
280280 outputs = self ._run (node , inputs , results )
281- for name , value in zip (node .output , outputs ):
282- if name == "" :
283- continue
281+ node_output = [o for o in node .output if o ]
282+ assert len (node_output ) == len (
283+ outputs
284+ ), f"Length mismatch between node output={ node .output } and outputs={ outputs } "
285+ for name , value in zip (node_output , outputs ):
284286 self ._log (2 , " + %s: %s" , name , value ) # type: ignore[arg-type]
285287 assert isinstance (name , str ), f"unexpected type for name { type (name )} "
286288 results [name ] = value
@@ -384,6 +386,11 @@ def _make_model_proto(
384386 onx = shi .infer_shapes (onx )
385387 return onx
386388
389+ def _make_model_outputs (
390+ self , node : NodeProto , inputs : List [ValueInfoProto ]
391+ ) -> Tuple [List [NodeProto ], List [ValueInfoProto ]]:
392+ return [], [oh .make_value_info (o , TypeProto ()) for o in node .output if o ]
393+
387394 @classmethod
388395 def _get_hidden_inputs (self , graph : GraphProto ) -> Set [str ]:
389396 """
@@ -424,6 +431,7 @@ def _get_sess(
424431 onx = node
425432 else :
426433 assert isinstance (node , NodeProto ), f"Unexpected type { type (node )} for node"
434+ prenodes = []
427435 if node .op_type == "Constant" :
428436 # We force the type to be a boolean.
429437 ref = ExtendedReferenceEvaluator (node )
@@ -447,9 +455,9 @@ def _get_sess(
447455 vinputs .append (value )
448456
449457 # no need to run shape inference
450- voutputs = [ oh . make_value_info ( o , TypeProto ()) for o in node . output ]
458+ prenodes , voutputs = self . _make_model_outputs ( node , vinputs )
451459
452- onx = self ._make_model_proto ([node ], vinputs , voutputs )
460+ onx = self ._make_model_proto ([* prenodes , node ], vinputs , voutputs )
453461 if node .op_type in {"Shape" , "Size" }:
454462 on_cpu = True
455463
0 commit comments