Ë
    Ç[;jÄ‘ ã                   ód  — d dl Z  e j                  dIi de“de“de“de“de“de“de“d	e“d
e“de“de“de“de“de“de“de“de“de“Ž d dlZd dlZd dlZd dlZd dlmZm	Z	 d dl
mZ ddlmZ ddlmZmZ eefZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd lmZ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& d&„ Z'ejP                  ejR                  ffd'„Z*d(„ Z+d)„ Z,d*„ Z-d+e.fd,„Z/ G d-„ d.ej`                  «      Z1d/„ Z2d0„ Z3 G d1„ d2ejh                  «      Z5 G d3„ d4ejh                  «      Z6 G d5„ d6ejn                  e%«      Z8 G d7„ d8ejn                  «      Z9 G d9„ d:ejh                  «      Z: G d;„ d<ejv                  ejh                  «      Z< G d=„ d>ejv                  ejz                  «      Z>d?„ Z? ej€                  d@dA«      ZA ej€                  dBdA«      ZB G dC„ dDejn                  e%«      ZC G dE„ dFejh                  ejv                  «      ZD G dG„ dHejŠ                  «      ZFy)Jé    NÚUtilityCodeÚEncodedStringÚbytes_literalÚencoded_stringÚNodesÚ	ExprNodesÚ
PyrexTypesÚBuiltinÚ	UtilNodesÚOptionsÚUtilsÚreÚcopyÚcodecsÚ	itertoolsÚ
attrgetterÚpartialÚreduce)r   r   )r   é   )Ú	TypeSlots)ÚUnicodeNodeÚnot_a_constant)r   )r   )r	   )ÚVisitor)r
   )r   )r   )r   ÚTempitaUtilityCode)r   r   r   )ÚerrorÚwarning)ÚSkipDeclarationsé   )r   c                 ó.   — t        j                  | d«      S )Nú
Optimize.c)r   Úload_cached)Únames    úaG:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\Cython/Compiler/Optimize.pyÚload_c_utilityr$   %   s   € Ü×"Ñ" 4¨Ó6Ð6ó    c                 ó6   — t        | |«      r| j                  S | S ©N)Ú
isinstanceÚarg)ÚnodeÚcoercion_nodess     r#   Úunwrap_coerced_noder,   )   s   € Ü�$˜Ô'Ø�x‰xˆØ€Kr%   c                 óˆ   — t        | t        j                  «      r'| j                  } t        | t        j                  «      rŒ'| S r'   )r(   r   ÚResultRefNodeÚ
expression©r*   s    r#   Úunwrap_noder1   /   s2   € Ü
�Tœ9×2Ñ2Ô
3Ø�‰ˆô �Tœ9×2Ñ2Õ
3à€Kr%   c                 óÆ  — t        | «      } t        |«      }t        | t        j                  «      r3t        |t        j                  «      r| j                  |j                  k(  S t        | t        j
                  «      rdt        |t        j
                  «      rJ| j                   xr; t        | j                  |j                  «      xr | j                  |j                  k(  S y©NF)
r1   r(   r   ÚNameNoder"   ÚAttributeNodeÚ
is_py_attrÚis_common_valueÚobjÚ	attribute)ÚaÚbs     r#   r7   r7   5   sž   € Ü�A‹€AÜ�A‹€AÜ�!”Y×'Ñ'Ô(¬Z¸¼9×;MÑ;MÔ-NØ�v‰v˜Ÿ™ÑÐÜ�!”Y×,Ñ,Ô-´*¸QÄ	×@WÑ@WÔ2XØ—<‘<ÐÒ`¤O°A·E±E¸1¿5¹5Ó$AÒ`ÀaÇkÁkÐUV×U`ÑU`ÑF`Ð`Ør%   c                 ó$   — | �| j                   €y | S r'   )Úconstant_resultr0   s    r#   Úfilter_none_noder>   ?   s   € ØÐ˜D×0Ñ0Ð8ØØ€Kr%   Úunion_type_nodesc                 ó6  ‡‡— t         j                  Šˆˆfd„Šg }d }| d d d…   }|rð|j                  «       }t        |‰«      rÀt	         ‰|«      «      }t        |«      dk(  r¡|j                  «       t        j                  u r�|j                  j                  r|€(|j                  }n|j                  |j                  «       |j                  j                  r|€(|j                  }n|j                  |j                  «       ŒÞ|j                  |«       |rŒð||fS )Nc              3   óÎ   •K  — t        | ‰«      r5 ‰| j                  «      E d {  –—†   ‰| j                  «      E d {  –—†  y | j                  s| j                  –— y y 7 Œ;7 Œ#­wr'   )r(   Úoperand1Úoperand2Úis_noneÚtype)Ú	tree_nodeÚBitwiseOrNodeÚcollect_tree_typess    €€r#   rH   z4_unpack_union_type_nodes.<locals>.collect_tree_typesI   sZ   øè ø€ Ü�i Ô/Ù)¨)×*<Ñ*<Ó=×=Ð=Ù)¨)×*<Ñ*<Ó=×=Ñ=Ø×"Ò"Ø—.‘.Ó ð #ð >øØ=ús    ƒ"A%¥A!¦A%¿A#Á "A%Á#A%éÿÿÿÿr   )r   rG   Úpopr(   ÚsetÚlenr
   Ú	type_typerC   rD   ÚappendrB   )r?   ÚtypesÚallowed_none_nodeÚ
type_stackÚtpÚtype_setrG   rH   s         @@r#   Ú_unpack_union_type_nodesrT   E   sø   ù€ ä×+Ñ+€Mõ!ð €EØÐà!¡$ B $Ñ'€JÙ
Ø�^‰^ÓˆÜ�b˜-Ô(ô Ñ-¨bÓ1Ó2ˆHÜ�8‹} Ò! h§l¡l£n¼×8IÑ8IÑ&IØ—;‘;×&Ò&Ø(Ð0Ø,.¯K©KÑ)à×%Ñ% b§k¡kÔ2Ø—;‘;×&Ò&Ø(Ð0Ø,.¯K©KÑ)à×%Ñ% b§k¡kÔ2ØØ�‰�RÔò% ð( Ð#Ð#Ð#r%   c                   ó`   — e Zd ZdZd„ Zej                  j                  Zd„ Z	d„ Z
d„ Zd„ Zd„ Zy)	Ú_YieldNodeCollectorz9
    YieldExprNode finder for generator expressions.
    c                 ó^   — t         j                  j                  | «       i | _        g | _        y r'   )r   ÚTreeVisitorÚ__init__Úyield_stat_nodesÚyield_nodes)Úselfs    r#   rY   z_YieldNodeCollector.__init__o   s&   € Ü×Ñ×$Ñ$ TÔ*Ø "ˆÔØˆÕr%   c                 ó\   — | j                   j                  |«       | j                  |«       y r'   )r[   rN   Úvisitchildren©r\   r*   s     r#   Úvisit_YieldExprNodez'_YieldNodeCollector.visit_YieldExprNodev   s$   € Ø×Ñ×Ñ Ô%Ø×Ñ˜4Õ r%   c                 óŠ   — | j                  |«       |j                  | j                  v r|| j                  |j                  <   y y r'   )r^   Úexprr[   rZ   r_   s     r#   Úvisit_ExprStatNodez&_YieldNodeCollector.visit_ExprStatNodez   s;   € Ø×Ñ˜4Ô Ø�9‰9˜×(Ñ(Ñ(Ø/3ˆD×!Ñ! $§)¡)Ò,ð )r%   c                  ó   — y r'   © r_   s     r#   Úvisit_GeneratorExpressionNodez1_YieldNodeCollector.visit_GeneratorExpressionNode�   ó   € Ør%   c                  ó   — y r'   re   r_   s     r#   Úvisit_LambdaNodez$_YieldNodeCollector.visit_LambdaNode„   rg   r%   c                  ó   — y r'   re   r_   s     r#   Úvisit_FuncDefNodez%_YieldNodeCollector.visit_FuncDefNode‡   rg   r%   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rY   r   rX   r^   Ú
visit_Noder`   rc   rf   ri   rk   re   r%   r#   rV   rV   k   s8   „ ñòð
 ×$Ñ$×2Ñ2€Jò!ò4òòór%   rV   c                 ó@   — t        | «      }t        |«      dk7  ry|d   S )Nr   )NNr   )Ú_find_yield_statementsrL   )r*   Úyield_statementss     r#   Ú_find_single_yield_expressionrt   ‹   s)   € Ü-¨dÓ3ÐÜ
ÐÓ Ò!ØØ˜AÑÐr%   c                 óÐ   — t        «       }|j                  | «       	 |j                  D �cg c]  }|j                  |j                  |   f‘Œ }}|S c c}w # t
        $ r g }Y |S w xY wr'   )rV   r^   r[   r)   rZ   ÚKeyError)r*   Ú	collectorÚ
yield_noders   s       r#   rr   rr   ’   sƒ   € Ü#Ó%€IØ×Ñ˜DÔ!ðð (×3Ò3ó
á3�
ð �^‰^˜Y×7Ñ7¸
ÑCÒDØ3ð 	ð 
ð Ðùò
øô ò àÑØÐðús"   �A «"AÁA ÁA ÁA%Á$A%c                   óì  — e Zd ZdZd„ Zd„ Zd!d„Zd„ Zd!d„Z e	j                  e	j                   e	j                  dej                  d«      gd	¬
«      Z e	j                  e	j                    e	j                  dej                  d«      gd¬
«      Zd!d„Z e	j                  e	j&                   e	j                  de	j(                  d«       e	j                  de	j*                  d«       e	j                  de	j                   d«      g«      Z e	j                  e	j(                   e	j                  de	j.                  d«       e	j                  de	j0                  d«       e	j                  de	j2                  d«       e	j                  de	j4                  d«      gd¬
«      Zd!d„Zd!d„Zd„ Zd„ Zd!d„Z d„ Z!d„ Z" e	j                  e	j.                   e	j                  de	j.                  d«       e	j                  de	j(                  d«       e	j                  de	j.                  d«       e	j                  de	j0                  d«       e	j                  de	j4                  d«      g«      Z# e	j                  e	j.                   e	j                  de	j.                  d«       e	j                  de	j(                  d«       e	j                  de	j0                  d«       e	j                  de	j4                  d«      g«      Z$d „ Z%y)"ÚIterationTransforma   Transform some common for-in loop patterns into efficient C loops:

    - for-in-dict loop becomes a while loop calling PyDict_Next()
    - for-in-enumerate is replaced by an external counter variable
    - for-in-range loop becomes a plain C for loop
    c                 óæ  — |j                  «       �rN|j                  }t        j                  |«      }|j                  j
                  r+|j                  j                  j                  j                  }n |j                  j                  j                  }t        j                  |«      }|j                  |«      }t        j                  |d|j                  |¬«      }t        j                  |t        j                   ||t        j"                  |d¬«      ¬«      t        j$                  |«      g¬«      }t        j&                  |t        j(                  |||¬«      gd ¬«      }	t        j*                  ||gt        j,                  ||t        j.                  |j                  j                  |j                  ¬	«      |	t        j                   ||t        j"                  |d
¬«      ¬«      ¬«      ¬«      }
|
j1                  | j3                  «       «      }
| j5                  |
«      }
t        j6                  ||
«      }|j8                  dk(  rt        j:                  ||¬«      }|S | j=                  |«       |S )Nú==©ÚoperatorrB   rC   T©Úvalue©ÚlhsÚrhs©Ústats©Ú	conditionÚbody©Ú
if_clausesÚelse_clause)ÚsequenceF)ÚtargetÚiteratorrˆ   r‹   ©Útempsrˆ   Únot_in©Úoperand)Úis_ptr_containsÚposr   r.   rC   Úis_subscriptÚbaserE   Ú	base_typeÚ
TempHandleÚrefr   ÚPrimaryCmpNoderB   r   ÚStatListNodeÚSingleAssignmentNodeÚBoolNodeÚBreakStatNodeÚ
IfStatNodeÚIfClauseNodeÚTempsBlockNodeÚForInStatNodeÚIteratorNodeÚanalyse_expressionsÚcurrent_envÚvisitÚTempResultFromStatNoder~   ÚNotNoder^   )r\   r*   r•   Ú
result_refr˜   Útarget_handler�   Úcmp_nodeÚif_bodyÚif_nodeÚfor_loopÚnew_nodes               r#   Úvisit_PrimaryCmpNodez'IterationTransform.visit_PrimaryCmpNode§   s  € Ø×ÑÕ!ð —(‘(ˆCÜ"×0Ñ0°Ó6ˆJØ�}‰}×)Ò)Ø ŸM™M×.Ñ.×3Ñ3×=Ñ=‘	à ŸM™M×.Ñ.×8Ñ8�	Ü%×0Ñ0°Ó;ˆMØ"×&Ñ& sÓ+ˆFÜ ×/Ñ/Ø˜d¨T¯]©]ÀVôMˆHä×(Ñ(ØÜ×3Ñ3°C¸ZÌY×M_ÑM_Ð`cÐkoÔMpÔqÜ×,Ñ,¨SÓ1ð3ô4ˆGô ×&Ñ&ØÜ!×.Ñ.¨s¸hÈWÔUÐVØ ô"ˆGô !×/Ñ/ØØ&˜Ü×*Ñ*ØØ!Ü&×3Ñ3°D·M±M×4EÑ4EÐPT×P]ÑP]Ô^Ø Ü %× :Ñ :Ø ´×1CÑ1CÀCÈuÔ1Uô!WôXô	YˆHð  ×3Ñ3°D×4DÑ4DÓ4FÓGˆHØ—z‘z (Ó+ˆHÜ ×7Ñ7¸
ÀHÓMˆHà�}‰} Ò(Ü$×,Ñ,¨S¸(ÔC�ØˆOð ×Ñ˜tÔ$ØˆKr%   c                 óp   — | j                  |«       | j                  ||j                  j                  «      S r'   )r^   Ú_optimise_for_looprŽ   rŒ   r_   s     r#   Úvisit_ForInStatNodez&IterationTransform.visit_ForInStatNodeÙ   s-   € Ø×Ñ˜4Ô Ø×&Ñ& t¨T¯]©]×-CÑ-CÓDÐDr%   c           	      ó�  — |j                   }d }|j                  s|j                  rZ|j                  rN|j                  j                  r8|j                  j                  j
                  }|j                  r|j                  }t        j                  ||fv r|r|S | j                  ||d dd¬«      S t        j                  ||fv st        j                  ||fv r|r|S | j                  ||«      S | j                  «       }|j                  s|j                   r| j#                  |||¬«      S |j$                  rÓ|j&                  sÇt)        j*                  |||¬«      }|r­|j,                  s¡t/        d„ |j0                  D «       «      s…t)        j2                  |j4                  |j0                  ¬«      j7                  |«      j9                  t;        j<                  |t?        |j0                  «      «      |«      }| j#                  |||¬«      S |j@                  �r'|j&                  �s|t        jB                  u r+t:        jD                  }tG        tH        |jJ                  «      }	nt:        jL                  }|jJ                  }	tO        t(        jP                  jR                  |j4                  |¬«      }
t)        j2                  |j4                  |	D �cg c]
  } |
|«      ‘Œ c}¬«      }|j7                  |«      j9                  t;        j<                  |t?        |j0                  «      «      |«      }| j#                  |||¬«      S |t        jT                  u r5|j&                  r| jW                  ||d|¬	«      S | jY                  |||¬«      S |t        jB                  u r| j[                  |||¬«      S |t        j\                  u r| jW                  ||d|¬	«      S t_        |t(        j`                  «      r?|jb                  j                   jd                  r| jW                  ||jb                  d|¬	«      S t_        |t(        jf                  «      s|S |j0                  €2|jh                  xr t?        |jh                  j0                  «      xs d
}n(t?        |j0                  «      }|r|jj                  �|dz  }|jl                  }|j                  �r	|�s|�s|jj                  xs |jn                  }|jp                  }| js                  «       jt                  jv                  dk\  }|si|dv ret_        |t(        jx                  «      rK|jl                  }|j                  r3|jz                  dk(  r$|j                  r|j                  j|                  rd}dx}}|dk(  s|r|dk(  rd}n|dk(  s|r|dk(  rd}n|dk(  s|r	|dk(  rdx}}|s|r| j                  |||||«      S |jj                  €x|j                  rl|j                  r`|j                  j|                  rJ|jz                  dk(  r|r|S | j                  ||«      S |jz                  dk(  r|r|S | j�                  ||«      S t‚        j„                  �r_d|cxk  rdk  �rSn |S |jj                  �€B|j                  �r5|jz                  dv �r&|j                  �r|j                  j|                  �r|j†                  j                   jˆ                  s |j†                  j                   jŠ                  r| j�                  |||¬«      S |j†                  j                   j,                  rŽ|j0                  €|jh                  j0                  n|j0                  D ]I  }t_        |t(        jP                  «      r+|j�                  «       rd|j�                  cxk  rdk  rn  |S ŒH |S  | j�                  |||¬«      S |S c c}w )NTF)Údict_objÚmethodÚkeysÚvalues©Úreversed)Úseq_typec              3   ó4   K  — | ]  }|j                   –— Œ y ­wr'   )Ú
is_starred)Ú.0Úitems     r#   Ú	<genexpr>z8IterationTransform._optimise_for_loop.<locals>.<genexpr>þ   s   è ø€ ÐBmÑ_lÐW[À4Ç?Å?Ñ_lùó   ‚©Úargs©rE   )Ú
is_mutabler»   r   r   é   )r¸   r¹   ÚitemsÚdictÚiterkeysr¸   Ú
itervaluesr¹   Ú	iteritemsrÈ   Ú	enumerater»   )ÚrangeÚxrangeé   Àé   @)IrE   Úis_nameÚis_attributeÚentryÚ
annotationrb   r–   r—   r
   Ú	dict_typeÚ_transform_dict_iterationÚset_typeÚfrozenset_typeÚ_transform_set_iterationr¦   Úis_ptrÚis_arrayÚ_transform_carray_iterationÚis_sequence_constructorÚis_generator_scoper   Úinfer_sequence_item_typeÚis_pyobjectÚanyrÄ   ÚListNoder•   Úanalyse_typesÚ	coerce_tor	   Úc_array_typerL   Úis_string_literalÚunicode_typeÚc_py_ucs4_typeÚmapÚordr€   Úc_uchar_typer   ÚIntNodeÚfor_intÚ
bytes_typeÚ_transform_indexable_iterationÚ_transform_bytes_iterationÚ_transform_unicode_iterationÚbytearray_typer(   ÚCoerceToPyTypeNoder)   Úis_memoryviewsliceÚSimpleCallNodeÚ	arg_tupler\   Úfunctionr8   r9   Úglobal_scopeÚcontextÚlanguage_levelÚCallNoder"   Ú
is_builtinÚ_transform_enumerate_iterationÚ_transform_reversed_iterationr   Úconvert_ranger�   Úis_intÚis_enumÚ_transform_range_iterationÚhas_constant_resultr=   )r\   r*   Úiterabler»   Ú	iter_typeÚannotation_typerÕ   ÚenvÚ	item_typerÈ   Úas_int_nodeÚchÚ	arg_countrø   Úbase_objr·   Úis_safe_iterÚinner_functionr¸   r¹   r)   s                        r#   r³   z%IterationTransform._optimise_for_loopÝ   sÐ  € Ø—M‘Mˆ	ØˆØ×Ò × 5Ò 5¸8¿>º>ÈhÏnÉn×NgÒNgØ!Ÿ™×2Ñ2×7Ñ7ˆJØ×&Ò&Ø'Ÿ_™_�
ä×Ñ ¨OÐ <Ñ<áà�Ø×1Ñ1Ø˜x°¸4Èð 2ó Oð Oô ×Ñ ¨OÐ <Ñ<Ü×&Ñ&¨9°oÐ*FÑFÙà�Ø×0Ñ0°°xÓ@Ð@à×ÑÓ ˆð ×Ò˜y×1Ò1Ø×3Ñ3°D¸(ÈXÐ3ÓVÐVØ×+Ò+°C×4JÒ4Jô "×:Ñ:Ø�X¨	ô3ˆIá ×!6Ò!6¼sÑBmÐ_g×_lÒ_lÓBmÔ?mÜ$×-Ñ-¨h¯l©lÀÇÁÔO×]Ñ]Ð^aÓb×lÑlÜ×+Ñ+¨I´s¸8¿=¹=Ó7IÓJÈCóQ�à×7Ñ7¸¸hÐQYÐ7ÓZÐZØ×%Ó%¨c×.DÓ.Dð œG×0Ñ0Ñ0Ü&×5Ñ5�	ÜœC §¡Ó0‘ä&×3Ñ3�	Ø Ÿ™�ä!¤)×"3Ñ"3×";Ñ";¸X¿\¹\ÐPYÔZˆKÜ ×)Ñ)¨(¯,©,ÑW\Ó=]ÑW\ÐQS¹kÈ"½oÐW\Ñ=]Ô^ˆHØ×-Ñ-¨cÓ2×<Ñ<¼Z×=TÑ=TÐU^Ô`cÐdl×dqÑdqÓ`rÓ=sÐuxÓyˆHØ×3Ñ3°D¸(ÈXÐ3ÓVÐVØœ×*Ñ*Ñ*Ø×%Ò%Ø×:Ñ:¸4ÀÐV[ÐfnÐ:ÓoÐoà×6Ñ6°t¸XÐPXÐ6ÓYÐYØœ×,Ñ,Ñ,Ø×4Ñ4°T¸8ÈhÐ4ÓWÐWð œ×.Ñ.Ñ.Ø×6Ñ6°t¸XÐRVÐaiÐ6ÓjÐjÜ�h¤	× <Ñ <Ô=À(Ç,Á,×BSÑBS×BfÒBfØ×6Ñ6°t¸X¿\¹\ÐV[ÐfnÐ6ÓoÐoô ˜(¤I×$<Ñ$<Ô=ØˆKà�=‰=Ð Ø ×*Ñ*ÒK¬s°8×3EÑ3E×3JÑ3JÓ/KÒPÈq‰Iä˜HŸM™MÓ*ˆIÙ˜XŸ]™]Ð6Ø˜Q‘�	à×$Ñ$ˆà× Ó ªº)Ø—}‘}Ò4¨¯©ˆHØ×'Ñ'ˆFà×,Ñ,Ó.×6Ñ6×EÑEÈÑJˆLá FÐ.IÑ$Iä˜h¬	×(:Ñ(:Ô;Ø%-×%6Ñ%6�NØ&×.Ò.°>×3FÑ3FÈ&Ò3PØ .× 4Ò 4Ø .× 4Ñ 4× ?Ò ?à'+˜à!Ð!ˆD�6Ø˜Ò#©¸À6Ò9IØ‘Ø˜<Ò'©L¸VÀxÒ=OØ‘Ø˜;Ò&©<¸FÀgÒ<MØ $Ð$��vá‘vØ×5Ñ5Ø˜( F¨D°&ó:ð :ð �=‰=Ð  X×%5Ò%5Ø�~Š~ (§.¡.×";Ò";Ø�}‰} Ò+Ùà�KØ×:Ñ:¸4ÀÓJÐJØ—‘ *Ò,Ùà�KØ×9Ñ9¸$ÀÓIÐIô × Ó  Q¨)Ô%8°qÕ%8ð  ˆð —‘Ñ%Ø× Ó  X§]¡]Ð6IÒ%IØ—“ 8§>¡>×#<Ó#<Ø�{‰{×Ñ×&Ò&¨$¯+©+×*:Ñ*:×*BÒ*BØ×6Ñ6°t¸XÐPXÐ6ÓYÐYØ�{‰{×Ñ×+Ò+à7?·}±}Ð7L˜H×.Ñ.×3Ò3ÐRZ×R_ÑR_Ò_�CÜ! #¤y×'8Ñ'8Ô9Ø×2Ñ2Ô4¸À3×CVÑCVÔ9^ÐY^Ô9^àð ˆð %Øð ˆð `ð  ×:Ñ:¸4ÀÐT\Ð:Ó]Ð]àˆùòs >^s   Ë	_
c                 ó¶  — |j                   j                  }t        |«      dk(  rt        |j                  d«       |S t        |«      dkD  rt        |j                  d«       |S |d   }|j
                  t        j                  t        j                  fv r3|j                  d«      |j                  _        d|j                  _        |S | j                  ||d¬«      S )Nr   z(reversed() requires an iterable argumentr   z#reversed() takes exactly 1 argumentú!'NoneType' object is not iterableTrº   )r÷   rÄ   rL   r   r•   rE   r
   Ú
tuple_typeÚ	list_typeÚas_none_safe_noderŽ   rŒ   r»   r³   )r\   r*   Úreversed_functionrÄ   r)   s        r#   rÿ   z0IterationTransform._transform_reversed_iterationh  sÄ   € Ø ×*Ñ*×/Ñ/ˆÜˆt‹9˜Š>ÜÐ#×'Ñ'Ø<ô>àˆKÜ�‹Y˜Š]ÜÐ#×'Ñ'Ø7ô9àˆKØ�1‰gˆð �8‰8œ×*Ñ*¬G×,=Ñ,=Ð>Ñ>Ø%(×%:Ñ%:Ð;^Ó%_ˆD�M‰MÔ"Ø%)ˆD�M‰MÔ"ØˆKà×&Ñ& t¨S¸4Ð&Ó@Ð@r%   c                 ó4
  — g }t        j                  |j                  d«      dd¬«      }|j                  |«       t	        j
                  |j                  t	        j                  |j                  dt        j                  j                  d«      ¬«      |g¬«      }|r|}n6t        j                  |t        j                  ¬«      }|j                  |«       t        j                  t	        j                  |j                  d¬	«      «      }	|j                  |	«       |r2|}
t        j                  j                  |j                  d
«      }d\  }}n/t        j                  j                  |j                  d«      }
d\  }}t!        j                   |
«      }t        j                  |
t        j                  ¬«      }|j                  |«       t	        j"                  |j                  |||¬«      }|rF|rDt	        j$                  |j                  d|t	        j"                  |j                  |||¬«      ¬«      }t'        j(                  |j                  t'        j*                  |j                  |	t	        j                  |j                  d¬	«      ¬«      t'        j,                  |j                  «      g¬«      }t	        j.                  |j                  ||¬«      }t'        j*                  |j0                  j                  |j0                  |¬«      }| j3                  «       }t5        j6                  |j8                  dd¬«      }t'        j:                  |j                  ||¬«      }t'        j<                  |j                  t'        j>                  |j                  ||¬«      g|¬«      }|r[|j@                  jB                  sJ |j@                  «       ‚t'        jD                  |j                  |g|¬«      }|jG                  |«       t'        j(                  |j                  t'        j*                  |j                  |t	        jH                  |j                  |rdndd|t        j                  j                  |j                  d«      ¬«      ¬«      |g¬«      }t'        jJ                  |j                  |	||jL                  ¬«      }|}|ddd…   D ]  }t        jN                  ||«      }Œ |jQ                  |«      }|jR                  j                  |jT                  «       |S )zUIteration over iterables that Cython has a len() for and knows how to index.
        ú'NoneType' is not iterableFT)Úmay_hold_noneÚis_temprL   )r"   rÔ   ©rø   rÄ   rÅ   r   r   ©Ú>ú>=rI   ©ú<=Ú<r}   Úandr�   r„   )r—   Úindex©r•   r‚   rƒ   )ÚboundscheckÚ
wraparound)Ú
directivesrˆ   r†   r‰   )rÄ   rˆ   Ú-Ú+r   )r~   ÚinplacerB   rC   ©r‡   rˆ   r‹   N)+r   Ú
LetRefNoder  rN   r   rö   r•   r4   r
   Úbuiltin_scopeÚlookupr	   Úc_py_ssize_t_typerž   rí   Úfor_sizer   r›   ÚBoolBinopNoder   rœ   r�   ÚContinueStatNodeÚ	IndexNoder�   r¦   r   Úcopy_inherited_directivesr&  ÚCompilerDirectivesNoder    r¡   rE   rá   ÚCriticalSectionStatNodeÚanalyse_declarationsÚ
binop_nodeÚWhileStatNoder‹   ÚLetNoder¥   r…   rˆ   )r\   r*   Ú
slice_noderÆ   r»   Ú
temp_nodesÚunpack_temp_nodeÚlength_call_nodeÚend_nodeÚkeep_going_refÚ
start_nodeÚ	relation1Ú	relation2Ústart_check_nodeÚcounter_refÚ	test_nodeÚfailed_test_bodyÚtarget_valueÚtarget_assignr  Únew_directivesÚlength_check_and_target_assignrˆ   Ú	loop_nodeÚretÚlet_ref_nodes                             r#   rð   z1IterationTransform._transform_indexable_iteration|  sK  € ð& ˆ
ä$×/Ñ/Ø×(Ñ(Ð)EÓFØØô
Ðð
 	×ÑÐ*Ô+ä$×3Ñ3Ø�H‰HÜ×'Ñ'Ø—‘˜uÜ×+Ñ+×2Ñ2°5Ó9ôð #Ð#ô
Ðñ Ø'‰Hä ×+Ñ+Ð,<Ä:×C_ÑC_Ô`ˆHØ×Ñ˜hÔ'ä"×-Ñ-¬i×.@Ñ.@ÀÇÁÐQUÔ.VÓWˆØ×Ñ˜.Ô)áØ!ˆJÜ ×(Ñ(×1Ñ1°$·(±(¸AÓ>ˆHØ#,Ñ ˆI‘yä"×*Ñ*×3Ñ3°D·H±H¸bÓAˆJØ#,Ñ ˆI�yÜŸ9™9 ZÓ0Ðä×*Ñ*¨:¼J×<XÑ<XÔYˆØ×Ñ˜+Ô&ä×,Ñ,Ø�H‰HØØ Øô	
ˆ	ñ ™(Ü!×/Ñ/Ø—‘ØØ"Ü"×1Ñ1Ø—H‘HØ&Ø-Ø(ô	ô	
ˆIô !×-Ñ-Ø�H‰Hô ×*Ñ*Ø—H‘HØ&Ü!×*Ñ*¨4¯8©8¸5ÔAôô
 ×&Ñ& t§x¡xÓ0ðô
Ðô !×*Ñ*¨:¯>©>Ð@PÐXcÔdˆÜ×2Ñ2Ø—+‘+—/‘/Ø—+‘+Øô
ˆð ×ÑÓ ˆÜ ×:Ñ:¸3¿>¹>ÐW\ÐinÔoˆÜ×4Ñ4Ø×ÑØ%Øô
ˆô */×)9Ñ)9Ø�H‰Hä×"Ñ"Ø—H‘HØ'Ø&ôðð )ô
*
Ð&ñ Ø—?‘?×.Ò.Ð?°
·±Ó?Ð.ô .3×-JÑ-JØ—‘Ø&Ð'Ø3ô.Ð*ð
 +×?Ñ?ÀÔDÜ×!Ñ!Ø�H‰Hä×*Ñ*Ø—H‘HØ#Ü!×,Ñ,ØŸ™Ù(0¡°cØ $Ø!,Ü!*×!2Ñ!2×!;Ñ!;¸D¿H¹HÀaÓ!Hôô
ð /ðôˆô$ ×'Ñ'Ø�H‰HØ&ØØ×*Ñ*ô	
ˆ	ð ˆà&¡t¨ tÔ,ˆLÜ×#Ñ# L°#Ó6‰Cð -ð ×%Ñ% cÓ*ˆà�
‰
×Ñ˜$Ÿ)™)Ô$Øˆ
r%   ÚsNÚNULL©Úexception_valuerI   c                 ó  — |j                   j                  }|j                  s|t        j                  ur|S t        j                  |j                  d«      «      }t        j                  |j                  d| j                  |gd¬«      }t        j                  |j                  d| j                  |gd¬«      }t        j                  || j                  |t        j                  |j                  |d d ||j                  d¬«      |¬«      «      S )Nr  Ú__Pyx_PyBytes_AsWritableStringr   ©rÄ   r  Ú__Pyx_PyBytes_GET_SIZE)r—   ÚstartÚstepÚstoprE   r  rº   )r�   rE   r  r
   rï   r   r+  r  r   ÚPythonCapiCallNoder•   ÚPyBytes_AS_STRING_func_typeÚPyBytes_GET_SIZE_func_typer9  rÝ   ÚSliceIndexNode)r\   r*   r:  r»   Útarget_typer<  Úslice_base_nodeÚlen_nodes           r#   rñ   z-IterationTransform._transform_bytes_iteration*  s  € Ø—k‘k×&Ñ&ˆØ×!Ò! k¼×9KÑ9KÑ&Kð ˆKä$×/Ñ/Ø×(Ñ(Ð)EÓFóHÐô $×6Ñ6Ø�N‰NÐ<Ø×,Ñ,Ø$Ð%Øô	ˆô ×/Ñ/Ø�N‰NÐ4Ø×+Ñ+Ø$Ð%Øô	ˆô × Ñ ØØ×,Ñ,ØÜ×(Ñ(Ø—N‘NØ*Ø ØØ#Ø*×/Ñ/Øôð $ð -ó %ó&ð 	&r%   ÚkindÚdatar"  Úlengthc                 óŽ
  — | j                  «       }|j                  rõ|j                  sé	 t        |j                  j                  d«      d«      }t        j                  |j                  t        j                  |j                  ||t        j                  ¬«      j                  t        j                  |«      d t        j                  j                  |j                  t!        |«      «      t"        j$                  ¬«      }| j'                  |||«      S t+        j,                  |j/                  d«      «      }t        j                  j                  |j                  d«      }t+        j0                  t        j2                  «      }	|	j5                  |j                  «      }
|r
d\  }}|
|}
}nd\  }}t+        j0                  t        j6                  «      }t+        j0                  t        j8                  «      }t+        j0                  t        j2                  «      }t        j:                  |j                  d	| j<                  |j5                  |j                  «      |j5                  |j                  «      |j5                  |j>                  j                  «      gd
¬«      }|j@                  |j>                  j@                  k7  r&|j                  |j>                  j@                  |«      }tC        jD                  |j>                  j                  |j>                  |¬«      }tC        jF                  |j                  ||jH                  g¬«      }tC        jJ                  |j                  |||j5                  |j>                  j                  «      ||
d ||jL                  d¬«
      }tC        jN                  |j                  t        j:                  |j                  d| jP                  |t        jR                  |j                  |	j5                  |j                  «      t        jT                  ¬«      t        jR                  |j                  |j5                  |j                  «      t        jV                  ¬«      t        jR                  |j                  |j5                  |j                  «      t        jX                  ¬«      gdd
t[        j\                  dd«      ¬«      ¬«      }t+        j^                  |t+        j`                  |j                  ||	||gtC        jF                  |j                  ||g¬«      ¬«      «      S # t(        $ r Y �Œ1w xY w)NÚlatin1z	iso8859-1©r€   r=   rE   )r—   rV  rX  rE   r  r   r  r  Ú__Pyx_PyUnicode_READFrT  r#  r„   T©	Úbound1rA  r�   rB  Úbound2rW  rˆ   r‹   Ú
from_rangeÚ__Pyx_init_unicode_iteration©r“   rE   Úunicode_iterr    )rÄ   r  Úresult_is_usedÚutility_code)rb   r�   )1r¦   Ú
is_literalrß   r   r€   Úencoder   r\  r•   Ú	BytesNoder	   Úc_const_char_ptr_typerå   Úc_const_uchar_ptr_typerí   r/  rL   r
   rè   rÝ   ÚUnicodeEncodeErrorr   r+  r  r™   r.  rš   Ú
c_int_typeÚc_void_ptr_typerY  ÚPyUnicode_READ_func_typer�   rE   r   r�   rœ   rˆ   ÚForFromStatNoder‹   ÚExprStatNodeÚ init_unicode_iteration_func_typeÚAmpersandNodeÚc_py_ssize_t_ptr_typeÚc_void_ptr_ptr_typeÚc_int_ptr_typer   r!   r9  r¢   )r\   r*   r:  r»   r  Úbytes_valueÚbytes_slicer<  r@  Úlength_tempr>  rA  rB  Ú	kind_tempÚ	data_tempÚcounter_temprG  rH  rˆ   rK  Ú
setup_nodes                        r#   rò   z/IterationTransform._transform_unicode_iterationa  s&  € Ø×ÑÓ ˆØ× Ò ¨×)?Ò)?ðUÜ+¨J×,<Ñ,<×,CÑ,CÀHÓ,MÈ{Ó[�ô (×6Ñ6Ø—N‘NÜ"×,Ñ,Ø"Ÿ™¨kØ(3Ü'×=Ñ=ô?÷ @I¹yÜ&×=Ñ=¸só@DàÜ"×*Ñ*×3Ñ3°J·N±NÄCÈÓDTÓUÜ ×-Ñ-ô
�ð ×7Ñ7¸¸kÈ8ÓTÐTä$×/Ñ/Ø×(Ñ(Ð)EÓFóHÐô ×&Ñ&×/Ñ/°·±¸!Ó<ˆ
Ü×*Ñ*¬:×+GÑ+GÓHˆØ—?‘? 4§8¡8Ó,ˆÙØ#,Ñ ˆI�yØ#+¨Z˜‰Jà#,Ñ ˆI�yä×(Ñ(¬×)>Ñ)>Ó?ˆ	Ü×(Ñ(¬×)CÑ)CÓDˆ	Ü ×+Ñ+¬J×,HÑ,HÓIˆä ×3Ñ3Ø�N‰NÐ2Ø×)Ñ)Ø—M‘M *§.¡.Ó1Ø—M‘M *§.¡.Ó1Ø ×$Ñ$ T§[¡[§_¡_Ó5ð7ð ôˆð ×Ñ §¡× 0Ñ 0Ò0Ø'×1Ñ1°$·+±+×2BÑ2BÀCÓHˆLÜ×2Ñ2Ø—+‘+—/‘/Ø—+‘+Øô ˆô ×!Ñ!Ø�H‰HØ" D§I¡IÐ.ô0ˆô ×)Ñ)Ø�H‰HØ¨Ø×#Ñ# D§K¡K§O¡OÓ4Ø¨Ø˜DØ×(Ñ(Øôˆ	ô ×'Ñ'Ø�H‰HÜ×/Ñ/Ø—‘Ð >Ø×5Ñ5Ø(Ü!×/Ñ/°
·±ÈÏÉÐXb×XfÑXfÓHgÜ5?×5UÑ5UôWä!×/Ñ/°
·±È	ÏÉÐV`×VdÑVdÓHeÜ5?×5SÑ5SôUä!×/Ñ/°
·±È	ÏÉÐV`×VdÑVdÓHeÜ5?×5NÑ5NôPðð Ø!&Ü(×4Ñ4°^À\ÓRôôˆ
ô" × Ñ ØÜ×$Ñ$Ø—‘ ¨{¸IÀyÐ QÜ×'Ñ'¨¯©¸ÀYÐ8OÔPôRóSð 	SøôY &ò Úðús   ª%T7 Ô7	UÕUc                 óø  — d}t        |t        j                  «      ri|j                  }t	        |j
                  «      }t	        |j                  «      }d }|�s5|j                  j                  st        |j                  d«       |S |j                  �rCt        |j                  t        j                  «      sJ ‚|j                  }|j                  }	t	        |	j
                  «      }t	        |	j                  «      }t	        |	j                  «      }|�rzt        |j                  t         «      r1|j                  dk(  s"|j                  dkD  r|r|j                  dk  r0|s.|j                  j                  st        |j                  d«       |S |j                  }
|r|
 }
|
dk  }t        j"                  j%                  |j                  t'        |
«      «      }n·|j                  j(                  rs|j                  j*                  €t        |j                  d«       |S |}d x}}t        j"                  j%                  |j                  |j                  j*                  «      }n.|j                  j                  st        |j                  d«       |S |r.|j-                  t.        j0                  | j3                  «       «      }|r.|j-                  t.        j0                  | j3                  «       «      }|€E|r+t        j"                  j%                  |j                  d«      }nt        |j                  d«       |S |r0|s*t        j"                  j%                  |j                  d«      }||}}|j                  }|j(                  r|j5                  «       }|j7                  | j3                  «       «      }|r4|j                  dk7  r%t        j8                  |j                  |d||¬«      }n|}|rd|j                  dk7  rUt        j8                  |j                  t        j:                  |«      d||¬«      j7                  | j3                  «       «      }nt        j:                  |«      }t=        j>                  |«      }|jA                  |jB                  j                  «      }|j                  jD                  �rk|jB                  j                  j                  �rJ|j                  tF        jH                  u rŒt        jJ                  t        jL                  |jB                  j                  ||jN                  ¬«      t.        jP                  «      j-                  |jB                  j                  | j3                  «       «      }�n]t        j                  |jB                  j                  t        j"                  jS                  |jB                  j                  d«      t        j"                  jS                  |jB                  j                  d	«      |tF        jT                  d	¬
«      }n»|jB                  j                  jV                  r2|jB                  j                  jY                  |jN                  «      s|}nit        jZ                  |jB                  j                  t        j"                  jS                  |jB                  j                  d«      ||jN                  ¬«      }|j                  |jB                  j                  k7  r4|j-                  |jB                  j                  | j3                  «       «      }t]        j^                  |jB                  j                  |jB                  |¬«      }t]        j`                  |j                  ||jb                  g¬«      }| je                  ||«      \  }}t]        jf                  |j                  ||||||||jh                  d¬«
      }t=        jj                  |j                  |g|¬«      S )NFz*C array iteration requires known end indexr   z8C array iteration requires known step size and end indexrI   r(  ©rB   r~   rC   rE   rl  r   )rV  rX  r—   rE   r  )r"  r—   rE   r#  r„   Trg  r�   )6r(   r   r\  r—   r>   rV  rX  rE   rá   r   r•   r–   r"  Ú	SliceNoderW  r=   Úintrí   r/  ÚabsrÜ   Úsizerå   r	   r.  r¦   Úelement_ptr_typeÚcoerce_to_simpleÚAddNodeÚ	CloneNoder   r™   rš   r�   Ú	is_stringr
   rè   ÚCastNodeÚDereferenceNoder˜   ré   rî   rï   rÛ   Úassignable_fromr2  r   r�   rœ   rˆ   Ú_find_for_from_node_relationsry  r‹   r¢   )r\   r*   r:  r»   Úneg_stepÚ
