
    NgI7                        d dl m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 	 d dlmZ n# e$ r	 d dlmZ Y nw xY wdd	lmZ dd
lmZ ddlmZ  G d de          Z ej        d                    d                    j        Z ej        d                    d          ej                  j        Z G d de          ZdS )    )absolute_importN)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                    d                    dd                    ZddZddZd ZddZd Zd ZddZdS )AnnotationCCodeWriterzComplete cythonized codeNTFc                     t          j        | |||           || _        |t                      | _        d | _        t          t          t          t                              | _	        t          t          t          t                              | _        t          t          t          t                              | _        d S |j        | _        |j	        | _	        |j        | _        |j        | _        |j        | _        d S )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         T/var/www/html/ai-engine/env/lib/python3.11/site-packages/Cython/Compiler/Annotate.pyr   zAnnotationCCodeWriter.__init__   s    T;XXXX"4%-ZZD"&*D#*7;+E+EFFD#GK$=$=>>DI%gk3&?&?@@DKKK &1%BD"*6D#(DI%,DK&1&DD###    c                 $    t          |||          S N)r   )r   r   r   r   s       r    
create_newz AnnotationCCodeWriter.create_new1   s    $[&/JJJr!   c                 n    | j                             |           | j                            |           d S r#   )r   writer   )r   ss     r    _write_to_bufferz&AnnotationCCodeWriter._write_to_buffer4   s5    !$$Q'''''r!   c                    |jt          j        | ||           | j        rM| j        j        rA| j        |d         j                 |d                                      | j        j                   | j        rD| j        \  }}}| j        |j                 }||xx         | j	        
                                z  cc<   t                      | _	        || _        d S )Nr   r	   )r   mark_pos	funcstatescoper   filenameaddr   r   r   getvaluer   )r   postracer   line_pos_codes          r    r*   zAnnotationCCodeWriter.mark_pos8   s    ? sE222~ O$."6 OCFO,SV4889MNNN" 	@#'#: Kqy!56HTNNNd4==???NNN!)"%r!   c                     | j         |d         j                 |d                                      |d         |f           d S )Nr   r	   r   )r   r-   append)r   r0   items      r    annotatezAnnotationCCodeWriter.annotateE   s;    Q)#a&188#a&$HHHHHr!   c                 Z   | j         g}t          d          D ]7}dt          dd|dz  z   z            z  }|                    d||fz             8	 ddlm} |                     |                                d	                     n# t          $ r Y nw xY wd
                    |          S )z2css template will later allow to choose a colormap   zFFFF%02xg     o@g      ?g      $@z).cython.score-%d {background-color: #%s;}r   HtmlFormatterz.cython
)	_css_templaterangeintr6   pygments.formattersr<   get_style_defsImportErrorjoin)r   cssicolorr<   s        r    _csszAnnotationCCodeWriter._cssH   s    !"s 	Q 	QA#eaf&=">">>EJJBaZOPPPP	B999999 JJ}}55i@@AAAA  	 	 	D	 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="{0}"zg(function(s){    s.display =  s.display === 'block' ? 'none' : 'block'})(this.nextElementSibling.style)  c           
      &   t          j        |          5 }|                                }d d d            n# 1 swxY w Y   | j                            |i           }t          j        t          j                            |                    }t          j        	                    |          d         dz   }t          j        |dd          5 }	|	                    |                     |||||                     d d d            d S # 1 swxY w Y   d S )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_annotationz%AnnotationCCodeWriter.save_annotationy   s}   #O44 	6688D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	;;&rw'7'7'H'HII((99!<wF[g>>> 	q*T224Q`bnooppp	q 	q 	q 	q 	q 	q 	q 	q 	q 	q 	q 	q 	q 	q 	q 	q 	q 	qs   6::-DD
D
c                    d}|r8d                     t          j        t          |          dz                      }t	          j        d                               |                                 t          j        |rt          j
                            |          nd|          g}|r|                    d|d|d	           |S )
