
    -Ph                    6   d dl Z  e j        eeeeeeeeee
  
         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
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 ddlmZ ddlmZ ddlmZmZmZmZ ddlmZmZ ddlmZmZm Z m!Z!m"Z" ddlm#Z#m$Z$m%Z% ddl&m'Z'm(Z( ddlm)Z) d Z*d Z+d Z,d Z-d Z.ddddddddddddd Z/ G d! d"ej0        ej1                  Z2 G d# d$          Z3d% Z4 e#j5        d&d'          Z6 e#d(d)d*+          Z7dS ),    N)
NamingOptions
PyrexTypes	TypeSlotserrorwarningpy_object_typeUtilityCodeEncodedStringre)defaultdict   )CPtrType)Future)Annotate)Code)r   )Nodes)r   )r   )r   )Pythran)r   r   CompileErrorformat_position)r	   get_all_subtypes   )open_new_filereplace_suffixdecode_filenamebuild_hex_versionis_cython_generated_file)r
   IncludeCodeTempitaUtilityCode)r   encoded_string_or_bytes_literal)has_np_pythranc                 @    t          | |          }t          |          S N)r   as_encoded_filename)pathnewsufnewpaths      Z/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/Cython/Compiler/ModuleNode.pyreplace_suffix_encodedr)   &   s    T6**Gw'''    c                 D    t          | t          j                              S r#   )r    sysgetfilesystemencoding)r%   s    r(   r$   r$   +   s     +41J1L1LMMMr*   c                 8    | j                                          | S r#   )scopecheck_c_classes_pxdmodule_nodes    r(   check_c_declarations_pxdr3   1   s    ))+++r*   c                 j    | j                                          | j                                          | S r#   )r/   check_c_classescheck_c_functionsr1   s    r(   check_c_declarationsr7   6   s2    %%''''')))r*   c                     t           j        s|j        rd}n|j        }t          |d          rt	          d           t          j        || j        d         |j                  S )NFemit_code_commentszeWarning: option emit_code_comments is deprecated. Instead, use compiler directive emit_code_comments.)emit_linenumsr9   c_line_in_traceback)	r   annotater:   hasattrprintr   CCodeConfig
directivesr;   )envoptionsr:   s      r(   generate_c_code_configrC   <   s     .7+ .-w,-- E D 	E 	E 	E #>*>?#79 9 9 9r*   )T&&T)F||F)T N)TrE   F)FrD   T))__lt____gt__)rG   __le__)rG   __ge__)rI   rJ   )rI   rG   )rI   rH   )rH   rG   )rH   rJ   )rH   rI   )rJ   rI   )rJ   rH   )rJ   rG   c                      e Zd ZdgZdZdZdZed             Zd Z	drdZ
d Zd Zd	 Zd
 Zd ZdsdZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Ze d             Z!d Z"d Z#d  Z$dtd!Z%d" Z&d# Z'd$ Z(d% Z)d& Z*d' Z+d( Z,d) Z-d* Z.d+ Z/d, Z0d- Z1d. Z2d/ Z3d0 Z4d1 Z5d2 Z6d3 Z7d4 Z8d5 Z9d6 Z:d7 Z;d8 Z<d9 Z=d: Z>d; Z?d< Z@d= ZAd> ZBd? ZCd@ ZDdA ZEdB ZFdC ZGdD ZHdE ZIdF ZJdG ZKdH ZLdI ZMdJ ZNdK ZOdL ZPdM ZQdN ZRdO ZSdP ZTdQ ZUdR ZVdS ZWdT ZXdU ZYdV ZZdW Z[dX Z\dY Z]dZ Z^d[ Z_d\ Z`d] Zad^ Zbd_ Zcd` Zdda Zedb Zfdc Zgdd Zhde Zidf Zjdg Zkdh Zldi Zmdj Zndk Zodl Zpdm ZqdudnZrdo Zsdp Ztdq ZudS )v
ModuleNodebodyNc                     | j         S r#   )r/   selfs    r(   local_scopezModuleNode.local_scope   s     zr*   c                    t          | j        t          j                  sJ |dv sJ | j        t          j        | j        j        g           | _        t          j        | j        j        g           | _        | j        j                            d| j                   | j        j                            d| j                   |j	        | j
        j	        k    r!t          j        |j        ||j	                  }|dk    r| j        n| j        }t          |t          j                  r |j                            |j                   n|j                            |           | j
        j                            |j                   |j                                        D ]}| j
                            |           d } || j
        j        |j                   d S )N)pxdutility)statsr   )rM   r@   rS   c                 B    |D ]}|| vr|                      |           d S r#   )append)L1L2xs      r(   extend_if_not_inz-ModuleNode.merge_in.<locals>.extend_if_not_in   s4     ! !B;;IIaLLL! !r*   )
isinstancerM   r   StatListNode	pxd_statsposutility_code_statsrU   insertr@   r/   CompilerDirectivesNodeextendrW   utility_code_list
c_includesvaluesprocess_includeincluded_files)rP   treer/   stagetarget_statsincr[   s          r(   merge_inzModuleNode.merge_in   s    $)U%788888*****>!"/	RHHHDN&+&8b&Q&Q&QD#IO""1dn555IO""1d&=>>>tz444 /tPUP`aaaD).%t~~T=TdE.// 	,%%dj1111%%d+++
$++E,CDDD#**,, 	, 	,CJ&&s++++	! 	! 	!
 	2E4HIIIIIr*   Tc                     |j         D ]'}| j        |j        _        ||j        j        j        d<   (| j                            |           d S )Ninternal)c_class_entriesfull_module_nametypemodule_namer/   r@   rm   )rP   r/   internalise_c_class_entriesentrys       r(   merge_scopezModuleNode.merge_scope   sT    * 	R 	RE%)%:EJ"6QEJ'
33
E"""""r*   c                 R    t          j        | j        | j        | j                  }|S )N)r@   rM   )r   rb   r_   r@   rM   )rP   rM   s     r(   with_compiler_directivesz#ModuleNode.with_compiler_directives   s(     +DHW[W`aaar*   c                    t          |          rt          j        |           | j        r| j        d         |_        t
          j        sd x|_        | _        nt
          j        rpt          dt          j        | j                  z            |_        | j        :t          |j        dz   | j        z             |_        | j        j        |j        _        n| j        |_        | j        |_        | j                            |           |                    d           r/| j                            t'          j        dd                     d S d S )Nold_style_globalszFile: %s (starting at line %s)
c                     | t           j        u S r#   )r   cy_pymutex_type)tps    r(   <lambda>z1ModuleNode.analyse_declarations.<locals>.<lambda>   s    R:;U5U r*   CythonPyMutexPublicCheckzLock.c)r!   r   include_pythran_genericr@   rz   r   
docstringsdocembed_pos_in_docstringr   r   relative_positionr_   encodingrM   analyse_declarationsfind_shared_usages_of_typer/   use_utility_coder
   load_cachedrP   rA   s     r(   r   zModuleNode.analyse_declarations   sC   # 	1+C000? 	I$(O4G$HC!! 	!%%CGdhh+ 	#$DuG^_c_gGhGh$hiiCGx#'$(ABB#'8#4 hCG	&&s+++))*U*UVV 	 J'''.     	 	r*   c                 6   | j         }|j        r|                     |           t          |j                                                  D ]N\  }}|j        rB|j         |u r9|j        r2|j        j	        s|j        j
        r|j                            |           Od S r#   )r/   has_import_star*create_import_star_conversion_utility_codesortedentriesitemscreate_wrapperis_typerr   is_enumis_cpp_enumcreate_type_wrapperrP   rA   nameru   s       r(   prepare_utility_codezModuleNode.prepare_utility_code   s     j 	A;;C@@@!#+"3"3"5"566 	4 	4KD%$ 4);); *<+0:+= *<AFAW *<
..s333	4 	4r*   c                 0   | j         }t          j        |_        g | _        |                     || j        i            |                     |           |                     |||           |                     |||           | 	                    |||           d S r#   )
r/   r   c_void_typereturn_typereferenced_modulesfind_referenced_modulessort_cdef_classesgenerate_c_codegenerate_h_codegenerate_api_code)rP   rB   resultrA   s       r(   process_implementationz!ModuleNode.process_implementation   s    j$0"$$$S$*A2FFFs###S'6222S'6222sGV44444r*   c                 D    | j         D ]}|j        D ]}|j        r  dS dS )Nr   r   )r   cfunc_entriesdefined_in_pxd)rP   moduleru   s      r(   has_imported_c_functionsz#ModuleNode.has_imported_c_functions   sK    - 	 	F-  ' 111 qr*   Fc                     t          ||d          s5t          | j        dt          j                            |          z            d S )NT)allow_failedif_not_foundzVThe output file already exists and does not look like it was generated by Cython: "%s")r   r   r_   osr%   basename)rP   r%   r   s      r(   assure_safe_targetzModuleNode.assure_safe_target   sV    '<VZ[[[ 	2r'**40012 2 2	2 	2r*   c           	      r   d'd} ||j         d          } ||j                  } ||j                  } ||j                  }|s|s|s|rt	          |j        d          |_        |                     |j                   t          j	                    }	t          ||          }
t          j        |	| |
          }|                                 |j        d         }|j        d         }|j        d         }|j        r4t	          |j        d	          |_        t          j        |j                  }nd }|                                 |                     t&          j        |          }|                    |           |                    d
           |                    d           |                     ||           |j        r|                     |g |           |                    d
           |                     t&          j        |          }|                    d|z             |                    d
           |                     ||                                           |                    d
           |                     |           |rR|                    d
           |D ]:}|                     |j        |           |r|                      |j        |           ;|r1|                    d
           |D ]}| !                    |||           |r1|                    d
           |D ]}| !                    |||           |                    d
           |                    d|z             |                    d
           |                    d           |                    d           |                    d
           | "                    d|          }tG          d|j$        %                                d|d|d          }|                    d|&                    d          z             |                    d|z             |                    d
           |                    d           |                    d           |                    d|%                                z             |                    d           |                    d|%                                z             |                    d           |                    d|%                                z             |                    d           |                    d |z             |                    d!           |                    d"           |                    d#|d$|d%|d&           |                    d           |                    d
           |                    d|z             tO          |j                  5 }|	(                    |           d d d            d S # 1 swxY w Y   d S d S )(Nr   c                 $    fd| D             S )Nc                 N    g | ]!}|j         d k    sr|j        s	|j        |"S )public)
visibilityapir   ).0ru   r   rS   s     r(   
<listcomp>zAModuleNode.generate_h_code.<locals>.h_entries.<locals>.<listcomp>   sU     9 9 9e)X55 6!& 6 6!&!5 6 555r*    )r   r   rS   s    ``r(   	h_entriesz-ModuleNode.generate_h_code.<locals>.h_entries   s3    9 9 9 9 9w 9 9 9 9r*   r   )r   z.hh_codetype_declarationsendz.pxirF   #include "Python.h"z
#ifndef %s#endif /* !%s */zP/* WARNING: the interface of the module init function changed in CPython 3.5. */zK/* It now returns a PyModuleDef instance instead of a PyModule instance. */PyInitzUse PyImport_AppendInittab(, z) instead of calling z
 directly.z!/* WARNING: %s from Python 3.5 */.zPyMODINIT_FUNC %s(void);z#if PY_VERSION_HEX >= 0x03050000 && (defined(__GNUC__) || defined(__clang__) || defined(_MSC_VER) || (defined(__cplusplus) && __cplusplus >= 201402L))z2#if defined(__cplusplus) && __cplusplus >= 201402Lz[[deprecated(%s)]] inlinez-#elif defined(__GNUC__) || defined(__clang__)z;__attribute__ ((__deprecated__(%s), __unused__)) __inline__#elif defined(_MSC_VER)z#__declspec(deprecated(%s)) __inline#endifz>static PyObject* __PYX_WARN_IF_%s_INIT_CALLED(PyObject* res) {zreturn res;}#define z() __PYX_WARN_IF_z_INIT_CALLED(z()))r   r   ))type_entriesvar_entriesr   rp   r)   c_fileh_filer   r   CCodeWriterrC   GlobalStateinitialize_main_h_codepartsgenerate_pxii_filePyrexCodeWriterput_generated_byapi_namer   h_guard_prefixput_h_guardputlngenerate_type_header_codecapi_reexport_cincludesgenerate_includesapi_guard_prefix"generate_extern_c_macro_definitionis_cppgenerate_dl_import_macrogenerate_cclass_header_coderr   generate_cclass_include_codegenerate_public_declarationmod_init_func_cnamer   rs   as_c_string_literalrstripr   copyto)rP   rA   rB   r   r   h_typesh_varsh_funcsh_extension_typesh_code_writerc_code_configglobalstateh_code_starth_code_main
h_code_endi_codeh_guard	api_guardru   py3_mod_func_namewarning_stringfs                         r(   r   zModuleNode.generate_h_code   s   	9 	9 	9 	9
 )C,!4443?++)C-..%Ic&9:: R	(f R	( R	(+< R	(26=$GGFM##FM222 ,..M23@@M*=$NNK..000&,X6L%+,?@K$*51J#  6v}f M M-fm<<))+++mmF$93??G$$W---r"""4555**7LAAA. >&&sB===r"""f&=sCCI|i7888r"""33L#**,,OOOr""")),777  N!!"%%%. N NE44UZMMM N99%*fMMM Q!!"%%%$ Q QE44UKPPPP Q!!"%%%# Q QE44UKPPPPb!!!09<===b!!!pqqqklllb!!! $ 8 83 G G*]3355557H7H7HJ[J[J[,] ^ ^NANDYDYZ]D^D^^___8;LLMMMb!!! G H H H RSSS9N<^<^<`<``aaaMNNN[22446 7 7 77888C22446 7 7 7h'''^arrsssm,,,c"""!!!#4#4#46G6G6GI J J Jh'''R   /'9:::v}-- ($$Q'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (cR	( R	(s   X**X.1X.c                     |                     t          j        d|j                            |j                  d           |r9|                     d|j                            |j        d          z             d S d S )N ;zcdef extern %sr   pyrex)r   r   extern_c_macrorr   declaration_codecname)rP   ru   r   r   s       r(   r   z&ModuleNode.generate_public_declaration\  s    !!!J''44446 	7 	7 	7  	DLL)
++EKq+AAC D D D D D	D 	Dr*   c                 d    |                      ||j                  }|                    dd          S Nr   __)punycode_module_namequalified_namereplace)rP   prefixrA   r   s       r(   r   zModuleNode.api_named  s0    ,,VS5GHHT***r*   c                    d-d} ||j                   } ||j                  } ||j                  }|s|s|sd S t          |j        d          |_        |                     |j                   t          j                    t          ||          }t          j
        | |                                            |                     t          j        |          }	                    |	                               d                               d                               d           d.fd	}
                    d	           |j        r]t$          j                            |j                  }t+          |          }                    d
|                                z             |rd                    d           |D ]L}|j        }                    d|j        z                                 d|j        d|j        d           M|r                    d           |D ]}t5          |j                  }|                    t          j        |j                  }                    d|                    |          z                                 d|j        d|           |r                    d           |D ]}t5          |j                  }|                    t          j        |j                  }                    d|                    |          z                                 d|j        d|d           |r |
dd           |r |
dd           |r |
dd                               d                               d|                     d|          z                                 d                               d|j                                         z                                 d           |D ]}|                    t          j        |j                  }|j        !                                }                    dt          j"        d|j                                        d|d|d	           |D ]}|                    t          j        |j                  }|j        #                                }                    d t          j"        d|j                                        d!|d|d	           tI          |j         d"i#          5 }|D ]!}| %                    |j        |d$d%           "	 d d d            n# 1 swxY w Y                       d&                               d'                               d(                               d)                               d*                               d+                               d                               d,|	z             tM          |j                  }	 '                    |           |(                                 d S # |(                                 w xY w)/Nr   c                      fd| D             S )Nc                 4    g | ]}|j         s	|j        |S r   )r   r   )r   ru   rS   s     r(   r   zEModuleNode.generate_api_code.<locals>.api_entries.<locals>.<listcomp>j  sK     D D DeyD%(D-2-ADE D D Dr*   r   )r   rS   s    `r(   api_entriesz1ModuleNode.generate_api_code.<locals>.api_entriesi  s5    D D D Dw D D D Dr*   z_api.hz#ifdef __MINGW64__z#define MS_WIN64r   Tc                     t          j        | ||          \  }}|r                    |           |r                    |           d S d S )N)include_requires)r
   load_as_stringput)r   src_filer  protoimplr   s        r(   put_utility_codez6ModuleNode.generate_api_code.<locals>.put_utility_code  sc    %4T8VfgggKE4 "

5!!! !

4     ! !r*   r   z#include %srF   zstatic PyTypeObject *%s = 0;r    (*)zstatic %s = 0;r   VoidPtrImportImportExport.cFunctionImport
TypeImportzstatic int %s(void) {importzPyObject *module = 0;z#module = PyImport_ImportModule(%s);zif (!module) goto bad;if (__Pyx_ImportFunction_z	(module, , (void (**)(void))&, "z") < 0) goto bad;if (__Pyx_ImportVoidPtr_z, (void **)&r   )imported_modules	goto bad;)
error_codeis_apizPy_DECREF(module); module = 0;	return 0;bad:zPy_XDECREF(module);
return -1;r   r   )r   T))r   r   rp   r)   r   api_filer   r   r   rC   r   r   r   r   r   r   r   r   r   r%   r   r$   r   rr   typeptr_cnametypeobj_cnamer   manglefunc_prefix_apir   r   varptr_prefix_apir   signature_string	cyversionempty_declaration_codeModuleImportGeneratorgenerate_type_import_callr   r   close)rP   rA   rB   r   r  api_vars	api_funcsapi_extension_typesr   r   r  
h_filenameru   rr   r   sigimport_generatorr   r   s                     @r(   r   zModuleNode.generate_api_codeh  s%   	D 	D 	D 	D ;s//K 122	)k#*=>> 	I 	)< 	F0II000!##.sG<<}555!!!MM&"93??	9%%%)***'(((X	! 	! 	! 	! 	! 	! 	*+++= 	K))&-88J,Z88JLL)G)G)I)IIJJJ 	=LL, = =z;d>PPQQQ&&&(:(:(:< = = = = 	DLL" D D
++

6#95:FF-0E0Ee0L0LLMMM


EEBCCCC 	GLL! G G
++

6#;UZHH-0E0Ee0L0LLMMM5:::uuuEFFFF 	@_.>??? 	A-/?@@@ 	=\+;<<<R,t}}Xs/K/KKLLL,---:S=O=c=c=e=eefff-... 	T 	TEJJv5uzBBE*--//CLLL###UZ%C%C%E%E%E%EuuucccST T T T  	T 	TEJJv7DDE*3355CLLL###UZ%C%C%E%E%E%EuuucccST T T T #6S=OQY<Z[[[ 	z_o, z z..uz6CS`ktx.yyyyz	z 	z 	z 	z 	z 	z 	z 	z 	z 	z 	z 	z 	z 	z 	z 	5666[!!!V*+++\"""SR')3444&/**	MM!GGIIIIIAGGIIIIs   %U33U7:U7>Y) )Y?c                     |                     t          j        dt          j        dd          d|j        d           d S )Nr   PyTypeObject	DL_IMPORTr   )r   r   r   r   public_declr$  )rP   rr   r   s      r(   r   z&ModuleNode.generate_cclass_header_code  sU    !!!">;????  	! 	! 	! 	! 	!r*   c                 b   |                     d|j        d|j        d           |                                 |j        j        }|r=|D ]9}|                     d|j                            |j        d          z             :n|                     d           |	                                 d S )Nzcdef extern class r   :zcdef %sr   r   pass)
r   rs   r   indentr/   r   rr   r   r   dedent)rP   rr   r   r   ru   s        r(   r   z'ModuleNode.generate_cclass_include_code  s    diii) 	* 	* 	*j, 	!$ H HYJ//1/EEG H H H HH LL   r*   c                 	   |                      |j        d           | j        }t          j        s|j        r<t          j        dk    p
|j        dk    }t          j        || j        j                  }nt          j
                    }t          ||          }t          j        || ||j                  }|                                 |d         }	| j        |_        | j        |_        |                     ||||j        |	           |                    t*                     |d         }
