U
    Kvf1p                     @   s  d dl Z d dl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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mZ d d
lT d dlmZmZmZm Z  d dl!m"Z" erd dl#Z#dd Z$i d dfddZ%i d dfddZ&d>ddZ'ef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' Z0d(d) Z1d*d+ Z2d,d- Z3d.d/ Z4d0d1 Z5d2d3 Z6d4d5 Z7d6d7 Z8d8d9 Z9d:d; Z:d<d= Z;dS )?    N
PatsyError)DesignMatrix
DesignInfo)EvalEnvironment)	ModelDescTerm	INTERCEPT)C)Helmert)balancedLookupFactor)design_matrix_buildersbuild_design_matrices)*)have_pandashave_pandas_categoricalhave_pandas_categorical_dtypepandas_Categorical_from_codes)Originc           
      C   s  t ||st|jj|ks t|d k	rJt ||s8t|jj|ksbtn|d ksVt|d ksbt| r|d krt|jg|\}n6t|j|jg|\}	}t |	|st|	jj|kstt ||st|jj|kstn,|jjd kst|d ks|jjd kstd S N)npallcloseAssertionErrordesign_infocolumn_namesr   terms)
expect_full_designslhsrhsdataexpected_rhs_valuesexpected_rhs_namesexpected_lhs_valuesexpected_lhs_namesZnew_rhsZnew_lhs r%   8/tmp/pip-unpacked-wheel-68fdvdus/patsy/test_highlevel.pycheck_result   s*    r'   matrixc                 C   s&   d}t |tr|d7 }t| |||dS N	dataframe   return_type)
isinstanceintdmatrixformula_liker    depthr-   r%   r%   r&   dmatrix_pandas:   s    
r4   c                 C   s&   d}t |tr|d7 }t| |||dS r)   )r.   r/   	dmatricesr1   r%   r%   r&   dmatrices_pandas@   s    
r6   c              
      s  t |tr|d7 } fdd}t | tjttf sTt | trJt | d tsTt| dr|d kr|t| ||}	d }
t	|	g \}nt
| ||}t	| \}
}t||
| |||| n ttt
| | ttt| | tg}tg}tr|t |t |d krd|D ](}||  |}t|d | |||| q |D ]2}z||  | W n tk
rX   Y nX tq.nj|D ]2}z||  | W n tk
r   Y nX tqh|D ],}||  |\}
}t||
| |||| qd S )Nr+   c                      s
   t  gS r   iterr%   r    r%   r&   data_iter_makerL   s    zt.<locals>.data_iter_makerr   __patsy_get_model_desc__)r.   r/   sixstring_typesr   r   tuplehasattrincr_dbuilderr   incr_dbuildersr'   pytestraisesr   r0   r5   r   appendr4   r6   r   )r2   r    r3   r   r!   r"   r#   r$   r:   builderr   r   buildersZ
one_mat_fsZ
two_mat_fsfr%   r9   r&   tF   s    

    



  

  rH   c              	   C   sb   t |tr|d7 }ttg}tr*|ttg7 }|D ].}z|| || W n |k
