
    Ng                    4   d dl mZ d dlZ ej        eeeeeeeeee
  
         d dlmZ d dlZd dlZd dl	Z	d dl
Z
d dlZddl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 ddlmZ ddlmZmZmZm Z m!Z! ddlm"Z"m#Z#m$Z$ ddl%m&Z&m'Z' ddlm(Z( d Z)d Z*d Z+d Z,d Z-ddddd dddddd dd!Z. G d" d#ej/        ej0                  Z1 G d$ d%e          Z2d& Z3 e"j4        d'd(          Z5 e"d)d*d+,          Z6dS )-    )absolute_importN)
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)r
      )open_new_filereplace_suffixdecode_filenamebuild_hex_versionis_cython_generated_file)r   IncludeCodeTempitaUtilityCode)r   encoded_string_or_bytes_literal)has_np_pythranc                 @    t          | |          }t          |          S N)r   as_encoded_filename)pathnewsufnewpaths      V/var/www/html/ai-engine/env/lib/python3.11/site-packages/Cython/Compiler/ModuleNode.pyreplace_suffix_encodedr(   &   s    T6**Gw'''    c                 D    t          | t          j                              S r"   )r   sysgetfilesystemencoding)r$   s    r'   r#   r#   +   s     +41J1L1LMMMr)   c                 8    | j                                          | S r"   )scopecheck_c_classes_pxdmodule_nodes    r'   check_c_declarations_pxdr2   1   s    ))+++r)   c                 j    | j                                          | j                                          | S r"   )r.   check_c_classescheck_c_functionsr0   s    r'   check_c_declarationsr6   6   s2    %%''''')))r)   c                     t           j        s|j        rd}n|j        }t          |d          rt	          d           t          j        || j        d         |j                  S )NFemit_code_commentszeWarning: option emit_code_comments is deprecated. Instead, use compiler directive emit_code_comments.)emit_linenumsr8   c_line_in_traceback)	r   annotater9   hasattrprintr   CCodeConfig
directivesr:   )envoptionsr9   s      r'   generate_c_code_configrB   <   s     .7+ .-w,-- E D 	E 	E 	E #>*>?#79 9 9 9r)   )T&&T)F||F)T N)TrD   F)FrC   T))__lt____gt__)rF   __le__)rF   __ge__)rH   rI   )rH   rF   )rH   rG   )rG   rF   )rG   rI   )rG   rH   )rI   rH   )rI   rG   )rI   rF   c                      e Zd ZdgZdZdZdZdqdZd Zd Z	d Z
d Zd	 Zdqd
Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zed             Zd Zd Z d Z!drdZ"d  Z#d! Z$d" Z%d# Z&d$ Z'd% Z(d& Z)d' Z*d( Z+d) Z,d* Z-d+ Z.d, Z/d- Z0d. Z1d/ Z2d0 Z3d1 Z4d2 Z5d3 Z6d4 Z7d5 Z8d6 Z9d7 Z:d8 Z;d9 Z<d: Z=d; Z>d< Z?d= Z@d> ZAd? ZBd@ ZCdA ZDdB ZEdC ZFdD ZGdE ZHdF ZIdG ZJdH ZKdI ZLdJ ZMdK ZNdL ZOdM ZPdN ZQdO ZRdP ZSdQ ZTdR ZUdS ZVdT ZWdU ZXdV ZYdW ZZdX Z[dY Z\dZ Z]d[ Z^d\ Z_d] Z`d^ Zad_ Zbd` Zcda Zddb Zedc Zfdd Zgde Zhdf Zidg Zjdh Zkdi Zldj Zmdk Zndl ZodsdmZpdn Zqdo Zrdp ZsdS )t
ModuleNodebodyNFc                 P   t          | j        t          j                  sJ |dv sJ | j        t          j        | j        j        g           | _        t          j        | j        j        g           | _        | j        j                            d| j                   | j        j                            d| j                   |j	        | j
        j	        k    r!t          j        |j        ||j	                  }|dk    r| j        n| j        }t          |t          j                  r |j                            |j                   n|j                            |           | j
        j                            |j                   |j                                        D ]}| j
                            |           d } || j
        j        |j                   |rK|j        D ]'}| j        |j        _        d|j        j
        j	        d<   (| j
                            |           d S d S )	N)pxdutility)statsr   )rL   r?   rN   c                 B    |D ]}|| vr|                      |           d S r"   )append)L1L2xs      r'   extend_if_not_inz-ModuleNode.merge_in.<locals>.extend_if_not_in   s4     ! !B;;IIaLLL! !r)   Tinternal)
isinstancerL   r   StatListNode	pxd_statsposutility_code_statsrP   insertr?   r.   CompilerDirectivesNodeextendrR   utility_code_list
c_includesvaluesprocess_includeincluded_filesc_class_entriesfull_module_nametypemodule_namemerge_in)	selftreer.   stagemerge_scopetarget_statsincrV   entrys	            r'   ri   zModuleNode.merge_in   s    $)U%788888*****>!"/	RHHHDN&+&8b&Q&Q&QD#IO""1dn555IO""1d&=>>>tz444 /tPUP`aaaD).%t~~T=TdE.// 	,%%dj1111%%d+++
$++E,CDDD#**,, 	, 	,CJ&&s++++	! 	! 	!
 	2E4HIII 	'. ? ?)-)>
&:>
 +J77J&&&&&	' 	'r)   c                 R    t          j        | j        | j        | j                  }|S )N)r?   rL   )r   r^   r[   r?   rL   )rj   rL   s     r'   with_compiler_directivesz#ModuleNode.with_compiler_directives   s(     +DHW[W`aaar)   c                    t          |          rt          j        |           | j        r| j        d         |_        t
          j        sd x|_        | _        nt
          j        rpt          dt          j        | j                  z            |_        | j        :t          |j        dz   | j        z             |_        | j        j        |j        _        n| j        |_        | j        |_        | j                            |           d S )Nold_style_globalszFile: %s (starting at line %s)
)r    r   include_pythran_genericr?   rt   r   
docstringsdocembed_pos_in_docstringr   r   relative_positionr[   encodingrL   analyse_declarationsrj   r@   s     r'   r|   zModuleNode.analyse_declarations   s    # 	1+C000? 	I$(O4G$HC!! 	!%%CGdhh+ 	#$EH_`d`hHiHi$ijjCGx#'%$((BCC#'8#4 hCG	&&s+++++r)   c                 6   | j         }|j        r|                     |           t          |j                                                  D ]N\  }}|j        rB|j         |u r9|j        r2|j        j	        s|j        j
        r|j                            |           Od S r"   )r.   has_import_star*create_import_star_conversion_utility_codesortedentriesitemscreate_wrapperis_typerg   is_enumis_cpp_enumcreate_type_wrapperrj   r@   namerp   s       r'   prepare_utility_codezModuleNode.prepare_utility_code   s     j 	A;;C@@@!#+"3"3"5"566 	4 	4KD%$ 4);); *<+0:+= *<AFAW *<
..s333	4 	4r)   c                 0   | j         }t          j        |_        g | _        |                     || j        i            |                     |           |                     |||           |                     |||           | 	                    |||           d S r"   )
r.   r   c_void_typereturn_typereferenced_modulesfind_referenced_modulessort_cdef_classesgenerate_c_codegenerate_h_codegenerate_api_code)rj   rA   resultr@   s       r'   process_implementationz!ModuleNode.process_implementation   s    j$0"$$$S$*A2FFFs###S'6222S'6222sGV44444r)   c                 D    | j         D ]}|j        D ]}|j        r  dS dS )Nr   r   )r   cfunc_entriesdefined_in_pxd)rj   modulerp   s      r'   has_imported_c_functionsz#ModuleNode.has_imported_c_functions   sK    - 	 	F-  ' 111 qr)   c                     t          ||d          s5t          | j        dt          j                            |          z            d S )NT)allow_failedif_not_foundzVThe output file already exists and does not look like it was generated by Cython: "%s")r   r   r[   osr$   basename)rj   r$   r   s      r'   assure_safe_targetzModuleNode.assure_safe_target   sV    '<VZ[[[ 	2r'**40012 2 2	2 	2r)   c           	         d/d} ||j         d          } ||j                  } ||j                  } ||j                  }|s|s|s|rt	          |j        d          |_        |                     |j                   t          j	                    }	t          ||          }
t          j        |	| |
          }|                                 |j        d         }|j        d         }|j        d         }|j        r4t	          |j        d	          |_        t          j        |j                  }nd }|                                 |                     t&          j        |          }|                    |           |                    d
           |                    d           |                     ||           |j        r|                     |g |           |                    d
           |                     t&          j        |          }|                    d|z             |                    d
           |                     ||                                           |                    d
           |                     |           |rR|                    d
           |D ]:}|                     |j        |           |r|                      |j        |           ;|r1|                    d
           |D ]}| !                    |||           |r1|                    d
           |D ]}| !                    |||           |                    d
           |                    d|z             |                    d
           |                    d           |                    d           |                    d
           |                    d           |j"        #                                r|j"        }nD|j"        $                    dd          %                    d          }|                    d           |                    d|z             |                    d           | &                    d|          }tO          d|d|d|d          }|                    d|(                    d          z             |                    d|z             |                    d
           |                    d            |                    d!           |                    d"|)                                z             |                    d#           |                    d$|)                                z             |                    d%           |                    d&|)                                z             |                    d'           |                    d(|z             |                    d)           |                    d*           |                    d+|d,|d-|d.           |                    d'           |                    d'           |                    d
           |                    d|z             tU          |j                  5 }|	+                    |           d d d            d S # 1 swxY w Y   d S d S )0Nr   c                 $    fd| D             S )Nc                 N    g | ]!}|j         d k    sr|j        s	|j        |"S )public)
visibilityapir   ).0rp   r   rN   s     r'   
<listcomp>zAModuleNode.generate_h_code.<locals>.h_entries.<locals>.<listcomp>   sU     9 9 9e)X55 6!& 6 6!&!5 6 555r)    )r   r   rN   s    ``r'   	h_entriesz-ModuleNode.generate_h_code.<locals>.h_entries   s3    9 9 9 9 9w 9 9 9 9r)   r   )r   z.hh_codetype_declarationsendz.pxirE   #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. */#if PY_MAJOR_VERSION < 3asciiignoreerrorszutf-8<#error "Unicode module names are not supported in Python 2";zPyMODINIT_FUNC init%s(void);#elsePyInitzUse PyImport_AppendInittab("z", z) instead of calling z
 directly.z!/* WARNING: %s from Python 3.5 */.zPyMODINIT_FUNC %s(void);z#if PY_VERSION_HEX >= 0x03050000 && (defined(__GNUC__) || defined(__clang__) || defined(_MSC_VER) || (defined(__cplusplus) && __cplusplus >= 201402L))z2#if defined(__cplusplus) && __cplusplus >= 201402Lz[[deprecated(%s)]] inlinez-#elif defined(__GNUC__) || defined(__clang__)z;__attribute__ ((__deprecated__(%s), __unused__)) __inline__z#elif defined(_MSC_VER)z#__declspec(deprecated(%s)) __inline#endifz>static PyObject* __PYX_WARN_IF_%s_INIT_CALLED(PyObject* res) {zreturn res;}#define z() __PYX_WARN_IF_z_INIT_CALLED(z()))r   r   ),type_entriesvar_entriesr   re   r(   c_fileh_filer   r   CCodeWriterrB   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_coderg   generate_cclass_include_codegenerate_public_declarationrh   isasciiencodedecodemod_init_func_cnamer   rstripas_c_string_literalr   copyto)rj   r@   rA   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_guardrp   py2_mod_namepy3_mod_func_namewarning_stringfs                          r'   r   zModuleNode.generate_h_code   s   	9 	9 	9 	9
 )C,!4443?++)C-..%Ic&9:: [	(f [	( [	(+< [	(26=$GGFM##FM222 ,..M23@@M*=$NNK..000&,X6L%+,?@K$*51J#  6v}f M M-fm<<))+++mmF$93??G$$W---r"""4555**7LAAA. >&&sB===r"""f&=sCCI|i7888r"""33L#**,,OOOr""")),777  N!!"%%%. N NE44UZMMM N99%*fMMM Q!!"%%%$ Q QE44UKPPPP Q!!"%%%# Q QE44UKPPPPb!!!09<===b!!!pqqqklllb!!!8999&&(( b""55gh5OOVVW^__!!"`aaa<|KLLLg&&& $ 8 83 G G*]///1B1B1B,D E ENANDYDYZ]D^D^^___8;LLMMMb!!! G H H H RSSS9N<^<^<`<``aaaMNNN[22446 7 7 77888C22446 7 7 7h'''^arrsssm,,,c"""!!!#4#4#46G6G6GI J J Jh'''h'''R   /'9:::v}-- ($$Q'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (u[	( [	(s   ,[[[c                     |                     t          j        d|j                            |j                  d           |r9|                     d|j                            |j        d          z             d S d S )N ;zcdef extern %sr   pyrex)r   r   extern_c_macrorg   declaration_codecname)rj   rp   r   r   s       r'   r   z&ModuleNode.generate_public_declarationY  s    !!!J''44446 	7 	7 	7  	DLL)
++EKq+AAC D D D D D	D 	Dr)   c                 d    |                      ||j                  }|                    dd          S Nr   __)punycode_module_namequalified_namereplace)rj   prefixr@   r   s       r'   r   zModuleNode.api_namea  s0    ,,VS5GHHT***r)   c                    d,d} ||j                   } ||j                  } ||j                  }|s|s|rt          |j        d          |_        |                     |j                   t          j                    }t          ||          }	t          j
        || |	           |                                 |                     t          j        |          }
|                    |
           |                    d           |                    d           |                    d           |                    d           |j        r]t$          j                            |j                  }t+          |          }|                    d|                                z             |rd|                    d	           |D ]L}|j        }|                    d
|j        z             |                    d|j        d|j        d           M|r|                    d	           |D ]}t5          |j                  }|                    t          j        |j                  }|                    d|                    |          z             |                    d|j        d|           |r|                    d	           |D ]}t5          |j                  }|                    t          j        |j                  }|                    d|                    |          z             |                    d|j        d|d           |r.|                     tC          j"        dd          d                    |r.|                     tC          j"        dd          d                    |r\|                     tC          j"        dd          d                    |                     tC          j"        dd          d                    |                    d	           |                    d|                     d|          z             |                    d           |                    d|j#                                        z             |                    d           |D ]}|                    t          j        |j                  }|j        $                                }|                    dt          j%        d|j                                        d|d|d	           |D ]}|                    t          j        |j                  }|j        &                                }|                    dt          j%        d|j                                        d |d|d	           tO          ||j#        d!i"          5 }|D ] }| (                    |j        ||d#$           !	 d d d            n# 1 swxY w Y   |                    d%           |                    d&           |                    d'           |                    d(           |                    d)           |                    d*           |                    d	           |                    d+|
z             tS          |j                  }	 |*                    |           |+                                 d S # |+                                 w xY wd S )-Nr   c                      fd| D             S )Nc                 4    g | ]}|j         s	|j        |S r   )r   r   )r   rp   rN   s     r'   r   zEModuleNode.generate_api_code.<locals>.api_entries.<locals>.<listcomp>g  sK     D D DeyD%(D-2-ADE D D Dr)   r   )r   rN   s    `r'   api_entriesz1ModuleNode.generate_api_code.<locals>.api_entriesf  s5    D D D Dw D D D Dr)   z_api.hz#ifdef __MINGW64__z#define MS_WIN64r   r   z#include %srE   zstatic PyTypeObject *%s = 0;r    (*)zstatic %s = 0;r   VoidPtrImportImportExport.cr   FunctionImport
TypeImportstatic int %s(void) {importzPyObject *module = 0;z#module = PyImport_ImportModule(%s);zif (!module) goto bad;if (__Pyx_ImportFunction_z	(module, , (void (**)(void))&, "z") < 0) goto bad;if (__Pyx_ImportVoidPtr_z, (void **)&r   )imported_modules	goto bad;)
error_codezPy_DECREF(module); module = 0;	return 0;bad:zPy_XDECREF(module);
return -1;r   r   )r   ),r   r   re   r(   r   api_filer   r   r   rB   r   r   r   r   r   r   r   r   r   r$   r   r#   r   rg   typeptr_cnametypeobj_cnamer   manglefunc_prefix_apir   r   varptr_prefix_apiputr   load_as_stringr   signature_string	cyversionempty_declaration_codeModuleImportGeneratorgenerate_type_import_callr   r   close)rj   r@   rA   r   r  api_vars	api_funcsapi_extension_typesr   r   r   
h_filenamerp   rg   r   sigimport_generatorr   s                     r'   r   zModuleNode.generate_api_codee  sw   	D 	D 	D 	D ;s//K 122	)k#*=>> Q	y Q	$7 Q	4V]HMMFO##FO444%''F23@@MVT=999##%%%f&=sCCIy)))LL-...LL+,,,LL"""LL.///} OW--fm<<
0<<
]Z-K-K-M-MMNNN" AR   0 A AE :DLL!?$BT!TUUULLL***D,>,>,>"@ A A A A HR   & H HE#EJ//DJJv'=uzJJELL!1D4I4I%4P4P!PQQQLLLEJJJ!FGGGG KR   % K KE#EJ//DJJv'?LLELL!1D4I4I%4P4P!PQQQLLLuzzz555!IJJJJ ]

