Ë
    Æ[;j†>  ã            	       ó  — d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZ ddl	m
Z
 ddlmZ ddlmZmZmZ ddlmZmZ ddl	mZ dd	lmZ  G d
„ de«      Zd„ Z G d„ dej0                  «      Z G d„ de«      Z e ej6                   ej8                  ddd«      «      j8                  d«      Z e ej6                   ej8                  ddd«      «      j8                  d«      Zd„ Z G d„ de«      Z d„ Z!dd„Z"dd„Z#d„ Z$y)é    N)Úpartialé   )ÚErrors)Ú
CodeWriter)ÚTreeFragmentÚstrip_common_indentÚStringParseContext)ÚTreeVisitorÚVisitorTransform)ÚTreePath)Ú	PostParsec                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚNodeTypeWriterc                 ó>   •— t         ‰| �  «        d| _        g | _        y )Nr   )ÚsuperÚ__init__Ú_indentsÚresult©ÚselfÚ	__class__s    €úYG:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\Cython/TestUtils.pyr   zNodeTypeWriter.__init__   s   ø€ Ü‰ÑÔØˆŒØˆ�ó    c                 ód  — | j                   sd}n"| j                   d   }|d   �	d|dd z  }n|d   }| j                  j                  d| j                  z  |›d|j                  j
                  ›�z   «       | xj                  dz  c_        | j                  |«       | xj                  dz  c_        y )	Nz(root)éÿÿÿÿé   z%s[%d]r   é   z  z: )Úaccess_pathr   Úappendr   r   Ú__name__Úvisitchildren)r   ÚnodeÚnameÚtips       r   Ú
visit_NodezNodeTypeWriter.visit_Node   s£   € Ø×ÒØ‰Dà×"Ñ" 2Ñ&ˆCØ�1‰vÐ!Ø # a¨ (Ñ*‘à˜1‘v�à�‰×Ñ˜4 $§-¡-Ñ/Ú'+¨T¯^©^×-DÒ-DÐEñFô 	Gà�Š˜Ñ�Ø×Ñ˜4Ô Ø�Š˜ÑŽr   )r    Ú
__module__Ú__qualname__r   r%   Ú__classcell__©r   s   @r   r   r      s   ø„ ôö
r   r   c                 ó~   — t        «       }|j                  | «       dj                  dg|j                  z   dgz   «      S )zÊReturns a string representing the tree by class names.
    There's a leading and trailing whitespace so that it can be
    compared by simple string comparison while still making test
    cases look ok.Ú
Ú )r   ÚvisitÚjoinr   )ÚrootÚws     r   Ú	treetypesr1   )   s7   € ô
 	Ó€AØ‡G�GˆD„MØ�9‰9�b�T˜AŸH™H‘_¨ tÑ+Ó,Ð,r   c                   óT   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dd	„Z
d
„ Zefd„Zd„ Zy)Ú
CythonTestc                 ó,   — t        j                  «        y ©N©r   Úinit_thread©r   s    r   ÚsetUpzCythonTest.setUp5   ó   € Ü×ÑÕr   c                 ó,   — t        j                  «        y r5   r6   r8   s    r   ÚtearDownzCythonTest.tearDown8   r:   r   c           
      óŒ  — t        |t        «      s|j                  d«      }t        |t        «      s|j                  d«      }t        t	        ||«      «      D ]!  \  }\  }}| j                  ||d|||fz  «       Œ# | j                  t        |«      t        |«      ddj                  |«      ›ddj                  |«      ›�«       y)zHChecks that the given strings or lists of strings are equal line by liner+   zLine %d:
