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: Recursively check wrappers to find attribute.
  
  :param name (str) name of attribute to look for
  :return: (object) attribute
docstr_tok: ["Recursively","check","wrappers","to","find","attribute",".",":","param","name","(","str",")","name","of","attribute","to","look","for",":","return",":","(","object",")","attribute"]
code: def getattr_recursive(self, name):
      """Recursively check wrappers to find attribute.
  
      :param name (str) name of attribute to look for
      :return: (object) attribute
      """
      all_attributes = self._get_all_attributes()
      if name in all_attributes:  # attribute is present in this wrapper
          attr = getattr(self, name)
      elif hasattr(self.venv, "getattr_recursive"):
          # Attribute not present, child is wrapper. Call getattr_recursive rather than getattr
          # to avoid a duplicate call to getattr_depth_check.
          attr = self.venv.getattr_recursive(name)
      else:  # attribute not present, child is an unwrapped VecEnv
          attr = getattr(self.venv, name)
  
      return attr
  
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 14 for calling the VecEnvWrapper obj's underlying member method code with example usage: obj.getattr_recursive(name) and returns: attr