Ë
    /�Djšx  ã                   ó¨  — d dgZ ddlZddlZddlZddlZddlZddlZddlmZ ddl	m
Z
mZmZ ddlmZmZmZ ddlmZ d„ Z e«       Z G d	„ d
e«      Zd„ Zd„ 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$i Z% e&di e%«       ddl'Z G d„ de«      Z(d„ Z)d„ Z* G d„ de«      Z+d„ Z,d „ Z-d!„ Z.d"„ Z/d#„ Z0d$„ Z1 G d%„ d&e«      Z2d'„ Z3d(„ Z4y))ÚEvalEnvironmentÚ
EvalFactoré    N)Ú
PatsyError)ÚPushbackAdapterÚno_picklingÚassert_no_pickling)Úpretty_untokenizeÚnormalize_token_spacingÚpython_tokenize)Úcall_and_wrap_excc                  ó¾   — d} t         j                  D ]G  }t        t         |«      }|j                  «       }|�|t        j
                  kD  sŒ9| |j                  z  } ŒI | S ©Nr   )Ú
__future__Úall_feature_namesÚgetattrÚgetMandatoryReleaseÚsysÚversion_infoÚcompiler_flag)ÚflagsÚfeature_nameÚfeatureÚmrs       úNC:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\patsy/eval.pyÚ_all_future_flagsr      sa   € Ø€EÜ"×4Ñ4ò +ˆÜœ* lÓ3ˆØ×(Ñ(Ó*ˆð ˆ:˜œc×.Ñ.Ó.Ø�W×*Ñ*Ñ*‰Eð+ð €Ló    c                   ó6   — e Zd Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Ze	Z
y)	ÚVarLookupDictc                 ó,   — i gt        |«      z   | _        y ©N)ÚlistÚ_dicts)ÚselfÚdictss     r   Ú__init__zVarLookupDict.__init__/   s   € Ø�dœT %›[Ñ(ˆ�r   c                 óf   — | j                   D ]	  }	 ||   c S  t        |«      ‚# t        $ r Y Œ"w xY wr    )r"   ÚKeyError)r#   ÚkeyÚds      r   Ú__getitem__zVarLookupDict.__getitem__2   sC   € Ø—‘ò 	ˆAðØ˜‘v’ð	ô
 �s‹mÐøô ò Ùðús   ‘$¤	0¯0c                 ó(   — || j                   d   |<   y r   )r"   )r#   r(   Úvalues      r   Ú__setitem__zVarLookupDict.__setitem__:   s   € Ø#ˆ�‰�A‰�sÒr   c                 ó.   — 	 | |    y# t         $ r Y yw xY w)NTF©r'   )r#   r(   s     r   Ú__contains__zVarLookupDict.__contains__=   s'   € ð	Ø�ŠIð øô ò 	Ùð	ús   ‚ ˆ	“Nc                 ó0   — 	 | |   S # t         $ r |cY S w xY wr    r/   )r#   r(   Údefaults      r   ÚgetzVarLookupDict.getE   s%   € ð	Ø˜‘9ÐøÜò 	ØŠNð	ús   ‚ ‡”c                 óN   — | j                   j                  ›d| j                  ›d�S ©Nú(ú))Ú	__class__Ú__name__r"   ©r#   s    r   Ú__repr__zVarLookupDict.__repr__K   s   € ØŸ>™>×2Ó2°D·K³KÐ@Ð@r   r    )r9   Ú
__module__Ú__qualname__r%   r*   r-   r0   r3   r;   r   Ú__getstate__© r   r   r   r   .   s(   „ ò)òò$òóòAð �Lr   r   c                  ó^  — ddi} dddœ}t        | |g«      }|d   dk(  sJ ‚|d   dk(  sJ ‚d|v sJ ‚d|vsJ ‚dd l}|j                  t        |j                  d«       d	|d<   |d   d	k(  sJ ‚| d   dk(  sJ ‚|j                  d«      �J ‚t        t        |«      t        «      sJ ‚t        |«       y )
NÚaé   é   é   ©rA   ÚbrF   Úcr   é
   )
r   ÚpytestÚraisesr'   r*   r3   Ú
isinstanceÚreprÚstrr   )Úd1Úd2ÚdsrI   s       r   Útest_VarLookupDictrQ   Q   s¹   € Ø
ˆqˆ€BØ�qÑ	€BÜ	˜˜B�xÓ	 €BØˆc‰7�aŠ<ÑØˆc‰7�aŠ<ÑØ�"‰9ÑØ�b‰=ÑÛà
‡M�M”(˜BŸN™N¨CÔ0Ø€B€s�GØˆc‰7�bŠ=ÑØˆc‰7�aŠ<ÑØ�6‰6�#‹;ÐÑÜ”d˜2“h¤Ô$Ñ$ä�rÕr   c              #   óŠ  K  — t         j                  t         j                  t         j                  f}|t         j                  t         j
                  fz  }t        j                  t        j                  | «      «      D ]B  }t        ||«      rt        d«      ‚t        |t         j                  «      sŒ5|j                  –— ŒD y­w)z~Iterator that yields all the (ast) names in a Python expression.

    :arg code: A string containing a Python expression.
    zcLambda, list/dict/set comprehension, generator expression in patsy formula not currently supported.N)ÚastÚLambdaÚListCompÚGeneratorExpÚDictCompÚSetCompÚwalkÚparserK   r   ÚNameÚid)ÚcodeÚdisallowed_ast_nodesÚnodes      r   Ú	ast_namesr`   e   s’   è ø€ ô  ŸJ™J¬¯©´c×6FÑ6FÐGÐØœSŸ\™\¬3¯;©;Ð7Ñ7Ðä—‘œŸ™ 4›Ó)ò ˆÜ�dÐ0Ô1ÜðGóð ô �dœCŸH™HÕ%Ø—'‘'‹Mñùs   ‚B/CÂ2Cc                  ó„   — dddgfddgfdddgfddgfg} | D ]'  \  }}t        t        |«      «      t        |«      k(  rŒ'J ‚ y )Nz	np.log(x)ÚnpÚxzcenter(x + 1)Úcenterzdt.date.dt.monthÚdt)Úsetr`   )Ú	test_datar]   Úexpecteds      r   Útest_ast_namesri   y   sa   € à	�t˜S�kÐ"Ø	ˆsˆeˆØ	˜8 S˜/Ð*Ø	˜d˜VÐ$ð	€Ið $ò 5‰ˆˆhÜ”9˜T“?Ó#¤s¨8£}Ó4Ñ4ñ5r   c                  óø   — dd l } d„ }| j                  t        |d«       | j                  t        |d«       | j                  t        |d«       | j                  t        |d«       | j                  t        |d«       y )Nr   c                 ó*   — t        t        | «      «      S r    )r!   r`   ©r]   s    r   Úlist_ast_namesz7test_ast_names_disallowed_nodes.<locals>.list_ast_names‡   s   € Ü”I˜d“OÓ$Ð$r   zlambda x: x + yz[x + 1 for x in range(10)]z(x + 1 for x in range(10))z{x: True for x in range(10)}z{x + 1 for x in range(10)})rI   rJ   r   )rI   rm   s     r   Útest_ast_names_disallowed_nodesrn   „   sa   € Ûò%ð ‡M�M”*˜nÐ.?Ô@Ø
