o
    ¯N iRú ã                   @   s,  d dl Z e jeeeeeeeeeed
 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 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*m+Z+ ddlm,Z, dd„ Z-dd„ Z.dd„ Z/dd„ Z0dd „ Z1d!d"d#d$d%d#d!d"d#d$d%d#d&œZ2G d'd(„ d(ƒZ3G d)d*„ d*ej4ej5ƒZ6d+d,„ Z7d-ej8fd.d/„Z9d-ej8fd0d1„Z:d2d3„ Z;G d4d5„ d5ƒZ<d6d7„ Z=e% >d8d9¡Z?e%d:d;d<d=Z@dS )>é    N)
ÚNamingÚOptionsÚ
PyrexTypesÚ	TypeSlotsÚerrorÚwarningÚpy_object_typeÚUtilityCodeÚEncodedStringÚre)Údefaultdict)ÚSequenceé   )Ú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
   Úbytes_literalÚencoded_string_or_bytes_literal)Úhas_np_pythranc                 C   s   t | |ƒ}t|ƒS ©N)r   Úas_encoded_filename)ÚpathÚnewsufÚnewpath© r(   úN/home/ubuntu/.local/lib/python3.10/site-packages/Cython/Compiler/ModuleNode.pyÚreplace_suffix_encoded'   s   
r*   c                 C   s   t | t ¡ ƒS r#   )r!   ÚsysÚgetfilesystemencoding)r%   r(   r(   r)   r$   ,   s   r$   c                 C   s   | j  ¡  | S r#   )ÚscopeÚcheck_c_classes_pxd©Úmodule_noder(   r(   r)   Úcheck_c_declarations_pxd2   s   
r1   c                 C   s   | j  ¡  | j  ¡  | S r#   )r-   Úcheck_c_classesÚcheck_c_functionsr/   r(   r(   r)   Úcheck_c_declarations7   s   

r4   c                 C   sB   t js|jr	d}n|j}t|dƒrtdƒ tj|| jd |jdS )NFÚemit_code_commentszeWarning: option emit_code_comments is deprecated. Instead, use compiler directive emit_code_comments.)Úemit_linenumsr5   Úc_line_in_traceback)	r   Úannotater6   ÚhasattrÚprintr   ÚCCodeConfigÚ
directivesr7   )ÚenvÚoptionsr6   r(   r(   r)   Úgenerate_c_code_config=   s   
ýr?   )Tú&&T)Fú||F)TÚ N)TrA   F)Fr@   T))Ú__lt__Ú__gt__)rC   Ú__le__)rC   Ú__ge__)rE   rF   )rE   rC   )rE   rD   )rD   rC   )rD   rF   )rD   rE   )rF   rE   )rF   rD   )rF   rC   c                   @   s°   e Zd ZdZdd„ Zdeej defdd„Z	deej defdd	„Z
d
d„ Zdd„ Zdeej fdd„Zdeej fdd„Zdeej fdd„Zdeej fdd„Zdd„ ZdS )ÚSharedUtilityExportera¼  
    Class responsible for generating code that imports and exports shared utility functions.

    Mark the positions where the functions should be called with `call_import_code()`/`call_export_code()`.
    The function calls and import/export functions are generated when `generate_exporting_functions()`
    is called. This approach is needed because the list of the shared functions is only known in the later
    stages of compilation.
    c                 C   s@   t |jjƒ| _t |jjƒ| _|| _|| _|dƒ| _|dƒ| _	d S )NzShared function import codezShared function export code)
ÚboolÚcontextÚshared_c_file_pathÚin_shared_utility_moduleÚshared_utility_qualified_nameÚusing_shared_utility_moduleÚposr-   Úimport_codeÚexport_code)ÚselfrN   Úmod_init_subfunctionr-   r(   r(   r)   Ú__init__x   s   
zSharedUtilityExporter.__init__Úshared_func_definitionsÚreturnc                 C   ó   t | jo|ƒS r#   )rH   rK   ©rQ   rT   r(   r(   r)   Úhas_shared_exports€   ó   z(SharedUtilityExporter.has_shared_exportsc                 C   rV   r#   )rH   rM   rW   r(   r(   r)   Úhas_shared_importsƒ   rY   z(SharedUtilityExporter.has_shared_importsc                 C   ó   | j  |¡ d S r#   )rO   Úset_call_code©rQ   Úcoder(   r(   r)   Úcall_import_code†   ó   z&SharedUtilityExporter.call_import_codec                 C   r[   r#   )rP   r\   r]   r(   r(   r)   Úcall_export_code‰   r`   z&SharedUtilityExporter.call_export_codeÚshared_function_definitionsc                 C   s8   dd„ |D ƒ}|j  t dd¡¡ t|| j|ddƒ d S )Nc                 S   ó*   g | ]}|j › d |j› d|j|jf‘qS ©ú(ú)©ÚretÚparamsÚname©Ú.0Úshared_func_defr(   r(   r)   Ú
<listcomp>Ž   ó    ÿÿzQSharedUtilityExporter._generate_c_shared_function_export_code.<locals>.<listcomp>ÚFunctionExportúImportExport.cÚ__Pyx_ExportFunctionúvoid (*{name})(void))ÚglobalstateÚuse_utility_coder	   Úload_cachedÚ_generate_export_coderN   )rQ   r^   rb   Úexportsr(   r(   r)   Ú'_generate_c_shared_function_export_codeŒ   s   þ
ÿz=SharedUtilityExporter._generate_c_shared_function_export_codeÚfunction_definitionsc                 C   sT   dd„ |D ƒ}|j  t dd¡¡ t| jjjƒ}dtj	› }t
|| j|||dƒ d S )Nc                 S   rc   rd   rg   rk   r(   r(   r)   rn   š   ro   z\SharedUtilityExporter._generate_c_shared_function_import_code_for_module.<locals>.<listcomp>ÚFunctionImportrq   Ú__Pyx_ImportFunction_úvoid (**{name})(void))rt   ru   r	   rv   r
   r-   rI   rL   r   Ú	cyversionÚ_generate_import_coderN   )rQ   r^   rz   ÚimportsrL   Úimport_funcr(   r(   r)   Ú2_generate_c_shared_function_import_code_for_module—   s   þ
ÿÿzHSharedUtilityExporter._generate_c_shared_function_import_code_for_moduleÚshared_utility_functionsc                 C   óF   |   |¡r!| j}|  ||¡ W d   ƒ d S 1 sw   Y  d S d S r#   )rX   rP   ry   ©rQ   rƒ   Ú
inner_coder(   r(   r)   Ú_generate_exports¦   ó   
þ"ÿÿz'SharedUtilityExporter._generate_exportsc                 C   r„   r#   )rZ   rO   r‚   r…   r(   r(   r)   Ú_generate_imports®   rˆ   z'SharedUtilityExporter._generate_importsc                 C   s4   |j j}| | j¡ |  |¡ |  |¡ | ¡  d S r#   )rt   rƒ   Úenter_cfunc_scoper-   r‡   r‰   Úexit_cfunc_scope)rQ   r^   rƒ   r(   r(   r)   Úgenerate_exporting_functions¶   s
   

z2SharedUtilityExporter.generate_exporting_functionsN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rS   r   r   ÚSharedFunctionDeclrH   rX   rZ   r_   ra   ry   r‚   r‡   r‰   rŒ   r(   r(   r(   r)   rG   o   s    rG   c                   @   s´  e Zd ZdgZdZdZdZedd„ ƒZdd„ Z	dådd	„Z
d
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdædd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Ze d5d6„ ƒZ!d7d8„ Z"d9d:„ Z#d;d<„ Z$dçd=d>„Z%d?d@„ Z&dAdB„ Z'dCdD„ Z(dEdF„ Z)dGdH„ Z*dIdJ„ Z+dKdL„ Z,dMdN„ Z-dOdP„ Z.dQdR„ Z/dSdT„ Z0dUdV„ Z1dWdX„ Z2dYdZ„ Z3d[d\„ Z4d]d^„ Z5d_d`„ Z6dadb„ Z7dcdd„ Z8dedf„ Z9dgdh„ Z:didj„ Z;dkdl„ Z<dmdn„ Z=dodp„ Z>e dqdr„ ƒZ?dsdt„ Z@dudv„ ZAdwdx„ ZBdydz„ ZCd{d|„ ZDd}d~„ ZEdd€„ ZFdd‚„ ZGdƒd„„ ZHd…d†„ ZId‡dˆ„ ZJd‰dŠ„ ZKd‹dŒ„ ZLddŽ„ ZMdd„ ZNd‘d’„ ZOd“d”„ ZPd•d–„ ZQd—d˜„ ZRd™dš„ ZSd›dœ„ ZTddž„ ZUdŸd „ ZVd¡d¢„ ZWd£d¤„ ZXd¥d¦„ ZYd§d¨„ ZZd©dª„ Z[d«d¬„ Z\d­d®„ Z]d¯d°„ Z^d±d²„ Z_d³d´„ Z`dµd¶„ Zad·d¸„ Zbd¹dº„ Zcd»d¼„ Zdd½d¾„ Zed¿dÀ„ ZfdÁdÂ„ ZgdÃdÄ„ ZhdÅdÆ„ ZidÇdÈ„ ZjdÉdÊ„ ZkdËdÌ„ ZldÍdÎ„ ZmdÏdÐ„ ZndædÑdÒ„ZodÓdÔ„ ZpdÕdÖ„ Zqd×dØ„ ZrdÙdÚ„ ZsdÛdÜ„ ZtdèdÝdÞ„Zudßdà„ Zvdádâ„ Zwdãdä„ ZxdS )éÚ
ModuleNodeÚbodyNc                 C   ó   | j S r#   ©r-   ©rQ   r(   r(   r)   Úlocal_scopeÏ   s   zModuleNode.local_scopec                 C   s  t | jtjƒs	J ‚|dv sJ ‚| jd u r:tj| jjg d| _tj| jjg d| _| jj d| j¡ | jj d| j¡ |j	| j
j	krKtj|j||j	d}|dkrR| jn| j}t |tjƒrc|j |j¡ n|j |¡ | j
j |j¡ |j ¡ D ]}| j
 |¡ qvdd„ }|| j
j|jƒ d S )N)ÚpxdÚutility)Ústatsr   )r“   r<   r˜   c                 S   s    |D ]}|| vr|   |¡ qd S r#   )Úappend)ÚL1ÚL2Úxr(   r(   r)   Úextend_if_not_inø   s
   
€þz-ModuleNode.merge_in.<locals>.extend_if_not_in)Ú
isinstancer“   r   ÚStatListNodeÚ	pxd_statsrN   Úutility_code_statsrš   Úinsertr<   r-   ÚCompilerDirectivesNodeÚextendr›   Úutility_code_listÚ
c_includesÚvaluesÚprocess_includeÚincluded_files)rQ   Útreer-   ÚstageÚtarget_statsÚincrŸ   r(   r(   r)   Úmerge_inÔ   s$   
zModuleNode.merge_inTc                 C   s4   |j D ]}| j|j_||jjjd< q| j |¡ d S )NÚinternal)Úc_class_entriesÚfull_module_nameÚtypeÚmodule_namer-   r<   r°   )rQ   r-   Úinternalise_c_class_entriesÚentryr(   r(   r)   Úmerge_scopeÿ   s   

zModuleNode.merge_scopec                 C   s   t j| j| j| jd}|S )N)r<   r“   )r   r¥   rN   r<   r“   )rQ   r“   r(   r(   r)   Úwith_compiler_directives  s   z#ModuleNode.with_compiler_directivesc                 C   sÌ   t |ƒr	t |¡ | jr| jd |_tjsd  |_| _n)tjrAt	dt
 | j¡ ƒ|_| jd ur@t	|jd | j ƒ|_| jj|j_n| j|_| j|_| j |¡ t ¡ }| |¡rd| j t dd¡¡ d S d S )NÚold_style_globalszFile: %s (starting at line %s)Ú
ÚCythonPyMutexPublicCheckzSynchronization.c)r"   r   Úinclude_pythran_genericr<   rº   r   Ú
docstringsÚdocÚembed_pos_in_docstringr
   r   Úrelative_positionrN   Úencodingr“   Úanalyse_declarationsr   Úget_cy_pymutex_typeÚfind_shared_usages_of_typer-   ru   r	   rv   )rQ   r=   Úcy_pymutex_typer(   r(   r)   rÃ     s.   

€
ÿÿýzModuleNode.analyse_declarationsc                 C   sd   | j }|jr|  |¡ t|j ¡ ƒD ]\}}|jr/|j |u r/|jr/|jj	s)|jj
r/|j |¡ qd S r#   )r-   Úhas_import_starÚ*create_import_star_conversion_utility_codeÚsortedÚentriesÚitemsÚcreate_wrapperÚis_typer´   Úis_enumÚis_cpp_enumÚcreate_type_wrapper©rQ   r=   rj   r·   r(   r(   r)   Úprepare_utility_code)  s   
ÿÿÿ€ýzModuleNode.prepare_utility_codec                 C   s\   | 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)rQ   r>   Úresultr=   r(   r(   r)   Úprocess_implementation4  s   
z!ModuleNode.process_implementationc                 C   s*   | j D ]}|jD ]	}|jr  dS qqdS )Nr   r   )rÕ   Úcfunc_entriesÚdefined_in_pxd)rQ   Úmoduler·   r(   r(   r)   Úhas_imported_c_functions>  s   

ÿÿz#ModuleNode.has_imported_c_functionsFc                 C   s*   t ||ddst| jdtj |¡ ƒ‚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   rN   Úosr%   Úbasename)rQ   r%   rá   r(   r(   r)   Úassure_safe_targetE  s   
ÿÿþzModuleNode.assure_safe_targetc                 C   sª  d"dd„}||j dd}||jƒ}||jƒ}||jƒ}|s$|s$|s$|rÓt|jdƒ|_|  |j¡ t 	¡ }	t
||ƒ}
t |	| |
¡}| ¡  |jd }|jd }|jd	 }|jret|jd
ƒ|_t |j¡}nd }| ¡  |  tj|¡}| |¡ | d¡ | d¡ |  ||¡ |jr‘|  |g |¡ | d¡ |  tj|¡}| d| ¡ | d¡ |  || ¡ ¡ | d¡ |  |¡ |rÜ| d¡ |D ]}|  |j|¡ |rÖ|   |j|¡ | !|¡ qÄ|rô| d¡ |D ]}|  "|||¡ | !|¡ qå|r| d¡ |D ]}|  "|||¡ | !|¡ qþ| d¡ | d| ¡ | d¡ | d¡ | d¡ | d¡ |  #d|¡}t$d|j% &¡ ||f ƒ}| d| 'd¡ ¡ | d| ¡ | d¡ | d¡ | d¡ | d| &¡  ¡ | d¡ | d| &¡  ¡ | d¡ | d| &¡  ¡ | d¡ | d| ¡ | d¡ | d ¡ | d!|||f ¡ | d¡ | d¡ | d| ¡ t(|jƒ}|	 )|¡ W d   ƒ d S 1 sÌw   Y  d S d S )#Nr   c                    s   ‡ ‡fdd„| D ƒS )Nc                    s.   g | ]}|j d ksˆ r|jsˆr|jr|‘qS )Úpublic)Ú
visibilityÚapirÞ   ©rl   r·   ©rè   r˜   r(   r)   rn   O  s    
ÿÿþþÿzAModuleNode.generate_h_code.<locals>.h_entries.<locals>.<listcomp>r(   )rÊ   rè   r˜   r(   rê   r)   Ú	h_entriesN  s   z-ModuleNode.generate_h_code.<locals>.h_entriesr   )rè   z.hÚh_codeÚtype_declarationsÚendz.pxirB   ú#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. */ÚPyInitzBUse PyImport_AppendInittab(%s, %s) instead of calling %s 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;Ú}z/#define %s() __PYX_WARN_IF_%s_INIT_CALLED(%s()))r   r   )*Útype_entriesÚvar_entriesrÝ   r²   r*   Úc_fileÚh_filerå   r   ÚCCodeWriterr?   Ú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_coder´   Úgenerate_cclass_include_codeÚuse_entry_utility_codeÚgenerate_public_declarationÚmod_init_func_cnamer
   rµ   Úas_c_string_literalÚrstripr   Úcopyto)rQ   r=   r>   rÛ   rë   Úh_typesÚh_varsÚh_funcsÚh_extension_typesÚh_code_writerÚc_code_configrt   Úh_code_startÚh_code_mainÚ
