code: def _verify_names(sampler, var_names, arg_names):
      
      # There are 3 possible cases: emcee2, emcee3 and sampler read from h5 file (emcee3 only)
      if hasattr(sampler, "args"):
          num_vars = sampler.chain.shape[-1]
          num_args = len(sampler.args)
      elif hasattr(sampler, "log_prob_fn"):
          num_vars = sampler.get_chain().shape[-1]
          num_args = len(sampler.log_prob_fn.args)
      else:
          num_vars = sampler.get_chain().shape[-1]
          num_args = 0  # emcee only stores the posterior samples
  
      if var_names is None:
          var_names = ["var_{}".format(idx) for idx in range(num_vars)]
      if arg_names is None:
          arg_names = ["arg_{}".format(idx) for idx in range(num_args)]
  
      if len(var_names) != num_vars:
          raise ValueError(
              "The sampler has {} variables, but only {} var_names were provided!".format(
                  num_vars, len(var_names)
              )
          )
  
      if len(arg_names) != num_args:
          raise ValueError(
              "The sampler has {} args, but only {} arg_names were provided!".format(
                  num_args, len(arg_names)
              )
          )
      return var_names, arg_names
docs: Make sure var_names and arg_names are assigned reasonably.
  
      This is meant to run before loading emcee objects into InferenceData.
      In case var_names or arg_names is None, will provide defaults. If they are
      not None, it verifies there are the right number of them.
  
      Throws a ValueError in case validation fails.
  
      Parameters
      ----------
      sampler : emcee.EnsembleSampler
          Fitted emcee sampler
      var_names : list[str] or None
          Names for the emcee parameters
      arg_names : list[str] or None
          Names for the args/observations provided to emcee
  
      Returns
      -------
      list[str], list[str]
          Defaults for var_names and arg_names