‡M�M”*˜nÐ.JÔKØ
‡M�M”*˜nÐ.JÔKØ
‡M�M”*˜nÐ.LÔMØ
‡M�M”*˜nÐ.JÕKr   c                   ón   — e Zd ZdZdd„Zed„ «       Zd„ Zdi fd„Ze	dd„«       Z
d„ Zd	„ Zd
„ Zd„ Zd„ ZeZy)r   z}Represents a Python execution environment.

    Encapsulates a namespace for variable lookup and set of __future__
    flags.c                 óJ   — |t          z  rJ ‚t        |«      | _        || _        y r    )Ú_ALL_FUTURE_FLAGSr!   Ú_namespacesr   )r#   Ú
namespacesr   s      r   r%   zEvalEnvironment.__init__—   s%   € ØÔ-Ð-Ò-Ñ-Ü 
Ó+ˆÔØˆ�
r   c                 ó,   — t        | j                  «      S )znA dict-like object that can be used to look up variables accessible
        from the encapsulated environment.)r   rr   r:   s    r   Ú	namespacezEvalEnvironment.namespaceœ   s   € ô ˜T×-Ñ-Ó.Ð.r   c                 óV   — | j                  | j                  |gz   | j                  «      S )zÉReturn a new EvalEnvironment with an extra namespace added.

        This namespace will be used only for variables that are not found in
        any existing namespace, i.e., it is "outside" them all.)r8   rr   r   )r#   Úouter_namespaces     r   Úwith_outer_namespacez$EvalEnvironment.with_outer_namespace¢   s'   € ð
 �~‰~˜d×.Ñ.°/Ð1BÑBÀDÇJÁJÓOÐOr   z<string>c                 ó|   — t        ||d| j                  d«      }t        |i t        |g| j                  z   «      «      S )at  Evaluate some Python code in the encapsulated environment.

        :arg expr: A string containing a Python expression.
        :arg source_name: A name for this string, for use in tracebacks.
        :arg inner_namespace: A dict-like object that will be checked first
          when `expr` attempts to access any variables.
        :returns: The value of `expr`.
        ÚevalF)Úcompiler   rz   r   rr   )r#   ÚexprÚsource_nameÚinner_namespacer]   s        r   rz   zEvalEnvironment.eval©   s<   € ô �t˜[¨&°$·*±*¸eÓDˆÜ�D˜"œm¨_Ð,=À×@PÑ@PÑ,PÓQÓRÐRr   c                 óx  — t        || «      r|S t        |t        j                  «      r||z   }nt        d«      ‚t	        j
                  «       }	 t        |dz   «      D ]  }|€t        d«      ‚|j                  }Œ  | |j                  |j                  g|j                  j                  t        z  «      ~S # ~w xY w)a  Capture an execution environment from the stack.

        If `eval_env` is already an :class:`EvalEnvironment`, it is returned
        unchanged. Otherwise, we walk up the stack by ``eval_env + reference``
        steps and capture that function's evaluation environment.

        For ``eval_env=0`` and ``reference=0``, the default, this captures the
        stack frame of the function that calls :meth:`capture`. If ``eval_env
        + reference`` is 1, then we capture that function's caller, etc.

        This somewhat complicated calling convention is designed to be
        convenient for functions which want to capture their caller's
        environment by default, but also allow explicit environments to be
        specified. See the second example.

        Example::

          x = 1
          this_env = EvalEnvironment.capture()
          assert this_env.namespace["x"] == 1
          def child_func():
              return EvalEnvironment.capture(1)
          this_env_from_child = child_func()
          assert this_env_from_child.namespace["x"] == 1

        Example::

          # This function can be used like:
          #   my_model(formula_like, data)
          #     -> evaluates formula_like in caller's environment
          #   my_model(formula_like, data, eval_env=1)
          #     -> evaluates formula_like in caller's caller's environment
          #   my_model(formula_like, data, eval_env=my_env)
          #     -> evaluates formula_like in environment 'my_env'
          def my_model(formula_like, data, eval_env=0):
              eval_env = EvalEnvironment.capture(eval_env, reference=1)
              return model_setup_helper(formula_like, data, eval_env)

        This is how :func:`dmatrix` works.

        .. versionadded: 0.2.0
           The ``reference`` argument.
        zWParameter 'eval_env' must be either an integer or an instance of patsy.EvalEnvironment.rB   zcall-stack is not that deep!)rK   ÚnumbersÚIntegralÚ	TypeErrorÚinspectÚcurrentframeÚrangeÚ
ValueErrorÚf_backÚf_localsÚ	f_globalsÚf_codeÚco_flagsrq   )ÚclsÚeval_envÚ	referenceÚdepthÚframeÚis         r   ÚcapturezEvalEnvironment.captureµ   s½   € ôZ �h Ô$ØˆOÜ˜¤'×"2Ñ"2Ô3Ø˜yÑ(‰Eäð;óð ô ×$Ñ$Ó&ˆð	Ü˜5 1™9Ó%ò %�Ø�=Ü$Ð%CÓDÐDØŸ™‘ð%ñ Ø—‘ §¡Ð1Ø—‘×%Ñ%Ô(9Ñ9óñ ø‘ús   ÁA%B6 Â6B9c                 ó„   ‡— t        | j                  «      Št        ˆfd„|D «       «      }t        |g| j                  «      S )zWCreates a new, flat EvalEnvironment that contains only
        the variables specified.c              3   ó,   •K  — | ]  }|‰|   f–— Œ y ­wr    r?   )Ú.0ÚnameÚvlds     €r   ú	<genexpr>z)EvalEnvironment.subset.<locals>.<genexpr>  s   øè ø€ Ò:¨D�t˜S ™YÔ'Ñ:ùs   ƒ)r   rr   Údictr   r   )r#   ÚnamesÚnew_nsr—   s      @r   ÚsubsetzEvalEnvironment.subsetý   s8   ø€ ô ˜D×,Ñ,Ó-ˆÜÓ:°EÔ:Ó:ˆÜ ˜x¨¯©Ó4Ð4r   c                 óR   — | j                   D �cg c]  }t        |«      ‘Œ c}S c c}w r    )rr   r\   )r#   Úns     r   Ú_namespace_idszEvalEnvironment._namespace_ids  s    € Ø#×/Ñ/Ö0˜!”�1•Ò0Ð0ùÒ0s   �$c                 óž   — t        |t        «      xr< | j                  |j                  k(  xr! | j                  «       |j                  «       k(  S r    )rK   r   r   rŸ   ©r#   Úothers     r   Ú__eq__zEvalEnvironment.__eq__  sG   € ä�uœoÓ.ò @Ø—