h_code_endÚi_codeÚh_guardÚ	api_guardr·   Úpy3_mod_func_nameÚwarning_stringÚfr(   r(   r)   rÙ   M  s²   






















ÿ



ÿ
ÿ


ÿ

$ÿ¬zModuleNode.generate_h_codec                 C   sF   |  dtj|j |j¡f ¡ |r!|  d|jj|jdd ¡ d S d S )Nú%s %s;zcdef extern %sr   ©Úpyrex)r  r   Úextern_c_macror´   Údeclaration_codeÚcname)rQ   r·   rì   r  r(   r(   r)   r  ¯  s   þ
ÿÿz&ModuleNode.generate_public_declarationc                 C   s   |   ||j¡}| dd¡S ©Nrò   Ú__)Úpunycode_module_nameÚqualified_nameÚreplace)rQ   Úprefixr=   r  r(   r(   r)   r  ·  s   zModuleNode.api_namec              	      sô  d(dd„}||j ƒ}||jƒ}||jƒ}|s|s|sd S t|jdƒ|_|  |j¡ t ¡ ‰ t	||ƒ}t 
ˆ | |¡}	|	 ¡  ˆ  ¡  |  tj|¡}
ˆ  |
¡ ˆ  d¡ ˆ  d¡ ˆ  d¡ d)‡ fd	d
„	}ˆ  d¡ |jrtj |j¡}t|ƒ}ˆ  d| ¡  ¡ |r§ˆ  d¡ |D ]}|j}ˆ  d|j ¡ ˆ  d|j|jf ¡ ˆ j |¡ qˆ|rÚˆ  d¡ |D ])}t|jƒ}| tj|j ¡}ˆ  d| !|¡ ¡ ˆ  d|j |f ¡ ˆ j |¡ q°|rˆ  d¡ |D ])}t|jƒ}| tj"|j ¡}ˆ  d| !|¡ ¡ ˆ  d|j |f ¡ ˆ j |¡ qä|r|ddƒ |r|ddƒ |r&|ddƒ ˆ  d¡ ˆ  d|  d|¡ ¡ ˆ  d¡ ˆ  d|j# ¡  ¡ ˆ  d¡ |D ]}| tj|j ¡}|j $¡ }ˆ  dtj%|j  ¡ ||f ¡ qL|D ]}| tj"|j ¡}|j &¡ }ˆ  dtj%|j  ¡ ||f ¡ qnt'ˆ |j#did}|D ]}| j(|jˆ |ddd  qšW d   ƒ n	1 s´w   Y  ˆ  d!¡ ˆ  d"¡ ˆ  d#¡ ˆ  d$¡ ˆ  d%¡ ˆ  d&¡ ˆ  d¡ ˆ  d'|
 ¡ t)|jƒ}zˆ  *|¡ W | +¡  d S | +¡  w )*Nr   c                    s   ‡ fdd„| D ƒS )Nc                    s    g | ]}|j sˆ r|jr|‘qS r(   )rè   rÞ   ré   ©r˜   r(   r)   rn   ½  s    ÿÿ
ÿzEModuleNode.generate_api_code.<locals>.api_entries.<locals>.<listcomp>r(   )rÊ   r˜   r(   r0  r)   Úapi_entries¼  ó   z1ModuleNode.generate_api_code.<locals>.api_entriesz_api.hz#ifdef __MINGW64__z#define MS_WIN64rô   Tc                    s8   t j| ||d\}}|rˆ  |¡ |rˆ  |¡ d S d S )N)Úinclude_requires)r	   Úload_as_stringÚput)rj   Úsrc_filer3  ÚprotoÚimpl©rì   r(   r)   Úput_utility_codeÕ  s   
ÿz6ModuleNode.generate_api_code.<locals>.put_utility_coderï   z#include %srB   zstatic PyTypeObject *%s = 0;ú#define %s (*%s)zstatic %s = 0;ú#define %s %sÚVoidPtrImportrq   r{   Ú
TypeImportzstatic int %s(void) {ÚimportzPyObject *module = 0;z#module = PyImport_ImportModule(%s);zif (!module) goto bad;zRif (__Pyx_ImportFunction_%s(module, %s, (void (**)(void))&%s, "%s") < 0) goto bad;zIif (__Pyx_ImportVoidPtr_%s(module, %s, (void **)&%s, "%s") < 0) goto bad;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Ý   r²   r*   rø   Úapi_filerå   r   rú   r?   rû   rü   r  r  r   r	  r  r  rù   rã   r%   rä   r$   r  r´   Útypeptr_cnameÚtypeobj_cnamert   r  r   ÚmangleÚfunc_prefix_apirj   r(  Úvarptr_prefix_apir-  Úsignature_stringr~   Úempty_declaration_codeÚModuleImportGeneratorÚgenerate_type_import_callr   r  Úclose)rQ   r=   r>   rÛ   r1  Úapi_varsÚ	api_funcsÚapi_extension_typesr  rt   r   r:  Ú
h_filenamer·   r´   r)  ÚsigÚimport_generatorr#  r(   r9  r)   rÚ   »  sº   










ÿ










ÿÿ
ÿÿÿÿ







zModuleNode.generate_api_codec                 C   s$   |  dtjt dd¡|jf ¡ d S )Nú	%s %s %s;ÚPyTypeObjectÚ	DL_IMPORT)r  r   r'  r   Úpublic_declrJ  )rQ   r´   rì   r(   r(   r)   r  "  s
   
ýz&ModuleNode.generate_cclass_header_codec                 C   sh   |  d|j|jf ¡ | ¡  |jj}|r)|D ]}|  d|jj|jdd ¡ qn|  d¡ | 	¡  d S )Nzcdef extern class %s.%s:zcdef %sr   r%  Úpass)
r  rµ   rj   Úindentr-   r÷   r´   r(  r)  Údedent)rQ   r´   r  r÷   r·   r(   r(   r)   r  (  s   ÿÿÿ
z'ModuleNode.generate_cclass_include_codec                 C   s  | j |jdd | j}tjs|jr%tjdkp|jdk}tj|| jjd}nt	 
¡ }t||ƒ}t	j|| ||jd}| ¡  |d }	| j|_| j|_|  ||||j|	¡ | t¡ |d }
|
 d| j ¡  ¡ |  ¡ }|
 d	| ¡ |
 d
| ¡ |
 d¡ |
 d|j ¡  ¡ |d }
| j|||
dd |d }
|  ||
¡ |  ||
¡ |  ||
¡ | j  ||
¡ |d }
|  !||
¡ |  "||
¡ |j#rÉ|  $||
¡ |d  %t& 'dd¡¡ |  (||d ¡ |  )||d ¡ |  *||d ¡ t+| j|  ,| j| j-|d ¡| j-ƒ}|  .|d d… |||d ¡ |  /||d ¡ tj0r|  1||d ¡ |  2|d ¡ |  3|||¡ |	 4d¡ |j5d d … D ]}| |¡ q9| 6|
¡ | 7¡  |  8|||¡ t9|jƒ}z| :|¡ W | ;¡  n| ;¡  w d|_<|j=ru|  >||¡ 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;rB   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   r8   r   ÚAnnotationCCodeWriterÚcompilation_sourcerb  r   rú   r?   rû   rd  Úinitialize_main_c_coderN   Ú
module_posr<   Úgenerate_module_preambleÚembedded_metadataru   Úrefnanny_utility_coder  r³   r  Úis_main_module_flag_cnamer-  r  Úgenerate_cached_builtins_declsÚgenerate_lambda_definitionsÚgenerate_variable_definitionsr“   Ú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_traverserG   rR   r-   Úgenerate_module_init_funcÚgenerate_module_cleanup_funcÚembedÚgenerate_main_methodÚgenerate_filename_tableÚ!generate_declarations_for_modulesÚwriter§   rŒ   Úfinalize_main_c_codeÚgenerate_module_state_endr   r  rR  Úc_file_generatedÚ	gdb_debugÚ_serialize_lineno_mapÚ_generate_annotations)rQ   r=   r>   rÛ   Úmodulesra  Ú
rootwriterr  rt   rì   r^   Úmodule_is_mainÚshared_utility_exporterÚutilcoder#  r(   r(   r)   rØ   5  sš   þ
ý
ÿ

ÿýÿ


ÿzModuleNode.generate_c_codec                 C   sd  |   |¡ tjp
|j}|r.tj |¡r.dd lm  m} | 	|¡ 
¡ }| ¡ D ]}d |_q'nd }|j|j|j|d | jjs@d S | jjj}tj tj |j¡¡}	| jjD ][}
tj tj |	|
¡¡}tj |¡}| |	¡smqT||
| jdd}|sxqT||	kr§tj |¡s§zt |¡ W n ty¦ } zdd l}|j|jkrœ‚ W Y d }~nd }~ww |j|||d qTd S )Nr   )Úcoverage_xmlT)Ú
source_posÚinclude)r8   r   Úannotate_coverage_xmlrã   r%   ÚexistsÚxml.etree.ElementTreeÚetreeÚElementTreeÚparseÚgetrootÚiterÚtailÚsave_annotationÚmain_source_filerø   r-   r«   rI   Úsearch_include_directoriesÚabspathÚdirnameÚjoinÚ
startswithrN   ÚmakedirsÚOSErrorÚerrnoÚEEXIST)rQ   r–  rÛ   r>   Úcoverage_xml_filenameÚETrš  ÚelÚsearch_include_fileÚ
target_dirÚincluded_fileÚtarget_fileÚtarget_file_dirÚsource_fileÚer¯  r(   r(   r)   r”    sD   
ÿ

ÿ€þðz ModuleNode._generate_annotationsc           
      C   sÄ   |j j}|j ¡ }ttƒ}t|ƒD ]\}\}}|dkr+|jd ur+|||f  |d ¡ q| 	d¡ t
| ¡ ƒD ]\\}}}	|jd usDJ ‚|jdd tt|	ƒ¡|jt|ƒd q7| d¡ | ¡  d S )Nr   r   ÚLineNumberMappingÚ
LineNumberú )Ú	c_linenosÚsrc_pathÚ
src_lineno)rI   Úgdb_debug_outputwriterÚbufferÚ
allmarkersr   ÚlistÚ	enumerateÚfilenamer›   ÚstartrÉ   rË   Ú	add_entryr«  ÚmapÚstrrî   Ú	serialize)
rQ   r=   ÚccodewriterÚtbÚmarkersÚdÚc_linenoÚsrc_descrÀ  r¾  r(   r(   r)   r“  Ã  s$   
€
ü
z ModuleNode._serialize_lineno_mapc                 C   s<   ||vrd||< |j D ]	}|  |||¡ q| |¡ d S d S )Nr   )Úcimported_modulesrÖ   r›   )rQ   r=   Úmodule_listÚmodules_seenÚimported_moduler(   r(   r)   rÖ   Ø  s   
üz"ModuleNode.find_referenced_modulesc           	         s¢   t tƒ‰|D ]'}ˆ| }|jj}|r-ˆ|ƒ}ˆ|  |¡ ˆ |¡}|d u r'n|jj}|sqtƒ ‰g ‰‡ ‡‡‡‡‡fdd„‰ t|ƒD ]}ˆ ˆ| ƒ qBˆ ¡  ˆS )Nc                    sD   | ˆv rd S ˆ  | ¡ ˆˆ| jƒ D ]}ˆ ˆ| ƒ qˆ | ¡ d S r#   )Úaddr´   r›   )ÚuÚv©ÚdfsÚgetkeyrÛ   ÚseenÚ
subclassesÚ	type_dictr(   r)   rÚ  ñ  s   
z1ModuleNode.sort_types_by_inheritance.<locals>.dfs)	r   rÄ  r´   Ú	base_typer›   ÚgetÚsetÚreversedÚreverse)	rQ   rÞ  Ú
type_orderrÛ  ÚkeyÚ	new_entryÚbaseÚbase_keyÚ
base_entryr(   rÙ  r)   Úsort_types_by_inheritanceß  s(   
ú€
z$ModuleNode.sort_types_by_inheritancec                 C   sD  i g }}i g }}|D ]{}|j D ]C}|jrT|jsT|j}	|	j}
|
s"q|
|v rKddlm} t|j|ƒs9J t	|jƒƒ‚t||
 j|ƒsJJ t	||
 jƒƒ‚q|||
< | 
|
¡ q||u }|jD ]*}|jr†|sf|jr†|j}	|	jr†|js†|j}	|	j}
|
|vs}J |
ƒ‚|||
< | 
|
¡ q\qdd„ }|  |||¡}dd„ }|  |||¡}||fS )Nr   )ÚNonManglingModuleScopec                 S   r”   r#   )Úvtabstruct_cname©Ú
entry_typer(   r(   r)   rì    ó   z8ModuleNode.sort_type_hierarchy.<locals>.vtabstruct_cnamec                 S   r”   r#   )Úobjstruct_cnamerí  r(   r(   r)   rð  $  rï  z7ModuleNode.sort_type_hierarchy.<locals>.objstruct_cname)r²   ÚusedÚin_cincluder´   rì  r	   rë  r    r-   rÊ  r›   rö   rÞ   Úis_extension_typerð  rê  )rQ   rÓ  r=   Ú	vtab_dictÚvtab_dict_orderÚvtabslot_dictÚvtabslot_dict_orderrß   r·   r´   rå  rë  Úall_defined_hererì  Ú	vtab_listrð  Úvtabslot_listr(   r(   r)   Úsort_type_hierarchyÿ  sJ   


$
€

€ø
ÿÿzModuleNode.sort_type_hierarchyc                 C   sh   t  d¡}i g }}|jD ]}||jƒ}||vsJ |ƒ‚|||< | |¡ q|  |||¡|jd d …< d S )Nrð  )ÚoperatorÚ
attrgetterr²   r´   r›   rê  )rQ   r=   Úkey_funcÚ
entry_dictÚentry_orderr·   rå  r(   r(   r)   r×   +  s   



ÿzModuleNode.sort_cdef_classesc                    s  |D ]	}|   |j|¡ qt|ƒ‰ tƒ }|D ]?}||u }	g }
|jD ]$}|jjr:|jr:|j|vr9| |j¡ |
 |¡ q |	s?|j	rD|
 |¡ q ‡ fdd„|
D ƒ}
|  
|
|¡ q|D ]}|  |j|¡ |  ||¡ qW|D ]}|  ||¡ |  ||¡ |  ||¡ |  ||¡ qid S )Nc                    s   g | ]}|ˆ vr|‘qS r(   r(   )rl   Út©Úvtabslot_entriesr(   r)   rn   F  s    z8ModuleNode.generate_type_definitions.<locals>.<listcomp>)Ú!generate_objstruct_predeclarationr´   rá  rö   Ú	is_ctuplerñ  rj   rÖ  r›   rÞ   r  Úgenerate_objstruct_definitionÚgenerate_typeobj_predeclarationÚgenerate_exttype_vtable_structÚ$generate_exttype_vtabptr_declarationÚ*generate_exttype_final_methods_declaration)rQ   r=   r•  rù  rú  r^   r·   Úctuple_namesrß   Ú
definitionrö   r(   r  r)   Úgenerate_type_definitions6  s6   


€

€üz$ModuleNode.generate_type_definitionsc           
      C   sà   |d }|  d¡ |  d¡ ddd„ |D ƒv r+|  d¡ |  d¡ |  d	¡ |  d
