B
    Z                 @   s   d dl Zd dlmZmZ d dlmZ d dlmZ G dd deZ	e	ddd	Z
G d
d deZeddd	ZG dd deZeddd	ZG dd deZeddd	ZdS )    N)rv_discretenbinom)gammaln)
_lazywherec               @   s(   e Zd ZdZdd Zdd Zdd ZdS )	genpoisson_p_genz%Generalized Poisson distribution
    c             C   s   |dk||k@ |dk@ S )Nr    )selfmualphapr   r   Alib/python3.7/site-packages/statsmodels/distributions/discrete.py	_argcheck
   s    zgenpoisson_p_gen._argcheckc       	      C   s   ||d  }t t ddd||  }t t dd||d |  }t ||d t |  }||t | t|d  ||  8 }|S )Ng      ?r      )npZmaximumZ	nextafterlogr   )	r   xr	   r
   r   Zmu_pZa1Za2Zlogpmf_r   r   r   _logpmf   s     &zgenpoisson_p_gen._logpmfc             C   s   t | ||||S )N)r   expr   )r   r   r	   r
   r   r   r   r   _pmf   s    zgenpoisson_p_gen._pmfN)__name__
__module____qualname____doc__r   r   r   r   r   r   r   r      s   r   genpoisson_pzGeneralized Poisson)nameZlongnamec               @   s(   e Zd ZdZdd Zdd Zdd ZdS )	zipoisson_genz'Zero Inflated Poisson distribution
    c             C   s   |dk|dk@ |dk@ S )Nr   r   r   )r   r	   wr   r   r   r      s    zzipoisson_gen._argcheckc             C   s6   t |dk|||fdd t|d| t|   S )Nr   c             S   s,   t d| | t |  t| d  | S )Ng      ?)r   r   r   )r   r	   r   r   r   r   <lambda>#   s    z'zipoisson_gen._logpmf.<locals>.<lambda>g      ?)r   r   r   r   )r   r   r	   r   r   r   r   r   !   s    zzipoisson_gen._logpmfc             C   s   t | |||S )N)r   r   r   )r   r   r	   r   r   r   r   r   '   s    zzipoisson_gen._pmfN)r   r   r   r   r   r   r   r   r   r   r   r      s   r   	zipoissonzZero Inflated Poissonc               @   s(   e Zd ZdZdd Zdd Zdd ZdS )	zigeneralizedpoisson_genz3Zero Inflated Generalized Poisson distribution
    c             C   s   |dk|dk@ |dk@ S )Nr   r   r   )r   r	   r
   r   r   r   r   r   r   0   s    z"zigeneralizedpoisson_gen._argcheckc             C   s>   t |dk|||||fdd t|d| t||||  S )Nr   c             S   s   t d| t| ||| S )Ng      ?)r   r   r   logpmf)r   r	   r
   r   r   r   r   r   r   5   s   z2zigeneralizedpoisson_gen._logpmf.<locals>.<lambda>g      ?)r   r   r   r   pmf)r   r   r	   r
   r   r   r   r   r   r   3   s    z zigeneralizedpoisson_gen._logpmfc          	   C   s   t | |||||S )N)r   r   r   )r   r   r	   r
   r   r   r   r   r   r   :   s    zzigeneralizedpoisson_gen._pmfN)r   r   r   r   r   r   r   r   r   r   r   r   -   s   r   zigenpoissonz!Zero Inflated Generalized Poissonc               @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )zinegativebinomial_genz=Zero Inflated Generalized Negative Binomial distribution
    c             C   s   |dk|dk@ |dk@ S )Nr   r   r   )r   r	   r
   r   r   r   r   r   r   C   s    z zinegativebinomial_gen._argcheckc             C   sL   |  |||\}}t|dk||||fdd t|d| t|||  S )Nr   c             S   s   t d| t| || S )Ng      ?)r   r   r   r    )r   sr   r   r   r   r   r   I   s   z0zinegativebinomial_gen._logpmf.<locals>.<lambda>g      ?)convert_paramsr   r   r   r   r!   )r   r   r	   r
   r   r   r$   r   r   r   r   F   s
    zzinegativebinomial_gen._logpmfc          	   C   s   t | |||||S )N)r   r   r   )r   r   r	   r
   r   r   r   r   r   r   N   s    zzinegativebinomial_gen._pmfc             C   s(   d| |d|   }|||  }||fS )Ng      ?   r   )r   r	   r
   r   sizeZprobr   r   r   r%   Q   s    z%zinegativebinomial_gen.convert_paramsN)r   r   r   r   r   r   r   r%   r   r   r   r   r#   @   s
   r#   zinegbinz+Zero Inflated Generalized Negative Binomial)Znumpyr   Zscipy.statsr   r   Zscipy.specialr   Zstatsmodels.compat.scipyr   r   r   r   r   r   r"   r#   r(   r   r   r   r   <module>   s   