
    .Cc1y                     *   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
mZ d dlmZmZ d dlT d dlmZ d dlmZmZ d d	lmZmZ e
rd dlZd
 Zd Zd Zd dZd dZd Zd Zd Z de _!        d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,d Z-d Z.dS )!    )print_functionN)
PatsyError)atleast_2d_column_defaulthave_pandashave_pandas_categorical)Term	INTERCEPT)*)C)balancedLookupFactor)DesignMatrix
DesignInfoc                     t          |           } | j        d         dk    rdS t          j                            |           \  }}}t          j        |dk              }|| j        d         k    sJ d S )N   r   Tg|=)r   shapenplinalgsvdsum)musvranks        0lib/python3.11/site-packages/patsy/test_build.pyassert_full_rankr      so    !!$$AwqzQ timmAGAq!6!e)D171:    c                     t          t          j        d                     t          ddgddgddgddgg           t          j        t
          t           ddgddgg           t          j        t
          t           ddgddgg           t          j        t
          t           g dg dg           t          j        t
          t           g dg dg d	g           d S )
N
   r   r         r   r!      )r   r    d   )r         )r   r'      )r   r   eyepytestraisesAssertionError r   r   test_assert_full_rankr.   #   s    RVBZZ   q!fq!fq!fq!f5666
M."aVaV$46 6 6
M."aVaV$46 6 6
M."YYY$=? ? ? M."YYY			999$EG G G G Gr   c                  l    g }| D ].}|                     t          d |D                                  /|S )Nc                 ,    g | ]}t          |          S r-   )r   ).0names     r   
<listcomp>z!make_termlist.<locals>.<listcomp>3   s     @@@$<--@@@r   )appendr   )entriestermsentrys      r   make_termlistr8   0   sI    E C CT@@%@@@AABBBBLr   c                     t          |            t          | j        j                  t          |          k    sJ || j        j        |k    sJ | j        dk    sJ | j        d         |k    sJ d S )Nr!   r   )r   setdesign_infor6   column_namesndimr   )mmexpected_ranktermlistr<   s       r   check_design_matrixrA   6   s    Rr~#$$H5555 ;~*l::::7a<8A;-''''''r   c                 6    t          | } fd}t          |g|d          }t          |           }|d         }|d         j        |j        j        k    sJ |d         j        |j        j        k    sJ |j        |d         u sJ t          ||||           |S )Nc               3      K    V  d S Nr-   datas   r   
iter_makerzmake_matrix.<locals>.iter_maker@         




