U
    Kvf¢)  ã                   @   s„   d dl mZ d dlmZ G dd„ deƒZG dd„ deƒ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S )é    )Úprint_function)Úno_picklingc                   @   s<   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Ze	Z
dS )Ú_ExpandedFactorzœA factor, with an additional annotation for whether it is coded
    full-rank (includes_intercept=True) or not.

    These objects are treated as immutable.c                 C   s   || _ || _d S ©N©Úincludes_interceptÚfactor)Úselfr   r   © r
   ú4/tmp/pip-unpacked-wheel-68fdvdus/patsy/redundancy.pyÚ__init__6   s    z_ExpandedFactor.__init__c                 C   s   t t| j| jfƒS r   )Úhashr   r   r   ©r	   r
   r
   r   Ú__hash__:   s    z_ExpandedFactor.__hash__c                 C   s"   t |tƒo |j| jko |j| jkS r   )Ú
isinstancer   r   r   ©r	   Úotherr
   r
   r   Ú__eq__=   s
    

ÿ
þz_ExpandedFactor.__eq__c                 C   s
   | |k S r   r
   r   r
   r
   r   Ú__ne__B   s    z_ExpandedFactor.__ne__c                 C   s   | j rd}nd}d| j|f S )Nú+ú-z%r%sr   )r	   Úsuffixr
   r
   r   Ú__repr__E   s    z_ExpandedFactor.__repr__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   Ú__getstate__r
   r
   r
   r   r   1   s   r   c                   @   sL   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
eZdS )Ú_SubtermzAlso immutable.c                 C   s   t |ƒ| _d S r   )Ú	frozensetÚefactors)r	   r    r
   r
   r   r   P   s    z_Subterm.__init__c                 C   s&   t | jƒt |jƒ dko$| j |j¡S )Né   )Úlenr    Ú
issupersetr   r
   r
   r   Ú
can_absorbS   s    ÿz_Subterm.can_absorbc                 C   sX   | j  |j ¡}t|ƒdkst‚t|ƒd }|jr4t‚t|j ƒ}| td|j	ƒ¡ t
|ƒS )Nr!   r   T)r    Ú
differencer"   ÚAssertionErrorÚlistr   ÚsetÚaddr   r   r   )r	   r   ZdiffZefactorZnew_factorsr
   r
   r   ÚabsorbX   s    

z_Subterm.absorbc                 C   s   t t| jfƒS r   )r   r   r    r   r
   r
   r   r   a   s    z_Subterm.__hash__c                 C   s   t |tƒo| j| jkS r   )r   r   r    r   r
   r
   r   r   d   s    

ÿz_Subterm.__eq__c                 C   s
   | |k S r   r
   r   r
   r
   r   r   h   s    z_Subterm.__ne__c                 C   s   d| j jt| jƒf S )Nz%s(%r))Ú	__class__r   r'   r    r   r
   r
   r   r   k   s    z_Subterm.__repr__N)r   r   r   r   r   r$   r*   r   r   r   r   r   r   r
   r
   r
   r   r   N   s   	r   c              	   C   s^   g }| D ]P}g }|D ]4}|d dks(t ‚| t|d dk|d d… ƒ¡ q| t|ƒ¡ q|S )Néÿÿÿÿ)r   r   r   )r&   Úappendr   r   )Zshort_subtermsÚsubtermsÚsubtermÚfactorsZfactor_namer
   r
   r   Ú_expand_test_abbrevss   s    
ÿr1   c                  C   s¾   t ddggƒd } t dddggƒd }t g gƒd }t ddggƒd }t dggƒd }t dggƒd }t ddggƒd }|||||fD ]}|  |¡r†t‚q†|  |¡s¨t‚|  |¡|ksºt‚d S )Núa-úb-r   zc-zd-úa+úb+)r1   r$   r&   r*   )Zs_abZs_abcZs_nullZs_cdZs_aZs_apZs_abpÚbadr
   r
   r   Útest__Subterm~   s    r7   c                 c   sV   dd„ }t t| ƒƒ}t ||ƒƒ}| ¡  |jtd |D ]}tdd„ |D ƒƒV  q8d S )Nc                 s   s@   | sdV  n0| d }t | dd … ƒD ]}|V  |f| V  q$d S )Nr
   r   r!   )Ú_subsets_sorted)ÚseqÚobjÚsubsetr
   r
   r   Úhelper   s    z_subsets_sorted.<locals>.helper)Úkeyc                 S   s   g | ]\}}|‘qS r
   r
   )Ú.0Úidxr:   r
   r
   r   Ú
