Ë
    /�DjyV  ã                   óÈ  — d dl mZ d dlmZmZmZ d dlmZmZ d dl	m
Z
 d dl	mZmZ d dl	mZmZ g d¢Z G d„ d	e«      Z eg «      Z G d
„ de«      Zd„ Z G d„ de«      Zd„ Zd„ 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„ Z"d„ Z#d„ Z$d„ Z%d „ Z&d!„ Z'd"„ Z( G d#„ d$e«      Z)i d%d&g f“d'd&g f“d(d&g f“d)d&d)gf“d*d&g f“d+d,g f“d-d,g f“d.d&g f“d/d&g f“d0d,g f“d1d&g f“d2d,g f“d3d&g f“d4d,g f“d5d&d)gf“d6d,d)gf“d7d,d)gf“i d8d&d)gf“d9d&g f“d:d&d)d;gf“d<d&d)d;gf“d=d&d)d;gf“d>d&d)d;gf“d?d&d)d;gf“d@d&d)gf“dAd&d)d;gf“dBd&d)dCgf“dDd&d)gf“dEd&g dF¢f“dGd&d)dHgf“dId&dJgf“dKd&dJgf“dLd&dJdMgf“dNd&dMdOgf“¥i dPd&dJgf“dQd&g dR¢f“dSd&dMgf“dTd&g dU¢f“dVd&g f“dWd&g f“dXd&g f“dYd&g f“dZd&g d[¢f“d\d&g d[¢f“d]d&g d^¢f“d_d&g d`¢f“dad&g d[¢f“dbd&g dc¢f“ddd&g de¢f“dfd&g dg¢f“dhd&d)dJgf“¥i did&g dj¢f“dkd&g dl¢f“dmd&g dn¢f“dod&d)gf“dpd&g dq¢f“drd&g ds¢f“dtd&d)gf“dud&d)d;gf“dvd&g d[¢f“dwd,g d[¢f“dxd,g f“dyd&d)d;gf“dzd&g d&d)d;gf“d{d,d|gd&d)d;gf“d}d,d|gd&d)d;gf“d~d,g d¢d&d)d;gf“d€d,g d&g f“¥i d�d&d|gd&d)d;gf“d‚d&g dƒ¢f“d„d&g d…¢f“d†d&d;dJgf“d‡d&g dˆ¢f“d‰d&g dŠ¢f“d‹d&g dŒ¢f“d�d&g dŽ¢f“d�d&g f“d�d,g f“d‘d&g f“d’d,g f“d“d&d)gf“d”d&d)gf“d•d&d)gf“d–d,g f“¥Z*g d—¢Z+d˜„ Z,d™„ Z-dš„ Z.d›„ Z/dœ„ Z0y�)žé    ©Ú
PatsyError)Ú	ParseNodeÚTokenÚparse_formula)ÚEvalEnvironmentÚ
EvalFactor)Úuniqueify_list)Úrepr_pretty_delegateÚrepr_pretty_impl)Úno_picklingÚassert_no_pickling)ÚTermÚ	ModelDescÚ	INTERCEPTc                   ó<   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZeZ	d„ Z
d„ ZeZy)	r   a”  The interaction between a collection of factor objects.

    This is one of the basic types used in representing formulas, and
    corresponds to an expression like ``"a:b:c"`` in a formula string.
    For details, see :ref:`formulas` and :ref:`expert-model-specification`.

    Terms are hashable and compare by value.

    Attributes:

    .. attribute:: factors

       A tuple of factor objects.
    c                 ó6   — t        t        |«      «      | _        y ©N)Útupler
   Úfactors)Úselfr   s     úNC:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\patsy/desc.pyÚ__init__zTerm.__init__*   s   € Üœ^¨GÓ4Ó5ˆ�ó    c                 ó|   — t        |t        «      xr+ t        |j                  «      t        | j                  «      k(  S r   )Ú
