
    !gR                        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 d dlmZ d dlmZmZ d dlmZmZmZ d d	lmZ d
dl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      Z" G d d      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%      Z) G d& d'      Z* G d( d)e*      Z+y)*    N)assert_allcloseassert_equal)datasets)add_constant)Holder)ConvergenceWarning)truncatedpoissontruncatednegbin)TruncatedLFPoissonTruncatedLFNegativeBinomialPHurdleCountModel)DATA   )RandHIE)results_truncated)results_truncated_stc                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	CheckResultsc                 r    t        | j                  j                  | j                  j                  dd       y )Nh㈵>atolrtol)r   res1paramsres2selfs    l/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/statsmodels/discrete/tests/test_truncated_model.pytest_paramszCheckResults.test_params   s'    		(($))*:*:!	.    c                 r    t        | j                  j                  | j                  j                  dd       y )Nr   Hz>r   )r   r   llfr   r   s    r   test_llfzCheckResults.test_llf"   s     		tyy}}4dKr!   c                 z    t        | j                  j                         | j                  j                  dd       y )NMbP?r   r   )r   r   conf_intr   r   s    r   test_conf_intzCheckResults.test_conf_int%   s*    		**,dii.@.@!	.r!   c                 p    t        | j                  j                  | j                  j                  d       y )Nr'   r   )r   r   bser   r   s    r   test_bsezCheckResults.test_bse)   s    		tyy}}4@r!   c                 r    t        | j                  j                  | j                  j                  dd       y N{Gz?g-q=r   )r   r   aicr   r   s    r   test_aiczCheckResults.test_aic,        		tyy}}4eLr!   c                 r    t        | j                  j                  | j                  j                  dd       y r/   )r   r   bicr   r   s    r   test_biczCheckResults.test_bic/   r3   r!   c                    | j                   j                  }t        j                  t	        | j                   j
                              }t        j                         5  t        j                  dt               |j                  |dz  d      }d d d        t        j
                  | j                   j
                  dd       t        |j                  | j                   j                  dd       y # 1 sw Y   dxY w)	Nignore)categoryr0   r   )alphadispr'   {Gzt?r   r   )r   modelnponeslenr   warningscatch_warningssimplefilterr   fit_regularizedr   r,   )r   r>   r:   res_regs       r   test_fit_regularizedz!CheckResults.test_fit_regularized2   s    		DII,,-.$$& 	F!!(5GH++%*1+EG	F
 			(8(8!	.TYY]]!	.	F 	Fs   2C22C;N)
__name__
__module____qualname__r    r%   r)   r-   r2   r6   rG    r!   r   r   r      s)    .L.AMM.r!   r   c                       e Zd Zed        Zy)TestTruncatedLFPoissonModelc                 H   t         j                  j                         }t        t	        j
                  |j                        d d d df   d      }t        |j                  |d      }|j                  dd      | _
        t               }|j                          || _        y )	N   Fprepend   