rV   Y q.X tq.d S )Nr+   )r.   r/   r0   r5   r   r4   r6   r   )r2   r    r3   excfsrG   r%   r%   r&   	t_invalid   s    
rK   c                     s	  t dddgdddggi dddddgdddggd	d
dg t d dddgdddggfi dddddgdddggd	d
dg t tdddgdddggi dddddgdddggd	d
dg t d tdddgdddggfi dddddgdddggd	d
dg tdddgdddggdd} t | i dddddgdddggdddg t d | fi dddddgdddggdddg t ddgdddgdddggfi dddddgdddggd	d
dgdgdggdg t dgdggdddgdddggfi dddddgdddggd	d
dgdgdggdg t tddgtdddgdddggfi dddddgdddggd	d
dgdgdggdg t tdgdggtdddgdddggfi dddddgdddggd	d
dgdgdggdg tdddgdddggdd}tddgdd}t ||fi dddddgdddggdddgdgdggdg tdddgdddgdddggfi d tdddggfi d tdddggdddggdddggfi d trRt tddddgii dddgdgdggdg t tjdddgddi dddgdgdggdg t tddddgitddddgifi dddgdgdggdgdgdgdggdg t tjdddgddtjdddgddfi dddgdgdggdgdgdgdggdg t tdddggtjdddggdddgdfi dddddggdddgdddggddd g t tdddgi dddgdgdggd	g ttjdggdgd!tjdggdgd!fi d G d"d# d#t	}| }t |ddgddgddggd$dd%ddgddggd&d'gdgdggd(g G d)d* d*t	}t| i d t d+ddgddgd,dd%ddgddggd-dgdgdggdg t d.ddgddgd,dd%ddgddggd-dg t d/ddgddgd,dd%dddgdddggd-ddg t
jst td+ddgddgd,dd%ddgddggd-dgdgdggdg d0d1}t|tsttjtt||ddgid2 tg ttdgg}t |dd3d4d5gidd%d3gd4gd5ggdg tg tg ttdgg}t |dd3d4d5gidd%dd3gdd4gdd5ggd-dg tttdggtg ttdgg}t |d3d4d5gd6d7d8gd9dd%dd3gdd4gdd5ggd-dgd6gd7gd8ggdg g ttdggtg ttdggf}t|d:d; dd<}	t |	d |	d fdd6d7d8gidd%dd6gdd7gdd8ggd-dg t |	d dd6d7d8gidd%dd6gdd7gdd8ggd-dg t |	d |	d fdd6d7d8gidd%dd6gdd7gdd8ggd-dgd6gd7gd8ggdg dddg}
t d=i dd%ddgddgddggd-d>g t d=d>d6d7d8gidd%dd6gdd7gdd8ggd-d>g td=i dttfd? d@dA }|  td td=i  ttfd? td  fdBdC}|  d S )DNr+                  r   FZx0x1x2foo)Zdefault_column_prefixZfoo0Zfoo1Zfoo2Zy0barZbar0xasdf)namey      	   )columnsZx7Zx8Zx9y1y2)indexc                   @   s   e Zd Zdd ZdS )z.test_formula_likes.<locals>.ForeignModelSourcec                 S   s"   t ttdggttdggS )NYX)r   r   r   selfr    r%   r%   r&   r;      s    zGtest_formula_likes.<locals>.ForeignModelSource.__patsy_get_model_desc__N__name__
__module____qualname__r;   r%   r%   r%   r&   ForeignModelSource   s   rh   )r`   ra   TX[0]X[1]r`   c                   @   s   e Zd Zdd ZdS )z1test_formula_likes.<locals>.BadForeignModelSourcec                 S   s   |S r   r%   rb   r%   r%   r&   r;      s    zJtest_formula_likes.<locals>.BadForeignModelSource.__patsy_get_model_desc__Nrd   r%   r%   r%   r&   BadForeignModelSource   s   rk   y ~ x)rX   rU   	Interceptz~ xx + yu   Ã©zutf-8r9   g      ?      @g      @
         rU   rX   c                   S   s   t ddddgigS )NrU   r+   rL   rM   r7   r%   r%   r%   r&   <lambda>+      z$test_formula_likes.<locals>.<lambda>)Zeval_env
