
    .Cc1p                        d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZmZmZ d dlmZ d dlmZ d dlmZmZ d d	lmZmZ d d
lT d dlmZmZmZm Z  d dl!m"Z" erd dl#Z#d Z$i d dfdZ%i d dfdZ&	 d&dZ'efdZ(d Z)d Z*d Z+d Z,d Z-d Z.d Z/d Z0d Z1d Z2d Z3d Z4d Z5d  Z6d! Z7d" Z8d# Z9d$ Z:d% Z;dS )'    N
PatsyError)DesignMatrix
DesignInfo)EvalEnvironment)	ModelDescTerm	INTERCEPT)C)Helmert)balancedLookupFactor)design_matrix_buildersbuild_design_matrices)*)have_pandashave_pandas_categoricalhave_pandas_categorical_dtypepandas_Categorical_from_codes)Originc                     t          j        ||          sJ |j        j        |k    sJ |*t          j        ||          sJ |j        j        |k    sJ n|J |J | r|t	          |j        g|          \  }nHt	          |j        |j        g|          \  }	}t          j        |	|          sJ |	j        j        |k    sJ t          j        ||          sJ |j        j        |k    sJ d S |j        j        J ||j        j        J d S d S N)npallclosedesign_infocolumn_namesr   terms)
expect_full_designslhsrhsdataexpected_rhs_valuesexpected_rhs_namesexpected_lhs_valuesexpected_lhs_namesnew_rhsnew_lhss
             4lib/python3.11/site-packages/patsy/test_highlevel.pycheck_resultr)      sq    ;s/00000?'+=====
 *{3 344444+/AAAAAA"***!))) < 	J,co->EEHGG4co69o6G59 ;  ;GW ;w,,,,,&37IIIII{7C((((("/3EEEEEEE$,,,;co3;;;;;;;    matrixc                 `    d}t          |t                    r|dz  }t          | |||          S N	dataframe   return_type)
isinstanceintdmatrixformula_liker!   depthr1   s       r(   dmatrix_pandasr8   :   s9    K% 
<u+FFFFr*   c                 `    d}t          |t                    r|dz  }t          | |||          S r-   )r2   r3   	dmatricesr5   s       r(   dmatrices_pandasr;   @   s9    K% 
\4KHHHHr*   c                 L   t          |t                    r|dz  }fd}t          | t          j        t          t
          fz             s@t          | t                    rt          | d         t
                    st          | d          rd|'t          | ||          }	d }
