
    ڏDj?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         \C:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\Cython/Compiler/Annotate.pyr   z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                     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    ?  sE2~~$.."6"6CFOO,SV4889M9MN""#'#:#: Kqyy!5!56HTNd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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="{}"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 	668D	;&&rww'7'7'HI((9!<wF-w7 	q:T224Q`bnop	q 	q	 		q 	q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5G1HD1PQ J SM OO  " DIIK73D3DFU!1!1/!B[]"/  1%
, NN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3L/RM155 0 0 ABdkk/23t33FOM_`at11$HXZ`bopqt3356www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99Z(		*%8GGOOEIIj$9:oM % ))%))J*?@ %	&   &..|<
 "#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 UU;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Z1H0I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3s5z?+ M * $	cGAt-'* ..@&I$$%78#C(:$;$<=F$V,!OE 62Fz**Q{1C-CC>*+-2?-CDE ,,"'G(Q--?$Q'#'+eGNN0q	  .gYb1\N!:K8LIVZVaVaVcUddln !?wayPRSYRZZ`abI$	cJ 	x  ""$($6$6t{{7K7K7Mw$W!NN++/+=+=*>cBWBkBkAl 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 $HOO % 	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                        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    >Bjj$))UYU]U]^^r    c                     | j                   dfS )Nr   )r   rq   s    r   endzAnnotationItem.endG  s    yy)##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 bjjB 	&/
 3  "rzz188ADD #	 $ $r    