a
    \:b"                     @   s  d dl mZ d dlmZ d dlZd dlZd dlmZ	 d dl
Zd dlZd dl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 d
ZG dd deZG dd deZG dd deZdd Z dd Z!dd Z"dd Z#dd Z$dd Z%dd Z&dd  Z'd!d" Z(dS )#    )assert_series_equal)StringION)cpunish)loadload_pandas)ols)make_hypotheses_matrices)add_constant)assert_equal3TOTEMP ~ GNPDEFL + GNP + UNEMP + ARMED + POP + YEARc                   @   sH   e Zd Zedd Zdd Zdd Zdd Zd	d
 Ze	j
jdd ZdS )CheckFormulaOLSc                 C   s   t  | _d S N)r   data)cls r   Elib/python3.9/site-packages/statsmodels/formula/tests/test_formula.pysetup_class   s    zCheckFormulaOLS.setup_classc                 C   s   | j jdksJ d S )NZTOTEMP)modelZendog_namesselfr   r   r   test_endog_names   s    z CheckFormulaOLS.test_endog_namesc                 C   s   | j jg dksJ d S )N)Z	InterceptZGNPDEFLZGNPZUNEMPZARMEDZPOPZYEAR)r   
exog_namesr   r   r   r   test_exog_names   s    zCheckFormulaOLS.test_exog_namesc                 C   s    t | jjt| jjdd d S )NT)Zprepend)nptr
   r   exogr	   r   r   r   r   r   test_design#   s    
zCheckFormulaOLS.test_designc                 C   s   t | jj| jj d S r   )r   r
   r   Zendogr   r   r   r   r   
test_endog'   s    zCheckFormulaOLS.test_endogc                 C   sF   t  * t dd | j   W d    n1 s80    Y  d S )Nignorez!kurtosistest only valid for n>=20)warningscatch_warningsfilterwarningsr   fitZsummaryr   r   r   r   test_summary*   s
    
zCheckFormulaOLS.test_summaryN)__name__
__module____qualname__classmethodr   r   r   r   r   pytestZmarkZsmoker"   r   r   r   r   r      s   
r   c                       s    e Zd Ze fddZ  ZS )TestFormulaPandasc                    s&   t  j}tt|| _tt|   d S r   )r   r   r   longley_formular   superr(   r   r   r   	__class__r   r   r   3   s    zTestFormulaPandas.setup_classr#   r$   r%   r&   r   __classcell__r   r   r,   r   r(   2   s   r(   c                       s    e Zd Ze fddZ  ZS )TestFormulaDictc                    s8   t dd t j D }tt|| _tt| 	  d S )Nc                 s   s   | ]\}}||  fV  qd S r   )tolist).0kvr   r   r   	<genexpr>=       z.TestFormulaDict.setup_class.<locals>.<genexpr>)
dictr   r   itemsr   r)   r   r*   r0   r   r+   r,   r   r   r   ;   s    zTestFormulaDict.setup_classr.   r   r   r,   r   r0   :   s   r0   c                  C   sp   d} t  j}t| | }d}t||}|j}|j}t|g dg dg dgd t	|dgdgd	gg d S )
Nr   z-(GNPDEFL = GNP), (UNEMP = 2), (YEAR/1829 = 1))r      r   r   r   r   )r   r   r   r9   r   r   r   )r   r   r   r   r   r   ghqA?   r      r9   )
r   r   r   r!   r   ZcoefsZ	constantsr   assert_almost_equalZassert_array_equal)formuladtaresultsZtest_formulaZLCRQr   r   r   
test_testsB   s    
rC   c                  C   s>   t d} ddlm} || } td|  }t|jj| j d S )Na  "type","income","education","prestige"
"accountant","prof",62,86,82
"pilot","prof",72,76,83
"architect","prof",75,92,90
"author","prof",55,90,76
"chemist","prof",64,86,90
"minister","prof",21,84,87
"professor","prof",64,93,93
"dentist","prof",80,100,90
"reporter","wc",67,87,52
"engineer","prof",72,86,88
"undertaker","prof",42,74,57
"lawyer","prof",76,98,89
"physician","prof",76,97,97
"welfare.worker","prof",41,84,59
"teacher","prof",48,91,73
"conductor","wc",76,34,38
"contractor","prof",53,45,76
"factory.owner","prof",60,56,81
"store.manager","prof",42,44,45
"banker","prof",78,82,92
"bookkeeper","wc",29,72,39
"mail.carrier","wc",48,55,34
"insurance.agent","wc",55,71,41
"store.clerk","wc",29,50,16
"carpenter","bc",21,23,33
"electrician","bc",47,39,53
"RR.engineer","bc",81,28,67
"machinist","bc",36,32,57
"auto.repairman","bc",22,22,26
"plumber","bc",44,25,29
"gas.stn.attendant","bc",15,29,10
"coal.miner","bc",7,7,15
"streetcar.motorman","bc",42,26,19
"taxi.driver","bc",9,19,10
"truck.driver","bc",21,15,13
"machine.operator","bc",21,20,24
"barber","bc",16,26,20
"bartender","bc",16,28,7
"shoe.shiner","bc",9,17,3
"cook","bc",14,22,16
"soda.clerk","bc",12,30,6
"watchman","bc",17,25,11
"janitor","bc",7,20,8
"policeman","bc",34,47,41
"waiter","bc",8,32,10r   )read_csvzprestige ~ income + education)r   pandasrD   r   r!   r
   fittedvaluesindex)r?   rD   r   r   r   r   test_formula_labelsP   s
    .rH   c                  C   sJ   ddl m}  d}t }t j}t|| }t|jj	|