~ x_in_envx_in_env)rI   c               	   S   s0   d} t di ddddgddgddggddg d S )	NrV   rv   r+   TrL   rM   rm   rw   rH   rw   r%   r%   r&   check_nested_callF  s     z-test_formula_likes.<locals>.check_nested_callc               	      s0   d} t di  dddgddgddggddg d S )	NrV   rv   Tr+   rL   rM   rm   rw   rx   ry   er%   r&   check_nested_call_2P  s     z/test_formula_likes.<locals>.check_nested_call_2)rH   r   asarrayr   rK   r   pandasZ	DataFrameSeriesobjectr<   PY3unicodedecoder.   r   rB   rC   r   r0   r   r   r   r   	NameErrorr   capture)dmZx_dmZy_dmrh   Zforeign_modelrk   eacutedescZ	termlistsrF   rw   rz   r}   r%   r{   r&   test_formula_likes   s      "     
 $ 
 , 
 0 
  
 &*         
 
    
  
     
 
        
  

r   c                  C   s  t sd S tjdddgddddgd} tjd	d
dgddddgd}tddd}t|ddgddgddggsntt|jddgst|j	j
ddgkstt|jdddgsttddd\}}t|d	gd
gdggstt|jdgst|j	j
dgkstt|jdddgstt|ddgddgddggsBtt|jddgsZt|j	j
ddgksptt|jdddgstt| dd}t|dgdgdggstt|jdgst|j	j
dgkstt|jdddgstt|| fdd\}}t|d	gd
gdggs*tt|jdgs@t|j	j
dgksTtt|jdddgsntt|dgdgdggstt|jdgst|j	j
dgkstt|jdddgstt| dddgfdd\}}	t|j| js tt|	j| jsttdddg| fdd\}
}t|
j| jsFtt|j| js\tdd l}|jj }zHd|j_ tjttdddgiddd tjttddgdgdddd W 5 ||j_ X d S )Nr+   rL   rM   ZAArp   rq   rr   )rW   r_   rN   rO   rP   BBs1r*   r,   rm   zs2 ~ s1s2      r   FrU   rl   rs   )r   r   r   r0   r   r   r   array_equalr\   r   r   r_   r5   patsy.highlevelZ	highlevelrB   rC   r   )r   r   Zdf1Zdf2Zdf3Zdf4Zdf5Zdf6Zdf7Zdf8Zdf9Zdf10patsyZ
had_pandasr%   r%   r&   test_return_pandasW  sr    "$       
r   c                  C   sn   t ddd} td| }|jjddddgks.t|jjddgksBtt|jjdksVt|jjd tksjtd S )	NrL   aba:brm   b[T.b2]za[T.a2]:b[b1]za[T.a2]:b[b2]r   )	r   r0   r   r   r   
term_nameslenr   r	   )r    r   r%   r%   r&   test_term_info  s    

 
r   c                  C   s  dddgdddgt jdddgt jddd	dgd
ddgtdddgtd
ddgt jd
ddgtdd} td| dddgdgdggdg td| dddgdgdggdg td| dddgdgdggdg td| ddddgddgddggddg td| dddddgdddgdddggdddg td| dddddgdddgdddggddd g td!| dddddgdddgdddggd"d#d$g td%| dddddgdddgdddggd&d'd(g d S ))Nr+   rL   rM   g      ?g       @g      @)ZdtypeTFrS   rT   Zbaz)r+   hi)r   r   cdr|   rG   ghz~ 0 + ar   r   z~ 0 + br   z~ 0 + cr   z~ 0 + dzd[False]zd[True]z~ 0 + eze[bar]ze[baz]ze[foo]z~ 0 + fzf[1]zf[2]zf[3]z~ 0 + gzg[bar]zg[baz]zg[foo]z~ 0 + hzh[1]zh[foo]zh[(1, 'hi')])r   r~   Zfloat32r
   arrayr   rH   r9   r%   r%   r&   test_data_types  sR    	
 
 
 
 
 
 
 
r   c                  C   s  t ddd} td| ddddgddgddgddggddg td	| ddddgddgddgddggdd
g td| ddddgddgddgddggddg td| ddddddgddddgddddgddddggddddg td| ddddddgddddgddddgddddggddddg td| ddddddgddddgddddgddddggddddg t| d t| d< td| ddddgddgddgddggddg td| ddddgddgddgddggddg td| ddddgddgddgddggddg d S )NrL   r   z~ C(a)r   Tr+   rm   z
C(a)[T.a2]z~ C(a, levels=['a2', 'a1'])zC(a, levels=['a2', 'a1'])[T.a1]z~ C(a, Treatment(reference=-1))z#C(a, Treatment(reference=-1))[T.a1]za*ba[T.a2]r   za[T.a2]:b[T.b2]z0 + a:bza[a1]:b[b1]za[a2]:b[b1]za[a1]:b[b2]za[a2]:b[b2]z1 + a + a:bza[a1]:b[T.b2]za[a2]:b[T.b2]r   za[H.a2]zC(a, Treatment)zC(a, Treatment)[T.a2])r   rH   r
   r   r9   r%   r%   r&   test_categorical  sv     














	   r   c                  C   s   dddgdddgddd	gd
} t d| dddgdgdgdgdgdggdg t d| ddddgddgdd	ggddg t d| ddddgddgddggddg d S )Nr+   rL   rM   rN   rO   rP   rp   rq   rr   )rU   rX   za b cz0 + I(x + y)r   TzI(x + y)z
Q('a b c')rm   z	center(x)r   rx   r9   r%   r%   r&   test_builtins  s&       r   c               
      s  dddgdddgddddgddd	gdg t dddddd	g} t | t |  }|t | } fd