Exp: %s
Got: %súUnmatched lines. Got:
ú
Expected:
N)Ú
isinstanceÚlistÚsplitÚ	enumerateÚzipÚassertEqualÚlenr.   )r   Úexpectedr   ÚidxÚexpected_lineÚresult_lines         r   ÚassertLineszCythonTest.assertLines;   s²   € ä˜(¤DÔ)Ø—~‘~ dÓ+ˆHÜ˜&¤$Ô'Ø—\‘\ $Ó'ˆFÜ1:¼3¸xÈÓ;PÖ1QÑ-ˆCÑ-�- Ø×Ñ˜]¨KØ9¸SÀ-ÐQ\Ð<]Ñ]õ_ð 2Rð 	×Ñœ˜X›¬¨F¬ØGKÇyÁyÐQYÕGZÐ\`×\eÑ\eÐflÔ\mÐnõ	pr   c                 ód   — t        «       }|j                  |«       |j                  j                  S r5   )r   Úwriter   Úlines)r   ÚtreeÚwriters      r   ÚcodeToLineszCythonTest.codeToLinesG   s%   € Ü“ˆØ�‰�TÔØ�}‰}×"Ñ"Ð"r   c                 óB   — dj                  | j                  |«      «      S )Nr+   )r.   rQ   )r   rO   s     r   ÚcodeToStringzCythonTest.codeToStringL   s   € Ø�y‰y˜×)Ñ)¨$Ó/Ó0Ð0r   c           	      ó@  — | j                  |«      }t        |j                  d«      «      }t        t	        ||«      «      D ]!  \  }\  }}| j                  ||d|||fz  «       Œ# | j                  t        |«      t        |«      ddj                  |«      ›d|›�«       y )Nr+   zLine %d:
Got: %s
Exp: %sr>   r?   )rQ   r   rB   rC   rD   rE   rF   r.   )r   rG   Úresult_treeÚresult_linesÚexpected_linesrH   ÚlinerI   s           r   Ú
assertCodezCythonTest.assertCodeO   sš   € Ø×'Ñ'¨Ó4ˆä,¨X¯^©^¸DÓ-AÓBˆä*3´C¸ÀnÓ4UÖ*VÑ&ˆCÑ&�$˜Ø×Ñ˜]¨DØ9¸SÀ$ÈÐ<VÑVõXð +Wð 	×Ñœ˜\Ó*¬C°Ô,?ØGKÇyÁyÐQ]ÕG^Ñ`hÐiõ	kr   c                 óX   — | j                  t        j                  ||«      d d|z  «       y )Nz"Path '%s' not found in result tree)ÚassertNotEqualr   Ú
find_first)r   ÚpathrU   s      r   ÚassertNodeExistszCythonTest.assertNodeExistsZ   s*   € Ø×ÑœH×/Ñ/°¸TÓBÀDØ@À4ÑGõ	Ir   Nc                 ó²   — |€i }|€g }| j                  «       }|j                  d«      r|t        d«      d }|j                  dd«      }t	        ||||¬«      S )zNSimply create a tree fragment using the name of the test-case in parse errors.Nz	__main__.Ú.Ú_©Úpipeline)ÚidÚ
startswithrF   Úreplacer   )r   ÚcodeÚpxdsrc   r#   s        r   ÚfragmentzCythonTest.fragment^   sa   € àˆ<ØˆDØÐØˆHØ�w‰w‹yˆØ�?‰?˜;Ô'Øœ˜KÓ(Ð)Ð*ˆDØ�|‰|˜C Ó%ˆÜ˜D $¨°xÔ@Ð@r   c                 ó   — t        |«      S r5   )r1   )r   r/   s     r   r1   zCythonTest.treetypesj   s   € Ü˜‹Ðr   c                 óš   — 	  |«        | j                  d|z  «       y# |$ r'}| j                  t        ||«      «       |cY d}~S d}~ww xY w)z“Calls "func" and fails if it doesn't raise the right exception
        (any exception by default). Also returns the exception in question.
        z Expected an exception of type %rN)ÚfailÚ
assertTruer@   )r   ÚfuncÚexc_typeÚes       r   Úshould_failzCythonTest.should_failm   sF   € ð	ÙŒFØ�I‰IÐ8¸8ÑCÕDøØò 	Ø�O‰OœJ q¨(Ó3Ô4Ø�Hûð	ús   ‚ žA
£A¿A
ÁA
c                 ór   — 	  |«       S # t         $ r$}| j                  t        |«      «       Y d}~yd}~ww xY w)z©Calls func and succeeds if and only if no exception is raised
        (i.e. converts exception raising into a failed testcase). Returns
        the return value of func.N)Ú	Exceptionrl   Ústr)r   rn   Úexcs      r   Úshould_not_failzCythonTest.should_not_failx   s1   € ð	 Ù“6ˆMøÜò 	 Ø�I‰I”c˜#“h×Ñûð	 ús   ‚	 ‰	6’1±6)NN)r    r&   r'   r9   r<   rK   rQ   rS   rY   r^   ri   r1   rs   rq   rv   © r   r   r3   r3   3   sB   „ òòò
