class_docstr: Wraps around `cupy.RawModule` and `cupy.RawKernel` to verify CuPy availability
  and lazily compile the latter on first invocation.
  
  The default CuPy behaviour triggers the compilation as soon as the `cupy.RawKernel` object
  is accessed.
class_docstr_tok: ["Wraps","around","`","cupy.RawModule","`","and","`","cupy.RawKernel","`","to","verify","CuPy","availability","and","lazily","compile","the","latter","on","first","invocation",".","The","default","CuPy","behaviour","triggers","the","compilation","as","soon","as","the","`","cupy.RawKernel","`","object","is","accessed","."]
code: def __call__(self, *args, **kwargs):
      self._compile_kernel()
      self._kernel(*args, **kwargs)
  
imports: import operator
  import re
  from collections import defaultdict
  from functools import reduce
  from pathlib import Path
  from typing import Callable, Optional, Tuple
  import numpy
  from ..compat import cupy, has_cupy_gpu
label_desc: Use image node_id 2 for calling the LazyKernel obj's underlying member method code with example usage: obj.__call__() without return types