Ë
    Æ[;j?6  ã                   óp  — 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 d dlmZ ddlmZ dd	lmZ d
dlmZ  G d„ de«      Z ej(                  dj+                  d«      «      j,                  Z ej(                  dj+                  d«      ej0                  «      j,                  Z G d„ d«      Zy)é    N)Údatetime)Úpartial)Údefaultdict)Úescape)ÚStringIOé   )ÚVersion)ÚCCodeWriteré   )ÚUtilsc                   óÐ   — e Zd ZdZdd„Zd„ Zd„ Zdd„Zd„ Zd„ Z	 e
j                  d	«      Zd
j                  dj                  dd«      «      Zdd„Zdd„Zd„ Zdd„Zd„ Zd„ Zdd„Zy)ÚAnnotationCCodeWriterzComplete cythonized codeNc                 óì  — t        j                  | |||¬«       || _        |€}t        «       | _        d | _        t        t        t        t        «      «      | _	        t        t        t        t        «      «      | _        t        t        t        t        «      «      | _        y |j                  | _        |j                  | _	        |j                  | _        |j                  | _        |j
                  | _        y )N)Úcopy_formatting)r
   Ú__init__Úshow_entire_c_coder   Úannotation_bufferÚlast_annotated_posr   r   ÚlistÚannotationsÚstrÚcodeÚsetÚscopes)ÚselfÚcreate_fromÚbufferr   r   Úsource_descs         úaG:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\Cython/Compiler/Annotate.pyr   zAnnotationCCodeWriter.__init__   s¶   € Ü×Ñ˜T ;°ÈÕXØ"4ˆÔØÐÜ%-£ZˆDÔ"Ø&*ˆDÔ#ä*¬7´;ÄÓ+EÓFˆDÔä#¤G¬K¼Ó$=Ó>ˆDŒIä%¤g¬k¼3Ó&?Ó@ˆD�Kð &1×%BÑ%BˆDÔ"Ø*×6Ñ6ˆDÔØ#×(Ñ(ˆDŒIØ%×,Ñ,ˆDŒKØ&1×&DÑ&DˆDÕ#ó    c                 ó   — t        |||«      S ©N)r   )r   r   r   r   s       r   Ú
create_newz AnnotationCCodeWriter.create_new,   s   € Ü$ [°&¸/ÓJÐJr    c                 óp   — | j                   j                  |«       | j                  j                  |«       y r"   )r   Úwriter   )r   Úss     r   Ú_write_to_bufferz&AnnotationCCodeWriter._write_to_buffer/   s(   € Ø�‰×Ñ˜!ÔØ×Ñ×$Ñ$ QÕ'r    c                 óä  — |�~t        j                  | ||«       | j                  r[| j                  j                  rE| j                  |d   j
                     |d      j                  | j                  j                  «       | j                  rN| j                  \  }}}| j                  |j
                     }||xx   | j                  j                  «       z  cc<   t        «       | _	        || _        y )Nr   r   )r
   Úmark_posÚ	funcstateÚscoper   ÚfilenameÚaddr   r   r   Úgetvaluer   )r   ÚposÚtracer   ÚlineÚ_Úpos_codes          r   r)   zAnnotationCCodeWriter.mark_pos3   s¼   € Øˆ?Ü× Ñ   s¨EÔ2Ø�~Š~ $§.¡.×"6Ò"6à—‘˜C ™FŸO™OÑ,¨S°©VÑ4×8Ñ8¸¿¹×9MÑ9MÔNØ×"Ò"Ø#'×#:Ñ#:Ñ ˆK˜˜qØ—y‘y ×!5Ñ!5Ñ6ˆHØ�T‹N˜d×4Ñ4×=Ñ=Ó?Ñ?‹NÜ!)£ˆÔØ"%ˆÕr    c                 óp   — | j                   |d   j                     |d      j                  |d   |f«       y )Nr   r   r   )r   r,   Úappend)r   r/   Úitems      r   ÚannotatezAnnotationCCodeWriter.annotate@   s4   € Ø×Ñ˜˜Q™Ÿ™Ñ)¨#¨a©&Ñ1×8Ñ8¸#¸a¹&À$¸ÕHr    c                 ó0  — | j                   g}t        d«      D ]0  }t        dd|dz  z   z  «      }|j                  d|d›d|d›d	�«       Œ2 	 d