truncationnewton  methodmaxiter)r   randhieloadr   r?   asarrayexogr   endogfitr   r   truncated_poissonr   clsdatar]   modr   s        r   setup_classz'TestTruncatedLFPoissonModel.setup_classB   s|    $$&BJJtyy1!RaR%8%H Ta@77(C78y r!   NrH   rI   rJ   classmethodre   rK   r!   r   rM   rM   A        r!   rM   c                       e Zd Zed        Zy)TestZeroTruncatedLFPoissonModelc                 F   t         j                  j                         }t        t	        j
                  |j                        d d d df   d      }t        |j                  |d      }|j                  d      | _
        t               }|j                          || _        y )NrO   FrP   r   rS   rV   rY   )r   rZ   r[   r   r?   r\   r]   r   r^   r_   r   r   zero_truncated_poissonr   ra   s        r   re   z+TestZeroTruncatedLFPoissonModel.setup_classN   sz    $$&BJJtyy1!RaR%8%H Ta@7737'y##%r!   Nrf   rK   r!   r   rj   rj   M   rh   r!   rj   c                   "    e Zd Zed        Zd Zy)TestZeroTruncatedNBPModelc                 F   t         j                  j                         }t        t	        j
                  |j                        d d d df   d      }t        |j                  |d      }|j                  d      | _
        t               }|j                          || _        y )N   FrP   r   rS   rV   rl   )r   rZ   r[   r   r?   r\   r]   r   r^   r_   r   r   zero_truncted_nbpr   ra   s        r   re   z%TestZeroTruncatedNBPModel.setup_classZ   sz    $$&BJJtyy1!RaR%8%H*4::tJ7737'y r!   c                      y NrK   r   s    r   r)   z'TestZeroTruncatedNBPModel.test_conf_intd   s    r!   N)rH   rI   rJ   rg   re   r)   rK   r!   r   ro   ro   Y   s     r!   ro   c                   .    e Zd Zed        Zd Zd Zd Zy)TestTruncatedLFPoisson_predictc                    ddg| _         t        j                  j                  d       d}t        j                  |df      }d|d |dz  df<   |j                  | j                         }t        j                  |d|j                        | _	        t        | j                  |d      }|j                  d	d
      | _        y )Nr         ?{         r   sizerS   bfgs  rW   )expected_paramsr?   randomseedr@   dotr	   rvsshaper^   r   r_   resrb   nobsr]   mu_truer>   s        r   re   z*TestTruncatedLFPoisson_predict.setup_classi   s     #h
		swway!XdAgXq[((3../$((!'--H	"399dqA))64)8r!   c                     t        | j                  j                         j                         | j                  j                         dd       y N皙?r   r   r   predictmeanr^   r   s    r   	test_meanz(TestTruncatedLFPoisson_predict.test_meanu   4    ((*//14::??3D!	.r!   c                     | j                   j                  d      j                         }t        || j                  j                         dd       y )Nvarwhichr   r   r   r   r   r   r^   r   _dispersion_factorr   vs     r   test_varz'TestTruncatedLFPoisson_predict.test_vary   >    HH5)..04::>>+$TBr!   c                     | j                   }|j                  d      }t        j                  t	        j
                  d      |j                  d      d d d f   d      }t        ||dd       y )Nprobr      	mean-mainr   绽|=r=   )r   r   r	   pmfr?   aranger   r   r   prpr2s       r   test_predict_probz0TestTruncatedLFPoisson_predict.test_predict_prob   s]    hh[[v[&""IIaL#++K+8DA1FCe%8r!   NrH   rI   rJ   rg   re   r   r   r   rK   r!   r   rv   rv   h   s$    	9 	9.@9r!   rv   c                   .    e Zd Zed        Zd Zd Zd Zy)TestTruncatedNBP_predictc                    g d| _         t        j                  j                  d       d}t        j                  |df      }d|d |dz  df<   t        j
                  |j                  | j                   d d             }t        j                  || j                   d   dd|j                        | _
        t        | j                  |dd	      }|j                  d
dd      | _        y )N)r   rx   rx   i  rz   r{   r   r   r|   )rT   pnmr   )rX   rY   maxfun)r   r?   r   r   r@   expr   r
   r   r   r^   r   r_   r   r   s        r   re   z$TestTruncatedNBP_predict.setup_class   s    +
		twway!XdAgXq[&&#"5"5cr":;<#''S((,aH	,SYY89Q@))4d)Cr!   c                     t        | j                  j                         j                         | j                  j                         dd       y r   r   r   s    r   r   z"TestTruncatedNBP_predict.test_mean   r   r!   c                     | j                   j                  d      j                         }t        || j                  j                         dd       y )Nr   r   g?r0   r   r   r   s     r   r   z!TestTruncatedNBP_predict.test_var   r   r!   c                     | j                   }|j                  d      }t        j                  t	        j
                  d      |j                  d      d d d f   |j                  d   dd      }t        ||dd	       y )