isinstancer   Ú	frozensetr   ©r   Úothers     r   Ú__eq__zTerm.__eq__-   s5   € Ü˜%¤Ó&ò 
¬9°U·]±]Ó+CÄyØ�L‰LóH
ñ ,
ð 	
r   c                 ó   — | |k(   S r   © r   s     r   Ú__ne__zTerm.__ne__2   s   € Ø˜5‘=Ð Ð r   c                 óJ   — t        t        t        | j                  «      f«      S r   )Úhashr   r   r   ©r   s    r   Ú__hash__zTerm.__hash__5   s   € Ü”Tœ9 T§\¡\Ó2Ð3Ó4Ð4r   c                 óN   — |rJ ‚t        || t        | j                  «      g«       y r   )r   Úlistr   ©r   ÚpÚcycles      r   Ú_repr_pretty_zTerm._repr_pretty_:   s    € ÙÑÜ˜˜D¤4¨¯©Ó#5Ð"6Õ7r   c                 ó”   — | j                   r7dj                  | j                   D �cg c]  }|j                  «       ‘Œ c}«      S yc c}w )z+Return a human-readable name for this term.ú:Ú	Intercept)r   ÚjoinÚname)r   Úfs     r   r2   z	Term.name>   s5   € à�<Š<Ø—8‘8¨t¯|©|Ö<¨!˜QŸV™V�XÒ<Ó=Ð=àùò =s   ¦AN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r    r#   r'   r   Ú__repr__r-   r2   r   Ú__getstate__r"   r   r   r   r      s3   „ ñò6ò
ò
!ò5ð $€Hò8òð �Lr   r   c                   ó   — e Zd Zd„ Zd„ Zy)Ú_MockFactorc                 ó   — || _         y r   ©Ú_name)r   r2   s     r   r   z_MockFactor.__init__L   s	   € Øˆ�
r   c                 ó   — | j                   S r   r=   r&   s    r   r2   z_MockFactor.nameO   s   € Ø�z‰zÐr   N)r4   r5   r6   r   r2   r"   r   r   r;   r;   K   s   „ òór   r;   c                  óä  — t        g d¢«      j                  dk(  sJ ‚t        ddg«      t        ddg«      k(  sJ ‚t        t        ddg«      «      t        t        ddg«      «      k(  sJ ‚t        d«      } t        d«      }t        | |g«      j	                  «       dk(  sJ ‚t        || g«      j	                  «       dk(  sJ ‚t        g «      j	                  «       d	k(  sJ ‚t        t        g «      «       y )
N)é   é   rA   )rA   rB   rA   rB   ÚaÚbúa:bzb:ar0   )r   r   r%   r;   r2   r   )Úf1Úf2s     r   Ú	test_TermrH   S   sÄ   € Ü’	‹?×"Ñ" fÒ,Ñ,Ü��A�‹<œ4  A ›<Ò'Ñ'Ü”�a˜�V“Ó¤¤d¨A¨q¨6£lÓ!3Ò3Ñ3Ü	�SÓ	€BÜ	�SÓ	€BÜ��R�‹>×ÑÓ  EÒ)Ñ)Ü��R�‹>×ÑÓ  EÒ)Ñ)Ü�‹8�=‰=‹?˜kÒ)Ñ)ä”t˜B“xÕ r   c                   ó:   — e Zd ZdZd„ ZeZd„ Zd„ Ze	d„ «       Z
eZy)r   aÂ  A simple container representing the termlists parsed from a formula.

    This is a simple container object which has exactly the same
    representational power as a formula string, but is a Python object
    instead. You can construct one by hand, and pass it to functions like
    :func:`dmatrix` or :func:`incr_dbuilder` that are expecting a formula
    string, but without having to do any messy string manipulation. For
    details see :ref:`expert-model-specification`.

    Attributes:

    .. attribute:: lhs_termlist
                   rhs_termlist

       Two termlists representing the left- and right-hand sides of a
       formula, suitable for passing to :func:`design_matrix_builders`.
    c                 óD   — t        |«      | _        t        |«      | _        y r   )r
   Úlhs_termlistÚrhs_termlist)r   rK   rL   s      r   r   zModelDesc.__init__s   s   € Ü*¨<Ó8ˆÔÜ*¨<Ó8ˆÕr   c                 óZ   — |rJ ‚t        || g d| j                  fd| j                  fg«      S )NrK   rL   )r   rK   rL   r*   s      r   r-   zModelDesc._repr_pretty_y   s<   € ÙÑÜØØØØ˜d×/Ñ/Ð0°>À4×CTÑCTÐ2UÐVó	
ð 	
r   c                 ó®  — d„ }dj                  | j                  D �cg c]
  } ||«      ‘Œ c}«      }|r|dz  }n|dz  }| j                  t        gk(  r| |t        «      z  }|S g }t        | j                  vr|j	                  d«       || j                  D �cg c]  }|t        k7  sŒ ||«      ‘Œ c}z  }|dj                  |«      z  }|S c c}w c c}w )aÀ  Returns a human-readable representation of this :class:`ModelDesc`
        in pseudo-formula notation.

        .. warning:: There is no guarantee that the strings returned by this
           function can be parsed as formulas. They are best-effort
           descriptions intended for human users. However, if this ModelDesc
           was created by parsing a formula, then it should work in
           practice. If you *really* have to.
        c                 ó6   — | t         k(  ry| j                  «       S )NÚ1)r   r2   )Úterms    r   Ú	term_codez%ModelDesc.describe.<locals>.term_code�   s   € Ø”yÒ Øà—y‘y“{Ð"r   z + z ~ z~ Ú0)r1   rK   rL   r   Úappend)r   rR   rQ   ÚresultÚ
term_namess        r   ÚdescribezModelDesc.describe‚   sÝ   € ò	#ð —‘¸×9JÑ9JÖK°™Y t�_ÒKÓLˆÙØ�e‰O‰Fà�d‰NˆFØ×Ñ¤ Ò+Ø‘i¤	Ó*Ñ*ˆFð ˆð ˆJÜ × 1Ñ 1Ñ1Ø×!Ñ! #Ô&ØØ,0×,=Ñ,=öØ$(ÀÌÓAR‘	˜$•òñ ˆJð �e—j‘j Ó,Ñ,ˆFØˆùò Lùòs   �CÂCÂ(
Cc                 ó”   — t        |t        «      r|}nt        |«      }t        «       j	                  |d¬«      }t        || «      sJ ‚|S )a$  Construct a :class:`ModelDesc` from a formula string.

        :arg tree_or_string: A formula string. (Or an unevaluated formula
          parse tree, but the API for generating those isn't public yet. Shh,
          it can be our secret.)
        :returns: A new :class:`ModelDesc`.
        F)Úrequire_evalexpr)r   r   r   Ú	EvaluatorÚeval)ÚclsÚtree_or_stringÚtreeÚvalues       r   Úfrom_formulazModelDesc.from_formula¤   sF   € ô �n¤iÔ0Ø!‰Dä  Ó0ˆDÜ“× Ñ  ¸Ð Ó>ˆÜ˜% Ô%Ñ%Øˆr   N)r4   r5   r6   r7   r   r   r8   r-   rW   Úclassmethodr`   r   r9   r"   r   r   r   r   `   s9   „ ñò$9ð $€Hò