¡ |  ||¡\}}|  |||||¡ |d }|D ]+}||u }	|  d¡ |  d|j ¡  ¡ |  |||	|¡ |  |||	¡ |  |||	¡ qBd S )Nrí   rB   z/*--- Type declarations ---*/zcpython.arrayc                 S   s   g | ]}|j ‘qS r(   )r-  )rl   Úmr(   r(   r)   rn   W  s    z@ModuleNode.generate_declarations_for_modules.<locals>.<listcomp>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)
rQ   r=   r•  rt   Útypecoderù  rú  Ú
modulecoderß   Údefined_herer(   r(   r)   r  Q  s*   






ÿ
úz,ModuleNode.generate_declarations_for_modulesc                 C   s   |   t |d¡¡ d S )Nrl  )rƒ  r	   r„  )r^   rj   r(   r(   r)   Ú_put_setup_codeh  s   zModuleNode._put_setup_codec                 C   sæ  |  ¡  |r | d¡ | tj|ddd¡ | d¡ | d¡ | d¡ | d¡ | d	¡ |  |d
¡ t|j ¡ tj	dD ]}|j
|jkrL| |¡ q?| d¡ | d¡ | d¡ | d¡ | d¡ |jd  d¡ ddlm} | d| dd¡› d¡ | dt|ƒ ¡ | dtj|jjv  ¡ |j t dd¡¡ |  |d¡ |jjjr²|  |d¡ n|  |d¡ |  |d ¡ |  |d!¡ d"tj› d#tj› d$tj› d%tj› d&tj› d'tj› d(}d)tj› d#tj › d*}	d+}
|j!d uröt"|j!ƒ}
| d,¡ | d-|
› ¡ | d.¡ | d/¡ | d0¡ | d.¡ | d1¡ | ||	 ¡ | d¡ | |d ¡ | d.¡ | d2¡ | d3¡ | d¡ |  #|| $¡ ¡ | d¡ | d4|  %tj&|¡ ¡ | d4|  %tj'|¡ ¡ | d5¡ | j(|||d6d7 | d¡ | d8¡ | d9¡ | d.¡ | d¡ |j)d: r®| d¡ | d;¡ | d<¡ | d.¡ | d¡ | d=¡ | d>¡ | d?¡ | d¡ | d@¡ | d.¡ | d¡ |j)dA rÙdBndC}| dD|› ¡ | d.¡ |j)dE }|j)dF }|dGvr |s t*| j+dHƒ | dIt"|dJkƒ› ¡ | dKt"|dLkƒ› ¡ |dMvr&| dN|› d¡ |dOkr.dP}n|dQkr6dR}n| ,¡ }| dS|› dT¡ | dU|› dV¡ | -t .dWdX¡d+ ¡ | t /dYdZ¡¡ t0j1 2|¡ t0j1 3|¡ t0j4 3|¡ | -t5j6¡ |  |d[¡ | d¡ | d\¡ | d]|j7 ¡ t8j9d urž| d^tj: ¡ | d.¡ | d_tj ¡ | d`tj ¡ | datj;tj<f ¡ | dbtj ¡ | t /dcd¡¡ | t ddd¡¡ | t /ded¡¡ t=|ƒrñ| t /dfdg¡¡ d S d S )hNz/* BEGIN: Cython Metadataé   T)r^  Ú	sort_keyszEND: Cython Metadata */rB   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ÚCythonABIVersionrl  Ú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   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 1z&#ifdef CYTHON_FREETHREADING_COMPATIBLEz##if CYTHON_FREETHREADING_COMPATIBLEz:#define __Pyx_FREETHREADING_COMPATIBLE Py_MOD_GIL_NOT_USEDz6#define __Pyx_FREETHREADING_COMPATIBLE Py_MOD_GIL_USEDÚfreethreading_compatibleÚPy_MOD_GIL_NOT_USEDÚPy_MOD_GIL_USEDz'#define __Pyx_FREETHREADING_COMPATIBLE Ú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)r0  r1  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 %s = %s;zstatic const char *%s;ÚFastTypeChecksÚGetRuntimeVersionÚAddModuleRefÚPythranConversionzCppSupport.cpp)>r  r  ÚjsonÚdumpsr  rÉ   r¨   r©   r   ÚsortkeyÚlocationÚINITIALrŽ  rt   rB   r  r.  r   r   ÚdivisionrI   Úfuture_directivesru   r	   r„  r>   Úcplusr   Úfilename_cnameÚfiletable_cnameÚlineno_cnameÚclineno_cnameÚline_c_macror7   Úintr
  r  r  r  r	  r  r<   r   rN   Útitler5  r4  rv   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"   )rQ   r=   r>   rÒ  Úmetadatar^   r¯   r  Úmark_errpos_codeÚ
cline_infoÚdefault_cline_runtimeÚft_compatibler,  r-  Úc_string_func_namer(   r(   r)   rx  l  s  






€




ÿ
ÿ
ÿÿþýüúÿ











































ÿz#ModuleNode.generate_module_preamblec                 C   sÚ   t j}| d¡ | d| ¡ | d| ¡ | d| ¡ | d¡ | d| ¡ | d¡ | d| ¡ | d	¡ | d
¡ |rI| d| ¡ n| d¡ | d| ¡ | d¡ | d| ¡ | 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  )rQ   r^   r  rj   r(   r(   r)   r
    s&   







z-ModuleNode.generate_extern_c_macro_definitionc                 C   s"   |  d¡ |  d¡ |  d¡ d S )Nz#ifndef DL_IMPORTz  #define DL_IMPORT(_T) _Trô   )r  r]   r(   r(   r)   r  %  s   

z#ModuleNode.generate_dl_import_macroc                 C   sf   t |j ¡ tjdD ]}|j|jkr|r| |¡ q
|j|jkr'|r'| |¡ q
|r1| 	d¡ d S d S )Nr  z#include <omp.h>)
rÉ   r¨   r©   r   r@  rA  ÚEARLYrŽ  ÚLATEÚputln_openmp)rQ   r=   rÒ  r^   rg  r'  r¯   r(   r(   r)   r  *  s   
€
€ÿzModuleNode.generate_includesc                 C   sš   ddl m}m} | d¡ | dtj ¡ |jjrA|jjD ]"}| ¡ }||ƒr+| 	¡ }t
 |¡ ¡ }t|ƒ}| d| ¡  ¡ qn| d¡ | d¡ d S )Nr   )Úisabsrä   rB   z!static const char* const %s[] = {ú%s,Ú0ú};)Úos.pathr`  rä   r  r   rG  rt   Úfilename_listÚget_filenametable_entryÚget_descriptionÚpathlibÚPathÚas_posixr$   r  )rQ   r^   r`  rä   rb  Ú	file_pathÚescaped_filenamer(   r(   r)   rŒ  5  s   
ø
z"ModuleNode.generate_filename_tablec                 C   s   d S r#   r(   ©rQ   r=   r^   r(   r(   r)   Úgenerate_type_predeclarationsH  ó   z(ModuleNode.generate_type_predeclarationsc                 C   s:  |D ]4}|j s6|j}|jrq|js|jr|  ||¡ q|jr-|js-|jr-|  |jj	|¡ q|j
r6|  ||¡ q|D ]a}|j sš|j}|jrK|  ||¡ n<|jsQ|jrX|  ||¡ n/|jrb|  ||¡ n%|jrt|jst|jrt|  |jj	|¡ n|jr~|  ||¡ n	|j
r‡|  ||¡ t|dd ƒrš|jjD ]}|j |¡ q‘q9d S )Nr-   )rò  r´   Ú
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  Úgetattrr-   r÷   rt   r  )rQ   rö   r^   r·   r´   Ú	var_entryr(   r(   r)   r  K  s@   €€îz$ModuleNode.generate_type_header_codec                 C   sZ   |  d¡ |jD ]"}|j}|js*|j}| d¡r|dd … }n|}|  d||f ¡ qd S )NrB   Ú__pyx_é   z!typedef struct %s __pyx_gcc33_%s;)r  r²   r´   Útypedef_flagrð  r¬  )rQ   r=   r^   r·   r´   rj   r¥  r(   r(   r)   Úgenerate_gcc33_hackp  s   


ÿ€øzModuleNode.generate_gcc33_hackc                 C   sj   |j j}|j}|jr |js z|jd }W n ty   |}Y nw |}| |j¡ | 	d| 
|j¡ ¡ d S )NÚnumeric_typedefsztypedef %s;)r´   Útypedef_base_typer-   Ú
is_numericÚis_cpp_class_scopert   ÚKeyErrorÚmark_posrN   r  r(  r)  )rQ   r·   r^   rß  Úenclosing_scopeÚwriterr(   r(   r)   rv  ~  s   ÿzModuleNode.generate_typedefc                 C   s$   |j rd|||||f S d||f S )Nz%s %s;
typedef %s %s %s;r$  )r~  )rQ   r´   Úkindrj   r(   r(   r)   Úsue_predeclaration‹  s   þzModuleNode.sue_predeclarationc                 C   sN   |j }|jr|jr| dd dd„ |jD ƒ¡ ¡ | |  ||j|j¡¡ d S )Nztemplate <typename %s>z, typename c                 S   ó   g | ]}|  ¡ ‘qS r(   ©rO  ©rl   ÚTr(   r(   r)   rn   —  ó    zCModuleNode.generate_struct_union_predeclaration.<locals>.<listcomp>)r´   rr  Ú	templatesr  r«  r‰  rˆ  r)  ©rQ   r·   r^   r´   r(   r(   r)   rs  “  s   
ÿz/ModuleNode.generate_struct_union_predeclarationc                 C   s   d||f }d}||fS )Nz%s %s {rc  r(   )rQ   r´   rˆ  rj   ÚheaderÚfooterr(   r(   r)   Úsue_header_footerš  s   zModuleNode.sue_header_footerc                 C   s  |  |j¡ |j}|j}|r†|j}|jo|j}|r&d|jdf }|j t	¡ |  
|||j¡\}}|rK| d¡ | d¡ | d¡ | d¡ | d¡ | |¡ |j}	|	D ]}
| d|
j |
j¡ ¡ qU| |¡ |rˆ| d¡ | d	¡ | d¡ | d
¡ | d¡ d S d S d S )Nz%s %sÚ__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))r…  rN   r´   r-   rˆ  Ú	is_structÚpackedrt   ru   Úpacked_struct_utility_coder“  r)  r  r÷   r(  )rQ   r·   r^   r´   r-   rˆ  r—  r‘  r’  r÷   Úattrr(   r(   r)   rx  Ÿ  s@   ÿ





ÿ




çz+ModuleNode.generate_struct_union_definitionc           
      C   s®   |rH|  d|jd |¡f ¡ |p|o|jj }|r| ¡  |r,|D ]	}	|j|	dd q"|r;|  d|jd |¡f ¡ |rA| ¡  |  d¡ d S |  d|jd |¡f ¡ d S )Nz%s(%s) {ú, F©Únannyz%s(%s);rõ   )r  r)  r«  r´   ÚnogilÚput_ensure_gilÚput_init_var_to_py_noneÚput_release_ensured_gil)
rQ   Ú	arg_declsÚ	arg_namesÚis_implementingÚpy_attrsÚconstructorr´   r^   Ú	needs_gilr™  r(   r(   r)   Úgenerate_cpp_constructor_code¾  s   z(ModuleNode.generate_cpp_constructor_codec              
   C   sþ  |  |j¡ |j}|j}|rý|jr"| dd dd„ |jD ƒ¡ ¡ | d|j ¡ |j	r?d dd„ |j	D ƒ¡}| d| ¡ | d	¡ |  
|j|¡ d
d„ |j ¡ D ƒ}d}d }d }	|jD ]:}
|
jjrn|
jjrn| d¡ n|
jdkry| d¡}n|
jdkr|
}	n|
jjrŒ| d¡ d}| d|
j |
j¡ ¡ q^d|jjv }|s¤|r|rø| ¡ D ]L}g }g }|jjd t|jjƒ|jj … D ]}| | ¡ ¡ | |j¡ qÀ|jjrå| |jj tj¡¡ | tj¡ |sëd}g }|  |||||||¡ qªng }g }|  |||||||¡ |	s|s|rW|r| d¡ |rO| d|j ¡ |r*|  ¡  |	r5| d|	j ¡ |rI|D ]
}
|j!|
dd q:| "¡  | d¡ n| d|j ¡ |rö|rà| d|j|jf ¡ |  ¡  |jD ]}
|
jjsˆ| d|
j|
jf ¡ |j#|
dd qo| "¡  | d¡ | d|j|jf ¡ | d¡ |  ¡  |jD ]!}
|
jjsÊ|j!|
dd | d|
j|
jf ¡ |j#|
dd qª| "¡  | d¡ | d¡ | d¡ n| d|j|jf ¡ | d|j|jf ¡ | d¡ d S d S ) Nztemplate <class %s>z, class c                 S   rŠ  r(   r‹  rŒ  r(   r(   r)   rn   Ö  rŽ  z<ModuleNode.generate_cpp_class_definition.<locals>.<listcomp>ú	struct %sz	, public c                 S   rŠ  r(   r‹  )rl   Ú
base_classr(   r(   r)   rn   Û  rŽ  z : public %sz {c                 S   s   g | ]}|j jr|js|‘qS r(   )r´   Úis_pyobjectÚis_inherited)rl   rº  r(   r(   r)   rn   ß  s
    ÿ
ÿFzstatic z<init>z<del>zvirtual Tr•  ro  z~%s() {z%s();r›  rõ   z~%s();z%s(const %s& __Pyx_other) {z%s = __Pyx_other.%s;z&%s& operator=(const %s& __Pyx_other) {zif (this != &__Pyx_other) {zreturn *this;z%s(const %s& __Pyx_other);z%%s& operator=(const %s& __Pyx_other);rc  )$r…  rN   r´   r-   r  r  r«  r5  r)  Úbase_classesr  rö   rÊ   r©   r÷   Úis_cfunctionÚis_static_methodrj   Úlookup_herer(  rt   rý   Úall_alternativesÚoriginal_argsÚlenÚargsÚoptional_arg_countr›   Úop_arg_structr   Úoptional_args_cnamer§  rž  Úput_var_xdecrefr   Úput_var_incref)rQ   r·   r^   r´   r-   Úbase_class_declr¤  Úhas_virtual_methodsr¥  Ú
destructorr™  r£  Úconstructor_alternativer¡  r¢  ÚargÚdefault_constructorr(   r(   r)   ry  Ï  sÀ   
ÿÿ





ÿó


€



€

£z(ModuleNode.generate_cpp_class_definitionc                 C   s$  |  |j¡ |j}|jp|jpd}|jjrdnd}|  |||¡\}}| |¡ |j}|s3t	|jdƒ nC|d }	|D ]}
|
j
d urF|
j
 |¡ q9|D ],}
|
j
d u rY|
j d¡d }nd|
j d¡d |
j
 ¡ f }|