NrJ   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>
            )rE   	watermarkr-   	more_infoz<p>Raw output: <a href="z">z	</a></p>
)formatr   fromtimestampr@   textwrapdedentrH   r
   rd   rR   rS   rT   r6   )r   r^   rY   coverage_timestampcoverage_infooutlists         r    _save_annotation_headerz-AnnotationCCodeWriter._save_annotation_header   s     	SCJJ"05G1H1HD1PQQ K S SM O   " DIIKK73DFU!]!1!1/!B!B!B[]"/  1 1%
,  	[NNN&&&RXRXRXYZZZr!   c                     dS )N)z</body></html>
 r   s    r    _save_annotation_footerz-AnnotationCCodeWriter._save_annotation_footer   s    %%r!   c           	          |A|r?|                     dd                                          }|                     ||          }ndx}}t          | j        |                   }t          | j        |                   }	g }
|
                    |                     |||                     |
                    |                     ||||	|                     |
                    | 	                                           d
                    |
          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   rJ   )rP   strip_get_line_coveragedictr   r   extendrm   _save_annotation_bodyrq   rD   )r   r   r]   r^   rY   r[   rj   covered_linesannotation_itemsr   rl   s              r    rX   z&AnnotationCCodeWriter._save_annotation   s    ##!-!1!1+r!B!B!H!H!J!J 33L/RRMM155 0 ABBdk/233t33FOM_``aaat11$HXZ`boppqqqt3355666wwwr!   c                    d }|                     d          D ]}|                    d          s|                    d          |k    s6t          j                            |                    d                    |k    r|} n+|                    |                    d                    r|}|d S t          d |                     d          D                       S )Nz.//classr-   c              3      K   | ]H}t          |                    d                     t          |                    d                    fV  IdS )numberhitsN)r@   rP   ).0r2   s     r    	<genexpr>z;AnnotationCCodeWriter._get_line_coverage.<locals>.<genexpr>   sc       
 
 (##$$c$((6*:*:&;&;<
 
 
 
 
 
r!   z
lines/line)iterfindrP   rR   rS   abspathendswithru   )r   r[   rY   coverage_dataentrys        r    rt   z(AnnotationCCodeWriter._get_line_coverage   s    !**:66 	& 	&E99Z(( 		*%%88GOOEIIj$9$9::oMM % ))%))J*?*?@@ & % 4 
 
%..|<<
 
 
 
 
 	
r!   c                    	 ddl m} ddlm}m} ddlm} n# t          $ r t          |          cY S w xY w|dk    r |dd          }n#|dk    r |dd          }nt          |          S  ||| |d	
                    }|S )Nr   )	highlight)CythonLexerCppLexerr;   cythonF)stripnlstripallc/cppT)nowrap)	pygmentsr   pygments.lexersr   r   rA   r<   rC   html_escape)	r   r   languager   r   r   r<   lexer	html_codes	            r    _htmlify_codez#AnnotationCCodeWriter._htmlify_code   s    	%******========9999999 	% 	% 	%t$$$$$	% xK>>>EE  HUU;;;EE t$$$I%M&&&( (	 s    33c                    dg}d}t          d d                                D                       j        }|                     d            fd}	|                     |d                                          }
t          t          t          |
                              }|sd }t          |
d          D ]F\  }}	 ||         }t          ||          }|
                    |          r|t          |          d          }t          |          }n# t          $ r d}Y nw xY w |            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}|                    d                    ||||||                                |                     |r+|                    d                    |||                     H|                    d           | j        r|                    d           d}|                    |                    | j        t&          j                             |                     | j                                        d          }|                    d                    |                     |                    d           |S )Nz<div class="cython">u
   /* … */
c              3      K   | ]}|d fV  	dS )r   Nro   )r~   names     r    r   z>AnnotationCCodeWriter._save_annotation_body.<locals>.<genexpr>   s7       
 
