class_docstr: Module that computes Multiple Kernel local descriptors.
  
  This is based on the paper "Understanding and Improving Kernel Local Descriptors".
  See :cite:`mukundan2019understanding` for more details.
  
  Args:
      patch_size: Input patch size in pixels.
      kernel_type: Parametrization of kernel ``'concat'``, ``'cart'``, ``'polar'``.
      whitening: Whitening transform to apply ``None``, ``'lw'``, ``'pca'``, ``'pcawt'``, ``'pcaws'``.
      training_set: Set that model was trained on ``'liberty'``, ``'notredame'``, ``'yosemite'``.
      output_dims: Dimensionality reduction.
  
  Returns:
      Explicit cartesian or polar embedding.
  
  Shape:
      - Input: :math:`(B, in_{dims}, fmap_{size}, fmap_{size})`.
      - Output: :math:`(B, out_{dims}, fmap_{size}, fmap_{size})`,
  
  Examples:
      >>> patches = torch.rand(23, 1, 32, 32)
      >>> mkd = MKDDescriptor(patch_size=32,
      ...                     kernel_type='concat',
      ...                     whitening='pcawt',
      ...                     training_set='liberty',
      ...                     output_dims=128)
      >>> desc = mkd(patches) # 23x128
class_docstr_tok: ["Module","that","computes","Multiple","Kernel","local","descriptors",".","This","is","based","on","the","paper","``","Understanding","and","Improving","Kernel","Local","Descriptors","''",".","See",":","cite",":","`","mukundan2019understanding","`","for","more","details",".","Args",":","patch_size",":","Input","patch","size","in","pixels",".","kernel_type",":","Parametrization","of","kernel","``","'concat","'","``",",","``","'cart","'","``",",","``","'polar","'","``",".","whitening",":","Whitening","transform","to","apply","``","None","``",",","``","'lw","'","``",",","``","'pca","'","``",",","``","'pcawt","'","``",",","``","'pcaws","'","``",".","training_set",":","Set","that","model","was","trained","on","``","'liberty","'","``",",","``","'notredame","'","``",",","``","'yosemite","'","``",".","output_dims",":","Dimensionality","reduction",".","Returns",":","Explicit","cartesian","or","polar","embedding",".","Shape",":","-","Input",":",":","math",":","`","(","B",",","in_","{","dims","}",",","fmap_","{","size","}",",","fmap_","{","size","}",")","`",".","-","Output",":",":","math",":","`","(","B",",","out_","{","dims","}",",","fmap_","{","size","}",",","fmap_","{","size","}",")","`",",","Examples",":",">",">",">","patches","=","torch.rand","(","23",",","1",",","32",",","32",")",">",">",">","mkd","=","MKDDescriptor","(","patch_size=32",",","...","kernel_type='concat","'",",","...","whitening='pcawt","'",",","...","training_set='liberty","'",",","...","output_dims=128",")",">",">",">","desc","=","mkd","(","patches",")","#","23x128"]
code: def __repr__(self) -> str:
      return (
          f"{self.__class__.__name__}("
          f"patch_size={self.patch_size}, "
          f"kernel_type={self.kernel_type}, "
          f"whitening={self.whitening}, "
          f"training_set={self.training_set}, "
          f"output_dims={self.output_dims})"
      )
  
imports: from typing import Any, Dict, List, Tuple, Union
  import torch
  import torch.nn.functional
  from torch import nn
  from kornia.constants import pi
  from kornia.core import Tensor, cos, sin, tensor, zeros
  from kornia.filters import GaussianBlur2d, SpatialGradient
  from kornia.geometry.conversions import cart2pol
  from kornia.utils import create_meshgrid
  from kornia.utils.helpers import map_location_to_cpu
label_desc: Use image node_id 3 for calling the MKDDescriptor obj's underlying member method code with example usage: obj.__repr__() and returns: self, str, self, str, self, str, self, str, self, str, self, str