in optimum/exporters/onnx/base.py [0:0]
def ordered_inputs(self, model: Union["PreTrainedModel", "TFPreTrainedModel"]) -> Dict[str, Dict[int, str]]:
"""
Re-orders the inputs using the model forward pass signature.
Args:
model ([`transformers.PreTrainedModel`] or [`transformers.TFPreTrainedModel`]):
The model for which we will use the OnnxConfig.
Returns:
`Dict[str, Dict[int, str]]`: The properly ordered inputs.
"""
inputs = self.inputs
inputs = self.rename_ambiguous_inputs(inputs)
ordered_inputs = {}
if hasattr(model, "forward"):
sig = inspect.signature(model.forward)
else:
sig = inspect.signature(model.call)
for param in sig.parameters:
param_regex = re.compile(rf"{param}(\..*)?$")
to_insert = []
for name, dynamic_axes in inputs.items():
if re.match(param_regex, name):
to_insert.append((name, dynamic_axes))
# TODO: figure out a smart way of re-ordering potential nested structures.
# to_insert = sorted(to_insert, key=lambda t: t[0])
for name, dynamic_axes in to_insert:
name = self.torch_to_onnx_input_map.get(name, name)
ordered_inputs[name] = dynamic_axes
return ordered_inputs