U
    ÃmœdÀ  ã                   @   sl  d Z ddlZddlmZmZmZ ddlmZ ddl	Z	ddl
m  mZ ddlmZ ejZe ¡ Ze ¡ Ze ¡ Ze ¡ Ze ¡ Ze ¡ Ze ¡ Ze ¡ Z e !¡ Z"e #¡ Z$e %¡ Z&e '¡ Z(eeeeeeee e"e$e&e(gZ)eeeeee"e e&gZ*dd„ Z+dd	„ Z,d
d„ Z-dd„ Z.dd„ Z/dd„ Z0dd„ Z1G dd„ dej2ƒZ3G dd„ dƒZ4e	j5 6de4j7¡e	j5 6de4j8¡dd„ ƒƒZ9dS )z*
Test functions for genmod.families.links
é    N)Úassert_allcloseÚassert_equalÚassert_array_less)Ústats)Únumdiffc                 C   sb   t  t j dd¡¡ }t| tjƒr.t|dƒ}n0t| tjƒrFt	|dƒ}nt| tj
tjfƒr^| }|S )z7
    Get a value in the domain for a given family.
    r   é   é   éýÿÿÿ)ÚnpÚlogÚrandomÚuniformÚ
isinstanceÚlinksÚCLogLogÚminÚLogLogÚmaxÚNegativeBinomialÚLogC)ÚlinkÚz© r   úd/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/genmod/families/tests/test_link.pyÚget_domainvalue$   s    r   c                  C   s‚   t j d¡ tD ]l} tdƒD ]^}t j dd¡}|  | |ƒ¡}t||dt| ƒd� t	| ƒ}| |  |¡ƒ}t||dt| ƒd� qqd S )NiÕ  é
   r   r   ç:Œ0âŽyE>)ÚatolÚerr_msg)
r
   r   ÚseedÚLinksÚranger   Úinverser   Ústrr   )r   ÚkÚpÚdr   r   r   r   Útest_inverse3   s    r'   c               	   C   sª   t j d¡ tD ]”} tdƒD ]†}t j dd¡}t| tjƒrHt  	|dd¡}|  
|¡}t t j| | ¡}t||ddt| ƒd� t| ttƒttƒttƒfƒst| dƒ qqd S )	Né«^  r   r   r   ç¸…ëQ¸ž?ç
×£p=
ï?ç�íµ ÷Æ°>©Úrtolr   r   )r
   r   r   r    r!   r   r   r   ÚCauchyÚclipÚderivÚndÚapprox_fprimeÚr_r   r#   ÚtypeÚinverse_powerÚinverse_squaredÚlogcr   ©r   r$   r%   r&   Údar   r   r   Ú
test_derivC   s     

ÿ
þr:   c               	   C   s’   t j d¡ tD ]|} tdƒD ]n}t j dd¡}t  |dd¡}t| tj	ƒrVt  |dd¡}|  
|¡}t t j| | j¡}t||d	d
t| ƒd� qqd S )Nr(   r   r   r   g{®Gáz„?g®Gáz®ï?r)   r*   çñhãˆµøÔ>r+   r,   )r
   r   r   r    r!   r   r/   r   r   ÚcauchyÚderiv2r1   r2   r3   r0   r   r#   r8   r   r   r   Útest_deriv2X   s    

ÿr>   c               	   C   sd   t j d¡ tD ]N} tdƒD ]@}t| ƒ}|  |¡}d|  |  |¡¡ }t	||ddt
| ƒd� qqd S )Nr(   r   r   r   g»½×Ùß|Û=r,   )r
   r   r   r    r!   r   Úinverse_derivr0   r"   r   r#   )r   r$   r   r&   Úfr   r   r   Útest_inverse_derivi   s    

