
    M/PhIY                        d Z ddlmZ ddlZddlmZmZmZ ddl	Z
ddlZddlZddlmZ ddlmZ ddlmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZ ej                                        Z  ej!        e j"                  e _"         ej!        e j#                  e _#         ee j#        d          e _#        dZ$dZ% e
j&         ee%          d          Z'e'(                    e)          Z' ej*        e'd                   e'd<    G d d          Z+ G d de+          Z, G d de+          Z- G d de+          Z. G d de+          Z/ G d de+          Z0 G d  d!e+          Z1 G d" d#e+          Z2 G d$ d%e+          Z3 G d& d'e+          Z4 G d( d)e+          Z5 G d* d+e5          Z6 G d, d-e5          Z7 G d. d/e5          Z8 G d0 d1e5          Z9 G d2 d3e5          Z:d4 Z;dS )5zM
Created on Fri May 30 16:22:29 2014

Author: Josef Perktold
License: BSD-3

    )StringION)assert_assert_allcloseassert_equal)datasetsfit_constrained)PoissonLogitfamiliesGLM)add_constant   )results_glm_logit_constrainedresults_poisson_constrainedF)prependzagecat	smokes	deaths	pyears
1	1	32	52407
2	1	104	43248
3	1	206	28612
4	1	186	12663
5	1	102	5317
1	0	2	18790
2	0	12	10673
3	0	28	5710
4	0	28	2585
5	0	31	1462	)	delimiterpyears	logpyearsc                        e Zd Zd Zd Zd ZdS )CheckPoissonConstrainedMixinc                    | j         }| j        }t          |d         |j        | j                 d           t          j        t          j        |d                             }|dk    t          j        |j	        | j                           z  }t          ||          |j	        | j                 |          d           d S )Nr   ư>rtolr   )
res1res2r   paramsidxnpsqrtdiagisnanbse)selfr   r    bse1masks        k/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/statsmodels/discrete/tests/test_constrained.py
test_basicz'CheckPoissonConstrainedMixin.test_basic8   s    yyQTX!6TBBBBwrwtAw''((	RXdhtx&8999dUTXdh%7%>TJJJJJJ    c                 ,   t          | d          rnt          | j        d          s| j        n| j        j        }| j        }t	          |j        |j        | j                 d           |j        dk    t          j	        |j        | j                           z  }t	          |j        |          |j        | j                 |          d           |j
        | j        df         }t          j        |j                  t          j	        |          z  }t	          |j        |          ||          d           |j
        | j        df         }|j        dk    t          j	        |          z  }t	          |j        |          ||          d           |j
        | j        d	f         }|j
        | j        d
f         }t          j        ||f          }t	          |                                t          j	        |                    |t          j	        |                    d           t	          |j        |j        d           t%          |j        |j                   |j        |j        z
  dz
  }	t%          |j        |	           d S t/          j        d           d S )Nres1m_resultsr   r   r         g-C6