ò ðD ñó ðð  �Lr   r   c                  óÚ  — t        d«      } t        d«      }t        t        t        | g«      gt        | g«      t        | |g«      g«      }|j                  t        t        | g«      gk(  sJ ‚|j
                  t        | g«      t        | |g«      gk(  sJ ‚t        |j                  «       «       |j                  «       dk(  sJ ‚t        |«       t        g g «      j                  «       dk(  sJ ‚t        t        gg «      j                  «       dk(  sJ ‚t        t        gt        g«      j                  «       dk(  sJ ‚t        t        gt        t        |g«      g«      j                  «       dk(  sJ ‚y )NrC   rD   z1 + a ~ 0 + a + a:bz~ 0z1 ~ 0z1 ~ 1z1 ~ b)	r;   r   r   r   rK   rL   ÚprintrW   r   )rF   rG   Úms      r   Útest_ModelDescre   ¸   s&  € Ü	�SÓ	€BÜ	�SÓ	€BÜ”9œd B 4›jÐ)¬D°"°«J¼¸bÀ"¸X»Ð+GÓH€AØ�>‰>œi¬¨r¨d«Ð4Ò4Ñ4Ø�>‰>œd B 4›j¬$°°B¨x«.Ð9Ò9Ñ9Ü	ˆ!�*‰*‹,ÔØ�:‰:‹<Ð0Ò0Ñ0ä�qÔä�R˜Ó×%Ñ%Ó'¨5Ò0Ñ0Ü”i�[ "Ó%×.Ñ.Ó0°GÒ;Ñ;Ü”i�[¤9 +Ó.×7Ñ7Ó9¸WÒDÑDÜ”i�[¤9¬d°B°4«jÐ"9Ó:×CÑCÓEÈÒPÑPÐPr   c                  óð   — dt        d«      fD ]f  } t        j                  | «      }|j                  t	        t        d«      g«      gk(  sJ ‚|j                  t        t	        t        d«      g«      gk(  rŒfJ ‚ y )Nzy ~ xÚyÚx)r   r   r`   rK   r   r	   rL   r   )ÚinputÚmds     r   Útest_ModelDesc_from_formulark   É   st   € Øœ=¨Ó1Ð2ò GˆÜ×#Ñ# EÓ*ˆØ�‰Ü”*˜S“/Ð"Ó#ð#
ò 
ñ 	
ð �‰¤9¬d´J¸s³OÐ3DÓ.EÐ"FÓFÑFñGr   c                   ó$   — e Zd ZdZd„ ZeZd„ ZeZ	y)ÚIntermediateExprzFThis class holds an intermediate result while we're evaluating a tree.c                 óÊ   — || _         || _        || _        t        t	        |«      «      | _        | j                   r| j                  sJ ‚| j                   r| j                  rJ ‚y y r   )Ú	interceptÚintercept_originÚintercept_removedr   r
   Úterms)r   ro   rp   rq   rr   s        r   r   zIntermediateExpr.__init__Õ   sT   € Ø"ˆŒØ 0ˆÔØ!2ˆÔÜœ>¨%Ó0Ó1ˆŒ
Ø�>Š>Ø×(Ò(Ñ(Ø—N’N t×'=Ò'=Ñ>Ð'=�Nr   c                 ó|   — |rJ ‚t        || | j                  | j                  | j                  | j                  g«      S r   )r   ro   rp   rq   rr   r*   s      r   Ú_pretty_repr_zIntermediateExpr._pretty_repr_à   s;   € ÙÑÜØØØ�^‰^˜T×2Ñ2°D×4JÑ4JÈDÏJÉJÐWó
ð 	
r   N)
r4   r5   r6   r7   r   r   r8   rt   r   r9   r"   r   r   rm   rm   Ò   s   „ ÙLò?ð $€Hò
ð �Lr   rm   c                 ó   — | r
t         f|z   S |S r   )r   )Údoitrr   s     r   Ú_maybe_add_interceptrw   ë   s   € ÙÜˆ|˜eÑ#Ð#àˆr   c           	      ó~  — |j                   D �cg c]  }| j                  |«      ‘Œ }}t        |«      dk(  r|j                  dt	        dd dg «      «       t        |«      dk(  sJ ‚t        t        |d   j                  |d   j                  «      t        |d   j                   |d   j                  «      «      S c c}w )NrA   r   FTrB   )
Úargsr[   ÚlenÚinsertrm   r   rw   ro   rr   rq   ©Ú	evaluatorr^   ÚargÚexprss       r   Ú_eval_any_tilder€   ò   s¤   € Ø,0¯I©IÖ6 SˆY�^‰^˜CÕ Ð6€EÐ6Ü
ˆ5ƒz�Q‚ð 	�‰�QÔ(¨°°d¸BÓ?Ô@Üˆu‹:˜Š?ÑäÜ˜U 1™X×/Ñ/°°q±·±Ó@Ü  q¡×!;Ñ!;Ð;¸UÀ1¹X¿^¹^ÓLóð ùò 7s   �B:c                 óÞ  — | j                  |j                  d   «      }|j                  d   j                  dk(  rt        dd d|j                  «      S | j                  |j                  d   «      }|j
                  r/t        d|j                  d|j                  |j                  z   «      S t        |j
                  |j                  |j                  |j                  |j                  z   «      S )Nr   rA   ÚZEROFT©r[   ry   Útyperm   rr   ro   rp   rq   )r}   r^   Ú	left_exprÚ
right_exprs       r   Ú_eval_binary_plusr‡      sÌ   € Ø—‘˜tŸy™y¨™|Ó,€IØ‡y�y��|×Ñ˜FÒ"Ü  t¨T°9·?±?ÓCÐCà—^‘^ D§I¡I¨a¡LÓ1ˆ
Ø×ÒÜ#ØØ×+Ñ+ØØ—‘ *×"2Ñ"2Ñ2ó	ð ô $Ø×#Ñ#Ø×*Ñ*Ø×+Ñ+Ø—‘ *×"2Ñ"2Ñ2ó	ð r   c                 óJ  — | j                  |j                  d   «      }|j                  d   j                  dk(  r%t        d|j                  d   d|j                  «      S |j                  d   j                  dk(  rt        dd d|j                  «      S | j                  |j                  d   «      }|j                  D �cg c]  }||j                  vsŒ|‘Œ }}|j
                  rt        dd d|«      S t        |j
                  |j                  |j                  |«      S c c}w )Nr   rA   r‚   TFÚONErƒ   )r}   r^   r…   r†   rQ   rr   s         r   Ú_eval_binary_minusrŠ     sû   € Ø—‘˜tŸy™y¨™|Ó,€IØ‡y�y��|×Ñ˜FÒ"Ü  d§i¡i°¡l°E¸9¿?¹?ÓKÐKØ	�‰�1‰×	Ñ	˜eÒ	#Ü  t¨T°9·?±?ÓCÐCà—^‘^ D§I¡I¨a¡LÓ1ˆ
