
    !g#                     n   d Z ddlZddlZddlmZm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  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      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      Z G d d e      Zy)!z
Unit tests for fit_constrained
Tests for Poisson and Binomial are in discrete


Created on Sun Jan  7 09:21:39 2018

Author: Josef Perktold
    N)assert_allcloseassert_equal)family)GLM)OLSWLS)ValueWarning)add_constantc                   .    e Zd Zed        Zd Zd Zd Zy)ConstrainedCompareMixinc                 V   d\  }}t         j                  j                  d       t         j                  j                  ||dz
        }t	        |      }|j                  d      dz  }|dt         j                  j                  |      z  z   }|| _        || _        g d| _        t        j                  | j                        | _
        dg| _        |d d | j                  f   x| _        }t        |d|d d df   z  z
  |      }g d|j                  d d  || _        | j!                          y )Nd             r   r               ?constx2x3x4)nprandomseedrandnr
   sumendogexogidx_ucarrayidx_p_ucidx_cexogcr   
exog_namesmod2initclsnobsk_exogxy_trueyxc	mod_ols_cs           f/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/statsmodels/genmod/tests/test_constrained.pysetup_classz#ConstrainedCompareMixin.setup_class   s    f
		vIIOOD&1*-OqAQ...	!
xx

+C	1cjj=))	BC!AqD'M)2.	"=	Q
    c                     | j                   }| j                  }t        |j                  | j                     |j                  d       y N绽|=rtol)res1res2r   paramsr&   selfr=   r>   s      r5   test_paramsz#ConstrainedCompareMixin.test_params-   s1    yyyyDMM2DKKeLr7   c                    | j                   }| j                  }t        |j                  |j                         t	        |j
                  |j
                  d       t	        |j                  | j                     |j                  d       t	        |j                         | j                  d d d f   | j                  f   |j                         dd       y )Nr:   r;   g:0y5>gV瞯<)r<   atol)	r=   r>   r   df_residr   scalebser&   
cov_paramsr@   s      r5   test_sezConstrainedCompareMixin.test_se2   s    yyyyT]]DMM2

DJJU;/F)$--4*@+& '(,(95	Rr7   c                 x    | j                   }| j                  }t        |j                  |j                  d       y r9   )r=   r>   r   resid_responseresidr@   s      r5   
test_residz"ConstrainedCompareMixin.test_resid<   s*    yyyy++TZZeDr7   N)__name__
__module____qualname__classmethodr6   rB   rI   rM    r7   r5   r   r      s&     &M
REr7   r   c                       e Zd Zed        Zy)TestGLMGaussianOffsetc                    | j                   j                         | _        t        | j                  | j
                  d| j                  d d | j                  f   j                         z        }g d|j                  d d  |j                         | _
        t        j                  | j
                  j                  d         | _        y )Nr   offsetr   r   r*   fitr>   r   r"   r(   r#   r'   squeezer)   r=   r   arangeshaper&   r-   mods     r5   r+   zTestGLMGaussianOffset.initD   s    88<<>#))SYYsxx3995==??A7q779yy!34r7   NrN   rO   rP   rQ   r+   rR   r7   r5   rT   rT   B   s    5 5r7   rT   c                       e Zd Zed        Zy)TestGLMGaussianConstrainedc                     | j                   j                         | _        t        | j                  | j
                        }g d|j                  d d  |j                  d      | _        y )Nr   x1r   r   r   x1=0.5	r*   rY   r>   r   r"   r#   r)   fit_constrainedr=   r]   s     r5   r+   zTestGLMGaussianConstrained.initP   sG    88<<>#))SXX&=q&&x0r7   Nr_   rR   r7   r5   ra   ra   N       1 1r7   ra   c                       e Zd Zed        Zy)TestGLMGaussianOffsetHCc                    d}| j                   j                  |      | _        t        | j                  | j
                  d| j                  d d | j                  f   j                         z        }g d|j                  d d  |j                  |      | _
        t        j                  | j
                  j                  d         | _        y )NHC0cov_typer   rV   r   r   rX   r-   rn   r^   s      r5   r+   zTestGLMGaussianOffsetHC.initZ   s    88<<<2#))SYYsxx3995==??A7q77H7-yy!34r7   Nr_   rR   r7   r5   rj   rj   X       5 5r7   rj   c                       e Zd Zed        Zy)TestGLMGaussianConstrainedHCc                     d}| j                   j                  |      | _        t        | j                  | j
                        }g d|j                  d d  |j                  d|      | _        y )Nrl   rm   rc   re   rf   ro   s      r5   r+   z!TestGLMGaussianConstrainedHC.initg   sV    88<<<2#))SXX&=q&&x(&Cr7   Nr_   rR   r7   r5   rr   rr   e       D Dr7   rr   c                       e Zd Zed        Zy)ConstrainedCompareWtdMixinc                    d\  }}t         j                  j                  d       t         j                  j                  ||dz
        }t	        |      }t         j                  j                  dd|      | _        |j                  d      dz  }|dt         j                  j                  |      z  z   }|| _        || _	        g d| _
        t        j                  | j                        | _        dg| _        |d d | j                  f   x| _        }t        |d|d d df   z  z
  || j                        }g d	|j                   d d  || _        | j%                          y )