Nr   r      r   r   r{   r   r   r=   )r   r   r
   r   r?   r   r   r   r   s       r   r   z*TestTruncatedNBP_predict.test_predict_prob   sl    hh[[v[&!!IIbMKKkK*1d73SZZ^QK 	Ce%8r!   Nr   rK   r!   r   r   r      s&    D D.@9r!   r   c                       e Zd Zd Zd Zy)CheckTruncatedSTc                    | j                   }| j                  }t        |j                  |j                  d       t        |j
                  |j                  d       |j                  }|j                  j                  j                  d   }t        |j                  d | |j                  d | d       t        |j                  d | |d |df   d       t        |j                  d | |d |df   dd	       t        |j                  d | |d |d
f   dd	       t        |j                   |j"                         t        |j$                  |j&                  d   d       t        |j(                  |j&                  d   d       |j                  j*                  j                  d   }t        |j                  j*                  dk  j-                         d       t        |j.                  |t1        |j                        z
         y )N:0yE>r   gh㈵>r   r   r+   r{   Mb@?r=   rq   r#   r   r   )r   r   r   r$   llllnullll_0params_tabler>   r]   r   r   r,   tvaluespvaluesr   df_modeldf_mr1   icrr5   r^   sumdf_residrA   )r   r   r   pt2kr   s         r   
test_basiczCheckTruncatedST.test_basic   s   yyyy$''5TYYT:JJOO!!!$BQRatD!c"1"a%jt<Ra(#bqb!e*4dKRa(#bqb!e*4dKT]]DII.$((2,T:$((2,T:zz%%a(djj&&*//115T]]D3t{{+;$;<r!   c                 v   | j                   }| j                  }|j                  j                  }|j	                  dd      }t        |j                  |d   d       t        |j                  |d   dd	
       |j                         d   }t        |d   |d   dd	
       t        |d   |d   dd	
       |j                  j                  j                  d      }|j                  j                  }|j	                  |d      }t        |j                  |d   d       t        |j                  |d   dd	
       |j                         d   }t        |d   |d   dd	
       t        |d   |d   dd	
       |j                  j                  }	 |j	                  d      }|tt        |j                  |d   d       t        |j                  |d   dd	
       |j                         d   }t        |d   |d   dd	
       t        |d   |d   dd	
       |j                  j                  j                  d      }|j                  j                  }|j                  j                   dz   }|j"                  d   |j                  j                   z   }|j	                  dd      }t        |j                  || |d ddf   d       t        |j                  || |d ddf   dd	
       |j                         || }t        |d d df   |d ddf   dd	
       t        |d d df   |d ddf   dd	
       |j                  j                  j                  d      }|j$                  j                  }|j"                  d   dz
  }|j	                  dd      }t        |j                  d | |d ddf   d       t        |j                  d | |d ddf   dd	
       |j                         d | }t        |d d df   |d ddf   dd	
       t        |d d df   |d ddf   dd	
       y # t        $ r d }Y w xY w)Nr   T)r   averager   g-C6
?r   r   r   r   r=   rO   r   rR   r   )r   r   r   z	prob-baseg-C6J?)r   r   margins_meanstableget_predictionr   	predictedser(   r>   r]   r   margins_atmeans
margins_cmNotImplementedErrormargins_cprrT   r   
margins_pr)	r   r   r   rdfpredciex	start_idxr   s	            r   test_predictzCheckTruncatedST.test_predict   s   yyyy   &&""d"CAT:Qd?]]_Q1s1vDu=1s1vDu= ZZ__!!!$""((""2["9AT:Qd?]]_Q1s1vDu=1s1vDu= oo##	&&t&4D DNNCF>DGGSV$UC#BBqE3q65ABqE3q65A ZZ__!!!$$$JJ))A-	IIaL4::000""">y3S"a[tL	!,c#2#q&k!	/]]_Yq)1a4#crc1f+DuE1a4#crc1f+DuE ZZ__!!!$oo##IIaL1""d"Cr*CQKdCS"a[!	/]]_Ra 1a4#crc1f+DuE1a4#crc1f+DuEC # 	D	s   P) )P87P8NrH   rI   rJ   r   r   rK   r!   r   r   r      s    =,<Fr!   r   c                   "    e Zd Zed        Zd Zy)TestTruncatedLFPoissonStc                     t         d   }g d}t         |   }t        ||      j                  dd      | _        t        j
                  | _        t        ||t         d         }|j                  dd      | _        y Ndocvisagettotchrconstr~   ,  rW   r   )offset)r   r   r_   r   