Ø"+§/¡/ÖR˜$°TÀ×AQÑAQÒ5Q’ÐRˆÐRØ×ÒÜ# E¨4°°uÓ=Ð=ä#Ø×#Ñ#Ø×*Ñ*Ø×+Ñ+Øó	ð ùò	 Ss   Ã D ÃD c                 óH   — | j                   rt        d| j                  «      ‚y )Nz1intercept term cannot interact with anything else)ro   r   rp   )Úexprs    r   Ú_check_interactabler�   *  s'   € Ø‡~‚~ÜØ?Ø×!Ñ!ó
ð 	
ð r   c                 óð   — | |fD ]  }t        |«       Œ g }| j                  D ]D  }|j                  D ]3  }|j                  t        |j                  |j                  z   «      «       Œ5 ŒF t        dd d|«      S )NF)r�   rr   rT   r   r   rm   )r…   r†   rŒ   rr   Úl_termÚr_terms         r   Ú_interactionr‘   2  s€   € Ø˜JÐ'ò "ˆÜ˜DÕ!ð"à€EØ—/‘/ò @ˆØ ×&Ñ&ò 	@ˆFØ�L‰Lœ˜fŸn™n¨v¯~©~Ñ=Ó>Õ?ñ	@ð@ô ˜E 4¨°Ó6Ð6r   c           	      óØ   — |j                   D �cg c]  }| j                  |«      ‘Œ }}t        dd d|d   j                  |d   j                  z   t	        |Ž j                  z   «      S c c}w )NFr   rA   )ry   r[   rm   rr   r‘   r|   s       r   Ú_eval_binary_prodr“   <  sb   € Ø,0¯I©IÖ6 SˆY�^‰^˜CÕ Ð6€EÐ6ÜØˆt�U˜E !™HŸN™N¨U°1©X¯^©^Ñ;¼lÈEÐ>R×>XÑ>XÑXóð ùò 7s   �A'c                 ó   — | j                  |j                  d   «      }| j                  |j                  d   «      }t        |j                  «      }t	        |«       g }|j                  D ]  }|t        |j
                  «      z  }Œ t        dd dt        |«      g«      }|t        t        ||«      j                  «      z  }t        dd d|«      S )Nr   rA   F)	r[   ry   r)   rr   r�   r   rm   r   r‘   )r}   r^   r…   r†   rr   Úleft_factorsrQ   Úleft_combined_exprs           r   Ú_eval_binary_divr—   K  s¶   € Ø—‘˜tŸy™y¨™|Ó,€IØ—‘ §	¡	¨!¡Ó-€JÜ�—‘Ó!€EÜ˜	Ô"à€LØ—‘ò +ˆØœ˜TŸ\™\Ó*Ñ*‰ð+ä)¨%°°u¼tÀLÓ?QÐ>RÓSÐà	ŒT”,Ð1°:Ó>×DÑDÓEÑE€EÜ˜E 4¨°Ó6Ð6r   c                 ól   — |j                   D �cg c]  }| j                  |«      ‘Œ }}t        |Ž S c c}w r   )ry   r[   r‘   r|   s       r   Ú_eval_binary_interactr™   Z  s2   € Ø,0¯I©IÖ6 SˆY�^‰^˜CÕ Ð6€EÐ6Ü˜ÐÐùò 7s   �1c                 ó  — | j                  |j                  d   «      }t        |«       d}|j                  d   j                  dv r/|j                  d   j                  j
                  }	 t        |«      }|dk  rt        d|j                  d   «      ‚|j                  }|}t        t        |j                  «      |«      }t        d|«      D ]  }t        ||«      }||j                  z   }Œ t        dd d|«      S # t        $ r Y Œ�w xY w)Nr   éÿÿÿÿrA   )r‰   ÚNUMBERz '**' requires a positive integerF)r[   ry   r�   r„   ÚtokenÚextraÚintÚ