Nr   r   r   
   r   r   r   )weightsr   )r   r   r   r    r
   randintaweightsr!   r"   r#   r$   r%   r&   r'   r(   r   r)   r*   r+   r,   s           r5   r6   z&ConstrainedCompareWtdMixin.setup_classr   s   f
		vIIOOD&1*-Oyy((B5qAQ...	!
xx

+C	1cjj=))	BC!AqD'M)2s||D	"=	Q
r7   N)rN   rO   rP   rQ   r6   rR   r7   r5   rv   rv   p   s     r7   rv   c                       e Zd Zed        Zy)TestGLMWtdGaussianOffsetc                    | j                   j                         | _        t        | j                  | j
                  d| j                  d d | j                  f   j                         z  | j                        }g d|j                  d d  |j                         | _        t        j                  | j
                  j                  d         | _        y )Nr   rW   var_weightsr   r   r*   rY   r>   r   r"   r(   r#   r'   rZ   r{   r)   r=   r   r[   r\   r&   r]   s     r5   r+   zTestGLMWtdGaussianOffset.init   s    88<<>#))SYYsxx3995==??!ll, 8q779yy!34r7   Nr_   rR   r7   r5   r}   r}      rp   r7   r}   c                       e Zd Zed        Zy)TestGLMWtdGaussianConstrainedc                     | j                   j                         | _        t        | j                  | j
                  | j                        }g d|j                  d d  |j                  d      | _	        y )Nr   rc   re   
r*   rY   r>   r   r"   r#   r{   r)   rg   r=   r]   s     r5   r+   z"TestGLMWtdGaussianConstrained.init   sM    88<<>#))SXX3<<@=q&&x0r7   Nr_   rR   r7   r5   r   r      rh   r7   r   c                       e Zd Zed        Zy)TestGLMWtdGaussianOffsetHCc                    d}| j                   j                  |      | _        t        | j                  | j
                  d| j                  d d | j                  f   j                         z  | j                        }g d|j                  d d  |j                  |      | _        t        j                  | j
                  j                  d         | _        y )Nrl   rm   r   r   r   r   r   ro   s      r5   r+   zTestGLMWtdGaussianOffsetHC.init   s    88<<<2#))SYYsxx3995==??!ll, 8q77H7-yy!34r7   Nr_   rR   r7   r5   r   r      s    5 5r7   r   c                       e Zd Zed        Zy)TestGLMWtdGaussianConstrainedHCc                     d}| j                   j                  |      | _        t        | j                  | j
                  | j                        }g d|j                  d d  |j                  d|      | _	        y )Nrl   rm   r   rc   re   r   ro   s      r5   r+   z$TestGLMWtdGaussianConstrainedHC.init   s\    88<<<2#))SXX3<<@=q&&x(&Cr7   Nr_   rR   r7   r5   r   r      rt   r7   r   c                   >    e Zd Zed        Zed        Zd Zd Zd Zy)TestGLMBinomialCountConstrainedc                 "   ddl m}  |       }t        j                  |j                        |_        t        j                  |j
                        |_        t        |j                  d      }t        j                  t        |j
                              }|d d d df   }t        |j
                  |t        j                         |      | _        t        |j
                  |t        j                         |      | _        | j                          y )Nr   )loadT)prepend)r   rW   )statsmodels.datasets.star98r   r   asarrayr#   r"   r
   oneslenr   r   Binomialr*   mod1r+   )r-   r   datar#   rW   	exog_keeps         r5   r6   z+TestGLMBinomialCountConstrained.setup_class   s    4 vJJtyy)	ZZ