dlm} |j                   |«       j                  d«      «       dj                  |«      S # t        $ r Y Œw xY w)z2css template will later allow to choose a colormapéÿ   g     ào@g      ð?g      $@z.cython.score-Údz {background-color: #FFFFÚ02xz;}r   ©ÚHtmlFormatterz.cythonÚ
)	Ú_css_templateÚrangeÚintr5   Úpygments.formattersr=   Úget_style_defsÚImportErrorÚjoin)r   ÚcssÚiÚcolor_shader=   s        r   Ú_csszAnnotationCCodeWriter._cssC   sž   € à×!Ñ!Ð"ˆÜ�s–ˆAÜ˜e¨¨a°©f©Ñ5Ó6ˆKØ�J‰J˜¨¨! uÐ,FÀ{ÐSVÐFWÐWZÐ[Õ\ð ð	BÝ9ð �J‰J‘}“×5Ñ5°iÓ@ÔAØ�y‰y˜‹~Ðøô	 ò 	Ùð	ús   ÁB	 Â		BÂBa¥  
        body.cython { font-family: courier; font-size: 12; }

        .cython.tag  {  }
        .cython.line { color: #000000; margin: 0em }
        .cython.code { font-size: 9; color: #444444; display: none; margin: 0px 0px 0px 8px; border-left: 8px none; }

        .cython.line .run { background-color: #B0FFB0; }
        .cython.line .mis { background-color: #FFB0B0; }
        .cython.code.run  { border-left: 8px solid #B0FFB0; }
        .cython.code.mis  { border-left: 8px solid #FFB0B0; }

        .cython.code .py_c_api  { color: red; }
        .cython.code .py_macro_api  { color: #FF7000; }
        .cython.code .pyx_c_api  { color: #FF3000; }
        .cython.code .pyx_macro_api  { color: #FF7000; }
        .cython.code .refnanny  { color: #FFA000; }
        .cython.code .trace  { color: #FFA000; }
        .cython.code .error_goto  { color: #FFA000; }

        .cython.code .coerce  { color: #008000; border: 1px dotted #008000 }
        .cython.code .py_attr { color: #FF0000; font-weight: bold; }
        .cython.code .c_attr  { color: #0000FF; }
        .cython.code .py_call { color: #FF0000; font-weight: bold; }
        .cython.code .c_call  { color: #0000FF; }
    z onclick="{}"u§   (function(f, s, c) {    c = f.nodeValue == '+';    s.display = c ? 'block' : 'none';    f.nodeValue = c ? 'âˆ’' : '+'})(this.firstChild, this.nextElementSibling.style)Ú Ú c           
      óì  — t        j                  |«      5 }|j                  «       }d d d «       | j                  j	                  |i «      }t        j
                  t        j                  j                  |«      «      }t        j                  j                  |«      d   dz   }t        |dd¬«      5 }	|	j                  | j                  ||||«      «       d d d «       y # 1 sw Y   Œ¸xY w# 1 sw Y   y xY w)Nr   z.htmlÚwzUTF-8)Úencoding)r   Úopen_source_fileÚreadr   ÚgetÚdecode_filenameÚosÚpathÚbasenameÚsplitextÚopenr%   Ú_save_annotation)
r   Úsource_filenameÚtarget_filenameÚcoverage_xmlÚfr   Úgenerated_codeÚc_fileÚhtml_filenameÚ
out_buffers
             r   Úsave_annotationz%AnnotationCCodeWriter.save_annotationw   s¾   € Ü×#Ñ# OÔ4¸Ø—6‘6“8ˆD÷ 5àŸ™Ÿ™ ¸Ó;ˆÜ×&Ñ&¤r§w¡w×'7Ñ'7¸Ó'HÓIˆÜŸ™×(Ñ(¨Ó9¸!Ñ<¸wÑFˆä�- ¨wÕ7¸:Ø×Ñ˜T×2Ñ2°4¸ÈÐQ`ÐbnÓoÔp÷ 8Ð7÷ 5Ð4ú÷ 8Ð7ús   –CÂ0%C*ÃC'Ã*C3c                 óp  — d}|r1dj                  t        j                  t        |«      dz  «      ¬«      }t	        j
                  d«      j                  | j                  «       t        j                  |rt        j                  j                  |«      nd|¬«      g}|r|j                  d|›d|›d	�«       |S )
NrK   z$ with coverage data from {timestamp}iè  )Ú	timestampa              <!DOCTYPE html>
            <!-- Generated by Cython {watermark} -->
            <html>
            <head>
                <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                <title>Cython: {filename}</title>
                <style type="text/css">
                {css}
                </style>
            </head>
            <body class="cython">
            <p><span style="border-bottom: solid 1px grey;">Generated by Cython {watermark}</span>{more_info}</p>
            <p>
                <span style="background-color: #FFFF00">Yellow lines</span> hint at Python interaction.<br />
                Click on a line that starts with a "<code>+</code>" to see the C code that Cython generated for it.
            </p>
            )rF   Ú	watermarkr,   Ú	more_infoz<p>Raw output: <a href="ú">z	</a></p>
)Úformatr   ÚfromtimestamprA   ÚtextwrapÚdedentrI   r	   rd   rS   rT   rU   r5   )r   r^   rY   Úcoverage_timestampÚcoverage_infoÚoutlists         r   Ú_save_annotation_headerz-AnnotationCCodeWriter._save_annotation_header�   s«   € ØˆÙØB×IÑIÜ"×0Ñ0´Ð5GÓ1HÈDÑ1PÓQð Jó SˆMô �O‰Oð ó ÷" ‘˜DŸI™I›K´7×3DÑ3DÙFU¤§¡×!1Ñ!1°/Ô!BÐ[]Ø"/ð ó 1ð%
ˆñ, Ø�NŠNÊÒQWÐXÔYØˆr    c                  ó   — y)N)z</body></html>
© ©r   s    r   Ú_save_annotation_footerz-AnnotationCCodeWriter._save_annotation_footer¡   s   € Ø$r    c           	      óÈ  — |�5|r3|j                  dd«      j                  «       }| j                  ||«      }ndx}}t        | j                  |   «      }t        | j
                  |   «      }	g }
