
    g$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-y)     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yt        j                  j	                  |       \  }}}t        j
                  |dkD        }|| j                  d   k(  sJ y )N   r   Tg|=)r   shapenplinalgsvdsum)musvranks        M/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/patsy/test_build.pyassert_full_rankr      s^    !!$AwwqzQiimmAGAq!66!e)D1771:    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       y )
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                      g }| D ]3  }|j                  t        |D cg c]  }t        |       c}             5 |S c c}w N)appendr   r   )entriestermsentrynames       r   make_termlistr6   +   sD    E CT%@$<-@ABCL As   =c                     t        |        t        | j                  j                        t        |      k(  sJ || j                  j                  |k(  sJ | j
                  dk(  sJ | j                  d   |k(  sJ y )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                 F    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     y wr0   r-   datas   r   
iter_makerz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_matrixrN   ;   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xlSMr   c                     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 y )Nr!   )abr   r   rP   x1x2a[a1]a[a2]rI   	Intercepta[T.a2]r"   rQ   )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   )rV   rW   b[T.b2]za[T.a2]:b[T.b2]r   r   r   r   )r   r   r   r   )r   r   r   r   )rV   rX   rW   zb[T.b2]:a[T.a2])rT   rU   rR   z
a[T.a2]:x1r$   )rR   rS   zx2:x1)r   r   linspacelenrN   allclosecolumn_stack)rC   rR   rS   r   s       r   test_simpler^   K   sx   a1Dkk!QDI77Bd4jAo%BdD!seWGW3EFA;;qAq6Aq6Aq6Aq6:;;;D!b3%[Y7OPA;;qAq6Aq6Aq6Aq6:;;;	
sQ		A ;;q<|\RSSS		cUSEC:&K		A ;;q<|\RSSS		cUSEC:&K		A ;;q<|\RSSS	
d$;		A ;;	2a5!2a5!2a5"Q% 2a5"Q% 		
   	a4&4&4,/>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       y )Nr!   rP   rQ   cr   r   rP   xr"   rQ   r'   ra   )r   r   rZ   r[   rN   rB   s    r   test_R_bugsrc      s{    a1"DAq#d3i.1DI a"sCj)* a3*sCj12 a3*sCj1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}|j                         }|D ]  }t        |      }|D ]  \  }	}
|	|v s|
|vs # t               }|D ]x  }t        |D cg c]  }|j                  d      s| c}      }|D cg c]  }|j                  d      r| }} |      D ]  }|j                  t        ||z                ! z t        |      }|dv r"t        j                  t        t        | ||       nt        | ||       |dz  }|dz  dk(  st        d|        t        d|j                         |z
  fz         y c c}w c c}w )Nr!   r&   )rP   rQ   repeatr   r   rP   rR   rS   c              3      K   | st                y | d   } | dd        D ]2  }t        t        |             t        t        |f|z                4 y w)Nr   r   )tuplesorted)lobjsubsetall_subsetss      r   rl   z/test_redundancy_thoroughly.<locals>.all_subsets   sY     'MA$C%ae, 5F6N++FC6F?3445s   AA)rP   rQ   rR   rS   )rQ   )rP   )rS   )rR   )rQ   rS   )rP   rR   )rP   rQ   rS   )rP   rQ   rR   )rQ   rR   rS   )rP   rR   rS   rb   )r-   )r-   r%   z
Completed:zTook %0.2f seconds)r   r   rZ   r[   listprinttimer8   rg   
startswithadd	frozensetr*   r+   r   rN   )rC   	all_termsall_termlist_templates	redundantcountro   starttermlist_templatetermlist_setdispreferred	preferredexpanded_termsterm_templatetnumericrestsubset_restr=   rl   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	+ !UN!2 IM OqQ\\#=N OP#0JaS8IJJ#.t#4 IK"&&yw1F'GHII  /M K/T=BS D-1BCQJEs{alE*1+2 

$))+"5!7
78# !PJs   !G8GGGr   c            	         g dg dd} t        |       }|d   D cg c]  }|j                  d       c}|d<   g dg dd}t        |       }|d   D cg c]  }t        |       c}|d<   t        j                  t        t        | d   | d               ddt        fg      }t        j                  t        t        | d   | d               d	dt        fg      }|j                  t        j                        }|j                  t        j                        }| ||||g}t        rLt        j                  |      }	|j                  |	       t        j                  |      }
|j                  |
       |D ]<  }t        |d