r   r   eval_envr<   )r8   design_matrix_buildersbuild_design_matricesterm_slicesr;   r<   rA   )	rF   r?   r5   r<   r@   rG   design_infosmatricesmatrixs	   `        r   make_matrixrR   >   s    g&H    )8*j1MMML$\488Ha[FO'!-. / / /O(!./ 0 0 0a0000x%13 3 3 3Mr   c                  p   t          dd          } t          j        ddt          | d                             x}| d<   | d         dz  x}| d<   t	          | ddggdd	g
          }t          j        |ddgddgddgddgg          sJ t	          | dg dggddg
          }t          j        |ddgddgddgddgg          sJ t	          | dddggg d
          }t          j        |g dg dg dg dg          sJ t	          | dg dgdgddggg d
          }t          j        |g dg dg dg dg          sJ t	          | dg dgdgddggg d
          }t          j        |g dg dg dg dg          sJ t	          | ddgdgddggg d
          }t          j        |dd|d         dgdd|d         dgdd|d         |d         gdd|d         |d         gg          sJ t	          | ddgdgddggg d
          }t          j        |t          j        ||||z  f                    sJ d S )Nr!   )abr   r   rT   x1x2a[a1]a[a2]rK   	Intercepta[T.a2]r"   rU   )za[a1]:b[b1]za[a2]:b[b1]za[a1]:b[b2]za[a2]:b[b2])r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )rZ   r[   b[T.b2]za[T.a2]:b[T.b2]r   r   r   r   )r   r   r   r   )r   r   r   r   )rZ   r\   r[   zb[T.b2]:a[T.a2])rX   rY   rV   z
a[T.a2]:x1r$   )rV   rW   zx2:x1)r   r   linspacelenrR   allclosecolumn_stack)rF   rV   rW   r   s       r   test_simplerb   N   s{   a1Dk!QDI777Bd4jAo%BdD!seWGW3EFFFA;qAq6Aq6Aq6Aq6:;;;;;D!b3%[Y7OPPPA;qAq6Aq6Aq6Aq6:;;;;;D!sCj\"@ "@ "@	A 	A 	AA ;q<<<'<<'<<'<<) * * * * *
 	D!b3%#c
;"@ "@ "@	A 	A 	AA ;q<<<'<<'<<'<<) * * * * *
 	D!b3%#c
;"@ "@ "@	A 	A 	AA ;q<<<'<<'<<'<<) * * * * *
 	D!sedVc4[9!G!G!G	I 	I 	IA;qAq"Q%+q"Q%+q"Q%A/q"Q%A/1 2 2 2 2 2
 	D!tftftTl;!6!6!6	8 	8 	8A;q"/2r27*;<<=======r   c                     t          ddd          } t          j        ddt          | d                             | d<   t	          | dg ddgg           t	          | d	ddgddgg           t	          | d	dd
gddgg           d S )Nr!   rT   rU   cr   r   rT   xr"   rU   r'   re   )r   r   r^   r_   rR   rE   s    r   test_R_bugsrg   |   s    a1"""DAq#d3i..11DI a"sCj)*** a3*sCj1222 a3*sCj122222r   c            	         t          ddd          } t          j        ddt          | d                             | d<   | d         dz  | d<   fd	t	           d
                    }t	           |                    }t          t          |                     ddgddgddgddgddgg}d}dd l}|                                }|D ]}t          |          }|D ]\  }	}
|	|v r|
|vr nьt                      }|D ]Z}t          d |D                       }d |D             } |          D ]'}|	                    t          ||z                        ([t          |          }|dv r#t          j        t          t          | ||           nt          | ||           |dz  }|dz  dk    rt          d|           t          d|                                |z
  fz             d S )Nr!   r&   )rT   rU   repeatr   r   rT   rV   rW   c              3      K   | st                      V  d S | d         } | dd                    D ]B}t          t          |                    V  t          t          |f|z                       V  Cd S )Nr   r   )tuplesorted)lobjsubsetall_subsetss      r   rp   z/test_redundancy_thoroughly.<locals>.all_subsets   s       	5''MMMMMA$C%+ae,, 5 5F6NN+++++FC6F?334444445 5r   )rT   rU   rV   rW   )rU   )rT   )rW   )rV   )rU   rW   )rT   rV   )rT   rU   rW   )rT   rU   rV   )rU   rV   rW   )rT   rV   rW   c                 <    g | ]}|                     d           |S rf   
startswithr1   ts     r   r3   z.test_redundancy_thoroughly.<locals>.<listcomp>   s)     O O OqQ\\#=N=N O O O Or   c                 <    g | ]}|                     d           |S rr   rs   ru   s     r   r3   z.test_redundancy_thoroughly.<locals>.<listcomp>   s)    JJJaS8I8IJJJJr   )r-   )r-   r%   z
Completed:zTook %0.2f seconds)r   r   r^   r_   listprinttimer:   rk   add	frozensetr*   r+   r   rR   )rF   	all_termsall_termlist_templates	redundantcountrz   starttermlist_templatetermlist_setdispreferred	preferredexpanded_termsterm_templatenumericrestsubset_restr?   rp   s                    @r   test_redundancy_thoroughlyr      s    a1Q'''DQ3tCy>>22DJdqDJ5 5 5 5 5 [[!78899I!++i"8"899	#$
%
%&&&&!7#{+"$45#%67	9I
 EKKKIIKKE3 + +,--'0 	+ 	+#L)|+ 	0M  UUN!2 I I O OM O O OPPJJ=JJJ#.;t#4#4 I IK"&&yw1F'G'GHHHHI  //M K/ Dj)"M3DF F F F D-1BCCCQJEs{a +lE***	
$))++"5!7
788888r   r   c            	         g dg dd} t          |           }d |d         D             |d<   g dg dd}t          |           }d |d         D             |d<   t          j        t          t	          | d         | d                             ddt
          fg	          }t          j        t          t	          | d         | d                             d
dt
          fg	          }|                    t          j                  }|                    t          j                  }| ||||g}t          rRt          j
        |          }|                    |           t          j
        |          }	|                    |	           |D ]?}
t          |
ddgddggg d          }t          j        |g dg dg dg dg          sJ @d S )N)a1a2r   r   r   r!   r$   r"   )rT   rf   c                 8    g | ]}|                     d           S )ascii)encoder1   r   s     r   r3   z#test_data_types.<locals>.<listcomp>   s$    NNN1QXXg..NNNr   rT   c                 6    g | ]}t          j        |          S r-   )six	text_typer   s     r   r3   z#test_data_types.<locals>.<listcomp>   s"    QQQAs}Q//QQQr   rf   )rT   S2dtype)rT   U2r"   )rX   rY   za[a1]:xza[a2]:xrK   r]   )r   r   r   r!   )r   r   r$   r   )r   r   r   r"   )dictr   arrayrx   zipintviewrecarrayr   pandas	DataFramer4   rR   r`   )
basic_dictbasic_dict_bytesbasic_dict_unicodestructured_array_bytesstructured_array_unicoderecarray_bytesrecarray_unicodedatasdf_bytes
df_unicoderF   r   s               r   test_data_typesr      sW   ///#||% %J J''NN8H8MNNNS777+||- -j))QQ9KC9PQQQsXd3z#/9#,@ ,@ 'A 'A-83*,EG G G  "xSC1;C.B .B )C )C/:S#J.G I  I  I ,00==N/44R[AA/1I-/E !#$455X%&899
Z    . .a3%#s!4%M%M%MO O O{1|||+||+||+||- . . 	. 	. 	. 	.. .r   c                  F   dg difd} t          t          d          g| d          d         }t          |g          d         }|j        t	          j        t          j                  k    sJ t          |gt          j                  d         }|j        t	          j        t          j                  k    sJ t          t          d          rLt          |gt          j                  d         }|j        t	          j        t          j                  k    sJ d S d S )Nrf   r#   c               3      K    V  d S rD   r-   rE   s   r   rG   z4test_build_design_matrices_dtype.<locals>.iter_maker   rH   r   r   r   float128)	rL   r8   rM   r   r   float64float32hasattrr   rG   buildermatrF   s      @r    test_build_design_matrices_dtyper      s   D    $mC&8&8%9:qII!LG
	4
