o
    wÖi¬Ù ã                   @   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mZmZmZ ddlmZmZ ddlmZmZm Z m!Z!m"Z" ddlm#Z#m$Z$m%Z% ddl&m'Z'm(Z( ddlm)Z) dd„ Z*dd„ Z+dd„ Z,dd„ Z-dd„ Z.d d!d"d#d$d"d d!d"d#d$d"d%œZ/G d&d'„ d'ej0ej1ƒZ2G d(d)„ d)ƒZ3d*d+„ Z4e# 5d,d-¡Z6e#d.d/d0d1Z7dS )2é    N)
ÚNamingÚOptionsÚ
PyrexTypesÚ	TypeSlotsÚerrorÚwarningÚpy_object_typeÚUtilityCodeÚEncodedStringÚre)Údefaultdicté   )ÚCPtrType)ÚFuture)ÚAnnotate)ÚCode)r   )ÚNodes)r   )r   )r   )ÚPythran)r   r   ÚCompileErrorÚformat_position)r   Úget_all_subtypesé   )Úopen_new_fileÚreplace_suffixÚdecode_filenameÚbuild_hex_versionÚis_cython_generated_file)r	   ÚIncludeCodeÚTempitaUtilityCode)r
   Úencoded_string_or_bytes_literal)Úhas_np_pythranc                 C   s   t | |ƒ}t|ƒS ©N)r   Úas_encoded_filename)ÚpathÚnewsufÚnewpath© r&   úW/home/ubuntu/sommelier/.venv/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_pxd1   s   
r/   c                 C   s   | j  ¡  | j  ¡  | S r!   )r+   Úcheck_c_classesÚcheck_c_functionsr-   r&   r&   r'   Úcheck_c_declarations6   s   

r2   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_linenumsr3   Úc_line_in_traceback)	r   Úannotater4   ÚhasattrÚprintr   ÚCCodeConfigÚ
directivesr5   )ÚenvÚoptionsr4   r&   r&   r'   Úgenerate_c_code_config<   s   
ýr=   )Tú&&T)Fú||F)TÚ N)Tr?   F)Fr>   T))Ú__lt__Ú__gt__)rA   Ú__le__)rA   Ú__ge__)rC   rD   )rC   rA   )rC   rB   )rB   rA   )rB   rD   )rB   rC   )rD   rC   )rD   rB   )rD   rA   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>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Ò„ ZodÓdÔ„ ZpdÕdÖ„ Zqdâd×dØ„ZrdÙdÚ„ ZsdÛdÜ„ ZtdÝdÞ„ ZudS )ãÚ
ModuleNodeÚbodyNc                 C   ó   | j S r!   ©r+   ©Úselfr&   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   )rF   r:   rL   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)Ú
isinstancerF   r   ÚStatListNodeÚ	pxd_statsÚposÚutility_code_statsrN   Úinsertr:   r+   ÚCompilerDirectivesNodeÚextendrO   Úutility_code_listÚ
c_includesÚvaluesÚprocess_includeÚincluded_files)rJ   Útreer+   ÚstageÚtarget_statsÚincrS   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:   re   )rJ   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:   rF   )r   rZ   rW   r:   rF   )rJ   rF   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 |¡ | dd„ ¡rb| j t dd¡¡ d S d S )NÚold_style_globalszFile: %s (starting at line %s)Ú
c                 S   s
   | t ju S r!   )r   Úcy_pymutex_type)Útpr&   r&   r'   Ú<lambda>Ñ   s   
 z1ModuleNode.analyse_declarations.<locals>.<lambda>ÚCythonPyMutexPublicCheckzLock.c)r    r   Úinclude_pythran_genericr:   ro   r   Ú
docstringsÚdocÚembed_pos_in_docstringr
   r   Úrelative_positionrW   ÚencodingrF   Úanalyse_declarationsÚfind_shared_usages_of_typer+   Úuse_utility_coder	   Úload_cached©rJ   r;   r&   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_typeri   Úis_enumÚis_cpp_enumÚcreate_type_wrapper©rJ   r;   Únamerl   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)rJ   r<   Úresultr;   r&   r&   r'   Úprocess_implementationä   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)rJ   Úmodulerl   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   rW   Úosr#   Úbasename)rJ   r#   r›   r&   r&   r'   Úassure_safe_targetõ   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˜   ©Ú.0rl   ©r¢   rL   r&   r'   Ú
<listcomp>ÿ   s    
ÿÿþþÿzAModuleNode.generate_h_code.<locals>.h_entries.<locals>.<listcomp>r&   )rƒ   r¢   rL   r&   r¥   r'   Ú	h_entriesþ   s   z-ModuleNode.generate_h_code.<locals>.h_entriesr   )r¢   z.hÚh_codeÚtype_declarationsÚendz.pxir@   ú#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—   rg   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_coderi   Úgenerate_cclass_include_codeÚgenerate_public_declarationÚmod_init_func_cnamer
   rj   Úas_c_string_literalÚrstripr   Úcopyto)rJ   r;   r<   r•   r§   Úh_typesÚh_varsÚh_funcsÚh_extension_typesÚh_code_writerÚc_code_configÚglobalstateÚh_code_startÚh_code_mainÚ