|
                    d| j                                        z             |                                 }|
                    d	|z             |
                    d
|z             |
                    d           |
                    d|j                                        z             |d         }
|                     |||
d           |d         }
|                     ||
           |                     ||
           |                     ||
           | j                             ||
           |d         }
| !                    ||
           | "                    ||
           |j#        r| $                    ||
           |d         %                    tM          j'        dd                     | (                    ||d                    | )                    ||d                    | *                    ||d                    | +                    |d d         ||d                    | ,                    ||d                    t          j-        r| .                    ||d                    | /                    |d                    | 0                    |||           |	1                    d           |j2        d d          D ]}|                    |           |3                                 | 4                    |||           tk          |j                  }	 |6                    |           |7                                 n# |7                                 w xY wd|_8        |j9        r| :                    ||           t          j        s|j        r| ;                    |||           d S d S )NT)r   fullc)show_entire_c_codesource_desc)code_configcommon_utility_include_dirr   before_global_varz#define __Pyx_MODULE_NAME %szextern int %s;zint %s = 0;rF   z/* Implementation of %s */late_includesF)earlymodule_codemodule_exttypesmodule_stateSmallCodeConfigModuleSetupCode.cmodule_state_clearmodule_state_traverseinit_modulecleanup_modulemain_methodfilename_tabler{   r   )<r   r   r   r   r<   r   AnnotationCCodeWritercompilation_sourcer@  r   r   rC   r   rB  initialize_main_c_coder_   
module_posr@   generate_module_preambleembedded_metadatar   refnanny_utility_coder   rq   r   is_main_module_flag_cnamer   r   generate_cached_builtins_declsgenerate_lambda_definitionsgenerate_variable_definitionsrM   generate_function_definitionsgenerate_typeobj_definitionsgenerate_method_tabler   generate_import_starput_code_herer
   loadgenerate_module_state_startgenerate_module_state_cleargenerate_module_state_traversegenerate_module_init_funcgenerate_module_cleanup_funcembedgenerate_main_methodgenerate_filename_table!generate_declarations_for_moduleswriterd   finalize_main_c_codegenerate_module_state_endr   r   r-  c_file_generated	gdb_debug_serialize_lineno_map_generate_annotations)rP   rA   rB   r   modulesr?  
rootwriterr   r   r   codemodule_is_mainutilcoder   s                 r(   r   zModuleNode.generate_c_code  s   DAAA) 	,w/ 	,!(!1W!<![@PT[@[!7#5 3?  JJ
 )++J.sG<<&%'.'I
 
 

 	**,,,X&!%!%%%c7GV=UW]^^^$$%:;;;./

1(<<>>? 	@ 	@ 	@7799

#n4555

=>1222

2

/#2D2X2X2Z2ZZ[[[?+sGT???=)++C666 	((d333**3555	//T::: ,-))#t444""3--- 	1%%c4000 	N#11.0CDD	F 	F 	F 	((k..IJJJ((k:N.OPPP++C=T1UVVV 	&&wss|S+m:TUUU))#{;K/LMMM= 	G%%c;}+EFFF$$[1A%BCCC..sG[IIIT-aaa0 	3 	3H((2222((***&&sG[AAA&-((	a   GGIIIIAGGIIII"# 	8&&sJ777 	Dw/ 	D&&z67CCCCC	D 	Ds   Q8 8Rc                 n   |                      |           t          j        p|j        }|rnt          j                            |          rOdd lmc m} |	                    |          
                                }|                                D ]	}d |_        
nd }|                    |j        |j        |           | j        j        sd S | j        j        j        }t          j                            t          j                            |j                            }	| j        j        D ]
}
t          j                            t          j                            |	|
                    }t          j                            |          }|                    |	          su ||
| j        d          }|s||	k    rat          j                            |          sB	 t          j        |           n,# t4          $ r}dd l}|j        |j        k    r Y d }~nd }~ww xY w|                    |||           d S )Nr   )coverage_xmlT)
source_posinclude)r<   r   annotate_coverage_xmlr   r%   existsxml.etree.ElementTreeetreeElementTreeparsegetrootitertailsave_annotationmain_source_filer   r/   rh   contextsearch_include_directoriesabspathdirnamejoin
startswithr_   makedirsOSErrorerrnoEEXIST)rP   rt  r   rB   coverage_xml_filenameETry  elsearch_include_file
target_dirincluded_filetarget_filetarget_file_dirsource_fileer  s                   r(   rr  z ModuleNode._generate_annotations;  sI   j!!! ' = ^A^  	 RW^^4I%J%J 	 .........88$9::BBDDL"''))    L""6#:FMXd"eee z( 	F"j0KW__RW__V]%C%CDD
!Z6 	\ 	\M'//"',,z=*Q*QRRK gook::O"--j99 --mZ^___K *,,RW^^O5T5T,K0000    LLLw%,.. /.... &&{Kl&[[[[!	\ 	\s   G//
H9HHc           
         |j         j        }|j                                        }t	          t
                    }t          |          D ]5\  }\  }}|dk    r'|j         |||f                             |dz              6|	                    d           t          |                                          D ]b\  \  }}}	|j        J |                    dd                    t          t          |	                    |j        t          |                     c|                    d           |                                 d S )Nr   r   LineNumberMapping
LineNumberr   )	c_linenossrc_path
src_lineno)r  gdb_debug_outputwriterbuffer
allmarkersr   list	enumeratefilenamerW   startr   r   	add_entryr  mapstrr   	serialize)
rP   rA   ccodewritertbmarkersdc_linenosrc_descr  r  s
             r(   rq  z ModuleNode._serialize_lineno_mapa  s>   [/$//1109'0B0B 	= 	=,H,xA~~("3"?(J&'..x!|<<<
$%%%17		1B1B 	 	-"XzI$000LL((3sI#6#677!*z??	      	"###
r*   c                     ||vr=d||<   |j         D ]}|                     |||           |                    |           d S d S )Nr   )cimported_modulesr   rW   )rP   rA   module_listmodules_seenimported_modules        r(   r   z"ModuleNode.find_referenced_modulesv  sh    l"" !L#&#8 Y Y,,_k<XXXXs#####	 #"r*   c                   	
 t          t                    |D ]d}|         }|j        j        }|rL |          }|                             |                               |          }|n|j        j        }|Let                      g 
	
fd	t          |          D ]} 	|                    
                                 
S )Nc                     | v rd S                      |             | j                           D ]} |                                        |            d S r#   )addrr   rW   )uvdfsgetkeyr   seen
subclasses	type_dicts     r(   r  z1ModuleNode.sort_types_by_inheritance.<locals>.dfs  sm    DyyHHQKKKqv/ " "IaL!!!!MM!r*   )	r   r  rr   	base_typerW   getsetreversedreverse)rP   r  
type_orderr  key	new_entrybasebase_key
base_entryr  r   r  r  s    ` `     @@@@r(   sort_types_by_inheritancez$ModuleNode.sort_types_by_inheritance}  s    &&
 
	1 
	1C!#I>+D 1!6$<<8$++C000&]]844
%!0  1 uu	 	 	 	 	 	 	 	 	 	 J'' 	  	 CC	#r*   c                    i g }}i g }}|D ](}|j         D ]}|j        r|j        s|j        }	|	j        }
|
s!|
|v ruddlm} t          |j        |          sJ t          |j                              t          ||
         j        |          s"J t          ||
         j                              |||
<   |
                    |
           ||u }|j        D ]]}|j        rT|s|j        rK|j        }	|	j        r=|j        s6|j        }	|	j        }
|
|vs
J |
            |||
<   |
                    |
           ^*d }|                     |||          }d }|                     |||          }||fS )Nr   )NonManglingModuleScopec                     | j         S r#   )vtabstruct_cname
entry_types    r(   r  z8ModuleNode.sort_type_hierarchy.<locals>.vtabstruct_cname  s    ..r*   c                     | j         S r#   )objstruct_cnamer  s    r(   r  z7ModuleNode.sort_type_hierarchy.<locals>.objstruct_cname  s    --r*   )rp   usedin_cincluderr   r  r
   r  r\   r/   r  rW   r   r   is_extension_typer  r  )rP   r  rA   	vtab_dictvtab_dict_ordervtabslot_dictvtabslot_dict_orderr   ru   rr   r  r  all_defined_herer  	vtab_listr  vtabslot_lists                    r(   sort_type_hierarchyzModuleNode.sort_type_hierarchy  s   %'?	-/*! 	8 	8F/ 4 4: 4e&7 4 :D/C ! i'' HGGGGG)%+7MNN``PSTYT_P`P````))C.*>@VWWrrY\]fgj]k]qYrYrrrrr).	#'..s333%}, 8 8: 8#3 8u7K 8 :D- 8e6G 8$z"2"-777777-2c*+2237778	/ 	/ 	/22(8: :		. 	. 	.66.A A =))r*   c                     t          j        d          }i g }}|j        D ]:} ||j                  }||vs
J |            |||<   |                    |           ;|                     |||          |j        d d <   d S )Nr  )operator
attrgetterrp   rr   rW   r  )rP   rA   key_func
entry_dictentry_orderru   r  s          r(   r   zModuleNode.sort_cdef_classes  s    &'899"$bK
( 	$ 	$E(5:&&Cj(((#(((#JsOs####!%!?!?X"/ "/AAAr*   c                    |D ]}|                      |j        |           t          |          t                      }|D ]}||u }	g }
|j        D ]l}|j        j        r@|j        r9|j        |vr/|                    |j                   |
                    |           N|	s|j	        r|
                    |           mfd|
D             }
| 
                    |
|           |D ]3}|                     |j        |           |                     ||           4|D ]Z}|                     ||           |                     ||           |                     ||           |                     ||           [d S )Nc                     g | ]}|v|	S r   r   )r   tvtabslot_entriess     r(   r   z8ModuleNode.generate_type_definitions.<locals>.<listcomp>  s$    QQQ!q@P7P7PA7P7P7Pr*   )!generate_objstruct_predeclarationrr   r  r   	is_ctupler  r   r  rW   r   r   generate_objstruct_definitiongenerate_typeobj_predeclarationgenerate_exttype_vtable_struct$generate_exttype_vtabptr_declaration*generate_exttype_final_methods_declaration)rP   rA   rs  r  r  ru  ru   ctuple_namesr   
definitionr   r  s              @r(   generate_type_definitionsz$ModuleNode.generate_type_definitions  s   " 	E 	EE225:tDDDD}--uu 	? 	?F3JL, / /:' /EJ /z55$((444$++E222 /5#7 / ''...QQQQ|QQQL**<>>>>" 	> 	>E..uz4@@@00==== 	I 	IE00===//t<<<55eTBBB;;E4HHHH		I 	Ir*   c                    |d         }|                     d           |                     d           dd |D             v rT|                     d           |                     d           |                     d           |                     d	           |                     ||          \  }}|                     |||||           |d
         }|D ]}||u }	|                     d           |                     d|j                                        z             |                     |||	|           |                     |||	           |                     |||	           d S )Nr   rF   z/*--- Type declarations ---*/zcpython.arrayc                     g | ]	}|j         
S r   )r   )r   ms     r(   r   z@ModuleNode.generate_declarations_for_modules.<locals>.<listcomp>  s    AAAAq/AAAr*   z#ifndef _ARRAYARRAY_Hzstruct arrayobject;z'typedef struct arrayobject arrayobject;r   module_declarationsz!/* Module declarations from %s */)r   r  r  r   r   generate_c_class_declarationsgenerate_cvariable_declarationsgenerate_cfunction_declarations)
rP   rA   rs  r   typecoder  r  
modulecoder   defined_heres
             r(   rk  z,ModuleNode.generate_declarations_for_modules  s   23r6777 AAAAAAANN2333NN0111NNDEEENN8$$$#'#;#;GS#I#I 	=&&)]H	> 	> 	> !67
 	S 	SF!S=LR   @6CXClClCnCnnooo..vz<Q\]]]00\RRR00\RRRR	S 	Sr*   c                 V    |                      t          j        |d                     d S )NrJ  )ra  r
   rb  )ru  r   s     r(   _put_setup_codezModuleNode._put_setup_code  s*    ;+D2EFFGGGGGr*   c                    |                                  |ri|                    d           |                    t          j        |dd                     |                    d           |                    d           |                    d           |                    d           |                    d	           |                     |d
           t          |j                                        t          j	                  D ]'}|j
        |j        k    r|                    |           (|                    d           |                    d           |                    d           |                    d           |                    d           |j        d                             d           ddlm} |                    d|                    dd           d           |                    dt#          |          z             |                    dt$          j        |j        j        v z             |j                            t/          j        dd                     |                     |d           |j        j        j        r|                     |d           n|                     |d           |                     |d            |                     |d!           d"t6          j         d#t6          j         d$t6          j         d%t6          j         d&t6          j         d't6          j         d(}d)t6          j         d#t6          j          d*}	d+}
|j!        tE          |j!                  }
|                    d,           |                    d-|
            |                    d.           |                    d/           |                    d0           |                    d.           |                    d1           |                    ||	z             |                    d           |                    |dz             |                    d.           |                    d2           |                    d3           |                    d           | #                    ||$                                           |                    d           |                    d4| %                    t6          j&        |          z             |                    d4| %                    t6          j'        |          z             |                    d5           | (                    |||d67           |                    d           |                    d8           |                    d9           |                    d.           |                    d           |j)        d:         ri|                    d           |                    d;           |                    d<           |                    d.           |                    d           |j)        d=         }|j)        d>         }|d?vr|stU          | j+        d@           |                    dAtE          |dBk                          |                    dCtE          |dDk                          |dEvr|                    dF| d           |dGk    rdH}n|dIk    rdJ}n|,                                }|                    dK| dL           |                    dM| dN           |-                    t/          j.        dOdP          d+                    |                    t/          j/        dQdR                     t`          j1        2                    |           t`          j1        3                    |           t`          j4        3                    |           |-                    tj          j6                   |                     |dS           |                    d           |                    dT           |                    dU|j7        z             tp          j9        "|                    dVt6          j:        z             |                    d.           |                    dWt6          j        z             |                    dXt6          j        z             |                    dYt6          j;        d#t6          j<        d*           |                    dZt6          j        z             |                    t/          j/        d[d                     t{          |          r*|                    t/          j/        d\d]                     d S d S )^Nz/* BEGIN: Cython Metadata   T)r;  	sort_keyszEND: Cython Metadata */rF   z#ifndef PY_SSIZE_T_CLEANz#define PY_SSIZE_T_CLEANz#endif /* PY_SSIZE_T_CLEAN */InitLimitedAPIr  z#ifndef Py_PYTHON_Hzg    #error Python headers needed to compile C extensions, please install development version of Python.z!#elif PY_VERSION_HEX < 0x03080000z'    #error Cython requires Python 3.8+.#elser   z#endif /* Py_PYTHON_H */r   )__version__z#define __PYX_ABI_VERSION "r   _"z#define CYTHON_HEX_VERSION %sz!#define CYTHON_FUTURE_DIVISION %dCythonABIVersionrJ  CModulePreambleCppInitCode	CInitCodePythonCompatibilityMathInitCodez/#define __PYX_MARK_ERR_POS(f_index, lineno)  {  = z[f_index]; (void) z; z = lineno; (void) z;%s (void) z; }r   r   r   z)#ifndef CYTHON_CLINE_IN_TRACEBACK_RUNTIMEz*#define CYTHON_CLINE_IN_TRACEBACK_RUNTIME r   z!#ifndef CYTHON_CLINE_IN_TRACEBACKzC#define CYTHON_CLINE_IN_TRACEBACK CYTHON_CLINE_IN_TRACEBACK_RUNTIMEz#if CYTHON_CLINE_IN_TRACEBACKz.#define __PYX_ERR(f_index, lineno, Ln_error) \z:    { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; }z
#define %sz/* Early includes */F)latezL#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS)z!#define CYTHON_WITHOUT_ASSERTIONSccomplexz#if !defined(CYTHON_CCOMPLEX)z#define CYTHON_CCOMPLEX 1c_string_typec_string_encoding)bytes	bytearrayzGa default encoding must be provided if c_string_type is not a byte typez/#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII asciiz.#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 utf8)r  r  z'#define __PYX_DEFAULT_STRING_ENCODING "r  	ByteArrayr  Unicodez*#define __Pyx_PyObject_FromString __Pyx_Py_FromStringz1#define __Pyx_PyObject_FromStringAndSize __Pyx_Py_FromStringAndSizeTypeConversionszTypeConversion.cFormatTypeNamezObjectHandling.cPretendToInitialize#if !CYTHON_USE_MODULE_STATEzstatic PyObject *%s = NULL;zstatic PyObject *%s;zstatic int %s;zstatic int %s = 0;zstatic const char * const zstatic const char *%s;FastTypeChecksPythranConversionzCppSupport.cpp)>r   r   jsondumpsr  r   re   rf   r   sortkeylocationINITIALrl  r   rF   r  r  r   r   divisionr  future_directivesr   r
   rb  rB   cplusr   filename_cnamefiletable_cnamelineno_cnameclineno_cnameline_c_macror;   intr   r   r   r   r   r   r@   r   r_   titler
  r	  r   r   c_long_typecreate_to_py_utility_codecreate_from_py_utility_code
c_int_typer   branch_prediction_macrosmodule_cnamer   
pre_importpreimport_cnamecfilenm_cnamefile_c_macror!   )rP   rA   rB   r  metadataru  rl   r  mark_errpos_code
cline_infodefault_cline_runtimer  r  c_string_func_names                 r(   rV  z#ModuleNode.generate_module_preamble
  s^	    	JJ2333JJtz(1EEEFFFJJ0111JJrNNN

-...

-...

2333T#3444#.//11{7JKKK 	  	 C|s{**		$

()))

 C 	D 	D 	D

6777

<===

7%%&@AAA""""""

Q1D1DS#1N1NQQQRRR

25F{5S5SSTTT

6Os{<<> 	? 	? 	? 	))/1DEE	G 	G 	G 	T#4555;$ 	4  }5555  {333T#8999T>222
% *0*@ ,  #  *	  +   	 I-HH&2EHHH
 !"&2$'(C$D$D!

>???

W@UWWXXX

8

6777

XYYY

8

2333

#j0111

7

#b()))

8

DEEE

OPPP

2//cjjllCCC

2

<$--0Es"K"KKLLL

<$--0G"M"MMNNN

)***s$5t%HHH

2

abbb

6777

8

2>*% 	JJrNNNJJ6777JJ2333JJx   JJrNNN7N+>? 666?P6$(efff

hSIZ^eIeEfEfhhiii

fCHY]cHcDdDdffggg$555JJUARUUUVVVK''!,e##!*!.!4!4!6!6

_@R___```

mGYmmmnnn+,=?QRRSTUVVV[45EGYZZ[[[ 	88===::3???99#>>>/000T#8999

2

1222

033CCDDD)JJ-0FFGGG

8

#f&99:::

'&*>>???


6;O;O;OQWQdQdQdefff

+f.CCDDD[45EGZ[[\\\# 	a  !89LN^!_!_`````	a 	ar*   c                    t           j        }|                    d           |                    d|z             |                    d|z             |                    d|z             |                    d           |                    d|z             |                    d           |                    d|z             |                    d	           |                    d
           |r|                    d|z             no|                    d           |                    d|z             |                    d           |                    d|z             |                    d           |                    d           d S )Nz#ifdef CYTHON_EXTERN_Cz    #undef %sz    #define %s CYTHON_EXTERN_Cz#elif defined(%s)z    #ifdef _MSC_VERzf    #pragma message ("Please do not define the '%s' macro externally. Use 'CYTHON_EXTERN_C' instead.")z	    #elsez[    #warning Please do not define the '%s' macro externally. Use 'CYTHON_EXTERN_C' instead.z
    #endifr  z    #define %s extern "C++"z  #ifdef __cplusplusz    #define %s extern "C"z  #elsez    #define %s externz  #endifr   )r   r   r   )rP   ru  r   r   s       r(   r   z-ModuleNode.generate_extern_c_macro_definition  s   $