ÿrA   c               	   C   sd   t j d¡ tD ]N} tdƒD ]@}t| ƒ}|  |¡}t t j	| | j
¡}t||ddt| ƒd� qqd S )Nr(   r   r;   r+   r,   )r
   r   r   ÚLinksISDr!   r   Úinverse_deriv2r1   r2   r3   r?   r   r#   )r   r$   r   Zd2Zd2ar   r   r   Útest_inverse_deriv2w   s    

ÿrD   c               &   C   sn   ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&g&} t  | ¡}t|t | ¡ƒ d S )'Ng~FåÈö�‘@gpÌ",Ï/—@g�^Oüp•@gÀþ˜¶†@gú'Õšþ?’@g¥ì°9­¾„@gð€[za—@g×ª7Nl˜@g€�F¹Í˜@g�õ'DðÈ…@göjâçÖ”@gd€(³•@gD`©—ž‰@g€ÈH�®—@g¡WÄAÚ�@gåÈŽv§~@gHŒKBÄb‘@g�zÙ°€@ggÛé›±Œ@gÃyõý…”@g¬öbÕ³‡@g÷AÈ“…@g_˜f=ÑR˜@gQÈÐ7œ‰@g‡FÐHº“@gb
ïšè*‘@g¡ž.j?+—@grÓ‘)—áˆ@gÔyÈ‰[î‹@g`ƒ?¹Ie}@g2ù�JO–@güItñÑT•@geDb­Q—@g¬žð?‹@g-UãêÉˆ@gD*Ó`ç†@g¥’•÷ça‰@g„Vî0ñ~@)Úlogitr"   r   r
   Z	ones_like)r   Zzinvr   r   r   Útest_invlogit_stability…   sN                           ô
rF   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú	MyCLogLogc                 C   s   t  t  d| ¡ ¡S ©Nr   ©r
   r   ©Úselfr%   r   r   r   Ú__call__™   s    zMyCLogLog.__call__c                 C   s   dt  t  |¡ ¡ S rH   )r
   Úexp)rK   r   r   r   r   r"   �   s    zMyCLogLog.inversec                 C   s   d|d t  d| ¡  S )Ng      ð?r   rI   rJ   r   r   r   r0       s    zMyCLogLog.derivN)Ú__name__Ú
__module__Ú__qualname__rL   r"   r0   r   r   r   r   rG   —   s   rG   c                   @   s¸   e Zd Zejejd�e ¡ fejejd�e 	¡ fejej
d�e ¡ fejejd�e ¡ feje d¡d�e ¡ feƒ e ¡ fgZddddddgZe d	dd
¡ZdZe eede ¡ZdS )ÚCasesCDFLink)Zdbnr   rL   r0   r"   r?   r=   rC   r   é   gü©ñÒMbP?N)rN   rO   rP   r   ZCDFLinkr   Zgumbel_lr   Zgumbel_rr   ZnormÚProbitZlogisticÚLogitÚtr.   rG   Ú
link_pairsÚmethodsr
   Zlinspacer%   Zepsr/   r   r   r   r   rQ   ¥   s   ÷
ÿrQ   Úmzlink1, link2c                 C   s6   t j}t|| ƒ|ƒ}t|| ƒ|ƒ}t||ddd� d S )Nr   )r   r-   )rQ   r%   Úgetattrr   )rX   Úlink1Úlink2r%   Zres1Zres2r   r   r   Útest_cdflink¼   s    r\   ):Ú__doc__Únumpyr
   Znumpy.testingr   r   r   Zscipyr   ZpytestZstatsmodels.genmod.familiesZgenmodZfamiliesZstatsmodels.toolsr   r1   r   rT   rE   ZInversePowerr5   ZSqrtÚsqrtZInverseSquaredr6   ZIdentityÚidentityÚLogr   r   r7   rS   Zprobitr.   r<   r   Zcloglogr   Zloglogr   Znegbinomr    rB   r   r'   r:   r>   rA   rD   rF   ÚLinkrG   rQ   ÚmarkZparametrizerW   rV   r\   r   r   r   r   Ú<module>   s\   
      ÿ   ÿ