class_docstr: Helper that visits all nodes in the AST tree and assigns .first_token and .last_token attributes
  to each of them. This is the heart of the token-marking logic.
class_docstr_tok: ["Helper","that","visits","all","nodes","in","the","AST","tree","and","assigns",".first_token","and",".last_token","attributes","to","each","of","them",".","This","is","the","heart","of","the","token-marking","logic","."]
code: def handle_num(
      self,
      node,  # type: AstNode
      value,  # type: Union[complex, int, numbers.Number]
      first_token,  # type: util.Token
      last_token,  # type: util.Token
  ):
      # type: (...) -> Tuple[util.Token, util.Token]
      # A constant like '-1' gets turned into two tokens; this will skip the '-'.
      while util.match_token(last_token, token.OP):
          last_token = self._code.next_token(last_token)
  
      if isinstance(value, complex):
          # A complex number like -2j cannot be compared directly to 0
          # A complex number like 1-2j is expressed as a binary operation
          # so we don't need to worry about it
          value = value.imag
  
      # This makes sure that the - is included
      if value < 0 and first_token.type == token.NUMBER:  # type: ignore[operator]
          first_token = self._code.prev_token(first_token)
      return (first_token, last_token)
  
imports: import ast
  import numbers
  import sys
  import token
  from ast import Module
  from typing import Callable, List, Union, cast, Optional, Tuple, TYPE_CHECKING
  import six
  from .None import util
  from .asttokens import ASTTokens
  from .util import AstConstant
  from .astroid_compat import astroid_node_classes, BaseContainer
label_desc: Use image node_id 25 for calling the MarkTokens obj's underlying member method code with example usage: obj.handle_num(node, value, first_token, last_token) and returns: first_token,  last_token