class_docstr: Module version of matching functions.
  
  See :func:`~kornia.feature.match_nn`, :func:`~kornia.feature.match_snn`,
      :func:`~kornia.feature.match_mnn` or :func:`~kornia.feature.match_smnn` for more details.
  
  Args:
      match_mode: type of matching, can be `fginn`.
      th: threshold on distance ratio, or other quality measure.
class_docstr_tok: ["Module","version","of","matching","functions",".","See",":","func",":","`","~kornia.feature.match_nn","`",",",":","func",":","`","~kornia.feature.match_snn","`",",",":","func",":","`","~kornia.feature.match_mnn","`","or",":","func",":","`","~kornia.feature.match_smnn","`","for","more","details",".","Args",":","match_mode",":","type","of","matching",",","can","be","`","fginn","`",".","th",":","threshold","on","distance","ratio",",","or","other","quality","measure","."]
docstr: Args:
      desc1: Batch of descriptors of a shape :math:`(B1, D)`.
      desc2: Batch of descriptors of a shape :math:`(B2, D)`.
      lafs1: LAFs of a shape :math:`(1, B1, 2, 3)`.
      lafs2: LAFs of a shape :math:`(1, B2, 2, 3)`.
  
  Return:
      - Descriptor distance of matching descriptors, shape of :math:`(B3, 1)`.
      - Long tensor indexes of matching descriptors in desc1 and desc2,
          shape of :math:`(B3, 2)` where :math:`0 <= B3 <= B1`.
docstr_tok: ["Args",":","desc1",":","Batch","of","descriptors","of","a","shape",":","math",":","`","(","B1",",","D",")","`",".","desc2",":","Batch","of","descriptors","of","a","shape",":","math",":","`","(","B2",",","D",")","`",".","lafs1",":","LAFs","of","a","shape",":","math",":","`","(","1",",","B1",",","2",",","3",")","`",".","lafs2",":","LAFs","of","a","shape",":","math",":","`","(","1",",","B2",",","2",",","3",")","`",".","Return",":","-","Descriptor","distance","of","matching","descriptors",",","shape","of",":","math",":","`","(","B3",",","1",")","`",".","-","Long","tensor","indexes","of","matching","descriptors","in","desc1","and","desc2",",","shape","of",":","math",":","`","(","B3",",","2",")","`","where",":","math",":","`","0","<","=","B3","<","=","B1","`","."]
code: def forward(
      self, desc1: Tensor, desc2: Tensor, lafs1: Tensor, lafs2: Tensor
  ) -> Tuple[Tensor, Tensor]:
      """
      Args:
          desc1: Batch of descriptors of a shape :math:`(B1, D)`.
          desc2: Batch of descriptors of a shape :math:`(B2, D)`.
          lafs1: LAFs of a shape :math:`(1, B1, 2, 3)`.
          lafs2: LAFs of a shape :math:`(1, B2, 2, 3)`.
  
      Return:
          - Descriptor distance of matching descriptors, shape of :math:`(B3, 1)`.
          - Long tensor indexes of matching descriptors in desc1 and desc2,
              shape of :math:`(B3, 2)` where :math:`0 <= B3 <= B1`.
      """
      if self.match_mode == "fginn":
          params = _get_default_fginn_params()
          params.update(self.params)
          out = match_fginn(
              desc1,
              desc2,
              lafs1,
              lafs2,
              params["th"],
              params["spatial_th"],
              params["mutual"],
          )
      elif self.match_mode == "adalam":
          _params = get_adalam_default_config()
          _params.update(self.params)  # type: ignore[typeddict-item]
          out = match_adalam(desc1, desc2, lafs1, lafs2, config=_params)
      else:
          raise NotImplementedError
      return out
  
imports: from typing import Any, ClassVar, Dict, List, Optional, Tuple
  import torch
  from kornia.core import Module, Tensor, concatenate
  from kornia.core.check import KORNIA_CHECK_DM_DESC, KORNIA_CHECK_SHAPE
  from kornia.feature.laf import get_laf_center
  from kornia.testing import is_mps_tensor_safe
  from .adalam import get_adalam_default_config, match_adalam
label_desc: Use image node_id 2 for calling the GeometryAwareDescriptorMatcher obj's underlying member method code with example usage: obj.forward(desc1, desc2, lafs1, lafs2) and returns: out