results_tsresults_trunc_poissonr   
res_offsetrb   r^   
exog_namesr]   
mod_offsets        r   re   z$TestTruncatedLFPoissonSt.setup_class  sq    X0
J%eT266f?B 7 D33'tDLI
#vsCr!   c                 0   | j                   }| j                  }t        j                  |j                        }t        j                  |j                        }t        |dd  |dd  d       t        |d   |d   dz
  d       |j                         }|j                         }t        ||d       |j                  j                  d d }|j                  j                  d d }|j                  |d      }|j                  ||d      }t        ||d       y 	Nr   r   r   r   rR   F)	transform)r   r   
r   r   r?   r\   r   r   r   r>   r]   r   	r   r   resoparamsoparams1pred1predor   offss	            r   test_offsetz$TestTruncatedLFPoissonSt.test_offset  s    yy**T[[)**T[[)WQR[t<
GAJN>u40ZZ__Ra zz  !$R51R>u40r!   NrH   rI   rJ   rg   re   r   rK   r!   r   r   r     s    	D 	D1r!   r   c                   "    e Zd Zed        Zd Zy)TestTruncatedNegBinStc                     t         d   }g d}t         |   }t        ||      j                  dd      | _        t        j
                  | _        t        ||t         d         }|j                  dd      | _        y r   )r   r   r_   r   r   results_trunc_negbinr   r   r   s        r   re   z!TestTruncatedNegBinSt.setup_class)  sv    X0
J/t<@@IL A N221%9=fG
#vsCr!   c                 0   | j                   }| j                  }t        j                  |j                        }t        j                  |j                        }t        |dd  |dd  d       t        |d   |d   dz
  d       |j                         }|j                         }t        ||d       |j                  j                  d d }|j                  j                  d d }|j                  |d      }|j                  ||d      }t        ||d       y r   r   r   s	            r   r   z!TestTruncatedNegBinSt.test_offset6  s    yy**T[[)**T[[)WQR[t<
GAJN>u40ZZ__Ra zz  !$R51R>u40r!   Nr   rK   r!   r   r   r   '  s    
D 
D1r!   r   c                       e Zd Zed        Zy)TestTruncatedLFPoisson1Stc                     t         d   }g d}t         |   }t        ||d      j                  dd      | _        t        j
                  | _        y )Nr   r   r   rS   r~   r   rW   )r   r   r_   r   r   results_trunc_poisson1r   rb   r^   r   r]   s       r   re   z%TestTruncatedLFPoisson1St.setup_classL  sM    X0
J%4Acc- 	 44r!   Nrf   rK   r!   r   r   r   J  s    5 5r!   r   c                       e Zd Zed        Zy)TestTruncatedNegBin1Stc                     t         d   }g d}t         |   }t        ||d      j                  dd      | _        t        j
                  | _        y )Nr   r   r   rS   rU   r   rW   )r   r   r_   r   r   results_trunc_negbin1r   r  s       r   re   z"TestTruncatedNegBin1St.setup_classY  sM    X0
J/4Ac3c/ 	 33r!   Nrf   rK   r!   r   r  r  W  s    4 4r!   r  c                   (    e Zd Zed        Zd Zd Zy)TestHurdlePoissonRc                     t         d   }g d}t         |   }t        ||      j                  dd      | _        t        j
                  | _        y )Nr   )r   r   r   rU   r   rW   )r   r   r_   r   	results_thurdle_poissonr   r  s       r   re   zTestHurdlePoissonR.setup_classf  sK    X0
J#E4044H=@ 5 B++r!   c                 v   | j                   }| j                  }t        |j                  |j                  d       |j
                  }t        |j                  |d d df   d       t        |j                  |d d df   d       t        |j                  |d d df   dd	       t        |j                  |d d d
