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 _replace_negative_one_in_crop_size(
      self,
      crop_size: np.ndarray,
      observation_shape: Union[Tuple, np.ndarray],
  ):
      # replace -1 with the max size
      crop_size = crop_size.copy()
      for i in range(len(observation_shape)):
          if crop_size[i] == -1:
              crop_size[i] = observation_shape[i]
      return crop_size
  
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 2 for calling the ObservationCropFilter obj's underlying member method code with example usage: obj._replace_negative_one_in_crop_size(crop_size, observation_shape) and returns: crop_size