;5oGWXXYZ[\\\ ^

;56FHXYYZ[\]]]" Z

;5lDTUUVWXYYY

;5lDTUUVWXYYYLLLL04==33O3OOPPPLL0111LL>ASAgAgAiAiijjjLL1222" X X

6#95:FFj1133''')G)G)I)I)I)I555RURURUWX X X X " X X

6#;UZHHj7799''')G)G)I)I)I)I555RURURUWX X X X 'vASU]@^___ qcs0 q qE225:vGWdo2ppppqq q q q q q q q q q q q q q q LL9:::LL%%%LL   LL.///LL&&&LLLLLL+i7888fo..Aa   									cQ	 Q	s   $W>>XX	[4 4\
c                     |                     t          j        dt          j        dd          d|j        d           d S )Nr   PyTypeObject	DL_IMPORTr   )r   r   r   r   public_declr  )rj   rg   r   s      r'   r   z&ModuleNode.generate_cclass_header_code  sU    !!!">;????  	! 	! 	! 	! 	!r)   c                 b   |                     d|j        d|j        d           |                                 |j        j        }|r=|D ]9}|                     d|j                            |j        d          z             :n|                     d           |	                                 d S )Nzcdef extern class r   :zcdef %sr   r   pass)
r   rh   r   indentr.   r   rg   r   r   dedent)rj   rg   r   r   rp   s        r'   r   z'ModuleNode.generate_cclass_include_code  s    diii) 	* 	* 	*j, 	!$ H HYJ//1/EEG H H H HH LL   r)   c                 <
   |                      |j        d           | j        }t          j        s|j        r<t          j        dk    p
|j        dk    }t          j        || j        j                  }nt          j
                    }t          ||          }t          j        || ||j                  }|                                 |d         }	|                     ||||j        |	           | j        |_        | j        |_        |                    t*                     |d         }
|
                    d| j                                        z             |                                 }|
                    d	|z             |
                    d
|z             |
                    d           |
                    d|j                                        z             |d         }
|                     |||
d           |d         }
|                     ||
           |                     ||
           |                     ||
           | j                             ||
           |
!                    d            | "                    ||
           | #                    ||
           |j$        r| %                    ||
           |
                    tM          j'        dd          d         (                                           | )                    ||d                    | *                    ||d                    | +                    ||d                    | ,                    ||d                    | -                    |d d         ||d                    | .                    ||d                    t          j/        r| 0                    ||d                    | 1                    |d                    | 2                    |||           |	3                    d           |j4        d d          D ]}|                    |           |5                                 | 6                    |||           to          |j                  }	 |8                    |           |9                                 n# |9                                 w xY wd|_:        |j;        r| <                    ||           t          j        s|j        r| =                    |||           d S d S )NT)r   fullc)show_entire_c_codesource_desc)code_configcommon_utility_include_dirr   before_global_varz#define __Pyx_MODULE_NAME %szextern int %s;zint %s = 0;rE   z/* Implementation of %s */late_includesF)earlymodule_codeSmallCodeConfigModuleSetupCode.cr   module_statemodule_state_definesmodule_state_clearmodule_state_traverseinit_modulecleanup_modulemain_methodfilename_tableru   r   )>r   r   r   r   r;   r   AnnotationCCodeWritercompilation_sourcer4  r   r   rB   r   r6  initialize_main_c_codegenerate_module_preambleembedded_metadatar[   
module_posr?   use_utility_coderefnanny_utility_coder   rf   r   is_main_module_flag_cnamer   r   generate_cached_builtins_declsgenerate_lambda_definitionsgenerate_variable_definitionsrL   generate_function_definitionsmark_posgenerate_typeobj_definitionsgenerate_method_tabler   generate_import_starr   r  stripgenerate_module_state_startgenerate_module_state_defines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@   rA   r   modulesr3  
rootwriterr   r   r   codemodule_is_mainutilcoder   s                 r'   r   zModuleNode.generate_c_code  s&   DAAA) 	,w/ 	,!(!1W!<![@PT[@[!7#5 3?  JJ
 )++J.sG<<&%'.'I
 
 

 	**,,,X&%%c7GV=UW]^^^!%!%$$%:;;;./

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

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

=>1222

2

/#2D2X2X2Z2ZZ[[[?+sGT???=)++C666 	((d333**3555	//T:::d))#t444""3--- 	1%%c4000 	

;-.?ATUUVWX^^``aaa((k..IJJJ**3<R0STTT((k:N.OPPP++C=T1UVVV 	&&wss|S+m:TUUU))#{;K/LMMM= 	G%%c;}+EFFF$$[1A%BCCC..sG[IIIT-aaa0 	3 	3H((2222((***&&sG[AAA&-((	a   GGIIIIAGGIIII"# 	8&&sJ777 	Dw/ 	D&&z67CCCCC	D 	Ds   	R3 3S	c                    |                      |           t          j        p|j        }|rt          j                            |          rj	 dd lmc m} n# t          $ r dd l
mc m} Y nw xY w|                    |                                          }|                                D ]	}d |_        
nd }|                    |j        |j        |           | j        j        sd S | j        j        j        }t          j                            t          j                            |j                            }	| j        j        D ]
}
t          j                            t          j                            |	|
                    }t          j                            |          }|                    |	          su ||
| j        d          }|s||	k    rat          j                            |          sB	 t          j        |           n,# t:          $ r}dd l}|j        |j        k    r Y d }~nd }~ww xY w|                    |||           d S )Nr   )coverage_xmlT)
source_posinclude) r;   r   annotate_coverage_xmlr   r$   existsxml.etree.cElementTreeetreecElementTreeImportErrorxml.etree.ElementTreeElementTreeparsegetrootitertailsave_annotationmain_source_filer   r.   rd   contextsearch_include_directoriesabspathdirnamejoin
startswithr[   makedirsOSErrorerrnoEEXIST)rj   rj  r   rA   coverage_xml_filenameETro  elsearch_include_file
target_dirincluded_filetarget_filetarget_file_dirsource_fileer  s                   r'   rh  z ModuleNode._generate_annotations/  s   j!!! ' = ^A^  		 RW^^4I%J%J 		 33333333333 3 3 322222222222388$9::BBDDL"''))    L""6#:FMXd"eee z( 	F"j0KW__RW__V]%C%CDD
!Z6 	\ 	\M'//"',,z=*Q*QRRK gook::O"--j99 --mZ^___K *,,RW^^O5T5T,K0000    LLLw%,.. /.... &&{Kl&[[[[!	\ 	\s*   	A A+*A+5H


H3H..H3c           
         |j         j        }|j                                        }t	          t
                    }t          |          D ]5\  }\  }}|dk    r'|j         |||f                             |dz              6|	                    d           t          |                                          D ]b\  \  }}}	|j        J |                    dd                    t          t          |	                    |j        t          |                     c|                    d           |                                 d S )Nr   r   LineNumberMapping
LineNumberr   )	c_linenossrc_path
src_lineno)r  gdb_debug_outputwriterbuffer
allmarkersr   list	enumeratefilenamerR   startr   r   	add_entryr  mapstrr   	serialize)
rj   r@   ccodewritertbmarkersdc_linenosrc_descr  r  s
             r'   rg  z ModuleNode._serialize_lineno_mapX  s>   [/$//1109'0B0B 	= 	=,H,xA~~("3"?(J&'..x!|<<<
$%%%17		1B1B 	 	-"XzI$000LL((3sI#6#677!*z??	      	"###
r)   c                     ||vr=d||<   |j         D ]}|                     |||           |                    |           d S d S )Nr   )cimported_modulesr   rR   )rj   r@   module_listmodules_seenimported_modules        r'   r   z"ModuleNode.find_referenced_modulesm  sh    l"" !L#&#8 Y Y,,_k<XXXXs#####	 #"r)   c                   	
 t          t                    |D ]d}|         }|j        j        }|rL |          }|                             |                               |          }|n|j        j        }|Let                      g 
	
fd	t          |          D ]} 	|                    
                                 
S )Nc                     | v rd S                      |             | j                           D ]} |                                        |            d S r"   )addrg   rR   )uvdfsgetkeyr   seen
subclasses	type_dicts     r'   r  z1ModuleNode.sort_types_by_inheritance.<locals>.dfs  sm    DyyHHQKKKqv/ " "IaL!!!!MM!r)   )	r   r  rg   	base_typerR   getsetreversedreverse)rj   r  
type_orderr  key	new_entrybasebase_key
base_entryr  r   r  r  s    ` `     @@@@r'   sort_types_by_inheritancez$ModuleNode.sort_types_by_inheritancet  s    &&
 
	1 
	1C!#I>+D 1!6$<<8$++C000&]]844
%!0  1 uu	 	 	 	 	 	 	 	 	 	 J'' 	  	 CC	#r)   c                    i g }}i g }}|D ](}|j         D ]}|j        r|j        s|j        }	|	j        }
|
s!|
|v ruddlm} t          |j        |          sJ t          |j                              t          ||
         j        |          s"J t          ||
         j                              |||
<   |
                    |
           ||u }|j        D ]]}|j        rT|s|j        rK|j        }	|	j        r=|j        s6|j        }	|	j        }
|
|vs
J |
            |||
<   |
                    |
           ^*d }|                     |||          }d }|                     |||          }||fS )Nr   )NonManglingModuleScopec                     | j         S r"   )vtabstruct_cname
entry_types    r'   r  z8ModuleNode.sort_type_hierarchy.<locals>.vtabstruct_cname  s    ..r)   c                     | j         S r"   )objstruct_cnamer  s    r'   r  z7ModuleNode.sort_type_hierarchy.<locals>.objstruct_cname  s    --r)   )re   usedin_cincluderg   r  r   r  rX   r.   r  rR   r   r   is_extension_typer  r  )rj   r  r@   	vtab_dictvtab_dict_ordervtabslot_dictvtabslot_dict_orderr   rp   rg   r  r  all_defined_herer  	vtab_listr  vtabslot_lists                    r'   sort_type_hierarchyzModuleNode.sort_type_hierarchy  s   %'?	-/*! 	8 	8F/ 4 4: 4e&7 4 :D/C ! i'' HGGGGG)%+7MNN``PSTYT_P`P````))C.*>@VWWrrY\]fgj]k]qYrYrrrrr).	#'..s333%}, 8 8: 8#3 8u7K 8 :D- 8e6G 8$z"2"-777777-2c*+2237778	/ 	/ 	/22(8: :		. 	. 	.66.A A =))r)   c                     t          j        d          }i g }}|j        D ]:} ||j                  }||vs
J |            |||<   |                    |           ;|                     |||          |j        d d <   d S )Nr  )operator
attrgetterre   rg   rR   r  )rj   r@   key_func
entry_dictentry_orderrp   r  s          r'   r   zModuleNode.sort_cdef_classes  s    &'899"$bK
( 	$ 	$E(5:&&Cj(((#(((#JsOs####!%!?!?X"/ "/AAAr)   c                    |D ]}|                      |j        |           t          |          t                      }|D ]}||u }	g }
|j        D ]l}|j        j        r@|j        r9|j        |vr/|                    |j                   |
                    |           N|	s|j	        r|
                    |           mfd|
D             }
| 
                    |
|           |D ]3}|                     |j        |           |                     ||           4|D ]Z}|                     ||           |                     ||           |                     ||           |                     ||           [d S )Nc                     g | ]}|v|	S r   r   )r   tvtabslot_entriess     r'   r   z8ModuleNode.generate_type_definitions.<locals>.<listcomp>  s$    QQQ!q@P7P7PA7P7P7Pr)   )!generate_objstruct_predeclarationrg   r  r   	is_ctupler  r   r  rR   r   r   generate_objstruct_definitiongenerate_typeobj_predeclarationgenerate_exttype_vtable_struct$generate_exttype_vtabptr_declaration*generate_exttype_final_methods_declaration)rj   r@   ri  r  r  rk  rp   ctuple_namesr   
definitionr   r  s              @r'   generate_type_definitionsz$ModuleNode.generate_type_definitions  s   " 	E 	EE225:tDDDD}--uu 	? 	?F3JL, / /:' /EJ /z55$((444$++E222 /5#7 / ''...QQQQ|QQQL**<>>>>" 	> 	>E..uz4@@@00==== 	I 	IE00===//t<<<55eTBBB;;E4HHHH		I 	Ir)   c                    |d         }|                     d           |                     d           dd |D             v rT|                     d           |                     d           |                     d           |                     d	           |                     ||          \  }}|                     |||||           |d
         }|D ]}||u }	|                     d           |                     d|j                                        z             |                     |||	|           |                     |||	           |                     |||	           d S )Nr   rE   z/*--- Type declarations ---*/zcpython.arrayc                     g | ]	}|j         
S r   )r   )r   ms     r'   r   z@ModuleNode.generate_declarations_for_modules.<locals>.<listcomp>  s    AAAAq/AAAr)   z#ifndef _ARRAYARRAY_Hzstruct arrayobject;z'typedef struct arrayobject arrayobject;r   module_declarationsz!/* Module declarations from %s */)r   r  r  r   r   generate_c_class_declarationsgenerate_cvariable_declarationsgenerate_cfunction_declarations)
rj   r@   ri  r   typecoder  r  
modulecoder   defined_heres
             r'   ra  z,ModuleNode.generate_declarations_for_modules  s   23r6777 AAAAAAANN2333NN0111NNDEEENN8$$$#'#;#;GS#I#I 	=&&)]H	> 	> 	> !67
 	S 	SF!S=LR   @6CXClClCnCnnooo..vz<Q\]]]00\RRR00\RRRR	S 	Sr)   c                 b    |                      t          j        |d          d                    d S )Nr<  r   )r  r   r  )rk  r   s     r'   _put_setup_codezModuleNode._put_setup_code  s-    +D2EFFqIJJJJJr)   c                    |                                  |ri|                    d           |                    t          j        |dd                     |                    d           |                    d           |                    d           |                    d           |                    d	           |                     |d
           t          |j                                        t          j	                  D ]'}|j
        |j        k    r|                    |           (|                    d           |                    d           |                    d           |                    d           |                    d           |j        d                             d           ddlm} |                    d           |                    d           |                    d           |                    d           |                    d           |                    d|                    dd          z             |                    d           |                    d           |                    dt#          |          z             |                    dt$          j        |j        j        v z             |                     |d            |j        j        j        r|                     |d!           n|                     |d"           |                     |d#           |                     |d$           |j        rt2          j        d%t2          j        d&}nd}|                    d'           |                    d(t2          j        d%t2          j        d)t2          j        d&t2          j        d*t2          j        d&|d+t2          j        d,           |                    d-           |                    d.           |                    d           |                     ||                                            |                    d           |                    d/| !                    t2          j"        |          z             |                    d/| !                    t2          j#        |          z             |                    d0           | $                    |||d12           |                    d           |                    d3           |                    d4           |                    d           |                    d           |j%        d5         ri|                    d           |                    d6           |                    d7           |                    d           |                    d           |&                    tO          j(        d8d9          d:                    |j%        d;         }	|j%        d<         }