ValueErrorr   rr   Úminrz   Úranger‘   rm   )r}   r^   r…   ÚpowerrŒ   Ú	all_termsÚbig_exprÚis           r   Ú_eval_binary_powerr§   _  sû   € Ø—‘˜tŸy™y¨™|Ó,€IÜ˜	Ô"Ø€EØ‡y�y��|×ÑÐ-Ñ-Ø�y‰y˜‰|×!Ñ!×'Ñ'ˆð	Ü˜“IˆEð ˆq‚yÜÐ;¸T¿Y¹YÀq¹\ÓJÐJØ—‘€IØ€Hä”�I—O‘OÓ$ eÓ,€EÜ�1�e‹_ò /ˆÜ 	¨8Ó4ˆØ §¡Ñ.‰	ð/ô ˜E 4¨°	Ó:Ð:øô ò 	Ùð	ús   Á+C; Ã;	DÄDc                 ó>   — | j                  |j                  d   «      S )Nr   )r[   ry   ©r}   r^   s     r   Ú_eval_unary_plusrª   u  s   € Ø�>‰>˜$Ÿ)™) A™,Ó'Ð'r   c                 óÖ   — |j                   d   j                  dk(  rt        d|j                  dg «      S |j                   d   j                  dk(  rt        dd dg «      S t	        d|«      ‚)Nr   r‚   TFr‰   z)Unary minus can only be applied to 1 or 0)ry   r„   rm   Úoriginr   r©   s     r   Ú_eval_unary_minusr­   y  sb   € Ø‡y�y��|×Ñ˜FÒ"Ü  d§k¡k°5¸"Ó=Ð=Ø	�‰�1‰×	Ñ	˜eÒ	#Ü  t¨T°2Ó6Ð6äÐDÀdÓKÐKr   c                 ó   — t        dd dg «      S )NFT)rm   r©   s     r   Ú
_eval_zeror¯   ‚  s   € Ü˜E 4¨¨rÓ2Ð2r   c                 ó2   — t        d|j                  dg «      S )NTF)rm   r¬   r©   s     r   Ú	_eval_oner±   †  s   € Ü˜D $§+¡+¨u°bÓ9Ð9r   c                 ó   — t        d|«      ‚)Nz4numbers besides '0' and '1' are only allowed with **r   r©   s     r   Ú_eval_numberr³   Š  s   € Ü
ÐKÈTÓ
RÐRr   c                 óŠ   — t        |j                  j                  |j                  ¬«      }t	        dd dt        |g«      g«      S )N)r¬   F)r	   r�   rž   r¬   rm   r   )r}   r^   Úfactors      r   Ú_eval_python_exprr¶   Ž  s6   € Ü˜Ÿ
™
×(Ñ(°·±Ô=€FÜ˜E 4¨´°v°h³Ð0@ÓAÐAr   c                   ó    — e Zd Zd„ Zd„ Zdd„Zy)rZ   c                 ó¤  — i | _         | j                  ddt        «       | j                  ddt        «       | j                  ddt        «       | j                  ddt        «       | j                  ddt
        «       | j                  ddt        «       | j                  ddt        «       | j                  d	dt        «       | j                  ddt        «       | j                  ddt        «       | j                  d
dt        «       | j                  ddt        «       | j                  ddt        «       | j                  ddt        «       i | _        y )Nú~rB   rA   ú+ú-Ú*ú/r/   z**r‚   r   r‰   rœ   ÚPYTHON_EXPR)Ú_evaluatorsÚadd_opr€   r‡   rŠ   r“   r—   r™   r§   rª   r­   r¯   r±   r³   r¶   Ústashr&   s    r   r   zEvaluator.__init__”  sü   € ØˆÔØ�‰�C˜œOÔ,Ø�‰�C˜œOÔ,à�‰�C˜Ô-Ô.Ø�‰�C˜Ô.Ô/Ø�‰�C˜Ô-Ô.Ø�‰�C˜Ô,Ô-Ø�‰�C˜Ô1Ô2Ø�‰�D˜!Ô/Ô0à�‰�C˜Ô,Ô-Ø�‰�C˜Ô-Ô.à�‰�F˜AœzÔ*Ø�‰�E˜1œiÔ(Ø�‰�H˜a¤Ô.Ø�‰�M 1Ô&7Ô8ð ˆ�
r   c                 ó&   — || j                   ||f<   y r   )r¿   )r   ÚopÚarityr}   s       r   rÀ   zEvaluator.add_op¯  s   € Ø&/ˆ×Ñ˜˜U˜Ò#r   c                 ót  — d }t        |t        «      sJ ‚|j                  t        |j                  «      f}|| j
                  vr$t        d|j                  ›d�|j                  «      ‚ | j
                  |   | |«      }|r8t        |t        «      s(t        |t        «      rt        d|«      ‚t        d|«      ‚|S )Nz#I don't know how to evaluate this 'z