slice_baserV  rX  rW  r"  Ú
step_valueÚptr_typeÚ
carray_ptrÚstart_ptr_nodeÚstop_ptr_nodeÚcounterr…  rG  rH  rˆ   rA  rB  Úfor_nodes                          r#   rÝ   z.IterationTransform._transform_carray_iteration¹  s  € ØˆÜ�j¤)×":Ñ":Ô;Ø#Ÿ™ˆJÜ$ Z×%5Ñ%5Ó6ˆEÜ# J§O¡OÓ4ˆDØˆDÚØ!—‘×2Ò2Ü˜*Ÿ.™.Ð*VÔWØ�à×$Ó$Ü˜j×.Ñ.´	×0CÑ0CÔDÐDÐDØ#Ÿ™ˆJØ×$Ñ$ˆEÜ$ U§[¡[Ó1ˆEÜ# E§J¡JÓ/ˆDÜ# E§J¡JÓ/ˆDÚÜ! $×"6Ñ"6¼Ô<Ø×.Ñ.°!Ò3Ø×.Ñ.°Ò2¹4Ø×.Ñ.°Ò2¹5Ø%Ÿ?™?×6Ò6Ü˜dŸh™hÐ(bÔcØ�Kð "&×!5Ñ!5�JÙØ&0 [˜
Ø)¨A™~�HÜ$×,Ñ,×5Ñ5°d·h±hÄÀJÃÓP‘Dà�_‰_×%Ò%Ø�‰×#Ñ#Ð+Ü�j—n‘nÐ&RÔSØ�Ø#ˆJØÐˆE�DÜ×$Ñ$×-Ñ-¨j¯n©n¸j¿o¹o×>RÑ>RÓS‰Dð —?‘?×.Ò.Ü�j—n‘nÐ&RÔSØˆKáØ—O‘O¤J×$@Ñ$@À$×BRÑBRÓBTÓUˆEÙØ—>‘>¤*×">Ñ">À×@PÑ@PÓ@RÓSˆDØˆ<ÙÜ ×(Ñ(×1Ñ1°*·.±.À"ÓE‘ä�j—n‘nÐ&`ÔaØ�áÙÜ!×)Ñ)×2Ñ2°:·>±>À1ÓE�à �4ˆEà—?‘?ˆØ×ÒØ×0Ñ0Ó2ˆHØ×0Ñ0°×1AÑ1AÓ1CÓDˆ
á�U×*Ñ*¨aÒ/Ü&×.Ñ.Ø—	‘	Ø#ØØØô‰Nð (ˆNá�D×(Ñ(¨AÒ-Ü%×-Ñ-Ø—‘Ü"×,Ñ,¨ZÓ8ØØØô÷ #Ñ" 4×#3Ñ#3Ó#5Ó6ñ ô &×/Ñ/°
Ó;ˆMä×&Ñ& xÓ0ˆØ—{‘{ 4§;¡;§?¡?Ó3ˆà�?‰?×$Ó$¨¯©×)9Ñ)9×)EÓ)Eà�‰¤'×"6Ñ"6Ñ6Ü(×1Ñ1Ü×-Ñ-ØŸ™Ÿ™°Ø%×/Ñ/ô1ô ×-Ñ-ó	 /÷ 09©yØŸ™×(Ñ(¨$×*:Ñ*:Ó*<ó0>ò	 ô  )×7Ñ7Ø—K‘K—O‘OÜ#×+Ñ+×3Ñ3°D·K±K·O±OÀQÓGÜ"×*Ñ*×2Ñ2°4·;±;·?±?ÀAÓFØ%Ü ×+Ñ+Øô ‘ð �[‰[×Ñ×$Ò$¨T¯[©[×-=Ñ-=×-MÑ-MÈh×N`ÑN`Ô-aà'‰Lô %×.Ñ.Ø—‘—‘Ü×'Ñ'×/Ñ/°·±·±ÀÓCØ!Ø×'Ñ'ô	)ˆLð ×Ñ §¡× 0Ñ 0Ò0Ø'×1Ñ1°$·+±+×2BÑ2BØ26×2BÑ2BÓ2DóFˆLô ×2Ñ2Ø—+‘+—/‘/Ø—+‘+Øô ˆô
 ×!Ñ!Ø�H‰HØ" D§I¡IÐ.ô0ˆð  $×AÑAÀ(ÈHÓUÑˆ	�9ä×(Ñ(Ø�H‰HØ!¨YØØ¨Ø˜DØ×(Ñ(Øôˆô ×'Ñ'Ø�H‰H˜W˜IØôð 	r%   c           	      ó  — |j                   j                  }t        |«      dk(  rt        |j                  d«       |S t        |«      dkD  rt        |j                  d«       |S |j
                  j                  s|S |j
                  j                  }t        |«      dk7  r|S |\  }}|j                  }|j                  s|j                  s|S t        |«      dk(  r-t        |d   «      j                  || j                  «       «      }n,t        j                  j                  |j                  d|¬«      }t!        j"                  |«      }	t        j$                  |j                  |	t        j                  j                  |j                  d|¬«      d||j                  ¬«      }
t'        j(                  |j                  ||	¬	«      t'        j(                  |j                  |	|
¬	«      g}t+        |j,                  t&        j.                  «      r)||j,                  j0                  z   |j,                  _        nK|j3                  |j,                  «       t'        j.                  |j,                  j                  |¬
«      |_        ||_        |j4                  j                  |j                  | j                  «       «      |_        |d   |j6                  _        t!        j:                  |	| j=                  ||j6                  j8                  «      «      S )Nr   z)enumerate() requires an iterable argumentr   z%enumerate() takes at most 2 argumentsr   rÅ   r(  )rB   rC   r~   rE   r  r#  r„   )r÷   rÄ   rL   r   r•   r�   rÞ   rE   rá   r  r,   rå   r¦   r   rí   rî   r   r+  r�  r   r�   r(   rˆ   rœ   r…   rN   rÀ   rŽ   rŒ   r9  r³   )r\   r*   Úenumerate_functionrÄ   ÚtargetsÚenumerate_targetÚiterable_targetÚcounter_typerV  ÚtempÚinc_expressionÚ	loop_bodys               r#   rþ   z1IterationTransform._transform_enumerate_iterationP  sw  € Ø!×+Ñ+×0Ñ0ˆÜˆt‹9˜Š>ÜÐ$×(Ñ(Ø=ô?àˆKÜ�‹Y˜Š]ÜÐ$×(Ñ(Ø9ô;àˆKà�{‰{×2Ò2àˆKØ—+‘+×"Ñ"ˆÜˆw‹<˜1ÒàˆKà,3Ñ)Ð˜/Ø'×,Ñ,ˆà×'Ò'°×0CÒ0CàˆKäˆt‹9˜Š>Ü'¨¨Q©Ó0×:Ñ:¸<È×IYÑIYÓI[Ó\‰Eä×%Ñ%×-Ñ-Ð.@×.DÑ.DÀaÈlÐ-Ó[ˆEÜ×#Ñ# EÓ*ˆä"×*Ñ*Ø×"Ñ"ØÜ ×(Ñ(×0Ñ0°·±¸1À<Ð0ÓPØØà"×.Ñ.ôˆô ×&Ñ&Ø&×*Ñ*Ø&Øôô ×&Ñ&Ø&×*Ñ*ØØ$ô&ð	ˆ	ô �d—i‘i¤×!3Ñ!3Ô4Ø'¨$¯)©)¯/©/Ñ9ˆD�I‰I�Oà×Ñ˜TŸY™YÔ'Ü×*Ñ*Ø—	‘	—‘Ø!ô#ˆDŒIð &ˆŒØ—I‘I×'Ñ'¨×(<Ñ(<¸d×>NÑ>NÓ>PÓQˆŒ	Ø!% a¡ˆ�‰Ôô × Ñ   t×'>Ñ'>¸tÀTÇ]Á]×E[ÑE[Ó'\Ó]Ð]r%   c                 ó   — |r|ryy|ryy)N)r   r  r  )r  r  r  re   )r\   Úneg_step_valuer»   s      r#   r•  z0IterationTransform._find_for_from_node_relations”  s   € ÙÙØ à áØ à r%   c                 óú  — |j                   j                  }t        |«      dk  r/|j                  }d}t        j
                  j                  |d«      }n`|d   }|j                  }t        |j                  t        «      s|S |j                  }|dk(  r|S t        j
                  j                  ||«      }t        |«      dk(  rMt        j
                  j                  |j                  d«      }|d   j                  | j                  «       «      }	nD|d   j                  | j                  «       «      }|d   j                  | j                  «       «      }	| j                  |dk  |«      \  }
}d }|�r%|	|}	}t        |«      }|dk7  �rt        |j                  t        «      rÍt        |	j                  t        «      r³|dk  r-|	j                  }|j                  }||||z
  dz
  |z  z  z
  dz
  }n,|j                  }|	j                  }||||z
  dz
  |z  z  z   dz   }t        j
                  j                  |j                  |t        j                   |j"                  |	j"                  «      ¬«      }n)t%        j&                  |	«      }| j)                  ||||«      }|dk  r| }t+        |«      |_        ||_        |j                  | j                  «       «      }|	j.                  sd}|xs t%        j&                  |	«      }	nd}t1        j2                  |j                  |j4                  ||
||	||j6                  |j8                  d¬«
      }|j;                  | j                  «       «       |rt%        j<                  |	|«      }|S )	NrÇ   r   r   r   rÅ   TF)	r�   rh  rA  rB  ri  rW  rˆ   r‹   rj  )r÷   rÄ   rL   r•   r   rí   r/  r(   r=   rŠ  Úcoerce_to_indexr¦   r•  r‹  rî   r	   Úspanning_typerE   r   r+  Ú_build_range_step_calculationÚstrr€   rp  r   ry  r�   rˆ   r‹   Úset_up_loopr9  )r\   r*   Úrange_functionr»   rÄ   Ústep_posr˜  rW  rh  ri  rA  rB  Úbound2_ref_nodeÚabs_stepÚbegin_valueÚ	end_valueÚbound1_valueÚbound2_is_temprž  s                      r#   r  z-IterationTransform._transform_range_iteration   s6  € Ø×'Ñ'×,Ñ,ˆÜˆt‹9�qŠ=Ø%×)Ñ)ˆHØˆJÜ×$Ñ$×-Ñ-¨h¸Ó:‰Dà˜‘7ˆDØ—x‘xˆHÜ˜d×2Ñ2´CÔ8à�Ø×-Ñ-ˆJØ˜QŠà�Ü×$Ñ$×-Ñ-¨h¸
ÓCˆDäˆt‹9˜Š>Ü×&Ñ&×/Ñ/°×0BÑ0BÀAÓFˆFØ˜!‘W×,Ñ,¨T×-=Ñ-=Ó-?Ó@‰Fà˜!‘W×,Ñ,¨T×-=Ñ-=Ó-?Ó@ˆFØ˜!‘W×,Ñ,¨T×-=Ñ-=Ó-?Ó@ˆFà#×AÑAÀ*ÈqÁ.ÐRZÓ[Ñˆ	�9àˆÚØ# V�FˆFÜ˜:“ˆHØ˜1‹}Ü˜v×5Ñ5´sÔ;Ü" 6×#9Ñ#9¼3Ô?à! A’~Ø&,×&<Ñ&<˜Ø$*×$:Ñ$:˜	Ø'2°XÀ+ÐPYÑBYÐ\]ÑB]ÐbjÑAjÑ5kÑ'kÐnoÑ'o™à&,×&<Ñ&<˜Ø$*×$:Ñ$:˜	Ø'0°8ÀÈiÑ@WÐZ[Ñ@[Ð`hÑ?hÑ3iÑ'iÐlmÑ'm˜ä&×.Ñ.×6Ñ6ØŸ
™
 LÜ'×5Ñ5°f·k±kÀ6Ç;Á;ÓOð 7ó Q‘Fô
 '0×&:Ñ&:¸6Ó&B�OØ!×?Ñ?Ø °°zóC�Fð ˜Š>Ø$˜ˆJÜ˜“_ˆŒ
Ø)ˆÔØ×#Ñ# D×$4Ñ$4Ó$6Ó7ˆà× Ò à!ˆNØ$ÒD¬	×(<Ñ(<¸VÓ(D‰Fà"ˆNä×(Ñ(Ø�H‰HØ—;‘;Ø YØ¨Ø˜DŸI™IØ×(Ñ(Øôˆð 	×Ñ˜T×-Ñ-Ó/Ô0áÜ ×(Ñ(¨°Ó:ˆHàˆr%   c                 ó8  — t        |«      }t        j                  |j                  |j                  «      }|j                  j                  r*|dk  r%t        j                  |t        j
                  «      }n t        j                  ||j                  «      }|dk  r|}|}	d}
n|}|}	d}
t        j                  |j                  t        j                  |j                  ||
t        j                  |j                  t        j                  j                  |j                  ||¬«      dt        j                  |j                  t        j                  |j                  t        j                  |j                  |d|	|¬«      dt        j                  j                  |j                  d«      |¬«      d	t        j                  j                  |j                  ||¬«      |¬«      |¬«      |¬«      |
t        j                  j                  |j                  d«      |¬«      }|S )
Niÿ  r   r'  r(  rÅ   Ú*rˆ  r   z//)r‹  r	   r¬  rE   r  rv  r   r7  r•   ÚMulNoderí   rî   ÚDivNodeÚSubNode)r\   rh  r²  rW  r˜  r³  r¬  Úspanning_step_typer´  rµ  Úfinal_opÚstep_calculation_nodes               r#   r­  z0IterationTransform._build_range_step_calculationñ  sÄ  € Ü�z“?ˆÜ"×0Ñ0°·±¸o×>RÑ>RÓSˆØ�9‰9×Ò ¨6Ò 1ä!+×!9Ñ!9¸-Ì×I^ÑI^Ó!_Ñä!+×!9Ñ!9¸-ÈÏÉÓ!SÐØ˜Š>Ø)ˆKØˆIØ‰Hà ˆKØ'ˆIØˆHä )× 4Ñ 4Ø�J‰JÜ×)Ñ)Ø—
‘
Ø(Ø!Ü"×*Ñ*Ø—J‘JÜ&×.Ñ.×6Ñ6°v·z±zÀ8ÐRdÐ6ÓeØ Ü&×.Ñ.ØŸ
™
Ü!*×!2Ñ!2Ø"ŸJ™JÜ%.×%6Ñ%6Ø &§
¡
Ø)4Ø),Ø)2Ø%2ô&4ð &)Ü%.×%6Ñ%6×%>Ñ%>¸v¿z¹zÈ1Ó%MØ!3ô
"5ð "&Ü!*×!2Ñ!2×!:Ñ!:¸6¿:¹:ÀxÐVhÐ!:Ó!iØ/ô1ð  ,ô)-ð* (ô3)ð4 Ü×&Ñ&×.Ñ.¨v¯z©z¸1Ó=Øô=! Ðð> %Ð$r%   c                 óþ	  — g }t        j                  t        j                  «      }|j	                  |«       |j                  |j                  «      }t        j                  t        j                  «      }|j	                  |«       |j                  |j                  «      }	d x}
x}}|rc|ra|j                  j                  r>t        |j                  j                  «      dk(  r|j                  j                  \  }
}n*|S |j                  }n|r|j                  }
n|j                  }t        |j                  t        j                  «      r|j                  }n6t        j                  |j                  j                  |j                  g¬«      }t        j                  t        j                  «      }|j	                  |«       t!        j"                  |j                  |j                  |j                  «      t        j$                  |j&                  «      ¬«      }t        j                  t        j(                  «      }|j	                  |«       |j                  |j                  «      }t!        j"                  |j                  |t        j$                  |j&                  «      ¬«      }t        j*                  ||j                  |j                  «      |	|
|||«      }|j-                  | j/                  «       «      }|g|j0                  dd |rVt!        j2                  |j                  |¬«      }|j5                  dj7                  t        |«      dk  rdnd	«      d
|g¬«      }n0t!        j8                  |j                  «      }|j5                  d«      }t         j:                  j=                  |j                  t?        |j&                  t@        jB                  u «      «      }t        jD                  |j                  |	t         j:                  jG                  |j                  d«      ¬«      t        jD                  |j                  |t!        jH                  |j                  d| jJ                  tM        jN                  dd«      |||||gd¬«      ¬«      t        jP                  |j                  d ||jR                  ¬«      g}t        jT                  |j                  |t        j                  |j                  |¬«      ¬«      S )Nr   ©r•   r…   rl  r   r   ú)'NoneType' object has no attribute '%{}s'é   ú.30Ú ÚPyExc_AttributeError©r   Úformat_argsr  r�   Ú__Pyx_dict_iteratorÚ	dict_iterr    T©ro  rÄ   r  r*  r„   r�   )+r   r™   r	   Úpy_object_typerN   rš   r•   r.  r�   rÞ   rL   rÄ   r(   rˆ   r   rœ   r   r|  Ú
c_ptr_typerE   rv  ÚDictIterationNextNoder¥   r¦   r…   ÚIdentifierStringNoder  ÚformatÚNullNoderí   rî   rŠ  r
   rÖ   r�   r/  rY  ÚPyDict_Iterator_func_typer   r!   r8  r‹   r¢   )r\   r*   r¶   r·   r¸   r¹   r�   r¥  Ú	dict_tempÚpos_tempÚ
key_targetÚvalue_targetÚtuple_targetrˆ   Údict_len_tempÚdict_len_temp_addrÚis_dict_tempÚis_dict_temp_addrÚiter_next_nodeÚmethod_nodeÚis_dictÚresult_codes                         r#   r×   z,IterationTransform._transform_dict_iteration#  sâ  € ØˆÜ×#Ñ#¤J×$=Ñ$=Ó>ˆØ�‰�TÔØ—H‘H˜XŸ\™\Ó*ˆ	Ü×#Ñ#¤J×$@Ñ$@ÓAˆØ�‰�TÔØ—8‘8˜DŸH™HÓ%ˆà37Ð7ˆ
Ð7�\ LÙ‘FØ�{‰{×2Ò2Ü�t—{‘{×'Ñ'Ó(¨AÒ-Ø/3¯{©{×/?Ñ/?Ñ,�J¡ð  �Kà#Ÿ{™{‘ÙØŸ™‰JàŸ;™;ˆLä�d—i‘i¤×!3Ñ!3Ô4Ø—9‘9‰Dä×%Ñ%¨D¯I©I¯M©MØ/3¯y©y¨kô;ˆDô "×,Ñ,¬Z×-IÑ-IÓJˆØ�‰�]Ô#Ü&×4Ñ4Ø�H‰H˜m×/Ñ/°·±Ó=Ü×&Ñ& }×'9Ñ'9Ó:ô<Ðô ×#Ñ#¤J×$9Ñ$9Ó:ˆØ�‰�TÔØ—x‘x §¡Ó)ˆÜ%×3Ñ3Ø�H‰H˜lÜ×&Ñ& t§y¡yÓ1ô3Ðô ×4Ñ4Ø�}×(Ñ(¨¯©Ó6¸Ø˜ lØóˆð (×;Ñ;¸D×<LÑ<LÓ<NÓOˆØ)Ð*ˆ�
‰
�1�QˆáÜ#×8Ñ8¸¿¹ÈVÔTˆKØ×1Ñ1Ø;×BÑBÌCÐPVËKÐ[]ÒL]Á5ÐceÓfØ.Ø%˜hð 2ó (‰Hô
 $×,Ñ,¨X¯\©\Ó:ˆKØ×1Ñ1Ð2UÓVˆHä×#Ñ#×+Ñ+¨D¯H©H´c¸(¿-¹-Ì7×K\ÑK\Ð:\Ó6]Ó^ˆô ×&Ñ&Ø—‘ØÜ×'Ñ'×0Ñ0°·±¸1Ó=ôô
 ×&Ñ&Ø—‘ØÜ×2Ñ2Ø—L‘LØ)Ø×2Ñ2Ü#.×#:Ñ#:¸;ÈÓ#UØ$ g¨{Ð<NÐPaÐbØ ôô
ô ×ÑØ—‘Ø ØØ"×.Ñ.ô	ð#ˆô2 ×'Ñ'Ø�H‰H˜EÜ×#Ñ#Ø—‘Ø#ôôð 	r%   rÉ   rÞ  Úmethod_nameÚp_orig_lengthÚ	p_is_dictrK   Úis_setÚp_is_setc                 óô  — g }t        j                  t        j                  «      }|j	                  |«       |j                  |j                  «      }t        j                  t        j                  «      }|j	                  |«       |j                  |j                  «      }t        |j                  t        j                  «      r|j                  }n6t        j                  |j                  j                  |j                  g¬«      }t        j                  t        j                  «      }|j	                  |«       t        j                  |j                  |j                  |j                  «      t        j                  |j                  «      ¬«      }	t        j                  t        j                   «      }|j	                  |«       |j                  |j                  «      }
t        j                  |j                  |
t        j                  |j                  «      ¬«      }|j"                  }t        j$                  ||j                  |j                  «      |||
«      }|j'                  | j)                  «       «      }|g|j*                  dd t        j,                  j/                  |j                  t1        |j                  t2        j4                  u «      «      }t        j6                  |j                  |t        j,                  j9                  |j                  d«      ¬«      t        j6                  |j                  |t        j:                  |j                  d| j<                  t?        j@                  dd«      |||	|gd¬	«      ¬«      t        jB                  |j                  d ||jD                  ¬
«      g}t        jF                  |j                  |t        j                  |j                  |¬«      ¬«      S )NrÁ  rl  r   r�   Ú__Pyx_set_iteratorÚset_iterr    TrË  r*  r„   r�   )$r   r™   r	   rÌ  rN   rš   r•   r.  r(   rˆ   r   rœ   r   r|  rÍ  rE   rv  r�   ÚSetIterationNextNoder¥   r¦   r…   rí   rî   rŠ  r
   rØ   r�   r/  rY  ÚPySet_Iterator_func_typer   r!   r8  r‹   r¢   )r\   r*   Úset_objr�   r¥  Úset_temprÔ  rˆ   Úset_len_tempÚset_len_temp_addrÚis_set_tempÚis_set_temp_addrrÖ  rÜ  rã  rß  s                   r#   rÚ   z+IterationTransform._transform_set_iteration’  sö  € ØˆÜ×#Ñ#¤J×$=Ñ$=Ó>ˆØ�‰�TÔØ—8‘8˜GŸK™KÓ(ˆÜ×#Ñ#¤J×$@Ñ$@ÓAˆØ�‰�TÔØ—8‘8˜DŸH™HÓ%ˆä�d—i‘i¤×!3Ñ!3Ô4Ø—9‘9‰Dä×%Ñ%¨D¯I©I¯M©MØ/3¯y©y¨kô;ˆDô !×+Ñ+¬J×,HÑ,HÓIˆØ�‰�\Ô"Ü%×3Ñ3Ø�H‰H˜l×.Ñ.¨w¯{©{Ó;Ü×&Ñ& |×'8Ñ'8Ó9ô;Ðô ×#Ñ#¤J×$9Ñ$9Ó:ˆØ�‰�TÔØ—h‘h˜tŸx™xÓ(ˆÜ$×2Ñ2Ø�H‰H˜kÜ×&Ñ& t§y¡yÓ1ô3Ðð —{‘{ˆÜ×3Ñ3Ø�l×&Ñ& w§{¡{Ó3°X¸|È[óZˆà'×;Ñ;¸D×<LÑ<LÓ<NÓOˆØ)Ð*ˆ�
‰
�1�Qˆä×"Ñ"×*Ñ*¨4¯8©8´S¸¿¹Ì×IYÑIYÐ9YÓ5ZÓ[ˆô ×&Ñ&Ø—‘ØÜ×%Ñ%×.Ñ.¨t¯x©x¸Ó;ôô
 ×&Ñ&Ø—‘ØÜ×0Ñ0Ø—K‘KØ(Ø×1Ñ1Ü!,×!8Ñ!8¸À\Ó!RØ! 6Ð+<Ð>NÐOØ ôô
ô ×ÑØ—‘ØØØ ×,Ñ,ô	ð#ˆô2 ×'Ñ'Ø�H‰H˜EÜ×#Ñ#Ø—‘Ø#ôôð 	r%   ©F)&rl   rm   rn   ro   r±   r´   r³   rÿ   rð   r	   Ú	CFuncTypeÚc_char_ptr_typeÚCFuncTypeArgr
   rï   rZ  r.  r[  rñ   ré   rv  rw  rx  rÌ  r}  r~  r  r{  rò   rÝ   rþ   r•  r  r­  r×   rÒ  ré  rÚ   re   r%   r#   rz   rz       s  „ ñò0òdEóIòVAó(aðF #7 *×"6Ñ"6Ø×"Ñ"Ø#ˆJ×#Ñ# C¨×);Ñ);¸TÓBð%à%ô#'Ðð
 "6 ×!5Ñ!5Ø×$Ñ$Ø#ˆJ×#Ñ# C¨×);Ñ);¸TÓBð'
ð ô	"Ðó%&ðN  4˜z×3Ñ3Ø×!Ñ!Ø#ˆJ×#Ñ# F¨J×,AÑ,AÀ4ÓHØ#ˆJ×#Ñ# F¨J×,FÑ,FÈÓMØ#ˆJ×#Ñ# G¨Z×-IÑ-IÈ4ÓPð$
ó Ðð (< z×';Ñ';Ø×ÑØ#ˆJ×#Ñ# C¨×)BÑ)BÀDÓIØ#ˆJ×#Ñ# H¨j×.NÑ.NÐPTÓUØ#ˆJ×#Ñ# F¨J×,JÑ,JÈDÓQØ#ˆJ×#Ñ# F¨J×,EÑ,EÀtÓLð	 
ð ô(Ð$óVSópUònB^òH
!óOòb0%òd\ð| !5 
× 4Ñ 4Ø×!Ñ!Ø#ˆJ×#Ñ# F¨Z×-FÑ-FÈÓMØ#ˆJ×#Ñ# I°
×0EÑ0EÀtÓLØ#ˆJ×#Ñ# M°J×4MÑ4MÈtÓTØ#ˆJ×#Ñ# O°j×6VÑ6VÐX\Ó]Ø#ˆJ×#Ñ# K°*×2KÑ2KÈTÓRð$ó!Ðð  4˜z×3Ñ3Ø×!Ñ!Ø#ˆJ×#Ñ# E¨J×,EÑ,EÀtÓLØ#ˆJ×#Ñ# H¨z×/DÑ/DÀdÓKØ#ˆJ×#Ñ# O°j×6VÑ6VÐX\Ó]Ø#ˆJ×#Ñ# J°×1JÑ1JÈDÓQð	$ó ÐóBr%   rz   c                   ó|   — 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ej                   j"                  Zy)ÚSwitchTransformzì
    This transformation tries to turn long if statements into C switch statements.
    The requirement is that every clause be an (or of) var == value, where the var
    is common among all clauses and both var and value are ints.
    )NNNc                 óz  — 	 t        |t        j                  t        j                  f«      r|j                  }n€t        |t        j
                  «      r|j                  j                  }nOt        |t        j                  «      r|j                  }n(t        |t        j                  «      r|j                  }nnŒ¸t        |t        j                  «      �r4|j                  �| j                  S |j                  «       r{t        |j                  t        j                   t        j"                  f«      rG|j$                  dk(  }|r|s| j                  S ||j&                  | j)                  |j                  «      fS |j+                  «       �st|j$                  dk(  rd}n |r|j$                  dk(  rd}n| j                  S t-        |j&                  |j&                  «      r�|j                  j.                  r||j&                  |j                  gfS t1        |j                  dd «      r:|j                  j2                  j4                  r||j&                  |j                  gfS t-        |j                  |j                  «      r�|j&                  j.                  r||j                  |j&                  gfS t1        |j&                  dd «      r:|j&                  j2                  j4                  r||j                  |j&                  gfS | j                  S t        |t        j6                  «      rŽ|j$                  dk(  s|r}|j$                  dk(  rn|j$                  dk(  }| j9                  |j&                  |«      \  }}}| j9                  |j                  |«      \  }}}	|�||k(  rt-        ||«      r|r|r||||	z   fS | j                  S )	NTr‘   r|   Fú!=rÔ   Úorr!  )r(   r   ÚCoerceToTempNodeÚCoerceToBooleanNoder)   ÚBoolBinopResultNoder   ÚEvalWithTempExprNodeÚsubexpressionÚTypecastNoder“   r›   ÚcascadeÚNO_MATCHÚis_c_string_containsrC   r   rr  r~   rB   Úextract_in_string_conditionsÚis_python_comparisonr7   rp  ÚgetattrrÔ   Úis_constr0  Úextract_conditions)
r\   ÚcondÚallow_not_inr‘   Únot_in_1Út1Úc1Únot_in_2Út2Úc2s
             r#   r  z"SwitchTransform.extract_conditionsß  së  € ØÜ˜$¤×!;Ñ!;Ü!*×!>Ñ!>ð!@ô Aà—x‘x‘Ü˜D¤)×"?Ñ"?Ô@Ø—x‘x—|‘|‘Ü˜D¤)×"@Ñ"@ÔAà×)Ñ)‘Ü˜D¤)×"8Ñ"8Ô9Ø—|‘|‘àð ô �dœI×4Ñ4Õ5Ø�|‰|Ð'Ø—}‘}Ð$Ø×*Ñ*Ô,Ü˜dŸm™m¬i×.CÑ.CÄY×EXÑEXÐ-YÔZØŸ™¨(Ñ2�Ù¡,ØŸ=™=Ð(Ø˜tŸ}™}¨d×.OÑ.OÐPT×P]ÑP]Ó.^Ð^Ð^Ø×.Ñ.Õ0Ø—=‘= DÒ(Ø"‘FÙ! d§m¡m°tÒ&;Ø!‘FàŸ=™=Ð(ô # 4§=¡=°$·-±-Ô@Ø—}‘}×/Ò/Ø% t§}¡}°t·}±}°oÐEÐEÜ  §¡°¸Ô>Ø!%§¡×!4Ñ!4×!=Ò!=Ø% t§}¡}°t·}±}°oÐEÐEÜ" 4§=¡=°$·-±-Ô@Ø—}‘}×/Ò/Ø% t§}¡}°t·}±}°oÐEÐEÜ  §¡°¸Ô>Ø!%§¡×!4Ñ!4×!=Ò!=Ø% t§}¡}°t·}±}°oÐEÐEð �}‰}Ðô ˜œi×5Ñ5Ô6Ø�}‰} Ò$©¸$¿-¹-È5Ò:PØ $§¡°Ñ 6�Ø#'×#:Ñ#:¸4¿=¹=È,Ó#WÑ �˜"˜bØ#'×#:Ñ#:¸4¿=¹=È,Ó#WÑ �˜"˜bØ�> h°(Ò&:¼ÈrÐSUÔ?VÙ$©Ø'¨¨R°©UÐ2Ð2Ø�}‰}Ðr%   c           
      ó:  — t        |t        j                  «      rpt        t	        t        t        |j                  «      «      «      }t        t        j                  j                  |j                  «      }|D �cg c]
  } ||«      ‘Œ c}S |j                  }|j                  }t        t        t        |«      «      D �ch c]
  }|||dz    ’Œ c}«      }|D �cg c].  }t        j                  |j                  t!        ||«      |¬«      ‘Œ0 c}S c c}w c c}w c c}w )Nr   ©r€   r=   )r(   r   r   ÚsortedrK   rê   rë   r€   r   rí   rî   r•   ÚencodingrÎ   rL   ÚCharNoder   )	r\   Ústring_literalÚcharvalsÚnode_for_charÚcharvalÚ
charactersr  ÚiÚ	characters	            r#   r  z,SwitchTransform.extract_in_string_conditions  s  € Ü�n¤i×&;Ñ&;Ô<Üœc¤#¤c¨>×+?Ñ+?Ó"@ÓAÓBˆHÜ#¤I×$5Ñ$5×$=Ñ$=¸~×?QÑ?QÓRˆMÙ:BÓC¹(¨w‘M 'Õ*¸(ÑCÐCð (×-Ñ-ˆJØ!×*Ñ*ˆHÜ¼UÄ3ÀzÃ?Ô=SÓ UÑ=S¸ *¨Q¨q°©sÒ"3Ð=SÑ UÓVˆJñ '1ó3á&0˜ô ×'Ñ'¨×(:Ñ(:Ä-ÐPYÐ[cÓBdØ8AöCà&0ñ3ð 3ùò Dùò
 !Vùò3s   Á9DÂ>DÃ3Dc                 óŽ  — | j                  ||«      \  }}}|€| j                  S |�t        ||«      s| j                  S |j                  j                  s|j                  j
                  rFt        |D �cg c]1  }|j                  j                  xs |j                  j
                   ‘Œ3 c}«      r| j                  S |||fS c c}w r'   )r  r   r7   rE   r  r  râ   )r\   Ú
common_varr‡   r  r‘   ÚvarÚ
conditionsr  s           r#   Úextract_common_conditionsz)SwitchTransform.extract_common_conditions$  s­   € Ø"&×"9Ñ"9¸)À\Ó"RÑˆ��ZØˆ;Ø—=‘=Ð ØÐ#¬O¸CÀÔ,LØ—=‘=Ð Ø—(‘(—/’/ S§X¡X×%5Ò%5¼#ÙISÓTÉÀ�d—i‘i×&Ñ&Ò;¨$¯)©)×*;Ñ*;Ò<ÈÑTô;Và—=‘=Ð Ø�s˜JÐ&Ð&ùò Us   Á46Cc                 ó¨  — t        «       }|D ]³  }|j                  «       r,|j                  |v r y|j                  |j                  «       Œ?	 |j                  }|j
                  j                  s|j
                  j                  r|j                  �|j                  }n|j                  }||v r y|j                  |«       Œµ y# t        $ r Y  yw xY w)NTF)rK   r  r=   ÚaddrÔ   rE   r  Úis_cpp_enumÚenum_int_valueÚcnameÚAttributeError)r\   Úcondition_valuesÚseenr€   Úvalue_entryÚvalue_for_seens         r#   Úhas_duplicate_valuesz$SwitchTransform.has_duplicate_values/  sÁ   € ä‹uˆÛ%ˆEØ×(Ñ(Ô*Ø×(Ñ(¨DÑ0ÙØ—‘˜×.Ñ.Õ/ð Ø"'§+¡+�KØ$×)Ñ)×1Ò1°[×5EÑ5E×5QÒ5QØ +× :Ñ :Ð FØ)4×)CÑ)C™à)4×):Ñ):˜ð " TÑ)ÙØ—‘˜Õ(ð' &ð( øô &ò  Úð ús   ÁACÃ	CÃCc                 ó  — | j                   j                  d«      s| j                  |«       |S d }g }|j                  D ]u  }| j	                  ||j
                  d«      \  }}}|€| j                  |«       |c S |j                  t        j                  |j                  ||j                  ¬«      «       Œw |D ��cg c]  }|j                  D ]  }|‘Œ Œ }	}}t        |	«      dk  r| j                  |«       |S | j                  |	«      r| j                  |«       |S | j                  |d«       |D ]  }| j                  |d«       Œ t        |«      }t        j                  |j                  |||j                   ¬«      }