dgddggg d      }t        j                  |g dg dg dg dg      r<J  y c c}w c c}w )N)a1a2r   r   r   r!   r$   r"   )rP   rb   rP   asciirb   )rP   S2dtype)rP   U2r"   )rT   rU   za[a1]:xza[a2]:xrI   rY   )r   r   r   r!   )r   r   r$   r   )r   r   r   r"   )dictencodestrr   arrayrm   zipintviewrecarrayr   pandas	DataFramer1   rN   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N1QXXg.NS7lKj)/A#/FG!s1v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  XUS#JA	
 {{1|\<VWWWX5 O Hs   F6F;c                  >   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      rSt        |gt        j                        d   }|j                  t	        j                  t        j                        k(  sJ y y )Nrb   r#   c               3      K     y wr0   r-   rB   s   r   rD   z4test_build_design_matrices_dtype.<locals>.iter_maker  rE   rF   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                      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       y )Nrb   r#   c               3      K     y wr0   r-   rB   s   r   rD   z$test_return_type.<locals>.iter_maker  rE   rF   r   rM   return_typeasdfsadf)r
   r6   r	   
isinstancer   r*   r+   r   r   s      @r   test_return_typer     sr    D %mC&8%9:qI!LG  	4X
Fq
ICc<((( MM)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                  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       y )Nr#   )c1c2r   rb   ra   c               3      K     y wr0   r-   )initial_datas   r   rD   z"test_NA_action.<locals>.iter_maker&  s     rF   rb   ra   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  		RVVT"4Ff)UV 		C
 99>># 01222 ' "%I
		RVVn2::tTl&#IJ 		C
 99JJ!!#(83RVV:L'MN MM		RVVT"4Ff)U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 y )Nr         @)r   r   c3r   c               3      K     y wr0   r-   rB   s   r   rD   z1test_NA_drop_preserves_levels.<locals>.iter_makerY  rE   rF   rb   ra   r   )zc[c1]zc[c2]zc[c3]rb   )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Lr   c            
         t         sy 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                  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*                  _         t        |gd-t        j,                  d.gt        j.                  g d/t0        0      dd1d2      \  }	|	j                  j%                  t        j&                  dg            sJ y # ||j*                  _         w xY w)3Nr#   )r"   r&   r'   r   r   r   )rb   yrP   )r          )indexc               3      K     y wr0   r-   rB   s   r   rD   z+test_return_type_pandas.<locals>.iter_makern  rE   rF   r   r   rb   rG   rP   rb   rP   rb   r   c                       e Zd Zd Zy)2test_return_type_pandas.<locals>.CheatingDataFramec                     |dk(  r&t         j                  j                  | |      d d d   S t         j                  j                  | |      S )Nrb   r   )r   r   __getitem__)selfkeys     r   r   z>test_return_type_pandas.<locals>.CheatingDataFrame.__getitem__  sD    cz''33D#>t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   rb   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  sM   i.@AD ,]2->,?QON[3	s	]3/0*qY	 ,	sC	 !:N[ ,	sC	 !:N[
 MM	3id3i"o.	 MM	I3id3i"o.	?F,, ? MM)I;8I$8O
 #K=S	2UVFS;;saWq"g2w7888 '	I+JD$ dF,,---dF,,--->>$!qcA3000>>$!qcA3000>>$**l333>>$**l333>>$,,...>>$,,...((SE111((SE111&&3%///&&3%/// '	Id3i(JD$
 dF,,---dF,,--->>$!qcA3000>>$!qcA3000>>$**l333>>$**l333>>$,,...>>$,,...((SE111((SE111&&3%///&&3%///%	\S	:IV ff..///>>&:z:"FGGG>>&,,555 &	Y\:IV ff..///>>&B7RGb!W"=>>>>>&,,	222 &{mT{SIVff..///>>&A3aS/222<<v||L9:::((J-"'!K)#	
 #-#	BFFC rzz2DF'ST	GT ::V\\1#./// #-s   8[ [*c                  j   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 ])  \  }} |||        |||        |||        |||       + |D ]  \  }} |||        |||        |D ]  \  }} |||        |||        t        j                  t        t
        g dg ddddgdgg       y )Nr#   )TFTr`   )ra   rQ   rP   )levelsr   r!   r$   )r   r   r   )r!   r!   r!   )r$   r$   r$   )rP   rQ   drb   c                       fd}	 t        g|d      }t        |d i       t        |di       t        # t        $ r Y y w xY w)Nc               3   &   K   d i di y wNrb   r-   )data1data2s   r   rD   z=test_data_mismatch.<locals>.t_incremental.<locals>.iter_maker  s     ,,s   r   rb   )r
   r	   r,   r   r  r  rD   buildersr>   s   ``  r   t_incrementalz)test_data_mismatch.<locals>.t_incremental  sU    		!-xj*aHH!(S%L9!(S%L9 !   		s   *; 	AAc                 r      fd}t        g|d      }t        j                  t        t        |d|i       y )Nc               3      K   d i y wr  r-   r  s   r   rD   z?test_data_mismatch.<locals>.t_setup_predict.<locals>.iter_maker  s     ,s   r   rb   )r
   r*   r+   r   r	   r  s   `   r   t_setup_predictz+test_data_mismatch.<locals>.t_setup_predict  s1    	 *8*j!Dj"7C<Pr   r   r   r   )r   r6   r*   r+   r   rN   )test_cases_twowaytest_cases_onewaysetup_predict_onlyr  r  rP   rQ   r>   s          @r   test_data_mismatchr    s    
'(oo6oo6	

 #sQCAq6Aq6Aq623
Y		*aVaVaV,DE
 
O$	Ao&'	a01	o.	 
/*	 cU#H!Q " 1aa11	
 " 1a1 # 111 MMKy|!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        rSt        ||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 y )
Nrb   r#   c               3      K     y wr0   r-   rB   s   r   rD   z1test_data_independent_builder.<locals>.iter_maker4  rE   rF   r   rG   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:K+Ld
 --v/?/?/E
v {{5A3aS/222||v%%% u%J%	]_%zAH ($7KC;;saS1#sO,,,<<6!!!%	]2&'aH ($7KC,Xt<C;;saS1#sO,,,;;{aS1#sO444r   c                  R   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 y )Nr#   r   r   c               3      K     y wr0   r-   rB   s   r   rD   z4test_same_factor_in_two_matrices.<locals>.iter_makerg  rE   rF   rb   rP   r   rG   r   rI   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_matricesr!  d  s    !34D 
u	B	Sz	"B%r2h
QGH"8T2FBAr6;;rQC!qc?+++ArI0FG;;rQFQFQF3444r   c                  r    dg difd} t        j                  t        t        t	        d      g| d       y )Nrb   r#   c               3      K     y wr0   r-   rB   s   r   rD   z.test_eval_env_type_builder.<locals>.iter_makerw  rE   rF   foo)r*   r+   	TypeErrorr
   r6   )rD   rC   s    @r   test_eval_env_type_builderr&  t  s4    D MM)M#,>+?Ur   c                      dg di} dt        g d      i}| |g}t        r*dt        j                  g d      i}|j	                  |       d }|D ]  }|D ]  } |||         y )NrP   r   )r   r   r   )r   r   r   c                 Z      fd}t        t        dg      g|d      }t        ||       y )Nc               3      K     y wr0   r-   r  s   r   rD   z/test_categorical.<locals>.t.<locals>.iter_maker  s     KrF   rP   r   rG   )r
   r6   r	   )r  r  rD   r  s   `   r   r~   ztest_categorical.<locals>.t  s1    	 *C5!"J
 	h.r   )r   r   r   Categoricalr1   )data_strings
