text: # Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
  
  """
  An awesome colormap for really neat visualizations.
  Copied from Detectron, and removed gray colors.
  """
  
  import numpy as np
  
  __all__ = ["colormap", "random_color"]
  
  # fmt: off
  # RGB:
  _COLORS = np.array(
      [
          0.000, 0.447, 0.741,
          0.850, 0.325, 0.098,
          0.929, 0.694, 0.125,
          0.494, 0.184, 0.556,
          0.466, 0.674, 0.188,
          0.301, 0.745, 0.933,
          0.635, 0.078, 0.184,
          0.300, 0.300, 0.300,
          0.600, 0.600, 0.600,
          1.000, 0.000, 0.000,
          1.000, 0.500, 0.000,
          0.749, 0.749, 0.000,
          0.000, 1.000, 0.000,
          0.000, 0.000, 1.000,
          0.667, 0.000, 1.000,
          0.333, 0.333, 0.000,
          0.333, 0.667, 0.000,
          0.333, 1.000, 0.000,
          0.667, 0.333, 0.000,
          0.667, 0.667, 0.000,
          0.667, 1.000, 0.000,
          1.000, 0.333, 0.000,
          1.000, 0.667, 0.000,
          1.000, 1.000, 0.000,
          0.000, 0.333, 0.500,
          0.000, 0.667, 0.500,
          0.000, 1.000, 0.500,
          0.333, 0.000, 0.500,
          0.333, 0.333, 0.500,
          0.333, 0.667, 0.500,
          0.333, 1.000, 0.500,
          0.667, 0.000, 0.500,
          0.667, 0.333, 0.500,
          0.667, 0.667, 0.500,
          0.667, 1.000, 0.500,
          1.000, 0.000, 0.500,
          1.000, 0.333, 0.500,
          1.000, 0.667, 0.500,
          1.000, 1.000, 0.500,
          0.000, 0.333, 1.000,
          0.000, 0.667, 1.000,
          0.000, 1.000, 1.000,
          0.333, 0.000, 1.000,
          0.333, 0.333, 1.000,
          0.333, 0.667, 1.000,
          0.333, 1.000, 1.000,
          0.667, 0.000, 1.000,
          0.667, 0.333, 1.000,
          0.667, 0.667, 1.000,
          0.667, 1.000, 1.000,
          1.000, 0.000, 1.000,
          1.000, 0.333, 1.000,
          1.000, 0.667, 1.000,
          0.333, 0.000, 0.000,
          0.500, 0.000, 0.000,
          0.667, 0.000, 0.000,
          0.833, 0.000, 0.000,
          1.000, 0.000, 0.000,
          0.000, 0.167, 0.000,
          0.000, 0.333, 0.000,
          0.000, 0.500, 0.000,
          0.000, 0.667, 0.000,
          0.000, 0.833, 0.000,
          0.000, 1.000, 0.000,
          0.000, 0.000, 0.167,
          0.000, 0.000, 0.333,
          0.000, 0.000, 0.500,
          0.000, 0.000, 0.667,
          0.000, 0.000, 0.833,
          0.000, 0.000, 1.000,
          0.000, 0.000, 0.000,
          0.143, 0.143, 0.143,
          0.857, 0.857, 0.857,
          1.000, 1.000, 1.000
      ]
  ).astype(np.float32).reshape(-1, 3)
  # fmt: on
  
  
  def colormap(rgb=False, maximum=255):
      """
      Args:
          rgb (bool): whether to return RGB colors or BGR colors.
          maximum (int): either 255 or 1
      Returns:
          ndarray: a float32 array of Nx3 colors, in range [0, 255] or [0, 1]
      """
      assert maximum in [255, 1], maximum
      c = _COLORS * maximum
      if not rgb:
          c = c[:, ::-1]
      return c
  
  
  def random_color(rgb=False, maximum=255, seed=None):
      """
      Args:
          rgb (bool): whether to return RGB colors or BGR colors.
          maximum (int): either 255 or 1
      Returns:
          ndarray: a vector of 3 numbers
      """
      if seed:
          np.random.seed(seed)
  
      idx = np.random.randint(0, len(_COLORS))
      ret = _COLORS[idx] * maximum
      if not rgb:
          ret = ret[::-1]
      return ret
  
  
  if __name__ == "__main__":
      import cv2
  
      size = 100
      H, W = 10, 10
      canvas = np.random.rand(H * size, W * size, 3).astype("float32")
      for h in range(H):
          for w in range(W):
              idx = h * W + w
              if idx >= len(_COLORS):
                  break
              canvas[h * size : (h + 1) * size, w * size : (w + 1) * size] = _COLORS[idx]
      cv2.imshow("a", canvas)
      cv2.waitKey(0)