U
    ½mœd1y  ã                   @   sJ  d dl mZ d dlZd dlZd dlZd dlmZ d dlm	Z	m
Z
mZ d dlmZmZ d dlT d dlmZ d dlmZmZ d d	lmZmZ e
r”d dlZd
d„ Zdd„ Zdd„ Zd5dd„Zd6dd„Zdd„ Zdd„ Zdd„ Z de _!dd„ Z"dd„ Z#dd „ Z$d!d"„ Z%d#d$„ Z&d%d&„ Z'd'd(„ Z(d)d*„ Z)d+d,„ Z*d-d.„ Z+d/d0„ Z,d1d2„ Z-d3d4„ Z.dS )7é    )Úprint_functionN)Ú
PatsyError)Úatleast_2d_column_defaultÚhave_pandasÚhave_pandas_categorical)ÚTermÚ	INTERCEPT)Ú*)ÚC)ÚbalancedÚLookupFactor)ÚDesignMatrixÚ
DesignInfoc                 C   sP   t | ƒ} | jd dkrdS tj | ¡\}}}t |dk¡}|| jd ksLt‚d S )Né   r   Tg»½×Ùß|Û=)r   ÚshapeÚnpZlinalgZsvdÚsumÚAssertionError)ÚmÚuÚsÚvZrank© r   úI/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/patsy/test_build.pyÚassert_full_rank   s    r   c                	   C   sª   t t d¡ƒ t ddgddgddgddggƒ t tt ddgddgg¡ t tt ddgddgg¡ t tt dddgdddgg¡ t tt dddgddd	gdd	d
gg¡ d S )Né
   r   r   é   é   é   éd   é   é   é   )r   r   ÚeyeÚpytestÚraisesr   r   r   r   r   Útest_assert_full_rank#   s$      ÿ ÿ ÿ ÿr&   c                  G   s*   g }| D ]}|  tdd„ |D ƒƒ¡ q|S )Nc                 S   s   g | ]}t |ƒ‘qS r   )r   )Ú.0Únamer   r   r   Ú
<listcomp>3   s     z!make_termlist.<locals>.<listcomp>)Úappendr   )ÚentriesÚtermsÚentryr   r   r   Úmake_termlist0   s    r.   c                 C   s\   t | ƒ t| jjƒt|ƒks t‚|d k	r8| jj|ks8t‚| jdksFt‚| jd |ksXt‚d S )Nr   r   )r   ÚsetÚdesign_infor,   r   Úcolumn_namesÚndimr   )ÚmmÚexpected_rankÚtermlistr1   r   r   r   Úcheck_design_matrix6   s    r6   c           	         sˆ   t |Ž }‡ fdd„}t|g|dd�}t|ˆ ƒ}|d }|d j|jjksLt‚|d j|jjksbt‚|j|d kstt‚t||||d� |S )Nc                   3   s
   ˆ V  d S ©Nr   r   ©Údatar   r   Ú
iter_maker@   s    zmake_matrix.<locals>.iter_makerr   ©Zeval_env©r1   )r.   Údesign_matrix_buildersÚbuild_design_matricesZterm_slicesr0   r   r1   r6   )	r9   r4   r+   r1   r5   r:   Zdesign_infosZmatricesÚmatrixr   r8   r   Úmake_matrix>   s     
ÿÿÿr@   c                  C   sž  t ddd�} t ddt| d ƒ¡ }| d< | d d  }| d< t| ddggdd	gd
�}t |ddgddgddgddgg¡s~t‚t| dg dggddgd
�}t |ddgddgddgddgg¡sÀt‚t| dddggddddgd
�}t |ddddgddddgddddgddddgg¡�st‚t| dg dgdgddggddddgd
�}t |ddddgddddgddddgddddgg¡�szt‚t| dg dgdgddggddddgd
�}t |ddddgddddgddddgddddgg¡�sÜt‚t| ddgdgddggdd	ddgd
�}t |dd|d dgdd|d dgdd|d |d gdd|d |d gg¡�sTt‚t| ddgdgddggdddgd
�}t |t |||| f¡¡�sšt‚d S )Nr   )ÚaÚbr   r   rA   Úx1Úx2úa[a1]úa[a2]r<   Ú	Interceptúa[T.a2]r   rB   za[a1]:b[b1]za[a2]:b[b1]za[a1]:b[b2]za[a2]:b[b2]zb[T.b2]za[T.a2]:b[T.b2]zb[T.b2]:a[T.a2]z
a[T.a2]:x1r   zx2:x1)r   r   ÚlinspaceÚlenr@   Úallcloser   Zcolumn_stack)r9   rC   rD   r   r   r   r   Útest_simpleN   sh    (( ÿÿ


ý ÿÿ


ý ÿÿ


ý
ÿýÿrL   c                  C   sp   t dddd�} t 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   )rA   rB   Úcr   r   rA   Úxr   rB   r!   rM   )r   r   rI   rJ   r@   r8   r   r   r   Útest_R_bugs|   s
    rO   c                     sŽ  t dddd�} t ddt| d ƒ¡| d< | d d | d< ‡ fd	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 ]\}	}