|	d=vr|
stS          | j*        d>           |                    d?tW          |
d@k              z             |                    dAtW          |
                    dBd          ,                                dCk              z             |
dDk    r|                    dE           n-|                    dF           |                    dG|
z             |	dHk    rdI}n|	-                                }|                    dJ|z             |                    dK|z             |&                    tO          j(        dLdM          d:                    |.                    tO          j/        dNdO                     t`          j1        2                    |           t`          j1        3                    |           t`          j4        3                    |           |&                    tj          j6                   |                    dP           |                    d           |                    dQ           |                    dR|j7        z             tp          j9        "|                    dSt2          j:        z             |                    d           |                    dTt2          j        z             |                    dUt2          j        z             |                    dVt2          j;        d%t2          j<        dW           |                    dXt2          j        z             |.                    tO          j/        dYd9                     t{          |          r*|.                    tO          j/        dZd[                     d S d S )\Nz/* BEGIN: Cython Metadata   T)r/  	sort_keyszEND: Cython Metadata */rE   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.zb#elif PY_VERSION_HEX < 0x02070000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000)z6    #error Cython requires Python 2.7+ or Python 3.3+.r   r   z#endif /* Py_PYTHON_H */r   )__version__z5#if defined(CYTHON_LIMITED_API) && CYTHON_LIMITED_APIz-#define __PYX_EXTRA_ABI_MODULE_NAME "limited"z&#define __PYX_EXTRA_ABI_MODULE_NAME ""r   z3#define CYTHON_ABI "%s" __PYX_EXTRA_ABI_MODULE_NAMEr   _z3#define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABIz:#define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "."z#define CYTHON_HEX_VERSION %sz!#define CYTHON_FUTURE_DIVISION %dCModulePreambleCppInitCode	CInitCodePythonCompatibilityMathInitCode = z; z-#define __PYX_MARK_ERR_POS(f_index, lineno) \z    { z[f_index]; (void)z = lineno; (void)z (void)z; }z.#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UtilityFunctionPredeclarationsr<  r   c_string_typec_string_encoding)bytes	bytearrayzGa default encoding must be provided if c_string_type is not a byte typez1#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII %sr   z0#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 %s-utf8defaultz2#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT 1zq#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8)z*#define __PYX_DEFAULT_STRING_ENCODING "%s"r  	ByteArrayz7#define __Pyx_PyObject_FromString __Pyx_Py%s_FromStringzE#define __Pyx_PyObject_FromStringAndSize __Pyx_Py%s_FromStringAndSizeTypeConversionszTypeConversion.cFormatTypeNameObjectHandling.czOstatic CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; }#if !CYTHON_USE_MODULE_STATEzstatic PyObject *%s = NULL;zstatic PyObject *%s;zstatic int %s;static int %s = 0;zstatic const char * r   zstatic const char *%s;FastTypeChecksPythranConversionzCppSupport.cpp)>r   r   jsondumpsr  r   ra   rb   r   sortkeylocationINITIALrb  r   rE   r  r   r   r   divisionr  future_directivesrA   cplusr:   r   clineno_cnameline_c_macrofilename_cnamefiletable_cnamelineno_cnamer   r   r   r   r   r   r?   r  r   r  r   r[   intlowertitlerL  load_cachedr   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@   rA   r  metadatark  ro   r  cinfor	  r
  c_string_func_names               r'   rI  z#ModuleNode.generate_module_preamble  s&	    	JJ2333JJtz(1EEEFFFJJ0111JJrNNN

-...

-...

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

()))

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

 S 	T 	T 	T

KLLL

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

JKKK 	

BCCC

7

;<<<

8

H&&sC001 	2 	2 	2

HIII

OPPP

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

6Os{<<> 	? 	? 	? 	T#4555;$ 	4  }5555  {333T#8999T>222& 	#)#7#7#79L9L9LMEEE

CDDD


!!!6#9#9#96;P;P;P!4!4!4EE   	
 	 	 	 	

DEEE

OPPP

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

2

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

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

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

2

abbb

6777

8

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

FM^biMiIjIjjkkk

E%--c266<<>>&HIIJ 	K 	K 	K	))JJKLLLLJJ W X X XJJCFWWXXXK''!,!.!4!4!6!6

LOaabbb

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

deee

2

1222

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

8

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

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


V5I5I5I6K^K^K^_```

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

+,,,

?T)***

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

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

()))

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

;

pswwxxx

<   

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

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