d}td|}t| d \}}|jjdgkst|jjdddgkstt 	|dgdgdggstt 	|t 
dddgdddg|dd  fsttd|}t|g d \}|jjdddgks6tt 	|dgdgdggsTtt 	|t 
dddgdddg|dd  fsttttd| tttd| d S )Na2r+   rL   rM   )r   rU   a1rN   rO   rP   c                      s   t  S r   r7   r%   Zdatasr%   r&   r:     s    z)test_incremental.<locals>.data_iter_makerz!1 ~ a + center(np.sin(center(x)))rm   r   zcenter(np.sin(center(x)))r   z~ a + center(np.sin(center(x)))zx ~ xrU   )r   r~   sinZmeanrA   r   r   r   r   r   Zcolumn_stackr@   rB   rC   r   )rU   Zsin_center_xZx_colr:   rF   r   r   rE   r%   r   r&   test_incremental  sP    


r   c                   C   sH   t dddddgidddtdgdtdgdtdggdd	g d S )
Nz~ np.sin(x)rU   r+   rL   rM   r   Trm   z	np.sin(x))rH   r   r   r%   r%   r%   r&   test_env_transform  s
    &r   c               
      s   t ddd tddd d<  d d  d<  fdd	} | d
dddddg | ddddddg | ddddddg | dddddg | dddddddg | dddddddddg d S )NrL   r   r   r+   rN   rQ   rR   c                    s   t |  }|jj|kstd S r   )r0   r   r   r   )formulaordermr9   r%   r&   t_terms3  s    
z test_term_order.<locals>.t_termsza + b + x1 + x2rm   r   r   zb + a + x2 + x1z0 + x1 + a + x2 + b + 1z0 + a:b + a + b + 1r   za + a:x1 + x2 + x1 + bza:x1z@0 + a:x1:x2 + a + x2:x1:b + x2 + x1 + a:x1 + x1:x2 + x1:a:x2:a:bzx1:x2za:x1:x2zx2:x1:bz	x1:a:x2:b)r   r   Zlinspace)r   r%   r9   r&   test_term_order.  s,       r   c                 C   sH   ddd}t d|d}| r0t|dggsDtnt|dggsDtd S )NrO   rL   rs   z0 + I(x / y)r+   ro   )r0   r   r   r   )Zexpect_true_divisionr    r   r%   r%   r&   _check_divisionD  s
    
