
    h7                     0   S SK r SSKJr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rS SKrS SKr " S
 S\	R"                  5      r " S S\5      r " S S\R(                  5      r " S S\5      r " S S\R.                  5      rSS jrg)    N   )parse_from_stringsStringParseContext)FileSourceDescriptor)CompileError)Symtab)Naming)Code)Optionsc                   8   ^  \ rS rSrS rU 4S jrSS jrSrU =r$ )NonManglingModuleScope   c                     Xl         S U l        UR                  SS5      U l        [        R
                  R                  " U /UQ70 UD6  g )NcppF)prefixcython_scopepopr   r   ModuleScope__init__)selfr   argskws       U/var/www/fran/franai/venv/lib/python3.13/site-packages/Cython/Compiler/UtilityCode.pyr   NonManglingModuleScope.__init__   s?     66%'##D64626    c                 2   > SUl         [        TU ]	  XU5      $ )NT)usedsuperadd_imported_entry)r   nameentrypos	__class__s       r   r   )NonManglingModuleScope.add_imported_entry   s    
w)$s;;r   c                     U(       aV  U[         R                  [         R                  [         R                  [         R                  4;   a  U R
                  nU< U< 3$ [        R                  R                  X5      $ N)	r	   typeobj_prefixfunc_prefix
var_prefixpyfunc_prefixr   r   r   mangle)r   r   r    s      r   r+   NonManglingModuleScope.mangle   s\    &//1C1CVEVEVX^XlXlmm #T**%%,,T::r   )r   r   r   r&   )	__name__
__module____qualname____firstlineno__r   r   r+   __static_attributes____classcell__r#   s   @r   r   r      s    7<; ;r   r   c                   "    \ rS rSrSrSS jrSrg)CythonUtilityCodeContext&   Nc                    U(       a  [        S5      eXR                  :w  a)  XR                  ;  a  [        S5      eU R                  U   $ U R                  c%  [	        U R
                  US X R                  S9U l        U R                  $ )Nz/Relative imports not supported in utility code.z%Only the cython cimport is supported.)parent_modulecontextr   )AssertionErrormodule_namemodulesscoper   r   r   )r   r;   from_moduler"   need_pxdabsolute_fallbackrelative_imports          r   find_module$CythonUtilityCodeContext.find_module)   sx     !RSS***,,.$%LMM||K00::/[dPXPXZDJ zzr   )r=   )NNTTF)r-   r.   r/   r0   r=   rB   r1    r   r   r5   r5   &   s    Er   r5   c                      ^  \ rS rSrSrSr   SS jrS rS rS r	SS jr
S	 r\U 4S
 j5       r\SS j5       r  SS jr\S 5       rSrU =r$ )CythonUtilityCode9   a&  
Utility code written in the Cython language itself.

The @cname decorator can set the cname for a function, method of cdef class.
Functions decorated with @cname('c_func_name') get the given cname.

For cdef classes the rules are as follows:
    obj struct      -> <cname>_obj
    obj type ptr    -> <cname>_type
    methods         -> <class_cname>_<method_cname>

For methods the cname decorator is optional, but without the decorator the
methods will not be prototyped. See Cython.Compiler.CythonScope and
tests/run/cythonscope.pyx for examples.
Tc
                 .   0 n
