class_docstr: Hawkes process model for sum of exponential kernels with fixed and
  given decays.
  It is modeled with (opposite) log likelihood loss:
  
  .. math::
      \sum_{i=1}^{D} \left(
          \int_0^T \lambda_i(t) dt
          - \int_0^T \log \lambda_i(t) dN_i(t)
      \right)
  
  where :math:`\lambda_i` is the intensity:
  
  .. math::
      \forall i \in [1 \dots D], \quad
      \lambda_i(t) = \mu_i + \sum_{j=1}^D
      \sum_{t_k^j < t} \phi_{ij}(t - t_k^j)
  
  where
  
  * :math:`D` is the number of nodes
  * :math:`\mu_i` are the baseline intensities
  * :math:`\phi_{ij}` are the kernels
  * :math:`t_k^j` are the timestamps of all events of node :math:`j`
  
  and with a sum-exponential parametrisation of the kernels
  
  .. math::
      \phi_{ij}(t) = \sum_{u=1}^{U} \alpha^u_{ij} \beta^u
                     \exp (- \beta^u t) 1_{t > 0}
  
  In our implementation we denote:
  
  * Integer :math:`D` by the attribute `n_nodes`
  * Integer :math:`U` by the attribute `n_decays`
  * Vector :math:`\beta \in \mathbb{R}^{U}` by the
    parameter `decays`. This parameter is given to the model
  
  Parameters
  ----------
  decays : `numpy.ndarray`, shape=(n_decays, )
      An array giving the different decays of the exponentials kernels.
  
  n_threads : `int`, default=1
      Number of threads used for parallel computation.
  
      * if ``int <= 0``: the number of threads available on
        the CPU
      * otherwise the desired number of threads
  
  Attributes
  ----------
  n_nodes : `int` (read-only)
      Number of components, or dimension of the Hawkes model
  
  n_decays : `int` (read-only)
      Number of decays used in the sum-exponential kernel
  
  data : `list` of `numpy.array` (read-only)
      The events given to the model through `fit` method.
      Note that data given through `incremental_fit` is not stored
class_docstr_tok: ["Hawkes","process","model","for","sum","of","exponential","kernels","with","fixed","and","given","decays",".","It","is","modeled","with","(","opposite",")","log","likelihood","loss",":","..","math",":",":","\\sum_","{","i=1","}","^","{","D","}","\\left","(","\\int_0^T","\\lambda_i","(","t",")","dt","-","\\int_0^T","\\log","\\lambda_i","(","t",")","dN_i","(","t",")","\\right",")","where",":","math",":","`","\\lambda_i","`","is","the","intensity",":","..","math",":",":","\\forall","i","\\in","[","1","\\dots","D","]",",","\\quad","\\lambda_i","(","t",")","=","\\mu_i","+","\\sum_","{","j=1","}","^D","\\sum_","{","t_k^j","<","t","}","\\phi_","{","ij","}","(","t","-","t_k^j",")","where","*",":","math",":","`","D","`","is","the","number","of","nodes","*",":","math",":","`","\\mu_i","`","are","the","baseline","intensities","*",":","math",":","`","\\phi_","{","ij","}","`","are","the","kernels","*",":","math",":","`","t_k^j","`","are","the","timestamps","of","all","events","of","node",":","math",":","`","j","`","and","with","a","sum-exponential","parametrisation","of","the","kernels","..","math",":",":","\\phi_","{","ij","}","(","t",")","=","\\sum_","{","u=1","}","^","{","U","}","\\alpha^u_","{","ij","}","\\beta^u","\\exp","(","-","\\beta^u","t",")","1_","{","t",">","0","}","In","our","implementation","we","denote",":","*","Integer",":","math",":","`","D","`","by","the","attribute","`","n_nodes","`","*","Integer",":","math",":","`","U","`","by","the","attribute","`","n_decays","`","*","Vector",":","math",":","`","\\beta","\\in","\\mathbb","{","R","}","^","{","U","}","`","by","the","parameter","`","decays","`",".","This","parameter","is","given","to","the","model","Parameters","--","--","--","--","--","decays",":","`","numpy.ndarray","`",",","shape=","(","n_decays",",",")","An","array","giving","the","different","decays","of","the","exponentials","kernels",".","n_threads",":","`","int","`",",","default=1","Number","of","threads","used","for","parallel","computation",".","*","if","``","int","<","=","0","``",":","the","number","of","threads","available","on","the","CPU","*","otherwise","the","desired","number","of","threads","Attributes","--","--","--","--","--","n_nodes",":","`","int","`","(","read-only",")","Number","of","components",",","or","dimension","of","the","Hawkes","model","n_decays",":","`","int","`","(","read-only",")","Number","of","decays","used","in","the","sum-exponential","kernel","data",":","`","list","`","of","`","numpy.array","`","(","read-only",")","The","events","given","to","the","model","through","`","fit","`","method",".","Note","that","data","given","through","`","incremental_fit","`","is","not","stored"]
code: def _rand_max(self):
      # This allows to obtain the range of the random sampling when
      # using a stochastic optimization algorithm
      return self.n_jumps
  
file_path: tick/tick/hawkes/model/model_hawkes_sumexpkern_loglik.py
imports: import numpy
  from tick.base_model import ModelSecondOrder, ModelSelfConcordant, LOSS_AND_GRAD
  from tick.hawkes.model.build.hawkes_model import ModelHawkesSumExpKernLogLik
  from .base import ModelHawkes
label_desc: Use image node_id 7 for calling the ModelHawkesSumExpKernLogLik obj's underlying member method code with example usage: obj._rand_max() and returns: self