
    J/Ph$k                        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mZmZ 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 )     N)
PatsyError)atleast_2d_column_defaulthave_pandashave_pandas_categorical)Term	INTERCEPT)build_design_matricesdesign_matrix_builders)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        P/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/patsy/test_build.pyassert_full_rankr      sl    !!$$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."2aVaV4DEEE
M."2aVaV4DEEE
M."2YYY4MNNN
M."2YYY			9994UVVVVVr   c                  l    g }| D ].}|                     t          d |D                                  /|S )Nc                 ,    g | ]}t          |          S r-   )r   ).0names     r   
<listcomp>z!make_termlist.<locals>.<listcomp>.   s     @@@$<--@@@r   )appendr   )entriestermsentrys      r   make_termlistr8   +   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   2   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   r
   r	   term_slicesr;   r<   rA   )	rF   r?   r5   r<   r@   rG   design_infosmatricesmatrixs	   `        r   make_matrixrP   ;   s    g&H     *8*j1MMML$\488Ha[F?&&*<*HHHHH?'6+=+JJJJJa0000xlSSSS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   rR   x1x2a[a1]a[a2]rK   	Intercepta[T.a2]r"   rS   )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   )rX   rY   b[T.b2]za[T.a2]:b[T.b2]r   r   r   r   )r   r   r   r   )r   r   r   r   )rX   rZ   rY   zb[T.b2]:a[T.a2])rV   rW   rT   z
a[T.a2]:x1r$   )rT   rU   zx2:x1)r   r   linspacelenrP   allclosecolumn_stack)rF   rT   rU   r   s       r   test_simpler`   K   s4   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:;;;;;	
sQQQ		 	 	A ;q<<<|||\\\RSSSSS		cUSEC:&KKK		 	 	A ;q<<<|||\\\RSSSSS		cUSEC:&KKK		 	 	A ;q<<<|||\\\RSSSSS	
d$;;;		 	 	A ;	2a5!2a5!2a5"Q% 2a5"Q% 		
     	a4&4&4,/>S>S>S	 	 	A ;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!   rR   rS   cr   r   rR   xr"   rS   r'   rc   )r   r   r\   r]   rP   rE   s    r   test_R_bugsre      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&   )rR   rS   repeatr   r   rR   rT   rU   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   rn   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   )rR   rS   rT   rU   )rS   )rR   )rU   )rT   )rS   rU   )rR   rT   )rR   rS   rU   )rR   rS   rT   )rS   rT   rU   )rR   rT   rU   c                 <    g | ]}|                     d           |S rd   
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 rp   rq   rs   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:   ri   add	frozensetr*   r+   r   rP   )rF   	all_termsall_termlist_templates	redundantcountrx   starttermlist_templatetermlist_setdispreferred	preferredexpanded_termsterm_templatenumericrestsubset_restr?   rn   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	#$
%
%&&& 
	'	k"	+,	-.I EKKKIIKKE3 + +,--'0 	+ 	+#L)|++	0M0M 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//T=BS    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"   )rR   rd   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   rR   c                 ,    g | ]}t          |          S r-   )strr   s     r   r3   z#test_data_types.<locals>.<listcomp>   s    GGG!s1vvGGGr   rd   )rR   S2dtype)rR   U2r"   )rV   rW   za[a1]:xza[a2]:xrK   r[   )r   r   r   r!   )r   r   r$   r   )r   r   r   r"   )dictr   arrayrv   zipintviewrecarrayr   pandas	DataFramer4   rP   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      s"   ///lllCCJJ''NN8H8MNNNS777lllKKj))GG/A#/FGGGsXSC*S/2233K#s;T    "xSC*S/2233K#s;T      ,00==N/44R[AA E  !#$455X%&899
Z    X XUS#JAAA	
 
 
 {1|||\\\<<<VWWWWWWX X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 )Nrd   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)	r
   r8   r	   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 )Nrd   r#   c               3      K    V  d S rD   r-   rE   s   r   rG   z$test_return_type.<locals>.iter_maker  rH   r   r   rO   return_typeasdfsadf)r
   r8   r	   
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)G9d
     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   rd   rc   c               3      K    V  d S rD   r-   )initial_datas   r   rG   z"test_NA_action.<locals>.iter_maker&  s      r   rd   rc   r         $@g      4@)r   r   Nr   )r   r$   )      ?        r   drop)	NA_action)NAAction)NA_typesr   r   )r!   r$   r   r   raise)r
   r8   r	   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   #  st   ");););<<L     %mC&=&=%>
