def _match_user_exir_inputs(self, user_inputs: List[TensorType]) -> List[TensorType]:
        """
        check consistency between user-specified `InputType`s and EXIR inputs
        inherit missing user specifications from EXIR
        """
        if user_inputs is None or len(user_inputs) == 0:
            # user did not specify inputs, default to use EXIR inputs
            return list(self.graph.inputs.values())
        if len(user_inputs) != len(self.graph.inputs):
            raise ValueError("Inconsistent number of inputs between user and EXIR specifications")

        for user_input, (_, exir_input) in zip(user_inputs, self.graph.inputs.items()):
            # user specified shape, then check consistency with EXIR
            if user_input.shape is not None:
                if isinstance(user_input.shape, EnumeratedShapes):
                    user_shapes = [enum_shape.shape for enum_shape in user_input.shape.shapes]
                else:
                    user_shapes = [tuple(user_input.shape.to_list(allow_symbolic=True))]
                exir_shape = tuple(exir_input.shape.to_list(allow_symbolic=True))
                for user_shape in user_shapes:
                    for user_size, exir_size in zip(user_shape, exir_shape):
                        # Dynamic size can be changed (almost) arbitrarily
                        # Static size, however, is dangerous to change, since the EXIR graph
                        # is very likely to have been specialized using the static size value
                        if not is_symbolic(exir_size) and user_size != exir_size:
                            raise ValueError(
                                f"inconsistent shape between "
                                f"EXIR input {exir_input.name} shape {exir_shape} and "
                                f"user specified input {user_input.name} shape {user_shape}"
                            )
            # shape not specified, inherit from EXIR
            else:
                user_input.shape = exir_input.shape

            # inherit dtype from EXIR if not specified
            if user_input.dtype is None:
                user_input.dtype = exir_input.dtype

            # inherit name from EXIR if not specified
            if user_input.name is None:
                user_input.name = exir_input.name

        return user_inputs

        check consistency between user-specified `InputType`s and EXIR inputs
        inherit missing user specifications from EXIR
        
coremltools/converters/mil/frontend/torch/converter.py