code: def __call__(
      self,
      image: Image.Image,
      auto_resize: bool = True,
      image_size=None,
  ) -> None:
      gradcam = self.gradcam
      get_loss = self.get_loss
      if auto_resize and image_size is None:
          image_size = self.learner.ds.img_sz_list.get_size()
      if image_size:
          image = image.resize(image_size)
  
      X = np.asarray(image, np.float32)
      X = self.learner.prewhiten(X)
      X = np.expand_dims(X, 0)
  
      cam = gradcam(
          get_loss,
          X,
          penultimate_layer=-1,  # model.layers number
          seek_penultimate_conv_layer=True,
      )
      cam = normalize(cam)
      heatmap = np.uint8(cm.jet(cam[0])[..., :3] * 255)
      plt.imshow(image)
      plt.imshow(heatmap, cmap="jet", alpha=0.5)
      plt.show()
  
imports: import inspect
  from functools import partial
  from typing import Any, List, Optional, Union
  import matplotlib.cm
  import matplotlib.pyplot
  import numpy
  import tensorflow
  import tensorflow_addons
  from PIL import Image
  from tensorflow import keras
  from tensorflow.keras.models import Model
  from tf_keras_vis.gradcam import Gradcam, GradcamPlusPlus
  from tf_keras_vis.utils import normalize
  from typeguard import check_argument_types, typechecked
  from chitra.import_utils import is_installed
  from .datagenerator import Dataset
label_desc: Use image node_id 2 for calling the InterpretModel obj's underlying member method code with example usage: obj.__call__(image, auto_resize, image_size) without return types