class_docstr: Vectorized environment base class
  
  :param venv: (VecEnv) the vectorized environment to wrap
  :param observation_space: (Gym Space) the observation space (can be None to load from venv)
  :param action_space: (Gym Space) the action space (can be None to load from venv)
docstr: See base class.
  
  :return: (str or None) name of module whose attribute is being shadowed, if any.
docstr_tok: ["See","base","class",".",":","return",":","(","str","or","None",")","name","of","module","whose","attribute","is","being","shadowed",",","if","any","."]
code: def getattr_depth_check(self, name, already_found):
      """See base class.
  
      :return: (str or None) name of module whose attribute is being shadowed, if any.
      """
      all_attributes = self._get_all_attributes()
      if name in all_attributes and already_found:
          # this venv's attribute is being hidden because of a higher venv.
          shadowed_wrapper_class = "{0}.{1}".format(
              type(self).__module__, type(self).__name__
          )
      elif name in all_attributes and not already_found:
          # we have found the first reference to the attribute. Now check for duplicates.
          shadowed_wrapper_class = self.venv.getattr_depth_check(
              name, True
          )
      else:
          # this wrapper does not have the attribute. Keep searching.
          shadowed_wrapper_class = self.venv.getattr_depth_check(
              name, already_found
          )
  
      return shadowed_wrapper_class
  
imports: from abc import ABC, abstractmethod
  import inspect
  import pickle
  from typing import Sequence, Optional, List, Union
  import cloudpickle
  import numpy
  from stable_baselines import logger
  from stable_baselines.common.tile_images import tile_images
label_desc: Use image node_id 15 for calling the VecEnvWrapper obj's underlying member method code with example usage: obj.getattr_depth_check(name, already_found) and returns: shadowed_wrapper_class