U
    ·#˜e¢)  ã                   @   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
   úa/mounts/lovelace/software/anaconda3/envs/rescript/lib/python3.8/site-packages/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   Ú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    
ÿr2   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+)r2   r$   r&   r+   )Zs_abZs_abcZs_nullZs_cdZs_aZs_apZs_abpÚbadr
   r
   r   Útest__Subterm~   s    r8   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)Útuplr=   ÚexpandedZexpanded_subsetsr<   r
   r
   r   r9      s    
r9   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!   )rG   )r!   rG   é   )rH   )r!   rH   )rG   rH   é   é    )r'   r9   r&   r"   Úranger
   r
   r
   r   Útest__subsets_sorted¥   s
    
ÿrL   c                 C   sj   t | ƒD ]\\}}t | |d d … ƒD ]>\}}| |¡r$| |¡}|| |d | < |  |¡   dS q$qdS )Nr!   TF)rB   r$   r+   Úpop)r/   Zshort_iZshort_subtermZlong_iZlong_subtermZnew_subtermr
   r
   r   Ú_simplify_one_subterm«   s    


rN   c                 C   s   t | ƒr
q d S r   )rN   )r/   r
   r
   r   Ú_simplify_subterms·   s    rO   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->)r2   ÚprintrO   r&   )ÚgivenÚexpectedr
   r
   r   Út¼   s
    z"test__simplify_subterms.<locals>.t)r3   r
   )r5   )r4   )r3   r4   )r5   r6   )r3   r6   r
   )rS   r
   r
   r   Útest__simplify_subterms»   s    rT   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   rA   Ý   s      z+pick_contrasts_for_term.<locals>.<listcomp>c                 S   s   g | ]}t d |ƒ‘qS )F)r   rU   r
   r
   r   rA   ã   s     )	r1   r9   r   r.   ÚupdaterO   r    r   r   )
ÚtermrX   Úused_subtermsZcategorical_factorsr/   r<   r0   Úfactor_codingsÚfactor_codingrF   r
   rW   r   Úpick_contrasts_for_termÜ   s    

r^   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)r`   rb   ÚcÚd)rc   rd   )Ú
patsy.descr_   r(   r^   r&   )r_   ÚusedZcodingsZused_snapshotr
   r
   r   Útest_pick_contrasts_for_termð   s    rg   N)Ú
__future__r   Ú
patsy.utilr   Úobjectr   r   r2   r8   r9   rL   rN   rO   rT   r^   rg   r
   r
   r
   r   Ú<module>+   s   %!