U
    Kvf                     @   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	j56de4j7e	j56d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   O/tmp/pip-unpacked-wheel-2v6byqio/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   :0yE>)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{Gz?gGz?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^Op@g@g'՚?@g9@g[za@g7Nl@gF͘@g'Dȅ@gj֔@gd(@gD`@gH@gWAڐ@gȎv~@gHKBb@gzٰ@gg雱@gy@gb@gAȓ@g_f=R@gQ7@gFH@gb
*@g.j?+@grӑ)@gyȉ[@g`?Ie}@g2JO@gItT@geDbQ@g?@g-U@gD*`@ga@gV0~@)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      gMbP?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   Zlink1Zlink2r%   Zres1Zres2r   r   r   test_cdflink   s    rZ   ):__doc__Z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   rZ   r   r   r   r   <module>   s\   
         