class_docstr: GeometricAugmentationBase2D base class for customized geometric augmentation implementations.
  
  Args:
      p: probability for applying an augmentation. This param controls the augmentation probabilities
        element-wise for a batch.
      p_batch: probability for applying an augmentation to a batch. This param controls the augmentation
        probabilities batch-wise.
      same_on_batch: apply the same transformation across the batch.
      keepdim: whether to keep the output shape the same as input ``True`` or broadcast it
        to the batch form ``False``.
class_docstr_tok: ["GeometricAugmentationBase2D","base","class","for","customized","geometric","augmentation","implementations",".","Args",":","p",":","probability","for","applying","an","augmentation",".","This","param","controls","the","augmentation","probabilities","element-wise","for","a","batch",".","p_batch",":","probability","for","applying","an","augmentation","to","a","batch",".","This","param","controls","the","augmentation","probabilities","batch-wise",".","same_on_batch",":","apply","the","same","transformation","across","the","batch",".","keepdim",":","whether","to","keep","the","output","shape","the","same","as","input","``","True","``","or","broadcast","it","to","the","batch","form","``","False","``","."]
code: def inverse_inputs(
      self,
      input: Tensor,
      params: Dict[str, Tensor],
      flags: Dict[str, Any],
      transform: Optional[Tensor] = None,
      **kwargs: Any,
  ) -> Tensor:
      in_tensor = self.transform_tensor(input)
      output = in_tensor.clone()
      batch_prob = params["batch_prob"]
      to_apply = (
          batch_prob > 0.5
      )  # NOTE: in case of Relaxed Distributions.
  
      params, flags = self._process_kwargs_to_params_and_flags(
          self._params if params is None else params, flags, **kwargs
      )
  
      size: Optional[Tuple[int, int]] = None
      if "forward_input_shape" in params:
          # Majorly for cropping functions
          _size = params["forward_input_shape"].tolist()
          size = (_size[-2], _size[-1])
  
      # if no augmentation needed
      if not to_apply.any():
          output = in_tensor
      # if all data needs to be augmented
      elif to_apply.all():
          output = self.inverse_transform(
              in_tensor, flags=flags, transform=transform, size=size
          )
      else:
          output[to_apply] = self.inverse_transform(
              in_tensor[to_apply],
              transform=transform[to_apply]
              if transform is not None
              else transform,
              size=size,
              flags=flags,
          )
      return output
  
imports: from typing import Any, Dict, Optional, Tuple
  from kornia.augmentation._2d.base import RigidAffineAugmentationBase2D
  from kornia.constants import Resample
  from kornia.core import Tensor, as_tensor
  from kornia.geometry.boxes import Boxes
  from kornia.geometry.keypoints import Keypoints
  from kornia.utils.helpers import _torch_inverse_cast
label_desc: Use image node_id 12 for calling the GeometricAugmentationBase2D obj's underlying member method code with example usage: obj.inverse_inputs(input, params, flags, transform) and returns: output