0
0
3C9,,,,,,
	4rz
B
B
B1
EC9,,,,,,r: 2#WIt2;GGGJyBHR[1111112 211r   c                     dg difd} t          t          d          g| d          d         }t          |gd          d         }t          |t                    sJ t          j        t          t          |gd           d S )Nrf   r#   c               3      K    V  d S rD   r-   rE   s   r   rG   z$test_return_type.<locals>.iter_maker   rH   r   r   rQ   return_typeasdfsadf)rL   r8   rM   
isinstancer   r*   r+   r   r   s      @r   test_return_typer      s    D    $mC&8&8%9:qII!LG  	4X
F
F
Fq
ICc<((((( M*''D(* * * * * *r   c            
         g dg ddfd} t          t          dd          g| d          d         }t          |gdt          j        d	gt          j        g d
t                    d          d         }|j        dk    sJ t          j        |g dg          sJ t          |gdt          j        d	gt          j        g d
t                    dd          d         }|j        dk    sJ t          j        |g dg          sJ ddl	m
}  |g           }t          |gdt          j        gt          j        ddgt                    d|          d         }|j        dk    sJ t          j                            |g dddt          j        gg           t          j        t          t          |gdt          j        d	gt          j        g d
t                    dd           d S )Nr#   )c1c2r   rf   re   c               3      K    V  d S rD   r-   )initial_datas   r   rG   z"test_NA_action.<locals>.iter_maker  s      r   rf   re   r         $@g      4@)r   r   Nr   )r   r$   )      ?        r   drop)	NA_action)NAAction)NA_typesr   r   )r!   r$   r   r   raise)rL   r8   rM   r   nanasarrayobjectr   array_equalpatsy.missingr   testingassert_array_equalr*   r+   r   )rG   r   r   r   r   r   s        @r   test_NA_actionr   
  s   ");););<<L    $mC&=&=%>