T1I
 
 
 
 
 
r!   zGrefnanny trace py_macro_api py_c_api pyx_macro_api pyx_c_api error_gotoc                 j    | j         }|xx         dz  cc<   d|d|                     |          dS )Nr	   z<span class=''></span>)	lastgroupgroup)match
group_namecallss     r    r8   z=AnnotationCCodeWriter._save_annotation_body.<locals>.annotate   sN    J*"

EKK
33335 5r!   r   r	   rJ      py_c_apir   	pyx_c_apipy_macro_apipyx_macro_api+z&#xA0;runmisz<pre class="cython line score-{score}"{onclick}>{expandsymbol}<span class="{covered}">{line:0{lineno_width}d}</span>: {code}</pre>
)scoreexpandsymbolcoveredlineno_widthr2   r   onclickz=<pre class='cython code score-{score} {covered}'>{code}</pre>)r   r   r   z</div>z<p><div class="cython">z2<pre class='cython line'{onclick}>+ {title}</pre>
)r   titler   z%<pre class='cython code'>{code}</pre>)r   z
</div></p>)ru   splitcopyr*   r   
splitlineslenr   	enumerate_replace_pos_comment
startswithr   KeyError_parse_code_onclick_attrr6   rf   rstripr   r   COMPLETE_CODE_TITLEr   r/   )r   cython_coder]   ry   r   rx   rl   pos_comment_markernew_calls_mapr8   linesr   kr2   c_coder   r   r   r   r}   onclick_titlecomplete_code_as_htmlr   s                         @r    rw   z+AnnotationCCodeWriter._save_annotation_body   s   *+? 
 
U[[]]
 
 
 
 
  	
 	d	5 	5 	5 	5 	5 "";99DDFF3s5zz??++ 	! M ** ,	@ ,	@GAt-'* ..@&II$$%788 >#C(:$;$;$<$<=F$V,,     "MOOE 622Fz**Q{1C-CC>*+-2?-CDE  (,"'G(Q--?-?$Q'#'+6eeGNNh iohn!-#!-# io i i	    @_ffv  g  ?  ? @ @ @y!!! " 		*NN5666RMNN=//&*&8$9$M 0      %)$6$6t{7K7K7M7Mw$W$W!NNCJJPeJffgggNN=)))s   =DD D )NNTFN)Tr#   )NNN)__name__
__module____qualname__r   r   r$   r(   r*   r8   rH   rh   ri   r>   rf   replacer   ra   rm   rq   rX   rt   r   rw   ro   r!   r    r   r      sY        5E E E E(K K K( ( (& & & &I I I   $HO % 	 	M8 %++	, '#r

	 Mq q q q   @& & &       *
 
 
$  *P P P P P P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dS )AnnotationItemrJ   r   c                 >    || _         || _        || _        || _        d S r#   )styletexttagsize)r   r   r   r   r   s        r    r   zAnnotationItem.__init__K  s"    
				r!   c                 6    d| j         d| j        d| j        S )Nz<span class='cython tag z	' title='r   )r   r   r   rp   s    r    startzAnnotationItem.startQ  s$     ?Czzz4999VZV^V^__r!   c                     | j         dfS )Nr   )r   rp   s    r    endzAnnotationItem.endT  s    y*$$r!   N)rJ   r   )r   r   r   r   r   r   ro   r!   r    r   r   I  sI           ` ` `% % % % %r!   r   ) 
__future__r   rR   os.pathrerV   rh   r   	functoolsr   collectionsr   xml.sax.saxutilsr   r   r   rC   iorJ   r
   Coder   r   r   compiledecodesubr   Mr   objectr   ro   r!   r    <module>r      s   ' & & & & & 				  				               # # # # # # 2 2 2 2 2 2!!!!!!!                     Z Z Z Z ZK Z Z Zz bjB 	&//
 
   "rz188AAD  	 % % % % %V % % % % %s   ; A	A	