|
S c c}}w )Núoptimize.use_switchF©r•   r  rˆ   r   r‹   rˆ   ©r•   ÚtestÚcasesr‹   )Úcurrent_directivesÚgetr^   rŠ   r  r‡   rN   r   ÚSwitchCaseNoder•   rˆ   r  rL   r*  r1   ÚSwitchStatNoder‹   )r\   r*   r  r0  Ú	if_clauseÚ_r  Úcaser  r&  Úswitch_nodes              r#   Úvisit_IfStatNodez SwitchTransform.visit_IfStatNodeH  s…  € Ø×&Ñ&×*Ñ*Ð+@ÔAØ×Ñ˜tÔ$ØˆKàˆ
ØˆØŸœˆIØ(,×(FÑ(FØ˜I×/Ñ/°ó)8Ñ%ˆAˆz˜:àÐ!Ø×"Ñ" 4Ô(Ø’Ø�L‰Lœ×-Ñ-°)·-±-Ø9CØ3<·>±>ôCõ Dð )ñ #ô@Ù"�T¨t¯¬ tŠD¨ˆD˜Uð 	ñ @äÐÓ  1Ò$Ø×Ñ˜tÔ$ØˆKØ×$Ñ$Ð%5Ô6Ø×Ñ˜tÔ$ØˆKð 	×Ñ˜4 Ô/ÛˆDØ×Ñ˜t VÕ,ð ô ! Ó,ˆ
Ü×*Ñ*¨t¯x©xØ0:Ø16Ø7;×7GÑ7GôIˆð Ðùó'@s   Â<Fc                 ó\  — | j                   j                  d«      s| j                  |«       |S | j                  d |j                  d«      \  }}}|�t        |«      dk  s| j                  |«      r| j                  |«       |S | j                  |||||j                  |j                  «      S )Nr,  Tr   )
r1  r2  r^   r  r/  rL   r*  Úbuild_simple_switch_statementÚtrue_valÚ	false_val©r\   r*   r‘   r  r  s        r#   Úvisit_CondExprNodez"SwitchTransform.visit_CondExprNoden  s¨   € Ø×&Ñ&×*Ñ*Ð+@ÔAØ×Ñ˜tÔ$ØˆKà)-×)GÑ)GØ�$—)‘)˜Tó*#Ñ&ˆ�
˜JàÐÜ�z“? QÒ&Ø×,Ñ,¨ZÔ8Ø×Ñ˜tÔ$ØˆKà×1Ñ1Ø�*˜j¨&Ø�M‰M˜4Ÿ>™>ó+ð 	+r%   c                 óÚ  — | j                   j                  d«      s| j                  |«       |S | j                  d |d«      \  }}}|�t	        |«      dk  s| j                  |«      r2| j                  |«       |j                  | j                  «       «       |S | j                  ||||t        j                  |j                  d¬«      t        j                  |j                  d¬«      «      S ©Nr,  Tr   r   F)r1  r2  r^   r  rL   r*  Úwrap_operandsr¦   r;  r   rž   r•   r>  s        r#   Úvisit_BoolBinopNodez#SwitchTransform.visit_BoolBinopNode  sÖ   € Ø×&Ñ&×*Ñ*Ð+@ÔAØ×Ñ˜tÔ$ØˆKà)-×)GÑ)GØ�$˜ó*Ñ&ˆ�
˜JàÐÜ�z“? QÒ&Ø×,Ñ,¨ZÔ8Ø×Ñ˜tÔ$Ø×Ñ˜t×/Ñ/Ó1Ô2ØˆKà×1Ñ1Ø�*˜j¨&Ü×Ñ˜tŸx™x¨tÔ4Ü×Ñ˜tŸx™x¨uÔ5ó7ð 	7r%   c                 óœ  — | j                   j                  d«      s| j                  |«       |S | j                  d |d«      \  }}}|�t	        |«      dk  s| j                  |«      r| j                  |«       |S | j                  ||||t        j                  |j                  d¬«      t        j                  |j                  d¬«      «      S rA  )
r1  r2  r^   r  rL   r*  r;  r   rž   r•   r>  s        r#   r±   z$SwitchTransform.visit_PrimaryCmpNode’  s¿   € Ø×&Ñ&×*Ñ*Ð+@ÔAØ×Ñ˜tÔ$ØˆKà)-×)GÑ)GØ�$˜ó*Ñ&ˆ�
˜JàÐÜ�z“? QÒ&Ø×,Ñ,¨ZÔ8Ø×Ñ˜tÔ$ØˆKà×1Ñ1Ø�*˜j¨&Ü×Ñ˜tŸx™x¨tÔ4Ü×Ñ˜tŸx™x¨uÔ5ó7ð 	7r%   c           	      ó6  — t        j                  |«      }t        j                  |j                  ||j                  |j                  | j                  «       «      d¬«      }t        j                  |j                  ||j                  |j                  | j                  «       «      d¬«      }	|r|	|}	}t        j                  |j                  ||¬«      g}
t        |«      }t        j                  |j                  ||
|	¬«      }t        j                  ||«      }|S )NT©r‚   rƒ   Úfirstr-  r.  )r   r.   r   r�   r•   rå   rE   r¦   r3  r1   r4  r¨   )r\   r*   r  r  r‘   r<  r=  rª   Ú	true_bodyÚ
false_bodyr0  r8  Úreplacements                r#   r;  z-SwitchTransform.build_simple_switch_statement¤  sý   € ä×,Ñ,¨TÓ2ˆ
Ü×.Ñ.Ø�H‰HØØ×"Ñ" 4§9¡9¨d×.>Ñ.>Ó.@ÓAØô	ˆ	ô
 ×/Ñ/Ø�H‰HØØ×#Ñ# D§I¡I¨t×/?Ñ/?Ó/AÓBØô	ˆ
ñ Ø$.°	�zˆIä×%Ñ%¨D¯H©HØ3=Ø-6ô8ð 9ˆô ! Ó,ˆ
Ü×*Ñ*°·±Ø2<Ø38Ø9CôEˆô  ×6Ñ6°zÀ;ÓOˆØÐr%   c                 ó(  — | j                   j                  d«      s| j                  |«       |S |j                  }|j                  }| j                  |«       |j                  |ur,t        j                  |j                  |«      s|j                  S |S )Nr,  )r1  r2  r^   rý  Ú	lazy_tempr   Útree_contains)r\   r*   Ú	orig_exprÚtemp_refs       r#   Úvisit_EvalWithTempExprNodez*SwitchTransform.visit_EvalWithTempExprNodeÁ  sƒ   € Ø×&Ñ&×*Ñ*Ð+@ÔAØ×Ñ˜tÔ$ØˆKð ×&Ñ&ˆ	Ø—>‘>ˆØ×Ñ˜4Ô Ø×Ñ YÑ.ä×(Ñ(¨×);Ñ);¸XÔFØ×)Ñ)Ð)Øˆr%   N)rl   rm   rn   ro   r   r  r  r  r*  r9  r?  rC  r±   r;  rP  r   ÚVisitorTransformÚrecurse_to_childrenrp   re   r%   r#   rõ  rõ  ×  sU   „ ñð
 "€Hò5òn3ò	'òò2$òL+ò"7ò&7ò$ò:ð ×)Ñ)×=Ñ=�Jr%   rõ  c                   óB   — e Zd ZdZd„ Zej                  j                  Zy)ÚFlattenInListTransformzj
    This transformation flattens "x in [val1, ..., valn]" into a sequential list
    of comparisons.
    c                 óf  ‡‡— | j                  ‰«       ‰j                  �‰S ‰j                  dk(  rdŠd}n‰j                  dk(  rdŠd}n‰S t        ‰j                  t
        j                  t
        j                  t
        j                  f«      s‰S ‰j                  }‰j                  j                  }t        |«      dk(  rB|j                  «       r0‰j                  dk(  }t        j                  ‰j                  |¬«      S ‰S t        |D �cg c]  }|j                   ‘Œ c}«      r‰S t#        j$                  |«      }g }g }|D ]›  }|j                  «       s&t#        j&                  |«      }|j)                  |«       t        j*                  ‰j                  |||d ¬	«      }	|j)                  t        j,                  ‰j                  |	t.        j0                  ¬
«      «       Œ� ˆˆfd„}
t3        |
|«      }t#        j4                  ||«      }|d d d…   D ]  }t#        j4                  ||«      }Œ |S c c}w )NÚinrø  r|   r‘   r!  r÷  r   r   )r•   rB   r~   rC   rÿ  )r•   r“   rE   c                 óJ   •— t        j                  ‰j                  ‰| |¬«      S )N)r•   r~   rB   rC   )r   r0  r•   )ÚleftÚrightÚconjunctionr*   s     €€r#   Úconcatz;FlattenInListTransform.visit_PrimaryCmpNode.<locals>.concat  s&   ø€ Ü×*Ñ*Ø&*§h¡hØ+6Ø+/Ø+0ô	2ð 2r%   rI   )r^   rÿ  r~   r(   rC   r   Ú	TupleNoderã   ÚSetNoderB   rÄ   rL   Útry_is_simplerž   r•   râ   r¾   r   r.   r+  rN   r›   rþ  r	   Úc_bint_typer   rü  )r\   r*   Ú	eq_or_neqr‚   rÄ   r=   r)   Úcondsr�   r  r[  r‡   r°   r¥  rZ  s    `            @r#   r±   z+FlattenInListTransform.visit_PrimaryCmpNodeÙ  sð  ù€ Ø×Ñ˜4Ô Ø�<‰<Ð#ØˆKØ�]‰]˜dÒ"ØˆKØ‰IØ�]‰]˜hÒ&ØˆKØ‰IàˆKä˜$Ÿ-™-¬)×*=Ñ*=Ü*3×*<Ñ*<Ü*3×*;Ñ*;ð*=ô >ð ˆKà�m‰mˆØ�}‰}×!Ñ!ˆÜˆt‹9˜Š>à× Ñ Ô"Ø"&§-¡-°8Ñ";�Ü ×)Ñ)¨$¯(©(¸/ÔJÐJØˆKä©$Ó/©$ 3�—“¨$Ñ/Ô0àˆKä×%Ñ% cÓ*ˆàˆØˆÛˆCà×$Ñ$Ô&ä×*Ñ*¨3Ó/�Ø—‘˜SÔ!Ü×+Ñ+Ø&*§h¡hØ+.Ø+4Ø+.Ø*.ô0ˆDð �L‰Lœ×/Ñ/Ø&*§h¡hØ*.Ü'1×'=Ñ'=ô?õ @ð õ 	2ô ˜6 5Ó)ˆ	Ü×1Ñ1°#°yÓAˆØ™$˜B˜$”KˆDÜ ×5Ñ5°d¸HÓE‰Hð  àˆùòG 0s   ÄH.N)	rl   rm   rn   ro   r±   r   rQ  rR  rp   re   r%   r#   rT  rT  Ó  s    „ ñò
>ð@ ×)Ñ)×=Ñ=�Jr%   rT  c                   óN   — e Zd ZdZej
                  j                  Zd„ Zd„ Z	d„ Z
y)ÚDropRefcountingTransformz&Drop ref-counting in safe places.
    c                 ó  — g g }}g g }}g }|j                   D ]‚  }t        |t        j                  «      rE| j	                  |j
                  |||«      s|c S | j	                  |j                  |||«      rŒ^|c S t        |t        j                  «      r|c S |c S  |s|rc|D ��	cg c]  \  }}	|‘Œ	 }
}}	|D ��	cg c]  \  }}	|‘Œ	 }}}	t        |
«      t        |«      k7  r|S t        t        |
«      «      t        |«      k7  r|S |s|rŸg }|D ]*  }| j                  |«      }|s|c S |j                  |«       Œ, g }|D ]*  }| j                  |«      }|s|c S |j                  |«       Œ, t        |«      t        |«      k7  r|S t        t        |«      «      t        |«      k7  r|S |S |D �cg c]  }|j                  ‘Œ }}|D ]	  }d|_        Œ ||z   D ]  \  }}||vsŒd|_        Œ ||z   D ]	  }d|_        Œ |S c c}	}w c c}	}w c c}w )zF
        Parallel swap assignments like 'a,b = b,a' are safe.
        F)r…   r(   r   r�   Ú_extract_operandr‚   rƒ   ÚCascadedAssignmentNoderK   rL   Ú_extract_index_idrN   r)   Úuse_managed_ref)r\   r*   Ú
left_namesÚright_namesÚleft_indicesÚright_indicesr�   ÚstatÚpathÚnÚlnamesÚrnamesÚlindicesÚlhs_nodeÚindex_idÚrindicesÚrhs_nodeÚtÚ	temp_argsr¥  r6  Ú	name_nodeÚ
index_nodes                          r#   Úvisit_ParallelAssignmentNodez5DropRefcountingTransform.visit_ParallelAssignmentNode!  s!  € ð #% b�Kˆ
Ø&(¨"�mˆØˆà—J”JˆDÜ˜$¤× :Ñ :Ô;Ø×,Ñ,¨T¯X©X°zØ-9¸5ôBà’KØ×,Ñ,¨T¯X©X°{Ø-:¸EõCà’KÜ˜D¤%×">Ñ">Ô?à’à’ð ñ ™á+5Ô7©:¡  a’t¨:ˆFÑ7Ù+6Ô8©;¡  a’t¨;ˆFÑ8Ü�6‹{œc &›kÒ)Ø�Ü”3�v“;Ó¤3 {Ó#3Ò3Ø�á™=ð ˆHÛ(�Ø×1Ñ1°(Ó;�ÙØ’KØ—‘ Õ)ð	 )ð
 ˆHÛ)�Ø×1Ñ1°(Ó;�ÙØ’KØ—‘ Õ)ð	 *ô �8‹}¤ H£Ò-Ø�Ü”3�x“=Ó!¤S¨Ó%7Ò7Ø�ð ˆKá$)Ó*¡E˜q�Q—U“U Eˆ	Ð*ÛˆDØ#(ˆDÕ ð ð '¨Ô4‰LˆAˆyØ 	Ò)Ø,1�	Õ)ð 5ð '¨Ô6ˆJØ).ˆJÕ&ð 7ð ˆùóW 8ùÛ8ùò> +s   Â%G9Â9G?Æ*Hc                 óô  — t        |«      }|j                  j                  syt        |t        j
                  «      r|j                  |«       |j                  }g }|}|j                  rA|j                  ry|j                  |j                  «       |j                  }|j                  rŒA|j                  rD|j                  |j                  «       |j                  dj                  |d d d…   «      |f«       y|j                  rr|j                   j                  t"        j$                  k7  ry|j&                  j                  j(                  sy|j                   j                  sy|j                  |«       yy)NFÚ.rI   T)r1   rE   rá   r(   r   rù  rN   r)   rÓ   r6   Úmemberr8   rÒ   r"   Újoinr–   r—   r
   r  r"  r  )r\   r*   ÚnamesÚindicesr�   Ú	name_pathÚobj_nodes          r#   re  z)DropRefcountingTransform._extract_operandf  s(  € Ü˜4Ó ˆØ�y‰y×$Ò$ØÜ�dœI×6Ñ6Ô7Ø�L‰L˜ÔØ—8‘8ˆDØˆ	ØˆØ×#Ò#Ø×"Ò"ØØ×Ñ˜XŸ_™_Ô-Ø—|‘|ˆHð	 ×#Ó#ð
 ×ÒØ×Ñ˜XŸ]™]Ô+Ø�L‰L˜3Ÿ8™8 I©d°¨d¡OÓ4°dÐ;Ô=ð ð ×ÒØ�y‰y�~‰~¤×!2Ñ!2Ò2ØØ—:‘:—?‘?×)Ò)ØØ—9‘9×$Ò$ØØ�N‰N˜4Ô ð ð r%   c                 óÔ   — |j                   }|j                  }t        |t        j                  «      r|j
                  }nt        |t        j                  «      ry y |j
                  |fS r'   )r—   r"  r(   r   r4   r"   Ú	ConstNode)r\   rz  r—   r"  Ú	index_vals        r#   rg  z*DropRefcountingTransform._extract_index_idƒ  sT   € Ø�‰ˆØ× Ñ ˆÜ�eœY×/Ñ/Ô0ØŸ
™
‰IÜ˜œy×2Ñ2Ô3ààØ—	‘	˜9Ð%Ð%r%   N)rl   rm   rn   ro   r   rQ  rR  rp   r{  re  rg  re   r%   r#   rc  rc    s)   „ ñà×)Ñ)×=Ñ=€JòCòJó:
&r%   rc  c                   óF  — e Zd ZdZej
                  j                  Zd„ Zd„ Z	d„ Z
dd„Zdd„Zdd„Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Z ej*                  ej.                   ej0                  dej2                  d«      g«      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&y)ÚEarlyReplaceBuiltinCallsa¼  Optimize some common calls to builtin types *before* the type
    analysis phase and *after* the declarations analysis phase.

    This transform cannot make use of any argument types, but it can
    restructure the tree in a way that the type analysis phase can
    respond to.

    Introducing C function calls here may not be a good idea.  Move
    them to the OptimizeBuiltinCalls transform instead, which runs
    after type analysis.
    c                 óœ   — | j                  |«       |j                  }| j                  |«      s|S | j                  |||j                  «      S r'   )r^   rø   Ú_function_is_builtin_nameÚ_dispatch_to_handlerrÄ   )r\   r*   rø   s      r#   Úvisit_SimpleCallNodez-EarlyReplaceBuiltinCalls.visit_SimpleCallNodeŸ  sE   € Ø×Ñ˜4Ô Ø—=‘=ˆØ×-Ñ-¨hÔ7ØˆKØ×(Ñ(¨¨x¸¿¹ÓCÐCr%   c                 ó  — | j                  |«       |j                  }| j                  |«      s|S |j                  }t	        |t
        j                  «      s|S |j                  }| j                  ||||j                  «      S r'   )
r^   rø   rŠ  Úpositional_argsr(   r   r\  rÄ   r‹  Úkeyword_args)r\   r*   rø   r÷   rÄ   s        r#   Úvisit_GeneralCallNodez.EarlyReplaceBuiltinCalls.visit_GeneralCallNode¦  sw   € Ø×Ñ˜4Ô Ø—=‘=ˆØ×-Ñ-¨hÔ7ØˆKØ×(Ñ(ˆ	Ü˜)¤Y×%8Ñ%8Ô9ØˆKØ�~‰~ˆØ×(Ñ(Ø�(˜D $×"3Ñ"3ó5ð 	5r%   c                 óÌ   — |j                   sy| j                  «       }|j                  |j                  «      }||j	                  «       j                  |j                  «      uryy)NFT)rÒ   r¦   r-  r"   r,  Úlookup_here)r\   rø   r  rÔ   s       r#   rŠ  z2EarlyReplaceBuiltinCalls._function_is_builtin_name²  sT   € Ø×ÒØØ×ÑÓ ˆØ—
‘
˜8Ÿ=™=Ó)ˆØ˜×)Ñ)Ó+×7Ñ7¸¿¹ÓFÑFØàr%   Nc                 ó�   — |€d|j                   z  }nd|j                   z  }t        | |d «      }|�|€	 |||«      S  ||||«      S |S )Nz_handle_simple_function_%sz_handle_general_function_%s)r"   r  )r\   r*   rø   rÄ   ÚkwargsÚhandler_nameÚhandle_calls          r#   r‹  z-EarlyReplaceBuiltinCalls._dispatch_to_handler¼  s]   € Øˆ>Ø7¸(¿-¹-ÑG‰Là8¸8¿=¹=ÑHˆLÜ˜d L°$Ó7ˆØÐ"Øˆ~Ù" 4¨Ó.Ð.á" 4¨¨vÓ6Ð6Øˆr%   c                 ó’   — t        j                  |j                  j                  |j                  j                  |||¬«      |_        y )N©ro  )r   ÚPythonCapiFunctionNoderø   r•   r"   )r\   r*   r$  Ú	func_typero  s        r#   Ú_inject_capi_functionz.EarlyReplaceBuiltinCalls._inject_capi_functionÉ  s4   € Ü!×8Ñ8Ø�M‰M×Ñ˜tŸ}™}×1Ñ1°5¸)Ø'ô)ˆ�r%   c           
      ó²   — |sd}n"t        |t        «      s|dkD  rd}n
|dk(  rd}nd}|�d|z  }nd}t        |j                  d|||t	        |«      fz  «       y ©NrÅ  r   z...Úxzexpected %s, z3%s(%s) called with wrong number of args, %sfound %d©r(   r®  r   r•   rL   ©r\   Úfunction_namer*   rÄ   ÚexpectedÚarg_strÚexpected_strs          r#   Ú_error_wrong_arg_countz/EarlyReplaceBuiltinCalls._error_wrong_arg_countÎ  ón   € ÙØ‰GÜ˜¤#Ô&¨(°Qª,Ø‰GØ˜Š]Ø‰GàˆGØÐØ*¨XÑ5‰LàˆLÜˆd�h‰hÐMØ˜7 L´#°d³)ðQ=ñ =õ 	>r%   c                 óþ   — |s!t        j                  |j                  d¬«      S t        |«      dkD  r| j	                  d||d«       t        |d   dd «      }|t        j                  t        j                  fv r|d   S |S )Nú0.0r   r   Úfloatr   rE   )
r   Ú	FloatNoder•   rL   r¥  r  r	   Úc_double_typer
   Ú
float_type)r\   r*   Úpos_argsÚarg_types       r#   Ú_handle_simple_function_floatz6EarlyReplaceBuiltinCalls._handle_simple_function_floatà  sv   € ÙÜ×&Ñ& t§x¡x°uÔ=Ð=Üˆx‹=˜1ÒØ×'Ñ'¨°°xÀÔCÜ˜8 A™;¨°Ó5ˆØœ
×0Ñ0´'×2DÑ2DÐEÑEØ˜A‘;ÐØˆr%   c                 óV  — t        |«      }d x}}|dk(  r|\  }n,|dk(  r|\  }}n!|dk(  r|\  }}}n| j                  d||«       |S t        j                  |j                  |xs t        j
                  |j                  «      ||xs t        j
                  |j                  «      ¬«      S )Nr   r   rÇ   Úslice)rV  rX  rW  )rL   r¥  r   r‰  r•   ÚNoneNode)r\   r*   r­  r  rV  rW  rX  s          r#   Ú_handle_simple_function_slicez6EarlyReplaceBuiltinCalls._handle_simple_function_sliceê  s¨   € Ü˜“Mˆ	ØÐˆ�Ø˜Š>Ø‰E‰DØ˜!Š^Ø"‰KˆE‘4Ø˜!Š^Ø (ÑˆE�4™à×'Ñ'¨°°xÔ@ØˆKÜ×"Ñ"Ø�H‰HØÒ7œ9×-Ñ-¨d¯h©hÓ7ØØÒ5œ×+Ñ+¨D¯H©HÓ5ô	7ð 	7r%   c                 óN  — t        |«      dk7  r|S |d   }t        |t        j                  t        j                  f«      ret        |j
                  «      dk(  rMt        j                  j                  |j                  t        |j
                  «      t        j                  ¬«      S |S )zUnpack ord('X').
        r   r   rÅ   )rL   r(   r   r   rr  r€   rí   rî   r•   rë   r	   Úc_long_type)r\   r*   r­  r)   s       r#   Ú_handle_simple_function_ordz4EarlyReplaceBuiltinCalls._handle_simple_function_ordü  s~   € ô ˆx‹=˜AÒØˆKØ�q‰kˆÜ�cœI×1Ñ1´9×3FÑ3FÐGÔHÜ�3—9‘9‹~ Ò"Ü ×(Ñ(×0Ñ0°·±¼#¸c¿i¹i».Ìz×OeÑOeÐ0ÓfÐfØˆr%   c                 ó(   — | j                  ||d«      S )zæTransform

        _result = all(p(x) for L in LL for x in L)

        into

        for L in LL:
            for x in L:
                if not p(x):
                    return False
        else:
            return True
        F©Ú_transform_any_all©r\   r*   r­  s      r#   Ú_handle_simple_function_allz4EarlyReplaceBuiltinCalls._handle_simple_function_all	  s   € ð ×&Ñ& t¨X°uÓ=Ð=r%   c                 ó(   — | j                  ||d«      S )zâTransform

        _result = any(p(x) for L in LL for x in L)

        into

        for L in LL:
            for x in L:
                if p(x):
                    return True
        else:
            return False
        Tr¸  rº  s      r#   Ú_handle_simple_function_anyz4EarlyReplaceBuiltinCalls._handle_simple_function_any  s   € ð ×&Ñ& t¨X°tÓ<Ð<r%   c                 ó0  — t        |«      dk7  r|S t        |d   t        j                  «      s|S |d   }|j                  j
                  }|j                  }t        |«      \  }}|€|S |r|}	n!t        j                  |j                  |¬«      }	t        j                  |j                  d t        j                  |j                  |	t        j                  |j                  t        j                  |j                  |¬«      ¬«      ¬«      g¬«      }
t        j                  |j                  t        j                  |j                  | ¬«      ¬«      |_        t!        j"                  |||
«       t        j$                  |j                  ||rd¬	«      S d¬	«      S )
Nr   r   r’   r   r†   )r‹   rŠ   râ   Úall)ÚgenÚ	orig_func)rL   r(   r   ÚGeneratorExpressionNodeÚdef_nodeÚgbodyrˆ   rt   r©   r•   r   r    r¡   ÚReturnStatNoderž   r‹   r   Úrecursively_replace_nodeÚInlinedGeneratorExpressionNode)r\   r*   r­  Úis_anyÚgen_expr_nodeÚgenerator_bodyrK  Úyield_expressionÚyield_stat_noder‡   rE  s              r#   r¹  z+EarlyReplaceBuiltinCalls._transform_any_all)  ss  € Üˆx‹=˜AÒØˆKÜ˜( 1™+¤y×'HÑ'HÔIØˆKØ  ™ˆØ&×/Ñ/×5Ñ5ˆØ"×'Ñ'ˆ	Ü,IÈ)Ó,TÑ)Ð˜/ØÐ#ØˆKáØ(‰Iä!×)Ñ)Ð*:×*>Ñ*>ÐHXÔYˆIä×$Ñ$Ø× Ñ ¨dÜ×"Ñ"Ø$×(Ñ(Ø'Ü×-Ñ-ØŸ™Ü'×0Ñ0Ð1A×1EÑ1EÈVÔTôVôð@ô	
ˆ	ô !&× 4Ñ 4Ø�H‰HÜ×$Ñ$Ð%5×%9Ñ%9ÀVÀÔLô!Nˆ	Ôô 	×(Ñ(¨¸ÈÔSä×7Ñ7Ø×Ñ =ÁV¸EôXð 	XØQVôXð 	Xr%   Úitc                 óZ  — t        |«      dk7  r|S |d   }t        |t        j                  «      r |j                  t
        j                  u r|}�n=t        |t        j                  «      rš|}t        |j                  «      }|s|S t        j                  |j                  |dt
        j                  ¬«      }|D ]H  \  }}t        j                  |j                  ||j                  ¬«      }	t        j                  |||	«       ŒJ n‰|j                   r|j#                  «       }nlt        j$                  |j                  |j'                  «       r.|j                  t(        j*                  t
        j                  fv rdnd| j,                  |d¬	«      }t        j.                  |j                  |«      S )
a  Transform sorted(genexpr) and sorted([listcomp]) into
        [listcomp].sort().  CPython just reads the iterable into a
        list and calls .sort() on it.  Expanding the iterable in a
        listcomp is still faster and the result can be sorted in
        place.
        r   r   r  ©rÁ  Úcomprehension_type©rb   r�   Ú__Pyx_PySequence_ListKeepNewÚPySequence_ListTrT  )rL   r(   r   ÚComprehensionNoderE   r
   r  rÂ  rr   ÚlooprÇ  r•   ÚComprehensionAppendNoder�   r   rÆ  rÞ   Úas_listrY  Úresult_in_tempr	   rÌ  ÚPySequence_List_func_typeÚSortedListNode)
r\   r*   r­  r)   Ú	list_noderÉ  rs   rË  rÌ  Úappend_nodes
             r#   Ú_handle_simple_function_sortedz7EarlyReplaceBuiltinCalls._handle_simple_function_sortedQ  sm  € ô ˆx‹=˜AÒØˆKà�q‰kˆÜ�cœ9×6Ñ6Ô7¸C¿H¹HÌ×HYÑHYÑ<YØŠIä˜œY×>Ñ>Ô?ØˆMÜ5°m×6HÑ6HÓIÐÙ#Ø�ä!×@Ñ@Ø—‘˜-°8Ü#*×#4Ñ#4ô6ˆIó 6FÑ1Ð  /Ü'×?Ñ?Ø$×(Ñ(Ø)Ø$×+Ñ+ô-�ô ×0Ñ0°ÀÐQ\Õ]ñ 6Fð ×(Ò(ð Ÿ™›‰Iô
 "×4Ñ4Ø—‘à×)Ñ)Ô+°·±¼Z×=VÑ=VÔX_×XiÑXiÐ<jÑ0jñ /à*Ø×.Ñ.Ø tô-ˆIô ×'Ñ'¨¯©°)Ó<Ð<r%   c           
      ó^  — t        |«      dvr|S t        |d   t        j                  t        j                  f«      s|S |d   }|j
                  }t        |t        j                  «      rt        |«      \  }}d}|€@|S |j                  }|j                  }	 |j                  r|j                  j                  s|S 	 t        |«      dk(  r+t        j                  j                  |j                  d«      }n|d   }t!        j"                  |j                  t$        j&                  ¬«      }t)        j*                  |j                  |t        j,                  |j                  d||«      ¬«      }	t/        j0                  |||	«       t)        j2                  |j                  t)        j*                  |j                  t!        j"                  |j                  |¬«      |d	¬
«      |g¬«      }
t        j4                  |j                  |
||j6                  d|j8                  ¬«      S # t        $ r |cY S w xY w)zLTransform sum(genexpr) into an equivalent inlined aggregation loop.
        ©r   r   r   Nr   )r•   rE   r(  r�   )r•   r/   TrF  r„   Úsum)rÕ  Úresult_nodeÚ
expr_scoperÁ  Úhas_local_scope)rL   r(   r   rÂ  rÔ  rÕ  rt   rN   rb   rp  rE   r  r%  rí   r/  r•   r   r.   r	   rÌ  r   r�   r7  r   rÆ  rœ   rÇ  râ  rã  )r\   r*   r­  rÉ  rK  rË  rÌ  rV  rª   Úadd_nodeÚ	exec_codes              r#   Ú__handle_simple_function_sumz5EarlyReplaceBuiltinCalls.__handle_simple_function_sum‚  sø  € ô ˆx‹= Ñ%ØˆKÜ˜( 1™+¬	×(IÑ(IÜ(1×(CÑ(Cð(Eô FàˆKØ  ™ˆØ!×&Ñ&ˆ	ä�m¤Y×%FÑ%FÔGÜ0MÈiÓ0XÑ-Ð˜oà#ÐØÐ'Ø�à+×2Ñ2ˆOØ.×3Ñ3ÐðØ'×2Ò2Ð:J×:OÑ:O×:VÒ:VØ�Kð ;Wô ˆx‹=˜AÒÜ×%Ñ%×.Ñ.¨t¯x©x¸Ó;‰Eà˜Q‘KˆEä×,Ñ,°·±Ä
×@YÑ@YÔZˆ
Ü×-Ñ-Ø× Ñ ØÜ×&Ñ& t§x¡x°°jÐBRÓSôˆô 	×(Ñ(¨¸ÈÔRä×&Ñ&Ø�H‰Hä×*Ñ*Ø—I‘IÜ#×1Ñ1°d·h±hÈ:ÔVØØ ô	"ð
 ðô	ˆ	ô ×7Ñ7Ø×Ñ i¸zØ&×1Ñ1¸uØ+×;Ñ;ô=ð 	=øô= "ò Ø’ðús   Â#H ÈH,È+H,c                 ó(   — | j                  ||d«      S )Nr   ©Ú_optimise_min_maxrº  s      r#   Ú_handle_simple_function_minz4EarlyReplaceBuiltinCalls._handle_simple_function_min¼  ó   € Ø×%Ñ% d¨H°cÓ:Ð:r%   c                 ó(   — | j                  ||d«      S )Nr  rè  rº  s      r#   Ú_handle_simple_function_maxz4EarlyReplaceBuiltinCalls._handle_simple_function_max¿  rë  r%   c                 ó"  — t        |«      dk  r<t        |«      dk(  r|d   j                  r|d   j                  }t        |«      dk  r|S t        t	        t
        j                  |dd «      «      }|d   }|D ]q  }t        j                  |«      }t        j                  |j                  ||t        j                  |j                  |||¬«      ¬«      }t        j                  ||«      }Œs |ddd…   D ]  }t        j                  ||«      }Œ |S )zKReplace min(a,b,...) and max(a,b,...) by explicit comparison code.
        r   r   N©rB   r~   rC   )r<  r=  r/  rI   )rL   rÞ   rÄ   Úlistrê   r   r.   r   ÚCondExprNoder•   r›   rü  )	r\   r*   rÄ   r~   Úcascaded_nodesÚlast_resultÚarg_noderª   Úref_nodes	            r#   ré  z*EarlyReplaceBuiltinCalls._optimise_min_maxÂ  s  € ô ˆt‹9˜Š>Ü�4‹y˜AŠ~ $ q¡'×"AÒ"AØ˜A‘w—|‘|�Ü�4‹y˜AŠ~à�äœc¤)×"9Ñ"9¸4ÀÀ¸8ÓDÓEˆà˜1‘gˆÛ&ˆHÜ"×0Ñ0°Ó=ˆJÜ#×0Ñ0Ø—‘Ø#Ø&Ü ×/Ñ/Ø—L‘LØ'Ø'Ø)ô	ô	
ˆKô $×8Ñ8¸À[ÓQ‰Kð 'ð '¡t¨ tÔ,ˆHÜ#×8Ñ8¸À;ÓO‰Kð -ð Ðr%   c                 óÚ   — |s"t        j                  |j                  g d¬«      S | j                  ||t        j
                  «      }||ur!t        j                  |j                  |¬«      S |S )Nre   ©rÄ   r=   )r)   )r   r\  r•   Ú_transform_list_set_genexprr
   r  ÚAsTupleNode)r\   r*   r­  Úresults       r#   Ú&_DISABLED_handle_simple_function_tuplez?EarlyReplaceBuiltinCalls._DISABLED_handle_simple_function_tupleå  s^   € ÙÜ×&Ñ& t§x¡x°bÈ"ÔMÐMð ×1Ñ1°$¸Ä'×BSÑBSÓTˆØ˜ÑÜ×(Ñ(¨¯©°vÔ>Ð>Øˆr%   c                 óÒ   — t        |«      dk7  r|S |d   j                  r|d   j                  s|d= |S t        |d   t        j
                  «      r|d   j                  «       |d<   |S )zSReplace frozenset([...]) by frozenset((...)) as tuples are more efficient.
        r   r   )rL   rÞ   rÄ   r(   r   rã   Úas_tuplerº  s      r#   Ú!_handle_simple_function_frozensetz:EarlyReplaceBuiltinCalls._handle_simple_function_frozensetô  sm   € ô ˆx‹=˜AÒØˆKØ�A‰;×.Ò.°xÀ±{×7GÒ7GØ˜�ð ˆô ˜ ™¤Y×%7Ñ%7Ô8Ø" 1™+×.Ñ.Ó0ˆH�Q‰KØˆr%   c                 óŒ   — |s"t        j                  |j                  g g ¬«      S | j                  ||t        j
                  «      S ©Nr÷  )r   rã   r•   rø  r
   r  rº  s      r#   Ú_handle_simple_function_listz5EarlyReplaceBuiltinCalls._handle_simple_function_listÿ  s9   € ÙÜ×%Ñ% d§h¡h°RÈÔLÐLØ×/Ñ/°°hÄ×@QÑ@QÓRÐRr%   c                 óœ   — |s*t        j                  |j                  g t        «       ¬«      S | j	                  ||t
        j                  «      S r   )r   r]  r•   rK   rø  r
   rØ   rº  s      r#   Ú_handle_simple_function_setz4EarlyReplaceBuiltinCalls._handle_simple_function_set  s;   € ÙÜ×$Ñ$ T§X¡X°BÌËÔNÐNØ×/Ñ/°°hÄ×@PÑ@PÓQÐQr%   c                 ó¬  — t        |«      dkD  r|S t        |d   t        j                  «      s|S |d   }|j                  }t        |«      }|s|S t        j                  |j                  ||t        j                  u rdnd|¬«      }|D ]H  \  }}	t        j                  |j                  ||j                  ¬«      }
t        j                  ||	|
«       ŒJ |S )zLReplace set(genexpr) and list(genexpr) by an inlined comprehension.
        r   r   rK   rð  rÏ  rÑ  )rL   r(   r   rÂ  rÕ  rr   rÇ  r•   r
   rØ   rÖ  r�   r   rÆ  )r\   r*   r­  r]  rÉ  rK  rs   rá  rË  rÌ  rÜ  s              r#   rø  z4EarlyReplaceBuiltinCalls._transform_list_set_genexpr	  sØ   € ô ˆx‹=˜1ÒØˆKÜ˜( 1™+¤y×'HÑ'HÔIØˆKØ  ™ˆØ!×&Ñ&ˆ	ä1°)Ó<ÐÙØˆKä×>Ñ>Ø�H‰H�mØ*¬g×.>Ñ.>Ñ>‘eÀFØ*ô,ˆó
 2BÑ-Ð˜oÜ#×;Ñ;Ø ×$Ñ$Ø%Ø"×)Ñ)ô+ˆKô ×,Ñ,¨]¸OÈ[ÕYð 2Bð Ðr%   c                 ó¾  — t        |«      dk(  r"t        j                  |j                  g i ¬«      S t        |«      dkD  r|S t	        |d   t        j
                  «      s|S |d   }|j                  }t        |«      }|s|S |D ]?  \  }}t	        |t        j                  «      s|c S t        |j                  «      dk7  sŒ=|c S  t        j                  |j                  |dt        j                  ¬«      }|D ]c  \  }}	t        j                  |j                  |j                  d   |j                  d   |j                  ¬«      }
t        j                   ||	|
«       Œe |S )zDReplace dict( (a,b) for ... ) by an inlined { a:b for ... }
        r   ©Úkey_value_pairsr=   r   r   rÉ   rÏ  )Úkey_exprÚ
value_exprr�   )rL   r   ÚDictNoder•   r(   rÂ  rÕ  rr   r\  rÄ   rÇ  r
   rÖ   ÚDictComprehensionAppendNoder�   r   rÆ  )r\   r*   r­  rÉ  rK  rs   rË  r6  rá  rÌ  rÜ  s              r#   Ú_handle_simple_function_dictz5EarlyReplaceBuiltinCalls._handle_simple_function_dict%  sN  € ô ˆx‹=˜AÒÜ×%Ñ% d§h¡hÀÐTVÔWÐWÜˆx‹=˜1ÒØˆKÜ˜( 1™+¤y×'HÑ'HÔIØˆKØ  ™ˆØ!×&Ñ&ˆ	ä1°)Ó<ÐÙØˆKã#3ÑÐ˜aÜÐ.´	×0CÑ0CÔDØ’ÜÐ#×(Ñ(Ó)¨QÓ.Ø’ð	 $4ô  ×>Ñ>Ø�H‰H�m¨vÜ&×0Ñ0ô2ˆó 2BÑ-Ð˜oÜ#×?Ñ?Ø ×$Ñ$Ø)×.Ñ.¨qÑ1Ø+×0Ñ0°Ñ3Ø"×)Ñ)ô	+ˆKô
 ×,Ñ,¨]¸OÈ[ÕYð 2Bð Ðr%   c                 ó^   — t        |«      dkD  r|S t        |t        j                  «      s|S |S )zlReplace dict(a=b,c=d,...) by the underlying keyword dict
        construction which is done anyway.
        r   )rL   r(   r   r
  )r\   r*   r­  r”  s       r#   Ú_handle_general_function_dictz6EarlyReplaceBuiltinCalls._handle_general_function_dictK  s/   € ô ˆx‹=˜1ÒØˆKÜ˜&¤)×"4Ñ"4Ô5ØˆKØˆr%   r'   )'rl   rm   rn   ro   r   rQ  rR  rp   rŒ  r�  rŠ  r‹  r›  r¥  r¯  r³  r¶  r»  r½  r¹  r	   rñ  r
   r  ró  rÌ  rÙ  rÝ  Ú5_EarlyReplaceBuiltinCalls__handle_simple_function_sumrê  rí  ré  rû  rþ  r  r  rø  r  r  re   r%   r#   rˆ  rˆ  �  s×   „ ñ