‘
˜eŸk™kÑ)ò@à×#Ñ#Ó%¨×)=Ñ)=Ó)?Ñ?ð	
r   c                 ó   — | |k(   S r    r?   r¡   s     r   Ú__ne__zEvalEnvironment.__ne__  ó   € Ø˜5‘=Ð Ð r   c                 óh   — t        t        | j                  t        | j	                  «       «      f«      S r    )Úhashr   r   ÚtuplerŸ   r:   s    r   Ú__hash__zEvalEnvironment.__hash__  s&   € Ü”_ d§j¡j´%¸×8KÑ8KÓ8MÓ2NÐOÓPÐPr   N)r   )r   r   )r9   r<   r=   Ú__doc__r%   Úpropertyru   rx   rz   Úclassmethodr’   rœ   rŸ   r£   r¥   rª   r   r>   r?   r   r   r   r   ‘   sk   „ ñó
ð
 ñ/ó ð/ò
Pð &0Àó 
Sð òEó ðEòN5ò1ò
ò!òQð �Lr   c                  ó   — d} t        «       S ©NrB   ©Ú_b)Ú_as    r   r²   r²     ó   € Ø	
€BÜ‹4€Kr   c                  ó   — d} t        «       S r¯   ©Ú_cr°   s    r   r±   r±     r³   r   c            	      óþ   — d} t         j                  «       t         j                  d«      t         j                  d«      t         j                  dd¬«      t         j                  d«      t         j                  dd«      gS )NrB   r   )rŽ   rC   ©r   r’   rµ   s    r   r¶   r¶   !  sj   € Ø	
€Bä×ÑÓ!Ü×Ñ Ó"Ü×Ñ Ó"Ü×Ñ ¨QÐÓ/Ü×Ñ Ó"Ü×Ñ  1Ó%ðð r   c                  ó:  — t        «       \  } }}}}}d| j                  v sJ ‚d|j                  v sJ ‚d|j                  v sJ ‚d|j                  v sJ ‚d|j                  v sJ ‚d|j                  v sJ ‚| j                  d   dk(  sJ ‚|j                  d   dk(  sJ ‚|j                  d   dk(  sJ ‚|j                  d   dk(  sJ ‚|j                  d   dk(  sJ ‚|j                  d   dk(  sJ ‚|j                  d   t        u sJ ‚|j                  d   t        u sJ ‚dd l}|j	                  t
        t        j                  d«       t        j                  |«      |u sJ ‚|j	                  t        t        j                  d«       t        t        j                  «       «       y )	NÚ&test_EvalEnvironment_capture_namespacer¶   rB   r±   r²   r   i@B g333333ó?)
