code: def validate_callback_data(method):
      
      @wraps(method)
      def method_wrapper(*args, **kwargs):
          """
  
          Parameters
          ----------
          *args
          **kwargs
  
          Returns
          -------
          method's output
          """
          expected = method.__code__.co_varnames
  
          # rename curret gam object
          if 'self' in kwargs:
              gam = kwargs['self']
              del(kwargs['self'])
              kwargs['gam'] = gam
  
          # loop once to check any missing
          missing = []
          for e in expected:
              if e == 'self':
                  continue
              if e not in kwargs:
                  missing.append(e)
          assert len(missing) == 0, 'CallBack cannot reference: {}'.\
                                    format(', '.join(missing))
  
          # loop again to extract desired
          kwargs_subset = {}
          for e in expected:
              if e == 'self':
                  continue
              kwargs_subset[e] = kwargs[e]
  
          return method(*args, **kwargs_subset)
  
      return method_wrapper
docs: wraps a callback's method to pull the desired arguments from the vars dict
      also checks to ensure the method's arguments are in the vars dict
  
      Parameters
      ----------
      method : callable
  
      Returns
      -------
      validated callable