class_docstr: Randomly flip the input image and bbox left to right with a probability
  of p(0.5 by default).
  
  Parameters
  ----------
  p : float
      The probability to preceed with random cropping logic.
  
  Inputs:
      - **data**: input tensor with (Hi x Wi x C) shape.
      - **bbox**: input tensor with shape (N, 4+) where N is the number of bounding boxes.
          The second axis represents attributes of the bounding box.
          Specifically, these are :math:`(x_{min}, y_{min}, x_{max}, y_{max})`,
          we allow additional attributes other than coordinates, which stay intact
          during bounding box transformations.
  
  Outputs:
      - **out**: output tensor with same shape as `data`.
      - **bbox**: input tensor with same shape as `bbox`.
code: def forward(self, img, bbox):
      _check_bbox_shape(bbox)
      if self.p <= 0:
          return img, bbox
      elif self.p >= 1:
          img = self._flip_image(img)
          bbox = self._flip_bbox(img, bbox)
          return img, bbox
      else:
          if self.p < random.random():
              return img, bbox
          else:
              img = self._flip_image(img)
              bbox = self._flip_bbox(img, bbox)
              return img, bbox
  
imports: import random
  from .......base import numeric_types
  from ......block import Block
  from .......util import is_np_array
  from .......None import ndarray, numpy_extension, numpy
  from .utils import _check_bbox_shape, bbox_crop, bbox_translate
  from .utils import bbox_resize, bbox_random_crop_with_constraints
label_desc: Use image node_id 2 for calling the ImageBboxRandomFlipLeftRight obj's underlying member method code with example usage: obj.forward(img, bbox) and returns: img,  bbox, img,  bbox, img,  bbox, img,  bbox