
    M/Ph                     ~   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c 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 Z+d Z,d Z-d	 Z.d
 Z/d Z0d Z1 G d dej2                  Z3 G d d          Z4e	j5        6                    de4j7                  e	j5        6                    de4j8                  d                         Z9dS )z*
Test functions for genmod.families.links
    N)assert_allcloseassert_equalassert_array_less)stats)numdiffc                 j   t          j        t           j                            dd                     }t	          | t
          j                  rt          |d          }nTt	          | t
          j                  rt          |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zs     k/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/statsmodels/genmod/families/tests/test_link.pyget_domainvaluer   $   s     
	!!!Q''	(	((A$&& 1II	D%,	'	' 2JJ	D515:>	?	? BH    c            
         t           j                            d           t          D ]} t	          d          D ]}t           j                            dd          }|                      | |                    }t          ||dt          |                      t          |           } | |                     |                    }t          ||dt          |                      d S )Ni  
   r   r	   :0yE>)atolerr_msg)
r   r   seedLinksranger   inverser   strr   )r   kpdr   s        r   test_inverser*   3   s     INN4 @ @r 	@ 	@A	!!!Q''ATT!WW%%AAqtSYY????%%AT\\!__%%AAqtSYY?????	@@ @r   c                     t           j                            d           t          D ]} t	          d          D ]}t           j                            dd          }t          | t          j                  rt          j	        |dd          }| 
                    |          }t          j        t           j        |         |           }t          ||ddt          |                      t          | t!          t"                    t!          t$                    t!          t&                    f          st)          | d           
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)   das        r   
test_derivr>   C   s$    INN5 ) )r 	) 	)A	!!!Q''A$-- +GAtT**

1A!"%(D11BAr4$'II/ / / /dT-%8%8%)/%:%:%)$ZZ%1 2 2 ) "1"a(((	)) )r   c                     t           j                            d           t          D ]} t	          d          D ]}t           j                            dd          }t          j        |dd          }t          | t          j	                  rt          j        |dd          }| 
                    |          }t          j        t           j        |         | j                  }t          ||d	d
t!          |                      Ɍd S )Nr,   r   r   r	   g{Gz?gGz?r-   r.   h㈵>r/   r0   )r   r   r"   r#   r$   r   r3   r   r   cauchyderiv2r5   r6   r7   r4   r   r&   r<   s        r   test_deriv2rC   X   s     INN5 	/ 	/r 	/ 	/A	!!!Q''A4&&A$-- +GAtT**AA!"%(DJ77BAr4$'II/ / / / /	/	/ 	/r   c                  \   t           j                            d           t          D ]} t	          d          D ]r}t          |           }|                     |          }d|                     |                     |                    z  }t          ||ddt          |                      sd S )Nr,   r   r	   r   g|=r0   )r   r   r"   r#   r$   r   inverse_derivr4   r%   r   r&   )r   r'   r   r)   fs        r   test_inverse_derivrG   i   s     INN5 / /r 	/ 	/A%%A""1%%ADJJt||A///AAqt%$'II/ / / / /		// /r   c                  Z   t           j                            d           t          D ]} t	          d          D ]q}t          |           }|                     |          }t          j        t           j	        |         | j
                  }t          ||ddt          |                      rd S )Nr,   r   r@   r/   r0   )r   r   r"   LinksISDr$   r   inverse_deriv2r5   r6   r7   rE   r   r&   )r   r'   r   d2d2as        r   test_inverse_deriv2rM   w   s     INN5 / /r 	/ 	/A%%A$$Q''B"258T-?@@CB$T$'II/ / / / /		// /r   c                      g d} t                               |           }t          |t          j        |                      d S )N)&g~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   	ones_like)r   zinvs     r   test_invlogit_stabilityrR      sD    	0 	0 	0A ==Dr|A'''''r   c                        e Zd Zd Zd Zd ZdS )	MyCLogLogc                 V    t          j        t          j        d|z
                       S Nr	   r   r   selfr(   s     r   __call__zMyCLogLog.__call__   s     vrva!e}}n%%%r   c                 V    dt          j        t          j        |                     z
  S rV   )r   exp)rY   r   s     r   r%   zMyCLogLog.inverse   s!    2626!99*%%%%r   c                 B    d|dz
  t          j        d|z
            z  z  S )Ng      ?r	   rW   rX   s     r   r4   zMyCLogLog.deriv   s"    a!eq1u.//r   N)__name__
__module____qualname__rZ   r%   r4    r   r   rT   rT      sA        & & && & &0 0 0 0 0r   rT   c            	          e Zd Ze                    ej                  e                                fe                    ej                  e	                                fe                    ej
                  e                                fe                    ej                  e                                fe                     ej        d                    e                                f e            e                                fgZg dZ ej        ddd          ZdZ ej        eedez
            ZdS )CasesCDFLink)dbnr	   )rZ   r4   r%   rE   rB   rJ   r      gMbP?N)r^   r_   r`   r   CDFLinkr   gumbel_lr   gumbel_rr   normProbitlogisticLogittr2   rT   
link_pairsmethodsr   linspacer(   epsr3   ra   r   r   rc   rc      s        
5>	*	*EMMOO<	5>	*	*ELLNN;	5:	&	&7	5>	*	*EKKMM:	7571::	&	&7 
emmoo&

J! ! !G 	Aq!A
C3C  AAAr   rc   mzlink1, link2c                     t           j        } t          ||           |          } t          ||           |          }t          ||dd           d S )Nr   )r    r1   )rc   r(   getattrr   )rr   link1link2r(   res1res2s         r   test_cdflinkry      sZ     	A75!QD75!QDD$T555555r   ):__doc__numpyr   numpy.testingr   r   r   scipyr   pyteststatsmodels.genmod.familiesgenmodfamiliesstatsmodels.toolsr   r5   r   rl   rO   InversePowerr9   SqrtsqrtInverseSquaredr:   IdentityidentityLogr   r   r;   rj   probitr2   rA   r   cloglogr   loglogr   negbinomr#   rI   r   r*   r>   rC   rG   rM   rR   LinkrT   rc   markparametrizero   rn   ry   ra   r   r   <module>r      s        J J J J J J J J J J        . . . . . . . . . + + + + + + 	""$$zz||&&((>>iikkzz||		
--//	!!## 
t_h	dFFGVX	? 4(&&&*  @ @ @ ) ) )*/ / /"/ / // / /( ( ($0 0 0 0 0
 0 0 0! ! ! ! ! ! ! !. l233)@AA6 6 BA 436 6 6r   