class_docstr: Module, which extracts patches using input images and local affine frames (LAFs).
  
  Then runs :class:`~kornia.feature.PatchDominantGradientOrientation` or
  :class:`~kornia.feature.OriNet` on patches and then rotates the LAFs by the estimated angles
  
  Args:
      patch_size:
      num_angular_bins:
      angle_detector: Patch orientation estimator, e.g. :class:`~kornia.feature.PatchDominantGradientOrientation`
        or OriNet.
class_docstr_tok: ["Module",",","which","extracts","patches","using","input","images","and","local","affine","frames","(","LAFs",")",".","Then","runs",":","class",":","`","~kornia.feature.PatchDominantGradientOrientation","`","or",":","class",":","`","~kornia.feature.OriNet","`","on","patches","and","then","rotates","the","LAFs","by","the","estimated","angles","Args",":","patch_size",":","num_angular_bins",":","angle_detector",":","Patch","orientation","estimator",",","e.g",".",":","class",":","`","~kornia.feature.PatchDominantGradientOrientation","`","or","OriNet","."]
code: def __repr__(self) -> str:
      return f"{self.__class__.__name__}(patch_size={self.patch_size}, angle_detector={self.angle_detector})"
  
imports: from typing import Dict, Optional
  import torch
  import torch.nn.functional
  from torch import nn
  from kornia.constants import pi
  from kornia.core.check import KORNIA_CHECK_LAF, KORNIA_CHECK_SHAPE
  from kornia.filters import SpatialGradient, get_gaussian_discrete_kernel1d, get_gaussian_kernel2d
  from kornia.geometry import rad2deg
  from kornia.utils.helpers import map_location_to_cpu
  from .laf import extract_patches_from_pyramid, get_laf_orientation, set_laf_orientation
label_desc: Use image node_id 2 for calling the LAFOrienter obj's underlying member method code with example usage: obj.__repr__() and returns: self, str, self, str, self, str