|jd d S )Nr   )logzQTOTEMP ~ log(GNPDEFL) + log(GNP) + UNEMP + ARMED +
                    POP + YEARr;   )numpyrI   r   r   r   r!   r   r=   rF   valuespredictr   )rI   r>   r   r?   r@   r   r   r   test_formula_predict   s    
rM   c                  C   s   t jg dg ddg dd} td|  }|| }t jg dg dd}t|| || j}t|| |t jg dg ddd}t jg dg dd}t|| |dg di}t jg dg d	d}t|| d S )
Nr9   r<      )yx)   rO   r9   rG   y ~ x)g      ?g       @g      @rQ   )rG   name)r   r9   r<   )pd	DataFramer   r!   rL   ZSeriesr   rQ   )r   r@   resultZexpectedr   r   r   test_formula_predict_series   s     



rY   c                  C   s   G dd dt } t j}| |}td|d }||}t|j	| t j}d |d j
d< | |}t jj|_td|d }||}t|j	| tt|d tt j d S )Nc                   @   s   e Zd Zdd Zdd ZdS )z&test_patsy_lazy_dict.<locals>.LazyDictc                 S   s
   || _ d S r   r   )r   r   r   r   r   __init__   s    z/test_patsy_lazy_dict.<locals>.LazyDict.__init__c                 S   s   t | j| S r   )npZarrayr   )r   keyr   r   r   __missing__   s    z2test_patsy_lazy_dict.<locals>.LazyDict.__missing__N)r#   r$   r%   r[   r^   r   r   r   r   LazyDict   s   r_   EXECUTIONS ~ SOUTH + INCOMErZ   INCOMEr   r9   )r7   r   r   r   r   r!   rL   r   Zassert_allcloserF   locrG   r
   len)r_   r   resres2r   r   r   test_patsy_lazy_dict   s    



rf   c                  C   s   t  j} d | d jd< td| d }|| }t|j|dd   t  j} d | d jd< | j	dd} t
jdd	P}t
d
 || }dt|d jv sJ dt|d jv sJ W d    n1 s0    Y  t|j| d S )Nra   r   r`   rZ   r9   FrS   T)recordalwaysZValueWarningr:   znan values have been dropped)r   r   r   rb   r   r!   rL   r
   rF   Z
to_recordsr   r   simplefilterreprmessage)r   rd   re   wr   r   r   test_patsy_missing_data   s    




4rm   c                  C   sx   t jddgddgddggddgd	} td
| d}| }tj}t| |dg W d    n1 sj0    Y  d S )NrO   gQ?
   gQ?   gQ?ZBSAZ
AbsorbancecolumnszAbsorbance ~ BSArZ   g      ?)	rV   rW   r   r!   patsyZ
PatsyErrorr'   raisesrL   )dfr   r!   errorr   r   r   test_predict_nondataframe   s    rv   c                  C   s   t g dg dd} tdg dig}td|| d}d|jv sHJ tt tdd	| d W d    n1 sv0    Y  d S )
NrN   )r<         )rQ   rP   z)rO   rx   	   z	y ~ x + z)Zeval_envr   rT   env)	rV   rW   rr   ZEvalEnvironmentr   r   r'   rs   	TypeError)rt   r{   r   r   r   r   test_formula_environment   s    r}   c                  C   sp   t jd} tj| ddgd}|jd d }td|d }|jdd  d }||}|j	j
d dkslJ d S )	N)i  r<   rP   rQ   rp   i  rT   )r>   r   r   )r\   ZrandomZstandard_normalrV   rW   Zilocr   r!   Zget_predictionZpredicted_meanshape)rQ   Z	data_fullr   rd   ZoosZ
predictionr   r   r    test_formula_predict_series_exog   s    
r   ))Zstatsmodels.compat.pandasr   ior   r   rJ   r\   Znumpy.testingZtestingr   rE   rV   rr   r'   Zstatsmodels.datasetsr   Zstatsmodels.datasets.longleyr   r   Zstatsmodels.formula.apir   Z statsmodels.formula.formulatoolsr   Zstatsmodels.toolsr	   Zstatsmodels.tools.testingr
   r)   objectr   r(   r0   rC   rH   rM   rY   rf   rm   rv   r}   r   r   r   r   r   <module>   s4   7	