' operatorz2~ can only be used once, and only at the top levelzBcustom operator returned an object that I don't know how to handle)
r   r   r„   rz   ry   r¿   r   r�   rm   r   )r   r^   rY   rU   Úkeys        r   r[   zEvaluator.eval²  sº   € ØˆÜ˜$¤	Ô*Ñ*Ø�y‰yœ#˜dŸi™i›.Ð)ˆØ�d×&Ñ&Ñ&ÝØEIÇYÃYÐPØ—
‘
óð ð '�×!Ñ! #Ñ& t¨TÓ2ˆÙ¤J¨vÔ7GÔ$HÜ˜&¤)Ô,Ü ØHÈ$óð ô !ðð ó	ð ð ˆr   N)T)r4   r5   r6   r   rÀ   r[   r"   r   r   rZ   rZ   “  s   „ òò60ôr   rZ   Ú Tú z 
 rC   rP   rS   Fz- 1z- 0z+ 1z+ 0z0 + 1z1 + 0z1 - 0z0 - 1z1 + az0 + aza - 1za - 0z1 - aúa + brD   z(a + b)za + ((((b))))za + ((((+b))))za + ((((b - a))))z	a + a + aza + (b - a)za + np.log(a, base=10)znp.log(a, base=10)z0a + np.log(a, base=10) - np . log(a , base = 10)za + (I(b) + c))rC   zI(b)Úcza + I(b + c)zI(b + c)rE   ©rC   rD   za:b:az	a:(b + c)©rC   rÊ   z	(a + b):c©rD   rÊ   z	a:(b - c)zc + a:c + a:(b - c))rÊ   rÌ   rË   z	(a - b):czb + b:c + (a - b):c)rD   rÍ   rÌ   z	a:b - a:bz	a:b - b:az1 - (a + b)za + b - (a + b)za * b)rC   rD   rË   z	a * b * aza * (b + c))rC   rD   rÊ   rË   rÌ   z(a + b) * c)rC   rD   rÊ   rÌ   rÍ   za * (b - c)zc + a:c + a * (b - c))rÊ   rÌ   rC   rD   rË   z(a - b) * c)rC   rÊ   rÌ   zb + b:c + (a - b) * c)rD   rÍ   rC   rÊ   rÌ   za/bz	(a + b)/c)rC   rD   ©rC   rD   rÊ   zb + b:c + (a - b)/c)rD   rÍ   rC   rÌ   z	a/(b + c))rC   rË   rÌ   za ** 2z(a + b + c + d) ** 2)
