class_docstr: Module for differentiable local feature detection, as close as possible to classical local feature detectors
  like Harris, Hessian-Affine or SIFT (DoG).
  
  It has 5 modules inside: scale pyramid generator, response ("cornerness") function,
  soft nms function, affine shape estimator and patch orientation estimator.
  Each of those modules could be replaced with learned custom one, as long, as
  they respect output shape.
  
  Args:
      num_features: Number of features to detect. In order to keep everything batchable,
        output would always have num_features output, even for completely homogeneous images.
      mr_size: multiplier for local feature scale compared to the detection scale.
        6.0 is matching OpenCV 12.0 convention for SIFT.
      scale_pyr_module: generates scale pyramid. See :class:`~kornia.geometry.ScalePyramid` for details.
        Default: ScalePyramid(3, 1.6, 10).
      resp_module: calculates ``'cornerness'`` of the pixel.
      nms_module: outputs per-patch coordinates of the response maxima.
        See :class:`~kornia.geometry.ConvSoftArgmax3d` for details.
      ori_module: for local feature orientation estimation. Default:class:`~kornia.feature.PassLAF`,
         which does nothing. See :class:`~kornia.feature.LAFOrienter` for details.
      aff_module: for local feature affine shape estimation. Default: :class:`~kornia.feature.PassLAF`,
          which does nothing. See :class:`~kornia.feature.LAFAffineShapeEstimator` for details.
      minima_are_also_good: if True, then both response function minima and maxima are detected
          Useful for symmetric response functions like DoG or Hessian. Default is False
class_docstr_tok: ["Module","for","differentiable","local","feature","detection",",","as","close","as","possible","to","classical","local","feature","detectors","like","Harris",",","Hessian-Affine","or","SIFT","(","DoG",")",".","It","has","5","modules","inside",":","scale","pyramid","generator",",","response","(","``","cornerness","''",")","function",",","soft","nms","function",",","affine","shape","estimator","and","patch","orientation","estimator",".","Each","of","those","modules","could","be","replaced","with","learned","custom","one",",","as","long",",","as","they","respect","output","shape",".","Args",":","num_features",":","Number","of","features","to","detect",".","In","order","to","keep","everything","batchable",",","output","would","always","have","num_features","output",",","even","for","completely","homogeneous","images",".","mr_size",":","multiplier","for","local","feature","scale","compared","to","the","detection","scale",".","6.0","is","matching","OpenCV","12.0","convention","for","SIFT",".","scale_pyr_module",":","generates","scale","pyramid",".","See",":","class",":","`","~kornia.geometry.ScalePyramid","`","for","details",".","Default",":","ScalePyramid","(","3",",","1.6",",","10",")",".","resp_module",":","calculates","``","'cornerness","'","``","of","the","pixel",".","nms_module",":","outputs","per-patch","coordinates","of","the","response","maxima",".","See",":","class",":","`","~kornia.geometry.ConvSoftArgmax3d","`","for","details",".","ori_module",":","for","local","feature","orientation","estimation",".","Default",":","class",":","`","~kornia.feature.PassLAF","`",",","which","does","nothing",".","See",":","class",":","`","~kornia.feature.LAFOrienter","`","for","details",".","aff_module",":","for","local","feature","affine","shape","estimation",".","Default",":",":","class",":","`","~kornia.feature.PassLAF","`",",","which","does","nothing",".","See",":","class",":","`","~kornia.feature.LAFAffineShapeEstimator","`","for","details",".","minima_are_also_good",":","if","True",",","then","both","response","function","minima","and","maxima","are","detected","Useful","for","symmetric","response","functions","like","DoG","or","Hessian",".","Default","is","False"]
code: def __repr__(self) -> str:
      return (
          f"{self.__class__.__name__}("
          f"num_features={self.num_features}, "
          f"mr_size={self.mr_size}, "
          f"scale_pyr={self.scale_pyr.__repr__()}, "
          f"resp={self.resp.__repr__()}, "
          f"nms={self.nms.__repr__()}, "
          f"ori={self.ori.__repr__()}, "
          f"aff={self.aff.__repr__()})"
      )
  
imports: import math
  from typing import List, Optional, Tuple
  import torch
  import torch.nn.functional
  from typing_extensions import TypedDict
  from kornia.core import Device, Module, Tensor, concatenate, eye, tensor, where, zeros
  from kornia.core.check import KORNIA_CHECK_SHAPE
  from kornia.geometry.subpix import ConvSoftArgmax3d, NonMaximaSuppression2d
  from kornia.geometry.transform import ScalePyramid, pyrdown, resize
  from .laf import laf_from_center_scale_ori, laf_is_inside_image
  from .orientation import PassLAF
  from .responses import BlobHessian
label_desc: Use image node_id 2 for calling the ScaleSpaceDetector 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, self, str, self, str