class_docstr: Randomly flip an image horizontally and/or vertically with
  some probability.
  
  :param h: (bool):
      whether to horizontally flip w/ probability p
  :param v: (bool):
      whether to vertically flip w/ probability p
  :param p: (float between [0,1]):
      probability with which to apply allowed flipping operations
code: def __call__(self, x, y=None):
      x = x.numpy()
      if y is not None:
          y = y.numpy()
      # horizontal flip with p = self.p
      if self.horizontal:
          if random.random() < self.p:
              x = x.swapaxes(2, 0)
              x = x[::-1, ...]
              x = x.swapaxes(0, 2)
              if y is not None:
                  y = y.swapaxes(2, 0)
                  y = y[::-1, ...]
                  y = y.swapaxes(0, 2)
      # vertical flip with p = self.p
      if self.vertical:
          if random.random() < self.p:
              x = x.swapaxes(1, 0)
              x = x[::-1, ...]
              x = x.swapaxes(0, 1)
              if y is not None:
                  y = y.swapaxes(1, 0)
                  y = y[::-1, ...]
                  y = y.swapaxes(0, 1)
      if y is None:
          # must copy because torch doesnt current support neg strides
          return th.from_numpy(x.copy())
      return th.from_numpy(x.copy()), th.from_numpy(y.copy())
  
imports: import os
  import random
  import math
  import numpy
  import torch
label_desc: Use image node_id 2 for calling the RandomFlip obj's underlying member method code with example usage: obj.__call__(x, y) and returns: th,  th, th