h_code_endÚi_codeÚh_guardÚ	api_guardrl   Úpy3_mod_func_nameÚwarning_stringÚfr&   r&   r'   r“   ý   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_macrori   Údeclaration_codeÚcname)rJ   rl   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)rJ   Úprefixr;   r¾   r&   r&   r'   r¾   d  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 ¡ q„|rÊˆ  d¡ |D ]#}t|jƒ}| tj|j¡}ˆ  d| |¡ ¡ ˆ  d|j|f ¡ q¦|r÷ˆ  d¡ |D ]#}t|jƒ}| tj|j¡}ˆ  d| |¡ ¡ ˆ  d|j|f ¡ 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 ¡ q4|D ]}| tj|j¡}|j #¡ }ˆ  dtj"|j ¡ ||f ¡ qVt$ˆ |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£   ©rL   r&   r'   r¦   j  s    ÿÿ
ÿzEModuleNode.generate_api_code.<locals>.api_entries.<locals>.<listcomp>r&   )rƒ   rL   r&   rì   r'   Úapi_entriesi  ó   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)r‹   Úsrc_filerï   ÚprotoÚimpl©r¨   r&   r'   Úput_utility_code  s   
ÿz6ModuleNode.generate_api_code.<locals>.put_utility_coder«   z#include %sr@   zstatic PyTypeObject *%s = 0;ú#define %s (*%s)zstatic %s = 0;ú#define %s %sÚVoidPtrImportúImportExport.cÚFunctionImportÚ
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—   rg   r(   r´   Úapi_filerŸ   r   r¶   r=   r·   r½   r¾   r   rÅ   rÀ   rÁ   rµ   r   r#   rž   r"   rÍ   ri   Útypeptr_cnameÚtypeobj_cnamer   ÚmangleÚfunc_prefix_apir‹   rä   Úvarptr_prefix_apiré   Úsignature_stringÚ	cyversionÚempty_declaration_codeÚModuleImportGeneratorÚgenerate_type_import_callr   rÏ   Úclose)rJ   r;   r<   r•   rí   Úapi_varsÚ	api_funcsÚapi_extension_typesrÕ   rÜ   rö   Ú
h_filenamerl   ri   rå   ÚsigÚimport_generatorrß   r&   rõ   r'   r”   h  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_declr  )rJ   ri   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Á   rj   r‹   Úindentr+   r³   ri   rä   rå   Údedent)rJ   ri   rÚ   r³   rl   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 ¡ |  +|d d… ||d ¡ |  ,||d ¡ tj-r|  .||d ¡ |  /|d ¡ |  0|||¡ |	 1d¡ |j2d d … D ]}| |¡ q'| 3¡  |  4|||¡ t5|jƒ}z| 6|¡ W | 7¡  n| 7¡  w d|_8|j9r^|  :||¡ tjsf|jro|  ;|||¡ 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;r@   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_tablerp   r   )<rŸ   r´   r   r   r6   r   ÚAnnotationCCodeWriterÚcompilation_sourcer!  r   r¶   r=   r·   r#  Úinitialize_main_c_coderW   Ú
module_posr:   Úgenerate_module_preambleÚembedded_metadatar}   Úrefnanny_utility_coderÁ   rh   rÍ   Úis_main_module_flag_cnameré   rÄ   Úgenerate_cached_builtins_declsÚgenerate_lambda_definitionsÚgenerate_variable_definitionsrF   Úgenerate_function_definitionsÚgenerate_typeobj_definitionsÚgenerate_method_tabler€   Úgenerate_import_starÚput_code_herer	   ÚloadÚgenerate_module_state_startÚgenerate_module_state_clearÚgenerate_module_state_traverseÚgenerate_module_init_funcÚgenerate_module_cleanup_funcÚembedÚgenerate_main_methodÚgenerate_filename_tableÚ!generate_declarations_for_modulesÚwriter\   Úfinalize_main_c_codeÚgenerate_module_state_endr   rÏ   r  Úc_file_generatedÚ	gdb_debugÚ_serialize_lineno_mapÚ_generate_annotations)rJ   r;   r<   r•   Úmodulesr   Ú
rootwriterrÕ   rÖ   r¨   ÚcodeÚmodule_is_mainÚutilcoderß   r&   r&   r'   r’   Þ  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)r6   r   Úannotate_coverage_xmlr   r#   ÚexistsÚxml.etree.ElementTreeÚetreeÚElementTreeÚparseÚgetrootÚiterÚtailÚsave_annotationÚmain_source_filer´   r+   r`   ÚcontextÚsearch_include_directoriesÚabspathÚdirnameÚjoinÚ
startswithrW   ÚmakedirsÚOSErrorÚerrnoÚEEXIST)rJ   rU  r•   r<   Úcoverage_xml_filenameÚETrY  ÚelÚsearch_include_fileÚ
target_dirÚincluded_fileÚtarget_fileÚtarget_file_dirÚsource_fileÚero  r&   r&   r'   rS  ;  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)rg  Úgdb_debug_outputwriterÚbufferÚ
allmarkersr   ÚlistÚ	enumerateÚfilenamerO   Ústartr‚   r„   Ú	add_entryrk  ÚmapÚstrrª   Ú	serialize)
rJ   r;   ÚccodewriterÚtbÚmarkersÚdÚc_linenoÚsrc_descr€  r~  r&   r&   r'   rR  a  s$   
€
ü
z ModuleNode._serialize_lineno_mapc                 C   s<   ||vrd||< |j D ]	}|  |||¡ q| |¡ d S d S )Nr   )Úcimported_modulesr   rO   )rJ   r;   Úmodule_listÚmodules_seenÚimported_moduler&   r&   r'   r   v  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!   )Úaddri   rO   )ÚuÚv©ÚdfsÚgetkeyr•   ÚseenÚ
subclassesÚ	type_dictr&   r'   rš    s   
z1ModuleNode.sort_types_by_inheritance.<locals>.dfs)	r   r„  ri   Ú	base_typerO   ÚgetÚsetÚreversedÚreverse)	rJ   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   rG   r!   )Úvtabstruct_cname©Ú
entry_typer&   r&   r'   r¬  ½  ó   z8ModuleNode.sort_type_hierarchy.<locals>.vtabstruct_cnamec                 S   rG   r!   )Úobjstruct_cnamer­  r&   r&   r'   r°  Â  r¯  z7ModuleNode.sort_type_hierarchy.<locals>.objstruct_cname)rg   ÚusedÚin_cincluderi   r¬  r	   r«  rT   r+   rŠ  rO   r²   r˜   Úis_extension_typer°  rª  )rJ   r“  r;   Ú	vtab_dictÚvtab_dict_orderÚvtabslot_dictÚvtabslot_dict_orderr™   rl   ri   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Ú
attrgetterrg   ri   rO   rª  )rJ   r;   Úkey_funcÚ
entry_dictÚentry_orderrl   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&   )r¤   Út©Úvtabslot_entriesr&   r'   r¦   ä  s    z8ModuleNode.generate_type_definitions.<locals>.<listcomp>)Ú!generate_objstruct_predeclarationri   r¡  r²   Ú	is_ctupler±  r‹   r–  rO   r˜   rÂ   Úgenerate_objstruct_definitionÚgenerate_typeobj_predeclarationÚgenerate_exttype_vtable_structÚ$generate_exttype_vtabptr_declarationÚ*generate_exttype_final_methods_declaration)rJ   r;   rT  r¹  rº  rV  rl   Úctuple_namesr™   Ú
definitionr²   r&   rÂ  r'   Úgenerate_type_definitionsÔ  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©   r@   z/*--- Type declarations ---*/zcpython.arrayc                 S   s   g | ]}|j ‘qS r&   )ré   )r¤   Úmr&   r&   r'   r¦   õ  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)
rJ   r;   rT  rÖ   Útypecoder¹  rº  Ú
modulecoder™   Údefined_herer&   r&   r'   rL  ï  s*   






ÿ
úz,ModuleNode.generate_declarations_for_modulesc                 C   s   |   t |d¡¡ d S )Nr+  )rB  r	   rC  )rV  r‹   r&   r&   r'   Ú_put_setup_code  s   zModuleNode._put_setup_codec                 C   sN  |  ¡  |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¡ |j)d= }|j)d> }|d?vrÆ|sÆt*| j+d@ƒ | dAt"|dBkƒ› ¡ | dCt"|dDkƒ› ¡ |dEvrì| dF|› d¡ |dGkrôdH}n|dIkrüdJ}n| ,¡ }| dK|› dL¡ | dM|› dN¡ | -t .dOdP¡d+ ¡ | t /dQdR¡¡ t0j1 2|¡ t0j1 3|¡ t0j4 3|¡ | -t5j6¡ |  |dS¡ | d¡ | dT¡ | dU|j7 ¡ t8j9d urd| dVtj: ¡ | d.¡ | dWtj ¡ | dXtj ¡ | dYtj;tj<f ¡ | dZtj ¡ | t /d[d¡¡ t=|ƒr¥| t /d\d]¡¡ d S d S )^Nz/* BEGIN: Cython Metadataé   T)r  Ú	sort_keyszEND: Cython Metadata */r@   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ÚCythonABIVersionr+  Ú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 1Úc_string_typeÚc_string_encoding)ÚbytesÚ	bytearrayzGa default encoding must be provided if c_string_type is not a byte typez/#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII Úasciiz.#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 Úutf8)rí  rî  z'#define __PYX_DEFAULT_STRING_ENCODING "rì  Ú	ByteArrayrŠ  ÚUnicodez*#define __Pyx_PyObject_FromString __Pyx_PyÚ_FromStringz1#define __Pyx_PyObject_FromStringAndSize __Pyx_PyÚ_FromStringAndSizeÚTypeConversionszTypeConversion.cÚFormatTypeNamezObjectHandling.cÚPretendToInitializeú#if !CYTHON_USE_MODULE_STATEzstatic PyObject *%s = NULL;zstatic PyObject *%s;zstatic int %s;zstatic int %s = 0;z"static const char * const %s = %s;zstatic const char *%s;ÚFastTypeChecksÚPythranConversionzCppSupport.cpp)>r½   rÁ   ÚjsonÚdumpsrÖ  r‚   r]   r^   r   ÚsortkeyÚlocationÚINITIALrM  rÖ   r@   rÜ  rê   r   r   Údivisionrg  Úfuture_directivesr}   r	   rC  r<   Úcplusr   Úfilename_cnameÚfiletable_cnameÚlineno_cnameÚclineno_cnameÚline_c_macror5   ÚintrÆ   rÇ   r¾   r¿   rÅ   rÄ   r:   r   rW   Útitlerñ   rð   r~   r   Úc_long_typeÚcreate_to_py_utility_codeÚcreate_from_py_utility_codeÚ
c_int_typer   Úbranch_prediction_macrosÚmodule_cnamer   Ú
pre_importÚpreimport_cnameÚcfilenm_cnameÚfile_c_macror    )rJ   r;   r<   r’  ÚmetadatarV  rd   rÜ  Úmark_errpos_codeÚ
cline_infoÚdefault_cline_runtimeré  rê  Úc_string_func_namer&   r&   r'   r7  
  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Á   )rJ   rV  rÇ   r‹   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Á   ©rJ   rV  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û  rü  ÚEARLYrM  ÚLATEÚputln_openmp)rJ   r;   r’  rV  r&  rç  rd   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ž   r@   z!static const char* const %s[] = {ú%s,Ú0ú};)Úos.pathr  rž   rÁ   r   r  rÖ   Úfilename_listÚget_filenametable_entryÚget_descriptionÚpathlibÚPathÚas_posixr"   rÍ   )rJ   rV  r  rž   r!  Ú	file_pathÚescaped_filenamer&   r&   r'   rK  Æ  s   
