class_docstr: ModelSignature specifies schema of model's inputs, outputs and params.
  
  ModelSignature can be :py:func:`inferred <mlflow.models.infer_signature>` from training
  dataset, model predictions using and params for inference, or constructed by hand by
  passing an input and output :py:class:`Schema <mlflow.types.Schema>`, and params
  :py:class:`ParamSchema <mlflow.types.ParamSchema>`.
code: def __init__(
      self,
      inputs: Schema = None,
      outputs: Schema = None,
      params: ParamSchema = None,
  ):
      if inputs and not isinstance(inputs, Schema):
          raise TypeError(
              "inputs must be either None or mlflow.models.signature.Schema, "
              f"got '{type(inputs).__name__}'"
          )
      if outputs and not isinstance(outputs, Schema):
          raise TypeError(
              "outputs must be either None or mlflow.models.signature.Schema, "
              f"got '{type(outputs).__name__}'"
          )
      if params and not isinstance(params, ParamSchema):
          raise TypeError(
              "If params are provided, they must by of type mlflow.models.signature.ParamSchema, "
              f"got '{type(params).__name__}'"
          )
      if all(x is None for x in [inputs, outputs, params]):
          raise ValueError(
              "At least one of inputs, outputs or params must be provided"
          )
      self.inputs = inputs
      self.outputs = outputs
      self.params = params
  
imports: import inspect
  import logging
  import re
  from copy import deepcopy
  from typing import TYPE_CHECKING, Any, Dict, List, Optional, Union, get_type_hints
  import numpy
  import pandas
  from mlflow import environment_variables
  from mlflow.exceptions import MlflowException
  from mlflow.models import Model
  from mlflow.models.model import MLMODEL_FILE_NAME
  from mlflow.models.utils import ModelInputExample, _contains_params, _Example
  from mlflow.protos.databricks_pb2 import INVALID_PARAMETER_VALUE, RESOURCE_DOES_NOT_EXIST
  from mlflow.store.artifact.models_artifact_repo import ModelsArtifactRepository
  from mlflow.store.artifact.runs_artifact_repo import RunsArtifactRepository
  from mlflow.tracking.artifact_utils import _download_artifact_from_uri, _upload_artifact_to_uri
  from mlflow.types.schema import ParamSchema, Schema
  from mlflow.types.utils import _infer_param_schema, _infer_schema, _infer_schema_from_type_hint
  from mlflow.utils.uri import append_to_uri_path
label_desc: Use image node_id 1 to create a new ModelSignature object  with example: obj = ModelSignature(inputs, outputs, params)