&'''

/000

8r)   Tc                 @   t          |j                                        t          j                  D ]Q}|j        |j        k    r|r|                    |           *|j        |j        k    r|r|                    |           R|r|	                    d           d S d S )Nr  z#include <omp.h>)
r   ra   rb   r   r  r  EARLYrb  LATEputln_openmp)rj   r@   r  rk  r9  r  ro   s          r'   r   zModuleNode.generate_includes  s    #.//11{7JKKK 	$ 	$C|sy(( $IIdOOO)) $IIdOOO 	2011111	2 	2r)   c                 *   ddl m}m} |                    d           |                    dt          j        z             |j        j        r|j        j        D ]}|                                } ||          r ||          }|	                    dd          	                    dd          }t          |          }|                    d	|                                z             n|                    d
           |                    d           d S )Nr   )isabsr   rE   zstatic const char *%s[] = {\z\\"z\"%s,0};)os.pathr=  r   r   r   r#  r   filename_listget_filenametable_entryr   r#   r   )rj   rk  r=  r   r4  	file_pathescaped_filenames          r'   r`  z"ModuleNode.generate_filename_table  s'   ++++++++

2

063IIJJJ) 
	#/= K K'??AA	5## 4 ( 3 3I#,#4#4T6#B#B#J#J3PU#V#V #67G#H#H 

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

4r)   c                     d S r"   r   rj   r@   rk  s      r'   generate_type_predeclarationsz(ModuleNode.generate_type_predeclarations  s    r)   c                    |D ]}|j         s|j        }|j        r|j        s|j        r|                     ||           =|j        r/|j        s(|j        r!|                     |j        j	        |           s|j
        r|                     ||           |D ]}|j         s|j        }|j        r|                     ||           .|j        s|j        r|                     ||           S|j        r|                     ||           q|j        r/|j        s(|j        r!|                     |j        j	        |           |j        r|                     ||           |j
        r|                     ||           d S r"   )r  rg   
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   rk  rp   rg   s        r'   r   z$ModuleNode.generate_type_header_code  s    " 	G 	GE$ 
Gz? G, G0A G==eTJJJJ^ GDM Gej G==ej>UW[\\\\+ G::4FFF! 	C 	CE$ Cz? C))%6666\ 	CT%5 	C11%>>>>, C99%FFFF^ CDM Cej C99%*:QSWXXXX& C66udCCCC+ C66tTBBB	C 	Cr)   c                     |                     d           |j        D ]U}|j        }|j        sE|j        }|                    d          r|dd          }n|}|                     d|d|d           Vd S )NrE   __pyx_   typedef struct z __pyx_gcc33_r   )r   re   rg   typedef_flagr  r  )rj   r@   rk  rp   rg   r   r}  s          r'   generate_gcc33_hackzModuleNode.generate_gcc33_hack  s    

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


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

4**4DJGGHHHHHr)   c                     |d|d}d}||fS )Nr    {rB  r   )rj   rg   re  r   headerfooters         r'   sue_header_footerzModuleNode.sue_header_footer  s#    "ddDDD)v~r)   c                    |                     |j                   |j        }|j        }|r|j        }|j        o|j        }|r+|j        dd}|j                            t                     | 
                    |||j                  \  }}|ri|                    d           |                    d           |                    d           |                    d           |                    d           |                    |           |j        }	|	D ]7}
|                    d|
j                            |
j                  z             8|                    |           |rm|                    d           |                    d	           |                    d           |                    d
           |                    d           d S d S d S )Nr   __Pyx_PACKEDz#if defined(__SUNPRO_C)z  #pragma pack(1)z#elif !defined(__GNUC__)z  #pragma pack(push, 1)r   %s;z  #pragma pack()z  #pragma pack(pop))rS  r[   rg   r.   re  	is_structpackedr   rL  packed_struct_utility_coderr  r   r   r   r   )rj   rp   rk  rg   r.   re  rw  rp  rq  r   attrs              r'   rT  z+ModuleNode.generate_struct_union_definition  s   ei   z
 	%9D^3F N"&)))^^< 112LMMM&&tT4:>> FF %

4555

.///

5666

4555

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

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

4555

-...

5666

0111

8$$$$$3	% 	%(% %r)   c                    |                     |j                   |j        }|j        }|r|j        r:|                    dd                    d |j        D                       z             |                    d|j        z             |j	        r<d                    d |j	        D                       }|                    d|z             |                    d           | 
                    |j        |           d	 |j                                        D             }d
}d }d }	|j        D ]}
|
j        j        r"|
j        j        r|                    d           n?|
j        dk    r|
}n1|
j        dk    r|
}	n#|
j        j        r|                    d           d}|                    d|
j                            |
j                  z             d|j        j        v }|s|r|rg }g }|j        j        d t-          |j        j                  |j        j        z
           D ]C}|                    |                                           |                    |j                   D|j        j        r[|                    |j        j                            t6          j                             |                    t6          j                   |sdg}ndg}g }|r|                    |j        dd                    |          d           |r0|                                 |D ]}
|                    |
d
           |r3|                    |j        dd                    |          d           |r|                                 |                    d           n3|                    |j        dd                    |          d           |	s|s|r|r|                    d           |r|                    d|j        z             |r|                                 |	r|                    d|	j        z             |r0|D ]}
|                     |
d
           |                                 |                    d           n|                    d|j        z             |r|r|                    |j        d|j        d           |                                 |j        D ]J}
|
j        j        s<|                    |
j        d|
j        d           |!                    |
d
           K|                                 |                    d           |                    |j        d |j        d           |                    d!           |                                 |j        D ]a}
|
j        j        sS|                     |
d
           |                    |
j        d|
j        d           |!                    |
d
           b|                                 |                    d           |                    d"           |                    d           nJ|                    |j        d|j        d#           |                    |j        d |j        d#           |                    d$           d S d S )%Nztemplate <class %s>z, class c                 6    g | ]}|                                 S r   ri  rj  s     r'   r   z<ModuleNode.generate_cpp_class_definition.<locals>.<listcomp>6  s$    HHHAQ--//HHHr)   	struct %sz	, public c                 6    g | ]}|                                 S r   ri  )r   
base_classs     r'   r   z<ModuleNode.generate_cpp_class_definition.<locals>.<listcomp>;  s$    ]]]ZZ6688]]]r)   z : public %sro  c                 8    g | ]}|j         j        |j        |S r   )rg   is_pyobjectis_inherited)r   r  s     r'   r   z<ModuleNode.generate_cpp_class_definition.<locals>.<listcomp>?  sC     F F Fa6-F67nF F F Fr)   Fstatic z<init>z<del>zvirtual Tru  rB  void(, z) {nanny);r   z~%s() {z%s();z~%s();z(const z& __Pyx_other) {z = __Pyx_other.r   z& operator=(const zif (this != &__Pyx_other) {zreturn *this;z& __Pyx_other);rB  )"rS  r[   rg   r.   rl  r   r  r  r   base_classesr   r   r   rb   r   is_cfunctionis_static_methodr   r   r   r   original_argslenargsoptional_arg_countrR   op_arg_structr   optional_args_cnameput_ensure_gilput_init_var_to_py_noneput_release_ensured_gilput_var_xdecrefput_var_incref)rj   rp   rk  rg   r.   base_class_declpy_attrshas_virtual_methodsconstructor
destructorry  is_implementing	arg_decls	arg_namesargs                  r'   rU  z(ModuleNode.generate_cpp_class_definition/  su   ei   z
 d	~ K

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

549#=#=dj#I#IIJJJJ+t/?/EEO Oh O # "I "I*/=[S!1!6778H8[[[ ] 4 4!(()=)=)?)?@@@!((3333"': E!(()9)G)X)XY_Ys)t)tuuu!(()CDDD$ -%+H	!'I "I" OJJTZZZ99M9M9M9MNOOO L++---$, L LD 88U8KKKK" Z

0A0A0A499YCWCWCWCW#XYYY 744666JJsOOOOJJDJJJ		)8L8L8L8LMNNN 6X 6)< 6& )HHZ(((" 6JJy4:5666 .++---! ?

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


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

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

:&&&&

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


DDD$$$?@@@@@	A 	AA Ar)   c                 ~   |                     d           |j        j        }|r|j        dk    rD|j        s=|                     t
          j        dt          j        dd          d|d           d S |j        dk    r?|                     t
          j        dt          j        dd          d|d           d S d S d S )	NrE   externr   r)  r*  r   r   	DL_EXPORT)	r   rg   r  r   r  r   r   r   r+  )rj   rp   rk  r   s       r'   r  z*ModuleNode.generate_typeobj_predeclaration  s    

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

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

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


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


YYDEEE	F 	Fr)   c                 v    |j         sd S |                    |                     |d|j                             d S )Nstruct)r.   r   rf  r  )rj   rg   rk  s      r'   r  z,ModuleNode.generate_objstruct_predeclaration  s>    z 	F

4**44;OPPQQQQQr)   c                    |                     |j                   |j        sd S |                     |d|j                  \  }}|                    |           |j        }|rB|j        }|dk    rd}|                    d|j                 |dt          j	        d           n|                    d           |j
        r9|j        r|j        j
        s&|                    d|j        d	|j
        d           |j        j        D ]}|j        rt          }n|j        }|j        r|                    |j                  }	n|                    |j                  }	|j                            |           |                    d
|	z             |                    |           |j        (|                    d|j        d|j        d           d S d S )Nr  r)  PyHeapTypeObject)r  rE   r   r   PyObject_HEADr  r  ru  rY  )rS  r[   r.   rr  r  r   r  rZ  r   r  vtabslot_cnamer  r   is_declared_genericr
   rg   is_cpp_optionalcpp_optional_declaration_coder   r   use_entry_utility_codeobjtypedef_cname)
rj   rg   rk  rp  rq  r  basestruct_cnamery  	attr_typedecls
             r'   r  z(ModuleNode.generate_objstruct_definition  s   dh z 	F""443GHH 	

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

6 ,JJJ$2F2F2FH]H]H]^_____ -,r)   c           	         |d         }|d         }|d         }|d         }|                                 }	|                                 }
|	|
fD ]}|                    d           |j        D ]]}|s|j        rP|                    d|j        j        z             |                    d|j        j        dt          j        d	|j        j                   |                    d
|j        j        z             |                    d|j        j        z             |j        j        |	                    d|j        j        z             |
                    d|j        j        dt          j        d	|j        j                   |                    d
|j        j        z             |                    d|j        j        z             _|	|
fD ]}|                    d           d S )Nr=  r>  r?  r@  #if CYTHON_USE_MODULE_STATEPyTypeObject *%s;r   r   ->!Py_CLEAR(clear_module_state->%s);$Py_VISIT(traverse_module_state->%s);PyObject *%s;r   )	insertion_pointr   re   r   rg   r  r   modulestateglobal_cnamer  )rj   r@   rk  r  r   r=  r>  r?  r@  module_state_typeobjmodule_state_defines_typeobjrc  rp   s                r'   r  z(ModuleNode.generate_c_class_declarations0  sV   ">2*+AB()=> +,C D+;;==';'K'K'M'M$+-IJ 	8 	8FLL67777( 	3 	3E 3U1 3""#69Q#QRRR$***J,,,222J,,,. / / / #((7J,-. . . &++:J,-. . . :+7(..AY/YZZZ0666
000666
0082 3 3 3 ',,;
023 3 3 *//>
023 3 3 ,-IJ 	# 	#FLL""""	# 	#r)   c                    |j         rd S |j        D ]}|j        s |j        s|j        dk    r|j        s|j        s+d }d }d }|j        dk    rt          j        }d}nT|j        dk    rt          j        }|rd}n8d}n5|j        dk    r*d}d }|j	        |j
                            |j	                  }|j
        }|j        }	|j        r<|s:d}d }t          |          }|                    t          j        |j                  }	d}|r|                    d|z             |j        r+|                    |                    |	|	                     n*|                    |                    |	|	                     ||                    d
|z             |                    d           |j        |	k    r!|                    d|j        d|	d           |                    |           d S )Nprivater  r*  r   r  staticr   z%s dll_linkage = %sr   r   r  r  )is_cython_builtinr   r  
in_closurer   r   r  r   r   initrg   literal_coder   r   r  varptr_prefixr   r  r  r  r   put_safer   r  )
rj   r@   rk  r  rp   storage_classr  r  rg   r   s
             r'   r  z*ModuleNode.generate_cvariable_declarationsU  sM     	F_ .	. .	.E! U%5 %22E<P2TYT^2 MKD8++ & 5)!X-- & 5 ."-KK"-KK!Y.. (":) :225:>>D:DKE# J  ("~~

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


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

3	  	 r)   c                 J   |j         }|j        D ]}|j        dk    r|j        }|j        }|r|                     ||           |                     |||           |                     ||           |                     ||           |	                                rB| 
                    |||           |                                r|                     |||           |                    dg          r|                     ||           |                    ddg          r|                     ||           |                    g d          rUt!          | j        dd           |                    d           |                    d	           |                    d
           |                    ddg          r|                     ||           |                    ddg          r|                     ||           |                    ddg          r|                     ||           |                    dg          r|                     ||           |                    ddg          r|                     ||           |j        s,|                    dg          r|                     ||           |                    t6          j                  r|                     ||           n#d|j        v rt!          |j        j        d           t7          j         |j!        j                  j"        D ]@}|j#        r7|                    |j$                  r| %                    ||||j                   A| &                    ||           | '                    ||           | (                    ||           |                    d           | )                    ||           |                    d           | *                    |||           |                    d
           d S )Nr  __getitem____setitem____delitem__)__getslice____setslice____delslice__z__getslice__, __setslice__, and __delslice__ are not supported by Python 3, use __getitem__, __setitem__, and __delitem__ insteadr   #if PY_MAJOR_VERSION >= 3zN#error __getslice__, __setslice__, and __delslice__ not supported in Python 3.r   r  r  __getattr____getattribute____setattr____delattr____get____set__
__delete____dict__total_orderingMtotal_ordering directive used, but no comparison and equality methods definedz#if CYTHON_USE_TYPE_SPECSr   )+r   re   r   rg   r.   generate_exttype_vtablegenerate_new_functiongenerate_del_functiongenerate_dealloc_functionneeds_gcgenerate_traverse_functionneeds_tp_cleargenerate_clear_functiondefines_any_specialgenerate_getitem_int_functiongenerate_ass_subscript_functionr	   r[   r   generate_ass_slice_functiongenerate_getattro_functiongenerate_setattro_functiongenerate_descr_get_functiongenerate_descr_set_functionis_closure_class_scope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_accessorsrU  generate_getset_tablegenerate_typeobj_specgenerate_typeobj_definition)rj   r@   rk  rf   rp   rg   r.   slots           r'   rT  z'ModuleNode.generate_typeobj_definitions  s~   -( :	) :	)E 8++z
 4)00===..udEBBB..ud;;;225$???~~'' M77tUKKK //11 M 88eLLL00-AA H::5$GGG00-1OPP J<<UDIII001a1a1abb -!XYZ\ \ \ 

#>???

#sttt

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

%%c****++----/	0 	0 	0 	0 	0r)   c           	         t          j        dd          }|                    d          }|                    |          |k    rd S |j        }|j        }|                                \  }\  }	}
}|j        j        }|j        rg }	d |j	        D             }|
                    d          }|r	|j        sd }|s	|r
|j        sd}nd}|rd}n|j                            dd          }|                    t          j                  }|                    t          j                  }|j        d         }|                    d	|z             |                    d           |r|                    d
           |                    d|j                            |          |fz             |                    d|z             |                    d           |                    d           |                    d|d|d|d           |j        p|
p|p|	p|}|r0|                    d|j                            d          z             |r;t          j        ||          }|
d|j        z  }|                    d|z             n|                    d           |                    d           |                    d           |                    d           |                    d           |r0|j                            t3          j        dd                     |rd}nd}|                    dd          }|                    d
           |                    d |d!|d"|d#           |                    d$|d%|d&           |                    d'|z             |                    d(           |                                r|                    d)           |                    d*           |                    d           |                    d+           |s|                    d,           |                    d-           |sL|                    d.           |                    d/t          j        z             |                    d0           |                    d1           |r|s|                    d0           |s|                    d           |r+|                    d2|                    d3          z             d4}|j        rh|}|j        r&|j        j        r|j        }|j        r|j        j        ||urd5|j        z  }nd}|                    d6|j        d7||j        d8           |D ]^}|j         r|j!        "                    d          }n|j!        #                                }|                    d9|j$        d:|d;           _|	D ]N}|j%        d<k    r)d}|&                    d6|j$        d=|j$        d>           6|'                    |d?d4@           O|D ]<}|                    dA|j$        z             |                    dB|j$        z             =|
D ]}|                    dC|j$        z              |j$        dDk    r|                    dE           |r<|j        rdFt          j        z  }ndG}d}|                    dH|j(        dI|dJ           |                    dK           |rG|                    dL           |)                    d3tT          d4@           |                    dM           |                    d0           d S )NNtp_new	__cinit__c                 *    g | ]}|j         j        |S r   rg   needs_cpp_constructionr   rp   s     r'   r   z4ModuleNode.generate_new_function.<locals>.<listcomp>  s"    "m"m"mU5:Kl"m5"m"m"mr)   rE   CYTHON_UNUSED r   freelistdeclszIstatic PyObject *%s(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/#if CYTHON_USE_FREELISTSzstatic %s[%d];r  r   zstatic PyObject *z(PyTypeObject *t, zPyObject *a, zPyObject *k) {ru  r  z)__Pyx_PyType_GetSlot(%s, 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)))Tderefzif (likely((int)(z( > 0) & (int)(t->tp_basicsize == sizeof())z)) {zo = (PyObject*)[--];zmemset(o, 0, sizeof(%s));z(void) PyObject_INIT(o, t);PyObject_GC_Track(o);} else{zBif (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) {zo = (*t->tp_alloc)(t, 0);} else {z4o = (PyObject *) PyBaseObject_Type.tp_new(t, %s, 0);r   zif (unlikely(!o)) return 0;zp = %s;oFz(struct %s*)zp->r  r   znew((void*)&(p->)) z();r  z" = PyDict_New(); if (unlikely(!p->z)) goto bad;p->%sr  zp->%s.data = NULL;zp->%s.memview = NULL;zp->%s.obj = NULL;__pyx_memoryviewslicezp->from_slice.memview = NULL;zo, %s, NULLzo, a, kzif (unlikely(r  z) < 0)) goto bad;z	return o;r  zreturn NULL;)+r   ConstructorSlotmangle_internal	slot_coder  r  get_refcounted_entriesis_final_typeis_internalr   lookup_here
is_specialtrivial_signaturer?   r  r   freelist_namefreecount_namer   r   r   r  get_base_slot_functionr  rL  r   r(  r  empty_tuple	cast_coder  r  r  rg   r  r  r   r   r  r  
func_cnameput_decref_clearr
   )rj   r.   rk  cclass_entrytp_slot	slot_funcrg   r  have_entriesr  
py_buffersmemoryview_slicesr=  cpp_constructable_attrscinit_func_entryunused_markerfreelist_sizerB  rC  r(  need_self_castr   type_safety_check
obj_structneeds_error_cleanupvtab_base_typestruct_type_castrp   	decl_code
cinit_argss                                 r'   r  z ModuleNode.generate_new_function  s   +HkBB))(33	U##y00F N	 4466 	@?x->)7 	H"m"me6G"m"m"m ,,[99 	$$4$? 	$# 	-) 	-2B2T 	-MM,M 	@MM!,00Q??M--f.BCC..v/DEE )_ 	 	 	

2 	JJ1222JJ'!22=AA+        JJ+n<===JJx   JJrNNN


		===---9	: 	: 	: - 2%F):Fh21 	  	HJJuu0AA#FFFGGG &	 5eWEEF~DyG^^JJ3f<====JJ~&&&JJ<===JJZ[[[JJ.///JJw   11+,<oNNP P P  @(*%%(%!222T2BB


5666


&


4E4E4EGH H H 


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

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

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

8$$$

8$$$

3  a

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

:&&&

QTZTffggg

3

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

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

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

	 	 	 	 	r)   c                    t          j        d|j                  }|                    d          }|                    |          |k    rd S |                    d          }||j        sd S |                    d           |j        r|                    d|j        z             |                    d|z             |                    d           |                    d           |                    d|j	        z             |                    d	           |                    d
           |j        r|                    d           d S d S )Ntp_finalize__del__rE   #if %sstatic void %s(PyObject *o) {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;  r?  r@  r   
used_ifdefrG  )rj   r.   rk  rJ  slot_func_cnamerp   s         r'   r  z ModuleNode.generate_del_function  sG   ,]E<LMM//>>U##66F!!),,= 0=F

2 	6JJx'"44555

2_DEEE

2333

6777

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

5666

3 	!JJx     	! 	!r)   c           	      R   t          j        dd          }|                    d          }|j        j        }|                    |          |k    rd S |                    d          }|                    d           |                    d|z             |j        j        }|                                }|	                                }	|j
        s|                    d          nd }
|
|j        vrd }
|j
        s|                    d          nd }||j        vrd }|                                \  }\  }}}d |j        D             }|s|s|s|
s|r|                     ||           |r|                                r|                    d           |rd	}nd
}|                    d|z             |                    d|z             |                    d           |                    d           |                    d           |                    d           |r|                    d           |	rE|j                            t%          j        dd                     |                    d|z             |
r|                    d           |                     ||           |r|                    d           |D ]}|                    d|j        z              ||z   D ])}|                    d|j        z  |j        ddd           *|r|j        }t          j        ||          }|Q|r5|j        r.|j                                        r|                    d           |                    d|z             n|j        rQ|r5|j        r.|j                                        r|                    d           |                    d|z             n|rs|                    d           |                    d|d |d!           |                    d"           |                    d#|z             |                    d           |                    d$|d%|d&|d'           |j                            t%          j        d(d                     n|j                            d)d*          }|r|                    t<          j                  }|                    t<          j                   }|rd}nd+}|j        }|                    d,           |                    d-|||!                    dd.          |fz             |                    |d/|d0|"                    d1          d2           |                    d3           |                    d           |                    d4           |                    d5           |                    d6           |                    d"           |                    d4           |                    d7           |                    d8           |                    d           |                    d           |r|                    d           |	r|                    d9           |                    d           d S ):N
tp_dealloc__dealloc__rE   r_  __weakref__r  c                 *    g | ]}|j         j        |S r   r#  r%  s     r'   r   z8ModuleNode.generate_dealloc_function.<locals>.<listcomp>  s8     "A "A "AE#j?"A% "A "A "Ar)   z#if CYTHON_USE_TP_FINALIZEz!!__Pyx_PyObject_GC_IsFinalized(o)z@(!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))zif (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && %s) {z>if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == %s) {z1if (PyObject_CallFinalizerFromDealloc(o)) return;r   r   zPyObject_GC_UnTrack(o);
PyTrashcanExtensionTypes.cz__Pyx_TRASHCAN_BEGIN(o, %s)z.if (p->__weakref__) PyObject_ClearWeakRefs(o);z+if (p->__dict__) PyDict_Clear(p->__dict__);z__Pyx_call_destructor(p->%s);r7  FT)r  clear_before_decrefhave_gilr1  rb  z4__Pyx_PyType_GetSlot(%s, tp_dealloc, destructor)(o);r   if (!(z) || PyType_IS_GC(z)) PyObject_GC_Track(o);r   z+if (PyType_IS_GC(%s)) PyObject_GC_Track(o);if (likely(z)) __Pyx_PyType_GetSlot(zA, tp_dealloc, destructor)(o); else __Pyx_call_next_tp_dealloc(o, r  CallNextTpDeallocr'  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++] = r5  r   r2  r3  5#if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY(*Py_TYPE(o)->tp_free)(o);Dfreefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free);if (tp_free) tp_free(o);__Pyx_TRASHCAN_END)#r   r9  r:  r  r  r;  r   r=  r  needs_trashcanr	  r?  r   r<  r  may_have_finalizer   rL  r   r(  generate_usr_dealloc_callr   put_xdecref_clearrg   r  rD  r.   is_builtin_typer?   r  r   rB  rC  r   rF  )rj   r.   rk  rJ  rK  r  rf  r=  r  ry  weakref_slot	dict_slotr  r  rN  cpp_destructable_attrsfinalised_checkrp   
base_cnamerh  rR  rB  rC  rT  rg   s                            r'   r  z$ModuleNode.generate_dealloc_function  s   +L-HH)),77	%/	U##y00F//==

2

+o=	? 	? 	? )7>>##--//?D?[eu((777aeu000L9>9U_E%%j111[_	E---I.3.J.J.L.L++Ha*"A "AU5F "A "A "A  	1- 	11B 	1l 	1V_ 	1##E4000 	! 7 7 9 9 	!JJ3444 X"E W  JJSUdef f f
 JJWZiijjjJJJKKKJJsOOOJJsOOOJJx    	2 JJ0111 	H--'6HIIK K KJJ4FGGG 	I
 JJGHHH 	&&ud333 	FJJDEEE+ 	F 	FEJJ6DEEEE!22 	L 	LE""7U[#8%*E7;d # L L L L  F	 "0J"9%IIJ% 8	 8IO4L4L4N4N 8 JJ6777

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

QT^^____ 	) JJ9::: JJJYcYcYceoeoeopqqqJJw'''JJLzYZZZJJx(((
 


)zz:::H I I I  11+,?ASTTV V V V ",00Q??M   % 5 5f6J K K!&!6!6v7L!M!M  z(*%% y & (

5666

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

!MM>>>4>>#3F3F3F3FH I I I

8$$$

8$$$

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

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

	 	 	 	 	r)   c                    |                     d          }|r|j        sd S |                    d           |                    d           |                    d           |                    d           |                    d|j        z             |                    d           |                    d           |                    d	           d S )
