code: def io_iterator_(
      frame, fnc, output_strategy="absolute", mix_names=False
  ):
      """Create an IOIterator using introspection.
  
      Parameters
      ----------
      frame : frameobject
          Contains the info about the current local variables values.
      fnc : function
          The function to inspect
      output_strategy : string
          Controls the behavior of the IOIterator for output paths.
      mix_names : bool
          Whether or not to append a mix of input names at the beginning.
  
      Returns
      -------
          Properly instantiated IOIterator object.
  
      """
      args, _, _, values = inspect.getargvalues(frame)
      args.remove("self")
      del values["self"]
  
      spargs, defaults = get_args_default(fnc)
  
      len_args = len(spargs)
      len_defaults = len(defaults)
      split_at = len_args - len_defaults
  
      inputs = []
      outputs = []
      out_dir = ""
  
      # inputs
      for arv in args[:split_at]:
          inputs.append(values[arv])
  
      # defaults
      out_keys = []
      for arv in args[split_at:]:
          if arv == "out_dir":
              out_dir = values[arv]
          elif "out_" in arv:
              out_keys.append(arv)
              outputs.append(values[arv])
  
      return io_iterator(
          inputs,
          out_dir,
          outputs,
          output_strategy,
          mix_names,
          out_keys=out_keys,
      )
  
imports: import inspect
  import itertools
  import numpy
  import os
  from glob import glob
  from dipy.workflows.base import get_args_default
label_desc: Use image node_id 7 for calling a global function with example usage: io_iterator_(frame, fnc, output_strategy, mix_names) and returns: io_iterator