
    -Phf?                     :   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 n# e$ r  G d d          ZY nw xY w e            Zd  Z i Z!d! Z"d$d"Z#dS )(    N)time   )Errors)
DebugFlags)Options)CompileErrorInternalError
AbortError)Namingc                 H    t          |                                            | S N)printdump)ts    X/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/Cython/Compiler/Pipeline.pydumptreer      s    	!&&((OOOH    c                 R    t          j                    dk    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          _                            ||d          }|t          _                            ||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"Aq);B;SUZ8 8##$4KTU#VV#9 }}[%qM]}^^")
r    )r*   r"   s   ` r   parse_stage_factoryr,      s#         Lr   c                       fd}|S )Nc                 V                         | d          }|_        d|_        |S )NTr   )r"   r$   r%   )r   r)   r*   module_namer$   s     r   r"   z&parse_pxd_stage_factory.<locals>.parse(   s7    }}[%T.9  ; ;
r   r+   )r*   r$   r/   r"   s   ``` r   parse_pxd_stage_factoryr0   '   s/           Lr   c                       fd}|S )Nc                 L    |                                 | 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!r   r+   )r5   r6   r7   s   `` r   generate_pyx_code_stage_factoryr8   0   s*          #"r   c                       fd}|S )Nc                 v    j                                         D ]\  }}|                     ||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   sL    #*#7#>#>#@#@ 	C 	CL%  uE BBBBr   r+   )r*   rB   s   ` r   %inject_utility_pxd_code_stage_factoryrC   7   s$        
 )(r   c                       fd}|S )Nc                 |    j                                         D ] \  }\  }}|                     ||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   sP    +2<+=+=+?+? 	C 	C'D'<  uE BBBBr   r+   )r*   rI   s   ` r   inject_pxd_code_stage_factoryrJ   @   s$         ! r   c                 f   |t                      }| j                                        D ]}||v r|                    |           |j        rF|j        r?|                    |j                   |j        j        D ]}|                    |           i|j        rt          |j        ||           d S 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    |uu%%'' 
H 
HD==: 	H%7 	H##E$ABBB$)$A$J : : ''(89999:_ 	H(&$GGG
H 
Hr   c                 j    i j         fd| D ]} |           t                    S )Nc                      |           }|Kd| <   t                    }d| j        r t          fd| j        D                       ndz   |dz  z   x}| <   |S )Nr   r   c                 &    g | ]} |          S r+   r+   ).0depcalculate_ranks     r   
<listcomp>zIsorted_utility_codes_and_deps.<locals>.calculate_rank.<locals>.<listcomp>d   s#    FFFS^^C((FFFr   g:0yE>)lenrR   min)utilcoderankoriginal_orderr^   get_rankrankss      r   r^   z5sorted_utility_codes_and_deps.<locals>.calculate_rank^   s    x!!<E(O ZZN%&KSK\dFFFFH4EFFFGGGbd&"T)&* *D5? r   )key)getsorted)	utilcodesrc   r^   rf   rg   s     @@@r   sorted_utility_codes_and_depsrl   Z   sm    EyH        ! !x     %X&&&&r   c                 ^    d | D             | D ]}fd|j         pdD             |_         d S )Nc                     i | ]}||S r+   r+   )r\   rc   s     r   
<dictcomp>z"normalize_deps.<locals>.<dictcomp>p   s    888(HX888r   c                 <    g | ]}                     ||          S r+   )
setdefault)r\   r]   depss     r   r_   z"normalize_deps.<locals>.<listcomp>r   s'    ZZZ3T__S#66ZZZr   r+   )rR   )rk   rc   rr   s     @r   normalize_depsrs   o   s[    88i888D [ [ZZZZ(BSBYWYZZZ[ [r   Tc                       fd}|S )Nc                    |                                   t          j        | j                   | j        }|j        }t          |          |d d <   t          |           t                      }|D ]}||v r|                    |           |j	        r#|j	        D ]}||vr|
                    |           |                    j                  x}rL|                     |                                |j        d           |                     |j        	           |                    j                  x}r|j        
                    |           | S )N)cython_scopeutilityr<   )internalise_c_class_entries)prepare_utility_coderT   rv   r$   utility_code_listrl   rs   rL   rN   rR   appendget_treer@   with_compiler_directivesmerge_scopeget_shared_library_scopecimported_modules)
r4   module_scoperz   addedrc   r]   r)   shared_library_scoper*   rx   s
           r   inject_utility_code_stagezDinject_utility_code_stage_factory.<locals>.inject_utility_code_stagev   s   ((***$W%9;;LMMM"((:<=NOO!!!())) * 	L 	LH5  IIh  6#, 6 6C%'')00555((g6J(KKKt L$$T%B%B%D%D%)Zy % B B B''
Pk'llll)1)J)JX_Xl)J)m)mm% L.556JKKKr   r+   )r*   rx   r   s   `` r   !inject_utility_code_stage_factoryr   u   s*         8 %$r   r+   c                 N   |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  ||            ||           |/ |             || | j4                   ||            |             ||           |0 ||            ||            ||            |'             |!             ||            ||            |	             |
|            ||            | |            |$|            ||            ||            ||            ||            ||            |+|           |. |&|            ||            |             ||            |#|            |"|            |%|            ||            ||            |*|            |)             |(|            ||            |            }1rfd|1D             }1|1S )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   c                 &    g | ]}|j         v|S r+   )	__class__)r\   sexclude_classess     r   r_   z#create_pipeline.<locals>.<listcomp>   s%    JJJq{/'I'I!'I'I'Ir   )5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)2r*   moder   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   r   _check_c_declarations_specific_post_parse_align_function_definitionsstagess2     `                                               r   create_pipeliner      s   '''''""""""ZZZZZZZZZZZZiiiiiiiiii\\\\\\\\aaaaaaaaaaooooooooooSSSSSSSSEEEEEEQQQQQQQQrrrrrrrrrrTTTTTTTTTT000000======111111UUUUUUUUUUHHHHHHHH,,,,,,========222222222222444444JJJJJJJJ u}} 8+|G44 4#t||&>&>w&G&G##&*#
,
g,
	',
 	,
 		,

 	$#GW-HI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 	)(11M,
N 	! ))O,
P 	! ""Q,
R 	7##S,
T 	wU,
V 	

W,
FZ  KJJJJVJJJMr   Fc                 J   |rdnd}g }g }|j         rLddlm}  |            }	|                    |	           |                    |	                                           |j        r:ddlm}
 ddlm	} |

                    |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   r{   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      sh    445DLM' G111111**,,N+++^CCEEFFF ******777777)4)F)F*  * &)>'7FCCD		W	%	%&GGG)'22-g661'::		
 		(&	9	9:    r   c                 l    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     sX    ......
 	 <<
GU++, 	/

 
r   c                 (    t          | ||d          S )NT)r   )r   )r*   r5   r6   s      r   create_py_pipeliner   !  s    wDAAAAr   c           
      p   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 ]G}|                    |           t          ||          r |                    d	 |
                        nHfd
}|                    |           |S )Nr   )r   r   r   r   )r   r   )StatListNoder   VisitorTransformc                   $    e Zd Zd Z j        ZdS )5create_pyx_as_pxd_pipeline.<locals>.SetInPxdTransformc                 ^    t          |d          rd|_        |                     |           |S )Nin_pxdT)hasattrr   visitchildren)selfr   s     r   visit_StatNodezDcreate_pyx_as_pxd_pipeline.<locals>.SetInPxdTransform.visit_StatNode8  s4    tX&& #"t$$$Kr   N)__name__
__module____qualname__r   recurse_to_children
visit_Noder   s   r   SetInPxdTransformr   3  s(        
	 	 	 &9


r   r   r`   c                 (   | j         j                                        D ]Z}|j        sQd|_        |j        |j        k    r:|j        dk    r/|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    Z'..00 	U 	UE$ U'($:,,1AX1M1M"'+"4"4V5G"T"TEK|DHB///;;r   )r   r   r   r   r   r   r   r   Nodesr   r   r5   r   r   r{   
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 H H H H H H H H H HAAAAAAAA######H&w+C+=+:+A+88-. . .L *))))): : : : : : :, : : :   e9:: 	OOB 1 1 3 3444E	< < < < < OOHOr   c                     |s|sJ |p|}t          |           D ]\  }}t          ||          r 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  s     U
/EC(##  1a 	E	  	QBQB<9+%44r   )localc                       e Zd ZdS )_threadlocalN)r   r   r   r+   r   r   r  r  k  s          r   r  c                  @    	 t           j        S # t          $ r i cY S w xY wr   )threadlocalcython_pipeline_timingsAttributeErrorr+   r   r   get_timingsr  p  s4    22   			s    c                 x    	 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      uT{{r   )_pipeline_entry_pointsKeyErrorr   r   )
phase_namer  s     r   _make_debug_phase_runnerr"  y  sb    %j11      '10CL3#),:&Js    
c                 R   ddl m} 	 t          j        }n# t          $ r i x}t          _        Y nw xY wd }d }|}	 	 | D ]}||st          ||          rt          |dt          |          j                  }	t          j
        r!t          d|z             t          |	          }t                      }
 |||          }t                      |
z
  }
	 ||	         \  }}n# t          $ r d\  }}Y nw xY w|t          |
dz            z   |dz   f||	<   t          j
        rt          d|
z             n/# t           $ r"}t#          j        |d	
           |}Y d }~nd }~ww xY wnE# t&          $ r$}t#          j                    dk    r |}Y d }~nd }~wt*          $ r}|}Y d }~nd }~ww xY w||fS )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_pipeliner2    sY   """""";5 ; ; ;8::+555;   ED"	! 2 2=  Zy%A%A $UJU8LMM
4 ?6>???2:>>CFFs5$''FFQJ(#*:#6LE55 ( ( (#'LE555(',s1w;/?/?'?&K
#4 2,q0111+2,  	 	 	u5555EEEEEE	    "$$))   4=sx    00BD0 CD0 C0-D0 /C00?D0 /E  0
E:EE  EE   
F"*F		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   rl   rs   r   r   r   r   r   r  r  	threadingr  r  ImportErrorr  r  r  r"  r2  r+   r   r   <module>r6     sW                               ; ; ; ; ; ; ; ; ; ;      
  
      # # #) ) )! ! !H H H H"' ' '*[ [ [% % % %HX X X Xt! ! ! !F	
 	
 	
B B B* * *X5 5 5 50///////    lnn      / / / / / /s   &A- -BB