ø
z"ModuleNode.generate_filename_tablec                 C   s   d S r!   r&   ©rJ   r;   rV  r&   r&   r'   Úgenerate_type_predeclarationsÙ  ó   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 ]N}|j s‡|j}|jrK|  ||¡ q9|jsQ|jrX|  ||¡ q9|jrb|  ||¡ q9|jrt|jst|jrt|  |jj	|¡ q9|jr~|  ||¡ q9|j
r‡|  ||¡ q9d S r!   )r²  ri   Ú
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Æ  )rJ   r²   rV  rl   ri   r&   r&   r'   rÂ   Ü  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 )Nr@   Ú__pyx_é   z!typedef struct %s __pyx_gcc33_%s;)rÁ   rg   ri   Útypedef_flagr°  rl  )rJ   r;   rV  rl   ri   r‹   rd  r&   r&   r'   Úgenerate_gcc33_hackþ  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;)ri   Útypedef_base_typer+   Ú
is_numericÚis_cpp_class_scoperÖ   ÚKeyErrorÚmark_posrW   rÁ   rä   rå   )rJ   rl   rV  rŸ  Úenclosing_scopeÚwriterr&   r&   r'   r1    s   ÿzModuleNode.generate_typedefc                 C   s$   |j rd|||||f S d||f S )Nz%s %s;
typedef %s %s %s;rà   )r7  )rJ   ri   Úkindr‹   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&   ©r  ©r¤   ÚTr&   r&   r'   r¦   %  ó    zCModuleNode.generate_struct_union_predeclaration.<locals>.<listcomp>)ri   r-  Ú	templatesrÁ   rk  rB  rA  rå   ©rJ   rl   rV  ri   r&   r&   r'   r.  !  s   
ÿz/ModuleNode.generate_struct_union_predeclarationc                 C   s   d||f }d}||fS )Nz%s %s {r  r&   )rJ   ri   rA  r‹   Ú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>  rW   ri   r+   rA  Ú	is_structÚpackedrÖ   r}   Úpacked_struct_utility_coderL  rå   rÁ   r³   rä   )rJ   rl   rV  ri   r+   rA  rP  rJ  rK  r³   Úattrr&   r&   r'   r3  -  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å   rk  ri   ÚnogilÚput_ensure_gilÚput_init_var_to_py_noneÚput_release_ensured_gil)
rJ   Ú	arg_declsÚ	arg_namesÚis_implementingÚpy_attrsÚconstructorri   rV  Ú	needs_gilrR  r&   r&   r'   Úgenerate_cpp_constructor_codeL  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   rC  r&   rD  rE  r&   r&   r'   r¦   d  rG  z<ModuleNode.generate_cpp_class_definition.<locals>.<listcomp>ú	struct %sz	, public c                 S   rC  r&   rD  )r¤   Ú
base_classr&   r&   r'   r¦   i  rG  z : public %sz {c                 S   s   g | ]}|j jr|js|‘qS r&   )ri   Úis_pyobjectÚis_inherited)r¤   rz  r&   r&   r'   r¦   m  s
    ÿ
