class_docstr: Mapping bytecode to ast-node based on the source positions, which where introduced in pyhon 3.11.
  In general every ast-node can be exactly referenced by its begin/end line/col_offset, which is stored in the bytecode.
  There are only some exceptions for methods and attributes.
code: def __init__(
      self,
      frame: FrameType,
      stmts: Set[EnhancedAST],
      tree: ast.Module,
      lasti: int,
      source: Source,
  ):
      self.bc_list = get_instructions(frame.f_code)
  
      self.source = source
      self.decorator: Optional[EnhancedAST] = None
  
      # work around for https://github.com/python/cpython/issues/96970
      while self.opname(lasti) == "CACHE":
          lasti -= 2
  
      try:
          # try to map with all match_positions
          self.result = self.find_node(lasti)
      except NotOneValueFound:
          typ: tuple[Type]
          # LOAD_METHOD could load "".join for long "..."%(...) BinOps
          # this can only be associated by using all positions
          if self.opname(lasti) in (
              "LOAD_METHOD",
              "LOAD_ATTR",
              "STORE_ATTR",
              "DELETE_ATTR",
          ):
              # lineno and col_offset of LOAD_METHOD and *_ATTR instructions get set to the beginning of
              # the attribute by the python compiler to improved error messages (PEP-657)
              # we ignore here the start position and try to find the ast-node just by end position and expected node type
              # This is save, because there can only be one attribute ending at a specific point in the source code.
              typ = (ast.Attribute,)
          elif self.opname(lasti) == "CALL":
              # A CALL instruction can be a method call, in which case the lineno and col_offset gets changed by the compiler.
              # Therefore we ignoring here this attributes and searchnig for a Call-node only by end_col_offset and end_lineno.
              # This is save, because there can only be one method ending at a specific point in the source code.
              # One closing ) only belongs to one method.
              typ = (ast.Call,)
          else:
              raise
  
          self.result = self.find_node(
              lasti,
              match_positions=("end_col_offset", "end_lineno"),
              typ=typ,
          )
  
      self.known_issues(self.result, self.instruction(lasti))
  
      self.test_for_decorator(self.result, lasti)
  
      # verify
      if self.decorator is None:
          self.verify(self.result, self.instruction(lasti))
      else:
          assert_(self.decorator in self.result.decorator_list)
  
imports: import ast
  import sys
  import dis
  from types import CodeType, FrameType
  from typing import Any, Callable, Iterator, Optional, Sequence, Set, Tuple, Type, Union, cast
  from .executing import EnhancedAST, NotOneValueFound, Source, only, function_node_types, assert_
  from ._exceptions import KnownIssue, VerifierFailure
  from functools import lru_cache
label_desc: Use image node_id 1 to create a new PositionNodeFinder object from inherited base classes: object with example: obj = PositionNodeFinder(frame, stmts, tree, lasti, source)