UbP  SSK Jn  UR                  5        H  u  p[        X5      (       d  M  XU'   XU'   M!     [        R
                  " XXR5      nXl        X l        XPl        X0l	        U=(       d    / U l
        X`l        Xl        Xl        Xl        g )Nr   )BaseType)
PyrexTypesrI   items
isinstancer
   sub_tempitaimplr    filer   requires
from_scopeouter_module_scopecompiler_directivescontext_types)r   rN   r    r   rP   rO   rQ   r9   rS   rR   rT   rI   keyvalues                 r   r   CythonUtilityCode.__init__L   s     ,%mmo
e..#&CL).#& . ##D4>D			 B$"4#6 *r   c                 p    [        U[        5      (       a!  U R                  5       UR                  5       :H  $ g)NF)rL   rF   _equality_params)r   others     r   __eq__CythonUtilityCode.__eq__g   s0    e.//((*e.D.D.FFFr   c                     U R                   n[        U[        5      (       a#  UR                  n[        U[        5      (       a  M#  U R                  XR
                  4$ r&   )rR   rL   r   outer_scoperN   rS   )r   r^   s     r   rY   "CythonUtilityCode._equality_paramsm   sK    --&<==%11K &<==yy+'?'???r   c                 ,    [        U R                  5      $ r&   )hashrN   )r   s    r   __hash__CythonUtilityCode.__hash__s   s    DIIr   c                   ^  SSK Jn  U/nSSKJnJn  [        T R                  T R                  U(       a  UR                  5       OSS9nT R                  Ul	        X'l
        [        T R                  T R                  USSS9nUR                  USUS	9n	U(       a:  / n
U	 H0  nU
R                  U5        [        XR                   5      (       d  M0    O   U
n	UR#                  U5      nUR$                  nUR'                  XUS
9n	S nT R(                  (       a*  UR'                  X" T R(                  5      UR                   S
9n	T R*                   Hj  n[        U[,        5      (       d  M  [/        US5      (       d  M-  U(       a  M6  UR'                  X" UR0                  R2                  5      UR                   S
9n	Ml     T R4                  (       a!  U 4S jnUR'                  U	UUR                   S
9n	T R6                  (       a!  U 4S jnUR'                  U	UUR                   S
9n	UR9                  XSS9u  nnU(       a   U5       eUT l        U$ )Nr   )AutoTestDictTransform)PipelineParseTreeTransformsF)rS   r   T)r9   allow_struct_enum_decoratorin_utility_codepyx)exclude_classes)beforec                    ^  U 4S jnU$ )Nc                 >   > U R                   R                  T5        U $ r&   )r=   merge_in)module_noder=   s    r   merge_scope_transformNCythonUtilityCode.get_tree.<locals>.merge_scope.<locals>.merge_scope_transform   s    !!**51""r   rD   )r=   rq   s   ` r   merge_scope/CythonUtilityCode.get_tree.<locals>.merge_scope   s    # )(r   treec                 >   > TR                   U R                  l        U $ r&   )rR   r=   r^   )rp   r   s    r   scope_transform3CythonUtilityCode.get_tree.<locals>.scope_transform   s    040G0G!!-""r   c                    > [        5       nTR                  R                  5        H>  u  p#[        USU5      nU R                  R                  X#S SS9nXALa  XCl        SUl        M@     U $ )Nr!   extern)
visibilityT)objectrT   rK   getattrr=   declare_typer!   in_cinclude)rp   dummy_entryr    typeold_type_entryr!   r   s         r   rw   rx      sn    $h"&"4"4":":"<JD &-T7K%HN'--::4tX`:aE%8%3
(,E% #= #"r   )	printtree)AnalysedTreeTransformsre    rf   rg   r5   r    rS   is_cppr   r   r   rN   create_pipelineappendrL   AnalyseDeclarationsTransformCnameDirectivesTransformInterpretCompilerDirectivesinsert_into_pipelinerQ   rP   rF   hasattrru   r=   rR   rT   run_pipeline)r   entries_onlyr   re   excludesrf   rg   r9   ru   pipelinept	transformrl   rs   deprw   errs   `                 r   get_treeCythonUtilityCode.get_treev   s3   A **3*II4+C+C)5##%5B +!IItyy't " ++GUH+UAa!Q!QRR 
 H'@@I	 %@@008> 1 @	) ??44+doo6*GG 5 IH ==C#011gc66J6JS_S_#88k#((..9.KK 9 M ! ""#  44/*GG 5 IH #  44/*GG 5 IH ++He+Ldw	r   c                     g r&   rD   )r   outputs     r   put_codeCythonUtilityCode.put_code   s    r   c                    > [         R                  " SU5      (       a  [        R                  R	                  X5      $ [
        TU ]  " X40 UD6$ )Nz[.]c(pp)?::)researchr
   UtilityCodeload_cachedr   load)clsutil_code_name	from_filekwargsr#   s       r   r   CythonUtilityCode.load   sA    99]N33 ##//JJw|N@@@r   c                 X    U R                   " X40 UD6nUR                  UR                  4$ )zB
Load a utility code as a string. Returns (proto, implementation)
)r   protorN   )r   r   r   r   utils        r   load_as_string CythonUtilityCode.load_as_string   s*    
 xx<V<zz499$$r   c                    U R                  SUS9nUR                  R                  nUR                  S5        UR                  S5        UR                  S5        UR                  S5        UR	                  5        H  nXl        X'l        M     UR                  nUR                  USUS9  Xl        U R                   H%  n	U	R                  (       d  M  U	R                  XS9  M'     U$ )	z
Declare all entries from the utility code in dest_scope. Code will only
be included for used entries. If module_name is given, declare the
type entries with that name.
T)r   r   r-   __file____builtins____doc__)merge_unused	allowlistr   )r   r=   entriesr   valuesutility_code_definitionr   ro   rP   is_cython_utilitydeclare_in_scope)
r   
dest_scoper   r   r   ru   r   r!   original_scoper   s
             r   r   "CythonUtilityCode.declare_in_scope   s     }}$\}J**$$JJN#I^^%E,0)J & NS