|
j                  | j                  |||«      «       |
j                  | j                  ||||	|«      «       |
j                  | j                  «       «       dj                  |
«      S )a#  
        lines : original cython source code split by lines
        generated_code : generated c code keyed by line number in original file
        target filename : name of the file in which to store the generated html
        c_file : filename in which the c_code has been written
        Nrc   rK   )rQ   ÚstripÚ_get_line_coverageÚdictr   r   Úextendrn   Ú_save_annotation_bodyrr   rE   )r   r   r]   r^   rY   r[   rk   Úcovered_linesÚannotation_itemsr   rm   s              r   rX   z&AnnotationCCodeWriter._save_annotation¤   sÕ   € ð Ð#©Ø!-×!1Ñ!1°+¸rÓ!B×!HÑ!HÓ!JÐØ ×3Ñ3°LÀ/ÓR‰Mà15Ð5Ð Ü × 0Ñ 0°Ñ AÓBÐÜ�d—k‘k /Ñ2Ó3ˆàˆØ�‰�t×3Ñ3°F¸OÐM_Ó`ÔaØ�‰�t×1Ñ1°$¸ÐHXÐZ`ÐboÓpÔqØ�‰�t×3Ñ3Ó5Ô6Ø�w‰w�wÓÐr    c           	      óÞ  — d }|j                  d«      D ]€  }|j                  d«      sŒ|j                  d«      |k(  s1t        j                  j	                  |j                  d«      «      |k(  r|} n%|j                  |j                  d«      «      sŒ|}Œ‚ |€y |j                  d«      D �ci c]5  }t        |j                  d«      «      t        |j                  d«      «      “Œ7 c}S c c}w )Nz.//classr,   z
lines/lineÚnumberÚhits)ÚiterfindrQ   rS   rT   ÚabspathÚendswithrA   )r   r[   rY   Úcoverage_dataÚentryr1   s         r   ru   z(AnnotationCCodeWriter._get_line_coverage¹   sÜ   € ØˆØ!×*Ñ*¨:Ö6ˆEØ—9‘9˜ZÔ(ØØ—	‘	˜*Ó%¨Ò8Ü—G‘G—O‘O E§I¡I¨jÓ$9Ó:¸oÒMØ %�ÙØ ×)Ñ)¨%¯)©)°JÓ*?Õ@Ø %‘ð 7ð Ð Øð &×.Ñ.¨|Ô<ó
á<�ô �—‘˜Ó"Ó#¤S¨¯©°&Ó)9Ó%:Ñ:Ø<ñ
ð 	
ùò 
s   Â-:C*c                 óÜ   — 	 ddl m} ddlm}m} ddlm} |dk(  r |dd¬«      }n|dk(  r |dd¬«      }nt        |«      S  ||| |d	¬
«      «      }|S # t        $ r t        |«      cY S w xY w)Nr   )Ú	highlight)ÚCythonLexerÚCppLexerr<   ÚcythonF)ÚstripnlÚstripallúc/cppT)Únowrap)	Úpygmentsr„   Úpygments.lexersr…   r†   rB   r=   rD   Úhtml_escape)	r   r   Úlanguager„   r…   r†   r=   ÚlexerÚ	html_codes	            r   Ú_htmlify_codez#AnnotationCCodeWriter._htmlify_codeË   s‚   € ð	%Ý*ß=Ý9ð
 �xÒÙ¨¸Ô>‰EØ˜Ò Ù U°UÔ;‰Eô ˜tÓ$Ð$ÙØ�%Ù Ô&ó(ˆ	ð Ðøô ò 	%ä˜tÓ$Ò$ð	%ús   ‚A ÁA+Á*A+c                 ó2  ‡— dg}d}dj                  «       D �ci c]  }|d“Œ c}j                  }	| j                  d «       ˆfd„}