ð ×)Ñ)×=Ñ=€JòDò
5òóó)ó
>ò$ò7ò$	ò>ò =ò "XðH !5 
× 4Ñ 4Ø×ÑØ	 ˆ×	 Ñ	   z×'@Ñ'@À$Ó	GÐHó!JÐò/=òb8=òt;ò;òòFò	òSò
Rò
ò8"óLr%   rˆ  c                   óD   — e Zd Zej                  j
                  Zd„ Zd„ Zy)ÚInlineDefNodeCallsc                 ó  — |j                   €y |j                   j                  ry | j                  «       j                  |j                  «      }|r$|j
                  rt        |j
                  «      dk7  ry |j
                  d   j                  S ©Nr   r   )Úcf_stateÚ
cf_is_nullr¦   r-  r"   Úcf_assignmentsrL   rƒ   )r\   ry  rÔ   s      r#   Úget_constant_value_nodez*InlineDefNodeCalls.get_constant_value_nodeY  sx   € Ø×ÑÐ%ØØ×Ñ×(Ò(ØØ× Ñ Ó"×)Ñ)¨)¯.©.Ó9ˆÙ˜U×1Ò1Ü × 4Ñ 4Ó5¸Ò:àØ×#Ñ# AÑ&×*Ñ*Ð*r%   c                 ó¤  — | j                  |«       | j                  j                  d«      s|S |j                  }|j                  s|S | j                  |«      }t        |t        j                  «      s|S t        j                  |j                  |||j                  |j                  ¬«      }|j                  «       r| j                  ||«      S |S )Nzoptimize.inline_defnode_calls)r¡  rø   rÄ   Úgenerator_arg_tag)r^   r1  r2  rø   rÒ   r  r(   r   ÚPyCFunctionNodeÚInlinedDefNodeCallNoder•   rÄ   r  Úcan_be_inlinedÚreplace)r\   r*   r¡  rø   Úinlineds        r#   rŒ  z'InlineDefNodeCalls.visit_SimpleCallNodee  sµ   € Ø×Ñ˜4Ô Ø×&Ñ&×*Ñ*Ð+JÔKØˆKØŸ™ˆØ×$Ò$ØˆKØ×/Ñ/°Ó>ˆÜ˜(¤I×$=Ñ$=Ô>ØˆKÜ×2Ñ2Ø�H‰H MØ D§I¡IØ"×4Ñ4ô6ˆð ×!Ñ!Ô#Ø—<‘<  gÓ.Ð.Øˆr%   N)	rl   rm   rn   r   rQ  rR  rp   r  rŒ  re   r%   r#   r  r  V  s   „ Ø×)Ñ)×=Ñ=€Jò
+ór%   r  c                   óÊ'  — e Zd ZdZd„ Zd„ Zd„ Zd„ Z ej                  ej                   ej                  dej                  d«      g«      Zd„ Zd	„ Zej                  ej                   ej"                  fD � ��ci c]/  }|t        j                  |t        j                  d
|d«      g«      “Œ1 c}}} Zd„ Z ej                  ej(                   ej                  d
ej*                  d«      gd¬«      Z ej                  ej                    ej                  d
ej*                  d«      gd¬«      Zd„ Zd–d„Zd„ Zd„ Zd„ Z ej                  ej<                   ej                  dej                  d«      g«      Zd„ Z e Z!d„ Z" ej                  ejF                   ej                  dejF                  d«      g«      Z$d„ Z% ej                  ejL                   ej                  dej                  d«      g«      Z'd„ Z( ej                  ejR                   ej                  dejL                  d«      g«      Z*d„ Z+ ej                  ejX                   ej                  dej                  d«      g«      Z-d„ Z. ej                  ej^                   ej                  dej                  d«      g«      Z0d„ Z1 ej                  ej                    ej                  dej                  d«      gdd ¬!«      Z2d"„ Z3 ej                  ejh                   ej                  dej                  d«      g«      Z5 ej                  ejh                   ej                  d#ej                   d«      g«      Z6d$„ Z7d%„ Z8 ej                  ejr                   ej                  d#ej                  d«      g«      Z: ej                  ejr                   ej                  d#ejv                  d«      g«      Z<d&„ Z= ej                  ej|                   ej                  d'ej~                  d«      gd¬«      Z@ ej                  ej|                   ej                  d(ej‚                  d«      gd¬«      ZB ej                  ej|                   ej                  dej                  d«      gd¬«      ZCej<                  d)ejˆ                  d*ejŠ                  d+ejL                  d,ejR                  d-ejX                  d.ej^                  d.ejF                  d/ijŒ                  ZGd0hZHd1„ ZI ej                  ej”                   ej                  d2ej                  d«      g«      ZKd3„ ZL ej                  ejš                   ej                  d
ej                  d«      g«      ZNd4„ ZOd5„ ZP ej                  ej                   ej                  d6ej                  d«       ej                  d7ejR                  d«      g«      ZQ ej                  ej                   ej                  d6ej                  d«       ej                  d7ejR                  d«       ej                  d8ejF                  d«      g«      ZR	 d–d9„ZS	 d–d:„ZT ej                  ejª                   ej                  dej                  d«       ej                  d;ej                  d«      gd¬«      ZVd<„ ZWd=„ ZX ej                  ejª                   ej                  d>ej                  d«       ej                  d#ej(                  d«      gd¬«      ZY ej                  ejª                   ej                  d>ej                  d«       ej                  d#ej                  d«      gd¬«      ZZd?„ Z[ ej                  ej                   ej                  dej                  d«      g«      Z\ ej                  ej                   ej                  dej                  d«       ej                  d@ej                  d«       ej                  dAej|                  d«       ej                  dBej(                  d«      gd ¬C«      Z]dD„ Z^d—dE„Z_ ej                  ejª                   ej                  dej                  d«      gd¬«      Z`dF„ Za ej                  ej                   ej                  dej                  d«       ej                  dGej                  d«       ej                  dHej                  d«      g«      ZbdI„ Zc ej                  ej                   ej                  dej                  d«       ej                  dGej                  d«       ej                  dHej                  d«       ej                  dJej(                  d«      g«      ZddK„ Ze ej                  ej                   ej                  dej                  d«       ej                  dGej                  d«       ej                  dHej                  d«      g«      Zf ej                  ej(                   ej                  dej                  d«       ej                  dGej                  d«       ej                  dHej                  d«      gej(                  jÎ                  ¬«      ZhdL„ ZiejÔ                  ej                   fD � ���ci c�]  }t        j                  t        jš                  fD ]Û  }||ft        j                  |t        j                  dMt        j                  d«      t        j                  dNt        j                  d«      t        j                  dO|d«      t        j                  dPt        jš                  d«      t        j                  dQt        jš                  d«      g|jÖ                  rdn|jÎ                  ¬«      “ŒÝ �Œ c}}}} ZldR„ ZmdS„ ZndT„ ZodU„ ZpdV„ ZqdW„ ZrdX„ ZsdY„ ZtdZ„ Zud[„ Zvd\„ Zwd]„ Zxd^„ Zyd_„ ZzemZ{enZ|eoZ}epZ~eqZerZ€esZ�etZ‚euZƒevZ„ewZ…exZ†eyZ‡d`„ Zˆda„ Z‰db„ ZŠdc„ Z‹dd„ ZŒde„ Z�df„ ZŽdg„ Z�dh„ Z� ej                  ejš                   ej                  diej*                  d«      gd¬«      Z‘dj„ Z’e’Z“e’Z”e’Z•e’Z–e’Z—e’Z˜e’Z™e’Zše’Z›e’Zœ ej                  ej*                   ej                  diej*                  d«      g«      Z�	  ej                  ejL                   ej                  dkej<                  d«       ej                  dlejš                  d«      g«      Zždm„ ZŸ ej                  ejL                   ej                  dkej<                  d«       ej                  dnej                  d«       ej                  doej|                  d«      g«      Z dp„ Z¡ ej                  ej<                   ej                  dkej<                  d«       ej                  dqej                  d«      g«      Z¢dr„ Z£ ej                  ejš                   ej                  dkej                  d«       ej                  dsej                  d«       ej                  dtej|                  d«       ej                  duej|                  d«       ej                  dvej(                  d«      gd¬«      Z¤dw„ Z¥dx„ Z¦dy„ Z§ ej                  ej|                   ej                  dkej<                  d«       ej                  dsej                  d«       ej                  dtej|                  d«       ej                  duej|                  d«       ej                  dvej(                  d«      gdz¬«      Z¨d{„ Z©d|„ Zªd}„ Z« ej                  ej|                   ej                  dkej<                  d«       ej                  dsej                  d«       ej                  dtej|                  d«       ej                  duej|                  d«      gd¬«      Z¬d~„ Z­ ej                  ej<                   ej                  dkej<                  d«       ej                  dsej                  d«       ej                  dej                  d«       ej                  d€ej|                  d«      g«      Z®d�„ Z¯ ej                  ejˆ                   ej                  dej<                  d«       ej                  d‚ej~                  d«       ej                  dƒej~                  d«      g«      Z° ej                  ejˆ                   ej                  dej<                  d«      g«      Z±g d„¢Z²e²D � ��cg c]  }|�tg        �jh                  |«      f‘Œ c}}} Zµd…„ Z¶ e�jn                   ej                  ej<                   ej                  d†ej~                  d«       ej                  d‡ej|                  d«       ej                  dƒej~                  d«      g«      «      Z¸ ej                  ej<                   ej                  d†ej~                  d«       ej                  dtej|                  d«       ej                  dˆej|                  d«       ej                  d‚ej~                  d«       ej                  dƒej~                  d«       ej                  d‰e¸d«      g«      Z¹ ej                  ej<                   ej                  d†ej                  d«       ej                  dtej|                  d«       ej                  dˆej|                  d«       ej                  d‚ej~                  d«       ej                  dƒej~                  d«       ej                  d‰e¸d«      g«      ZºdZ»dŠ„ Z¼e¼Z½d‹„ Z¾dŒ„ Z¿d�„ ZÀdŽ„ ZÁd�„ ZÂ	 d�ddeÃ�jˆ                  �jŠ                  d fd‘„ZÆd’„ ZÇ ej                  ej                   ej                  dej                  d«      g«      ZÈd“„ ZÉd”„ ZÊd•„ ZËyc c}}} w c c}}}} w c c}}} w )˜ÚOptimizeBuiltinCallsa<  Optimize some common methods calls and instantiation patterns
    for builtin types *after* the type analysis phase.

    Running after type analysis, this transform can only perform
    function replacements that do not alter the function return type
    in a way that was not anticipated by the type analysis.
    c                 óD   — | j                  |«       |j                  «       S )z:Flatten redundant type checks after tree changes.
        )r^   Ú	reanalyser_   s     r#   Úvisit_PyTypeTestNodez)OptimizeBuiltinCalls.visit_PyTypeTestNodeƒ  s   € ð 	×Ñ˜4Ô Ø�~‰~ÓÐr%   c                 ó†   — | j                  |«       |j                  |j                  j                  k(  r|j                  S |S )z,
        Drop redundant type casts.
        )r^   rE   r“   r_   s     r#   Ú_visit_TypecastNodez(OptimizeBuiltinCalls._visit_TypecastNode‰  s7   € ð 	×Ñ˜4Ô Ø�9‰9˜Ÿ™×)Ñ)Ò)Ø—<‘<ÐØˆr%   c                 ó~  — | j                  |«       t        |j                  t        j                  «      r|j                  j
                  |_        |j                  }|�|j                  s|j                  ry|j                  r9|j                  r-|j                  j                  s|j                  j                  ry|S )z7
        Drop dead code and useless coercions.
        N)r^   r(   rb   r   rô   r)   rD   rp  rÒ   rÔ   Úis_localÚis_arg)r\   r*   rb   s      r#   rc   z'OptimizeBuiltinCalls.visit_ExprStatNode”  s   € ð 	×Ñ˜4Ô Ü�d—i‘i¤×!=Ñ!=Ô>ØŸ	™	Ÿ™ˆDŒIØ�y‰yˆØˆ<˜4Ÿ<š<¨4¯?ª?àØ�<Š<˜DŸJšJ¨D¯J©J×,?Ò,?À4Ç:Á:×CTÒCTàØˆr%   c                 ój  — | j                  |«       |j                  }t        |t        j                  «      r|j                  }t        |t        j
                  «      rU|j                  t        j                  t        j                  fv r)|j                  j                  | j                  «       «      S |S )z<Drop redundant conversion nodes after tree changes.
        )r^   r)   r(   r   ÚPyTypeTestNoderô   rE   r	   rÌ  r
   Ú	bool_typeÚcoerce_to_booleanr¦   ©r\   r*   r)   s      r#   Úvisit_CoerceToBooleanNodez.OptimizeBuiltinCalls.visit_CoerceToBooleanNode¤  s„   € ð 	×Ñ˜4Ô Ø�h‰hˆÜ�cœ9×3Ñ3Ô4Ø—'‘'ˆCÜ�cœ9×7Ñ7Ô8Ø�x‰xœJ×5Ñ5´w×7HÑ7HÐIÑIØ—w‘w×0Ñ0°×1AÑ1AÓ1CÓDÐDØˆr%   ÚoNc                 ó   — | j                  |«       |j                  }t        |t        j                  «      r|j                  }t        |t        j
                  «      �r|j                  j                  dk(  �rt        |j                  «      dk(  rí|j                  d   }|j                  t        j                  u r|j                  d«      S |j                  j                  r›|j                  j                  dk(  r‚t        j
                  |j                   d| j"                  |gd|j$                  t'        j(                  dd«      |j*                  ¬	«      j-                  |j                  | j/                  «       «      S |S )
z3Drop redundant conversion nodes after tree changes.r©  r   r   ú=float() argument must be a string or a number, not 'NoneType'Ú__Pyx_PyObject_AsDoubleÚ__Pyx_PyNumber_FloatÚpynumber_floatzTypeConversion.c)rÄ   Úpy_namer  ro  rn  )r^   r)   r(   r   ÚCoerceFromPyTypeNoderY  rø   r"   rL   rÄ   rE   r
   r¬  r  rá   r$  r•   ÚPyNumber_Float_func_typer  r   r!   rn  rå   r¦   )r\   r*   r)   Úfunc_args       r#   Úvisit_CoerceToPyTypeNodez-OptimizeBuiltinCalls.visit_CoerceToPyTypeNodeµ  s$  € à×Ñ˜4Ô Ø�h‰hˆÜ�cœ9×9Ñ9Ô:Ø—'‘'ˆCÜ�cœ9×7Ñ7Õ8Ø�|‰|× Ñ  GÓ+´°C·H±H³ÀÒ0BàŸ8™8 A™;�Ø—=‘=¤G×$6Ñ$6Ñ6Ø#×5Ñ5Ð6uÓvÐvØ—]‘]×.Ò.°3·<±<×3EÑ3EÐIbÒ3bÜ$×7Ñ7ØŸ™Ð"8¸$×:WÑ:WØ&˜ZØ 'Ø $§¡Ü'2×'>Ñ'>Ð?OÐQcÓ'dØ'+×':Ñ':ô÷  ‘i §	¡	¨4×+;Ñ+;Ó+=Ó>ð?ð ˆr%   c                 óÆ  — | j                  |«       |j                  }|j                  j                  sE|j                  |j                  k7  r*|j	                  |j                  | j                  «       «      }|S t        |t        j                  «      r|j                  }|j                  r¼|j                  j                  rt        |t        j                  «      s`|j                  j                  rt        |t        j                  «      s0|j                  j                  rDt        |t        j                  «      r*|j	                  |j                  | j                  «       «      S |S t        |t        j                  «      �r|j                  t         j"                  u rc|j                  j%                  |j                  j                  «      rº|j                  j	                  |j                  | j                  «       «      S |j                  t&        j(                  u rj|j                  j                  j*                  rJ|j                  j*                  r4|j                  j	                  |j                  | j                  «       «      S |S t        |t        j,                  «      r>|j                  j                  s|j                  j                  r| j/                  ||«      S |S )zÕDrop redundant conversion nodes after tree changes.

        Also, optimise away calls to Python's builtin int() and
        float() if the result is going to be coerced back into a C
        type anyway.
        )r^   r)   rE   rá   rå   r¦   r(   r   r*  rp  r  rí   Úis_floatrª  rž   rô   r	   rÌ  r”  r
   rè   Úis_unicode_charrö   Ú_optimise_numeric_cast_callr-  s      r#   Úvisit_CoerceFromPyTypeNodez/OptimizeBuiltinCalls.visit_CoerceFromPyTypeNodeÌ  sò  € ð 	×Ñ˜4Ô Ø�h‰hˆØ�x‰x×#Ò#à�y‰y˜CŸH™HÒ$Ø—m‘m D§I¡I¨t×/?Ñ/?Ó/AÓB�ØˆJÜ�cœ9×3Ñ3Ô4Ø—'‘'ˆCØ�>Š>Ø—	‘	× Ò ¤Z°´Y×5FÑ5FÔ%GØ—I‘I×&Ò&¬:°c¼9×;NÑ;NÔ+OØ—I‘I×$Ò$¬°C¼×9KÑ9KÔ)LØ—}‘} T§Y¡Y°×0@Ñ0@Ó0BÓCÐCð ˆô ˜œY×9Ñ9Õ:Ø�x‰xœ:×4Ñ4Ñ4Ø—9‘9×,Ñ,¨S¯W©W¯\©\Ô:àŸ7™7×,Ñ,¨T¯Y©Y¸×8HÑ8HÓ8JÓKÐKØ—‘œW×1Ñ1Ñ1Ø—7‘7—<‘<×/Ò/°D·I±I×4MÒ4MØŸ7™7×,Ñ,¨T¯Y©Y¸×8HÑ8HÓ8JÓKÐKð ˆô ˜œY×5Ñ5Ô6Ø�y‰y×Ò 4§9¡9×#5Ò#5Ø×7Ñ7¸¸cÓBÐBØˆr%   r)   c           	      óÆ  — |j                   }d }t        |t        j                  «      r|j                  }njt        |t        j
                  «      rP|j                  j                  r:t        |j                  t        j                  «      r|j                  j                  }|�t        |«      dk7  r|S |d   }t        |t        j                  «      r|j                  }n|j                  j                  r|S |j                  dk(  �rÕ|j                  j                  s|j                  j                  rÌ|j                  |j                  k(  r|S |j                  t         j"                  t         j$                  fv r| j'                  ||j                  |«      S |j                  j)                  |j                  «      s|j                  j*                  �rt        j,                  |j.                  ||j                  ¬«      S |j                  j*                  rÅ|j                  j0                  r¯|j                  j2                  dk(  rd}nd|j                  j2                  z   }t        j                  |j.                  || j4                  |j                     |gd|j6                  |j8                  ¬«      j;                  |j                  | j=                  «       «      S |S |j                  d	k(  r÷|j                  j*                  s|j                  j*                  rË|j                  |j                  k(  r|S |j                  t         j"                  t         j$                  fv r| j'                  ||j                  |«      S |j                  j)                  |j                  «      s|j                  j*                  r,t        j,                  |j.                  ||j                  ¬«      S |S )
Nr   r   rŠ  rl  ÚlÚ__Pyx_trunclÚtrunc)rš  rÄ   r5  r  rn  r©  )rø   r(   r   rY  rÄ   r4   rE   Úis_builtin_typer÷   r\  rL   rô   r)   rá   r"   r  r	   ré   Úc_py_unicode_typeÚ_pyucs4_to_numberr”  r;  rþ  r•   Ú
is_numericÚmath_h_modifierÚfloat_float_func_typesr  rn  rå   r¦   )r\   r*   r)   rø   rÄ   r8  Útruncls          r#   r=  z0OptimizeBuiltinCalls._optimise_numeric_cast_callö  sË  € Ø—<‘<ˆØˆÜ�cœ9×7Ñ7Ô8Ø—8‘8‰DÜ˜¤)×"4Ñ"4Ô5Ø�}‰}×,Ò,´¸C¿M¹MÌ9×K^ÑK^Ô1_Ø—}‘}×)Ñ)�àˆ<œ3˜t›9¨š>ØˆKØ˜‘7ˆÜ�h¤	× <Ñ <Ô=Ø—|‘|‰HØ�]‰]×&Ò&àˆKà�=‰=˜EÓ!Ø�}‰}×#Ò# t§y¡y×'7Ò'7Ø—=‘= D§I¡IÒ-Ø#�OØ—]‘]¤z×'@Ñ'@Ä*×B^ÑB^Ð&_Ñ_à×1Ñ1°$¸¿¹ÀxÓPÐPØ—Y‘Y×.Ñ.¨x¯}©}Ô=ÀÇÁ×AWÓAWÜ$×1Ñ1°$·(±(ÀHÐSW×S\ÑS\Ô]Ð]Ø—‘×'Ò'¨D¯I©I×,@Ò,@Ø—=‘=×0Ñ0°CÒ7à+‘Fà$ x§}¡}×'DÑ'DÑD�FÜ ×3Ñ3Ø—H‘H˜fØ"×9Ñ9¸(¿-¹-ÑHØ"˜Ø!Ø ŸL™LØ#'×#6Ñ#6ô÷ ‘)˜DŸI™I t×'7Ñ'7Ó'9Ó:ð;ð$ ˆð �]‰]˜gÒ%Ø�}‰}×%Ò%¨¯©×);Ò);Ø—=‘= D§I¡IÒ-Ø#�OØ—]‘]¤z×'@Ñ'@Ä*×B^ÑB^Ð&_Ñ_à×1Ñ1°$¸¿¹ÀxÓPÐPØ—Y‘Y×.Ñ.¨x¯}©}Ô=ÀÇÁ×AWÒAWÜ$×1Ñ1ØŸ™¨(¸¿¹ôDð Dàˆr%   rI   rP  g      ð¿c                 óP  — |dv sJ ‚t        j                  |j                  |dk(  rdnd|dk(  r| j                  n| j                  |g||j
                  |j                  t        j                  |dk(  rdndd«      ¬«      j                  |j                  | j                  «       «      S )	N)rŠ  r©  rŠ  Ú__Pyx_int_from_UCS4Ú__Pyx_double_from_UCS4Ú
int_pyucs4Úfloat_pyucs4ú
Builtins.c)rš  rÄ   r5  r  rn  ro  )r   rY  r•   Úpyucs4_int_func_typeÚpyucs4_double_func_typer  rn  r   r!   rå   rE   r¦   )r\   r*   Úpy_type_namer8  s       r#   rE  z&OptimizeBuiltinCalls._pyucs4_to_number7	  sŸ   € ØÐ/Ñ/Ð/Ð/Ü×+Ñ+Ø�H‰H¨|¸uÒ/DÑ+ÐJbØ3?À5Ò3H�d×/Ò/Èd×NjÑNjØ�Ø Ø—L‘LØ×.Ñ.Ü$×0Ñ0ÀÐQVÒAV±Ð\jÐlxÓyô
÷ ‰)�D—I‘I˜t×/Ñ/Ó1Ó
2ð	3r%   c           
      ó²   — |sd}n"t        |t        «      s|dkD  rd}n
|dk(  rd}nd}|�d|z  }nd}t        |j                  d|||t	        |«      fz  «       y r�  rŸ  r   s          r#   r¥  z+OptimizeBuiltinCalls._error_wrong_arg_countC	  r¦  r%   c                 ó   — |S r'   re   )r\   r*   r¡  rø   Úarg_listr”  s         r#   Ú_handle_functionz%OptimizeBuiltinCalls._handle_functionU	  s   € Øˆr%   c           	      ó  — |r|S |r"|j                   r|j                  j                  s|S | j                  «       j	                  |«      }|s|S t        j                  |j                  j                  t        j                  |j                  |||j                  ¬«      |d¬«      j                  | j                  «       «      }	|	€| j                  |||||«      S |j                  }
|
€"|j                  r|j                  j                  }
t        j                  |j                  |	|
¬«      }|s|j                  |_        |j#                  | j                  «       «       d|_        |j'                  |j                  | j                  «       «      S )a  
        Try to inject C-API calls for unbound method calls to builtin types.
        While the method declarations in Builtin.py already handle this, we
        can additionally resolve bound and unbound methods here that were
        assigned to variables ahead of time.
        )r"   rÔ   rE   T)r8   r9   Ú	is_calledr  )rÓ   r8   rÒ   r¦   r-  r   r5   rø   r•   r4   rE   Úanalyse_as_type_attributeÚ%_optimise_generic_builtin_method_callrÄ   r÷   rö   r\   Úanalyse_c_function_callÚanalysedrå   )r\   r*   Ú	type_nameÚ	attr_namerø   rU  Úis_unbound_methodr”  Ú
type_entryr·   rÄ   Ú	call_nodes               r#   Ú_handle_methodz#OptimizeBuiltinCalls._handle_methodX	  sb  € ñ ØˆKÙ˜x×4Ò4¸H¿L¹L×<PÒ<Pð ˆKØ×%Ñ%Ó'×.Ñ.¨yÓ9ˆ
ÙØˆKÜ×(Ñ(Ø�M‰M×ÑÜ×"Ñ"Ø—‘ØØ Ø—_‘_ô	&ð
  Øô÷ 6Ñ5°d×6FÑ6FÓ6HÓIð 	ð ˆ>Ø×=Ñ=Ø�i ¨8Ð5FóHð Hà�y‰yˆØˆ<˜DŸNšNØ—>‘>×&Ñ&ˆDÜ×,Ñ,Ø�H‰HØØôˆ	ñ !Ø%Ÿ\™\ˆIŒNØ×)Ñ)¨$×*:Ñ*:Ó*<Ô=Ø!ˆ	ÔØ×"Ñ" 4§9¡9¨d×.>Ñ.>Ó.@ÓAÐAr%   c                 ó2  — t        |«      }|s|dk\  s|j                  r|j                  s|S |j                  j                  j
                  s|S |j                  j                  t        j                  u r|S t        j                  ||j                  ||«      S )z·
        Try to inject an unbound method call for a call to a method of a known builtin type.
        This enables caching the underlying C function of the method at runtime.
        rÇ   )
rL   rÓ   r6   r8   rE   rC  r
   rM   r   ÚCachedBuiltinMethodCallNode)r\   r*   r^  rø   rU  r_  r  s          r#   rZ  z:OptimizeBuiltinCalls._optimise_generic_builtin_method_call„	  s�   € ô
 ˜“Mˆ	Ù 	¨Q¢°x×7LÒ7LÐQY×QdÒQdØˆKØ�|‰|× Ñ ×0Ò0ØˆKØ�<‰<×Ñ¤× 1Ñ 1Ñ1àˆKÜ×4Ñ4Ø�(—,‘, 	¨8ó5ð 	5r%   r8   c           	      óÌ  — t        |«      dk7  r9t        |«      dk(  r)t        j                  |j                  t	        «       ¬«      S |S |d   }|j
                  t        j                  u r+|j                  «       s|S d}t        j                  dd«      }nd}t        j                  dd«      }t        j                  |j                  || j                  ||j                  |d	¬
«      S )z5Optimise single argument calls to unicode().
        r   r   r   Ú__Pyx_PyUnicode_UnicodeÚPyUnicode_UnicodeúStringTools.cÚ__Pyx_PyObject_UnicodeÚPyObject_UnicodeÚunicode©rÄ   r  ro  r5  )rL   r   r   r•   r   rE   r
   rè   Úmay_be_noner   r!   rY  ÚPyObject_Unicode_func_typer  )r\   r*   rø   r­  r)   r$  ro  s          r#   Ú_handle_simple_function_unicodez4OptimizeBuiltinCalls._handle_simple_function_unicode™	  sÈ   € ô ˆx‹=˜AÒÜ�8‹} Ò!Ü ×,Ñ,¨T¯X©X¼]»_ÔMÐMØˆKØ�q‰kˆØ�8‰8”w×+Ñ+Ñ+Ø—?‘?Ô$Ø�
Ø-ˆEÜ&×2Ñ2Ð3FÈÓX‰Là,ˆEÜ&×2Ñ2Ð3EÀÓWˆLÜ×+Ñ+Ø�H‰H�e˜T×<Ñ<ØØ—L‘LØ%Øôð 	r%   c                 ó  — | j                  |«       |j                  j                  t        j                  u rQ|j
                  sE|j                  s9|j                  r|j                  dk(  r| j                  |d|j                  g«      S |S )zÞSimplify or avoid plain string formatting of a unicode value.
        This seems misplaced here, but plain unicode formatting is essentially
        a call to the unicode() builtin, which is optimised right above.
        rN  N)	r^   r€   rE   r
   rè   Úc_format_specÚformat_specÚconversion_charro  r_   s     r#   Úvisit_FormattedValueNodez-OptimizeBuiltinCalls.visit_FormattedValueNode²	  so   € ð
 	×Ñ˜4Ô Ø�:‰:�?‰?œg×2Ñ2Ñ2¸4×;MÒ;MÐVZ×VfÒVfØ×'Ò'¨4×+?Ñ+?À3Ò+Fà×;Ñ;¸DÀ$ÈÏÉÈÓUÐUØˆr%   rÉ   c                 óü   — t        |«      dk7  r|S |d   }|j                  t        j                  u rJ|j	                  d«      }t        j                  |j                  d| j                  |g|j                  ¬«      S |S )z;Replace dict(some_dict) by PyDict_Copy(some_dict).
        r   r   r  ÚPyDict_CopyrT  )
rL   rE   r
   rÖ   r  r   rY  r•   ÚPyDict_Copy_func_typer  ©r\   r*   rø   r­  r)   s        r#   r  z1OptimizeBuiltinCalls._handle_simple_function_dictÃ	  sx   € ô ˆx‹=˜AÒØˆKØ�q‰kˆØ�8‰8”w×(Ñ(Ñ(Ø×'Ñ'Ð(DÓEˆCÜ×/Ñ/Ø—‘˜-¨×)CÑ)CØ�uØŸ,™,ôð ð
 ˆr%   rÍ  c                 ó8  — t        |«      dk7  r|S |d   }t        j                  |j                  |j	                  «       r>|j	                  «       r.|j
                  t        j                  t        j                  fv rdnd| j                  ||j                  ¬«      S )z0Turn list(ob) into PySequence_List(ob).
        r   r   rÒ  rÓ  rT  )rL   r   rY  r•   rØ  rE   r	   rÌ  r
   r  rÙ  r  rx  s        r#   r  z1OptimizeBuiltinCalls._handle_simple_function_listÖ	  s‰   € ô ˆx‹=˜AÒØˆKØ�q‰kˆÜ×+Ñ+Ø�H‰Hà×'Ñ'Ô)¨c×.@Ñ.@Ô.BØ—H‘H¤×!:Ñ!:¼G×<MÑ<MÐ NÑNñ +ð 'Ø×*Ñ*ØØ—L‘Lô	
ð 		
r%   rð  c                 óÄ  — t        |«      dk7  s|j                  «       s|S |d   }|j                  t        j                  u r|j                  «       s|S |j                  t        j                  u rB|j                  d«      |d<   t        j                  |j                  d| j                  |d¬«      S t        j                  |j                  |t        j                  ¬«      S )zDReplace tuple([...]) by PyList_AsTuple or PySequence_Tuple.
        r   r   r  ÚPyList_AsTupleTrT  )r)   rE   )rL   rØ  rE   r
   r  rm  r  r  r   rY  r•   ÚPyList_AsTuple_func_typerù  rx  s        r#   Ú_handle_simple_function_tuplez2OptimizeBuiltinCalls._handle_simple_function_tupleì	  s¿   € ô ˆx‹=˜AÒ T×%8Ñ%8Ô%:ØˆKØ�q‰kˆØ�8‰8”w×)Ñ)Ñ)°#·/±/Ô2CØˆJØ�8‰8”w×(Ñ(Ñ(Ø×/Ñ/Ø3ó5ˆH�Q‰Kô ×/Ñ/Ø—‘Ð*¨D×,IÑ,IØ tô-ð -ô ×(Ñ(¨¯©°sÄ×ASÑASÔTÐTr%   c                 óB  — t        |«      dk7  r|S |d   j                  r¸g }g }|d   j                  D ]I  }|j                  «       s&t	        j
                  |«      }|j                  |«       |j                  |«       ŒK t        j                  |j                  d|¬«      }| j                  ||«       |d d d…   D ]  }t	        j                  ||«      }Œ |S | j                  |t        j                  |j                  d| j                  ||j                  d¬«      «      S )Nr   r   )r  rÄ   rI   Ú	PySet_NewrK   ©rÄ   r  r5  )rL   rÞ   rÄ   Ú	is_simpler   r+  rN   r   r]  r•   r  rü  rY  ÚPySet_New_func_typer  )	r\   r*   rø   r­  rÄ   r�   r)   rú  r¥  s	            r#   r  z0OptimizeBuiltinCalls._handle_simple_function_set
  s  € Üˆx‹=˜AÒØˆKØ�A‰;×.Ò.ð ˆDØˆEØ ‘{×'Ô'�Ø—}‘}”Ü#×.Ñ.¨sÓ3�CØ—L‘L Ô%Ø—‘˜CÕ ð	 (ô
 ×&Ñ& t§x¡x¸ÀÔFˆFØ�L‰L˜˜vÔ&Ø™d ˜dœ�Ü"×7Ñ7¸¸fÓE‘ð $àˆMð —<‘< ¤i×&BÑ&BØ—‘˜+Ø×(Ñ(ØØŸ™Øô'ó  ð  r%   c                 ór  — |s!t        j                  |j                  «      g}nGt        |«      dkD  r|S |d   j                  t
        j                  u r|d   j                  «       s|d   S t        j                  |j                  d| j                  ||j                  t        j                  dd«      d¬«      S )Nr   r   Ú__Pyx_PyFrozenSet_NewÚpyfrozenset_newrO  Ú	frozensetrl  )r   rÑ  r•   rL   rE   r
   rÙ   rm  rY  ÚPyFrozenSet_New_func_typer  r   r!   ©r\   r*   rø   r­  s       r#   rþ  z6OptimizeBuiltinCalls._handle_simple_function_frozenset&
  s¢   € ÙÜ!×*Ñ*¨4¯8©8Ó4Ð5‰HÜ�‹]˜QÒØˆKØ�a‰[×Ñ¤×!7Ñ!7Ñ7ÀÈÁ×@WÑ@WÔ@YØ˜A‘;Ðä×+Ñ+Ø�H‰HÐ-Ø×*Ñ*ØØ—L‘LÜ$×0Ñ0Ð1BÀLÓQØô!ð 	!r%   z((double)-1)T)rQ  Úexception_checkc           
      ó¾  — t        |«      dk(  rDt        j                  |dd¬«      j                  t        j
                  | j                  «       «      S t        |«      dk7  r| j                  d||d«       |S |d   }t        |t        j                  «      r|j                  }|j                  t        j                  u r|S |j                  t        j                  t        j                  fv r| j!                  ||j"                  |«      S |j                  j%                  |j                  «      s|j                  j&                  r,t        j(                  |j*                  ||j                  ¬«      S |d   j-                  d	«      }|j                  t        j.                  u rd
}d}nl|j                  t        j0                  u rd}d}nK|j                  t        j2                  u rd}d}n*|j                  t        j4                  u rd}d}n	|d   }d}d}t        j6                  |j*                  || j8                  |g|j:                  |rt=        |«      d¬«      S dd¬«      S )zYTransform float() into either a C type cast or a faster C
        function call.
        r   r¨  g        r  r   r©  ú0 or 1rl  r1  Ú__Pyx_PyBytes_AsDoubleÚpybytes_as_doubleÚ__Pyx_PyByteArray_AsDoubleÚ__Pyx_PyUnicode_AsDoubleÚpyunicode_as_doubleÚPyLong_AsDoubleNr2  Úpyobject_as_doublerl  )rL   r   rª  rå   r
   r¬  r¦   r¥  r(   rô   r)   rE   r	   r«  ré   rD  rE  r"   r”  rF  rþ  r•   r  rï   ró   rè   Úint_typerY  ÚPyObject_AsDouble_func_typer  r$   )r\   r*   rø   r­  r8  r)   Ú