ANNqQG  	'+RVT&:&(j1C1C1C7='? '? '?!@ !@A A BCDC 9># 0 0 0122222  	'+RVT&:&(j1C1C1C7='? '? '?!@ !@ +1	2 2 2 34	5C
 9># 0 0 0122222 '&&&&&"%%%I
	'+RVn&(j$7='? '? '?!@ !@ +4	5 5 5 67	8C
 9J!!#(8(8(83RV:L'MNNN M*')rvt,
#5#5#5)/1 1 12 2 $% % % % % %r   c                     dt           j        dgg ddfd} t          t          dd          g| d          d         }|j        g d	k    sJ t          |g          \  }|j        d
k    sJ t          j        |g dg dg          sJ d S )Nr         @)r   r   c3r   c               3      K    V  d S rD   r-   rE   s   r   rG   z1test_NA_drop_preserves_levels.<locals>.iter_maker;  rH   r   rf   re   r   )zc[c1]zc[c2]zc[c3]rf   )r!   r"   )r   r   r   r   )r   r   r   r   )r   r   rL   r8   r<   rM   r   r   )rG   r;   r   rF   s      @r   test_NA_drop_preserves_levelsr   7  s     rvs#*<*<*<==D    (-S*A*A)BJPQRRSTUK#'G'G'GGGGG +55DC9># 4 4 4 4 4 4 6 7 7 7 7 7 7 7r   c            
      H   t           sd S t          j        g dg dg ddg d          fd} t          t	          g           g| d          \  }t          t	          d	          t	          d
          g| d          \  }}t          t	          d
d          g| d          \  }t          t	          d
d	          g| d          \  }t          j        t          t          |gd
         d         d d d         d           t          j        t          t          ||gd
         d	         d d d         d            G d dt          j                  }t          j        t          t          |g |                     t          |gd
         g dd          \  }t          j
        |ddgddgddgg          sJ t          ||gd          \  }}	t          |t          j                  sJ t          |	t          j                  sJ t          j        |dgdgdgg          sJ t          j        |	dgdgdgg          sJ t          j        |j        g d          sJ t          j        |	j        g d          sJ t          j        |j        d	g          sJ t          j        |	j        d
g          sJ |j        j        d	gk    sJ |	j        j        d
gk    sJ |j        j        d	gk    sJ |	j        j        d
gk    sJ t          ||gg dd
         dd          \  }}	t          |t          j                  sJ t          |	t          j                  sJ t          j        |d gd!gd"gg          sJ t          j        |	dgdgdgg          sJ t          j        |j        g d          sJ t          j        |	j        g d          sJ t          j        |j        d	g          sJ t          j        |	j        d