pò#ò
1ò	kòIó
Aòð *3ó 	ó r   r3   c                   ó   — e Zd ZdZdd„Zy)ÚTransformTesta.  
    Utility base class for transform unit tests. It is based around constructing
    test trees (either explicitly or by parsing a Cython code string); running
    the transform, serialize it using a customized Cython serializer (with
    special markup for nodes that cannot be represented in Cython),
    and do a string-comparison line-by-line of the result.

    To create a test case:
     - Call run_pipeline. The pipeline should at least contain the transform you
       are testing; pyx should be either a string (passed to the parser to
       create a post-parse tree) or a node representing input to pipeline.
       The result will be a transformed result.

     - Check that the tree is correct. If wanted, assertCode can be used, which
       takes a code string as expected, and a ModuleNode in result_tree
       (it serializes the ModuleNode to a string and compares line-by-line).

    All code strings are first stripped for whitespace lines and then common
    indentation.

    Plans: One could have a pxd dictionary parameter to run_pipeline.
    Nc                 ód   — |€i }| j                  ||«      j                  }|D ]
  } ||«      }Œ |S r5   )ri   r/   )r   rc   Úpyxrh   rO   ÚTs         r   Úrun_pipelinezTransformTest.run_pipelineš   s:   € Øˆ<ØˆDØ�}‰}˜S $Ó'×,Ñ,ˆãˆAÙ�T“7‰Dð àˆr   r5   )r    r&   r'   Ú__doc__r}   rw   r   r   ry   ry   ‚   s   „ ñô.r   ry   z\s+r,   zz
        /[*] (
            (?: [^*\n] | [*][^/] )*
            [\n]
            (?: [^*] | [*][^/] )*
        ) [*]/
    z\s\s+zÅ
    (?:
        <pre class=["'][^"']*cython\s+line[^"']*["']\s*>
        (?:[^<]|<(?!/pre))+
        </pre>
    )|(?:
        <style[^>]*>
        (?:[^<]|<(?!/style))+
        </style>
    )
    c                 óX  — d x}}| j                  d«      r.t        j                  d| dd  d¬«      \  }} | j                  «       } | j                  d«      rR| dd  j                  «       } | j                  d«      r.t        j                  d| dd  d¬«      \  }} | j                  «       } ||| fS )NÚ/z(?<!\\)/r   )ÚmaxsplitÚ:)re   ÚrerB   Ústrip)ÚpatternÚstartÚends      r   Ú_parse_patternrˆ   Á   s¥   € ØÐ€EˆCØ×Ñ˜#ÔÜŸ™ +¨w°q°r¨{ÀQÔG‰ˆˆwØ—-‘-“/ˆØ×Ñ˜#ÔØ˜!˜"�+×#Ñ#Ó%ˆØ×Ñ˜cÔ"ÜŸ8™8 K°¸¸°ÀqÔI‰LˆC�Ø—m‘m“oˆGØ�#�wÐÐr   c                   óN   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Zd„ Zej                  Z
ˆ xZS )ÚTreeAssertVisitorc                 óL   •— t         ‰| �  «        d | _        g | _        g | _        y r5   )r   r   Ú_module_posÚ_c_patternsÚ_c_antipatternsr   s    €r   r   zTreeAssertVisitor.__init__Ò   s&   ø€ Ü‰ÑÔØˆÔØˆÔØ!ˆÕr   c                 óv   ‡ ‡‡‡‡‡— ‰ j                   ‰ j                  cŠŠd„ Šˆˆ fd„Šˆˆˆˆˆ fd„Šˆˆˆfd„}|S )Nc           	      óJ   — t        j                  | d|›d|rdnd›d|›�«       y )Nz	Pattern 'z' Úwaszwas notz
 found in )r   Úerror)Úposr…   ÚfoundÚ	file_paths       r   rl   z7TreeAssertVisitor.create_c_file_validator.<locals>.failÛ   s%   € Ü�L‰L™ÚÙ‘ IÑ-Ùðõ r   c                 ó  •— |rBt        j                  ||«      }|r||j                  «       d  }n ‰‰j                  |d| ¬«       |rCt        j                  ||«      }|r|d |j	                  «        }|S  ‰‰j                  |d| ¬«       |S )NF©r”   r•   )rƒ   Úsearchr‡   rŒ   r†   )r•   Úcontentr†   r‡   rB   rl   r   s        €€r   Úextract_sectionzBTreeAssertVisitor.create_c_file_validator.<locals>.extract_sectionâ   s‰   ø€ ÙÜŸ	™	 %¨Ó1�ÙØ% e§i¡i£k lÐ3‘Gá˜×)Ñ)¨5¸ÈÕSÙÜŸ	™	 # wÓ/�ÙØ% n u§{¡{£}Ð5�Gð ˆNñ ˜×)Ñ)¨3°eÀyÕQØˆNr   c                 ó>  •— ‰