cfunc_nameÚutility_code_names           r#   r¯  z2OptimizeBuiltinCalls._handle_simple_function_float=
  s  € ô ˆx‹=˜AÒÜ×&Ñ&Ø˜E°3ôç‘)œG×.Ñ.°×0@Ñ0@Ó0BÓCðDô �‹]˜aÒØ×'Ñ'¨°°xÀÔJØˆKà˜A‘;ˆÜ�h¤	× <Ñ <Ô=Ø—|‘|ˆHØ�=‰=œJ×4Ñ4Ñ4ØˆOØ�]‰]œz×8Ñ8¼*×:VÑ:VÐWÑWà×)Ñ)¨$°·±¸xÓHÐHØ�Y‰Y×&Ñ& x§}¡}Ô5¸¿¹×9QÒ9QÜ×)Ñ)Ø—‘ (°·±ô<ð <ð �q‰k×+Ñ+ØKóMˆð �=‰=œG×.Ñ.Ñ.Ø1ˆJØ 3ÑØ�]‰]œg×4Ñ4Ñ4Ø5ˆJØ 3ÑØ�]‰]œg×2Ñ2Ñ2Ø3ˆJØ 5ÑØ�]‰]œg×.Ñ.Ñ.Ø*ˆJØ $Ñà˜1‘+ˆCØ2ˆJØ 4Ðä×+Ñ+Ø�H‰H�jØ×,Ñ,Ø�5Ø—l‘lÙ@Qœ>Ð*;Ó<Øôð 	ð
 X\Øôð 	r%   r€   c                 ób  — t        |«      dk(  r:t        j                  j                  |j                  dt
        j                  ¬«      S t        |«      dk7  r|S |d   }t        |t        j                  «      r\|j                  j                  j                  r:t        j                  |j                  d| j                  |j                  gdd¬«      S |S |j                  j                  rE|j                  j                  r/t        j                  |j                  d| j                  |dd¬«      S |S )	z7Transform int() into a faster C function call.
        r   rÅ   r   ÚPyLong_FromDoubleTrŠ  r€  Ú__Pyx_PyNumber_Int)rL   r   rí   rî   r•   r
   r“  r(   rô   r)   rE   r;  rY  ÚPyLong_FromDouble_func_typerá   ÚPyNumber_Int_func_type)r\   r*   rø   r­  r8  s        r#   Ú_handle_simple_function_intz0OptimizeBuiltinCalls._handle_simple_function_int}
  sú   € ô ˆx‹=˜AÒÜ×$Ñ$×,Ñ,¨T¯X©X°q¼w×?OÑ?OÐ,ÓPÐPÜ�‹]˜aÒØˆKØ˜A‘;ˆÜ�h¤	× <Ñ <Ô=Ø�|‰|× Ñ ×)Ò)Ü ×3Ñ3Ø—H‘HÐ1°4×3SÑ3SØ"Ÿ,™,˜°¸uôð ð
 �Ø�=‰=×$Ò$¨¯©×)>Ò)>Ü×/Ñ/Ø—‘Ð.°×0KÑ0KØ t°Uô<ð <ð ˆr%   c                 óÌ  — t        |«      dk(  r0t        j                  |j                  dt        j
                  ¬«      S t        |«      dk7  r| j                  d||d«       |S |d   j                  | j                  «       «      }t        j                  |j                  |¬«      }t        j                  |j                  |¬«      }|j                  | j                  «       «      S )z=Transform bool(x) into a type coercion to a boolean.
        r   F©r€   rE   r   Úboolr‹  r’   )rL   r   rž   r•   r
   r+  r¥  r,  r¦   r©   Úcoerce_to_pyobject)r\   r*   rø   r­  r“   s        r#   Ú_handle_simple_function_boolz1OptimizeBuiltinCalls._handle_simple_function_bool“
  s¹   € ô ˆx‹=˜AÒÜ×%Ñ% d§h¡h°eÄ'×BSÑBSÔTÐTÜ�‹]˜aÒØ×'Ñ'¨°°hÀÔIØˆKð ˜q‘k×3Ñ3°D×4DÑ4DÓ4FÓGˆGÜ×'Ñ'¨¯©¸GÔDˆGÜ×'Ñ'¨¯©¸GÔDˆGà×-Ñ-¨d×.>Ñ.>Ó.@ÓAÐAr%   c                 óä  — t        |«      dk7  r| j                  d||d«       |S |d   j                  j                  r=t	        j
                  |j                  d| j                  |d   g|j                  d¬«      S |d   j                  j                  r\|d   j                  t        j                  u r=t	        j
                  |j                  d| j                  |d   g|j                  d¬«      S |S )Nr   Ú
memoryviewÚ1r   ÚPyMemoryView_FromObjectr€  ÚPyMemoryView_FromBuffer)rL   r¥  rE   rá   r   rY  r•   Ú!PyMemoryView_FromObject_func_typer  rÛ   r˜   r
   Úpy_buffer_typeÚ!PyMemoryView_FromBuffer_func_typerˆ  s       r#   Ú"_handle_simple_function_memoryviewz7OptimizeBuiltinCalls._handle_simple_function_memoryview­
  sá   € Üˆx‹=˜AÒØ×'Ñ'¨°d¸HÀcÔJØˆKà˜‰{×Ñ×+Ò+Ü ×3Ñ3Ø—H‘HÐ7Ø×:Ñ:Ø$ Q™K˜=Ø"Ÿl™lØ*ô,ð ,ð ˜!‘×!Ñ!×(Ò(¨X°a©[×-BÑ-BÄg×F\ÑF\Ñ-\ô !×3Ñ3Ø—H‘HÐ7Ø×:Ñ:Ø$ Q™K˜=Ø"Ÿl™lØ*ô,ð ,ð ˆr%   Úbytesrk  Ú__Pyx_PyUnicode_GET_LENGTHrU  Ú__Pyx_PyByteArray_GET_SIZEÚ__Pyx_PyList_GET_SIZEÚ__Pyx_PyTuple_GET_SIZEÚ__Pyx_PySet_GET_SIZEÚPyDict_Sizezcpython.array.arrayc                 ó  — t        |«      dk7  r| j                  d||d«       |S |d   }t        |t        j                  «      r|j
                  }|j                  j                  r;t        j                  |j                  d| j                  |g|j                  ¬«      }�n
|j                  j                  rPt        j                  |j                  d| j                  |g|j                  t        j                  dd«      ¬	«      }�n¤|j                  j                   rwt#        j$                  t"        j&                  t#        j(                  d
|j                  d«      gd¬«      }t        j                  |j                  d||g|j                  ¬«      }�n|j                  j*                  r³| j-                  |j                  «      }|€K|j                  }|j.                  s|j0                  r%|j2                  j4                  | j6                  v rd}n|S |j9                  d«      }t        j                  |j                  || j:                  |g|j                  ¬«      }nN|j                  j<                  r6t        j>                  jA                  |j                  d|j                  ¬«      S |S |j                  t"        jB                  t"        j&                  fvr*|jE                  |j                  | jG                  «       «      }|S )z¾Replace len(char*) by the equivalent call to strlen(),
        len(Py_UNICODE) by the equivalent Py_UNICODE_strlen() and
        len(known_builtin_type) by an equivalent C-API call.
        r   rL   r   Ú__Pyx_ssize_strlenrT  Ú__Pyx_Py_UNICODE_ssize_strlenÚssize_pyunicode_strlenrh  ©rÄ   r  ro  ÚmemoryviewsliceNT)ÚnogilÚ__Pyx_MemoryView_LenÚPy_SIZEz&object of type 'NoneType' has no len()rÅ   )$rL   r¥  r(   r   rô   r)   rE   r‘  rY  r•   ÚPyx_ssize_strlen_func_typer  Úis_pyunicode_ptrÚPyx_Py_UNICODE_strlen_func_typer   r!   rõ   r	   rñ  r.  ró  rá   Ú_map_to_capi_len_functionÚis_extension_typerC  rÔ   Úqualified_nameÚ_ext_types_with_pysizer  ÚPyObject_Size_func_typer<  rí   rî   Úc_size_t_typerå   r¦   )	r\   r*   rø   r­  r)   r°   rš  r•  r®  s	            r#   Ú_handle_simple_function_lenz0OptimizeBuiltinCalls._handle_simple_function_lenæ
  se  € ô
 ˆx‹=˜AÒØ×'Ñ'¨¨t°X¸qÔAØˆKØ�q‰kˆÜ�cœ9×7Ñ7Ô8Ø—'‘'ˆCØ�8‰8×ÒÜ ×3Ñ3Ø—‘Ð.°×0OÑ0OØ�uØŸ,™,ô(ŠHð �X‰X×&Ò&Ü ×3Ñ3Ø—‘Ð9¸4×;_Ñ;_Ø�uØŸ,™,Ü*×6Ñ6Ð7OÐQ`Óaô	cŠHð
 �X‰X×(Ò(Ü"×,Ñ,Ü×,Ñ,Ü×+Ñ+Ð,=¸s¿x¹xÈÓNð/àôˆIô !×3Ñ3Ø—‘Ð0°)Ø�U D§L¡Lô2ŠHð �X‰X×!Ò!Ø×7Ñ7¸¿¹ÓAˆJØÐ!ØŸ8™8�Ø×/Ò/°8×3KÒ3KØ$ŸN™N×9Ñ9¸T×=XÑ=XÑXØ!*‘Jà�KØ×'Ñ'Ø8ó:ˆCä ×3Ñ3Ø—‘˜* d×&BÑ&BØ�U D§L¡Lô2‰Hð �X‰X×%Ò%Ü×$Ñ$×,Ñ,¨T¯X©X°q¸t¿y¹yÐ,ÓIÐIàˆKØ�9‰9œZ×5Ñ5´z×7SÑ7SÐTÑTØ×)Ñ)¨$¯)©)°T×5EÑ5EÓ5GÓHˆHØˆr%   Úobjectc                 óÆ   — t        |«      dk7  r|S t        j                  |j                  d| j                  |d¬«      }t        j
                  |t        j                  «      S )z7Replace type(o) by a macro call to Py_TYPE(o).
        r   ÚPy_TYPEFrT  )rL   r   rY  r•   ÚPyx_Type_func_typer’  r	   rÌ  rˆ  s       r#   Ú_handle_simple_function_typez1OptimizeBuiltinCalls._handle_simple_function_type  sW   € ô ˆx‹=˜AÒØˆKÜ×+Ñ+Ø�H‰H�i ×!8Ñ!8ØØôˆô ×!Ñ! $¬
×(AÑ(AÓBÐBr%   c                 ó²  ‡‡— t        |«      dk7  r‰S |\  }}g }t        |t        j                  «      r|j                  }n<|j
                  t        j                  u st        |t        j                  «      r|g}n‰S t        |«      \  }}|rZ|st        |«      dkD  rJ|j                  s>|j                  r|j                  r&t        j                  |«      }|j                  |«       g }	| j!                  «       Š|�_|	j                  t        j"                  |j$                  |d|¬«      j'                  ‰«      j)                  t*        j,                  ‰«      «       t/        «       }
|D �]Ž  }dx}}|j                  ra|j0                  rU‰j3                  |j0                  j4                  «      }|r.|j
                  r"|j
                  j6                  r|j
                  }|t        j                  u r3|j4                  dk7  s"|j8                  r|j8                  j:                  sd}|�,|j=                  d¬«      }||
v rŒÓ|
j?                  |«       |g}n[|j
                  t        j                  u rd	}||g}n8|j                  s&t        j                  |«      }|j                  |«       d
}||g}|	j                  t        j@                  |j$                  || jB                  ||�|jD                  ndd¬«      «       �Œ‘ t        jF                  fˆˆfd„	}tI        ||	«      j)                  ‰j
                  ‰«      }|ddd…   D ]  }t        jJ                  ||«      }Œ |S )zcReplace isinstance() checks against builtin types by the
        corresponding C-API call.
        r   r   NÚisrï  rE   F)ÚexactÚ__Pyx_TypeCheckÚPyObject_IsInstanceT©rÄ   ro  r  c                 ó~   •—  |‰j                   d| |«      }t        j                  |_        |j	                  ‰«       |S )Nrø  )r•   r	   r_  rE   rB  )r:   r;   Úmake_binop_nodeÚor_noder  r*   s       €€r#   Újoin_with_orzMOptimizeBuiltinCalls._handle_simple_function_isinstance.<locals>.join_with_or|  s7   ø€ Ù% d§h¡h°°a¸Ó;ˆGÜ%×1Ñ1ˆGŒLØ×!Ñ! #Ô&ØˆNr%   rI   )&rL   r(   r   r\  rÄ   rE   r
   rM   rG   rT   rp  rÒ   r  r   r.   rN   r¦   r›   r•   rä   rå   r	   r_  rK   rÔ   r-  r"   rC  ÚscopeÚis_builtin_scopeÚtype_check_functionr!  rY  ÚPy_type_check_func_typero  r7  r   rü  )r\   r*   rø   r­  r)   Ú
type_nodesr�   rO   rP   Ú
test_nodesÚbuiltin_testsÚtest_type_nodeÚbuiltin_typerÔ   rÖ  Útype_check_argsrÓ  rE  r¥  r  s    `                 @r#   Ú"_handle_simple_function_isinstancez7OptimizeBuiltinCalls._handle_simple_function_isinstance/  sð  ù€ ô ˆx‹=˜AÒØˆKØ"‰ˆˆZØˆä�j¤)×"5Ñ"5Ô6Ø#Ÿ™‰JØ�_‰_¤× 1Ñ 1Ñ1´ZÀ
ÌI×LcÑLcÔ5dØ$˜‰JàˆKô $<¸JÓ#GÑ ˆÐ ñ Ñ'¬3¨u«:¸ª>ð
 —N’N s§{¢{¸3¿;º;Ü×-Ñ-¨cÓ2�Ø—‘˜SÔ!àˆ
Ø×ÑÓ ˆàÐ(Ø×ÑÜ×(Ñ(Ø%×)Ñ)Ø Ø!Ø.ô	÷
 ‰m˜CÓ §¡¬:×+AÑ+AÀ3Ó!GôIô ›ˆÜ#ˆNØ#'Ð'ˆL˜5Ø×%Ò%¨.×*>Ò*>ØŸ
™
 >×#7Ñ#7×#<Ñ#<Ó=�Ù˜UŸZšZ¨E¯J©J×,FÒ,FØ#(§:¡:�LØœw×0Ñ0Ñ0à—:‘: Ò'ØŸš¨¯©×(DÒ(DØ#'�LØÐ'Ø&2×&FÑ&FÈUÐ&FÓ&SÐ#Ø&¨-Ñ7ØØ×!Ñ!Ð"5Ô6Ø#& %‘Ø×$Ñ$¬×(9Ñ(9Ñ9Ø&7Ð#Ø#&¨Ð"7‘à%×0Ò0Ü%.×%<Ñ%<¸^Ó%L�NØ—L‘L Ô0Ø&;Ð#Ø#&¨Ð"7�Ø×ÑÜ×,Ñ,Ø"×&Ñ&Ð(;¸T×=YÑ=YØ(Ø7<Ð7H ×!3Ò!3ÈdØ ô	öð5 $ôD 09×/CÑ/Cö 	ô ˜<¨Ó4×>Ñ>¸t¿y¹yÈ#ÓNˆ	Ø™$˜B˜$”KˆDÜ!×6Ñ6°t¸YÓG‰Ið  àÐr%   c                 óº  — t        |«      dk7  r|S |d   }t        |t        j                  «      r„|j                  j
                  j                  rbt        j                  |j                  |j                  t        j                  ¬«      j                  |j
                  | j                  «       «      S |S t        |t        j                  t        j                  f«      r}t        |j                  «      dk(  ret        j                   j#                  |j                  t%        |j                  «      «      j                  |j
                  | j                  «       «      S |S )z-Unpack ord(Py_UNICODE) and ord('X').
        r   r   rl  )rL   r(   r   rô   r)   rE   r<  rþ  r•   r	   rµ  rå   r¦   r   rr  r€   rí   rî   rë   rx  s        r#   r¶  z0OptimizeBuiltinCalls._handle_simple_function_ord‡  sü   € ô ˆx‹=˜AÒØˆKØ�q‰kˆÜ�cœ9×7Ñ7Ô8Ø�w‰w�|‰|×+Ò+Ü ×-Ñ-Ø—G‘G S§W¡W´:×3IÑ3Iôç‘i §	¡	¨4×+;Ñ+;Ó+=Ó>ð?ð ˆô ˜œi×3Ñ3´Y×5HÑ5HÐIÔJÜ�3—9‘9‹~ Ò"Ü ×(Ñ(×0Ñ0°·±¼#¸c¿i¹i».ÓI×SÑSÐTX×T]ÑT]Ð_c×_oÑ_oÓ_qÓrÐrØˆr%   rE   rÄ   r”  c           
      ó  — |j                   }|rt        |«      dk  r|S |d   }|j                  r|j                  s|S |j                  t        j
                  k7  s|j                  t        j
                  k7  r|S |j                  r|j                  s|j                  |j                  k7  r|S |j                  |j                  k7  r|S t        j                  |j                  |dd ¬«      }|j                  | j                  «       d¬«      }|j                  �rÊ|j                  j                  }	|	j                  �r¸|	j                  �r«|	j                  j!                  «       | j                  «       j!                  «       k(  �rqt#        j$                  dd«      }
t#        j&                  |	j                  |
«      }|�r8| j(                  j*                  }t-        j.                  |j1                  d	«      j                  «      }t-        j2                  |	t-        j4                  d
|d«      t-        j4                  dt,        j6                  d«      t-        j4                  dt,        j6                  d«      g«      }t        j8                  ||«      }|s/t        j:                  |j                  t,        j6                  ¬«      }t        j<                  |j                  |||||gdd¬«      S |j?                  d«      }tA        jB                  dd«      }|r<t        j<                  |j                  d| jD                  |||g||jF                  ¬«      S t        j<                  |j                  d| jH                  ||g||jF                  ¬«      S )zOReplace 'exttype.__new__(exttype, ...)' by a call to exttype->tp_new()
        r   r   NrÃ   T)Úskip_childrenÚtp_newÚ__new__ÚPyTypeObjectrE   rÄ   r”  rÅ   F)rÄ   Úmay_return_noner  z4object.__new__(X): X is not a type object (NoneType)zObjectHandling.cÚ__Pyx_tp_new_kwargsrÏ  Ú__Pyx_tp_new)%r8   rL   rÒ   rE   r
   rM   r`  r"   r   r\  r•   rä   r¦   r¿  Útypeobj_cnamerÔ  rù   r   ÚConstructorSlotÚget_slot_functionrú   Úcython_scoper	   ÚCPtrTyper-  rñ  ró  rÌ  r’  rÑ  rY  r  r   r!   ÚPyx_tp_new_kwargs_func_typer  ÚPyx_tp_new_func_type)r\   r*   rø   rÄ   r_  r”  r8   Útype_argÚ
args_tupleÚext_typeÚtp_slotÚslot_func_cnamerë  ÚPyTypeObjectPtrÚpyx_tp_new_kwargs_func_typero  s                   r#   Ú_handle_any_slot__new__z,OptimizeBuiltinCalls._handle_any_slot__new__¦  sñ  € ð �l‰lˆÙ ¤C¨£I°¢MØˆKØ˜‘7ˆØ�{Š{ (×"2Ò"2ØˆKØ�8‰8”w×(Ñ(Ò(¨H¯M©M¼W×=NÑ=NÒ,NØˆKØ×"Ò"¨#¯.ª.Ø�x‰x˜8Ÿ=™=Ò(Ø�ð × Ñ  C§N¡NÒ2àˆKä×(Ñ(¨¯©¸¸Q¸R¸ÔAˆ
Ø×-Ñ-Ø×ÑÓ¨dð .ó 4ˆ
ð ×ÓØ×*Ñ*×/Ñ/ˆHØ×*Ó*¨x×/EÓ/EØ—N‘N×/Ñ/Ó1°T×5EÑ5EÓ5G×5TÑ5TÓ5VÓVä#×3Ñ3°H¸iÓH�Ü"+×"=Ñ"=¸h¿n¹nÈgÓ"V�Ú"Ø#'§<¡<×#<Ñ#<�LÜ&0×&9Ñ&9Ø$×+Ñ+¨NÓ;×@Ñ@ó'B�Oä2<×2FÑ2FØ Ü&×3Ñ3°F¸oÈtÓTÜ&×3Ñ3°F¼j×>WÑ>WÐY]Ó^Ü&×3Ñ3°H¼j×>WÑ>WÐY]Ó^ð#ó3Ð/ô  )×1Ñ1°(¸OÓL�HÙ!Ü!*×!3Ñ!3°D·H±HÄ:×C\ÑC\Ô!]˜Ü$×7Ñ7ØŸ™ /Ø3Ø&¨
°FÐ;Ø(-Ø $ô&ð &ð  ×1Ñ1ØFóHˆHô #×.Ñ.¨xÐ9KÓLˆÙÜ×/Ñ/Ø—‘Ð/°×1QÑ1QØ 
¨FÐ3Ø)ØŸ™ô	ð ô ×/Ñ/Ø—‘˜.¨$×*CÑ*CØ 
Ð+Ø)ØŸ™ô	ð r%   c                 ó   — |S r'   re   )r\   r*   rø   rÄ   r_  r”  s         r#   Ú_handle_any_slot__class__z.OptimizeBuiltinCalls._handle_any_slot__class__ï  s	   € ð
 ˆr%   rÀ   c                 óî   — t        |«      dk7  s"|j                  s|j                  j                  r|S t	        j
                  |j                  d| j                  |d|j                  dt        d«      ¬«      S )z\Optimistic optimisation as X.append() is almost always
        referring to a list.
        r   Ú__Pyx_PyObject_AppendFrN   )rÄ   rå  r  rn  ro  )
rL   rn  rø   rÔ   r   rY  r•   ÚPyObject_Append_func_typer  r$   ©r\   r*   rø   rÄ   r_  s        r#   Ú#_handle_simple_method_object_appendz8OptimizeBuiltinCalls._handle_simple_method_object_appendÿ  se   € ô ˆt‹9˜Š>˜T×0Ò0°D·M±M×4GÒ4GØˆKä×+Ñ+Ø�H‰HÐ-¨t×/MÑ/MØØ!Ø—L‘LØ Ü'¨Ó1ô
ð 	
r%   c                 ób  — t        |«      dk7  r|S |\  }}|j                  s|S t        |j                  «      }|j                  €t        |«      dkD  r	 |S | j                  |||d«      }	|s|j                  |	_        |	S |	x}
}t        |«      dkD  r%|j                  «       st!        j"                  |«      }
g }|d   }|j                  «       s&t!        j"                  |«      }|j%                  |«       t        j&                  |j(                  d| j*                  |
|gdt-        d	«      ¬
«      }|ddd…   D ]£  }|j                  «       s&t!        j"                  |«      }|j%                  |«       t        j.                  |j(                  dt        j&                  |j(                  d| j*                  |
|gddt-        d«      ¬«      |t0        j2                  ¬«      }Œ¥ |j                  |_        |
|ur|j%                  |
«       |D ])  }t!        j4                  ||«      }|j                  |_        Œ+ |S )z™Replace list.extend([...]) for short sequence literals values by sequential appends
        to avoid creating an intermediate sequence argument.
        r   Né   r   TÚextendrI   Ú__Pyx_PyList_AppendÚ
ListAppendr¶  éþÿÿÿÚ|Ú__Pyx_ListComp_AppendÚListCompAppend)rÄ   r5  r  ro  rÅ   )rL   rÞ   rð  rÄ   Úmult_factorr(   r   rã   rý  rä   r¦   r   rÆ  Ú_wrap_self_argrn  r�  r   r+  rN   rY  r•   rû  r$   r7  r	   Úc_returncode_typerü  )r\   r*   rø   rÄ   r_  r8   r€   rÈ   Ú
tuple_nodeÚwrapped_objÚ
cloned_objr�   r)   r°   r¥  s                  r#   Ú!_handle_simple_method_list_extendz6OptimizeBuiltinCalls._handle_simple_method_list_extend  s  € ô ˆt‹9˜Š>ØˆKØ‰
ˆˆUØ×,Ò,ØˆKÜ�U—Z‘ZÓ ˆØ×ÑÐ(¬C°«J¸ªNð ð ˆKØ×)Ñ)¨#¨xÐ9JÈHÓUˆÙà)-×)<Ñ)<ˆKÔ&ØÐØ&Ð&ˆ
�SÜˆu‹:˜Š> #§-¡-¤/Ü"×-Ñ-¨cÓ2ˆJð ˆØ�B‰iˆØ�}‰}ŒÜ×&Ñ& sÓ+ˆCØ�L‰L˜ÔÜ×/Ñ/Ø�H‰HÐ+¨T×-KÑ-KØ˜cÐ"ØÜ'¨Ó5ô	7ˆð
 ˜˜˜R˜”=ˆCØ—=‘=”?Ü×*Ñ*¨3Ó/�Ø—‘˜SÔ!Ü ×+Ñ+Ø—‘˜#Ü×,Ñ,Ø—H‘HÐ5°t×7UÑ7UØ$ cÐ*°HØ Ü!/Ð0@Ó!Aô	Cð
 Ü×1Ñ1ô	‰Hð	 !ð #'×"5Ñ"5ˆÔØ˜SÑ Ø�L‰L˜Ô$ÛˆDÜ ×5Ñ5°d¸HÓEˆHØ&*×&9Ñ&9ˆHÕ#ð ð ˆr%   Ú	bytearrayc           	      ó^  — t        |«      dk7  r|S d}| j                  }t        |d   «      }|j                  j                  st        |t        j                  «      rE|j                  t        j                  | j                  «       «      }t        j                  dd«      }n |j                  rW|j                  «       s|S |j                  t        j                   | j                  «       «      }t        j                  dd«      }n=|j                  j"                  r%d}| j$                  }t        j                  dd«      }n|S t        j&                  |j(                  |||d   |gd	|j*                  |¬
«      }	|j,                  r*|	j                  |j                  | j                  «       «      }	|	S )Nr   Ú__Pyx_PyByteArray_Appendr   ÚByteArrayAppendrh  Ú__Pyx_PyByteArray_AppendObjectÚByteArrayAppendObjectr   F©rÄ   rå  r  ro  )rL   ÚPyByteArray_Append_func_typer,   rE   r  r(   r   rí   rå   r	   rv  r¦   r   r!   rç   Úcan_coerce_to_char_literalÚc_char_typerá   Ú"PyByteArray_AppendObject_func_typerY  r•   r  rn  )
r\   r*   rø   rÄ   r_  Ú	func_namerš  r€   ro  r°   s
             r#   Ú&_handle_simple_method_bytearray_appendz;OptimizeBuiltinCalls._handle_simple_method_bytearray_append\  sb  € Üˆt‹9˜Š>ØˆKØ.ˆ	Ø×5Ñ5ˆ	ä# D¨¡GÓ,ˆØ�:‰:×Ò¤
¨5´)×2CÑ2CÔ DØ—O‘O¤J×$9Ñ$9¸4×;KÑ;KÓ;MÓNˆEÜ&×2Ñ2Ð3DÀoÓV‰LØ×$Ò$Ø×3Ñ3Ô5Ø�Ø—O‘O¤J×$:Ñ$:¸D×<LÑ<LÓ<NÓOˆEÜ&×2Ñ2Ð3DÀoÓV‰LØ�Z‰Z×#Ò#Ø8ˆIØ×?Ñ?ˆIÜ&×2Ñ2Ð3JÈOÓ\‰LàˆKä×/Ñ/Ø�H‰H�i Ø�q‘'˜5Ð!Ø!Ø—L‘LØ%ô
ˆð ×ÒØ×)Ñ)¨$¯)©)°T×5EÑ5EÓ5GÓHˆHØˆr%   Úpy_indexÚc_indexÚ	is_signed)Úhas_varargsc                 ó.   — | j                  ||||d¬«      S )NT)Úis_list)Ú _handle_simple_method_object_poprü  s        r#   Ú_handle_simple_method_list_popz3OptimizeBuiltinCalls._handle_simple_method_list_pop‹  s(   € Ø×4Ñ4Ø�(˜DÐ"3¸Tð 5ó Cð 	Cr%   c                 ó  — |s|S |d   }|rd}|j                  dddg¬«      }nd}t        |«      dk(  rGt        j                  |j                  d	|z  | j
                  |gd
|j                  t        d«      ¬«      S t        |«      dk(  �røt        |d   «      }t        j                  |j                  «      }	|j                  }
|j                  j                  såt        |t        j                  «      rN|j                  | j                  «       «      }	|j!                  t"        j$                  | j                  «       «      }næ|ry|j                  j&                  r4|j)                  | j                  «       «      }	t        j*                  |	«      }|j!                  t"        j$                  | j                  «       «      }nk|S t#        j,                  |j                  t"        j$                  «      s|S t        |t        j                  «      r|j                  | j                  «       «      }	|
j                  s|j                  }
|
j/                  | j                  «       «      s|S |
j0                  }t#        j2                  t"        j4                  t#        j6                  d|
d«      g«      }t        j                  |j                  d|z  | j8                  ||	|t        j                  j;                  |j                  |
j<                  rdnd«      t        j>                  |j                  t"        j@                  |
jC                  «       «      t        j>                  |j                  ||«      gd
|j                  t        d«      ¬«      S |S )z\Optimistic optimisation as X.pop([n]) is almost always
        referring to a list.
        r   ÚListú*'NoneType' object has no attribute '%.30s'rÆ  rJ   rÇ  ÚObjectr   z__Pyx_Py%s_PopTr  r   ÚintvalNz__Pyx_Py%s_PopIndexÚ	pop_index)"r  rL   r   rY  r•   ÚPyObject_Pop_func_typer  r$   r,   r²  rE   r  r(   rí   r   r¦   rå   r	   r.  rá   rŽ  r�  Únumeric_type_fitsÚcreate_to_py_utility_codeÚto_py_functionrñ  rÌ  ró  ÚPyObject_PopIndex_func_typerî   ÚsignedÚRawCNameExprNodeÚc_void_typeÚempty_declaration_code)r\   r*   rø   rÄ   r_  r   r8   r]  r"  r  Úorig_index_typeÚconvert_funcÚconversion_types                r#   r!  z5OptimizeBuiltinCalls._handle_simple_method_object_pop�  sâ  € ñ ØˆKØ�1‰gˆÙØˆIØ×'Ñ'Ø<Ø,Ø"˜Gð (ó %‰Cð
 !ˆIÜˆt‹9˜Š>Ü×/Ñ/Ø—‘Ð*¨YÑ6Ø×+Ñ+Ø�UØ $ØŸ™Ü+¨EÓ2ôð ô �‹Y˜!‹^Ü'¨¨Q©Ó0ˆEÜ ×)Ñ)¨%¯)©)Ó4ˆHØ#Ÿj™jˆOØ—:‘:×$Ò$Ü˜e¤Y×%6Ñ%6Ô7Ø$×7Ñ7¸×8HÑ8HÓ8JÓK�HØ!ŸO™O¬J×,HÑ,HÈ$×JZÑJZÓJ\Ó]‘EÙØ—z‘z×-Ò-Ø#(×#9Ñ#9¸$×:JÑ:JÓ:LÓ#M˜Ü )× 3Ñ 3°HÓ =˜Ø!ŸO™O¬J×,HÑ,HÈ$×JZÑJZÓJ\Ó]‘Eà�KÜ×1Ñ1°%·*±*¼j×>ZÑ>ZÔ[Ø�Ü˜E¤9×#4Ñ#4Ô5Ø ×3Ñ3°D×4DÑ4DÓ4FÓG�à"×)Ò)Ø"'§*¡*�Ø"×<Ñ<¸T×=MÑ=MÓ=OÔPØ�Ø*×9Ñ9ˆLÜ(×2Ñ2Ü×)Ñ)¬J×,CÑ,CÀHÈoÐ_cÓ,dÐ+eógˆOä×/Ñ/Ø—‘Ð/°)Ñ;Ø×0Ñ0Ø˜8 UÜ×'Ñ'×/Ñ/°·	±	À×@VÒ@V¹1Ð\]Ó^Ü×0Ñ0°·±¼J×<RÑ<RØ1@×1WÑ1WÓ1Yó[ä×0Ñ0°·±¸OÈ\ÓZð	\ð
 !%ØŸ™Ü+¨KÓ8ôð ð ˆr%   c           	      ó¬   — t        |«      dk7  r|S | j                  ||d| j                  d||«      j                  |j                  | j
                  «      S )z?Call PyList_Sort() instead of the 0-argument l.sort().
        r   ÚPyList_SortÚsort)rL   Ú_substitute_method_callÚsingle_param_func_typerå   rE   r¦   rü  s        r#   Ú_handle_simple_method_list_sortz4OptimizeBuiltinCalls._handle_simple_method_list_sort×  sU   € ô ˆt‹9˜Š>ØˆKØ×+Ñ+Ø�(˜M¨4×+FÑ+FØÐ% tó-ç-6©Y°t·y±yÀ$×BRÑBRÓ-Sð	Tr%   ÚkeyÚdefaultc                 ó  — t        |«      dk(  r/|j                  t        j                  |j                  «      «       n$t        |«      dk7  r| j                  d||d«       |S | j                  ||d| j                  d||dt        d«      ¬	«	      S )
z:Replace dict.get() by a call to PyDict_GetItem().
        r   rÇ   zdict.getú2 or 3Ú__Pyx_PyDict_GetItemDefaultr2  TÚdict_getitem_default©rå  ro  )	rL   rN   r   r²  r•   r¥  r8  ÚPyx_PyDict_GetItem_func_typer$   rü  s        r#   Ú_handle_simple_method_dict_getz3OptimizeBuiltinCalls._handle_simple_method_dict_getç  sŒ   € ô ˆt‹9˜Š>Ø�K‰Kœ	×*Ñ*¨4¯8©8Ó4Õ5Ü�‹Y˜!Š^Ø×'Ñ'¨
°D¸$ÀÔIØˆKà×+Ñ+Ø�(Ø)¨4×+LÑ+LØÐ$ dØ"Ü)Ð*@ÓAð ,ó Cð 	Cr%   Úis_safe_typec                 ó4  — t        |«      dk(  r/|j                  t        j                  |j                  «      «       n$t        |«      dk7  r| j                  d||d«       |S | j                  ||d| j                  d||dt        j                  dd	«      ¬
«	      S )zUReplace dict.setdefault() by calls to PyDict_GetItem() and PyDict_SetItem().
        r   rÇ   zdict.setdefaultr>  Ú__Pyx_PyDict_SetDefaultÚ
setdefaultTÚdict_setdefaultrO  rA  )
rL   rN   r   r²  r•   r¥  r8  ÚPyx_PyDict_SetDefault_func_typer   r!   rü  s        r#   Ú%_handle_simple_method_dict_setdefaultz:OptimizeBuiltinCalls._handle_simple_method_dict_setdefaultÿ  s•   € ô ˆt‹9˜Š>Ø�K‰Kœ	×*Ñ*¨4¯8©8Ó4Õ5Ü�‹Y˜!Š^Ø×'Ñ'Ð(9¸4ÀÀxÔPØˆKà×+Ñ+Ø�(Ø% t×'KÑ'KØÐ+¨TØ Ü$×0Ñ0Ð1BÀLÓQð ,ó Sð 	Sr%   c                 ód  — d}d}| j                   }t        |«      dk(  r/|j                  t        j                  |j
                  «      «       nAt        |«      dk(  r|j                  s'd}d}| j                  }n| j                  d||d«       |S | j                  ||||d	||d
t        |«      ¬«	      S )z7Replace dict.pop() by a call to _PyDict_Pop().
        Ú__Pyx_PyDict_PopÚpy_dict_popr   rÇ   Ú__Pyx_PyDict_Pop_ignoreÚpy_dict_pop_ignorezdict.popr>  rJ   TrA  )ÚPyDict_Pop_func_typerL   rN   r   rÑ  r•   rn  ÚPyDict_Pop_ignore_func_typer¥  r8  r$   )r\   r*   rø   rÄ   r_  Ú	capi_funcr–  rš  s           r#   Ú_handle_simple_method_dict_popz3OptimizeBuiltinCalls._handle_simple_method_dict_pop  s¹   € ð 'ˆ	Ø)ÐØ×-Ñ-ˆ	äˆt‹9˜Š>Ø�K‰Kœ	×*Ñ*¨4¯8©8Ó4Õ5Ü�‹Y˜!Š^Ø×&Ò&à5�	Ø$8Ð!Ø ×<Ñ<‘	à×'Ñ'¨
°D¸$ÀÔIØˆKà×+Ñ+Ø�(Ø�yØÐ$ dØ Ü'Ð(9Ó:ð ,ó <ð 	<r%   Úop1Úop2Úcvalr)  Úzerodiv_checkc                 ó,   — | j                  d||||«      S ©NÚAdd©Ú_optimise_num_binoprü  s        r#   Ú$_handle_simple_method_object___add__z9OptimizeBuiltinCalls._handle_simple_method_object___add__F  ó   € Ø×'Ñ'¨¨t°X¸tÐEVÓWÐWr%   c                 ó,   — | j                  d||||«      S ©NÚSubtractr[  rü  s        r#   Ú$_handle_simple_method_object___sub__z9OptimizeBuiltinCalls._handle_simple_method_object___sub__I  ó   € Ø×'Ñ'¨
°D¸(ÀDÐJ[Ó\Ð\r%   c                 ó,   — | j                  d||||«      S )NÚMultiplyr[  rü  s        r#   Ú$_handle_simple_method_object___mul__z9OptimizeBuiltinCalls._handle_simple_method_object___mul__L  rc  r%   c                 ó,   — | j                  d||||«      S ©NÚEqr[  rü  s        r#   Ú#_handle_simple_method_object___eq__z8OptimizeBuiltinCalls._handle_simple_method_object___eq__O  ó   € Ø×'Ñ'¨¨d°H¸dÐDUÓVÐVr%   c                 ó,   — | j                  d||||«      S ©NÚNer[  rü  s        r#   Ú#_handle_simple_method_object___ne__z8OptimizeBuiltinCalls._handle_simple_method_object___ne__R  rk  r%   c                 ó,   — | j                  d||||«      S )NÚAndr[  rü  s        r#   Ú$_handle_simple_method_object___and__z9OptimizeBuiltinCalls._handle_simple_method_object___and__U  r^  r%   c                 ó,   — | j                  d||||«      S )NÚOrr[  rü  s        r#   Ú#_handle_simple_method_object___or__z8OptimizeBuiltinCalls._handle_simple_method_object___or__X  rk  r%   c                 ó,   — | j                  d||||«      S )NÚXorr[  rü  s        r#   Ú$_handle_simple_method_object___xor__z9OptimizeBuiltinCalls._handle_simple_method_object___xor__[  r^  r%   c                 óæ   — t        |«      dk7  st        |d   t        j                  «      s|S |d   j	                  «       rd|d   j
                  cxk  rdk  s|S  |S | j                  d||||«      S )Nr   r   é?   ÚRshift©rL   r(   r   rí   r  r=   r\  rü  s        r#   Ú'_handle_simple_method_object___rshift__z<OptimizeBuiltinCalls._handle_simple_method_object___rshift__^  óv   € Üˆt‹9˜Š>¤¨D°©G´Y×5FÑ5FÔ!GØˆKØ�A‰w×*Ñ*Ô,°Q¸$¸q¹'×:QÑ:QÔ5WÐUWÒ5WØˆKð 6XØˆKØ×'Ñ'¨°$¸À$ÐHYÓZÐZr%   c                 óæ   — t        |«      dk7  st        |d   t        j                  «      s|S |d   j	                  «       rd|d   j
                  cxk  rdk  s|S  |S | j                  d||||«      S )Nr   r   rz  ÚLshiftr|  rü  s        r#   Ú'_handle_simple_method_object___lshift__z<OptimizeBuiltinCalls._handle_simple_method_object___lshift__e  r~  r%   c                 ó,   — | j                  d||||«      S ©NÚ	Remainder©Ú_optimise_num_divrü  s        r#   Ú$_handle_simple_method_object___mod__z9OptimizeBuiltinCalls._handle_simple_method_object___mod__l  s   € Ø×%Ñ% k°4¸À4ÐIZÓ[Ð[r%   c                 ó,   — | j                  d||||«      S )NÚFloorDivider…  rü  s        r#   Ú)_handle_simple_method_object___floordiv__z>OptimizeBuiltinCalls._handle_simple_method_object___floordiv__o  s   € Ø×%Ñ% m°T¸8ÀTÐK\Ó]Ð]r%   c                 ó,   — | j                  d||||«      S ©NÚ
TrueDivider…  rü  s        r#   Ú(_handle_simple_method_object___truediv__z=OptimizeBuiltinCalls._handle_simple_method_object___truediv__r  s   € Ø×%Ñ% l°D¸(ÀDÐJ[Ó\Ð\r%   c                 ó,   — | j                  d||||«      S ©NÚDivider…  rü  s        r#   Ú$_handle_simple_method_object___div__z9OptimizeBuiltinCalls._handle_simple_method_object___div__u  s   € Ø×%Ñ% h°°hÀÐFWÓXÐXr%   c                 ó‚  — t        |«      dk7  s%|d   j                  «       r|d   j                  dk(  r|S t        |d   t        j
                  «      rd|d   j                  cxk  rdk  sA|S  |S t        |d   t        j                  «      rd|d   j                  cxk  rdk  s|S  |S |S | j                  |||||«      S )Nr   r   r   rÐ   rÑ   lüÿÿÿ       l          )rL   r  r=   r(   r   rí   rª  r\  )r\   r~   r*   rø   rÄ   r_  s         r#   r†  z&OptimizeBuiltinCalls._optimise_num_div†  sÆ   € Üˆt‹9˜Š>  a¡×!<Ñ!<Ô!>À$ÀqÁ'×BYÑBYÐ]^ÒB^ØˆKÜ�d˜1‘gœy×0Ñ0Ô1Ø˜d 1™g×5Ñ5Ô>¸Ò>Ø�ð ?Ø�Ü˜˜Q™¤×!4Ñ!4Ô5Ø˜d 1™g×5Ñ5Ô>¸Ò>Ø�ð ?Ø�àˆKØ×'Ñ'¨°$¸À$ÐHYÓZÐZr%   c                 ó,   — | j                  d||||«      S rY  r[  rü  s        r#   Ú#_handle_simple_method_float___add__z8OptimizeBuiltinCalls._handle_simple_method_float___add__“  r^  r%   c                 ó,   — | j                  d||||«      S r`  r[  rü  s        r#   Ú#_handle_simple_method_float___sub__z8OptimizeBuiltinCalls._handle_simple_method_float___sub__–  rc  r%   c                 ó,   — | j                  d||||«      S rŒ  r[  rü  s        r#   Ú'_handle_simple_method_float___truediv__z<OptimizeBuiltinCalls._handle_simple_method_float___truediv__™  s   € Ø×'Ñ'¨°d¸HÀdÐL]Ó^Ð^r%   c                 ó,   — | j                  d||||«      S r�  r[  rü  s        r#   Ú#_handle_simple_method_float___div__z8OptimizeBuiltinCalls._handle_simple_method_float___div__œ  s   € Ø×'Ñ'¨°$¸À$ÐHYÓZÐZr%   c                 ó,   — | j                  d||||«      S rƒ  r[  rü  s        r#   Ú#_handle_simple_method_float___mod__z8OptimizeBuiltinCalls._handle_simple_method_float___mod__Ÿ  s   € Ø×'Ñ'¨°T¸8ÀTÐK\Ó]Ð]r%   c                 ó,   — | j                  d||||«      S rh  r[  rü  s        r#   Ú"_handle_simple_method_float___eq__z7OptimizeBuiltinCalls._handle_simple_method_float___eq__¢  rk  r%   c                 ó,   — | j                  d||||«      S rm  r[  rü  s        r#   Ú"_handle_simple_method_float___ne__z7OptimizeBuiltinCalls._handle_simple_method_float___ne__¥  rk  r%   c                 óÚ  — t        |dd«      r|S t        |«      dk7  r|S |j                  j                  rt        j
                  }n3|j                  t        j                  u r|dv rt        j                  }n|S t        ||||d   |d   «      }|s|S |\  }}	}
}t        |D �cg c]  }|j                  j                  ‘Œ c}«      sJ ‚t        |«      |
z   }| j                  |||| j                  ||f   d|dd j                  «       z  ||d	d
|	¬«
      }|j                  j                  r;|j                  s/t        j                  || j                  «       |j                  «      }|S c c}w )zY
        Optimise math operators for (likely) float or small integer operations.
        Úspecial_bool_cmp_functionNr   ©ri  rn  r   r   z__%s__rÇ   TF)rå  Úwith_none_checkro  )r  rL   rE   rá   r	   rÌ  r_  Úoptimise_numeric_binopr¿  rð  r8  ÚPyx_BinopInt_func_typesÚlowerr   rô   r¦   )r\   r~   r*   rø   rÄ   r_  Úret_typerú  Ú