r²   ru   r¶   rI   rJ   r†   r   r’   r‚   r   )Úc0rG   Úb1Úb2Úa1Úa2rI   s          r   rº   rº   -  sf  € Ü›DÑ€Bˆˆ2ˆr�2�rØ3°r·|±|ÑCÑCØ3°q·{±{ÑBÑBØ3°r·|±|ÑCÑCØ3°r·|±|ÑCÑCØ3°r·|±|ÑCÑCØ3°r·|±|ÑCÑCØ�<‰<˜Ñ Ò"Ñ"Ø�;‰;�tÑ Ò!Ñ!Ø�<‰<˜Ñ Ò"Ñ"Ø�<‰<˜Ñ Ò"Ñ"Ø�<‰<˜Ñ Ò"Ñ"Ø�<‰<˜Ñ Ò"Ñ"Ø�<‰<˜Ñ¤Ñ#Ñ#Ø�<‰<˜Ñ¤Ñ#Ñ#Ûà
‡M�M”*œo×5Ñ5°uÔ=ä×"Ñ" 2Ó&¨"Ñ,Ñ,à
‡M�M”)œ_×4Ñ4°cÔ:ä”×.Ñ.Ó0Õ1r   c                  óF  — d} t        t        | «      j                  }|t        z  sJ ‚d}t	        |dddd«      }t
        d„ d„ d	œ}t        |«      }t        ||«       |d
   j                  d   dk(  sJ ‚|d   j                  d   dk(  sJ ‚d|d   j                  vsJ ‚|d
   j                  t        z  dk(  sJ ‚|d   j                  t        z  dk(  sJ ‚|d   j                  t        z  dk(  sJ ‚t	        d| ›d�|z   dddd«      }t        ||«       |d
   j                  d   dk(  sJ ‚|d   j                  d   dk(  sJ ‚d|d   j                  vsJ ‚|d
   j                  t        z  |k(  sJ ‚|d   j                  t        z  dk(  sJ ‚|d   j                  t        z  |k(  sJ ‚y )NÚbarry_as_FLUFLzädef f():
    in_f = 'hi from f'
    global RETURN_INNER, RETURN_OUTER, RETURN_INNER_FROM_OUTER
    RETURN_INNER = EvalEnvironment.capture(0)
    RETURN_OUTER = call_capture_0()
    RETURN_INNER_FROM_OUTER = call_capture_1()
f()
z<test string>Úexecr   rB   c                  ó,   — t         j                  d«      S r   r¸   r?   r   r   ú<lambda>z4test_EvalEnvironment_capture_flags.<locals>.<lambda>Z  ó   € ¤/×"9Ñ"9¸!Ó"<€ r   c                  ó,   — t         j                  d«      S r¯   r¸   r?   r   r   rÄ   z4test_EvalEnvironment_capture_flags.<locals>.<lambda>[  rÅ   r   )r   Úcall_capture_0Úcall_capture_1ÚRETURN_INNERÚin_fz	hi from fÚRETURN_INNER_FROM_OUTERÚRETURN_OUTERzfrom __future__ import ú
z<test string 2>)
r   r   r   rq   r{   r   r™   rÂ   ru   r   )ÚTEST_FEATUREÚ	test_flagÚsourcer]   ÚenvÚenv2Úcode2s          r   Ú"test_EvalEnvironment_capture_flagsrÔ   H  sÝ  € ð $€LÜœ
 LÓ1×?Ñ?€IØÔ(Ò(Ñ(ð	ð ô �6˜?¨F°A°qÓ9€Dä*Ù<Ù<ñ€Cô
 �‹9€DÜˆˆs„OØˆ~Ñ×(Ñ(¨Ñ0°KÒ?Ñ?ØÐ(Ñ)×3Ñ3°FÑ;¸{ÒJÑJØ˜˜^Ñ,×6Ñ6Ñ6Ñ6Øˆ~Ñ×$Ñ$Ô'8Ñ8¸AÒ=Ñ=Øˆ~Ñ×$Ñ$Ô'8Ñ8¸AÒ=Ñ=ØÐ(Ñ)×/Ñ/Ô2CÑCÀqÒHÑHåÚ*6Ð	8¸FÑBØØØ	Ø	ó€Eô 	ˆ�ÔØ�Ñ×)Ñ)¨&Ñ1°[Ò@Ñ@ØÐ)Ñ*×4Ñ4°VÑ<ÀÒKÑKØ˜˜nÑ-×7Ñ7Ñ7Ñ7Ø�Ñ×%Ñ%Ô(9Ñ9¸YÒFÑFØ�Ñ×%Ñ%Ô(9Ñ9¸QÒ>Ñ>ØÐ)Ñ*×0Ñ0Ô3DÑDÈ	ÒQÑQÐQr   c                  ó¤  — t        ddig«      } | j                  d«      dk(  sJ ‚| j                  dddi¬«      dk(  sJ ‚dd l}|j                  t        | j                  d«       d	}t         j                  d«      }|j                  d«      d
k(  sJ ‚| j                  dd	dœ«      }|j                  d«      dk(  sJ ‚|j                  d«      d
k(  sJ ‚y )NrA   rB   z2 * arC   ©r~   é   r   z2 * brD   é   rH   rE   )r   rz   rI   rJ   Ú	NameErrorr’   rx   )rÑ   rI   rA   rÒ   Úenv3s        r   Ú#test_EvalEnvironment_eval_namespacerÛ   v  sÂ   € Ü
˜C ˜8˜*Ó
%€CØ�8‰8�GÓ Ò!Ñ!Ø�8‰8�G¨c°1¨Xˆ8Ó6¸!Ò;Ñ;Ûà
‡M�M”)˜SŸX™X wÔ/Ø	€AÜ×"Ñ" 1Ó%€DØ�9‰9�WÓ Ò"Ñ"à×#Ñ#¨"°1Ñ$5Ó6€DØ�9‰9�WÓ Ò"Ñ"Ø�9‰9�WÓ Ò"Ñ"Ð"r   c                  ó~  — dd l } t        j                  j                  }|t        z  sJ ‚t        ddigd¬«      }|j                  d«      dk(  sJ ‚| j                  t        |j                  d«       |j                  dg«      j                  dk(  sJ ‚|j                  dd	i«      j                  dk(  sJ ‚t        ddig|¬«      }|j                  d«      dk(  sJ ‚| j                  t        |j                  d«       |j                  dg«      j                  |k(  sJ ‚|j                  dd	i«      j                  |k(  sJ ‚y )
Nr   rA   é   )r   za != 0Tza <> 0rF   rH   )rI   r   rÁ   r   rq   r   rz   rJ   ÚSyntaxErrorrœ   r   rx   )rI   rÏ   rÑ   rÒ   s       r   Útest_EvalEnvironment_eval_flagsrß   †  s  € Ûô ×)Ñ)×7Ñ7€IØÔ(Ò(Ñ(ä
˜C ˜9˜+¨QÔ
/€CØ�8‰8�HÓ Ò%Ñ%Ø
‡M�M”+˜sŸx™x¨Ô2Ø�:‰:�s�eÓ×"Ñ" aÒ'Ñ'Ø×#Ñ# S¨" IÓ.×4Ñ4¸Ò9Ñ9ä˜S "˜I˜;¨iÔ8€DØ�9‰9�XÓ $Ò&Ñ&Ø
‡M�M”+˜tŸy™y¨(Ô3Ø�;‰;˜�uÓ×#Ñ# yÒ0Ñ0Ø×$Ñ$ c¨2 YÓ/×5Ñ5¸ÒBÑBÐBr   c                  óœ  — t        ddiddiddig«      } | j                  dg«      }|j                  d«      dk(  sJ ‚dd l}|j	                  t
        |j                  d«       |j	                  t
        |j                  d«       | j                  ddg«      }|j                  d«      d	k(  sJ ‚|j	                  t
        |j                  d«       y )
NrA   rB   rF   rC   rG   rD   r   zb * crØ   )r   rœ   rz   rI   rJ   rÙ   )rÑ   Úsubset_arI   Ú	subset_bcs       r   Útest_EvalEnvironment_subsetrã   ›  s¨   € Ü
˜C ˜8 c¨1 X°°Q¨xÐ8Ó
9€Cà�z‰z˜3˜%Ó €HØ�=‰=˜Ó Ò"Ñ"Ûà
‡M�M”)˜XŸ]™]¨CÔ0Ø
‡M�M”)˜XŸ]™]¨CÔ0à—
‘
˜C ˜:Ó&€IØ�>‰>˜'Ó" aÒ'Ñ'Ø
‡M�M”)˜YŸ^™^¨SÕ1r   c                  ó  — dd l } t        j                  dk\  r| j                  d«       t        j                  d«      }t        j                  d«      }||k(  sJ ‚t        |«      t        |«      k(  sJ ‚d„ } |«       } |«       }||k7  sJ ‚y )Nr   )rD   é   ze`frame.f_locals` may return write-through proxies in Python 3.13+, breaking direct comparison by ids.c                  ó,   — t         j                  d«      S r   r¸   r?   r   r   rÄ   z)test_EvalEnvironment_eq.<locals>.<lambda>¹  s   € ¤× 7Ñ 7¸Ó :€ r   )rI   r   r   Úskipr   r’   r¨   )rI   Úenv1rÒ   Úcapture_local_envrÚ   Úenv4s         r   Útest_EvalEnvironment_eqrë   ª  s…   € Ûä
×Ñ˜7Ò"Ø�‰ð1ô	
ô ×"Ñ" 1Ó%€DÜ×"Ñ" 1Ó%€DØ�4Š<ÑÜ�‹:œ˜d›Ò#Ñ#Ù:ÐÙÓ€DÙÓ€DØ�4Š<Ñˆ<r   zfrom patsy.builtins import *c                   óT   — e Zd Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ ZeZy)r   Nc                 ó2   — t        |«      | _        || _        y)a/  A factor class that executes arbitrary Python code and supports
        stateful transforms.

        :arg code: A string containing a Python expression, that will be
          evaluated to produce this factor's value.

        This is the standard factor class that is used when parsing formula
        strings and implements the standard stateful transform processing. See
        :ref:`stateful-transforms` and :ref:`expert-model-specification`.

        Two EvalFactor's are considered equal (e.g., for purposes of
        redundancy detection) if they contain the same token stream. Basically
        this means that the source code must be identical except for
        whitespace::

          assert EvalFactor("a + b") == EvalFactor("a+b")
          assert EvalFactor("a + b") != EvalFactor("b + a")
        N)r
   r]   Úorigin)r#   r]   rî   s      r   r%   zEvalFactor.__init__È  s   € ô. ,¨DÓ1ˆŒ	Øˆ�r   c                 ó   — | j                   S r    rl   r:   s    r   r–   zEvalFactor.nameâ  s   € Ø�y‰yÐr   c                 óN   — | j                   j                  ›d| j                  ›d�S r5   )r8   r9   r]   r:   s    r   r;   zEvalFactor.__repr__å  s   € ØŸ>™>×2Ó2°D·I³IÐ>Ð>r   c                 óX   — t        |t        «      xr | j                  |j                  k(  S r    )rK   r   r]   r¡   s     r   r£   zEvalFactor.__eq__è  s!   € Ü˜%¤Ó,ÒH°·±¸e¿j¹jÑ1HÐHr   c                 ó   — | |k(   S r    r?   r¡   s     r   r¥   zEvalFactor.__ne__ë  r¦   r   c                 ó8   — t        t        | j                  f«      S r    )r¨   r   r]   r:   s    r   rª   zEvalFactor.__hash__î  s   € Ü”Z §¡Ð+Ó,Ð,r   c                 ó¢  ‡‡‡— i ‰d<   ‰j                  t        «      Š‰j                  }t        | j                  «      D �cg c]	  }||v sŒ|‘Œ }}‰j                  |«      Š‰‰d<   dgŠˆˆˆfd„}t        | j                  |«      }|‰d<   t        ‰d   | j                  «      r"t        dt        ›d�t        j                  «      ‚i ‰d<   ‰d   D ]d  }t        ||«      }	t        |	«      d	k(  sJ ‚|	d   }