|	|kr²|
|kr² q¢q²tƒ }|D ]F}tdd„ |D ƒƒ}dd„ |D ƒ}ˆ |ƒD ]}| 	t
|| ƒ¡ �qqÚt|ƒ}|dk�rHt tt| ||¡ nt| ||ƒ |d7 }|d dkr¢td|ƒ q¢td| ¡ | f ƒ d S )Nr   r    )rA   rB   Úrepeatr   r   rA   rC   rD   c                 3   sR   | st ƒ V  n@| d }ˆ | dd … ƒD ]&}t t|ƒƒV  t t|f| ƒƒV  q&d S )Nr   r   )ÚtupleÚsorted)ÚlÚobjÚsubset©Úall_subsetsr   r   rW   –   s    
z/test_redundancy_thoroughly.<locals>.all_subsets)rA   rB   rC   rD   )rB   )rA   )rD   )rC   )rB   rD   )rA   rC   )rA   rB   rD   )rA   rB   rC   )rB   rC   rD   )rA   rC   rD   c                 S   s   g | ]}|  d ¡r|‘qS ©rN   ©Ú
startswith©r'   Útr   r   r   r)   ³   s     
 z.test_redundancy_thoroughly.<locals>.<listcomp>c                 S   s   g | ]}|  d ¡s|‘qS rX   rY   r[   r   r   r   r)   ´   s     
 )r   )r   r   z
Completed:zTook %0.2f seconds)r   r   rI   rJ   ÚlistÚprintÚtimer/   rQ   ÚaddÚ	frozensetr$   r%   r   r@   )r9   Ú	all_termsZall_termlist_templatesZ	redundantÚcountr_   ÚstartZtermlist_templateZtermlist_setZdispreferredÚ	preferredZexpanded_termsZterm_templateÚnumericÚrestZsubset_restr4   r   rV   r   Útest_redundancy_thoroughlyŽ   sP    	ü
  þrh   r   c                  C   s€  ddddgddddgdœ} t | ƒ}dd	„ |d
 D ƒ|d
< ddddgddddgdœ}t | ƒ}dd	„ |d
 D ƒ|d
< tjtt| d
 | d ƒƒddtfgd�}tjtt| d
 | d ƒƒddtfgd�}| tj¡}| tj¡}| ||||g}t�rt	 
|¡}| |¡ t	 
|¡}	| |	¡ |D ]b}
t|
dd
gd
dggddddgd�}t |ddddgddddgddddgddddgg¡�st‚�qd S )NÚa1Úa2r   r   r   r   )rA   rN   c                 S   s   g | ]}|  d ¡‘qS )Úascii)Úencode©r'   r   r   r   r   r)   Í   s     z#test_data_types.<locals>.<listcomp>rA   c                 S   s   g | ]}t  |¡‘qS r   )ÚsixÚ	text_typerm   r   r   r   r)   Ò   s     rN   )rA   ZS2©Údtype)rA   ZU2rE   rF   za[a1]:xza[a2]:xr<   r   )Údictr   Úarrayr]   ÚzipÚintÚviewZrecarrayr   ÚpandasÚ	DataFramer*   r@   rK   r   )Z
basic_dictZbasic_dict_bytesZbasic_dict_unicodeZstructured_array_bytesZstructured_array_unicodeZrecarray_bytesZrecarray_unicodeÚdatasZdf_bytesZ
df_unicoder9   r   r   r   r   Útest_data_typesÈ   sP    

ÿ

ÿÿ
þÿ
þ ÿ




ÿ