func_cnamero  Ú
extra_argsÚnum_typer)   ra  s                 r#   r\  z(OptimizeBuiltinCalls._optimise_num_binop¨  sh  € ô �4Ð4°dÔ;ØˆKäˆt‹9˜Š>ØˆKà�9‰9× Ò Ü!×0Ñ0‰HØ�Y‰Yœ*×0Ñ0Ñ0°XÀÑ5MÜ!×-Ñ-‰HàˆKä'¨°$¸À$ÀqÁ'È4ÐPQÉ7ÓSˆÙØˆKØ9?Ñ6ˆ
�L *¨hÜ±DÓ9±D¨S�C—H‘H×(Ó(°DÑ9Ô:Ð:Ð:Ü�D‹z˜JÑ&ˆà×0Ñ0Ø�(ØØ×(Ñ(¨(°HÐ)=Ñ>Ø�x  �|×)Ñ)Ó+Ñ+Ð->ÀØ Ø!Ø%ð 1ó 'ˆ	ð �9‰9× Ò ¨×)=Ò)=Ü!×4Ñ4°YÀ×@PÑ@PÓ@RÐTX×T]ÑT]Ó^ˆIØÐùò :s   Â#E(Úucharc           
      óð  — |st        |«      dk7  r|S |d   }t        |t        j                  «      r |j                  j
                  j                  s|S |j                  }|j                  }t        j                  ddt        |¬«      ¬«      }d|j                  «       z  }	| j                  |||	| j                  |||g|¬«      }
|j
                  j                  r|
j                  | j                   «      }
|
S )	Nr   r   Úpy_unicode_predicaterh  )rà  ©rú   z__Pyx_Py_UNICODE_%sr˜  )rL   r(   r   rô   r)   rE   r<  r9   r   r!   rÉ   Úupperr8  Ú#PyUnicode_uchar_predicate_func_typerá   r   r¦   )r\   r*   rø   rÄ   r_  Úustringr­  rà  ro  r¡  Ú	func_calls              r#   Ú_inject_unicode_predicatez.OptimizeBuiltinCalls._inject_unicode_predicateÕ  sè   € Ù¤ D£	¨Q¢ØˆKØ�q‘'ˆÜ˜'¤9×#?Ñ#?Ô@Ø—;‘;×#Ñ#×3Ò3ØˆKØ—‘ˆØ×(Ñ(ˆä)×5Ñ5Ø" OÜ [Ô1ô
ˆð .°×0AÑ0AÓ0CÑCˆØ×0Ñ0Ø�(Ø˜4×CÑCØÐ*¨U¨GØ'ð	 1ó )ˆ	ð
 �9‰9× Ò Ø!×4Ñ4°T×5EÑ5EÓFˆIØÐr%   r®  Úkeependsc           	      ó²   — t        |«      dvr| j                  d||d«       |S | j                  ||dd«       | j                  ||d| j                  d||«      S )zfReplace unicode.splitlines(...) by a direct call to the
        corresponding C-API function.
        rß  zunicode.splitlinesz1 or 2r   FÚPyUnicode_SplitlinesÚ
splitlines)rL   r¥  Ú_inject_bint_default_argumentr8  ÚPyUnicode_Splitlines_func_typerü  s        r#   Ú(_handle_simple_method_unicode_splitlinesz=OptimizeBuiltinCalls._handle_simple_method_unicode_splitlines  si   € ô ˆt‹9˜EÑ!Ø×'Ñ'Ð(<¸dÀDÈ(ÔSØˆKØ×*Ñ*¨4°°q¸%Ô@à×+Ñ+Ø�(Ø" D×$GÑ$GØÐ+¨Tó3ð 	3r%   ÚsepÚmaxsplitc           	      ón  — t        |«      dvr| j                  d||d«       |S t        |«      dk  r/|j                  t        j                  |j
                  «      «       n| j                  |d«       | j                  ||dt        j                  d«       | j                  ||d| j                  d||«      S )	zaReplace unicode.split(...) by a direct call to the
        corresponding C-API function.
        )r   r   rÇ   zunicode.splitú1-3r   r   ú-1ÚPyUnicode_SplitÚsplit)rL   r¥  rN   r   rÑ  r•   Ú_inject_null_for_noneÚ_inject_int_default_argumentr	   r.  r8  ÚPyUnicode_Split_func_typerü  s        r#   Ú#_handle_simple_method_unicode_splitz8OptimizeBuiltinCalls._handle_simple_method_unicode_split2  s«   € ô ˆt‹9˜GÑ#Ø×'Ñ'¨¸¸tÀUÔKØˆKÜˆt‹9�qŠ=Ø�K‰Kœ	×*Ñ*¨4¯8©8Ó4Õ5à×&Ñ& t¨QÔ/Ø×)Ñ)Ø�$˜œ:×7Ñ7¸ô	?ð ×+Ñ+Ø�(Ø˜t×=Ñ=ØÐ&¨ó.ð 	.r%   Úseqc           	      ó  — t        |«      dk7  r| j                  d||d«       |S t        |d   t        j                  «      r¡|d   }|j
                  }t        |«      }|rƒt        j                  |j                  |dt        j                  ¬«      }|D ]H  \  }	}
t        j                  |	j                  |	|j                  ¬«      }t        j                  ||
|«       ŒJ ||d<   | j                  ||d| j                   d	||«      S )
z^
        unicode.join() builds a list first => see if we can do this more efficiently
        r   zunicode.joinÚ2r   rð  rÏ  rÑ  ÚPyUnicode_Joinr  )rL   r¥  r(   r   rÂ  rÕ  rr   rÇ  r•   r
   r  rÖ  r�   r   rÆ  r8  ÚPyUnicode_Join_func_type)r\   r*   rø   rÄ   r_  rÉ  rK  rs   Úinlined_genexprrË  rÌ  rÜ  s               r#   Ú"_handle_simple_method_unicode_joinz7OptimizeBuiltinCalls._handle_simple_method_unicode_joinK  s  € ô ˆt‹9˜Š>Ø×'Ñ'¨¸¸dÀCÔHØˆKÜ�d˜1‘gœy×@Ñ@ÔAØ  ™GˆMØ%×*Ñ*ˆIä5°iÓ@ÐÙÜ"+×"JÑ"JØ—H‘H˜m°vÜ'.×'8Ñ'8ô#:�ó :JÑ5Ð$ oÜ"+×"CÑ"CØ(×,Ñ,Ø-Ø.×5Ñ5ô#7�Kô
 ×4Ñ4°]ÀOÐU`Õað :Jð *��Q‘à×+Ñ+Ø�(Ø˜d×;Ñ;ØÐ% tó-ð 	-r%   Ú	substringrV  ÚendÚ	directionc           
      ó:   — | j                  ||||ddt        d«      S )Nr®  Úendswithr   ©Ú_inject_tailmatchÚunicode_tailmatch_utility_coderü  s        r#   Ú&_handle_simple_method_unicode_endswithz;OptimizeBuiltinCalls._handle_simple_method_unicode_endswithu  s(   € Ø×%Ñ%Ø�(˜DÐ"3°U¸JÜ*¨Bó0ð 	0r%   c           
      ó:   — | j                  ||||ddt        d«      S )Nr®  Ú
startswithrI   rÔ  rü  s        r#   Ú(_handle_simple_method_unicode_startswithz=OptimizeBuiltinCalls._handle_simple_method_unicode_startswithz  s(   € Ø×%Ñ%Ø�(˜DÐ"3°U¸LÜ*¨Bó0ð 	0r%   c	           
      ó*  — t        |«      dvr| j                  |› d|› �||d«       |S | j                  ||dt        j                  d«       | j                  ||dt        j                  d«       |j                  t        j                  j                  |j                  |«      «       |dk(  rd	}	nd
|j                  «       › d�}	| j                  |||	| j                  ||||¬«      }
|
j                  t        j                  | j!                  «       «      S )z€Replace unicode.startswith(...) and unicode.endswith(...)
        by a direct call to the corresponding C-API function.
        ©r   rÇ   é   r}  ú2-4r   Ú0rÇ   ÚPY_SSIZE_T_MAXr®  Ú__Pyx_PyUnicode_TailmatchÚ__Pyx_PyÚ
_Tailmatchr˜  )rL   r¥  rÅ  r	   r.  rN   r   rí   rî   r•   Ú
capitalizer8  ÚPyString_Tailmatch_func_typerå   r
   r+  r¦   )r\   r*   rø   rÄ   r_  r]  rà  ro  rÑ  r  Úmethod_calls              r#   rÕ  z&OptimizeBuiltinCalls._inject_tailmatch  s  € ô
 ˆt‹9˜GÑ#Ø×'Ñ'¨9¨+°Q°{°mÐ(DÀdÈDÐRWÔXØˆKØ×)Ñ)Ø�$˜œ:×7Ñ7¸ô	>à×)Ñ)Ø�$˜œ:×7Ñ7Ð9Iô	Kà�‰”I×%Ñ%×-Ñ-¨d¯h©h¸	ÓBÔCà˜ÒØ3‰Ià" 9×#7Ñ#7Ó#9Ð":¸*ÐEˆIà×2Ñ2Ø�(Ø�t×8Ñ8ØÐ*¨DØ'ð	 3ó )ˆð
 ×$Ñ$¤W×%6Ñ%6¸×8HÑ8HÓ8JÓKÐKr%   r  c                 ó.   — | j                  ||||dd«      S )NÚfindr   ©Ú_inject_unicode_findrü  s        r#   Ú"_handle_simple_method_unicode_findz7OptimizeBuiltinCalls._handle_simple_method_unicode_find£  s%   € Ø×(Ñ(Ø�(˜DÐ"3°V¸RóAð 	Ar%   c                 ó.   — | j                  ||||dd«      S )NÚrfindrI   ré  rü  s        r#   Ú#_handle_simple_method_unicode_rfindz8OptimizeBuiltinCalls._handle_simple_method_unicode_rfind§  s%   € Ø×(Ñ(Ø�(˜DÐ"3°W¸bóBð 	Br%   c           	      óÌ  — t        |«      dvr| j                  d|z  ||d«       |S | j                  ||dt        j                  d«       | j                  ||dt        j                  d«       |j                  t        j                  j                  |j                  |«      «       | j                  ||d| j                  |||«      }|j                  | j                  «       «      S )	zwReplace unicode.find(...) and unicode.rfind(...) by a
        direct call to the corresponding C-API function.
        rÜ  z
unicode.%srÞ  r   rß  rÇ   rà  ÚPyUnicode_Find)rL   r¥  rÅ  r	   r.  rN   r   rí   rî   r•   r8  ÚPyUnicode_Find_func_typer   r¦   )r\   r*   rø   rÄ   r_  rà  rÑ  ræ  s           r#   rê  z)OptimizeBuiltinCalls._inject_unicode_find«  sÖ   € ô
 ˆt‹9˜GÑ#Ø×'Ñ'¨°{Ñ(BÀDÈ$ÐPUÔVØˆKØ×)Ñ)Ø�$˜œ:×7Ñ7¸ô	>à×)Ñ)Ø�$˜œ:×7Ñ7Ð9Iô	Kà�‰”I×%Ñ%×-Ñ-¨d¯h©h¸	ÓBÔCà×2Ñ2Ø�(Ð,¨d×.KÑ.KØÐ*¨Dó2ˆð ×-Ñ-¨d×.>Ñ.>Ó.@ÓAÐAr%   c           	      óT  — t        |«      dvr| j                  d||d«       |S | j                  ||dt        j                  d«       | j                  ||dt        j                  d«       | j                  ||d| j                  d	||«      }|j                  | j                  «       «      S )
zaReplace unicode.count(...) by a direct call to the
        corresponding C-API function.
        rÜ  zunicode.countrÞ  r   rß  rÇ   rà  ÚPyUnicode_CountÚcount)	rL   r¥  rÅ  r	   r.  r8  ÚPyUnicode_Count_func_typer   r¦   )r\   r*   rø   rÄ   r_  ræ  s         r#   Ú#_handle_simple_method_unicode_countz8OptimizeBuiltinCalls._handle_simple_method_unicode_countÇ  s¯   € ô ˆt‹9˜GÑ#Ø×'Ñ'¨¸¸tÀUÔKØˆKØ×)Ñ)Ø�$˜œ:×7Ñ7¸ô	>à×)Ñ)Ø�$˜œ:×7Ñ7Ð9Iô	Kð ×2Ñ2Ø�(Ð-¨t×/MÑ/MØÐ&¨ó.ˆð ×-Ñ-¨d×.>Ñ.>Ó.@ÓAÐAr%   ÚreplstrÚmaxcountc           	      óÐ   — t        |«      dvr| j                  d||d«       |S | j                  ||dt        j                  d«       | j                  ||d| j                  d||«      S )zcReplace unicode.replace(...) by a direct call to the
        corresponding C-API function.
        )rÇ   rÝ  zunicode.replacez3-4rÇ   rÁ  ÚPyUnicode_Replacer  )rL   r¥  rÅ  r	   r.  r8  ÚPyUnicode_Replace_func_typerü  s        r#   Ú%_handle_simple_method_unicode_replacez:OptimizeBuiltinCalls._handle_simple_method_unicode_replaceà  sv   € ô ˆt‹9˜EÑ!Ø×'Ñ'Ð(9¸4ÀÀuÔMØˆKØ×)Ñ)Ø�$˜œ:×7Ñ7¸ô	?ð ×+Ñ+Ø�(Ð/°×1QÑ1QØÐ(¨$ó0ð 	0r%   r  Úerrors)ÚUTF8ÚUTF16úUTF-16LEúUTF-16BEÚLatin1ÚASCIIÚunicode_escapeÚraw_unicode_escapec                 ó  — t        |«      dk  st        |«      dkD  r| j                  d||d«       |S |d   }| j                  |j                  |«      }|€|S |\  }}}	}
|j	                  «       r]	 |j
                  j                  ||	«      }t        ||xs d«      }t        j                  |j                  |t        j                  ¬«      S t        |«      dk(  rCt        j                  |j                  «      }| j                  ||d| j                  d	||||g«      S |rC|	d
k(  r>| j                  |«      }|�+d|vr'd|z  }| j                  |||| j                   d	||g«      S | j                  ||d| j                  d	||||
g«      S #  Y Œ¾xY w)z_Replace unicode.encode(...) by a direct C-API call to the
        corresponding codec.
        r   rÇ   zunicode.encoderÀ  r   zUTF-8rž  ÚPyUnicode_AsEncodedStringrq  Ústrictr'  zPyUnicode_As%sString)rL   r¥  Ú_unpack_encoding_and_error_moder•   r  r=   rq  r   r   rr  r
   rï   rÑ  r8  Ú#PyUnicode_AsEncodedString_func_typeÚ_find_special_codec_nameÚPyUnicode_AsXyzString_func_type)r\   r*   rø   rÄ   r_  Ústring_nodeÚ
parametersr  Úencoding_nodeÚerror_handlingÚerror_handling_noder€   Ú	null_nodeÚ
codec_nameÚencode_functions                  r#   Ú$_handle_simple_method_unicode_encodez9OptimizeBuiltinCalls._handle_simple_method_unicode_encode   s¿  € ô ˆt‹9�qŠ=œC ›I¨šMØ×'Ñ'Ð(8¸$ÀÀeÔLØˆKà˜1‘gˆà×9Ñ9¸$¿(¹(ÀDÓIˆ
ØÐØˆKØGQÑDˆ�- Ð1Dà×*Ñ*Ô,ðbØ#×3Ñ3×:Ñ:¸8À^ÓT�ô
 & e¨XÒ-@¸ÓA�Ü ×*Ñ*¨;¯?©?À%Ìg×N`ÑN`ÔaÐaäˆt‹9˜Š>Ü!×*Ñ*¨4¯8©8Ó4ˆIØ×/Ñ/Ø�hÐ ;Ø×8Ñ8ØÐ+¨k¸9ÀiÐ-PóRð Rñ
 ˜¨(Ò2à×6Ñ6°xÓ@ˆJØÐ%¨#°ZÑ*?Ø"8¸:Ñ"E�Ø×3Ñ3Ø˜( OØ×8Ñ8ØÐ/°+°ó@ð @ð
 ×+Ñ+Ø�(Ð7Ø×4Ñ4ØÐ'Ø˜-Ð)<Ð=ó	?ð 	?øð1áús   Á0F ÆF
ÚstringrŒ  rX  Údecode_funcc                 ó|  — dt        |«      cxk  rdk  sn | j                  d||d«       |S |d   }| j                  |j                  |«      }|€|S |\  }}}	}
|j	                  «       rH	 |j
                  j                  ||	«      }t        |j                  t        |«      |j
                  ¬«      S dx}}t        |t        j                  «      r9|}|j                  }|j                   |j"                  }}|r|j
                  dk(  rd}t        |t        j$                  «      r|j&                  }|j(                  }|t*        j,                  t*        j.                  fv r8|r |j1                  dd	|j2                  g¬
«      }n0|j1                  ddd	g¬«      }n|j4                  s|j6                  s|S |s+t        j8                  j;                  |j                  d«      }nD|j(                  j<                  s.|j?                  t@        jB                  | jE                  «       «      }|rD|j(                  j<                  s.|j?                  t@        jB                  | jE                  «       «      }d}|�| jG                  |«      }|�k|dv rd|jI                  dd«      z  }nd|z  }t        jJ                  |j                  | jL                  |¬«      }t        jN                  |j                  «      }nt        jN                  |j                  «      }g }|j4                  rs|sa|jP                  s&tS        jT                  |«      }|jW                  |«       t        jX                  |j                  d| jZ                  |gd¬«      }| j\                  }d}�n«|j6                  �rI|s0t        j8                  |j                  dt        j^                  ¬«      }| j`                  €ïtA        jb                  t*        jd                  tA        jf                  d|d«      tA        jf                  dt@        jB                  d«      tA        jf                  dt@        jB                  d«      tA        jf                  dt@        jh                  d«      tA        jf                  dt@        jh                  d«      tA        jf                  d| jL                  d«      g«      | _0        | j`                  }d |j2                  › �}nU|s0t        j8                  |j                  dt        j^                  ¬«      }| jj                  }|t*        j,                  u rd!}nd"}t        jX                  |j                  d#|z  ||||||
|g|jl                  to        jp                  |d$«      ¬%«      }|ddd&…   D ]  }tS        jr                  ||«      }Œ |S # t        t        t        f$ r Y �Œ	w xY w)'zƒReplace char*.decode() by a direct C-API call to the
        corresponding codec, possibly resolving a slice on the char*.
        r   rÇ   zbytes.decoderÀ  r   N©r€   r€  ú@descriptor '%s' requires a '%s' object but received a 'NoneType'Údecode©rÈ  r%  rÆ  rÇ  )rÿ  r   r  z__Pyx_PyUnicode_Decode%sr'  rÅ  zPyUnicode_Decode%s)rE   r$  r³  TrT  Údecode_c_stringrà  r  r  rV  rX  r  rý  r  Údecode_cpp_Údecode_bytesÚdecode_bytearrayz__Pyx_%srh  r¶  rI   ):rL   r¥  r	  r•   r  r=   r  r   r   r%  Ú
ValueErrorÚUnicodeDecodeErrorr(   r   r\  r—   rV  rX  rô   r)   rE   r
   rï   ró   r  r"   r‘  Úis_cpp_stringrí   r/  r  rå   r	   r.  r¦   r  r  r/  Ú!PyUnicode_DecodeXyz_func_ptr_typerÑ  rÒ   r   r+  rN   rY  r»  Ú_decode_c_string_func_typer   Ú_decode_cpp_string_func_typerñ  rè   ró  rs  Ú_decode_bytes_func_typer  r   r!   rü  )r\   r*   rø   rÄ   r_  r  r  r  r  r  r  r=   rV  rX  rz  Ústring_typer  Úcodec_cnameÚdecode_functionr�   Úhelper_func_typer–  r¥  s                          r#   Ú"_handle_simple_method_bytes_decodez7OptimizeBuiltinCalls._handle_simple_method_bytes_decodeN  s!  € ð ”S˜“YÔ# !Ô#Ø×'Ñ'¨¸¸dÀEÔJØˆKð ˜1‘gˆØ×9Ñ9¸$¿(¹(ÀDÓIˆ
ØÐØˆKØGQÑDˆ�- Ð1Dà×*Ñ*Ô,ð	Ø"-×"=Ñ"=×"DÑ"DÀXÈ~Ó"^�ô #Ø—O‘OÜ'¨Ó8Ø +× ;Ñ ;ôð ð Ðˆ�Ü�k¤9×#;Ñ#;Ô<Ø$ˆJØ$Ÿ/™/ˆKØ$×*Ñ*¨J¯O©O�4ˆEÙ˜E×1Ñ1°QÒ6Ø�Ü�k¤9×#?Ñ#?Ô@Ø%Ÿ/™/ˆKà!×&Ñ&ˆØœ7×-Ñ-¬w×/EÑ/EÐFÑFÙ Ø)×;Ñ;ØVØ!)¨;×+;Ñ+;Ð <ð <ó >‘ð *×;Ñ;Ø@Ø0Ø!) 
ð <ó ,‘ð ×&Ò&¨{×/HÒ/HàˆKáÜ×%Ñ%×.Ñ.¨t¯x©x¸Ó;‰EØ—‘×"Ò"Ø—O‘O¤J×$@Ñ$@À$×BRÑBRÓBTÓUˆEÙ˜Ÿ	™	×(Ò(Ø—>‘>¤*×">Ñ">À×@PÑ@PÓ@RÓSˆDð ˆ
ØÐØ×6Ñ6°xÓ@ˆJØÐ!ØÐ>Ñ>Ø8¸:×;MÑ;MÈcÐSUÓ;VÑV‘à2°ZÑ?�Ü'×8Ñ8Ø—‘˜t×EÑEÈ[ôZˆOä%×.Ñ.¨t¯x©xÓ8‰Mä'×0Ñ0°·±Ó:ˆOð ˆØ× Ò áà"×*Ò*Ü"+×"6Ñ"6°{Ó"C�KØ—L‘L Ô-Ü ×3Ñ3Ø—O‘OÐ%9¸4×;ZÑ;ZØ%˜Ø ô�ð
  $×>Ñ>ÐØ 1ÒØ×&Ó&áÜ ×(Ñ(¨¯©Ð9IÜ9B×9QÑ9QôS�à×0Ñ0Ð8ä4>×4HÑ4HÜ×(Ñ(Ü"×/Ñ/°¸+ÀtÓLÜ"×/Ñ/°¼×9UÑ9UÐW[Ó\Ü"×/Ñ/°¼
×8TÑ8TÐVZÓ[Ü"×/Ñ/°
¼J×<\Ñ<\Ð^bÓcÜ"×/Ñ/°¼*×:ZÑ:ZÐ\`ÓaÜ"×/Ñ/°¸t×?eÑ?eÐgkÓlð+ó5�Ô1ð  $×@Ñ@ÐØ"-¨k×.>Ñ.>Ð-?Ð @Ññ Ü ×(Ñ(¨¯©Ð9IÜ9B×9QÑ9QôS�à#×;Ñ;ÐØœg×0Ñ0Ñ0Ø$2Ñ!à$6Ð!ä×+Ñ+Ø�H‰H�jÐ#4Ñ4Ð6FØ˜u d¨MÐ;NÐP_Ð`Ø—L‘LÜ$×0Ñ0Ð1BÀOÓTô	
ˆð ™$˜B˜$”KˆDÜ×1Ñ1°$¸Ó=‰Dð  àˆøô_ #¤JÔ0BÐCò Úðús   Á*V# Ö#V;Ö:V;c                 ó  — 	 t        j                  |«      }| j                  D ]N  \  }}||k(  sŒd|v r<dj	                  |j                  d«      D �cg c]  }|j                  «       ‘Œ c}«      }|c S  y # t        $ r Y y w xY wc c}w )Nr6  rÅ  )r   Ú
getencoderÚLookupErrorÚ_special_codecsr  rÃ  rä  )r\   r  Úrequested_codecr"   ÚcodecrN  s         r#   r  z-OptimizeBuiltinCalls._find_special_codec_nameÓ  s•   € ð	Ü$×/Ñ/°Ó9ˆOð  ×/Ô/‰KˆD�%Ø˜Ó'Ø˜$‘;ØŸ7™7Ø-1¯Z©Z¸¬_ó$>Ù-<¨ð %&§L¡L¥NØ-<ñ$>ó ?�Dà’ð 0ð øô ò 	Ùð	üò
$>s   ‚A5 ÁB
Á5	BÂ Bc                 óø   — t        j                  |«      }t        |«      dk\  r| j                  |d   «      \  }}|€y d }|}t        |«      dk(  r"| j                  |d   «      \  }}|€y |dk(  r|}nd}|}||||fS )Nr   r   rÇ   r  )r   rÑ  rL   Ú_unpack_string_and_cstring_node)r\   r•   rÄ   r  r  r  r  r  s           r#   r	  z4OptimizeBuiltinCalls._unpack_encoding_and_error_modeà  s¤   € Ü×&Ñ& sÓ+ˆ	äˆt‹9˜Š>Ø&*×&JÑ&JÈ4ÐPQÉ7Ó&SÑ#ˆH�mØÐ$ØàˆHØ%ˆMäˆt‹9˜Š>Ø26×2VÑ2VÐW[Ð\]ÑW^Ó2_Ñ/ˆNÐ/Ø"Ð*ØØ Ò)Ø&/Ñ#à%ˆNØ"+Ðà˜-¨Ð9LÐMÐMr%   c                 óì  — t        |t        j                  «      r|j                  }t        |t        j                  «      rN|j
                  }t        j                  |j                  |j                  «       t        j                  ¬«      }||fS t        |t        j                  «      rY|j
                  j                  d«      }t        j                  |j                  |j
                  t        j                  ¬«      }||fS |j                  t        j                  u r4d }|j                  t        j                  | j!                  «       «      }||fS |j                  j"                  rd }||fS d x}}||fS )Nrž  z
ISO-8859-1)r(   r   rô   r)   r   r€   rr  r•   Úas_utf8_stringr	   rs  r  rE   r
   rï   rå   r¦   r‘  )r\   r*   r  s      r#   r4  z4OptimizeBuiltinCalls._unpack_string_and_cstring_node÷  s=  € Ü�dœI×8Ñ8Ô9Ø—8‘8ˆDÜ�dœI×1Ñ1Ô2Ø—z‘zˆHÜ×&Ñ&Ø—‘ × 7Ñ 7Ó 9Ä
×@`Ñ@`ôbˆDð ˜ˆ~Ðô ˜œi×1Ñ1Ô2Ø—z‘z×(Ñ(¨Ó6ˆHÜ×&Ñ&Ø—‘ §
¡
´×1QÑ1QôSˆDð ˜ˆ~Ðð �Y‰Yœ'×,Ñ,Ñ,ØˆHØ—>‘>¤*×"BÑ"BÀD×DTÑDTÓDVÓWˆDð
 ˜ˆ~Ðð	 �Y‰Y× Ò ØˆHð ˜ˆ~Ðð #Ð"ˆH�tØ˜ˆ~Ðr%   c           
      ó:   — | j                  ||||ddt        d«      S )Nr«  rÓ  r   ©rÕ  Úbytes_tailmatch_utility_coderü  s        r#   Ú$_handle_simple_method_bytes_endswithz9OptimizeBuiltinCalls._handle_simple_method_bytes_endswith  s(   € Ø×%Ñ%Ø�(˜DÐ"3°W¸jÜ(¨"ó.ð 	.r%   c           
      ó:   — | j                  ||||ddt        d«      S )Nr«  rÙ  rI   r8  rü  s        r#   Ú&_handle_simple_method_bytes_startswithz;OptimizeBuiltinCalls._handle_simple_method_bytes_startswith  s(   € Ø×%Ñ%Ø�(˜DÐ"3°W¸lÜ(¨"ó.ð 	.r%   re   c           
      óÒ   — t        |«      }|r|r| j                  |d   |||«      |d<   |	€|j                  }	t        j                  |j
                  ||||	||
|j                  ¬«      S )Nr   )rÄ   r  ro  rå  rn  )rð  r  r  r   rY  r•   rn  )r\   r*   rø   r"   rš  r^  r_  rÄ   ro  r  rå  r¥  s               r#   r8  z,OptimizeBuiltinCalls._substitute_method_call#  ss   € ô
 �D‹zˆÙ™tØ×)Ñ)¨$¨q©'°8Ð=NÐPYÓZˆD�‰GØˆ?Ø—l‘lˆGÜ×+Ñ+Ø�H‰H�d˜IØØØ'Ø-Ø!×0Ñ0ôð 	r%   c                 óä   — |j                   r|S |r+|j                  d||j                  j                  g¬«      }|S |j                  dj	                  t        |«      dk  rdnd«      d|g¬«      }|S )	Nr  r  rÂ  rÃ  rÄ  rÅ  rÆ  rÇ  )rp  r  rE   r"   rÐ  rL   )r\   Úself_argrø   r_  r^  s        r#   r  z#OptimizeBuiltinCalls._wrap_self_arg6  sˆ   € Ø×ÒØˆOÙØ×1Ñ1ØRØ&¨¯©×(:Ñ(:Ð;ð 2ó =ˆHð ˆð	  ×1Ñ1Ø;×BÑBÌCÐPYËNÐ^`ÒL`Á5ÐfhÓiØ,Ø&˜Kð 2ó )ˆHð ˆr%   c           	      óJ  — t        |«      |k  ry ||   }|j                  «       sy |j                  r#t        j                  |j
                  «      ||<   y t        j                  |j
                  d| j                  |j                  | j                  «       «      gd¬«      ||<   y )NÚ__Pyx_NoneAsNullr   rT  )
rL   rm  rD   r   rÑ  r•   rY  Úobj_to_obj_func_typerŽ  r¦   )r\   rÄ   r"  r)   s       r#   rÄ  z*OptimizeBuiltinCalls._inject_null_for_noneI  s‰   € Üˆt‹9˜ÒØà�5‰kˆØ�‰Ô Øà58·[²[”i×(Ñ(¨¯©Ó1ˆˆUŠÄi×FbÑFbØ�G‰GÐ'Ø×%Ñ%Ø×&Ñ& t×'7Ñ'7Ó'9Ó:Ð;Øô	G
ˆˆUŠr%   c                 óT  — t        |«      |k\  sJ ‚t        |«      |k(  s||   j                  r©t        |t        «      s(t	        |«      j                  d«      j                  «       r4t        j                  j                  |j                  t        |«      «      }n+t        j                  |j                  t	        |«      |¬«      }|j                  |«       y ||   j                  || j                  «       «      }t        |t        j                  «      rt	        |«      |_        |||<   y )Nz+-rž  )rL   rD   r(   rŠ  r®  ÚlstripÚ	isdecimalr   rí   rî   r•   rN   rå   r¦   r6  Úspecial_none_cvalue)r\   r*   rÄ   Ú	arg_indexrE   Údefault_valueÚint_noder)   s           r#   rÅ  z1OptimizeBuiltinCalls._inject_int_default_argumentX  sã   € ô �4‹y˜IÒ%Ð%Ð%Üˆt‹9˜	Ò! T¨)¡_×%<Ò%<Ü˜-¬Ô-´°]Ó1C×1JÑ1JÈ4Ó1P×1ZÑ1ZÔ1\Ü$×,Ñ,×4Ñ4°T·X±X¼sÀ=Ó?QÓR‘ä$×,Ñ,¨T¯X©X¼SÀÓ=OÐVZÔ[�Ø�K‰K˜Õ!à�y‘/×+Ñ+¨D°$×2BÑ2BÓ2DÓEˆCÜ˜#œy×=Ñ=Ô>ä*-¨mÓ*<�Ô'Ø!ˆD�ŠOr%   c                 óþ   — t        |«      |k\  sJ ‚t        |«      |k(  r:|j                  t        j                  |j                  t        |«      ¬«      «       y ||   j                  | j                  «       «      ||<   y ©Nr   )rL   rN   r   rž   r•   rŸ  r,  r¦   )r\   r*   rÄ   rG  rH  s        r#   rº  z2OptimizeBuiltinCalls._inject_bint_default_argumenti  sc   € Ü�4‹y˜IÒ%Ð%Ð%Üˆt‹9˜	Ò!Ø�K‰Kœ	×*Ñ*¨4¯8©8¼4ÀÓ;NÔOÕPà" 9™o×?Ñ?À×@PÑ@PÓ@RÓSˆD�ŠOr%   r'   rð  )Ìrl   rm   rn   ro   r#  r%  rc   r.  r	   rñ  rÌ  ró  r7  r9  r>  Úc_float_typer«  Úc_longdouble_typerH  r=  rv  ré   rP  rQ  rE  r¥  rV  rb  rZ  r
   rè   rn  ro  Ú_handle_simple_function_strrt  rÖ   rw  r  r  rÙ  r  r  r|  r}  rØ   r‚  r  rÙ   r‡  rþ  r”  r¯  r“  r›  rš  rœ  r¡  Úmemoryview_typer§  r¨  r©  rª  r.  rs  r»  Úc_const_py_unicode_ptr_typer½  rÂ  rï   ró   r2  r¾  rÁ  rÄ  rM   rÈ  rÉ  r_  r×  rÞ  r¶  rî  rí  rö  rø  r	  rû  rý  r  r  r  r  r)  r-  r"  r!  r9  r:  rB  rC  rI  rJ  rP  rQ  rQ  rS  rµ  rá   r§  r]  rb  rf  rj  ro  rr  ru  rx  r}  r�  r‡  rŠ  rŽ  r’  Ú!_handle_simple_method_int___add__Ú!_handle_simple_method_int___sub__Ú!_handle_simple_method_int___mul__Ú _handle_simple_method_int___eq__Ú _handle_simple_method_int___ne__Ú!_handle_simple_method_int___and__Ú _handle_simple_method_int___or__Ú!_handle_simple_method_int___xor__Ú$_handle_simple_method_int___rshift__Ú$_handle_simple_method_int___lshift__Ú!_handle_simple_method_int___mod__Ú&_handle_simple_method_int___floordiv__Ú%_handle_simple_method_int___truediv__r†  r•  r—  r™  r›  r�  rŸ  r¡  r\  r²  rµ  Ú%_handle_simple_method_unicode_isalnumÚ%_handle_simple_method_unicode_isalphaÚ'_handle_simple_method_unicode_isdecimalÚ%_handle_simple_method_unicode_isdigitÚ%_handle_simple_method_unicode_islowerÚ'_handle_simple_method_unicode_isnumericÚ%_handle_simple_method_unicode_isspaceÚ%_handle_simple_method_unicode_istitleÚ%_handle_simple_method_unicode_isupperÚ)_handle_simple_method_unicode_isprintableÚ$PyUnicode_uchar_conversion_func_typer»  r¼  rÆ  rÇ  rÌ  rÎ  rå  r×  rÚ  rÕ  rñ  rë  rî  rê  rõ  rö  rû  rü  r
  r  Ú_special_encodingsr   r.  r0  r  rì  r$  r%  r'  r&  r,  Ú&_handle_simple_method_bytearray_decoder  r	  r4  r:  r<  r   rY  rå  r8  r  rB  rÄ  rÅ  rº  )r¿   r¬  r	   Úctyper©  r"   r   s   0000000r#   r   r   x  so  „ ñò ò	òò 