ÿFzstatic z<init>z<del>zvirtual TrN  r/  z~%s() {z%s();rT  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);r  )$r>  rW   ri   r+   rH  rÁ   rk  rñ   rå   Úbase_classesrÂ   r²   rƒ   r^   r³   Úis_cfunctionÚis_static_methodr‹   Úlookup_hererä   rÖ   r¹   Úall_alternativesÚoriginal_argsÚlenÚargsÚoptional_arg_countrO   Úop_arg_structr   Úoptional_args_cnamer`  rW  Úput_var_xdecrefrY  Úput_var_incref)rJ   rl   rV  ri   r+   Úbase_class_declr]  Úhas_virtual_methodsr^  Ú
destructorrR  r\  Úconstructor_alternativerZ  r[  ÚargÚdefault_constructorr&   r&   r'   r4  ]  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 )
Nr@   z
enum classÚenumzDEmpty enum definition not allowed outside a 'cdef extern from' blockr.  z::z%s = %sú,ztypedef enum %s %s;)r>  rW   ri   rå   r‹   rˆ   rL  rÁ   Úenum_valuesr   Ú
value_nodeÚgenerate_evaluation_codeÚsplitr•   r‡   r7  )rJ   rl   rV  ri   r‹   rA  rJ  rK  rz  Ú
last_entryÚvalue_entryÚ
value_coder&   r&   r'   r2  À  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 )Nr@   Úexternr  r  r  r    Ú	DL_EXPORT)	rÁ   ri   r  r¡   r²  r   rã   r   r  )rJ   rl   rV  r‹   r&   r&   r'   rÇ  ã  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 )Nr@   zstruct %s {zstruct %s %s;rN  z(*%s)r  )r±  r>  rW   ri   r+   Úspecialize_fused_typesr¬  rÁ   rŸ  r   Úobj_base_cnamer—   rd  rä   rå   )rJ   rl   rV  ri   r+   Úmethod_entryr&   r&   r'   rÈ  õ  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>  rW   ri   Úvtabptr_cnamerÁ   r¬  rI  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>  rW   ri   r+   r—   rd  Úfinal_func_cnamerä   Úbuild_function_modifiersÚfunc_modifiersrÁ   )rJ   rl   rV  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Á   rB  r°  )rJ   ri   rV  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Œ  r  ÚPyHeapTypeObjectz%s%s %s;)ústruct r@   ÚPyObject_HEADzstruct %s *%s;rN  ztypedef struct %s %s;)r>  rW   r+   rL  r°  rÁ   rŸ  r7  r   r„  Úvtabslot_cnamer¬  r³   Úis_declared_genericr   ri   Úis_cpp_optionalÚcpp_optional_declaration_coderå   rä   Úuse_entry_utility_codeÚobjtypedef_cname)
rJ   ri   rV  rJ  rK  rŸ  Úbasestruct_cnamerR  Ú	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 )Nr)  r,  r-  úPyTypeObject *%s;ú!Py_CLEAR(clear_module_state->%s);z$Py_VISIT(traverse_module_state->%s);úPyObject *%s;)Úinsertion_pointrg   r˜   rÁ   ri   r  r  )
rJ   r;   rV  rÌ  rÖ   r)  r,  r-  Úmodule_state_typeobjrl   r&   r&   r'   rÐ  V  s>   

ÿÿÿÿÿÿÿÿ€òz(ModuleNode.generate_c_class_declarationsc           
      C   sn  |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 ¡ | |¡ 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ã   Úinitri   Úliteral_coderå   r   r	  Úvarptr_prefixr‹   rñ   r’  r“  rä   Úput_saferÁ   r”  )
rJ   r;   rV  rÌ  rl   Ústorage_classr¡  r¥  ri   rå   r&   r&   r'   rÑ  m  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)rJ   r;   rV  rÌ  rl   Ú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¡   rñ   ri   rä   rå   r¥  r¦  r¨  rÁ   )rJ   r;   rV  rl   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 definedz#if CYTHON_USE_TYPE_SPECSrÛ  r°   ),ré   rg   r¡   ri   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   rW   rÁ   Úgenerate_ass_slice_functionÚgenerate_getattro_functionÚgenerate_setattro_functionÚgenerate_descr_get_functionÚgenerate_descr_set_functionÚis_closure_class_scopeÚis_defaults_class_scopeÚdefines_anyÚgenerate_dict_getter_functionr   Úrichcmp_special_methodsÚgenerate_richcmp_functionr:   Úparent_typeÚget_slot_tablerÖ   ÚPyNumberMethodsÚis_binopÚuser_methodsÚgenerate_binop_functionÚgenerate_property_accessorsr@  Úgenerate_getset_tableÚgenerate_typeobj_specÚgenerate_typeobj_definition)rJ   r;   rV  rh   rl   ri   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¬  ©rJ   r+   rV  ri   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ä   r  rß  r&   r&   r'   Úgenerate_self_castö  s   þÿzModuleNode.generate_self_castc              	      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¡ | d¡ | d¡ | d¡ | d¡ |rZ|j t dd¡¡ |rd}nd}|jddd }| d
¡ | d!| |¡||f ¡ | d"| |¡| |¡f ¡ | d#| ¡ | d$¡ ˆ   ¡ rK| d%¡ | d&¡ | d¡ | d'¡ |sb| d(¡ | d)¡ |s| d*¡ | d+tj!tj"f ¡ | d,¡ | d-¡ |r|s| d,¡ |s—| d¡ |r¤| d.| #d/¡ ¡ d0}|jrÚ|}|jrÁ|jj$rÁ|j}|jrÁ|jj$sµ||urÌd1|j$ }nd}| d2|j||j%f ¡ |D ]}|j&j'||d3d4 qÜ|	D ] }|j(d5krd}| )d6|j*|j*f ¡ që|j+|d7d0d8 që|D ]}| d9|j* ¡ | d:|j* ¡ q|
D ]}| d;|j* ¡ q$|j*d<kr;| d=¡ |r\|jrNd>tj!› d?tj"› d@}ndA}d}| dB|j,|f ¡ | dC¡ |rv| dD¡ |j-d/t.d0d8 | dE¡ | d,¡ | /¡  d S )FNÚtp_newÚ	__cinit__c                    ó   g | ]
}|j  ˆ ¡r|‘qS r&   )ri   Úneeds_explicit_constructionr£   rH   r&   r'   r¦     ó    
þÿz4ModuleNode.generate_new_function.<locals>.<listcomp>r@   ú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_prototyperN  rà  z__Pyx_PyType_GetSlot(z, tp_new, newfunc)zPyObject *o = %s(t, a, k);zPyObject *o;z##if CYTHON_COMPILING_IN_LIMITED_APIzAallocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);zo = alloc_func(t, 0);rÛ  ÚIncludeStringHúStringTools.czU & (int)(!__Pyx_PyType_HasFeature(t, (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))©ÚderefzEif (likely((int)(%s > 0) & (int)(t->tp_basicsize == sizeof(%s))%s)) {zo = (PyObject*)%s[--%s];zmemset(o, 0, sizeof(%s));z(void) PyObject_INIT(o, t);úPyObject_GC_Track(o);ú} elseÚ{zBif (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) {zo = (*t->tp_alloc)(t, 0);ú} else {z8o = (PyObject *) PyBaseObject_Type.tp_new(t, %s->%s, 0);r±   zif (unlikely(!o)) return 0;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->%srT  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;r  zreturn NULL;)0r   ÚConstructorSlotÚmangle_internalÚ	slot_coderÓ  rŸ  Úget_refcounted_entriesÚis_final_typeÚis_internalr³   rh  Ú
is_specialÚtrivial_signaturer:   r   r   Úfreelist_nameÚfreecount_namerÖ   rÁ   rä   Ústart_slotfuncr   Úpy_objptr_typer  Úget_base_slot_functionr  Úis_builtin_typeÚname_in_slot_module_stater}   r	   r~   rÁ  Úmodulestateglobal_cnameÚempty_tupleÚ	cast_coder¬  r†  ri   Úgenerate_explicit_constructionr‹   rñ   rå   rX  Ú
func_cnameÚput_decref_clearr   Úexit_cfunc_scope)rJ   r+   rV  Úcclass_entryÚtp_slotÚ	slot_funcri   rŸ  Úhave_entriesr]  Ú
py_buffersÚmemoryview_slicesrþ  Úexplicitly_constructable_attrsÚcinit_func_entryÚunused_markerÚfreelist_sizer  r  r)  Úneed_self_castrâ  Úbase_type_typeptr_cnameÚtype_safety_checkÚ
obj_structÚneeds_error_cleanupÚvtab_base_typeÚstruct_type_castrl   Ú
cinit_argsr&   rH   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__r@   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:   rû  rü  rh  r   rÁ   Ú
used_ifdefr  r   r   r  r  )rJ   r+   rV  r  Úslot_func_cnamerl   r&   r&   r'   r¿  ¢  s(   






ÿz ModuleNode.generate_del_functionc              	      sB  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&¡}|rŸd&}nd'}ˆ j}| d(¡ | d)| |¡||j'd&dd*|f ¡ | d+| |¡| |¡| (d,¡f ¡ | d-¡ | d¡ | d.¡ | d/¡ | d0¡ | d1¡ | d.¡ | d2¡ | d3¡ | d¡ | d¡ |r| d¡ |	r| d4¡ | d¡ | )¡  d S )5NÚ
tp_deallocÚ__dealloc__r$  Ú__weakref__rº  c                    rä  r&   )ri   Úneeds_explicit_destructionr£   rH   r&   r'   r¦   Ò  ræ  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))z¬if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && %s) {z>if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == %s) {z1if (PyObject_CallFinalizerFromDealloc(o)) return;r±   r°   zPyObject_GC_UnTrack(o);Ú
PyTrashcanúExtensionTypes.cz__Pyx_TRASHCAN_BEGIN(o, %s)z.if (p->__weakref__) PyObject_ClearWeakRefs(o);z+if (p->__dict__) PyDict_Clear(p->__dict__);rõ  rö  rø  FT)rU  Úclear_before_decrefÚhave_gilrð  r)  z4__Pyx_PyType_GetSlot(%s, tp_dealloc, destructor)(o);z+if (PyType_IS_GC(%s)) PyObject_GC_Track(o);rö  zIif (likely(%s)) __Pyx_PyType_GetSlot(%s, tp_dealloc, destructor)(o); elsez"__Pyx_call_next_tp_dealloc(o, %s);ÚCallNextTpDeallocrè  r   r@   z^ & (int)(!__Pyx_PyType_HasFeature(Py_TYPE(o), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))rê  zIif (((int)(%s < %d) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(%s))%s)) {rî  z%s[%s++] = %s;rô  rñ  rò  ú#if CYTHON_USE_TYPE_SLOTSú(*Py_TYPE(o)->tp_free)(o);rÛ  úDfreefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free);úif (tp_free) tp_free(o);Ú__Pyx_TRASHCAN_END)*r   rú  rû  rÓ  rŸ  rü  r  r   r   rþ  rÁ  Úneeds_trashcanrÍ  rÎ  rh  r³   rý  rá  Úmay_have_finalizerÁ   rÖ   r}   r	   r~   Úgenerate_usr_dealloc_callri   Úgenerate_explicit_destructionÚput_xdecref_clearrå   r  r  r  r  r+   r:   r   r   r  r  rä   r  r  )rJ   r+   rV  r  r  rŸ  r-  rþ  rÁ  r<  Úweakref_slotÚ	dict_slotrÝ  r]  r  Úexplicitly_destructable_attrsÚfinalised_checkrl   Ú
base_cnamer.  r  r  r  r  ri   r&   rH   r'   rÀ  »  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/  rò  r'  r(  z&__Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);r)  z&__Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);r*  r±   )rh  r   rÁ   r  )rJ   r+   rV  rl   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;rò  z-traverseproc traverse = __Pyx_PyType_GetSlot(z, tp_traverse, traverseproc);z>if (!traverse); else { e = traverse(o,v,a); if (e) return e; }r±   Trö  ze = 0;úif (likely(%s)) {z(if (traverse) { e = traverse(o, v, a); }rñ  r°   z1{ e = __Pyx_call_next_tp_traverse(o, v, a, %s); }zif (e) return e;ÚCallNextTpTraverser3  z e = __Pyx_call_type_traverse(o, z, v, a);ÚCallTypeTraverserø  ú	if (%s) {z!e = (*v)(%s, a); if (e) return e;z.objzif (p->%s) {z$e = (*v)(p->%s, a); if (e) return e;r  )r   ÚGCDependentSlotrû  rÓ  rŸ  rü  r  r   Úc_returncode_typerý  rÁ   rá  r  r  r  r  rÖ   r}   r	   r~   r  rå   Útypecastr   ri   r  )rJ   r+   rV  r  r  r  rŸ  r  r]  r  r  Úneeds_type_traverseÚmaybe_needs_type_traverseÚstatic_callrE  rl   Úvar_codeÚvar_as_pyobjectrå   r&   r&   r'   rÂ  p  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_clearFrG  r@   rç  r$  zPyObject* tmp;r)  rò  z%inquiry clear = __Pyx_PyType_GetSlot(z, tp_clear, inquiry);zif (clear) clear(o);r±   rö  rI  rñ  r°   z${ __Pyx_call_next_tp_clear(o, %s); }ÚCallNextTpClearr3  rø  ztmp = ((PyObject*)%s);rT  zPy_XDECREF(tmp);zPy_CLEAR(p->%s);zPy_CLEAR(p->%s.obj);rù  z(__PYX_XCLEAR_MEMVIEW(&p->from_slice, 1);r  )r   r+  r:   rû  rÓ  rŸ  rü  rý  r  r   rN  r   Úclear_to_nonerÁ   rá  r  r  r  r  rÖ   r}   r	   r~   rå   r‘  Úput_init_to_py_noner   ri   r  )rJ   r+   rV  r  r  r  rŸ  r  r]  r  r  ÚunusedrR  rE  rl   r‹   r&   r&   r'   rÄ  Ç  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 iFr%  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±   )r  r   r  rÁ   r  )rJ   r+   rV  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);r  r±   úelse {úreturn %s(o, i);zJ  "Subscript deletion not supported by " __Pyx_FMT_TYPENAME, o_type_name);©
rÓ  rŸ  rh  r  r   rN  rÁ   r  Úgenerate_guarded_basetype_callr  ©rJ   r+   rV  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(rS  ú);z f = __Pyx_PyType_TryGetSlot(zif (f)z	return f()Útypeptr_cname_in_module_staterÁ   )rJ   rŸ  ÚsubstructurerÝ  Úfunctyperl  rV  Úbase_tpnamer&   r&   r'   rf  f  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&   )r¤   Ú	from_nameÚto_name©Ú
comp_entryr&   r'   r¦   –  s    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);ró  r?   r@   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);)rh  r  r   r  rÁ   rÓ  rl   r¡   rO   r+   rŸ  r  r:   r   rÑ  ÚTOTAL_ORDERINGr   rW   ÚmaxÚstripÚupperr   r  ÚAssertionErrorr  )rJ   r+   rV  Úclass_scopesÚclsÚextern_parentr»  Ú
cmp_methodÚclass_scoperl   Ú
comp_namesÚordering_sourceÚcmp_typeÚinvert_compÚcomp_opÚinvert_equalsÚeq_funcr&   rs  r'   rÒ  u  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ø   Ú
binaryfuncr@   Úternaryfuncz, extra_argz, PyObject* extra_argz"Unexpected type slot signature: %sc                    s   ˆ   | ¡}|r|jr|jS d S r!   )Úlookupr   r  )Úmethod_namerl   rH   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Ó  r  )r  r£  r  ©rV  Ú	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.Ú	BinopSlotr3  F)r£  T)
r”  Ú	slot_nameÚoverloads_leftÚoverloads_rightÚ	call_leftÚ
call_rightÚ
type_cnameÚ	slot_typer“  Úextra_arg_decl)rg  r   r°   )rû  r—  r:   rÁ   Ú	left_slotrü  Ú	signaturer   rŒ  ÚibinaryfuncÚpowternaryfuncÚipowternaryfuncr   r  Ú
right_slotr   Úpreprocessor_guard_codeÚenter_cfunc_scoper  ÚboolrÓ  r  r³  r‘  r   rð   r  )rJ   r+   rÝ  rV  rW   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+   rh  Úis_externalrŸ  )Únrr   Úextern_returnÚr©Úlookup_here_or_baser+   r&   r'   r¯  U	  s   
zBModuleNode.generate_getattro_function.<locals>.lookup_here_or_baser³  r´  Útp_getattrozPyObject *o, PyObject *nFr%  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)r  r   r  rÁ   r  r  )rJ   r+   rV  Úgetattr_entryÚgetattribute_entryr&   r®  r'   rÉ  N	  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±   rc  zreturn %s(o, n);z(return PyObject_GenericSetAttr(o, n, 0);re  rg  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 *cFr%  zPyObject *r = 0;zif (!i) i = Py_None;zif (!c) c = Py_None;zr = %s(o, i, c);r[  r±   )rh  r  r   r  rÁ   r  r  )rJ   r+   rV  Ú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_  Údescrsetfuncrb  ú6PyErr_SetString(PyExc_NotImplementedError, "__set__");r  r±   rc  rd  z9PyErr_SetString(PyExc_NotImplementedError, "__delete__");re  )rJ   r+   rV  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¸  r#  )Úproperty_entriesr+   rÏ  Úgenerate_property_get_functionÚgenerate_property_set_function)rJ   Úcclass_scoperV  rl   Úproperty_scoper&   r&   r'   rÙ  é	  s   
€ûz&ModuleNode.generate_property_accessorsc                 C   s\   |j }|j tj|j¡|_| d¡}| d¡ | d|j ¡ | d|j	 ¡ | d¡ d S )Nr·  r@   ú9static PyObject *%s(PyObject *o, CYTHON_UNUSED void *x) {úreturn %s(o);r±   )
r+   Úparent_scoper	  r   Úprop_get_prefixr‹   Úgetter_cnamerh  rÁ   r  )rJ   Úproperty_entryrV  rÀ  Ú	get_entryr&   r&   r'   r½  ñ	  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¸  r#  r@   z@static int %s(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {r^  zreturn %s(o, v);r¹  r  r±   rc  rÂ  z6PyErr_SetString(PyExc_NotImplementedError, "__del__");)
r+   rÃ  r	  r   Úprop_set_prefixr‹   Úsetter_cnamerh  rÁ   r  )rJ   rÆ  rV  rÀ  rh  ri  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°   ra  r0  ÚIncludeStructmemberHr+  z#static PyMemberDef %s_members[] = {z#if !CYTHON_USE_TYPE_SLOTSzB{"__weaklistoffset__", T_PYSSIZET, offsetof(%s, %s), READONLY, 0},ú{0, 0, 0, 0, 0}r  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",r@   zsizeof(%s),z0,r  Útp_flagsz	%s_slots,)ri   r+   r   r+  rÖ   r:   Úgenerate_substructure_specÚis_emptyrÁ   Úgenerate_substructurer7  r°  rÍ  rh  rd  r§  r}   r	   r~   r  rå   r   rW   rÔ  Úgenerate_specÚ
class_namerÍ   rh   rê   rü  )rJ   rl   rV  Ú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 )Nr@   r    zDL_EXPORT(PyTypeObject) %s = {zstatic PyTypeObject %s = {zPyVarObject_HEAD_INIT(0, 0)z"%s."%s, /*tp_name*/ra  zsizeof(%s), /*tp_basicsize*/z0, /*tp_itemsize*/r  )ri   r+   r   rÔ  rÖ   r:   ÚsubstructuresrÑ  rÁ   r¡   r  rÓ  rÍ   rh   r7  r°  Úgenerate)rJ   Úmodnamerl   rV  ri   r+   ÚsuiterJ  rÜ  r×  rÝ  r&   r&   r'   rÜ  p
  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Úbindingr@   zstatic PyMethodDef %s[] = {ry  )Úwrapper_code_writerz{0, 0, 0, 0}r  )
Úis_c_class_scopeÚpyfunc_entriesr:   rÁ   rœ  Úmethod_table_cnameÚfused_cfunctionÚis_overridableÚput_pymethoddefÚgetvalue)rJ   r;   rV  rá  râ  rl   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__getterr@   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°   )rh  Úis_variablerû  rå   rÁ   rá  )rJ   r+   rV  Ú	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 )Nr@   z"static struct PyGetSetDef %s[] = {zPyDoc_STR(%s)r  z{%s, %s, %s, %s, 0},rÍ  r  )
r¼  rÁ   Úgetset_table_cnamerw   Ú
is_unicodeÚas_utf8_stringrÍ   r‹   rÅ  rÉ  )rJ   r;   rV  rl   rw   Ú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±  ri   rc  r
  rŠ   r&   r&   r'   r   ×
  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 ú(ú *z2,PyObject *o, PyObject* py_name, const char *name)z,static const char* internal_type_names[] = {z"%s",r  r  z-const char** type_name = internal_type_names;zwhile (*type_name) {z$if (__Pyx_StrEq(name, *type_name)) {zBPyErr_Format(PyExc_TypeError, "Cannot overwrite C type %s", name);rÿ   r±   ztype_name++;zif (0);r   r   éd   z#ifdef _MSC_VERz)if (0);  /* Workaround for MSVC C1061. */r°   z#else if (__Pyx_StrEq(name, "%s")) {rô  zif (!(%s)) %s;zPy_INCREF(o);FrT  ú%s = %s;zGPyErr_Format(PyExc_TypeError, "Cannot convert Python object %s to %s");rc  z3if (PyObject_SetAttr(%s, py_name, o) < 0) goto bad;r  r  r  r@   Ú
ImportStarrú   ))r}   r	   r~   Ústart_initcfuncr   Úimport_star_setÚmodulestatetype_cnameÚmodulestatevalue_cnamerÁ   r‚   rƒ   r„   r†   Únew_error_labelrò  r±  ri   Úis_constrc  r³  r  Útype_test_codeÚ
error_gotorW   Ú
put_decrefrå   r   rO  r   r
  Úfrom_py_call_coder  Ú
label_usedÚerror_labelÚ	put_labelÚput_add_tracebackr
   rh   rB  rC  r  )rJ   r;   rV  r‹   rl   Úold_error_labelÚ
msvc_countÚ	type_testr&   r&   r'   rA  ß
  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rB|  dtj
 ¡ tjD ]\}}|  d| ¡ |  d| ¡ |  d¡ qEd S )Nztypedef struct {r›  z	#ifdef %sr™  r°   )rÁ   Úmodule_dict_cnamer   Úbuiltins_cnameÚcython_runtime_cnamer
  Úempty_bytesÚempty_unicoder   r  r  Úused_types_and_macros)rJ   r;   rV  rœ  Ú	used_namer&   r&   r'   rD  &  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_endr,  r-  z} %s;r@   ÚMultiPhaseInitModuleStater+  ú#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;r  r±   )	rÁ   r   rü  r}   r	   rC  Úpymoduledef_cnamer	  r  )rJ   r;   rT  rÖ   r)  r,  r-  r&   r&   r'   rO  6  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tj
 ¡ |  d¡ |  d¡ |  dtj ¡ |  d¡ |  d	¡ |  d
¡ |  d¡ d S )Nr  z4static CYTHON_SMALL_CODE int %s_clear(PyObject *m) {z2 *clear_module_state = __Pyx_PyModule_GetState(m);z"if (!clear_module_state) return 0;rš  ú#ifdef __Pyx_CyFunction_USEDr°   ú#ifdef __Pyx_FusedFunction_USEDú"#if CYTHON_PEP489_MULTI_PHASE_INITz__Pyx_State_RemoveModule(NULL);©rÁ   r   r  rü  r  r  r  r
  r  r  Úcyfunction_type_cnameÚfusedfunction_type_cnamer(  r&   r&   r'   rE  i  sF   

ÿÿÿÿÿÿ
ÿ

ÿ


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¡ |  dtj
› d¡ |  d	¡ |  d
¡ |  dtj› d¡ |  d	¡ d S )Nr  zSstatic CYTHON_SMALL_CODE int %s_traverse(PyObject *m, visitproc visit, void *arg) {z5 *traverse_module_state = __Pyx_PyModule_GetState(m);z%if (!traverse_module_state) return 0;z Py_VISIT(traverse_module_state->rj  z)__Pyx_VISIT_CONST(traverse_module_state->r  r°   r  r  r(  r&   r&   r'   rF  ˆ  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¡}| |¡ |  |¡ | t d%d¡¡ | t d&d¡¡ | !| jd'¡ | d(¡ | d)¡ | d
¡ | "tj#¡}| d*|| $|| j¡f ¡ | "tj%¡}| d+|| $|| j¡f ¡ | "tj&¡}| d,|| $|| j¡f ¡ | d-¡ | !| jd.tj› d/¡ | d0¡ | !| jd1¡ d2}| 'd3¡ |D ]}| 'd4|› d5¡ qï| d¡ | !| jd6|j› d/¡ | d
¡ |D ]}| d7| ¡ | !| jd8||jf ¡ | d
¡ q| d9¡ |jd: rB| !| jd;¡ | d|  (¡  ¡ | !| jd<|j| )t	d=ƒ¡| )t	d>ƒ¡f ¡ | d¡ |  *||¡ t+j,r‚| d?¡ | !| jd@tj› d/¡ | dA¡ | !| jdBtj› d/¡ | !| jdCtj› d/¡ | dD¡ |dEƒ}|  -||¡ W d   ƒ n	1 sºw   Y  |dFƒ}|  .||¡ W d   ƒ n	1 sÕw   Y  |dGƒ}|  /||¡ W d   ƒ n	1 sðw   Y  |dHƒ}|  0||¡ W d   ƒ n	1 sw   Y  |dIƒ}|D ]
}|  1|||¡ qW d   ƒ n	1 s-w   Y  |dJƒ}|D ]
}|  2|||¡ q9W d   ƒ n	1 sOw   Y  |dKƒ}|D ]}|  3|¡ |  4|||¡ q[W d   ƒ n	1 svw   Y  | dL¡ | 5d ¡ |
s‹|r|j6j7s’J ‚| 8|| j¡ dM|j6_9| 5d ¡ | j: ;|¡ | 5d ¡ |
s³|rÊdN|j6_9|j6j7s¾J ‚|j<dO| jdP | =¡  | ¡  | dQ¡ |  >||¡ | ¡  t+j?rö|j t dRd¡¡ | dS| @| j¡ ¡ | A|jB¡ | C|jD¡ |j6 E¡ D ]\}}| F||¡ q|
s|r#| G¡  | H| j¡ | d|j ¡ | dT| "|jI¡› dU¡ | Jt	dV|jK ƒ¡ |j tLjM¡ | d¡ | dW¡ |jN|jtOdNdMdX | d!¡ |jP|jtOdNdY | dZ¡ | d[¡ | d\¡ | d]tj ¡ | d^¡ | d¡ | d
¡ | d_¡ | d`|jK ¡ dd…  ¡ | d¡ | C|jB¡ | Q¡  | d¡ | da|j ¡ | d!¡ | db|j ¡ | d
¡ | d¡ |	 R|j6¡ | S¡  d S )cNr@   ÚPyModInitFuncTyper+  ÚPyInit_z__Pyx_PyMODINIT_FUNC %s(void)r­   z%s CYTHON_SMALL_CODE; /*proto*/zc#if !defined(CYTHON_NO_PYINIT_EXPORT) && (defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS))z;__Pyx_PyMODINIT_FUNC PyInit___init__(void) { return %s(); }r°   zHvoid %s(void) {} /* workaround for https://bugs.python.org/issue39432 */r  rò  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;rö  z = NULL;ÚprofileÚ	linetraceÚProfilez	Profile.crL  zif (%s == %s) return 0;zrPyErr_SetString(PyExc_RuntimeError, "Module '%s' has already been imported. Re-initialisation is not supported.");r   r.  r  rÛ  z if (%s) return __Pyx_NewRef(%s);z /*--- Module creation code ---*/ÚImportRefnannyAPIÚGetRuntimeVersionÚCheckBinaryVersionzs__Pyx_check_binary_version(__PYX_LIMITED_VERSION_HEX, __Pyx_get_runtime_version(), CYTHON_COMPILING_IN_LIMITED_API)z'#ifdef __Pxy_PyFrame_Initialize_Offsetsz#__Pxy_PyFrame_Initialize_Offsets();z%s = PyTuple_New(0); %sz)%s = PyBytes_FromStringAndSize("", 0); %sz+%s = PyUnicode_FromStringAndSize("", 0); %sz4/*--- Initialize various global constants etc. ---*/z__Pyx_InitConstants(ú)zstringtab_initialized = 1;z__Pyx_InitGlobals())Ú
CyFunctionÚFusedFunctionÚ	CoroutineÚ	GeneratorÚAsyncGenz#if 0z || defined(__Pyx_z_USED)z __pyx_CommonTypesMetaclass_init(z#ifdef __Pyx_%s_USEDz__pyx_%s_init(%s)z)/*--- Library function declarations ---*/Ú
np_pythranz_import_array()zPyObject_SetAttr(%s, %s, %s)Ú__name__Ú__main__z/*--- Builtin init code ---*/z__Pyx_InitCachedBuiltins(z/*--- Constants init code ---*/z__Pyx_InitCachedConstants(z__Pyx_CreateCodeObjects(z*/*--- Global type/function init code ---*/zGlobal init codezVariable export codezFunction export codezType init codezType import codezVariable import codezFunction import codez/*--- Execution code ---*/TFÚPy_None)rW   z/*--- Wrapped vars code ---*/ÚRegisterModuleCleanupzif (__Pyx_RegisterCleanup()) %szif (z && stringtab_initialized) {zinit %srö  ©rU  r4  rT  zif (pystate_addmodule_run) {zPyObject *tp, *value, *tb;zPyErr_Fetch(&tp, &value, &tb);zPyState_RemoveModule(&%s);zPyErr_Restore(tp, value, tb);z} else if (!PyErr_Occurred()) {z.PyErr_SetString(PyExc_ImportError, "init %s");zreturn (%s != NULL) ? 0 : -1;z
return %s;)TÚmod_init_subfunctionrW   r+   Úgenerate_pymoduledef_structr¦  rÁ   rB  r	   rC  r
   rj   rÌ   Ú
is_packageÚwrong_punycode_module_namer   r  Úmodule_init_func_cnameÚpymodinit_module_argrü  rý  rœ  rÖ   r:   Úuse_fast_gil_utility_coder}   r~   Úput_declare_refcount_contextr  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_nullr  r  rñ   r:  Úintern_identifierÚgenerate_module_import_setupr   Úcache_builtinsÚgenerate_global_init_codeÚgenerate_c_variable_export_codeÚgenerate_c_function_export_codeÚgenerate_type_init_codeÚ$generate_type_import_code_for_moduleÚ*generate_c_variable_import_code_for_modulerƒ  Ú*generate_c_function_import_code_for_moduler>  Ú	funcstateÚ	gil_ownedÚput_trace_startÚ	can_tracerF   Úgenerate_execution_codeÚput_trace_returnÚput_trace_exitÚgenerate_wrapped_entries_codeÚgenerate_cleanup_coder  Úput_gotoÚreturn_labelr  r  Úall_managed_tempsÚput_xdecrefÚput_trace_exception_propagatingÚput_trace_unwindr  r  ré   r   Útraceback_utility_coder  r   r  Úput_finish_refcount_contextÚput_temp_declarationsr  )rJ   rþ   r;   rV  ÚsubfunctionÚmodinit_func_nameÚheader3r7  Úmod_create_funcÚtempdecl_coder"  r#  Úrefnanny_import_coder
  r  r  Úshared_typesrÔ  Ú
inner_coder™   rå   ri   r&   r&   r'   rG  š  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                       s2   e Z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)	rk  Úlowerr}  r   ÚmatchÚ
cfunc_nameÚdescriptionrc  Ú	call_code)rJ   Ú	code_typerå   r&   r&   r'   Ú__init__¸  s   