| j                  |d«      j	                  «       }t        t        t        |«      «      «      }|sd }t        |d«      D ]ð  \  }}	 ||   }t        ||«      }|j                  |«      r|t        |«      d  }t        |«      } |	«       Št        |
|«      }d	‰d
   z  d‰d   z  z   ‰d   z   ‰d   z   }|r| j                  }d}nd}d}d}|�||v r||   }|�|rdnd}|j                  d|› d|› d|› d|› d|d|› d�›d|j                  «       › d�«       |sŒÖ|j                  d|› d|› d|› d�«       Œò |j                  d «       | j                   r]| j                  | j"                  j%                  «       d!«      }|j                  d"| j                  › d#t&        j(                  › d$|› d%�«       |S c c}w # t        $ r d}Y �Œ@w xY w)&Nz<div class="cython">u
   /* â€¦ */
zGrefnanny trace py_macro_api py_c_api pyx_macro_api pyx_c_api error_gotor   c                 óf   •— | j                   }‰|xx   dz  cc<   d|› d| j                  |«      › d�S )Nr   z<span class='ú'>ú</span>)Ú	lastgroupÚgroup)ÚmatchÚ
group_nameÚcallss     €r   r7   z=AnnotationCCodeWriter._save_annotation_body.<locals>.annotateê   s;   ø€ ØŸ™ˆJØ�*Ó Ñ"ÓØ" : ,¨b°·±¸ZÓ1HÐ0IÈÐQÐQr    r‡   r   rK   é   Úpy_c_apir   Ú	pyx_c_apiÚpy_macro_apiÚpyx_macro_apiÚ+z&#xA0;ÚrunÚmisz<pre class="cython line score-Ú"Ú>z<span class="rf   Ú0r:   z	</span>: z</pre>
z<pre class='cython code score-rJ   r•   z</pre>z</div>rŠ   z/<p><div class="cython"><pre class='cython line'z>+ z </pre>
<pre class='cython code'>z</pre></div></p>)ÚsplitÚcopyr)   r’   Ú
splitlinesÚlenr   Ú	enumerateÚ_replace_pos_commentÚ
startswithrŽ   ÚKeyErrorÚ_parse_codeÚ_onclick_attrr5   Úrstripr   r   r.   r   ÚCOMPLETE_CODE_TITLE)r   Úcython_coder]   rz   r   ry   rm   Úpos_comment_markerÚnameÚnew_calls_mapr7   ÚlinesÚlineno_widthÚkr1   Úc_codeÚscoreÚonclickÚexpandsymbolÚcoveredr}   Úcomplete_code_as_htmlr›   s                         @r   rx   z+AnnotationCCodeWriter._save_annotation_bodyà   s§  ø€ Ø)Ð*ˆØ>Ðð V×[Ñ[Ô]ó
á]ð ˆD�!‰GØ]ñ
÷ ‰$ð 	ð
 	�‰�dÔô	Rð
 ×"Ñ" ;°Ó9×DÑDÓFˆÜœ3œs 5›z›?Ó+ˆÙØ ˆMä  ¨Ö*‰GˆAˆtð-Ø'¨Ñ*�ô .Ð.@À&ÓI�Ø×$Ñ$Ð%7Ô8Ø#¤CÐ(:Ó$;Ð$<Ð=�FÜ$ VÓ,�á!“OˆEÜ  ¨6Ó2ˆFØ˜˜zÑ*Ñ*¨Q°°{Ñ1CÑ-CÑCØ˜>Ñ*ñ+Ø-2°?Ñ-CñDˆEñ Ø×,Ñ,�Ø"‘à�Ø'�àˆGØÐ(¨Q°-Ñ-?Ø$ QÑ'�ØÐ#Ù'+™e°�Gà�N‰NØ0°°°q¸¸	Àð  �. ¨g¨Y°b¸¸1¸\¸NÈ!Ð:KÐ8LÈIÐVZ×VaÑVaÓVcÐUdÐdlðnôò Ø—‘Ð!?À¸wÀaÈÀyÐPRÐSYÐRZÐZ`ÐaÕbðI +ðJ 	�‰�xÔ ð ×"Ò"Ø$(×$6Ñ$6°t·{±{×7KÑ7KÓ7MÈwÓ$WÐ!Ø�N‰Nð+Ø+/×+=Ñ+=Ð*>¸cÔBW×BkÑBkÐAlð m,Ø,AÐ+Bð Cðôð ˆùòE
øô( ò Ø“ðús   ™
HÂHÈHÈH)NNTFN)Tr"   )NNN)Ú__name__Ú
__module__Ú__qualname__r²   r   r#   r'   r)   r7   rI   ri   rj   r?   rg   Úreplacer°   ra   rn   rr   rX   ru   r’   rx   rp   r    r   r   r      s�   „ ð 5ÐóEò(Kò(ó&òIòð $�H—O‘Oð %ó 	€Mð8 $×*Ñ*ð	=÷
 ‰'�#�rÓ
ó€Móqóò@%ó ò*
ò$ô*Er    r   sm  (?P<refnanny>__Pyx_X?(?:GOT|GIVE)REF|__Pyx_RefNanny[A-Za-z]+)|(?P<trace>__Pyx_Trace[A-Za-z]+)|(?:(?P<pyx_macro_api>__Pyx_[A-Z][A-Z_]+)|(?P<pyx_c_api>(?:__Pyx_[A-Z][a-z_][A-Za-z_]*)|__pyx_convert_[A-Za-z_]*)|(?P<py_macro_api>Py[A-Z][a-z]+_[A-Z][A-Z_]+)|(?P<py_c_api>Py[A-Z][a-z]+_[A-Z][a-z][A-Za-z_]*))(?=\()|(?P<error_goto>(?:(?<=;) *if [^;]* +)?__PYX_ERR\([^)]+\))Úasciis)   ^\s*/\*(?:(?:[^*]|\*[^/])*\n)+\s*\*/\s*\nc                   ó    — e Zd Zdd„Zd„ Zd„ Zy)ÚAnnotationItemc                 ó<   — || _         || _        || _        || _        y r"   )ÚstyleÚtextÚtagÚsize)r   rÈ   rÉ   rÊ   rË   s        r   r   zAnnotationItem.__init__>  s   € ØˆŒ
ØˆŒ	ØˆŒØˆ�	r    c                 óT   — d| j                   ›d| j                  ›d| j                  ›�S )Nz<span class='cython tag z	' title='r•   )rÈ   rÉ   rÊ   rq   s    r   ÚstartzAnnotationItem.startD  s   � Ø>B¿j»jÈ$Ï)Ë)ÐUY×U]ÒU]Ð^Ð^r    c                 ó   — | j                   dfS )Nr–   )rË   rq   s    r   ÚendzAnnotationItem.endG  s   € Ø�y‰y˜)Ð#Ð#r    N)rK   r   )rÀ   rÁ   rÂ   r   rÍ   rÏ   rp   r    r   rÆ   rÆ   <  s   „ óò_ó$r    rÆ   )rS   Úos.pathÚreri   r   Ú	functoolsr   Úcollectionsr   Úxml.sax.saxutilsr   rŽ   Úior   rK   r	   ÚCoder
   r   r   ÚcompileÚdecodeÚsubr¯   ÚMr¬   rÆ   rp   r    r   Ú<module>rÛ      s¢   ðó 
Û Û 	Û Ý Ý Ý #Ý 2Ý å Ý Ý ôR˜Kô Rðj ˆb�j‰jðB÷ 	�&ˆƒ/ó
÷ ‘3ð ð "�r—z‘zà1×8Ñ8¸ÓAØ‡D�Dó÷ �#ð	 ÷$ò $r    