?      r   not available yet)hasattrr/   r0   r    r   r!   r"   r'   r#   r&   params_tableisinftvaluespvaluescolumn_stackconf_intllfllr   df_modeldf_mNdf_residpytestskip)
r(   r   r    r*   r9   r:   ci_lowci_uppcidf_rs
             r+   test_basic_methodz.CheckPoissonConstrainedMixin.test_basic_methodA   s]   4!! '	-&-dj*&E&E -DJJ, 9DDKTX)>TJJJJ HMRXdhtx.@%A%AADDHdUOTXdh-?-F!%' ' ' ' '!4G 8DL))BHW,=,==DDL$/$dKKKK'!4G LA%'):)::DDL$/$dKKKK&tx{3F&tx{3F&&!122B DMMOORXb\\M:B}<M!%' ' ' ' DHdgD9999	2226DI%)D-----K+,,,,,r-   c                 "   t          | d          rj| j        }| j        }t          |d          rt          |j        |j        d           d S t          r%dd l}d|j        z  }|                    |           d S d S t          j
        d           d S )Nr/   ll_0r   r   r   z&test: ll_0 not available, llnull=%6.4Fr5   )r6   r/   r    r   llnullrK   DEBUGwarningswarnrC   rD   )r(   r   r    rN   messages        r+   
test_otherz'CheckPoissonConstrainedMixin.test_otherk   s    4!! 	-:D9DtV$$ +TYTBBBBBB +#OOOG!% -GMM'*****	+ + K+,,,,,r-   N)__name__
__module____qualname__r,   rI   rQ    r-   r+   r   r   6   sE        K K K(- (- (-T- - - - -r-   r   c                   x    e Zd Zed             Zej        j        d             Zej        j        d             Z	dS )TestPoissonConstrained1ac           	         t           j        | _        g d| _        d}t	          j        |t                    }t          |j                  }t          j
        |          }t          j        |j                                                  |d<   d}t          j        |j                                      |          }t#          ||j        |j        |ddd          | _        |                    ||dd	          | _        d S )
N   r2   r3   r4      r   r   'deaths ~ logpyears + smokes + C(agecat)datar   C(agecat)[T.4] = C(agecat)[T.5]bfgsmethoddispstart_paramsfit_kwdsre   rb   rc   )resultsresults_noexposure_constraintr    r"   r
   from_formular^   len
exog_namesr#   zeroslogendogmeanpatsy
DesignInfolinear_constraintr	   coefs	constantsr   r/   clsformulamodk_varsre   constrlcs          r+   setup_classz$TestPoissonConstrained1a.setup_class   s     8''' <"7666S^$$x''&!1!122Q
 3cn--??GG"3",0<7=q,I,IK K K ''\/5A ( ? ?			r-   c                 d    | j                                         }t          d|j        v            d S )Nlinear equality constraints)r/   summaryr   	extra_txtr(   summs     r+   test_summaryz%TestPoissonConstrained1a.test_summary   s3     z!!##-?@@@@@r-   c                 p    | j                                         }t          d|j        d         v            d S )Nr   r   )r/   summary2r   r   r   s     r+   test_summary2z&TestPoissonConstrained1a.test_summary2   s8     z""$$-1BBCCCCCr-   N)
rR   rS   rT   classmethodr}   rC   marksmoker   r   rU   r-   r+   rW   rW   ~   sw        ? ? [?8 [A A A [D D D D Dr-   rW   c                   $    e Zd Zed             ZdS )TestPoissonConstrained1bc                    t           j        | _        g d| _        d}t	          j        |t          t          d         j                  }d}t          j	        |j
                                      |          }t          ||j        |j        ddd	          | _        || _        |                    |dd          | _        d S )
Nr[   r1   r2   r3   r4   r   deaths ~ smokes + C(agecat)r   r^   exposurer_   newtonr   ra   rf   )rh   results_exposure_constraintr    r"   r
   rj   r^   valuesrq   rr   rl   rs   r	   rt   ru   r   constraintsr/   rw   rx   ry   r{   r|   s        r+   r}   z$TestPoissonConstrained1b.setup_class   s     6$$$ 0"7,0N,AC C C2cn--??GG"3",7?56-8 -89 9 9  ''x-. ( 0 0			r-   NrR   rS   rT   r   r}   rU   r-   r+   r   r      s-        0 0 [0 0 0r-   r   c                   $    e Zd Zed             ZdS )TestPoissonConstrained1cc                    t           j        | _        g d| _        d}t	          j        |t          t          j        t          d         j	                            }d}t          j        |j                                      |          }t          ||j        |j        ddd	          | _        || _        |                    |dd          | _        d S )
Nr   r   r   r^   offsetr_   r   r   ra   r   )rh   r   r    r"   r
   rj   r^   r#   rn   r   rq   rr   rl   rs   r	   rt   ru   r   r   r/   r   s        r+   r}   z$TestPoissonConstrained1c.setup_class   s     6$$$ 0"7*,&h1F*G*GI I I2cn--??GG"3",7?56-8 -89 9 9  ''xa'HH			r-   Nr   rU   r-   r+   r   r      s2        I I [I I Ir-   r   c                   $    e Zd Zed             ZdS )TestPoissonNoConstrainedc                 >   t           j        | _        g d| _        d}t	          j        |t          t          j        t          d         j	                            }|
                    d          j        }|j        |                                f| _        || _        d S )Nr   r   r   r   r   )rc   )rh   results_exposure_noconstraintr    r"   r
   rj   r^   r#   rn   r   fitr0   r!   
cov_paramsr   r/   )rw   rx   ry   r   s       r+   r}   z$TestPoissonNoConstrained.setup_class   s     8$$$ 0"7*,&h1F*G*GI I IwwAw'K!2!23			r-   Nr   rU   r-   r+   r   r      s-          [  r-   r   c                   $    e Zd Zed             ZdS )TestPoissonConstrained2ac           	         t           j        | _        g d| _        d}t	          j        |t                    }t          |j                  }t          j
        |          }t          j        |j                                                  |d<   d}t          j        |j                                      |          }t#          ||j        |j        |ddd          | _        |                    ||dd	          | _        d S )
NrY   r\   r]   r   %C(agecat)[T.5] - C(agecat)[T.4] = 0.5r`   ra   rd   rg   )rh   results_noexposure_constraint2r    r"   r
   rj   r^   rk   rl   r#   rm   rn   ro   rp   rq   rr   rs   r	   rt   ru   r   r/   rv   s          r+   r}   z$TestPoissonConstrained2a.setup_class   s     9''' <"7666 S^$$x''&!1!122Q
 9cn--??GG"3",0<7=q,I,IK K K ''\/5A ( ? ?			r-   Nr   rU   r-   r+   r   r      s-        ? ? [? ? ?r-   r   c                   $    e Zd Zed             ZdS )TestPoissonConstrained2bc                    t           j        | _        g d| _        d}t	          j        |t          t          d         j                  }d}t          j	        |j
                                      |          }t          ||j        |j        ddd	          | _        || _        |                    |d
