
    .Cc)                         d dl mZ d dlmZ  G d de          Z G d de          Zd Zd Zd	 Z	d
 Z
d Zd Zd Zd Zd ZdS )    )print_function)no_picklingc                   4    e Zd ZdZd Zd Zd Zd Z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                 "    || _         || _        d S Nincludes_interceptfactor)selfr
   r   s      0lib/python3.11/site-packages/patsy/redundancy.py__init__z_ExpandedFactor.__init__6   s    "4    c                 D    t          t          | j        | j        f          S r   )hashr   r
   r   r   s    r   __hash__z_ExpandedFactor.__hash__:   s    _d&=t{KLLLr   c                 l    t          |t                    o|j        | j        k    o|j        | j        k    S r   )
isinstancer   r
   r   r   others     r   __eq__z_ExpandedFactor.__eq__=   s8    5/22 0,0GG0LDK/	1r   c                     | |k     S r    r   s     r   __ne__z_ExpandedFactor.__ne__B       5=  r   c                 0    | j         rd}nd}| j        |S )N+-r	   )r   suffixs     r   __repr__z_ExpandedFactor.__repr__E   s*    " 	FFFff--r   N)__name__
__module____qualname____doc__r   r   r   r   r!   r   __getstate__r   r   r   r   r   1   sm        / /  M M M1 1 1
! ! !. . . LLLr   r   c                   @    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
eZd	S )
_SubtermzAlso immutable.c                 .    t          |          | _        d S r   )	frozensetefactors)r   r+   s     r   r   z_Subterm.__init__P   s    !(++r   c                     t          | j                  t          |j                  z
  dk    o| j                            |j                  S )N   )lenr+   
issupersetr   s     r   
can_absorbz_Subterm.can_absorbS   sB    DM""S%8%88A= =M,,U^<<	>r   c                 <   | 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   diffefactornew_factorss        r   absorbz_Subterm.absorbX   s    }''774yyA~t**Q-----%.))gn==>>>$$$r   c                 8    t          t          | j        f          S r   )r   r(   r+   r   s    r   r   z_Subterm.__hash__a   s    Xt}-...r   c                 L    t          |t                    o| j        | j        k    S r   )r   r(   r+   r   s     r   r   z_Subterm.__eq__d   s%    5(++ 3MT]2	4r   c                     | |k     S r   r   r   s     r   r   z_Subterm.__ne__h   r   r   c                 J    | j         j        dt          | j                  dS )N())	__class__r"   r3   r+   r   s    r   r!   z_Subterm.__repr__k   s(    >222D4G4G4G4GHHr   N)r"   r#   r$   r%   r   r0   r9   r   r   r   r!   r   r&   r   r   r   r(   r(   N   s        , , ,> > >
% % %/ / /4 4 4! ! !I I I LLLr   r(   c           
          g }| D ]l}g }|D ]C}|d         dv sJ |                     t          |d         dk    |d d                              D|                     t          |                     m|S )N)r   r   r   )appendr   r(   )short_subtermssubtermssubtermfactorsfactor_names        r   _expand_test_abbrevsrI   s   s    H! + +" 	> 	>Kr?j0000NN?;r?c+A+6ss+;= = > > > >))****Or   c                     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 ]}|                     |          rJ |                     |          sJ |                     |          |k    sJ d S )	Na-b-r   )rK   rL   c-rM   zd-a+b+)rI   r0   r9   )s_abs_abcs_nulls_cds_as_aps_abpbads           r   test__SubtermrX   ~   s   $//2D "4"4"4!566q9E!2$''*F$//2D
