
    ڏDjA                     *   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mZmZ ddlm	Z	 d	 Z
d
 Zd Zd Zd Zd Zd Zd dZd Zd Zd!dZd"dZd#dZd Zd Zd Zd$dZ	 d dlmZ  e       Zd Z i Z!d Z"d!dZ#y# e$ r  G d d      ZY %w xY w)%    N)time   )Errors)
DebugFlags)Options)CompileErrorInternalError
AbortError)Namingc                 8    t        | j                                | S N)printdump)ts    \C:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\Cython/Compiler/Pipeline.pydumptreer      s    	!&&(OH    c                 J    t        j                         dk7  rt        d      | S )Nr   zpipeline break)r   get_errors_countr
   )nodes    r   abort_on_errorsr      s$     A%)**Kr   c                       fd}|S )Nc                    | j                   }| j                  }|ddf}t        j                  dc}t        _        j	                  ||d      }|t        _        j                  ||d|      }| |_        ||_        d|_        |S )Nr   r   F)posneed_pxdpxdfull_module_name)	source_descr   r   cimport_from_pyxfind_moduleparsecompilation_sourcescopeis_pxd)compsrcr   r   initial_possaved_cimport_from_pyxr$   treecontexts          r   r"   z"parse_stage_factory.<locals>.parse   s    ))"33"Aq);B;S;SUZ8 8##$4KTU#V#9 }}[%qM]}^")