+,,,

?T)***

3d:;;;

&-...

()))

}  AE  E  	F  	F  	F

;

pswwxxx

<   

7 	#JJ4t;<<<<JJ-...JJ2T9:::JJy!!!JJ.5666JJz"""

8r*   c                     |                     d           |                     d           |                     d           d S )Nz#ifndef DL_IMPORTz  #define DL_IMPORT(_T) _Tr   )r   )rP   ru  s     r(   r   z#ModuleNode.generate_dl_import_macro  s@    

&'''

/000

8r*   c                 @   t          |j                                        t          j                  D ]Q}|j        |j        k    r|r|                    |           *|j        |j        k    r|r|                    |           R|r|	                    d           d S d S )Nr  z#include <omp.h>)
r   re   rf   r   r$  r%  EARLYrl  LATEputln_openmp)rP   rA   r  ru  rE  r  rl   s          r(   r   zModuleNode.generate_includes  s    #.//11{7JKKK 	$ 	$C|sy(( $IIdOOO)) $IIdOOO 	2011111	2 	2r*   c                 4   ddl m}m} |                    d           |                    dt          j        z             |j        j        r|j        j        D ]}|                                } ||          r|	                                }t          j        |                                          }t          |          }|                    d|                                z             n|                    d           |                    d           d S )Nr   )isabsr   rF   z!static const char* const %s[] = {%s,0};)os.pathrG  r   r   r   r+  r   filename_listget_filenametable_entryget_descriptionpathlibPathas_posixr$   r   )rP   ru  rG  r   r@  	file_pathescaped_filenames          r(   rj  z"ModuleNode.generate_filename_table  s   ++++++++

2

69OOPPP) 	#/= K K'??AA	5## > + ; ; = =I#L33<<>>	#6y#A#A 

5#3#G#G#I#IIJJJJK JJsOOO

4r*   c                     d S r#   r   rP   rA   ru  s      r(   generate_type_predeclarationsz(ModuleNode.generate_type_predeclarations  s    r*   c                    |D ]}|j         s|j        }|j        r|j        s|j        r|                     ||           =|j        r/|j        s(|j        r!|                     |j        j	        |           s|j
        r|                     ||           |D ]}|j         s|j        }|j        r|                     ||           .|j        s|j        r|                     ||           S|j        r|                     ||           q|j        r/|j        s(|j        r!|                     |j        j	        |           |j        r|                     ||           |j
        r|                     ||           d S r#   )r  rr   
is_typedefis_struct_or_unionis_cpp_class$generate_struct_union_predeclarationr  is_fusedr  struct_entryr  r  generate_typedefr   r   generate_enum_definition generate_struct_union_definitiongenerate_cpp_class_definitionr  )rP   r   ru  ru   rr   s        r(   r   z$ModuleNode.generate_type_header_code  s    " 	G 	GE$ 
Gz? G, G0A G==eTJJJJ^ GDM Gej G==ej>UW[\\\\+ G::4FFF! 	C 	CE$ Cz? C))%6666\ 	CT%5 	C11%>>>>, C99%FFFF^ CDM Cej C99%*:QSWXXXX& C66udCCCC+ C66tTBBB	C 	Cr*   c                     |                     d           |j        D ]U}|j        }|j        sE|j        }|                    d          r|dd          }n|}|                     d|d|d           Vd S )NrF   __pyx_   typedef struct z __pyx_gcc33_r   )r   rp   rr   typedef_flagr  r  )rP   rA   ru  ru   rr   r   r  s          r(   generate_gcc33_hackzModuleNode.generate_gcc33_hack  s    

2( 		! 		!E:D$ !+??8,,  8DDD


DD$$$  ! ! !		! 		!r*   c                 "   |j         j        }|j        }|j        r(|j        s!	 |j        d         }n# t          $ r |}Y nw xY w|}|                    |j                   |	                    d|
                    |j                  z             d S )Nnumeric_typedefsztypedef %s;)rr   typedef_base_typer/   
is_numericis_cpp_class_scoper   KeyErrormark_posr_   r   r   r   )rP   ru   ru  r  enclosing_scopewriters         r(   r^  zModuleNode.generate_typedef  s    J0	+ 	(J 	)*<=    F	"""]Y%?%?%L%LLMMMMMs   1 A A c           
      B    |j         r|d|d|d|d|d
S |d|dS )Nr   z
;
typedef r   )rf  )rP   rr   kindr   s       r(   sue_predeclarationzModuleNode.sue_predeclaration  sL     	+ddddddDDD" "  $ttTTT**r*   c                    |j         }|j        rA|j        r:|                    dd                    d |j        D                       z             |                    |                     ||j        |j                             d S )Nztemplate <typename %s>z, typename c                 6    g | ]}|                                 S r   r*  r   Ts     r(   r   zCModuleNode.generate_struct_union_predeclaration.<locals>.<listcomp>%  s$    DDD))++DDDr*   )rr   rZ  	templatesr   r  rs  rr  r   rP   ru   ru  rr   s       r(   r[  z/ModuleNode.generate_struct_union_predeclaration!  s    z 	G 	GJJ/-2D2DDDT^DDD3F 3F F G G G

4**4DJGGHHHHHr*   c                     |d|d}d}||fS )Nr    {rJ  r   )rP   rr   rr  r   headerfooters         r(   sue_header_footerzModuleNode.sue_header_footer(  s#    "ddDDD)v~r*   c                    |                     |j                   |j        }|j        }|r|j        }|j        o|j        }|r+|j        dd}|j                            t                     | 
                    |||j                  \  }}|ri|                    d           |                    d           |                    d           |                    d           |                    d           |                    |           |j        }	|	D ]7}
|                    d|
j                            |
j                  z             8|                    |           |rm|                    d           |                    d	           |                    d           |                    d
           |                    d           d S d S d S )Nr   __Pyx_PACKEDz#if defined(__SUNPRO_C)z  #pragma pack(1)z#elif !defined(__GNUC__)z  #pragma pack(push, 1)r   %s;z  #pragma pack()z  #pragma pack(pop))rn  r_   rr   r/   rr  	is_structpackedr   r   packed_struct_utility_coder  r   r   r   r   )rP   ru   ru  rr   r/   rr  r  r}  r~  r   attrs              r(   r`  z+ModuleNode.generate_struct_union_definition-  s   ei   z
 	%9D^3F N"&)))^^< 112LMMM&&tT4:>> FF %

4555

.///

5666

4555

8$$$JJv+K# D D

DI66tzBBBD D D DJJv %

4555

-...

5666

0111

8$$$$$3	% 	%(% %r*   c                 $   |r|                     |j        dd                    |          d           |p|o|j        j         }|r|                                 |r|D ]}	|                    |	d           |r3|                     |j        dd                    |          d           |r|                                 |                     d           d S |                     |j        dd                    |          d           d S )N(r   z) {Fnanny);r   )r   r   r  rr   nogilput_ensure_gilput_init_var_to_py_noneput_release_ensured_gil)
rP   	arg_decls	arg_namesis_implementingpy_attrsconstructorrr   ru  	needs_gilr  s
             r(   generate_cpp_constructor_codez(ModuleNode.generate_cpp_constructor_codeL  s?    	GJJTZZZ91E1E1E1EFGGG P[%O9I9O5OI &##%%% D$ D DD00U0CCCC R

(9(9(9499Y;O;O;O;OPQQQ /,,...JJsOOOOOJJDJJJ		)0D0D0D0DEFFFFFr*   c           
      t   |                     |j                   |j        }|j        }|r|j        r:|                    dd                    d |j        D                       z             |                    d|j        z             |j	        r<d                    d |j	        D                       }|                    d|z             |                    d           | 
                    |j        |           d	 |j                                        D             }d
}d }d }	|j        D ]}
|
j        j        r"|
j        j        r|                    d           nR|
j        dk    r|                    d          }n1|
j        dk    r|
}	n#|
j        j        r|                    d           d}|                    d|
j                            |
j                  z             d|j        j        v }|s|rD|r"|                                D ]}g }g }|j        j        d t1          |j        j                  |j        j        z
           D ]C}|                    |                                           |                    |j                   D|j        j        r[|                    |j        j                            t:          j                             |                    t:          j                   |sd}g }|                     |||||||           ng }g }|                     |||||||           |	s|s|r|r|                    d           |r|                    d|j        z             |r|                                  |	r|                    d|	j        z             |r0|D ]}
|!                    |
d
           |"                                 |                    d           n|                    d|j        z             |r|r|                    |j        d|j        d           |                                  |j        D ]J}
|
j        j        s<|                    |
j        d|
j        d           |#                    |
d
           K|"                                 |                    d           |                    |j        d|j        d           |                    d           |                                  |j        D ]a}
|
j        j        sS|!                    |
d
           |                    |
j        d|
j        d           |#                    |
d
           b|"                                 |                    d           |                    d           |                    d           nJ|                    |j        d|j        d           |                    |j        d|j        d           |                    d           d S d S ) Nztemplate <class %s>z, class c                 6    g | ]}|                                 S r   rv  rw  s     r(   r   z<ModuleNode.generate_cpp_class_definition.<locals>.<listcomp>d  s$    HHHAQ--//HHHr*   	struct %sz	, public c                 6    g | ]}|                                 S r   rv  )r   
base_classs     r(   r   z<ModuleNode.generate_cpp_class_definition.<locals>.<listcomp>i  s$    ]]]ZZ6688]]]r*   z : public %sr|  c                 8    g | ]}|j         j        |j        |S r   )rr   is_pyobjectis_inherited)r   r  s     r(   r   z<ModuleNode.generate_cpp_class_definition.<locals>.<listcomp>m  sC     F F Fa6-F67nF F F Fr*   Fstatic z<init>z<del>zvirtual Tr  rN  z~%s() {z%s();r  r   z~%s();z(const z& __Pyx_other) {z = __Pyx_other.r   z& operator=(const zif (this != &__Pyx_other) {zreturn *this;z& __Pyx_other);rJ  )$rn  r_   rr   r/   ry  r   r  r
  r   base_classesr   r   r   rf   r   is_cfunctionis_static_methodr   lookup_herer   r   r   all_alternativesoriginal_argslenargsoptional_arg_countrW   op_arg_structr   optional_args_cnamer  r  put_var_xdecrefr  put_var_incref)rP   ru   ru  rr   r/   base_class_declr  has_virtual_methodsr  
destructorr  r  constructor_alternativer  r  argdefault_constructors                    r(   ra  z(ModuleNode.generate_cpp_class_definition]  s   ei   z
 ]	~ K

0:??HHHHH4J 4J J K K K HH[4:-...  ;"-"2"2]]4K\]]]#_ #_/9:::JJt**5+=tDDDF F5=#7#7#9#9 F F FH"'KJ) 
K 
K9) /di.H /HHY''''Y(**"'"3"3H"="=KKY'))!%JJY+ /HHZ(((*.'

549#=#=dj#I#IIJJJJ+t/?/EEO Ah A A3>3O3O3Q3Q Q Q/$&	$&	#:#?#M w%<%A%F!G!GH_HdHw!w w$y 8 8C%,,S-A-A-C-CDDD%,,SY777727J I%,,-D-I-W-h-hio  jD  .E  .E  F  F  F%,,V-GHHH( +26/(*I::9iQ`bj  mD  FJ  LP  Q  Q  Q  QQ !#I "I66y)_^fhsuy{  A  A  A 6X 6)< 6& )HHZ(((" 6JJy4:5666 .++---! ?

7Z-=#=>>> 7$, D DD 00U0CCCC44666JJsOOOOJJx$*4555 c" cJJ


DJJJWXXX''))) % 1 C C#y5 C JJTZZZ'XYYY //E/BBB00222JJsOOOJJ4:::W[WaWaWabcccJJ<===''))) % 1 C C#y5 C 00U0CCC JJTZZZ'XYYY //E/BBB00222JJsOOOJJ///JJsOOOOJJtzzz4:::VWWWJJ$***VZV`V`V`abbbJJt{]	 ]	r*   c                 (   |                     |j                   |j        }|j        p|j        pd}|j        j        rdnd}|                     |||          \  }}|                    |           |j        }|st          |j        d           n|d         }	|D ]#}
|
j
        |
j
                            |           $|D ]}
|
j
        !|
j                            d          d         }n<|
j                            d          d         d|
j
                                        }|
|	ur|dz  }|                    |           |                    |           |j        j        r*|j        j        r |                    d	|d
|d           d S d S d S )NrF   z
enum classenumzDEmpty enum definition not allowed outside a 'cdef extern from' blockrM  z::r  ,ztypedef enum r   r   )rn  r_   rr   r   r   r   r  r   enum_valuesr   
value_nodegenerate_evaluation_codesplitr   r   rf  )rP   ru   ru  rr   r   rr  r}  r~  r  
last_entryvalue_entry
value_codes               r(   r_  z#ModuleNode.generate_enum_definition  s   ei   z{.ej.B$z5A||6//dDAA

6' 	'%)cdddd$RJ* J J)5*CCDIII* 	' 	')1!,!2!8!8!>!>r!BJJ $)//55b999#.55777#9J j00#%J

:&&&&

6: 	Az& A


DDD$$$?@@@@@	A 	AA Ar*   c                 ~   |                     d           |j        j        }|r|j        dk    rD|j        s=|                     t
          j        dt          j        dd          d|d           d S |j        dk    r?|                     t
          j        dt          j        dd          d|d           d S d S d S )	NrF   externr   r5  r6  r   r   	DL_EXPORT)	r   rr   r$  r   r  r   r   r   r7  )rP   ru   ru  r   s       r(   r  z*ModuleNode.generate_typeobj_predeclaration  s    

2z' 
	8++E4E+

)))*>;GGGGDD      !X--

)))*>;GGGGDD     
	 
	 .-r*   c                 J   |j         sd S |                    |j                   |j        }|j        }|                     |           |j        r|                    d           |                    d|j        z             |j        r<|j        j        r0|                    d|j        j        dt          j
        d           |j        D ]A}|j        s8|                    d|j                            d|j        z            z             B|                    d           d S d S )	NrF   zstruct %s {struct r   r   r  z(*%s)rJ  )r  rn  r_   rr   r/   specialize_fused_typesr  r   r  r   obj_base_cnamer   r  r   r   )rP   ru   ru  rr   r/   method_entrys         r(   r  z)ModuleNode.generate_exttype_vtable_struct  s>   z 	Fei   z
##E***  
	JJrNNNJJ}t'<<===~ ,$."A ,