|	urp|d7 }| |¡ qI| |¡ |jjrŽ|jjr| d	||f ¡ d S d S d S )
NrB   z
enum classÚenumzDEmpty enum definition not allowed outside a 'cdef extern from' blockrp  z::z%s = %sú,ztypedef enum %s %s;)r…  rN   r´   r)  rj   rÏ   r“  r  Úenum_valuesr   Ú
value_nodeÚgenerate_evaluation_codeÚsplitrÛ   rÎ   r~  )rQ   r·   r^   r´   rj   rˆ  r‘  r’  rÁ  Ú
last_entryÚvalue_entryÚ
value_coder(   r(   r)   rw  2  s<   

€
þ
ýz#ModuleNode.generate_enum_definitionc                 C   s|   |  d¡ |jj}|r:|jdkr$|js$|  dtjt dd¡|f ¡ d S |jdkr<|  dtjt dd¡|f ¡ d S d S d S )NrB   ÚexternrY  rZ  r[  ræ   Ú	DL_EXPORT)	r  r´   rJ  rç   rò  r   r'  r   r\  )rQ   r·   r^   rj   r(   r(   r)   r  U  s"   

ý

ýùz*ModuleNode.generate_typeobj_predeclarationc                 C   s²   |j sd S | |j¡ |j}|j}|  |¡ |jrW| d¡ | d|j ¡ |jr9|jjr9| d|jjt	j
f ¡ |jD ]}|jsO| d|j d|j ¡ ¡ q<| d¡ d S d S )NrB   zstruct %s {zstruct %s %s;r•  z(*%s)rc  )rñ  r…  rN   r´   r-   Úspecialize_fused_typesrì  r  rß  r   Úobj_base_cnamerÝ   r«  r(  r)  )rQ   r·   r^   r´   r-   Úmethod_entryr(   r(   r)   r  g  s(   

þ
€öz)ModuleNode.generate_exttype_vtable_structc                 C   s@   |j sd S | |j¡ |j}|jr| d|j|jf ¡ d S d S )Nzstatic struct %s *%s;)rñ  r…  rN   r´   Úvtabptr_cnamer  rì  r  r(   r(   r)   r	  ~  s   þÿz/ModuleNode.generate_exttype_vtabptr_declarationc                 C   sb   |j sd S | |j¡ |jjjD ]}|js.|jr.|j |j¡}| 	|j
¡}| d||f ¡ qd S )Nzstatic %s%s;)rñ  r…  rN   r´   r-   rÝ   r«  Úfinal_func_cnamer(  Úbuild_function_modifiersÚfunc_modifiersr  )rQ   r·   r^   rÌ  ÚdeclarationÚ	modifiersr(   r(   r)   r
  Š  s   ÿ€ûz5ModuleNode.generate_exttype_final_methods_declarationc                 C   s$   |j sd S | |  |d|j¡¡ d S )NÚstruct)r-   r  r‰  rð  )rQ   r´   r^   r(   r(   r)   r  —  s   z,ModuleNode.generate_objstruct_predeclarationc           
      C   s.  |  |j¡ |jsd S |  |d|j¡\}}| |¡ |j}|r7|j}|dkr(d}| dd|j |tj	f ¡ n| d¡ |j
rQ|jrF|jj
sQ| d|j|j
f ¡ |jjD ](}|jr]t}n|j}|jrj| |j¡}	n| |j¡}	|j |¡ | d|	 ¡ qU| |¡ |jd ur•| d	|j|jf ¡ d S d S )
NrÓ  rZ  ÚPyHeapTypeObjectz%s%s %s;)ústruct rB   ÚPyObject_HEADzstruct %s *%s;r•  ztypedef struct %s %s;)r…  rN   r-   r“  rð  r  rß  r~  r   rË  Úvtabslot_cnamerì  r÷   Úis_declared_genericr   r´   Úis_cpp_optionalÚcpp_optional_declaration_coder)  r(  rt   r  Úobjtypedef_cname)
rQ   r´   r^   r‘  r’  rß  Úbasestruct_cnamer™  Ú	attr_typeÚdeclr(   r(   r)   r  œ  sR   ÿ
ýÿÿþÿ

þz(ModuleNode.generate_objstruct_definitionc           
      C   s²   |d }|d }|d }|  ¡ }|jD ]C}	|s|	jrV| d|	jj ¡ | d|	jj ¡ | d|	jj ¡ |	jjd urV| d|	jj ¡ | d|	jj ¡ | d|	jj ¡ qd S )Nrj  rm  rn  zPyTypeObject *%s;ú!Py_CLEAR(clear_module_state->%s);z$Py_VISIT(traverse_module_state->%s);úPyObject *%s;)Úinsertion_pointr²   rÞ   r  r´   rI  rJ  )
rQ   r=   r^   r  rt   rj  rm  rn  Úmodule_state_typeobjr·   r(   r(   r)   r  È  s>   

ÿÿÿÿÿÿÿÿ€òz(ModuleNode.generate_c_class_declarationsc           
      C   sp  |j rd S |jD ]­}|js|js|jdkr|js|jsqd }d }d }|jdkr-tj}d}n%|jdkr=tj}|r:d}nd}n|jdkrRd}d }|j	d urR|j
 |j	¡}|j
}|j}	|jro|sod}d }t|ƒ}| tj|j¡}	d}|rx| d| ¡ |jr†| |j|	|d	¡ n
| |j|	|d	¡ |d ur›| d
| ¡ | d¡ |j|	kr¯| d|j|	f ¡ |j |¡ qd S )NÚprivaterÈ  r[  ræ   rÉ  Ústaticr   z%s ©Údll_linkageú = %sr&  r;  )Úis_cython_builtinr÷   rò  Ú
in_closurerç   rÞ   rñ  r   r'  Úinitr´   Úliteral_coder)  r   rK  Úvarptr_prefixrj   r5  rÙ  rÚ  r(  Úput_safer  rt   r  )
rQ   r=   r^   r  r·   Ústorage_classræ  rê  r´   r)  r(   r(   r)   r  ß  s\   






ÿÿ

Òz*ModuleNode.generate_cvariable_declarationsc                 C   sJ   |j D ]}tjo|jdk }|js|jdks|js|r"t||||ƒ qd S )NrÈ  ræ   )rÝ   r   Úcimport_from_pyxrç   rñ  rè   Úgenerate_cfunction_declaration)rQ   r=   r^   r  r·   Úfrom_pyxr(   r(   r)   r    s   

ÿþ€úz*ModuleNode.generate_cfunction_declarationsc                 C   sd   |j D ],}|js/|jdkr/| |j |j¡¡ |jd ur*|j |j¡}| 	d| ¡ | 
d¡ qd S )Nræ   rç  r&  )r÷   rò  rç   r5  r´   r(  r)  rê  rë  rí  r  )rQ   r=   r^   r·   rê  r(   r(   r)   r~    s   


€úz(ModuleNode.generate_variable_definitionsc                 C   sX  |j }|jD ]"}|jdkr)|j}|j}|r)|  ||¡ |  |||¡ |  ||¡ |  ||¡ | 	¡ rG|  
|||¡ | ¡ rG|  |||¡ | dg¡rS|  ||¡ | ddg¡r`|  ||¡ | g d¢¡rst| jddƒ | d¡ | d	d
g¡r€|  ||¡ | ddg¡r|  ||¡ | ddg¡rš|  ||¡ | dg¡r¦|  ||¡ | ddg¡r³|  ||¡ |jsÅ|jsÅ| dg¡rÅ|  ||¡ | tj¡rÒ|  ||¡ nd|jv rÞt|j jdƒ t !|j"j¡j#D ]}|j$rú| |j%¡rú|  &||||j¡ qæ|  '||¡ |  (||¡ |  )||¡ | d¡ |  *||¡ | d¡ |  +|||¡ | d¡ q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_orderingúMtotal_ordering directive used, but no comparison and equality methods definedú#if CYTHON_USE_TYPE_SPECSr  rô   ),r-  r²   rç   r´   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   rN   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_tablert   ÚPyNumberMethodsÚis_binopÚuser_methodsÚgenerate_binop_functionÚgenerate_property_accessorsr  Úgenerate_getset_tableÚgenerate_typeobj_specÚgenerate_typeobj_definition)rQ   r=   r^   r³   r·   r´   r-   Úslotr(   r(   r)   r€  $  sp   þ

ÿ€


€Èz'ModuleNode.generate_typeobj_definitionsc                 C   s*   |j }|jr| d|j|jf ¡ d S d S )Nzstatic struct %s %s;)r  Úvtable_cnamer  rì  ©rQ   r-   r^   r´   r(   r(   r)   r  `  s   þÿz"ModuleNode.generate_exttype_vtablec                 C   s&   |j }| d| d¡| ¡ f ¡ d S )Nz%s = (%s)o;Úp)r  r  r(  rO  r%  r(   r(   r)   Úgenerate_self_casth  s   þÿzModuleNode.generate_self_castc                 C   sl   | j  t dd¡¡ |jrd}nd}|jddd}|  |j¡}|  d|› d	|› d
|› d|› d|› d¡ d S )NÚCheckTypeForFreelistsúExtensionTypes.cÚ$__PYX_CHECK_FINAL_TYPE_FOR_FREELISTSÚ__PYX_CHECK_TYPE_FOR_FREELISTSrB   T©Úderefzif (likely((int)(z) & re   rš  z	, sizeof(z)))))	rt   ru   r	   rv   Úis_final_typer(  Úname_in_slot_module_staterI  r  )r^   Ú
size_checkÚ
type_cnamer´   Úfreelist_checkÚ
obj_structrI  r(   r(   r)   Úgenerate_freelist_conditiono  s   
ÿ"ÿz&ModuleNode.generate_freelist_conditionc              	      sì  t  dd¡}ˆ  d¡}| ˆ ¡|krd S ˆ j}|j}ˆ  ¡ \}\}	}
}ˆ jj}ˆ jr,g }	‡ fdd„ˆ j	D ƒ}ˆ  
d¡}|rB|jsBd }|sI|rL|jsLd}nd}|rSd}nˆ j dd¡}ˆ  tj¡}ˆ  tj¡}|r|jd	 }| d¡ | d
¡ | dˆ j |¡|f ¡ | d| ¡ | d¡ |jˆ tjdd|› d|› ddd |jp¬|
pª|pª|	p¬|}|rº| dˆ j d¡ ¡ |rßt  ˆ |¡}|j}|jsÍ| |¡}|d u r×d|› d}| d| ¡ n| d¡ |rh|j t dd¡¡ | d
¡ | |¡}| |¡}|   ||› dd|¡ | d¡ | d||f ¡ |jddd}| d ¡ | d!¡ | d¡ | d"| ¡ | d#¡ | d$¡ | d%¡ | d&¡ | d¡ ˆ  !¡ rY| d'¡ | d(¡ | d¡ | d¡ |j t d)d*¡¡ | d+|d,›d-¡ | d.¡ |rŒ|sŒ| d/¡ |r™| d0| "d1¡ ¡ d2}|jrÏ|}|jr¶|jj#r¶|j}|jr¶|jj#sª||urÁd3|j# }nd}| d4|j||j$f ¡ |D ]}|j%j&||d5d6 qÑ|	D ] }|j'd7kr÷d}| (d8|j)|j)f ¡ qà|j*|d9d2d: qà|D ]}| d;|j) ¡ | d<|j) ¡ q|
D ]}| d=|j) ¡ q|j)d>kr0| d?¡ |rQ|jrCd@tj+› dAtj,› dB}ndC}d}| dD|j-|f ¡ | dE¡ |rk| dF¡ |j.d1t/d2d: | dG¡ | d/¡ | 0¡  d S )HNÚtp_newÚ	__cinit__c                    ó   g | ]
}|j  ˆ ¡r|‘qS r(   )r´   Úneeds_explicit_constructionré   r•   r(   r)   rn   ‹  ó    
þÿz4ModuleNode.generate_new_function.<locals>.<listcomp>rB   ú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;ÚIncludeStringHúStringTools.cz > 0r  Ú{zo = (PyObject*)%s[--%s];r,  r  zPy_DECREF(Py_TYPE(o));zmemset(o, 0, sizeof(%s));z##if CYTHON_COMPILING_IN_LIMITED_APIz(void) PyObject_Init(o, t);r  z(void) PyObject_INIT(o, t);úPyObject_GC_Track(o);ú} elseÚAllocateExtensionTyper)  z#o = __Pyx_AllocateExtensionType(t, rÏ  ú);zif (unlikely(!o)) return 0;rõ   zp = %s;ÚoFz(struct %s*)zp->%s = %s%s;úp->©Úextra_access_coderÿ  z5p->%s = PyDict_New(); if (unlikely(!p->%s)) 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->z, NULLzo, a, kz#if (unlikely(%s(%s) < 0)) goto bad;z	return o;rE  zreturn NULL;)1r   ÚConstructorSlotÚmangle_internalÚ	slot_coder  rß  Úget_refcounted_entriesr.  Úis_internalr÷   r¯  Ú
is_specialÚtrivial_signaturer<   rà  r   Úfreelist_nameÚfreecount_namert   r  r(  Ústart_slotfuncr   Úpy_objptr_typer×  Úget_base_slot_functionrI  Úis_builtin_typer/  ru   r	   rv   r4  r  Ú	cast_coderì  rÍ  r´   Úgenerate_explicit_constructionrj   r5  r)  rŸ  Úmodulestateglobal_cnameÚempty_tupleÚ
func_cnameÚput_decref_clearr   r‹   )rQ   r-   r^   Úcclass_entryÚtp_slotÚ	slot_funcr´   rß  Úhave_entriesr¤  Ú
py_buffersÚmemoryview_slicesr.  Úexplicitly_constructable_attrsÚcinit_func_entryÚunused_markerÚfreelist_sizerS  rT  rj  Úneed_self_castr5  Úbase_type_typeptr_cnamer3  Úneeds_error_cleanupÚvtab_base_typeÚstruct_type_castr·   Ú
cinit_argsr(   r•   r)   r  |  s  
ÿ
ÿ





þ
þ
ÿþ


ÿ



þ













ÿ

ÿ
þ
ÿÿ
ÿÿ

