class_docstr: Implements a wrapper that will apply transformations sequentially on both image and target
  
  .. tabs::
  
      .. tab:: TensorFlow
  
          .. code:: python
  
              >>> import numpy as np
              >>> import tensorflow as tf
              >>> from doctr.transforms import SampleCompose, ImageTransform, ColorInversion, RandomRotate
              >>> transfo = SampleCompose([ImageTransform(ColorInversion((32, 32))), RandomRotate(30)])
              >>> out, out_boxes = transfo(tf.random.uniform(shape=[64, 64, 3], minval=0, maxval=1), np.zeros((2, 4)))
  
      .. tab:: PyTorch
  
          .. code:: python
  
              >>> import numpy as np
              >>> import torch
              >>> from doctr.transforms import SampleCompose, ImageTransform, ColorInversion, RandomRotate
              >>> transfos = SampleCompose([ImageTransform(ColorInversion((32, 32))), RandomRotate(30)])
              >>> out, out_boxes = transfos(torch.rand(8, 64, 64, 3), np.zeros((2, 4)))
  
  Args:
  ----
      transforms: list of transformation modules
code: def __init__(
      self, transforms: List[Callable[[Any, Any], Tuple[Any, Any]]]
  ) -> None:
      self.sample_transforms = transforms
  
imports: import math
  import random
  from typing import Any, Callable, Dict, List, Optional, Tuple, Union
  import numpy
  from doctr.utils.repr import NestedObject
  from ..None import functional
label_desc: Use image node_id 1 to create a new SampleCompose object from inherited base classes: NestedObject with example: obj = SampleCompose(transforms)