t          |	g          \  }n$t          | ||          }t          |          \  }
}t          ||
|||||           nBt          j        t          t          | |           t          j        t          t          | |           t          g}t           g}t"          r4|                    t&                     |                    t(                     |S|D ]%} || |          }t          |d |||||           &|D ]&}	  || |           t*          # t          $ r Y #w xY wd S |D ]&}	  || |           t*          # t          $ r Y #w xY w|D ](} || |          \  }
}t          ||
|||||           )d S )Nr/   c                  $    t           g          S r   iterr!   s   r(   data_iter_makerzt.<locals>.data_iter_makerL   s    TF||r*   r   __patsy_get_model_desc__)r2   r3   sixstring_typesr   r   tuplehasattrincr_dbuilderr   incr_dbuildersr)   pytestraisesr   r4   r:   r   appendr8   r;   AssertionError)r6   r!   r7   r   r"   r#   r$   r%   rA   builderr   r    builders
one_mat_fs
two_mat_fsfs    `              r(   trR   F   s
    % 
    <!1Y
4K!KLL 5|U++5<?J775 <!;<<5  	=#L/5IIGC*G9d;;FSS%lOUKKH,Xt<<HC(#sD(*<(*<	> 	> 	> 	> 	j."O	5 	5 	5j-"O	5 	5 	5JJ ,.)))*+++ B 	B 	BA!L$..C,dC,.@,.@B B B B  	% 	%A%,e,,, %$    	% 	%  	% 	%A%,e,,, %$    
  	B 	BA<u55JS#,c3,.@,.@B B B B	B 	Bs$   *F>>
G
GG))
G65G6c                     t          |t                    r|dz  }t          t          g}t          r|t
          t          gz  }|D ]!}	  || ||           t          # |$ r Y w xY wd S )Nr/   )r2   r3   r4   r:   r   r8   r;   rL   )r6   r!   r7   excfsrQ   s         r(   	t_invalidrV      s    % 

9	B 1
~/00 ! !	!AlD%((( !   	 	 	D	! !s   AA"!A"c                     t          g dg dgi ddg dg dgg d           t          d g dg dgfi ddg dg dgg d           t          t          j        g dg dg          i ddg dg dgg d           t          d t          j        g dg dg          fi ddg dg dgg d           t          g dg dgd          } t          | i ddg dg dgg d           t          d | fi ddg dg dgg d           t          d	d
gg dg dgfi ddg dg dgg dd	gd
ggdg           t          d	gd
ggg dg dgfi ddg dg dgg dd	gd
ggdg           t          t          j        d	d
g          t          j        g dg dg          fi ddg dg dgg dd	gd
ggdg           t          t          j        d	gd
gg          t          j        g dg dg          fi ddg dg dgg dd	gd
ggdg           t          g dg dgd          }t          d	d
gd          }t          ||fi ddg dg dgg dd	gd
ggdg           t	          g dg dg dgfi d           t	          g dgfi d           t	          g dgg dgg dgfi d           t
          rt          t          j        dg di          i ddd	gd
gdggdg           t          t          j        g dd          i ddd	gd
gdggdg           t          t          j        dg di          t          j        dg di          fi ddd	gd
gdggdgdgdgdggdg           t          t          j        g dd          t          j        g dd          fi ddd	gd
gdggdgdgdgdggdg           t          t          j        g dg          t          j        g dgg d          fi ddg dgg dg dgg d           t          t          j        g d          i ddd	gd
gdggdg           t	          t          j        d	ggd	g          t          j        d	ggd
g          fi d            G d dt                    } |            }t          |d	d
gd	d
gddggdddd	d
gddggd d!gd	gd
ggd"g            G d# d$t                    }t	           |            i d           t          d%d	d
gddgd&ddd	dgd	dggd'dgd	gd
ggdg           t          d(d	d
gddgd&ddd	dgd	dggd'dg           t          d)d	d
gddgd&ddg d*g d+gg d,           t          j        st          t          d%          d	d
gddgd&ddd	dgd	dggd'dgd	gd
ggdg           d-                    d.          }t          |t                    sJ t          j        t"          t$          ||d	d
gi/           t'          g t)          t+          d          g          g          }t          |dg d0iddd1gd2gd3ggdg           t'          g t)          g           t)          t+          d          g          g          }t          |dg d0iddd	d1gd	d2gd	d3ggd'dg           t'          t)          t+          d          g          gt)          g           t)          t+          d          g          g          }t          |g d0g d4d5ddd	d1gd	d2gd	d3ggd'dgd6gd7gd8ggdg           g t)          t+          d          g          gt)          g           t)          t+          d          g          gf}t-          |d9 d:          }	t          |	d         |	d
         fdg d4iddd	d6gd	d7gd	d8ggd'dg           t          |	d
         dg d4iddd	d6gd	d7gd	d8ggd'dg           t          |	d	         |	d
         fdg d4iddd	d6gd	d7gd	d8ggd'dgd6gd7gd8ggdg           g d}
t          d;i ddd	d	gd	d
gd	dggd'd<g           t          d;d<g d4iddd	d6gd	d7gd	d8ggd'd<g           t	          d;i d	t.          t"          f=           d> } |             t1          j        d	          t	          d;i t.          t"          f=           t1          j        d          fd?} |             d S )@Nr/                  r   F)x0x1x2foo)default_column_prefix)foo0foo1foo2r/   rY   y0barbar0xrZ   asdf)nameyr\   r]   r^   )      	   )columns)x7x8x9)rg   y1y2r_   )indexc                       e Zd Zd ZdS ).test_formula_likes.<locals>.ForeignModelSourcec                     t          t          t          d          g          gt          t          d          g          g          S )NYX)r   r	   r   selfr!   s     r(   rB   zGtest_formula_likes.<locals>.ForeignModelSource.__patsy_get_model_desc__   sE    dL$5$5#6778"L$5$5#6778: : :r*   N__name__
__module____qualname__rB    r*   r(   ForeignModelSourcery      s#        	: 	: 	: 	: 	:r*   r   )r{   r|   TX[0]X[1]r{   c                       e Zd Zd ZdS )1test_formula_likes.<locals>.BadForeignModelSourcec                     |S r   r   r}   s     r(   rB   zJtest_formula_likes.<locals>.BadForeignModelSource.__patsy_get_model_desc__   s    Kr*   Nr   r   r*   r(   BadForeignModelSourcer      s#        	 	 	 	 	r*   r   y ~ x)rm   rj   	Interceptz~ xx + y)r/   rZ   r/   )r/   r\   rY   )r   rj   rm   u   Ã©zutf-8r@   )      ?      @      @r   r   r   
         rj   rm   r   r   r   c                  *    t          dg dig          S )Nrj   rX   r>   r   r*   r(   <lambda>z$test_formula_likes.<locals>.<lambda>+  s    dS)))4D3E.F.F r*   )eval_env
~ x_in_envx_in_env)rT   c            
      H    d} t          di ddddgddgddggddg           d S )	Nrk   r   r/   TrY   rZ   r   r   rR   )r   s    r(   check_nested_callz-test_formula_likes.<locals>.check_nested_callF  sI    	,A
q6Aq6Aq6
"[*$=	? 	? 	? 	? 	?r*   c            
      J    d} t          di dddgddgddggddg           d S )	Nrk   r   Tr/   rY   rZ   r   r   r   )r   es    r(   check_nested_call_2z/test_formula_likes.<locals>.check_nested_call_2P  sJ    	,A
q6Aq6Aq6
"[*$=	? 	? 	? 	? 	?r*   )rR   r   asarrayr   rV   r   pandas	DataFrameSeriesobjectrC   PY3unicodedecoder2   rI   rJ   r   r4   r   r	   r   r   	NameErrorr   capture)dmx_dmy_dmr   foreign_modelr   eacutedesc	termlistsrN   r   r   r   r   s                @r(   test_formula_likesr      s7   yyy)))b!yy)))0002 2 2 tiii#$b!yy)))0002 2 2 bj)))YYY'(("ayy)))0002 2 2 tRZIII.//0"ayy)))0002 2 2 
yyy))),E	J	J	JBb"ayy)))6668 8 8 tRj"ayy)))6668 8 8
 1v			999%&Ayy)))000	sQCj4&   aSzIIIyyy)*Byy)))000	sQCj4&   rz1a&2:yyy)))&<==>Ayy)))000	sQCj4&   rzA3*rz999iii*@AABByy)))000	sQCj4&   III.eLLLDAe<<<DtTlByy)))666	sQCj6(  
 yyy999iii012q999 			{nb!$$$			{YYYK)))5r1===  	&
C+
,
,b!
3aS/C5	" 	" 	" 	
&-			
/
/
/Q
3aS/F8	% 	% 	% 	
6S))),--S))),--/02A
3aS/C53aS/C5		" 	" 	"
 	
6=---=---/02A
3aS/C53aS/C5		" 	" 	" 	
6YYYK((YYYK;;;=>@!
99+)))99+)))		+ 	+ 	+
 	
&-			
"
"B
3aS/D6	# 	# 	# 	6#aSE!555#aSE!5557a	 	 	
: : : : :V : : : '&((MmFVaV 
	1v1v(	sQCj3%          ##%%r1--- gaV1a&))1
	1v1vc*	sQCj3%   eAq6A''
	1v1vc*, , , gaV1a&))1
yy)))5557 7 7
 7 J	''

AaV
$
$a
q6Aq6
[#.3*se		 	 	 ""7++&'*****j'6!Q8HIIII R$S 1 1233455DdS///"A
usecUcU$ $ $ R$r((D,s*;*;)<$=$=>??DdS///"A
	3x!SAs8${C&8: : : dL--.//02hhl3&7&7%8 9 9:< <Dd///55q
	3x!SAs8${C&8
tbTB43%! ! ! S))*++,r((D,s"3"3!4556I &i&F&F/02 2 2H x{HQK 3"5q
	2wB!R!K#57 7 7 hqkC&
	2wB!R!K#57 7 7 x{HQK 3"5q
	2wB!R!K#5
tbTB43%! ! ! yyHlB
	1v1v1vj 9; ; ; lZ.
	2wB!R!K#<> > > lB	:'>????? ? ?
 ""AlB	:'>????""A? ? ? ? ?
 r*   c                     t           sd S t          j        g ddg d          } t          j        g ddg d          }t          dd	          }t	          j        |d
d
gd
dgd
dgg          sJ t	          j        |j        ddg          sJ |j        j	        ddgk    sJ t	          j        |j
        g d          sJ t          dd	          \  }}t	          j        |dgdgdgg          sJ t	          j        |j        dg          sJ |j        j	        dgk    sJ t	          j        |j
        g d          sJ t	          j        |d
d
gd
dgd
dgg          sJ t	          j        |j        ddg          sJ |j        j	        ddgk    sJ t	          j        |j
        g d          sJ t          | d	          }t	          j        |d
gdgdgg          sJ t	          j        |j        dg          sJ |j        j	        dgk    sJ t	          j        |j
        g d          sJ t          || fd	          \  }}t	          j        |dgdgdgg          sJ t	          j        |j        dg          sJ |j        j	        dgk    sJ t	          j        |j
        g d          sJ t	          j        |d
gdgdgg          sJ t	          j        |j        dg          sJ |j        j	        dgk    sJ t	          j        |j
        g d          sJ t          | g dfd	          \  }}	t	          j        |j
        | j
                  sJ t	          j        |	j
        | j
                  sJ t          g d| fd	          \  }
}t	          j        |
j
        | j
                  sJ t	          j        |j
        | j
                  sJ dd l}|j        j         }	 d|j        _         t          j        t           t          ddd
gidd	           t          j        t           t          dd
gdgddd	           ||j        _         d S # ||j        _         w xY w)NrX   AAr   )rl   rw   r[   BBs1r.   r0   r/   rY   rZ   r   zs2 ~ s1r\   r]   r^   s2)r         r   Frj   r   r   )r   r   r   r4   r   r   array_equalrq   r   r   rw   r:   patsy.highlevel	highlevelrI   rJ   r   )r   r   df1df2df3df4df5df6df7df8df9df10patsy
had_pandass                 r(   test_return_pandasr   W  s    	yyyt<<<	@	@	@B	yyyt<<<	@	@	@B
$K
0
0
0C;saVaVaV455555>#+T':;;;;;?'K+>>>>>>#)\\\22222<<<HC;saS1#sO,,,,,>#+v.....?'D61111>#)\\\22222;saVaVaV455555>#+T':;;;;;?'K+>>>>>>#)\\\22222
"+
.
.
.C;saS1#sO,,,,,>#+v.....?'D61111>#)\\\22222"b{;;;HC;saS1#sO,,,,,>#+v.....?'D61111>#)\\\22222;saS1#sO,,,,,>#+v.....?'D61111>#)\\\22222"lll+EEEHC>#)RX.....>#)RX.....<<<,+FFFIC>#)RX.....>$*bh/////,J1&+#jsS1#J{	L 	L 	L 	Lj1#*>*>"-	/ 	/ 	/ 	/ '1###j#0000s   AQ Qc                     t          dd          } t          d|           }|j        j        g dk    sJ |j        j        ddgk    sJ t          |j        j                  dk    sJ |j        j        d         t          k    sJ d S )NrY   aba:b)r   b[T.b2]za[T.a2]:b[b1]za[T.a2]:b[b2]r   r   )r   r4   r   r   
term_nameslenr   r
   )r!   r    s     r(   test_term_infor     s    a1D
%

C?' ,N ,N ,N N N N N?%+u)=====s$%%****? #y000000r*   c                     g dg dt          j        g dt           j                  g dg dt          g d          t          g d          t          j        g dt
                    d} t          d| d	d
dgdgdggdg           t          d| d	d
dgdgdggdg           t          d| d	d
dgdgdggdg           t          d| d	d
d	dgdd	gd	dggddg           t          d| d	d
g dg dg dgg d           t          d| d	d
g dg dg dgg d           t          d| d	d
g dg dg dgg d           t          d| d	d
g dg dg dgg d            d S )!NrX   )g      ?g       @g      @)dtype)TFT)rb   rh   baz)rb   r/   )r/   hi)r   r   cdr   rQ   ghz~ 0 + ar   Tr/   rY   rZ   r   z~ 0 + br   z~ 0 + cr   z~ 0 + dzd[False]zd[True]z~ 0 + e)r   r   r/   )r/   r   r   )r   r/   r   )ze[bar]ze[baz]ze[foo]z~ 0 + f)zf[1]zf[2]zf[3]z~ 0 + g)zg[bar]zg[baz]zg[foo]z~ 0 + h)zh[1]zh[foo]zh[(1, 'hi')])r   r   float32r   arrayr   rR   r@   s    r(   test_data_typesr     s7    IIIRZ888$$$&&&999((())///v>>> D iq$	sQC!ou  iq$	sQC!ou  iq$	sQC!ou  iq$	1v1v1vY 79 9 9iq$yy)))YYY')G)G)GI I Iiq$yy)))YYY')A)A)AC C Ciq$yy)))YYY')G)G)GI I I iq$yy)))YYY'(((* * * * *r*   c                     t          dd          } t          d| ddddgddgddgddggddg           t          d	| ddddgddgddgddggdd
g           t          d| ddddgddgddgddggddg           t          d| ddg dg dg dg dgg d           t          d| ddg dg dg dg dgg d           t          d| ddg dg dg dg dgg d           t          | d         t                    | d<   t          d| ddddgddgddgddggddg           t          d| ddddgddgddgddggddg           t          d| ddddgddgddgddggddg           d S ) NrY   r   z~ C(a)r   Tr/   r   z
C(a)[T.a2]z~ C(a, levels=['a2', 'a1'])zC(a, levels=['a2', 'a1'])[T.a1]z~ C(a, Treatment(reference=-1))z#C(a, Treatment(reference=-1))[T.a1]za*b)r/   r   r   r   )r/   r   r/   r   )r/   r/   r   r   )r/   r/   r/   r/   )r   a[T.a2]r   za[T.a2]:b[T.b2]z0 + a:b)r   r   r/   r   )r   r/   r   r   )r   r   r   r/   )za[a1]:b[b1]za[a2]:b[b1]za[a1]:b[b2]za[a2]:b[b2]z1 + a + a:b)r/   r/   r   r/   )r   r   za[a1]:b[T.b2]za[a2]:b[T.b2]r   za[H.a2]zC(a, Treatment)zC(a, Treatment)[T.a2])r   rR   r   r   r@   s    r(   test_categoricalr     s   a1D ha
	1v1v1v1v&l(CE E E #T1
	1v1v1v1v&568 8 8 'q
	1v1v1v1v&9:< < < eT1
|||||||| =<<> > > iq
|||||||| CBBD D D mT1
|||||||| A@@B B B $s)W%%DIc4
	2wB!Q!Q(;	*BD D D q
	1v1v1v1v&6M(NP P P c4
	2wB!Q!Q(;	*BD D D D Dr*   c                      g dg dg dd} t          d| dddgd	gd
gdgdgdggdg           t          d| ddddgddgddggddg           t          d| ddddgddgddggddg           d S )NrX   r[   r   )rj   rm   za b cz0 + I(x + y)r   Tr/   rY   rZ   r\   r]   r^   zI(x + y)z
Q('a b c')r   r   r   r   z	center(x)r   r   r@   s    r(   test_builtinsr     s    !\\# #D ndA
	sQC!qcA3$zl4 4 4 lD!
	2wB!R!K#>@ @ @ k4
	2wAA+{!;= = = = =r*   c            
         g dg ddg dg ddgt          j        g d          } t          j        | t          j        |           z
            }|t          j        |          z
  }fd}t	          d|          }t          |d	                   \  }}|j        j        d
gk    sJ |j        j        g dk    sJ t          j        |d	gd	gd	gg          sJ t          j        |t          j	        g dg d|dd          f                    sJ t          d|          }t          |gd	                   \  }|j        j        g dk    sJ t          j        |d	gd	gd	gg          sJ t          j        |t          j	        g dg d|dd          f                    sJ t          j        t          t          d|           t          j        t          t          d|           d S )N)a2r   r   rX   )r   rj   )r   r   a1r[   )r/   rY   rZ   r\   r]   r^   c                  "    t                     S r   r>   )datass   r(   rA   z)test_incremental.<locals>.data_iter_maker  s    E{{r*   z!1 ~ a + center(np.sin(center(x)))r/   r   )r   r   zcenter(np.sin(center(x))))r/   r/   r/   )r/   r/   r   rZ   z~ a + center(np.sin(center(x)))zx ~ xrj   )r   r   sinmeanrH   r   r   r   r   column_stackrG   rI   rJ   r   )	rj   sin_center_xx_colrA   rN   r   r    rM   r   s	           @r(   test_incrementalr     s    !  ii	 	   ii	 	
E 	
%%%&&A6!bgajj.))L27<000E    A-/ /H$XuQx88HC?'K=8888?' ,I ,I ,I I I I I ;saS1#sO,,,,,;sBOYYY-6YY-2122Y-8 9 9 : : : : : =+- -G"G9eAh77FS?' ,I ,I ,I I I I I ;saS1#sO,,,,,;sBOYYY-6YY-2122Y-8 9 9 : : : : : M*mWoFFF
M*nc?CCCCCr*   c                      t          ddg didddt          j        d          gdt          j        d          gdt          j        d          ggd	d
g           d S )Nz~ np.sin(x)rj   rX   r   Tr/   rY   rZ   r   z	np.sin(x))rR   r   r   r   r*   r(   test_env_transformr     sf    mc999%q
	26!99~26!99~26!99~6K " " " " "r*   c                  *   t          dd          t          j        ddd          d<   d         dz  d<   fd}  | d	g d
            | dg d            | dg d
            | dg d            | dg d            | dg d           d S )NrY   r   r   r/   r\   r`   ra   c                 L    t          |           }|j        j        |k    sJ d S r   )r4   r   r   )formulaordermr!   s      r(   t_termsz test_term_order.<locals>.t_terms3  s.    GT""}'5000000r*   za + b + x1 + x2)r   r   r   r`   ra   zb + a + x2 + x1)r   r   r   ra   r`   z0 + x1 + a + x2 + b + 1z0 + a:b + a + b + 1)r   r   r   r   za + a:x1 + x2 + x1 + b)r   r   r   r`   a:x1ra   z@0 + a:x1:x2 + a + x2:x1:b + x2 + x1 + a:x1 + x1:x2 + x1:a:x2:a:b)r   zx1:x2za:x1:x2zx2:x1:bz	x1:a:x2:bra   r`   r   )r   r   linspace)r   r!   s    @r(   test_term_orderr   .  s   a1DQ1%%DJdqDJ1 1 1 1 1 GBBBCCCGBBBCCCG%'J'J'JKKKG!#A#A#ABBBG$7779 9 9GN      r*   c                     ddd}t          d|d          }| rt          j        |dgg          sJ d S t          j        |dgg          sJ d S )Nr]   rY   r   z0 + I(x / y)r/   r   )r4   r   r   )expect_true_divisionr!   r   s      r(   _check_divisionr   D  sn     Da((A %{1ug&&&&&&&{1se$$$$$$$r*   c                      t           j                                        t          j        k     rd S t          d           t          d           d S )NFz6from __future__ import division
