code: def path_wrapper(func):
      
  
      @functools.wraps(func)
      def wrapped(node, context=None, _func=func, **kwargs):
          """wrapper function handling context"""
          if context is None:
              context = contextmod.InferenceContext()
          if context.push(node):
              return None
  
          yielded = set()
          generator = _func(node, context, **kwargs)
          try:
              while True:
                  res = next(generator)
                  # unproxy only true instance, not const, tuple, dict...
                  if res.__class__.__name__ == "Instance":
                      ares = res._proxied
                  else:
                      ares = res
                  if ares not in yielded:
                      yield res
                      yielded.add(ares)
          except StopIteration as error:
              if error.args:
                  return error.args[0]
              return None
  
      return wrapped
docs: return the given infer function wrapped to handle the path
  
      Used to stop inference if the node has already been looked
      at for a given `InferenceContext` to prevent infinite recursion