x
(
(
+C$))!,D 4,003EfdD%/ ( (??3''''''??3;;su$$$$$$r   c              #     K   d }t          t          |                     }t           ||                    }|                                 |                    t                     |D ]}t	          d |D                       V  d S )Nc              3   v   K   | sdV  d S | d         }t          | dd                    D ]}|V  |f|z   V  d S )Nr   r   r-   )_subsets_sorted)seqobjsubsets      r   helperz_subsets_sorted.<locals>.helper   sk       	&HHHHHa&C)#abb'22 & &fvo%%%%& &r   )keyc                     g | ]\  }}|S r   r   ).0idxr]   s      r   
<listcomp>z#_subsets_sorted.<locals>.<listcomp>   s    222Zc3S222r   )r3   	enumeratesortr.   tuple)tuplr_   expandedexpanded_subsetsr^   s        r   r[   r[      s      & & & IdOO$$HFF8,,-- c"""" 4 42262223333334 4r   c            	         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-   rm   rl   r-   rm      )r   rn   ro   )rq   rl   )r-   rq   )rm   rq   rp          )r3   r[   r.   ranger   r   r   test__subsets_sortedru      s    ''((,D,D,DDDDD++,,HHHI J J JtOE!HH--..//6999999r   c                    t          |           D ]s\  }}t          | |dz   d                    D ]S\  }}|                    |          r9|                    |          }|| |dz   |z   <   |                     |             dS TtdS )Nr-   TF)re   r0   r9   pop)rE   short_ishort_subtermlong_ilong_subtermnew_subterms         r   _simplify_one_subtermr}      s     #,H"5"5  $-hw{||.D$E$E 	 	 FL&&}55 *11-@@1<1v-.W%%%ttt		 5r   c                 H    t          |           r	 t          |           d S d S r   )r}   )rE   s    r   _simplify_subtermsr      s;    

)
)   
)
)     r   c                      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                     t          |           } t          |          }t          d| d|           t          |            | |k    sJ d S )Nztesting if:z->)rI   printr   )givenexpecteds     r   tz"test__simplify_subterms.<locals>.t   sU    $U++'11mUD(3335!!!      r   rK   r   )rN   )r   r   rL   rK   rL   )rN   rO   )r   r   r   r   )r   r   r   r   )rK   rO   r   )r   s    r   test__simplify_subtermsr      s    ! ! ! Awi'Ar7mgYA***\N;;;A!!!G\#:;;;A&&&,(?@@@@@r   c                 p   fd| j         D             }g }t          |          D ]4}t          d |D                       }||vr|                    |           5|                    |           t          |           g }|D ]2}i }|j        D ]}	|	j        ||	j        <   |                    |           3|S )Nc                     g | ]}|v|	S r   r   )rb   fnumeric_factorss     r   rd   z+pick_contrasts_for_term.<locals>.<listcomp>   s#    OOOa6NO1OOOr   c                 .    g | ]}t          d |          S )F)r   )rb   r   s     r   rd   z+pick_contrasts_for_term.<locals>.<listcomp>   s"    FFF!OE155FFFr   )	rG   r[   r(   rC   updater   r+   r
   r   )
termr   used_subtermscategorical_factorsrE   r^   rF   factor_codingsfactor_codingri   s
    `        r   pick_contrasts_for_termr      s    OOOOdlOOO H!"566 % %FFvFFFGG-' 	%OOG$$$"""x   N - -( 	I 	IH-5-HM(/**m,,,,r   c                  X   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    sJ 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    sJ d S )Nr   )TermaxFbT)r   r   cd)r   r   )
patsy.descr   r4   r   )r   usedcodingsused_snapshots       r   test_pick_contrasts_for_termr      sf   55D%dd2hht<<Grd?%ddC:&6&6SE

DIIGU|n$$$$%ddC:&6&6tDDGT../////IIM%ddC:&6&6tDDGU|5t%<%<===== &ddC:&6&6}MMGU|4e%<%<=======r   N)
__future__r   
patsy.utilr   objectr   r(   rI   rX   r[   ru   r}   r   r   r   r   r   r   r   <module>r      s  V & % % % % % " " " " " "    f   :         v      J	 	 	% % %"4 4 4,: : :
 
 
  A A AB  (> > > > >r   