N333)))+ , , , !& 3 i i#0 iJJu|'8'I'I'T`TfJf'g'gghhhJJt
	 
	r*   c                     |j         sd S |                    |j                   |j        }|j        r(|                    d|j        d|j        d           d S d S )Nstatic struct  *r   )r  rn  r_   rr   vtabptr_cnamer   r  rz  s       r(   r  z/ModuleNode.generate_exttype_vtabptr_declaration  s    z 	Fei   z 	%JJJ%%%"""$ % % % % %	% 	%r*   c                 8   |j         sd S |                    |j                   |j        j        j        D ]d}|j        s[|j        rT|j                            |j                  }|	                    |j
                  }|                    d||d           ed S )Nr  r   )r  rn  r_   rr   r/   r   r  final_func_cnamer   build_function_modifiersfunc_modifiersr   )rP   ru   ru  r  declaration	modifierss         r(   r  z5ModuleNode.generate_exttype_final_methods_declaration  s    z 	Fei   !J,: 	F 	FL, F1N F*/@@ 13 3 99,:UVV	


YYDEEE	F 	Fr*   c                 v    |j         sd S |                    |                     |d|j                             d S )Nstruct)r/   r   rs  r  )rP   rr   ru  s      r(   r  z,ModuleNode.generate_objstruct_predeclaration%  s>    z 	F

4**44;OPPQQQQQr*   c                    |                     |j                   |j        sd S |                     |d|j                  \  }}|                    |           |j        }|rB|j        }|dk    rd}|                    d|j                 |dt          j	        d           n|                    d           |j
        r9|j        r|j        j
        s&|                    d|j        d	|j
        d           |j        j        D ]}|j        rt          }n|j        }|j        r|                    |j                  }	n|                    |j                  }	|j                            |           |                    d
|	z             |                    |           |j        (|                    d|j        d|j        d           d S d S )Nr  r5  PyHeapTypeObject)r  rF   r   r   PyObject_HEADr  r  r  re  )rn  r_   r/   r  r  r   r  rf  r   r  vtabslot_cnamer  r   is_declared_genericr	   rr   is_cpp_optionalcpp_optional_declaration_coder   r   use_entry_utility_codeobjtypedef_cname)
rP   rr   ru  r}  r~  r  basestruct_cnamer  	attr_typedecls
             r(   r  z(ModuleNode.generate_objstruct_definition*  s   dh z 	F""443GHH 	

6N	 	!(8>11#5 JJ#I$:;;$$$)))+, , , , JJ! ! ! 	* 	*4>;X 	*JJJ)))''')* * * J* 
	% 
	%D' &*		 I	# > >>tzJJ 11$*==J--d333JJut|$$$$

6 ,JJJ$2F2F2FH]H]H]^_____ -,r*   c                 4   |d         }|d         }|d         }|                                 }|j        D ]}	|s|	j        r|                    d|	j        j        z             |                    d|	j        j        z             |                    d|	j        j        z             |	j        j        f|                    d|	j        j        z             |                    d|	j        j        z             |                    d|	j        j        z             d S )NrH  rK  rL  PyTypeObject *%s;!Py_CLEAR(clear_module_state->%s);z$Py_VISIT(traverse_module_state->%s);PyObject *%s;)insertion_pointrp   r   r   rr   r#  r$  )
rP   rA   ru  r  r   rH  rK  rL  module_state_typeobjru   s
             r(   r  z(ModuleNode.generate_c_class_declarationsV  sS   ">2()=> +,C D+;;==( 	3 	3E 3U1 3""#69Q#QRRR"((7J,-. . . &++:J,-. . . :+7(..AY/YZZZ&,,;
023 3 3 *//>
023 3 3	3 	3r*   c                    |j         rd S |j        D ]}|j        s |j        s|j        dk    r|j        s|j        s+d }d }d }|j        dk    rt          j        }d}nT|j        dk    rt          j        }|rd}n8d}n5|j        dk    r*d}d }|j	        |j
                            |j	                  }|j
        }|j        }	|j        r<|s:d}d }t          |          }|                    t          j        |j                  }	d}|r|                    d|z             |j        r+|                    |                    |	|	                     n*|                    |                    |	|	                     ||                    d
|z             |                    d           |j        |	k    r!|                    d|j        d|	d           |                    |           d S )Nprivater  r6  r   r  staticr   z%s dll_linkage = %sr   r   r  r  )is_cython_builtinr   r  
in_closurer   r   r  r   r   initrr   literal_coder   r   r%  varptr_prefixr   r
  r  r  r   put_safer   r  )
rP   rA   ru  r  ru   storage_classr  r  rr   r   s
             r(   r  z*ModuleNode.generate_cvariable_declarationsm  sM     	F_ .	. .	.E! U%5 %22E<P2TYT^2 MKD8++ & 5)!X-- & 5 ."-KK"-KK!Y.. (":) :225:>>D:DKE# J  ("~~

6#7DD 0.///$ 5;;{ < 4 4 5 5 5 5 ..{ / 4 4 5 5 5gn---JJsOOO{e##


eeeDEEE&&u----].	. .	.r*   c                     |j         D ]G}t          j        o|j        dk     }|j        s|j        dk    s	|j        s|rt          ||||           Hd S )Nr  r   )r   r   cimport_from_pyxr   r  r   generate_cfunction_declaration)rP   rA   ru  r  ru   from_pyxs         r(   r  z*ModuleNode.generate_cfunction_declarations  s|    & 	M 	ME/T8HH8T4TH
 M'833y 4 4 /uc4LLL	M 	Mr*   c                 H   |j         D ]}|j        s|j        dk    r|                    |j                            |j                             |j        7|j                            |j                  }|	                    d|z             |
                    d           d S )Nr   r  r   )r   r  r   r
  rr   r   r   r  r  r  r   )rP   rA   ru  ru   r  s        r(   r\  z(ModuleNode.generate_variable_definitions  s    _ 	  	 E$  )9X)E)E44U[AABBB:) :225:>>DMM'D.111

3	  	 r*   c                    |j         }|j        D ]}|j        dk    r|j        }|j        }|r|                     ||           |                     |||           |                     ||           |                     ||           |	                                rB| 
                    |||           |                                r|                     |||           |                    dg          r|                     ||           |                    ddg          r|                     ||           |                    g d          r+t!          | j        dd           |                    d           |                    d	d
g          r|                     ||           |                    ddg          r|                     ||           |                    ddg          r|                     ||           |                    dg          r|                     ||           |                    ddg          r|                     ||           |j        s3|j        s,|                    dg          r|                     ||           |                    t8          j                  r|                     ||           n#d|j        v rt!          |j         j        d           t9          j!        |j"        j                  j#        D ]@}|j$        r7|                    |j%                  r| &                    ||||j                   A| '                    ||           | (                    ||           | )                    ||           |                    d           | *                    ||           |                    d           | +                    |||           |                    d           d S )Nr  __getitem____setitem____delitem__)__getslice____setslice____delslice__z__getslice__, __setslice__, and __delslice__ are not supported by Python 3, use __getitem__, __setitem__, and __delitem__ insteadr   zN#error __getslice__, __setslice__, and __delslice__ not supported in Python 3.r  r  __getattr____getattribute____setattr____delattr____get____set__
__delete____dict__total_orderingMtotal_ordering directive used, but no comparison and equality methods definedz#if CYTHON_USE_TYPE_SPECSr  r   ),r   rp   r   rr   r/   generate_exttype_vtablegenerate_new_functiongenerate_del_functiongenerate_dealloc_functionneeds_gcgenerate_traverse_functionneeds_tp_cleargenerate_clear_functiondefines_any_specialgenerate_getitem_int_functiongenerate_ass_subscript_functionr   r_   r   generate_ass_slice_functiongenerate_getattro_functiongenerate_setattro_functiongenerate_descr_get_functiongenerate_descr_set_functionis_closure_class_scopeis_defaults_class_scopedefines_anygenerate_dict_getter_functionr   richcmp_special_methodsgenerate_richcmp_functionr@   parent_typeget_slot_tabler   PyNumberMethodsis_binopuser_methodsgenerate_binop_functiongenerate_property_accessorsr_  generate_getset_tablegenerate_typeobj_specgenerate_typeobj_definition)rP   rA   ru  rq   ru   rr   r/   slots           r(   r^  z'ModuleNode.generate_typeobj_definitions  sh   -( 8	) 8	)E 8++z
 2)00===..udEBBB..ud;;;225$???~~'' M77tUKKK //11 M 88eLLL00-AA H::5$GGG00-1OPP J<<UDIII001a1a1abb u!XYZ\ \ \ 

#sttt00..1QRR F88EEE00-AS1TUU E77tDDD00-1OPP E77tDDD00)== F88EEE00)\1JKK F88EEE!8 HE<Y H_d_p_pr|q}_~_~ H::5$GGG001RSS q66udCCCC)U-=== 1 5 oq q q !* 89I9T U U e W W= WU-F-FtGX-Y-Y W 88dEIVVV44UDAAA..ud;;;..ud;;;JJ:;;;..ud;;;JJw'''445EudSSSJJx(((q8	) 8	)r*   c                 r    |j         }|j        r(|                    d|j        d|j        d           d S d S )Nr  r   r   )r  vtable_cnamer   r  rP   r/   ru  rr   s       r(   r  z"ModuleNode.generate_exttype_vtable  s^      	$JJJ%%%!!!# $ $ $ $ $	$ 	$r*   c                     |j         }|                    |                    d          d|                                d           d S )Npz = (z)o;)r  r   r   r*  r)  s       r(   generate_self_castzModuleNode.generate_self_cast  s[     

%%c****++----/	0 	0 	0 	0 	0r*   c           
         t          j        dd          }                    d          }|                              |k    rd S j        }|j        }                                \  }\  }	}
}j        j        }j        rg }	fdj	        D             }
                    d          }|r	|j        sd }|s	|r
|j        sd}nd}|rd}nj                            dd          }                    t          j                  }                    t          j                  }|r|j        d         }|                    d           |                    d	           |                    d
j                            |          |fz             |                    d|z             |                    d           |                    t,          j        dd| d| dd           |j        p|
p|p|	p|}|r0|                    dj                            d          z             |rZt          j        |          }|j        }|j        s|                    |          }|d| d}|                    d|z             n]|                    d           |                    d           |                    d           |                    d           |                    d           |ri|j                            t=          j        dd                     |rd}nd}|                    dd          }|                    d	           |                    d |                    |          d!|d"|d#           |                    d$|                    |          d%|                    |          d&           |                    d'|z             |                    d(                                            r|                    d)           |                    d*           |                    d           |                    d+           |s|                    d,           |                    d-           |sZ|                    d.           |                    d/t          j!        d0t          j"        d1           |                    d2           |                    d3           |r|s|                    d2           |s|                    d           |r+|                    d4|#                    d5          z             d6}|j        rh|}|j        r&|j        j$        r|j        }|j        r|j        j$        ||urd7|j$        z  }nd}|                    d8|j        d9||j%        d:           |D ]}|j&        '                    ||d8;            |	D ]N}|j(        d<k    r)d}|)                    d8|j*        d=|j*        d>           6|+                    |d?d6@           O|D ]<}|                    dA|j*        z             |                    dB|j*        z             =|
D ]}|                    dC|j*        z              |j*        dDk    r|                    dE           |rJ|j        rdFt          j!         d0t          j"         dG}ndH}d}|                    dI|j,        dJ|dK           |                    dL           |rG|                    dM           |-                    d5t\          d6@           |                    dN           |                    d2           |/                                 d S )ONtp_new	__cinit__c                 H    g | ]}|j                                       |S r   )rr   needs_explicit_constructionr   ru   r/   s     r(   r   z4ModuleNode.generate_new_function.<locals>.<listcomp>  s?     *
 *
 *
z55e<<*
*
 *
 *
r*   rF   CYTHON_UNUSED r   freelistmodule_state_contents#if CYTHON_USE_FREELISTSz%s[%d];zint %s;r   zPyTypeObject *t, zPyObject *a, zPyObject *kT)needs_prototyper  r+  z__Pyx_PyType_GetSlot(z, tp_new, newfunc)zPyObject *o = %s(t, a, k);zPyObject *o;z##if CYTHON_COMPILING_IN_LIMITED_APIzAallocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);zo = alloc_func(t, 0);r  IncludeStringHStringTools.czU & (int)(!__Pyx_PyType_HasFeature(t, (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))derefzif (likely((int)(z( > 0) & (int)(t->tp_basicsize == sizeof())z)) {zo = (PyObject*)[--];zmemset(o, 0, sizeof(%s));z(void) PyObject_INIT(o, t);PyObject_GC_Track(o);} else{zBif (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) {zo = (*t->tp_alloc)(t, 0);} else {z-o = (PyObject *) PyBaseObject_Type.tp_new(t, z->z, 0);r   zif (unlikely(!o)) return 0;zp = %s;oFz(struct %s*)p->r  r   extra_access_coder  z" = PyDict_New(); if (unlikely(!p->z)) goto bad;p->%sr  zp->%s.data = NULL;zp->%s.memview = NULL;zp->%s.obj = NULL;__pyx_memoryviewslicezp->from_slice.memview = NULL;zo, z, NULLzo, a, kzif (unlikely(r  z) < 0)) goto bad;z	return o;r  zreturn NULL;)0r   ConstructorSlotmangle_internal	slot_coder  r  get_refcounted_entriesis_final_typeis_internalr   r  
is_specialtrivial_signaturer@   r  r   freelist_namefreecount_namer   r   r   start_slotfuncr   py_objptr_typer  get_base_slot_functionr#  is_builtin_typename_in_slot_module_stater   r
   r   r
  modulestateglobal_cnameempty_tuple	cast_coder  r  rr   generate_explicit_constructionr   r
  r   r  
func_cnameput_decref_clearr	   exit_cfunc_scope)rP   r/   ru  cclass_entrytp_slot	slot_funcrr   r  have_entriesr  
py_buffersmemoryview_slicesrM  explicitly_constructable_attrscinit_func_entryunused_markerfreelist_sizerQ  rR  rH  need_self_castr.  base_type_typeptr_cnametype_safety_check
obj_structneeds_error_cleanupvtab_base_typestruct_type_castru   
cinit_argss    `                            r(   r  z ModuleNode.generate_new_function  s	   +HkBB))(33	U##y00F N	 4466 	@?x->)7 	H*
 *
 *
 *
$0*
 *
 *
&
 !,,[99 	$$4$? 	$# 	-) 	-2B2T 	-MM,M 	@MM!,00Q??M--f.BCC..v/DEE 	)+,CDLr"""9:::y!22=AA,         y>9:::x(((:,hVVVMVVVhl 	 	n 	n 	n - 9%F):Fh98 	  	HJJuu0AA#FFFGGG +	 5eWEEF&/&=#, b*.*H*HI`*a*a'~\1H\\\JJ3f<====JJ~&&&JJ<===JJZ[[[JJ.///JJw   11+,<oNNP P P  @(*%%(%!222T2BB


5666


66~FFFF


TeTeTegh h h 


22=AAAA22>BBBBD E E E 

6CDDD

8999>>## 8JJ6777

8$$$

8$$$

3  a

_```JJ2333   

:&&&


222F4F4F4FH I I I

3

0111 	 	JJsOOO 	!JJx    	8JJy4>>##6#66777
 $ 
	7!N * :~/G/X :!/!9 !* :~/G/X :T))#1N4S#S  #% JJJ###  $"4"4"46 7 7 7 4 	6 	6EJ55eu 6 6 6 6 6  	J 	JEzZ''&*#KKK. / / / / ,,UG5,IIII& 	> 	>EJJ+ek9:::JJ.<==== 	: 	:EJJ*U[89999!888JJ6777 	:1 '_6#A__VEW___

&
"&JJJ +++ZZZ9 : : : 	

	 	 	 	'JJv!!#~U!CCCJJ~&&&

	 	 	r*   c                    t          j        d|j                  }|                    d          }|                    |          |k    rd S |                    d          }||j        sd S |                    d           |j        r|                    d|j        z             |	                    |t          j        ddd           |                    d           |                    d	           |                    d
|j        z             |                    d           |                    d           |                                 |j        r|                    d           d S d S )Ntp_finalize__del__rF   z#if %sPyObject *oFneeds_funcstatePyObject *etype, *eval, *etb;!PyErr_Fetch(&etype, &eval, &etb);%s(o); PyErr_Restore(etype, eval, etb);r   r   )r   get_slot_by_namer@   rJ  rK  r  rO  r   
used_ifdefrS  r   r   r\  r^  )rP   r/   ru  r`  slot_func_cnameru   s         r(   r  z ModuleNode.generate_del_function  sd   ,]E<LMM//>>U##66F!!),,= 0=F

2 	6JJx'"44555E:#9=-inooo

2333

6777

8e..///

5666

3 	!JJx     	! 	!r*   c           	         t          j        dd          }                    d          }j        j        }|                              |k    rd S                     d          }|                    t          j        dd           j        j	        }
                                }                                }	j        sj        s                    d          nd }
|
j        vrd }
j        sj        s                    d          nd }|j        vrd }                                \  }\  }}}fdj        D             }|s|s|s|
s|r|                     |           |r                                r|                    d           |rd}nd	}|                    d
|z             |                    d|z             |                    d           |                    d           |                    d           |                    d           |r|                    d           |	rE|j                            t-          j        dd                     |                    d|z             |
r|                    d           |                     |           |r|                    d           |D ]}|j                            ||d            ||z   D ])}|                    d|j        z  |j        ddd           *|r|j        }|j        s|                    |          }t          j         |          }|Q|r5|j!        r.|j!        
                                r|                    d           |                    d|z             n|j        rQ|r5|j!        r.|j!        
                                r|                    d           |                    d|z             n|r|                    d|z             |                    d           |                    d |d!|d"           |                    d           |                    d#|z             |j                            t-          j        d$d                     nj"        #                    d%d&          }|r;                    tH          j%                  }                    tH          j&                  }|rd'}nd(}j        }|                    d)           |                    d*|                    |          ||'                    d'd+          |fz             |                    |                    |          d,|                    |          d-|(                    d.          d/           |                    d0           |                    d           |                    d1           |                    d2           |                    d3           |                    d4           |                    d1           |                    d5           |                    d6           |                    d           |                    d           |r|                    d           |	r|                    d7           |                    d           |)                                 d S )8N
tp_dealloc__dealloc__rt  __weakref__r  c                 H    g | ]}|j                                       |S r   )rr   needs_explicit_destructionr2  s     r(   r   z8ModuleNode.generate_dealloc_function.<locals>.<listcomp>  s?     )
 )
 )
z44U;;)
)
 )
 )