|
\  }}||d
z   k(  sJ ‚|j                  |dz   «      sJ ‚|dz   |t        |«      d  z   }|‰d   |<   Œf g }t        ‰d   «      }|rrt        «       }|D ]:  }|j                  |g«      }‰d   |   }t        ||«      rŒ*|j!                  |«       Œ< |sJ ‚|j#                  |«       |j%                  |«       |rŒr|‰d<   t        |«      S c c}w )NÚ
transformsr�   r   c                 óÂ   •— ‰j                   j                  | «      }t        |d«      r6d‰d   ›d| ›d�}‰dxx   dz  cc<   |j                  «       }|‰d   |<   |dz   S | S )NÚ__patsy_stateful_transform__Ú_patsy_stobjr   Ú__rB   rõ   ú
.transform)ru   r3   Úhasattrr÷   )Útokenr,   Úobj_nameÚobjr�   r‘   Ústates       €€€r   Únew_name_makerz9EvalFactor.memorize_passes_needed.<locals>.new_name_makerÿ  sl   ø€ Ø×&Ñ&×*Ñ*¨5Ó1ˆEÜ�uÐ<Õ=Ø56°q³Tº5ÐA�Ø�!“˜‘	“Ø×8Ñ8Ó:�Ø03��lÑ# HÑ-Ø ,Ñ.Ð.à�r   Ú	eval_codez2names of this form are reserved for internal use (r7   Úmemorize_coderB   rú   r6   z.memorize_chunkÚ	pass_bins)rx   Ú_builtins_dictru   r`   r]   rœ   Úreplace_bare_funcallsÚhas_bare_variable_referencer   rü   rî   Úcapture_obj_method_callsÚlenÚ
startswithrf   Ú
differenceÚaddÚdifference_updateÚappend)r#   rÿ   r�   Úenv_namespacer–   Úsubset_namesr   r  rý   Útransform_callsÚtransform_callÚtransform_call_nameÚtransform_call_coder  r  ÚunsortedÚpass_binÚ
other_objsr‘   s    ``               @r   Úmemorize_passes_neededz!EvalFactor.memorize_passes_neededñ  s  ú€ ð !ˆˆlÑà×0Ñ0´Ó@ˆØ ×*Ñ*ˆÜ)2°4·9±9Ó)=ÖW ÀÈÒAVšÐWˆÐWØ—?‘? <Ó0ˆØ$ˆˆjÑð ˆCˆö		ô *¨$¯)©)°^ÓDˆ	Ø&ˆˆkÑô ' u¨\Ñ':¸D¿I¹IÔFÝÞKPÐRÜ—‘óð ð "$ˆˆoÑØ˜lÑ+ò 	=ˆHÜ6°xÀÓKˆOÜ�Ó'¨1Ò,Ñ,Ø,¨QÑ/ˆNØ7EÑ4ÐÐ!4Ø&¨(°\Ñ*AÒAÑAØ&×1Ñ1Ð2EÈÑ2KÔLÑLàØ#ñ$à%¤cÐ*=Ó&>Ð&@ÐAñBð ð
 0=ˆE�/Ñ" 8Ò,ð	=ð: ˆ	Ü�u˜\Ñ*Ó+ˆÙÜ“uˆHØ$ò +�Ø%×0Ñ0°(°Ó<�
Ø % oÑ 6°xÑ @�Ü2°:¸}ÕMØ—L‘L Õ*ð	+ñ
 ‰OØ×&Ñ& xÔ0Ø×Ñ˜XÔ&ò ð 'ˆˆkÑä�9‹~ÐùòU Xs   Á	GÁGc                 ó\   — t        ||d   g«      }t        d| |d   j                  ||¬«      S )Nrõ   zError evaluating factorr�   rÖ   )r   r   rz   )r#   r]   Úmemorize_stateÚdatar~   s        r   Ú_evalzEvalFactor._evalD  s=   € Ü'¨¨~¸lÑ/KÐ(LÓMˆÜ Ø%ØØ˜:Ñ&×+Ñ+ØØ+ô
ð 	
r   c                 óP   — |d   |   D ]  }| j                  |d   |   ||«       Œ y )Nr  r  ©r  )r#   rÿ   Ú
which_passr  rý   s        r   Úmemorize_chunkzEvalFactor.memorize_chunkN  s7   € Ø˜kÑ*¨:Ñ6ò 	FˆHØ�J‰J�u˜_Ñ-¨hÑ7¸ÀÕEñ	Fr   c                 óJ   — |d   |   D ]  }|d   |   j                  «        Œ y )Nr  rõ   )Úmemorize_finish)r#   rÿ   r  rý   s       r   r!  zEvalFactor.memorize_finishR  s1   € Ø˜kÑ*¨:Ñ6ò 	<ˆHØ�,Ñ Ñ)×9Ñ9Õ;ñ	<r   c                 ó.   — | j                  |d   ||«      S )Nr  r  )r#   r  r  s      r   rz   zEvalFactor.evalV  s   € Ø�z‰z˜.¨Ñ5°~ÀtÓLÐLr   r    )r9   r<   r=   r%   r–   r;   r£   r¥   rª   r  r  r  r!  rz   r   r>   r?   r   r   r   r   Ç  sE   „ óò4ò?òIò!ò-òQòf
òFò<òMð �Lr   c                  ó  — t        d«      } | j                  dk(  sJ ‚| j                  «       dk(  sJ ‚t        dd¬«      }| |k(  sJ ‚t        | «      t        |«      k(  sJ ‚| j                  �J ‚|j                  dk(  sJ ‚t        | «       y )Nza+bza + bza    +bÚasdf)rî   )r   r]   r–   r¨   rî   r   )ÚeÚe2s     r   Útest_EvalFactor_basicsr'  \  sx   € Ü�5Ó€AØ�6‰6�WÒÑØ�6‰6‹8�wÒÑÜ	�I fÔ	-€BØ�Š7�NÜ�‹7”d˜2“hÒÑØ�8‰8ÐÑØ�9‰9˜ÒÑä�qÕr   c                  óþ  — ddl m}   | d„ «      } | d„ «      } | d„ «      }t        d«      }i }t        j	                  d«      }|j                  ||«      }t        |«       t        |«       |dk(  sJ ‚dD ]#  }|d	   j                  |   t        «       |   u rŒ#J ‚ d
D ]  }||d	   j                  vrŒJ ‚ |d   dddddœk(  sJ ‚|d   dk(  sJ ‚|d   dddddœk(  sJ ‚|d   t        g d¢«      t        dg«      gk(  sJ ‚y )Nr   ©Ústateful_transformc                   ó   — y)NúFOO-OBJr?   r?   r   r   rÄ   z8test_EvalFactor_memorize_passes_needed.<locals>.<lambda>l  ó   � r   c                   ó   — y)NúBAR-OBJr?   r?   r   r   rÄ   z8test_EvalFactor_memorize_passes_needed.<locals>.<lambda>m  r-  r   c                   ó   — y)NúQUUX-OBJr?   r?   r   r   rÄ   z8test_EvalFactor_memorize_passes_needed.<locals>.<lambda>n  r-  r   z!foo(x) + bar(foo(y)) + quux(z, w)rC   )ÚfooÚbarÚquuxr�   )Úwrc   ÚyÚzr%  rÿ   rõ   r,  r/  r1  )Ú_patsy_stobj0__foo__Ú_patsy_stobj1__bar__Ú_patsy_stobj2__foo__Ú_patsy_stobj3__quux__r  z�_patsy_stobj0__foo__.transform(x) + _patsy_stobj1__bar__.transform(_patsy_stobj2__foo__.transform(y)) + _patsy_stobj3__quux__.transform(z, w)r  z&_patsy_stobj0__foo__.memorize_chunk(x)zF_patsy_stobj1__bar__.memorize_chunk(_patsy_stobj2__foo__.transform(y))z&_patsy_stobj2__foo__.memorize_chunk(y)z*_patsy_stobj3__quux__.memorize_chunk(z, w)r  )r8  r:  r;  r9  )
Úpatsy.stater*  r   r   r’   r  Úprintru   Úlocalsrf   )	r*  r2  r3  r4  r%  rÿ   r�   Úpassesr–   s	            r   Ú&test_EvalFactor_memorize_passes_neededr@  i  s[  € Ý.á
Ñ.Ó
/€CÙ
Ñ.Ó
/€CÙÑ0Ó1€DÜÐ6Ó7€Aà€EÜ×&Ñ& qÓ)€HØ×%Ñ% e¨XÓ6€FÜ	ˆ&„MÜ	ˆ%„LØ�QŠ;ÑØ&ò CˆØ�ZÑ ×*Ñ*¨4Ñ0´F³H¸T±NÒBÑBðCà2ò 7ˆØ˜5 Ñ,×6Ñ6Ò6Ñ6ð7à�ÑØ )Ø )Ø )Ø!+ñ	#ò ñ ð 	ˆkÑð 3ò 	3ñð �Ñ!Ø HØ hØ HØ!Mñ	&ò ñ ð �ÑÜÒUÓVÜÐ#Ð$Ó%ð"ò ñ ð r   c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)Ú_MockTransformc                 ó.   — d| _         d| _        d| _        y r   )Ú_sumÚ_memorize_chunk_calledÚ_memorize_finish_calledr:   s    r   r%   z_MockTransform.__init__–  s   € ØˆŒ	Ø&'ˆÔ#Ø'(ˆÕ$r   c                 ó~   — | xj                   dz  c_         dd l}| xj                  |j                  |«      z  c_        y )NrB   r   )rE  ÚnumpyrD  Úsum)r#   r  rb   s      r   r  z_MockTransform.memorize_chunk›  s,   € Ø×#Ò# qÑ(Õ#Ûà�	Š	�R—V‘V˜D“\Ñ!Ž	r   c                 ó.   — | xj                   dz  c_         y r¯   )rF  r:   s    r   r!  z_MockTransform.memorize_finish¡  s   € Ø×$Ò$¨Ñ)Ö$r   c                 ó    — || j                   z
  S r    )rD  )r#   r  s     r   Ú	transformz_MockTransform.transform¤  s   € Ø�d—i‘iÑÐr   N)r9   r<   r=   r%   r  r!  rL  r?   r   r   rB  rB  ”  s   „ ò)ò
"ò*ó r   rB  c            
      ó  — ddl m}   | t        «      }t        d«      }i }t        j                  d«      }|j                  ||«      }t        |«       t        |«       |dk(  sJ ‚|d   j                  d   |u sJ ‚dD ]  }||d   j                  vrŒJ ‚ dd l	}|j                  |d|j                  ddg«      |j                  d	d
