class_docstr: `iNaturalist <https://github.com/visipedia/inat_comp>`_ Dataset.
  
  Args:
      root (string): Root directory of dataset where the image files are stored.
          This class does not require/use annotation files.
      version (string, optional): Which version of the dataset to download/use. One of
          '2017', '2018', '2019', '2021_train', '2021_train_mini', '2021_valid'.
          Default: `2021_train`.
      target_type (string or list, optional): Type of target to use, for 2021 versions, one of:
  
          - ``full``: the full category (species)
          - ``kingdom``: e.g. "Animalia"
          - ``phylum``: e.g. "Arthropoda"
          - ``class``: e.g. "Insecta"
          - ``order``: e.g. "Coleoptera"
          - ``family``: e.g. "Cleridae"
          - ``genus``: e.g. "Trichodes"
  
          for 2017-2019 versions, one of:
  
          - ``full``: the full (numeric) category
          - ``super``: the super category, e.g. "Amphibians"
  
          Can also be a list to output a tuple with all specified target types.
          Defaults to ``full``.
      transform (callable, optional): A function/transform that takes in a PIL image
          and returns a transformed version. E.g, ``transforms.RandomCrop``
      target_transform (callable, optional): A function/transform that takes in the
          target and transforms it.
      download (bool, optional): If true, downloads the dataset from the internet and
          puts it in root directory. If dataset is already downloaded, it is not
          downloaded again.
docstr: Initialize based on 2021 layout
docstr_tok: ["Initialize","based","on","2021","layout"]
code: def _init_2021(self) -> None:
      """Initialize based on 2021 layout"""
  
      self.all_categories = sorted(os.listdir(self.root))
  
      # map: category type -> name of category -> index
      self.categories_index = {k: {} for k in CATEGORIES_2021}
  
      for dir_index, dir_name in enumerate(self.all_categories):
          pieces = dir_name.split("_")
          if len(pieces) != 8:
              raise RuntimeError(
                  f"Unexpected category name {dir_name}, wrong number of pieces"
              )
          if pieces[0] != f"{dir_index:05d}":
              raise RuntimeError(
                  f"Unexpected category id {pieces[0]}, expecting {dir_index:05d}"
              )
          cat_map = {}
          for cat, name in zip(CATEGORIES_2021, pieces[1:7]):
              if name in self.categories_index[cat]:
                  cat_id = self.categories_index[cat][name]
              else:
                  cat_id = len(self.categories_index[cat])
                  self.categories_index[cat][name] = cat_id
              cat_map[cat] = cat_id
          self.categories_map.append(cat_map)
  
file_path: vision/torchvision/datasets/inaturalist.py
imports: import os
  import os.path
  from typing import Any, Callable, Dict, List, Optional, Tuple, Union
  from PIL import Image
  from .utils import download_and_extract_archive, verify_str_arg
  from .vision import VisionDataset
label_desc: Use image node_id 2 for calling the INaturalist obj's underlying member method code with example usage: obj._init_2021() without return types