f   dd	       t        |j                  |j                         t        |j                  |j                  |j                  z
         t        |j                  |j                  d       t!        j"                  t!        j$                  d
d      t!        j$                  d
      f      }|j&                  |d d d f   |f   }t        t!        j(                  |j+                               |dd	       y )Nr   r   r   r   r+   r   r{   r   r=   rq   r#      -C6?)r   r   r   r$   loglikr   r   r,   r   r   r   r   df_residualr   df_nullr1   r?   concatenater   vcovr\   
cov_params)r   r   r   r   idxr  s         r   r   zTestHurdlePoissonR.test_basico  s?   yyyy$++D9SAYT:#ad)$7c!Q$idFc!Q$idFT]]D$4$45T]]DLL43C3C$CD$((6 nnbii1oryy|<=yyQWs*+

4??#45t!	.r!   c                 H   | j                   }| j                  }|j                  j                  j	                  dd      }|j
                  j                  |      }t        j                  |       }d|z
  }t        ||j                  dd       |j
                  j                  j                  ||j                  d d       }t        ||j                  dd       |j                  j                  |d	      }t        ||j                  dd       |j                  j                  |d
	      d   |z  }	t        j                  |      |	d<   t        |	d d |j                   dd       t        ||z  |j"                  dd       |j                  |      }
t        |
|j"                  dd       |j                  |d	      }t        ||j                  dd       |j                  |d	      }t        ||j"                  d|j                   d   z
  z  dd       |j                  |d	      }	|j                  |d	      }t        |	d|z
  z  |j                  dd       |j                  |d
	      d   }t        |d d |j                   dd       d}|j                  j                  d | }|j                  |d
t        j$                  d            }|j'                  |d
t        j$                  d            }t        ||j(                  dd       |j                  d
t        j$                  d            }|j'                  d
t        j$                  d      d      }t        |j	                  d      |j(                  dd       dD ]b  }|j                  ||	      }|j'                  ||	      }t        ||j(                  dd       |j+                         j,                  |dfk(  rbJ  |j.                  d d }t        j0                  g d      }t        ||dd       y )Nr   T)keepdimsr   r   r=   rO   r   r   r   r'   gư>gƠ>r#   mean-nonzero	prob-mainz
prob-truncr   rR   rq   r   y_valuesr   )r   r  r   )r   r   r  	prob-zerolinear)g	mgI;ԿgJhgBz9)?gn)Ci)r   r   r>   r]   r   results_zeror   r?   r   r   predict_zero_prob_nonzeror   results_countpredict_mean_mainsqueezepredict_probpredict_meanr   r   r   summary_framer   resid_pearsonr\   )r   r   r   r   mu1	prob_zeroprob_nzprob_nz_	mean_main	prob_mainmmmmnzptprobsk_exex5p1ap1bp2ap2br   p3ap3bresid_p1resid_p2s                             r   r   zTestHurdlePoissonR.test_predict  s   yyyyZZ__!!!d!3''+FFC4L	i-!2!2DI$$**88dkk"1oN$"3"3$TJ&&..r.E		4#9#9!	. &&..r.@CgM	zz),	!	"1t'8'8t$O	G+T->->!	. LL4,,4dC\\"K\0D22DIll2^l4T..!d6G6G6J2JK!	.LL;L7	\\"L\1	QV,d.?.?!	.Rv.q1bq	4#4#44dK jjooet$ll3fryy|lD!!#Vbiil!KS]]UC ll"))A,l?!!1*. " 0S]]UK O 	:E,,s%,0C%%c%7CCUG$$&,,q	999		: %%bq)::   	(DAr!   N)rH   rI   rJ   rg   re   r   r   rK   r!   r   r	  r	  d  s     , ,.*ABr!   r	  c                       e Zd Zd Zd Zy)CheckHurdlePredictc                    | j                   }| j                  }|j                  |j                  k(  sJ |j                  |j                  k(  sJ |j                  j
                  |j
                  k(  sJ t        |j                  j                        |j                  k(  sJ |j                  j                  |j                  k(  sJ |j                          y rt   )
r   r   r   r   r>   k_extrarA   r   k_paramssummary)r   r   r   s      r   r   zCheckHurdlePredict.test_basic  s    yyyy}}---}}---zz!!T\\1114::(()T]]:::zz$$777 	r!   c                    | j                   }|j                  j                  }|j                  j                  }|j	                  d      j                         }t        ||j                         d       |dkD  }||   j                         }|j	                  d      j                         }t        ||d       |j	                  ||   d      j                         }t        ||d	       |j                  j	                  d      j                         }	t        |	|d	       t        |	|d
       |j	                  d      j                         }