D ]I  }t        |«      \  }}} ‰| |||«      }t        j                  ||«      rŒ4 ‰	‰j                  |d| ¬«       ŒK ‰D ]I  }t        |«      \  }}} ‰| |||«      }t        j                  ||«      sŒ4 ‰	‰j                  |d| ¬«       ŒK y )NFr—   T)rˆ   rƒ   r˜   rŒ   )r•   r™   r…   r†   r‡   ÚsectionÚantipatternÚantipatternsrš   rl   Úpatternsr   s          €€€€€r   Úvalidate_file_contentzHTreeAssertVisitor.create_c_file_validator.<locals>.validate_file_contentñ   sŸ   ø€ Û#�ä&4°WÓ&=Ñ#��s˜GÙ)¨)°W¸eÀSÓI�Ü—y‘y ¨'Õ2Ù˜×)Ñ)¨7¸%È9ÖUð $ó  ,�ä*8¸Ó*EÑ'��s˜KÙ)¨)°W¸eÀSÓI�Ü—9‘9˜[¨'Õ2Ù˜×)Ñ)¨;¸dÈiÖXñ  ,r   c                 ó¶   •— | j                   }‰s‰s| S t        |d¬«      5 }|j                  «       }d d d «       t        «      } ‰||«       y # 1 sw Y   ŒxY w)NÚutf8)Úencoding)Úc_fileÚopenÚreadÚ_strip_c_comments)r   r¤   Úfr™   rž   rŸ   r    s       €€€r   Úvalidate_c_filezBTreeAssertVisitor.create_c_file_validator.<locals>.validate_c_file   sO   ø€ Ø—]‘]ˆFÙ¡à�ä�f vÕ.°!ØŸ&™&›(�÷ /ä'¨Ó0ˆGÙ! &¨'Õ2÷ /Ð.ús   ¡AÁA)r�   rŽ   )r   r©   rž   rš   rl   rŸ   r    s   ` @@@@@r   Úcreate_c_file_validatorz)TreeAssertVisitor.create_c_file_validatorØ   s>   ý€ Ø!%×!1Ñ!1°4×3GÑ3GÐˆ�,ò	õ	÷	Yð 	Yö		3ð Ðr   c                 ó’  — |j                   }d|v rD|d   D ]<  }t        j                  ||«      �Œt        j                  |j
                  d|z  «       Œ> d|v rF|d   D ]>  }t        j                  ||«      }|€Œt        j                  |j
                  d|z  «       Œ@ d|v r| j                  j                  |d   «       d|v r| j                  j                  |d   «       d|v ra|d   }|�Ydd	l	m
}  |«       } ||j                  «       }||k7  r3 ||j                  «       t        j                  |j
                  d
«       y y y y )NÚtest_assert_path_existsz+Expected path '%s' not found in result treeÚtest_fail_if_path_existsz)Unexpected path '%s' found in result treeÚtest_assert_c_code_hasÚtest_fail_if_c_code_hasÚ"test_body_needs_exception_handlingr   )ÚHasNoExceptionHandlingVisitorz,Node had unexpected exception handling value)Ú
directivesr   r\   r   r’   r“   r�   ÚextendrŽ   ÚCompiler.ParseTreeTransformsr±   Úbody)	r   r"   r²   r]   Ú
first_nodeÚvaluer±   Úvisitorr   s	            r   Ú_check_directivesz#TreeAssertVisitor._check_directives  sS  € Ø—_‘_ˆ
Ø$¨
Ñ2Ø"Ð#<Ô=�Ü×&Ñ& t¨TÓ2Ñ:Ü—L‘LØŸ™ØEÈÑLõNð >ð
 &¨Ñ3Ø"Ð#=Ô>�Ü%×0Ñ0°°tÓ<�
ØÑ)Ü—L‘LØ"Ÿ™ØCÀdÑJõLð ?ð $ zÑ1Ø×Ñ×#Ñ# JÐ/GÑ$HÔIØ$¨
Ñ2Ø× Ñ ×'Ñ'¨
Ð3LÑ(MÔNØ/°:Ñ=ØÐCÑDˆEØÐ ÝWÙ7Ó9�Ù$ T§Y¡YÓ/Ð/�Ø˜F’?Ù˜DŸI™IÔ&Ü—L‘LØŸ™ØFõð #ð	 !ð >r   c                 ól   — |j                   | _        | j                  |«       | j                  |«       |S r5   )r“   rŒ   r¹   r!   ©r   r"   s     r   Úvisit_ModuleNodez"TreeAssertVisitor.visit_ModuleNode-  s/   € ØŸ8™8ˆÔØ×Ñ˜tÔ$Ø×Ñ˜4Ô Øˆr   c                 óJ   — | j                  |«       | j                  |«       |S r5   )r¹   r!   r»   s     r   Úvisit_CompilerDirectivesNodez.TreeAssertVisitor.visit_CompilerDirectivesNode3  s#   € Ø×Ñ˜tÔ$Ø×Ñ˜4Ô Øˆr   )r    r&   r'   r   rª   r¹   r¼   r¾   r   Úrecurse_to_childrenr%   r(   r)   s   @r   rŠ   rŠ   Î   s+   ø„ ô"ò3òjò@òð
 "×5Ñ5„Jr   rŠ   c                 ó   — t         j                  gt         j                  t        j                  j	                  |d«      gt         j                  t        j                  j	                  |d«      gdœ}|€t        j                  «       }g d }}t        | d«      5 }	 |D �]È  }|d d dk(  �r|j                  «       j                  d«      j                  «       j                  d«      j                  d	t        j                  j                  «      }t        j                  j	                  ||«      }	t        j                  j                  t        j                  j                  |	«      «      s2t        j                  t        j                  j                  |	«      «       |�|d }}
|
j                  «        t        |	d
«      }�Œ#|�|j!                  |«       �Œ8|j                  «       s�ŒJ|j#                  «       j%                  d«      r�Œk|j                  «       dvs�Œt'        j(                  |j                  d«      «      }|s�Œ§|d   |dd  }}	 |j+                  ||   |z   «       �ŒË 	 |�|j                  «        	 d d d «       ||fS # t,        $ r |j+                  |«       Y �Œ	w xY w# |�|j                  «        w w xY w# 1 sw Y   ||fS xY w)Nz	cython.pyzcythonize.py)ÚPYTHONÚCYTHONÚ	CYTHONIZEÚrbé   s   #####ó   #r¢   r€   Úwb)s   """s   '''r   r   )ÚsysÚ
executableÚosr]   r.   ÚtempfileÚmkdtempr¥   r„   Údecoderf   ÚsepÚexistsÚdirnameÚmakedirsÚcloserM   Úlstripre   ÚshlexrB   r   ÚKeyError)Ú	tree_fileÚworkdirÚcython_rootÚprogramsÚheaderÚcur_filer¨   rX   Úfilenamer]   Úto_closeÚcommandÚprogÚargss                 r   Úunpack_source_treerá   ;  s4  € ä—>‘>Ð"Ü—>‘>¤2§7¡7§<¡<°¸[Ó#IÐJÜ—n‘n¤b§g¡g§l¡l°;ÀÓ&OÐPñ€Hð €Ü×"Ñ"Ó$ˆØ˜4ˆH€FÜ	ˆi˜Ô	 !ð	!Ü�Ø˜˜�8˜xÓ'Ø#Ÿz™z›|×1Ñ1°$Ó7×=Ñ=Ó?×FÑFÀvÓN×VÑVÐWZÔ\^×\cÑ\c×\gÑ\gÓh�HÜŸ7™7Ÿ<™<¨°Ó:�DÜŸ7™7Ÿ>™>¬"¯'©'¯/©/¸$Ó*?Ô@ÜŸ™¤B§G¡G§O¡O°DÓ$9Ô:ØÐ+Ø-5°t (˜Ø Ÿ™Ô(Ü# D¨$Ó/’HØÐ)Ø—N‘N 4Ö(Ø—Z‘Z–\¨$¯+©+«-×*BÑ*BÀ4Ö*HØ—z‘z“|Ð+;Ó;Ü"'§+¡+¨d¯k©k¸&Ó.AÓ"B˜Ù&©à%,¨Q¡Z°¸¸°˜d˜ð3Ø"ŸM™M¨(°4©.¸Ñ*=Ö>ñ' ð. Ð#Ø—‘Õ ÷5 
ð6 �Fˆ?Ðøô  (ò 3Ø"ŸM™M¨'×2ð3ûð Ð#Ø—‘Õ ð $ú÷3 
ð6 �Fˆ?Ðús[   ÂKÂE
J)Ç&J)ÈJ)È2J)ÉJÉ%J)É)KÊJ&Ê"J)Ê%J&Ê&J)Ê)J>Ê>KËKc                 óÞ   — t        |t        «      rd}d}d}nd}d}d}|€|}|rt        j                  |«      }t	        | |||¬«      5 }|j                  |«       ddd«       y# 1 sw Y   yxY w)zœWrite some content (text or bytes) to the file
    at `file_path` without translating `'\n'` into `os.linesep`.

    The default encoding is `'utf-8'`.
    rÇ   Nr0   r+   zutf-8)Úmoder£   Únewline)r@   ÚbytesÚtextwrapÚdedentr¥   rM   )r•   r™   rç   r£   rã   rä   Údefault_encodingr¨   s           r   Ú