ð  4˜z×3Ñ3Ø×!Ñ!Ø#ˆJ×#Ñ# C¨×)BÑ)BÀDÓIð$ó Ðò
ò. ðN &×2Ñ2°J×4LÑ4LÈj×NjÑNjÑkõñ
 lˆJð	 	”J×(Ñ(ØÜ×'Ñ'¨¨z¸4Ó@ðóñ 	ð lóÐò3ðj 0˜:×/Ñ/Ø×ÑØ#ˆJ×#Ñ# E¨:×+DÑ+DÀdÓKð 
ð ô	Ðð 3˜j×2Ñ2Ø× Ñ Ø#ˆJ×#Ñ# E¨:×+DÑ+DÀdÓKð#
ð ô	Ðò
3ó>ò$ò(BòX5ð  "6 ×!5Ñ!5Ø×ÑØ#ˆJ×#Ñ# E¨:×+DÑ+DÀdÓKðó"Ðò
ð. #BÐò
ð 1˜J×0Ñ0Ø×ÑØ#ˆJ×#Ñ# F¨G×,=Ñ,=¸tÓDðóÐò
ð !5 
× 4Ñ 4Ø×ÑØ	 ˆ×	 Ñ	   z×'@Ñ'@À$Ó	GÐHó!JÐò
ð"  4˜z×3Ñ3Ø×ÑØ#ˆJ×#Ñ# F¨G×,=Ñ,=¸tÓDðó Ðò
Uð$ /˜*×.Ñ.Ø×ÑØ#ˆJ×#Ñ# D¨*×*CÑ*CÀTÓJð
óÐò
 ð< !5 
× 4Ñ 4Ø×ÑØ#ˆJ×#Ñ# D¨*×*CÑ*CÀTÓJð!
ó!Ðò
!ð  #7 *×"6Ñ"6Ø× Ñ Ø#ˆJ×#Ñ# E¨:×+DÑ+DÀdÓKð#ð )Øô# Ðò4ðl 2˜Z×1Ñ1Ø×ÑØ#ˆJ×#Ñ# C¨×)BÑ)BÀDÓIðóÐð
 #7 *×"6Ñ"6Ø×ÑØ#ˆJ×#Ñ# G¨Z×-EÑ-EÀtÓLðó#Ðò
ò,Bð  )=¨
×(<Ñ(<Ø×ÑØ#ˆJ×#Ñ# G¨Z×-FÑ-FÈÓMð"ó)Ð%ð
 )=¨
×(<Ñ(<Ø×ÑØ#ˆJ×#Ñ# G¨W×-CÑ-CÀTÓJð"ó)Ð%ò
ð4 "6 ×!5Ñ!5Ø×$Ñ$Ø#ˆJ×#Ñ# G¨Z×-MÑ-MÈtÓTð'
ð ô	"Ðð '; j×&:Ñ&:Ø×$Ñ$Ø#ˆJ×#Ñ# I¨z×/UÑ/UÐW[Ó\ð'
ð ô	'Ð#ð 3˜j×2Ñ2Ø×$Ñ$Ø#ˆJ×#Ñ# E¨:×+DÑ+DÀdÓKð'
ð ô	Ðð 	×ÑÐ!=Ø×ÑÐ!9Ø×ÑÐ!=Ø×ÑÐ!8Ø×ÑÐ!9Ø×ÑÐ!7Ø×ÑÐ!7Ø×Ñ ð	!÷ 
�cð ð 4Ð4Ðò2ðh .˜×-Ñ-Ø×ÑØ#ˆJ×#Ñ# H¨j×.GÑ.GÈÓNðóÐò
	Cð 3˜j×2Ñ2Ø×ÑØ#ˆJ×#Ñ# E¨:×+DÑ+DÀdÓKð!óÐò
Vòpð$ 0˜:×/Ñ/Ø×!Ñ!Ø#ˆJ×#Ñ# F¨j×.GÑ.GÈÓNØ#ˆJ×#Ñ# F¨g×.@Ñ.@À$ÓGð$óÐð #7 *×"6Ñ"6Ø×!Ñ!Ø#ˆJ×#Ñ# F¨j×.GÑ.GÈÓNØ#ˆJ×#Ñ# F¨g×.@Ñ.@À$ÓGØ#ˆJ×#Ñ# H¨g×.?Ñ.?ÀÓFð$
ó#Ðð ;?óGðT ;?óð !5 
× 4Ñ 4Ø×$Ñ$Ø#ˆJ×#Ñ# F¨J×,EÑ,EÀtÓLØ#ˆJ×#Ñ# F¨J×,EÑ,EÀtÓLð'ð ô!Ðò
ò =ð~ $8 :×#7Ñ#7Ø×$Ñ$Ø#ˆJ×#Ñ# K°×1JÑ1JÈDÓQØ#ˆJ×#Ñ# G¨Z×-BÑ-BÀDÓIð'ð ô$Ð ð *>¨×)=Ñ)=Ø×$Ñ$Ø#ˆJ×#Ñ# K°×1JÑ1JÈDÓQØ#ˆJ×#Ñ# G¨Z×-FÑ-FÈÓMð'ð ô*Ð&òðB 2˜Z×1Ñ1Ø×!Ñ!Ø#ˆJ×#Ñ# F¨J×,EÑ,EÀtÓLð$óÐð
 #7 *×"6Ñ"6Ø×!Ñ!Ø#ˆJ×#Ñ# F¨J×,EÑ,EÀtÓLØ#ˆJ×#Ñ# J°
×0IÑ0IÈ4ÓPØ#ˆJ×#Ñ# I¨z×/KÑ/KÈTÓRØ#ˆJ×#Ñ# K°×1FÑ1FÈÓMð	$
ð ô#ÐòCó@ðD 2˜Z×1Ñ1Ø×$Ñ$Ø#ˆJ×#Ñ# E¨:×+DÑ+DÀdÓKð'ð ô	ÐòTð $8 :×#7Ñ#7Ø×!Ñ!Ø#ˆJ×#Ñ# F¨J×,EÑ,EÀtÓLØ#ˆJ×#Ñ# E¨:×+DÑ+DÀdÓKØ#ˆJ×#Ñ# I¨z×/HÑ/HÈ$ÓOð$ó$Ð òCð  '; j×&:Ñ&:Ø×!Ñ!Ø#ˆJ×#Ñ# F¨J×,EÑ,EÀtÓLØ#ˆJ×#Ñ# E¨:×+DÑ+DÀdÓKØ#ˆJ×#Ñ# I¨z×/HÑ/HÈ$ÓOØ#ˆJ×#Ñ# N°J×4IÑ4IÈ4ÓPð	$ó'Ð#òSð  0˜:×/Ñ/Ø×!Ñ!Ø#ˆJ×#Ñ# F¨J×,EÑ,EÀtÓLØ#ˆJ×#Ñ# E¨:×+DÑ+DÀdÓKØ#ˆJ×#Ñ# I¨z×/HÑ/HÈ$ÓOð$óÐð #7 *×"6Ñ"6Ø×ÑØ#ˆJ×#Ñ# F¨J×,EÑ,EÀtÓLØ#ˆJ×#Ñ# E¨:×+DÑ+DÀdÓKØ#ˆJ×#Ñ# I¨z×/HÑ/HÈ$ÓOð ð
 '×1Ñ1×AÑAô#Ðò<ðF !×,Ñ,¨j×.FÑ.FÑGö
ò HˆEÜ#×2Ñ2´J×4JÑ4JÓKˆHð 
�Ðœ:×/Ñ/ØÜ×'Ñ'¨¬z×/HÑ/HÈ$ÓOÜ×'Ñ'¨¬z×/HÑ/HÈ$ÓOÜ×'Ñ'¨°°tÓ<Ü×'Ñ'¨	´:×3IÑ3IÈ4ÓPÜ×'Ñ'¨¼×9OÑ9OÐQUÓVðð (0×';Ò';™tÀ×AYÑAYô[ñ 	[ð Lñ 	ð Hô
ÐòXò]ò]òWòWòXòWòXò[ò[ò\ò^ò]òYð )MÐ%Ø(LÐ%Ø(LÐ%Ø'JÐ$Ø'JÐ$Ø(LÐ%Ø'JÐ$Ø(LÐ%Ø+RÐ(Ø+RÐ(Ø(LÐ%Ø-VÐ*Ø,TÐ)ò[òXò]ò_ò[ò^òWòWò#ðN +?¨*×*>Ñ*>Ø×ÑØ#ˆJ×#Ñ# G¨Z×-FÑ-FÈÓMð!ð ô	+ Ð'òð0 /HÐ)Ø.GÐ)Ø.GÐ+Ø.GÐ)Ø.GÐ)Ø.GÐ+Ø.GÐ)Ø.GÐ)Ø.GÐ)Ø0IÐ-à+?¨:×+?Ñ+?Ø×!Ñ!Ø#ˆJ×#Ñ# G¨Z×-FÑ-FÈÓMð$ó,Ð(ðð0 &: Z×%9Ñ%9Ø×ÑØ#ˆJ×#Ñ# E¨7×+?Ñ+?ÀÓFØ#ˆJ×#Ñ# J°
×0FÑ0FÈÓMðó&Ð"ò3ð !5 
× 4Ñ 4Ø×ÑØ#ˆJ×#Ñ# E¨7×+?Ñ+?ÀÓFØ#ˆJ×#Ñ# E¨:×+DÑ+DÀdÓKØ#ˆJ×#Ñ# J°
×0LÑ0LÈdÓSðó!
Ðò.ð&  4˜z×3Ñ3Ø×ÑØ#ˆJ×#Ñ# E¨7×+?Ñ+?ÀÓFØ#ˆJ×#Ñ# E¨:×+DÑ+DÀdÓKðó Ðò-ð@ $8 :×#7Ñ#7Ø×ÑØ#ˆJ×#Ñ# E¨:×+DÑ+DÀdÓKØ#ˆJ×#Ñ# K°×1JÑ1JÈDÓQØ#ˆJ×#Ñ# G¨Z×-IÑ-IÈ4ÓPØ#ˆJ×#Ñ# E¨:×+GÑ+GÈÓNØ#ˆJ×#Ñ# K°×1FÑ1FÈÓMð!ð ô$Ð ò0ò
0ò
Lð4  4˜z×3Ñ3Ø×$Ñ$Ø#ˆJ×#Ñ# E¨7×+?Ñ+?ÀÓFØ#ˆJ×#Ñ# K°×1JÑ1JÈDÓQØ#ˆJ×#Ñ# G¨Z×-IÑ-IÈ4ÓPØ#ˆJ×#Ñ# E¨:×+GÑ+GÈÓNØ#ˆJ×#Ñ# K°×1FÑ1FÈÓMð'ð ô ÐòAòBòBð& !5 
× 4Ñ 4Ø×$Ñ$Ø#ˆJ×#Ñ# E¨7×+?Ñ+?ÀÓFØ#ˆJ×#Ñ# K°×1JÑ1JÈDÓQØ#ˆJ×#Ñ# G¨Z×-IÑ-IÈ4ÓPØ#ˆJ×#Ñ# E¨:×+GÑ+GÈÓNð	'ð ô!ÐòBð" #7 *×"6Ñ"6Ø×ÑØ#ˆJ×#Ñ# E¨7×+?Ñ+?ÀÓFØ#ˆJ×#Ñ# K°×1JÑ1JÈDÓQØ#ˆJ×#Ñ# I¨z×/HÑ/HÈ$ÓOØ#ˆJ×#Ñ# J°
×0LÑ0LÈdÓSð	ó#Ðò0ð +?¨*×*>Ñ*>Ø×ÑØ#ˆJ×#Ñ# E¨7×+?Ñ+?ÀÓFØ#ˆJ×#Ñ# J°
×0PÑ0PÐRVÓWØ#ˆJ×#Ñ# H¨j×.NÑ.NÐPTÓUðó+Ð'ð '; j×&:Ñ&:Ø×ÑØ#ˆJ×#Ñ# E¨7×+?Ñ+?ÀÓFðó'Ð#ò
BÐñ %7õ9Ù$6˜Dð �v×0Ò0°Ó6Ò7Ø$6ó9€Oò/?ðb )<¨
×(;Ò(;Ð<P¸J×<PÑ<PØ×ÑØ#ˆJ×#Ñ# H¨j×.NÑ.NÐPTÓUØ#ˆJ×#Ñ# F¨J×,HÑ,HÈ$ÓOØ#ˆJ×#Ñ# H¨j×.NÑ.NÐPTÓUð
ó=ó )Ð%ð "6 ×!5Ñ!5Ø×ÑØ#ˆJ×#Ñ# H¨j×.NÑ.NÐPTÓUØ#ˆJ×#Ñ# G¨Z×-IÑ-IÈ4ÓPØ#ˆJ×#Ñ# F¨J×,HÑ,HÈ$ÓOØ#ˆJ×#Ñ# J°
×0PÑ0PÐRVÓWØ#ˆJ×#Ñ# H¨j×.NÑ.NÐPTÓUØ#ˆJ×#Ñ# MÐ3TÐVZÓ[ð
ó"Ðð 3˜j×2Ñ2Ø×ÑØ#ˆJ×#Ñ# H¨j×.GÑ.GÈÓNØ#ˆJ×#Ñ# G¨Z×-IÑ-IÈ4ÓPØ#ˆJ×#Ñ# F¨J×,HÑ,HÈ$ÓOØ#ˆJ×#Ñ# J°
×0PÑ0PÐRVÓWØ#ˆJ×#Ñ# H¨j×.NÑ.NÐPTÓUØ#ˆJ×#Ñ# MÐ3TÐVZÓ[ð
óÐð $(Ð òAðF .PÐ*òòNò.ò(.ò
.ð

ð DFØ-1¸4Ø09×0LÒ0L×0\Ò0\Ø04ó	ò&ð 0˜:×/Ñ/Ø×!Ñ!Ø#ˆJ×#Ñ# E¨:×+DÑ+DÀdÓKð$
óÐò

ò"ó"Tùôw;ùõV"
ùôH9s   Á:4AOê*DAO
ÁD# AOr   c           	      óP  — t         j                  t         j                  f}t        ||«      r>|j                  t
        j                  ur|j                  t        j                  ury|}d}nKt        ||«      r>|j                  t
        j                  ur|j                  t        j                  ury|}d}ny|j                  «       syt        |t         j                  «      }|rt
        j                  nt
        j                  }	|r| dvr y| dk(  ryt        |j                  «      dkD  ry| dv r|j                  dk(  ryg }
|
j                   |rt         j                  nt         j                  |j                  |j                   |j                  |	¬	«      «       t        |t         j"                  «      r|j$                  nd
}|
j                  t        j&                  |j                  |¬«      «       |s| dvr`|dk(  xr) t        |t         j(                  «      r|j*                   nd
}|
j                  t        j&                  |j                  |¬«      «       t-        j.                  |rdn| dv rdnddt1        | ||¬«      ¬«      }d|rdnd›d|j2                  rdnd›| ›|›�}|||
|	fS )zQ
    Optimise math operators for (likely) float or small integer operations.
    NÚObjCÚCObj)rZ  ra  r„  r�  r‘  ri  rn  r‘  rÑ   )r�  r‰  r‘  r„  r   re  Fr   r¤  ÚPyFloatBinopÚPyLongCompareÚPyLongBinopr    )ÚopÚorderr©  r°  râ  ÚFloatÚLongr6  rÅ  ÚBool)r   rí   rª  r(   rE   r	   rÌ  r
   r“  r  r«  rµ  r‹  r=   rN   r•   r€   ÚNumBinopNoder)  rž   r»  Ú	cdivisionr   r!   rÉ   rá   )r~   r*   r©  Úarg0Úarg1Ú	num_nodesÚnumvalÚ	arg_orderr;  r¬  r«  r)  Úzerodivision_checkro  rª  s                  r#   r¦  r¦  q  sV  € ô ×"Ñ"¤I×$7Ñ$7Ð8€IÜ�$˜	Ô"Ø�9‰9œJ×5Ñ5Ñ5¸$¿)¹)Ì7×K[ÑK[Ñ:[ØØˆØ‰	Ü	�D˜)Ô	$Ø�9‰9œJ×5Ñ5Ñ5¸$¿)¹)Ì7×K[ÑK[Ñ:[ØØˆØ‰	àà×%Ñ%Ô'Øô ˜&¤)×"5Ñ"5Ó6€HÙ+3Œz×'Ò'¼×9OÑ9O€HÙØÐ_Ñ_ØØ	�XÒ	àÜ	ˆV×#Ñ#Ó	$ uÒ	,ààÐGÑGØ×Ñ 1Ò$àà€Jà×ÑÐM©h”y×*Ò*¼I×<MÑ<MØ�
‰
˜&Ÿ,™,¸×8NÑ8NØôô ô )¨¬y×/EÑ/EÔFˆd�lŠlÈE€GØ×Ñ”i×(Ñ(¨¯©¸ÔAÔBÙ�8 <Ñ/à&¨&Ñ0ò RÜ",¨T´9×3DÑ3DÔ"E�—‘ÑÈ5ð 	à×Ñœ)×,Ñ,¨T¯X©XÐ=OÔPÔQä%×1Ñ1Ù"‰¸8À|Ñ;S©ÐYfØÜ˜¨	¸HÔEôG�Lñ ‰ Ñ'Ø×"Ò"‰¨Ð.ÙÙð	€Jð �| Z°Ð9Ð9r%   Úunicode_tailmatchrh  Úbytes_tailmatchc                   óŒ  ‡ — e Zd ZdZd(ˆ fd„	Zd„ Zej                  ej                  ej                  ej                  gZd„ Zd„ Zd„ Zd„ Zdd	d
ddœj                   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!d„ Z"d„ Z#d„ Z$d „ Z%d!„ Z&d"„ Z'd#„ Z(d$„ Z)d%„ Z*d&„ Z+d'„ Z,e-j\                  j^                  Z0ˆ xZ1S ))ÚConstantFoldingaF  Calculate the result of constant expressions to store it in
    ``expr_node.constant_result``, and replace trivial cases by their
    constant result.

    General rules:

    - We calculate float constants to make them available to the
      compiler, but we do not aggregate them into a single literal
      node to prevent any loss of precision.

    - We recursively calculate constants from non-literal nodes to
      make them available to the compiler, but we only aggregate
      literal nodes at each step.  Non-literal nodes are never merged
      into a single node.
    c                 ó0   •— t         ‰| �  «        || _        y)z‡
        The reevaluate argument specifies whether constant values that were
        previously computed should be recomputed.
        N)ÚsuperrY   Ú
reevaluate)r\   r…  Ú	__class__s     €r#   rY   zConstantFolding.__init__Ë  s   ø€ ô
 	‰ÑÔØ$ˆ�r%   c                 ó  — | j                   s|j                  t        j                  ury t        j                  }||_        | j                  |«      }|j                  «       D ]>  }t        |«      t        u r|D ]  }t        |d|«      |u sŒ  y  Œ.t        |d|«      |u sŒ> y  	 |j                  «        y # t        t        t        t        t        t         f$ r Y y t"        $ r' dd l}dd l}|j)                  |j*                  ¬«       Y y w xY w)Nr=   r   )Úfile)r…  r=   r   Úconstant_value_not_setr   r^   r¹   rE   rð  r  Úcalculate_constant_resultr!  Ú	TypeErrorrv   Ú
IndexErrorr%  ÚArithmeticErrorÚ	ExceptionÚ	tracebackÚsysÚ	print_excÚstdout)r\   r*   r   ÚchildrenÚchild_resultÚchildr�  r�  s           r#   Ú_calculate_constz ConstantFolding._calculate_constÓ  sí   € Ø—’Ø×$Ñ$¬I×,LÑ,LÑLØô #×1Ñ1ˆØ-ˆÔð ×%Ñ% dÓ+ˆØ$ŸO™OÖ-ˆLÜ�LÓ!¤TÑ)Û)�EÜ˜uÐ&7¸ÓHÈNÒZÚñ *ô ˜Ð'8¸.ÓIÈ^Ò[Ùð .ð
	1Ø×*Ñ*Õ,øô œI¤x´¼^Ì_Ð]ò 	áÜò 	1ç!Ø×Ñ S§Z¡ZÐÖ0ð	1ús   Â$B5 Â5#D	Ã,D	ÄD	c           
      óª   — 	 | j                   t        t        | j                   j                  t        t        |«      «      «         S # t
        $ r Y y w xY wr'   )ÚNODE_TYPE_ORDERÚmaxrê   r"  rE   r!  )r\   Únodess     r#   Ú_widest_node_classz"ConstantFolding._widest_node_classö  sP   € ð	Ø×'Ñ'Ü”C˜×,Ñ,×2Ñ2´C¼¸eÓ4DÓEÓFñHð Høäò 	Ùð	ús   ‚AA Á	AÁAc                 óV   — t        j                  |j                  t        |«      ¬«      S rK  )r   rž   r•   rŸ  )r\   r*   r€   s      r#   Ú
_bool_nodezConstantFolding._bool_nodeý  s   € Ü×!Ñ! $§(¡(´$°u³+Ô>Ð>r%   c                 ó(   — | j                  |«       |S r'   )r–  r_   s     r#   Úvisit_ExprNodezConstantFolding.visit_ExprNode   s   € Ø×Ñ˜dÔ#Øˆr%   c                 óT  — | j                  |«       |j                  «       s"|j                  dk(  r| j                  |«      S |S |j                  j
                  s|S |j                  dk(  r| j                  ||j                  «      S t        |j                  t        j                  «      r=t        j                  j                  |j                  t        |j                  «      «      S |j                  dk(  r| j                  |«      S |j                  dk(  r| j!                  |«      S |S )NÚ!r(  r'  )r–  r  r~   Ú_handle_NotNoder“   rp  r�  r=   r(   r   rž   rí   rî   r•   rŠ  Ú_handle_UnaryPlusNodeÚ_handle_UnaryMinusNoder_   s     r#   Úvisit_UnopNodezConstantFolding.visit_UnopNode  sî   € Ø×Ñ˜dÔ#Ø×'Ñ'Ô)Ø�}‰} Ò#Ø×+Ñ+¨DÓ1Ð1ØˆKØ�|‰|×&Ò&ØˆKØ�=‰=˜CÒØ—?‘? 4¨×)=Ñ)=Ó>Ð>Ü˜Ÿ™¤i×&8Ñ&8Ô9Ü×$Ñ$×,Ñ,¨T¯X©X´s¸4×;OÑ;OÓ7PÓQÐQØ�]‰]˜cÒ!Ø×-Ñ-¨dÓ3Ð3Ø�]‰]˜cÒ!Ø×.Ñ.¨tÓ4Ð4Øˆr%   r‘   rV  Úis_notrË  )rV  r‘   rË  r¦  c                 óæ   — |j                   }t        |t        j                  «      rJ| j	                  |j
                  «      }|r-t        j                  |«      }||_        | j                  |«      }|S r'   )r“   r(   r   r›   Ú_negate_operatorr~   r   r±   )r\   r*   r“   r~   s       r#   r¢  zConstantFolding._handle_NotNode  s^   € Ø—,‘,ˆÜ�gœy×7Ñ7Ô8Ø×,Ñ,¨W×-=Ñ-=Ó>ˆHÙÜ—y‘y Ó)�Ø (�”Ø×0Ñ0°Ó6�Øˆr%   c                 óV  — d„ }|j                   j                  }t        |j                   t        j                  «      rGt        j                  |j
                   ||j                   j                  «      ||j                  ¬«      S |j                  r|j                  s0t        |j                   t        j                  «      rh|j                  r\t        j                  |j
                   ||j                   j                  «      ||j                   j                  |j                  ¬«      S |S )Nc                 ó@   — | j                  d«      r| dd  } | S d| z   } | S )Nr'  r   )rÙ  r   s    r#   Ú_negatez7ConstantFolding._handle_UnaryMinusNode.<locals>._negate(  s2   € Ø×Ñ Ô$Ø˜a˜b˜	�ð ˆLð ˜e™�ØˆLr%   )r€   rE   r=   )r€   rE   Úlongnessr=   )r“   rE   r(   r   rª  r•   r€   r=   r  r.  rí   rá   r¬  )r\   r*   r«  Ú	node_types       r#   r¤  z&ConstantFolding._handle_UnaryMinusNode'  sß   € ò	ð —L‘L×%Ñ%ˆ	Ü�d—l‘l¤I×$7Ñ$7Ô8ä×&Ñ& t§x¡x±w¸t¿|¹|×?QÑ?QÓ7RØ,5Ø7;×7KÑ7KôMð Mð ×Ò 	× 0Ò 0Ü˜4Ÿ<™<¬×):Ñ):Ô;À	×@UÒ@UÜ×$Ñ$ T§X¡X±W¸T¿\¹\×=OÑ=OÓ5PØ*3Ø.2¯l©l×.CÑ.CØ59×5IÑ5IôKð Kð ˆr%   c                 ó˜   — |j                   j                  «       r/|j                  |j                   j                  k(  r|j                   S |S r'   )r“   r  r=   r_   s     r#   r£  z%ConstantFolding._handle_UnaryPlusNode=  s9   € Ø�L‰L×,Ñ,Ô.Ø×(Ñ(¨D¯L©L×,HÑ,HÒHØ—<‘<ÐØˆr%   c                 ó$  — | j                  |«       |j                  j                  «       s|S |j                  j                  r'|j                  dk(  r|j
                  S |j                  S |j                  dk(  r|j                  S |j
                  S )Nr!  )r–  rB   r  r=   r~   rC   r_   s     r#   rC  z#ConstantFolding.visit_BoolBinopNodeC  sr   € Ø×Ñ˜dÔ#Ø�}‰}×0Ñ0Ô2ØˆKØ�=‰=×(Ò(Ø�}‰} Ò%Ø—}‘}Ð$à—}‘}Ð$à�}‰} Ò%Ø—}‘}Ð$à—}‘}Ð$r%   c                 ó  — | j                  |«       |j                  t        j                  u r|S t	        |j                  t
        «      r|S |j                  |j                  }}|j                  r|j                  s|S 	 |j                  |j                  }}|�|€|S 	 |j                  r#|j                  rt        j                  ||«      }nt        j                  }| j                  ||«      }|€|S |t        j                   u r|j"                  dv rt        j$                  }n0|t        j&                  u r|j"                  dv rt        j$                  }|t        j$                  u �rt)        |dd«      xr t)        |dd«      }dd t+        t-        t)        |dd«      «      t-        t)        |dd«      «      «       }	t/        t1        |j                  «      «      }
t3        j4                  |
«      }
t        j$                  |j6                  ||	|
t1        |j                  «      ¬«      }|j8                  s|j                  j8                  rt        j                  |_	        |S t        j                  ||j                  «      |_	        |S |t        j                   u r.t        j                   |j6                  |j                  |¬«      }|S  ||j6                  |t;        |j                  «      |j                  ¬	«      }|S # t        $ r |cY S w xY w)
Nz+-//<<%**>>z+-//<<%**>>&|^ÚunsignedrÅ  ÚLLr¬  )r•   r±  r¬  r€   r=   rž  )r•   rE   r€   r=   )r–  r=   r   r   r(   r©  rB   rC   rp  rE   r%  rF  r	   Úwidest_numeric_typerÌ  r›  rž   r~   rí   r  r  r™  rL   ÚhexrŠ  r   Ústrip_py2_long_suffixr•   rá   r®  )r\   r*   rB   rC   Útype1Útype2Úwidest_typeÚtarget_classr±  r¬  r€   r°   s               r#   Úvisit_BinopNodezConstantFolding.visit_BinopNodeR  s¬  € Ø×Ñ˜dÔ#Ø×Ñ¤9×#;Ñ#;Ñ;ØˆKÜ�d×*Ñ*¬EÔ2ØˆKØ!Ÿ]™]¨D¯M©M�(ˆØ×"Ò"¨(×*=Ò*=ØˆKð	Ø#Ÿ=™=¨(¯-©-�5ˆEØˆ}  Ø�ð !.ð
 ×Ò × 0Ò 0Ü$×8Ñ8¸ÀÓF‰Kä$×3Ñ3ˆKà×.Ñ.¨x¸ÓBˆØÐØˆKØœY×/Ñ/Ñ/°D·M±MÀ]Ñ4Rä$×,Ñ,‰LØœY×/Ñ/Ñ/°D·M±MÐEUÑ4Uä$×,Ñ,ˆLàœ9×,Ñ,Ò,Ü˜x¨°RÓ8ò 9Ü˜x¨°RÓ8ð àð IœS¤¤W¨X°zÀ2Ó%FÓ!GÜ!$¤W¨X°zÀ2Ó%FÓ!GóIð JˆHäœ˜D×0Ñ0Ó1Ó2ˆEÜ×/Ñ/°Ó6ˆEÜ ×(Ñ(¨T¯X©XØ2:ÀXØ/4Ü9<¸T×=QÑ=QÓ9RôTˆHð ×&Ò&¨(¯-©-×*CÒ*CÜ *× 9Ñ 9�”ð ˆô !+× >Ñ >¸{ÈHÏMÉMÓ Z�”ð ˆð œY×/Ñ/Ñ/Ü ×)Ñ)¨$¯(©(¸$×:NÑ:NÐU`ÔaˆHð
 ˆñ $¨¯©°{Ü*-¨d×.BÑ.BÓ*CØ48×4HÑ4HôJˆHð ˆøôS ò 	ØŠKð	ús   Á?K9 Ë9LÌLc                 óÆ  — | j                  |«       t        |j                  t        «      r>t	        j
                  |j                  j                  t        |j                  «      ¬«      S |j                  |j                  }}t        |t        j                  «      �rt        |t        j                  «      rK|j                  j                  |j                  «       t        j                  |_        | j                  |«      S t        |j                  t        «      �r]|j                  s|S t        |t        j
                  «      s+t	        j
                  |j                  |j                  ¬«      }|j                  j                  |«       t        j                  |_        | j                  |«      S t        |t        j                  «      r¯t        |j                  t        «      r•|j                  s|S t        |t        j
                  «      s+t	        j
                  |j                  |j                  ¬«      }|j                  j!                  d|«       t        j                  |_        | j                  |«      S |j                  t        j"                  u r|S |j$                  �r­|j$                  �r t        |t        j
                  «      rÏt        |t        j
                  «      rµd }|j&                  �p|j&                  �d|j&                  j(                  |j&                  j(                  k(  r7t+        |j&                  |j&                  z   |j&                  j(                  «      }t        |j                  «      }t	        j
                  |j                  ||¬«      S t        |t        j,                  «      r�t        |t        j,                  «      rƒ|j.                  j(                  |j.                  j(                  k(  rVt+        |j                  |j.                  j(                  «      }t	        j,                  |j                  ||j                  ¬«      S | j1                  |«      S )Nr   r   r  r  )r–  r(   r=   r®  r   r   rB   r•   r   rC   ÚJoinedStrNoder¹   r   r‰  Úsimplify_JoinedStrNoderN   Úinsertr   rç   r€  r  r   rr  r€   rº  )r\   r*   rB   rC   r€  Ústring_values         r#   Úvisit_AddNodezConstantFolding.visit_AddNodeŒ  s1  € Ø×Ñ˜dÔ#ä�d×*Ñ*¬CÔ0Ü×(Ñ(Ø—‘×!Ñ!¬°t×7KÑ7KÓ)LôNð Nð "Ÿ]™]¨D¯M©M�(ˆô �h¤	× 7Ñ 7Õ8Ü˜(¤I×$;Ñ$;Ô<Ø—‘×&Ñ& x§¡Ô7Ü+4×+KÑ+K�Ô(Ø×2Ñ2°8Ó<Ð<Ü˜(×2Ñ2´CÕ8Ø×/Ò/Ø#�OÜ! (¬I×,AÑ,AÔBÜ(×4Ñ4Ø Ÿ™¨H×,DÑ,Dô F�Hà—‘×&Ñ& xÔ0Ü+4×+KÑ+K�Ô(Ø×2Ñ2°8Ó<Ð<Ü˜¤)×"9Ñ"9Ô:Ü˜(×2Ñ2´CÔ8Ø×/Ò/Ø#�OÜ! (¬I×,AÑ,AÔBÜ(×4Ñ4Ø Ÿ™¨H×,DÑ,Dô F�Hà—‘×&Ñ& q¨(Ô3Ü+4×+KÑ+K�Ô(Ø×2Ñ2°8Ó<Ð<à×Ñ¤9×#;Ñ#;Ñ;ØˆKà×%Ó%¨(×*DÓ*DÜ˜(¤I×$9Ñ$9Ô:¼zÈ(ÔT]×TiÑTiÔ?jØ"�Ø×'Ñ'Ð3¸×8LÑ8LÐ8XØ×+Ñ+×4Ñ4¸×8LÑ8L×8UÑ8UÒUÜ&3Ø$×0Ñ0°8×3GÑ3GÑGØ$×0Ñ0×9Ñ9ó';˜ô  -¨T×-AÑ-AÓB�Ü ×,Ñ,¨X¯\©\ÀÐ[fÔgÐgÜ˜H¤i×&9Ñ&9Ô:¼zÈ(ÔT]×TgÑTgÔ?hØ—>‘>×*Ñ*¨h¯n©n×.EÑ.EÒEÜ"/°×0DÑ0DÀhÇnÁn×F]ÑF]Ó"^�KÜ$×.Ñ.¨x¯|©|À;Ð`d×`tÑ`tÔuÐuà×#Ñ# DÓ)Ð)r%   c                 óv  — | j                  |«       |j                  j                  r'| j                  ||j                  |j                  «      S t        |j                  t        j                  «      r=|j                  j                  r'| j                  ||j                  |j                  «      S |j                  j                  r'| j                  ||j                  |j                  «      S |j                  j                  r'| j                  ||j                  |j                  «      S | j                  |«      S r'   )r–  rB   rÞ   Ú_calculate_constant_seqrC   r(   r   rí   rç   Ú_multiply_stringrº  r_   s     r#   Úvisit_MulNodezConstantFolding.visit_MulNodeÃ  sÝ   € Ø×Ñ˜dÔ#Ø�=‰=×0Ò0Ø×/Ñ/°°d·m±mÀTÇ]Á]ÓSÐSÜ�d—m‘m¤Y×%6Ñ%6Ô7Ø—‘×5Ò5Ø×/Ñ/°°d·m±mÀTÇ]Á]ÓSÐSØ�=‰=×*Ò*Ø×(Ñ(¨¨t¯}©}¸d¿m¹mÓLÐLØ�]‰]×,Ò,Ø×(Ñ(¨¨t¯}©}¸d¿m¹mÓLÐLØ×#Ñ# DÓ)Ð)r%   c                 ót  — |j                   }t        |t        «      s|S |j                  «       rt        |j                   t        «      s|S t        |j                   «      dkD  r|S t        |t        j                  «      rt        }nrt        |t        j                  «      rEt        }|j                  �Ft        |j                  |z  |j                  j                  «      |_        nJ dt        |«      z  «       ‚ ||j                  |z  |j                  j                  «      |_        |j                  |_         |S )Né   zunknown string node type: %s)r=   r(   rŠ  r  Ú_py_string_typesrL   r   rr  r   r   r   r€  r  rE   r€   )r\   r*   r  Úmultiplier_nodeÚ
multiplierÚbuild_strings         r#   rÃ  z ConstantFolding._multiply_stringÐ  s  € Ø$×4Ñ4ˆ
Ü˜*¤cÔ*ØˆKØ×(Ñ(Ô*¬z¸$×:NÑ:NÔP`Ô/aØˆKÜˆt×#Ñ#Ó$ sÒ*àˆKä�k¤9×#6Ñ#6Ô7Ü(‰LÜ˜¤Y×%:Ñ%:Ô;Ü)ˆLØ×&Ñ&Ð2Ü*7Ø×+Ñ+¨jÑ8Ø×+Ñ+×4Ñ4ó+6�Õ'ð MÐ8¼4ÀÓ;LÑLÓL�5Ù(Ø×Ñ 
Ñ*Ø×Ñ×&Ñ&ó(ˆÔð '2×&7Ñ&7ˆÔ#ØÐr%   c                 óB  — |j                   dk7  �r|j                  �rt        |j                   t        «      r'|j                   dk  r|j                  d d …= d |_        |S |j                  �­t        |j                   t        «      r‚t        |j                  j                   t        «      r^|j                  j                   |j                   z  }t
        j                  j                  |j                  j                  |«      |_        |S | j                  |«      S ||_        |S r  )
r=   rÄ   r(   rŠ  r  r   rí   r/  r•   rº  )r\   r*   Úsequence_nodeÚfactorr€   s        r#   rÂ  z'ConstantFolding._calculate_constant_seqë  sõ   € Ø×!Ñ! QÓ&¨=×+=Ó+=Ü˜&×0Ñ0´#Ô6¸6×;QÑ;QÐUVÒ;VØ!×&Ñ&¢qÐ)Ø,0�Ô)ð Ðð ×*Ñ*Ð6Ü˜v×5Ñ5´sÔ;Ü" =×#<Ñ#<×#LÑ#LÌcÔRØ)×5Ñ5×EÑEÈ×H^ÑH^Ñ^�EÜ09×0AÑ0A×0JÑ0JÈ=×KdÑKd×KhÑKhÐjoÓ0p�MÔ-ð Ðð  ×/Ñ/°Ó5Ð5à,2�Ô)ØÐr%   c                 ó¨  — | j                  |«       t        |j                  t        j                  «      r�t        |j
                  t        j                  «      ri|j
                  j                  sS| j                  |j                  j                  |j                  j                  |j
                  j                  «      }|�|S | j                  |«      S r'   )r^   r(   rB   r   r   rC   r\  r  Ú_build_fstringr•   r€   rÄ   rº  )r\   r*   Úfstrings      r#   Úvisit_ModNodezConstantFolding.visit_ModNodeü  s–   € Ø×Ñ˜4Ô Ü�d—m‘m¤Y×%:Ñ%:Ô;Ä
È4Ï=É=ÔZc×ZmÑZmÔ@nØ—=‘=×,Ò,Ø×-Ñ-¨d¯m©m×.?Ñ.?ÀÇÁ×ATÑATÐVZ×VcÑVc×VhÑVhÓi�ØÐ&Ø"�NØ×#Ñ# DÓ)Ð)r%   z'(%(?:(?:[-0-9]+|[ ])?(?:[.][0-9]+)?)?.)c                 ó  — t        |«      }g }d}t        j                  | j                  |«      D �]f  }|sŒ|dk(  r0|j	                  t        j                  |t        d«      ¬«      «       Œ<|d   dk7  rO|d   dk(  rt        |d|dd  › d	�d
¬«       d}|j	                  t        j                  |t        |«      ¬«      «       Œ“|d   }	 t        |«      }	|	j                  rd} n¶|dv r­|d
d  }
d }|dv rd|
v rd}n,|dv r!|
d d }
|}|
j                  d«      rd|
d
d  z   }
n|dk(  rd}|
j                  d«      rd|
d
d  z   }
|j	                  t        j                  |	j                  |	||
r t        j                  |t        |
«      ¬«      nd ¬«      «       �Œed} n |sy 	 t        |«       t        |dd
¬«       y # t        $ r t        |dd
¬«       d}Y  Œ:w xY w# t        $ r Y nw xY wt        j                  ||¬«      }| j!                  |«      S )NTz%%Ú%r   r   rI   zIncomplete format: '...éýÿÿÿÚ'r   )ÚlevelFz)Too few arguments for format placeholdersÚasrfdoxXÚdoxXr}  Úarsrß  r  Údr'  r   )r€   rs  rr  z*Too many arguments for format placeholders)r¹   )Úiterr   rÃ  Ú_parse_string_format_regexrN   r   r   r   r   ÚnextÚStopIterationr¾   rÙ  ÚFormattedValueNoder•   r¼  Úvisit_JoinedStrNode)r\   r•   r³  rÈ  rÄ   Ú
substringsÚcan_be_optimisedrN  Úformat_typer)   rr  rs  r*   s                r#   rÏ  zConstantFolding._build_fstring  sL  € ä�KÓ ˆØˆ
ØÐÜ—‘˜$×9Ñ9¸7×CˆAÙØØ�DŠyØ×!Ñ!¤)×"7Ñ"7¸Ä=ÐQTÓCUÔ"VÔWØØ�‰t�sŠ{Ø�R‘5˜C’<Ü˜CÐ#:¸1¸R¸S¸6¸(À!Ð!DÈAÕNØ',Ð$Ø×!Ñ!¤)×"7Ñ"7¸Ä=ÐQRÓCSÔ"TÔUØØ˜B™%ˆKðÜ˜4“j�ð
 �~Š~Ø#(Ð ÙØ˜jÑ(Ø  ˜e�Ø"&�Ø &Ñ(¨S°KÑ-?à',Ñ$Ø  EÑ)Ø"-¨c¨rÐ"2�KØ&1�OØ"×-Ñ-¨cÔ2Ø&)¨K¸¸¨OÑ&;™Ø  CÒ'à&)�Oà×)Ñ)¨#Ô.Ø"%¨°A°B¨Ñ"7�Kà×!Ñ!¤)×">Ñ">Ø—G‘G 3Ø$3á&ô !*× 5Ñ 5°cÄÈ{ÓA[Õ \Ø,0ô	#ö ð $)Ð Ùðc Dñf  àð	Ü�ŒJô �CÐEÈQÕOØøô[ !ò Ü˜ÐHÐPQÕRØ#(Ð ÚðûôT Ò"™dÐ"úô
 ×&Ñ& s°:Ô>ˆØ×'Ñ'¨Ó-Ð-s$   Ã	F8ÆG Æ8GÇGÇ	G$Ç#G$c                 óf  — | j                  |«       |j                  xs d}|j                  �3|j                  j                  r|j                  j                  sd |_        |j                  €‘|j                  j                  «       rwt        |j                  j                  t        «      rSt        t        |j                  j                  «      «      }t        j                  |j                  j                  |¬«      S |j                  €'|dk(  r"|j                  j                  r|j                  S |S )NrN  r   )r^   rs  rr  rç   r€   r  r(   r=   rŠ  r   r®  r   r   r•   )r\   r*   rs  r€   s       r#   rt  z(ConstantFolding.visit_FormattedValueNodeR  sæ   € Ø×Ñ˜4Ô Ø×.Ñ.Ò5°#ˆØ×ÑÐ'¨D×,<Ñ,<×,NÒ,NÐW[×WgÑWg×WmÒWmØ#ˆDÔØ×ÑÐ#¨¯
©
×(FÑ(FÔ(HÌZÐX\×XbÑXb×XrÑXrÔtwÔMxÜ!¤# d§j¡j×&@Ñ&@Ó"AÓBˆEÜ×(Ñ(¨¯©¯©¸uÔEÐEØ×ÑÐ#¨¸3Ò(>Ø�z‰z×+Ò+Ø—z‘zÐ!Øˆr%   c                 óF   — | j                  |«       | j                  |«      S r'   )r^   r½  r_   s     r#   rà  z#ConstantFolding.visit_JoinedStrNode_  s!   € Ø×Ñ˜4Ô Ø×*Ñ*¨4Ó0Ð0r%   c                 óˆ  — g }t        j                  |j                  t        d«      ¬«      D ]—  \  }}|rt	        |«      }|d   }t        |«      dkD  rBt        dj                  d„ |D «       «      «      }t        j                  |j                  |¬«      }|j                  sŒu|j                  |«       Œ‡|j                  |«       Œ™ |s,t        j                  |j                  t        d«      ¬«      }|S t        |«      dk(  r|d   }|S t        |«      dk(  r#t        j                  |j                  d	g|¢­Ž }|S ||_        |S )
zø
        Clean up after the parser by discarding empty Unicode strings and merging
        substring sequences.  Empty or single-value join lists are not uncommon
        because f-string format specs are always parsed into JoinedStrNodes.
        rç   )r;  r   r   rÅ  c              3   ó4   K  — | ]  }|j                   –— Œ y ­wr'   r   )r¿   r€   s     r#   rÁ   z9ConstantFolding.simplify_JoinedStrNode.<locals>.<genexpr>o  s   è ø€ Ð1VÉ:À%°%·+µ+É:ùrÂ   r   r   r(  )r   Úgroupbyr¹   r   rð  rL   r   r  r   r   r•   r€   rN   r   r7  )r\   r*   r¹   Úis_unode_grouprá  Úunoder€   s          r#   r½  z&ConstantFolding.simplify_JoinedStrNodec  s#  € ð ˆÜ*3×*;Ñ*;¸D¿K¹KÌZÐXkÓMl×*mÑ&ˆN˜JÙÜ! *Ó-�
Ø" 1™�Ü�z“? QÒ&Ü)¨"¯'©'Ñ1VÉ:Ó1VÓ*VÓW�EÜ%×1Ñ1°%·)±)À5ÔI�Eà—;“;Ø—M‘M %Õ(à—‘˜jÕ)ð +nñ Ü×(Ñ(¨¯©¼ÀrÓ9JÔKˆDð ˆô �‹[˜AÒØ˜!‘9ˆDð ˆô �‹[˜AÒä×'Ñ'¨¯©°#Ð?¸Ò?ˆDð ˆð !ˆDŒKØˆr%   c                 óT  ‡‡‡— | j                  |«       g Šg Šˆˆˆfd„Š|j                  D ]  } ‰||«       Œ ‰r‰j                  ‰«       t        ‰«      dk(  r-‰d   }|j                  st        |t        j                  «      r|S ‰|j                  dd | j                  |«       |S )z!Unpack **args in place if we can.c                 ó¾  •— |j                   rY‰rE‰d   j                  |j                  k(  r)‰d   j                  j                  |j                  «       y ‰j	                  |«       y t        |t        j                  «      r4| j                  |j                  k(  r|j                  D ]  } ‰||«       Œ y ‰r‰j                  ‰«       ‰d d …= ‰j	                  |«       y )NrI   )	Úis_dict_literalÚreject_duplicatesr  r   rN   r(   r   ÚMergedDictNoder�  )Úparentr)   Ú	child_argr!  rÄ   rÈ   s      €€€r#   r!  z1ConstantFolding.visit_MergedDictNode.<locals>.addˆ  s²   ø€ Ø×"Ò"Ù˜U 2™Y×8Ñ8¸C×<QÑ<QÒQØ˜"‘I×-Ñ-×4Ñ4°S×5HÑ5HÕIà—L‘L Õ%Ü˜C¤×!9Ñ!9Ô:¸v×?WÑ?WÐ[^×[pÑ[pÒ?pØ!$×!1Ô!1�IÙ˜˜YÕ'ñ "2ñ Ø—K‘K Ô&Øša˜Ø—‘˜CÕ r%   r   r   N)	r^   r�  r   rL   rí  r(   r   rï  r–  )r\   r*   r)   r!  rÄ   rÈ   s      @@@r#   Úvisit_MergedDictNodez$ConstantFolding.visit_MergedDictNode‚  sž   ú€ à×Ñ˜4Ô ØˆØˆö	!ð ×$Ô$ˆCÙ��c�Nð %áØ�K‰K˜Ôäˆt‹9˜Š>Ø�q‘'ˆCØ×"Ò"¤j°´i×6NÑ6NÔ&OØ�
Ø#ˆ×Ñ™!ÐØ×Ñ˜dÔ#Øˆr%   c                 óà  ‡‡‡‡— | j                  |«       |j                  t        j                  u Šg Šg Šˆˆˆˆfd„Š|j                  D ]
  } ‰|«       Œ ‰r‰j                  ‰d   «       t        ‰«      dk(  rS‰d   }‰r|j                  s>|j                  r|j                  |j                  u st        |t        j                  «      r|S ‰|j                  dd | j                  |«       |S )ú Unpack *args in place if we can.c                 óŒ  •— ‰r| j                   s| j                  rI| j                  s=‰r)‰d   j                  j	                  | j                  «       y ‰j                  | «       y t        | t        j                  «      r| j                  D ]
  } ‰|«       Œ y ‰r‰j                  ‰d   «       ‰d d …= ‰j                  | «       y )Nr   )	Úis_set_literalrÞ   r  rÄ   r   rN   r(   r   ÚMergedSequenceNode)r)   rñ  r!  rÄ   rã  r¹   s     €€€€r#   r!  z5ConstantFolding.visit_MergedSequenceNode.<locals>.add¬  s•   ø€ Ù˜3×-Ò-°3×3NÒ3NÐWZ×WfÒWfÙØ˜1‘I—N‘N×)Ñ)¨#¯(©(Õ3à—M‘M #Õ&Ü˜C¤×!=Ñ!=Ô>Ø!$§¤�IÙ˜	•Nñ "*ñ Ø—K‘K  q¡	Ô*Øšq˜	Ø—‘˜CÕ r%   r   r   N)r^   rE   r
   rØ   rÄ   rN   rL   rö  rÞ   r(   r   r÷  r–  )r\   r*   r)   r!  rÄ   rã  r¹   s      @@@@r#   Úvisit_MergedSequenceNodez(ConstantFolding.visit_MergedSequenceNode¤  sÊ   û€ à×Ñ˜4Ô à—‘œg×.Ñ.Ð.ˆØˆØˆ÷	!ð —9”9ˆCÙ��Hð áØ�K‰K˜˜q™	Ô"äˆt‹9˜Š>Ø�q‘'ˆCÙ˜C×.Ò.Ø×0Ò0°S·X±XÀÇÁÑ5JÜ˜s¤I×$@Ñ$@ÔAØ�
Øˆ�	‰	‘!ˆØ×Ñ˜dÔ#Øˆr%   c                 ó�  — | j                  |«       g }|j                  D ]ƒ  }|j                  s|j                  |«       Œ!|j                  j
                  r<|j                  j                  s&|j                  |j                  j                  «       Œs|j                  |«       Œ… ||j                  dd | j                  |«       |S )rô  N)	r^   rÄ   r¾   rN   r�   rÞ   r  r   r–  )r\   r*   rÄ   r)   s       r#   Úvisit_SequenceNodez"ConstantFolding.visit_SequenceNodeÊ  s‘   € à×Ñ˜4Ô ØˆØ—9”9ˆCØ—>’>Ø—‘˜CÕ Ø—‘×3Ò3¸C¿J¹J×<RÒ<RØ—‘˜CŸJ™JŸO™OÕ,à—‘˜CÕ ð ð ˆ�	‰	‘!ˆØ×Ñ˜dÔ#Øˆr%   c                 ót  — | j                  |dg«       |j                  }|}|�w| j                  |dg«       |j                  }t        |_        |j                  «       r,|j                  «       r	 |j                  |j                  «       |}|j                  }|�Œw|j                  s.|j                  «       r| j                  ||j                  «      S |S |j                  gg}g }|}|�~|j                  «       rK|j                  s"|j                  | j                  |d«      «       n@|j                  |j                  g«       n|d   j                  |«       |j                  }|�Œ~g }|D ]‚  }t!        |«      dk  rŒ|d   }t#        j$                  |j&                  |d   |j(                  |j                  t        ¬«      }	|j                  |	«       |	}
|dd  D ]  }||
_        |}
Œ d |
_        Œ„ |r|j                  |d   «       n|s| j                  |d	«      S |d   }t!        |«      dk(  r.|j                  «       r| j                  ||j                  «      S |S |dd  D ]*  }t#        j*                  |j&                  |d
|t        ¬«      }Œ, |S # t        t        t        t        t        t        f$ r Y �Œ,w xY w)NrB   rC   FrI   r   r   r   )rB   r~   rC   r=   Tr!  )r^   rB   rC   r   r=   r  Ú"calculate_cascaded_constant_resultr!  r‹  rv   rŒ  r%  r�  rÿ  r�  rN   rL   r   r›   r•   r~   r0  )r\   r*   Ú	left_noder¬   Ú
right_nodeÚcascadesÚfinal_false_resultÚ	cmp_nodesrÿ  Ú	pcmp_nodeÚlast_cmp_nodes              r#   r±   z$ConstantFolding.visit_PrimaryCmpNodeÙ  s»  € à×Ñ˜4 * Ô.Ø—M‘Mˆ	ØˆØÐ"Ø×Ñ˜x¨*¨Ô6Ø!×*Ñ*ˆJÜ'5ˆHÔ$Ø×,Ñ,Ô.°:×3QÑ3QÔ3SðØ×?Ñ?À	×@YÑ@YÔZð #ˆIØ×'Ñ'ˆHð Ñ"ð �|Š|Ø×'Ñ'Ô)Ø—‘ t¨T×-AÑ-AÓBÐBØˆKð —]‘]�OÐ$ˆØÐàˆØÐ"Ø×+Ñ+Ô-Ø×/Ò/à&×-Ñ-¨d¯o©o¸hÈÓ.NÔOØð —O‘O X×%6Ñ%6Ð$7Õ8ð ˜‘×#Ñ# HÔ-Ø×'Ñ'ˆHð Ñ"ð ˆ	ÛˆGÜ�7‹|˜aÒØØ˜q‘zˆHÜ!×0Ñ0Ø—‘Ø  ™Ø!×*Ñ*Ø!×*Ñ*Ü .ô0ˆIð ×Ñ˜YÔ'à%ˆMØ# A B›K�Ø(0�Ô%Ø (‘ð (ð %)ˆMÕ!ð!  ñ$ à×ÑÐ/°Ñ2Õ3Ùà—?‘? 4¨Ó.Ð.Ø˜‰|ˆÜˆy‹>˜QÒØ×'Ñ'Ô)Ø—‘ t¨T×-AÑ-AÓBÐBð ˆð & a b›M�Ü ×.Ñ.Ø—H‘HØ!Ø"Ø%Ü$2ô4‘ð *ð ˆøôE #¤I¬x¼Ä^ÔUdÐeò Úðús   Á/J Ê#J7Ê6J7c                 ó¸   — | j                  |«       |j                  j                  «       s|S |j                  j                  r|j                  S |j
                  S r'   )r–  r/  r  r=   r<  r=  r_   s     r#   r?  z"ConstantFolding.visit_CondExprNode)  sF   € Ø×Ñ˜dÔ#Ø�y‰y×,Ñ,Ô.ØˆKØ�9‰9×$Ò$Ø—=‘=Ð à—>‘>Ð!r%   c                 ól  — | j                  |«       g }|j                  D ]O  }|j                  }|j                  «       r |j                  sŒ,|j
                  |_         n|j                  |«       ŒQ |r	||_        |S |j                  r|j                  S t        j                  |j                  g ¬«      S ©Nr„   )r^   rŠ   r‡   r  r=   rˆ   r‹   rN   r   rœ   r•   )r\   r*   rŠ   r5  r‡   s        r#   r9  z ConstantFolding.visit_IfStatNode2  sŸ   € Ø×Ñ˜4Ô àˆ
ØŸœˆIØ!×+Ñ+ˆIØ×,Ñ,Ô.Ø×,Ó,à'0§~¡~�DÔ$Ùð ×!Ñ! )Õ,ð )ñ Ø(ˆDŒOØˆKØ×ÒØ×#Ñ#Ð#ä×%Ñ% d§h¡h°bÔ9Ð9r%   c                 ó  — | j                  |«       |j                  �|j                  j                  €
d x}|_        n|j                  j                  }|j                  �|j                  j                  €
d x}|_        n|j                  j                  }|j                  t        ur\|j
                  }|j                  r"|j                  €|j                  || |_        |S |j                  r|j                  ||«      }|�|S |S r'   )r–  rV  r=   rX  r   r—   rÞ   r  rÄ   rç   Úas_sliced_node)r\   r*   rV  rX  r—   s        r#   Úvisit_SliceIndexNodez$ConstantFolding.visit_SliceIndexNodeI  så   € Ø×Ñ˜dÔ#à�:‰:Ð §¡×!;Ñ!;Ð!CØ!%Ð%ˆE�D•Jà—J‘J×.Ñ.ˆEØ�9‰9Ð §	¡	× 9Ñ 9Ð AØ#Ð#ˆD�4•9à—9‘9×,Ñ,ˆDà×Ñ¤~Ñ5Ø—9‘9ˆDØ×+Ò+°×0@Ñ0@Ð0HØ ŸI™I e¨DÐ1�”	Ø�Ø×'Ò'Ø×*Ñ*¨5°$Ó7�ØÐ#Ø�KØˆr%   c                 ó   — | j                  |«       t        |j                  t        j                  «      rØ|j                  j
                  sÂ|j                  t        j                  u r"t        j                  |j                  g g ¬«      S |j                  t        j                  u r*t        j                  |j                  g t        «       ¬«      S |j                  t        j                  u r"t        j                   |j                  g i ¬«      S |S )Nr÷  r  )r^   r(   rÕ  r   rœ   r…   rE   r
   r  r   rã   r•   rØ   r]  rK   rÖ   r
  r_   s     r#   Úvisit_ComprehensionNodez'ConstantFolding.visit_ComprehensionNode`  sÇ   € Ø×Ñ˜4Ô Ü�d—i‘i¤×!3Ñ!3Ô4¸T¿Y¹Y¿_º_à�y‰yœG×-Ñ-Ñ-Ü ×)Ñ)Ø—H‘H 2°rô;ð ;à—‘œg×.Ñ.Ñ.Ü ×(Ñ(Ø—H‘H 2´s³uô>ð >à—‘œg×/Ñ/Ñ/Ü ×)Ñ)Ø—H‘H¨bÀ"ôFð Fàˆr%   c                 ó„  — | j                  |«       |j                  j                  }t        |t        j
                  «      r~|j                  s9|j                  r|j                  S t        j                  |j                  g ¬«      S t        |t        j                  «      r|j                  «       |j                  _        |S r  )r^   rŽ   rŒ   r(   r   ÚSequenceNoderÄ   r‹   r   rœ   r•   rã   rý  )r\   r*   rŒ   s      r#   r´   z#ConstantFolding.visit_ForInStatNodeo  sŽ   € Ø×Ñ˜4Ô Ø—=‘=×)Ñ)ˆÜ�h¤	× 6Ñ 6Ô7Ø—=’=Ø×#Ò#Ø×+Ñ+Ð+ô !×-Ñ-¨d¯h©h¸bÔAÐAä˜(¤I×$6Ñ$6Ô7Ø)1×):Ñ):Ó)<�—‘Ô&Øˆr%   c                 óØ   — | j                  |«       |j                  rL|j                  j                  «       r2|j                  j                  rd |_        d |_        |S |j                  S |S r'   )r^   r‡   r  r=   r‹   r_   s     r#   Úvisit_WhileStatNodez#ConstantFolding.visit_WhileStatNode~  s\   € Ø×Ñ˜4Ô Ø�>Š>˜dŸn™n×@Ñ@ÔBØ�~‰~×-Ò-Ø!%�”Ø#'�Ô ð ˆð ×'Ñ'Ð'Øˆr%   c                 óª   — | j                  |«       t        |j                  t        j                  «      s|S |j                  j                  «       ry |S r'   )r^   r(   rb   r   ÚExprNoder  r_   s     r#   rc   z"ConstantFolding.visit_ExprStatNodeˆ  sA   € Ø×Ñ˜4Ô Ü˜$Ÿ)™)¤Y×%7Ñ%7Ô8àˆKà�9‰9×(Ñ(Ô*ØØˆr%   c                 óÎ   — | j                  |«       |j                  €|S |j                  j                  «       r+|j                  j                  r	d |_        |S |j                  S |S r'   )r^   r‡   r  r=   rˆ   r_   s     r#   Úvisit_GILStatNodez!ConstantFolding.visit_GILStatNode’  s_   € Ø×Ñ˜4Ô Ø�>‰>Ð!ØˆKà�>‰>×-Ñ-Ô/ð �~‰~×-Ò-Ø!%�”ð ˆð —y‘yÐ ð ˆr%   rð  )2rl   rm   rn   ro   rY   r–  r   rž   r  rí   rª  r˜  r›  r�  rŸ  r¥  r2  r¨  r¢  r¤  r£  rC  rº  rÀ  rÄ  rÃ  rÂ  rÑ  rÜ  rÏ  rt  rà  r½  rò  rø  rú  r±   r?  r9  r	  r  r´   r  rc   r  r   rQ  rR  rp   Ú__classcell__)r†  s   @r#   r‚  r‚  º  s  ø„ ñõ %ò1ð@ !×)Ñ)¨9×+=Ñ+=Ø ×(Ñ(¨)×*=Ñ*=ð?€Oòò?òòð& ØØØñ	÷
 
�cð òòò,ò%ò8òt5*òn*òò6ò"*ð	ð òD.òLò1òò> òD$òLòNò`"ò:ò.ò.òòòòð6 ×)Ñ)×=Ñ=„Jr%   r‚  c                   ór   — 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d„Zdej                   fd„Zy)ÚFinalOptimizePhasea½  
    This visitor handles several commuting optimizations, and is run
    just before the C code generation phase.

    The optimizations currently implemented in this class are:
        - eliminate None assignment and refcounting for first assignment.
        - isinstance -> typecheck for cdef types
        - eliminate checks for None and/or types that became redundant after tree changes
        - eliminate useless string formatting steps
        - inject branch hints for unlikely if-cases that only raise exceptions
        - replace Python function calls that look like method calls by a faster PyMethodCallNode
        - replace duplicate FormattedValueNodes in f-strings with CloneNodes
    Fc                 óf   — | j                  |«       |j                  r|j                  }d|_        |S )zaAvoid redundant initialisation of local variables before their
        first assignment.
        T)r^   rG  r‚   Úlhs_of_first_assignment)r\   r*   r‚   s      r#   Úvisit_SingleAssignmentNodez-FinalOptimizePhase.visit_SingleAssignmentNodeÀ  s/   € ð 	×Ñ˜4Ô Ø�:Š:Ø—(‘(ˆCØ*.ˆCÔ'Øˆr%   c                 ó  — |j                   }|j                  }|j                  s|j                  r|j                  nd }| j                  «       }|j                  xs2 |j                  xs$ |j                  xr |j                  j                  }|j                  «       xr` |j                  xrR |t        j                  uxr> |xr |j                   xr+ | j                  j!                  | j"                  s|rdnd«      S )Nz&optimize.unpack_method_calls_in_pyinitzoptimize.unpack_method_calls)rø   rE   rÒ   rÓ   rÔ   r¦   Úis_module_scopeÚis_c_class_scopeÚis_py_class_scopeÚouter_scoperØ  rá   r
   rM   rý   r1  r2  Úin_loop)r\   r*   rø   Úfunction_typerÔ   r  Úin_global_scopes          r#   Ú_check_optimize_method_callsz/FinalOptimizePhase._check_optimize_method_callsÊ  sñ   € Ø—=‘=ˆØ Ÿ™ˆØ"*×"2Ò"2°h×6KÒ6K�—’ÐQUˆØ×ÑÓ ˆà×Ñò HØ× Ñ òHà×"Ñ"ÒF s§¡×'FÑ'Fð 	ð ×ÑÓ!ò 5Ø×%Ñ%ò5à¤×!2Ñ!2Ð2ò5ð Ò+˜5×+Ñ+Ð,ò5ð ×#Ñ#×'Ñ'à—|’|©ñ 9à3ó5ð		
