class_docstr: Standard anchor generator for 2D anchor-based detectors.
  
  Args:
      strides (list[int] | list[tuple[int, int]]): Strides of anchors
          in multiple feature levels in order (w, h).
      ratios (list[float]): The list of ratios between the height and width
          of anchors in a single level.
      scales (list[int] | None): Anchor scales for anchors in a single level.
          It cannot be set at the same time if `octave_base_scale` and
          `scales_per_octave` are set.
      base_sizes (list[int] | None): The basic sizes
          of anchors in multiple levels.
          If None is given, strides will be used as base_sizes.
          (If strides are non square, the shortest stride is taken.)
      scale_major (bool): Whether to multiply scales first when generating
          base anchors. If true, the anchors in the same row will have the
          same scales. By default it is True in V2.0
      octave_base_scale (int): The base scale of octave.
      scales_per_octave (int): Number of scales for each octave.
          `octave_base_scale` and `scales_per_octave` are usually used in
          retinanet and the `scales` should be None when they are set.
      centers (list[tuple[float, float]] | None): The centers of the anchor
          relative to the feature grid center in multiple feature levels.
          By default it is set to be None and not used. If a list of tuple of
          float is given, they will be used to shift the centers of anchors.
      center_offset (float): The offset of center in proportion to anchors'
          width and height. By default it is 0 in V2.0.
  
  Examples:
      >>> from mmdet.core import AnchorGenerator
      >>> self = AnchorGenerator([16], [1.], [1.], [9])
      >>> all_anchors = self.grid_anchors([(2, 2)], device='cpu')
      >>> print(all_anchors)
      [tensor([[-4.5000, -4.5000,  4.5000,  4.5000],
              [11.5000, -4.5000, 20.5000,  4.5000],
              [-4.5000, 11.5000,  4.5000, 20.5000],
              [11.5000, 11.5000, 20.5000, 20.5000]])]
      >>> self = AnchorGenerator([16, 32], [1.], [1.], [9, 18])
      >>> all_anchors = self.grid_anchors([(2, 2), (1, 1)], device='cpu')
      >>> print(all_anchors)
      [tensor([[-4.5000, -4.5000,  4.5000,  4.5000],
              [11.5000, -4.5000, 20.5000,  4.5000],
              [-4.5000, 11.5000,  4.5000, 20.5000],
              [11.5000, 11.5000, 20.5000, 20.5000]]),         tensor([[-9., -9., 9., 9.]])]
docstr: Generate valid flags of anchors in multiple feature levels.
  
  Args:
      featmap_sizes (list(tuple)): List of feature map sizes in
          multiple feature levels.
      pad_shape (tuple): The padded shape of the image.
      device (str): Device where the anchors will be put on.
  
  Return:
      list(torch.Tensor): Valid flags of anchors in multiple levels.
code: def valid_flags(self, featmap_sizes, pad_shape, device="cuda"):
      """Generate valid flags of anchors in multiple feature levels.
  
      Args:
          featmap_sizes (list(tuple)): List of feature map sizes in
              multiple feature levels.
          pad_shape (tuple): The padded shape of the image.
          device (str): Device where the anchors will be put on.
  
      Return:
          list(torch.Tensor): Valid flags of anchors in multiple levels.
      """
      assert self.num_levels == len(featmap_sizes)
      multi_level_flags = []
      for i in range(self.num_levels):
          anchor_stride = self.strides[i]
          feat_h, feat_w = featmap_sizes[i]
          h, w = pad_shape[:2]
          valid_feat_h = min(int(np.ceil(h / anchor_stride[1])), feat_h)
          valid_feat_w = min(int(np.ceil(w / anchor_stride[0])), feat_w)
          flags = self.single_level_valid_flags(
              (feat_h, feat_w),
              (valid_feat_h, valid_feat_w),
              self.num_base_anchors[i],
              device=device,
          )
          multi_level_flags.append(flags)
      return multi_level_flags
  
imports: import mmcv
  import numpy
  import torch
  from torch.nn.modules.utils import _pair
  from .builder import ANCHOR_GENERATORS
label_desc: Use image node_id 9 for calling the AnchorGenerator obj's underlying member method code with example usage: obj.valid_flags(featmap_sizes, pad_shape, device) and returns: multi_level_flags