class_docstr: Zero-inflated Poisson log-likelihood.
  
  Often used to model the number of events occurring in a fixed period
  of time when the times at which events occur are independent.
  The pmf of this distribution is
  
  .. math::
  
      f(x \mid \psi, \mu) = \left\{ \begin{array}{l}
          (1-\psi) + \psi e^{-\mu}, \text{if } x = 0 \\
          \psi \frac{e^{-\mu}\mu^x}{x!}, \text{if } x=1,2,3,\ldots
          \end{array} \right.
  
  .. plot::
      :context: close-figs
  
      import matplotlib.pyplot as plt
      import numpy as np
      import scipy.stats as st
      import arviz as az
      plt.style.use('arviz-darkgrid')
      x = np.arange(0, 22)
      psis = [0.7, 0.4]
      mus = [8, 4]
      for psi, mu in zip(psis, mus):
          pmf = st.poisson.pmf(x, mu)
          pmf[0] = (1 - psi) + pmf[0]
          pmf[1:] =  psi * pmf[1:]
          pmf /= pmf.sum()
          plt.plot(x, pmf, '-o', label='$\\psi$ = {}, $\\mu$ = {}'.format(psi, mu))
      plt.xlabel('x', fontsize=12)
      plt.ylabel('f(x)', fontsize=12)
      plt.legend(loc=1)
      plt.show()
  
  ========  ==========================
  Support   :math:`x \in \mathbb{N}_0`
  Mean      :math:`\psi\mu`
  Variance  :math:`\mu + \frac{1-\psi}{\psi}\mu^2`
  ========  ==========================
  
  Parameters
  ----------
  psi : tensor_like of float
      Expected proportion of Poisson variates (0 < psi < 1)
  mu : tensor_like of float
      Expected number of occurrences during the given interval
      (mu >= 0).
class_docstr_tok: ["Zero-inflated","Poisson","log-likelihood",".","Often","used","to","model","the","number","of","events","occurring","in","a","fixed","period","of","time","when","the","times","at","which","events","occur","are","independent",".","The","pmf","of","this","distribution","is","..","math",":",":","f","(","x","\\mid","\\psi",",","\\mu",")","=","\\left\\","{","\\begin","{","array","}","{","l","}","(","1-\\psi",")","+","\\psi","e^","{","-\\mu","}",",","\\text","{","if","}","x","=","0","\\\\","\\psi","\\frac","{","e^","{","-\\mu","}","\\mu^x","}","{","x","!","}",",","\\text","{","if","}","x=1,2,3",",","\\ldots","\\end","{","array","}","\\right",".","..","plot",":",":",":","context",":","close-figs","import","matplotlib.pyplot","as","plt","import","numpy","as","np","import","scipy.stats","as","st","import","arviz","as","az","plt.style.use","(","'arviz-darkgrid","'",")","x","=","np.arange","(","0",",","22",")","psis","=","[","0.7",",","0.4","]","mus","=","[","8",",","4","]","for","psi",",","mu","in","zip","(","psis",",","mus",")",":","pmf","=","st.poisson.pmf","(","x",",","mu",")","pmf","[","0","]","=","(","1","-","psi",")","+","pmf","[","0","]","pmf","[","1",":","]","=","psi","*","pmf","[","1",":","]","pmf","\/=","pmf.sum","(",")","plt.plot","(","x",",","pmf",",","'-o","'",",","label=","'","$","\\\\psi","$","=","{","}",",","$","\\\\mu","$","=","{","}","'.format","(","psi",",","mu",")",")","plt.xlabel","(","'","x","'",",","fontsize=12",")","plt.ylabel","(","'","f","(","x",")","'",",","fontsize=12",")","plt.legend","(","loc=1",")","plt.show","(",")","========","==========================","Support",":","math",":","`","x","\\in","\\mathbb","{","N","}","_0","`","Mean",":","math",":","`","\\psi\\mu","`","Variance",":","math",":","`","\\mu","+","\\frac","{","1-\\psi","}","{","\\psi","}","\\mu^2","`","========","==========================","Parameters","--","--","--","--","--","psi",":","tensor_like","of","float","Expected","proportion","of","Poisson","variates","(","0","<","psi","<","1",")","mu",":","tensor_like","of","float","Expected","number","of","occurrences","during","the","given","interval","(","mu",">","=","0",")","."]
code: def __new__(cls, name, psi, mu, **kwargs):
      return _zero_inflated_mixture(
          name=name,
          nonzero_p=psi,
          nonzero_dist=Poisson.dist(mu=mu),
          **kwargs,
      )
  
imports: import warnings
  import numpy
  import pytensor
  import pytensor.tensor
  from pytensor.graph.basic import Node, equal_computations
  from pytensor.tensor import TensorVariable
  from pytensor.tensor.random.op import RandomVariable
  from pymc.distributions import transforms
  from pymc.distributions.continuous import Gamma, LogNormal, Normal, get_tau_sigma
  from pymc.distributions.discrete import Binomial, NegativeBinomial, Poisson
  from pymc.distributions.dist_math import check_parameters
  from pymc.distributions.distribution import DiracDelta, Distribution, SymbolicRandomVariable, _moment, moment
  from pymc.distributions.shape_utils import _change_dist_size, change_dist_size
  from pymc.distributions.transforms import _default_transform
  from pymc.distributions.truncated import Truncated
  from pymc.logprob.abstract import _logcdf, _logcdf_helper, _logprob
  from pymc.logprob.basic import logp
  from pymc.logprob.transforms import IntervalTransform
  from pymc.pytensorf import floatX
  from pymc.util import check_dist_not_registered
  from pymc.vartypes import continuous_types, discrete_types
label_desc: Use image node_id 1 for calling the ZeroInflatedPoisson obj's underlying member method code with example usage: obj.__new__(cls, name, psi, mu) and returns: _zero_inflated_mixture