ÿz ModuleNode.generate_new_functionc                 C   sÔ   t  d|j¡}| d¡}| |¡|krd S | d¡}|d u s!|js#d S | d¡ |jr3| d|j ¡ |j	|t
jdddd | d¡ | d	¡ | d
|j ¡ | d¡ | d¡ | ¡  |jrh| d¡ d S d S )NÚtp_finalizeÚ__del__rB   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<   rM  rN  r¯  rQ  r  Ú
used_ifdefrU  r   rÓ   r]  r‹   )rQ   r-   r^   r`  Úslot_func_cnamer·   r(   r(   r)   r    s(   






ÿz ModuleNode.generate_del_functionc                    sX  t  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rFd }
ˆ jsQˆ jsQˆ  d¡nd }|ˆ jvrZd }ˆ  ¡ \}\}}}‡ fdd„ˆ jD ƒ}|sw|sw|sw|
sw|r}|  ˆ |¡ |rƒˆ  ¡ r±| d¡ |rd	}nd
}| d| ¡ | d| ¡ | d¡ | d¡ | d¡ | d¡ |r¸| d¡ |	rË|j t dd¡¡ | d| ¡ |
rÒ| d¡ |  ˆ |¡ |rß| d¡ |D ]}|jj||dd qá|| D ]}|jd|j |jdddd qñ|rƒ|j}|js| |¡}t   ˆ |¡}|d ur6|r.|j!r.|j! 
¡ r.| d¡ | d| ¡ nã|jrT|rL|j!rL|j! 
¡ rL| d¡ | d| ¡ nÅ|r^| d| ¡ | d ¡ | d!||f ¡ | d¡ | d"| ¡ |j t d#d¡¡ n–ˆ j" #d$d%¡}|rÕ| ˆ  t$j%¡¡}| ˆ  t$j&¡¡}ˆ j}| d&¡ |  '||› d'|› d(|¡ | d)¡ | d*||| (d+¡f ¡ | d,¡ | d¡ | d)¡ | d-¡ | d.¡ | d/¡ | d0¡ | d)¡ | d1¡ | d2¡ | d¡ | d¡ | d3¡ | d4¡ | d¡ |r| d¡ |	r!| d5¡ | d¡ | )¡  d S )6NÚ
tp_deallocÚ__dealloc__rq  Ú__weakref__rÿ  c                    r7  r(   )r´   Úneeds_explicit_destructionré   r•   r(   r)   rn   O  r9  z8ModuleNode.generate_dealloc_function.<locals>.<listcomp>z#if CYTHON_USE_TP_FINALIZEz!!__Pyx_PyObject_GC_IsFinalized(o)z@(!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))zIif (unlikely(__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);Ú
PyTrashcanr)  z__Pyx_TRASHCAN_BEGIN(o, %s)z.if (p->__weakref__) PyObject_ClearWeakRefs(o);z+if (p->__dict__) PyDict_Clear(p->__dict__);rG  rH  rJ  FT)rœ  Úclear_before_decrefÚhave_gilrB  rv  z4__Pyx_PyType_GetSlot(%s, tp_dealloc, destructor)(o);z+if (PyType_IS_GC(%s)) PyObject_GC_Track(o);r9  zIif (likely(%s)) __Pyx_PyType_GetSlot(%s, tp_dealloc, destructor)(o); elsez"__Pyx_call_next_tp_dealloc(o, %s);ÚCallNextTpDeallocr;  r   r=  z < z
Py_TYPE(o)rA  z%s[%s++] = %s;rF  rC  úPyTypeObject *tp = Py_TYPE(o);ú#if CYTHON_USE_TYPE_SLOTSú(*tp->tp_free)(o);r  ú<freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);úif (tp_free) tp_free(o);r  úPy_DECREF(tp);Ú__Pyx_TRASHCAN_END)*r   rL  rM  r  rß  rN  rU  r   rÓ   r.  r  Úneeds_trashcanr  r  r¯  r÷   rO  r'  Úmay_have_finalizer  rt   ru   r	   rv   Úgenerate_usr_dealloc_callr´   Úgenerate_explicit_destructionÚput_xdecref_clearr)  rI  rX  r/  rW  r-   r<   rà  r   rS  rT  r4  rY  r‹   )rQ   r-   r^   r`  ra  rß  rz  r.  r  rŠ  Úweakref_slotÚ	dict_slotr  r¤  rd  Úexplicitly_destructable_attrsÚfinalised_checkr·   Ú
base_cnamer{  rh  rS  rT  r´   r(   r•   r)   r  8  sò   




ÿ
ÿÿ





ÿ

ÿ




	ÿ

ÿ
ÿ
ÿ
þ
ý
















ÿz$ModuleNode.generate_dealloc_functionc                 C   sr   |  d¡}|r
|jsd S | d¡ | d¡ | d¡ | d¡ | d|j ¡ | d¡ | d¡ | d	¡ d S )
Nr|  rA  rt  ru  z&__Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);rv  z&__Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);rw  rõ   )r¯  rQ  r  r]  )rQ   r-   r^   r·   r(   r(   r)   rŒ  Ü  s   







z$ModuleNode.generate_usr_dealloc_callc                 C   sj  t  d¡}| d¡}|jj}| |¡|krd S | |tjdd¡ |j	dd\}\}}	}
| }d}| 
d¡ |s9|	r?|  ||¡ |r¹t  ||¡}|rQ| 
d| ¡ nh|jrr|j}| 
d¡ | 
d|› d	¡ | 
d
¡ | 
d¡ d}nG| |j¡}| 
d¡ | 
d¡ | 
d| ¡ | 
d|› d	¡ | 
d¡ | 
d¡ | 
d¡ | 
d| ¡ | 
d¡ |j t dd¡¡ d}|s½|râ| 
d¡ | 
dt| ƒ› d¡ | 
d¡ | 
d¡ |j t dd¡¡ |D ]"}d|j }t t|j|¡}| 
d| ¡ | 
d| ¡ | 
d¡ qä|	D ]}|jd }| 
d| ¡ | 
d| ¡ | 
d¡ q	| 
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õ   Tr9  ze = 0;úif (likely(%s)) {z(if (traverse) { e = traverse(o, v, a); }rC  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);ÚCallTypeTraverserJ  ú	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;rD  )r   ÚGCDependentSlotrM  r  rß  rN  rU  r   Úc_returncode_typerO  r  r'  rW  rX  rI  r/  rt   ru   r	   rv   rK  r)  Útypecastr   r´   r‹   )rQ   r-   r^   r_  r`  ra  rß  rb  r¤  rc  rd  Úneeds_type_traverseÚmaybe_needs_type_traverseÚstatic_callr“  r·   Úvar_codeÚvar_as_pyobjectr)  r(   r(   r)   r  ì  s€   


ÿ


ÿ





ÿ




ÿ



ÿ



z%ModuleNode.generate_traverse_functionc                 C   s>  t  d|j¡}| d¡}|jj}| |¡|krd S |jdd\}\}}	}
|s*|	s*|r-d}nd}| |t	j
d|› d¡ |rEtjrE| d¡ |sI|	rO|  ||¡ |r»t  ||¡}|ra| d| ¡ nZ|jr€|j}| d	¡ | d
|› d¡ | d¡ | d¡ n;| |j¡}| d¡ | d| ¡ | d
|› d¡ | d¡ | d¡ | d¡ | d| ¡ |j t dd¡¡ tjrê|D ](}d|j }| d| ¡ |jrÚ|j|tdd n	|j||jdd | d¡ qÀn|D ]
}| d|j ¡ qì|	D ]
}| d|j ¡ qù|jdkr| d¡ | d¡ | d¡ | ¡  d S )NÚtp_clearFr•  rB   r:  rq  zPyObject* tmp;rv  rA  z%inquiry clear = __Pyx_PyType_GetSlot(z, tp_clear, inquiry);zif (clear) clear(o);rõ   r9  r—  rC  rô   z${ __Pyx_call_next_tp_clear(o, %s); }ÚCallNextTpClearr)  rJ  ztmp = ((PyObject*)%s);r›  zPy_XDECREF(tmp);zPy_CLEAR(p->%s);zPy_CLEAR(p->%s.obj);rK  z(__PYX_XCLEAR_MEMVIEW(&p->from_slice, 1);rD  )r   rx  r<   rM  r  rß  rN  rO  rU  r   rœ  r   Úclear_to_noner  r'  rW  rX  rI  r/  rt   ru   r	   rv   r)  rØ  Úput_init_to_py_noner   r´   r‹   )rQ   r-   r^   r_  r`  ra  rß  rb  r¤  rc  rd  Úunusedr   r“  r·   rj   r(   r(   r)   r
  C  sl   

ÿ









ÿ
ù	