r*   z#if CYTHON_USE_TP_FINALIZEz!!__Pyx_PyObject_GC_IsFinalized(o)z@(!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))zif (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && %s) {z>if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == %s) {z1if (PyObject_CallFinalizerFromDealloc(o)) return;r   r   zPyObject_GC_UnTrack(o);
PyTrashcanExtensionTypes.cz__Pyx_TRASHCAN_BEGIN(o, %s)z.if (p->__weakref__) PyObject_ClearWeakRefs(o);z+if (p->__dict__) PyDict_Clear(p->__dict__);rD  rE  rG  FT)r  clear_before_decrefhave_gilr?  ry  z4__Pyx_PyType_GetSlot(%s, tp_dealloc, destructor)(o);z+if (PyType_IS_GC(%s)) PyObject_GC_Track(o);r  if (likely(z)) __Pyx_PyType_GetSlot(z", tp_dealloc, destructor)(o); elsez"__Pyx_call_next_tp_dealloc(o, %s);CallNextTpDeallocr4  r   rF   z^ & (int)(!__Pyx_PyType_HasFeature(Py_TYPE(o), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))r6  zIif (((int)(%s < %d) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(%s))%s)) {r:  [z++] = rC  r   r@  rA  #if CYTHON_USE_TYPE_SLOTS(*Py_TYPE(o)->tp_free)(o);r  Dfreefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free);if (tp_free) tp_free(o);__Pyx_TRASHCAN_END)*r   rI  rJ  r  r  rK  rS  r   r   rM  r
  needs_trashcanr  r  r  r   rL  r,  may_have_finalizer   r   r   r
   r   generate_usr_dealloc_callrr   generate_explicit_destructionput_xdecref_clearr   r#  rV  rW  rU  r/   r@   r  r   rQ  rR  r   rZ  r^  )rP   r/   ru  r`  ra  r  r}  rM  r
  r  weakref_slot	dict_slotr  r  rd  explicitly_destructable_attrsfinalised_checkru   
base_cnamer  rh  rQ  rR  rk  rr   s    `                       r(   r	  z$ModuleNode.generate_dealloc_function  s   +L-HH)),77	%/	U##y00F//==E:#9<WWW)7>>##--//@E@\  I`e`}  Iu((777  EIu000L:?:V  CZ_Zw  CE%%j111  C	E---I.3.J.J.L.L++Ha*)
 )
 )
 )
$0)
 )
 )
%
  	14 	18I 	1\ 	1]f 	1##E4000 	! 7 7 9 9 	!JJ3444 X"E W  JJSUdef f f
 JJWZiijjjJJJKKKJJsOOOJJsOOOJJx    	2 JJ0111 	H--'6HIIK K KJJ4FGGG 	I
 JJGHHH 	&&ud333 	FJJDEEE2 	[ 	[EJ44T5TY4ZZZZ!22 	L 	LE""7U[#8%*E7;d # L L L L  J	 "0J, H!;;JGG
"9%IIJ% 8	 8IO4L4L4N4N 8 JJ6777

8j01111* V 8	 8IO4L4L4N4N 8 JJ6777

QT^^____ [ JJLzYZZZ 

9:::


JJ


, - - -

8$$$

?/QRRR 11+,?ASTTV V V V ",00Q??M   % 5 5f6J K K!&!6!6v7L!M!M  z(*%% y & (

5666

_66~FF%--b-==)	c+ +, , , 

22=AAAA22>BBBBNN3'''') * * * 

8$$$

8$$$

3JJ2333JJ3444JJwJJsOOOJJ]^^^JJ1222JJsOOOJJx     

3 	-JJ+,,,

	 	 	r*   c                    |                     d          }|r|j        sd S |                    d           |                    d           |                    d           |                    d           |                    d|j        z             |                    d           |                    d           |                    d	           d S )
Nr  rA  rw  rx  z&__Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);ry  z&__Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);rz  r   )r  rO  r   r\  )rP   r/   ru  ru   s       r(   r  z$ModuleNode.generate_usr_dealloc_call`  s    !!-00 	E, 	F

3

2333

6777 	

;<<<

8e..///

;<<<

5666

3r*   c                 "   t          j        d          }|                    d          }|j        j        }|                    |          |k    rd S |                    |t          j        dd           |	                    d          \  }\  }}	}
| }d}|
                    d           |s|	r|                     ||           |rt          j        ||          }|r|
                    d|z             nz|j        rc|j        }|
                    d           |
                    d| d	           |
                    d
           |
                    d           d}n|                    |j                  }|
                    d           |
                    d           |
                    d|z             |
                    d| d	           |
                    d           |
                    d           |
                    d           |
                    d|z             |
                    d           |j                            t%          j        dd                     d}|s|r|
                    d           |
                    dt)          |            d           |
                    d           |
                    d           |j                            t%          j        dd                     |D ]q}d|j        z  }t          j        t.          |j        |          }|
                    d|z             |
                    d|z             |
                    d           r|	D ]Q}|j        dz   }|
                    d|z             |
                    d|z             |
                    d           R|
                    d            |
                    d           |                                 d S )!Ntp_traversez!PyObject *o, visitproc v, void *aFinclude_gc_simplezint e;z!e = %s(o, v, a); if (e) return e;rA  z-traverseproc traverse = __Pyx_PyType_GetSlot(z, tp_traverse, traverseproc);z>if (!traverse); else { e = traverse(o,v,a); if (e) return e; }r   Tr  ze = 0;if (likely(%s)) {z(if (traverse) { e = traverse(o, v, a); }r@  r   z1{ e = __Pyx_call_next_tp_traverse(o, v, a, %s); }zif (e) return e;CallNextTpTraverser  z e = __Pyx_call_type_traverse(o, z, v, a);CallTypeTraverserG  	if (%s) {z!e = (*v)(%s, a); if (e) return e;z.objzif (p->%s) {z$e = (*v)(p->%s, a); if (e) return e;r  )r   GCDependentSlotrJ  r  r  rK  rS  r   c_returncode_typerL  r   r,  rU  rV  r#  rW  r   r   r
   r   r/  r   typecastr	   rr   r^  )rP   r/   ru  r_  r`  ra  r  rb  r  rc  rd  needs_type_traversemaybe_needs_type_traversestatic_callr  ru   var_codevar_as_pyobjectr   s                      r(   r  z%ModuleNode.generate_traverse_functionp  sG   +M::))-88	%/	U##y00FE:#?Psttt ((5(AA 	@?x-> #,m$)!

8 	1z 	1##E4000 $	1#:5'JJK !1

>LMMMM* 1&4


3

mJmmmo o o

[\\\

3,0)) ";;I<STT


9:::

8$$$

.;<<<

mJmmmo o o

EFFF

8$$$

8$$$

NQZZ[[[

-... 11+,@BTUUW W W,0) 	Q"; 	QJJsOOOJJf#B[>[:\:\fffgggJJ)***JJsOOO--'(:<NOOQ Q Q  	 	E,H(1.%*hWWOJJ{X-...JJ:_LMMMJJsOOOO   	 	EK&(EJJ~-...JJ=EFFFJJsOOOO

;

3r*   c                    t          j        d|j                  }|                    d          }|j        j        }|                    |          |k    rd S |                    d          \  }\  }}	}
|s|	s|rd}nd}|                    |t          j
        d| d           |r!t          j        r|                    d           |s|	r|                     ||           |r|t          j        ||          }|r|                    d|z             nK|j        r`|j        }|                    d	           |                    d
| d           |                    d           |                    d           n|                    |j                  }|                    d           |                    d|z             |                    d
| d           |                    d           |                    d           |                    d           |                    d|z             |j                            t+          j        dd                     t          j        r|D ]{}d|j        z  }|                    d|z             |j        r|                    |t4          d           n|                    ||j        d           |                    d           |n"|D ]}|                    d|j        z              |	D ]}|                    d|j        z              |j        dk    r|                    d           |                    d           |                    d           |                                 d S )Ntp_clearFr  rF   r3  rt  zPyObject* tmp;ry  rA  z%inquiry clear = __Pyx_PyType_GetSlot(z, tp_clear, inquiry);zif (clear) clear(o);r   r  r  r@  r   z${ __Pyx_call_next_tp_clear(o, %s); }CallNextTpClearr  rG  ztmp = ((PyObject*)%s);r  zPy_XDECREF(tmp);zPy_CLEAR(p->%s);zPy_CLEAR(p->%s.obj);rH  z(__PYX_XCLEAR_MEMVIEW(&p->from_slice, 1);r  )r   r{  r@   rJ  r  r  rK  rL  rS  r   r  r   clear_to_noner   r,  rU  rV  r#  rW  r   r   r
   r   r   r  put_init_to_py_noner	   rr   r^  )rP   r/   ru  r_  r`  ra  r  rb  r  rc  rd  unusedr  r  ru   r   s                   r(   r  z"ModuleNode.generate_clear_function  s   ,Z9IJJ))*55	%/	U##y00F ((5(AA 	@?x->  	&z 	&Y 	&FF%FE:#?PVMcMcMcddd 	)- 	)JJ'((( 	1z 	1##E4000 	T#:5'JJK T

8k12222* T&4


3

d:dddeee

1222

3 ";;I<STT


9:::

.;<<<

d:dddeee

1222

8$$$

8$$$

AIMNNN 11+,=?QRRT T T   	=! / /,

3d:;;;, L,,T>,OOOO,,T5:U,KKK

-..../ " = =

-;<<<< 	= 	=EJJ-;<<<<!888JJABBB

;

3r*   c                    |                     |t          j        ddd           |                    d           |                    d           |                    d           |                    d           |                    d	           |                    d
           |                    d           |                    d           |                    d           |                    d           |                                 d S )Nsq_itemzPyObject *o, Py_ssize_t iFru  zPyObject *r;z5PyObject *x = PyLong_FromSsize_t(i); if(!x) return 0;z_#if CYTHON_USE_TYPE_SLOTS || (!CYTHON_USE_TYPE_SPECS && __PYX_LIMITED_VERSION_HEX < 0x030A0000)z2r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x);r  zDr = ((binaryfunc)PyType_GetSlot(Py_TYPE(o), Py_mp_subscript))(o, x);r   zPy_DECREF(x);	return r;r   )rS  r   rT  r   r^  )rP   r/   ru  s      r(   r  z(ModuleNode.generate_getitem_int_function  s(    	E:#<iIdv{|||

	 	 	

C	E 	E 	E 	

tuuu

@	B 	B 	B

7

YZZZ

8

	 	 	

	 	 	

	 	 	r*   c                    |j         j        }|                    d          }|                    d          }|                    |t          j        dd           |                    d           |r|                    d|j        z             n|                    d           |                     |ddd	d
|           |                    d           |                    d           |                    d           |                    d           |                    d           |                    d           |                    d           |r|                    d|j        z             n|                    d           |                     |ddd	d
|           |                    d           |                    d           |                    d           |                    d           |                    d           |                    d           |                    d           |	                                 d S )Nr  r  mp_ass_subscript%PyObject *o, PyObject *i, PyObject *vif (v) {return %s(o, i, v);z__Pyx_TypeName o_type_name;tp_as_mappingobjobjargproco, i, vz=o_type_name = __Pyx_PyType_GetFullyQualifiedName(Py_TYPE(o));z'PyErr_Format(PyExc_NotImplementedError,zL  "Subscript assignment not supported by " __Pyx_FMT_TYPENAME, o_type_name);z#__Pyx_DECREF_TypeName(o_type_name);r   r   else {return %s(o, i);zJ  "Subscript deletion not supported by " __Pyx_FMT_TYPENAME, o_type_name);
r  r  r  rS  r   r  r   r\  generate_guarded_basetype_callr^  rP   r/   ru  r  	set_entry	del_entrys         r(   r  z*ModuleNode.generate_ass_subscript_function.  s    %/	%%m44	%%m44	E:#?ASU|}}}

	 	 	 	JJ,y/CCDDDDJJ-/ / ///?,>QZ\`b b bJJOQ Q QJJ9; ; ;JJ^` ` `JJ57 7 7JJ  

	 	 	

	 	 	 	JJ"(*+ + + + JJ-/ / ///?,>QZ\`b b bJJOQ Q QJJ9; ; ;JJ\^ ^ ^JJ57 7 7JJ  

	 	 	

	 	 	r*   c                 $   |r|                     |          }|r%|                    | d| d| d| d| d
           n!|                    | d| d| d| d           |                    d           |                    d| d           d S d S )Nz  f = __Pyx_PyType_TryGetSubSlot(r   r  z f = __Pyx_PyType_TryGetSlot(zif (f)z	return f()typeptr_cname_in_module_stater   )rP   r  substructurer&  functyper  ru  base_tpnames           r(   r  z)ModuleNode.generate_guarded_basetype_callf  s     	-<<YGGK  c

ttttP\tt`dtthptttv v v v 

aakaaTaaU]aaac c cJJx   JJ+4+++,,,,,	- 	-r*   c                 j   |                     d          rd S |                    |t          j        dd           |                    d           g }|j        }|M|j        j        dk    s=|                    |j	                   |j	        j        j
        }||j        j        dk    =||v sJ d }|r%|j        j        dk    r|j        r|n|j        j
        }d|j        v }i t          j        D ]%}|D ] }|                     |          }	|	|	|<    n!&|rfdt          D             }
|
s@dvrd	vrt!          |j        j        d
           nt!          |j        j        d           d}n3dvr d	vrt!          |j        j        d           d}t%          |
          }t          j        D ]D}|                    d                                          }                    |          }	|	|r|dv rH|                    d|z             |	|sJ t          ||f         \  }}}|                    d           |                    d|         j        z             |                    d           |                    d           |                    d           |                    d           ||dk    rG|                    d|rdndz             |                    d           |                    d           n_|dk    rG|                    d|rdndz             |                    d           |                    d           nt/          d |          dv rd}nd	}| }|                    d|         j        z             |                    d           |                    d!           |                    d           |                    d"           |r|                    d#           n|                    d$           |                    d%           |                    d&           |                    d&           nB|r|                    d'           n|                    d(           |                    d%           |                    d&           |                    d)           n|                    d*|	j        z             |                    d&           Fdv rd	vr|s
|                    d+           |                    d           |                    dd         j        z             |                    d           |                    d,           |                    d           |                    d-           |                    d.           |                    d%           |                    d&           |                    d)           |                    d&           |                    d/           |r-|j        r&|                    d0|j        d1|j        d2           |                    d3           |                    d&           |                    d&           |                    d&           |                                 d S )4N__richcmp__tp_richcomparez"PyObject *o1, PyObject *o2, int opzswitch (op) {r  r  c                 "    g | ]\  }}|v 	|S r   r   )r   	from_nameto_name
comp_entrys      r(   r   z8ModuleNode.generate_richcmp_function.<locals>.<listcomp>  s*    hhh(:	7PY]gPgPg)PgPgPgr*   __eq____ne__r  z@total_ordering directive used, but no comparison methods definedFz=total_ordering directive used, but no equality method definedr  )NEEQzcase Py_%s: {zPyObject *ret;zret = %s(o1, o2);z.if (likely(ret && ret != Py_NotImplemented)) {z+int order_res = __Pyx_PyObject_IsTrue(ret);zPy_DECREF(ret);z)if (unlikely(order_res < 0)) return NULL;rD   zif (%s order_res) {z!!!zret = __Pyx_NewRef(Py_False);rB  rE   rF   zret = __Pyx_NewRef(Py_True);zUnknown op z(int eq_res = __Pyx_PyObject_IsTrue(ret);z&if (unlikely(eq_res < 0)) return NULL;z"ret = eq_res ? Py_False : Py_True;z"ret = eq_res ? Py_True : Py_False;zPy_INCREF(ret);r   z%ret = order_res ? Py_False : Py_True;z%ret = order_res ? Py_True : Py_False;zreturn ret;zreturn %s(o1, o2);zcase Py_NE: {z#int b = __Pyx_PyObject_IsTrue(ret);z!if (unlikely(b < 0)) return NULL;zret = (b) ? Py_False : Py_True;z
default: {r  z->tp_richcompare)) return z->tp_richcompare(o1, o2, op);z'return __Pyx_NewRef(Py_NotImplemented);)r  rS  r   rT  r   r  ru   r   rW   r/   r  r#  r@   r   r  TOTAL_ORDERINGr   r_   maxstripupperr  r\  AssertionErrorr^  )rP   r/   ru  class_scopesclsextern_parentr  
cmp_methodclass_scoperu   
comp_namesordering_sourcecmp_typeinvert_compcomp_opinvert_equalseq_funcr  s                    @r(   r  z$ModuleNode.generate_richcmp_functionu  s=   ]++ 	FE:#<>NPtuuu

?###oci&:h&F&F	***)'1C oci&:h&F&F $$$$ 	V39'833#&#4UCC%:K:UM)U-==
#; 	 	J+  #//
;;$-2Jz*E %  	2hhhhnhhhJ 2:--(:2M2ME-1km m m m E-1\^ ^ ^!&:--(*2L2LE-13rsss%*N #&j//#; @	 @	J!'',,2244HNN:..E}n}L8P8P JJ1222}%%%%6D_V`E`6a3Wm 

+,,,

.O1L1WWXXX

KLLL

HIII

,---

FGGG ,$

#8K<XDDUX#YZZZ

#BCCC

:.... D

#8;<VCCTV#WXXX

#ABBB

:....,n-JKKK:--"* #+,9(9JJ2Z5H5SSTTTJJOPPPJJIJJJJJ0111JJGHHH$ I

#GHHHH

#GHHHJJ0111JJsOOOJJsOOOO # L

#JKKKK

#JKKKJJ0111

3

=))))

/%2BBCCCJJsOOOOz!!hj&@&@&@JJ'''JJ'((( JJ*Z-A-LLMMMJJGHHHJJ<===JJ()))JJ:;;;JJ8999JJ()))JJsOOOJJ}%%%JJsOOO

<    	K]8 	KJJJ+++]-H-H-HJ K K K

<===

3

3

3r*   c                 P                        |j                  j        d         r5                    dd|j                                                 d S |j        j        t          j        t          j	        fv rd}dx}n@|j        j        t          j
        t          j        fv rd}dd}nt          |d	|z             d S fd
fd} |j        j                  r@ |j        j                  s+t          |d|j        j        d|j        j        d                                            |                                }|r                    |                                          t%          t'           |j        j                                      }	t%          t'           |j        j                                      }
j        j        }j        j        r                    |          }                    t1          j        dd|j        |	|
 ||j        j        d           ||j        j        d          |||d
          d                                                     |r                    d           d S d S )Nc_api_binop_methodsr   r   
binaryfuncrF   ternaryfuncz, extra_argz, PyObject* extra_argz"Unexpected type slot signature: %sc                 R                         |           }|r|j        r|j        nd S r#   )lookuprO  r\  )method_nameru   r/   s     r(   get_slot_method_cnamezAModuleNode.generate_binop_function.<locals>.get_slot_method_cname	  s/    LL--E',K1AK5##tKr*   c                      |           }|r|d|rdnddS d                     j        j                  ddS )Nr  zright, leftzleft, rightr  z&_maybe_call_slot(__Pyx_PyType_GetSlot(z', tp_base, PyTypeObject*), left, right )name_in_module_stater  r#  )r  r  r\  ru  	extra_arg	func_namer  r/   s      r(   call_slot_methodz<ModuleNode.generate_binop_function.<locals>.call_slot_method	  sy    ..{;;J 	JJ%,?MM-?II  II--e.?.MNNNNII r*   zExtension type implements z() but not z(). The behaviour has changed from previous Cython versions to match Python semantics. You can implement both special methods in a backwards compatible way.	BinopSlotr  F)r  T)
r  	slot_nameoverloads_leftoverloads_right	call_left
call_right
type_cname	slot_typer  extra_arg_decl)r  r   r   )rJ  r  r@   r   	left_slotrK  	signaturer   r  ibinaryfuncpowternaryfuncipowternaryfuncr   r  
right_slotr   preprocessor_guard_codeenter_cfunc_scoper/  boolr  r#  r  r  r   r	  r^  )rP   r/   r&  ru  r_   r  r  r  preprocessor_guardr  r  parent_type_cnamer  r  r  s    ` `        @@@r(   r!  z"ModuleNode.generate_binop_function	  s(   ))$.99	12 	JJJ)))T^5M5Me5T5T5TUVVVF>#	(<i>S'TTT$I)++I^%)*BID])^^^%I%I4NN#;dBCCCF	L 	L 	L 	L 	L	 	 	 	 	 	 	 	 	 ! !;<< 	EZEZ[_[j[vEwEw 	CC ***+++	    	

!99;; 	+JJ)***u%%%T"7"78R"S"STTUUd#8#89T#U#UVVWW!-;. 	M $ 9 9:K L L

-/!*!%&4'6!1!1$.2LV[!\!\!\"2"24?3NX\"]"]"]"3!*!*&4    	 	 	  	 	!JJx     	! 	!r*   c                 .   dfd	 d          } d          }|                     t          j        ddd           ||                    d|j        z             n|                    d	           |\|                    d
           |                    d           |                    d|j        z             |                    d           |                    d           |                    d           |                                 d S )Nc                     |j         }|j                            |           }|#|j        r||S |j         | |j                  S |S r#   )r  r/   r  is_externalr  )nr~   extern_returnrlookup_here_or_baser/   s       r(   r  zBModuleNode.generate_getattro_function.<locals>.lookup_here_or_baseU	  sa    z&$$Q''Ay> )m&?((<+..q",???Hr*   r  r  tp_getattrozPyObject *o, PyObject *nFru  zPyObject *v = %s(o, n);z,PyObject *v = PyObject_GenericGetAttr(o, n);z9if (!v && PyErr_ExceptionMatches(PyExc_AttributeError)) {zPyErr_Clear();zv = %s(o, n);r   z	return v;)NN)rS  r   rT  r   r\  r^  )rP   r/   ru  getattr_entrygetattribute_entryr  s    `   @r(   r  z%ModuleNode.generate_getattro_functionN	  s   
	 
	 
	 
	 
	 
	 
	 ,+M::001CDDE:#<mMgy~)JJ)&134 4 4 4 JJ>@ @ @$JJKM M MJJ " " "JJ!,./ / / JJ  

	 	 	

	 	 	r*   c                    |j         j        }|                    d          }|                    d          }|                    |t          j        dd           |                    d           |r|                    d|j        z             n/|                     |d ddd|           |                    d	           |                    d
           |                    d           |r|                    d|j        z             n/|                     |d ddd|           |                    d           |                    d
           |                    d
           |	                                 d S )Nr  r  tp_setattroz%PyObject *o, PyObject *n, PyObject *vr  zreturn %s(o, n, v);setattrofunczo, n, vz(return PyObject_GenericSetAttr(o, n, v);r   r  zreturn %s(o, n);z(return PyObject_GenericSetAttr(o, n, 0);r  r  s         r(   r  z%ModuleNode.generate_setattro_function|	  s    %/	%%m44	%%m44	E:#?Pwxxx

	 	 	 	<JJ%(*+ + + + //4	4Q Q QJJ:< < <

	 	 	

	 	 	 	<JJ"(*+ + + + //4	4Q Q QJJ:< < <

	 	 	

	 	 	r*   c                    |                     d          }|                    |t          j        ddd           |                    d           |                    d           |                    d           |                    d	|j        z             |                    d
           |                    d           |                                 d S )Nr   tp_descr_getz%PyObject *o, PyObject *i, PyObject *cFru  zPyObject *r = 0;zif (!i) i = Py_None;zif (!c) c = Py_None;zr = %s(o, i, c);r  r   )r  rS  r   rT  r   r\  r^  )rP   r/   ru  user_get_entrys       r(   r  z&ModuleNode.generate_descr_get_function	  s   
 **955E:#<nNu  HM  	N  	N  	N

	  	  	 

"	$ 	$ 	$

"	$ 	$ 	$ 	

)+	, 	, 	,
 	

	 	 	

	 	 	r*   c                 @   |j         j        }|                    d          }|                    d          }|                    |t          j        dd           |                    d           |r|                    d|j        z             nD|                     |d ddd|           |                    d	           |                    d
           |                    d           |                    d           |r|                    d|j        z             nD|                     |d ddd|           |                    d           |                    d
           |                    d           |                    d           |	                                 d S )Nr  r  tp_descr_setr  r  r  descrsetfuncr  6PyErr_SetString(PyExc_NotImplementedError, "__set__");r   r   r  r  z9PyErr_SetString(PyExc_NotImplementedError, "__delete__");r  )rP   r/   ru  r  user_set_entryuser_del_entrys         r(   r  z&ModuleNode.generate_descr_set_function	  s    %/	**955**<88E:#?Qxyyy

	 	 	 
	JJ%"-/0 0 0 0 //4DR R RJJHJ J JJJ  

	 	 	

	 	 	 
	JJ""-/0 0 0 0 //4DR R RJJKM M MJJ  

	 	 	

	 	 	r*   c                     |j         D ]b}|j        }|                    dg          r|                     ||           |                    ddg          r|                     ||           cd S )Nr   r  rs  )property_entriesr/   r  generate_property_get_functiongenerate_property_set_function)rP   cclass_scoperu  ru   property_scopes        r(   r"  z&ModuleNode.generate_property_accessors	  s    !2 	A 	AE"[N))9+66 A33E4@@@))9i*@AA A33E4@@@	A 	Ar*   c                 d   |j         }|j                            t          j        |j                  |_        |                    d          }|                    d           |                    d|j        z             |                    d|j	        z             |                    d           d S )Nr   rF   9static PyObject *%s(PyObject *o, CYTHON_UNUSED void *x) {return %s(o);r   )
r/   parent_scoper%  r   prop_get_prefixr   getter_cnamer  r   r\  )rP   property_entryru  r!  	get_entrys        r(   r  z)ModuleNode.generate_property_get_function	  s    '-&4&A&H&H"N$7'9 '9#"..y99	

2

G+-	. 	. 	. 	

$&	' 	' 	' 	

	 	 	 	 	r*   c                 $   |j         }|j                            t          j        |j                  |_        |                    d          }|                    d          }|                    d           |                    d|j        z             |                    d           |r|                    d|j	        z             n*|                    d           |                    d           |                    d	           |                    d
           |r|                    d|j	        z             n*|                    d           |                    d           |                    d	           |                    d	           d S )Nr  rs  rF   z@static int %s(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {r  zreturn %s(o, v);r  r   r   r  r$  z6PyErr_SetString(PyExc_NotImplementedError, "__del__");)
r/   r%  r%  r   prop_set_prefixr   setter_cnamer  r   r\  )rP   r(  ru  r!  r  r  s         r(   r  z)ModuleNode.generate_property_set_function
  s   '-&4&A&H&H"N$7'9 '9#"..y99	"..y99	

2

N+-	. 	. 	. 	

	 	 	 	JJ"(*+ + + + JJHJ J JJJ  

	 	 	

	 	 	 	JJ(*+ + + + JJHJ J JJJ  

	 	 	

	 	 	 	 	r*   c           	      ^   |j         }|j        }t          j        d|j        j                  }|                    ||           t          j        d|j        j                  }|                    |          s@|                    d           |	                    ||           |                    d           |j
        r|j        }n
