class_docstr: LazyType provides solutions for several conflicts when applying lazy dependencies,
      type annotations and runtime class checking.
  It works both for runtime and type checking phases.
  
  * conflicts 1
  
  isinstance(obj, class) requires importing the class first, which breaks
  lazy dependencies
  
  solution:
  >>> LazyType("numpy.ndarray").isinstance(obj)
  
  * conflicts 2
  
  `isinstance(obj, str)` will narrow obj types down to str. But it only works for the
  case that the class is the type at the same time. For numpy.ndarray which the type
  is actually numpy.typing.NDArray, we had to hack the type checking.
  
  solution:
  >>> if TYPE_CHECKING:
  >>>     from numpy.typing import NDArray
  >>> LazyType["NDArray"]("numpy.ndarray").isinstance(obj)`
  >>> #  this will narrow the obj to NDArray with PEP-647
  
  * conflicts 3
  
  compare/refer/map classes before importing them.
  
  >>> HANDLER_MAP = {
  >>>     LazyType("numpy.ndarray"): ndarray_handler,
  >>>     LazyType("pandas.DataFrame"): pdframe_handler,
  >>> }
  >>>
  >>> HANDLER_MAP[LazyType(numpy.ndarray)]](array)
  >>> LazyType("numpy.ndarray") == numpy.ndarray
class_docstr_tok: ["LazyType","provides","solutions","for","several","conflicts","when","applying","lazy","dependencies",",","type","annotations","and","runtime","class","checking",".","It","works","both","for","runtime","and","type","checking","phases",".","*","conflicts","1","isinstance","(","obj",",","class",")","requires","importing","the","class","first",",","which","breaks","lazy","dependencies","solution",":",">",">",">","LazyType","(","``","numpy.ndarray","''",")",".isinstance","(","obj",")","*","conflicts","2","`","isinstance","(","obj",",","str",")","`","will","narrow","obj","types","down","to","str",".","But","it","only","works","for","the","case","that","the","class","is","the","type","at","the","same","time",".","For","numpy.ndarray","which","the","type","is","actually","numpy.typing.NDArray",",","we","had","to","hack","the","type","checking",".","solution",":",">",">",">","if","TYPE_CHECKING",":",">",">",">","from","numpy.typing","import","NDArray",">",">",">","LazyType","[","``","NDArray","''","]","(","``","numpy.ndarray","''",")",".isinstance","(","obj",")","`",">",">",">","#","this","will","narrow","the","obj","to","NDArray","with","PEP-647","*","conflicts","3","compare\/refer\/map","classes","before","importing","them",".",">",">",">","HANDLER_MAP","=","{",">",">",">","LazyType","(","``","numpy.ndarray","''",")",":","ndarray_handler",",",">",">",">","LazyType","(","``","pandas.DataFrame","''",")",":","pdframe_handler",",",">",">",">","}",">",">",">",">",">",">","HANDLER_MAP","[","LazyType","(","numpy.ndarray",")","]","]","(","array",")",">",">",">","LazyType","(","``","numpy.ndarray","''",")","==","numpy.ndarray"]
code: def issubclass(self, klass: type) -> bool:
      try:
          return issubclass(klass, self.get_class(import_module=False))
      except ValueError:
          return False
  
imports: from __future__ import annotations
  import io
  import logging
  import os
  import sys
  import typing
  from dataclasses import dataclass
  from datetime import date
  from datetime import datetime
  from datetime import time
  from datetime import timedelta
  from types import TracebackType
  from typing import get_args
  from typing import get_origin
label_desc: Use image node_id 12 for calling the LazyType obj's underlying member method code with example usage: obj.issubclass(klass) and returns: issubclass, False