z"ModuleNode.generate_clear_functionc                 C   s†   |j |tjdddd | d¡ | d¡ | d¡ | d¡ | d	¡ | d
¡ | d¡ | d¡ | d¡ | d¡ | ¡  d S )NÚsq_itemzPyObject *o, Py_ssize_t iFrr  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õ   )rU  r   rV  r  r‹   )rQ   r-   r^   r(   r(   r)   r  ‘  s0   ÿÿ
ÿ


ÿÿÿz(ModuleNode.generate_getitem_int_functionc                 C   s8  |j j}| d¡}| d¡}| |tjdd¡ | d¡ |r'| d|j ¡ n(| d¡ |  |ddd	d
|¡ | d¡ | d¡ | d¡ | d¡ | d¡ | d¡ | d¡ |rd| d|j ¡ 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);rF  rõ   úelse {úreturn %s(o, i);zJ  "Subscript deletion not supported by " __Pyx_FMT_TYPENAME, o_type_name);©
r  rß  r¯  rU  r   rœ  r  r]  Úgenerate_guarded_basetype_callr‹   ©rQ   r-   r^   rß  Ú	set_entryÚ	del_entryr(   r(   r)   r  ª  sŒ   

ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿz*ModuleNode.generate_ass_subscript_functionc                 C   s‚   |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š  rE  z f = __Pyx_PyType_TryGetSlot(zif (f)z	return f()Útypeptr_cname_in_module_stater  )rQ   rß  Úsubstructurer#  Úfunctyper³  r^   Úbase_tpnamer(   r(   r)   r´  â  s   
 ÿÿ
õz)ModuleNode.generate_guarded_basetype_callc                    s€  |  d¡rd S | |tjdd¡ | d¡ g }|j}|d ur9|jjdks9| |j	¡ |j	jj
}|d ur9|jjdkr$||v s?J ‚d }|rR|jjdkrR|jrN|n|jj
}d|jv }i ‰ tjD ]}|D ]}|  |¡}	|	d urq|	ˆ |<  nq`q\|r¯‡ fdd„tD ƒ}
|
sšd	ˆ vrd
ˆ vrt|jjdƒ nt|jjdƒ d}nd	ˆ vr«d
ˆ vr«t|jjdƒ d}t|
ƒ}tjD ]}| d¡ ¡ }ˆ  |¡}	|	d u rÌ|rË|dv rÌq²| d| ¡ |	d u r³|sÜJ ‚t||f \}}}| d¡ | dˆ | j ¡ | d¡ | d¡ | d¡ | d¡ |d ur•|dkr)| d|rdnd ¡ | d¡ | d¡ n#|dkrE| d|r6dnd ¡ | d ¡ | d¡ ntd!|f ƒ‚d	ˆ v rTd	}nd
}| }| dˆ | j ¡ | d¡ | d"¡ | d¡ | d#¡ |r€| d$¡ n| d%¡ | d&¡ | d'¡ | d'¡ n|rž| d(¡ n| d)¡ | d&¡ | d'¡ | d*¡ n| d+|	j ¡ | d'¡ q²d	ˆ v rd
ˆ vr|s| d,¡ | d¡ | dˆ d	 j ¡ | d¡ | d-¡ | d¡ | d.¡ | d/¡ | d&¡ | d'¡ | d*¡ | d'¡ | d0¡ |r&|jr&| d1|j|jf ¡ | d2¡ | d'¡ | d'¡ | d'¡ | ¡  d S )3NÚ__richcmp__Útp_richcomparez"PyObject *o1, PyObject *o2, int opzswitch (op) {rÈ  r   c                    s   g | ]
\}}|ˆ v r|‘qS r(   r(   )rl   Ú	from_nameÚto_name©Ú
comp_entryr(   r)   rn   	  ó    z8ModuleNode.generate_richcmp_function.<locals>.<listcomp>Ú__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;r@   zif (%s order_res) {z!!ú!zret = __Pyx_NewRef(Py_False);z} else {rA   rB   zret = __Pyx_NewRef(Py_True);zUnknown op %sz(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: {zFif (likely(%s->tp_richcompare)) return %s->tp_richcompare(o1, o2, op);z'return __Pyx_NewRef(Py_NotImplemented);)r¯  rU  r   rV  r  r  r·   rç   r›   r-   rß  rI  r<   r   r  ÚTOTAL_ORDERINGr   rN   ÚmaxÚstripÚupperrà  r]  ÚAssertionErrorr‹   )rQ   r-   r^   Úclass_scopesÚclsÚextern_parentr   Ú
cmp_methodÚclass_scoper·   Ú
comp_namesÚordering_sourceÚcmp_typeÚinvert_compÚcomp_opÚinvert_equalsÚeq_funcr(   rÀ  r)   r  ñ  sÜ   


þ


þ€ÿÿ


































ÿ



z$ModuleNode.generate_richcmp_functionc                    s®  ˆ  |j¡‰ˆjd rˆ  dˆ|j ˆ¡f ¡ d S |jjtjtj	fv r+d}d ‰}n|jjtj
tjfv r<d}d‰d}n	t|d| ƒ d S ‡fd	d
„‰‡ ‡‡‡‡fdd„}ˆ|jjƒrnˆ|jjƒsnt|d|jj|jjf ƒ ˆ  ¡  | ¡ }|r}ˆ  |¡ ˆ  ˆ¡ ttˆ|jjƒƒƒ}	ttˆ|jjƒƒƒ}
ˆjj}ˆjjr£ˆ  |¡}ˆ  tjddˆ|j|	|
||jjdd||jjdd||ˆ|dœ
dd ¡ ˆ  ¡  |rÕˆ  d¡ d S d S )NÚc_api_binop_methodsr<  Ú
binaryfuncrB   Úternaryfuncz, extra_argz, PyObject* extra_argz"Unexpected type slot signature: %sc                    s   ˆ   | ¡}|r|jr|jS d S r#   )ÚlookuprQ  r]  )Úmethod_namer·   r•   r(   r)   Úget_slot_method_cname’	  s   
zAModuleNode.generate_binop_function.<locals>.get_slot_method_cnamec                    s@   ˆ| ƒ}|rd||rdˆf S dˆf S dˆˆ   ˆjj¡ˆf S )Nz%s(%s%s)zright, leftzleft, rightzT%s_maybe_call_slot(__Pyx_PyType_GetSlot(%s, tp_base, PyTypeObject*), left, right %s))Úname_in_module_stater  rI  )rÝ  rã  r]  ©r^   Ú	extra_argÚ	func_namerÞ  r-   r(   r)   Úcall_slot_method–	  s   ýýýz<ModuleNode.generate_binop_function.<locals>.call_slot_methodzÅExtension type implements %s() but not %s(). 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_rightr1  Ú	slot_typerá  Úextra_arg_decl©rI   r   rô   )rM  rå  r<   r  Ú	left_slotrN  Ú	signaturer   rÚ  ÚibinaryfuncÚpowternaryfuncÚipowternaryfuncr   rÝ  Ú
right_slotr   Úpreprocessor_guard_coderŠ   rK  rH   r  rI  ró  rß  r   r4  r‹   )rQ   r-   r#  r^   rN   rê  rë  rã  Úpreprocessor_guardræ  rç  Úparent_type_cnamer(   rà  r)   r  	  sj   

þþ


öþóÿÿz"ModuleNode.generate_binop_functionc                    s°   d‡ ‡fdd„	‰ ˆ dƒ}ˆ dƒ}|j ˆtjdddd |d ur(| d	|j ¡ n| d
¡ |d urH| d¡ | d¡ | d|j ¡ | d¡ | d¡ | d¡ | ¡  d S )Nc                    sN   |d u rˆj }|j | ¡}|d u r%|jr|d ur|S |jd ur%ˆ | |jƒS |S r#   )r  r-   r¯  Úis_externalrß  )ÚnÚtpÚextern_returnÚr©Úlookup_here_or_baser-   r(   r)   rü  Ñ	  s   
zBModuleNode.generate_getattro_function.<locals>.lookup_here_or_baserø  rù  Útp_getattrozPyObject *o, PyObject *nFrr  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)rU  r   rV  r  r]  r‹   )rQ   r-   r^   Úgetattr_entryÚgetattribute_entryr(   rû  r)   r  Ê	  sF   ÿÿÿÿÿÿÿÿÿÿz%ModuleNode.generate_getattro_functionc                 C   sÔ   |j j}| d¡}| d¡}| |tjdd¡ | d¡ |r'| d|j ¡ n|  |d ddd|¡ | d	¡ | d
¡ | d¡ |rK| d|j ¡ 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µ  r(   r(   r)   r  ø	  sX   

ÿÿÿÿÿÿÿÿÿÿÿÿÿz%ModuleNode.generate_setattro_functionc                 C   sn   |  d¡}|j|tjdddd | d¡ | d¡ | d¡ | d	|j ¡ | d
¡ | d¡ | ¡  d S )Nrü  Útp_descr_getz%PyObject *o, PyObject *i, PyObject *cFrr  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¯  rU  r   rV  r  r]  r‹   )rQ   r-   r^   Úuser_get_entryr(   r(   r)   r  
  s.   
ÿÿÿÿÿÿÿz&ModuleNode.generate_descr_get_functionc                 C   sè   |j j}| d¡}| d¡}| |tjdd¡ | d¡ |r'| d|j ¡ n|  |d ddd|¡ | d	¡ | d
¡ | d¡ | d¡ |rP| d|j ¡ n|  |d ddd|¡ | d¡ | d
¡ | d¡ | d¡ | 	¡  d S )Nrý  rþ  Útp_descr_setr«  r¬  r­  Údescrsetfuncr°  ú6PyErr_SetString(PyExc_NotImplementedError, "__set__");rF  rõ   r±  r²  z9PyErr_SetString(PyExc_NotImplementedError, "__delete__");r³  )rQ   r-   r^   rß  Úuser_set_entryÚuser_del_entryr(   r(   r)   r  :
  sd   

ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿz&ModuleNode.generate_descr_set_functionc                 C   sH   |j D ]}|j}| dg¡r|  ||¡ | ddg¡r!|  ||¡ qd S )Nrü  rý  rp  )Úproperty_entriesr-   r  Úgenerate_property_get_functionÚgenerate_property_set_function)rQ   Úcclass_scoper^   r·   Úproperty_scoper(   r(   r)   r  e
  s   
€ûz&ModuleNode.generate_property_accessorsc                 C   s\   |j }|j tj|j¡|_| d¡}| d¡ | d|j ¡ | d|j	 ¡ | d¡ d S )Nrü  rB   ú9static PyObject *%s(PyObject *o, CYTHON_UNUSED void *x) {úreturn %s(o);rõ   )
r-   Úparent_scoperK  r   Úprop_get_prefixrj   Úgetter_cnamer¯  r  r]  )rQ   Úproperty_entryr^   r  Ú	get_entryr(   r(   r)   r
  m
  s&   ÿ

ÿÿÿÿÿz)ModuleNode.generate_property_get_functionc                 C   sÒ   |j }|j tj|j¡|_| d¡}| d¡}| d¡ | d|j ¡ | d¡ |r4| d|j	 ¡ n
| d¡ | d¡ | d	¡ | d
¡ |rS| d|j	 ¡ n
| d¡ | d¡ | d	¡ | d	¡ d S )Nrý  rp  rB   z@static int %s(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {r¬  zreturn %s(o, v);r  rF  rõ   r±  r  z6PyErr_SetString(PyExc_NotImplementedError, "__del__");)
r-   r  rK  r   Úprop_set_prefixrj   Úsetter_cnamer¯  r  r]  )rQ   r  r^   r  r¶  r·  r(   r(   r)   r  }
  sf   ÿ


ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿz)ModuleNode.generate_property_set_functionc                 C   s\  |j }|j}t d|jj¡}| ||¡ t d|jj¡}| |¡s1| d¡ | 	||¡ | d¡ |j
r8|j}nd|j }|jsE| d¡nd }|rN|jrNd }t|ƒ}	|	r½|j t dd¡¡ | d	|j ¡ | d
¡ |rw| d||jf ¡ | d¡ | d¡ | d¡ |r½t|jƒ}
|
› d}| d¡ | d¡ | d|› d¡ | d¡ | d|› d¡ | d¡ | d¡ | d|j ¡ t |jj¡D ]}| ||¡ qÌ|	rß| d|j ¡ | d¡ | d¡ |j ¡ }| d|j ¡ | d| j| dd¡f ¡ | d| ¡ | d¡ | dt d|j¡ |¡ ¡ | d |j ¡ | d¡ d S )!NÚ
tp_membersÚtp_as_bufferz$#if !CYTHON_COMPILING_IN_LIMITED_APIrô   r¨  r}  ÚIncludeStructmemberHrl  z#static PyMemberDef %s_members[] = {z#if !CYTHON_USE_TYPE_SLOTSzB{"__weaklistoffset__", T_PYSSIZET, offsetof(%s, %s), READONLY, 0},ú{0, 0, 0, 0, 0}rc  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 = {z"%s.%s",rB   zsizeof(%s),z0,ra  Útp_flagsz	%s_slots,)r´   r-   r   rx  rt   r<   Úgenerate_substructure_specÚis_emptyr  Úgenerate_substructurer~  rð  r  r¯  r«  rH   ru   r	   rv   rJ  r)  r   rN   r  Úgenerate_specÚ
class_namer  r³   r.  rN  )rQ   r·   r^   Úext_typer-   Úmembers_slotÚbuffer_slotÚ	objstructÚweakref_entryÚgenerate_membersÚpositionÚweakref_warn_mesager#  Ú	classnamer(   r(   r)   r!  ¥
  sn   





ÿ
ÿ



ÿ








z ModuleNode.generate_typeobj_specc                 C   sâ   |j }|j}t |jj¡jD ]}| ||¡ q| d¡ |j	dkr$d}nd}| ||j
 ¡ | d¡ |j ¡ }| d| j|f ¡ |jrI|j}	nd|j }	| d|	 ¡ | d	¡ t |jj¡D ]}
|
 ||¡ qa| d
¡ d S )NrB   ræ   zDL_EXPORT(PyTypeObject) %s = {zstatic PyTypeObject %s = {zPyVarObject_HEAD_INIT(0, 0)z"%s."%s, /*tp_name*/r¨  zsizeof(%s), /*tp_basicsize*/z0, /*tp_itemsize*/rc  )r´   r-   r   r  rt   r<   Úsubstructuresr  r  rç   rJ  r   r  r³   r~  rð  Úgenerate)rQ   Úmodnamer·   r^   r´   r-   Úsuiter‘  r)  r$  r#  r(   r(   r)   r"  ì
  sB   

ÿ
þÿ
ÿÿÿz&ModuleNode.generate_typeobj_definitionc                 C   s–   |j r|jsd S |jd }| d¡ | ¡ }| d|j ¡ |jD ]}|js3|r+|js3|j|d|d q!| d¡ | d¡ | 	¡ rI| d¡ d S d S )NÚbindingrB   zstatic PyMethodDef %s[] = {rÀ  )Úwrapper_code_writerz{0, 0, 0, 0}rc  )
Úis_c_class_scopeÚpyfunc_entriesr<   r  rá  Úmethod_table_cnameÚfused_cfunctionÚis_overridableÚput_pymethoddefÚgetvalue)rQ   r=   r^   r.  r/  r·   r(   r(   r)   r    s.   

ÿÿ
€ÿÿÿz ModuleNode.generate_method_tablec                 C   sÌ   |  d¡}|r
|jsd S | d¡}|j}| d¡ | d¡ | d| ¡ |  ||¡ | d| ¡ | d| ¡ | d¡ | d	| ¡ | d
| ¡ | d¡ | d¡ | d|› d¡ | d¡ d S )Nrÿ  Ú__dict__getterrB   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  z#define z PyObject_GenericGetDictrô   )r¯  Úis_variablerM  r)  r  r'  )rQ   r-   r^   Ú	dict_attrrâ  Ú	dict_namer(   r(   r)   r  "  s$   







z(ModuleNode.generate_dict_getter_functionc                 C   sš   |j rK| d¡ | d|j ¡ |j D ]+}|j}|r(|jr!| ¡ }d| ¡  }nd}| d|j ¡ |jp5d|j	p9d|f ¡ q| d¡ | d¡ d S d S )NrB   z"static struct PyGetSetDef %s[] = {zPyDoc_STR(%s)rb  z{%s, %s, %s, %s, 0},r  rc  )
r	  r  Úgetset_table_cnamer¿   Ú
is_unicodeÚas_utf8_stringr  rj   r  r  )rQ   r=   r^   r·   r¿   Údoc_coder(   r(   r)   r   :  s:   
ÿÿ
üÿÿÿëz ModuleNode.generate_getset_tablec                 C   s<   t |j ¡ ƒD ]\}}|jr|jr|jjs|j |¡ qd S r#   )rÉ   rÊ   rË   Ú
is_cglobalrñ  r´   rª  rO  rÑ   r(   r(   r)   rÈ   S  s   €ýz5ModuleNode.create_import_star_conversion_utility_codec              
   C   sØ  |  t dd¡¡ | dtj› dtj› dtj› d¡ | d¡ t	|j
 ¡ ƒD ]\}}|jr5| d| ¡ q'| d	¡ | d
¡ | d¡ | d¡ | d¡ | d¡ | d¡ | d¡ | d¡ | d¡ | ¡ }| d¡ d}t	|j
 ¡ ƒD ]Ÿ\}}|jr|jr|jjs|d7 }|d dkr¤| d¡ | d¡ | d¡ | d| ¡ |jjrë|jjs·|jjrË|j |d¡}| d|| |j¡f ¡ | d¡ |j|j|jdd | d|jt |jtd¡f ¡ n)|j |¡r| |j d|j|j|¡¡ n| d ||jf ¡ | | |j¡¡ | d¡ qz| d!¡ | d"tj ¡ | d¡ | d#¡ |  |j!¡rF| "|j!¡ | #t$| j%ƒ¡ ||_!| d$¡ | d%¡ | d¡ | d&¡ | &t 'd'd(¡¡ | (¡  d S ))NÚCStringEqualsr@  úint re   ú *z2,PyObject *o, PyObject* py_name, const char *name)z,static const char* internal_type_names[] = {z"%s",rb  rc  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);rA  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")) {rF  zif (!(%s)) %s;zPy_INCREF(o);Fr›  ú%s = %s;zGPyErr_Format(PyExc_TypeError, "Cannot convert Python object %s to %s");r±  z3if (PyObject_SetAttr(%s, py_name, o) < 0) goto bad;rD  rE  rF  rB   Ú
ImportStarrq   ))ru   r	   rv   Ústart_initcfuncr   Úimport_star_setÚmodulestatetype_cnameÚmodulestatevalue_cnamer  rÉ   rÊ   rË   rÍ   Únew_error_labelr?  rñ  r´   Úis_constrª  ró  rX  Útype_test_codeÚ
error_gotorN   Ú
put_decrefr)  r   r  r   rO  Úfrom_py_call_coderR  Ú
label_usedÚerror_labelÚ	put_labelÚput_add_tracebackr
   r³   rƒ  r„  r‹   )rQ   r=   r^   rj   r·   Úold_error_labelÚ
msvc_countÚ	type_testr(   r(   r)   r‚  [  s’   
ÿÿÿ
€













ÿ
þ

þ
ÿÿ
€






zModuleNode.generate_import_starc                 C   sŒ   |  d¡ |  d|j ¡ |  dtj ¡ |  dtj ¡ |  dtj ¡ |  dtj ¡ |  dtj ¡ tj	d urD|  dtj
 ¡ d S d S )Nztypedef struct {rà  )r  Úmodule_dict_cnamer   Úbuiltins_cnameÚcython_runtime_cnamer\  Úempty_bytesÚempty_unicoder   rS  rT  rm  r(   r(   r)   r…  ¢  s   

ÿz&ModuleNode.generate_module_state_startc                 C   s–  |d }|d }|d }|  dtj ¡ |  d¡ | t dd¡¡ |  d¡ |  d	¡ |  d
¡ |  dtj ¡ |  d¡ |  d¡ |  dtj ¡ |  d¡ |  d¡ |  dtjtjf ¡ |  d¡ |  d|jtjf ¡ |  d¡ |  dtjtjf ¡ |  d	¡ |  d¡ |  d¡ |  d¡ |  d¡ |  dtjtjtjf ¡ |  d¡ |  d¡ |  d¡ |  d¡ |  d¡ |  d¡ |  d¡ d S )NÚmodule_state_endÚmodule_state_clear_endÚmodule_state_traverse_endz} %s;rB   ÚMultiPhaseInitModuleStaterl  ú#if CYTHON_USE_MODULE_STATEú#ifdef __cplusplusúnamespace {zextern struct PyModuleDef %s;ú} /* anonymous namespace */r  zstatic struct PyModuleDef %s;rô   zA#define %s (__Pyx_PyModule_GetState(__Pyx_State_FindModule(&%s)))z(#define %s (__Pyx_State_FindModule(&%s))zstatic %s %s_static =z    {};z    {0};z"static %s * const %s = &%s_static;rD  rõ   )	r  r   rH  ru   r	   r„  Úpymoduledef_cnamer[  rR  )rQ   r=   r•  rt   rj  rm  rn  r(   r(   r)   r  ®  s`   

ÿ






þ
þ
þ




ý





z$ModuleNode.generate_module_state_endc                 C   s¸   |  d¡ |  dtj ¡ |  tj› d¡ |  d¡ |  d|j ¡ |  dtj ¡ |  dtj ¡ |  dtj ¡ |  dtj ¡ |  dtj	 ¡ |  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ß  ú"#if CYTHON_PEP489_MULTI_PHASE_INITz__Pyx_State_RemoveModule(NULL);rô   ©
r  r   rR  rH  rW  rX  rY  r\  rZ  r[  rm  r(   r(   r)   r†  á  s2   

ÿÿÿÿÿÿ

z&ModuleNode.generate_module_state_clearc                 C   s²   |  d¡ |  dtj ¡ |  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 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->rE  z)__Pyx_VISIT_CONST(traverse_module_state->rf  rm  r(   r(   r)   r‡  ø  s   

z)ModuleNode.generate_module_state_traversec              
   C   s 	  |   | j| j|¡}|  ||¡ | | j¡ | d¡ | t dd¡¡ t	d|j
› ƒ}d|  d|¡ }| d| ¡ | jjrS| d¡ | d	|  d|¡ ¡ | d
¡ |  |j
¡}|rl| d¡ | d| ¡ | d
¡ | |¡ | d¡ | d¡ | dtj ¡ | d¡ t dd¡}	| |	¡ | d¡ | d|  ¡ tjf ¡ | d
¡ | d¡ | d¡ | d¡ | d¡ | d
¡ | tj› dtj› d¡ | ¡ }
|jjd }|jjd }|sã|ró|ré| ¡  |j t dd¡¡ | ¡  | d¡ | dtj ¡ | dtjtjf ¡ | d|j
 ¡ dd…  ¡ | d ¡ | d¡ | d!¡ | d"tjtjf ¡ | d
¡ | d#¡ |  ||¡ |sM|rU|
 ¡  | ¡  t d$d¡}| |¡ |  |¡ | d%¡ | t d&d¡¡ | !| jd'¡ | "tj#¡}| d(|| $|| j¡f ¡ | "tj%¡}| d)|| $|| j¡f ¡ | "tj&¡}| d*|| $|| j¡f ¡ | d+¡ |jd, rÈ| !| jd-¡ | d.¡ | !| jd/tj› d0¡ | d1¡ | !| jd2¡ | d|  '¡  ¡ | !| jd3|j| (t	d4ƒ¡| (t	d5ƒ¡f ¡ | d¡ |  )||¡ t*j+r%| d6¡ | !| jd7tj› d0¡ | d8¡ | !| jd9tj› d0¡ | !| jd:tj› d0¡ | d;¡ |d<ƒ}|  ,||¡ W d   ƒ n	1 s]w   Y  |d=ƒ}|  -||¡ W d   ƒ n	1 sxw   Y  |d>ƒ}|  .||¡ W d   ƒ n	1 s“w   Y  | /|¡ |d?ƒ}|  0||¡ W d   ƒ n	1 s³w   Y  |d@ƒ}|D ]
}|  1|||¡ q¿W d   ƒ n	1 sÕw   Y  |dAƒ}|D ]
}|  2|||¡ qáW d   ƒ n	1 s÷w   Y  |dBƒ}|D ]}|  3|¡ |  4|||¡ qW d   ƒ n	1 sw   Y  | 5|¡ | dC¡ | 6d ¡ |s8|rJ|j7j8s?J ‚| 9|| j¡ dD|j7_:| 6d ¡ | j; <|¡ | 6d ¡ |s`|rwdE|j7_:|j7j8skJ ‚|j=dF| jdG | >¡  | ¡  | dH¡ |  ?||¡ | ¡  t*j@r£|j t dId¡¡ | dJ| A| j¡ ¡ | B|jC¡ | D|jE¡ |j7 F¡ D ]\}}| G||¡ q´|sÆ|rÐ| H¡  | I| j¡ | d|j ¡ | dK| "|jJ¡› dL¡ | Kt	dM|jL ƒ¡ |j tMjN¡ | d¡ | dN¡ |jO|jtPdEdDdO | d!¡ |jQ|jtPdEdP | dQ¡ | dR¡ | dS¡ | dTtj ¡ | dU¡ | d¡ | d
¡ | dV¡ | dW|jL ¡ dd…  ¡ | d¡ | D|jC¡ | R¡  | d¡ | dX|j ¡ | d!¡ | dY|j ¡ | d
¡ | d¡ |
 S|j7¡ | T¡  d S )ZNrB   ÚPyModInitFuncTyperl  Ú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 */re  rA  zreturn PyModuleDef_Init(&%s);rõ   ÚModuleCreationPEP489z-static CYTHON_SMALL_CODE int %s(PyObject *%s)zint stringtab_initialized = 0;r`  zint pystate_addmodule_run = 0;rB  z = NULL;ÚprofileÚ	linetraceÚProfilez	Profile.crš  zif (%s == %s) return 0;zrPyErr_SetString(PyExc_RuntimeError, "Module '%s' has already been imported. Re-initialisation is not supported.");r   rp  rF  r  z if (%s) return __Pyx_NewRef(%s);z /*--- Module creation code ---*/ÚImportRefnannyAPIz__Pyx_init_runtime_version();ÚCheckBinaryVersionzs__Pyx_check_binary_version(__PYX_LIMITED_VERSION_HEX, __Pyx_get_runtime_version(), CYTHON_COMPILING_IN_LIMITED_API)z%s = PyTuple_New(0); %sz)%s = PyBytes_FromStringAndSize("", 0); %sz+%s = PyUnicode_FromStringAndSize("", 0); %sz)/*--- Library function declarations ---*/Ú