d|j        z  }|j        s|                    d          nd }|r	|j        rd }t          |          }	|	rw|j                            t#          j        dd                     |                    d	|j        z             |                    d
           |r!|                    d|d|j        d           |                    d           |                    d           |                    d           |rt+          |j                  }
|
 d}|                    d           |                    d           |                    d| d           |                    d           |                    d| d           |                    d           |                    d           |                    d|j        z             t          j        |j        j                  D ]}|                    ||           |	r|                    d|j        z             |                    d           |                    d           |j                                        }|                    d|j        z             |                    d| j        d|                    dd          d           |                    d|z             |                    d            |                    d!t          j        d"|j                                      |          z             |                    d#|j        z             |                    d           d S )$N
tp_memberstp_as_bufferz$#if !CYTHON_COMPILING_IN_LIMITED_APIr   r  r  IncludeStructmemberHrJ  z#static PyMemberDef %s_members[] = {z#if !CYTHON_USE_TYPE_SLOTSz,{"__weaklistoffset__", T_PYSSIZET, offsetof(r   z), READONLY, 0},{0, 0, 0, 0, 0}rJ  zL: __weakref__ is unsupported in the Limited API when running on Python <3.9.zM#if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x03090000z+#if defined(__GNUC__) || defined(__clang__)z
#warning "r  r   z#pragma message("z")z!static PyType_Slot %s_slots[] = {z#{Py_tp_members, (void*)%s_members},z{0, 0},zstatic PyType_Spec %s_spec = {r   rF   z",zsizeof(%s),z0,rH  tp_flagsz	%s_slots,)rr   r/   r   r{  r   r@   generate_substructure_specis_emptyr   generate_substructurerf  r  r  r  r  r  r   r
   r   r$  r   r   r_   r  generate_spec
class_namer   rq   r  rK  )rP   ru   ru  ext_typer/   members_slotbuffer_slot	objstructweakref_entrygenerate_memberspositionweakref_warn_mesager&  	classnames                 r(   r$  z ModuleNode.generate_typeobj_spec)
  sG   : 1,@P@[\\//t<<<0AQA\]]##E** 	!JJ=>>>--eT:::JJx     	? 0II#h&>>I@E@\f))-888bf 	!]7 	! M.. 	%--'(>@STTV V VJJ<x?UUVVVJJ3444 ?
 


'ii)<)<)<> ? ? ?JJx   JJ()))JJt %*=+<== . . . $
 

jkkk

HIII

>(;>>>???

4555

F/BFFFGGG

8$$$

8$$$ 	

69OOPPP,T-=-HII 	, 	,Dud++++ 	WJJ<x?UUVVV

9

4$88::	

3h6LLMMM


!6!6!6	8I8I#r8R8R8R8RSTTT

=9,---

4

595j%BRSS]]^cdddeee

;!77888

4r*   c                    |j         }|j        }t          j        |j        j                  j        D ]}|                    ||           |                    d           |j	        dk    rd}nd}|                    ||j
        z             |                    d           |j                                        }|                    d| j        d|d           |j        r|j        }	n
d	|j        z  }	|                    d
|	z             |                    d           t          j        |j        j                  D ]}
|
                    ||           |                    d           d S )NrF   r   zDL_EXPORT(PyTypeObject) %s = {zstatic PyTypeObject %s = {zPyVarObject_HEAD_INIT(0, 0)r  z."z, /*tp_name*/r  zsizeof(%s), /*tp_basicsize*/z0, /*tp_itemsize*/rJ  )rr   r/   r   r  r   r@   substructuresr5  r   r   r$  r7  r   rq   rf  r  generate)rP   modnameru   ru  rr   r/   suiter}  r@  r;  r&  s              r(   r%  z&ModuleNode.generate_typeobj_definitionp
  s   z
-d.>.IJJX 	5 	5E''t4444

2x''5FF1F

6D..///

)	+ 	+ 	+$88::	


%%%			 	 	  	;,II#d&::I

*Y6	8 	8 	8

 	" 	" 	",T-=-HII 	' 	'DMM%&&&&

	 	 	 	 	r*   c                    |j         r	|j        sd S |j        d         }|                    d           |                                }|                    d|j        z             |j        D ]*}|j        s!|r|j        s|                    |d|           +|                    d           |                    d           |	                                r|                    d           d S d S )NbindingrF   zstatic PyMethodDef %s[] = {r  )wrapper_code_writerz{0, 0, 0, 0}rJ  )
is_c_class_scopepyfunc_entriesr@   r   r  method_table_cnamefused_cfunctionis_overridableput_pymethoddefgetvalue)rP   rA   ru  rG  rH  ru   s         r(   r_  z ModuleNode.generate_method_table
  s+    	(: 	F.+

2"2244

)&(	) 	) 	) ' 	Z 	ZE( Z' Ze>R Z$$UCEX$YYY

	 	 	

	 	 	 '')) 	*%%b)))))	* 	*r*   c                    |                     d          }|r|j        sd S |                    d          }|j        }|                    d           |                    d           |                    d|z             |                     ||           |                    d|z             |                    d|z             |                    d           |                    d	|z             |                    d
|z             |                    d           |                    d           |                    d| d           |                    d           d S )Nr  __dict__getterrF   zM#if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030A0000r#  zif (unlikely(!p->%s)){zp->%s = PyDict_New();r   zPy_XINCREF(p->%s);zreturn p->%s;r  r   z PyObject_GenericGetDictr   )r  is_variablerJ  r   r   r,  )rP   r/   ru  	dict_attrr  	dict_names         r(   r  z(ModuleNode.generate_dict_getter_function
  s_   %%j11	 		 5 	F))*:;;	O	

2

bccc

NQZZ[[[t,,,

+i7888

*Y6777

3

')3444

?Y.///

3

7 	

AiAAABBB

8r*   c                    |j         r|                    d           |                    d|j        z             |j         D ]}|j        }|r3|j        r|                                }d|                                z  }nd}|                    d|j                                        d|j        pdd|j	        pdd|d	           |                    d           |                    d	           d S d S )
NrF   z"static struct PyGetSetDef %s[] = {zPyDoc_STR(%s)rI  rA  r   z, 0},r1  rJ  )
r  r   getset_table_cnamer   
is_unicodeas_utf8_stringr   r   r'  r,  )rP   rA   ru  ru   r   doc_codes         r(   r#  z ModuleNode.generate_getset_table
  sE    	JJrNNNJJ4&'( ( ( - # #i #~ 3!0022.1H1H1J1JJHH"H



668888*1c11*1c11 	"# # # # JJ!# # #JJ    +	 	r*   c                     t          |j                                                  D ]9\  }}|j        r-|j        r&|j        j        s|j                            |           :d S r#   )r   r   r   
is_cglobalr  rr   r  r3  r   s       r(   r   z5ModuleNode.create_import_star_conversion_utility_code
  sv     "#+"3"3"5"566 	@ 	@KD% @EJ @z- @J::3???	@ 	@r*   c           
      
   |                     t          j        dd                     |                    dt          j         dt          j         dt          j         d           |                    d           t          |j
                                                  D ]$\  }}|j        r|                    d|z             %|                    d	           |                    d
           |                    d           |                    d           |                    d           |                    d           |                    d           |                    d           |                    d           |                    d           |                                }|                    d           d}t          |j
                                                  D ])\  }}|j        r|j        r|j        j        s|dz  }|dz  dk    r?|                    d           |                    d           |                    d           |                    d|z             |j        j        r|j        j        s|j        j        rO|j                            |d          }|                    d|d|                    |j                  d           |                    d           |                    |j        |j        d            |                    |j        d!t5          j        |j        t8          d          d           n|j                            |          r;|                    |j                            d|j        |j        |                     nN|                    d"|d#|j        d$           |                    |                    |j                             |                    d           +|                    d%           |                    d&t          j        z             |                    d           |                    d'           |                     |j!                  rA|"                    |j!                   |#                    tI          | j%                             ||_!        |                    d(           |                    d)           |                    d           |                    d*           |&                    t          j'        d+d,                     |(                                 d S )-NCStringEqualsr9  int r  r  z2,PyObject *o, PyObject* py_name, const char *name)z,static const char* internal_type_names[] = {z"%s",rI  rJ  z-const char** type_name = internal_type_names;zwhile (*type_name) {z$if (__Pyx_StrEq(name, *type_name)) {zBPyErr_Format(PyExc_TypeError, "Cannot overwrite C type %s", name);r  r   ztype_name++;zif (0);r   r   d   z#ifdef _MSC_VERz)if (0);  /* Workaround for MSVC C1061. */r   z#else if (__Pyx_StrEq(name, "%s")) {rC  zif (!()) r   zPy_INCREF(o);Fr  r  z<PyErr_Format(PyExc_TypeError, "Cannot convert Python object  to z");r  z3if (PyObject_SetAttr(%s, py_name, o) < 0) goto bad;r  r  r   rF   
ImportStarr  ))r   r
   r   start_initcfuncr   import_star_setmodulestatetype_cnamemodulestatevalue_cnamer   r   r   r   r   new_error_labelr[  r  rr   is_constr  r  rV  type_test_code
error_gotor_   
put_decrefr   r   r  r	   r3  from_py_call_coder6  
label_usederror_label	put_labelput_add_tracebackr   rq   ra  rb  r^  )rP   rA   ru  r   ru   old_error_label
msvc_count	type_tests           r(   r`  zModuleNode.generate_import_star
  s.   [4_oVVWWW@6) @ @+@ @/5/L@ @ @	A 	A 	A
 	

ABBB!#+"3"3"5"566 	+ 	+KD%} +

7T>***

3

4

BCCC

)***

9:::

WXXX

;

3

>"""

3..00

9
!#+"3"3"5"566 	  	 KD%  EJ  uz7J  a
#q((JJ0111JJJKKKJJx(((

@4GHHH:) ;z3 9uz7Q 9$)J$=$=%& %&	


%II OOEI6666$8 9 9 9 JJ///OOEK5OIIIJJ"+EJLLLL N O O O O Z;;C@@ ;JJuz;;U[%)T ;  ; < < < < JJJejjj * + + +JJtuy99:::

3

8

H6K^^___

3

;??4+,, 	INN4+,,,""=1F#G#GHHH*

6

<   

3

2;+L:JKKLLLr*   c                    |                     d           |                     d|j        z             |                     dt          j        z             |                     dt          j        z             |                     dt          j        z             |                     dt          j        z             |                     dt          j        z             t          j	        "|                     dt          j
        z             t          j        D ]J\  }}|                     d|z             |                     d|z             |                     d           Kd S )Nztypedef struct {r  z	#ifdef %sr  r   )r   module_dict_cnamer   builtins_cnamecython_runtime_cnamerY  empty_bytesempty_unicoder   r7  r8  used_types_and_macros)rP   rA   ru  r  	used_names        r(   rc  z&ModuleNode.generate_module_state_start&  s9   

%&&&

?S%::;;;

?V%::;;;

?V%@@AAA

?V%77888

?V%77888

?V%99:::)JJ)??@@@%+%A 	! 	!!J	JJ{Y.///JJ*Z7888JJx    	! 	!r*   c           	      ~   |d         }|d         }|d         }|                     dt          j        z             |                     d           |                    t	          j        dd                     |                     d           |                     d	           |                     d
           |                     dt          j        z             |                     d           |                     d           |                     dt          j        z             |                     d           |                     d           |                     dt          j        dt          j        d           |                     d           |                     d|j        dt          j        d           |                     d           |                     dt          j        dt          j        d           |                     d	           |                     d           |                     d           |                     d           |                     d           |                     dt          j        dt          j        dt          j        d           |                     d           |                     d           |                     d           |                     d           |                     d           |                     d           |                     d           d S )Nmodule_state_endrK  rL  z} %s;rF   MultiPhaseInitModuleStaterJ  #if CYTHON_USE_MODULE_STATE#ifdef __cplusplusnamespace {zextern struct PyModuleDef %s;} /* anonymous namespace */r  zstatic struct PyModuleDef %s;r   r   z2 (__Pyx_PyModule_GetState(__Pyx_State_FindModule(&z)))z (__Pyx_State_FindModule(&r<  r  r   z	_static =z    {};z    {0};z	 * const  = &z_static;r  r   )	r   r   re  r   r
   rb  pymoduledef_cnamerX  r6  )rP   rA   rs  r   rH  rK  rL  s          r(   rn  z$ModuleNode.generate_module_state_end6  s_   "#56()=> +,C D7V%AABBB2$$8:MNN	
 	
 	
 	8999/000=))):V=UUVVV89997###:V=UUVVV8$$$2***$$$& 	' 	' 	' 	2$$$& 	' 	' 	' 	7###(((***
 	 	 	 	/000 	9%%%7###:&&&8$$$(((******
 	 	 	
 	8$$$  ---  %%%  ***##K000##C(((##H-----r*   c                    |                     d           |                     dt          j        z             |                     t          j         d           |                     d           |                     d|j        z             |                     dt          j        z             |                     dt          j        z             |                     dt          j        z             |                     dt          j        z             |                     dt          j	        z             |                     d           |                     dt          j
        z             |                     d           |                     d           |                     dt          j        z             |                     d           |                     d	           |                     d
           |                     d           d S )Nr  z4static CYTHON_SMALL_CODE int %s_clear(PyObject *m) {z2 *clear_module_state = __Pyx_PyModule_GetState(m);z"if (!clear_module_state) return 0;r  #ifdef __Pyx_CyFunction_USEDr   #ifdef __Pyx_FusedFunction_USED"#if CYTHON_PEP489_MULTI_PHASE_INITz__Pyx_State_RemoveModule(NULL);r   r   r6  re  ru  rv  rw  rY  rx  ry  cyfunction_type_cnamefusedfunction_type_cnamerU  s      r(   rd  z&ModuleNode.generate_module_state_cleari  s   

0111

IFL__```

f2fffggg

7888

6!" 	# 	# 	#

6!" 	# 	# 	#

6'( 	) 	) 	)

6 	  	  	 

6 	  	  	 

6 ! 	" 	" 	"

1222

6() 	* 	* 	*

8

4555

6+, 	- 	- 	-

8

7888 	

4555

8r*   c                    |                     d           |                     dt          j        z             |                     t          j         d           |                     d           |                     d|j         d           |                     dt          j         d           |                     dt          j         d           |                     dt          j         d           |                     dt          j         d           |                     dt          j	         d           |                     d           |                     dt          j
         d           |                     d	           |                     d
           |                     dt          j         d           |                     d	           d S )Nr  zSstatic CYTHON_SMALL_CODE int %s_traverse(PyObject *m, visitproc visit, void *arg) {z5 *traverse_module_state = __Pyx_PyModule_GetState(m);z%if (!traverse_module_state) return 0;z Py_VISIT(traverse_module_state->r  z)__Pyx_VISIT_CONST(traverse_module_state->r  r   r  r  rU  s      r(   re  z)ModuleNode.generate_module_state_traverse  s   

0111

hkqk~~

f2iiijjj

:;;;

Oc6KOOOPPP

Of6KOOOPPP

Uf6QUUUVVV

Uv?QUUUVVV

Uv?QUUUVVV

Wv?SWWWXXX

1222

Vf6RVVVWWW

8

4555

Yf6UYYYZZZ

8r*   c                 t"   |                      | j        | j        |          }|                     ||           |                    | j                   |                    d           |                    t          j        dd                     t          d|j
                   }d|                     d|          z  }|                    d|z             | j        j        rV|                    d           |                    d	|                     d|          z             |                    d
           |                     |j
                  }|rB|                    d           |                    d|z             |                    d
           |                    |           |                    d           |                    d           |                    dt          j        z             |                    d           t          j        dd          }|                    |           |                    d           |                    d|                                 dt          j        d           |                    d
           |                    d           |                    d           |                    d           |                    d           |                    d
           |                    t          j         dt          j         d           |                                }	|j        j        d         }
|j        j        d         }|
s|rC|r|                                 |j                            t          j        dd                     |                                 |                    d           |                    dt          j        z             |                    dt          j        dt          j        d            |                    d!|j
                                        d"d#         z             |                    d$           |                    d           |                    d%           |                    dt          j        d&t          j        d'           |                    d
           |                    d(           |                     ||           |
s|r(|	                                 |                                 t          j        d)d          }|                    |           |                     |           |                    t          j        d*d                     |                    t          j        d+d                     |!                    | j        d,           |                    d-           |                    d.           |                    d
           |"                    t          j#                  }|                    |d/|$                    || j                             |"                    t          j%                  }|                    |d0|$                    || j                             |"                    t          j&                  }|                    |d1|$                    || j                             |                    d2           |!                    | j        d3t          j         d           |                    d4           |!                    | j        d5           d6}|'                    d7           |D ]}|'                    d8| d9           |                    d           |!                    | j        d:|j         d           |                    d
           |D ]V}|                    d;|z             |!                    | j        d<|d=|j        d           |                    d
           W|                    d>           |j        d?         r|!                    | j        d@           |                    d| (                                z             |!                    | j        dA|j        dB|)                    t          dC                    dB|)                    t          dD                    d           |                    d           | *                    ||           tV          j,        r>|                    dE           |!                    | j        dFt          j         d           |                    dG           |!                    | j        dHt          j         d           |!                    | j        dIt          j         d           |                    dJ            |dK          5 }| -                    ||           d d d            n# 1 swxY w Y    |dL          5 }| .                    ||           d d d            n# 1 swxY w Y    |dM          5 }| /                    ||           d d d            n# 1 swxY w Y    |dN          5 }| 0                    ||           d d d            n# 1 swxY w Y    |dO          5 }|D ]}| 1                    |||           	 d d d            n# 1 swxY w Y    |dP          5 }|D ]}| 2                    |||           	 d d d            n# 1 swxY w Y    |dQ          5 }|D ].}| 3                    |           | 4                    |||           /	 d d d            n# 1 swxY w Y   |                    dR           |5                    d            |
s|r5|j6        j7        sJ |8                    || j                   dS|j6        _9        |5                    d            | j:        ;                    |           |5                    d            |
s|rJdT|j6        _9        |j6        j7        sJ |<                    dU| j        V           |=                                 |                                 |                    dW           | >                    ||           |                                 tV          j?        r]|j                            t          j        dXd                     |                    dY|@                    | j                  z             |A                    |jB                   |C                    |jD                   |j6        E                                D ]\  }}|F                    ||           |
s|r.|G                                 |H                    | j                   |                    d|j        z             |                    d|"                    |jI                   dZ           |J                    t          d[|jK        z                       |j                            t          jM                   |                    d           |                    d\           |N                    |j        t          dTdS]           |                    d%           |P                    |j        t          dT^           |                    d_           |                    d`           |                    da           |                    dbt          j        z             |                    dc           |                    d           |                    d
           |                    dd           |                    de|jK                                        d"d#         z             |                    d           |C                    |jB                   |Q                                 |                    d           |                    df|j        z             |                    d%           |                    dg|j        z             |                    d
           |                    d           |	R                    |j6                   |S                                 d S )hNrF   PyModInitFuncTyperJ  PyInit_z__Pyx_PyMODINIT_FUNC %s(void)r   z%s CYTHON_SMALL_CODE; /*proto*/zc#if !defined(CYTHON_NO_PYINIT_EXPORT) && (defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS))z;__Pyx_PyMODINIT_FUNC PyInit___init__(void) { return %s(); }r   zHvoid %s(void) {} /* workaround for https://bugs.python.org/issue39432 */r  rA  zreturn PyModuleDef_Init(&%s);r   ModuleCreationPEP489zstatic CYTHON_SMALL_CODE int z(PyObject *r  zint stringtab_initialized = 0;r  zint pystate_addmodule_run = 0;r  z = NULL;profile	linetraceProfilez	Profile.cr  zif (z == z) return 0;zrPyErr_SetString(PyExc_RuntimeError, "Module '%s' has already been imported. Re-initialisation is not supported.");r   rM  r   r  z) return __Pyx_NewRef(r  z /*--- Module creation code ---*/ImportRefnannyAPIGetRuntimeVersionCheckBinaryVersionzs__Pyx_check_binary_version(__PYX_LIMITED_VERSION_HEX, __Pyx_get_runtime_version(), CYTHON_COMPILING_IN_LIMITED_API)z'#ifdef __Pxy_PyFrame_Initialize_Offsetsz#__Pxy_PyFrame_Initialize_Offsets();z = PyTuple_New(0); z% = PyBytes_FromStringAndSize("", 0); z' = PyUnicode_FromStringAndSize("", 0); z4/*--- Initialize various global constants etc. ---*/z__Pyx_InitConstants(zstringtab_initialized = 1;z__Pyx_InitGlobals())
