
    ,h$k                     *   S SK rS SKrS SKJr  S SKJrJrJr  S SK	J
r
Jr  S SKJrJr  S SKJr  S SKJrJr  S SKJrJr  \(       a  S SKrS	 rS
 rS rSS jrSS jrS rS rS rS\l         S r!S r"S r#S r$S r%S r&S r'S r(S r)S r*S r+S r,S r-g)     N)
PatsyError)atleast_2d_column_defaulthave_pandashave_pandas_categorical)Term	INTERCEPT)build_design_matricesdesign_matrix_builders)C)balancedLookupFactor)DesignMatrix
DesignInfoc                     [        U 5      n U R                  S   S:X  a  g[        R                  R	                  U 5      u  pn[        R
                  " US:  5      nX@R                  S   :X  d   eg )N   r   Tg|=)r   shapenplinalgsvdsum)musvranks        cC:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\venv\Lib\site-packages\patsy/test_build.pyassert_full_rankr      sZ    !!$AwwqzQiimmAGA!66!e)D771:    c                     [        [        R                  " S5      5        [        SS/SS/SS/SS//5        [        R                  " [
        [         SS/SS//5        [        R                  " [
        [         SS/SS//5        [        R                  " [
        [         / SQ/ SQ/5        [        R                  " [
        [         / SQ/ SQ/ S	Q/5        g )
N
   r   r         r   r!      )r   r    d   )r         )r   r'      )r   r   eyepytestraisesAssertionError r   r   test_assert_full_rankr.   !   s    RVVBZ q!fq!fq!fq!f56
MM."2aVaV4DE
MM."2aVaV4DE
MM."2Y4MN
MM."2Y	94UVr   c                      / nU  H7  nUR                  [        U Vs/ s H  n[        U5      PM     sn5      5        M9     U$ s  snf N)appendr   r   )entriestermsentrynames       r   make_termlistr6   +   sA    ET%@%$<-%@AB L As   Ac                    [        U 5        [        U R                  R                  5      [        U5      :X  d   eUb  U R                  R                  U:X  d   eU R
                  S:X  d   eU R                  S   U:X  d   eg )Nr!   r   )r   setdesign_infor3   column_namesndimr   )mmexpected_ranktermlistr:   s       r   check_design_matrixr?   2   so    Rr~~##$H555~~**l:::77a<<88A;-'''r   c                 >  ^  [        U6 nU 4S jn[        U/USS9n[        UT 5      nUS   nUS   R                  UR                  R                  :X  d   eUS   R
                  UR                  R
                  :X  d   eUR                  US   L d   e[        XXCS9  U$ )Nc               3      >#    T v   g 7fr0   r-   datas   r   
iter_makermake_matrix.<locals>.iter_maker>        
   	r   eval_envr:   )r6   r
   r	   term_slicesr9   r:   r?   )	rC   r=   r2   r:   r>   rD   design_infosmatricesmatrixs	   `        r   make_matrixrO   ;   s    g&H *8*j1ML$\48Ha[F?&&&*<*<*H*HHHH?''6+=+=+J+JJJJa000xSMr   c                  (   [        SSS9n [        R                  " SS[        U S   5      5      =oS'   U S   S-  =o S'   [	        U SS//SS	/S
9n[        R
                  " USS/SS/SS/SS//5      (       d   e[	        U S/ S//SS/S
9n[        R
                  " USS/SS/SS/SS//5      (       d   e[	        U SSS/// SQS
9n[        R
                  " U/ SQ/ SQ/ SQ/ SQ/5      (       d   e[	        U S/ S/S/SS/// SQS
9n[        R
                  " U/ SQ/ SQ/ SQ/ SQ/5      (       d   e[	        U S/ S/S/SS/// SQS
9n[        R
                  " U/ SQ/ SQ/ SQ/ SQ/5      (       d   e[	        U SS/S/SS/// SQS
9n[        R
                  " USSUS   S/SSUS   S/SSUS   US   /SSUS   US   //5      (       d   e[	        U SS/S/SS/// SQS
9n[        R
                  " U[        R                  " XX-  45      5      (       d   eg )Nr!   )abr   r   rQ   x1x2a[a1]a[a2]rJ   	Intercepta[T.a2]r"   rR   )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   )rW   rX   b[T.b2]za[T.a2]:b[T.b2]r   r   r   r   )r   r   r   r   )r   r   r   r   )rW   rY   rX   zb[T.b2]:a[T.a2])rU   rV   rS   z
a[T.a2]:x1r$   )rS   rT   zx2:x1)r   r   linspacelenrO   allclosecolumn_stack)rC   rS   rT   r   s       r   test_simpler_   K   s   a1Dkk!QDI77Bd4jAo%BdD!seWGW3EFA;;qAq6Aq6Aq6Aq6:;;;;D!b3%[Y7OPA;;qAq6Aq6Aq6Aq6:;;;;	
sQ		A ;;q<|\RSSSS		cUSEC:&K		A ;;q<|\RSSSS		cUSEC:&K		A ;;q<|\RSSSS	
d$;		A ;;	2a5!2a5!2a5"Q% 2a5"Q% 		
    	a4&4&4,/>S	A ;;q"//227*;<====r   c                      [        SSSS9n [        R                  " SS[        U S   5      5      U S'   [	        U S/ SS//5        [	        U S	SS/SS//5        [	        U S	SS
/SS//5        g )Nr!   rQ   rR   cr   r   rQ   xr"   rR   r'   rb   )r   r   r[   r\   rO   rB   s    r   test_R_bugsrd      s{    a1"DAq#d3i.1DI a"sCj)* a3*sCj12 a3*sCj12r   c            
        ^ [        SSSS9n [        R                  " SS[        U S   5      5      U S'   U S   S-  U S'   U4S	 jm[	        T" S
5      5      n[	        T" U5      5      n[        [        U5      5        SS/SS/SS/SS/SS//nSnSS KnUR                  5       nU GH"  n[        U5      nU H  u  pX;   d  M  X;  d  M    M'     [        5       nU H  n[        U Vs/ s H  oR                  S5      (       d  M  UPM     sn5      nU Vs/ s H  oR                  S5      (       a  M  UPM     nnT" U5       H   nUR                  [        UU-   5      5        M"     M     [        U5      nUS;   a#  [        R                  " [        [        U UU5        O[        U UU5        US-  nUS-  S:X  d  GM  [        SU5        GM%     [        SUR                  5       U-
  4-  5        g s  snf s  snf )Nr!   r&   )rQ   rR   repeatr   r   rQ   rS   rT   c              3      >#    U (       d  [        5       v   g U S   nT" U SS  5       H3  n[        [        U5      5      v   [        [        U4U-   5      5      v   M5     g 7f)Nr   r   )tuplesorted)lobjsubsetall_subsetss      r   rm   /test_redundancy_thoroughly.<locals>.all_subsets   sS     'MA$C%ae,F6N++FC6F?344 -s   AA )rQ   rR   rS   rT   )rR   )rQ   )rT   )rS   )rR   rT   )rQ   rS   )rQ   rR   rT   )rQ   rR   rS   )rR   rS   rT   )rQ   rS   rT   rc   )r-   )r-   r%   z
Completed:zTook %0.2f seconds)r   r   r[   r\   listprinttimer8   rh   
startswithadd	frozensetr*   r+   r   rO   )rC   	all_termsall_termlist_templates	redundantcountrq   starttermlist_templatetermlist_setdispreferred	preferredexpanded_termsterm_templatetnumericrestsubset_restr=   rm   s                     @r   test_redundancy_thoroughlyr      s    a1Q'DQ3tCy>2DJdqDJ5 [!789I!+i"89	#$
%& 
	'	k"	+,	-.I EIIKE3,-'0#L+	0M (1 !UN!2M OMq\\#=NM OP#0J=aS8I=J#.t#4K"&&yw1F'GH $5 "3  /M K/T=BS D-1BCQJEs{alE*1 42 

$))+"5!7
78# !PJs   %G,G,G10G1r   c            	         / SQ/ SQS.n [        U 5      nUS    Vs/ s H  o"R                  S5      PM     snUS'   / SQ/ SQS.n[        U 5      nUS    Vs/ s H  n[        U5      PM     snUS'   [        R                  " [        [        U S   U S   5      5      SS[        4/S9n[        R                  " [        [        U S   U S   5      5      S	S[        4/S9nUR                  [        R                  5      nUR                  [        R                  5      nU UUUU/n[        (       aN  [        R                  " U5      n	UR                  U	5        [        R                  " U5      n
UR                  U
5        U H@  n[        US
S/SS/// SQS9n[        R                  " U/ SQ/ SQ/ SQ/ SQ/5      (       a  M@   e   g s  snf s  snf )N)a1a2r   r   r   r!   r$   r"   )rQ   rc   rQ   asciirc   )rQ   S2dtype)rQ   U2r"   )rU   rV   za[a1]:xza[a2]:xrJ   rZ   )r   r   r   r!   )r   r   r$   r   )r   r   r   r"   )dictencodestrr   arrayro   zipintviewrecarrayr   pandas	DataFramer1   rO   r]   )
basic_dictbasic_dict_bytesr   basic_dict_unicodestructured_array_bytesstructured_array_unicoderecarray_bytesrecarray_unicodedatasdf_bytes
df_unicoderC   r   s                r   test_data_typesr      s   /lCJJ'8H8MN8M1XXg.8MNS7lKj)/A#/FG/F!s1v/FGsXXSC*S/23K#s;T  "xxSC*S/23K#s;T  ,00=N/44R[[A E {##$45X%%&89
Z US#JA	
 {{1|\<VWWWW 5 O Hs   GGc                  J  ^ S/ SQ0mU4S jn [        [        S5      /U S5      S   n[        U/T5      S   nUR                  [        R                  " [        R
                  5      :X  d   e[        U/T[        R                  S9S   nUR                  [        R                  " [        R                  5      :X  d   e[        [        S5      (       aR  [        U/T[        R                  S9S   nUR                  [        R                  " [        R                  5      :X  d   eg g )Nrc   r#   c               3      >#    T v   g 7fr0   r-   rB   s   r   rD   4test_build_design_matrices_dtype.<locals>.iter_maker  rF   rG   r   r   float128)	r
   r6   r	   r   r   float64float32hasattrr   rD   buildermatrC   s      @r    test_build_design_matrices_dtyper      s    D %mC&8%9:qI!LG
	4
0
3C99,,,,
	4rzz
B1
EC99,,,,r:#WIt2;;GJyyBHHR[[1111 r   c                     ^ S/ SQ0mU4S jn [        [        S5      /U S5      S   n[        U/TSS9S   n[        U[        5      (       d   e[
        R                  " [        [        U/TSS9  g )Nrc   r#   c               3      >#    T v   g 7fr0   r-   rB   s   r   rD   $test_return_type.<locals>.iter_maker  rF   rG   r   rN   return_typeasdfsadf)r
   r6   r	   
isinstancer   r*   r+   r   r   s      @r   test_return_typer     su    D %mC&8%9:qI!LG  	4X
Fq
ICc<(((( MM)G9d
r   c                    ^ / SQ/ SQS.mU4S jn [        [        SS5      /U S5      S   n[        U/S[        R                  S	/[        R
                  " / S
Q[        S9S.5      S   nUR                  S:X  d   e[        R                  " U/ SQ/5      (       d   e[        U/S[        R                  S	/[        R
                  " / S
Q[        S9S.SS9S   nUR                  S:X  d   e[        R                  " U/ SQ/5      (       d   eSSK	J
n  U" / S9n[        U/S[        R                  /[        R
                  " SS/[        S9S.US9S   nUR                  S:X  d   e[        R                  R                  U/ SQSS[        R                  //5        [        R                  " [        [        U/S[        R                  S	/[        R
                  " / S
Q[        S9S.SS9  g )Nr#   )c1c2r   rc   rb   c               3      >#    T v   g 7fr0   r-   )initial_datas   r   rD   "test_NA_action.<locals>.iter_maker&  s     rG   rc   rb   r         $@g      4@)r   r   Nr   )r   r$   )      ?        r   drop)	NA_action)NAAction)NA_typesr   r   )r!   r$   r   r   raise)r
   r6   r	   r   nanasarrayobjectr   array_equalpatsy.missingr   testingassert_array_equalr*   r+   r   )rD   r   r   r   r   r   s        @r   test_NA_actionr   #  s   ");<L %mC&=%>
ANqQG  		RVVT"4Ff)UV 	C 99>># 012222  		RVVT"4Ff)UV 		C
 99>># 012222 ' "%I
		RVVn2::tTl&#IJ 		C
 99JJ!!#(83RVV:L'MN MM		RVVT"4Ff)UVr   c                  *  ^ S[         R                  S// SQS.mU4S jn [        [        SS5      /U S5      S   nUR                  / S	Q:X  d   e[        U/T5      u  nUR                  S
:X  d   e[         R                  " U/ SQ/ SQ/5      (       d   eg )Nr         @)r   r   c3r   c               3      >#    T v   g 7fr0   r-   rB   s   r   rD   1test_NA_drop_preserves_levels.<locals>.iter_makerY  rF   rG   rc   rb   r   )zc[c1]zc[c2]zc[c3]rc   )r!   r"   )r   r   r   r   )r   r   r   r   )r   r   r
   r6   r:   r	   r   r   )rD   r9   r   rC   s      @r   test_NA_drop_preserves_levelsr   T  s     rvvs#*<=D )-S*A)BJPQRSTUK##'GGGG"K=$7FS99>># 46JKLLLLr   c            
        ^ [         (       d  g [        R                  " / SQ/ SQ/ SQS./ SQS9mU4S jn [        [	        / 5      /U S5      u  n[        [	        S	5      [	        S
5      /U SS9u  p#[        [	        S
S5      /U SS9u  n[        [	        S
S	5      /U SS9u  n[
        R                  " [        [        U/TS
   TS   S S S2   S.5        [
        R                  " [        [        X#/TS
   TS	   S S S2   S.5         " S S[        R                  5      n[
        R                  " [        [        U/U" T5      5        [        U/TS
   / SQS.5      u  n[        R                  " USS/SS/SS//5      (       d   e[        X#/TSS9u  p[        U[        R                  5      (       d   e[        U	[        R                  5      (       d   e[        R                  " US/S/S//5      (       d   e[        R                  " U	S/S/S//5      (       d   e[        R                  " UR                  / SQ5      (       d   e[        R                  " U	R                  / SQ5      (       d   e[        R                  " UR                  S	/5      (       d   e[        R                  " U	R                  S
/5      (       d   eUR                  R                   S	/:X  d   eU	R                  R                   S
/:X  d   eUR                  R"                  S	/:X  d   eU	R                  R"                  S
/:X  d   e[        X#// SQTS
   S.SS9u  p[        U[        R                  5      (       d   e[        U	[        R                  5      (       d   e[        R                  " US /S!/S"//5      (       d   e[        R                  " U	S/S/S//5      (       d   e[        R                  " UR                  / SQ5      (       d   e[        R                  " U	R                  / SQ5      (       d   e[        R                  " UR                  S	/5      (       d   e[        R                  " U	R                  S
/5      (       d   eUR                  R                   S	/:X  d   eU	R                  R                   S
/:X  d   eUR                  R"                  S	/:X  d   eU	R                  R"                  S
/:X  d   e[        U// S#QTS   S.SS9u  n
[        U
[        R                  5      (       d   e[        R                  " U
/ S$Q/ S%Q/ S&Q/5      (       d   e[        R                  " U
R                  / SQ5      (       d   e[        U// SQ/ S'QS.SS9u  n[        U[        R                  5      (       d   e[        R                  " US(S /S)S!/S*S"//5      (       d   e[        R                  " UR                  / S+Q5      (       d   e[        U/TSS9u  n[        U[        R                  5      (       d   e[        R                  " US/S/S//5      (       d   eUR                  R%                  [        R&                  " / SQ5      5      (       d   eSS KnUR*                  R                   n S,UR*                  l         [
        R                  " [        [        U/S
/ SQ0SS9  XR*                  l         [        U/S-[        R,                  S./[        R.                  " / S/Q[0        S09S.S1SS29u  n	U	R                  R%                  [        R&                  " S/5      5      (       d   eg ! XR*                  l         f = f)3Nr#   )r"   r&   r'   r   r   r   )rc   yrQ   )r          )indexc               3      >#    T v   g 7fr0   r-   rB   s   r   rD   +test_return_type_pandas.<locals>.iter_makern  rF   rG   r   r   rc   rH   rQ   rc   rQ   rc   r   c                       \ rS rSrS rSrg)2test_return_type_pandas.<locals>.CheatingDataFramei  c                     US:X  a%  [         R                  R                  X5      S S S2   $ [         R                  R                  X5      $ )Nrc   r   )r   r   __getitem__)selfkeys     r   r   >test_return_type_pandas.<locals>.CheatingDataFrame.__getitem__  s@    cz''33D>ttDD''33D>>r   r-   N)__name__
__module____qualname____firstlineno__r   __static_attributes__r-   r   r   CheatingDataFramer     s    	?r   r   )(   2   <   r   r   r!   r   r$   r   	dataframer   r"   r&   r'   )r(      	   )r   rc   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   r
   r6   r*   r+   r   r	   r   r]   r   r   r   columnsr9   r:   
term_namesequalsIndexpatsy.buildbuildr   r   r   )rD   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_pandasrC   s                  @r   test_return_type_pandasr  f  s   ;i.@AD ,]2->,?QON[3	s	]3/0*qY ,	sC	 !:N[ ,	sC	 !:N[
 MM	3id3i"o.	 MM	3id3i"o.	?F,, ? MM)I;8I$8O
 #K=S	2UVFS;;saWq"g2w78888 '	+JD dF,,----dF,,---->>$!qcA30000>>$!qcA30000>>$**l3333>>$**l3333>>$,,....>>$,,....((SE111((SE111&&3%///&&3%/// '	d3i(JD
 dF,,----dF,,---->>$!qcA30000>>$!qcA30000>>$**l3333>>$**l3333>>$,,....>>$,,....((SE111((SE111&&3%///&&3%///%	\S	:IV ff..////>>&:z:"FGGGG>>&,,5555 &	Y\:IV ff..////>>&B7RGb!W"=>>>>>>&,,	2222 &{mT{SIVff..////>>&A3aS/2222<<v||L9::::((J-"'!K)#	
 #-#	BFFC rzz2DF'ST	GT ::V\\1#.//// #-s   !6] ]-c                  Z  ^ / SQ/ SQ4[        / SQ/ SQS9[        / SQ/ SQS94S/S/S//SS/SS/SS//4/ S	Q/ S
Q/ SQ/SS/SS/SS//4/n / SQ/ SQ4/ SQ[        / SQ5      4/ SQ[        / SQ5      4/ SQ/ SQ4/n/ SQ/ SQ4/n[        S/5      mU4S jnU4S jnU  H%  u  pVU" XV5        U" Xe5        U" XV5        U" Xe5        M'     U H  u  pVU" XV5        U" XV5        M     U H  u  pVU" XV5        U" Xe5        M     [        R                  " [        [
        / SQ/ SQS.SS/S//5        g )Nr#   )TFTra   )rb   rR   rQ   )levelsr   r!   r$   )r   r   r   )r!   r!   r!   )r$   r$   r$   )rQ   rR   drc   c                    >^ ^ U U4S jn [        T/US5      n[        UST 05        [        UST05        [        e! [         a     g f = f)Nc               3   &   >#    ST 0v   ST0v   g 7fNrc   r-   )data1data2s   r   rD   =test_data_mismatch.<locals>.t_incremental.<locals>.iter_maker  s     ,,s   r   rc   )r
   r	   r,   r   r  r  rD   buildersr>   s   ``  r   t_incremental)test_data_mismatch.<locals>.t_incremental  sU    		!-xj*aHH!(S%L9!(S%L9 !   		s   *< 
A	A	c                 v   >^  U 4S jn[        T/US5      n[        R                  " [        [        USU05        g )Nc               3      >#    ST 0v   g 7fr  r-   r  s   r   rD   ?test_data_mismatch.<locals>.t_setup_predict.<locals>.iter_maker  s     ,s   r   rc   )r
   r*   r+   r   r	   r  s   `   r   t_setup_predict+test_data_mismatch.<locals>.t_setup_predict  s1    	 *8*j!Dj"7C<Pr   r   r   r   )r   r6   r*   r+   r   rO   )test_cases_twowaytest_cases_onewaysetup_predict_onlyr  r  rQ   rR   r>   s          @r   test_data_mismatchr    sk    