zDModuleNode.mod_init_subfunction.<locals>.ModInitSubfunction.__init__c                    sz   ˆ  ¡ | _ˆ }|jd| j› dtj› dtj› dˆdd | dtj› d¡ |  ¡ | _| 	t
| jƒ¡ | d	| j ¡ |S )
Nrô  rõ  rö  r(  T)ÚrefnannyzCYTHON_UNUSED_VAR(rj  z/*--- %s ---*/)rœ  rk  rú  ri  r   rü  rý  rÁ   rc  r?  r
   rj  r  )Úfunction_codeÚ	orig_coder+   r&   r'   Ú	__enter__À  s   
þ
zEModuleNode.mod_init_subfunction.<locals>.ModInitSubfunction.__enter__c                    sÚ   ˆ }|  ¡  | d¡ | j |j¡ d | _| |j¡}|r<| |j¡ |j ¡ D ]
\}}| 	||¡ q(|  ¡  | d¡ | d¡ | 
¡  |rY| j | j d| jtjf ˆ¡¡ n| j d| j› dtj› d¡ d | _d S )Nr  r  r±   z%s(%s)z(void)rõ  rj  )r]  rÁ   rc  r^  rM  r  r  r  rX  rY  r  rk  Úerror_goto_if_negri  r   rý  )rJ   rl  rV  Úneeds_error_handlingrå   ri   )ro  rW   r&   r'   Ú__exit__Í  s4   