g«      dœ«       |d   d   j                  dk(  sJ ‚|d   d   j                  dk(  sJ ‚|j                  |d|j                  ddg«      |j                  ddg«      dœ«       |d   d   j                  dk(  sJ ‚|d   d   j                  dk(  sJ ‚|d   d   j                  dk(  sJ ‚|d   d   j                  dk(  sJ ‚|j                  |d«       |d   d   j                  dk(  sJ ‚|d   d   j                  dk(  sJ ‚|d   d   j                  dk(  sJ ‚|d   d   j                  dk(  sJ ‚|j                  |d|j                  ddg«      |j                  d	d
g«      dœ«       |j                  |d|j                  ddg«      |j                  ddg«      dœ«       |j                  |d«       |d   j                  «       D ]$  }|j                  dk(  sJ ‚|j                  dk(  rŒ$J ‚ |j!                  |j#                  ||j                  g d¢«      |j                  g d¢«      dœ«      g d¢k(  «      sJ ‚y )Nr   r)  zfoo(x) + foo(foo(y))rC   r�   r2  )rc   r6  r%  rÿ   rB   rH   rÝ   )rc   r6  rõ   r8  r:  é   éöÿÿÿéd   rD   Ú_patsy_stobj1__foo__)rB   rC   rN  rO  )rH   rÝ   rP  rD   )éþ   é   ic  éì   )r<  r*  rB  r   r   r’   r  r=  ru   rH  r  ÚarrayrE  rF  r!  ÚvaluesÚallrz   )	r*  r2  r%  rÿ   r�   r?  r–   rb   rL  s	            r   Útest_EvalFactor_end_to_endrX  ¨  s'  € Ý.á
œ^Ó
,€CÜÐ)Ó*€AØ€EÜ×&Ñ& qÓ)€HØ×%Ñ% e¨XÓ6€FÜ	ˆ&„MÜ	ˆ%„LØ�QŠ;ÑØ�Ñ×&Ñ& uÑ-°Ñ4Ñ4Ø(ò 7ˆØ˜5 Ñ,×6Ñ6Ò6Ñ6ð7ãà×Ñ�U˜A R§X¡X¨q°!¨fÓ%5¸B¿H¹HÀbÈ"ÀXÓ<NÑOÔPØ�ÑÐ5Ñ6×MÑMÐQRÒRÑRØ�ÑÐ5Ñ6×MÑMÐQRÒRÑRØ×Ñ�U˜A R§X¡X¨r°3¨iÓ%8¸r¿x¹xÈÈaÈÓ?QÑRÔSØ�ÑÐ5Ñ6×MÑMÐQRÒRÑRØ�ÑÐ5Ñ6×MÑMÐQRÒRÑRØ�ÑÐ5Ñ6×NÑNÐRSÒSÑSØ�ÑÐ5Ñ6×NÑNÐRSÒSÑSØ×Ñ�e˜QÔØ�ÑÐ5Ñ6×NÑNÐRSÒSÑSØ�ÑÐ5Ñ6×NÑNÐRSÒSÑSØ�ÑÐ5Ñ6×MÑMÐQRÒRÑRØ�ÑÐ5Ñ6×NÑNÐRSÒSÑSØ×Ñ�U˜A R§X¡X¨q°!¨fÓ%5¸B¿H¹HÀbÈ"ÀXÓ<NÑOÔPØ×Ñ�U˜A R§X¡X¨r°3¨iÓ%8¸r¿x¹xÈÈaÈÓ?QÑRÔSØ×Ñ�e˜QÔØ˜<Ñ(×/Ñ/Ó1ò 6ˆ	Ø×/Ñ/°1Ò4Ñ4Ø×0Ñ0°AÓ5Ñ5ð6ð �6‰6Ø	�‰ˆu˜BŸH™H¢_Ó5¸B¿H¹HÒEUÓ<VÑWÓXÚñ	 ôñ ð r   c              #   ó  K  — d}t        t        | «      «      }|D ]b  \  }}}i }| xr |t        j                  k(  |d<   |d   xr( |j	                  «       xr |j                  «       d   dk(  |d<   ||||f–— |dk(  }Œd y ­w)NFÚbare_refrB   r6   Úbare_funcallú.)r   r   ÚtokenizeÚNAMEÚhas_moreÚpeek)r]   Úprev_was_dotÚitÚ
token_typerü   rî   Úpropss          r   Úannotated_tokensre  Ú  s›   è ø€ Ø€LÜ	œ¨Ó.Ó	/€BØ%'ò $Ñ!ˆ
�E˜6ØˆØ ,Ð,ÒL°¼x¿}¹}Ñ1LˆˆjÑà�*ÑÒG "§+¡+£-ÒG°B·G±G³I¸a±LÀCÑ4Gð 	ˆnÑð ˜5 &¨%Ð0Ò0Ø ‘|‰ñ$ùs   ‚A?Bc                  ó  — t        d«      D � ���cg c]  \  } }}}| ||f‘Œ }}}} }|t        j                  ddddœft        j                  ddddœft        j                  ddddœft        j                  ddddœft        j                  d	dddœft        j                  d
dddœft        j                  ddddœft        j                  ddddœfgk(  sJ ‚t	        t        t        d«      «      «      dk(  sJ ‚y c c}}}} w )Nz
a(b) + c.drA   T)rZ  r[  r6   FrF   r7   ú+rG   r\  r)   rc   rB   )re  r]  r^  ÚOPr  r!   )rc  rü   rî   rd  Útokens_without_originss        r   Útest_annotated_tokensrj  ç  s  € ô 4DÀLÓ3Q÷ñ á.ˆZ˜ ¨ð 
�U˜EÒ"ðÐó ð "Ü	�‰˜¨$ÀÑEÐFÜ	�‰�c¨¸uÑEÐFÜ	�‰˜¨$ÀÑFÐGÜ	�‰�c¨¸uÑEÐFÜ	�‰�c¨¸uÑEÐFÜ	�‰˜¨$ÀÑFÐGÜ	�‰�c¨¸uÑEÐFÜ	�‰˜¨%ÀÑGÐHð	&ò 	ñ 	ô ŒtÔ$ SÓ)Ó*Ó+¨qÒ0Ñ0Ð0ùõ!s   ‘C9
c                 óF   — t        |«      D ]  \  }}}}|d   sŒ|| v sŒ y y)NrZ  TF)re  )rš   r]   Ú_rü   rd  s        r   r  r  û  s5   € Ü.¨tÓ4ò Ñˆˆ5�!�UØ�Ó ¨%¢Ùðð r   c                 ó�   — g }t        | «      D ],  \  }}}}|d   r|d   r ||«      }|j                  ||f«       Œ. t        |«      S )NrZ  r[  )re  r  r	   )r]   ÚreplacerÚtokensrc  rü   rî   rd  s          r   r  r    sZ   € Ø€FÜ,<¸TÓ,Bò +Ñ(ˆ
�E˜6 5Ø�Ò  ~Ò!6Ù˜U“OˆEØ�‰�z 5Ð)Õ*ð+ô ˜VÓ$Ð$r   c                  ó‚   ‡— d„ Šˆfd„}  | dd«        | dd«        | dd«        | dd«        | d	d	«        | d
d«       y )Nc                 ó,   — dddœj                  | | «      S )NrF   z_internal.foo.process)rA   r2  )r3   )rü   s    r   Ú	replacer1z-test_replace_bare_funcalls.<locals>.replacer1  s   € ØÐ!8Ñ9×=Ñ=¸eÀUÓKÐKr   c                 ój   •— t        | ‰«      }t        | ›d|›�«       t        d|›d�«       ||k(  sJ ‚y )Nz -> z(wanted r7   )r  r=  )r]   rh   Úreplacedrr  s      €r   Út1z&test_replace_bare_funcalls.<locals>.t1  s5   ø€ Ü(¨¨yÓ9ˆÜšD¡(Ð+Ô,ÝšxÐ)Ô*Ø˜8Ò#Ñ#Ð#r   zfoobar()za()zb()z
foobar.a()zfoo()z_internal.foo.process()za + 1zb() + a() * x[foo(2 ** 3)]z,b() + b() * x[_internal.foo.process(2 ** 3)]r?   )ru  rr  s    @r   Útest_replace_bare_funcallsrv    sO   ø€ òLô$ñ €z�:ÔÙ€uˆeÔÙ€|�\Ô"Ù€wÐ)Ô*Ù€w�ÔÙÐ#Ð%SÕTr   c                   ó   — e Zd Zd„ Zd„ Zy)Ú_FuncallCapturerc                 óR   — |g| _         ||fg| _        d| _        d| _        d| _        y )Nr   F)Úfuncro  Úparen_depthÚstartedÚdone)r#   Ústart_token_typeÚstart_tokens      r   r%   z_FuncallCapturer.__init__  s0   € Ø �MˆŒ	Ø(¨+Ð6Ð7ˆŒØˆÔØˆŒØˆ�	r   c                 óÂ  — | j                   ry | j                  j                  ||f«       |dv r| xj                  dz  c_        |dv r| xj                  dz  c_        | j                  dk\  sJ ‚| j                  sB|dk(  rd| _        n5|t
        j                  k(  s|dk(  sJ ‚| j                  j                  |«       | j                  r| j                  dk(  rd| _         y y y )N)r6   ú{ú[rB   )r7   ú}ú]r   r6   Tr\  )r}  ro  r  r{  r|  r]  r^  rz  )r#   rc  rü   s      r   Ú	add_tokenz_FuncallCapturer.add_token&  sÄ   € Ø�9Š9ØØ�‰×Ñ˜J¨Ð.Ô/Ø�OÑ#Ø×Ò Ñ!ÕØ�OÑ#Ø×Ò Ñ!ÕØ×Ñ 1Ò$Ñ$Ø�|Š|Ø˜Š|Ø#�•à!¤X§]¡]Ò2°e¸s²lÑBØ—	‘	× Ñ  Ô'Ø�<Š<˜D×,Ñ,°Ò1ØˆD�Ið 2ˆ<r   N)r9   r<   r=   r%   r…  r?   r   r   rx  rx    s   „ òór   rx  c                 ó6  — g }t        |«      D ]G  \  }}}}|D ]  }|j                  ||«       Œ |d   sŒ'|| k(  sŒ-|j                  t        ||«      «       ŒI |D �cg c]2  }dj	                  |j
                  «      t        |j                  «      f‘Œ4 c}S c c}w )NrZ  Ú )re  r…  r  rx  Újoinrz  r	   ro  )rý   r]   Ú	capturersrc  rü   rî   rd  Úcapturers           r   r  r  ;  s¨   € Ø€IÜ,<¸TÓ,Bò BÑ(ˆ
�E˜6 5Ø!ò 	2ˆHØ×Ñ˜z¨5Õ1ð	2à�Ó ¨(Ó!2Ø×ÑÔ-¨j¸%Ó@ÕAð	Bð "öàð 
�‰�—‘Ó	Ô!2°8·?±?Ó!CÒDòð ùò s   Á7Bc                  ó–   — t        dd«      dgk(  sJ ‚t        dd«      dgk(  sJ ‚t        dd«      ddgk(  sJ ‚t        d	d
«      dgk(  sJ ‚y )Nr2  za + foo.baz(bar) + b.c(d))úfoo.bazzfoo.baz(bar)rF   )zb.czb.c(d)úfoo.bar(foo.baz(quux)))zfoo.barr�  )rŒ  zfoo.baz(quux)r3  zfoo[bar.baz(x(z[asdf])) ** 2])zbar.bazzbar.baz(x(z[asdf])))r  r?   r   r   Útest_capture_obj_method_callsrŽ  H  sˆ   € Ü# EÐ+FÓGØ#ðLò ñ ô $ CÐ)DÓEØðJò ñ ô $ EÐ+CÓDØ-Ø$ðIò ñ ô $ EÐ+JÓKØ*ðPò ñ ð r   )5Ú__all__r   r   rƒ   r]  rS   r€   Úpatsyr   Ú
patsy.utilr   r   r   Úpatsy.tokensr	   r
   r   Úpatsy.compatr   r   rq   Úobjectr   rQ   r`   ri   rn   r   r²   r±   r¶   rº   rÔ   rÛ   rß   rã   rë   r  rÂ   Úpatsy.builtinsr   r'  r@  rB  rX  re  rj  r  r  rv  rx  r  rŽ  r?   r   r   ú<module>r–     s  ðð ˜lÐ
+€ã Û 
Û Û Û 
Û Ý ß GÑ Gß TÑ TÝ *ò
ñ &Ó'Ð ô �Fô  òFò(ò(5ò
LôC�fô CòLò
ò
	ò2ò6+Rò\#ò Cò*2òð* €Ù Ð# R¨Ô 8ó ôR�ô Ròj
ò(ôV �Vô  ò(/òd
$ò1ò(ò%òUô$�vô ò<
ór   