ýrz   c                     s¼   ddddgi‰ ‡ fdd„} t tdƒg| dƒd }t|gˆ ƒd }|jt tj¡ksVt‚t|gˆ tjd�d }|jt tj¡ks‚t‚ttd	ƒr¸t|gˆ tj	d�d }|jt tj	¡ks¸t‚d S )
NrN   r   r   r   c                   3   s
   ˆ V  d S r7   r   r   r8   r   r   r:   í   s    z4test_build_design_matrices_dtype.<locals>.iter_makerr   rp   Úfloat128)
r=   r.   r>   rq   r   Zfloat64r   Zfloat32Úhasattrr{   ©r:   ÚbuilderÚmatr   r8   r   Ú test_build_design_matrices_dtypeë   s    
r€   c                     sl   ddddgi‰ ‡ fdd„} t tdƒg| dƒd }t|gˆ dd	�d }t|tƒsRt‚tjtt|gˆ d
d	� d S )NrN   r   r   r   c                   3   s
   ˆ V  d S r7   r   r   r8   r   r   r:   ý   s    z$test_return_type.<locals>.iter_makerr   r?   ©Úreturn_typeZasdfsadf)	r=   r.   r>   Ú
isinstancer   r   r$   r%   r   r}   r   r8   r   Útest_return_typeû   s      þr„   c               	      s’  dddgdddgdœ‰ ‡ fdd„} t td	d
ƒg| dƒd }t|gdtjdgtjddd gtd�dœƒd }|jdksvt‚t 	|dddgg¡sŽt‚t|gdtjdgtjddd gtd�dœdd�d }|jdksÎt‚t 	|dddgg¡sæt‚ddl
m} |g d�}t|gdtjgtjddgtd�dœ|d�d }|jdk�s:t‚tj |dddgddtjgg¡ tjtt|gdtjdgtjddd gtd�dœdd� d S )Nr   r   r   Úc1Úc2©rN   rM   c                   3   s
   ˆ V  d S r7   r   r   ©Zinitial_datar   r   r:     s    z"test_NA_action.<locals>.iter_makerrN   rM   r   g      $@g      4@rp   )r   r   ç      ð?ç        Údrop)Ú	NA_action)ÚNAAction)ZNA_types)r   r   Úraise)r=   r.   r>   r   ÚnanÚasarrayÚobjectr   r   Úarray_equalZpatsy.missingr�   ÚtestingZassert_array_equalr$   r%   r   )r:   r~   r   r�   rŒ   r   rˆ   r   Útest_NA_action
  sd    
ÿÿÿý
ÿÿüü

ÿÿüü 
ÿÿúr”   c                     s–   dt jdgdddgdœ‰ ‡ fdd„} ttd	d
ƒg| dƒd }|jdddd	gksRt‚t|gˆ ƒ\}|jdksnt‚t  |ddddgddddgg¡s’t‚d S )Nr‰   ç      @r…   r†   Úc3r‡   c                   3   s
   ˆ V  d S r7   r   r   r8   r   r   r:   ;  s    z1test_NA_drop_preserves_levels.<locals>.iter_makerrN   rM   r   zc[c1]zc[c2]zc[c3])r   r   rŠ   )	r   r�   r=   r.   r1   r   r>   r   r’   )r:   r0   r   r   r8   r   Útest_NA_drop_preserves_levels7  s    
ÿr—   c               
      s¤  t sd S tjdddgdddgdddgd	œd
