
    ,hM                        S /r SSKr SSKJr  SSKrSSKJ	r	  SSK
Jr  SSKJrJrJrJrJr  SSKJrJrJr  SSKJr   " S	 S \5      rS
 rS r\" SSS5      \" SSS5      \" SSS5      \" SSS5      \" SSS5      \" SSS5      \" SSS5      \" SSS5      /rSS/rS rS rS r S r! " S S\5      r"S r#S  r$S! r%/ S"Qr&S# r'g! \ a	    SSKJr   Nf = f)$LinearConstraint    N)Mapping)
PatsyError)Origin)atleast_2d_column_defaultrepr_pretty_delegaterepr_pretty_implno_picklingassert_no_pickling)TokenOperatorinfix_parse)_parsing_error_testc                   @    \ rS rSrSrSS jr\rS r\	r
\S 5       rSrg)	r      a@  A linear constraint in matrix form.

This object represents a linear constraint of the form `Ax = b`.

Usually you won't be constructing these by hand, but instead get them as
the return value from :meth:`DesignInfo.linear_constraint`.

.. attribute:: coefs

   A 2-dimensional ndarray with float dtype, representing `A`.

.. attribute:: constants

   A 2-dimensional single-column ndarray with float dtype, representing
   `b`.

.. attribute:: variable_names

   A list of strings giving the names of the variables being
   constrained. (Used only for consistency checking.)
