code: def get_info_on_inputs(named_inputs, n_unnamed_inputs):
      """
      Return a human-readable description of named and un-named inputs.
  
      """
      n_named_inputs = len(named_inputs)
  
      def get_plural(n):
          if n > 1:
              return "s"
          else:
              return ""
  
      if n_named_inputs == 0:
          if n_unnamed_inputs == 0:
              msg = "The function is supposed to have no input."
          else:
              if n_unnamed_inputs == 1:
                  msg = (
                      "The function has a single input variable which has no "
                      "name, and thus cannot be assigned through a keyword"
                      " argument (use 'name=...' in a Variable's "
                      "constructor to give it a name)."
                  )
              else:
                  # Use plural.
                  msg = (
                      f"The function has {n_unnamed_inputs} inputs, but none of them is named,"
                      " and thus they cannot be assigned through keyword "
                      "arguments (use 'name=...' in a Variable's "
                      "constructor to give it a name)."
                  )
      else:
          if n_unnamed_inputs == 0:
              msg = "The function has {} named input{} ({}).".format(
                  n_named_inputs,
                  get_plural(n_named_inputs),
                  ", ".join(named_inputs),
              )
          else:
              msg = (
                  f"The function has {n_named_inputs} named input{get_plural(n_named_inputs)} ({', '.join(named_inputs)}), and {n_unnamed_inputs} unnamed "
                  f"input{get_plural(n_unnamed_inputs)} which thus cannot be accessed through keyword "
                  f"argument{get_plural(n_unnamed_inputs)} (use 'name=...' in a variable's constructor "
                  "to give it a name)."
              )
      return msg
  
imports: import copy
  import copyreg
  import logging
  import time
  import warnings
  from itertools import chain
  from typing import TYPE_CHECKING, Optional
  import numpy
  import pytensor
  import pytensor.compile.profiling
  from pytensor.compile.io import In, SymbolicInput, SymbolicOutput
  from pytensor.compile.ops import deep_copy_op, view_op
  from pytensor.configdefaults import config
  from pytensor.graph.basic import Constant, Variable, ancestors, clone_get_equiv, graph_inputs
  from pytensor.graph.destroyhandler import DestroyHandler
  from pytensor.graph.features import AlreadyThere, Feature, PreserveVariableAttributes
  from pytensor.graph.fg import FunctionGraph
  from pytensor.graph.op import HasInnerGraph
  from pytensor.graph.utils import InconsistencyError, get_variable_trace_string
  from pytensor.link.basic import Container
  from pytensor.link.utils import raise_with_op
label_desc: Use image node_id 11 for calling a global function with example usage: get_info_on_inputs(named_inputs, n_unnamed_inputs) and returns: msg, str, str