d| j        d                   | _        d S )Nr   r   r   r   r   r   r   ra   r   r`   rb   rc   re   )rh   results_exposure_constraint2r    r"   r
   rj   r^   r   rq   rr   rl   rs   r	   rt   ru   r   r   r/   r   s        r+   r}   z$TestPoissonConstrained2b.setup_class  s     7$$$ 0"7,0N,AC C C8cn--??GG"3",7?56-8 -89 9 9  ''vA58Xa[ ( B B			r-   Nr   rU   r-   r+   r   r     s2        B B [B B Br-   r   c                   $    e Zd Zed             ZdS )TestPoissonConstrained2cc                    t           j        | _        g d| _        d}t	          j        |t          t          j        t          d         j	                            }d}t          j        |j                                      |          }t          ||j        |j        ddd	          | _        || _        |                    |d
d| j        d                   | _        d S )Nr   r   r   r   r   r   r   ra   r   r`   r   )rh   r   r    r"   r
   rj   r^   r#   rn   r   rq   rr   rl   rs   r	   rt   ru   r   r   r/   r   s        r+   r}   z$TestPoissonConstrained2c.setup_class*  s     7$$$ 0"7*,&h1F*G*GI I I 9cn--??GG"3",7?,K,KM M M ''/5A58Xa[ ( B B			r-   Nr   rU   r-   r+   r   r   (  s2        B B [B B Br-   r   c                   $    e Zd Zed             ZdS )TestGLMPoissonConstrained1ac                    ddl m} t          j        | _        g d| _        d}t          j        |t          t          j
                              }d}t          j        |j                                      |          } |||j        |j        ddi	          | _        || _        |                    |d
          | _        d S )Nr   r   rY   r\   )r^   familyr_   atol绽|=r   r   )statsmodels.base._constraintsr	   rh   ri   r    r"   r   rj   r^   r   r
   rq   rr   rl   rs   rt   ru   r   r   r/   )rw   r	   rx   ry   r{   r|   s         r+   r}   z'TestGLMPoissonConstrained1a.setup_classD  s    AAAAAA8''' <wT&.&6&8&8: : : 3cn--??GG"?3",-3UO= = =''U';;			r-   Nr   rU   r-   r+   r   r   B  s-        < < [< < <r-   r   c                   *    e Zd Zed             Zd ZdS )TestGLMPoissonConstrained1bc           	         ddl m} ddlm} ddlm} t          j        | _        g d| _	        d} |j
        |t           |j                    t          j        t          d         j                            }d	}t!          j        |j                                      |          } |||j        |j        d