Nri  r3  r`  ra  z&__Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);rb  z&__Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);rc  r   )r?  r@  r   rG  )rj   r.   rk  rp   s       r'   r{  z$ModuleNode.generate_usr_dealloc_call?  s    !!-00 	E, 	F

3

2333

6777 	

;<<<

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

;<<<

5666

3r)   c                    t          j        d          }|                    d          }|j        j        }|                    |          |k    rd S |                    d           |                    d|z             |                    d          \  }\  }}	}
|s|r|                    d           |s|	r|                     ||           |rt          j	        ||          }|r|                    d|z             n|j
        r$|j        }|                    d|d	|d
           nV|j        }|                    d|d|d|d|d	           |j                            t          j        dd                     |D ]q}d|j        z  }t#          j        t&          |j        |          }|                    d|z             |                    d|z             |                    d           r|	D ]Q}|j        dz   }|                    d|z             |                    d|z             |                    d           R|                    d           |                    d           d S )Ntp_traverserE   z2static int %s(PyObject *o, visitproc v, void *a) {Finclude_gc_simplezint e;z!e = %s(o, v, a); if (e) return e;if (!z->tp_traverse); else { e = z(->tp_traverse(o,v,a); if (e) return e; }ze = ((likely(z)) ? ((z->tp_traverse) ? zC->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, z)); if (e) return e;CallNextTpTraverserm  r7  	if (%s) {z!e = (*v)(%s, a); if (e) return e;r   z.objzif (p->%s) {z$e = (*v)(p->%s, a); if (e) return e;r  )r   GCDependentSlotr:  r  r  r;  r   r<  r  rD  r}  r  r   rL  r   r(  r   r   typecastr
   rg   )rj   r.   rk  rI  rJ  rK  r  rL  r  rM  rN  static_callr  rp   var_codevar_as_pyobjectr   s                    r'   r  z%ModuleNode.generate_traverse_functionO  s   +M::))-88	%/	U##y00F

2

@9L	N 	N 	N ((5(AA 	@?x->  	! 	!JJx    	1z 	1##E4000 	W#:5'JJK W

>LMMMM* W&4



JJ


, - - - - '4



 #

JJJ


IIIGH H H  11+,@BTUUW W W  	 	E,H(1.%*hWWOJJ{X-...JJ:_LMMMJJsOOOO   	 	EK&(EJJ~-...JJ=EFFFJJsOOOO

;

3r)   c                 v   t          j        d|j                  }|                    d          }|j        j        }|                    |          |k    rd S |                    d          \  }\  }}	}
|s|	s|rd}nd}|                    d           |                    d|d|d           |r!t          j
        r|                    d	           |s|	r|                     ||           |rt          j        ||          }|r|                    d
|z             n|j        r$|j        }|                    d|d|d           nV|j        }|                    d|d|d|d|d	           |j                            t#          j        dd                     t          j
        r|D ]{}d|j        z  }|                    d|z             |j        r|                    |t,          d           n|                    ||j        d           |                    d           |n"|D ]}|                    d|j        z              |	D ]}|                    d|j        z              |j        dk    r|                    d           |                    d           |                    d           d S )Ntp_clearFr  rE   r&  zstatic int r  zPyObject *o) {zPyObject* tmp;rb  r  z->tp_clear); else z->tp_clear(o);rq  z	)) { if (z->tp_clear) z2->tp_clear(o); } else __Pyx_call_next_tp_clear(o, r  CallNextTpClearrm  r7  ztmp = ((PyObject*)%s);r  zPy_XDECREF(tmp);zPy_CLEAR(p->%s);zPy_CLEAR(p->%s.obj);r8  z(__PYX_XCLEAR_MEMVIEW(&p->from_slice, 1);r  r   )r   rd  r?   r:  r  r  r;  r<  r   r   clear_to_noner  rD  r}  r  r   rL  r   r(  r   r  put_init_to_py_noner
   rg   )rj   r.   rk  rI  rJ  rK  r  rL  r  rM  rN  unusedr  r  rp   r   s                   r'   r   z"ModuleNode.generate_clear_function  sS   ,Z9IJJ))*55	%/	U##y00F ((5(AA 	@?x->  	&z 	&Y 	&FF%F

2


yyy&&&IJJJ 	)- 	)JJ'((( 	1z 	1##E4000 	T#:5'JJK T

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


JJ


, - - - - '4



"

JJJ


IIIGH H H  11+,=?QRRT T T   	=! / /,

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

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

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

;

3r)   c                 X   |                     d|                    d          z             |                     d           |                     d           |                     d           |                     d           |                     d           |                     d           d S )	Nz0static PyObject *%s(PyObject *o, Py_ssize_t i) {sq_itemzPyObject *r;z4PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0;z2r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x);zPy_DECREF(x);	return r;r   )r   r:  )rj   r.   rk  s      r'   r  z(ModuleNode.generate_getitem_int_function  s     	

>%%i002	3 	3 	3 	

	 	 	

B	D 	D 	D

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

	 	 	

	 	 	

	 	 	 	 	r)   c                    |j         j        }|                    d          }|                    d          }|                    d           |                    d|                    d          z             |                    d           |r|                    d|j        z             n|                    d           |                     |d	dd
|           |                    d           |                    d           |                    d           |                    d           |                    d           |                    d           |                    d           |r|                    d|j        z             n|                    d           |                     |d	dd
|           |                    d           |                    d           |                    d           |                    d           |                    d           |                    d           |                    d           d S )Nr  r  rE   6static int %s(PyObject *o, PyObject *i, PyObject *v) {mp_ass_subscriptif (v) {return %s(o, i, v);__Pyx_TypeName o_type_name;tp_as_mappingo, i, v/o_type_name = __Pyx_PyType_GetName(Py_TYPE(o));'PyErr_Format(PyExc_NotImplementedError,zL  "Subscript assignment not supported by " __Pyx_FMT_TYPENAME, o_type_name);#__Pyx_DECREF_TypeName(o_type_name);r  r   else {return %s(o, i);zJ  "Subscript deletion not supported by " __Pyx_FMT_TYPENAME, o_type_name);r  r  r?  r   r:  rG  generate_guarded_basetype_callrj   r.   rk  r  	set_entry	del_entrys         r'   r  z*ModuleNode.generate_ass_subscript_function  s    %/	%%m44	%%m44	

2

D%%&899;	< 	< 	< 	

	 	 	 	JJ,y/CCDDDDJJ-/ / ///?,>	4Q Q QJJAC C CJJ9; ; ;JJ^` ` `JJ57 7 7JJ  

	 	 	

	 	 	 	JJ"(*+ + + + JJ-/ / ///?,>	4Q Q QJJAC C CJJ9; ; ;JJ\^ ^ ^JJ57 7 7JJ  

	 	 	

	 	 	 	 	r)   c                 (   |r|j         }|rI|                    d|d|d|d|d|d           |                    d|d|d|d|d	           d S |                    d|d|d           |                    d|d|d|d           d S d S )Nif (r  z && r  z	  return r  r  )r  r   )rj   r  substructurer  r  rk  base_tpnames          r'   r  z)ModuleNode.generate_guarded_basetype_call  s    	2#1K 2


#\\\;;;dddTU U U 


#\\\444?@ @ @ @ @ 


#TTT+, , , 


#TTT44412 2 2 2 2	2 	2r)   c                    |j         j        }|                    d          }|                    d          }|                    d           |                    d|                    d          z             |                    d           |r|                    d|j        z             n|                    d           |                     |d	dd
|           |                    d           |                    d           |                    d           |                    d           |                    d           |                    d           |                    d           |r|                    d|j        z             n|                    d           |                     |d	dd
|           |                    d           |                    d           |                    d           |                    d           |                    d           |                    d           |                    d           d S )Nr  r  rE   zEstatic int %s(PyObject *o, Py_ssize_t i, Py_ssize_t j, PyObject *v) {sq_ass_slicer  zreturn %s(o, i, j, v);r  tp_as_sequencez
o, i, j, vr  r  zR  "2-element slice assignment not supported by " __Pyx_FMT_TYPENAME, o_type_name);r  r  r   r  zreturn %s(o, i, j);zP  "2-element slice deletion not supported by " __Pyx_FMT_TYPENAME, o_type_name);r  r  s         r'   r  z&ModuleNode.generate_ass_slice_function1  s    %/	%%n55	%%n55	

2

S%%n557	8 	8 	8 	

	 	 	 	JJ((*+ + + + JJ-/ / ///+^\4Q Q QJJAC C CJJ9; ; ;JJdf f fJJ57 7 7JJ  

	 	 	

	 	 	 	JJ%(*+ + + + JJ-/ / ///+^\4Q Q QJJAC C CJJ9; ; ;JJbd d dJJ57 7 7JJ  

	 	 	

	 	 	 	 	r)   c                    |                     d          rd S |                    d          }|                    d           |                    d|z             |                    d           g }|j        }|M|j        j        dk    s=|                    |j                   |j        j        j        }||j        j        dk    =||v sJ d }|r%|j        j        dk    r|j	        r|n|j        j        }d|j
        v }i t          j        D ]%}|D ] }	|	                     |          }
|
|
|<    n!&|rfdt          D             }|s@d	vrd
vrt          |j        j        d           nt          |j        j        d           d}n3d	vr d
vrt          |j        j        d           d}t!          |          }t          j        D ]D}|                    d                                          }                    |          }
|
|r|dv rH|                    d|z             |
|sJ t          ||f         \  }}}|                    d           |                    d|         j        z             |                    d           |                    d           |                    d           |                    d           ||dk    rG|                    d|rdndz             |                    d           |                    d           n_|dk    rG|                    d|rdndz             |                    d           |                    d           nt+          d |          d	v rd	}nd
}| }|                    d|         j        z             |                    d           |                    d!           |                    d           |                    d"           |r|                    d#           n|                    d$           |                    d%           |                    d&           |                    d&           nB|r|                    d'           n|                    d(           |                    d%           |                    d&           |                    d)           n|                    d*|
j        z             |                    d&           Fd	v rd
vr|s
|                    d+           |                    d           |                    dd	         j        z             |                    d           |                    d,           |                    d           |                    d-           |                    d.           |                    d%           |                    d&           |                    d)           |                    d&           |                    d/           |r-|j	        r&|                    d0|j	        d1|j	        d2           |                    d3           |                    d&           |                    d&           |                    d&           d S )4N__richcmp__tp_richcomparerE   z9static PyObject *%s(PyObject *o1, PyObject *o2, int op) {zswitch (op) {r  r  c                 "    g | ]\  }}|v 	|S r   r   )r   	from_nameto_name
comp_entrys      r'   r   z8ModuleNode.generate_richcmp_function.<locals>.<listcomp>  s*    hhh(:	7PY]gPgPg)PgPgPgr)   __eq____ne__r  z@total_ordering directive used, but no comparison methods definedFz=total_ordering directive used, but no equality method definedr  )NEEQzcase Py_%s: {zPyObject *ret;zret = %s(o1, o2);z.if (likely(ret && ret != Py_NotImplemented)) {z+int order_res = __Pyx_PyObject_IsTrue(ret);zPy_DECREF(ret);z)if (unlikely(order_res < 0)) return NULL;rC   zif (%s order_res) {z!!!zret = __Pyx_NewRef(Py_False);r4  rD   zret = __Pyx_NewRef(Py_True);zUnknown op z(int eq_res = __Pyx_PyObject_IsTrue(ret);z&if (unlikely(eq_res < 0)) return NULL;z"ret = eq_res ? Py_False : Py_True;z"ret = eq_res ? Py_True : Py_False;zPy_INCREF(ret);r   z%ret = order_res ? Py_False : Py_True;z%ret = order_res ? Py_True : Py_False;zreturn ret;zreturn %s(o1, o2);zcase Py_NE: {z#int b = __Pyx_PyObject_IsTrue(ret);z!if (unlikely(b < 0)) return NULL;zret = (b) ? Py_False : Py_True;z
default: {rq  z->tp_richcompare)) return z->tp_richcompare(o1, o2, op);z'return __Pyx_NewRef(Py_NotImplemented);)r?  r:  r   r  rp   r   rR   r.   r  r  r?   r   r  TOTAL_ORDERINGr	   r[   maxrW  upperr  rG  AssertionError)rj   r.   rk  richcmp_cfuncclass_scopesclsextern_parentr  
cmp_methodclass_scoperp   
comp_namesordering_sourcecmp_typeinvert_compcomp_opinvert_equalseq_funcr  s                     @r'   r  z$ModuleNode.generate_richcmp_functionm  sF   ]++ 	F--.>??

2

NQ^^___

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

+,,,

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

KLLL

HIII

,---

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

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

#BCCC

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

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

#ABBB

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

#GHHHH

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

#JKKKK

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

3

=))))

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

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

<===

3

3

3r)   c                                         |j                  j        d         r5|                    dd|j                                                 d S |                                 |                                }|r|                    |           |j        j        t          j	        t          j
        fv rd}dx}n@|j        j        t          j        t          j        fv rd}dd}nt          |d	|z             d S fd
fd} |j        j                  r@ |j        j                  s+t!          |d|j        j        d|j        j        d           t#          t%           |j        j                                      }	t#          t%           |j        j                                      }
|                    t'          j        dd|j        |	|
 ||j        j        d           ||j        j        d          j        j        ||d
          d                    |r|                    d           d S d S )Nc_api_binop_methodsr   r   
binaryfuncrE   ternaryfuncz, extra_argz, PyObject* extra_argz"Unexpected type slot signature: %sc                 R                         |           }|r|j        r|j        nd S r"   )lookupr@  rG  )method_namerp   r.   s     r'   get_slot_method_cnamezAModuleNode.generate_binop_function.<locals>.get_slot_method_cname	  s/    LL--E',K1AK5##tKr)   c                 d     |           }|r|d|rdnddS dj         j        ddS )Nr  zright, leftzleft, rightr  z&_maybe_call_slot(__Pyx_PyType_GetSlot(z', tp_base, PyTypeObject*), left, right )r  r  )r  r  rG  	extra_arg	func_namer  r.   s      r'   call_slot_methodz<ModuleNode.generate_binop_function.<locals>.call_slot_method	  sk    ..{;;J 	JJ%,?MM-?II  II%333II r)   zExtension type implements z() but not z(). The behaviour has changed from previous Cython versions to match Python semantics. You can implement both special methods in a backwards compatible way.	BinopSlotrm  F)r  T)
r  	slot_nameoverloads_leftoverloads_right	call_left
call_right
type_cname	slot_typer  extra_arg_decl)r  r   r   )r:  r  r?   r   	left_slotr;  preprocessor_guard_code	signaturer   r  ibinaryfuncpowternaryfuncipowternaryfuncr   r  
right_slotr	   r%  boolr   r  r  r  )rj   r.   r  rk  r[   preprocessor_guardr  r  r  r  r  r  r  r  s    `         @@@r'   r  z"ModuleNode.generate_binop_function  s   ))$.99	12 	JJJ)))T^5M5Me5T5T5TUVVVF

!99;; 	+JJ)***>#	(<i>S'TTT$I)++I^%)*BID])^^^%I%I4NN#;dBCCCF	L 	L 	L 	L 	L	 	 	 	 	 	 	 	 ! !;<< 	EZEZ[_[j[vEwEw 	CC ***+++	    T"7"78R"S"STTUUd#8#89T#U#UVVWW

-/!*!%&4'6!1!1$.2LV[!\!\!\"2"24?3NX\"]"]"]"'"3"A!*!*&4    	 	 	  	!JJx     	! 	!r)   c                 N   dfd	 dd          } d          } d          }|                     d           |                     d                    d	          z             ||                     d
|j        z             n|s<j        j        r0|j                            t          j        dd                     d}n:|r|dk    r0|j                            t          j        dd                     d}nd}|                     d
|z             |\|                     d           |                     d           |                     d|j        z             |                     d           |                     d           |                     d           d S )Nc                     |j         }|j                            |           }|#|j        r||S |j         | |j                  S |S r"   )r  r.   r?  is_externalr  )ntpextern_returnrlookup_here_or_baser.   s       r'   r  zBModuleNode.generate_getattro_function.<locals>.lookup_here_or_baseH	  sa    z&$$Q''Ay> )m&?((<+..q",???Hr)   r  r  )r  r  r  rE   z/static PyObject *%s(PyObject *o, PyObject *n) {tp_getattrozPyObject *v = %s(o, n);PyObject_GenericGetAttrNoDictr  #__Pyx_PyObject_GenericGetAttrNoDictPyObject_GenericGetAttr__Pyx_PyObject_GenericGetAttrz9if (!v && PyErr_ExceptionMatches(PyExc_AttributeError)) {zPyErr_Clear();zv = %s(o, n);r   z	return v;NN)	r   r:  rG  r  r=  r   rL  r   r(  )rj   r.   rk  has_instance_dictgetattr_entrygetattribute_entrygeneric_getattr_cfuncr  s    `     @r'   r  z%ModuleNode.generate_getattro_functionA	  sM   
	 
	 
	 
	 
	 
	 
	 0/
(SSS++M::001CDD

2

=%%m446	7 	7 	7 )JJ)&134 4 4 4 % B):)H B 11+,KM_``b b b(M%%& B*;x*G*G 11+,EGYZZ\ \ \(G%%(A%JJ),AAC C C$JJKM M MJJ " " "JJ!,./ / / JJ  

	 	 	

	 	 	 	 	r)   c                    |j         j        }|                    d          }|                    d          }|                    d           |                    d|                    d          z             |                    d           |r|                    d|j        z             n.|                     |d dd|           |                    d	           |                    d
           |                    d           |r|                    d|j        z             n.|                     |d dd|           |                    d           |                    d
           |                    d
           d S )Nr  r  rE   z6static int %s(PyObject *o, PyObject *n, PyObject *v) {tp_setattror  zreturn %s(o, n, v);zo, n, vz(return PyObject_GenericSetAttr(o, n, v);r   r  zreturn %s(o, n);z(return PyObject_GenericSetAttr(o, n, 0);r  r  s         r'   r  z%ModuleNode.generate_setattro_function}	  s    %/	%%m44	%%m44	

2

D%%m446	7 	7 	7 	

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

	 	 	

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

	 	 	

	 	 	 	 	r)   c                    |                     d          }|                    d           |                    d|                    d          z             |                    d           |                    d           |                    d           |                    d|j        z             |                    d	           |                    d
           d S )Nr  rE   z<static PyObject *%s(PyObject *o, PyObject *i, PyObject *c) {tp_descr_getzPyObject *r = 0;zif (!i) i = Py_None;zif (!c) c = Py_None;zr = %s(o, i, c);r  r   )r?  r   r:  rG  )rj   r.   rk  user_get_entrys       r'   r  z&ModuleNode.generate_descr_get_function	  s   
 **955