ÿÿÿÿ
zDModuleNode.mod_init_subfunction.<locals>.ModInitSubfunction.__exit__N)r/  Ú
__module__Ú__qualname__rm  rq  rt  r&   ©ro  rp  rW   r+   r&   r'   ÚModInitSubfunction·  s    rx  )rœ  )rJ   rW   r+   rp  rx  r&   rw  r'   r4  ¬  s   	1z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;ÚSetPackagePathFromImportLibrú   z%__Pyx_SetPackagePathFromImportLib(%s)z	.__init__rò  z0PyObject *modules = PyImport_GetModuleDict(); %srT  z)if (!PyDict_GetItemString(modules, %s)) {z%PyDict_SetItemString(modules, %s, %s))r:   rW   r†  rÁ   r  Úget_py_string_constr
   r   r  r6  rM  Úallocate_tempr   r   r#   rj  rB  Ú
put_gotrefr  Úrelease_temprÖ   r}   r	   rC  rr  rh   Úendswithrk  rÍ   )rJ   r;   rV  Úmodule_pathÚtempÚfq_module_nameÚfq_module_name_cstringr&   r&   r'   rD  ê  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 ]g}|j}|j#sï|j$rðqä|j%j& 'dd¡rK|j%}	| |	 (tj)¡¡}
| |	 (tj*¡¡}| d¡ | d| ¡ | d|
|f ¡ | d¡ | d¡ | d¡ | d¡ | d ¡ | d¡ | d!¡ | d¡ qät j+d ur\|j tj,tddd" tj-tj.fD ]}| |¡}|j |tddd" qb|j | |j/¡tddd" d S )#Nz.static void %s(CYTHON_UNUSED PyObject *self) {rö  ræ  r  zif (!__Pyx_State_FindModule(&z
)) return;r°   z! = __Pyx_PyModule_GetState(self);r   z/*--- Global cleanup code ---*/r  TF)r4  rU  z__Pyx_CleanupGlobals(rj  é   z$/*--- Type import cleanup code ---*/r  rÚ  z /*--- Builtin cleanup code ---*/z/*--- Intern cleanup code ---*/rè  r   rê  zwhile (%s > 0) {z"PyObject* o = (PyObject*)%s[--%s];r7  r8  rÛ  r9  r:  r±   r3  )0r   rU  rÁ   r   Úcleanup_cnamer¦  rü  rý  r  r„  r³   r£  r¡   ri   rc  r±  rò  rå   r‘  r@  r1  r?  r‚   Útypes_importedr¼  r½  rA  r  rE  Úcached_builtinsr   r   r  r
  rg   rª  rŸ  r+   r:   r   rû  r  r  r  r  r  r  r  )rJ   r;   rV  Úrev_entriesrl   Úentry_cnamerÔ  r  Úcclass_typer+   r  r  rå   r&   r&   r'   rH  %  s´   ÿ






ý€

ý

ý
ý

ÿ
ÿ
ÿ







€
ÿ


þz'ModuleNode.generate_module_cleanup_funcc                 C   sL   |   ¡ }tjdkrd}ntj}t dd¡}|j |j|j|tj|d¡ d S )NÚmainÚwmainÚMainFunctionzEmbed.c)rj   rW  r1  Úwmain_method)	r:  r   rI  r	   r~   rÖ   r}   Ú
specializerj   )rJ   r;   rV  rW  r  r1  r&   r&   r'   rJ  Ž  s   
üÿzModuleNode.generate_main_methodc                 C   s:   |  ¡ r	d| }nd| d¡ dd¡ d¡ }d||f S )NrÝ  ÚU_Úpunycodeó   -ó   _rí  z%s%s©ÚisasciiÚencoderê   Údecode)rJ   rë   r‹   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”  rí  r•  )rJ   r‹   r&   r&   r'   r7  ¤  s    z%ModuleNode.wrong_punycode_module_namec                 C   s   |   ||j¡S r!   )rè   rj   )rJ   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_cnamer   r&   r&   r'   r8  ²  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¡ |j
d rYdn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 ¡ | d0¡ | d1¡ | d/| ¡ | d¡ | d¡ | d¡ | d2¡ | d¡ d S )3Nú%sr  z(freefunc)%sÚNULLr@   r  z@static PyObject* %s(PyObject *spec, PyModuleDef *def); /*proto*/z*static int %s(PyObject* module); /*proto*/z static PyModuleDef_Slot %s[] = {z{Py_mod_create, (void*)%s},z{Py_mod_exec, (void*)%s},ú-#if CYTHON_COMPILING_IN_CPYTHON_FREETHREADINGÚfreethreading_compatibleÚPy_MOD_GIL_NOT_USEDÚPy_MOD_GIL_USEDz{Py_mod_gil, %s},r°   z;#if PY_VERSION_HEX >= 0x030C0000 && CYTHON_USE_MODULE_STATEÚ*Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTEDÚ&Py_MOD_MULTIPLE_INTERPRETERS_SUPPORTEDÚ$Py_MOD_PER_INTERPRETER_GIL_SUPPORTED)ÚnoÚ
shared_gilÚown_gilÚsubinterpreters_compatiblez#{Py_mod_multiple_interpreters, %s},z	{0, NULL}r  z*#else /* CYTHON_PEP489_MULTI_PHASE_INIT */zT#error "Unicode module names are only supported with multi-phase init as per PEP489"r  r  zstruct PyModuleDef %s =rÛ  zstatic struct PyModuleDef %s =rò  z  PyModuleDef_HEAD_INIT,z  %s,z  %s, /* m_doc */r  z	  sizeof(z), /* m_size */z9  (CYTHON_PEP489_MULTI_PHASE_INIT) ? 0 : -1, /* m_size */z  %s /* m_methods */,z  %s, /* m_slots */z  NULL, /* m_reload */z  %s_traverse, /* m_traverse */z  %s_clear, /* m_clear */z  %s /* m_free */z  NULL, /* m_traverse */z  NULL, /* m_clear */r  )rw   Úget_string_constr   rU  r   r†  rÁ   r8  Úpymodule_create_func_cnameÚpymoduledef_slots_cnamer:   r   rj   r–  r  rÍ   rü  rå  r  )rJ   r;   rV  rw   Úcleanup_funcÚexec_func_cnameÚ
gil_optionÚsubinterp_optionr&   r&   r'   r5  ¶  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›  r  F©Ú
manage_refr  rø  rT  rÛ  z%s = PyModule_Create(&%s); %sr°   r  rò  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(rS  rj  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)rw   r¨  rM  r}  r   rÁ   r   r9  Ú
put_increfr  rB  rW   rj   rÍ   rr  r  r  r:   rý  r	  rA  r  r  r  r  r   r  r  )	rJ   r;   rV  rw   Úmodule_tempr­  Ú
dict_cnamer  Úruntime_cnamer&   r&   r'   r<    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±  ri   Úglobal_init_coderå  r  )rJ   r;   rV  rl   r&   r&   r'   rF  U  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 objectrò  zPyObject* wrapped = %s(%s);Úwrappedz6if (PyObject_SetAttrString(%s, "%s", wrapped) < 0) %s;r±   )r‚   rƒ   r„   r…   r†   r+   ri   r	  r   rW   rÁ   Úto_py_functionrå   rB  r  r  )rJ   r;   rV  r‹   rl   r&   r&   r'   rT  `  s.   ÿ