np_pythranz_import_array()z4/*--- Initialize various global constants etc. ---*/z__Pyx_InitConstants(rf   zstringtab_initialized = 1;z__Pyx_InitGlobals()zPyObject_SetAttr(%s, %s, %s)r   Ú__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)rN   z/*--- Wrapped vars code ---*/ÚRegisterModuleCleanupzif (__Pyx_RegisterCleanup()) %szif (z && stringtab_initialized) {zinit %sr9  ©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;)UrR   rN   r-   Úgenerate_pymoduledef_structrŠ   r  rƒ  r	   r„  r
   rµ   r  Ú
is_packageÚwrong_punycode_module_namer   rd  Úmodule_init_func_cnameÚpymodinit_module_argrH  rI  rá  rt   r<   Úuse_fast_gil_utility_coderu   rv   Úput_declare_refcount_contextrR  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_stater\  Úerror_goto_if_nullrZ  r[  r{  Úintern_identifierÚgenerate_module_import_setupr   Úcache_builtinsÚgenerate_global_init_codeÚgenerate_c_variable_export_codeÚgenerate_c_function_export_codera   Úgenerate_type_init_codeÚ$generate_type_import_code_for_moduleÚ*generate_c_variable_import_code_for_modulerÊ  Ú*generate_c_function_import_code_for_moduler_   r…  Ú	funcstateÚ	gil_ownedÚput_trace_startÚ	can_tracer“   Úgenerate_execution_codeÚput_trace_returnÚput_trace_exitÚgenerate_wrapped_entries_codeÚgenerate_cleanup_coderM  Úput_gotoÚreturn_labelrR  rQ  Úall_managed_tempsÚput_xdecrefÚput_trace_exception_propagatingÚput_trace_unwindrW  rS  r-  r   Útraceback_utility_coder^  r   rN  Úput_finish_refcount_contextÚput_temp_declarationsr‹   )rQ   r@  r˜  r=   r^   ÚsubfunctionÚmodinit_func_nameÚheader3rv  Úmod_create_funcÚtempdecl_coderj  rk  Úrefnanny_import_coder\  rZ  r[  r†   rß   r)  r´   r(   r(   r)   rˆ    s¤  


ÿ








þ






þþ


þ




ÿÿÿ



ý

þ
þþ

ÿ
ÿ
ÿ

ÿ
ÿÿ
ÿÿ

þÿ






ÿÿ









ÿ




z$ModuleNode.generate_module_init_funcc                    s$   ˆ  ¡ ‰ G ‡ ‡‡‡fd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                       s:   e Zd Zdd„ Zdd„ Z‡ ‡‡fdd„Z‡ ‡fdd„Zd	S )
z;ModuleNode.mod_init_subfunction.<locals>.ModInitSubfunctionc                 S   sB   d  | ¡  ¡ ¡}t d|¡sJ ‚d| | _|| _d | _d | _d S )Nr  z^[a-z0-9_]+$z__Pyx_modinit_%s)	r«  ÚlowerrÄ  r   ÚmatchÚ
cfunc_nameÚdescriptionr¢  Ú	call_code)rQ   Ú	code_typer)  r(   r(   r)   rS     s   

zDModuleNode.mod_init_subfunction.<locals>.ModInitSubfunction.__init__c                 S   s   |  ¡ | _d S r#   )rá  r¨  r]   r(   r(   r)   r\     rY   zIModuleNode.mod_init_subfunction.<locals>.ModInitSubfunction.set_call_codec                    s„   | j d u r
ˆ ¡ | _ ˆ }|jd| j› dtj› dtj› dˆdd | dtj› d¡ | ¡ | _| 	t
| jƒ¡ | d	| j ¡ |S )
NrA  re   rB  rf   T)ÚrefnannyzCYTHON_UNUSED_VAR(rE  z/*--- %s ---*/)r¨  rá  rF  r¦  r   rH  rI  r  r¢  r~  r
   r§  r]   )Úfunction_codeÚ	orig_coder-   r(   r)   Ú	__enter__"  s   

þ
zEModuleNode.mod_init_subfunction.<locals>.ModInitSubfunction.__enter__c                    sò   |d urd  | _ | _d S ˆ }| ¡  | d¡ | j  |j¡ d | _ | |j¡}|rH| |j¡ |j 	¡ D ]
\}}| 
||¡ q4| ¡  | d¡ | d¡ | ¡  |re| j | j d| jtjf ˆ¡¡ n| j d| j› dtj› d¡ d | _d S )NrD  rF  rõ   z%s(%s)z(void)re   rE  )r¢  r¨  rœ  r  r  rŒ  rP  rQ  rR  r—  r˜  r‹   Úerror_goto_if_negr¦  r   rI  )rQ   Úexc_typeÚ	exc_valueÚexc_tbr^   Úneeds_error_handlingr)  r´   )r«  rN   r(   r)   Ú__exit__0  s:   


ÿÿÿÿ
zDModuleNode.mod_init_subfunction.<locals>.ModInitSubfunction.__exit__N)r   rŽ   r   rS   r\   r­  r³  r(   ©r«  r¬  rN   r-   r(   r)   ÚModInitSubfunction  s
    rµ  )rá  )rQ   rN   r-   r¬  rµ  r(   r´  r)   rR     s   	:zModuleNode.mod_init_subfunctionc                 C   sè  |j d }|dkr| jd j}|r| d¡ | d|j| tt|ƒƒ¡| | j¡f ¡ | d¡ |j	r€| d¡ |j
 td¡}| d|| tttj |¡ƒƒ¡| || j¡f ¡ | |t¡ | d	|j|| | j¡f ¡ | |t¡ |j
 |¡ | d¡ n)|j	rª| d¡ |j t d
d¡¡ | | d| t| jƒ¡ | j¡¡ | d¡ | j}| d¡r½t|d tdƒ … ƒ}| ¡ }| d¡ | d| d| j¡ ¡ | d| ¡ | | d||jf | j¡¡ | d¡ | d¡ d S )NÚset_initial_pathÚ
SOURCEFILEr   z&if (!CYTHON_PEP489_MULTI_PHASE_INIT) {z7if (PyObject_SetAttrString(%s, "__file__", %s) < 0) %s;rõ   Tz!%s = Py_BuildValue("[O]", %s); %sz7if (PyObject_SetAttrString(%s, "__path__", %s) < 0) %s;ÚSetPackagePathFromImportLibrq   z%__Pyx_SetPackagePathFromImportLib(%s)z	.__init__rA  z0PyObject *modules = PyImport_GetModuleDict(); %sr•  z)if (!PyDict_GetItemString(modules, %s)) {z%PyDict_SetItemString(modules, %s, %s))r<   rN   rÆ  r  rR  Úget_py_string_constr
   r   rM  ru  rŒ  Úallocate_tempr   rã   r%   rª  r  Ú
put_gotrefr^  Úrelease_temprt   ru   r	   r„  r®  r³   Úendswithr²  r  )rQ   r=   r^   Úmodule_pathÚtempÚfq_module_nameÚfq_module_name_cstringr(   r(   r)   rƒ  R  s‚   


ÿ
ü


ÿÿûÿÿ
€

ÿÿÿü


ÿ
ÿÿ
z'ModuleNode.generate_module_import_setupc                 C   s.  t jsd S | dtj ¡ | |¡ | tj› dtj› d¡ | d¡ | dtj› d¡ | d¡ | tj› d¡ t jd	kr„| d
¡ t	|j
ƒ}| ¡  |D ]2}|jdkrƒ|jjrv|jrv|jrf|j}n| |j¡}|j||jddd |j |¡rƒ|j ||¡ qQ| dtj› d¡ t jdkr´| d¡ t|jt d¡dD ]}| |j¡}|j||ddd q¢t jrÍ| d¡ |jD ]}|j|jtjddd q¿| d¡ |j | tj!¡› tjddd |j"D ]{}|j}|j#sï|j$rðqä|j%j& 'dd¡r_|j%}	| |	 (tj)¡¡}
| |	 (tj*¡¡}| d¡ | d| ¡ | d|
|f ¡ | d¡ | d¡ | d¡ | d¡ | d ¡ | d!¡ | d¡ | d"¡ | d#¡ | d¡ | d$¡ | d¡ qät j+d urp|j tj,tddd% tj-tj.fD ]}| |¡}|j |tddd% qv|j | |j/¡tddd% d S )&Nz.static void %s(CYTHON_UNUSED PyObject *self) {rB  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(rE  é   z$/*--- Type import cleanup code ---*/rI  r  z /*--- Builtin cleanup code ---*/z/*--- Intern cleanup code ---*/r;  r   r=  zwhile (%s > 0) {z"PyObject* o = (PyObject*)%s[--%s];rƒ  r„  r…  r  r†  r‡  r  rˆ  rõ   rs  )0r   r”  r  r   Úcleanup_cnamerŠ   rH  rI  rd  rÄ  r÷   rã  rç   r´   rª  rñ  r?  r)  rß  rŽ  r~  r  rÉ   Útypes_importedrü  rý  r€  rI  r„  Úcached_builtinsr   r   r^  r\  r²   rö  rß  r-   r<   rà  rM  rS  rT  rS  rT  rY  rX  rW  )rQ   r=   r^   Úrev_entriesr·   Úentry_cnamer!  rI  Úcclass_typer-   rS  rT  r)  r(   r(   r)   r‰    s¼   ÿ






ý€

ý

ý
ý

ÿ
ÿ
ÿ











€
ÿ


þz'ModuleNode.generate_module_cleanup_funcc              	   C   sT   |   ¡ }tjdkrd}ntj}tjdd|j|tj|ttjƒdœd}|j 	|¡ d S )NÚmainÚwmainÚMainFunctionzEmbed.c)rµ   r—  rr  Úwmain_methodÚembed_modulesrì  )
r{  r   rŠ  r   rv   rµ   ÚtuplerÍ  rt   ru   )rQ   r=   r^   r—  rÊ  rr  r(   r(   r)   r‹  û  s   
ûþzModuleNode.generate_main_methodc                 C   s:   |  ¡ r	d| }nd| d¡ dd¡ d¡ }d||f S )Nr  ÚU_Úpunycodeó   -ó   _r0  z%s%s©ÚisasciiÚencoder.  Údecode)rQ   r/  rj   r(   r(   r)   r,    s   
zModuleNode.punycode_module_namec                 C   s,   |  ¡ rd S dd|  d¡ dd¡ d¡ S )NÚPyInitUr  rÐ  rÑ  rÒ  r0  rÓ  )rQ   rj   r(   r(   r)   rv    s    z%ModuleNode.wrong_punycode_module_namec                 C   s   |   ||j¡S r#   )r,  rµ   )rQ   r/  r=   r(   r(   r)   r    s   zModuleNode.mod_init_func_cnamec                 C   s   | j }|  tj|¡S r#   )r-   r  r   Úpymodule_exec_func_cname)rQ   r=   r(   r(   r)   rw  !  s   z!ModuleNode.module_init_func_cnamec                 C   sÔ  |j rd| |j ¡ }nd}tjrdtj }nd}| d¡ | d¡ |  ¡ }| dtj ¡ | d| ¡ | d	tj	 ¡ | d
tj ¡ | d| ¡ | d¡ | d¡ | d¡ | d¡ ddddœ 
|jd ¡}| d| ¡ | d¡ | d¡ | d¡ |j ¡ s’| d¡ | d¡ | d¡ | d¡ | d¡ | d¡ | dtj ¡ | d¡ | dtj ¡ | d¡ | d¡ | d ¡ | d!|j ¡  ¡ | d"| ¡ | d#¡ | d$tj› d%¡ | d¡ | d&¡ | d¡ | d'|j ¡ | d¡ | d(tj	 ¡ | d¡ | d)¡ | d¡ | d#¡ | d*tj ¡ | d+tj ¡ | d,| ¡ | d¡ | d-¡ | d.¡ | d,| ¡ | d¡ | d¡ | d¡ | d/¡ | d¡ d S )0Nú%srb  z(freefunc)%sÚNULLrB   re  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_FREETHREADINGz-{Py_mod_gil, __Pyx_FREETHREADING_COMPATIBLE},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}rc  z*#else /* CYTHON_PEP489_MULTI_PHASE_INIT */zT#error "Unicode module names are only supported with multi-phase init as per PEP489"ra  rb  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 */rc  )r¿   Úget_string_constr   r”  r   rÃ  r  rw  Úpymodule_create_func_cnameÚpymoduledef_slots_cnamerà  r<   rµ   rÔ  rd  r  rH  r2  rR  )rQ   r=   r^   r¿   Úcleanup_funcÚexec_func_cnameÚsubinterp_optionr(   r(   r)   rt  %  sŠ   

ÿ



ýü





