r   c                   C   s(   t j tjk rd S td td d S )NFz6from __future__ import division
_check_division(True)
)
__future__divisiongetMandatoryReleasesysversion_infor   execr%   r%   r%   r&   test_futureO  s    r   c                  C   s   ddgddgddggddgddggd} t d| d	d
dddddddddg	dddddddddg	gdddddddddg	 t d| d	d
ddd	dd	ddgdd	dd	dddggdddddddg d S )Nr   r   r+   rL   rM   rN   )r   ra   r`   zX*Yr   TrP   rZ   r      rm   ri   rj   zY[0]zY[1]z	X[0]:Y[0]z	X[1]:Y[0]z	X[0]:Y[1]z	X[1]:Y[1]za:X + Yz
a[a1]:X[0]z
a[a2]:X[0]z
a[a1]:X[1]z
a[a2]:X[1]rx   r9   r%   r%   r&   test_multicolumnY  s<    
       r   c                  C   s   dddg} dddg}t tdddgddgddggs:ttd\}}t |dgdgdggsbtt |ddgddgddggstd S )	Nr+   rL   rM   rN   rO   rP   rU   rl   )r   r   r0   r   r5   )rU   rX   r   r   r%   r%   r&   test_dmatrix_dmatrices_no_datam  s    

&r   c                  C   sP   t ddddgdddgdd	d
gd\} }| j dks:t|j dksLtd S )Nz	y ~ x + ar+   rL   rM   rN   rO   rP   r   r   a3)rX   rU   r   rX   z	1 + a + x)r5   r   Zdescriber   )r   r   r%   r%   r&   test_designinfo_describeu  s    r   c               
   C   s   dd } d}z t |dddgddd	gd
 W n> tk
rj } z |jt|d|dksZtW 5 d }~X Y n
X dsttzt ddi i W nd tk
r } zFtjd dkrt	|tst|jtdddkstnt	|t
stW 5 d }~X Y n
X dstd S )Nc                 S   s   t dd S )NZWHEEEEEEr   )rU   r%   r%   r&   raise_patsy_error  s    z2test_evalfactor_reraise.<locals>.raise_patsy_errorzraise_patsy_error(X) + Yr+   rL   rM   rN   rO   rP   )ra   r`   r    Fz1 + x[1]rU   rZ   )r0   r   originr   r_   r   	Exceptionr   r   r.   KeyError)r   r   r|   r%   r%   r&   test_evalfactor_reraise|  s     . r   c               	   C   s  dddt jgt jdddgd} dg}tr2|d	 |D ]}td
| |d}t |dddgdddggsjt|d	kr|jt	
ddgsttjttd
| |dd td| |d\}}t |dgdggstt |ddgddggst|d	kr*|jt	
ddgst|jt	
ddgs*ttjttd| |dd td| |d\}}t |dgdgdggsptt |dgdgdggst|d	kr|jt	
dddgst|jt	
dddgsttjttd| |dd q6d S )Nr+   rL   rM   rq   rr   (   rs   r(   r*   rn   )r    r-   raise)r    r-   Z	NA_actionrl   zy ~ 1)r   nanr   rD   r0   r   r   r_   equalsr   ZIndexrB   rC   r   r5   )r    Zreturn_typesr-   matZlmatZrmatr%   r%   r&   test_dmatrix_NA_action  sR    



   
   r   c                  C   s   dddd} ddddggfddddggffD ]\}}t || }t||sNttt|jg| d |slttr,t| }tt |||sttt|jg|d |s,tq,d S )	Ng?g333333?r   )rQ   rR   r   zx1 + x2r+   zC(a, levels=('a1', 'a2')) + x1r   )	r0   r   r   r   r   r   r   r   r   )Zdata_0dr   expectedr   Zdata_seriesr%   r%   r&   test_0d_data  s.    

r   c                  C   s>   dddg} t di }dddg} t |ji }t||s:td S )Nr+   rL   rM   rw   rp   rq   rr   )r0   r   r   r   r   )rw   Zdesign_matrixZdesign_matrix2r%   r%   r&   test_env_not_saved_in_builder  s
    


r   c                  C   s   t sd S tdddgddgg} tr6| t| d  | D ]}d|i}ttd|ddgddgddggsnt	ttd|ddgddgddggst	ttd|ddgddgddggst	ttd|ddgddgddggs:t	q:d S )	Nr+   r   r   r   objzC(obj)zC(obj, levels=['b', 'a'])zC(obj, levels=['a', 'b']))
r   r   r   rD   r   r   r   r   r0   r   )objsr   r   r%   r%   r&   test_C_and_pandas_categorical  s>    r   )NN)<r   r   r<   Znumpyr   rB   r   r   Zpatsy.design_infor   r   Z
patsy.evalr   Z
patsy.descr   r   r	   Zpatsy.categoricalr
   Zpatsy.contrastsr   Zpatsy.user_utilr   r   Zpatsy.buildr   r   r   Z
patsy.utilr   r   r   r   Zpatsy.originr   r   r'   r4   r6   rH   rK   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r%   r%   r%   r&   <module>   sX   	   
? D7	4(
'	