code: def __init__(
      self,
      num_shapes: int,
      shape_type: Optional[str] = None,
      colors: Optional[List[Tuple[int, int, int]]] = None,
      thickness: Optional[int] = None,
      radius: Optional[float] = None,
      random_movement: bool = True,
      topleft: Optional[Tuple[float, float]] = None,
      bottomright: Optional[Tuple[float, float]] = None,
      **kwargs,
  ) -> None:
      assert (
          num_shapes > 0
      ), "Number of shapes must be greater than zero"
      assert shape_type is None or shape_type in [
          "circle",
          "rectangle",
      ], "Shape type must be set to None or to 'circle' or 'rectangle'"
      assert (
          thickness is None or type(thickness) == int
      ), "Invalid thickness provided: must be set to None or an integer"
  
      super().__init__(
          num_shapes, random_movement, topleft, bottomright, **kwargs
      )
  
      self.num_shapes = num_shapes
      self.shape_type = VideoDistractorByShapes.random_shape_type(
          shape_type
      )
      self.colors = BaseCV2Augmenter.random_colors(colors)
      self.thickness = VideoDistractorByShapes.random_thickness(
          thickness
      )
      self.radius = VideoDistractorByShapes.random_radius(radius)
  
file_path: AugLy/augly/video/augmenters/cv2/shapes.py
imports: import random
  from typing import Iterator, List, Optional, Tuple
  import cv2
  import numpy
  from augly.video.augmenters.cv2.base_augmenter import BaseCV2Augmenter
label_desc: Use image node_id 1 to create a new VideoDistractorByShapes object from inherited base classes: BaseCV2Augmenter with example: obj = VideoDistractorByShapes(num_shapes, shape_type, colors, thickness, radius, random_movement, topleft, bottomright)