data_categr   data_pandasr~   r  r  s          r   test_categoricalr.    sz    +,Lq+,-J:&EF../ABC[!/   	EeUO	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 ]E  }t        dt	        ||      iddggg d      }t        j                  |g dg dg dg dg      rEJ  t        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 ]F  }t        dt	        ||      idg dggg d      }t        j                  |g dg dg dg dg      rFJ  t        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 y ) Nr   )ContrastMatrixSum)r   a3r   r   rP   r$   )rT   rU   za[a3]rI   )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)r3  r5  a[S.a3])rV   rW   za[T.a3])rV   r4  r5  )rV   r5  r7  r(   r   r!      r   r   z
a[custom0]z
a[custom1]z[foo]z[bar]za[foo]za[bar])patsy.contrastsr0  r1  rN   r   r   r\   )r0  r1  valuesr   r   s        r   test_contrastr;    s   3%F 		ai!seW3N	A ;;q9iIFGGG35\ N!FA,UG:	
 {{1y+y)LMMMN 		a$%	
6		A ;;q;	;	JKKK 		ai		cU8		A ;;q9iIFGGG35\ N!FA,#K<	
 {{1y+y)LMMMN 		a$%		cU8		A ;;q;	;	J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                     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      }|j                  ddg      }|j                  ddgk(  sJ |j                  J y )Nr   r!   g@g	@gffffff@g@r&   r'   )rb   r   zrb   r   r=  c               3      K     y wr0   r-   )all_datas   r   rD   z*test_DesignInfo_subset.<locals>.iter_maker  s     rF   r   c                    j                  |       }i }|D ]
  }	|   ||<    t        |g|      d   }
d d |f   }t        | t              s#t	        |       t	        |j
                        k(  sJ t        j                  ||      sJ y )Nr   )rk   r	   r   r   r[   r3   r   r   )which_terms	variablesr   sub_design_infosub_datavariable
sub_matrixsub_full_matrixall_builderr?  full_matrixs           r   r~   z!test_DesignInfo_subset.<locals>.t  s    %,,[9! 	4H!)(!3HX	4*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asdfr`   ra   rP   )r6   r
   r	   slicer*   r+   r   rk   KeyErrorr   r   r:   r3   )rs   rD   r~   min_dimin_di_subsetrH  r?  rI  s        @@@r   test_DesignInfo_subsetrO    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?   rN   r^   rc   r   slowr   r   r   r   r   r   r  r  r!  r&  r.  r;  rO  r-   r   r   <module>rW     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   