rC   rD   rÊ   ÚdrË   rÌ   ©rC   rÏ   rÍ   ©rD   rÏ   ©rÊ   rÏ   z(a + b + c + d) ** 3)rC   rD   rÊ   rÏ   rË   rÌ   rÐ   rÍ   rÑ   rÒ   rÎ   )rC   rD   rÏ   )rC   rÊ   rÏ   )rD   rÊ   rÏ   za + +az~ a + bz~ a*bz	~ a*b + 0z~ -1z	0 ~ a + bz	1 ~ a + bz	y ~ a + brg   z0 + y ~ a + bz0 + y * z ~ a + b)rg   Úz)rg   rÓ   z-1 ~ 1z1 + y ~ a + bz	a + b * c)rC   rD   rÊ   rÍ   z	a * b + c)rC   rD   rË   rÊ   z	a * b - az	a + b / c)rC   rD   rÍ   z	a / b + c)rC   rË   rÊ   za*b:c)rC   rÍ   rÎ   za:b*c)rË   rÊ   rÎ   z~ 1 + 1 + 0 + 1z~ 0 + 1 + 0z~ 0 - 1 - 1 + 0 + 1z~ 1 - 1z~ 0 + a + 1z~ 1 + (a + 0)z~ 0 + (a + 1)z~ 1 - (a + 1))#za <+>za + <(>z
b + <(-a)>za:<1>z(a + <1>)*bza + <2>z	a + <1.0>za ** <b>za ** <(1 + 1)>z
a ** <1.5>za + b <# asdf>z<)>za + <)>z<*> aza + <*>za + <foo[bar>za + <foo{bar>za + <foo(bar>z
a + <[bar>z
a + <{bar>za + <{bar[]>za + foo<]>barza + foo[]<]>barza + foo{}<}>barza + foo<)>barza + b<)>z(a) <.>z<(>a + bz<y ~ a> ~ bzy ~ <(a ~ b)>z	<~ a> ~ bz~ <(a ~ b)>z1 + <-(a + b)>z<- a>za + <-a**2>c           
      ó0  — |rdg|z   }t        | «      t        |«      k(  sJ ‚t        | |«      D ]a  \  }}t        |t        «      rEt        |t        «      r|f}|j
                  t        |D �cg c]  }t        |«      ‘Œ c}«      k(  rŒYJ ‚||k(  rŒaJ ‚ y c c}w )Nr"   )rz   Úzipr   r   Ústrr   r   r	   )rr   Úexpected_interceptÚ	expectedsrQ   ÚexpectedÚss         r   Ú_assert_terms_matchrÛ   r  s�   € ÙØ�D˜9Ñ$ˆ	Üˆu‹:œ˜Y›Ò'Ñ'Ü˜e YÓ/ò $‰ˆˆhÜ�dœDÔ!Ü˜(¤CÔ(Ø$˜;�Ø—<‘<¤5ÀÖ)J¸A¬*°Q­-Ò)JÓ#KÓKÑKà˜8Ó#Ñ#ñ$ùò *Ks   Á+Bc                 óF  — | j                  «       D ]Ž  \  }}t        |«      dk(  rdg f|z   }t        j                  |«      }t	        t        |«      «       t	        |«       t	        |«       |\  }}}}t        |j                  ||«       t        |j                  ||«       Œ� y )NrB   F)	Úitemsrz   r   r`   rc   ÚreprrÛ   rK   rL   )ÚtestsÚcoderU   Ú
