text: # coding=utf-8
  # Copyright 2022 The Deeplab2 Authors.
  #
  # Licensed under the Apache License, Version 2.0 (the "License");
  # you may not use this file except in compliance with the License.
  # You may obtain a copy of the License at
  #
  #     http://www.apache.org/licenses/LICENSE-2.0
  #
  # Unless required by applicable law or agreed to in writing, software
  # distributed under the License is distributed on an "AS IS" BASIS,
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  # See the License for the specific language governing permissions and
  # limitations under the License.
  
  """File containing the meta info of COCO dataset.
  """
  
  import copy
  from typing import Sequence, Mapping, Any
  
  _COCO_META = [
      {
          'color': [220, 20, 60],
          'isthing': 1,
          'id': 1,
          'name': 'person'
      },
      {
          'color': [119, 11, 32],
          'isthing': 1,
          'id': 2,
          'name': 'bicycle'
      },
      {
          'color': [0, 0, 142],
          'isthing': 1,
          'id': 3,
          'name': 'car'
      },
      {
          'color': [0, 0, 230],
          'isthing': 1,
          'id': 4,
          'name': 'motorcycle'
      },
      {
          'color': [106, 0, 228],
          'isthing': 1,
          'id': 5,
          'name': 'airplane'
      },
      {
          'color': [0, 60, 100],
          'isthing': 1,
          'id': 6,
          'name': 'bus'
      },
      {
          'color': [0, 80, 100],
          'isthing': 1,
          'id': 7,
          'name': 'train'
      },
      {
          'color': [0, 0, 70],
          'isthing': 1,
          'id': 8,
          'name': 'truck'
      },
      {
          'color': [0, 0, 192],
          'isthing': 1,
          'id': 9,
          'name': 'boat'
      },
      {
          'color': [250, 170, 30],
          'isthing': 1,
          'id': 10,
          'name': 'traffic light'
      },
      {
          'color': [100, 170, 30],
          'isthing': 1,
          'id': 11,
          'name': 'fire hydrant'
      },
      {
          'color': [220, 220, 0],
          'isthing': 1,
          'id': 13,
          'name': 'stop sign'
      },
      {
          'color': [175, 116, 175],
          'isthing': 1,
          'id': 14,
          'name': 'parking meter'
      },
      {
          'color': [250, 0, 30],
          'isthing': 1,
          'id': 15,
          'name': 'bench'
      },
      {
          'color': [165, 42, 42],
          'isthing': 1,
          'id': 16,
          'name': 'bird'
      },
      {
          'color': [255, 77, 255],
          'isthing': 1,
          'id': 17,
          'name': 'cat'
      },
      {
          'color': [0, 226, 252],
          'isthing': 1,
          'id': 18,
          'name': 'dog'
      },
      {
          'color': [182, 182, 255],
          'isthing': 1,
          'id': 19,
          'name': 'horse'
      },
      {
          'color': [0, 82, 0],
          'isthing': 1,
          'id': 20,
          'name': 'sheep'
      },
      {
          'color': [120, 166, 157],
          'isthing': 1,
          'id': 21,
          'name': 'cow'
      },
      {
          'color': [110, 76, 0],
          'isthing': 1,
          'id': 22,
          'name': 'elephant'
      },
      {
          'color': [174, 57, 255],
          'isthing': 1,
          'id': 23,
          'name': 'bear'
      },
      {
          'color': [199, 100, 0],
          'isthing': 1,
          'id': 24,
          'name': 'zebra'
      },
      {
          'color': [72, 0, 118],
          'isthing': 1,
          'id': 25,
          'name': 'giraffe'
      },
      {
          'color': [255, 179, 240],
          'isthing': 1,
          'id': 27,
          'name': 'backpack'
      },
      {
          'color': [0, 125, 92],
          'isthing': 1,
          'id': 28,
          'name': 'umbrella'
      },
      {
          'color': [209, 0, 151],
          'isthing': 1,
          'id': 31,
          'name': 'handbag'
      },
      {
          'color': [188, 208, 182],
          'isthing': 1,
          'id': 32,
          'name': 'tie'
      },
      {
          'color': [0, 220, 176],
          'isthing': 1,
          'id': 33,
          'name': 'suitcase'
      },
      {
          'color': [255, 99, 164],
          'isthing': 1,
          'id': 34,
          'name': 'frisbee'
      },
      {
          'color': [92, 0, 73],
          'isthing': 1,
          'id': 35,
          'name': 'skis'
      },
      {
          'color': [133, 129, 255],
          'isthing': 1,
          'id': 36,
          'name': 'snowboard'
      },
      {
          'color': [78, 180, 255],
          'isthing': 1,
          'id': 37,
          'name': 'sports ball'
      },
      {
          'color': [0, 228, 0],
          'isthing': 1,
          'id': 38,
          'name': 'kite'
      },
      {
          'color': [174, 255, 243],
          'isthing': 1,
          'id': 39,
          'name': 'baseball bat'
      },
      {
          'color': [45, 89, 255],
          'isthing': 1,
          'id': 40,
          'name': 'baseball glove'
      },
      {
          'color': [134, 134, 103],
          'isthing': 1,
          'id': 41,
          'name': 'skateboard'
      },
      {
          'color': [145, 148, 174],
          'isthing': 1,
          'id': 42,
          'name': 'surfboard'
      },
      {
          'color': [255, 208, 186],
          'isthing': 1,
          'id': 43,
          'name': 'tennis racket'
      },
      {
          'color': [197, 226, 255],
          'isthing': 1,
          'id': 44,
          'name': 'bottle'
      },
      {
          'color': [171, 134, 1],
          'isthing': 1,
          'id': 46,
          'name': 'wine glass'
      },
      {
          'color': [109, 63, 54],
          'isthing': 1,
          'id': 47,
          'name': 'cup'
      },
      {
          'color': [207, 138, 255],
          'isthing': 1,
          'id': 48,
          'name': 'fork'
      },
      {
          'color': [151, 0, 95],
          'isthing': 1,
          'id': 49,
          'name': 'knife'
      },
      {
          'color': [9, 80, 61],
          'isthing': 1,
          'id': 50,
          'name': 'spoon'
      },
      {
          'color': [84, 105, 51],
          'isthing': 1,
          'id': 51,
          'name': 'bowl'
      },
      {
          'color': [74, 65, 105],
          'isthing': 1,
          'id': 52,
          'name': 'banana'
      },
      {
          'color': [166, 196, 102],
          'isthing': 1,
          'id': 53,
          'name': 'apple'
      },
      {
          'color': [208, 195, 210],
          'isthing': 1,
          'id': 54,
          'name': 'sandwich'
      },
      {
          'color': [255, 109, 65],
          'isthing': 1,
          'id': 55,
          'name': 'orange'
      },
      {
          'color': [0, 143, 149],
          'isthing': 1,
          'id': 56,
          'name': 'broccoli'
      },
      {
          'color': [179, 0, 194],
          'isthing': 1,
          'id': 57,
          'name': 'carrot'
      },
      {
          'color': [209, 99, 106],
          'isthing': 1,
          'id': 58,
          'name': 'hot dog'
      },
      {
          'color': [5, 121, 0],
          'isthing': 1,
          'id': 59,
          'name': 'pizza'
      },
      {
          'color': [227, 255, 205],
          'isthing': 1,
          'id': 60,
          'name': 'donut'
      },
      {
          'color': [147, 186, 208],
          'isthing': 1,
          'id': 61,
          'name': 'cake'
      },
      {
          'color': [153, 69, 1],
          'isthing': 1,
          'id': 62,
          'name': 'chair'
      },
      {
          'color': [3, 95, 161],
          'isthing': 1,
          'id': 63,
          'name': 'couch'
      },
      {
          'color': [163, 255, 0],
          'isthing': 1,
          'id': 64,
          'name': 'potted plant'
      },
      {
          'color': [119, 0, 170],
          'isthing': 1,
          'id': 65,
          'name': 'bed'
      },
      {
          'color': [0, 182, 199],
          'isthing': 1,
          'id': 67,
          'name': 'dining table'
      },
      {
          'color': [0, 165, 120],
          'isthing': 1,
          'id': 70,
          'name': 'toilet'
      },
      {
          'color': [183, 130, 88],
          'isthing': 1,
          'id': 72,
          'name': 'tv'
      },
      {
          'color': [95, 32, 0],
          'isthing': 1,
          'id': 73,
          'name': 'laptop'
      },
      {
          'color': [130, 114, 135],
          'isthing': 1,
          'id': 74,
          'name': 'mouse'
      },
      {
          'color': [110, 129, 133],
          'isthing': 1,
          'id': 75,
          'name': 'remote'
      },
      {
          'color': [166, 74, 118],
          'isthing': 1,
          'id': 76,
          'name': 'keyboard'
      },
      {
          'color': [219, 142, 185],
          'isthing': 1,
          'id': 77,
          'name': 'cell phone'
      },
      {
          'color': [79, 210, 114],
          'isthing': 1,
          'id': 78,
          'name': 'microwave'
      },
      {
          'color': [178, 90, 62],
          'isthing': 1,
          'id': 79,
          'name': 'oven'
      },
      {
          'color': [65, 70, 15],
          'isthing': 1,
          'id': 80,
          'name': 'toaster'
      },
      {
          'color': [127, 167, 115],
          'isthing': 1,
          'id': 81,
          'name': 'sink'
      },
      {
          'color': [59, 105, 106],
          'isthing': 1,
          'id': 82,
          'name': 'refrigerator'
      },
      {
          'color': [142, 108, 45],
          'isthing': 1,
          'id': 84,
          'name': 'book'
      },
      {
          'color': [196, 172, 0],
          'isthing': 1,
          'id': 85,
          'name': 'clock'
      },
      {
          'color': [95, 54, 80],
          'isthing': 1,
          'id': 86,
          'name': 'vase'
      },
      {
          'color': [128, 76, 255],
          'isthing': 1,
          'id': 87,
          'name': 'scissors'
      },
      {
          'color': [201, 57, 1],
          'isthing': 1,
          'id': 88,
          'name': 'teddy bear'
      },
      {
          'color': [246, 0, 122],
          'isthing': 1,
          'id': 89,
          'name': 'hair drier'
      },
      {
          'color': [191, 162, 208],
          'isthing': 1,
          'id': 90,
          'name': 'toothbrush'
      },
      {
          'color': [255, 255, 128],
          'isthing': 0,
          'id': 92,
          'name': 'banner'
      },
      {
          'color': [147, 211, 203],
          'isthing': 0,
          'id': 93,
          'name': 'blanket'
      },
      {
          'color': [150, 100, 100],
          'isthing': 0,
          'id': 95,
          'name': 'bridge'
      },
      {
          'color': [168, 171, 172],
          'isthing': 0,
          'id': 100,
          'name': 'cardboard'
      },
      {
          'color': [146, 112, 198],
          'isthing': 0,
          'id': 107,
          'name': 'counter'
      },
      {
          'color': [210, 170, 100],
          'isthing': 0,
          'id': 109,
          'name': 'curtain'
      },
      {
          'color': [92, 136, 89],
          'isthing': 0,
          'id': 112,
          'name': 'door-stuff'
      },
      {
          'color': [218, 88, 184],
          'isthing': 0,
          'id': 118,
          'name': 'floor-wood'
      },
      {
          'color': [241, 129, 0],
          'isthing': 0,
          'id': 119,
          'name': 'flower'
      },
      {
          'color': [217, 17, 255],
          'isthing': 0,
          'id': 122,
          'name': 'fruit'
      },
      {
          'color': [124, 74, 181],
          'isthing': 0,
          'id': 125,
          'name': 'gravel'
      },
      {
          'color': [70, 70, 70],
          'isthing': 0,
          'id': 128,
          'name': 'house'
      },
      {
          'color': [255, 228, 255],
          'isthing': 0,
          'id': 130,
          'name': 'light'
      },
      {
          'color': [154, 208, 0],
          'isthing': 0,
          'id': 133,
          'name': 'mirror-stuff'
      },
      {
          'color': [193, 0, 92],
          'isthing': 0,
          'id': 138,
          'name': 'net'
      },
      {
          'color': [76, 91, 113],
          'isthing': 0,
          'id': 141,
          'name': 'pillow'
      },
      {
          'color': [255, 180, 195],
          'isthing': 0,
          'id': 144,
          'name': 'platform'
      },
      {
          'color': [106, 154, 176],
          'isthing': 0,
          'id': 145,
          'name': 'playingfield'
      },
      {
          'color': [230, 150, 140],
          'isthing': 0,
          'id': 147,
          'name': 'railroad'
      },
      {
          'color': [60, 143, 255],
          'isthing': 0,
          'id': 148,
          'name': 'river'
      },
      {
          'color': [128, 64, 128],
          'isthing': 0,
          'id': 149,
          'name': 'road'
      },
      {
          'color': [92, 82, 55],
          'isthing': 0,
          'id': 151,
          'name': 'roof'
      },
      {
          'color': [254, 212, 124],
          'isthing': 0,
          'id': 154,
          'name': 'sand'
      },
      {
          'color': [73, 77, 174],
          'isthing': 0,
          'id': 155,
          'name': 'sea'
      },
      {
          'color': [255, 160, 98],
          'isthing': 0,
          'id': 156,
          'name': 'shelf'
      },
      {
          'color': [255, 255, 255],
          'isthing': 0,
          'id': 159,
          'name': 'snow'
      },
      {
          'color': [104, 84, 109],
          'isthing': 0,
          'id': 161,
          'name': 'stairs'
      },
      {
          'color': [169, 164, 131],
          'isthing': 0,
          'id': 166,
          'name': 'tent'
      },
      {
          'color': [225, 199, 255],
          'isthing': 0,
          'id': 168,
          'name': 'towel'
      },
      {
          'color': [137, 54, 74],
          'isthing': 0,
          'id': 171,
          'name': 'wall-brick'
      },
      {
          'color': [135, 158, 223],
          'isthing': 0,
          'id': 175,
          'name': 'wall-stone'
      },
      {
          'color': [7, 246, 231],
          'isthing': 0,
          'id': 176,
          'name': 'wall-tile'
      },
      {
          'color': [107, 255, 200],
          'isthing': 0,
          'id': 177,
          'name': 'wall-wood'
      },
      {
          'color': [58, 41, 149],
          'isthing': 0,
          'id': 178,
          'name': 'water-other'
      },
      {
          'color': [183, 121, 142],
          'isthing': 0,
          'id': 180,
          'name': 'window-blind'
      },
      {
          'color': [255, 73, 97],
          'isthing': 0,
          'id': 181,
          'name': 'window-other'
      },
      {
          'color': [107, 142, 35],
          'isthing': 0,
          'id': 184,
          'name': 'tree-merged'
      },
      {
          'color': [190, 153, 153],
          'isthing': 0,
          'id': 185,
          'name': 'fence-merged'
      },
      {
          'color': [146, 139, 141],
          'isthing': 0,
          'id': 186,
          'name': 'ceiling-merged'
      },
      {
          'color': [70, 130, 180],
          'isthing': 0,
          'id': 187,
          'name': 'sky-other-merged'
      },
      {
          'color': [134, 199, 156],
          'isthing': 0,
          'id': 188,
          'name': 'cabinet-merged'
      },
      {
          'color': [209, 226, 140],
          'isthing': 0,
          'id': 189,
          'name': 'table-merged'
      },
      {
          'color': [96, 36, 108],
          'isthing': 0,
          'id': 190,
          'name': 'floor-other-merged'
      },
      {
          'color': [96, 96, 96],
          'isthing': 0,
          'id': 191,
          'name': 'pavement-merged'
      },
      {
          'color': [64, 170, 64],
          'isthing': 0,
          'id': 192,
          'name': 'mountain-merged'
      },
      {
          'color': [152, 251, 152],
          'isthing': 0,
          'id': 193,
          'name': 'grass-merged'
      },
      {
          'color': [208, 229, 228],
          'isthing': 0,
          'id': 194,
          'name': 'dirt-merged'
      },
      {
          'color': [206, 186, 171],
          'isthing': 0,
          'id': 195,
          'name': 'paper-merged'
      },
      {
          'color': [152, 161, 64],
          'isthing': 0,
          'id': 196,
          'name': 'food-other-merged'
      },
      {
          'color': [116, 112, 0],
          'isthing': 0,
          'id': 197,
          'name': 'building-other-merged'
      },
      {
          'color': [0, 114, 143],
          'isthing': 0,
          'id': 198,
          'name': 'rock-merged'
      },
      {
          'color': [102, 102, 156],
          'isthing': 0,
          'id': 199,
          'name': 'wall-other-merged'
      },
      {
          'color': [250, 141, 255],
          'isthing': 0,
          'id': 200,
          'name': 'rug-merged'
      },
  ]
  
  
  def get_coco_meta() -> Sequence[Any]:
    return copy.deepcopy(_COCO_META)
  
  
  def get_id_mapping() -> Mapping[int, int]:
    """Creates a dictionary mapping the original category_id into continuous ones.
  
    Specifically, in coco annotations, category_id ranges from 1 to 200. Since not
    every id between 1 to 200 is used, we map them to contiguous ids (1 to 133),
    which saves memory and computation to some degree.
  
    Returns:
      A dictionary mapping original category id to contiguous category ids.
    """
    id_mapping = {}
    for i in range(len(_COCO_META)):
      id_mapping[_COCO_META[i]['id']] = i + 1
    return id_mapping
  
  
  def get_id_mapping_inverse() -> Sequence[int]:
    """Creates a tuple mapping the continuous ids back to original ones.
  
    Specifically, in coco annotations, category_id ranges from 1 to 200. Since not
    every id between 1 to 200 is used, we map them to contiguous ids (1 to 133)
    via the function get_id_mapping, which saves memory and computation to some
    degree. This function supports remapping back from the contiguous ids to the
    original ones, which is required for COCO official evaluation.
  
    Returns:
      A dictionary mapping contiguous category ids to original COCO category id.
    """
    id_mapping_inverse = (0,) + tuple([ori_cat['id'] for ori_cat in _COCO_META])
    return id_mapping_inverse
  
  
  def get_coco_reduced_meta() -> Sequence[Any]:
    coco_reduced_meta = get_coco_meta()
    id_mapping = get_id_mapping()
    for i in range(len(coco_reduced_meta)):
      coco_reduced_meta[i].update({'id': id_mapping[coco_reduced_meta[i]['id']]})
    return coco_reduced_meta
  