ANNqQG  		RVT"4F4F4Ff)U)U)UVV  	C 9># 0 0 0122222  		RVT"4F4F4Ff)U)U)UVV   		C
 9># 0 0 0122222 '&&&&& "%%%I
		RVn2:tTl&#I#I#IJJ   		C
 9J!!#(8(8(83RV:L'MNNN M		RVT"4F4F4Ff)U)U)UVV     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_makerY  rH   r   rd   rc   r   )zc[c1]zc[c2]zc[c3]rd   )r!   r"   )r   r   r   r   )r   r   r   r   )r   r   r
   r8   r<   r	   r   r   )rG   r;   r   rF   s      @r   test_NA_drop_preserves_levelsr   T  s     rvs#*<*<*<==D     )-S*A*A)BJPQRRSTUK#'G'G'GGGGG"K=$77FS9># 4 4 46J6J6JKLLLLLLLr   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   )rd   yrR   )r          )indexc               3      K    V  d S rD   r-   rE   s   r   rG   z+test_return_type_pandas.<locals>.iter_makern  rH   r   r   r   rd   rI   rR   rd   rR   rd   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 )Nrd   r   )r   r   __getitem__)selfkeys     r   r   z>test_return_type_pandas.<locals>.CheatingDataFrame.__getitem__  sH    czz'33D#>>tttDD'33D#>>>r   N)__name__
__module____qualname__r   r-   r   r   CheatingDataFramer     s#        	? 	? 	? 	? 	?r   r   )(   2   <   r   r   r!   r   r$   r   	dataframer   r"   r&   r'   )r(      	   )r   rd   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
   r8   r*   r+   r   r	   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  f  s    iiiii.@.@.@AA  D     ,]2->->,?QOON[3	s		]3//0*q  Y	 ,	sC	 	 !:  N[ ,	sC	 	 !:  N[
 M	3id3i"o..	   M	I3id3i"o..	  ? ? ? ? ?F, ? ? ? M)I;8I8I$8O8O  
 #K=S	2U2UVVFS;saWq"g2w788888 '	I+  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%//// '	Iiid3i((  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%////%	\\\S	::  IV ff./////>&:::zzz:::"FGGGGG>&,55555 &	YYY\\\::  IV ff./////>&B7RGb!W"=>>>>>>&,			22222 &{mT{SSSIVff./////>&A3aS/22222<v|LLL99:::::(J-"'!K)))#	
 	
 	
 	
 #-*,,,,#	BFC rz2D2D2DF'S'S'STT	  GT :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#   )TFTrb   )rc   rS   rR   )levelsr   r!   r$   )r   r   r   )r!   r!   r!   )r$   r$   r$   )rR   rS   drd   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 Nrd   r-   )data1data2s   r   rG   z=test_data_mismatch.<locals>.t_incremental.<locals>.iter_maker  s-      ,,r   r   rd   )r
   r	   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   rd   )r
   r*   r+   r   r	   r  s   `   r   t_setup_predictz+test_data_mismatch.<locals>.t_setup_predict  sS    	 	 	 	 	 *8*j!DDj"7C<PPPPPr   r   r   r   )r   r8   r*   r+   r   rP   )test_cases_twowaytest_cases_onewaysetup_predict_onlyr  r  rR   rS   r@   s          @r   test_data_mismatchr    s    
'''(oooooo666oooooo666	

 #sQCAq6Aq6Aq623
))YYY				*aVaVaV,DE
 
OOO$	Aooo&&'			a001			ooo.	 
///*	 cU##H! ! ! ! !Q Q Q Q Q "  1aa11!  1a1"  111
MKyyy|||!D!Da3%RUQV    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 )
Nrd   r#   c               3      K    V  d S rD   r-   rE   s   r   rG   z1test_data_independent_builder.<locals>.iter_maker4  rH   r   r   rI   r   )r$   r   r!   r$   )r
   r8   r*   r+   r   r	   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$  1  s]   D     *=??*;ZKKANL
M*3l^TJJJ.	r		Z!  	 M*36G5H$OOO
M)L:K+Ld  
  &--v/?/E/E
 
v {5A3aS/22222|v%%%% u%%J%	]__%zA  H ($77KC;saS1#sO,,,,,<6!!!!%	]2&&'a  H ($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_makerg  rH   r   rd   rR   r   rI   r   rK   r!   r$   zx:a[a1]zx:a[a2])r8   r
   r	   rA   r   r^   )rG   t1t2r  m1m2rF   s         @r    test_same_factor_in_two_matricesr+  d  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 )Nrd   r#   c               3      K    V  d S rD   r-   rE   s   r   rG   z.test_eval_env_type_builder.<locals>.iter_makerw  rH   r   foo)r*   r+   	TypeErrorr
   r8   )rG   rF   s    @r   test_eval_env_type_builderr0  t  sa    D     M)M#,>,>+?U    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 )NrR   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_maker  s      KKKKKr   rR   r   rI   )r
   r8   r	   )r  r  rG   r  s   `   r   rt   ztest_categorical.<locals>.t  s^    	 	 	 	 	 *C5!!"J
 
 
 	h.....r   )r   r   r   Categoricalr4   )data_strings
