U
    ÃmœdÞ  ã                   @   s˜   d Z ddlZddlmZ ddlmZ ddlmZm	Z	m
Z
 G dd„ deƒZG dd	„ d	ƒZG d
d„ deƒZG dd„ deƒZG dd„ deƒZG dd„ dƒZdS )z>

Created on Fri Jun 28 14:19:26 2013

Author: Josef Perktold
é    N)Ústats)ÚGenericLikelihoodModel)Úassert_array_lessÚassert_almost_equalÚassert_allclosec                       s8   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Z‡  ZS )
ÚMyParetozmMaximum Likelihood Estimation pareto distribution

    first version: iid case, with constant parameters
    c                    sB   t t| ƒ ¡  dddg}|  |¡ t d| j ¡ d dg¡| _d S )NÚshapeÚlocÚscaleç      ø?ç      ð?)	Úsuperr   Ú
initializeZ_set_extra_params_namesÚnpÚarrayÚendogÚminÚstart_params)ÚselfÚextra_params_names©Ú	__class__© úf/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/miscmodels/tests/test_generic_mle.pyr      s    

zMyPareto.initializec                 C   s   ||| d   S )Né   r   )r   ÚxÚbr   r   r   Úpdf!   s    zMyPareto.pdfc                 C   s   |   |¡ d¡ S )Nr   )ÚnloglikeobsÚsum©r   Úparamsr   r   r   Úloglike$   s    zMyPareto.loglikec                 C   sz   | j d k	r|  |¡}|d }|d }|d }| j}|| | }t |¡|d t |¡  }|t |¡8 }d||dk < | S )Nr   r   é   r   iðØÿÿ)Úfixed_paramsZexpandparamsr   r   Úlog)r   r!   r   r	   r
   r   r   Zlogpdfr   r   r   r   -   s    

zMyPareto.nloglikeobs)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r"   r   Ú__classcell__r   r   r   r   r      s
   
	r   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚCheckGenericMixinc                 C   s.   | j  ¡ }| j jrdnd}|t|ƒks*t‚d S )NúP>|t|zP>|z|)Úres1ÚsummaryÚuse_tÚstrÚAssertionError)r   ÚsummZ	check_strr   r   r   Útest_summaryD   s    
zCheckGenericMixin.test_summaryc                 C   s6   | j j}d| j _| j  ¡ }dt|ƒks*t‚|| j _d S )NTr,   )r-   r/   r.   r0   r1   )r   Zorig_valr2   r   r   r   Útest_use_t_summaryI   s
    
z$CheckGenericMixin.test_use_t_summaryc                 C   s   | j  t t| j jƒ¡¡ d S ©N)r-   Zt_testr   ÚeyeÚlenr!   )r   r   r   r   Ú
test_ttestP   s    zCheckGenericMixin.test_ttestc                 C   s°   | j j}t dddg¡}| j jjd k	r4|| j jj }t||dd� t|t t|ƒ¡dd� t| j j	t t|ƒ¡dd� | j
s¬t| j j	| j jddd	� t| j j| j jddd	� d S )
Nr#   r   r   )Úatolé   g      à?gš™™™™™©?g333333Ã?)Úrtolr9   )r-   r!   r   r   ÚmodelÚfixed_paramsmaskr   Zzerosr7   ZbseÚskip_bsejacZbsejacZbsejhj)r   r!   Zparams_truer   r   r   Útest_paramsS   s    ÿ ÿzCheckGenericMixin.test_paramsc                 C   sŒ   | j }t| ddƒ}|jjd k	r2|jjj\}}d}n|jjjd d }}d}|j|| | ks`t‚|j|| ksrt‚t	|j
ƒ|| ksˆt‚d S )NÚk_extrar   r   )r-   Úgetattrr<   Úexogr   r   Údf_residr1   Údf_modelr7   r!   )r   Úresr@   ÚnobsZk_varsZ
k_constantr   r   r   Útest_dfe   s    zCheckGenericMixin.test_dfN)r&   r'   r(   r3   r4   r8   r?   rG   r   r   r   r   r+   A   s
   r+   c                   @   s    e Zd Zedd„ ƒZdd„ ZdS )ÚTestMyPareto1c                 C   sœ   dddg}d}t j d¡ tjj|t|d�Ž}t|ƒ}d |_d |_	d|_
d |_}|jjd |j
 | |_ddd	g|j_|| _|jd d
�| _|| _d| _d S )Nr#   r   éd   éÒ  ©Úsizeé   r   r	   r
   ©ZdispT)r   ÚrandomÚseedr   ÚparetoÚrvsÚdictr   r$   r=   rD   r@   r   r   rC   ÚdataÚxnamesÚmodÚfitr-   r>   )Úclsr!   rF   rR   Úmod_parr@   r   r   r   Úsetup_classu   s    