þ
ýÿ
€ðz(ModuleNode.generate_wrapped_entries_codec              
   C   s”   g }|j D ]}|js|jstjr|jdks| |¡ q|rF| t 	dd¡¡ |D ]}|j
 ¡ }| |j¡}| d||j|| | j¡f ¡ q(d S d S )Nr  ÚVoidPtrExportrú   z6if (__Pyx_ExportVoidPtr(%s, (void *)&%s, "%s") < 0) %s)r³   r¢   r˜   r   rª  r¡   rO   r}   r	   r~   ri   r  rC  r‹   rÁ   rå   r  rW   )rJ   r;   rV  rƒ   rl   r   r‹   r&   r&   r'   rG  s  s*   
ÿþ

€


þûz*ModuleNode.generate_c_variable_export_codec              
   C   sŽ   g }|j D ]}|js|jstjr|jdks| |¡ q|rC| t 	dd¡¡ |D ]}|j
 ¡ }| d|j ¡ |j|| | j¡f ¡ q(d S d S )Nr  ÚFunctionExportrú   z>if (__Pyx_ExportFunction(%s, (void (*)(void))%s, "%s") < 0) %s)r—   r¢   r˜   r   rª  r¡   rO   r}   r	   r~   ri   r  rÁ   r‹   rÍ   rå   r  rW   )rJ   r;   rV  rƒ   rl   r   r&   r&   r'   rH  „  s0   