write_fileré   c  sw   € ô �'œ5Ô!Øˆð ˆØÑàˆð ˆØ"ÐàÐØ#ˆáÜ—/‘/ 'Ó*ˆä	ˆi˜d¨X¸wÕ	GÈ1Ø	�‰�Ô÷ 
H×	GÑ	Gús   ÁA#Á#A,c                 ó8  — t        | |||¬«       	 t        j                  j                  |«      }|�"|t        j                  j                  | «      k\  r6t        | |||¬«       |€Œ|t        j                  j                  | «      k\  rŒ5yy# t        $ r d}Y Œhw xY w)zÛ
    Write `content` to the file `file_path` without translating `'\n'`
    into `os.linesep` and make sure it is newer than the file `newer_than`.

    The default encoding is `'utf-8'` (same as for `write_file`).
    )rç   r£   N)ré   rÊ   r]   ÚgetmtimeÚOSError)r•   Ú
newer_thanr™   rç   r£   Ú
other_times         r   Úwrite_newer_filerï   �  s‹   € ô ˆy˜'¨&¸8ÕDðÜ—W‘W×%Ñ% jÓ1ˆ
ð
 Ð
 
¬b¯g©g×.>Ñ.>¸yÓ.IÒ IÜ�9˜g¨f¸xÕHð Ñ
 
¬b¯g©g×.>Ñ.>¸yÓ.IÕ Iøô	 ò àŠ
ðús   ‘B ÂBÂBc                 ó,  — t        d«      }	 t        j                  «       5 }t        | t	        |«      g¬«      }|j                  «       }ddd«       r|d   ‚S # 1 sw Y   ŒxY w# t        j                  $ r}t        |j                  «      ‚d}~ww xY w)z³
    Compiles code far enough to get errors from the parser and post-parse stage.

    Is useful for checking for syntax errors, however it doesn't generate runable
    code.
    Útestrb   Nr   )	r	   r   Úlocal_errorsr   r   Ú
substituteÚCompileErrorÚSyntaxErrorÚmessage_only)rg   ÚcontextÚerrorsr   rp   s        r   Úpy_parse_coderù   ”  sŠ   € ô ! Ó(€Gð	*Ü× Ñ Ô" fÜ! $´)¸GÓ2DÐ1EÔFˆFØ×&Ñ&Ó(ˆF÷ #ñ Ø˜‘)ˆOàˆM÷ #Ð"ûô ×Ñò *Ü˜!Ÿ.™.Ó)Ð)ûð*ús.   �A& ¡(AÁ	A& ÁA#ÁA& Á&BÁ9BÂB)FN)%rÊ   rƒ   ÚunittestrÔ   rÈ   rË   ræ   Ú	functoolsr   ÚCompilerr   r   ÚCompiler.TreeFragmentr   r   r	   ÚCompiler.Visitorr
   r   r   r´   r   r   r1   ÚTestCaser3   ry   ÚcompileÚsubr§   Ú_strip_cython_code_from_htmlrˆ   rŠ   rá   ré   rï   rù   rw   r   r   Ú<module>r     s  ðÛ 	Û 	Û Û Û 
Û Û Ý å Ý "ß XÑ Xß ;Ý Ý 3ô�[ô ò.-ôL �×"Ñ"ô L ô^�Jô ñL ˜J˜BŸJ™JØ
€B‡F�Fˆ6�2ð ó 	ó÷ �#€róÐ ñ  ' z r§z¡zØ
€B‡F�Fˆ8�Rð 
ó 
	ó(÷ �#€ró Ð ò
ôj6Ð(ô j6òZ%óPó<Ió&*r   