class_docstr: Module to get local descriptors, corresponding to LAFs (keypoints).
  
  Internally uses :func:`~kornia.feature.get_laf_descriptors`.
  
  Args:
      patch_descriptor_module: patch descriptor module, e.g. :class:`~kornia.feature.SIFTDescriptor`
          or :class:`~kornia.feature.HardNet`. Default: :class:`~kornia.feature.HardNet`.
      patch_size: patch size in pixels, which descriptor expects.
      grayscale_descriptor: ``True`` if patch_descriptor expects single-channel image.
class_docstr_tok: ["Module","to","get","local","descriptors",",","corresponding","to","LAFs","(","keypoints",")",".","Internally","uses",":","func",":","`","~kornia.feature.get_laf_descriptors","`",".","Args",":","patch_descriptor_module",":","patch","descriptor","module",",","e.g",".",":","class",":","`","~kornia.feature.SIFTDescriptor","`","or",":","class",":","`","~kornia.feature.HardNet","`",".","Default",":",":","class",":","`","~kornia.feature.HardNet","`",".","patch_size",":","patch","size","in","pixels",",","which","descriptor","expects",".","grayscale_descriptor",":","``","True","``","if","patch_descriptor","expects","single-channel","image","."]
docstr: Three stage local feature detection.
  
  First the location and scale of interest points are determined by
  detect function. Then affine shape and orientation.
  
  Args:
      img: image features with shape :math:`(B,C,H,W)`.
      lafs: local affine frames :math:`(B,N,2,3)`.
  
  Returns:
      Local descriptors of shape :math:`(B,N,D)` where :math:`D` is descriptor size.
docstr_tok: ["Three","stage","local","feature","detection",".","First","the","location","and","scale","of","interest","points","are","determined","by","detect","function",".","Then","affine","shape","and","orientation",".","Args",":","img",":","image","features","with","shape",":","math",":","`","(","B",",","C",",","H",",","W",")","`",".","lafs",":","local","affine","frames",":","math",":","`","(","B",",","N,2,3",")","`",".","Returns",":","Local","descriptors","of","shape",":","math",":","`","(","B",",","N",",","D",")","`","where",":","math",":","`","D","`","is","descriptor","size","."]
code: def forward(self, img: Tensor, lafs: Tensor) -> Tensor:
      r"""Three stage local feature detection.
  
      First the location and scale of interest points are determined by
      detect function. Then affine shape and orientation.
  
      Args:
          img: image features with shape :math:`(B,C,H,W)`.
          lafs: local affine frames :math:`(B,N,2,3)`.
  
      Returns:
          Local descriptors of shape :math:`(B,N,D)` where :math:`D` is descriptor size.
      """
      return get_laf_descriptors(
          img,
          lafs,
          self.descriptor,
          self.patch_size,
          self.grayscale_descriptor,
      )
  
imports: import warnings
  from typing import ClassVar, Dict, List, Optional, Tuple
  import torch
  from kornia.color import rgb_to_grayscale
  from kornia.constants import pi
  from kornia.core import Device, Module, Tensor, concatenate, deg2rad
  from kornia.core.check import KORNIA_CHECK_LAF
  from kornia.geometry.subpix import ConvQuadInterp3d
  from kornia.geometry.transform import ScalePyramid
  from .affine_shape import LAFAffNetShapeEstimator
  from .hardnet import HardNet
  from .keynet import KeyNetDetector
  from .laf import extract_patches_from_pyramid, get_laf_center, get_laf_orientation, get_laf_scale, scale_laf
  from .lightglue import LightGlue
  from .matching import GeometryAwareDescriptorMatcher, _no_match
  from .orientation import LAFOrienter, OriNet, PassLAF
  from .responses import BlobDoG, BlobDoGSingle, BlobHessian, CornerGFTT
  from .scale_space_detector import Detector_config, MultiResolutionDetector, ScaleSpaceDetector, get_default_detector_config
  from .siftdesc import SIFTDescriptor
label_desc: Use image node_id 3 for calling the LAFDescriptor obj's underlying member method code with example usage: obj.forward(img, lafs) and returns: get_laf_descriptors