r%   c                 óÔ  — | j                  |«       |j                  }|j                  j                  �r|j                  �r|j
                  dk(  rût        |j                  «      dk(  rã|j                  d   }|j                  j                  r¾|j                  j
                  dk(  r¥| j                  j                  }|j                  d«      |_        |j                  j                  |_        t        j                  |j                  d«      j                  «      }t        j                   |j                  d   |«      |j                  d<   |S t        j"                  j%                  |j&                  d¬«      rït        j"                  j)                  |«      rÐ|j*                  rm|j,                  rat/        |j0                  t        j2                  «      r=|j0                  j4                  |j*                  u r|j0                  j4                  |_        | j7                  |t        j"                  j9                  |||j&                  |j                  | j;                  |«      ¬	«      «      }|S )
z¬
        Replace generic calls to isinstance(x, type) by a more efficient type check.
        Replace likely Python method calls by a specialised PyMethodCallNode.
        r(   r   r   rE   ÚPyObject_TypeCheckrä  F)Ú
has_kwargs)rø   r÷   rE   Úunpack)r^   rø   rE   Úis_cfunctionrÒ   r"   rL   rÄ   rC  rú   rë  r-  rÔ   r	   rì  r   r’  ÚPyMethodCallNodeÚcan_be_used_for_posargsr÷   Úcan_be_used_for_functionr\   rÓ   r(   r8   r�  r)   r  Ú	from_noder"  )r\   r*   rø   rï  rë  rô  s         r#   rŒ  z'FinalOptimizePhase.visit_SimpleCallNodeß  sÇ  € ð
 	×Ñ˜4Ô Ø—=‘=ˆØ�=‰=×%Ó%¨(×*:Ó*:Ø�}‰} Ò,´°T·Y±Y³À1Ò1DØŸ9™9 Q™<�Ø—=‘=×0Ò0°X·]±]×5GÑ5GÈ6Ò5QØ#'§<¡<×#<Ñ#<�LØ%1×%8Ñ%8Ð9MÓ%N�H”NØ$,§N¡N×$7Ñ$7�H”MÜ&0×&9Ñ&9¸,×:MÑ:MÈnÓ:]×:bÑ:bÓ&c�OÜ#,×#5Ñ#5°d·i±iÀ±lÀOÓ#T�D—I‘I˜a‘Lð ˆô ×)Ñ)×AÑAÀ$Ç.Á.Ð]bÐAÔcä×-Ñ-×FÑFÀxÔPØŸ	š	 h×&;Ò&;Ü& x§|¡|´Y×5HÑ5HÔIÈhÏlÉl×N^ÑN^Ðbf×bkÑbkÑNkà'/§|¡|×'7Ñ'7˜œØŸ<™<¨¬i×.HÑ.H×.RÑ.RØ x¸4¿>¹>ÐPT×PYÑPYØ#×@Ñ@ÀÓFð /Só /Hó I�Dð ˆr%   c                 ó  — | j                  |«       t        |j                  «      }t        |j                  t        j
                  «      }t        j                  j                  |j                  ||¬«      s|S |j                  }t        j                  j                  |«      s|S | j                  |t        j                  j                  |||j                  |j                  |j                  | j                  |«      ¬«      «      }|S )zW
        Replace likely Python method calls by a specialised PyMethodCallNode.
        )r%  Úhas_explicit_kwargs)rø   r÷   ÚkwdictrE   r&  )r^   rŸ  r�  r(   r   r
  r(  r)  rŽ  rø   r*  r  r+  rE   r"  )r\   r*   r%  r-  rø   s        r#   r�  z(FinalOptimizePhase.visit_GeneralCallNodeý  sæ   € ð 	×Ñ˜4Ô Ü˜$×+Ñ+Ó,ˆ
Ü(¨×):Ñ):¼I×<NÑ<NÓOÐÜ×)Ñ)×AÑAØ×$Ñ$°ÐQdð Bô fàˆKØ—=‘=ˆÜ×)Ñ)×BÑBÀ8ÔLØˆKà�|‰|˜D¤)×"<Ñ"<×"FÑ"FØ˜8¨t×/CÑ/CÈD×L]ÑL]Ø—‘ 4×#DÑ#DÀTÓ#Jð #Gó #Ló Mˆð ˆr%   c                 ó(   — | j                  |«       |S r'   )r^   r_   s     r#   Úvisit_NumPyMethodCallNodez,FinalOptimizePhase.visit_NumPyMethodCallNode  s   € à×Ñ˜4Ô Øˆr%   c                 ó‚   — | j                  |«       |j                  s!|j                  j                  «       sd|_        |S )z‘Remove tests for alternatively allowed None values from
        type tests when we know that the argument cannot be None
        anyway.
        T)r^   Únotnoner)   rm  r_   s     r#   r#  z'FinalOptimizePhase.visit_PyTypeTestNode  s5   € ð
 	×Ñ˜4Ô Ø�|Š|Ø—8‘8×'Ñ'Ô)Ø#�”Øˆr%   c                 ót   — | j                  |«       |j                  j                  «       s|j                  S |S )z_Remove None checks from expressions that definitely do not
        carry a None value.
        )r^   r)   rm  r_   s     r#   Úvisit_NoneCheckNodez&FinalOptimizePhase.visit_NoneCheckNode   s0   € ð 	×Ñ˜4Ô Ø�x‰x×#Ñ#Ô%Ø—8‘8ˆOØˆr%   c                 ó\   — | j                   }d| _         | j                  |«       || _         |S )zeRemember when we enter a loop as some expensive optimisations might still be worth it there.
        T)r  r^   )r\   r*   Úold_vals      r#   Úvisit_LoopNodez!FinalOptimizePhase.visit_LoopNode)  s.   € ð —,‘,ˆØˆŒØ×Ñ˜4Ô ØˆŒØˆr%   c                 ó  — | j                  |«       d}t        |j                  «      D ]0  \  }}| j                  ||j                  «       |j
                  rŒ/|}Œ2 |j                  r |r| j                  ||j                  d¬«       |S )zQAssign 'unlikely' branch hints to if-clauses that only raise exceptions.
        NT)Úinverse)r^   rÍ   rŠ   Ú_set_ifclause_branch_hintrˆ   Úbranch_hintr‹   )r\   r*   Úlast_non_unlikely_clauser  r5  s        r#   r9  z#FinalOptimizePhase.visit_IfStatNode2  s‚   € ð 	×Ñ˜4Ô Ø#'Ð Ü% d§o¡oÖ6‰LˆAˆyØ×*Ñ*¨9°i·n±nÔEØ×(Ó(Ø+4Ñ(ð 7ð ×ÒÑ 8à×*Ñ*Ð+CÀT×EUÑEUÐ_cÐ*ÔdØˆr%   c                 óh  — |j                   syt        j                  t        j                  t        j                  t        j
                  t        j                  t        j                  f}|g}t        |d«      D ]·  \  }}t        |t        j                  «      r|j                  ||j                  «       Œ=t        |t        j                  «      r|j                  ||| Œgt        ||«      rŒt|t        |«      k(  r5t        |t        j                   t        j"                  f«      r|rdnd|_         y y)z\Inject a branch hint if the if-clause unconditionally leads to a 'raise' statement.
        Nr   ÚlikelyÚunlikely)Úis_terminatorr   rz  ÚAssignmentNodeÚAssertStatNodeÚDelStatNodeÚ
GlobalNodeÚNonlocalNoderÍ   r(   ÚGILStatNoder¾  rˆ   rœ   r…   rL   ÚRaiseStatNodeÚReraiseStatNoder;  )r\   ÚclauseÚstatements_noder9  Únon_branch_nodesÚ
statementsÚnext_node_posr*   s           r#   r:  z,FinalOptimizePhase._set_ifclause_branch_hint@  sû   € ð ×,Ò,Øô ×ÑÜ× Ñ Ü× Ñ Ü×ÑÜ×ÑÜ×Ñð
Ðð &Ð&ˆ
Ü#,¨Z¸Ö#;ÑˆM˜4Ü˜$¤× 1Ñ 1Ô2Ø×!Ñ! -°·±Ô;ØÜ˜$¤× 2Ñ 2Ô3Ø:>¿*¹*�
˜=¨Ð7ØÜ˜dÐ$4Õ5Ø ¤C¨
£OÒ3¼
À4Ì%×J]ÑJ]Ô_d×_tÑ_tÐIuÔ8vá5<©À*�FÔ&Ùñ $<r%   r*   c                 ó¤  — t         j                  }t         j                  }i }|j                  dd }t	        |j                  «      D ]÷  \  }}t        ||«      sŒ|j                  }t        |j                  |«      r|j                  }n%|j                  �n|j                  j                  rnŒg|j                  r|j                  «       sŒ„|j                  |j                  |j                  |j                  xs df}	|j!                  |	|«      }
|
|u rŒÍt        j"                  |
«      }|j$                  |_        |||<   Œù ||j                  dd |S )a  
        Deduplicate repeatedly formatted (C) values by replacing them with CloneNodes.
        It's not uncommon for a formatting expression to appear multiple times in an f-string.

        Note that this is somewhat handwavy since it's potentially possible even for simple
        expressions to change their value while processing an f-string, e.g. by modifying the
        world in a ".__format__" method.  However, this seems unlikely enough to appear in
        real-world code that we ignore the case here.
        NrN  )r   rß  rô   r¹   rÍ   r(   r€   r)   rq  rE   rC  rÒ   r�  r"   rr  rs  rG  r�  r•   )r\   r*   rß  rô   r'  r¹   r  ÚfnodeÚfnode_value_noder;  Ú
seen_fnodeÚdedup_fnodes               r#   rà  z&FinalOptimizePhase.visit_JoinedStrNode\  s<  € ô '×9Ñ9ÐÜ&×9Ñ9ÐàˆØ—‘™Q�ˆÜ! $§+¡+Ö.‰HˆAˆuÜ˜eÐ%7Ô8àØ$Ÿ{™{ÐÜ˜%Ÿ+™+Ð'9Ô:à#3×#7Ñ#7Ñ Ø×$Ñ$Ð0àØ!×&Ñ&×6Ò6ð ð à$×,Ò,Ð1A×1KÑ1KÔ1Mð
 à#×(Ñ(¨%×*=Ñ*=¸u×?PÑ?PÐRW×RgÑRgÒRnÐknÐoˆCØŸ™¨¨eÓ4ˆJØ˜UÑ"Øä#×-Ñ-¨jÓ9ˆKØ#Ÿi™iˆKŒOØ#ˆF�1ŠIðE /ðH  ˆ�‰‘AˆØˆr%   Nrð  )rl   rm   rn   ro   r  r  r"  rŒ  r�  r0  r#  r4  r7  r9  r:  r   r¼  rà  re   r%   r#   r  r  °  sR   „ ñð €Gòò
ò*ò<ò&ò
	òòòóð84¨	×(?Ñ(?ô 4r%   r  c                   ó    — e Zd ZdZdZd„ Zd„ Zy)ÚConsolidateOverflowChecka5  
    This class facilitates the sharing of overflow checking among all nodes
    of a nested arithmetic expression.  For example, given the expression
    a*b + c, where a, b, and x are all possibly overflowing ints, the entire
    sequence will be evaluated and the overflow bit checked only at the end.
    Nc                 óš   — | j                   �-| j                   }d | _         | j                  |«       || _         |S | j                  |«       |S r'   )Úoverflow_bit_noder^   )r\   r*   Úsaveds      r#   rp   z#ConsolidateOverflowCheck.visit_Nodeœ  sS   € Ø×!Ñ!Ð-Ø×*Ñ*ˆEØ%)ˆDÔ"Ø×Ñ˜tÔ$Ø%*ˆDÔ"ð ˆð ×Ñ˜tÔ$Øˆr%   c                 óð   — |j                   rX|j                  rL| j                  d u }|r|| _        n| j                  |_        d|_         | j                  |«       |rd | _        |S | j                  |«       |S r3   )Úoverflow_checkÚoverflow_foldrV  r^   )r\   r*   Útop_level_overflows      r#   Úvisit_NumBinopNodez+ConsolidateOverflowCheck.visit_NumBinopNode¦  sz   € Ø×Ò 4×#5Ò#5Ø!%×!7Ñ!7¸4Ð!?ÐÙ!Ø)-�Õ&à)-×)?Ñ)?�Ô&Ø&+�Ô#Ø×Ñ˜tÔ$Ù!Ø)-�Ô&ð ˆð ×Ñ˜tÔ$Øˆr%   )rl   rm   rn   ro   rV  rp   r\  re   r%   r#   rT  rT  “  s   „ ñð Ðòór%   rT  re   )GÚcythonÚdeclarerÅ  r   r   r   r   Ú	functoolsr   r   r~   r   rÅ  r   r   r   r   r«  r®  rÇ  r   r	   r   r
   r   r   ÚCoder   r   ÚStringEncodingr   r   r   ÚErrorsr   r   ÚParseTreeTransformsr   r   r$   rô   r6  r,   r1   r7   r>   rð  rT   rX   rV   rt   rr   ÚEnvTransformrz   rõ  rQ  rT  rc  rˆ  ÚNodeRefCleanupMixinr  ÚMethodDispatcherTransformr   r¦  r!   rÖ  r9  r‚  r  ÚCythonTransformrT  re   r%   r#   Ú<module>rh     s~  ðÛ Ø €‡�ò .™6ð .±ð .Ávð .Ñ^dð .Ùð.Ù'-ð.Ù:@ð.ÙJPð.áð.á)/ð.á7=ð.ñ ð.ñ  &ð.ñ /5ð.ñ AGð.ñ TZð.ñ ð	.ñ '-ñ	.ó 
Û Û Û ß %Ý å ß 2à˜3�<Ð õ Ý Ý Ý Ý Ý Ý ç 1ß HÑ Hß "Ý 1Ý ò7ð /8×.JÑ.JÈI×LjÑLjÐ-kó òòòð#$¨tó #$ôL˜'×-Ñ-ô ò@òôt˜×-Ñ-ô tôn!y>�g×*Ñ*ô y>ôxF>˜W×5Ñ5Ð7Gô F>ôRq&˜w×7Ñ7ô q&ôhC˜w×3Ñ3ô CôL˜×4Ñ4°g×6JÑ6Jô ôDvT˜7×6Ñ6Ø"×<Ñ<ôvTòr?B:ðJ "9 ×!8Ñ!8Ð9LÈoÓ!^Ð Ø6˜{×6Ñ6Ð7HÈ/ÓZÐ ôs>�g×.Ñ.Ð0@ô s>ôl`˜×-Ñ-¨w×/JÑ/Jô `ôF ˜w×6Ñ6õ  r%   