docstr: ...Test creation of a Hawkes Process with exponential kernels
          
code: def test_hawkes_exponential_kernels(self):
      """...Test creation of a Hawkes Process with exponential kernels"""
  
      kernel_0 = None
      for i, j in product(range(self.n_nodes), range(self.n_nodes)):
          kernel_ij = self.hawkes.kernels[i, j]
  
          if np.linalg.norm(self.adjacency[i, j, :]) == 0:
              self.assertEqual(kernel_ij.__class__, HawkesKernel0)
  
              # We check that all 0 adjacency share the same kernel 0
              # This might save lots of memory with very large,
              # very sparse adjacency matrices
              if kernel_0 is None:
                  kernel_0 = kernel_ij
              else:
                  self.assertEqual(kernel_0, kernel_ij)
  
          else:
              self.assertEqual(kernel_ij.__class__, HawkesKernelSumExp)
              np.testing.assert_array_equal(
                  kernel_ij.decays, self.decays
              )
              np.testing.assert_array_equal(
                  kernel_ij.intensities, self.adjacency[i, j, :]
              )
  
      np.testing.assert_array_equal(self.baseline, self.hawkes.baseline)
  
file_path: tick/tick/hawkes/simulation/tests/simu_hawkes_sumexp_kernels_test.py
imports: import unittest
  from itertools import product
  import numpy
  from tick.hawkes import SimuHawkesSumExpKernels, HawkesKernel0, HawkesKernelSumExp
label_desc: Use image node_id 2 for calling the Test obj's underlying member method code with example usage: obj.test_hawkes_exponential_kernels() without return types