
    hl4                     x   S SK r S SKr S SKrS SKrS SKrS SKJr  S SKJr  S SKJ	r	  S SK
Jr  S SKJr  SSKJr  SS	KJr  S
SKJr   " S S\5      r\R*                  " SR-                  S5      5      R.                  r\R*                  " SR-                  S5      \R2                  5      R.                  r " S S5      rg)    N)datetime)partial)defaultdict)escape)StringIO   )Version)CCodeWriter   )Utilsc                       \ rS rSrSrSS jrS rS rSS jrS r	S	 r
\R                  " S
5      rSR                  SR                  SS5      5      rSS jrSS jrS rSS jrS rS rSS jrSrg)AnnotationCCodeWriter   zComplete cythonized codeNc                    [         R                  " XX#S9  X@l        Uc}  [        5       U l        S U l        [        [        [        [        5      5      U l	        [        [        [        [        5      5      U l        [        [        [        [        5      5      U l        g UR                  U l        UR                  U l	        UR                  U l        UR                  U l        UR
                  U l        g )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         R/var/www/fran/franai/venv/lib/python3.13/site-packages/Cython/Compiler/Annotate.pyr   AnnotationCCodeWriter.__init__   s    TX"4%-ZD"&*D#*7;+EFD#GK$=>DI%gk3&?@DK &1%B%BD"*66D#((DI%,,DK&1&D&DD#    c                     [        XU5      $ N)r   )r   r   r   r   s       r    
