
    M/PhR                     &   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+dS )*    N)assert_allcloseassert_equal)datasets)add_constant)Holder)ConvergenceWarning)truncatedpoissontruncatednegbin)TruncatedLFPoissonTruncatedLFNegativeBinomialPHurdleCountModel)DATA   )RandHIE)results_truncated)results_truncated_stc                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	CheckResultsc                 T    t          | j        j        | j        j        dd           d S )Nh㈵>atolrtol)r   res1paramsres2selfs    o/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/statsmodels/discrete/tests/test_truncated_model.pytest_paramszCheckResults.test_params   s6    	($)*:!	. 	. 	. 	. 	. 	.    c                 T    t          | j        j        | j        j        dd           d S )Nr   Hz>r   )r   r   llfr   r   s    r   test_llfzCheckResults.test_llf"   s'    	ty}4dKKKKKKr!   c                 n    t          | j                                        | j        j        dd           d S )NMbP?r   r   )r   r   conf_intr   r   s    r   test_conf_intzCheckResults.test_conf_int%   s?    	**,,di.@!	. 	. 	. 	. 	. 	.r!   c                 R    t          | j        j        | j        j        d           d S )Nr'   r   )r   r   bser   r   s    r   test_bsezCheckResults.test_bse)   s%    	ty}4@@@@@@r!   c                 T    t          | j        j        | j        j        dd           d S N{Gz?g-q=r   )r   r   aicr   r   s    r   test_aiczCheckResults.test_aic,   '    	ty}4eLLLLLLr!   c                 T    t          | j        j        | j        j        dd           d S 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                     |
                    |dz  d          }d d d            n# 1 swxY w Y   t          |j        | j         j        dd           t          |j        | j         j        dd           d S )	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(   	DI,--..$&& 	F 	F!(5GHHHH++%*1+EEG	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F
 		(8!	. 	. 	. 	.TY]!	. 	. 	. 	. 	. 	.s   6BBBN)