t        |
|j                  j                         d       |j                  j	                  d      j                         }
t        |
|j                  |dkD     j                         d       t        j                  |j                  t                    t        |      z  }|j	                  d      j                  d      }t        ||dd       |j                         }t        |j                   j                  d      |d       	 |j#                          |j	                  d      j                  d      }t        ||d   d
       t        ||d   d       y # t$        $ r Y Ow xY w)Nr   r   r0   r   r   r  g?)r]   r   r   r  r   r   r<   r=   r   r  )r   r>   r^   r]   r   r   r   r"  residr   r?   bincountastypeintrA   get_diagnosticprobs_predicted
plot_probsImportError)r   r   r^   r]   	pred_meanmask_nzmean_nzpred_mean_nzpred_mean_nnzpred_mean_nzmpred_varfreq	pred_probdia_hnb
pred_prob0s                  r   r   zCheckHurdlePredict.test_predict  sN   yy

  zzLLvL.335		5::<d;!).%%'||.|9>>@gD9 $w-+9 % ;;?46 	wT:**222@EEGwT:}4@ <<e<,113$**.."2>%%--E-:??A$**UQY"7";";"=DI {{5<<,-E
:LLvL.33A6		4e$?%%'//44Q7O	  \\\499!<

DG$7
IaLu=  		s   +J? ?	K
KNr   rK   r!   r   r?  r?    s    *>r!   r?  c                       e Zd Zed        Zy)TestHurdleNegbinSimulatedc           
         d}t        j                  t        j                  |      t        j                  dd|      f      }t        j                  |      |dz  z  }t        ||dd      }t        j                  g d      }|j                  |dt        j                  d      	      }|j                  d
      }|j                  d   }t        j                  |t        j                  |      f      }t         j                  j                  d      }	|	j                  |d
f      }
t        j                  ||
k  d
      }t        ||dd      }|j                  d      | _        d}t        |dd||dz
  |d
z
  g d      | _        y )Ni  r   rq   negbin)distzerodist)gٿr{   rx   r   rx   rx   r   2   r  r   i\c:)axisr   rl   rO   r  r{   )zm_constzm_x1zm_alphar   x1r:   )r   rB  r   r  r   rA  r   )r?   column_stackr@   linspacer   r   arrayr   cumsumr   r   default_rngargminr_   r   r   r   )rb   r   r]   y_fakerd   p_dgpr3  cdfnrngur^   mod_hnbr  s                 r   re   z%TestHurdleNegbinSimulated.setup_class  sK    r{{1a/FGH4TAX. vt(XN67E"))B-Hll1oIIaLoosBGGAJ/0 ii##I.JJ1v		#'*"5$(08E;;s;+!VaK!	r!   Nrf   rK   r!   r   rY  rY    s    " "r!   rY  ),rB   numpyr?   numpy.testingr   r   statsmodelsr   statsmodels.tools.toolsr   statsmodels.tools.testingr   statsmodels.tools.sm_exceptionsr   "statsmodels.distributions.discreter	   r
   $statsmodels.discrete.truncated_modelr   r   r   5statsmodels.sandbox.regression.tests.test_gmm_poissonr   results.results_discreter   resultsr   r  r   r   r   rM   rj   ro   rv   r   r   r   r   r   r  r	  r?  rY  rK   r!   r   <module>r|     s      7   0 ,  G - 3 7!. !.H	, 		l 	 9 9D"9 "9JTF TFn1/ 1B 1,  1F
5 0 
5
4- 
4aB aBH9> 9>x% 2 %r!   