class_docstr: Convenience module, which implements DoG detector + (Root)SIFT descriptor. Using
  `kornia.feature.ScaleSpaceDetector` with blur pyramid.
  
  Still not as good as OpenCV/VLFeat because of https://github.com/kornia/kornia/pull/884, but we are working on it
class_docstr_tok: ["Convenience","module",",","which","implements","DoG","detector","+","(","Root",")","SIFT","descriptor",".","Using","`","kornia.feature.ScaleSpaceDetector","`","with","blur","pyramid",".","Still","not","as","good","as","OpenCV\/VLFeat","because","of","https",":","\/\/github.com\/kornia\/kornia\/pull\/884",",","but","we","are","working","on","it"]
code: def __init__(
      self,
      num_features: int = 8000,
      upright: bool = False,
      rootsift: bool = True,
      device: Device = torch.device("cpu"),
  ) -> None:
      patch_size: int = 41
      detector = ScaleSpaceDetector(
          num_features,
          resp_module=BlobDoG(),
          nms_module=ConvQuadInterp3d(10),
          scale_pyr_module=ScalePyramid(3, 1.6, 32, double_image=True),
          ori_module=PassLAF() if upright else LAFOrienter(19),
          scale_space_response=True,
          minima_are_also_good=True,
          mr_size=6.0,
      ).to(device)
      descriptor = LAFDescriptor(
          SIFTDescriptor(patch_size=patch_size, rootsift=rootsift),
          patch_size=patch_size,
          grayscale_descriptor=True,
      ).to(device)
      super().__init__(detector, 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 1 to create a new SIFTFeatureScaleSpace object from inherited base classes: LocalFeature with example: obj = SIFTFeatureScaleSpace(num_features, upright, rootsift, device)