g          sJ |j        j        d	gk    sJ |	j        j        d
gk    sJ |j        j        d	gk    sJ |	j        j        d
gk    sJ t          |gg d#d         dd          \  }
t          |
t          j                  sJ t          j        |
g d$g d%g d&g          sJ t          j        |
j        g d          sJ t          |gg dg d'dd          \  }t          |t          j                  sJ t          j        |d(d gd)d!gd*d"gg          sJ t          j        |j        g d+          sJ t          |gd          \  }t          |t          j                  sJ t          j        |dgdgdgg          sJ |j                            t          j        g d                    sJ dd l}|j        j         }	 d,|j        _         t          j        t          t          |gd
g did           ||j        _         n# ||j        _         w xY wt          |gd-t          j        d.gt          j        g d/t0          0          dd1d2          \  }	|	j                            t          j        dg                    sJ d S )3Nr#   )r"   r&   r'   r   r   r   )rf   yrT   )r          )indexc               3      K    V  d S rD   r-   rE   s   r   rG   z+test_return_type_pandas.<locals>.iter_makerO  rH   r   r   r   rf   rI   rT   rf   rT   rf   r   c                       e Zd Zd ZdS )2test_return_type_pandas.<locals>.CheatingDataFramec                     |dk    r)t           j                            | |          d d d         S t           j                            | |          S )Nrf   r   )r   r   __getitem__)selfkeys     r   r   z>test_return_type_pandas.<locals>.CheatingDataFrame.__getitem__j  sK    cz ?'33D#>>tttDD'33D#>>>r   N)__name__
__module____qualname__r   r-   r   r   CheatingDataFramer   i  s#        	? 	? 	? 	? 	?r   r   )(   2   <   r   r   r!   r   r$   r   	dataframer   r"   r&   r'   )r(      	   )r   rf   r(   r   r   )r   )r   r   r   )r   r   r   )r   r   r   )r          r    r   r   )r   r   r!   Fr   r   )Nr   r   r   r   )r   r   )r   r   r   rL   r8   r*   r+   r   rM   r   r`   r   r   r   columnsr;   r<   
term_namesequalsIndexpatsy.buildbuildr   r   r   )rG   int_builder	y_builder	x_builderx_a_builderx_y_builderr   r   y_dfx_dfx_a_dfx_y_dfint_dfpatsy
had_pandasrF   s                  @r   test_return_type_pandasr
  G  s    )))"+))"4"4"46 6 #/,,0 0 0D    )=+<+<*=z1MMLK3]35G5G5B35G5G5I4>=>@ @ @Y	 ,]3-D-D,E,6568 8 8N[ ,]3-D-D,E,6568 8 8N[
 M*'-tCytCy2!G!GI I I M*'i(S	S	$$B$88: : :? ? ? ? ?F, ? ? ? M*'+##D))+ + + #K=)-c#F#FH HFS;saWq"g2w788888 '	9'=t3>@ @ @JD$dF,-----dF,----->$!qcA300000>$!qcA300000>$*lll33333>$*lll33333>$,.....>$,.....(SE1111(SE1111&3%////&3%//// '	9'=-6YYT#Y'G'G3>@ @ @JD$ dF,-----dF,----->$!qcA300000>$!qcA300000>$*lll33333>$*lll33333>$,.....>$,.....(SE1111(SE1111&3%////&3%////%{m,8LLtCy&I&I2=? ? ?IV ff./////>&:::zzz:::"FGGGGG>&,55555 &{m,5IILLL&I&I2=? ? ?IV ff./////>&B7RGb!W"=>>>>>>&,			22222 &{mT2=? ? ?IVff./////>&A3aS/22222<v|LLL99:::::(J-"'j+ kC#3	N 	N 	N 	N #-*,,,,!;-),bfc(:(*
3E3E3E9?)A )A )A#B #B -3.9; ; ;ED :V\1#..///////s    4X! !X/c                     g dg dft          g dg d          t          g dg d          fdgdgdggddgddgddggfg d	g d
g dgddgddgddggfg} g dg dfg dt          g d          fg dt          g d          fg dg dfg}g dg dfg}t          dg          fd}fd}| D ]5\  }} |||            |||            |||            |||           6|D ]\  }} |||            |||           |D ]\  }} |||            |||           t          j        t          t
          g dg ddddgdgg           d S )Nr#   )TFTrd   )re   rU   rT   )levelsr   r!   r$   )r   r   r   )r!   r!   r!   )r$   r$   r$   )rT   rU   drf   c                       fd}	 t          g|d          }t          |d i           t          |di           t          # t          $ r Y d S w xY w)Nc               3   $   K   d iV  diV  d S Nrf   r-   )data1data2s   r   rG   z=test_data_mismatch.<locals>.t_incremental.<locals>.iter_maker  s-      ,,r   r   rf   )rL   rM   r,   r   r  r  rG   buildersr@   s   ``  r   t_incrementalz)test_data_mismatch.<locals>.t_incremental  s    	 	 	 	 	 		!-xj*aHHH!(S%L999!(S%L999 !   	 	 	DD	s   6A 