<listcomp>£   s     z#_subsets_sorted.<locals>.<listcomp>)r'   Ú	enumerateÚsortr"   Útuple)Ztuplr<   ÚexpandedZexpanded_subsetsr;   r
   r
   r   r8      s    
r8   c                	   C   s`   t tdƒƒddddgkst‚t tdƒƒddddddddgks@t‚tt ttd	ƒƒƒƒd
ks\t‚d S )N)r!   é   r
   )r!   )rE   )r!   rE   é   )rF   )r!   rF   )rE   rF   é   é    )r'   r8   r&   r"   Úranger
   r
   r
   r   Útest__subsets_sorted¥   s
    
ÿrJ   c                 C   sj   t | ƒD ]\\}}t | |d d … ƒD ]>\}}| |¡r$| |¡}|| |d | < |  |¡   dS q$qdS )Nr!   TF)rA   r$   r*   Úpop)r.   Zshort_iZshort_subtermZlong_iZlong_subtermZnew_subtermr
   r
   r   Ú_simplify_one_subterm«   s    


rL   c                 C   s   t | ƒr
q d S r   )rL   )r.   r
   r
   r   Ú_simplify_subterms·   s    rM   c                  C   sf   dd„ } | dgdgƒ | ddgdgƒ | ddddgdgƒ | dddgddgƒ | dddgdd	gƒ d S )
Nc                 S   s6   t | ƒ} t |ƒ}td| d|ƒ t| ƒ | |ks2t‚d S )Nztesting if:z->)r1   ÚprintrM   r&   )ÚgivenÚexpectedr
   r
   r   Út¼   s
    z"test__simplify_subterms.<locals>.t)r2   r
   )r4   )r3   )r2   r3   )r4   r5   )r2   r5   r
   )rQ   r
   r
   r   Útest__simplify_subterms»   s    rR   c           
         s”   ‡ fdd„| j D ƒ}g }t|ƒD ](}tdd„ |D ƒƒ}||kr | |¡ q | |¡ t|ƒ g }|D ]*}i }|jD ]}	|	j||	j< qr| |¡ qd|S )Nc                    s   g | ]}|ˆ kr|‘qS r
   r
   ©r>   Úf©Únumeric_factorsr
   r   r@   Ý   s      z+pick_contrasts_for_term.<locals>.<listcomp>c                 S   s   g | ]}t d |ƒ‘qS )F)r   rS   r
   r
   r   r@   ã   s     )	r0   r8   r   r-   ÚupdaterM   r    r   r   )
ZtermrV   Zused_subtermsZcategorical_factorsr.   r;   r/   Zfactor_codingsZfactor_codingrD   r
   rU   r   Úpick_contrasts_for_termÜ   s    

rX   c                  C   sô   ddl m}  tƒ }t| g ƒtƒ |ƒ}|i gks2t‚t| ddgƒtdgƒ|ƒ}|ddigks^t‚t| ddgƒtƒ |ƒ}|dddœgksˆt‚t|ƒ}t| d	d
gƒtƒ |ƒ}|d
didddœgksÀt‚t| d
d	gƒtƒ |ƒ}|d	didddœgksðt‚d S )Nr   )ÚTermÚaÚxFÚbT)rZ   r\   ÚcÚd)r]   r^   )Z
patsy.descrY   r(   rX   r&   )rY   ÚusedZcodingsZused_snapshotr
   r
   r   Útest_pick_contrasts_for_termð   s    r`   N)Ú
__future__r   Z
patsy.utilr   Úobjectr   r   r1   r7   r8   rJ   rL   rM   rR   rX   r`   r
   r
   r
   r   Ú<module>+   s   %!