_check_division(True)
)
__future__divisiongetMandatoryReleasesysversion_infor   execr   r*   r(   test_futurer  O  sU    ..0033CC E $ % % % % %r*   c            	          ddgddgddggddgddggd} t          d| d	d
g dg dgg d           t          d| d	d
g dg dgg d           d S )Nr   r   r/   rY   rZ   r\   )r   r|   r{   zX*Yr   T)	r/   r/   rY   r/   rZ   r/   rY   rZ   r^   )	r/   rZ   r\   rY   r\   r^   ro   r      )	r   r   r   Y[0]Y[1]z	X[0]:Y[0]z	X[1]:Y[0]z	X[0]:Y[1]z	X[1]:Y[1]za:X + Y)r/   r/   r   rY   r   r/   rZ   )r/   r   rZ   r   r\   rY   r\   )r   z
a[a1]:X[0]z
a[a2]:X[0]z
a[a1]:X[1]z
a[a2]:X[1]r  r  r   r@   s    r(   test_multicolumnr	  Y  s    D\!fq!f!fq!f
 
D
 eT1
2222224; ; ;	< < < iq
  	    r*   c                     g d} g d}t          j        t          d          ddgddgddgg          sJ t          d          \  }}t          j        |dgd	gd
gg          sJ t          j        |ddgddgddgg          sJ d S )NrX   r[   rj   r/   rY   rZ   r   r\   r]   r^   )r   r   r4   r:   )rj   rm   r   r    s       r(   test_dmatrix_dmatrices_no_datar  m  s    		A		A;ws||q!fq!fq!f%=>>>>>!!HC;saS1#sO,,,,,;saVaVaV45555555r*   c                      t          dg dg dg dd          \  } }| j                                        dk    sJ |j                                        dk    sJ d S )Nz	y ~ x + arX   r[   )r   r   a3)rm   rj   r   rm   z	1 + a + x)r:   r   describe)r   r    s     r(   test_designinfo_describer  u  s    III,5II,>,>,>'@ '@ A AHC ?##%%,,,,?##%%444444r*   c            	         d } d}	 t          |g dg dd           J # t          $ r9}|j        t          |d|                    d                    k    sJ Y d }~nd }~ww xY w	 t          d	d
i i           J # t
          $ rr}t          j        d         dk    r4t          |t                    sJ |j        t          d	dd          k    sJ nt          |t                    sJ Y d }~d S Y d }~d S d }~ww xY w)Nc                      t          d          )NWHEEEEEEr   )rj   s    r(   raise_patsy_errorz2test_evalfactor_reraise.<locals>.raise_patsy_error  s    $$$r*   zraise_patsy_error(X) + YrX   r[   )r|   r{   Fr    z1 + x[1]rj   rZ   r\   ro   )
r4   r   originr   rw   	Exceptionr  r  r2   KeyError)r  r   r   s      r(   test_evalfactor_reraiser  |  sk   % % %(Gyyyyyy99::: 	  B B Bx6'1gmmC.@.@AAAAAAAAAAAB	
S"I&&& 	  + + +A!# 	+a,,,,,8vj!Q7777777a*********** 877777+s-     
A#/AA#'A; ;
C7A!C22C7c            	         dddt           j        gt           j        dddgd} dg}t          r|                    d	           |D ]<}t	          d
| |          }t          j        |g dg dg          sJ |d	k    r0|j                            t          j	        ddg                    sJ t          j        t          t          d
| |d           t          d| |          \  }}t          j        |dgdgg          sJ t          j        |ddgddgg          sJ |d	k    r`|j                            t          j	        ddg                    sJ |j                            t          j	        ddg                    sJ t          j        t          t          d| |d           t          d| |          \  }}t          j        |dgdgdgg          sJ t          j        |dgdgdgg          sJ |d	k    r`|j                            t          j	        g d                    sJ |j                            t          j	        g d                    sJ t          j        t          t          d| |d           >d S )Nr/   rY   rZ   r   r   (   r   r+   r.   r   )r!   r1   )r/   rY   r   )r/   rZ   r   raise)r!   r1   	NA_actionr   zy ~ 1rX   )r   nanr   rK   r4   r   rw   equalsr   IndexrI   rJ   r   r:   )r!   return_typesr1   matlmatrmats         r(   test_dmatrix_NA_actionr$    s   Q26""&"b")=>>D:L )K(((# ) )gDkBBB~cJJJ$.JJ$0 1 1 	1 	1 	1+% 	:9##FL!Q$8$899999j'7"- '	) 	) 	) 	) wT{KKK
d~dbTB4L11111~daVaV$455555+% 	;:$$V\1a&%9%9::::::$$V\1a&%9%9:::::jt '	) 	) 	) 	) wT{KKK
d~dbTB4"$677777~daS1#sO44444+% 	>:$$V\)))%<%<=====:$$V\)))%<%<=====jt '	) 	) 	) 	) 	)9) )r*   c                     dddd} dg dgfdg dgffD ]\  }}t          ||           }t          j        ||          sJ t          j        t          |j        g|           d	         |          sJ t
          rjt          j        |           }t          j        t          ||          |          sJ t          j        t          |j        g|          d	         |          sJ d S )
N皙?333333?r   )r`   ra   r   zx1 + x2)r/   r&  r'  zC(a, levels=('a1', 'a2')) + x1)r/   r   r&  r   )r4   r   r   r   r   r   r   r   )data_0dr   expectedr!  data_seriess        r(   test_0d_datar+    s7   $//G (-}= ) ) gw''{3))))){0#/1B18: ::;=#% % 	% 	% 	%  	) -00K;ww<<hGGGGG;4co5F5@ B  BBC E') ) ) ) )) )r*   c                      g d} t          di           }g d} t          |j        i           }t          j        ||          sJ d S )NrX   r   r   )r4   r   r   r   )r   design_matrixdesign_matrix2s      r(   test_env_not_saved_in_builderr/    sS    yyHJ++M||H]6;;N;}n5555555r*   c                  ,   t           sd S t          g dddg          g} t          r-|                     t	          j        | d                              | D ]}d|i}t          j        t          d|          ddgddgddgg          sJ t          j        t          d|          ddgddgddgg          sJ t          j        t          d|          ddgddgddgg          sJ t          j        t          d	|          ddgddgddgg          sJ d S )
N)r/   r   r/   r   r   r   objr/   zC(obj)zC(obj, levels=['b', 'a'])zC(obj, levels=['a', 'b']))	r   r   r   rK   r   r   r   r   r4   )objsr1  r   s      r(   test_C_and_pandas_categoricalr3    s   " ))))c3Z@@AD$ ,FM$q'**+++ % %CL{75!,,FFF$% % 	% 	% 	%
 {78Q//FFF$% % 	% 	% 	%
 {7#>BBFFF$% % 	% 	% 	%
 {7#>BBFFF$% % 	% 	% 	% 	%#% %r*   )NN)<r  r   rC   numpyr   rI   r   r   patsy.design_infor   r   
patsy.evalr   
patsy.descr   r	   r
   patsy.categoricalr   patsy.contrastsr   patsy.user_utilr   r   patsy.buildr   r   r   
patsy.utilr   r   r   r   patsy.originr   r   r)   r8   r;   rR   rV   r   r   r   r   r   r   r   r   r   r   r  r	  r  r  r  r$  r+  r/  r3  r   r*   r(   <module>r>     s"   


     



            6 6 6 6 6 6 6 6 & & & & & & 1 1 1 1 1 1 1 1 1 1       # # # # # # 2 2 2 2 2 2 2 20 0 0 0 0 0 0 0    7 7 7 7 7 7 7 7 7 7 7 7        MMM< < <6 ')x G G G G )+! I I I I 48=B =B =B =B~ .8 ! ! ! !A A AF51 51 51n1 1 1* * *:2D 2D 2Dh= = =&D &D &DP" " "   ,	% 	% 	%% % %  (6 6 65 5 5  6%) %) %)N) ) ),6 6 6% % % % %r*   