'(oo6oo6	

 #sQCAq6Aq6Aq623
Y		*aVaVaV,DE
 
O$	Ao&'	a01	o.	 
/*	 cU#H!Q "aa	 "
 "a " # # MMKy|!Da3%RUQVr   c                    ^	 S/ SQ0m	U	4S jn [        [        5       /U S5      S   n[        R                  " [        [
        U/T	5        [        [        / 5      /U SS9S   n[        R                  " [        [
        U/T	5        [        R                  " [        [
        X/T	5        [        (       aY  [        X!/[        R                  " T	5      5      u  p4[        R                  " US/S/S//5      (       d   eUR                  S:X  d   e[        S/5      n[        U[        5       /U SS9n[        UT	5      u  pt[        R                  " US/S/S	//5      (       d   eUR                  S:X  d   e[        U[        / 5      /U SS9n[        UT	5      u  pt[        UT	5      u  px[        R                  " US/S/S	//5      (       d   e[        R                  " US/S/S//5      (       d   eg )
Nrc   r#   c               3      >#    T v   g 7fr0   r-   rB   s   r   rD   1test_data_independent_builder.<locals>.iter_maker4  rF   rG   r   rH   r   )r$   r   r!   r$   )r
   r6   r*   r+   r   r	   r   r   r   r   r]   r   )
rD   null_builderintercept_builderint_mnull_m
x_termlistr  x_mintercept_mrC   s
            @r   test_data_independent_builderr)  1  s   D *=?*;ZKANL
MM*3l^TJ.	r	Z!	 MM*36G5H$O
MM)L+Ld
 {--v/?/?/E
 {{5A3aS/2222||v%%% u%J%	]_%zAH ($7KC;;saS1#sO,,,,<<6!!!%	]2&'aH ($7KC,Xt<C;;saS1#sO,,,,;;{aS1#sO4444r   c                  V  ^ / SQ/ SQS.mU4S jn [        S/5      n[        SS/5      n[        X/U SS9n[        UT5      u  pE[        US	US/S
9  [        R
                  " US	/S/S//5      (       d   e[        USUSS/S
9  [        R
                  " US	S/SS/SS//5      (       d   eg )Nr#   r   r   c               3      >#    T v   g 7fr0   r-   rB   s   r   rD   4test_same_factor_in_two_matrices.<locals>.iter_makerg  rF   rG   rc   rQ   r   rH   r   rJ   r!   r$   zx:a[a1]zx:a[a2])r6   r
   r	   r?   r   r]   )rD   t1t2r  m1m2rC   s         @r    test_same_factor_in_two_matricesr1  d  s    !34D 
u	B	Sz	"B%rh
QGH"8T2FBAr6;;rQC!qc?++++ArI0FG;;rQFQFQF34444r   c                  v   ^ S/ SQ0mU4S jn [         R                  " [        [        [	        S5      /U S5        g )Nrc   r#   c               3      >#    T v   g 7fr0   r-   rB   s   r   rD   .test_eval_env_type_builder.<locals>.iter_makerw  rF   rG   foo)r*   r+   	TypeErrorr
   r6   )rD   rC   s    @r   test_eval_env_type_builderr7  t  s4    D MM)M#,>+?Ur   c                      S/ SQ0n S[        / SQ5      0nX/n[        (       a+  S[        R                  " / SQ5      0nUR	                  U5        S nU H  nU H  nU" XV5        M     M     g )NrQ   r   )r   r   r   )r   r   r   c                 T   ^  U 4S jn[        [        S/5      /USS9n[        X15        g )Nc               3      >#    T v   g 7fr0   r-   r  s   r   rD   /test_categorical.<locals>.t.<locals>.iter_maker  s     KrG   rQ   r   rH   )r
   r6   r	   )r  r  rD   r  s   `   r   r   test_categorical.<locals>.t  s/    	 *C5!"J
 	h.r   )r   r   r   Categoricalr1   )data_strings
data_categr   data_pandasr   r  r  s          r   test_categoricalrA    so    +,Lq+,-J&EF../ABC[!/ EeO  r   c                     SSK Jn Jn  / SQn[        S[	        U5      0SS/// SQS9n[
        R                  " U/ SQ/ S	Q/ SQ/ S
Q/5      (       d   eX" 5       4 HH  n[        S[	        X$5      0SS/// SQS9n[
        R                  " U/ SQ/ SQ/ SQ/ SQ/5      (       a  MH   e   [        S[	        X!" SS95      0SS/// SQS9n[
        R                  " U/ SQ/ SQ/ SQ/ SQ/5      (       d   e[        S[	        U5      0S/ S/// SQS9n[
        R                  " U/ SQ/ SQ/ SQ/ SQ/5      (       d   eX" 5       4 HI  n[        S[	        X$5      0S/ S/// SQS9n[
        R                  " U/ SQ/ SQ/ SQ/ SQ/5      (       a  MI   e   [        S[	        X!" SS95      0S/ S/// SQS9n[
        R                  " U/ SQ/ SQ/ SQ/ SQ/5      (       d   e[        S[	        USS/SS/SS//5      0SS//SS/S9n[
        R                  " USS/SS/SS/SS//5      (       d   e[        S[	        X " SS/SS/SS//SS/5      5      0SS//SS/S9n[
        R                  " USS/SS/SS/SS//5      (       d   eg ) Nr   )ContrastMatrixSum)r   a3r   r   rQ   r$   )rU   rV   za[a3]rJ   )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)rF  rH  a[S.a3])rW   rX   za[T.a3])rW   rG  rH  )rW   rH  rJ  r(   r   r!      r   r   z
a[custom0]z
a[custom1]z[foo]z[bar]za[foo]za[bar])patsy.contrastsrC  rD  rO   r   r   r]   )rC  rD  valuesr   r   s        r   test_contrastrN    s   3%F 		ai!seW3N	A ;;q9iIFGGGG35\!F,UG:	
 {{1y+y)LMMMM  		a$%	
6		A ;;q;	;	JKKKK 		ai		cU8		A ;;q9iIFGGGG35\!F,#K<	
 {{1y+y)LMMMM  		a$%		cU8		A ;;q;	;	JKKKK 		a!R1b'Ar7345	
"L1		A ;;qAr7QGaWq"g>????B!R1b''BWgDVW	

 	

)		A ;;qAr7QGaWq"g>????r   c                    ^^^ SS/SS/SS//SS/S	.m[        S
SS5      n U4S jn[        U /US5      S   m[        T/T5      S   mUUU4S jnU" S/ S	Q[        S 5      5        U" / S	Q/ S	Q[        S 5      5        U" U / S	Q[        S 5      5        U" U S   SU S   // S	Q[        S 5      5        U" SS
S/SS/5        U" S
S/S
S/SS/5        U" U S   U S   /S
S/SS/5        U" U S   S/S
S/SS/5        U" SS
S/SS/5        U" SS
/S
S/SS/5        U" U S   U S   /S
S/SS/5        U" U S   S
/S
S/SS/5        U" SS/SS/5        U" S/S/SS/5        U" U S   /S/SS/5        [        R
                  " [        TR                  S5        [        R
                  " [        TR                  S5        [        R
                  " [        TR                  S/5        [        R
                  " [        TR                  [        S/5      /5        [        / SQ5      nUR                  SS/5      nUR                  SS/:X  d   eUR                  b   eg )Nr   r!   g@g	@gffffff@g@r&   r'   )rc   r   zrc   r   rP  c               3      >#    T v   g 7fr0   r-   )all_datas   r   rD   *test_DesignInfo_subset.<locals>.iter_maker  s     rG   r   c                 *  > TR                  U 5      n0 nU H
  nT	U   XE'   M     [        U/U5      S   nT
S S 2U4   n[        U [        5      (       d$  [	        U 5      [	        UR
                  5      :X  d   e[        R                  " Xg5      (       d   eg )Nr   )rl   r	   r   r   r\   r3   r   r   )which_terms	variablesr   sub_design_infosub_datavariable
sub_matrixsub_full_matrixall_builderrR  full_matrixs           r   r   !test_DesignInfo_subset.<locals>.t  s    %,,[9!H!)(!3H "*O+<hGJ
%aj1+s++{#s?+@+@'AAAA~~j::::r   z~ 0 + x + y + zz~ 0 + x + zr$   z~ 0 + z + xz~ 0 + yza ~ az~ asdfasdfra   rb   rQ   )r6   r
   r	   slicer*   r+   r   rl   KeyErrorr   r   r:   r3   )ru   rD   r   min_dimin_di_subsetr\  rR  r]  s        @@@r   test_DesignInfo_subsetrd    sy   
 VC:Sz":!QHHc3,I ))j!DQGK'x@CK	; %+6od4i%+.y|S)A,'%+Fmc3Z!Q(sCj3*q!f%y|Yq\"S#JA7y|SC:1v.mc3Z!Q(sCj3*q!f%y|Yq\"S#JA7y|SC:1v.i#AsecUQFy|nseaV$ MM*k00':
MM(K..9
MM(K..9
MM(K..vh0@A (FMM3*-M%%#s333&&&r   r0   ).numpyr   r*   r  r   
patsy.utilr   r   r   
patsy.descr   r   r   r	   r
   patsy.categoricalr   patsy.user_utilr   r   patsy.design_infor   r   r   r   r.   r6   r?   rO   r_   rd   r   slowr   r   r   r   r   r  r  r)  r1  r7  rA  rN  rd  r-   r   r   <module>rl     s       V V & E  2 6W( 6>r3&99x #$  %XP2&$.bM$H0V=@05f5 ,O@d7'r   