zTestMyPareto1.setup_classc                 C   s@   | j j}| j j ¡ }|d |d  }t||ƒ t||dd� d S )Nr   r#   )Údecimal)r-   r!   r   r   r   r   )r   r!   Zx_minZp_minr   r   r   Útest_minsupportŒ   s
    
zTestMyPareto1.test_minsupportN)r&   r'   r(   ÚclassmethodrZ   r\   r   r   r   r   rH   s   s   
rH   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestMyParetoRestrictionc                 C   sÆ   dddg}d}t j d¡ tjj|t|d�Ž}t|ƒ}t jt  	d¡ }d|d< ||_
t  |¡|_|j|j |_d|_d |_}|jjd |j | |_d	d
g|j_|| _|jd d�| _|| _d| _d S )Nr#   r   é2   rJ   rK   rM   gš™™™™™¹¿r   r   r
   rN   F)r   rO   rP   r   rQ   rR   rS   r   ÚnanZonesr$   Úisnanr=   r   rD   r@   r   r   rC   rT   rU   rV   rW   r-   r>   )rX   r!   rF   rR   rY   Zfixdfr@   r   r   r   rZ   —   s$    

z#TestMyParetoRestriction.setup_classN)r&   r'   r(   r]   rZ   r   r   r   r   r^   ”   s   r^   c                       sZ   e Zd ZdZddgZdddgZddgZd	gZd‡ fdd„	Zdd„ Z	dd„ Z
dd„ Z‡  ZS )ÚTwoPeakLLHNoExogz*Fit height of signal peak over background.é
   iè  r   ÚsignalÚ
backgroundZn_signalZn_backgroundÚalphaNc                    s0   || _ || _tt| ƒj|||| jdœ|—Ž d S )N)r   rB   r   )rd   re   r   rb   Ú__init__Ú
exog_names)r   r   rB   rd   re   ÚargsÚkwargsr   r   r   rg   ¸   s    
þüûzTwoPeakLLHNoExog.__init__c                 C   s   |   |¡ S r5   )Únlogliker    r   r   r   r"   Æ   s    zTwoPeakLLHNoExog.loglikec                 C   s   | j }|  ||¡S r5   )r   Únlnlike)r   r!   r   r   r   r   rk   É   s    zTwoPeakLLHNoExog.nloglikec           
      C   st   |d }|d }|dk s |dk r&t jS || }|}| j |¡}| j |¡}t  t  || ||  ¡¡}	|	|8 }	|	 S )Nr   r   )r   Úinfrd   r   re   r   r%   )
r   r!   r   Zn_sigZn_bkgZn_totrf   ÚsigZbkgZsumloglr   r   r   rl   Í   s    zTwoPeakLLHNoExog.nlnlike)NNN)r&   r'   r(   r)   r   Z	cloneattrrh   Zendog_namesrg   r"   rk   rl   r*   r   r   r   r   rb   ±   s   
rb   c                   @   s    e Zd Zedd„ ƒZdd„ ZdS )ÚTestTwoPeakLLHNoExogc                 C   s€   t j d¡ tjddd�}tjddd�}d}d}||g}t  |j|d�|j|d�g¡d d …t jf }|| _	|| _
|| _|| _d S )	Né*   r   r   )r	   r
   rI   r_   éÈ   rK   )r   rO   rP   r   Z
halfcauchyÚuniformZconcatenaterR   ZnewaxisÚXr!   Úpdf_aÚpdf_b)rX   rt   ru   Zn_aZn_br!   rs   r   r   r   rZ   Ý   s    
ÿ
þz TestTwoPeakLLHNoExog.setup_classc                 C   sˆ   t j d¡ t| j| j| jd�}| ¡ }t|j	| j	dd� |j
dksHt‚|jdksVt‚|jdd�}t|d	  d¡| j	dd� | ¡  d S )
Nrp   )rd   re   gš™™™™™¹?)r;   éø   r   r_   )Znrepr#   )r   rO   rP   rb   rs   rt   ru   rW   r   r!   rC   r1   rD   Z	bootstrapZmeanr.   )r   Z
llh_noexogrE   Zres_bsr   r   r   Útest_fitï   s    þzTestTwoPeakLLHNoExog.test_fitN)r&   r'   r(   r]   rZ   rw   r   r   r   r   ro   Û   s   
ro   )r)   Únumpyr   Zscipyr   Zstatsmodels.base.modelr   Znumpy.testingr   r   r   r   r+   rH   r^   rb   ro   r   r   r   r   Ú<module>   s   02!*