AAc                 ~      fd}t          g|d          }t          j        t          t          |d|i           d S )Nc               3      K   d iV  d S r  r-   r  s   r   rG   z?test_data_mismatch.<locals>.t_setup_predict.<locals>.iter_maker  s      ,r   r   rf   )rL   r*   r+   r   rM   r  s   `   r   t_setup_predictz+test_data_mismatch.<locals>.t_setup_predict  s`    	 	 	 	 	)8*j!DDj+XU|	E 	E 	E 	E 	Er   r   r   r   )r   r8   r*   r+   r   rR   )test_cases_twowaytest_cases_onewaysetup_predict_onlyr  r  rT   rU   r@   s          @r   test_data_mismatchr    s    
'''(	
??????	3	3	3	
??????	3	3	3	5 #sQCAq6Aq6Aq623
))YYY				*aVaVaV,DE
 
OOO$	Aooo&&'			a001			ooo.	
 
///*	
 cU##H! ! ! ! !E E E E E $  Aaa11#  Aa1$  A11
M*YYY\\\BBsecU^% % % % %r   c                    	 dg di		fd} t          t                      g| d          d         }t          j        t          t
          |g	           t          t          g           g| d          d         }t          j        t          t
          |g	           t          j        t          t
          ||g	           t          rQt          ||gt          j        	                    \  }}t          j
        |dgdgdgg          sJ |j        dk    sJ t          dg          }t          |t                      g| d          }t          |	          \  }}t          j
        |dgdgd	gg          sJ |j        dk    sJ t          |t          g           g| d          }t          |	          \  }}t          |	          \  }}t          j
        |dgdgd	gg          sJ t          j
        |dgdgdgg          sJ d S )
Nrf   r#   c               3      K    V  d S rD   r-   rE   s   r   rG   z1test_data_independent_builder.<locals>.iter_maker   rH   r   r   rI   r   )r$   r   r!   r$   )rL   r8   r*   r+   r   rM   r   r   r   r   r`   r   )
rG   null_builderintercept_builderint_mnull_m
x_termlistr  x_mintercept_mrF   s
            @r   test_data_independent_builderr'    sf   D     *=??*;ZKKANL
M*3l^TJJJ.b0A0A/B/989; ; ;;<> M*36G5H$OOO
M*'!23T; ; ;
  &-/@/;/=.4.>t.D.DF Fv {5A3aS/22222|v%%%% u%%J%z=??&C&0/02 2 2H ($77KC;saS1#sO,,,,,<6!!!!%z=3D3D&E&0/02 2 2H ($77KC,Xt<<C;saS1#sO,,,,,;{aS1#sO4444444r   c                     g dg ddfd} t          dg          }t          ddg          }t          ||g| d          }t          |          \  }}t          |d	|dg
           t	          j        |d	gdgdgg          sJ t          |d|ddg
           t	          j        |d	dgddgddgg          sJ d S )Nr#   r   r   c               3      K    V  d S rD   r-   rE   s   r   rG   z4test_same_factor_in_two_matrices.<locals>.iter_maker1  rH   r   rf   rT   r   rI   r   rK   r!   r$   zx:a[a1]zx:a[a2])r8   rL   rM   rA   r   r`   )rG   t1t2r  m1m2rF   s         @r    test_same_factor_in_two_matricesr.  /  s	   !3!3!344D    	u		B	Sz	"	"B%r2h
QGGGH"8T22FBAr6666;rQC!qc?+++++ArI0FGGGG;rQFQFQF34444444r   c                  ~    dg difd} t          j        t          t          t	          d          g| d           d S )Nrf   r#   c               3      K    V  d S rD   r-   rE   s   r   rG   z.test_eval_env_type_builder.<locals>.iter_maker>  rH   r   foo)r*   r+   	TypeErrorrL   r8   )rG   rF   s    @r   test_eval_env_type_builderr3  <  sU    D    
M)3mC6H6H5I:W\]]]]]r   c                      dg di} dt          g d          i}| |g}t          r-dt          j        g d          i}|                    |           d }|D ]}|D ]} |||           d S )NrT   r   )r   r   r   )r   r   r   c                 t      fd}t          t          dg          g|d          }t          ||           d S )Nc               3      K    V  d S rD   r-   r  s   r   rG   z/test_categorical.<locals>.t.<locals>.iter_makerJ  s      KKKKKr   rT   r   rI   )rL   r8   rM   )r  r  rG   r  s   `   r   rv   ztest_categorical.<locals>.tI  s]    	 	 	 	 	)=#+?+?*@*4346 6 6 	h.....r   )r   r   r   Categoricalr4   )data_strings
data_categr   data_pandasrv   r  r  s          r   test_categoricalr;  B  s    +++,Lq+++,,-J:&E "F./A/A/ABBC[!!!/ / /    	 	EAeUOOOO	 r   c                  `   ddl m} m} g d}t          dt	          |          iddggg d          }t          j        |g dg d	g dg d
g          sJ | |            fD ]L}t          dt	          ||          iddggg d          }t          j        |g dg dg dg dg          sJ Mt          dt	          | |d                    iddggg d          }t          j        |g dg dg dg dg          sJ t          dt	          |          idg dggg d          }t          j        |g dg dg dg dg          sJ | |            fD ]M}t          dt	          ||          idg dggg d          }t          j        |g dg dg dg dg          sJ Nt          dt	          | |d                    idg dggg d          }t          j        |g dg dg dg dg          sJ t          dt	          |ddgddgddgg          iddggddg          }t          j        |ddgddgddgddgg          sJ t          dt	          | | ddgddgddggddg                    iddggddg          }t          j        |ddgddgddgddgg          sJ d S ) Nr   )ContrastMatrixSum)r   a3r   r   rT   r$   )rX   rY   za[a3]rK   )r   r   r   )r   r   r   )r   r   r   )a[mean]a[S.a1]a[S.a2])r   r   r   )r   r   r   )r   r   r   )omit)r@  rB  a[S.a3])rZ   r[   za[T.a3])rZ   rA  rB  )rZ   rB  rD  r(   r   r!      r   r   z
a[custom0]z
a[custom1]z[foo]z[bar]za[foo]za[bar])patsy.contrastsr=  r>  rR   r   r   r`   )r=  r>  valuesr   r   s        r   test_contrastrH  T  s   33333333%%%F 	S!F))$a3%!<!<!<	> 	> 	>A ;q999$99$99$99& ' ' ' ' '
 3355\ + +all+Q#%F%F%FH H H {1yyy)zz(yy(yy* + + 	+ 	+ 	+ 	+
 	S!FCCQKKK0011ug!B!B!B	D 	D 	DA ;q;;;&;;&;;&;;( ) ) ) ) ) 	S!F))$a"se!D!D!D	F 	F 	FA ;q999$99$99$99& ' ' ' ' '
 3355\ + +all+QcU%H%H%HJ J J {1yyy)zz(yy(yy* + + 	+ 	+ 	+ 	+
 	S!FCCQKKK0011rC5k!D!D!D	F 	F 	FA ;q;;;&;;&;;&;;( ) ) ) ) ) 	S!FaW&'W&'W%. / / 0 w".!=		? 	? 	?A
 ;qAr7r7r7r7$ % % % % %
 	S!FNNQG56G56G4= 5<W3E%G %G H H I w"*H!5	7 	7 	7A ;qAr7r7r7r7$ % % % % % % %r   c                     ddgddgddggddgd	t          d
dd          } fd}t          | g|d          d         t          g          d         fd} |dg d	t          d                       |g d	g d	t          d                      t          j        sF |t          d
          t          d          t          d          gg d	t          d                       || g d	t          d                       || d         d| d         gg d	t          d                       |dd
dgddg            |d
dgd
dgddg           t          j        s- |t          d
          t          d          gd
dgddg            || d         | d         gd
dgddg            || d         dgd
dgddg            |dd
dgddg            |dd
gd
dgddg            |t	          j        d          t	          j        d
          gd
dgddg            || d         | d         gd
dgddg            || d         d
gd
dgddg            |ddgddg            |dgdgddg            |t	          j        d          gdgddg            || d         gdgddg           t          j	        t          j        d           t          j	        t          j        d           t          j	        t          j        dg           t          j	        t          j        t          dg          g           t          g d          }|                    ddg          }|j        ddgk    sJ |j        J d S )Nr   r!   g@g	@gffffff@g@r&   r'   )rf   r   zrf   r   rJ  c               3      K    V  d S rD   r-   )all_datas   r   rG   z*test_DesignInfo_subset.<locals>.iter_maker  s      r   r   c                 L                        |           }i }|D ]}	|         ||<   t          |g|          d         }
d d |f         }t          | t          j                  s't          |           t          |j                  k    sJ t          j        ||          sJ d S )Nr   )	ro   rM   r   r   string_typesr_   r6   r   r   )which_terms	variablesr   sub_design_infosub_datavariable
sub_matrixsub_full_matrixall_builderrL  full_matrixs           r   rv   z!test_DesignInfo_subset.<locals>.t  s    %,,[99! 	4 	4H!)(!3HX*O+<hGGJ
%aaaj1+s'788 	B{##s?+@'A'AAAAA~j/:::::::r   z~ 0 + x + y + zz~ 0 + x + zr$   z~ 0 + z + xz~ 0 + yza ~ az~ asdfasdfrd   re   rT   )r8   rL   rM   slicer   PY3unicoder   r*   r+   r   ro   KeyErrorr   r   r<   r6   )r}   rG   rv   min_dimin_di_subsetrV  rL  rW  s        @@@r   test_DesignInfo_subsetr_    sO   
 VCjCj"V H c3,,I    ()j!DDQGK'x@@CK	; 	; 	; 	; 	; 	; 	; A%++666Aoood444 7 (	73<<ws||
4
//5;;	( 	( 	(Ai%++...Ay|S)A,'%++FFFAmc3Z!Q(((AsCj3*q!f%%% 7 <	73<<
&c
QF;;;Ay|Yq\"S#JA777Ay|SC:1v...Amc3Z!Q(((AsCj3*q!f%%%As}S3=--.c
QFCCCAy|Yq\"S#JA777Ay|SC:1v...Ai#AAsecUQFAs}SSEAq6***Ay|nseaV$$$ M*k0':::
M(K.999
M(K.999
M($tVH~~&68 8 8 ((FMM3*--M%#s3333&&&&&r   rD   )/
__future__r   r   numpyr   r*   r  r   
patsy.utilr   r   r   
patsy.descr   r	   r   patsy.categoricalr   patsy.user_utilr   r   patsy.design_infor   r   r   r   r.   r8   rA   rR   rb   rg   r   slowr   r   r   r   r   r
  r  r'  r.  r3  r;  rH  r_  r-   r   r   <module>rh     se   & % % % % % 



           > > > > > > > > > > & & & & & & & &           2 2 2 2 2 2 2 2 6 6 6 6 6 6 6 6 MMM  G G G  ( ( ( (    ,> ,> ,>\3 3 3$69 69 69p #$  !. !. !.F2 2 2 * * *+% +% +%Z7 7 7 |0 |0 |0|7% 7% 7%r/5 /5 /5b5 5 5^ ^ ^  $L% L% L%\D' D' D' D' D'r   