==C$$$$$Z$K ! r   c                 X    SSK Jn  [        U5      nSnU H  nX@;   d  M
  X   X$'   M     U$ )z
Cython utility code should usually only pick up a few directives from the
environment (those that intentionally control its function) and ignore most
other compiler directives. This function provides a sensible default list
of directives to copy.
r   )_directive_defaults)bindingalways_allow_keywordsallow_none_for_extension_argsauto_pickleccomplexc_string_typec_string_encodingzoptimize.inline_defnode_callszoptimize.unpack_method_callsz&optimize.unpack_method_calls_in_pyinitzoptimize.use_switch)r   r   dict)current_directivesr   utility_code_directivesinherited_directive_namesr    s        r   filter_inherited_directives-CythonUtilityCode.filter_inherited_directives   sB     	1"&':";%M! .D)0B0H'- . '&r   )
rS   rT   rO   rQ   rN   r    rR   r   rP   ru   )	__pyxutilr   NNNNNN)FNr&   FNN)r-   r.   r/   r0   r   r   r   r[   rY   rb   r   r   classmethodr   r   r   staticmethodr   r1   r2   r3   s   @r   rF   rF   9   s      CGOS$(+6@Tl A A % % EI#': ' 'r   rF   c                   8   ^  \ rS rSrU 4S jrSU 4S jjrSrU =r$ )TemplatedFileSourceDescriptori  c                 0   > [         TU ]  X5        X0l        g r&   )r   r   _context)r   filenamepath_descriptionr9   r#   s       r   r   &TemplatedFileSourceDescriptor.__init__  s    4r   c                 l  > [         TU ]  X5       nUR                  5       n[        R                  " X@R
                  U R                  5      n[        R                  " [        R                  " UR                  UR                  5      5      UR                  US9nS S S 5        U$ ! , (       d  f       W$ = f)N)encodingerrors)r   get_file_objectreadr
   rM   r   r   ioTextIOWrapperBytesIOencoder   )r   r   error_handlingfdataretstreamr#   s          r   r   -TemplatedFileSourceDescriptor.get_file_object  s    W$X>!668D""4FC%%bjjAJJ1G&HSTS]S]ftuF	 ?
  ?>
 s   B	B$$
B3)r   )NN)r-   r.   r/   r0   r   r   r1   r2   r3   s   @r   r   r     s      r   r   c                   4    \ rS rSrS rS r  SS jrS rSrg)	CythonSharedUtilityCodei!  c                 B    Xl         X l        X0l        X@l        S U l        g r&   )	_pxd_name_shared_utility_qualified_nametemplate_contextrP   _shared_library_scope)r   pxd_nameshared_utility_qualified_namer   rP   s        r   r    CythonSharedUtilityCode.__init__"  s     !.K+ 0 %)"r   c                    UnUR                  U R                  SS9 H  u  p4UR                  X4S9nM     [        R                  R                  [        R                  R                  [        R                  5      S   SU R                  5      n U R                  R                  S[        R                  5      [        R                  R                  U5      S   -   n[        XVU R                  5      nSUl        UR!                  XrU R                  5      u  pU	u  pX4UR"                  U R                  '   SUl        U(       a  Ue U$ ! [&         a     U$ f = f)	NF)rA   )
as_packager   Utility.r   T)_split_qualified_namer   find_submoduleospathjoinsplitCythonr   r   replacesepsplitextr   r   ri   process_pxdutility_pxdspxd_file_loadedr   )r   r9   r=   r    
is_packagepxd_pathnamerel_pathsource_descr   resultpxd_codenodes	pxd_scopes               r   rB   #CythonSharedUtilityCode.find_module)  s>    % ; ;D<_<_qv ; wD(((EE !x ww||GGMM&//*1-NN

	::BB3ORTRYRYRbRbcoRpqrRssH7PTPePefK*.K'!--k$BeBefKC)/&]4A3MG  0$(E!	    		s   B6E 
EENc                    U R                   UR                  R                  ;  a   U R                  UR                  5      U l        U R
                   H*  nUR                  (       d  M  UR                  [        US9  M,     U R                  R                   H)  nUR                  UR                  XfR                  5        M+     U$ )Nr   )r   r9   r   rB   r   rP   r   r   r=   c_class_entriesr   r    r"   )r   r   r   r   r   r   es          r   r   (CythonSharedUtilityCode.declare_in_scopeA  s    >>!5!5!B!BB)-)9)9,:N:N)OD&==C$$$$$U$F ! ++;;A))!&&!UU; <r   c                     U R                   UR                  R                  ;  a   U R                  UR                  5      U l        U R                  $ r&   )r   r9   r   rB   r   )r   r   s     r   get_shared_library_scope0CythonSharedUtilityCode.get_shared_library_scopeL  s?    >>!5!5!B!BB)-)9)9,:N:N)OD&)))r   )r   r   r   rP   r   r   )	r-   r.   r/   r0   r   rB   r   r  r1   rD   r   r   r   r   !  s     *0 EI#'	*r   r   c                 @    [        U /UQ70 UD6R                  U5        g)zT
Declare some declarations given as Cython code in declaration_string
in scope env.
N)rF   r   )declaration_stringenvprivate_typer   r   s        r   declare_declarations_in_scoper  R  s"     (:4:6:KKCPr   )T)r   TreeFragmentr   r   Scanningr   Errorsr   r   r   r	   r
   r   os.pathr   r   r   r   r   r5   UtilityCodeBaserF   r   AbstractUtilityCoder   r  rD   r   r   <module>r     s     @ *        	 	;V// ;.1 &V',, V'r$8 .*d66 .*bQr   