r    )r*   r"   s   ` r   parse_stage_factoryr,      s     Lr   c                       fd}|S )Nc                 N    j                  | d      }|_        d|_        |S )NTr   )r"   r$   r%   )r   r)   r*   module_namer$   s     r   r"   z&parse_pxd_stage_factory.<locals>.parse(   s2    }}[%T.9  ;
r   r+   )r*   r$   r/   r"   s   ``` r   parse_pxd_stage_factoryr0   '   s     Lr   c                       fd}|S )Nc                 N    | j                         | j                  _        S r   )process_implementationr#   )module_nodeoptionsresults    r   generate_pyx_code_stagez@generate_pyx_code_stage_factory.<locals>.generate_pyx_code_stage1   s&    **7F;$/$B$B!r   r+   )r5   r6   r7   s   `` r   generate_pyx_code_stage_factoryr8   0   s     #"r   c                       fd}|S )Nc                 t    j                   j                         D ]  \  }}| j                  ||d        | S Nr   stage)utility_pxdsvaluesmerge_in)r4   statlistnoder$   r*   s      r   inject_utility_pxd_code_stagezLinject_utility_pxd_code_stage_factory.<locals>.inject_utility_pxd_code_stage9   sC    #*#7#7#>#>#@ 	CL%  uE B	Cr   r+   )r*   rB   s   ` r   %inject_utility_pxd_code_stage_factoryrC   7   s    
 )(r   c                       fd}|S )Nc                 z    j                   j                         D ]  \  }\  }}| j                  ||d        | S r;   )pxdsitemsr@   )r4   namerA   r$   r*   s       r   inject_pxd_code_stagez<inject_pxd_code_stage_factory.<locals>.inject_pxd_code_stageB   sF    +2<<+=+=+? 	C'D'<  uE B	Cr   r+   )r*   rI   s   ` r   inject_pxd_code_stage_factoryrJ   @   s     ! r   c                    |
t               }| j                  j                         D ]  }||v r|j                  |       |j                  rT|j
                  rH|j                  |j
                         |j
                  j                  D ]  }|j                  |        y|j                  st        |j                  ||        y r   )
setentriesr?   addusedutility_code_definitionuse_utility_coderequires	as_moduleuse_utility_code_definitions)r$   targetseenentryrequired_utilitys        r   rT   rT   I   s    |u%%' 
HD=::%77##E$A$AB$)$A$A$J$J : ''(89:__(&$G
Hr   c                 j    i j                   fd| D ]
  } |        t              S )Nc           	           |       }|Ud| <   t              }d| j                  r)t        | j                  D cg c]
  } |       c}      ndz   |dz  z   x}| <   |S c c}w )Nr   r   g:0yE>)lenrR   min)utilcoderankoriginal_orderdepcalculate_rankget_rankrankss       r   rb   z5sorted_utility_codes_and_deps.<locals>.calculate_rank^   s|    !<E(O ZN%&KSK\K\H4E4EFS^C(FGbd&"T)&* *D5?  Gs   A#
)key)getsorted)	utilcodesr^   rb   rc   rd   s     @@@r   sorted_utility_codes_and_depsri   Z   s>    EyyH  !x ! %X&&r   c                     | D ci c]  }|| }}| D ]5  }|j                   xs dD cg c]  }|j                  ||       c}|_         7 y c c}w c c}w )Nr+   )rR   
setdefault)rh   r^   depsra   s       r   normalize_depsrm   o   s]    .78(HX8D8 [BJBSBSBYWYZ3T__S#6Z[ 9Zs
   
AAc                       fd}|S )Nc                    | j                          t        j                  | j                         | j                  }|j                  }t        |      |d d  t        |       t               }|D ]  }||v r|j                  |       |j                  r'|j                  D ]  }||vs|j                  |        |j                  j                        x}rJ| j                  |j                         |j                  d       | j                  |j                  	       |j                  j                        x}s|j                   j                  |        | S )N)cython_scopeutilityr<   )internalise_c_class_entries)prepare_utility_coderT   rp   r$   utility_code_listri   rm   rL   rN   rR   appendget_treer@   with_compiler_directivesmerge_scopeget_shared_library_scopecimported_modules)
r4   module_scopert   addedr^   ra   r)   shared_library_scoper*   rr   s
           r   inject_utility_code_stagezDinject_utility_code_stage_factory.<locals>.inject_utility_code_stagev   sZ   ((*$W%9%9;;L;LM"(((::<=NO!() * 	LH5 IIh  #,, 6C%')0056  ((g6J6J(KKtK$$T%B%B%D%)ZZy % B''

Pk'l)1)J)JX_XlXl)J)mm%m..556JK	L r   r+   )r*   rr   r~   s   `` r   !inject_utility_code_stage_factoryr   u   s    8 %$r   c                    |dv sJ ddl m} ddlm}m}m}m} ddlm}m}	m	}
 ddlm
}m} ddlm}m}m} ddlm}m}m} dd	lm}m} dd
lm} ddlm}m} ddlm}m}m} ddlm}m}m} ddlm} ddl m!} ddl"m#}  ddl$m%}!m&}"m'}# ddl$m(}$m)}% ddl$m*}& ddl$m+}'m,}( ddl$m-}) ddl$m.}* ddl/m0}+ ddl1m2},m3}- |dk(  r|-}. ||       }/n|,}.d }/|dk(  r	 ||       }0nd }0g  ||        ||       |/ |        || | jh                         ||        |        ||       |0 ||        ||        ||        |'        |!        ||        ||        |	        |
|        ||        | |        |$|        ||        ||        ||        ||        ||        |+|       |. |&|        ||        |        ||        |#|        |"|        |%|        ||        ||        |*|        |)        |(|        ||        |       }1|r|1D 2cg c]  }2|2jj                  |vs|2 }1}2|1S c c}2w )N)pyxpyr   r   	PrintTree)WithTransformNormalizeTree	PostParsePxdPostParse)ForwardDeclareTypesInjectGilHandlingAnalyseDeclarationsTransform)AnalyseExpressionsTransformFindInvalidUseOfFusedTypes)CreateClosureClassesMarkClosureVisitorDecoratorTransform)TrackNumpyAttributesInterpretCompilerDirectivesTransformBuiltinMethods)ExpandInplaceOperatorsParallelRangeTransform) CalculateQualifiedNamesTransform)MarkParallelAssignmentsMarkOverflowingArithmetic)AdjustDefByDirectivesAlignFunctionDefinitionsAutoCpdefFunctionDefinitions)RemoveUnreachableCodeGilCheckCoerceCppTemps)ControlFlowAnalysis)AutoTestDictTransform)EmbedSignature)FlattenInListTransformSwitchTransformIterationTransform)EarlyReplaceBuiltinCallsOptimizeBuiltinCalls)InlineDefNodeCalls)ConstantFoldingFinalOptimizePhase)DropRefcountingTransform)ConsolidateOverflowCheck)IntroduceBufferAuxiliaryVars)check_c_declarationscheck_c_declarations_pxdr   r   )6Visitorr   ParseTreeTransformsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   TypeInferencer   r   r   r   r   r   r   r   FlowControlr   AnalysedTreeTransformsr   AutoDocTransformsr   Optimizer   r   r   r   r   r   r   r   r   r   Bufferr   
ModuleNoder   r   compiler_directives	__class__)3r*   modeexclude_classesr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   _check_c_declarations_specific_post_parse_align_function_definitionsstagesss3                                                      r   create_pipeliner      sJ   '''"ZZii\aaooSEQrrTT0=1UUH,=224J u} 8+G4 4#t|&>w&G#&*#
,
g,
',
 	,
 		,

 	$GW-H-HI,
 	w',
 	,
 	g&,
 	$,
 	7#,
 	%W-,
 	g&,
 	,
 	 ,
 	7#,
  	G$!,
" 	#,
$ 	%W-%,
& 	g&',
( 	w),
* 	!)+,
, 	 (-,
. 	 (/,
0 	G$1,
2 	g&3,
6 	"'*7,
8 	%W-9,
: 	;,
< 	7#=,
> 	$G,?,
@ 	#$A,
B 	w'C,
D 	7#E,
F 	 G,
H 	W%I,
J 	W%K,
L 	)1M,
N 	!)O,
P 	!"Q,
R 	7#S,
T 	wU,
V 	
W,
FZ #Jq{{/'I!JJM Ks   "H>6H>c                    |rdnd}g }g }|j                   r=ddlm}  |       }	|j                  |	       |j                  |	j	                                |j
                  r8ddlm}
 ddlm	} |
j                  |j                        | _         || ||      g}ng }t        t        j                  t!        |       gt#        | ||      |t%        |       t'        |       t)        |       t*        g|t-        ||      g|            S )	Nr   r      )TreeAssertVisitor)DebugWriterr   )DebugTransformr   )evaluate_tree_assertions	TestUtilsr   ru   create_c_file_validator	gdb_debugDebuggerr   r   r   CythonDebugWriter
output_dirgdb_debug_outputwriterlist	itertoolschainr,   r   rJ   r   rC   r   r8   )r*   r5   r6   r   r   r   test_supportctest_supportr   test_validatorr   r   debug_transforms                r   create_pyx_pipeliner      s    45DLM''1*,N+^CCEF*7)4)F)F* &)'7FCD		W	%&G)'2-g61':		
 		(&	9:  r   c                 V    ddl m} t        | ||      gt        | d      z    |       gz   S )Nr   )ExtractPxdCoder   )CodeGenerationr   r0   r   )r*   r$   r/   r   s       r   create_pxd_pipeliner     s>    .
 	 <
GU+, 	/

 
r   c                      t        | ||d      S )NT)r   )r   )r*   r5   r6   s      r   create_py_pipeliner   !  s    wDAAr   c           
      J   ddl m}m}m}m} ddlm}m} ddlm	 g }t        | | j                  ||||||g      }	ddlm  G fdd      }
|	D ]8  }|j                  |       t        ||      s!|j!                  d	 |
               n fd
}|j                  |       |S )Nr   )r   r   r   r   )r   r   )StatListNoder   VisitorTransformc                   .    e Zd Zd ZW  j                  Zy)5create_pyx_as_pxd_pipeline.<locals>.SetInPxdTransformc                 N    t        |d      rd|_        | j                  |       |S )Nin_pxdT)hasattrr   visitchildren)selfr   s     r   visit_StatNodezDcreate_pyx_as_pxd_pipeline.<locals>.SetInPxdTransform.visit_StatNode8  s&    tX&"t$Kr   N)__name__
__module____qualname__r   recurse_to_children
visit_Noder   s   r   SetInPxdTransformr   3  s    
	 &99
r   r   r[   c                    | j                   j                  j                         D ]y  }|j                  rd|_        |j
                  |j                  k(  s1|j                  dk7  sA|j                   j                  t        j                  |j
                        |_        {  | j                  g       | j                   fS )Nr   extern)stats)r$   rM   r?   in_cincludedefined_in_pxdrH   cname
visibilitymangler   func_prefixr   )rootrW   r   s     r   fake_pxdz,create_pyx_as_pxd_pipeline.<locals>.fake_pxdE  s    ZZ''..0 	UE$$'($::,1A1AX1M"'++"4"4V5G5G"TEK	U DHHB/;;r   )r   r   r   r   r   r   r   r   Nodesr   r   r5   r   r   ru   
isinstanceinsert)r*   r6   r   r   r   r   r   r   pipelinepyx_pipeliner   r=   r   r   r   s                @@r   create_pyx_as_pxd_pipeliner   $  s    H HA#H&w+C+=+:+A+88-.L *:, :  e9:OOB 1 34	
< OOHOr   c                     |s|sJ |xs |}t        |       D ]  \  }}t        ||      s n |rdz  }| d |gz   | |d z   S )z
    Insert a new transform into the pipeline after or before an instance of
    the given class. e.g.

        pipeline = insert_into_pipeline(pipeline, transform,
                                        after=AnalyseDeclarationsTransform)
    r   N)	enumerater   )r   	transformbeforeafterclsir   s          r   insert_into_pipeliner  P  sf     U
/EC(# 1a 	QBQ<9+%44r   )localc                       e Zd Zy)_threadlocalN)r   r   r   r+   r   r   r  r  k  s    r   r  c                  F    	 t         j                  S # t        $ r i cY S w xY wr   )threadlocalcython_pipeline_timingsAttributeErrorr+   r   r   get_timingsr  p  s'    222 	s      c                 l    	 t         |    S # t        $ r Y nw xY wd }| x|_        |_        |t         | <   |S )Nc                      | |      S r   r+   phasedatas     r   runz%_make_debug_phase_runner.<locals>.run      T{r   )_pipeline_entry_pointsKeyErrorr   r   )
phase_namer  s     r   _make_debug_phase_runnerr  y  sJ    %j11  '10CL3#),:&Js    	c                 "   ddl m} 	 t        j                  }d }d }|}	 	 | D ]  }||st        ||      rt        |dt        |      j                        }	t        j                  rt        d|z         t        |	      }t               }
 |||      }t               |
z
  }
	 ||	   \  }}|t        |
dz        z   |dz   f||	<   t        j                  st        d|
z          	 ||fS # t        $ r i x}t        _        Y w xY w# t        $ r d\  }}Y kw xY w# t         $ r#}t#        j$                  |d	
       |}Y d }~[d }~ww xY w# t&        $ r'}t#        j(                         dk(  r |}Y d }~||fS d }~wt*        $ r}|}Y d }~||fS d }~ww xY w)Nr   r   c                      | |      S r   r+   r  s     r   r  zrun_pipeline.<locals>.run  r  r   r   zEntering pipeline phase %r)r   r   i@B z    %.3f secondsF)	use_stackr   )r   r   r  r  r  r   getattrtyper   r   debug_verbose_pipeliner   r  r   r  intr   r   report_errorr	   r   r
   )r   source	printtreer   timingsr  errorr  r  r  r   old_tcounterrs                 r   run_pipeliner+    s   ";55 ED"	! 2= Zy%A$UJU8L8LM
446>?2:>CF5$'FQJ(#*:#6LE5 (-s1w;/?'?&K
#44,q01+2B 4=W  ;8::+5;6   (#'LE5(
  	u5E	  ""$) 4=  4=s   C) B D "D*)D D $E )DDDD DD 	E"E ;E  EE 	FE33F?F		Fr   )T)r+   )Fr+   )NN)$r   r    r   r   r   r   r	   r
   r   r   r   r,   r0   r8   rC   rJ   rT   ri   rm   r   r   r   r   r   r   r  	threadingr	  r  ImportErrorr  r  r  r  r+  r+   r   r   <module>r/     s         ; ; 

#)!H"'*[%HXt!F	
B*X50/ n  /=  s   &B   BB