Nc                 (   [        U5      U l        [        R                  " [        R                  " U[
        S95      U l        Uc0  [        R                  " U R                  R                  S   [
        S9n[        R                  " U[
        S9n[        U5      U l
        U R                  R                  S:w  d  U R                  R                  S   S:w  a  [        S5      eU R                  R                  S:w  d&  U R                  R                  S   [        U5      :w  a  [        S5      eU R                  R                  S   S:X  a  [        S5      eU R                  R                  S   U R                  R                  S   :w  a  [        S5      eg )	Ndtyper         z1constants is not (convertible to) a column matrixzwrong shape for coefsz/must have at least one row in constraint matrixz*shape mismatch between coefs and constants)listvariable_namesnp
atleast_2dasarrayfloatcoefszerosshaper   	constantsndim
ValueErrorlen)selfr   r   r    s       cC:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\venv\Lib\site-packages\patsy/constraint.py__init__LinearConstraint.__init__5   s0   ">2]]2::e5#AB
!1!1!!4EBIJJy6	29=>>!#t~~';';A'>!'CPQQ::??a4::#3#3A#6#n:M#M455::A!#NOO::A$.."6"6q"99IJJ :    c                 n    U(       a   e[        XU R                  U R                  U R                  /5      $ N)r	   r   r   r    )r$   pcycles      r%   _repr_pretty_LinearConstraint._repr_pretty_G   s1    yd))4::t~~F
 	
r(   c                 r   U(       d  [        S5      eUS   R                  nU H  nUR                  U:w  d  M  [        S5      e   [        R                  " U Vs/ s H  oDR                  PM     sn5      n[        R                  " U Vs/ s H  oDR
                  PM     sn5      nU " X%U5      $ s  snf s  snf )zCreate a new LinearConstraint by ANDing together several existing
LinearConstraints.

:arg constraints: An iterable of LinearConstraint objects. Their
  :attr:`variable_names` attributes must all match.
:returns: A new LinearConstraint object.
zno constraints specifiedr   zvariable names don't match)r"   r   r   vstackr   r    )clsconstraintsr   
constraintcr   r    s          r%   combineLinearConstraint.combineO   s     788$Q66%J((N: !=>> & 		K8Kq77K89IIK@Kq{{K@A	>)44 9@s   B/
B4)r   r    r   r*   )__name__
__module____qualname____firstlineno____doc__r&   r   __repr__r-   r
   __getstate__classmethodr5   __static_attributes__ r(   r%   r   r      s2    ,K  $H
 L5 5r(   c                      SSK Jn   [	        SS/SS/5      nUR
                  SS/:X  d   eU " UR                  SS//5        U " UR                  S//5        [	        SS/SS/SS//SS	/5      nU " UR                  SS/SS//5        U " UR                  S/S	//5        UR                  R                  [        R                  " [        5      :X  d   eUR                  R                  [        R                  " [        5      :X  d   e[	        S
/S//5      nU " UR                  S//5        SS KnUR                  [        [        S
/SS//5        UR                  [        [        S
/S///5        UR                  [        [        S
/SS//SS/5        UR                  [        [        S
S/SS//SS/5        UR                  [        [        S
/S/// /5        UR                  [        [        S
S// 5        UR                  [        [        S
S/[        R                  " S5      5        [        U5        g ! [         a
    SSKJn    GN=f = f)Nr   assert_equalfoobarr   r      
      a   br   r   )numpy.testingrC   ImportErrornumpy.testing.utilsr   r   r   r    r   r   r   pytestraisesr"   r   r   )rC   lcrP   s      r%   test_LinearConstraintrS   c   s   5. 
5%.1a&	1B...QF8$u%	5%.Aq6Aq6*:RH	EBQFQF+,rd|,88>>RXXe_,,,<<%000 
3%1#	'BQC5!
MM*.Ax@
MM*.!w?
MM*.Ax!QH
MM*.c
aVHq!fM
MM*.urdC
MM*.c
B?
MM*.c
BHHV<LMr?  5445s   H2 2IIc            	          [         R                  [        SS/SS/5      [        SS/SS/S/5      /5      n U R                  SS/:X  d   e SSKJn  U" U R                  SS/SS//5        U" U R                  S/S//5        SS K	nUR                  [        [         R                  / 5        UR                  [        [         R                  [        S/S/5      [        S/S/5      /5        g ! [
         a	    SSKJn   Nf = f)NrI   rK   r   r   rB   )r   r5   r   rM   rC   rN   rO   r   r    rP   rQ   r"   )combrC   rP   s      r%   test_LinearConstraint_combinerV      s    ##c3Z!Q0c3Z!Q!5	
D 3*,,,5. q!fq!f-.1#s,
MM*.66;
MM  	3%!	%'7s'CD  545s   C* *C=<C=,r   i=+r   d   -*   /NUMBERVARIABLEc                    ^ ^ UU 4S jnU$ )Nc                 x   > TS:X  a  UnOTn[        U[        T/U R                  R                  5       Q76 U5      $ )N__OP__)r   r   matchspan)scannertoken_stringactual_typestringtypes      r%   
make_token _token_maker.<locals>.make_token   s;    8&KK[&"G'--2D2D2F"GVVr(   r@   )rj   ri   rk   s   `` r%   _token_makerrm      s    W r(   c           	         SnSnSR                  [         Vs/ s H#  n[        R                  " UR                  5      PM%     sn5      nSnSn[        U[        SS9nSR                  U Vs/ s H  n[        R                  " U5      PM     sn5      n	U[        [        R                  U 5      4U[        [        R                  U 5      4U[        SU 5      4U	[        S	U 5      4U[        S
U 5      4US 4/n
[        R                  " U
5      nUR                  U 5      u  pU(       a0  [        U 5      [        U5      -
  n[        S[        XUS-   5      5      eU$ s  snf s  snf )Nz\(z\)|z&[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?z\s+T)keyreverserc   r`   r_   z unrecognized token in constraintr   )join_opsreescape
token_typesortedr#   rm   r   LPARENRPARENScannerscanr   r   )ri   r   	lparen_re	rparen_reopop_renum_rewhitespace_renvariable_relexiconrf   tokensleftoveroffsets                  r%   _tokenize_constraintr      s?   IIHH>2bii.>?E6FM NTBN((.A.QBIIaL.ABK 
Lv67	Lv67	Xv./	l:v67	h/0	G jj!G||F+FVs8},.vvPQz0R
 	
 M3 ? Bs   *E+ Ec            
      V   Sn [        U / SQ5      nSS[        R                  SSS4SS	S
[        R                  SSS4SS/	n[	        X5       Hh  u  p4[        U[        5      (       d   eUR                  US   :X  d   eUR                  [        XS   US   5      :X  d   eUR                  US   :X  a  Mh   e   SS K
nUR                  [        [         SS/5        [        SS/5        SS/SS/4 HD  n[        SU5      n[        U5      S:X  d   eU Vs/ s H  owR                  PM     sn/ SQ:X  a  MD   e   [        SS/5      n[        U5      S:X  d   eU Vs/ s H  owR                  PM     sn/ SQ:X  d   eU Vs/ s H  owR                  PM     sn/ SQ:X  d   eg s  snf s  snf s  snf )Nz2 * (a + b) = q)rI   rK   q)r_   r   r   2)r\   r   rF   r\   rJ      ()r`   r      rI   )rY         rY   )r`   	   rG   rK   rG      ))rX         rX   )r`         r   r   r   r   rF   z1 + @brK   z@brI   aaza aa a)rI   r   rI   z2 * a[1,1],a[1,1])r_   r\   r`   rW   )r   r\   r   rW   )r   r   rx   ry   zip
isinstancerj   originr   extrarP   rQ   r   r#   )coder   	expectedsgotexpectedrP   namests           r%   test__tokenize_constraintr      s   D!$8F	q!S! 	r2s#!
I V/#u%%%%xx8A;&&&zzVD1+x{CCCCyyHQK'''	 0 
MM*2HseDD6* +c{+%h66{a!'(A(,<<<< , "-(<Fv;!"#FqFFF#'GGGG#$VGGV$(AAAA )
 $$s   FF!;F&c                 >    [        [        X5      [        [        5      $ r*   )r   r   rs   _atomic)ri   r   s     r%   parse_constraintr     s    +FCT7SSr(   c                   f    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rSS jrSrg)_EvalConstrainti  c                    Xl         [        U5      U l        U R                  U R                  U R
                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  S.
U l        g )N)
)r`   r   )r_   r   )rY   r   )r[   r   )rY   r   )r[   r   )r\   r   )r^   r   )rX   r   )rW   r   )_variable_namesr#   _N_eval_variable_eval_number_eval_unary_plus_eval_unary_minus_eval_binary_plus_eval_binary_minus_eval_binary_multiply_eval_binary_div_eval_binary_eq_eval_binary_comma	_dispatch)r$   r   s     r%   r&   _EvalConstraint.__init__  sy    -n% "00,,++,,,,--00++**--
r(   c                 N    [         R                  " US U R                   S:H  5      $ Nr   )r   allr   )r$   r   s     r%   is_constant_EvalConstraint.is_constant  s!    vveIdgg&!+,,r(   c                     UR                   R                  n[        R                  " U R                  S-   4[
        S9nSX0R                  R                  U5      '   U$ )Nr   r   )tokenr   r   r   r   r   r   index)r$   treevarr   s       r%   r   _EvalConstraint._eval_variable!  sI    jj$''A+u512""((-.r(   c                     [         R                  " U R                  S-   4[        S9n[        UR                  R
                  5      US'   U$ )Nr   r   )r   r   r   r   r   r   )r$   r   r   s      r%   r   _EvalConstraint._eval_number'  s9    $''A+u5$****+b	r(   c                 >    U R                  UR                  S   5      $ r   evalargsr$   r   s     r%   r    _EvalConstraint._eval_unary_plus,  s    yy1&&r(   c                 D    SU R                  UR                  S   5      -  $ )Nr   r   r   r   s     r%   r   !_EvalConstraint._eval_unary_minus/  s    DIIdiil+++r(   c                 |    U R                  UR                  S   5      U R                  UR                  S   5      -   $ Nr   r   r   r   s     r%   r   !_EvalConstraint._eval_binary_plus2  /    yy1&499Q<)@@@r(   c                 |    U R                  UR                  S   5      U R                  UR                  S   5      -
  $ r   r   r   s     r%   r   "_EvalConstraint._eval_binary_minus5  r   r(   c                     U R                  UR                  S   5      nU R                  UR                  S   5      nU R                  U5      (       d  [        SUR                  S   5      eX#S   -  $ )Nr   r   z1Can't divide by a variable in a linear constraintr   r   r   r   r   r$   r   leftrights       r%   r    _EvalConstraint._eval_binary_div8  si    yy1&		$))A,'&&F		RS  Bir(   c                    U R                  UR                  S   5      nU R                  UR                  S   5      nU R                  U5      (       a  US   U-  $ U R                  U5      (       a  X#S   -  $ [        SU5      e)Nr   r   r   z=Can't multiply one variable by another in a linear constraintr   r   s       r%   r   %_EvalConstraint._eval_binary_multiplyA  s    yy1&		$))A,'D!!8e##e$$)##RTX r(   c                 T   [        UR                  5      n/ n[        U5       HJ  u  pEUR                  S:X  d  M  UR	                  U R                  USS95        UR                  SU-
     X$'   ML     U R                  US   5      nU R                  US   5      nUS U R                   US U R                   -
  n[        R                  " US:H  5      (       a  [        SU5      eUS   * US   -   n	[        U R                  X5      n
UR	                  U
5        [        R                  U5      $ )NrX   Tr3   r   r   z!no variables appear in constraintr   )r   r   	enumeraterj   appendr   r   r   r   r   r   r   r5   )r$   r   r   r2   iargr   r   r   constantr3   s              r%   r   _EvalConstraint._eval_binary_eqM  s
   DIIoFAxx3""499ST9#BC ((1q5/ & yya!		$q'"Ytww%	$''"2266%1*@$GGH9uRy(%d&:&:EL
:&''44r(   c                     U R                  UR                  S   SS9nU R                  UR                  S   SS9n[        R                  X#/5      $ )Nr   Tr   r   )r   r   r   r5   r   s       r%   r   "_EvalConstraint._eval_binary_commaa  sI    yy1$y7		$))A,4	8''66r(   c                    UR                   [        UR                  5      4nX0R                  ;   d   eU R                  U   " U5      nU(       a  [	        U[
        5      (       a  U$ UR                  U R                  S-   :X  d   e[        R                  " US U R                   S:H  5      (       a  [        SU5      e[        U R                  US U R                   US   * 5      $ [	        U[
        5      (       a  [        SU5      eU$ )Nr   r   z#term is constant, with no variablesr   zunexpected constraint object)rj   r#   r   r   r   r   sizer   r   r   r   r   )r$   r   r3   rp   vals        r%   r   _EvalConstraint.evalf  s    yy#dii.)nn$$$nnS!$'#/00
xx477Q;...66#i.A-..$%JDQQ'(<(<c)DGGnsSUwhWW #/00 !?FFJr(   )r   r   r   N)F)r7   r8   r9   r:   r&   r   r   r   r   r   r   r   r   r   r   r   r   r?   r@   r(   r%   r   r     sE    
0-
',AA 
5(7
r(   r   c                    [        U [        5      (       a0  U R                  U:w  a  [        SU R                  < SU< S35      eU $ [        U [        5      (       a  [
        R                  " [        U 5      [        U5      4[        S9n[
        R                  " [        U 5      5      n[        5       n[        U R                  5       5       Hw  u  nu  pgXa;   a  UR                  U5      nO'[        U[        5      (       a  UnO[        SU< 35      eX;   a  [        SX   < 35      eUR                  U5        SX%U4'   XsU'   My     [        XU5      $ [        U [        5      (       a  U /n [        U [         5      (       a  U (       a  [        U S   [        5      (       ay  / n	U  H\  n
[        U
[        5      (       d  [        S	U
< 35      e[#        X5      n[%        U5      nU	R'                  UR)                  US
S95        M^     [        R+                  U	5      $ [        U [,        5      (       a*  [        U 5      S:w  a  [        S5      eU u  p[        XU5      $ [
        R.                  " U [        S9n[        X5      $ )z]This is the internal interface implementing
DesignInfo.linear_constraint, see there for docs.z/LinearConstraint has wrong variable_names (got z, expected r   r   z!unrecognized variable name/index zduplicated constraint on r   r   zexpected a string, not Tr   r   z#constraint tuple must have length 2)r   r   r   r"   r   r   r   r#   r   setr   itemsr   intaddstrr   r   r   r   r   r5   tupler   )constraint_liker   r   r    usedr   namevalueidxr2   r   r   	evaluatorcoefs                 r%   linear_constraintr   z  s$    /#344))^; #11>C 
 /7++ #o.N0CDERHHS12	u )/*?*?*A BA}%$**40D#&& $!PQQ{ .BU!WXXHHSMES&M aL !C  yAA/3''*+ 	?D))q)3//#DdC(( !FGG#D9D'7Iy~~dt~DE $  ''44/5))1$BCC)i@@ JJe4EN22r(   c                      SSK Jn  [	        X5      n[        SU5        [        XU5      n[        SU5        U" UR                  UR                  5        U" UR                  UR                  5        U" UR                  UR                  5        U" UR                  R                  [        R                  " [        5      5        U" UR                  R                  [        R                  " [        5      5        g ! [         a
    SSKJn   GNf = f)Nr   rB   r   r   )rM   rC   rN   rO   r   printr   r   r   r    r   r   r   )inputvarnamesr   r    rC   r   r   s          r%   _check_linconr     s    5. E
,C	%;H	*h##X%<%<=HNN+ 2 23"((5/2$$bhhuo6  5445s   C9 9DDc            	         SS K n SSKJn  [        nU" [	        SS/SS/5      SS/SS//S//5        U R                  [        [        [	        SS/SS/5      SS/5        U" SS0SS/SS//S//5        U" U" SS	/5      SS/SS/SS//S/S//5        U" U" SS	/5      SS/SS/SS//S/S//5        U" SS0SS/SS//S//5        U" U" S
S/5      SS/SS/SS//S/S//5        U" U" SS/5      SS/SS/SS//S/S//5        U R                  [        [        SS0SS/5        U R                  [        [        SSS.SS/5        U" [        R                  " SS/5      SS/SS//S//5        U" [        R                  " SS/SS//5      SS/SS/SS//S/S//5        U" SSS/SS//S//5        U" SSS/SS//S//5        U" SSS/SS//S//5        U" SSS/SS//S//5        U" SSS/SS/SS//S/S//5        U" SSS/SS/SS//S/S//5        U" SS/SS/SS/SS//S/S//5        U R                  [        [        SSS0/SS/5        U" SSS/SS//S//5        U" SSS/SS//S//5        U" SSS/SS/SS//S/S//5        U" SSS/SS/SS/SS//S/S/S//5        U" SSS/SS//S//5        U" S SS/SS//S//5        U" S!SS/SS//S//5        U" S"SS/SS/SS//S/S//5        U" S#SS/SS/SS//S/S//5        U" S$/ S%Q/ S&Q/ S'Q/ S(Q/S/S/S//5        U" S)SS*/SS//S//5        U" S+S,/S-/4SS/S+S,//S-//5        U" S+S,/S,S.//S-/S///4SS/S+S,/S,S.//S-/S///5        U R                  [        [        SS/S/S/4SS/5        U R                  [        [        SS/4SS/5        U" S+S,/SS/S+S,//S//5        U" S+S,/S,S.//SS/S+S,/S,S.//S/S//5        U" [        R                  " S+S,/5      SS/S+S,//S//5        U" [        R                  " S+S,/S,S.//5      SS/S+S,/S,S.//S/S//5        U R                  [        [        S SS/5        g )0Nr   )OrderedDictrI   rK   r   rF   r   )rI   r   )rK   rF   rL   )r   rF   r   )rI   r   rJ   r   za = 2za - 2z	a + 1 = 3z	a + b = 3za = 2, b = 3zb = 3, a = 2zb = 3z#2 * (a + b/3) + b + 2*3/4 = 1 + 2*3g?g      @z+2 * -aza - b, a + b = 2r   za = 1, a = 2, a = 3za * 2z-a = 1z(2 + a - a) * bz	a = 1 = bza = (1 = b)za = 1, a = b = crI   rK   r4   )r   r   r   )r   r   r   )r   r   r   z	a + 1 = 2za + 1rG   rH   r   (   #   )
rP   patsy.compatr   r   r   rQ   r"   r   r   array)rP   r   r   s      r%   test_linear_constraintr    s   (ASzAq6*S#J!QA3%H
MM%'7c
QF'KcSVZ sAhc
aVHse,k8X&'#sq!fq!f5EaSzRk8X&'#sq!fq!f5EaSzRq!fsCjAq6(aSE*k66"#c3Z1a&1a&1AQC!:Nk8V$%SzQFQF3CqcA3ZP
MM*/#qC:F
MM*/qQ#sLbhh1vc
aVHse4bhhAA 3*1v1v.>!qc
KgSzQF8qcU+gSzQF8qcU+kC:Ax1#/kC:Ax1#/nsCjAq6Aq6"2aS1#J?nsCjAq6Aq6"2aS1#J?w3*1v1v&6!qc
C
MM*/#Qx3*M -	c

[	
	 i#sr1gY!.3*2wA&71#sDc3Z1a&1a&1a&)AQC!qc?SgSzQF8qcU+hc
b!WIu-#sq!fXu5kC:AB0A3+>mc3Z1b'Aq6!2bTA3K@	J
+
qcA3	 kC>QF8qcU3Bx"c
b"XJ"7r(RH	rd|,	c

bB8
t	 MM*/1a&1#s1Cc3ZP
MM*/1a&S#JGr2hc
b"XJ!.Bx"bS#J"bB8(<sQCjIbhhBx3*BxjA3%8bhhR2r(#$sCjB8b"X2F!qc
S MM*/SzBr(   )
z	a + <f>ooza = 1, <1 = 1>, b = 1za = 1, <b * 2 - b + (-2/2 * b)>za = 1, <1>, b = 2za = 1, <2 * b = b + b>, cza + <a * b> + cza + 2 / <b> + cza = 1, 2 * <(a = b)>, cza = 1, a + <(a = b)>, cza = 1, <(a, b)> + 2, cc                  *    S n [        U [        5        g )Nc                     [        U / SQ5      $ )Nr  )r   )bad_codes    r%   doittest_eval_errors.<locals>.doit.  s     ?;;r(   )r   _parse_eval_error_tests)r  s    r%   test_eval_errorsr  -  s    < 56r(   )(__all__rt   collections.abcr   rN   collectionsnumpyr   patsyr   patsy.originr   
patsy.utilr   r   r	   r
   r   patsy.infix_parserr   r   r   patsy.parse_formular   objectr   rS   rV   rs   r   rm   r   r   r   r   r   r   r  r  r  r@   r(   r%   <module>r     s$   
 	$'     < ; 3B5v B5J"J4 S!TS!QS!SS!SS!SS!SS!SS!S	 Z
 >%BPTrf rj;3|7 PCf $7  $#$s   C CC