__name__
__module____qualname__r    r%   r)   r-   r2   r6   rG    r!   r   r   r      s        . . .L L L. . .A A AM M MM M M. . . . .r!   r   c                   $    e Zd Zed             ZdS )TestTruncatedLFPoissonModelc                 b   t           j                                        }t          t	          j        |j                  d d d df         d          }t          |j        |d          }|	                    dd          | _
        t                      }|                                 || _        d S )	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    $$&&BJty11!!!RaR%8%HHH Ta@@@77(C788yy   r!   NrH   rI   rJ   classmethodre   rK   r!   r   rM   rM   A   -          [  r!   rM   c                   $    e Zd Zed             ZdS )TestZeroTruncatedLFPoissonModelc                 `   t           j                                        }t          t	          j        |j                  d d d df         d          }t          |j        |d          }|	                    d          | _
        t                      }|                                 || _        d S )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   s    $$&&BJty11!!!RaR%8%HHH Ta@@@7737''yy##%%%r!   Nrf   rK   r!   r   rj   rj   M   rh   r!   rj   c                   *    e Zd Zed             Zd ZdS )TestZeroTruncatedNBPModelc                 `   t           j                                        }t          t	          j        |j                  d d d df         d          }t          |j        |d          }|	                    d          | _
        t                      }|                                 || _        d S )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   s    $$&&BJty11!!!RaR%8%HHH*4:tJJJ7737''yy   r!   c                     d S 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                   6    e Zd Zed             Zd Zd Zd ZdS )TestTruncatedLFPoisson_predictc                 z   ddg| _         t          j                            d           d}t          j        |df          }d|d |dz  df<   |                    | j                   }t          j        |d|j                  | _	        t          | j	        |d          }|                    d	d
          | _        d S )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way!!XdAgXq[((3.//$(!'-HHH	"39dqAAA))64)88r!   c                     t          | j                                                                        | j                                        dd           d S N皙?r   r   r   predictmeanr^   r   s    r   	test_meanz(TestTruncatedLFPoisson_predict.test_meanu   R    ((**//114:??3D3D!	. 	. 	. 	. 	. 	.r!   c                     | j                             d                                          }t          || j                                        dd           d S )Nvarwhichr   r   r   r   r   r   r^   r   _dispersion_factorr   vs     r   test_varz'TestTruncatedLFPoisson_predict.test_vary   N    H5))..004:>>++$TBBBBr!   c                     | j         }|                    d          }t          j        t	          j        d          |                    d          d d d f         d          }t          ||dd           d S )Nprobr      	mean-mainr   绽|=r=   )r   r   r	   pmfr?   aranger   r   r   prpr2s       r   test_predict_probz0TestTruncatedLFPoisson_predict.test_predict_prob   sw    h[[v[&&"IaLL#++K+88DA1F FCe%888888r!   NrH   rI   rJ   rg   re   r   r   r   rK   r!   r   rv   rv   h   s]        	9 	9 [	9. . .@ @ @9 9 9 9 9r!   rv   c                   6    e Zd Zed             Zd Zd Zd ZdS )TestTruncatedNBP_predictc                    g d| _         t          j                            d           d}t          j        |df          }d|d |dz  df<   t          j        |                    | j         d d                             }t          j        || j         d         dd|j	                  | _
        t          | j
        |dd	          }|                    d
dd          | _        d S )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    +mm
	tway!!XdAgXq[&#"5crc":;;<<#'S(,aH H H	,SY89Q@ @ @))4d)CCr!   c                     t          | j                                                                        | j                                        dd           d S r   r   r   s    r   r   z"TestTruncatedNBP_predict.test_mean   r   r!   c                     | j                             d                                          }t          || j                                        dd           d S )Nr   r   g?r0   r   r   r   s     r   r   z!TestTruncatedNBP_predict.test_var   r   r!   c                    | j         }|                    d          }t          j        t	          j        d          |                    d          d d d f         |j        d         dd          }t          ||dd	           d S )
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   s    h[[v[&&!IbMMKKkK**111d73SZ^QK K 	Ce%888888r!   Nr   rK   r!   r   r   r      s`        D D [D. . .@ @ @9 9 9 9 9r!   r   c                       e Zd Zd Zd ZdS )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                                     d           t          |j        |t1          |j                  z
             d S )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   yy$'5555TYT::::JO!!$BQBRaRtDDDD!c"1"a%jt<<<<RaR(#bqb!e*4dKKKKRaR(#bqb!e*4dKKKKT]DI...$(2,T::::$(2,T::::z%a(dj&*//111555T]D3t{+;+;$;<<<<<r!   c                 <	   | j         }| j        }|j        j        }|                    dd          }t          |j        |d         d           t          |j        |d         dd	
           |                                d         }t          |d         |d         dd	
           t          |d         |d         dd	
           |j	        j
                            d          }|j        j        }|                    |d          }t          |j        |d         d           t          |j        |d         dd	
           |                                d         }t          |d         |d         dd	
           t          |d         |d         dd	
           |j        j        }	 |                    d          }n# t          $ r d }Y nw xY w|t          |j        |d         d           t          |j        |d         dd	
           |                                d         }t          |d         |d         dd	
           t          |d         |d         dd	
           |j	        j
                            d          }|j        j        }|j	        j        dz   }|j        d         |j	        j        z   }|                    dd          }t          |j        ||         |d ddf         d           t          |j        ||         |d ddf         dd	
           |                                ||         }t          |d d df         |d ddf         dd	
           t          |d d df         |d ddf         dd	
           |j	        j
                            d          }|j        j        }|j        d         dz
  }|                    dd          }t          |j        d |         |d ddf         d           t          |j        d |         |d ddf         dd	
           |                                d |         }t          |d d df         |d ddf         dd	
           t          |d d df         |d ddf         dd	
           d S )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   yy  &""d"CCAT::::Qd????]]__Q1s1vDu====1s1vDu==== Z_!!!$$"(""2["99AT::::Qd????]]__Q1s1vDu====1s1vDu==== o#	&&t&44DD" 	 	 	DDD	 DNCF>>>>DGSV$UCCCC#BBqE3q65AAAABqE3q65AAAA Z_!!!$$$J)A-	IaL4:00""">>y{3S"a[tLLLL	!,c#2#q&k!	/ 	/ 	/ 	/]]__Yq[)111a4#crc1f+DuEEEE111a4#crc1f+DuEEEE Z_!!!$$o#IaL1""d"CCrr*CQKdCCCCS"a[!	/ 	/ 	/ 	/]]__RaR 111a4#crc1f+DuEEEE111a4#crc1f+DuEEEEEEs   'F> >GGNrH   rI   rJ   r   r   rK   r!   r   r   r      s7        = = =,<F <F <F <F <Fr!   r   c                   *    e Zd Zed             Zd ZdS )TestTruncatedLFPoissonStc                 *   t           d         }g d}t           |         }t          ||                              dd          | _        t          j        | _        t          ||t           d                   }|                    dd          | _        d S 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  s    X000
J%eT2266f?B 7 D D3'tDLIII
#vsCCr!   c                 R   | j         }| j        }t          j        |j                  }t          j        |j                  }t          |dd          |dd          d           t          |d         |d         dz
  d           |                                }|                                }t          ||d           |j        j        d d         }|j        j	        d d         }|                    |d          }|                    ||d          }t          ||d           d S 	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   y*T[))*T[))WQRR[t<<<<
GAJN>>>>u40000Z_RaR z !$R511R>>u4000000r!   NrH   rI   rJ   rg   re   r   rK   r!   r   r   r     s?        	D 	D [	D1 1 1 1 1r!   r   c                   *    e Zd Zed             Zd ZdS )TestTruncatedNegBinStc                 *   t           d         }g d}t           |         }t          ||                              dd          | _        t          j        | _        t          ||t           d                   }|                    dd          | _        d S r   )r   r   r_   r   r   results_trunc_negbinr   r   r   s        r   re   z!TestTruncatedNegBinSt.setup_class)  s    X000
J/t<<@@IL A N N21%9=fG G G
#vsCCr!   c                 R   | j         }| j        }t          j        |j                  }t          j        |j                  }t          |dd          |dd          d           t          |d         |d         dz
  d           |                                }|                                }t          ||d           |j        j        d d         }|j        j	        d d         }|                    |d          }|                    ||d          }t          ||d           d S r   r   r   s	            r   r   z!TestTruncatedNegBinSt.test_offset6  s   y*T[))*T[))WQRR[t<<<<
GAJN>>>>u40000Z_RaR z !$R511R>>u4000000r!   Nr   rK   r!   r   r   r   '  s?        
D 
D [
D1 1 1 1 1r!   r   c                   $    e Zd Zed             ZdS )TestTruncatedLFPoisson1Stc                     t           d         }g d}t           |         }t          ||d                              dd          | _        t          j        | _        d S )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  sa    X000
J%4A  cc-- 	 4r!   Nrf   rK   r!   r   r   r   J  s-        5 5 [5 5 5r!   r   c                   $    e Zd Zed             ZdS )TestTruncatedNegBin1Stc                     t           d         }g d}t           |         }t          ||d                              dd          | _        t          j        | _        d S )Nr   r   r   rS   rU   r   rW   )r   r   r_   r   r   results_trunc_negbin1r   r  s       r   re   z"TestTruncatedNegBin1St.setup_classY  sa    X000
J/4A  c3c// 	 3r!   Nrf   rK   r!   r   r  r  W  s-        4 4 [4 4 4r!   r  c                   0    e Zd Zed             Zd Zd ZdS )TestHurdlePoissonRc                     t           d         }g d}t           |         }t          ||                              dd          | _        t          j        | _        d S )Nr   )r   r   r   rU   r   rW   )r   r   r_   r   	results_thurdle_poissonr   r  s       r   re   zTestHurdlePoissonR.setup_classf  s[    X000
J#E40044H=@ 5 B B+r!   c                 :   | 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        |                                          |dd	           d S )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   yy$+D9999SAYT::::#aaad)$7777c!!!Q$idFFFFc!!!Q$idFFFFT]D$4555T]DL43C$CDDD$(6666 nbi1oory||<==yQQQWs*+
4??#4#455t!	. 	. 	. 	. 	. 	.r!   c                 n   | j         }| j        }|j        j                            dd          }|j                            |          }t          j        |           }d|z
  }t          ||j
        dd           |j        j                            ||j        d d                   }t          ||j
        dd           |j                            |d	          }t          ||j        dd           |j                            |d
	          d         |z  }	t          j        |          |	d<   t          |	d d         |j        dd           t          ||z  |j        dd           |                    |          }
t          |
|j        dd           |                    |d	          }t          ||j        dd           |                    |d	          }t          ||j        d|j        d         z
  z  dd           |                    |d	          }	|                    |d	          }t          |	d|z
  z  |j
        dd           |                    |d
	          d         }t          |d d         |j        dd           d}|j        j        d |         }|                    |d
t          j        d                    }|                    |d
t          j        d                    }t          ||j        dd           |                    d
t          j        d                    }|                    d
t          j        d          d          }t          |                    d          |j        dd           dD ]i}|                    ||	          }|                    ||	          }t          ||j        dd           |                                j        |dfk    sJ j|j        d d         }t          j        g d          }t          ||dd           d S )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\   yyZ_!!!d!33''++FC4LL	i-!2DIIII$*88dk"1"oNN$"3$TJJJJ&..r.EE		4#9!	. 	. 	. 	. &..r.@@CgM	z),,	!	"1"t'8t$OOOO	G+T->!	. 	. 	. 	. LL4,4dCCCC\\"K\00D2DIIIIll2^l44T.!d6G6J2JK!	. 	. 	. 	.LL;L77	\\"L\11	QV,d.?!	. 	. 	. 	.Rv..q1bqb	4#44dKKKK joete$ll3fry||lDD!!#Vbill!KKS]UCCCC ll")A,,l??!!1*. " 0 0S]UKKKK O 	: 	:E,,s%,00C%%c%77CCUGGGG$$&&,q	99999 %bqb):      	(DAAAAAAr!   N)rH   rI   rJ   rg   re   r   r   rK   r!   r   r	  r	  d  sU        , , [,. . .*AB AB AB AB ABr!   r	  c                       e Zd Zd Zd ZdS )CheckHurdlePredictc                 6   | 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 |	                                 d S rt   )
r   r   r   r   r>   k_extrarA   r   k_paramssummary)r   r   r   s      r   r   zCheckHurdlePredict.test_basic  s    yy}----}----z!T\11114:())T]::::z$7777 	r!   c                    | j         }|j        j        }|j        j        }|                    d                                          }t          ||                                d           |dk    }||                                         }|                    d                                          }t          ||d           |                    ||         d                                          }t          ||d	           |j                            d                                          }	t          |	|d	           t          |	|d
           |                    d                                          }
t          |
|j        	                                d           |j                            d                                          }
t          |
|j        |dk             	                                d           t          j        |                    t                              t          |          z  }|                    d                              d          }t          ||dd           |                                }t          |j                            d          |d           	 |                                 n# t$          $ r Y nw xY w|                    d                              d          }t          ||d         d
           t          ||d         d           d S )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  s   y
 zLLvL..3355		5::<<d;;;;!).%%''||.|99>>@@gD9999 $w-+9 % ; ;;?466 	wT::::*222@@EEGGwT::::}4@@@@ <<e<,,1133$*.."2"2>>>>%--E-::??AA$*UQY"7";";"="=DIIII {5<<,,--E

:LLvL..33A66		4e$????%%''/44Q77OOOO	     	 	 	D	 \\\4499!<<

DG$7777
IaLu======s    K 
K"!K"Nr   rK   r!   r   r?  r?    s2          *> *> *> *> *>r!   r?  c                   $    e Zd Zed             ZdS )TestHurdleNegbinSimulatedc           
      6   d}t          j        t          j        |          t          j        dd|          f          }t          j        |          |dz  z  }t          ||dd          }t          j        g d          }|                    |dt          j        d          	          }|                    d
          }|j	        d         }t          j        |t          j        |          f          }t           j
                            d          }	|	
                    |d
f          }
t          j        ||
k     d
          }t          ||dd          }|                    d          | _        d}t          |dd||dz
  |d
z
  g d          | _        d S )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  s    r{1a/F/FGHH4TAX. vt(XNNN66677E")B--HHll1ooIaLosBGAJJ/00 i##I..JJ1v	#'***"5$(08E E 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 7 7 7 7 7 7 7             0 0 0 0 0 0 , , , , , ,                      G F F F F F - - - - - - 3 3 3 3 3 3 7 7 7 7 7 7!. !. !. !. !. !. !. !.H	 	 	 	 	, 	 	 		 	 	 	 	l 	 	 	       9 9 9 9 9 9 9 9D"9 "9 "9 "9 "9 "9 "9 "9JTF TF TF TF TF TF TF TFn1 1 1 1 1/ 1 1 1B 1  1  1  1  1,  1  1  1F
5 
5 
5 
5 
5 0 
5 
5 
5
4 
4 
4 
4 
4- 
4 
4 
4aB aB aB aB aB aB aB aBH9> 9> 9> 9> 9> 9> 9> 9>x% % % % % 2 % % % % %r!   