o
    #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 )_ExpandedFactorzA 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
   0lib/python3.10/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   
   | |k S r   r
   r   r
   r
   r   __ne__B      
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      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J t|d }|jrJ t|j }|td|j t	|S )Nr$   r   T)
r"   
differencer%   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   r#   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   r   r   r
   r   r
   r
   r   r   h   r   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 ](}g }|D ]}|d dv sJ | t|d dk|d d  q
| t| q|S )N)r   r   r   )appendr   r    )Zshort_subtermssubtermssubtermfactorsZfactor_namer
   r
   r   _expand_test_abbrevss   s   
r4   c                  C   s   t ddggd } t g d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 ]	}| |rKJ qB| |sSJ | ||ks\J d S )	Na-b-r   )r5   r6   c-r7   zd-a+b+)r4   r'   r-   )Zs_abZs_abcZs_nullZs_cdZs_aZs_apZs_abpZbadr
   r
   r   test__Subterm~   s   r:   c                 c   sX    dd }t t| }t ||}|  |jtd |D ]}tdd |D V  qd S )Nc                 s   sD    | sdV  d S | 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   r;      s   
r;   c                   C   sP   t tdg dksJ t tdg dksJ tt ttddks&J d S )Nr$      )r
   r$   rI   rH   r$   rI      )r
   rJ   rK   )rM   rH   )r$   rM   )rI   rM   rL          )r)   r;   r%   ranger
   r
   r
   r   test__subsets_sorted   s
   
 rQ   c                 C   sj   t | D ].\}}t | |d d  D ]\}}||r1||}|| |d | < | |   dS qqdS )Nr$   TF)rD   r'   r-   pop)r1   Zshort_iZshort_subtermZlong_iZlong_subtermZnew_subtermr
   r
   r   _simplify_one_subterm   s   


rS   c                 C   s   t | r	 t | sd S d S r   )rS   )r1   r
   r
   r   _simplify_subterms   s   rT   c                  C   s^   dd } | dgdg | ddgdg | g ddg | g ddd	g | g d
ddg d S )Nc                 S   s6   t | } t |}td| d| t|  | |ksJ d S )Nztesting if:z->)r4   printrT   )ZgivenZexpectedr
   r
   r   t   s
   z"test__simplify_subterms.<locals>.tr5   r
   )r8   )r
   rW   r6   r5   r6   )r8   r9   )r
   rW   rY   rY   )rW   rX   rY   rX   )r5   r9   r
   )rV   r
   r
   r   test__simplify_subterms   s   rZ   c           
         s    fdd| j D }g }t|D ]}tdd |D }||vr$|| q|| t| g }|D ]}i }|jD ]}	|	j||	j< q9|| q2|S )Nc                    s   g | ]}| vr|qS r
   r
   rA   fnumeric_factorsr
   r   rC      s    z+pick_contrasts_for_term.<locals>.<listcomp>c                 S   s   g | ]}t d |qS )F)r   r[   r
   r
   r   rC      s    )	r3   r;   r    r0   updaterT   r"   r   r   )
Ztermr^   Zused_subtermsZcategorical_factorsr1   r>   r2   Zfactor_codingsZfactor_codingrG   r
   r]   r   pick_contrasts_for_term   s    


r`   c                  C   s   ddl m}  t }t| g t |}|i gksJ t| ddgtdg|}|ddigks/J t| ddgt |}|dddgksDJ t|}t| d	d
gt |}|d
didddgks`J t| d
d	gt |}|d	didddgksxJ d S )Nr   )TermaxFbT)rb   rd   cd)re   rf   )Z
patsy.descra   r*   r`   )ra   usedZcodingsZused_snapshotr
   r
   r   test_pick_contrasts_for_term   s   rh   N)Z
__future__r   Z
patsy.utilr   objectr   r    r4   r:   r;   rQ   rS   rT   rZ   r`   rh   r
   r
   r
   r   <module>   s   *%!