data_categr   data_pandasrt   r  r  s          r   test_categoricalr8    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   rR   r$   )rV   rW   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=  r?  a[S.a3])rX   rY   za[T.a3])rX   r>  r?  )rX   r?  rA  r(   r   r!      r   r   z
a[custom0]z
a[custom1]z[foo]z[bar]za[foo]za[bar])patsy.contrastsr:  r;  rP   r   r   r^   )r:  r;  valuesr   r   s        r   test_contrastrE    s   33333333%%%F 		aii!seW3N3N3N	 	 	A ;q999iiiIIIFGGGGG3355\ N N!FA,,UG:::	
 
 
 {1yyy+++yyy)))LMMMMMM	a$$%	
666		 	 	A ;q;;;			;;;			JKKKKK 		aii		cU888		 	 	A ;q999iiiIIIFGGGGG3355\ N N!FA,,#K<<<	
 
 
 {1yyy+++yyy)))LMMMMMM	a$$%		cU888		 	 	A ;q;;;			;;;			JKKKKK 		a!R1b'Ar73445	
"L1		 	 	A ;qAr7QGaWq"g>?????B!R1b''BWgDVWW 	

 	

)		 		 		A ;qAr7QGaWq"g>???????r   c                  F   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                       || 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            || 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            || 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            || 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'   )rd   r   zrd   r   rG  c               3      K    V  d S rD   r-   )all_datas   r   rG   z*test_DesignInfo_subset.<locals>.iter_maker  s      r   r   c                 B                        |           }i }|D ]}	|         ||<   t          |g|          d         }
d d |f         }t          | t                    s't	          |           t	          |j                  k    sJ t          j        ||          sJ d S )Nr   )rm   r	   r   r   r]   r6   r   r   )which_terms	variablesr   sub_design_infosub_datavariable
sub_matrixsub_full_matrixall_builderrI  full_matrixs           r   rt   z!test_DesignInfo_subset.<locals>.t  s    %,,[99! 	4 	4H!)(!3HX*O+<hGGJ
%aaaj1+s++ 	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asdfrb   rc   rR   )r8   r
   r	   slicer*   r+   r   rm   KeyErrorr   r   r<   r6   )r{   rG   rt   min_dimin_di_subsetrR  rI  rS  s        @@@r   test_DesignInfo_subsetrY    s`   
 VC:Sz":!QHHHc3,,I     ))j!DDQGK'x@@CK	; 	; 	; 	; 	; 	; 	; A%++666Aoood444Ai%++...Ay|S)A,'%++FFFAmc3Z!Q(((AsCj3*q!f%%%Ay|Yq\"S#JA777Ay|SC:1v...Amc3Z!Q(((AsCj3*q!f%%%Ay|Yq\"S#JA777Ay|SC:1v...Ai#AAsecUQFAy|nseaV$$$ M*k0':::
M(K.999
M(K.999
M(K.vh0@AAA ((FMM3*--M%#s3333&&&&&r   rD   ).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.   r8   rA   rP   r`   re   r   slowr   r   r   r   r   r  r  r$  r+  r0  r8  rE  rY  r-   r   r   <module>ra     sC              V V V V V V V V V V & & & & & & & & E E E E E E E E       2 2 2 2 2 2 2 2 6 6 6 6 6 6 6 6 MMM  W W W  ( ( ( (    6> 6> 6>r3 3 3&99 99 99x #$  %X %X %XP2 2 2&  $. . .bM M M$H0 H0 H0V= = =@05 05 05f5 5 5     ,O@ O@ O@d7' 7' 7' 7' 7'r   