class_docstr: Add Random Rain to the image.
  
  Args:
      p: probability of applying the transformation.
      number_of_drops: number of drops per image
      drop_height: height of the drop in image(same for each drops in one image)
      drop_width: width of the drop in image(same for each drops in one image)
  Shape:
      - Input: :math:`(C, H, W)` or :math:`(B, C, H, W)`
      - Output: :math:`(B, C, H, W)`
  
  Examples:
      >>> rng = torch.manual_seed(0)
      >>> input = torch.rand(1, 1, 5, 5)
      >>> rain = RandomRain(p=1,drop_height=(1,2),drop_width=(1,2),number_of_drops=(1,1))
      >>> rain(input)
      tensor([[[[0.4963, 0.7843, 0.0885, 0.1320, 0.3074],
                [0.6341, 0.4901, 0.8964, 0.4556, 0.6323],
                [0.3489, 0.4017, 0.0223, 0.1689, 0.2939],
                [0.5185, 0.6977, 0.8000, 0.1610, 0.2823],
                [0.6816, 0.9152, 0.3971, 0.8742, 0.4194]]]])
code: def __init__(
      self,
      same_on_batch: bool = False,
      p: float = 0.5,
      keepdim: bool = False,
      number_of_drops: tuple[int, int] = (1000, 2000),
      drop_height: tuple[int, int] = (5, 20),
      drop_width: tuple[int, int] = (-5, 5),
  ) -> None:
      super().__init__(
          p=p, same_on_batch=same_on_batch, p_batch=1.0, keepdim=keepdim
      )
      self._param_generator = RainGenerator(
          number_of_drops, drop_height, drop_width
      )
  
file_path: kornia/kornia/augmentation/_2d/intensity/random_rain.py
imports: from __future__ import annotations
  from typing import Any, Optional
  import torch
  from kornia.augmentation._2d.intensity.base import IntensityAugmentationBase2D
  from kornia.augmentation.random_generator._2d import RainGenerator
  from kornia.core import Tensor
  from kornia.core.check import KORNIA_CHECK
label_desc: Use image node_id 1 to create a new RandomRain object from inherited base classes: IntensityAugmentationBase2D with example: obj = RandomRain(same_on_batch, p, keepdim, number_of_drops, drop_height, drop_width)