2

J%%n557	8 	8 	8 	

	  	  	 

"	$ 	$ 	$

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

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

	 	 	

	 	 	 	 	r)   c                 P   |j         j        }|                    d          }|                    d          }|                    d           |                    d|                    d          z             |                    d           |r|                    d|j        z             nC|                     |d dd|           |                    d	           |                    d
           |                    d           |                    d           |r|                    d|j        z             nC|                     |d dd|           |                    d           |                    d
           |                    d           |                    d           d S )Nr  r  rE   r  tp_descr_setr  r  r  6PyErr_SetString(PyExc_NotImplementedError, "__set__");r  r   r  r  z9PyErr_SetString(PyExc_NotImplementedError, "__delete__");r  )rj   r.   rk  r  user_set_entryuser_del_entrys         r'   r  z&ModuleNode.generate_descr_set_function	  s    %/	**955**<88

2

D%%n557	8 	8 	8 	

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

	 	 	

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

	 	 	

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

2

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

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

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

2

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

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

	 	 	

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

	 	 	

	 	 	 	 	r)   c           	         |j         }|j        }t          j        d|j        j                  }|                    ||           t          j        d|j        j                  }|                    |          s@|                    d           |	                    ||           |                    d           |                    d|j
        z             t          j        |j        j                  D ]}|                    ||           |                    d           |                    d           |j        r|j        }n
d|j        z  }|j                                        }	|                    d	|j
        z             |                    d
| j        d|	                    d
d          d           |                    d|z             |                    d           |                    dt          j        d|j                                      |          z             |                    d|j
        z             |                    d           d S )N
tp_memberstp_as_bufferz$#if !CYTHON_COMPILING_IN_LIMITED_APIr   z!static PyType_Slot %s_slots[] = {z{0, 0},rB  r|  zstatic PyType_Spec %s_spec = {r?  r   rE   z",zsizeof(%s),z0,r@  tp_flagsz	%s_slots,)rg   r.   r   rd  r   r?   generate_substructure_specis_emptyr   generate_substructurer  r  generate_specrZ  r  
class_namer   rf   r   r;  )
rj   rp   rk  ext_typer.   members_slotbuffer_slotr  	objstruct	classnames
             r'   r  z ModuleNode.generate_typeobj_spec+
  s9   : 1,@P@[\\//t<<<0AQA\]]##E** 	!JJ=>>>--eT:::JJx   

69OOPPP,T-=-HII 	, 	,Dud++++

9

4  	? 0II#h&>>I$88::	

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


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

=9,---

4

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

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

4r)   c                    |j         }|j        }t          j        |j        j                  j        D ]}|                    ||           |                    d           |j	        dk    rd}nd}|                    ||j
        z             |                    d           |j                                        }|                    d| j        d|d           |j        r|j        }	n
d	|j        z  }	|                    d
|	z             |                    d           t          j        |j        j                  D ]}
|
                    ||           |                    d           d S )NrE   r   zDL_EXPORT(PyTypeObject) %s = {zstatic PyTypeObject %s = {zPyVarObject_HEAD_INIT(0, 0)r?  z."z, /*tp_name*/r|  zsizeof(%s), /*tp_basicsize*/z0, /*tp_itemsize*/rB  )rg   r.   r   r  r   r?   substructuresr   r   r   r  r"  r   rf   rZ  r  generate)rj   modnamerp   rk  rg   r.   suiterp  r'  r&  r  s              r'   r  z&ModuleNode.generate_typeobj_definitionK
  s   z
-d.>.IJJX 	5 	5E''t4444

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

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

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


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

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

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

	 	 	 	 	r)   c                    |j         r	|j        sd S |j        d         }|                    d           |                                }|                    d|j        z             |j        D ]*}|j        s!|r|j        s|                    |d|           +|                    d           |                    d           |	                                r|                    d           d S d S )NbindingrE   zstatic PyMethodDef %s[] = {r  )wrapper_code_writerz{0, 0, 0, 0}rB  )
is_c_class_scopepyfunc_entriesr?   r   r  method_table_cnamefused_cfunctionis_overridableput_pymethoddefgetvalue)rj   r@   rk  r.  r/  rp   s         r'   rU  z ModuleNode.generate_method_tablek
  s+    	(: 	F.+

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

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

	 	 	

	 	 	 '')) 	*%%b)))))	* 	*r)   c                    |                     d          }|r|j        sd S |                    d          }|j        }|                    d           |                    d|z             |                     ||           |                    d|z             |                    d|z             |                    d           |                    d|z             |                    d	|z             |                    d           d S )
Nr  __dict__getterrE   r  zif (unlikely(!p->%s)){zp->%s = PyDict_New();r   zPy_XINCREF(p->%s);zreturn p->%s;)r?  is_variabler:  r   r   r  )rj   r.   rk  	dict_attrr  	dict_names         r'   r  z(ModuleNode.generate_dict_getter_function
  s   %%j11	 		 5 	F))*:;;	O	

2

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

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

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

3

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

?Y.///

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



668888*1c11*1c11 	"# # # # JJ!# # #JJ    +	 	r)   c                     t          |j                                                  D ]9\  }}|j        r-|j        r&|j        j        s|j                            |           :d S r"   )r   r   r   
is_cglobalr  rg   r  r+  r   s       r'   r   z5ModuleNode.create_import_star_conversion_utility_code
  sv     "#+"3"3"5"566 	@ 	@KD% @EJ @z- @J::3???	@ 	@r)   c           
      
   |                     t          j        dd                     |                                 |                                 |                    dt
          j        z             |                    d           t          |j        	                                          D ]$\  }}|j
        r|                    d|z             %|                    d           |                    d           |                    d           |                    d	           |                    d
           |                    d           |                    d           |                    d           |                    d           |                    d           |                                }|                    d           d}t          |j        	                                          D ]&\  }}|j        r|j        r|j        j        s|dz  }|dz  dk    r?|                    d           |                    d           |                    d           |                    d|z             |j        j        r|j        j        s|j        j        rL|                    d|j                            d          d|                    |j                  d           |                    d           |                    |j        |j        d           |                    |j        dt1          j        |j        t4          d          d           n|j                            |          r;|                    |j                            d|j        |j        |                     nN|                    d|d |j        d!           |                    |                    |j                             |                    d           (|                    d"           |                    d#t
          j        z             |                    d           |                    d$           |                    |j                  rA|                     |j                   |!                    tE          | j#                             ||_        |                    d%           |                    d&           |                    d           |                    d'           |                    t          j$        d(d)          d                    |%                                 d S )*NCStringEqualsr+  z;static int %s(PyObject *o, PyObject* py_name, char *name) {z,static const char* internal_type_names[] = {"%s",rA  rB  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")) {rp  r5  r6  r   zPy_INCREF(o);Fr  r  z<PyErr_Format(PyExc_TypeError, "Cannot convert Python object  to z");r  z3if (PyObject_SetAttr(%s, py_name, o) < 0) goto bad;r  r  r  rE   
ImportStarr  )&rL  r   r(  r   enter_cfunc_scoper   import_star_setr   r   r   r   new_error_labelrB  r  rg   is_constr  r  r}  type_test_code
error_gotor[   
put_decrefr   r   r  r
   r+  from_py_call_coder.  
label_usederror_label	put_labelput_add_tracebackr   rf   r  exit_cfunc_scope)rj   r@   rk  r   rp   old_error_label
msvc_counts          r'   rV  zModuleNode.generate_import_star
  s   [4_oVVWWW

   

PSYSiijjj

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

7T>***

3

4

BCCC

)***

9:::

WXXX

;

3

