code: def discretization_of_exp_kernel(
      n_nodes, a, b, kernel_support, kernel_size
  ):
      assert (n_nodes, n_nodes) == a.shape
      assert a.shape == b.shape
      assert kernel_size > 0
      assert kernel_support > 0.0
      abscissa = np.linspace(0, kernel_support, kernel_size)
      abscissa_ = np.expand_dims(abscissa, axis=0)
      abscissa_ = np.repeat(abscissa_, repeats=n_nodes, axis=0)
      abscissa__ = np.expand_dims(abscissa_, axis=0)
      abscissa__ = np.repeat(abscissa__, repeats=n_nodes, axis=0)
      assert abscissa_.shape == (n_nodes, kernel_size)
      assert abscissa__.shape == (n_nodes, n_nodes, kernel_size)
      a_ = np.repeat(
          np.expand_dims(a, axis=-1), repeats=kernel_size, axis=2
      )
      b_ = np.repeat(
          np.expand_dims(b, axis=-1), repeats=kernel_size, axis=2
      )
      assert a_.shape == (n_nodes, n_nodes, kernel_size)
      assert a_.shape == b_.shape
      assert a_.shape == abscissa__.shape
      res_ = a_ * b_ * np.exp(-b_ * abscissa__)
      assert res_.shape == (n_nodes, n_nodes, kernel_size)
      return res_
  
imports: import unittest
  import numpy
  from tick.hawkes.inference import HawkesEM
  from tick.hawkes.model.tests.model_hawkes_test_utils import hawkes_intensities, hawkes_log_likelihood
  from tick.hawkes import SimuHawkes, HawkesKernelTimeFunc, HawkesKernelExp, SimuHawkesExpKernels
  from tick.base import TimeFunction
label_desc: Use image node_id 4 for calling a global function with example usage: discretization_of_exp_kernel(n_nodes, a, b, kernel_support, kernel_size) and returns: res_