CyFunctionFusedFunction	Coroutine	GeneratorAsyncGenz#if 0z || defined(__Pyx_z_USED)z __pyx_CommonTypesMetaclass_init(z#ifdef __Pyx_%s_USEDrc  z_init(z)/*--- Library function declarations ---*/
np_pythranz_import_array()zPyObject_SetAttr(r   __name____main__z/*--- Builtin init code ---*/z__Pyx_InitCachedBuiltins(z/*--- Constants init code ---*/z__Pyx_InitCachedConstants(z__Pyx_CreateCodeObjects(z*/*--- Global type/function init code ---*/zGlobal init codezVariable export codezFunction export codezType init codezType import codezVariable import codezFunction import codez/*--- Execution code ---*/TFPy_None)r_   z/*--- Wrapped vars code ---*/RegisterModuleCleanupzif (__Pyx_RegisterCleanup()) %sz && stringtab_initialized) {zinit %sr  r  r  r  zif (pystate_addmodule_run) {zPyObject *tp, *value, *tb;zPyErr_Fetch(&tp, &value, &tb);zPyState_RemoveModule(&%s);zPyErr_Restore(tp, value, tb);z} else if (!PyErr_Occurred()) {z.PyErr_SetString(PyExc_ImportError, "init %s");zreturn (%s != NULL) ? 0 : -1;z
return %s;)Tmod_init_subfunctionr_   r/   generate_pymoduledef_structr  r   ra  r
   rb  r   rs   r   
is_packagewrong_punycode_module_namer   r  module_init_func_cnamepymodinit_module_argre  rf  r  r   r@   use_fast_gil_utility_coder   r   put_declare_refcount_contextr6  r   generate_module_creation_codeput_trace_declarationsput_trace_frame_initput_setup_refcount_contextput_error_if_neg name_in_main_c_code_module_staterY  error_goto_if_nullrx  ry  r
  rY  intern_identifiergenerate_module_import_setupr   cache_builtinsgenerate_global_init_codegenerate_c_variable_export_codegenerate_c_function_export_codegenerate_type_init_code$generate_type_import_code_for_module*generate_c_variable_import_code_for_moduler  *generate_c_function_import_code_for_modulern  	funcstate	gil_ownedput_trace_start	can_tracerM   generate_execution_codeput_trace_returnput_trace_exitgenerate_wrapped_entries_codegenerate_cleanup_coderj  put_gotoreturn_labelro  rn  all_managed_tempsput_xdecrefput_trace_exception_propagatingput_trace_unwindru  rp  r   r   traceback_utility_coder]  r	   rk  put_finish_refcount_contextput_temp_declarationsr^  )rP   r  rA   ru  subfunctionmodinit_func_nameheader3r  mod_create_functempdecl_coder  r  refnanny_import_coderY  rx  ry  shared_typesr8  
inner_coder   r   rr   s                         r(   rf  z$ModuleNode.generate_module_init_func  s"   //$*dKK((d333tz***

2;+,?ATUUVVV)*ECO*E*EFF1D4L4LXWZ4[4[[

4w>???:  	!JJ|}}}JJT((3779 : : :JJx    &*%D%DS_%U%U"% 	!JJ|}}}JJad~~JJx   

7 	

7888

3

2V5MMNNN

3%*+ACVWW?+++

2


''))))''') 	* 	* 	* 	

8 	

3

3444

0111

3444

8

f2]]f6S]]]^^^,,.."-i8$/<	 	_i 	_ 1..000--k.EiQ\.].]^^^))+++

7888 	

;!44555


'''
 	 	 	 	

 g?66882>? 	@ 	@ 	@ 	

<   

3

7



 	 	 	 	

8

5666**3555 	(i 	(00222%%'''*/0CEXYY/000''(9:::[-.ACVWWXXX[-.BDWXXYYYdh )K 	
 	
 	
 	

<===

8999

8;;F<NOO

KK00dhGGGI 	J 	J 	J;;F<NOO

KK00dhGGGI 	J 	J 	J==f>RSS

MM422=$(KKKM 	N 	N 	N 	

IJJJdh(_v?\(_(_(_```

/000dh(=>>>\$ 	< 	<HHH:(:::;;;;

2dh(^3K[(^(^(^___

8$ 	! 	!HJJ-8999!!$((888SM]M]M],^___JJx    

>???>,' 	?!!$(,=>>>

;!?!?!A!AABBBdhh""=#<#<====""=#<#<====)? 	@ 	@ 	@ 	

3 	))#t444! 	NJJ6777!!LF,ILLLN N N 	

4555HI)FIII	K 	K 	K 	HGv'DGGG	I 	I 	I 	

?@@@[+,, 	<
**3
;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< [/00 	BJ00jAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B [/00 	BJ00jAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B [)** 	:j((j999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: [+,, 	S
* S S99&#zRRRRS	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S [/00 	YJ* Y Y??ZXXXXY	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y [/00 	YJ* Y Y++F333??ZXXXXY	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y
 	

/000d 	,i 	,>++++  !2DH==='+DN$d	))$///d 	"i 	"',DN$>++++!!)!:::!!!



2333**3555

( 	V--'(?ATUUW W WJJ84??48;T;TTUUUd'(((t'(((>;;== 	* 	*KE4UD)))) 	,i 	,00222!!$(+++

;!11222

n4889NOOnnn	p 	p 	p 	}Y9K-KLLMMM))%*FGGG 	

3

1222c.eaefff

7 	(.FFF 	

1222

/000

3444

/&2JJKKK

2333

3

8

4555

C%99;;AbDAB 	C 	C 	C

3t()))((***

7888

2S5EEFFF

7

<#"22333

8

3++DN;;;s~   3iii,jjj%kkklllmmmnnn2oooc                 Z                                      G fdd          }|S )a  
        Return a context manager that allows deviating the module init code generation
        into a separate function and instead inserts a call to it.

        Can be reused sequentially to create multiple functions.
        The functions get inserted at the point where the context manager was created.
        The call gets inserted where the context manager is used (on entry).
        c                   0    e Zd Zd Z fdZ fdZdS );ModuleNode.mod_init_subfunction.<locals>.ModInitSubfunctionc                     d                     |                                                                          }t          j        d|          sJ d|z  | _        || _        d | _        d | _        d S )Nr  z^[a-z0-9_]+$z__Pyx_modinit_%s)	r  lowerr  r   match
cfunc_namedescriptionr  	call_code)rP   	code_typer   s      r(   __init__zDModuleNode.mod_init_subfunction.<locals>.ModInitSubfunction.__init__  sh    !2!2!8!8!:!:;;x66666"4u"<#, %)"!%r*   c           	                                          | _        }|                    d| j         dt          j         dt          j         dd           |                    dt          j         d           |                                 | _        |	                    t          | j                             |                    d	| j        z             |S )
Nr^  r  r  r  T)refnannyzCYTHON_UNUSED_VAR(r  z/*--- %s ---*/)r  r  rc  r  r   re  rf  r   r  r  r   r  )rP   ru  function_code	orig_coder/   s     r(   	__enter__zEModuleNode.mod_init_subfunction.<locals>.ModInitSubfunction.__enter__  s    !*!:!:!<!<$$$m4?mmV-ImmVMjmmmD % * * * 

Q0MQQQRRR%)%9%9%;%;"//do0N0NOOO

+d.>>???r*   c                 (   }|                                  |                    d           | j                            |j                   d | _        |                    |j                  }|rx|                    |j                   |j                                        D ]\  }}|	                    ||           |                                  |                    d           |                    d           |
                                 |rI| j                            | j                            | j        dt          j        d                     n0| j                            d| j         dt          j         d           d | _        d S )Nr  r   r   r  r  z(void)r  )r  r   r  r  r  rm  rn  ro  r  r  r^  r  error_goto_if_negr  r   rf  )rP   r  ru  needs_error_handlingr   rr   r  r_   s         r(   __exit__zDModuleNode.mod_init_subfunction.<locals>.ModInitSubfunction.__exit__  s   $00222

;'''"88HHH%)"'+t7G'H'H$' -NN4#3444'+~'G'G'I'I 6 6t((555544666JJ|,,,

3%%'''' VN((88 OOOV-J-J-J:LMPR RS S S S N((TTT63PTTTV V V!%r*   N)r  
__module____qualname__r  r  r  )r  r  r_   r/   s   r(   ModInitSubfunctionr    se        & & &      & & & & & & & &r*   r  )r  )rP   r_   r/   r  r  r  s    ``` @r(   r  zModuleNode.mod_init_subfunction  sc     "1133/	& /	& /	& /	& /	& /	& /	& /	& /	& /	& /	& /	& /	&b "!r*   c                    |j         d         }|dk    r| j        d         j        }|r|                    d           |                    d|j        d|                    t          t          |                              d|                    | j                  d           |                    d	           |j	        rV|                    d           |j
                            t          d
          }|                    |d|                    t          t          t          j                            |                                        d|                    || j                             |                    |t                     |                    d|j        d|d|                    | j                  d           |                    |t                     |j
                            |           |                    d	           n|j	        r|                    d           |j                            t-          j        dd                     |                    |                    d|                    t          | j                            z  | j                             |                    d	           | j        }|                    d          r%t          |d t7          d                              }|                                }|                    d           |                    d|                    d| j                  z             |                    d|z             |                    |                    d|d|j        d| j                             |                    d	           |                    d	           d S )Nset_initial_path
SOURCEFILEr   z&if (!CYTHON_PEP489_MULTI_PHASE_INIT) {if (PyObject_SetAttrString(z, "__file__", ) < 0) r   r   Tz = Py_BuildValue("[O]", ); z, "__path__", SetPackagePathFromImportLibr  z%__Pyx_SetPackagePathFromImportLib(%s)z	.__init__rA  z0PyObject *modules = PyImport_GetModuleDict(); %srs  z)if (!PyDict_GetItemString(modules, %s)) {zPyDict_SetItemString(modules, r   r  )r@   r_   r  r   r6  get_py_string_constr   r   rj  r  r  allocate_tempr	   r   r%   r  r  
put_gotrefr]  release_tempr   r   r
   rb  r  rq   endswithr  r   )rP   rA   ru  module_pathtempfq_module_namefq_module_name_cstrings          r(   r  z'ModuleNode.generate_module_import_setup  s   n%78,&&(1+.K &	JJ?@@@JJJ   ((!/+">">??A A A A))))	+ , , ,
 JJsOOO~  

CDDD~33NDII

DD,,%oGOOK88': ': ; ;< < < < ++D$(;;;= > > > n555


((($$$0I0I0I0IKL L L %%dN;;;++D111

3^ 	 JJ?@@@--k.>-/?/A /A B B BJJt--7,,%d&;<<> >? 	    
 JJsOOO ."";// 	O*>:LC<L<L;L:L+MNNN!/!C!C!E!E

3

E**9dh??@ 	A 	A 	A

>AWWXXX

4)))"""C$4$4$4+67;xA A 	B 	B 	B

3

3r*   c                 
   t           j        sd S |                    dt          j        z             |                    |           |                    t          j         dt          j         d           |                    d           |                    dt          j         d           |                    d           |                    t          j         d           t           j        d	k    r|                    d
           t          |j
                  }|                                 |D ]}|j        dk    r|j        j        rN|j        rG|j        r|j        }n|                    |j                  }|                    ||j        dd           |j                            |          r|j                            ||           |                    dt          j         d           t           j        dk    rs|                    d           t-          |j        t1          j        d                    D ]5}|                    |j                  }|                    ||dd           6t           j        rG|                    d           |j        D ]*}|                    |j        t<          j        dd           +|                    d           |                     |                    t          j!                   t<          j        dd           |j"        D ]}|j        }|j#        s|j$        r|j%        j&        '                    dd          r\|j%        }	|                    |	(                    t          j)                            }
|                    |	(                    t          j*                            }|                    d           |                    d|z             |                    d|
d|d           |                    d           |                    d           |                    d            |                    d!           |                    d"           |                    d           |                    d#           |                    d           t           j+        (|                     t          j,        t>          dd$           t          j-        t          j.        fD ]5}|                    |          }|                     |t>          dd$           6|                     |                    |j/                  t>          dd$           d S )%Nz.static void %s(CYTHON_UNUSED PyObject *self) {r  r   r  zif (!__Pyx_State_FindModule(&z
)) return;r   z! = __Pyx_PyModule_GetState(self);r   z/*--- Global cleanup code ---*/r  TF)r  r  z__Pyx_CleanupGlobals(r     z$/*--- Type import cleanup code ---*/r#  r  z /*--- Builtin cleanup code ---*/z/*--- Intern cleanup code ---*/r4  r   r6  zwhile (%s > 0) {zPyObject* o = (PyObject*)r=  r>  r  r  r  r  r  r   r  )0r   r  r   r   cleanup_cnamer  re  rf  r  r  r   r  r   rr   r  r  r[  r   r  r  r  r  r   types_importedr  r  r  r#  r  cached_builtinsr   r	   r]  rY  rp   r  r  r/   r@   r  rJ  rQ  rR  r7  r8  rw  rv  ru  )rP   rA   ru  rev_entriesru   entry_cnamer8  r#  cclass_typer/   rQ  rR  r   s                r(   rg  z'ModuleNode.generate_module_cleanup_func%  s   , 	F

C'( 	) 	) 	)s###

f2VVf6SVVVWWW 	

0111

W63KWWWXXX

8

f3VVVWWW(A--JJ8999s//K!!!$ N N#x//z- 	)%* 	) + Q*/+KK*.*C*CEK*P*PK..'04"' / ) ) ) z<<SAA N
@@uMMM

L6+HLLLMMM(A--JJ=>>>"3#58;N;_;_``` ! ! $ E EhF\ ] ]&&!8(, ' ! ! ! ! ! 	!JJ9:::, ! !&&K!:(, ' ! ! ! ! 	

4555!F!FvGY!Z!Z\(726$) 	 	+ 	+ 	+ ( 	% 	%E*K& +*?  +//
A>> %#) $ E E))&*>??!A !A!%!F!F))&*?@@"B "B

5666

->???


!MM>>>3 4 4 4

6777

7888

7###

abbb

5666

8$$$

3

8$$$ )!!&"8.(-4 " I I I163HI 	` 	`E99%@@E!!%uZ^!____11#2GHH%T 	 	C 	C 	C 	C 	Cr*   c                    |                                  }t          j        dk    rd}nt          j        }t          j        dd          }|j                            |                    |j        |t          j        |                     d S )NmainwmainMainFunctionzEmbed.c)rs   rv  rP  wmain_method)	rY  r   rh  r
   r   r   r   
specializers   )rP   rA   ru  rv  r  rP  s         r(   ri  zModuleNode.generate_main_method  s    7799=F""EEME!-niHH))""O-#M"	 # $ $	% 	% 	% 	% 	%r*   c                     |                                 rd|z   }n?d|                    d                              dd                              d          z   }||S )Nr  U_punycode   -   _r  isasciiencoder  decode)rP   r  r   s      r(   r   zModuleNode.punycode_module_name  sa    <<>> 	V:DD$++j1199$EELLWUUUD&&r*   c                     |                                 rd S dd|z                       d                              dd                              d          z   S )NPyInitUr  r  r  r  r  r  )rP   r   s     r(   r  z%ModuleNode.wrong_punycode_module_name  sS    <<>> 	4CH,,Z88@@tLLSST[\\\\r*   c                 8    |                      ||j                  S r#   )r   rs   )rP   r  rA   s      r(   r   zModuleNode.mod_init_func_cname  s    ((AAAr*   c                 P    | j         }|                     t          j        |          S r#   )r/   r   r   pymodule_exec_func_cnamer   s     r(   r  z!ModuleNode.module_init_func_cname  s"    j''(GMMMr*   c                 `   |j         rd|                    |j                   z  }nd}t          j        rdt          j        z  }nd}|                    d           |                    d           |                                 }|                    dt          j        z             |                    d|z             |                    d	t          j	        z             |                    d
t          j        z             |                    d|z             |                    d           |j
        d         rdnd}|                    d|z             |                    d           |                    d           dddd                    |j
        d                   }|                    d|z             |                    d           |                    d           |                    d           |j                                        s*|                    d           |                    d           |                    d           |                    d           |                    d           |                    d           |                    dt          j        z             |                    d            |                    d!t          j        z             |                    d           |                    d"           |                    d#           |                    d$|j                                        z             |                    d%|z             |                    d&           |                    d't          j         d(           |                    d            |                    d)           |                    d           |                    d*|j        z             |                    d           |                    d+t          j	        z             |                    d            |                    d,           |                    d           |                    d&           |                    d-t          j        z             |                    d.t          j        z             |                    d/|z             |                    d            |                    d0           |                    d1           |                    d/|z             |                    d           |                    d           |                    d           |                    d2           |                    d           d S )3N%srI  z(freefunc)%sNULLrF   r  z@static PyObject* %s(PyObject *spec, PyModuleDef *def); /*proto*/z*static int %s(PyObject* module); /*proto*/z static PyModuleDef_Slot %s[] = {z{Py_mod_create, (void*)%s},z{Py_mod_exec, (void*)%s},-#if CYTHON_COMPILING_IN_CPYTHON_FREETHREADINGfreethreading_compatiblePy_MOD_GIL_NOT_USEDPy_MOD_GIL_USEDz{Py_mod_gil, %s},r   z;#if PY_VERSION_HEX >= 0x030C0000 && CYTHON_USE_MODULE_STATE*Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED&Py_MOD_MULTIPLE_INTERPRETERS_SUPPORTED$Py_MOD_PER_INTERPRETER_GIL_SUPPORTED)no
shared_gilown_gilsubinterpreters_compatiblez#{Py_mod_multiple_interpreters, %s},z	{0, NULL}rJ  z*#else /* CYTHON_PEP489_MULTI_PHASE_INIT */zT#error "Unicode module names are only supported with multi-phase init as per PEP489"r  r  zstruct PyModuleDef %s =r  zstatic struct PyModuleDef %s =rA  z  PyModuleDef_HEAD_INIT,z  %s,z  %s, /* m_doc */r  z	  sizeof(z), /* m_size */z9  (CYTHON_PEP489_MULTI_PHASE_INIT) ? 0 : -1, /* m_size */z  %s /* m_methods */,z  %s, /* m_slots */z  NULL, /* m_reload */z  %s_traverse, /* m_traverse */z  %s_clear, /* m_clear */z  %s /* m_free */z  NULL, /* m_traverse */z  NULL, /* m_clear */r  )r   get_string_constr   r  r   r  r   r  pymodule_create_func_cnamepymoduledef_slots_cnamer@   r  rs   r  r  r   re  rK  r6  )rP   rA   ru  r   cleanup_funcexec_func_cname
gil_optionsubinterp_options           r(   r  z&ModuleNode.generate_pymoduledef_struct  s:   7 	..sw777CCC( 	")F,@@LL!L

2

78885577

U45 	6 	6 	6

?/QRRR

58VVWWW

063TTUUU

.@AAA

BCCC(BC-++, 	 	

&3444

8

PQQQ>B=
 
 #cn9:
;
;	 	
 	

8;KKLLL

8

;

4&&(( 	*JJCDDDJJ ) * * *

8

2

'(((

=!!!

,v/GGHHH

7

3f6NNOOO

8

3

-...

7S_@@BBBCCC

&,---

0111

Lv;LLLMMM

7

NOOO

8

*S-CCDDD

7888

(6+IIJJJ

7

+,,,

8

0111

4v7JJKKK

.1DDEEE

&5666

7

-...

*+++

&5666

8

4

'(((

0111

8r*   c           
      F	   |j         rd|                    |j                   z  }nd}|j                            t          d          }|                    d           |                    |dt          j        d           |                    |t          d           |                    d	           |                    |d
t          j	        d|
                    || j                             |                    d           |                    d           |                    d           |                    d|dt          j	        d           |                    |d|d|j                                        d           |                    |                    d| j                             |                    d           |                    d           |                    d	           |                    |j         d| d           |                    d           |j                            |           |                    d           |j        d         rdnd}|                    d|j         d| d           |                    d           |                    t          j         dt          j         d           |                    d|z             |                    |j                  }|                    |d|j        d|
                    || j                             |                    |t          d           |                    t          j                  }|                    |d |
                    || j                             |                    t          j                  }|                    |d!|
                    || j                             |                    d"|j        d#|d$|                    | j                             t2          j        V|                    t          j        d%t2          j        d&|
                    t          j        | j                             d S d S )'Nr  rI  F
manage_refr  r  r   r  r  z = PyModule_Create(&r  r   r  rA  z.int add_module_result = __Pyx_State_AddModule(z, &r  z! = 0; /* transfer ownership from ra  z pseudovariable */add_module_resultzpystate_addmodule_run = 1;r   r  r  r  r  zPyUnstable_Module_SetGIL(r   zCYTHON_UNUSED_VAR(%s);z = PyModule_GetDict(z; = __Pyx_PyImport_AddModuleRef(__Pyx_BUILTIN_MODULE_NAME); z2 = __Pyx_PyImport_AddModuleRef("cython_runtime"); r  z, "__builtins__", r  z  = __Pyx_PyImport_AddModuleRef("z"); )r   r&  r  r  r	   r   r   r  
put_increfr  r  r_   rs   r   r  r6  r  r@   rf  rX  r  ru  rv  rw  rj  r   r7  r8  )	rP   rA   ru  r   module_tempr+  
dict_cnamerv  runtime_cnames	            r(   r  z(ModuleNode.generate_module_creation_code  s    7 	..sw777CCC n22>e2TT

7888

KK''') 	* 	* 	* 	^5AAA

7

(((''TX>>>@	A 	A 	A
 	

8

0111

3


KK1113 	4 	4 	4

KKco&I&I&K&K&K&K
 	 	 	 	

4))*=txHHIII

/000

3

7

c&99;999:::

8##K000

BCCC(BC-++, 	 	

Qs/?QQ:QQQRRR

8

f3YY8VYYYZZZ

+k9:::::3;PQQ




C,,,''
DH===?	@ 	@ 	@ 	
N%@@@>>v?TUU

''AAAC	D 	D 	D ==f>YZZ

''tx@@@B	C 	C 	C 	


   )))+	, 	, 	,
 )JJ***&&&++F,BDHMMMOP P P P P *)r*   c                     |j         D ]d}|j        dk    rW|j        r|j                            ||           |j                            |          r|j                            ||           ed S Nr  )r   r   r  rr   global_init_coder1  r[  )rP   rA   ru  ru   s       r(   r  z$ModuleNode.generate_global_init_codeU  s     _ 	K 	KE8++: =J//t<<<:99#>> KJ==dEJJJ	K 	Kr*   c                 ~   t          |j                                                  D ]\  }}|j        r|j        s|j        |u r|j                            |          st          |j	        d|j        z             |
                    d           |
                    d|j        j        d|j        d           |
                    |                    d|j	                             |
                    d|j        d|d	|                    |j	                  d
           |
                    d           d S )Nz$Cannot convert '%s' to Python objectrA  zPyObject* wrapped = r  r  wrappedr  r  z", wrapped) < 0) r   r   )r   r   r   r   r   r/   rr   r2  r   r_   r   to_py_functionr   r  r6  rj  )rP   rA   ru  r   ru   s        r(   r  z(ModuleNode.generate_wrapped_entries_code`  sL   !#+"3"3"5"566 	  	 KD%$  !M s**z;;C@@ Z%)%Kej%XYYY