model_descÚlhs_interceptrK   Úrhs_interceptrL   s           r   Ú_do_eval_formula_testsrä     s”   € ØŸ™›ò 	R‰ˆˆfÜˆv‹;˜!ÒØ˜R�[ 6Ñ)ˆFÜ×+Ñ+¨DÓ1ˆ
ÜŒd�4‹jÔÜˆfŒÜˆjÔØCIÑ@ˆ�| ]°LÜ˜J×3Ñ3°]ÀLÔQÜ˜J×3Ñ3°]ÀLÕQñ	Rr   c                  ó"   — t        t        «       y r   )rä   Ú_eval_testsr"   r   r   Útest_eval_formularç   Œ  s
   € Üœ;Õ'r   c                  ó0   — ddl m}  d„ } | |t        «       y )Nr   )Ú_parsing_error_testc                 ó,   — t         j                  | «      S r   )r   r`   )Úformulas    r   ú<lambda>z3test_eval_formula_error_reporting.<locals>.<lambda>“  s   € œy×5Ñ5°gÓ>€ r   )Úpatsy.parse_formularé   Ú_eval_error_tests)ré   Úparse_fns     r   Ú!test_eval_formula_error_reportingrð   �  s   € Ý7á>€HÙ˜Ô"3Õ4r   c                  ó  — ddl m}  t        j                  d«      }|j                  d   j
                  d   j                   | ddd«      k(  sJ ‚|j                  d   j
                  d   j                   | ddd«      k(  sJ ‚y )Nr   )ÚOriginrÉ   rA   rB   é   é   )Úpatsy.originrò   r   r`   rL   r   r¬   )rò   Údescs     r   Útest_formula_factor_originr÷   —  sx   € Ý#ä×!Ñ! 'Ó*€DØ×Ñ˜QÑ×'Ñ'¨Ñ*×1Ñ1±V¸GÀQÈÓ5JÒJÑJØ×Ñ˜QÑ×'Ñ'¨Ñ*×1Ñ1±V¸GÀQÈÓ5JÒJÑJÐJr   N)1Úpatsyr   rí   r   r   r   Ú
patsy.evalr   r	   Ú
patsy.utilr
   r   r   r   r   Ú__all__Úobjectr   r   r;   rH   r   re   rk   rm   rw   r€   r‡   rŠ   r�   r‘   r“   r—   r™   r§   rª   r­   r¯   r±   r³   r¶   rZ   ræ   rî   rÛ   rä   rç   rð   r÷   r"   r   r   ú<module>rý      sà  ðõ ß ?Ñ ?ß 2Ý %ß =ß 6ò -€ô+ˆ6ô +ñ\ �‹H€	ô�&ô ò
!ôU�ô UòpQò"Gô�vô ò2òòò,ò(
ò7òò7ò ò
;ò,(òLò3ò:òSòBô
5�ô 5ðtxØˆˆrˆ
ðxàˆ$�ˆðxð ˆT�2ˆJðxð ˆ$��ˆð	xð
 ˆ$�ˆðxð ˆ%�ˆðxð 
ˆE�2ˆ;ðxð 
ˆD�"ˆ:ðxð 
ˆD�"ˆ:ðxð 
ˆE�2ˆ;ðxð ˆd�BˆZðxð ˆe�Rˆ[ðxð ˆd�BˆZðxð ˆe�Rˆ[ðxð ˆd�S�Eˆ]ðxð  ˆe�c�Uˆ^ð!xð" ˆe�c�Uˆ^ñ#xð$ ˆd�S�Eˆ]ð%xð& ˆd�BˆZð'xð( ˆd�S˜#�JÐð)xð* ��s˜C�jÐ!ð+xð, �d˜S #˜JÐ'ð-xð. �t˜c 3˜ZÐ(ð/xð0 ˜$  c 
Ð+ð1xð2 �$˜˜�ð3xð4 �D˜3 ˜*Ð%ð5xð6 ˜t cÐ+?Ð%@ÐAð7xð: 7¸À¸u¸ð;xð< �tÒ/Ð0ð=xð> �T˜C Ð,Ð-ð?xð@ 
ˆD�:�,ÐðAxðB ˆd�Z�LÐ!ðCxðD �$˜ ZÐ0Ð1ðExðF �$˜ ZÐ0Ð1òGxðH �$˜˜Ð%ðIxðJ ˜DÒ"?Ð@ðKxðL �$˜˜Ð%ðMxðN ˜DÒ"?Ð@ðOxðP �$˜�ðQxðR �$˜�ðSxðT �D˜"�:ðUxðV ˜˜b�zðWxðX ˆdÒ*Ð+ðYxðZ �$Ò.Ð/ð[xð\ �DÒAÐBð]xð^ �DÒAÐBð_xð` �DÒ0Ð1ðaxðb ˜dÒ$KÐLðcxðd �DÒ0Ð1ðexðf ˜dÒ$KÐLðgxðh 
ˆD�3˜
Ð#Ð$òixðj �$Ò3Ð4ðkxðl ˜DÒ"DÐEðmxðn �$Ò5Ð6ðoxðp ˆt�c�Uˆmðqxðr Øò	
ððsxðP Øò	
ððQxðv ˆt�c�Uˆmðwxðx ��s˜C�jÐ!ðyxðz ˆdÒ*Ð+ð{xð| �%Ò/Ð0ð}xð~ ˆU�BˆKðxð@ �$˜˜c˜
Ð#ðAxðB �$˜˜D 3¨ *Ð-ðCxðD �%˜#˜  s¨C jÐ1ðExðF �e˜c˜U D¨3°¨*Ð5ðGxðH ˜%Ò!7¸ÀÀS¸zÐJðIxðJ ˆu�b˜$ Ð#òKxðL �d˜S˜E 4¨#¨s¨Ð4ðMxðP �$Ò3Ð4ðQxðR �$Ò3Ð4ðSxðT �$˜˜jÐ)Ð*ðUxðV �$Ò.Ð/ðWxðX �$Ò.Ð/ðYxðZ ˆdÒ6Ð7ð[xð\ ˆdÒ6Ð7ð]xð` ˜˜b�zðaxðb �E˜2�;ðcxðd ˜D "˜:ðexðf ��rˆ{ðgxðh �D˜3˜%�=ðixðj �d˜S˜E�]ðkxðl �d˜S˜E�]ðmxðn �e˜R�[ñox€òv'Ð òT
$ò
Rò(ò5óKr   