ddgd�‰ ‡ fdd„} ttg ƒg| dƒ\}ttdƒtdƒg| dd�\}}ttddƒg| dd�\}ttddƒg| dd�\}t tt|gˆ d ˆ d d d d… dœ¡ t tt||gˆ d ˆ d d d d… dœ¡ G dd„ dtjƒ}t tt|g|ˆ ƒ¡ t|gˆ d dddgdœƒ\}t	 
|ddgddgddgg¡�sdt‚t||gˆ dd�\}}	t|tjƒ�sŒt‚t|	tjƒ�sžt‚t	 |dgdgdgg¡�s¼t‚t	 |	dgdgdgg¡�sÚt‚t	 |jd
ddg¡�sôt‚t	 |	jd
ddg¡�st‚t	 |jdg¡�s$t‚t	 |	jdg¡�s:t‚|jjdgk�sNt‚|	jjdgk�sbt‚|jjdgk�svt‚|	jjdgk�sŠt‚t||gdd d!gˆ d d"œdd�\}}	t|tjƒ�sÂt‚t|	tjƒ�sÔt‚t	 |dgd gd!gg¡�sòt‚t	 |	dgdgdgg¡�st‚t	 |jd
ddg¡�s*t‚t	 |	jd
ddg¡�sDt‚t	 |jdg¡�sZt‚t	 |	jdg¡�spt‚|jjdgk�s„t‚|	jjdgk�s˜t‚|jjdgk�s¬t‚|	jjdgk�sÀt‚t|gdd#d$gˆ d dœdd�\}
t|
tjƒ�sôt‚t	 |
dddgddd#gddd$gg¡�st‚t	 |
jd
ddg¡�s8t‚t|gdd d!gd
d%d&gd"œdd�\}t|tjƒ�snt‚t	 |d
dgd%d gd&d!gg¡�s’t‚t	 |jdddg¡�s¬t‚t|gˆ dd�\}t|tjƒ�sÐt‚t	 |dgdgdgg¡�sît‚|j t d
ddg¡¡�st‚dd l}|jj }z,d'|j_ tjtt|gddddgidd� W 5 ||j_ X t|gd(t	jd)gt	jd ddgtd*�dœd+dd,�\}	|	j t dg¡¡�s t‚d S )-Nr   r   r   r   r    r!   ri   rj   )rN   ÚyrA   r   é   é   )Úindexc                   3   s
   ˆ V  d S r7   r   r   r8   r   r   r:   O  s    z+test_return_type_pandas.<locals>.iter_makerr   r˜   rN   r;   rA   éÿÿÿÿ©rN   rA   ©rN   r˜   c                   @   s   e Zd Zdd„ ZdS )z2test_return_type_pandas.<locals>.CheatingDataFramec                 S   s2   |dkr t j | |¡d d d… S t j | |¡S d S )NrN   rœ   )rw   rx   Ú__getitem__)ÚselfÚkeyr   r   r   rŸ   j  s    z>test_return_type_pandas.<locals>.CheatingDataFrame.__getitem__N)Ú__name__Ú
__module__Ú__qualname__rŸ   r   r   r   r   ÚCheatingDataFramei  s   r¥   é(   é2   é<   Z	dataframer�   r"   é   é	   )r˜   rN   éþÿÿÿéýÿÿÿé   é   Fr‰   r•   rp   r‹   )rŒ   r‚   )r   rw   rx   r=   r.   r$   r%   r   r>   r   rK   r   rƒ   r’   r›   Úcolumnsr0   r1   Z
term_namesÚequalsÚIndexÚpatsy.buildÚbuildr�   r�   r‘   )r:   Zint_builderZ	y_builderZ	x_builderZx_a_builderZx_y_builderr¥   r   Zy_dfZx_dfZx_a_dfZx_y_dfZint_dfÚpatsyZ
had_pandasr   r8   r   Útest_return_type_pandasG  sè    þýÿý
þþ þýýÿ$
ÿ
þ
þ*þ$ÿ  þ