ÿþ

€
ÿ


üù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!   )r  rg   r˜   Úgenerate_type_import_coderi   rW   )rJ   r™   r;   rV  r  rl   r&   r&   r'   rJ  ™  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—   ri   r/  Ú"get_all_specialized_function_types)rJ   Úpxd_envrl   r&   r&   r'   rƒ  ¢  s
   
€ýz!ModuleNode.specialize_fused_typesc           	      C   sì   g }|j D ]
}|jr| |¡ q|rt| t dd¡¡ |jjtdd}| 	d||j
|| | j¡f ¡ | |t¡ |D ]*}||u rE|j}n| tj|j¡}|j ¡ }| 	dtj||j||| | j¡f ¡ q;| |t¡ |j |¡ d S d S )Nrù   rú   Tr¯  ú-%s = PyImport_ImportModule("%s"); if (!%s) %sz@if (__Pyx_ImportVoidPtr_%s(%s, "%s", (void **)&%s, "%s") < 0) %s)r³   r˜   rO   r}   r	   r~   rM  r}  r   rÁ   ré   r  rW   r~  rå   r	  r   r§  r‹   ri   r  r  r  r  )	rJ   r™   r;   rV  rƒ   rl   r‚  rå   r   r&   r&   r'   rK  ®  sD   

€
ÿ
üÿ


ýÿéz5ModuleNode.generate_c_variable_import_code_for_modulec                 C   sÔ   g }|j D ]}|jr|jr| |¡ q|rh| t dd¡¡ |jjt	dd}| 
d||j|| | j¡f ¡ | |t	¡ |D ]}| 
dtj||j ¡ |j|j ¡ | | j¡f ¡ q>| |t	¡ |j |¡ d S d S )Nrû   rú   Tr¯  r¿  zGif (__Pyx_ImportFunction_%s(%s, %s, (void (**)(void))&%s, "%s") < 0) %s)r—   r˜   r±  rO   r}   r	   r~   rM  r}  r   rÁ   ré   r  rW   r~  r   r  r‹   rÍ   rå   ri   r  r  r  )rJ   r™   r;   rV  rƒ   rl   r‚  r&   r&   r'   rL  Í  sB   

€
ÿ
üÿ
úÿë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¶  )r  rg   r¡   Úutility_code_definitionr¼  ri   rW   Úgenerate_base_type_import_codeÚ!generate_exttype_vtable_init_codeÚ
early_initÚgenerate_type_ready_code)rJ   r;   rV  r  rl   r&   r&   r'   rI  ê  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!   )	ri   rŸ  rj   ré   r  Úis_cython_builtin_typerÀ  r¼  rW   )rJ   r;   rl   rV  r  rŸ  r&   r&   r'   rÁ  ÷  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ü   rú   )Ú	error_posÚ	GetVTablez(%s = (struct %s*)__Pyx_GetVtable(%s); %s)r‡  r‹   r   Úctypedef_builtins_maprÖ   r}   r	   r~   r  r†  rÁ   r¬  rA  r  rB  r–  )rJ   r;   ri   rW   rV  r  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_rõ  rS  ry  Ú__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Ý  rj  z if (!z) )r7  r°  rj   r‹   r   rÈ  rÁ   r‘  r  Úrenamed_py2_builtins_mapÚbasicsize_builtins_mapr  r•  rA  r   r  rÍ   Ú
check_sizerª  Úis_subclassedÚRuntimeErrorrñ   r  )rJ   ri   rV  r  r   rÆ  r  Úsizeof_objstructr×  rj   Ú	type_nameÚ
is_builtinr™   r  Úalignment_funcrÒ  r&   r&   r'   r    sf   
ÿ





ÿÿÿÿ



ÿz$ModuleNode.generate_type_import_callc                 C   s   t j ||¡ d S r!   )r   ÚCClassDefNoderÄ  )rJ   rl   rV  r&   r&   r'   rÄ  P  rî   z#ModuleNode.generate_type_ready_codec                 C   s   | j  dd¡}|  tj|¡S ræ   )rh   rê   rè   r   rW  )rJ   rh   r&   r&   r'   r:  S  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'   r¦   g  s    þÿz@ModuleNode.generate_exttype_vtable_init_code.<locals>.<listcomp>z%s.%s = %s%s;)ri   rÞ  rÁ   r†  rŸ  r   r„  r+   r—   Úvtable_typeÚsignature_cast_stringrå   r  )rJ   rl   rV  ri   Úc_method_entriesÚ
meth_entryrÚ  Úcastr&   r&   r'   rÂ  W  sD   þÿýÿÿüÿíz,ModuleNode.generate_exttype_vtable_init_coder  )F)TT)NNF)vr/  ru  rv  Úchild_attrsr:   rV   rX   ÚpropertyrK   re   rm   rn   r{   rŒ   r–   rš   rŸ   r“   rË   r¾   r”   rÉ   rÊ   r’   rS  rR  r   rª  r»  r‘   rÍ  rL  ÚstaticmethodrÖ  r7  rÆ   rÈ   rÄ   rK  r)  rÂ   r8  r1  rB  r.  rL  r3  r`  r4  r2  rÇ  rÈ  rÉ  rÊ  rÄ  rÆ  rÐ  rÑ  rÒ  r=  r?  r½  rá  r¾  r¿  rÀ  r>  rÂ  rÄ  rÆ  rÇ  rf  rÒ  rØ  rÉ  rÊ  rË  rÌ  rÙ  r½  r¾  rÛ  rÜ  r@  rÐ  rÚ  r   rA  rD  rO  rE  rF  rG  r4  rD  rH  rJ  rè   r7  rÌ   r8  r5  r<  rF  rT  rG  rH  rJ  rƒ  rK  rL  rI  rÁ  r¼  r  rÄ  r:  rÂ  r&   r&   r&   r'   rE   o   sô    

+

_c]& ,
 
"c#,3		< & &WN8 I.'+(G G3  >;iNQ	
=rE   c                   @   s2   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ ZdS )r  z°
    Helper to generate module import while importing external types.
    This is used to avoid excessive re-imports of external modules when multiple types are looked up.
    Nc                 C   s:   || _ i | _|r| ¡ D ]\}}|| jd| < qg | _d S )Nz"%s")rV  Úimportedr„   Útemps)rJ   rV  rþ   r‹   rå   r&   r&   r'   rm  {  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)	râ  rV  rM  r}  r   rã  rO   rÁ   r~  )rJ   Úmodule_name_stringr   rV  r‚  r&   r&   r'   r•  ƒ  s   

ÿ
z%ModuleImportGenerator.imported_modulec                 C   s   | S r!   r&   rI   r&   r&   r'   rq    r*  zModuleImportGenerator.__enter__c                 G   s.   | j }| jD ]}| |t¡ |j |¡ qd S r!   )rV  rã  r  r   rM  r  )rJ   ÚexcrV  r‚  r&   r&   r'   rt  “  s
   
þzModuleImportGenerator.__exit__r!   )r/  ru  rv  Ú__doc__rm  r•  rq  rt  r&   r&   r&   r'   r  v  s    
r  c           
      C   sÚ   | j o| j}| j r| js| jsi|s| js| jdks|rk| 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 ¡ 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ã   ri   r   rä   rå   rˆ  r‰  rÁ   )
rl   r;   rV  rÌ  Úfrom_cy_utilityr©  r¡  ri   rJ  r‹  r&   r&   r'   r«  š  sD   ÿÿ



ÿýèr«  ÚRefnannyr+  zj
#if defined(__GNUC__)
#define __Pyx_PACKED __attribute__((__packed__))
#else
#define __Pyx_PACKED
#endif
r@   Úutility_code_proto_before_types)ró   rô   Úproto_block)8ÚcythonÚdeclareÚobjectÚcollectionsr   rù  r¼  r   r#  r   r)   r   r   r@   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/   r2   r=   rz  ÚNodeÚ	BlockNoderE   r  r«  rC  r9  rQ  r&   r&   r&   r'   Ú<module>   s¦   þå                              %$%
ú