3


J---KKK! " " " 

4229eiHHIII


(((	222245 5 5
 

3!	  	 r*   c                    g }|j         D ]<}|j        s|j        st          j        r |j        dk    s|                    |           =|r|                    t          j	        dd                     |D ]u}|j
                                        }|                    |j                  }|                    d|d|j        d|d|                    | j                             td S d S )Nr  VoidPtrExportr  zif (__Pyx_ExportVoidPtr(z, (void *)&r  ") < 0) )r   r   r   r   r  r   rW   r   r
   r   rr   r*  r  r   r   r   rj  r_   )rP   rA   ru  r   ru   r  r   s          r(   r  z*ModuleNode.generate_c_variable_export_codes  s   _ 	& 	&E	 &+&0&9>9IX9U9Uu%%% 	0  !8JZ![![\\\  0 0!J==??	--ej99


DD%+++yyyOODH---/ 0 0 0 0	0 	00 0r*   c                    g }|j         D ]<}|j        s|j        st          j        r |j        dk    s|                    |           =|r|                    t          j	        dd                     |D ]r}|j
                                        }|                    d|j                                        d|j        d|d|                    | j                             qd S d S )Nr  FunctionExportr  zif (__Pyx_ExportFunction(z, (void (*)(void))r  r=  )r   r   r   r   r  r   rW   r   r
   r   rr   r(  r   r   r   r   rj  r_   )rP   rA   ru  r   ru   r  s         r(   r  z*ModuleNode.generate_c_function_export_code  s$   & 	& 	&E	 &+&0&9>9IX9U9Uu%%% 	0  '(8:JKKM M M ! 0 0!J7799	


J224444KKKIIOODH---	/ 0 0 0 0	0 	0
0 0r*   c           	          t          |          5 }|j        D ],}|j        r#|                     ||j        |j        ||           -	 d d d            d S # 1 swxY w Y   d S r#   )r+  rp   r   generate_type_import_coderr   r_   )rP   r   rA   ru  r3  ru   s         r(   r  z/ModuleNode.generate_type_import_code_for_module  s     #4(( 	g,</ g g' g223
EItUefffg	g 	g 	g 	g 	g 	g 	g 	g 	g 	g 	g 	g 	g 	g 	g 	g 	g 	gs   5AAAc                 t    |j         dd         D ]'}|j        j        r|j                                         (dS )a  
        If fused c(p)def functions are defined in an imported pxd, but not
        used in this implementation file, we still have fused entries and
        not specialized ones. This method replaces any fused entries with their
        specialized ones.
        N)r   rr   r\  "get_all_specialized_function_types)rP   pxd_envru   s      r(   r  z!ModuleNode.specialize_fused_types  sP     *111- 	@ 	@Ez" @
==???	@ 	@r*   c                 F   g }|j         D ]}|j        r|                    |           |ru|                    t	          j        dd                     |j                            t          d          }|	                    |d|j
        d|d|                    | j                             |                    |t                     |D ]}||u r|j        }n%|                    t           j        |j                  }|j                                        }|	                    dt           j        d	|d
|j        d|d
|d|                    | j                             |                    |t                     |j                            |           d S d S )Nr  r  Tr.   = PyImport_ImportModule("	"); if (!) r  r  r  z", (void **)&r=  )r   r   rW   r   r
   r   r  r  r	   r   r   rj  r_   r  r   r%  r   r  r   rr   r*  r)  r]  r  )	rP   r   rA   ru  r   ru   r  r   r  s	            r(   r  z5ModuleNode.generate_c_variable_import_code_for_module  s   ' 	& 	&E# &u%%% 	.  '9IJJL L L>//4/PPDJJDD)))DDOODH---	/0 0 0 OOD.111  
4 
4&==!KEE"MM&*>
KKE!J==??	


(((ejjj%%%11134 4 4 4
 !!$777N''-----/	. 	.r*   c                    g }|j         D ]%}|j        r|j        r|                    |           &|rY|                    t          j        dd                     |j                            t          d          }|
                    |d|j        d|d|                    | j                             |                    |t                     |D ]~}|
                    dt          j        d	|d
|j                                        d|j        d|j                                        d|                    | j                             |                    |t                     |j                            |           d S d S )Nr  r  Tr.  rF  rG  rH  r  r  r   r  r  r=  )r   r   r  rW   r   r
   r   r  r  r	   r   r   rj  r_   r  r   r)  r   r   r   rr   r(  r]  r  )rP   r   rA   ru  r   ru   r  s          r(   r  z5ModuleNode.generate_c_function_import_code_for_module  s   ) 	& 	&E# &
 &u%%% 	.  '(8:JKKM M M>//4/PPDJJDD)))DDOODH---	/0 0 0 OOD.111  4 4


(((
668888
33555511134 4 4 4 !!$777N''-----+	. 	.r*   c           	      x   t          |          5 }|j        D ]}|j        dk    r+|j        s$|                     ||j        |j        ||           8|                     ||||           |                     ||           |j        j	        r| 
                    ||           	 d d d            d S # 1 swxY w Y   d S r6  )r+  rp   r   utility_code_definitionrA  rr   r_   generate_base_type_import_code!generate_exttype_vtable_init_code
early_initgenerate_type_ready_code)rP   rA   ru  r3  ru   s        r(   r  z"ModuleNode.generate_type_init_code  s1    #4(( 	C,<, C C#x//8U/223
EItUeffff77UDJZ[[[::5$GGGz, C55eTBBBC	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	Cs   BB//B36B3c                     |j         j        }|rE|j        |j        k    r7|j        s2|j        s-|j        s(|                     ||| j        ||           d S d S d S d S d S d S r#   )	rr   r  rs   r   rV  is_cython_builtin_typerK  rA  r_   )rP   rA   ru   ru  r3  r  s         r(   rL  z)ModuleNode.generate_base_type_import_code  s    J(	 	])/33EEE* F.7.N F6 F **3	48TK[\\\\\	] 	]EEEEEEEEr*   c                     ||j         v rd S |j        t          j        vr-|j                            t          j        dd                     |                     ||||           |j	        r|j                            t          j        dd                     |
                    |j	        d|j        d|                    |j                  d|                    |j	        |                     |j                             |           d S )Nr  r  )	error_pos	GetVTablez = (struct z*)__Pyx_GetVtable(r  )r  r   r   ctypedef_builtins_mapr   r   r
   r   r,  r  r   r  r  r#  r  r  )rP   rA   rr   r_   ru  r3  s         r(   rA  z$ModuleNode.generate_type_import_code  s8    3%%%F9D666--'6FGGI I I&&tT3Cs&SSS 	C--'5EFFH H HJJ"""%%%55d6HIIII''(:C@@@	B C C C
 	t$$$$$r*   c                    |j         r|j        n	d|j         x}}|j        }	|j        }
|	dv }|sd|	 d}	n|
t          j        v rE|                    |                    |j                   dt          j        |
          d           d S d}	|
t          j	        v rt          j	        |
         }
|t          j
        v rt          j
        |         }|s|J |                    |          }|                    |	|          }|j        }|s|                    |          }|                    | dt          j         d| d	|	 d	|j                                         d

           dt          j         }|                    d           |                    d| d| d| d           |                    d           |r|                    d           n|                    d| d| d| d           |                    d           |                    d| d| d| d           |                    d           |j        r|j        dv r|j        }n3|j        r|j        rd}n"t)          d|j         d|	 d|j                   |                    d|                                 dt          j         d           |                    d| d|            d S )Nr  )__builtin__builtinsr  r  r   __Pyx_BUILTIN_MODULE_NAMEz = __Pyx_ImportType_r  r   r  __PYX_GET_STRUCT_ALIGNMENT_z>#if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000zsizeof(z), z),z%#elif CYTHON_COMPILING_IN_LIMITED_APIz0, 0,r  r   )r   warnignorer   zinvalid value for check_size 'z' when compiling r   __Pyx_ImportType_CheckSize_r  r  z if (!rH  )rf  r  rs   r   r   rU  r   r  r#  renamed_py2_builtins_mapbasicsize_builtins_maprj  r  r  r   r)  r   
check_sizer  is_subclassedRuntimeErrorr
  r0  )rP   rr   ru  r3  r  rS  r  sizeof_objstructr;  rs   	type_name
is_builtinr   r#  alignment_funcr`  s                   r(   r,  z$ModuleNode.generate_type_import_call  s   ?C?P'vt';';Vv`d`tVvVvv9&I	 $??
 	J,k,,,KK$444JJ,,T-?@@mmTE_`iEjmmmo o oF5KD999 9)D	D777#'#>y#I  	4(((33J!11+zJJ* 	Q AA-PPM

 K K&2B K KK K$K K(,	(E(E(G(GK K K	
 	
 	

 Jv7GII

STTT

IYII>IIIIIIJJJ

:;;; 	O
 JJwJJMMM~MM	MMMNNN

7

W-WW.WWCSWWWXXX

8 ? 	nt2MMMJJ! 	nT%7 	n JJlllS^llaeajlln n nXz/?/?/A/AXXFDTXXXYYY

9M99Z99:::::r*   c                 F    t           j                            ||           d S r#   )r   CClassDefNoderO  )rP   ru   ru  s      r(   rO  z#ModuleNode.generate_type_ready_codeP  s!    44UDAAAAAr*   c                 x    | j                             dd          }|                     t          j        |          S r   )rq   r  r   r   rv  )rP   rq   s     r(   rY  z$ModuleNode.is_main_module_flag_cnameS  s5    088dCC(()>@PQQQr*   c           
         |j         }|j        r|                    |j        d|j        d           |j        rC|j        j        r7|                    |j        dt
          j        d|j        j        d           d |j        j        D             }|rX|D ]W}|j	        p|j         }|
                                }|                    |j        d|j        d||j        d           Td S d S d S )Nr  r   r   z = *c                      g | ]}|j         	|S r   )r\  )r   ru   s     r(   r   z@ModuleNode.generate_exttype_vtable_init_code.<locals>.<listcomp>g  s1      %  %  %# % %  %  %r*   r  )rr   r(  r   r  r  r   r  r/   r   vtable_typesignature_cast_stringr   r\  )rP   ru   ru  rr   c_method_entries
meth_entryrl  casts           r(   rM  z,ModuleNode.generate_exttype_vtable_init_codeW  sf    z 	4JJ&&&%%%'( ( ( ~ 7$."> 7

)))---44467 7 7 %  %#':#; %  %  %   	4"2 4 4J","8"KJOK&<<>>DJJ ---&,,, D&111	34 4 4 4'	4 	4	4 	44 4r*   r!  )F)TT)NNF)vr  r  r  child_attrsr@   r^   r`   propertyrQ   rm   rv   rx   r   r   r   r   r   r   r   r   r   r   r   r   rr  rq  r   r  r  r   r  rk  staticmethodr  rV  r   r   r   rj  rV  r   rg  r^  rs  r[  r  r`  r  ra  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`  rc  rn  rd  re  rf  r  r  rg  ri  r   r  r   r  r  r  r  r  r  r  r  r  r  r  r  rL  rA  r,  rO  rY  rM  r   r*   r(   rL   rL   o   sn        (KJI  X)J )J )JV# # # #    4	4 	4 	45 5 5  2 2 2 2]( ]( ](~D D D+ + +a a aF! ! !  [D [D [Dz$\ $\ $\L  *$ $ $  @** ** **X	/ 	/ 	/I I I6S S S. H H \HSa Sa Saj  .  
	2 	2 	2 	2  &   C  C  CD! ! !N N N+ + +I I I  
% % %>G G G"a a aF!A !A !AF  $  .
% 
% 
%F F FR R R
*` *` *`X3 3 3.1. 1. 1.fM M M     :) :) :)x$ $ $0 0 0c  c  c J! ! !2c  c  c J   U  U  U nL  L  L \     26  6  6 p- - -N  N  N `G! G! G!R,  ,  , \%  %  % N     6)  )  ) VA A A   & & &PE E EN  @* * *,  0  2@ @ @E  E  E N! ! ! 0. 0. 0.f  >  $P  P  P d<" <" <"|9 9 9vgC gC gCR% % %' ' '] ] ]B B BN N NL L L\OP OP OPb	K 	K 	K     &0 0 0"0 0 0*g g g
@ 
@ 
@. . .>. . .:C C C] ] ]% % %*<; <; <; <;zB B BR R R4 4 4 4 4r*   rL   c                   ,    e Zd ZdZddZd Zd Zd ZdS )r+  z
    Helper to generate module import while importing external types.
    This is used to avoid excessive re-imports of external modules when multiple types are looked up.
    Nc                     || _         i | _        |r'|                                D ]\  }}|| j        d|z  <   g | _        d S )Nz"%s")ru  importedr   temps)rP   ru  r  r   r   s        r(   r  zModuleImportGenerator.__init__{  sU    	 	5/5577 5 5e/4ftm,,


r*   c           	      @   || j         v r| j         |         S | j        }|j                            t          d          }| j                            |           |                    |d|d|d|           |                    |t                     || j         |<   |S )NTr.  z = PyImport_ImportModule(z); if (unlikely(!r`  )	rv  ru  r  r  r	   rw  rW   r   r  )rP   module_name_stringr  ru  r  s        r(   r  z%ModuleImportGenerator.imported_module  s    ..=!344y~++Nt+LL
$

DD$$$dddJJ8 	9 	9 	9n---,0()r*   c                     | S r#   r   rO   s    r(   r  zModuleImportGenerator.__enter__  s    r*   c                     | j         }| j        D ]7}|                    |t                     |j                            |           8d S r#   )ru  rw  r]  r	   r  r  )rP   excru  r  s       r(   r  zModuleImportGenerator.__exit__  sS    yJ 	. 	.D!!$777N''----	. 	.r*   r#   )r  r  r  __doc__r  r  r  r  r   r*   r(   r+  r+  v  s_                . . . . .r*   r+  c                    | j         o| j        }| j         r| j        s| j        s|s| j        s| j        dk    s|r| j        dk    rt          j        }d}n.| j        dk    rt          j        }d }n| j        dk    rd}d }nd}d }| j        }| j        r|sd}d }t          |          }|
                    | j        |          }|                    | j                  }	|                    |d|	|d           d S d S d S )	Nr  r6  r   r  r  r  r   z; /*proto*/)r  rK  inline_func_in_pxdr  r   r   r   r   rr   r   r   r   r  r  r   )
ru   rA   ru  r  from_cy_utilityr  r  rr   r}  r  s
             r(   r  r    sa   jBU%BOz e. u7H .272Bh2N2NRa2Nx''"1M%KK))"1MKK**$MKK$MKz 	"
 	"$MKD>>D&&K[ ' 2 211%2FGG	

MMIFF 	 	 	 	 	1 2N2Nr*   RefnannyrJ  zj
#if defined(__GNUC__)
#define __Pyx_PACKED __attribute__((__packed__))
#else
#define __Pyx_PACKED
#endif
rF   utility_code_proto_before_types)r  r  proto_block)8cythondeclareobjectcollectionsr   r"  r  r   rO  r   r,   r   r   rF   r   r   r   r   r   r   r   r   Errorsr   r   r   r   r	   r   Utilsr   r   r   r   r   r
   r   r   StringEncodingr   r    r!   r)   r$   r3   r7   rC   r  Node	BlockNoderL   r+  r  rb  rX  r  r   r*   r(   <module>r     s)    ff6VFPV#0 0 0 0 $ # # # # #   				  				 



                                                                   A A A A A A A A A A A A 8 8 8 8 8 8 8 8 o o o o o o o o o o o o o o > > > > > > > > > > J J J J J J J J # # # # # #( ( (
N N N  
  9 9 9, -.* .-* -.* .-*7 >D<4 D<4 D<4 D<4 D<4U_ D<4 D<4 D<4Nx!. !. !. !. !. !. !. !.H  J )(5HII ([ 0 ;= = =   r*   