create_new AnnotationCCodeWriter.create_new-   s    $[/JJr"   c                 p    U R                   R                  U5        U R                  R                  U5        g r$   )r   writer   )r   ss     r    _write_to_buffer&AnnotationCCodeWriter._write_to_buffer0   s(    !$$Q'r"   c                    Ub  [         R                  " XU5        U R                  (       a`  U R                  R                  (       aE  U R                  US   R
                     US      R                  U R                  R                  5        U R                  (       aL  U R                  u  p4nU R                  UR
                     nXd==   U R                  R                  5       -  ss'   [        5       U l	        Xl        g )Nr   r   )r
   mark_pos	funcstatescoper   filenameaddr   r   r   getvaluer   )r   postracer   line_pos_codes          r    r-   AnnotationCCodeWriter.mark_pos4   s    ?  E2~~$.."6"6CFOO,SV4889M9MN""#'#:#: Kqyy!5!56HNd44==??N!)"%r"   c                 p    U R                   US   R                     US      R                  US   U45        g )Nr   r   r   )r   r0   append)r   r3   items      r    annotateAnnotationCCodeWriter.annotateA   s4    Q)#a&188#a&$Hr"   c                 6   U R                   /n[        S5       H1  n[        SSUS-  -   -  5      nUR                  SUS SUS S	35        M3      S
SKJn  UR                  U" 5       R                  S5      5        SR                  U5      $ ! [         a     Nf = f)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intr:   pygments.formattersrC   get_style_defsImportErrorjoin)r   cssicolor_shaderC   s        r    _cssAnnotationCCodeWriter._cssD   s    !!"sAeaf56KJJ!u,F{SVFWWZ[\ 	B9 JJ}55i@Ayy~	  		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="{}"zg(function(s){    s.display =  s.display === 'block' ? 'none' : 'block'})(this.nextElementSibling.style)  c           
         [         R                  " U5       nUR                  5       nS S S 5        U R                  R	                  U0 5      n[         R
                  " [        R                  R                  U5      5      n[        R                  R                  U5      S   S-   n[        R                  " USSS9 n	U	R                  U R                  WXgX5      5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr   z.htmlwzUTF-8)encoding)r   open_source_filereadr   getdecode_filenameospathbasenamesplitextcodecsopenr(   _save_annotation)
r   source_filenametarget_filenamecoverage_xmlfr   generated_codec_filehtml_filename
out_buffers
             r    save_annotation%AnnotationCCodeWriter.save_annotationu   s    ##O4668D 5;&&rww'7'7'HI((9!<wF[[g>*T224Q`op ?> 54 ?>s   C&:#C7&
C47
Dc                    SnU(       a/  SR                  [        R                  " [        U5      S-  5      S9n[        R
                  " S5      R                  U R                  5       [        R                  U(       a  [        R                  R                  U5      OSUS9/nU(       a  UR                  SU< SU< S	35        U$ )
NrR   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>
            )rL   	watermarkr0   	more_infoz<p>Raw output: <a href="">z	</a></p>
)formatr   fromtimestamprG   textwrapdedentrO   r	   rm   rZ   r[   r\   r:   )r   rf   ra   coverage_timestampcoverage_infooutlists         r    _save_annotation_header-AnnotationCCodeWriter._save_annotation_header   s    BII"005G1HD1PQ J SM OO  " DIIK73D3DFU!1!1/!B[]"/  1%
, NNQWXYr"   c                     g)N)z</body></html>
 r   s    r    _save_annotation_footer-AnnotationCCodeWriter._save_annotation_footer   s    $r"   c           	         Ub9  U(       a2  UR                  SS5      R                  5       nU R                  XT5      nOS=pg[        U R                  U   5      n[        U R
                  U   5      n	/ n
U
R                  U R                  X4U5      5        U
R                  U R                  XXU5      5        U
R                  U R                  5       5        SR                  U
5      $ )z
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
Nrl   rR   )rX   strip_get_line_coveragedictr   r   extendrw   _save_annotation_bodyr|   rK   )r   r   re   rf   ra   rc   rt   covered_linesannotation_itemsr   rv   s              r    r`   &AnnotationCCodeWriter._save_annotation   s     #!-!1!1+r!B!H!H!J 33LRM155 0 0 ABdkk/23t33FM_`at11$HXbopqt3356wwwr"   c           	         S nUR                  S5       H  nUR                  S5      (       d  M  UR                  S5      U:X  d2  [        R                  R	                  UR                  S5      5      U:X  a  Un  O-UR                  UR                  S5      5      (       d  M  UnM     Uc  g UR                  S5       Vs0 s H6  n[        UR                  S5      5      [        UR                  S5      5      _M8     sn$ s  snf )Nz.//classr0   z
lines/linenumberhits)iterfindrX   rZ   r[   abspathendswithrG   )r   rc   ra   coverage_dataentryr5   s         r    r   (AnnotationCCodeWriter._get_line_coverage   s    !**:6E99Z((		*%8GGOOEIIj$9:oM % ))%))J*?@@ % 7   &..|<
< "#S&)9%::<
 	
 
s   >=C>c                      SSK Jn  SSKJnJn  SSKJn  US:X  a  U" SSS9nOUS:X  a  U" SSS9nO[        U5      $ U" XU" S	S
95      nU$ ! [         a    [        U5      s $ f = f)Nr   )	highlight)CythonLexerCppLexerrB   cythonF)stripnlstripallc/cppT)nowrap)	pygmentsr   pygments.lexersr   r   rH   rC   rJ   html_escape)	r   r   languager   r   r   rC   lexer	html_codes	            r    _htmlify_code#AnnotationCCodeWriter._htmlify_code   s    	%*=9
 x>E UU;E t$$&(	   	%t$$	%s   A A$#A$c                 |  ^ S/nSnSR                  5        Vs0 s H  oS_M     snR                  n	U R                  S 5        U4S jn
U R                  US5      R	                  5       n[        [        [        U5      5      5      nU(       d  S n[        US5       GH  u  p X-   n[        X5      nUR                  U5      (       a  U[        U5      S  n[        U5      nU	" 5       m[        X5      nS	TS
   -  STS   -  -   TS   -   TS   -   nU(       a  U R                  nSnOSnSnSnUb  X;   a  X]   nUb  U(       a  SOSnUR                  SU SU SU SU SUSU S3 SUR                  5        S35        U(       d  M  UR                  SU SU SU S35        GM     UR                  S 5        U R                   (       a]  U R                  U R"                  R%                  5       S!5      nUR                  S"U R                   S#[&        R(                   S$U S%35        U$ s  snf ! [         a    Sn GNZf = f)&Nz<div class="cython">u
   /* … */
zGrefnanny trace py_macro_api py_c_api pyx_macro_api pyx_c_api error_gotor   c                 f   > U R                   nTU==   S-  ss'   SU SU R                  U5       S3$ )Nr   z<span class=''></span>)	lastgroupgroup)match
group_namecallss     r    r<   =AnnotationCCodeWriter._save_annotation_body.<locals>.annotate   s;    J*"":,bZ1H0IQQr"   r   r   rR      py_c_apir   	pyx_c_apipy_macro_apipyx_macro_api+z&#xA0;runmisz<pre class="cython line score-">z<span class="ro   0r@   z	</span>: z</pre>
z<pre class='cython code score-rQ   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_attrr:   rstripr   r   r2   r   COMPLETE_CODE_TITLE)r   cython_codere   r   r   r   rv   pos_comment_markernamenew_calls_mapr<   lineslineno_widthkr5   c_codescoreonclickexpandsymbolcoveredr   complete_code_as_htmlr   s                         @r    r   +AnnotationCCodeWriter._save_annotation_body   s   )*> V[[]
] !G]
 $ 	
 	d	R
 "";9DDF3s5z?+ M *GA-'* ..@I$$%788#C(:$;$<=F$V,!OE 2Fz**Q{1C-CC>*+-2?-CDE ,,"'G(Q-?$'#'+eGNN0q	  .gYb1\N!:K8LIVZVaVaVcUddln v!?wayPRSYRZZ`abI +J 	x  ""$($6$6t{{7K7K7Mw$W!NN++/+=+=*>cBWBkBkAl m,,A+B C E
(  s   H&"H++H;:H;)r   r   r   r   r   r   )NNTFN)Tr$   )NNN)__name__
__module____qualname____firstlineno__r   r   r%   r*   r-   r<   rO   rr   rs   rE   rp   replacer   ri   rw   r|   r`   r   r   r   __static_attributes__rz   r"   r    r   r      s     5E(K(&I OO % 	M8 $**	, '#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                   *    \ rS rSrSS jrS rS rSrg)AnnotationItemi:  c                 4    Xl         X l        X0l        X@l        g r$   )styletexttagsize)r   r   r   r   r   s        r    r   AnnotationItem.__init__<  s    
		r"   c                 Z    SU R                   < SU R                  < SU R                  < 3$ )Nz<span class='cython tag z	' title='r   )r   r   r   r{   s    r    startAnnotationItem.startB  s    >Bjj$))UYU]U]^^r"   c                     U R                   S4$ )Nr   )r   r{   s    r    endAnnotationItem.endE  s    yy)##r"   )r   r   r   r   N)rR   r   )r   r   r   r   r   r   r   r   rz   r"   r    r   r   :  s    _$r"   r   )rZ   os.pathrer^   rr   r   	functoolsr   collectionsr   xml.sax.saxutilsr   r   ior   rR   r	   Coder
   r   r   compiledecodesubr   Mr   r   rz   r"   r    <module>r      s    
  	     # 2    OK Od jjB 	&/
 3  zz188ADD #	 $ $r"   