>"""

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

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

@4GHHH:) ;z3 9uz7Q 9


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

3

8

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

3

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

6

<   

3

2

;-l<LMMaPQQQr)   c                    |                     d           |                     d|j        z             |                     dt          j        z             |                     dt          j        z             |                     dt          j        z             |                     dt          j        z             |                     dt          j        z             t          j	        "|                     dt          j
        z             t          j        D ]J\  }}|                     d|z             |                     d|z             |                     d           Kd S )Nztypedef struct {r  	#ifdef %sr  r   )r   module_dict_cnamer   builtins_cnamecython_runtime_cnamerE  empty_bytesempty_unicoder   r/  r0  used_types_and_macros)rj   r@   rk  r  	used_names        r'   rX  z&ModuleNode.generate_module_state_start
  s9   

%&&&

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

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

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

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

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

?V%99:::)JJ)??@@@%+%A 	! 	!!J	JJ{Y.///JJ*Z7888JJx    	! 	!r)   c           	         |d         }|d         }|d         }|d         }|                     dt          j        z             |                     d           |                     d           |                     d           |                     d	           |                     d
t          j        z             |                     d           |                     d           |                     dt          j        z             |                     d           |                     d           |                     dt          j        dt          j        d           |                     d           |                     dt          j        dt          j        dt          j        d           |                     d           |                     d|j        dt          j        d           |                     d           |                     dt          j        dt          j        d           |                     d           |                     d           |                     d           |                     d           |                     d           |                     dt          j        dt          j        dt          j        d           |                     d           |                     d           |                     d            |                     d           |                     d           |                     d            |                     d           d S )!Nr=  r>  r?  r@  z} %s;rE   r  #ifdef __cplusplusnamespace {zextern struct PyModuleDef %s;} /* anonymous namespace */r   zstatic struct PyModuleDef %s;r   r   z(o) ((z *)__Pyx_PyModule_GetState(o))z (z(PyState_FindModule(&z)))z (PyState_FindModule(&r.  r  r   z	_static =z    {};z    {0};r   = &z_static;r  r   )r   r   modulestate_cnamepymoduledef_cnamer  r.  )rj   r@   ri  r   r=  r>  r?  r@  s           r'   rd  z$ModuleNode.generate_module_state_end  s   ">2*+AB()=> +,C D7V%==>>>28999/000=))):V=UUVVV89997###:V=UUVVV8$$$2$$$$$$& 	' 	' 	' 	2***$$$$$$& 	' 	' 	' 	2$$$& 	' 	' 	' 	7###$$$***
 	 	 	 	/000 	9%%%7###:&&&8$$$$$$******
 	 	 	
 	8$$$  ---  %%%  ***##K000##C(((##H-----r)   c           	          |                     d|j        dt          j        d|j                   |                     dt          j        dt          j        dt          j                   |                     dt          j        dt          j        dt          j                   |                     dt          j        dt          j        dt          j                   |                     dt          j        dt          j        dt          j                   |                     dt          j        dt          j        dt          j                   t          j
        <|                     dt          j        dt          j        dt          j                   t          j        D ]Z\  }}|                     d|z             |                     d|dt          j        d|           |                     d           [d S )Nr   r   r  rY  r   )r   rZ  r   r  r[  r\  rE  r]  r^  r   r/  r0  r_  )rj   r@   rk  r   r`  s        r'   rY  z(ModuleNode.generate_module_state_defines;  sO   


!!!***!!# 	$ 	$ 	$ 	


!!!***!!# 	$ 	$ 	$ 	


'''***'') 	* 	* 	* 	


***  	! 	! 	! 	


***  	! 	! 	! 	


   ***  " 	# 	# 	# )JJJ&&&...&&( ) ) ) !' < 	! 	!E9JJ{Y.///JJJ...    JJx    	! 	!r)   c                    |                     d           |                     dt          j        z             |                     t          j        dt          j        d           |                     d           |                     d|j        z             |                     dt          j        z             |                     dt          j        z             |                     dt          j        z             |                     dt          j        z             |                     dt          j	        z             |                     d           |                     dt          j
        z             |                     d           |                     d	           |                     dt          j        z             |                     d           d S )
Nr  z"static int %s_clear(PyObject *m) {z *clear_module_state = (m);z"if (!clear_module_state) return 0;r  #ifdef __Pyx_CyFunction_USEDr   #ifdef __Pyx_FusedFunction_USEDr   r   r.  rf  rZ  r[  r\  rE  r]  r^  cyfunction_type_cnamefusedfunction_type_cnamerI  s      r'   rZ  z&ModuleNode.generate_module_state_cleara  s   

0111

7&:MMNNN

$$$$$$& 	' 	' 	' 	

7888

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

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

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

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

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

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

1222

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

8

4555

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

8r)   c                    |                     d           |                     dt          j        z             |                     t          j        dt          j        d           |                     d           |                     d|j        z             |                     dt          j        z             |                     dt          j        z             |                     dt          j        z             |                     dt          j        z             |                     dt          j	        z             |                     d           |                     dt          j
        z             |                     d           |                     d	           |                     dt          j        z             |                     d           d S )
Nr  zAstatic int %s_traverse(PyObject *m, visitproc visit, void *arg) {z *traverse_module_state = rj  z%if (!traverse_module_state) return 0;r  rk  r   rl  rm  rI  s      r'   r[  z)ModuleNode.generate_module_state_traverse}  s   

0111

VY_Yllmmm

$$$$$$& 	' 	' 	' 	

:;;;

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

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

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

9 	  	  	 

9 	  	  	 

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

1222

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

8

4555

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

8r)   c                 #   |                      | j        | j        |          }|                     ||           |                    | j                   |                    d           |                    t          j        dd          d                    |j        	                                r
|j        }d}n1d}|j        
                    dd	                              d
          }d|z  }d|                     d|          z  }t          |          }|                    d           |                    d|z             |r|                    d           | j        j        rB|                    d           |                    d|z             |                    d           |                    |           |                    d           |                    d|z             | j        j        rV|                    d           |                    d|                     d|          z             |                    d           |                     |j                  }	|	rB|                    d           |                    d|	z             |                    d           |                    |           |                    d           |                    d           |                    dt           j        z             |                    d           t          j        dd          d         }
|                    |
           |                    d           |                    d|                                 dt           j        d           |                    d           |                    d           |                    d           |                    d            |                    d!           |                    d"           |                    d           |                                }|j        j        d#         }|j        j        d$         }|s|rC|r|                                 |j                            t          j        d%d&                     |                                 |                    d           |                    d't           j        z             |                    d(t           j        d)t           j        d*           |                    d+|j                                        dd,         z             |                    d-           |                    d           |                    d.           |                    d(t           j        d/t           j        d0           |                    d           |                    d1           |                     ||           |s|r(|                                 |                                  t          j        d2d          d         }|                    |!                                           |"                    |           |                    t          j#        d3d                     |$                    | j        d4           |                    d5           |                    d6           |                    d           |                    t           j%        d7|&                    t           j%        | j                             |                    t           j'        d8|&                    t           j'        | j                             |                    t           j(        d9|&                    t           j(        | j                             d:D ]V}|                    d;|z             |$                    | j        d<|d=|j        d           |                    d           W|                    d>           |j        d?         r|$                    | j        d@           |                    dA           |                    dB           |                    dC           |                    d           |                    dD           |$                    | j        dE           |                    dF           |$                    | j        dG           |                    dH           |$                    | j        dI           |                    d           |                    d'| )                                z             |$                    | j        dJ|j        dK|*                    t          dL                    dK|*                    t          dM                    d           |                    d           | +                    ||           tX          j-        r0|                    dN           |$                    | j        dO           |                    dP           |$                    | j        dQ           |                    dR            |dS          5 }| .                    ||           d d d            n# 1 swxY w Y    |dT          5 }| /                    ||           d d d            n# 1 swxY w Y    |dU          5 }| 0                    ||           d d d            n# 1 swxY w Y    |dV          5 }| 1                    ||           d d d            n# 1 swxY w Y    |dW          5 }|D ]}| 2                    |||           	 d d d            n# 1 swxY w Y    |dX          5 }|D ]}| 3                    |||           	 d d d            n# 1 swxY w Y    |dY          5 }|D ].}| 4                    |           | 5                    |||           /	 d d d            n# 1 swxY w Y   |                    dZ           |6                    d            |                    d[           |$                    | j        d\           |                    d           |s|r4|7                    || j        |j8        j9         ]           d|j8        _:        |6                    d            | j;        <                    |           |6                    d            |s|r.d|j8        _:        |=                    d^|j8        j9         ]           |                                 |                    d_           | >                    ||           |                                 tX          j?        r]|j                            t          j        d`d                     |                    da|@                    | j                  z             |A                    |jB                   |C                    |jD                   |j8        E                                D ]\  }}|F                    ||           |                    d'|j        z             |                    db|jG        z             |H                    t          dc|jI        z                       |j                            t          jK                   |                    d           |                    dd           |L                    |j        t          dde           |                    d           |N                    |j        t          df           |                    dg           |                    dh           |                    di           |                    djt           j        z             |                    dk           |                    d           |                    d           |                    dl           |                    dm|jI                                        dd,         z             |                    d           |C                    |jB                   |O                                 |                    d           |                    dn|j        z             |                    d.           |                    do|j        z             |                    d           |                    dp           |                    d           |                    d           |P                    |j8                   |Q                                 d S )qNrE   PyModInitFuncTyper<  r   FTr   r   r   r  z!__Pyx_PyMODINIT_FUNC init%s(void)z__Pyx_PyMODINIT_FUNC %s(void)r   r   z%s CYTHON_SMALL_CODE; /*proto*/r   zc#if !defined(CYTHON_NO_PYINIT_EXPORT) && (defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS))z5__Pyx_PyMODINIT_FUNC init__init__(void) { init%s(); }r   r   z;__Pyx_PyMODINIT_FUNC PyInit___init__(void) { return %s(); }zHvoid %s(void) {} /* workaround for https://bugs.python.org/issue39432 */"#if CYTHON_PEP489_MULTI_PHASE_INITr3  zreturn PyModuleDef_Init(&%s);r   ModuleCreationPEP489r   zstatic CYTHON_SMALL_CODE int z(PyObject *r  zint stringtab_initialized = 0;r  zint pystate_addmodule_run = 0;profile	linetraceProfilez	Profile.cr  r  z == z) return 0;zrPyErr_SetString(PyExc_RuntimeError, "Module '%s' has already been imported. Re-initialisation is not supported.");rA  r  z#elif PY_MAJOR_VERSION >= 3z) return __Pyx_NewRef(r  z /*--- Module creation code ---*/ImportRefnannyAPICheckBinaryVersionzs__Pyx_check_binary_version(__PYX_LIMITED_VERSION_HEX, __Pyx_get_runtime_version(), CYTHON_COMPILING_IN_LIMITED_API)z'#ifdef __Pxy_PyFrame_Initialize_Offsetsz#__Pxy_PyFrame_Initialize_Offsets();z = PyTuple_New(0); z% = PyBytes_FromStringAndSize("", 0); z' = PyUnicode_FromStringAndSize("", 0); )
CyFunctionFusedFunction	Coroutine	GeneratorAsyncGenStopAsyncIterationz#ifdef __Pyx_%s_USEDrW  z_init(z)/*--- Library function declarations ---*/
np_pythranz_import_array()z'/*--- Threads initialization code ---*/zx#if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADSzPyEval_InitThreads();z4/*--- Initialize various global constants etc. ---*/z__Pyx_InitConstants()zstringtab_initialized = 1;z__Pyx_InitGlobals()zp#if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT)z*__Pyx_init_sys_getdefaultencoding_params()zPyObject_SetAttr(r  __name____main__z/*--- Builtin init code ---*/z__Pyx_InitCachedBuiltins()z/*--- Constants init code ---*/z__Pyx_InitCachedConstants()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 ---*/zB#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED)z__Pyx_patch_abc())nogilPy_Nonez/*--- Wrapped vars code ---*/RegisterModuleCleanupzif (__Pyx_RegisterCleanup()) %sz"if (%s && stringtab_initialized) {zinit %sr  r  rn  r  zif (pystate_addmodule_run) {zPyObject *tp, *value, *tb;zPyErr_Fetch(&tp, &value, &tb);zPyState_RemoveModule(&%s);zPyErr_Restore(tp, value, tb);z} else if (!PyErr_Occurred()) {z.PyErr_SetString(PyExc_ImportError, "init %s");zreturn (%s != NULL) ? 0 : -1;z
return %s;zreturn;)Rmod_init_subfunctionr[   r.   generate_pymoduledef_structrI  r   r   r  rh   r   r   r   r   r   
is_packagewrong_punycode_module_namer   rg  r  module_init_func_cnamepymodinit_module_argr  r   r?   use_fast_gil_utility_coderL  r(  put_declare_refcount_contextr.  r   generate_module_creation_codeput_trace_declarationsput_trace_frame_initr   put_setup_refcount_contextloadput_error_if_negrE  error_goto_if_nullr]  r^  rN  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_modulerS  put_trace_call	funcstate	gil_owned	can_tracerL   generate_execution_codeput_trace_returngenerate_wrapped_entries_codegenerate_cleanup_coderN  put_gotoreturn_labelrS  rR  all_managed_tempsput_xdecrefrZ  rT  r   r   traceback_utility_coderH  r
   rO  put_finish_refcount_contextput_temp_declarationsrU  )rj   r  r@   rk  subfunctionr   fail_compilation_in_py2header2header3r  mod_create_functempdecl_coderu  rv  refnanny_import_coder#  
inner_coder   r   rg   s                       r'   r\  z$ModuleNode.generate_module_init_func  sp   //$*dKK((d333tz***

2

;-.ACVWWXYZ[[[?""$$ 	[?L&+##&*#?11'(1KKRRSYZZL5D1D4L4LXWZ4[4[[((

-...

4w>???" 	WJJUVVV:  	!JJ|}}}JJNQ]]^^^JJx   

7

7

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

7 	

7888

3

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

3%45KM`aabcd!!!

2


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

8

8 	

3

3444

0111

3444

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

7888 	

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


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

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

<   

3

0111


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

8

5666**3555 	(i 	(00222%%'''*9:MObccdef

'..00111''000[-.BDWXXYYYdh )K 	
 	
 	
 	

<===

8999

8

 7 78JDH U U UW 	X 	X 	X

 7 78JDH U U UW 	X 	X 	X

   $"9"9&:NPTPX"Y"Y"Y[ 	\ 	\ 	\ t 	! 	!HJJ-8999!!$((888SM]M]M],^___JJx    

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

<===

 V 	W 	W 	W

*+++

8

IJJJdh(?@@@

/000dh(=>>> 	

 ? 	@ 	@ 	@dh(TUUU

8

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

3 	))#t444! 	JJJ6777!!$(,HIII

4555dh(EFFF

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

/000d

WXXXdh(;<<<

8 	,i 	,T^=U9UVVV'+DN$d	))$///d 	Qi 	Q',DN$!!)t~7O3O!PPP



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

( 	V--'(?ATUUW W WJJ84??48;T;TTUUUd'(((t'(((>;;== 	* 	*KE4UD))))

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

7#:OOPPP 	}Y9K-KLLMMM))%*FGGG 	

3

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

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

1222

/000

3444

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

2333

3

8

4555

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

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

7888

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

0111

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

7

9

8

3++DN;;;s~   k''k+.k+=l  l$'l$6mm m/nnn(ooo(ppp(2q''q+.q+c                                                                          d                                                                d            G fddt                    }|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).
        rE   c                   2    e Zd Zd Z fdZ fdZdS );ModuleNode.mod_init_subfunction.<locals>.ModInitSubfunctionc                     d                     |                                                                          }t          j        d|          sJ d|z  | _        || _        d | _        d | _        d S )Nr  z^[a-z0-9_]+$z__Pyx_modinit_%s)	r  r&  r  r   match
cfunc_namedescriptionr  	call_code)rj   	code_typer   s      r'   __init__zDModuleNode.mod_init_subfunction.<locals>.ModInitSubfunction.__init__  sh    !2!2!8!8!:!:;;x66666"4u"<#, %)"!%r)   c                                                     | _        }|                                                   d| j        z             |                    d| j        z             |                                 |                                 | _        |                    t          | j                             |                    d| j	        z             |S )Nz0static CYTHON_SMALL_CODE int %s(void); /*proto*/r  z/*--- %s ---*/)
r  r  rI  r   r  r  r  r  r   r  )rj   rk  function_code	orig_code
prototypesr.   s     r'   	__enter__zEModuleNode.mod_init_subfunction.<locals>.ModInitSubfunction.__enter__  s    !*!:!:!<!<$&&u---  !SVZVe!efff

2T_DEEE11333%)%9%9%;%;"//do0N0NOOO

+d.>>???r)   c                    }|                                  |                    d           | j                            |j                   d | _        |                    |j                  }|rx|                    |j                   |j                                        D ]\  }}|	                    ||           |                                  |                    d           |                    d           |
                                 |                    d           |r<| j                            | j                            d| j        z                       n"| j                            d| j        z             d | _        d S )Nr  r  r   rE   z%s()z(void)%s();)r  r   r  r  r  rQ  rR  rS  r  r  rU  r  error_goto_if_negr  )rj   r  rk  needs_error_handlingr   rg   r  r[   s         r'   __exit__zDModuleNode.mod_init_subfunction.<locals>.ModInitSubfunction.__exit__  s   $00222

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

3%%'''

2' JN((88$/9QSVWWY Y Y Y N(()HIII!%r)   N)r  
__module____qualname__r  r  r  )r  r  r[   r  r.   s   r'   ModInitSubfunctionr    sj        & & &       & & & & & & & &r)   r  )r  r   object)rj   r[   r.   r  r  r  r  s    ``` @@r'   r  zModuleNode.mod_init_subfunction  s     ..00
!1133B.	& .	& .	& .	& .	& .	& .	& .	& .	& .	& .	& .	& .	& .	&` "!r)   c                 `   |j         d         }|dk    r| j        d         j        }|r|                    d           |                    d|j        d|j                            t          t          |                              j	        d|
                    | j                  d           |                    d	           |j        r`|                    d           |j                            t          d
          }|                    |d|j                            t          t          t          j                            |                                        j	        d|                    || j                             |                    |t                     |                    d|j        d|d|
                    | j                  d           |                    |t                     |j                            |           |                    d	           n|j        r|                    d           |j                            t/          j        dd                     |                    |                    d|j                            t          | j                            j	        z  | j                             |                    d	           | j        }|                    d          r%t          |d t9          d                              }|                                }|                    d           |                    d           |                    d|                    d| j                  z             |                    d|z             |                    |                    d|d|j        d| j                             |                    d	           |                    d	           |                    d           d S )Nset_initial_path
SOURCEFILEr   z&if (!CYTHON_PEP489_MULTI_PHASE_INIT) {if (PyObject_SetAttrString(z, "__file__", ) < 0) r   r   Tz = Py_BuildValue("[O]", ); z, "__path__", SetPackagePathFromImportLibr  z%__Pyx_SetPackagePathFromImportLib(%s)z	.__init__r  r3  z0PyObject *modules = PyImport_GetModuleDict(); %sri  z)if (!PyDict_GetItemString(modules, %s)) {zPyDict_SetItemString(modules, r  r  r   )r?   r[   r  r   r.  r   get_py_string_constr   r   r   rN  r  r  allocate_tempr
   r   r$   r  r  
put_gotrefrH  release_temprL  r   r  r  rf   endswithr  r   )rj   r@   rk  module_pathtempfq_module_namefq_module_name_cstrings          r'   r  z'ModuleNode.generate_module_import_setup  s:   n%78,&&(1+.K &	JJ?@@@JJJ    44!/+">">??A AAFG G))))	+ , , ,
 JJsOOO~  

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

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


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

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

.///

3

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

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

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

3

3

8r)   c                    t           j        sd S |                    dt          j        z             |                    |           t           j        dk    r|                    d           t          |j                  }|                                 |D ]C}|j	        dk    r6|j
        j        r*|j        r#|                    |j        |j
        dd           D|                    d           t           j        d	k    r^|                    d
           t          |j        t#          j        d                    D ] }|                    |j        |dd           !t           j        rG|                    d           |j        D ]*}|                    |j        t,          j        dd           +|                    d           |                    t          j        t,          j        dd           |j        D ]p}|j
        }|j        s|j        r|j        j                            dd          r6|j        }|                     t          j!                  }|                     t          j"                  }	|                    d           |                    d|	z             |                    d|d|	d           |                    d           |                    d           |                    d           |                    d           |                    d           |                    d           |                    d           |                    d           rt           j#        (|                    t          j$        t.          dd           t          j%        t          j&        fD ] }
|                    |
t.          dd           !|                    |j'        t.          dd           d S )Nz.static void %s(CYTHON_UNUSED PyObject *self) {r   z/*--- Global cleanup code ---*/r  TF)rn  r  z__Pyx_CleanupGlobals();   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*)r/  r0  rt  ru  r   rv  rw  r   r   r  )(r   r  r   r   cleanup_cnamerI  r  r   r  r   rg   r  r  r|  r   r   types_importedr  r  r  r  cached_builtinsr   r
   rH  rE  re   r  r  r.   r?   r  r:  rB  rC  r/  r0  r\  r[  rZ  )rj   r@   rk  rev_entriesrp   r#  cclass_typer.   rB  rC  r   s              r'   r]  z'ModuleNode.generate_module_cleanup_func0  s*   , 	F

C'( 	) 	) 	)s###(A--JJ8999s//K!!!$ ) )#x//z- )%* )..!K04"' / ) ) ) 	

,---(A--JJ=>>>"3#58;N;_;_``` ! !&&*H(, ' ! ! ! ! ! 	!JJ9:::, ! !&&K!:(, ' ! ! ! ! 	

4555f0(726$) 	 	+ 	+ 	+ ( 	% 	%E*K& +*?  +//
A>> %#) % 5 5f6J K K!&!6!6v7L!M!M

5666

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


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

RSSS

7888

7###

abbb

5666

8$$$

3

8$$$ )!!&"8.(-4 " I I I163HI 	` 	`E!!%uZ^!____c3^5fjkkkkkr)   c                    |                                  }t          j        dk    rd}nt          j        }t          j        dd          }|j                            |                    |j        |t          j        |                     d S )NmainwmainMainFunctionzEmbed.c)rh   rl  rD  wmain_method)	rN  r   r^  r   r(  r   rL  
specializerh   )rj   r@   rk  rl  r  rD  s         r'   r_  zModuleNode.generate_main_method  s    7799=F""EEME!-niHH))""O-#M"	 # $ $	% 	% 	% 	% 	%r)   c                    	 d|                     d                              d          z   }nO# t          $ rB d|                     d                              dd                              d          z   }Y nw xY w||S )Nr  r   U_punycode   -   _)r   r   UnicodeEncodeErrorr   )rj   r   r   s      r'   r   zModuleNode.punycode_module_name  s    	VW--44W===DD! 	V 	V 	V$++j1199$EELLWUUUDDD	V&&s   +. A	A:9A:c                     	 |                     d           d S # t          $ rE dd|z                        d                              dd                              d          z   cY S w xY w)Nr   PyInitUr  r  r  r  )r   r  r   r   )rj   r   s     r'   r  z%ModuleNode.wrong_punycode_module_name  s    	bKK   4! 	b 	b 	bT	11*==EEdDQQXXY`aaaaaa	bs    AA('A(c                 8    |                      ||j                  S r"   )r   rh   )rj   r   r@   s      r'   r   zModuleNode.mod_init_func_cname  s    ((AAAr)   c                 P    | j         }|                     t          j        |          S r"   )r.   r   r   pymodule_exec_func_cnamer}   s     r'   r  z!ModuleNode.module_init_func_cname  s"    j''(GMMMr)   c                 
   |j         rd|                    |j                   z  }nd}t          j        rdt          j        z  }nd}|                    d           |                    d           |                    d           |                                 }|                    dt          j        z             |                    d	|z             |                    d
t          j	        z             |                    dt          j        z             |                    d|z             |                    d           |                    d           |j
                                        s*|                    d           |                    d           |                    d           |                    d           |                    d           |                    d           |                    dt          j        z             |                    d           |                    dt          j        z             |                    d           |                    d           |                    d           |                    d|j
                                        z             |                    d|z             |                    d           |                    d           |                    d           |                    dt          j        z             |                    d           |                    d           |                    d           |                    d|j        z             |                    d           |                    d t          j	        z             |                    d           |                    d!           |                    d           |                    d"           |                    d#t          j        z             |                    d$t          j        z             |                    d%|z             |                    d           |                    d&           |                    d'           |                    d%|z             |                    d           |                    d           |                    d           |                    d(           |                    d           |                    d           d S ))N%srA  z(freefunc)%sNULLrE   r  rs  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},z	{0, NULL}rB  z*#else /* CYTHON_PEP489_MULTI_PHASE_INIT */zT#error "Unicode module names are only supported with multi-phase init as per PEP489"r   rb  rc  zstruct PyModuleDef %s =r   zstatic struct PyModuleDef %s =r3  z  PyModuleDef_HEAD_INIT,z  %s,z  %s, /* m_doc */z  0, /* m_size */#elif CYTHON_USE_MODULE_STATEz  sizeof(%s), /* m_size */z  -1, /* m_size */z  %s /* m_methods */,z  %s, /* m_slots */z  NULL, /* m_reload */r  z  %s_traverse, /* m_traverse */z  %s_clear, /* m_clear */z  %s /* m_free */z  NULL, /* m_traverse */z  NULL, /* m_clear */rd  )rx   get_string_constr   r  r   r  r   r  pymodule_create_func_cnamepymoduledef_slots_cnamerh   r   rg  r   rf  r2  r.  )rj   r@   rk  rx   cleanup_funcexec_func_cnames         r'   r  z&ModuleNode.generate_pymoduledef_struct  s   7 	..sw777CCC( 	")F,@@LL!L

2

.///

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

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

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

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

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

.@AAA

;

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

8

2

'(((

=!!!

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

7

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

8

3

-...

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

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

7888

&'''

2333

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

7

'(((

8

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

7888

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

7

+,,,

8

0111

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

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

&5666

7

-...

*+++

&5666

8

4

'(((

0111

8

8r)   c                 	   |j         rd|                    |j                   z  }nd}|                    d           |                    |j        dt          j        d           |                    |j        t          d           |                    d           |                    d	           |                    |j        d
|j        	                                d|j
        d|d|j        d
           |                    |                    |j        | j                             |                    d           |j                            t          d          }|                    |dt          j        d|                    || j                             |                    d           |                    d|dt          j        d           |                    |d|d|j        	                                d           |                    |                    d| j                             |                    d           |                    d           |j                            |           |                    d           |                    |j        dt          j        d           |                    |                    |j        | j                             |                    d           |                    d           |                    d|z             |                    |j        d|j        d|                    |j        | j                             |                    |j        t          d           |                    t          j        d|                    t          j        | j                             |                    t          j        d|                    t          j        | j                             |                    d |j        d!t          j        d"|                    | j                             t,          j        V|                    t          j        d#t,          j        d$|                    t          j        | j                             d S d S )%Nr  rA  rs  r  r   Fr  r   r   z = Py_InitModule4(r  z%, 0, PYTHON_API_VERSION); Py_XINCREF(r  r  
manage_refz = PyModule_Create(&r  r3  z*int add_module_result = PyState_AddModule(z, &z! = 0; /* transfer ownership from rG  z pseudovariable */add_module_resultzpystate_addmodule_run = 1;r   r   zCYTHON_UNUSED_VAR(%s);z = PyModule_GetDict(z; = __Pyx_PyImport_AddModuleRef(__Pyx_BUILTIN_MODULE_NAME); zA = __Pyx_PyImport_AddModuleRef((const char *) "cython_runtime"); r  z, "__builtins__", r  z  = __Pyx_PyImport_AddModuleRef("z"); )rx   r  r   r.  r   r  
put_increfr
   rh   r   r2  r  r[   r  r  rg  r  r  rZ  r[  r\  rN  r   r/  r0  )rj   r@   rk  rx   module_temps        r'   r  z(ModuleNode.generate_module_creation_code  s    7 	..sw777CCC

7888

''') 	* 	* 	* 	(.FFF

7

-...

   335555&&&   "	# 	# 	# 	

4**3+;TXFFGGG

2333n22>e2TT

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

3


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

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

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

/000

3##K000

7

   (((*	+ 	+ 	+ 	

4**3+;TXFFGGG

8

8

+k9:::

%%%s'7'7'7''(=txHHHJ	K 	K 	K 	-~UKKK

%%%''(=txHHHJ	K 	K 	K 	

+++''(CTXNNNP	Q 	Q 	Q 	


   %%%)))+	, 	, 	,
 )JJ***&&&++F,BDHMMMOP P P P P *)r)   c                 t    |j         D ]/}|j        dk    r"|j        r|j                            ||           0d S Nr  )r   r   r  rg   global_init_code)rj   r@   rk  rp   s       r'   r  z$ModuleNode.generate_global_init_code?  sP     _ 	= 	=E8++: =J//t<<<	= 	=r)   c                 ~   t          |j                                                  D ]\  }}|j        r|j        s|j        |u r|j                            |          st          |j	        d|j        z             |
                    d           |
                    d|j        j        d|j        d           |
                    |                    d|j	                             |
                    d|j        d|d	|                    |j	                  d
           |
                    d           d S )Nz$Cannot convert '%s' to Python objectr3  zPyObject* wrapped = r  r  wrappedr  r  z", wrapped) < 0) r   r   )r   r   r   r   r   r.   rg   r*  r   r[   r   to_py_functionr   r  r.  rN  )rj   r@   rk  r   rp   s        r'   r  z(ModuleNode.generate_wrapped_entries_codeG  sL   !#+"3"3"5"566 	  	 KD%$  !M s**z;;C@@ Z%)%Kej%XYYY

3


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

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


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

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


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


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


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


(((
668888
33555511134 4 4 4 !!$777N''-----+	. 	.r)   c           	      x   t          |          5 }|j        D ]}|j        dk    r+|j        s$|                     ||j        |j        ||           8|                     ||||           |                     ||           |j        j	        r| 
                    ||           	 d d d            d S # 1 swxY w Y   d S r  )r  re   r   utility_code_definitionr  rg   r[   generate_base_type_import_code!generate_exttype_vtable_init_code
early_initgenerate_type_ready_code)rj   r@   rk  r'  rp   s        r'   r  z"ModuleNode.generate_type_init_code  s1    #4(( 	C,<, C C#x//8U/223
EItUeffff77UDJZ[[[::5$GGGz, C55eTBBBC	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	Cs   BB//B36B3c                     |j         j        }|rE|j        |j        k    r7|j        s2|j        s-|j        s(|                     ||| j        ||           d S d S d S d S d S d S r"   )	rg   r  rh   r   r}  is_cython_builtin_typer  r  r[   )rj   r@   rp   rk  r'  r  s         r'   r  z)ModuleNode.generate_base_type_import_code  s    J(	 	])/33EEE* F.7.N F6 F **3	48TK[\\\\\	] 	]EEEEEEEEr)   c                    ||j         v rd S |j        t          j        vr-|j                            t          j        dd                     |                     ||||           |j	        ru|j                            t          j        dd                     |
                    |j	        d|j        d|j        d|                    |j	        |                     |j                             |           d S )Nr  r  )	error_pos	GetVTablez = (struct z*)__Pyx_GetVtable(r  )r  r   r   ctypedef_builtins_mapr   rL  r   r(  r   r  r   r  r  r  r  )rj   r@   rg   r[   rk  r'  s         r'   r  z$ModuleNode.generate_type_import_code  s*    3%%%F9D666--'6FGGI I I&&tT3Cs&SSS 	C--'5EFFH H HJJ"""%%%"""''(:C@@@	B C C C
 	t$$$$$r)   c           
      J   |j         r|j        }n
d|j        z  }|}|j        }d x}	}
|dvrd|z  }n|j        t          j        v r9t          j        |j                 }|                    |j        d|d           d S d}|j        t          j        v rt          j        |j                 \  }	}
|t          j	        v rt          j	        |         }|s|J |
                    |          }|                    ||          }|                    |j        dt          j        d|d	|d
           |j                                        }|	r|
r|                    d           |                    d|	z             |                    d|
z             |                    d           |                    d|z             |                    d           n|                    d|z             ||k    r|	s|                    d           |                    d           |                    d|dt          j        d|d           |                    d           |                    d|dt          j        d|d           |                    d           |                    d|dt          j        d|d           |                    d           n)|                    d|dt          j        d|d           |j        r|j        dv r|j        }n3|j        r|j        rd}n"t'          d|j        d|d|j                  |                    d|                                dt          j        d           |                    d|j        d |           d S )!Nr|  )__builtin__builtins"%s"r  r   __Pyx_BUILTIN_MODULE_NAMEz = __Pyx_ImportType_r  r  r  rE   r^  rE  r   r@  r   z %s, z>#if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000zsizeof(z), __PYX_GET_STRUCT_ALIGNMENT_z),z%#elif CYTHON_COMPILING_IN_LIMITED_API)r   warnr   r   zinvalid value for check_size 'z' when compiling r   __Pyx_ImportType_CheckSize_r  r  z if (!r  )rZ  r  rh   r   r   r%  r   r  non_portable_builtins_mapbasicsize_builtins_maprN  r  r  r   r  r   
check_sizer  is_subclassedRuntimeErrorr'  )rj   rg   rk  r'  r  r#  r&  sizeof_objstructrh   	conditionreplacement	ctypenamer   	type_namer/  s                  r'   r   z$ModuleNode.generate_type_import_call  s3    	;,II#d&::I$&"&&	K999 ;.KKY$444249=IJJT%7%7%7CDDDF5KyD:::)-)G	)R&	;D777#'#>y#I  	4(((33J!11+zJJFFKK	 	 	 	 I1133	 	* 	*JJrNNNJJx)+,,,JJw,---JJwJJuy()))JJx    HHWy()))y(( 

2JJWXXXJJJ		6+++YYY8 9 9 9JJ>???JJJ		6+++YYY8 9 9 9JJwJJJ   &"2"2"24D4D4DF G G GJJx    HHH		6+++YYY8 9 9 9 ? 	:t2MMMJJ! 	:T%7 	: JJ,dii 9 : : : 0 0 02 	3 	3 	3 	


T%7%7%7DEEEEEr)   c                 F    t           j                            ||           d S r"   )r   CClassDefNoder  )rj   rp   rk  s      r'   r  z#ModuleNode.generate_type_ready_codeF  s!    44UDAAAAAr)   c                 x    | j                             dd          }|                     t          j        |          S r   )rf   r   r   r   rl  )rj   rf   s     r'   rN  z$ModuleNode.is_main_module_flag_cnameI  s5    088dCC(()>@PQQQr)   c           
         |j         }|j        r|                    |j        d|j        d           |j        rC|j        j        r7|                    |j        dt
          j        d|j        j        d           d |j        j        D             }|rX|D ]W}|j	        p|j         }|
                                }|                    |j        d|j        d||j        d           Td S d S d S )Nre  r   r   z = *c                      g | ]}|j         	|S r   )rG  r%  s     r'   r   z@ModuleNode.generate_exttype_vtable_init_code.<locals>.<listcomp>]  s1      %  %  %# % %  %  %r)   r  )rg   r  r   r  r  r   r  r.   r   vtable_typesignature_cast_stringr   rG  )rj   rp   rk  rg   c_method_entries
meth_entryr<  casts           r'   r  z,ModuleNode.generate_exttype_vtable_init_codeM  sf    z 	4JJ&&&%%%'( ( ( ~ 7$."> 7

)))---44467 7 7 %  %#':#; %  %  %   	4"2 4 4J","8"KJOK&<<>>DJJ ---&,,, D&111	34 4 4 4'	4 	4	4 	44 4r)   )F)TTr  )tr  r  r  child_attrsr?   rZ   r\   ri   rr   r|   r   r   r   r   r   r   r   r   r   r   r   rh  rg  r   r  r  r   r  ra  staticmethodr  rI  r   r   r   r`  rJ  r   r[  rR  rf  rO  rr  rT  rU  rS  r  r  r  r  r  r  r  r  r  rQ  rT  r  r  r  r  r  r{  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rU  r  r  r   rV  rX  rd  rY  rZ  r[  r\  r  r  r]  r_  r   r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  rN  r  r   r)   r'   rK   rK   o   sQ        (KJI1' 1' 1' 1'f  , , ,$	4 	4 	45 5 5  2 2 2 2f( f( f(PD D D+ + +Y Y Yv! ! !  ZD ZD ZDx'\ '\ '\R  *$ $ $  @** ** **X	/ 	/ 	/I I I6S S S. K K \KAa Aa AaF  .  
	2 	2 	2 	2  "   C  C  CD! ! !N N N+ + +I I I  
% % %>h h hT!A !A !AF  $  .
% 
% 
%F F FR R R
*` *` *`X## ## ##J1. 1. 1.fM M M     <) <) <)|$ $ $0 0 0` ` `D! ! !,^ ^ ^@   ; ; ;zB B BH  (8 8 8t2 2 2&: : :xO O ObA! A! A!F: : :x& & &P  8* * *XA A A  % % %N  @  @* * *,     2@ @ @B  B  B H! ! ! 3. 3. 3.j$! $! $!L  8  8X  X  X t>" >" >"@; ; ;zNl Nl Nl`% % %' ' 'b b bB B BN N NB B BHOP OP OPb= = =     &0 0 0"0 0 0*g g g
@ 
@ 
@. . .>. . .:C C C] ] ]% % %*JF JF JF JFXB B BR R R4 4 4 4 4r)   rK   c                   ,    e Zd ZdZddZd Zd Zd ZdS )r  z
    Helper to generate module import while importing external types.
    This is used to avoid excessive re-imports of external modules when multiple types are looked up.
    Nc                     || _         i | _        |r'|                                D ]\  }}|| j        d|z  <   g | _        d S )Nr)  )rk  importedr   temps)rj   rk  r  r   r   s        r'   r  zModuleImportGenerator.__init__q  sU    	 	5/5577 5 5e/4ftm,,


r)   c           	      @   || j         v r| j         |         S | j        }|j                            t          d          }| j                            |           |                    |d|d|d|           |                    |t                     || j         |<   |S )NTr   z = PyImport_ImportModule(z); if (unlikely(!r6  )	rE  rk  r  r  r
   rF  rR   r   r  )rj   module_name_stringr  rk  r  s        r'   r  z%ModuleImportGenerator.imported_moduley  s    ..=!344y~++Nt+LL
$

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

MMIFF 	 	 	 	 	1 2N2Nr)   Refnannyr<  zj
#if defined(__GNUC__)
#define __Pyx_PACKED __attribute__((__packed__))
#else
#define __Pyx_PACKED
#endif
rE   utility_code_proto_before_types)protoimplproto_block)7
__future__r   cythondeclarer  collectionsr   r  r  r   r   r+   r   r   rE   r   r   r   r   r   r   r   r   Errorsr   r	   r   r
   Utilsr   r   r   r   r   r   r   r   StringEncodingr   r   r    r(   r#   r2   r6   rB   r  Node	BlockNoderK   r  r  r  rM  rx  r   r)   r'   <module>r^     s(  
 ' & & & & &  ff6VFPV#0 0 0 0 $ # # # # #   				 				 



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