+
DIIt4TZZ)CRCL	tzz9V__5F$& tzz40A$&
r7   c                 2   | j                   j                         | _        | j                  j                  j
                  d   }t        j                  |dz
        | _        t        j                  |      dd  }| j                  j                  |      | _        y )Nr   r   r   r*   rY   r>   r   r#   r\   r   r[   r&   eyerg   r=   r-   kconstraintss      r5   r+   z$TestGLMBinomialCountConstrained.init   sh    88<<>HHMM"yyQ'ffQin88++K8r7   c                 x    | j                   }| j                  }t        |j                  |j                  d       y )N:0yE>r;   )r=   r>   r   rK   r@   s      r5   rM   z*TestGLMBinomialCountConstrained.test_resid   s,    yyyy++T-@-@tLr7   c                 p   dD ]8  }t        t        | j                  |      t        | j                  |      d       : t	        j
                         5  t	        j                  dt               t        | j                  j                  | j                  j                  d       d d d        y # 1 sw Y   y xY w)N)llfnull_devianceaicrE   df_modelpearson_chi2rF   r:   r;   ignore)	r   getattrr=   r>   warningscatch_warningssimplefilterFutureWarningbic)rA   attrs     r5   test_glm_attrz-TestGLMBinomialCountConstrained.test_glm_attr   s    : 	BDGDIIt4#DIIt45B	B $$& 	F!!(M:DIIMM499==uE	F 	F 	Fs   AB,,B5c                 r   | j                   }| j                  }t        |j                        }t        |j                        }d}t	        j
                         5  t	        j                  dt               |j                  t        j                  |      dd  |d      }|j                  t        j                  |      dd  |d      }d d d        t        j                  j                  d       t        |j                  |j                  d	       t        |j                  |j                         d}t	        j
                         5  t	        j                  dt               |j                  t        j                  |      dd  |d      }|j                  t        j                  |      dd  |d      }d d d        t        |j                  |j                  d	       t        |j                  |j                  d	       t        |j                  |j                         t        |j                   |j                          t        |j#                         d
d  |j#                         d
d         t	        j
                         5  t	        j                  dt$               t	        j                  dt               t	        j                  dt&               | j                   j#                          | j                   j)                          d d d        y # 1 sw Y   MxY w# 1 sw Y   ixY w# 1 sw Y   y xY w)NFr   r   T)use_fscalarg#B;)rD   r   r;   i)r=   r>   r   r?   r   r   r   r	   	wald_testr   r   r   pvalue	statisticr   df_denomdf_numsummaryr   RuntimeWarningsummary2)rA   r=   r>   k1k2r   wt2wt1s           r5   	test_waldz)TestGLMBinomialCountConstrained.test_wald   sT   yyyy$$& 	K!!(L9..ABuT.JC..ABuT.JC	K 	

CJJU;s}}4@S\\3<<0$$& 	K!!(L9..ABuT.JC..ABuT.JC	K 	

CJJQ7s}}4@S\\3<<0SZZ,S[[]34(#++-*=> $$& 	! !!(M:!!(L9!!(N;IIII 	! 	!)	K 	K	K 	K	! 	!s'   A/L
A/L BL-L L*-L6N)	rN   rO   rP   rQ   r6   r+   rM   r   r   rR   r7   r5   r   r      s9     " 9 9MF"!r7   r   c                       e Zd Zed        Zy)!TestGLMBinomialCountConstrainedHCc                 :   | j                   j                  d      | _        | j                  j                  j
                  d   }t        j                  |dz
        | _        t        j                  |      dd  }| j                  j                  |d      | _        y )Nrl   rm   r   r   r   r   r   s      r5   r+   z&TestGLMBinomialCountConstrainedHC.init
  sr    88<<</HHMM"yyQ'ffQin88++K%+Hr7   Nr_   rR   r7   r5   r   r   	  s    I Ir7   r   )__doc__r   numpyr   numpy.testingr   r   statsmodels.genmod.familiesr   +statsmodels.genmod.generalized_linear_modelr   #statsmodels.regression.linear_modelr   r   statsmodels.tools.sm_exceptionsr	   statsmodels.tools.toolsr
   r   rT   ra   rj   rr   rv   r}   r   r   r   r   r   rR   r7   r5   <module>r      s      7 . ; 8 8 0(E (EV	53 	51!8 1
55 
5D#: D!8 0
59 
51$> 15!; 5D&@ DN!&= N!bI(G Ir7   