ó
}Þ|Uc           @  s¡   d  d l  m Z d  d l m Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d „  Z d	 „  Z	 d
 „  Z
 d „  Z d „  Z d „  Z d „  Z d „  Z d S(   iÿÿÿÿ(   t   print_function(   t   no_picklingt   _ExpandedFactorc           B  sA   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z e Z	 RS(   sœ   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(   t   includes_interceptt   factor(   t   selfR   R   (    (    s/   lib/python2.7/site-packages/patsy/redundancy.pyt   __init__6   s    	c         C  s   t  t |  j |  j f ƒ S(   N(   t   hashR   R   R   (   R   (    (    s/   lib/python2.7/site-packages/patsy/redundancy.pyt   __hash__:   s    c         C  s1   t  | t ƒ o0 | j |  j k o0 | j |  j k S(   N(   t
   isinstanceR   R   R   (   R   t   other(    (    s/   lib/python2.7/site-packages/patsy/redundancy.pyt   __eq__=   s    c         C  s   |  | k S(   N(    (   R   R
   (    (    s/   lib/python2.7/site-packages/patsy/redundancy.pyt   __ne__B   s    c         C  s)   |  j  r d } n d } d |  j | f S(   Nt   +t   -s   %r%s(   R   R   (   R   t   suffix(    (    s/   lib/python2.7/site-packages/patsy/redundancy.pyt   __repr__E   s    		(
   t   __name__t
   __module__t   __doc__R   R   R   R   R   R   t   __getstate__(    (    (    s/   lib/python2.7/site-packages/patsy/redundancy.pyR   1   s   					t   _Subtermc           B  sS   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 e
 Z RS(   s   Also immutable.c         C  s   t  | ƒ |  _ d  S(   N(   t	   frozensett   efactors(   R   R   (    (    s/   lib/python2.7/site-packages/patsy/redundancy.pyR   P   s    c         C  s5   t  |  j ƒ t  | j ƒ d k o4 |  j j | j ƒ S(   Ni   (   t   lenR   t
   issuperset(   R   R
   (    (    s/   lib/python2.7/site-packages/patsy/redundancy.pyt
   can_absorbS   s    "c         C  s   |  j  j | j  ƒ } t | ƒ d k s- t ‚ t | ƒ d } | j sM t ‚ t | j  ƒ } | j t t	 | j
 ƒ ƒ t | ƒ S(   Ni   i    (   R   t
   differenceR   t   AssertionErrort   listR   t   sett   addR   t   TrueR   R   (   R   R
   t   difft   efactort   new_factors(    (    s/   lib/python2.7/site-packages/patsy/redundancy.pyt   absorbX   s    c         C  s   t  t |  j f ƒ S(   N(   R   R   R   (   R   (    (    s/   lib/python2.7/site-packages/patsy/redundancy.pyR   a   s    c         C  s   t  | t ƒ o |  j |  j k S(   N(   R	   R   R   (   R   R
   (    (    s/   lib/python2.7/site-packages/patsy/redundancy.pyR   d   s    c         C  s   |  | k S(   N(    (   R   R
   (    (    s/   lib/python2.7/site-packages/patsy/redundancy.pyR   h   s    c         C  s   d |  j  j t |  j ƒ f S(   Ns   %s(%r)(   t	   __class__R   R   R   (   R   (    (    s/   lib/python2.7/site-packages/patsy/redundancy.pyR   k   s    (   R   R   R   R   R   R$   R   R   R   R   R   R   (    (    (    s/   lib/python2.7/site-packages/patsy/redundancy.pyR   N   s   								c         C  s   g  } xr |  D]j } g  } xH | D]@ } | d d k s< t  ‚ | j t | d d k | d  ƒ ƒ q  W| j t | ƒ ƒ q W| S(   NiÿÿÿÿR   R   (   R   R   (   R   t   appendR   R   (   t   short_subtermst   subtermst   subtermt   factorst   factor_name(    (    s/   lib/python2.7/site-packages/patsy/redundancy.pyt   _expand_test_abbrevss   s    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 } x3 | | | | | f D] } |  j | ƒ s¼ t ‚ q¼ W|  j | ƒ sñ t ‚ |  j | ƒ | k st ‚ d  S(   Ns   a-s   b-i    s   c-s   d-s   a+s   b+(   R,   R   R   R$   (   t   s_abt   s_abct   s_nullt   s_cdt   s_at   s_apt   s_abpt   bad(    (    s/   lib/python2.7/site-packages/patsy/redundancy.pyt   test__Subterm~   s    c         c  s€   d „  } t  t |  ƒ ƒ } t  | | ƒ ƒ } | j ƒ  | j d t ƒ x2 | D]* } t g  | D] \ } } | ^ q^ ƒ VqN Wd  S(   Nc         s  sH   |  s d Vn6 |  d } x) t  |  d ƒ D] } | V| f | Vq) Wd  S(   Ni    i   (    (   t   _subsets_sorted(   t   seqt   objt   subset(    (    s/   lib/python2.7/site-packages/patsy/redundancy.pyt   helper   s    
t   key(   R   t	   enumeratet   sortR   t   tuple(   t   tuplR:   t   expandedt   expanded_subsetsR9   t   idxR8   (    (    s/   lib/python2.7/site-packages/patsy/redundancy.pyR6      s    	

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(   Ni   i   i   i   (   i   i   (    (   i   (   i   (   i   i   (   i   i   i   (    (   i   (   i   (   i   (   i   i   (   i   i   (   i   i   (   i   i   i   i    (   R   R6   R   R   t   range(    (    (    s/   lib/python2.7/site-packages/patsy/redundancy.pyt   test__subsets_sorted¥   s    *'c         C  s‡   x€ t  |  ƒ D]r \ } } xc t  |  | d ƒ D]M \ } } | j | ƒ r. | j | ƒ } | |  | d | <|  j | ƒ t Sq. Wq Wt S(   Ni   (   R<   R   R$   t   popR    t   False(   R(   t   short_it   short_subtermt   long_it   long_subtermt   new_subterm(    (    s/   lib/python2.7/site-packages/patsy/redundancy.pyt   _simplify_one_subterm«   s    !c         C  s   x t  |  ƒ r q Wd  S(   N(   RL   (   R(   (    (    s/   lib/python2.7/site-packages/patsy/redundancy.pyt   _simplify_subterms·   s    c          C  sŠ   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  sK   t  |  ƒ }  t  | ƒ } t d |  d | ƒ t |  ƒ |  | k sG t ‚ d  S(   Ns   testing if:s   ->(   R,   t   printRM   R   (   t   givent   expected(    (    s/   lib/python2.7/site-packages/patsy/redundancy.pyt   t¼   s
    
s   a-s   a+s   b-s   b+(   s   a-(   s   a-(    (   s   a-(   s   a+(    (   s   a-(   s   b-(   s   a-s   b-(   s   a+s   b+(    (   s   a-(   s   a-s   b-(   s   a+(   s   a-s   b-(   s   a-(   s   b-(   s   a-s   b-(   s   b-(   s   a-s   b+(    (   RQ   (    (    s/   lib/python2.7/site-packages/patsy/redundancy.pyt   test__simplify_subterms»   s    	c         C  sò   g  |  j  D] } | | k r
 | ^ q
 } g  } xX t | ƒ D]J } t g  | D] } t t | ƒ ^ qK ƒ } | | k r; | j | ƒ q; q; W| j | ƒ t | ƒ g  } xE | D]= } i  }	 x! | j D] }
 |
 j	 |	 |
 j
 <qÃ W| j |	 ƒ q­ W| S(   N(   R*   R6   R   R   RF   R&   t   updateRM   R   R   R   (   t   termt   numeric_factorst   used_subtermst   ft   categorical_factorsR(   R9   R)   t   factor_codingst   factor_codingR@   (    (    s/   lib/python2.7/site-packages/patsy/redundancy.pyt   pick_contrasts_for_termÜ   s    ((
c          C  s|  d d l  m }  t ƒ  } t |  g  ƒ t ƒ  | ƒ } | i  g k sI t ‚ t |  d d g ƒ t d g ƒ | ƒ } | i t d 6g k sŒ t ‚ t |  d d g ƒ t ƒ  | ƒ } | i t d 6t d 6g k sÐ t ‚ t | ƒ } t |  d d g ƒ t ƒ  | ƒ } | i t d 6i t d 6t d 6g k s*t ‚ t |  d d g ƒ t ƒ  | ƒ } | i t d 6i t d 6t d 6g k sxt ‚ d  S(   Niÿÿÿÿ(   t   Termt   at   xt   bt   ct   d(   t
   patsy.descR\   R   R[   R   RF   R    (   R\   t   usedt   codingst   used_snapshot(    (    s/   lib/python2.7/site-packages/patsy/redundancy.pyt   test_pick_contrasts_for_termð   s    	'!#!-!N(   t
   __future__R    t
   patsy.utilR   t   objectR   R   R,   R5   R6   RD   RL   RM   RR   R[   Rf   (    (    (    s/   lib/python2.7/site-packages/patsy/redundancy.pyt   <module>+   s   %							!	