z&ModuleNode.generate_pymoduledef_structc           	   	   C   sz  |j rd| |j ¡ }nd}|jjtdd}| d¡ | d|tjf ¡ |j|tdd | d¡ | d	|tj	| 
|| j¡f ¡ | d
¡ | d¡ | d¡ | d|tj	f ¡ | d|||j ¡ f ¡ | | 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| ¡ | |j¡}| d||j| 
|| j¡f ¡ |j|tdd | tj¡}| d|| 
|| j¡f ¡ | tj¡}| d|| 
|| j¡f ¡ | d|j|| | j¡f ¡ tjd ur;| d tjtj| 
tj| j¡f ¡ d S d S )!NrÙ  rb  F©Ú
manage_refre  rD  r›  r  z%s = PyModule_Create(&%s); %srô   r`  rA  z7int add_module_result = __Pyx_State_AddModule(%s, &%s);z=%s = 0; /* transfer ownership from %s to %s pseudovariable */Úadd_module_resultzpystate_addmodule_run = 1;rõ   r%  r&  rÛ  r)  r*  r+  zPyUnstable_Module_SetGIL(rš  rE  zCYTHON_UNUSED_VAR(%s);z%s = PyModule_GetDict(%s); %sz?%s = __Pyx_PyImport_AddModuleRef(__Pyx_BUILTIN_MODULE_NAME); %sz6%s = __Pyx_PyImport_AddModuleRef("cython_runtime"); %sz:if (PyObject_SetAttrString(%s, "__builtins__", %s) < 0) %sz*%s = __Pyx_PyImport_AddModuleRef("%s"); %s)r¿   rã  rŒ  rº  r   r  r   rx  Ú
put_increfrd  r  rN   rµ   r  r®  rR  r¼  r<   rI  r[  r€  rW  rX  rY  rM  r   rS  rT  )	rQ   r=   r^   r¿   Úmodule_tempÚ
gil_optionÚ
dict_cnamerX  Úruntime_cnamer(   r(   r)   r{  p  s¢   
þ
ýÿ


ÿÿ




ÿþ
þÿþÿþÿ
ýÿýÿÿz(ModuleNode.generate_module_creation_codec                 C   sH   |j D ]}|jdkr!|jr|j ||¡ |j |¡r!|j ||¡ qd S ©NrÈ  )r÷   rç   rñ  r´   Úglobal_init_coder8  rZ  )rQ   r=   r^   r·   r(   r(   r)   r…  Á  s   

€úz$ModuleNode.generate_global_init_codec              	   C   s®   t |j ¡ ƒD ]M\}}|jrT|jsT|j|u rT|j |¡s%t|j	d|j ƒ | 
d¡ | 
d|jj|jf ¡ | 
| d|j	¡¡ | 
d|j|| |j	¡f ¡ | 
d¡ qd S )Nz$Cannot convert '%s' to Python objectrA  zPyObject* wrapped = %s(%s);Úwrappedz6if (PyObject_SetAttrString(%s, "%s", wrapped) < 0) %s;rõ   )rÉ   rÊ   rË   rÌ   rÍ   r-   r´   rN  r   rN   r  Úto_py_functionr)  r  rR  rM  )rQ   r=   r^   rj   r·   r(   r(   r)   r“  Ì  s.   ÿ

þ
ýÿ
€ðz(ModuleNode.generate_wrapped_entries_codec                 C   s   dd„ |D ƒS )Nc                 S   s,   g | ]}|j s|jstjr|jd kr|‘qS )rÈ  )rè   rÞ   r   rï  rç   ré   r(   r(   r)   rn   à  s    þþþ
ÿz7ModuleNode._select_exported_entries.<locals>.<listcomp>r(   )rQ   Úall_entriesr(   r(   r)   Ú_select_exported_entriesß  s   ÿz#ModuleNode._select_exported_entriesc                 C   óL   |   |j¡}|s
dS dd„ |D ƒ}|j t dd¡¡ t|| j|ddƒ dS )úOGenerate code to create PyCFunction wrappers for exported C functions.
        Nc                 S   ó    g | ]}|j  ¡ |j|jf‘qS r(   )r´   rO  rj   r)  ré   r(   r(   r)   rn   ì  ó    ÿþz>ModuleNode.generate_c_variable_export_code.<locals>.<listcomp>ÚVoidPtrExportrq   Ú__Pyx_ExportVoidPtrzvoid *{name})rö  r÷   rt   ru   r	   rv   rw   rN   ©rQ   r=   r^   rÊ   rx   r(   r(   r)   r†  å  ó   ý
ÿz*ModuleNode.generate_c_variable_export_codec                 C   r÷  )rø  Nc                 S   rù  r(   ©r´   rN  rj   r)  ré   r(   r(   r)   rn   ý  rú  z>ModuleNode.generate_c_function_export_code.<locals>.<listcomp>rp   rq   rr   rs   )rö  rÝ   rt   ru   r	   rv   rw   rN   rý  r(   r(   r)   r‡  ö  rþ  z*ModuleNode.generate_c_function_export_codec              	   C   sV   t |ƒ}|jD ]}|jr|  ||j|j||¡ qW d   ƒ d S 1 s$w   Y  d S r#   )rP  r²   rÞ   Úgenerate_type_import_coder´   rN   )rQ   rß   r=   r^   rX  r·   r(   r(   r)   r‰    s   

€þ"ÿz/ModuleNode.generate_type_import_code_for_modulec                 C   s*   |j dd… D ]}|jjr|j ¡  q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Ý   r´   rt  Ú"get_all_specialized_function_types)rQ   Úpxd_envr·   r(   r(   r)   rÊ    s
   
€ýz!ModuleNode.specialize_fused_typesc                    s   ‡ fdd„|D ƒS )Nc                    s    g | ]}|j rˆ r|jr|‘qS r(   )rÞ   rñ  ré   ©Ú	used_onlyr(   r)   rn     s    þþþÿz7ModuleNode._select_imported_entries.<locals>.<listcomp>r(   )rQ   rõ  r  r(   r  r)   Ú_select_imported_entries  s   
ÿz#ModuleNode._select_imported_entriesc                    sj   | j ˆjdd}|sdS |ˆu ‰ ‡ ‡fdd„|D ƒ}|j t dd¡¡ t|| j|ˆjdt	j
› d	ƒ dS )
úQGenerate import code for all exported C functions in a cimported module.
        Fr  Nc                    s4   g | ]}|j  ¡ |jˆ r|jnˆ tj|j¡f‘qS r(   )r´   rO  rj   r)  rK  r   rì  ré   ©Úis_module_scoperß   r(   r)   rn   *  s    ýþþzIModuleNode.generate_c_variable_import_code_for_module.<locals>.<listcomp>r=  rq   Ú__Pyx_ImportVoidPtr_zvoid **{name})r  r÷   rt   ru   r	   rv   r   rN   r-  r   r~   ©rQ   rß   r=   r^   rÊ   r€   r(   r  r)   rŠ  "  s   û
ÿÿz5ModuleNode.generate_c_variable_import_code_for_modulec                 C   s\   | j |jdd}|sdS dd„ |D ƒ}|j t dd¡¡ t|| j||jdt	j
› d	ƒ dS )
r  Tr  Nc                 S   rù  r(   rÿ  ré   r(   r(   r)   rn   >  rú  zIModuleNode.generate_c_function_import_code_for_module.<locals>.<listcomp>r{   rq   r|   r}   )r  rÝ   rt   ru   r	   rv   r   rN   r-  r   r~   r
  r(   r(   r)   r‹  7  s   ý
ÿÿz5ModuleNode.generate_c_function_import_code_for_modulec              	   C   s’   t |ƒ;}|jD ].}|jdkr|js|  ||j|j||¡ q|  ||||¡ |  ||¡ |jj	r6|  
||¡ qW d   ƒ d S 1 sBw   Y  d S rñ  )rP  r²   rç   Úutility_code_definitionr   r´   rN   Úgenerate_base_type_import_codeÚ!generate_exttype_vtable_init_codeÚ
early_initÚgenerate_type_ready_code)rQ   r=   r^   rX  r·   r(   r(   r)   rˆ  I  s   

€ù"ÿz"ModuleNode.generate_type_init_codec                 C   sV   |j j}|r!|j|jkr#|js%|js'|js)|  ||| j||¡ d S d S d S d S d S d S r#   )	r´   rß  rµ   r-  rX  Úis_cython_builtin_typer  r   rN   )rQ   r=   r·   r^   rX  rß  r(   r(   r)   r  V  s   ÿÿþýz)ModuleNode.generate_base_type_import_codec              
   C   s–   ||j v rd S |jtjvr|j t dd¡¡ | j||||d |j	rC|j t dd¡¡ | 
d|j	|j| |j¡| |j	|¡f ¡ |j  |¡ d S )Nr>  rq   )Ú	error_posÚ	GetVTablez(%s = (struct %s*)__Pyx_GetVtable(%s); %s)rÄ  rj   r   Úctypedef_builtins_maprt   ru   r	   rv   rQ  rÍ  r  rì  r€  rI  r  rÖ  )rQ   r=   r´   rN   r^   rX  r(   r(   r)   r   ]  s$   

ÿ
ÿ
üz$ModuleNode.generate_type_import_codec                 C   s(  |j r|jnd|j›  }}|j}	|j}
|	dv }|s!d|	› d}	n/|
tjv r:| | |j¡› dtj|
 › d¡ d S d}	|
tj	v rFtj	|
 }
|tj
v rPtj
| }|s]|d usXJ ‚| |¡}| |	|¡}|j}|sm| |¡}| |› 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}n|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_re   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  rE  z if (!z) )r~  rð  rµ   rj   r   r  r  rß  rI  Úrenamed_py2_builtins_mapÚbasicsize_builtins_maprM  rÕ  r€  r   r~   r  Ú
check_sizerö  Úis_subclassedÚRuntimeErrorr5  rL  )rQ   r´   r^   rX  rB  r  rC  Úsizeof_objstructr$  rµ   Ú	type_nameÚ
is_builtinrß   rI  Úalignment_funcr  r(   r(   r)   rQ  r  sf   
ÿ





ÿÿÿÿ



ÿz$ModuleNode.generate_type_import_callc                 C   s   t j ||¡ d S r#   )r   ÚCClassDefNoder  )rQ   r·   r^   r(   r(   r)   r  ¯  r2  z#ModuleNode.generate_type_ready_codec                 C   s   | j  dd¡}|  tj|¡S r*  )r³   r.  r,  r   r—  )rQ   r³   r(   r(   r)   r{  ²  s   z$ModuleNode.is_main_module_flag_cnamec                 C   s¨   |j }|jrN| d|j|jf ¡ |jr&|jjr&| d|jtj|jjf ¡ dd„ |jjD ƒ}|rP|D ]}|j	p:|j }| 
¡ }| d|j|j||jf ¡ q3d S d S d S )Nz	%s = &%s;z%s.%s = *%s;c                 S   s   g | ]}|j r|‘qS r(   )r]  ré   r(   r(   r)   rn   Æ  s    þÿz@ModuleNode.generate_exttype_vtable_init_code.<locals>.<listcomp>z%s.%s = %s%s;)r´   r$  r  rÍ  rß  r   rË  r-   rÝ   Úvtable_typeÚsignature_cast_stringr)  r]  )rQ   r·   r^   r´   Úc_method_entriesÚ
meth_entryr%  Úcastr(   r(   r)   r  ¶  sD   þÿýÿÿüÿíz,ModuleNode.generate_exttype_vtable_init_coderG  )F)TT)NNF)yr   rŽ   r   Úchild_attrsr<   r¢   r£   Úpropertyr—   r°   r¸   r¹   rÃ   rÒ   rÜ   rà   rå   rÙ   r  r  rÚ   r  r  rØ   r”  r“  rÖ   rê  rû  r×   r  r  Ústaticmethodr  rx  r
  r  r  rŒ  rn  r  r  rv  r‰  rs  r“  rx  r§  ry  rw  r  r  r	  r
  r  r  r  r  r  r~  r€  r  r'  r4  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ˆ  rR   rƒ  r‰  r‹  r,  rv  r  rw  rt  r{  r…  r“  rö  r†  r‡  r‰  rÊ  r  rŠ  r‹  rˆ  r  r   rQ  r  r{  r  r(   r(   r(   r)   r’   ¾   sü    

+

bgh& ,
 #
%c#,3		<
 $ %WN8 I.'+(G G3  	G;nKQ	

=r’   c                 C   sP   t t| ƒŽ \}}}t|ƒ}d }t|ƒD ]\}}||kr d||< q|}q|||fS )NrB   )ÚziprÉ   rÄ  rÅ  )Úitem_tuplesÚ
signaturesÚnamesrË   Úlast_sigÚirî  r(   r(   r)   Ú_deduplicate_inout_signatures×  s   

r3  r^   c                    s2  t |ƒ\}}	}
tj› |rdnd› d}|jdd‰ d |¡ d¡}d |	¡ d¡}‡ fdd	„|
D ƒ}t|d
 | dƒ}|rc|  d|› d|  |¡› d¡ |  d¡ |  |  	|› d|¡¡ |  d¡ n|  d|› d| 
¡ › d¡ |  d|› d|› dt|ƒd › d¡ |  |jd|› dd› dd |¡› dˆ › d¡ | j t dd¡¡ |  |jd|› dd› d |› d!¡ |  d"|› d#|› d$¡ |  d%|› d&¡ |  ||› d'|› d|› d(|› d)|› d*
¡ |  d+|› d,¡ |  |› d-|› d.¡ |  |› d/|› d0¡ |  d1|› d2|› d#|› d$¡ |  d3¡ d S )4Nr?  Úexportr  rB   )rj   ú zutf-8c                    s   g | ]
}d ˆ › d|› ‘qS )re   z)&r(   )rl   Ú
item_cname©Úpointer_castr(   r)   rn   ï  rÂ  z0_generate_import_export_code.<locals>.<listcomp>ó    zconst char * z#signature = __Pyx_PyBytes_AsString(rE  z#if !CYTHON_ASSUME_SAFE_MACROSrî  rô   zsignature = r&  zname = zsignature + r   zconst z
pointers[]z = {rš  z, (z) NULL};r?  r@  zconst *Úpointerr%  z	pointers;zconst char *zcurrent_signature = z
signature;zwhile (*z
pointer) {re   zname, *z	pointer, zcurrent_signature)z++zpointer;zname = strchr(zname, '\0') + 1;zsignature = strchr(zsignature, '\0') + 1;zif (*zsignature != '\0') rõ   )r3  r   Úpyrex_prefixÚformatr«  rÕ  r    r  r¹  r  r  r²  rt   ru   r	   rv   r  )r^   rN   Úinout_item_tuplesÚper_item_funcÚtargetÚpointer_declÚuse_pybytesÚ	is_importr/  r0  Úinout_itemsÚpyxÚ	sig_bytesÚnames_bytesÚpointersÚsigs_and_names_bytesr(   r7  r)   Ú_generate_import_export_codeç  s<   
&2
ÿ& þrI  c              
   C   s”   |   d¡ | jjtdd}| j t dd¡¡ |   |› d|  ||¡› ¡ |  	|t¡ t
| |||||ddd |  |t¡ | j |¡ |   d	¡ d
S )zqGenerate function/pointer export code.

    'exports' is a list of (signature, name, exported_cname) tuples.
    rA  Tré  Ú
GetApiDictrq   z! = __Pyx_ApiExport_GetApiDict(); F©rA  rB  rõ   N)r  rŒ  rº  r   rt   ru   r	   rv   r  r»  rI  r^  r¼  )r^   rN   rx   Úexport_funcr@  Úapi_dictr(   r(   r)   rw     s   

ÿ
ÿÿrw   c              
   C   sŠ   |   d¡ | jjtdd}|   |› d| ¡ › d|  ||¡› ¡ |  |t¡ t| |||||ddd |  |t¡ | j 	|¡ |   d¡ dS )	zqGenerate function/pointer import code.

    'imports' is a list of (signature, name, imported_cname) tuples.
    rA  Tré  z = PyImport_ImportModule(z); rK  rõ   N)
r  rŒ  rº  r   r  r  r»  rI  r^  r¼  )r^   rN   r€   Úqualified_module_namer   r@  Ú
module_refr(   r(   r)   r   )  s   

ÿÿr   c                   @   s2   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ ZdS )rP  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                 C   s:   || _ i | _|r| ¡ D ]\}}|| jd| < qg | _d S )Nz"%s")r^   ÚimportedrË   Útemps)rQ   r^   r@  rj   r)  r(   r(   r)   rS   F  s   
zModuleImportGenerator.__init__c                 C   sf   || j v r
| j | S | j}|jjtdd}| j |¡ | d||||f ¡ | |t¡ || j |< |S )NTré  z5%s = PyImport_ImportModule(%s); if (unlikely(!%s)) %s)	rP  r^   rŒ  rº  r   rQ  r›   r  r»  )rQ   Úmodule_name_stringrB  r^   r¿  r(   r(   r)   rÕ  N  s   

ÿ
z%ModuleImportGenerator.imported_modulec                 C   s   | S r#   r(   r–   r(   r(   r)   r­  [  ro  zModuleImportGenerator.__enter__c                 G   s.   | j }| jD ]}| |t¡ |j |¡ qd S r#   )r^   rQ  r^  r   rŒ  r¼  )rQ   Úexcr^   r¿  r(   r(   r)   r³  ^  s
   
þzModuleImportGenerator.__exit__r#   )r   rŽ   r   r   rS   rÕ  r­  r³  r(   r(   r(   r)   rP  A  s    
rP  c           
      C   sæ   | j o| j}| j r| js| jso|s| js| jdks|rq| jdkr&tj}d}n| jdkr1tj}d }n| jdkr;d}d }nd}d }| j}| jrO|sOd}d }t	|ƒ}|j
| j|d}| | j¡}	| d||	|f ¡ |j | ¡ d S d S d S )NrÈ  r[  ræ   rã  rä  rå  z%s %s%s; /*proto*/)rñ  r  Úinline_func_in_pxdrò  rÞ   rç   r   r'  r´   r   r(  r)  rÏ  rÐ  r  rt   r  )
r·   r=   r^   r  Úfrom_cy_utilityrî  ræ  r´   r‘  rÒ  r(   r(   r)   rð  e  sF   ÿÿ



ÿýärð  ÚRefnannyrl  zj
#if defined(__GNUC__)
#define __Pyx_PACKED __attribute__((__packed__))
#else
#define __Pyx_PACKED
#endif
rB   Úutility_code_proto_before_types)r7  r8  Úproto_block)AÚcythonÚdeclareÚobjectÚcollectionsr   r>  rü  rã   rh  r   r+   Útypingr   r   r   rB   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*   r$   r1   r4   r?   rÈ  rG   ÚNodeÚ	BlockNoder’   r3  rú   rI  rw   r   rP  rð  r„  rz  r˜  r(   r(   r(   r)   Ú<module>   s²   þåO                              7*$&
ú