code: def match_smnn(
      desc1: Tensor,
      desc2: Tensor,
      th: float = 0.95,
      dm: Optional[Tensor] = None,
  ) -> Tuple[Tensor, Tensor]:
      """Function, which finds mutual nearest neighbors in desc2 for each vector in desc1.
  
      the method satisfies first to second nearest neighbor distance <= th.
  
      If the distance matrix dm is not provided, :py:func:`torch.cdist` is used.
  
      Args:
          desc1: Batch of descriptors of a shape :math:`(B1, D)`.
          desc2: Batch of descriptors of a shape :math:`(B2, D)`.
          th: distance ratio threshold.
          dm: Tensor containing the distances from each descriptor in desc1
            to each descriptor in desc2, shape of :math:`(B1, B2)`.
  
      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 0 <= B3 <= B1.
      """
      KORNIA_CHECK_SHAPE(desc1, ["B", "DIM"])
      KORNIA_CHECK_SHAPE(desc2, ["B", "DIM"])
  
      if (desc1.shape[0] < 2) or (desc2.shape[0] < 2):
          return _no_match(desc1)
      distance_matrix = _get_lazy_distance_matrix(desc1, desc2, dm)
  
      dists1, idx1 = match_snn(desc1, desc2, th, distance_matrix)
      dists2, idx2 = match_snn(desc2, desc1, th, distance_matrix.t())
  
      if len(dists2) > 0 and len(dists1) > 0:
          idx2 = idx2.flip(1)
          if not is_mps_tensor_safe(idx1):
              idxs_dm = torch.cdist(idx1.float(), idx2.float(), p=1.0)
          else:
              idxs1_rep = idx1.to(desc1).repeat_interleave(
                  idx2.size(0), dim=0
              )
              idxs_dm = (
                  (idx2.to(desc2).repeat(idx1.size(0), 1) - idxs1_rep)
                  .abs()
                  .sum(dim=1)
              )
              idxs_dm = idxs_dm.reshape(idx1.size(0), idx2.size(0))
          mutual_idxs1 = idxs_dm.min(dim=1)[0] < 1e-8
          mutual_idxs2 = idxs_dm.min(dim=0)[0] < 1e-8
          good_idxs1 = idx1[mutual_idxs1.view(-1)]
          good_idxs2 = idx2[mutual_idxs2.view(-1)]
          dists1_good = dists1[mutual_idxs1.view(-1)]
          dists2_good = dists2[mutual_idxs2.view(-1)]
          _, idx_upl1 = torch.sort(good_idxs1[:, 0])
          _, idx_upl2 = torch.sort(good_idxs2[:, 0])
          good_idxs1 = good_idxs1[idx_upl1]
          match_dists = torch.max(
              dists1_good[idx_upl1], dists2_good[idx_upl2]
          )
          matches_idxs = good_idxs1
          match_dists, matches_idxs = match_dists.view(
              -1, 1
          ), matches_idxs.view(-1, 2)
      else:
          match_dists, matches_idxs = _no_match(distance_matrix)
      return match_dists, matches_idxs
  
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 8 for calling a global function with example usage: match_smnn(desc1, desc2, th, dm) and returns: match_dists,  matches_idxs, _no_match