class_docstr: Crops the size of the observation to a given crop window. For example, in Atari, the
  observations are images with a shape of 210x160. Usually, we will want to crop the size of the observation to a
  square of 160x160 before rescaling them.
code: def validate_input_observation_space(
      self, input_observation_space: ObservationSpace
  ):
      crop_high = self._replace_negative_one_in_crop_size(
          self.crop_high, input_observation_space.shape
      )
      crop_low = self._replace_negative_one_in_crop_size(
          self.crop_low, input_observation_space.shape
      )
      if np.any(crop_high > input_observation_space.shape) or np.any(
          crop_low > input_observation_space.shape
      ):
          raise ValueError(
              "The cropping values are outside of the observation space"
          )
      if not input_observation_space.is_valid_index(
          crop_low
      ) or not input_observation_space.is_valid_index(crop_high - 1):
          raise ValueError(
              "The cropping indices are outside of the observation space"
          )
  
file_path: coach/rl_coach/filters/observation/observation_crop_filter.py
imports: from typing import Union, Tuple
  import numpy
  from rl_coach.core_types import ObservationType
  from rl_coach.filters.observation.observation_filter import ObservationFilter
  from rl_coach.spaces import ObservationSpace
label_desc: Use image node_id 3 for calling the ObservationCropFilter obj's underlying member method code with example usage: obj.validate_input_observation_space(input_observation_space) without return types