ÿÿûrµ   c               	      sÖ  dddgdddgft dddgdddgd	�t dddgdddgd	�fdgdgdggddgddgddggfdddgdddgdddggddgddgddggfg} dddgdddgfdddgt dddgƒfdddgt dddgƒfdddgdddgfg}dddgddd
gfg}tdgƒ‰ ‡ fdd„}‡ fdd„}| D ]2\}}|||ƒ |||ƒ |||ƒ |||ƒ �q(|D ]\}}|||ƒ |||ƒ �q`|D ]\}}|||ƒ |||ƒ �q„t ttdddgddddgdœddgdgg¡ d S )Nr   r   r   TFrA   rB   rM   )ZlevelsÚdrN   c                    sZ   ‡ ‡fdd„}z.t ˆg|dƒ}t|dˆ iƒ t|dˆiƒ W n tk
rP   Y nX t‚d S )Nc                   3   s   dˆ iV  dˆiV  d S ©NrN   r   r   ©Údata1Údata2r   r   r:   Ý  s    
z=test_data_mismatch.<locals>.t_incremental.<locals>.iter_makerr   rN   )r=   r>   r   r   ©r¹   rº   r:   Úbuilders©r5   r¸   r   Út_incrementalÜ  s    z)test_data_mismatch.<locals>.t_incrementalc                    s2   ‡ fdd„}t ˆg|dƒ}t tt|d|i¡ d S )Nc                   3   s   dˆ iV  d S r·   r   r   ©r¹   r   r   r:   é  s    z?test_data_mismatch.<locals>.t_setup_predict.<locals>.iter_makerr   rN   )r=   r$   r%   r   r>   r»   r½   r¿   r   Út_setup_predictè  s      ÿz+test_data_mismatch.<locals>.t_setup_predictr   rž   r˜   )r
   r.   r$   r%   r   r@   )Ztest_cases_twowayZtest_cases_onewayZsetup_predict_onlyr¾   rÀ   rA   rB   r   r½   r   Útest_data_mismatchÅ  sD    ÿ$0ù
ü
ü





  
þrÁ   c            	         s�  ddddgi‰ ‡ fdd„} t tƒ g| dƒd }t tt|gˆ ¡ t tg ƒg| dd�d }t tt|gˆ ¡ t tt||gˆ ¡ trÄt||gt ˆ ¡ƒ\}}t	 
|dgdgdgg¡s¶t‚|jd	ksÄt‚tdgƒ}t |tƒ g| dd�}t|ˆ ƒ\}}t	 
|dgdgdgg¡�st‚|jd	k�st‚t |tg ƒg| dd�}t|ˆ ƒ\}}t|ˆ ƒ\}}t	 
|dgdgdgg¡�snt‚t	 
|dgdgdgg¡�sŒt‚d S )
NrN   r   r   r   c                   3   s
   ˆ V  d S r7   r   r   r8   r   r   r:      s    z1test_data_independent_builder.<locals>.iter_makerr   r;   )r   r   )r=   r.   r$   r%   r   r>   r   rw   rx   r   rK   r   r   )	r:   Znull_builderZintercept_builderZint_mZnull_mZ
x_termlistr¼   Zx_mZintercept_mr   r8   r   Útest_data_independent_builderþ  sP    
þþ þÿþ

þþrÂ   c                     sÀ   dddgdddgdœ‰ ‡ fdd„} t d	gƒ}t d	d
gƒ}t||g| dd�}t|ˆ ƒ\}}t|d|d	gd� t |dgdgdgg¡s†t‚t|d|ddgd� t |ddgddgddgg¡s¼t‚d S )Nr   r   r   ri   rj   r�   c                   3   s
   ˆ V  d S r7   r   r   r8   r   r   r:   1  s    z4test_same_factor_in_two_matrices.<locals>.iter_makerrN   rA   r   r;   r<   zx:a[a1]zx:a[a2])r.   r=   r>   r6   r   rK   r   )r:   Út1Út2r¼   Úm1Úm2r   r8   r   Ú test_same_factor_in_two_matrices/  s    
rÇ   c                     s6   ddddgi‰ ‡ fdd„} t  tttdƒg| d¡ d S )NrN   r   r   r   c                   3   s
   ˆ V  d S r7   r   r   r8   r   r   r:   >  s    z.test_eval_env_type_builder.<locals>.iter_makerZfoo)r$   r%   Ú	TypeErrorr=   r.   )r:   r   r8   r   Útest_eval_env_type_builder<  s    rÉ   c                  C   st   ddddgi} dt dddgƒi}| |g}trJdt dddg¡i}| |¡ dd„ }|D ]}|D ]}|||ƒ q^qVd S )NrA   ri   rj   c                    s0   ‡ fdd„}t tdgƒg|dd�}t||ƒ d S )Nc                   3   s
   ˆ V  d S r7   r   r   r¿   r   r   r:   J  s    z/test_categorical.<locals>.t.<locals>.iter_makerrA   r   r;   )r=   r.   r>   r»   r   r¿   r   r\   I  s    þztest_categorical.<locals>.t)r
   r   rw   ZCategoricalr*   )Zdata_stringsZ
data_categry   Zdata_pandasr\   r¹   rº   r   r   r   Útest_categoricalB  s    
rÊ   c               
   C   s  ddl m} m} ddddg}tdt|ƒiddggdd	d
gd�}t |dddgdddgdddgdddgg¡snt‚||ƒ fD ]X}tdt||ƒiddggdddgd�}t |dddgdddgdddgdddgg¡sxt‚qxtdt||dd�ƒiddggdddgd�}t |dddgdddgdddgdddgg¡�s.t‚tdt|ƒidg dggdddgd�}t |dddgdddgdddgdddgg¡�s„t‚||ƒ fD ]^}tdt||ƒidg dggdddgd�}t |dddgdddgdddgdddgg¡�sŽt‚�qŽtdt||dd�ƒidg dggdddgd�}t |dddgdddgdddgdddgg¡�sLt‚tdt|ddgddgddggƒiddggddgd�}t |ddgddgddgddgg¡�sªt‚tdt|| ddgddgddggddgƒƒiddggdd gd�}t |ddgddgddgddgg¡�st‚d S )!Nr   )ÚContrastMatrixÚSumri   Úa3rj   rA   r   rE   rF   za[a3]r<   r   za[mean]za[S.a1]za[S.a2]rœ   )Zomitza[S.a3]rG   rH   za[T.a3]r"   r®   r   é   r©   z
a[custom0]z
a[custom1]z[foo]z[bar]za[foo]za[bar])Zpatsy.contrastsrË   rÌ   r@   r
   r   rK   r   )rË   rÌ   Úvaluesr   r   r   r   r   Útest_contrastT  s     ÿý
ÿýÿýÿýÿýÿýþ üýþý ûýrÐ   c                     s  ddgddgddggddgd	œ‰t d
ddƒ} ‡fdd„}t| g|dƒd ‰ tˆ gˆƒd ‰‡ ‡‡fdd„}|dd
ddgtd ƒƒ |d
ddgd
ddgtd ƒƒ tjsÊ|td
ƒtdƒtdƒgd
ddgtd ƒƒ || d
ddgtd ƒƒ || d d| d gd
ddgtd ƒƒ |dd
dgddgƒ |d
dgd
dgddgƒ tj�sX|td
ƒtdƒgd
dgddgƒ || d | d gd
dgddgƒ || d dgd
dgddgƒ |dd
dgddgƒ |dd
gd
dgddgƒ |t d¡t d
¡gd
dgddgƒ || d | d gd
dgddgƒ || d d
gd
dgddgƒ |ddgddgƒ |dgdgddgƒ |t d¡gdgddgƒ || d gdgddgƒ t 	t
ˆ jd¡ t 	tˆ jd¡ t 	tˆ jdg¡ t 	tˆ jtdgƒg¡ tdddgƒ}| ddg¡}|jddgk�sòt‚|jd k�st‚d S )Nr   r   gÍÌÌÌÌÌ@gš™™™™™	@gffffff@gÍÌÌÌÌÌ@r    r!   )rN   r˜   ÚzrN   r˜   rÑ   c                   3   s
   ˆ V  d S r7   r   r   )Úall_datar   r   r:   ¬  s    z*test_DesignInfo_subset.<locals>.iter_makerr   c                    sz   ˆ   | ¡}i }|D ]}ˆ| ||< qt|g|ƒd }ˆd d …|f }t| tjƒsft| ƒt|jƒksft‚t 	||¡svt‚d S )Nr   )
rU   r>   rƒ   rn   Ústring_typesrJ   r,   r   r   r’   )Zwhich_termsÚ	variablesr¯   Zsub_design_infoZsub_dataÚvariableZ
sub_matrixZsub_full_matrix©Zall_builderrÒ   Zfull_matrixr   r   r\   ±  s    
z!test_DesignInfo_subset.<locals>.tz~ 0 + x + y + zz~ 0 + x + zr   z~ 0 + z + xz~ 0 + yza ~ az~ asdfZasdfrA   rB   rM   )r.   r=   r>   Úslicern   ÚPY3Úunicodero   r$   r%   r   rU   ÚKeyErrorr   r   r1   r   r,   )rb   r:   r\   Zmin_diZmin_di_subsetr   rÖ   r   Útest_DesignInfo_subset¢  s\    ÿý ÿ$  $  
ÿrÛ   )N)N)/Ú
__future__r   rn   Únumpyr   r$   r´   r   Z
patsy.utilr   r   r   Z
patsy.descr   r   r²   Zpatsy.categoricalr
   Zpatsy.user_utilr   r   Zpatsy.design_infor   r   rw   r   r&   r.   r6   r@   rL   rO   rh   Zslowrz   r€   r„   r”   r—   rµ   rÁ   rÂ   rÇ   rÉ   rÊ   rÐ   rÛ   r   r   r   r   Ú<module>
   sD   

.8#-~91N