di          | _        || _        |                    |d          j        | _        d S )Nr   r   r   r   r   r   r   )r^   r   r   r_   r   r   r   r   )r   r	   statsmodels.genmodr   +statsmodels.genmod.generalized_linear_modelr   rh   r   r    r"   rj   r^   r
   r#   rn   r   rq   rr   rl   rs   rt   ru   r   r   r0   r/   )rw   r	   r   r   rx   ry   r{   r|   s           r+   r}   z'TestGLMPoissonConstrained1b.setup_class[  s   AAAAAA//////CCCCCC6$$$ 0cwT&6h&6&8&8&(fT(^-B&C&CE E E 3cn--??GG"?3",-3UO= = =''U';;D			r-   c                 z   | j         }| j        }d}t          j        |t          t          d         j                  }d}|                    || j         j        ddd          }t          |j        |j        d	
           t          |j	        |j	        d
           |
                                }t          ||
                                d
           t          |j        |d
           t          |j        |d
           t          |
                    d          |
                    d          d
           d S )Nr   r   r   r_   r   Fr   )re   rb   warn_convergencerc   g-q=r   gdy=r   linear)which)r/   r    r
   rj   r^   r   r	   r!   r   r'   predictmufittedvalues)r(   r   r    rx   ry   r{   	predicteds          r+   test_compare_glm_poissonz4TestGLMPoissonConstrained1b.test_compare_glm_poissonr  sC   zy/"7,0N,AC C C 3""6
8I*2U() # + + 	T[u====$(7777 LLNN		4<<>>>>>>7777)95AAAA844844"	$ 	$ 	$ 	$ 	$ 	$r-   N)rR   rS   rT   r   r}   r   rU   r-   r+   r   r   Y  s?        E E [E,$ $ $ $ $r-   r   c                       e Zd Zd ZdS )CheckGLMConstrainedMixinc                 l   | j         }| j        }t          |j        |j        d         d           dd l}|                                5  |                    dt                     t          |j	        |j	        d           d d d            n# 1 swxY w Y   t          |j
        |j
        d           d S )Nr3   r   r   r   ignore)r    r/   r   aicinfocritrN   catch_warningssimplefilterFutureWarningbicdeviance)r(   r    r   rN   s       r+   test_glmz!CheckGLMConstrainedMixin.test_glm  s    yz 	$-"2????$$&& 	< 	<!!(M:::DHdhU;;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	t}5AAAAAAs   	8BBBN)rR   rS   rT   r   rU   r-   r+   r   r     s(        B B B B Br-   r   c                   $    e Zd Zed             ZdS )TestGLMLogitConstrained1c                 @   t          d           | _        t          j        | _        t          t          j        t          j        t          j
                              }d}|                    |          | _        | j        j        \  }}t          |||          | _        d S )Nr   x1 = 2.8)slicer"   reslogitresults_constraint1r    r   spector_dataro   exogr   Binomialr	   r/   r   r   rw   mod1r{   Rqs        r+   r}   z$TestGLMLogitConstrained1.setup_class  s    ++ /<%|'8"+--/ / / ((00	y$1"4A..r-   Nr   rU   r-   r+   r   r     s-        / / [/ / /r-   r   c                   l    e Zd Zed             Zej                            d          d             ZdS )TestLogitConstrained1c                 L   t          d           | _        t          j        | _        t          t          j        t          j                  }d}|	                    |d          | _
        | j
        j        j        | j
        j        j        }}t          |||ddi          | _        d S )Nr   r`   )rb   rb   r   )r   r"   r   r   r    r   r   ro   r   r	   r/   r   rt   ru   r   r   s        r+   r}   z!TestLogitConstrained1.setup_class  s    ++
 /\'):;;(((??	y$*CI,A,K1"4A68JKKKr-   	not a GLMreasonc                     d S NrU   r(   s    r+   r   zTestLogitConstrained1.test_glm      r-   N	rR   rS   rT   r   r}   rC   r   rD   r   rU   r-   r+   r   r     s_        L L [L" [[))  *)  r-   r   c                       e Zd Zed             Zd Zej        j        d             Z	ej        j        d             Z
d ZdS )TestGLMLogitConstrained2c                    t          d           | _        t          j        | _        t          t          j        t          j        t          j
                              }d}|                    |d          | _        | j        j        j        | j        j        j        }}t          |||ddi          | _        ||f| _        d S )Nr   x1 - x3 = 0r   r   r   r   )r   r"   r   results_constraint2r    r   r   ro   r   r   r   r	   r/   r   rt   ru   r   constraints_rqr   s        r+   r}   z$TestGLMLogitConstrained2.setup_class  s    ++/<%|'8"+--/ / / ((e(<<	 y$*CI,A,K1"4AHHHVr-   c                     | j         }| j        }|                                }t          ||j        d           t          |j        |d           t          |j        |d           d S )NgHz>r   r   r   )r    r/   r   r   
predict_mur   r   )r(   r    r   r   s       r+   test_predictz%TestGLMLogitConstrained2.test_predict  si    yzLLNN		4?>>>>7777)95AAAAAAr-   c                     | j                                         }t          d|j        v            t	          | j         j                  }|dk    sJ d S )Nr   zx1 - x3 = 0.0)r/   r   r   r   strr   )r(   r   	lc_strings      r+   r   z%TestGLMLogitConstrained2.test_summary  sV     z!!##-?@@@
.//	O++++++r-   c                    dd l }|                                5  |                    dt                     | j                                        }d d d            n# 1 swxY w Y   t          d|j        d         v            d S )Nr   r   r   )rN   r   r   r   r/   r   r   r   )r(   rN   r   s      r+   r   z&TestGLMLogitConstrained2.test_summary2  s     	$$&& 	) 	)!!(M::::&&((D	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)
 	-1BBCCCCCs   5AA!Ac                     | j         }ddlm}  || j        j        | j                  }t          |j        |j        d           t          |j        |j        d           d S )Nr   )fit_constrained_wrapr   r   )r    r   r   r/   modelr   r   r!   )r(   r    r   res_wraps       r+   test_fit_constrained_wrapz2TestGLMLogitConstrained2.test_fit_constrained_wrap  sm    yFFFFFF''
(8$:MNN4@@@@4@@@@@@r-   N)rR   rS   rT   r   r}   r   rC   r   r   r   r   r   rU   r-   r+   r   r     s        $ $ [$B B B [, , , [	D 	D 	DA A A A Ar-   r   c                   $    e Zd Zed             ZdS )TestGLMLogitConstrained2HCc           	      r   t          d           | _        t          j        | _        t          t          j        t          j        t          j
                              }d}ddi}d}|                    |||d          | _        | j        j        \  }}t          |||d||d	          | _        ||f| _        d S )
Nr   HC0scaling_factorB!?r   r   )cov_typecov_kwdsr   )r   r  r  r   )r   r"   r   results_constraint2_robustr    r   r   ro   r   r   r   r	   r/   r   r   r   rw   r   r  r  r{   r   r   s          r+   r}   z&TestGLMLogitConstrained2HC.setup_class  s    ++6<%|'8"+--/ / / $e,(((2: ) H H	 y$1"4AEMEM9O 9O P P P  Vr-   Nr   rU   r-   r+   r   r     s-        $ $ [$ $ $r-   r   c                   l    e Zd Zed             Zej                            d          d             ZdS )TestLogitConstrained2HCc           	      r   t          d           | _        t          j        | _        t          t          j        t          j                  }d}ddi}d}|	                    |||d          | _
        | j
        j        j        | j
        j        j        }}t          |||d||d          | _        ||f| _        d S )	Nr  r  r  r   r   )r  r  tol)r  r  r  r   )r   r"   r   r  r    r   r   ro   r   r	   r/   r   rt   ru   r   r   r  s          r+   r}   z#TestLogitConstrained2HC.setup_class/  s    ++6\'):;;
 $e,(((2: ) + +	 y$*CI,A,K1"4AEMEM9O 9O P P P  Vr-   r   r   c                     d S r   rU   r   s    r+   r   z TestLogitConstrained2HC.test_glmH  r   r-   Nr   rU   r-   r+   r
  r
  -  s\        $ $ [$0 [[))  *)  r-   r
  c                  0   d} t          j        | t          t          d         j                  }|                                 d}dd l} |j        |j                                      |          }|j	        |j
        }}|                    ||ddi           d	}t          j        |t          
          }|                                  |j        |j                                      d          }	|                    |	j	        |	j
        ddi           d S )Nz*deaths ~ C(agecat) + C(smokes) : C(agecat)r   r   z:C(smokes)[T.1]:C(agecat)[3] = C(smokes)[T.1]:C(agec`at)[4]r   rb   r`   r   r\   r]   r_   r   )r
   rj   r^   r   r   rq   rr   rl   rs   rt   ru   r	   )
formula2ry   r   rq   r|   r   r   	formula1amod1alc_1as
             r+   junkr  M  s"    <H

xd(,X(=? ? ?C GGIIINKLLL		#.	)	)	;	;K	H	HB8R\qA1&'9::: :I 666E	IIKKKEU-..@@)+ +E	%+u$,h#7  9 9 9 9 9r-   )<__doc__ior   numpyr#   numpy.testingr   r   r   pandaspdrq   rC   statsmodelsr   r   r	   #statsmodels.discrete.discrete_modelr
   r   r   r   r   r   statsmodels.tools.toolsr   rh   r   r   r   spectorloadr   asarrayro   r   rM   ssread_csvr^   astypeintrn   r   rW   r   r   r   r   r   r   r   r   r   r   r   r   r   r
  r  rU   r-   r+   <module>r$     s              @ @ @ @ @ @ @ @ @ @                   9 9 9 9 9 9 > > > > > > > > ' ' ' ' ' ' ; ; ; ; ; ; 0 0 0 0 0 0       
 $$&&RZ 233 BJ|011  L!2EBBB  	 r{88B<<4000{{3BF4>**[ E- E- E- E- E- E- E- E-P+D +D +D +D +D; +D +D +D\0 0 0 0 0; 0 0 00I I I I I; I I I0    ;   $? ? ? ? ?; ? ? ?BB B B B B; B B B2B B B B B; B B B4< < < < <"> < < <.4$ 4$ 4$ 4$ 4$"> 4$ 4$ 4$nB B B B B; B B B4/ / / / /7 / / /(    4   28A 8A 8A 8A 8A7 8A 8A 8Av$ $ $ $ $!9 $ $ $6    6   @9 9 9 9 9r-   