
    ڏDj&                       d dl Z  e j                  eeeeeeeeee
       d dlmZ d dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZmZmZmZ ddlmZmZ ddlm Z m!Z!m"Z"m#Z#m$Z$ ddlm%Z%m&Z&m'Z' ddl(m)Z)m*Z*m+Z+ ddlm,Z, d Z-d Z.d Z/d Z0d Z1ddddd dddddd dd!Z2 G d" d#      Z3 G d$ d%ejh                  ejj                        Z6d& Z7d'ejp                  fd(Z9d'ejp                  fd)Z:d* Z; G d+ d,      Z<d- Z= e%j|                  d.d/      Z? e%d0d1d23      Z@y)4    N)
NamingOptions
PyrexTypes	TypeSlotserrorwarningpy_object_typeUtilityCodeEncodedStringre)defaultdict)Sequence   )CPtrType)Future)Annotate)Code)r   )Nodes)r   )r   )r   )Pythran)r   r   CompileErrorformat_position)r	   get_all_subtypes   )open_new_filereplace_suffixdecode_filenamebuild_hex_versionis_cython_generated_file)r
   IncludeCodeTempitaUtilityCode)r   bytes_literalencoded_string_or_bytes_literal)has_np_pythranc                 0    t        | |      }t        |      S N)r   as_encoded_filename)pathnewsufnewpaths      ^C:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\Cython/Compiler/ModuleNode.pyreplace_suffix_encodedr+   '   s    T6*Gw''    c                 >    t        | t        j                               S r%   )r"   sysgetfilesystemencoding)r'   s    r*   r&   r&   ,   s     +41J1J1LMMr,   c                 :    | j                   j                          | S r%   )scopecheck_c_classes_pxdmodule_nodes    r*   check_c_declarations_pxdr5   2   s    ))+r,   c                 n    | j                   j                          | j                   j                          | S r%   )r1   check_c_classescheck_c_functionsr3   s    r*   check_c_declarationsr9   7   s,    %%''')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_linenumsr;   c_line_in_traceback)	r   annotater<   hasattrprintr   CCodeConfig
directivesr=   )envoptionsr<   s      r*   generate_c_code_configrE   =   sk    7++--w,- D 	E #>>*>?#779 9r,   )T&&T)F||F)T N)TrG   F)FrF   T))__lt____gt__)rI   __le__)rI   __ge__)rK   rL   )rK   rI   )rK   rJ   )rJ   rI   )rJ   rL   )rJ   rK   )rL   rK   )rL   rJ   )rL   rI   c                      e Zd ZdZd Zdeej                     defdZ	deej                     defdZ
d Zd Zd	eej                     fd
Zdeej                     fdZdeej                     fdZdeej                     fdZd Zy)SharedUtilityExportera  
    Class responsible for generating code that imports and exports shared utility functions.

    Mark the positions where the functions should be called with `call_import_code()`/`call_export_code()`.
    The function calls and import/export functions are generated when `generate_exporting_functions()`
    is called. This approach is needed because the list of the shared functions is only known in the later
    stages of compilation.
    c                     t        |j                  j                        | _        t        |j                  j                        | _        || _        || _         |d      | _         |d      | _	        y )NzShared function import codezShared function export code)
boolcontextshared_c_file_pathin_shared_utility_moduleshared_utility_qualified_nameusing_shared_utility_moduleposr1   import_codeexport_code)selfrV   mod_init_subfunctionr1   s       r*   __init__zSharedUtilityExporter.__init__x   sZ    (,U]]-M-M(N%+/0[0[+\(
/0MN/0MNr,   shared_func_definitionsreturnc                 4    t        | j                  xr |      S r%   )rP   rS   rY   r\   s     r*   has_shared_exportsz(SharedUtilityExporter.has_shared_exports   s    D11M6MNNr,   c                 4    t        | j                  xr |      S r%   )rP   rU   r_   s     r*   has_shared_importsz(SharedUtilityExporter.has_shared_imports   s    D44P9PQQr,   c                 :    | j                   j                  |       y r%   )rW   set_call_coderY   codes     r*   call_import_codez&SharedUtilityExporter.call_import_code       &&t,r,   c                 :    | j                   j                  |       y r%   )rX   rd   re   s     r*   call_export_codez&SharedUtilityExporter.call_export_code   rh   r,   shared_function_definitionsc                    |D cg c]5  }|j                    d|j                   d|j                  |j                  f7 }}|j                  j	                  t        j                  dd             t        || j                  |dd       y c c}w )N()FunctionExportImportExport.c__Pyx_ExportFunctionvoid (*{name})(void))	retparamsnameglobalstateuse_utility_coder
   load_cached_generate_export_coderV   )rY   rf   rk   shared_func_defexportss        r*   '_generate_c_shared_function_export_codez=SharedUtilityExporter._generate_c_shared_function_export_code   s     $?
  ##$Ao&<&<%=Q?AUAUWfWkWkl
 
 	))##$46FG	I 	dDHHg7MOef
s   :B
function_definitionsc                    |D cg c]5  }|j                    d|j                   d|j                  |j                  f7 }}|j                  j	                  t        j                  dd             t        | j                  j                  j                        }dt        j                   }t        || j                  |||d       y c c}w )Nrm   rn   FunctionImportrp   __Pyx_ImportFunction_void (**{name})(void))rs   rt   ru   rv   rw   r
   rx   r   r1   rQ   rT   r   	cyversion_generate_import_coderV   )rY   rf   r}   rz   importsrT   import_funcs          r*   2_generate_c_shared_function_import_code_for_modulezHSharedUtilityExporter._generate_c_shared_function_import_code_for_module   s    
 $8
  ##$Ao&<&<%=Q?AUAUWfWkWkl
 
 	))##$46FG	I )6djj6H6H6f6f(g%-f.>.>-?@$((G%BKQh	j
s   :Cshared_utility_functionsc                     | j                  |      r(| j                  5 }| j                  ||       d d d        y y # 1 sw Y   y xY wr%   )r`   rX   r|   rY   r   
inner_codes      r*   _generate_exportsz'SharedUtilityExporter._generate_exports   sO    ""#;<!! Z<<,  = 	   ;Ac                     | j                  |      r(| j                  5 }| j                  ||       d d d        y y # 1 sw Y   y xY wr%   )rb   rW   r   r   s      r*   _generate_importsz'SharedUtilityExporter._generate_imports   sO    ""#;<!! ZGG,  = r   c                     |j                   j                  }|j                  | j                         | j	                  |       | j                  |       |j                          y r%   )rv   r   enter_cfunc_scoper1   r   r   exit_cfunc_scope)rY   rf   r   s      r*   generate_exporting_functionsz2SharedUtilityExporter.generate_exporting_functions   sP    #'#3#3#L#L tzz*7878r,   N)__name__
__module____qualname____doc__r[   r   r   SharedFunctionDeclrP   r`   rb   rg   rj   r|   r   r   r   r    r,   r*   rN   rN   o   s    OO(4CZCZ:[ O`d OR(4CZCZ:[ R`d R--	gYabfbybyYz 	gj]efjf}f}]~ j(4CZCZ:[ (4CZCZ:[  r,   rN   c                      e Zd ZdgZdZdZdZed        Zd Z	dsdZ
d Zd Zd Zd	 Zd
 ZdtdZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Ze d        Z!d Z"d Z#d Z$dudZ%d  Z&d! Z'd" Z(d# Z)d$ Z*d% Z+d& Z,d' Z-d( Z.d) Z/d* Z0d+ Z1d, Z2d- Z3d. Z4d/ Z5d0 Z6d1 Z7d2 Z8d3 Z9d4 Z:d5 Z;d6 Z<d7 Z=d8 Z>e d9        Z?d: Z@d; ZAd< ZBd= ZCd> ZDd? ZEd@ ZFdA ZGdB ZHdC ZIdD ZJdE ZKdF ZLdG ZMdH ZNdI ZOdJ ZPdK ZQdL ZRdM ZSdN ZTdO ZUdP ZVdQ ZWdR ZXdS ZYdT ZZdU Z[dV Z\dW Z]dX Z^dY Z_dZ Z`d[ Zad\ Zbd] Zcd^ Zdd_ Zed` Zfda Zgdb Zhdc Zidd Zjde Zkdf Zldg Zmdh ZndtdiZodj Zpdk Zqdl Zrdm Zsdn ZtdvdoZudp Zvdq Zwdr Zxy)w
ModuleNodebodyNc                     | j                   S r%   )r1   rY   s    r*   local_scopezModuleNode.local_scope   s     zzr,   c                    t        | j                  t        j                        sJ |dv sJ | j                  t        j                  | j                  j
                  g       | _        t        j                  | j                  j
                  g       | _        | j                  j                  j                  d| j                         | j                  j                  j                  d| j                         |j                  | j                  j                  k7  r,t        j                  |j
                  ||j                        }|dk(  r| j                  n| j                  }t        |t        j                        r&|j                  j                  |j                         n|j                  j                  |       | j                  j                  j                  |j                         |j                  j!                         D ]  }| j                  j#                  |        d } || j                  j$                  |j$                         y )N)pxdutility)statsr   )r   rB   r   c                 >    |D ]  }|| vs| j                  |        y r%   )append)L1L2xs      r*   extend_if_not_inz-ModuleNode.merge_in.<locals>.extend_if_not_in   s#     !B;IIaL!r,   )
isinstancer   r   StatListNode	pxd_statsrV   utility_code_statsr   insertrB   r1   CompilerDirectivesNodeextendr   utility_code_list
c_includesvaluesprocess_includeincluded_files)rY   treer1   stagetarget_statsincr   s          r*   merge_inzModuleNode.merge_in   s    $))U%7%788***>>!"//		RHDN&+&8&8b&QD#IIOO""1dnn5IIOO""1d&=&=>tzz444 //tPUP`P`aD).%t~~T=T=TdE../%%djj1%%d+

$$++E,C,CD##**, 	,CJJ&&s+	,	!
 	22E4H4HIr,   c                     |j                   D ]@  }| j                  |j                  _        ||j                  j                  j
                  d<   B | j                  j                  |       y )Ninternal)c_class_entriesfull_module_nametypemodule_namer1   rB   r   )rY   r1   internalise_c_class_entriesentrys       r*   merge_scopezModuleNode.merge_scope   sY    ** 	RE%)%:%:EJJ"6QEJJ''
3	R 	

E"r,   c                 r    t        j                  | j                  | j                  | j                        }|S )N)rB   r   )r   r   rV   rB   r   )rY   r   s     r*   with_compiler_directivesz#ModuleNode.with_compiler_directives  s,     ++DHHW[W`W`ar,   c                    t        |      rt        j                  |       | j                  r| j                  d   |_        t
        j                  sd x|_        | _        nt
        j                  rt        dt        j                  | j                        z        |_        | j                  at        |j                  dz   | j                  z         |_        | j                  j                  |j                  _        n| j                  |_        | j                  |_        | j                  j                  |       t!        j"                         }|j%                  |      r0| j&                  j)                  t+        j,                  dd             y y )Nold_style_globalszFile: %s (starting at line %s)
CythonPyMutexPublicCheckzSynchronization.c)r#   r   include_pythran_genericrB   r   r   
docstringsdocembed_pos_in_docstringr   r   relative_positionrV   encodingr   analyse_declarationsr   get_cy_pymutex_typefind_shared_usages_of_typer1   rw   r
   rx   )rY   rC   cy_pymutex_types      r*   r   zModuleNode.analyse_declarations  s#   #++C0??$(OO4G$HC!!!!%%CGdh++#$DuG^G^_c_g_gGh$hiCGxx#'$(AB#'88#4#4 hhCG		&&s+$88:))/: JJ''''.0C ;r,   c                    | j                   }|j                  r| j                  |       t        |j                  j                               D ]v  \  }}|j                  s|j                   |u s"|j                  s/|j                  j                  s|j                  j                  s\|j                  j                  |       x y r%   )r1   has_import_star*create_import_star_conversion_utility_codesortedentriesitemscreate_wrapperis_typer   is_enumis_cpp_enumcreate_type_wrapperrY   rC   ru   r   s       r*   prepare_utility_codezModuleNode.prepare_utility_code)  s     jj;;C@!#++"3"3"56 	4KD%$$);5::+=+=AWAW

..s3	4r,   c                 "   | j                   }t        j                  |_        g | _        | j                  || j                  i        | j                  |       | j                  |||       | j                  |||       | j                  |||       y r%   )
r1   r   c_void_typereturn_typereferenced_modulesfind_referenced_modulessort_cdef_classesgenerate_c_codegenerate_h_codegenerate_api_code)rY   rD   resultrC   s       r*   process_implementationz!ModuleNode.process_implementation4  s|    jj$00"$$$S$*A*A2Fs#S'62S'62sGV4r,   c                 f    | j                   D ]"  }|j                  D ]  }|j                  s  y $ y)Nr   r   )r   cfunc_entriesdefined_in_pxd)rY   moduler   s      r*   has_imported_c_functionsz#ModuleNode.has_imported_c_functions>  s=    -- 	F-- ''	 r,   c                     t        ||d      s6t        | j                  dt        j                  j                  |      z        y )NT)allow_failedif_not_foundzVThe output file already exists and does not look like it was generated by Cython: "%s")r   r   rV   osr'   basename)rY   r'   r   s      r*   assure_safe_targetzModuleNode.assure_safe_targetE  sC    '<VZ[r''**4012 2 \r,   c           	         d&d} ||j                   d      } ||j                        } ||j                        } ||j                        }|s|s|s|rbt	        |j
                  d      |_        | j                  |j                         t        j                         }	t        ||      }
t        j                  |	| |
      }|j                          |j                  d   }|j                  d   }|j                  d   }|j                  r;t	        |j
                  d      |_        t        j                   |j                        }nd }|j#                          | j%                  t&        j(                  |      }|j+                  |       |j-                  d	       |j-                  d
       | j/                  ||       |j0                  r| j3                  |g |       |j-                  d	       | j%                  t&        j4                  |      }|j-                  d|z         |j-                  d	       | j7                  ||j9                                |j-                  d	       | j;                  |       |rc|j-                  d	       |D ]M  }| j=                  |j>                  |       |r| jA                  |j>                  |       |jC                  |       O |r<|j-                  d	       |D ]&  }| jE                  |||       |jC                  |       ( |r<|j-                  d	       |D ]&  }| jE                  |||       |jC                  |       ( |j-                  d	       |j-                  d|z         |j-                  d	       |j-                  d       |j-                  d       |j-                  d	       | jG                  d|      }tI        d|jJ                  jM                         d|d|d      }|j-                  d|jO                  d      z         |j-                  d|z         |j-                  d	       |j-                  d       |j-                  d       |j-                  d|jM                         z         |j-                  d       |j-                  d|jM                         z         |j-                  d       |j-                  d|jM                         z         |j-                  d       |j-                  d|z         |j-                  d        |j-                  d!       |j-                  d"|d#|d$|d%       |j-                  d       |j-                  d	       |j-                  d|z         tQ        |j                        5 }|	jS                  |       d d d        y y # 1 sw Y   y xY w)'Nc                     | D cg c]/  }|j                   dk(  s|r|j                  s|r|j                  r|1 c}S c c}w )Npublic)
visibilityapir   )r   r   r   r   s       r*   	h_entriesz-ModuleNode.generate_h_code.<locals>.h_entriesN  sC    '. 9e))X5!5!5  9 9 9s   4<r   )r   z.hh_codetype_declarationsendz.pxirH   #include "Python.h"z
#ifndef %s#endif /* !%s */zP/* WARNING: the interface of the module init function changed in CPython 3.5. */zK/* It now returns a PyModuleDef instance instead of a PyModule instance. */PyInitzUse PyImport_AppendInittab(, z) instead of calling z
 directly.z!/* WARNING: %s from Python 3.5 */.zPyMODINIT_FUNC %s(void);z#if PY_VERSION_HEX >= 0x03050000 && (defined(__GNUC__) || defined(__clang__) || defined(_MSC_VER) || (defined(__cplusplus) && __cplusplus >= 201402L))z2#if defined(__cplusplus) && __cplusplus >= 201402Lz[[deprecated(%s)]] inlinez-#elif defined(__GNUC__) || defined(__clang__)z;__attribute__ ((__deprecated__(%s), __unused__)) __inline__#elif defined(_MSC_VER)z#__declspec(deprecated(%s)) __inline#endifz>static PyObject* __PYX_WARN_IF_%s_INIT_CALLED(PyObject* res) {zreturn res;}#define z() __PYX_WARN_IF_z_INIT_CALLED(z()))r   r   )*type_entriesvar_entriesr   r   r+   c_fileh_filer   r   CCodeWriterrE   GlobalStateinitialize_main_h_codepartsgenerate_pxii_filePyrexCodeWriterput_generated_byapi_namer   h_guard_prefixput_h_guardputlngenerate_type_header_codecapi_reexport_cincludesgenerate_includesapi_guard_prefix"generate_extern_c_macro_definitionis_cppgenerate_dl_import_macrogenerate_cclass_header_coder   generate_cclass_include_codeuse_entry_utility_codegenerate_public_declarationmod_init_func_cnamer   r   as_c_string_literalrstripr   copyto)rY   rC   rD   r   r   h_typesh_varsh_funcsh_extension_typesh_code_writerc_code_configrv   h_code_starth_code_main
h_code_endi_codeh_guard	api_guardr   py3_mod_func_namewarning_stringfs                         r*   r   zModuleNode.generate_h_codeM  s-   	9
 C,,!43??+C--.%c&9&9:f+<26==$GFM##FMM2 ,,.M23@M**=$NK..0&,,X6L%++,?@K$**51J## 6v}}f M--fmm<))+mmF$9$93?G$$W-r"45**7K@..&&sB<b!f&=&=sCIlY67b!33KNb!))+6 !!"%. >E44UZZM99%**fM66u=	>
 !!"%$ >E44UKP66u=> !!"%# >E44UKP66u=> b!09<=b!pqklb! $ 8 83 G*3357HJ[,] ^NANDYDYZ]D^^_8;LLMb! G H RS9N<^<^<``aMN[2246 778C2246 7h'^arrsm,c"!#46GI Jh'R /'9:v}}- ($$Q'( (i ,=h( (s   V;;Wc                    |j                  t        j                  d|j                  j	                  |j
                        d       |r:|j                  d|j                  j	                  |j
                  d      z         y y )N ;zcdef extern %sr   pyrex)r  r   extern_c_macror   declaration_codecname)rY   r   r   r0  s       r*   r"  z&ModuleNode.generate_public_declaration  sm    !!JJ''46 	7 LL)

++EKKq+AC D r,   c                 ^    | j                  ||j                        }|j                  dd      S Nr  __)punycode_module_namequalified_namereplace)rY   prefixrC   r  s       r*   r  zModuleNode.api_name  s-    ,,VS5G5GHT**r,   c                 2   d,d} ||j                         } ||j                        } ||j                        }|s|s|sy t        |j                  d      |_        | j                  |j
                         t        j                         t        ||      }t        j                  | |      }	|	j                          j                          | j                  t        j                  |      }
j!                  |
       j#                  d       j#                  d       j#                  d       d-fd	}j#                  d       |j$                  rVt&        j(                  j+                  |j$                        }t-        |      }j#                  d	|j/                         z         |rj#                  d
       |D ]s  }|j0                  }j#                  d|j2                  z         j#                  d|j4                  d|j2                  d       j6                  j9                  |       u |rj#                  d
       |D ]  }t;        |j0                        }|j=                  t        j>                  |j@                        }j#                  d|jC                  |      z         j#                  d|j@                  d|       j6                  j9                  |        |rj#                  d
       |D ]  }t;        |j0                        }|j=                  t        jD                  |j@                        }j#                  d|jC                  |      z         j#                  d|j@                  d|d       j6                  j9                  |        |r	 |dd       |r	 |dd       |r	 |dd       j#                  d
       j#                  d| j                  d|      z         j#                  d       j#                  d|jF                  j/                         z         j#                  d       |D ]  }|j=                  t        j>                  |j@                        }|j0                  jI                         }j#                  dt        jJ                  d|j@                  j/                         d|d|d	        |D ]  }|j=                  t        jD                  |j@                        }|j0                  jM                         }j#                  dt        jJ                  d|j@                  j/                         d |d|d	        tO        |jF                  d!i"      5 }|D ]"  }| jQ                  |j0                  |d#d$       $ 	 d d d        j#                  d%       j#                  d&       j#                  d'       j#                  d(       j#                  d)       j#                  d*       j#                  d
       j#                  d+|
z         tS        |j
                        }	 jU                  |       |jW                          y # 1 sw Y   xY w# |jW                          w xY w).Nc                 `    | D cg c]  }|j                   s|r|j                  r|  c}S c c}w r%   )r   r   )r   r   r   s      r*   api_entriesz1ModuleNode.generate_api_code.<locals>.api_entries  s6    '. DeyySU-A-A  D D D   #+z_api.hz#ifdef __MINGW64__z#define MS_WIN64r  Tc                     t        j                  | ||      \  }}|rj                  |       |rj                  |       y y )N)include_requires)r
   load_as_stringput)ru   src_filerJ  protoimplr   s        r*   put_utility_codez6ModuleNode.generate_api_code.<locals>.put_utility_code  s?    %44T8VfgKE4

5!

4  r,   r   z#include %srH   zstatic PyTypeObject *%s = 0;r   (*rn   zstatic %s = 0;r7  VoidPtrImportrp   r   
TypeImportzstatic int %s(void) {importzPyObject *module = 0;z#module = PyImport_ImportModule(%s);zif (!module) goto bad;zif (__Pyx_ImportFunction_z	(module, z, (void (**)(void))&, "z") < 0) goto bad;zif (__Pyx_ImportVoidPtr_z, (void **)&r   )imported_modules	goto bad;)
error_codeis_apizPy_DECREF(module); module = 0;	return 0;bad:zPy_XDECREF(module);
return -1;r  r   )r   T),r	  r   r   r+   r
  api_filer   r   r  rE   r  r  r  r  r   r  r  r  r  r   r'   r   r&   r$  r   typeptr_cnametypeobj_cnamerv   r!  r   manglefunc_prefix_apiru   r<  varptr_prefix_apirB  signature_stringr   empty_declaration_codeModuleImportGeneratorgenerate_type_import_callr   r&  close)rY   rC   rD   r   rG  api_vars	api_funcsapi_extension_typesr,  rv   r2  rP  
h_filenamer   r   r=  sigimport_generatorr5  r   s                      @r*   r   zModuleNode.generate_api_code  sU   	D s/ 1 12	)#*=*=>I)<0I0!!#.sG<&&vt]C**,!MM&"9"93?	9%)*'(X	! 	*+==))&--8J,Z8JLL)G)G)IIJLL, Azz;d>P>PPQ&&(:(:< =""99%@A LL" A

+

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

EBC""99%@A LL! A

+

6#;#;UZZH-0E0Ee0LLM5::uEF""99%@A _.>?-/?@\+;<R,t}}Xs/KKL,-:S=O=O=c=c=eef-. 	TEJJv55uzzBE**--/CLL##UZZ%C%C%EucST	T  	TEJJv77DE**335CLL##UZZ%C%C%EucST	T #6S=O=OQY<Z[ 	z_o, z..uzz6CS`ktx.yz	z 	56[!V*+\"SR')34&//*	MM!GGI!	z 	z  GGIs   (Y8Z 8ZZc                     |j                  t        j                  dt        j                  dd      d|j
                  d       y )Nr7  PyTypeObject	DL_IMPORTr8  )r  r   r;  r   public_declr`  )rY   r   r   s      r*   r  z&ModuleNode.generate_cclass_header_code"  s5    !!"">;?  	!r,   c                 p   |j                  d|j                  d|j                  d       |j                          |j                  j
                  }|rA|D ];  }|j                  d|j                  j                  |j                  d      z         = n|j                  d       |j                          y )Nzcdef extern class r  :zcdef %sr   r9  pass)
r  r   ru   indentr1   r	  r   r<  r=  dedent)rY   r   r0  r	  r   s        r*   r   z'ModuleNode.generate_cclass_include_code(  s    dii) 	*jj,,$ HYJJ//1/EG HH LL r,   c           	      	   | j                  |j                  d       | j                  }t        j                  s|j                  rPt        j                  dk(  xs |j                  dk(  }t        j                  || j                  j                        }nt        j                         }t        ||      }t        j                  || ||j                        }|j                          |d   }	| j                  |_        | j"                  |_        | j%                  ||||j&                  |	       |j)                  t*               |d   }
|
j-                  d| j.                  j1                         z         | j3                         }|
j-                  d	|z         |
j-                  d
|z         |
j-                  d       |
j-                  d|j4                  j1                         z         |d   }
| j7                  |||
d       |d   }
| j9                  ||
       | j;                  ||
       | j=                  ||
       | j>                  jA                  ||
       |d   }
| jC                  ||
       | jE                  ||
       |jF                  r| jI                  ||
       |d   jK                  tM        jN                  dd             | jQ                  ||d          | jS                  ||d          | jU                  ||d          tW        | j                  | jY                  | j                  | jZ                  |d         | jZ                        }| j]                  |d d |||d          | j_                  ||d          t        j`                  r| jc                  ||d          | je                  |d          | jg                  |||       |	ji                  d       |jj                  d d  D ]  }|j)                  |        |jm                  |
       |jo                          | jq                  |||       ts        |j                        }	 |ju                  |       |jw                          d|_<        |jz                  r| j}                  ||       t        j                  s|j                  r| j                  |||       y y # |jw                          w xY w)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;rH   z/* Implementation of %s */late_includesF)earlymodule_codemodule_exttypesmodule_stateSmallCodeConfigModuleSetupCode.cmodule_state_clearmodule_state_traverseinit_modulecleanup_modulemain_methodfilename_tabler   r   )@r   r
  r   r   r>   r   AnnotationCCodeWritercompilation_sourcer{  r   r  rE   r  r}  initialize_main_c_coderV   
module_posrB   generate_module_preambleembedded_metadatarw   refnanny_utility_coder  r   r$  is_main_module_flag_cnamerB  r  generate_cached_builtins_declsgenerate_lambda_definitionsgenerate_variable_definitionsr   generate_function_definitionsgenerate_typeobj_definitionsgenerate_method_tabler   generate_import_starput_code_herer
   loadgenerate_module_state_startgenerate_module_state_cleargenerate_module_state_traverserN   rZ   r1   generate_module_init_funcgenerate_module_cleanup_funcembedgenerate_main_methodgenerate_filename_table!generate_declarations_for_moduleswriter   r   finalize_main_c_codegenerate_module_state_endr   r&  rh  c_file_generated	gdb_debug_serialize_lineno_map_generate_annotations)rY   rC   rD   r   modulesrz  
rootwriterr,  rv   r   rf   module_is_mainshared_utility_exporterutilcoder5  s                  r*   r   zModuleNode.generate_c_code5  s\   DA))w//!(!1!1W!<![@P@PT[@[!77#5 33??J
 ))+J.sG<&&%'.'I'I

 	**,X&!%!%%%c7GV=U=UW]^$$%:;./

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

#n45

=>12

2

/#2D2D2X2X2ZZ[?+sGT?=)++C6 	((d3**35		//T: ,-))#t4""3-%%c40 	N#11.0CD	F 	((k..IJ((k:N.OP++C=T1UV"7HH%%dhh

K<VWJJ#
 	&&CRL13M8R	
 	))#{;K/LM==%%c;}+EF$$[1A%BC..sG[IT--a0 	3H((2	3 	 <<TB((*&&sG[A&--(	a GGI"#&&sJ7w//&&z67C  0	 GGIs   S Sc                    | j                  |       t        j                  xs |j                  }|rdt        j                  j                  |      rEdd lmc m} |j                  |      j                         }|j                         D ]	  }d |_         nd }|j                  |j                  |j                  |       | j                   j"                  sy | j                   j$                  j&                  }t        j                  j)                  t        j                  j+                  |j                              }	| j                   j"                  D ]  }
t        j                  j)                  t        j                  j-                  |	|
            }t        j                  j+                  |      }|j/                  |	      sq ||
| j0                  d      }|s||	k7  r5t        j                  j                  |      s	 t        j2                  |       |j                  |||        y # t4        $ r(}dd l}|j6                  |j8                  k7  r Y d }~Cd }~ww xY w)Nr   )coverage_xmlT)
source_posinclude)r>   r   annotate_coverage_xmlr   r'   existsxml.etree.ElementTreeetreeElementTreeparsegetrootitertailsave_annotationmain_source_filer
  r1   r   rQ   search_include_directoriesabspathdirnamejoin
startswithrV   makedirsOSErrorerrnoEEXIST)rY   r  r   rD   coverage_xml_filenameETr  elsearch_include_file
target_dirincluded_filetarget_filetarget_file_dirsource_fileer  s                   r*   r  z ModuleNode._generate_annotations  s   j! ' = = ^A^A^ RWW^^4I%J..88$9:BBDL"'')   L""6#:#:FMMXd"e zz(("jj00KKWW__RWW__V]]%CD
!ZZ66 	\M''//"'',,z=*QRK ggook:O"--j9-mZ^_K*,RWW^^O5TKK0
 &&{Kl&[!	\   ww%,,. /s   H--	I6IIc           
      X   |j                   j                  }|j                  j                         }t	        t
              }t        |      D ]4  \  }\  }}|dkD  s|j                  |||f   j                  |dz          6 |j                  d       t        |j                               D ][  \  \  }}}	|j                  J |j                  ddj                  t        t        |	            |j                  t        |             ] |j!                  d       |j#                          y )Nr   r   LineNumberMapping
LineNumberr7  )	c_linenossrc_path
src_lineno)rQ   gdb_debug_outputwriterbuffer
allmarkersr   list	enumeratefilenamer   startr   r   	add_entryr  mapstrr   	serialize)
rY   rC   ccodewritertbmarkersdc_linenosrc_descr  r  s
             r*   r  z ModuleNode._serialize_lineno_map  s   [[//$$//109'0B 	=,H,xA~("3"3"?(J&'..x!|<	= 	$%17	1B 	-"XzI$$00LL((3sI#67!**z?	  	 	"#
r,   c                     ||vr;d||<   |j                   D ]  }| j                  |||        |j                  |       y y )Nr   )cimported_modulesr   r   )rY   rC   module_listmodules_seenimported_modules        r*   r   z"ModuleNode.find_referenced_modules  sP    l" !L#&#8#8 Y,,_k<XYs#	 #r,   c                   	
 t        t              |D ]i  }|   }|j                  j                  }|s! |      }|   j	                  |       j                  |      }|Q|j                  j                  }|rIk t               g 
	
fd	t        |      D ]  } 	|           
j                          
S )Nc                     | v ry j                  |         | j                           D ]  } |           j                  |        y r%   )addr   r   )uvdfsgetkeyr   seen
subclasses	type_dicts     r*   r  z1ModuleNode.sort_types_by_inheritance.<locals>.dfs  sL    DyHHQKqvv/ "IaL!"MM!r,   )	r   r  r   	base_typer   getsetreversedreverse)rY   r  
type_orderr  key	new_entrybasebase_key
base_entryr  r   r  r  s    ` `     @@@@r*   sort_types_by_inheritancez$ModuleNode.sort_types_by_inheritance  s     &
 
	1C!#I>>++D!$<8$++C0&]]84
%!00 	
	1 u	 	 J' 	 C	#	  	r,   c                 >   i g }}i g }}|D ]`  }|j                   D ]  }|j                  s|j                  r|j                  }	|	j                  }
|
s8|
|v rmddlm} t        |j                  |      sJ t        |j                               t        ||
   j                  |      rJ t        ||
   j                               |||
<   |j                  |
        ||u }|j                  D ]}  }|j                  s|s|j                  s|j                  }	|	j                  s8|j                  rE|j                  }	|	j                  }
|
|vsJ |
       |||
<   |j                  |
        c d }| j                  |||      }d }| j                  |||      }||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,   )r   usedin_cincluder   r
  r
   r  r   r1   r  r   r  r   is_extension_typer  r  )rY   r  rC   	vtab_dictvtab_dict_ordervtabslot_dictvtabslot_dict_orderr   r   r   r  r  all_defined_herer
  	vtab_listr  vtabslot_lists                    r*   sort_type_hierarchyzModuleNode.sort_type_hierarchy  s   %'?	-/*! 	8F// 4::e&7&7 ::D//C i' H)%++7MN`PSTYT_T_P``))C.*>*>@VWrY\]fgj]k]q]qYrr).	#'..s34  &},, 8::#3u7K7K ::D--e6G6G$zz"22"-7<<-2c*+22378#	86	/22(8:		.66.A =))r,   c                     t        j                  d      }i g }}|j                  D ]5  } ||j                        }||vsJ |       |||<   |j	                  |       7 | j                  |||      |j                  d d  y )Nr  )operator
attrgetterr   r   r   r  )rY   rC   key_func
entry_dictentry_orderr   r  s          r*   r   zModuleNode.sort_cdef_classes+  s    &&'89"$bK
(( 	$E5::&Cj(-#-#JsOs#		$
 "&!?!?X"/Ar,   c                 
   |D ]  }| j                  |j                  |         t        |      }t               }|D ]  }	|	|u }
g }|	j                  D ]  }|j                  j                  rH|j
                  r<|j                  |vs4|j                  |j                         |j                  |       a|
s|j                  sp|j                  |        |D cg c]	  }||vs| }}| j                  ||        |D ]0  }| j                  |j                  |       | j                  ||       2 |D ]J  }| j                  ||       | j                  ||       | j                  ||       | j                  ||       L y c c}w r%   )!generate_objstruct_predeclarationr   r  r  	is_ctupler  ru   r  r   r   r  generate_objstruct_definitiongenerate_typeobj_predeclarationgenerate_exttype_vtable_struct$generate_exttype_vtabptr_declaration*generate_exttype_final_methods_declaration)rY   rC   r  r  r  rf   r   vtabslot_entriesctuple_namesr   
definitionr  ts                r*   generate_type_definitionsz$ModuleNode.generate_type_definitions6  s~   " 	EE225::tD	E}-u 	?F3JL,, /::''EJJzz5$((4$++E25#7#7 ''./ (4Q!q@P7PAQLQ**<>	? # 	>E..uzz4@00=	>  	IE00=//t<55eTB;;E4H		I Rs   	F !F c                 ~   |d   }|j                  d       |j                  d       d|D cg c]  }|j                   c}v rD|j                  d       |j                  d       |j                  d       |j                  d       | j                  ||      \  }}| j                  |||||       |d	   }|D ]}  }	|	|u }
|j                  d       |j                  d
|	j                  j	                         z         | j                  |	||
|       | j                  |	||
       | j                  |	||
        y c c}w )Nr   rH   z/*--- Type declarations ---*/zcpython.arrayz#ifndef _ARRAYARRAY_Hzstruct arrayobject;z'typedef struct arrayobject arrayobject;r  module_declarationsz!/* Module declarations from %s */)r  rB  r  r,  r$  generate_c_class_declarationsgenerate_cvariable_declarationsgenerate_cfunction_declarations)rY   rC   r  rv   typecodemr  r  
modulecoder   defined_heres              r*   r  z,ModuleNode.generate_declarations_for_modulesQ  s9   23r67 AAq//AANN23NN01NNDENN8$#'#;#;GS#I 	=&&)]H	> !67
 	SF!S=LR @6CXCXClClCnno..vz<Q\]00\R00\R	S Bs   D:c                 N    | j                  t        j                  |d             y )Nr  )r  r
   r  )rf   ru   s     r*   _put_setup_codezModuleNode._put_setup_codeh  s    ;++D2EFGr,   c                    |j                          |rZ|j                  d       |j                  t        j                  |dd             |j                  d       |j                  d       |j                  d       |j                  d       |j                  d	       | j	                  |d
       t        |j                  j                         t        j                        D ]-  }|j                  |j                  k(  s|j                  |       / |j                  d       |j                  d       |j                  d       |j                  d       |j                  d       |j                  d   j                  d       ddlm} |j                  d|j!                  dd       d       |j                  dt#        |      z         |j                  dt$        j&                  |j(                  j*                  v z         |j                  j-                  t/        j0                  dd             | j	                  |d       |j(                  j2                  j4                  r| j	                  |d       n| j	                  |d       | j	                  |d        | j	                  |d!       d"t6        j8                   d#t6        j:                   d$t6        j8                   d%t6        j<                   d&t6        j<                   d't6        j>                   d(}d)t6        j>                   d#t6        j@                   d*}	d+}
|jB                  tE        |jB                        }
|j                  d,       |j                  d-|
        |j                  d.       |j                  d/       |j                  d0       |j                  d.       |j                  d1       |j                  ||	z         |j                  d       |j                  |dz         |j                  d.       |j                  d2       |j                  d3       |j                  d       | jG                  ||jI                                |j                  d       |j                  d4| jK                  t6        jL                  |      z         |j                  d4| jK                  t6        jN                  |      z         |j                  d5       | jQ                  |||d67       |j                  d       |j                  d8       |j                  d9       |j                  d.       |j                  d       |jR                  d:   rU|j                  d       |j                  d;       |j                  d<       |j                  d.       |j                  d       |j                  d=       |j                  d>       |j                  d?       |j                  d       |j                  d@       |j                  d.       |j                  d       |jR                  dA   rdBndC}|j                  dD|        |j                  d.       |jR                  dE   }|jR                  dF   }|dGvr|stU        | jV                  dH       |j                  dItE        |dJk(                |j                  dKtE        |dLk(                |dMvr|j                  dN| d       |dOk(  rdP}n|dQk(  rdR}n|jY                         }|j                  dS| dT       |j                  dU| dV       |j[                  t/        j\                  dWdX      d+          |j-                  t/        j^                  dYdZ             t`        jb                  je                  |       t`        jb                  jg                  |       t`        jh                  jg                  |       |j[                  tj        jl                         | j	                  |d[       |j                  d       |j                  d\       |j                  d]|jn                  z         tp        jr                  "|j                  d^t6        jt                  z         |j                  d.       |j                  d_t6        j<                  z         |j                  d`t6        j>                  z         |j                  dat6        jv                  d#t6        jx                  d*       |j                  dbt6        j8                  z         |j-                  t/        j^                  dcd             |j-                  t/        j0                  ddd             |j-                  t/        j^                  ded             t{        |      r&|j-                  t/        j^                  dfdg             y y )hNz/* BEGIN: Cython Metadata   T)rv  	sort_keyszEND: Cython Metadata */rH   z#ifndef PY_SSIZE_T_CLEANz#define PY_SSIZE_T_CLEANz#endif /* PY_SSIZE_T_CLEAN */InitLimitedAPIr  z#ifndef Py_PYTHON_Hzg    #error Python headers needed to compile C extensions, please install development version of Python.z!#elif PY_VERSION_HEX < 0x03080000z'    #error Cython requires Python 3.8+.#elser   z#endif /* Py_PYTHON_H */r   )__version__z#define __PYX_ABI_VERSION "r  _"z#define CYTHON_HEX_VERSION %sz!#define CYTHON_FUTURE_DIVISION %dCythonABIVersionr  CModulePreambleCppInitCode	CInitCodePythonCompatibilityMathInitCodez/#define __PYX_MARK_ERR_POS(f_index, lineno)  {  = z[f_index]; (void) z; z = lineno; (void) z;%s (void) z; }r7  r8  r   z)#ifndef CYTHON_CLINE_IN_TRACEBACK_RUNTIMEz*#define CYTHON_CLINE_IN_TRACEBACK_RUNTIME r  z!#ifndef CYTHON_CLINE_IN_TRACEBACKzC#define CYTHON_CLINE_IN_TRACEBACK CYTHON_CLINE_IN_TRACEBACK_RUNTIMEz#if CYTHON_CLINE_IN_TRACEBACKz.#define __PYX_ERR(f_index, lineno, Ln_error) \z:    { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; }z
#define %sz/* Early includes */F)latezL#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS)z!#define CYTHON_WITHOUT_ASSERTIONSccomplexz#if !defined(CYTHON_CCOMPLEX)z#define CYTHON_CCOMPLEX 1z&#ifdef CYTHON_FREETHREADING_COMPATIBLEz##if CYTHON_FREETHREADING_COMPATIBLEz:#define __Pyx_FREETHREADING_COMPATIBLE Py_MOD_GIL_NOT_USEDz6#define __Pyx_FREETHREADING_COMPATIBLE Py_MOD_GIL_USEDfreethreading_compatiblePy_MOD_GIL_NOT_USEDPy_MOD_GIL_USEDz'#define __Pyx_FREETHREADING_COMPATIBLE c_string_typec_string_encoding)bytes	bytearrayzGa default encoding must be provided if c_string_type is not a byte typez/#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII asciiz.#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 utf8)rQ  rR  z'#define __PYX_DEFAULT_STRING_ENCODING "rP  	ByteArrayr  Unicodez*#define __Pyx_PyObject_FromString __Pyx_Py_FromStringz1#define __Pyx_PyObject_FromStringAndSize __Pyx_Py_FromStringAndSizeTypeConversionszTypeConversion.cFormatTypeNamezObjectHandling.cPretendToInitialize#if !CYTHON_USE_MODULE_STATEzstatic PyObject *%s = NULL;zstatic PyObject *%s;zstatic int %s;zstatic int %s = 0;zstatic const char * const zstatic const char *%s;FastTypeChecksGetRuntimeVersionAddModuleRefPythranConversionzCppSupport.cpp)>r  r  jsondumpsr7  r   r   r   r   sortkeylocationINITIALr  rv   rH   r>  rC  r   r   divisionrQ   future_directivesrw   r
   r  rD   cplusr   filename_cnamefiletable_cnamelineno_cnameclineno_cnameline_c_macror=   intr  r  r  r  r  r  rB   r   rV   titlerL  rK  rx   r   c_long_typecreate_to_py_utility_codecreate_from_py_utility_code
c_int_typer   branch_prediction_macrosmodule_cnamer   
pre_importpreimport_cnamecfilenm_cnamefile_c_macror#   )rY   rC   rD   r  metadatarf   r   r>  mark_errpos_code
cline_infodefault_cline_runtimeft_compatiblerM  rN  c_string_func_names                  r*   r  z#ModuleNode.generate_module_preamblel  s   JJ23JJtzz(1EFJJ01JJrN

-.

-.

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

()

 C 	D

67

<=

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

01D1DS#1N0OqQR

25F{5SST

6OOs{{<<<> 	? 	))/1DE	G 	T#45;;$$  }5  {3T#89T>2
%%&c&*@*@)A B,,- .##$ %**+ ,++, - 	 --.c&2E2E1FaH
 !"&&2$'(C(C$D!

>?

?@U?VWX

8

67

XY

8

23

#j01

7

#b()

8

DE

OP

2//cjjlC

2

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

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

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

2

ab

67

8

2>>*%JJrNJJ67JJ23JJx JJrN

;<

89

OP

7

KL

8

714@Z1[-ar

<]OLM

87NN+>? 66?P$((ef

DSIZ^eIeEfDghi

CCHY]cHcDdCefg$55JJ@AR@SSTUVK'!,e#!*!.!4!4!6

?@R?SS^_`

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

2

12

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

8

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

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

6;O;OQWQdQdef

+f.C.CCD[445EGZ[\[--.ACVWX[44^EXYZ#  !8!89LN^!_` r,   c                    t         j                  }|j                  d       |j                  d|z         |j                  d|z         |j                  d|z         |j                  d       |j                  d|z         |j                  d       |j                  d|z         |j                  d	       |j                  d
       |r|j                  d|z         n[|j                  d       |j                  d|z         |j                  d       |j                  d|z         |j                  d       |j                  d       y )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  )rY   rf   r  ru   s       r*   r  z-ModuleNode.generate_extern_c_macro_definition  s   $$

+,

?T)*

3d:;

&-.

()

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

;

pswwx

< 

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

8r,   c                 j    |j                  d       |j                  d       |j                  d       y )Nz#ifndef DL_IMPORTz  #define DL_IMPORT(_T) _Tr  )r  re   s     r*   r  z#ModuleNode.generate_dl_import_macro%  s(    

&'

/0

8r,   c                 T   t        |j                  j                         t        j                        D ]^  }|j
                  |j                  k(  r|s|j                  |       1|j
                  |j                  k(  sK|sN|j                  |       ` |r|j                  d       y y )Nr<  z#include <omp.h>)
r   r   r   r   ra  rb  EARLYr  LATEputln_openmp)rY   rC   r  rf   r  rH  r   s          r*   r  zModuleNode.generate_includes*  s    #..//1{7J7JK 	$C||syy(IIdO)IIdO	$ 01 r,   c                    ddl m}m} |j                  d       |j                  dt        j
                  z         |j                  j                  r|j                  j                  D ]z  }|j                         } ||      r|j                         }t        j                  |      j                         }t        |      }|j                  d|j                         z         | n|j                  d       |j                  d       y )Nr   )isabsr   rH   z!static const char* const %s[] = {%s,0};)os.pathr  r   r  r   rh  rv   filename_listget_filenametable_entryget_descriptionpathlibPathas_posixr&   r$  )rY   rf   r  r   r{  	file_pathescaped_filenames          r*   r  z"ModuleNode.generate_filename_table5  s    +

2

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

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

4r,   c                      y r%   r   rY   rC   rf   s      r*   generate_type_predeclarationsz(ModuleNode.generate_type_predeclarationsH  s    r,   c                 8   |D ]  }|j                   r|j                  }|j                  r)|j                  s|j                  r| j                  ||       T|j                  r?|j                  s3|j                  r'| j                  |j                  j                  |       |j                  s| j                  ||        |D ]R  }|j                   r|j                  }|j                  r| j                  ||       n|j                  s|j                  r| j                  ||       n|j                  r| j!                  ||       n|j                  r?|j                  s3|j                  r'| j!                  |j                  j                  |       n=|j                  r| j#                  ||       n|j                  r| j%                  ||       t'        |dd       s|j(                  j*                  D ]  }|j,                  j/                  |        U y )Nr1   )r  r   
is_typedefis_struct_or_unionis_cpp_class$generate_struct_union_predeclarationr"  is_fusedr  struct_entryr  r!  generate_typedefr   r   generate_enum_definition generate_struct_union_definitiongenerate_cpp_class_definitionr#  getattrr1   r	  rv   r!  )rY   r  rf   r   r   	var_entrys         r*   r  z$ModuleNode.generate_type_header_codeK  s    " 	GE$$zz??,,0A0A==eTJ^^DMMejj==ejj>U>UW[\++::4F	G " 	KE$$zz??))%6\\T%5%511%>,,99%F^^DMMejj99%**:Q:QSWX&&66udC++66tTB4$/%)ZZ%;%; K	((??	JK#	Kr,   c                     |j                  d       |j                  D ]X  }|j                  }|j                  r|j                  }|j                  d      r|dd  }n|}|j                  d|d|d       Z y )NrH   __pyx_   typedef struct z __pyx_gcc33_r8  )r  r   r   typedef_flagr  r  )rY   rC   rf   r   r   ru   r  s          r*   generate_gcc33_hackzModuleNode.generate_gcc33_hackp  sq    

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

$  !		!r,   c                 P   |j                   j                  }|j                  }|j                  r|j                  s	 |j
                  d   }n|}|j                  |j                         |j                  d|j                  |j                        z         y # t        $ r |}Y Vw xY w)Nnumeric_typedefsztypedef %s;)r   typedef_base_typer1   
is_numericis_cpp_class_scoperv   KeyErrormark_posrV   r  r<  r=  )rY   r   rf   r  enclosing_scopewriters         r*   r  zModuleNode.generate_typedef~  s    JJ00	++(J(J))*<= F		"]Y%?%?%LLM  s   B B%$B%c           
      L    |j                   r|d|d|d|d|d
S |d|dS )Nr7  z
;
typedef r8  )r  )rY   r   kindru   s       r*   sue_predeclarationzModuleNode.sue_predeclaration  s.    ddD" "  $T**r,   c           
      T   |j                   }|j                  rU|j                  rI|j                  ddj	                  |j                  D cg c]  }|j                          c}      z         |j                  | j                  ||j                  |j                               y c c}w )Nztemplate <typename %s>z, typename )	r   r  	templatesr  r  re  r  r  r=  )rY   r   rf   r   Ts        r*   r  z/ModuleNode.generate_struct_union_predeclaration  s    zzJJ/-2D2D59^^D))+D3F F G

4**4DJJGH Es   
B%c                     |d|d}d}||fS )Nr7   {r  r   )rY   r   r  ru   headerfooters         r*   sue_header_footerzModuleNode.sue_header_footer  s    "D)v~r,   c                    |j                  |j                         |j                  }|j                  }|r|j                  }|j
                  xr |j                  }|r0|j                  dd}|j                  j                  t               | j                  |||j                        \  }}|rU|j                  d       |j                  d       |j                  d       |j                  d       |j                  d       |j                  |       |j                  }	|	D ]9  }
|j                  d|
j                  j                  |
j                        z         ; |j                  |       |rV|j                  d       |j                  d	       |j                  d       |j                  d
       |j                  d       y y y )Nr7  __Pyx_PACKEDz#if defined(__SUNPRO_C)z  #pragma pack(1)z#elif !defined(__GNUC__)z  #pragma pack(push, 1)r  %s;z  #pragma pack()z  #pragma pack(pop))r  rV   r   r1   r  	is_structpackedrv   rw   packed_struct_utility_coder  r=  r  r	  r<  )rY   r   rf   r   r1   r  r  r  r  r	  attrs              r*   r  z+ModuleNode.generate_struct_union_definition  su   eii zz

99D^^3F"&))^<  112LM&&tT4::> FF

45

./

56

45

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

DII66tzzBBDD JJv

45

-.

56

01

8$ ) r,   c                    |r|j                  |j                  ddj                  |      d       |xs |xr |j                  j                   }|r|j                          |r|D ]  }	|j                  |	d        |r0|j                  |j                  ddj                  |      d       |r|j                          |j                  d       y |j                  |j                  ddj                  |      d       y )Nrm   r  z) {Fnanny);r  )r  r=  r  r   nogilput_ensure_gilput_init_var_to_py_noneput_release_ensured_gil)
rY   	arg_decls	arg_namesis_implementingpy_attrsconstructorr   rf   	needs_gilr  s
             r*   generate_cpp_constructor_codez(ModuleNode.generate_cpp_constructor_code  s    JJTZZ91EFG P[%O9I9I9O9O5OI##%$ DD00U0CD

(9(9499Y;OPQ,,.JJsOJJDJJ		)0DEFr,   c           
         |j                  |j                         |j                  }|j                  }|r|j                  rI|j                  ddj                  |j                  D cg c]  }|j                          c}      z         |j                  d|j                  z         |j                  rKdj                  |j                  D cg c]  }|j                          c}      }|j                  d|z         |j                  d       | j                  |j                  |       |j                  j                         D cg c]&  }|j                  j                  r|j                   s|( }	}d}
d }d }|j"                  D ]  }|j                  j$                  r(|j                  j&                  r|j                  d       n\|j(                  d	k(  r|j+                  d	      }n;|j(                  d
k(  r|}n)|j                  j$                  r|j                  d       d}
|j                  d|j                  j-                  |j                        z          d|j.                  j0                  v }|s|	rZ|r<|j3                         D ]'  }g }g }|j                  j4                  d t7        |j                  j8                        |j                  j:                  z
   D ]<  }|j=                  |j-                                |j=                  |j                         > |j                  j:                  ra|j=                  |j                  j>                  j-                  t@        jB                               |j=                  t@        jB                         |sd}g }| jE                  ||||	|||       * ng }g }| jE                  ||||	|||       |s|	s|
r|
r|j                  d       |r|j                  d|j                  z         |	r|jG                          |r|j                  d|j                  z         |	r*|	D ]  }|jI                  |d        |jK                          |j                  d       n|j                  d|j                  z         |	r$|r|j                  |j                  d|j                  d       |jG                          |j"                  D ]W  }|j                  j$                  r|j                  |j                  d|j                  d       |jM                  |d       Y |jK                          |j                  d       |j                  |j                  d|j                  d       |j                  d       |jG                          |j"                  D ]j  }|j                  j$                  r|jI                  |d       |j                  |j                  d|j                  d       |jM                  |d       l |jK                          |j                  d       |j                  d       |j                  d       nV|j                  |j                  d|j                  d       |j                  |j                  d|j                  d       |j                  d       y y c c}w c c}w c c}w )Nztemplate <class %s>z, class 	struct %sz	, public z : public %sr  Fstatic z<init>z<del>zvirtual Tr  r  z~%s() {z%s();r  r  z~%s();z(const z& __Pyx_other) {z = __Pyx_other.r8  z& operator=(const zif (this != &__Pyx_other) {zreturn *this;z& __Pyx_other);r  )'r  rV   r   r1   r  r  r  re  rL  r=  base_classesr  r  r   r   is_pyobjectis_inheritedr	  is_cfunctionis_static_methodru   lookup_herer<  rv   r  all_alternativesoriginal_argslenargsoptional_arg_countr   op_arg_structr   optional_args_cnamer  r  put_var_xdecrefr  put_var_incref)rY   r   rf   r   r1   r  
base_classbase_class_declr  r  has_virtual_methodsr  
destructorr  r  constructor_alternativer  r  argdefault_constructors                       r*   r  z(ModuleNode.generate_cpp_class_definition  s   eii zz

~~

0:??9=HAQ--/H4J J K HH[4::-.  "-"2"2KOK\K\]ZZ668]#_/9:JJt**5+=+=tD#(==#7#7#9 Fa66--ann  FH F"'KJ)) 
K99))dii.H.HHHY'YY(*"'"3"3H"=KYY')!%JYY++HHZ(*.'

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

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

DJJWX'') % 1 1 C#yy55 JJTZZ'XY //E/BC 002JJsOJJ4::W[WaWabcJJ<='') % 1 1 C#yy55 00U0C JJTZZ'XY //E/B	C
 002JJsOJJ/JJsOJJtzz4::VWJJ$**VZV`V`abJJt{  I
 ^Fs   ([[
+[!c                 ~   |j                  |j                         |j                  }|j                  xs |j                  xs d}|j                  j
                  rdnd}| j                  |||      \  }}|j                  |       |j                  }|st        |j                  d       n|d   }	|D ]*  }
|
j                  |
j                  j                  |       , |D ]  }
|
j                  |
j                  j                  d      d   }n;|
j                  j                  d      d   d|
j                  j                         }|
|	ur|dz  }|j                  |        |j                  |       |j                  j                  r0|j                  j                  r|j                  d	|d
|d       y y y )NrH   z
enum classenumzDEmpty enum definition not allowed outside a 'cdef extern from' blockr  z::rG  ,ztypedef enum r7  r8  )r  rV   r   r=  ru   r   r  r  enum_valuesr   
value_nodegenerate_evaluation_codesplitr   r   r  )rY   r   rf   r   ru   r  r  r  r  
last_entryvalue_entry
value_codes               r*   r  z#ModuleNode.generate_enum_definition2  s   eii zz{{.ejj.B$zz55|6//dDA

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

:&	' 	

6::zz&&

D$?@ ' r,   c                    |j                  d       |j                  j                  }|r|j                  dk(  rI|j                  s=|j                  t
        j                  dt        j                  dd      d|d       y |j                  dk(  r=|j                  t
        j                  dt        j                  dd      d|d       y y y )	NrH   externr7  rp  rq  r8  r   	DL_EXPORT)	r  r   r`  r   r  r   r;  r   rr  )rY   r   rf   ru   s       r*   r$  z*ModuleNode.generate_typeobj_predeclarationU  s    

2zz''8+E4E4E

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

))**>;G  . r,   c                    |j                   sy |j                  |j                         |j                  }|j                  }| j                  |       |j                  r|j                  d       |j                  d|j                  z         |j                  rP|j                  j                  r:|j                  d|j                  j                  dt        j                  d       |j                  D ]d  }|j                  r|j                  d|j                  j                  d|j                  z        z         |j                  j!                  |       f |j                  d       y y )	NrH   zstruct %s {struct r7  r8  r  z(*%s)r  )r  r  rV   r   r1   specialize_fused_typesr
  r  r  r   obj_base_cnamer   r  r<  r=  rv   r!  )rY   r   rf   r   r1   method_entrys         r*   r%  z)ModuleNode.generate_exttype_vtable_structg  s   zzeii zz

##E*  JJrNJJ}t'<'<<=~~$.."A"A

NN33))+ , !& 3 3 J#00JJu|'8'8'I'I'T`TfTfJf'ggh$$;;LIJ JJt !r,   c                     |j                   sy |j                  |j                         |j                  }|j                  r-|j                  d|j                  d|j                  d       y y )Nstatic struct  *r8  )r  r  rV   r   vtabptr_cnamer  r
  )rY   r   rf   r   s       r*   r&  z/ModuleNode.generate_exttype_vtabptr_declaration  sV    zzeii zzJJ%%""$ % r,   c                    |j                   sy |j                  |j                         |j                  j                  j
                  D ]s  }|j                  r|j                  s|j                  j                  |j                        }|j                  |j                        }|j                  d||d       u y )Nr  r8  )r  r  rV   r   r1   r   r  final_func_cnamer<  build_function_modifiersfunc_modifiersr  )rY   r   rf   r  declaration	modifierss         r*   r'  z5ModuleNode.generate_exttype_final_methods_declaration  s    zzeii !JJ,,:: 	FL,,1N1N*//@@ 113 99,:U:UV	

YDE	Fr,   c                 v    |j                   sy |j                  | j                  |d|j                               y )Nstruct)r1   r  r  r  )rY   r   rf   s      r*   r!  z,ModuleNode.generate_objstruct_predeclaration  s-    zz

4**44;O;OPQr,   c                 $   |j                  |j                         |j                  sy | j                  |d|j                        \  }}|j                  |       |j                  }|rH|j                  }|dk(  rd}|j                  d|j                     |dt        j                  d       n|j                  d       |j                  rN|j                  r|j                  j                  s,|j                  d|j                  d	|j                  d       |j                  j                  D ]  }|j                  rt        }n|j                  }|j                   r|j#                  |j$                        }	n|j'                  |j$                        }	|j(                  j+                  |       |j                  d
|	z          |j                  |       |j,                  -|j                  d|j                  d|j,                  d       y y )Nr  rp  PyHeapTypeObject)r  rH   r7  r8  PyObject_HEADr  r  r  r  )r  rV   r1   r  r  r  r  r  r   r  vtabslot_cnamer
  r	  is_declared_genericr	   r   is_cpp_optionalcpp_optional_declaration_coder=  r<  rv   r!  objtypedef_cname)
rY   r   rf   r  r  r  basestruct_cnamer  	attr_typedecls
             r*   r#  z(ModuleNode.generate_objstruct_definition  s   dhh zz""443G3GH 	

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

6  ,JJ$2F2FH]H]^_ -r,   c                    |d   }|d   }|d   }|j                         }|j                  D ]  }	|s|	j                  s|j                  d|	j                  j
                  z         |j                  d|	j                  j
                  z         |j                  d|	j                  j
                  z         |	j                  j                  |j                  d|	j                  j                  z         |j                  d|	j                  j                  z         |j                  d|	j                  j                  z          y )Nr  r  r  zPyTypeObject *%s;!Py_CLEAR(clear_module_state->%s);z$Py_VISIT(traverse_module_state->%s);PyObject *%s;)insertion_pointr   r   r  r   r_  r`  )
rY   rC   rf   r*  rv   r  r  r  module_state_typeobjr   s
             r*   r/  z(ModuleNode.generate_c_class_declarations  s0   ">2()=> +,C D+;;=(( 	3EU11""#69Q9Q#QR"((7JJ,,-. &++:JJ,,-. ::++7(..AYAY/YZ&,,;

0023 *//>

0023	3r,   c                 `   |j                   ry |j                  D ]  }|j                  s3|j                  s'|j                  dk(  r|j
                  s|j                  sDd }d }d }|j                  dk(  rt        j                  }d}nk|j                  dk(  rt        j                  }|rd}nGd}nD|j                  dk(  r5d}d }|j                  %|j                  j                  |j                        }|j                  }|j                  }	|j
                  r=|s;d}d }t        |      }|j                  t        j                  |j                         }	d}|r|j#                  d|z         |j$                  r#|j#                  |j'                  |	|	             n"|j#                  |j)                  |	|	             ||j+                  d
|z         |j-                  d       |j                  |	k7  r"|j-                  d|j                  d|	d       |j.                  j1                  |        y )Nprivater  rq  r   r  staticr   z%s dll_linkage = %sr8  r  rQ  rn   )is_cython_builtinr	  r  
in_closurer   r   r  r   r;  initr   literal_coder=  r   ra  varptr_prefixru   rL  r  r  r<  put_safer  rv   r!  )
rY   rC   rf   r*  r   storage_classr  r!  r   r=  s
             r*   r0  z*ModuleNode.generate_cvariable_declarations  s     __ .	;E!!U%5%5%%2E<P<PTYT^T^ MKD8+ & 5 5)!!X- & 5 5"-K"-K!!Y. ("::) ::225::>D::DKKE##J ("~

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

eDE33E:].	;r,   c                     |j                   D ]\  }t        j                  xr |j                  dk(   }|j                  s|j                  dk(  s|j
                  s|sOt        ||||       ^ y )Nr  r   )r   r   cimport_from_pyxr   r  r   generate_cfunction_declaration)rY   rC   rf   r*  r   from_pyxs         r*   r1  z*ModuleNode.generate_cfunction_declarations  sd    && 	ME//T8H8HH8T4TH

''83yy.uc4L	Mr,   c                 t   |j                   D ]  }|j                  r|j                  dk(  s |j                  |j                  j                  |j                               |j                  9|j                  j                  |j                        }|j                  d|z         |j                  d        y )Nr   r  r8  )r	  r  r   rL  r   r<  r=  r!  r"  r$  r  )rY   rC   rf   r   r!  s        r*   r  z(ModuleNode.generate_variable_definitions  s    __ 	 E$$)9)9X)E44U[[AB::) ::225::>DMM'D.1

3	 r,   c                    |j                   }|j                  D ]  }|j                  dk7  s|j                  }|j                  }|s/| j                  ||       | j                  |||       | j                  ||       | j                  ||       |j                         r6| j                  |||       |j                         r| j                  |||       |j                  dg      r| j                  ||       |j                  ddg      r| j                  ||       |j                  g d      r(t!        | j"                  dd       |j%                  d       |j                  d	d
g      r| j'                  ||       |j                  ddg      r| j)                  ||       |j                  ddg      r| j+                  ||       |j                  dg      r| j-                  ||       |j                  ddg      r| j/                  ||       |j0                  s0|j2                  s$|j5                  dg      r| j7                  ||       |j                  t8        j:                        r| j=                  ||       n.d|j>                  v r t!        |j@                  j"                  d       t9        jB                  |jD                  j>                        jF                  D ]I  }|jH                  s|j                  |jJ                        s,| jM                  ||||j"                         K | jO                  ||       | jQ                  ||       | jS                  ||       |j%                  d       | jU                  ||       |j%                  d       | jW                  |||       |j%                  d        y )Nr  __getitem____setitem____delitem__)__getslice____setslice____delslice__z__getslice__, __setslice__, and __delslice__ are not supported by Python 3, use __getitem__, __setitem__, and __delitem__ insteadr   zN#error __getslice__, __setslice__, and __delslice__ not supported in Python 3.r0  r1  __getattr____getattribute____setattr____delattr____get____set__
__delete____dict__total_orderingMtotal_ordering directive used, but no comparison and equality methods defined#if CYTHON_USE_TYPE_SPECSr=  r  ),rB  r   r   r   r1   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   rV   r  generate_ass_slice_functiongenerate_getattro_functiongenerate_setattro_functiongenerate_descr_get_functiongenerate_descr_set_functionis_closure_class_scopeis_defaults_class_scopedefines_anygenerate_dict_getter_functionr   richcmp_special_methodsgenerate_richcmp_functionrB   parent_typeget_slot_tablerv   PyNumberMethodsis_binopuser_methodsgenerate_binop_functiongenerate_property_accessorsr  generate_getset_tablegenerate_typeobj_specgenerate_typeobj_definition)rY   rC   rf   r   r   r   r1   slots           r*   r  z'ModuleNode.generate_typeobj_definitions%  sF   --(( 8	)E 8+zz

00=..udEB..ud;225$?~~'77tUK //1 88eL00-A::5$G00-1OP<<UDI001ab!XYZ\ 

#st00..1QR88E00-AS1TU77tD00-1OP77tD00)=88E00)\1JK88E!88E<Y<Y_d_p_pr|q}_~::5$G001R1RS66udC)U-=-== 1 1 5 5 oq !* 8 89I9I9T9T U e e W==U-F-FtGXGX-Y 88dEIIVW 44UDA..ud;..ud;JJ:;..ud;JJw'445EudSJJx(q8	)r,   c                     |j                   }|j                  r-|j                  d|j                  d|j                  d       y y )Nr  r7  r8  )rS  vtable_cnamer  r
  rY   r1   rf   r   s       r*   r=  z"ModuleNode.generate_exttype_vtablea  s>      JJ%%!!# $ r,   c                     |j                   }|j                  |j                  d      d|j                         d       y )Npz = (z)o;)rS  r  r<  re  r`  s       r*   generate_self_castzModuleNode.generate_self_casti  s8      

%%c*++-/	0r,   c                 "   | j                   j                  t        j                  dd             |j                  rd}nd}|j                  dd      }| j                  |j                        }| j                  d| d	| d
| d| d| d       y )NCheckTypeForFreelistsExtensionTypes.c$__PYX_CHECK_FINAL_TYPE_FOR_FREELISTS__PYX_CHECK_TYPE_FOR_FREELISTSrH   Tderefzif (likely((int)(z) & rm   r  z	, sizeof(z)))))	rv   rw   r
   rx   is_final_typer<  name_in_slot_module_stater_  r  )rf   
size_check
type_cnamer   freelist_check
obj_structr_  s          r*   generate_freelist_conditionz&ModuleNode.generate_freelist_conditionp  s    ))##$;=OP	RCN=N**2T*:
66t7I7IJ


|4/?qB}o]fgqfrrvw	yr,   c           
         t        j                  dd      }|j                  d      }|j                  |      |k7  ry |j                  }|j
                  }|j                         \  }\  }	}
}|j                  j                  }|j                  rg }	|j                  D cg c]  }|j                  j                  |      r|! }}|j                  d      }|r|j                  sd }|s|r|j                  sd}nd}|rd}n|j                  j!                  dd      }|j                  t"        j$                        }|j                  t"        j&                        }|r|j(                  d   }|j+                  d       |j+                  d       |j+                  d	|j                  j-                  |      |fz         |j+                  d
|z         |j+                  d       |j/                  |t0        j2                  dd| d| dd       |j4                  xs |
xs |xs |	xs |}|r-|j+                  d|j                  j-                  d      z         |r]t        j6                  ||      }|j8                  }|j:                  s|j=                  |      }|d| d}|j+                  d|z         n|j+                  d       |r|j(                  j?                  tA        jB                  dd             |j+                  d       |j=                  |      }|j=                  |      }| jE                  || dd|       |j+                  d       |j+                  d|d|d       |j-                  dd      }|j+                  d        |j+                  d!       |j+                  d       |j+                  d"|z         |j+                  d#       |j+                  d$       |j+                  d%       |j+                  d&       |j+                  d       |jG                         r|j+                  d'       |j+                  d(       |j+                  d       |j+                  d       |j(                  j?                  tA        jB                  d)d*             |j+                  d+|d,d-       |j+                  d.       |r|s|j+                  d/       |r#|j+                  d0|jI                  d1      z         d2}|j4                  r|}|j
                  rE|j
                  jJ                  r/|j
                  }|j
                  r|j
                  jJ                  r/||urd3|jJ                  z  }nd}|j+                  d4|j4                  d5||jL                  d6       |D ]   }|j                  jO                  ||d47       " |	D ]T  }|jP                  d8k(  r/d}|jS                  d4|jT                  d9|jT                  d:       A|jW                  |d;d2<       V |D ]>  }|j+                  d=|jT                  z         |j+                  d>|jT                  z         @ |
D ]   }|j+                  d?|jT                  z         " |jT                  d@k(  r|j+                  dA       |rX|j                  r&dBt"        jX                   dCt"        jZ                   dD}ndE}d}|j+                  dF|j\                  dG|dH       |j+                  dI       |r:|j+                  dJ       |j_                  d1t`        d2<       |j+                  dK       |j+                  d/       |jc                          y c c}w )LNtp_new	__cinit__rH   CYTHON_UNUSED r   freelistmodule_state_contents#if CYTHON_USE_FREELISTSz%s[%d];zint %s;r  zPyTypeObject *t, zPyObject *a, zPyObject *kT)needs_prototyper  rb  z__Pyx_PyType_GetSlot(z, tp_new, newfunc)zPyObject *o = %s(t, a, k);zPyObject *o;IncludeStringHStringTools.cz > 0r+  {zo = (PyObject*)[--];ri  r<  zPy_DECREF(Py_TYPE(o));zmemset(o, 0, sizeof(%s));z##if CYTHON_COMPILING_IN_LIMITED_APIz(void) PyObject_Init(o, t);r=  z(void) PyObject_INIT(o, t);PyObject_GC_Track(o);} elseAllocateExtensionTyperf  z#o = __Pyx_AllocateExtensionType(t, r  r  zif (unlikely(!o)) return 0;r  zp = %s;oFz(struct %s*)p->rG  r8  extra_access_coder9  z" = PyDict_New(); if (unlikely(!p->z)) goto bad;p->%sr  zp->%s.data = NULL;zp->%s.memview = NULL;zp->%s.obj = NULL;__pyx_memoryviewslicezp->from_slice.memview = NULL;zo, z->z, NULLzo, a, kzif (unlikely(rm   z) < 0)) goto bad;z	return o;r[  zreturn NULL;)2r   ConstructorSlotmangle_internal	slot_coderS  r  get_refcounted_entriesrk  is_internalr	  r   needs_explicit_constructionr  
is_specialtrivial_signaturerB   r  r   freelist_namefreecount_namerv   r  r<  start_slotfuncr   py_objptr_typer  get_base_slot_functionr_  is_builtin_typerl  rw   r
   rx   rq  rA  	cast_coder
  r   generate_explicit_constructionru   rL  r=  r  modulestateglobal_cnameempty_tuple
func_cnameput_decref_clearr	   r   )rY   r1   rf   cclass_entrytp_slot	slot_funcr   r  have_entriesr  
py_buffersmemoryview_slicesrk  r   explicitly_constructable_attrscinit_func_entryunused_markerfreelist_sizer  r  r  need_self_castrs  base_type_typeptr_cnamerp  needs_error_cleanupvtab_base_typestruct_type_cast
cinit_argss                                r*   r>  z ModuleNode.generate_new_function}  s   ++HkB))(3	U#y0  NN	 446 	@?x->))77H$00*
zz55e< *
& *

 !,,[9$4$?$?#)2B2T2TM,MM!,,00Q?M--f.B.BC..v/D/DE++,CDLr"9:y!!22=A,     y>9:x(:,,hmM?+Vhl 	 	n -- 9%F):Fh98 	 JJuu00AA#FFG55eWEF&/&=&=#,,*.*H*HI`*a'~01H0II[\JJ3f<=JJ~&  11++,<oNP

56!%!?!?!O $ > >} M00.9I7NPSUYZ

3

!"$ % "222T2B


67 

34

8$

6CD

@A 

89

7#

89

8$>>#JJ67

8$

8$

3--''(?AST JJ<]1<MRPQ

01JJsOJJy4>>##667
 $!N **~/G/G/X/X!/!9!9 !**~/G/G/X/XT)#1N4S4S#S #% JJ## $"4"46 7 4 	6EJJ55eu 6 6	6  	JEzzZ'&*#KK. / ,,UG5,I	J ' 	>EJJ+ekk9:JJ.<=	>   	:EJJ*U[[89	: !88JJ6711"6#A#A"B"VEWEWDXX^_
&
"&JJ ++Z9 : 	

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

	e*
s   $]2c                    t        j                  d|j                        }|j                  d      }|j	                  |      |k7  ry |j                  d      }||j                  sy |j                  d       |j                  r|j                  d|j                  z         |j                  |t        j                  ddd       |j                  d       |j                  d	       |j                  d
|j                  z         |j                  d       |j                  d       |j                          |j                  r|j                  d       y y )Ntp_finalize__del__rH   z#if %sPyObject *oFneeds_funcstatePyObject *etype, *eval, *etb;!PyErr_Fetch(&etype, &eval, &etb);%s(o); PyErr_Restore(etype, eval, etb);r  r  )r   get_slot_by_namerB   r  r  r  r  r  
used_ifdefr  r   r   r  r   )rY   r1   rf   r  slot_func_cnamer   s         r*   r?  z ModuleNode.generate_del_function   s   ,,]E<L<LM//>U#6!!),= 0 0

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

23

67

8e.../

56

3JJx  r,   c           	         t        j                  dd      }|j                  d      }|j                  j                  }|j                  |      |k7  ry |j                  d      }|j                  |t        j                  dd       |j                  j                  }|j                         }|j                         }	|j                  s|j                  s|j                  d      nd }
|
|j                  vrd }
|j                  s|j                  s|j                  d      nd }||j                  vrd }|j!                         \  }\  }}}|j                  D cg c]  }|j"                  j%                  |      r|! }}|s|s|s|
s|r| j'                  ||       |r|j)                         r|j+                  d       |rd}nd}|j+                  d	|z         |j+                  d
|z         |j+                  d       |j+                  d       |j+                  d       |j+                  d       |r|j+                  d       |	rC|j,                  j/                  t1        j2                  dd             |j+                  d|z         |
r|j+                  d       | j5                  ||       |r|j+                  d       |D ]   }|j"                  j7                  ||d       " ||z   D ]/  }|j9                  d|j:                  z  |j"                  ddd       1 |r|j<                  }|j>                  s|jA                  |      }t        jB                  ||      }|O|r7|jD                  r+|jD                  j                         r|j+                  d       |j+                  d|z         n|j>                  rO|r7|jD                  r+|jD                  j                         r|j+                  d       |j+                  d|z         n|r|j+                  d|z         |j+                  d       |j+                  d|d |d!       |j+                  d       |j+                  d"|z         |j,                  j/                  t1        j2                  d#d             n|jF                  jI                  d$d%      }|r|jA                  |j                  tJ        jL                              }|jA                  |j                  tJ        jN                              }|j                  }|j+                  d&       | jQ                  || d'| d(|       |j+                  d)       |j+                  |d*|d+|jS                  d,      d-       |j+                  d.       |j+                  d       |j+                  d)       |j+                  d/       |j+                  d0       |j+                  d1       |j+                  d2       |j+                  d)       |j+                  d3       |j+                  d4       |j+                  d       |j+                  d       |j+                  d5       |j+                  d6       |j+                  d       |r|j+                  d       |	r|j+                  d7       |j+                  d       |jU                          y c c}w )8N
tp_dealloc__dealloc__r  __weakref__r9  z#if CYTHON_USE_TP_FINALIZEz!!__Pyx_PyObject_GC_IsFinalized(o)z@(!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))zIif (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && %s) {z>if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == %s) {z1if (PyObject_CallFinalizerFromDealloc(o)) return;r  r  zPyObject_GC_UnTrack(o);
PyTrashcanrf  z__Pyx_TRASHCAN_BEGIN(o, %s)z.if (p->__weakref__) PyObject_ClearWeakRefs(o);z+if (p->__dict__) PyDict_Clear(p->__dict__);r  r  r  FT)r  clear_before_decrefhave_gilr  r  z4__Pyx_PyType_GetSlot(%s, tp_dealloc, destructor)(o);z+if (PyType_IS_GC(%s)) PyObject_GC_Track(o);rZ  if (likely(z)) __Pyx_PyType_GetSlot(z", tp_dealloc, destructor)(o); elsez"__Pyx_call_next_tp_dealloc(o, %s);CallNextTpDeallocrv  r   rx  z < z
Py_TYPE(o)r|  [z++] = r  r8  r  PyTypeObject *tp = Py_TYPE(o);#if CYTHON_USE_TYPE_SLOTS(*tp->tp_free)(o);r=  <freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);if (tp_free) tp_free(o);r<  Py_DECREF(tp);__Pyx_TRASHCAN_END)+r   r  r  rS  r  r  r  r   r   rk  rA  needs_trashcanrM  rN  r  r	  r  r   needs_explicit_destructionrc  may_have_finalizer  rv   rw   r
   rx   generate_usr_dealloc_callgenerate_explicit_destructionput_xdecref_clearr=  r_  r  rl  r  r1   rB   r  r   r  r  rq  r  r   )rY   r1   rf   r  r  r  r  rk  rA  r  weakref_slot	dict_slotr?  r  r  r   explicitly_destructable_attrsfinalised_check
base_cnamer  r  r  r  r   s                           r*   r@  z$ModuleNode.generate_dealloc_function9  s   ++L-H)),7	%%//	U#y0//=E:#9#9<W))77>>#--/@E@\@\`e`}`}u((7  EIu000L:?:V:VZ_ZwZwE%%j1  C	E---I.3.J.J.L++Ha*$00)
zz44U; )
% )

 48I\]f##E40 7 7 9JJ34"E W  JJ[^mmo JJWZiijJJJKJJsOJJsOJJx  JJ01--''6HIKJJ4FG
 JJGH 	&&ud3JJDE2 	[EJJ44T5TY4Z	[ !22 	LE""7U[[#8%**E7;d # L	L "00J,,!;;JG
"99%IJ%	IOO4L4L4N JJ67

8j01**	IOO4L4L4N JJ67

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

9:


, -

8$

?/QR  11++,?ASTV ",,00Q?M $ > >))&*>*>?!A!%!?!?))&*?*?@"B ((

5600^,C? $( 

3

!"NN3') * 

8$

8$

3JJ78JJ23JJ+,JJwJJsOJJUVJJ12JJsOJJx JJ23JJ'(JJx 

3JJ+,

	W)
s   $[c                    |j                  d      }|r|j                  sy |j                  j                  t	        j
                  dd             |j                  d       |j                  d       |j                  d       |j                  d       |j                  d|j                  z         |j                  d	       |j                  d
       |j                  d       y )Nr  DeallocKeepAliverf  r|  r  r  z__Pyx_DeallocKeepAliveBegin(o);r  z__Pyx_DeallocKeepAliveEnd(o);r  r  )r  r  rv   rw   r
   rx   r  r  )rY   r1   rf   r   s       r*   r  z$ModuleNode.generate_usr_dealloc_call  s    !!-0E,,))##$68JK	M

3

23

67 	

45

8e.../

23

56

3r,   c                 n   t        j                  d      }|j                  d      }|j                  j                  }|j                  |      |k7  ry |j                  |t        j                  dd       |j                  d      \  }\  }}	}
| }d}|j                  d       |s|	r| j                  ||       |rt        j                  ||      }|r|j                  d|z         nR|j                  rW|j                  }|j                  d       |j                  d| d	       |j                  d
       |j                  d       d}n|j                  |j                        }|j                  d       |j                  d       |j                  d|z         |j                  d| d	       |j                  d       |j                  d       |j                  d       |j                  d|z         |j                  d       |j                   j#                  t%        j&                  dd             d}|s|r|j                  d       |j                  dt)        |        d       |j                  d       |j                  d       |j                   j#                  t%        j&                  dd             |D ]o  }d|j*                  z  }t        j,                  t.        |j0                  |      }|j                  d|z         |j                  d|z         |j                  d       q |	D ]J  }|j*                  dz   }|j                  d|z         |j                  d|z         |j                  d       L |j                  d        |j                  d       |j3                          y )!Ntp_traversez!PyObject *o, visitproc v, void *aFinclude_gc_simplezint e;z!e = %s(o, v, a); if (e) return e;r|  z-traverseproc traverse = __Pyx_PyType_GetSlot(z, tp_traverse, traverseproc);z>if (!traverse); else { e = traverse(o,v,a); if (e) return e; }r  TrZ  ze = 0;if (likely(%s)) {z(if (traverse) { e = traverse(o, v, a); }r  r  z1{ e = __Pyx_call_next_tp_traverse(o, v, a, %s); }zif (e) return e;CallNextTpTraverserf  z e = __Pyx_call_type_traverse(o, z, v, a);CallTypeTraverser  	if (%s) {z!e = (*v)(%s, a); if (e) return e;z.objzif (p->%s) {z$e = (*v)(p->%s, a); if (e) return e;rZ  )r   GCDependentSlotr  rS  r  r  r  r   c_returncode_typer  r  rc  r  r  r_  rl  rv   rw   r
   rx   rl  r=  typecastr	   r   r   )rY   r1   rf   r  r  r  r  r  r  r  r  needs_type_traversemaybe_needs_type_traversestatic_callr  r   var_codevar_as_pyobjectr=  s                      r*   rB  z%ModuleNode.generate_traverse_function  sR   ++M:))-8	%%//	U#y0E:#?#?Pst ((5(A 	@?x-> #,m$)!

8z##E40#::5'JK

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

3

CJ<Olmo

[\

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

9:

8$

.;<

CJ<Olmo

EF

8$

8$

NQZZ[

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

;

3r,   c                    t        j                  d|j                        }|j                  d      }|j                  j
                  }|j                  |      |k7  ry |j                  d      \  }\  }}	}
|s|	s|rd}nd}|j                  |t        j                  d| d       |r!t        j                  r|j                  d       |s|	r| j                  ||       |rZt        j                  ||      }|r|j                  d|z         n,|j                   rU|j"                  }|j                  d	       |j                  d
| d       |j                  d       |j                  d       n|j%                  |j"                        }|j                  d       |j                  d|z         |j                  d
| d       |j                  d       |j                  d       |j                  d       |j                  d|z         |j&                  j)                  t+        j,                  dd             t        j                  r|D ]y  }d|j.                  z  }|j                  d|z         |j0                  r|j3                  |t4        d       n|j3                  ||j6                  d       |j                  d       { n%|D ]   }|j                  d|j.                  z         " |	D ]   }|j                  d|j.                  z         " |j.                  dk(  r|j                  d       |j                  d       |j                  d       |j9                          y )Ntp_clearFr  rH   ru  r  zPyObject* tmp;r  r|  z%inquiry clear = __Pyx_PyType_GetSlot(z, tp_clear, inquiry);zif (clear) clear(o);r  rZ  r  r  r  z${ __Pyx_call_next_tp_clear(o, %s); }CallNextTpClearrf  r  ztmp = ((PyObject*)%s);r  zPy_XDECREF(tmp);zPy_CLEAR(p->%s);zPy_CLEAR(p->%s.obj);r  z(__PYX_XCLEAR_MEMVIEW(&p->from_slice, 1);rZ  )r   r  rB   r  rS  r  r  r  r  r   r  r   clear_to_noner  rc  r  r  r_  rl  rv   rw   r
   rx   r=  r  put_init_to_py_noner	   r   r   )rY   r1   rf   r  r  r  r  r  r  r  r  unusedr  r  r   ru   s                   r*   rD  z"ModuleNode.generate_clear_functionG  s	   ,,Z9I9IJ))*5	%%//	U#y0 ((5(A 	@?x-> zYF%FE:#?#?PVxWbMcd--JJ'(z##E40#::5'JK

8k12**&44


3

B:,Ncde

12

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

9:

.;<

B:,Ncde

12

8$

8$

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

3d:;,,,,T>,O,,T5::U,K

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

-;<=   	=EJJ-;<	= !88JJAB

;

3r,   c                    |j                  |t        j                  ddd       |j                  d       |j                  d       |j                  d       |j                  d       |j                  d	       |j                  d
       |j                  d       |j                  d       |j                  d       |j                  d       |j	                          y )Nsq_itemzPyObject *o, Py_ssize_t iFr  zPyObject *r;z5PyObject *x = PyLong_FromSsize_t(i); if(!x) return 0;z_#if CYTHON_USE_TYPE_SLOTS || (!CYTHON_USE_TYPE_SPECS && __PYX_LIMITED_VERSION_HEX < 0x030A0000)z2r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x);r=  zDr = ((binaryfunc)PyType_GetSlot(Py_TYPE(o), Py_mp_subscript))(o, x);r  zPy_DECREF(x);	return r;r  )r  r   r  r  r   )rY   r1   rf   s      r*   rF  z(ModuleNode.generate_getitem_int_function  s     	E:#<#<iIdv{|

	

C	E 	

tu

@	B

7

YZ

8

	

	

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

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

	

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

	

	r,   c                     |rx|j                  |      }|r!|j                  | d| d| d| d| d
       n|j                  | d| d| d| d       |j                  d       |j                  d| d       y y )Nz  f = __Pyx_PyType_TryGetSubSlot(r  r  z f = __Pyx_PyType_TryGetSlot(zif (f)z	return f()typeptr_cname_in_module_stater  )rY   r  substructurer]  functyper  rf   base_tpnames           r*   r  z)ModuleNode.generate_guarded_basetype_call  s    <<YGK 

j @RP\~]_`d_eeghpgqqstv 

j =k]"TFRTU]T^^`acJJx JJ4&+, r,   c                    |j                  d      ry |j                  |t        j                  dd       |j	                  d       g }|j
                  }|p|j                  j                  dk(  sW|j                  |j                         |j                  j
                  j                  }||j                  j                  dk(  sW||v sJ d }|r=|j                  j                  dk(  r$|j                  r|n|j
                  j                  }d|j                  v }i }t        j                  D ]#  }|D ]  }	|	j                  |      }
|
|
||<    # % |rt        D cg c]  \  }}||v s| }}}|sLd|vr%d|vr!t!        |j
                  j"                  d	       n t!        |j
                  j"                  d
       d}n5d|vr&d|vr"t!        |j
                  j"                  d       d}t%        |      }t        j                  D ]  }|j'                  d      j)                         }|j+                  |      }
|
|r|dv r=|j	                  d|z         |
=|sJ t        |f   \  }}}|j	                  d       |j	                  d||   j,                  z         |j	                  d       |j	                  d       |j	                  d       |j	                  d       |X|dk(  r;|j	                  d|rdndz         |j	                  d       |j	                  d       nN|dk(  r;|j	                  d|rdndz         |j	                  d       |j	                  d       nt/        d|      d|v rd}nd}| }|j	                  d||   j,                  z         |j	                  d       |j	                  d        |j	                  d       |j	                  d!       |r|j	                  d"       n|j	                  d#       |j	                  d$       |j	                  d%       |j	                  d%       n6|r|j	                  d&       n|j	                  d'       |j	                  d$       |j	                  d%       |j	                  d(       n|j	                  d)|
j,                  z         |j	                  d%        d|v rd|vr|s|j	                  d*       |j	                  d       |j	                  d|d   j,                  z         |j	                  d       |j	                  d+       |j	                  d       |j	                  d,       |j	                  d-       |j	                  d$       |j	                  d%       |j	                  d(       |j	                  d%       |j	                  d.       |r8|j                  r,|j	                  d/|j                  d0|j                  d1       |j	                  d2       |j	                  d%       |j	                  d%       |j	                  d%       |j1                          y c c}}w )3N__richcmp__tp_richcomparez"PyObject *o1, PyObject *o2, int opzswitch (op) {r  r:  __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;rF   zif (%s order_res) {z!!!zret = __Pyx_NewRef(Py_False);z} else {rG   rH   zret = __Pyx_NewRef(Py_True);zUnknown op z(int eq_res = __Pyx_PyObject_IsTrue(ret);z&if (unlikely(eq_res < 0)) return NULL;z"ret = eq_res ? Py_False : Py_True;z"ret = eq_res ? Py_True : Py_False;zPy_INCREF(ret);r  z%ret = order_res ? Py_False : Py_True;z%ret = order_res ? Py_True : Py_False;zreturn ret;zreturn %s(o1, o2);zcase Py_NE: {z#int b = __Pyx_PyObject_IsTrue(ret);z!if (unlikely(b < 0)) return NULL;zret = (b) ? Py_False : Py_True;z
default: {r  z->tp_richcompare)) return z->tp_richcompare(o1, o2, op);z'return __Pyx_NewRef(Py_NotImplemented);)r  r  r   r  r  rS  r   r   r   r1   r  r_  rB   r   rQ  TOTAL_ORDERINGr   rV   maxstripupperr  r  AssertionErrorr   )rY   r1   rf   class_scopesclsextern_parentr:  
comp_entry
cmp_methodclass_scoper   	from_nameto_name
comp_namesordering_sourcecmp_typeinvert_compcomp_opinvert_equalseq_funcs                       r*   rR  z$ModuleNode.generate_richcmp_function  s   ]+E:#<#<>NPtu

?#ocii&:&:h&F		*))''11C ocii&:&:h&F $$399''83#&#4#4C%:K:K:U:UM)U-=-==
#;; 	J+ #//
;$-2Jz*		 >Lh(:	7PY]gPg)hJh:-(:2ME--11km E--11\^!&:-(*2LE--113rs%*N #&j/#;; @	J!'',224HNN:.E}nL8P JJ12}%%6D_V`E`6a3Wm 

+,

.O1L1W1WWX

KL

HI

,-

FG ,$

#8KDUX#YZ

#BC

:. D

#8;CTV#WX

#AB

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

#GH

#GHJJ01JJsOJJsO #

#JK

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

3

=)

/%2B2BBCJJsOA@	D z!hj&@JJ'JJ'( JJ*Z-A-L-LLMJJGHJJ<=JJ()JJ:;JJ89JJ()JJsOJJ}%JJsO

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

<=

3

3

3[ is   Y+Yc                    j                  |j                        j                  d   r1j                  dd|j                  j                               y |j                  j                  t        j                  t        j                  fv rd}dx}nM|j                  j                  t        j                  t        j                  fv rd}dd}nt        |d	|z         y fd
fd} |j                  j                        rW |j                  j                        s;t        |d|j                  j                  d|j                  j                  d       j                          |j!                         }|rj                  |       j#                         t%        t'         |j                  j                                    }	t%        t'         |j                  j                                    }
j(                  j*                  }j(                  j,                  rj/                  |      }j                  t1        j2                  dd|j                  |	|
 ||j                  j                  d       ||j                  j                  d      |||d
      d          j5                          |rj                  d       y y )Nc_api_binop_methodsr  r7  
binaryfuncrH   ternaryfuncz, extra_argz, PyObject* extra_argz"Unexpected type slot signature: %sc                 ^    j                  |       }|r|j                  r|j                  S d S r%   )lookupr  r  )method_namer   r1   s     r*   get_slot_method_cnamezAModuleNode.generate_binop_function.<locals>.get_slot_method_cname	  s,    LL-E',1A1A5##KtKr,   c                      |       }|r|d|rdnddS dj                  j                  j                        ddS )Nrm   zright, leftzleft, rightrn   z&_maybe_call_slot(__Pyx_PyType_GetSlot(z', tp_base, PyTypeObject*), left, right )name_in_module_staterS  r_  )r&  r  r  rf   	extra_arg	func_namer'  r1   s      r*   call_slot_methodz<ModuleNode.generate_binop_function.<locals>.call_slot_method	  sV    .{;J%,M-?  --e.?.?.M.MN 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.	BinopSlotrf  F)r  T)
r+  	slot_nameoverloads_leftoverloads_right	call_left
call_rightrn  	slot_typer*  extra_arg_declrQ   r   r  )r  r.  rB   r  	left_slotr  	signaturer   r"  ibinaryfuncpowternaryfuncipowternaryfuncr   r&  
right_slotr   preprocessor_guard_coder   rl  rP   rS  r_  r  r)  r    rK  r   )rY   r1   r]  rf   rV   r3  r4  r,  preprocessor_guardr/  r0  parent_type_cnamer*  r+  r'  s    ` `        @@@r*   rX  z"ModuleNode.generate_binop_function	  sd   ))$..9	12JJ)T^^5M5Me5TUV>>##	(<(<i>S>S'TT$I)++I^^%%)*B*BID]D])^^%I%I4N#;dBC	L	 	 !!;!;<EZ[_[j[j[v[vEwC **++	  	

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

--/!*!%&4'6!1$..2L2LV[!\"24??3N3NX\"]"3!*!*&4 	  	JJx  r,   c                    dfd	 d      } d      }|j                  t        j                  ddd       ||j                  d|j                  z         n|j                  d	       |Q|j                  d
       |j                  d       |j                  d|j                  z         |j                  d       |j                  d       |j                  d       |j                          y )Nc                     |j                   }|j                  j                  |       }|/|j                  r||S |j                   | |j                        S |S r%   )rS  r1   r  is_externalr  )ntpextern_returnrlookup_here_or_baser1   s       r*   rF  zBModuleNode.generate_getattro_function.<locals>.lookup_here_or_base	  s^    z&&$$Q'Ay>>m&?((<<+.q",,??Hr,   r2  r3  tp_getattrozPyObject *o, PyObject *nFr  zPyObject *v = %s(o, n);z,PyObject *v = PyObject_GenericGetAttr(o, n);z9if (!v && PyErr_ExceptionMatches(PyExc_AttributeError)) {zPyErr_Clear();zv = %s(o, n);r  z	return v;)NN)r  r   r  r  r  r   )rY   r1   rf   getattr_entrygetattribute_entryrF  s    `   @r*   rI  z%ModuleNode.generate_getattro_function	  s    
	 ,M:01CDE:#<#<mMgy~)JJ)&1134 JJ>@$JJKMJJ "JJ!,,./ JJ

	

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

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

	

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

	

	r,   c                 t   |j                  d      }|j                  |t        j                  ddd       |j	                  d       |j	                  d       |j	                  d       |j	                  d	|j
                  z         |j	                  d
       |j	                  d       |j                          y )Nr6  tp_descr_getz%PyObject *o, PyObject *i, PyObject *cFr  zPyObject *r = 0;zif (!i) i = Py_None;zif (!c) c = Py_None;zr = %s(o, i, c);r  r  )r  r  r   r  r  r  r   )rY   r1   rf   user_get_entrys       r*   rK  z&ModuleNode.generate_descr_get_function#
  s    
 **95E:#<#<nNu  HM  	N

	 

"	$

"	$ 	

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

	

	r,   c                    |j                   j                  }|j                  d      }|j                  d      }|j                  |t        j
                  dd       |j                  d       |r|j                  d|j                  z         n8| j                  |d ddd|       |j                  d	       |j                  d
       |j                  d       |j                  d       |r|j                  d|j                  z         n8| j                  |d ddd|       |j                  d       |j                  d
       |j                  d       |j                  d       |j                          y )Nr7  r8  tp_descr_setr  r  r  descrsetfuncr  6PyErr_SetString(PyExc_NotImplementedError, "__set__");r\  r  r  r  z9PyErr_SetString(PyExc_NotImplementedError, "__delete__");r  )rY   r1   rf   r  user_set_entryuser_del_entrys         r*   rL  z&ModuleNode.generate_descr_set_function>
  sa    %%//	**95**<8E:#?#?Qxy

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

	

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

	

	r,   c                     |j                   D ]X  }|j                  }|j                  dg      r| j                  ||       |j                  ddg      sG| j	                  ||       Z y )Nr6  r7  r  )property_entriesr1   rO  generate_property_get_functiongenerate_property_set_function)rY   cclass_scoperf   r   property_scopes        r*   rY  z&ModuleNode.generate_property_accessorsi
  se    !22 	AE"[[N))9+633E4@))9i*@A33E4@	Ar,   c                 l   |j                   }|j                  j                  t        j                  |j
                        |_        |j                  d      }|j                  d       |j                  d|j                  z         |j                  d|j                  z         |j                  d       y )Nr6  rH   9static PyObject *%s(PyObject *o, CYTHON_UNUSED void *x) {return %s(o);r  )
r1   parent_scopera  r   prop_get_prefixru   getter_cnamer  r  r  )rY   property_entryrf   r[  	get_entrys        r*   rX  z)ModuleNode.generate_property_get_functionq
  s    '--&4&A&A&H&H""N$7$7'9#"..y9	

2

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

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

	r,   c                    |j                   }|j                  j                  t        j                  |j
                        |_        |j                  d      }|j                  d      }|j                  d       |j                  d|j                  z         |j                  d       |r|j                  d|j                  z         n"|j                  d       |j                  d       |j                  d	       |j                  d
       |r|j                  d|j                  z         n"|j                  d       |j                  d       |j                  d	       |j                  d	       y )Nr7  r  rH   z@static int %s(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {r  zreturn %s(o, v);rS  r\  r  r  r^  z6PyErr_SetString(PyExc_NotImplementedError, "__del__");)
r1   r_  ra  r   prop_set_prefixru   setter_cnamer  r  r  )rY   rb  rf   r[  r  r  s         r*   rY  z)ModuleNode.generate_property_set_function
  sN   '--&4&A&A&H&H""N$7$7'9#"..y9	"..y9	

2

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

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

	

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

	

	r,   c           	      2   |j                   }|j                  }t        j                  d|j                  j
                        }|j                  ||       t        j                  d|j                  j
                        }|j                  |      s4|j                  d       |j                  ||       |j                  d       |j                  r|j                  }nd|j                  z  }|j                  s|j                  d      nd }|r|j                  rd }t        |      }	|	rP|j                  j!                  t#        j$                  dd             |j                  d	|j&                  z         |j                  d
       |r"|j                  d|d|j(                  d       |j                  d       |j                  d       |j                  d       |rt+        |j,                        }
|
 d}|j                  d       |j                  d       |j                  d| d       |j                  d       |j                  d| d       |j                  d       |j                  d       |j                  d|j&                  z         t        j.                  |j                  j
                        D ]  }|j1                  ||        |	r|j                  d|j&                  z         |j                  d       |j                  d       |j2                  j5                         }|j                  d|j&                  z         |j                  d| j6                  d|j9                  dd      d       |j                  d|z         |j                  d        |j                  d!t        j                  d"|j
                        j;                  |      z         |j                  d#|j&                  z         |j                  d       y )$N
tp_memberstp_as_bufferz$#if !CYTHON_COMPILING_IN_LIMITED_APIr  r  r  IncludeStructmemberHr  z#static PyMemberDef %s_members[] = {z#if !CYTHON_USE_TYPE_SLOTSz,{"__weaklistoffset__", T_PYSSIZET, offsetof(r  z), READONLY, 0},{0, 0, 0, 0, 0}r  zL: __weakref__ is unsupported in the Limited API when running on Python <3.9.zM#if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x03090000z+#if defined(__GNUC__) || defined(__clang__)z
#warning "r@  r  z#pragma message("z")z!static PyType_Slot %s_slots[] = {z#{Py_tp_members, (void*)%s_members},z{0, 0},zstatic PyType_Spec %s_spec = {r  rH   z",zsizeof(%s),z0,r  tp_flagsz	%s_slots,)r   r1   r   r  rv   rB   generate_substructure_specis_emptyr  generate_substructurer  r  rM  r  r  rP   rw   r
   rx   r`  r=  r   rV   rT  generate_spec
class_namer$  r   rC  r  )rY   r   rf   ext_typer1   members_slotbuffer_slot	objstructweakref_entrygenerate_memberspositionweakref_warn_mesager]  	classnames                 r*   r[  z ModuleNode.generate_typeobj_spec
  s`   :: 11,@P@P@[@[\//t<00AQAQA\A\]##E*JJ=>--eT:JJx    00I#h&>&>>I@E@\@\))-8bf]77 M.--''(>@STVJJ<x?U?UUVJJ34
 

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

jk

HI

Z(;'<A>?

45

./B.C2FG

8$

8$ 	

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

9

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

3h6L6LLM

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

=9,-

4

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

;!7!778

4r,   c                 $   |j                   }|j                  }t        j                  |j                  j
                        j                  D ]  }|j                  ||        |j                  d       |j                  dk(  rd}nd}|j                  ||j                  z         |j                  d       |j                  j                         }|j                  d| j                  d|d       |j                  r|j                  }	nd	|j                  z  }	|j                  d
|	z         |j                  d       t        j                  |j                  j
                        D ]  }
|
j!                  ||        |j                  d       y )NrH   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*/r  )r   r1   r   rT  rv   rB   substructuresro  r  r   r`  rq  r$  r   r  r  generate)rY   modnamer   rf   r   r1   suiter  rz  ru  r]  s              r*   r\  z&ModuleNode.generate_typeobj_definition
  sV   zz

--d.>.>.I.IJXX 	5E''t4	5

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

6D.../

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

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

*Y6	8

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

	r,   c                    |j                   r|j                  sy |j                  d   }|j                  d       |j	                         }|j                  d|j
                  z         |j                  D ]2  }|j                  r|r|j                  r|j                  |d|       4 |j                  d       |j                  d       |j                         r|j                  d       y y )NbindingrH   zstatic PyMethodDef %s[] = {r  )wrapper_code_writerz{0, 0, 0, 0}r  )
is_c_class_scopepyfunc_entriesrB   r  r  method_table_cnamefused_cfunctionis_overridableput_pymethoddefgetvalue)rY   rC   rf   r  r  r   s         r*   r  z ModuleNode.generate_method_table  s    (:(:..+

2"224

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

	

	 '')%%b) *r,   c                 `   |j                  d      }|r|j                  sy |j                  d      }|j                  }|j	                  d       |j	                  d       |j	                  d|z         | j                  ||       |j	                  d|z         |j	                  d|z         |j	                  d       |j	                  d	|z         |j	                  d
|z         |j	                  d       |j	                  d       |j	                  d| d       |j	                  d       y )Nr9  __dict__getterrH   zM#if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030A0000r]  zif (unlikely(!p->%s)){zp->%s = PyDict_New();r  zPy_XINCREF(p->%s);zreturn p->%s;r=  r  z PyObject_GenericGetDictr  )r  is_variabler  r=  r  rc  )rY   r1   rf   	dict_attrr+  	dict_names         r*   rP  z(ModuleNode.generate_dict_getter_function&  s   %%j1		 5 5))*:;	OO	

2

bc

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

+i78

*Y67

3

')34

?Y./

3

7 	

Xi[(@AB

8r,   c                    |j                   r|j                  d       |j                  d|j                  z         |j                   D ]  }|j                  }|r0|j                  r|j                         }d|j                         z  }nd}|j                  d|j                  j                         d|j                  xs dd|j                  xs dd|d	        |j                  d       |j                  d	       y y )
NrH   z"static struct PyGetSetDef %s[] = {zPyDoc_STR(%s)r  r|  r  z, 0},rk  r  )
rW  r  getset_table_cnamer   
is_unicodeas_utf8_stringr$  ru   ra  rf  )rY   rC   rf   r   r   doc_codes         r*   rZ  z ModuleNode.generate_getset_table>  s    JJrNJJ4&&'( -- #ii~~!002.1H1H1JJH"H



668**1c1**1c1 	"## JJ!#JJ+  r,   c                     t        |j                  j                               D ]Q  \  }}|j                  s|j                  s |j
                  j                  r7|j
                  j                  |       S y r%   )r   r   r   
is_cglobalr  r   r  rp  r   s       r*   r   z5ModuleNode.create_import_star_conversion_utility_codeW  sY     "#++"3"3"56 	@KD%EJJzz--JJ::3?	@r,   c           
      |
   |j                  t        j                  dd             |j                  dt        j
                   dt        j                   dt        j                   d       |j                  d       t        |j                  j                               D ]&  \  }}|j                  s|j                  d|z         ( |j                  d	       |j                  d
       |j                  d       |j                  d       |j                  d       |j                  d       |j                  d       |j                  d       |j                  d       |j                  d       |j                         }|j                  d       d}t        |j                  j                               D ]R  \  }}|j                  s|j                  s!|j                   j"                  r8|dz  }|dz  dk(  r3|j                  d       |j                  d       |j                  d       |j                  d|z         |j                   j$                  r|j                   j&                  s|j                   j(                  rM|j                   j+                  |d      }|j                  d|d|j-                  |j.                        d       |j                  d       |j1                  |j2                  |j                   d        |j                  |j2                  d!t5        j6                  |j                   t8        d      d       n|j                   j;                  |      rB|j                  |j                   j=                  d|j2                  |j.                  |             nL|j                  d"|d#|j                   d$       |j                  |j-                  |j.                               |j                  d       U |j                  d%       |j                  d&t        j>                  z         |j                  d       |j                  d'       |jA                  |jB                        r?|jE                  |jB                         |jG                  tI        | jJ                               ||_!        |j                  d(       |j                  d)       |j                  d       |j                  d*       |jM                  t        jN                  d+d,             |jQ                          y )-NCStringEqualsr{  int rm   r  z2,PyObject *o, PyObject* py_name, const char *name)z,static const char* internal_type_names[] = {z"%s",r  r  z-const char** type_name = internal_type_names;zwhile (*type_name) {z$if (__Pyx_StrEq(name, *type_name)) {zBPyErr_Format(PyExc_TypeError, "Cannot overwrite C type %s", name);rW  r  ztype_name++;zif (0);r   r   d   z#ifdef _MSC_VERz)if (0);  /* Workaround for MSVC C1061. */r  z#else if (__Pyx_StrEq(name, "%s")) {r  zif (!()) r8  zPy_INCREF(o);Fr  rG  z<PyErr_Format(PyExc_TypeError, "Cannot convert Python object  to z");r  z3if (PyObject_SetAttr(%s, py_name, o) < 0) goto bad;rZ  r[  r\  rH   
ImportStarrp   ))rw   r
   rx   start_initcfuncr   import_star_setmodulestatetype_cnamemodulestatevalue_cnamer  r   r   r   r   new_error_labelr  r  r   is_constr  r  r  type_test_code
error_gotorV   
put_decrefr=  r   r  r	   rp  from_py_call_coders  
label_usederror_label	put_labelput_add_tracebackr   r   r  r  r   )rY   rC   rf   ru   r   old_error_label
msvc_count	type_tests           r*   r  zModuleNode.generate_import_star_  s   [44_oVW6))*!++,Bv/L/L.M N@@	A
 	

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

7T>*	+ 	

3

4

BC

)*

9:

WX

;

3

>"

3..0

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

@4GH::))zz33uzz7Q7Q$)JJ$=$=%&	

% OOEII6$8 9 JJ/OOEKK5OIJJ"++EJJL N O ZZ;;C@JJuzz;;U[[%))T ; < JJejj * +JJtuyy9:

39	 : 	

8

H6K^K^^_

3

;??4++,NN4++,""=1F1F#GH*

6

< 

3

2;++L:JKLr,   c                    |j                  d       |j                  d|j                  z         |j                  dt        j                  z         |j                  dt        j                  z         |j                  dt        j
                  z         |j                  dt        j                  z         |j                  dt        j                  z         t        j                  #|j                  dt        j                  z         y y )Nztypedef struct {r  )r  module_dict_cnamer   builtins_cnamecython_runtime_cnamer  empty_bytesempty_unicoder   rt  ru  r  s      r*   r  z&ModuleNode.generate_module_state_start  s    

%&

?S%:%::;

?V%:%::;

?V%@%@@A

?V%7%778

?V%7%778

?V%9%99:)JJ)?)??@ *r,   c           	         |d   }|d   }|d   }|j                  dt        j                  z         |j                  d       |j                  t	        j
                  dd             |j                  d       |j                  d	       |j                  d
       |j                  dt        j                  z         |j                  d       |j                  d       |j                  dt        j                  z         |j                  d       |j                  d       |j                  dt        j                  dt        j                  d       |j                  d       |j                  d|j                  dt        j                  d       |j                  d       |j                  dt        j                  dt        j                  d       |j                  d	       |j                  d       |j                  d       |j                  d       |j                  d       |j                  dt        j                  dt        j                  dt        j                  d       |j                  d       |j                  d       |j                  d       |j                  d       |j                  d       |j                  d       |j                  d       y )Nmodule_state_endmodule_state_clear_endmodule_state_traverse_endz} %s;rH   MultiPhaseInitModuleStater  #if CYTHON_USE_MODULE_STATE#ifdef __cplusplusnamespace {zextern struct PyModuleDef %s;} /* anonymous namespace */r=  zstatic struct PyModuleDef %s;r  r  z2 (__Pyx_PyModule_GetState(__Pyx_State_FindModule(&z)))z (__Pyx_State_FindModule(&z))r  r7  z	_static =z    {};z    {0};z	 * const  = &z_static;rZ  r  )	r  r   r  rw   r
   r  pymoduledef_cnamer  rs  )rY   rC   r  rv   r  r  r  s          r*   r  z$ModuleNode.generate_module_state_end  ss   "#56()AB +,G H7V%A%AAB2$$8:MN	
 	89/0=):V=U=UUV897#:V=U=UUV8$2**$$& 	' 	2$$& 	' 	7#((**
 	 	/0 	9%7#:&8$((****
 	
 	8$  -  %  *##K0##C(##H-r,   c                    |j                  d       |j                  dt        j                  z         |j                  t        j                   d       |j                  d       |j                  d|j                  z         |j                  dt        j
                  z         |j                  dt        j                  z         |j                  dt        j                  z         |j                  dt        j                  z         |j                  dt        j                  z         |j                  d       |j                  d       |j                  d       y )	Nr  z4static CYTHON_SMALL_CODE int %s_clear(PyObject *m) {z2 *clear_module_state = __Pyx_PyModule_GetState(m);z"if (!clear_module_state) return 0;r  "#if CYTHON_PEP489_MULTI_PHASE_INITz__Pyx_State_RemoveModule(NULL);r  
r  r   rs  r  r  r  r  r  r  r  r  s      r*   r  z&ModuleNode.generate_module_state_clear  s%   

01

IFL_L__`

f2233efg

78

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

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

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

6 	 

6 	 

6  ! 	"

78 	

45

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

01

hkqk~k~~

f2233hij

:;

5c6K6K5LBOP

5f6K6K5LBOP

5f6Q6Q5RRTUV

>v?Q?Q>RRTUV

>v?Q?Q>RRTUV

>v?S?S>TTVWXr,   c                    | j                  | j                  | j                  |      }| j                  ||       |j	                  | j                         |j                  d       |j                  t        j                  dd             t        d|j                         }d| j                  d|      z  }|j                  d|z         | j                  j                  rF|j                  d       |j                  d	| j                  d|      z         |j                  d
       | j                  |j                        }|r6|j                  d       |j                  d|z         |j                  d
       |j                  |       |j                  d       |j                  d       |j                  dt        j                  z         |j                  d       t        j                  dd      }	|j                  |	       |j                  d       |j                  d| j!                         dt        j"                  d       |j                  d
       |j                  d       |j                  d       |j                  d       |j                  d       |j                  d
       |j                  t        j$                   dt        j&                   d       |j)                         }
|j*                  j,                  d   }|j*                  j,                  d   }|s|rA|r|j/                          |j*                  j1                  t        j2                  dd             |j5                          |j                  d       |j                  dt        j6                  z         |j                  dt        j6                  dt        j"                  d        |j                  d!|j                  j9                         d"d# z         |j                  d$       |j                  d       |j                  d%       |j                  dt        j6                  d&t        j6                  d'       |j                  d
       |j                  d(       | j;                  ||       |s|r |
j=                          |j?                          t        j                  d)d      }|j                  |       |jA                  |       |j                  d*       |j1                  t        j                  d+d             |jC                  | j                  d,       |jE                  t        jF                        }|j                  |d-|jI                  || j                               |jE                  t        jJ                        }|j                  |d.|jI                  || j                               |jE                  t        jL                        }|j                  |d/|jI                  || j                               |j                  d0       |j,                  d1   r|jC                  | j                  d2       |j                  d3       |jC                  | j                  d4t        j&                   d       |j                  d5       |jC                  | j                  d6       |j                  d| jO                         z         |jC                  | j                  d7|j6                  d8|jQ                  t        d9            d8|jQ                  t        d:            d       |j                  d       | jS                  ||       tT        jV                  r?|j                  d;       |jC                  | j                  d<t        j&                   d       |j                  d=       |jC                  | j                  d>t        j&                   d       |jC                  | j                  d?t        j&                   d       |j                  d@        |dA      5 }| jY                  ||       d d d         |dB      5 }| j[                  ||       d d d         |dC      5 }| j]                  ||       d d d        |j_                  |        |dD      5 }| ja                  ||       d d d         |dE      5 }|D ]  }| jc                  |||        	 d d d         |dF      5 }|D ]  }| je                  |||        	 d d d         |dG      5 }|D ]&  }| jg                  |       | ji                  |||       ( 	 d d d        |jk                  |       |j                  dH       |jm                  d        |s|rE|jn                  jp                  sJ |js                  || j                         dI|jn                  _:        |jm                  d        | jv                  jy                  |       |jm                  d        |s|rVdJ|jn                  _:        |jn                  jp                  sJ |j{                  dK| j                  L       |j}                          |j                          |j                  dM       | j                  ||       |j                          tT        j                  r\|j*                  j1                  t        j2                  dNd             |j                  dO|j                  | j                        z         |j                  |j                         |j                  |j                         |jn                  j                         D ]  \  }}|j                  ||        |s|r+|j                          |j                  | j                         |j                  d|j6                  z         |j                  d|jE                  |j                         dP       |j                  t        dQ|j                  z               |j*                  j1                  t        j                         |j                  d       |j                  dR       |j                  |j6                  t        dJdIS       |j                  d%       |j                  |j6                  t        dJT       |j                  dU       |j                  dV       |j                  dW       |j                  dXt        j                  z         |j                  dY       |j                  d       |j                  d
       |j                  dZ       |j                  d[|j                  j9                         d"d# z         |j                  d       |j                  |j                         |j                          |j                  d       |j                  d\|j6                  z         |j                  d%       |j                  d]|j6                  z         |j                  d
       |j                  d       |
j                  |jn                         |j                          y # 1 sw Y   8xY w# 1 sw Y   "xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   wxY w)^NrH   PyModInitFuncTyper  PyInit_z__Pyx_PyMODINIT_FUNC %s(void)r  z%s CYTHON_SMALL_CODE; /*proto*/zc#if !defined(CYTHON_NO_PYINIT_EXPORT) && (defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS))z;__Pyx_PyMODINIT_FUNC PyInit___init__(void) { return %s(); }r  zHvoid %s(void) {} /* workaround for https://bugs.python.org/issue39432 */r  r|  zreturn PyModuleDef_Init(&%s);r  ModuleCreationPEP489zstatic CYTHON_SMALL_CODE int z(PyObject *rn   zint stringtab_initialized = 0;r  zint pystate_addmodule_run = 0;r  z = NULL;profile	linetraceProfilez	Profile.cr  zif (z == z) return 0;zrPyErr_SetString(PyExc_RuntimeError, "Module '%s' has already been imported. Re-initialisation is not supported.");r   r  r\  r=  z) return __Pyx_NewRef(r  z /*--- Module creation code ---*/ImportRefnannyAPIz__Pyx_init_runtime_version();CheckBinaryVersionzs__Pyx_check_binary_version(__PYX_LIMITED_VERSION_HEX, __Pyx_get_runtime_version(), CYTHON_COMPILING_IN_LIMITED_API)z = PyTuple_New(0); z% = PyBytes_FromStringAndSize("", 0); z' = PyUnicode_FromStringAndSize("", 0); z)/*--- Library function declarations ---*/
np_pythranz_import_array()z4/*--- Initialize various global constants etc. ---*/z__Pyx_InitConstants(zstringtab_initialized = 1;z__Pyx_InitGlobals()zPyObject_SetAttr(r  r   __main__z/*--- Builtin init code ---*/z__Pyx_InitCachedBuiltins(z/*--- Constants init code ---*/z__Pyx_InitCachedConstants(z__Pyx_CreateCodeObjects(z*/*--- Global type/function init code ---*/zGlobal init codezVariable export codezFunction export codezType init codezType import codezVariable import codezFunction import codez/*--- Execution code ---*/TFPy_None)rV   z/*--- Wrapped vars code ---*/RegisterModuleCleanupzif (__Pyx_RegisterCleanup()) %sz && stringtab_initialized) {zinit %srZ  r  r  r  zif (pystate_addmodule_run) {zPyObject *tp, *value, *tb;zPyErr_Fetch(&tp, &value, &tb);zPyState_RemoveModule(&%s);zPyErr_Restore(tp, value, tb);z} else if (!PyErr_Occurred()) {z.PyErr_SetString(PyExc_ImportError, "init %s");zreturn (%s != NULL) ? 0 : -1;z
return %s;)UrZ   rV   r1   generate_pymoduledef_structr   r  r  r
   r  r   r   r#  
is_packagewrong_punycode_module_namer   r  module_init_func_cnamepymodinit_module_argr  r  r  rv   rB   use_fast_gil_utility_coderw   rx   put_declare_refcount_contextrs  r$  generate_module_creation_codeput_trace_declarationsput_trace_frame_initput_setup_refcount_contextput_error_if_neg name_in_main_c_code_module_stater  error_goto_if_nullr  r  r  intern_identifiergenerate_module_import_setupr   cache_builtinsgenerate_global_init_codegenerate_c_variable_export_codegenerate_c_function_export_coderj   generate_type_init_code$generate_type_import_code_for_module*generate_c_variable_import_code_for_moduler  *generate_c_function_import_code_for_modulerg   r  	funcstate	gil_ownedput_trace_start	can_tracer   generate_execution_codeput_trace_returnput_trace_exitgenerate_wrapped_entries_codegenerate_cleanup_coder  put_gotoreturn_labelr  r  all_managed_tempsput_xdecrefput_trace_exception_propagatingput_trace_unwindr  r  rB  r   traceback_utility_coder  r	   r  put_finish_refcount_contextput_temp_declarationsr   )rY   rV  r  rC   rf   subfunctionmodinit_func_nameheader3r  mod_create_functempdecl_coder  r  refnanny_import_coder  r  r  r   r   r=  r   s                        r*   r  z$ModuleNode.generate_module_init_func  sk   //$**dK((d3tzz*

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

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

7 	

78

3

2V5M5MMN

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

2

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

8 	

3

34

01

34

8

f2232f6S6S5TT\]^,,.""--i8$$//<	i..0--k.E.EiQ\.]^))+

78 	

;!4!445

''
 	 	

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

< 

3

7


 	 	

8

56**35i002%%'*//0CEXY/0''(9:

23[--.BDWXYdhh )K 	
 ;;F<N<NO

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

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

422=$((KM 	N 	

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

IJdhh*>v?\?\>]]^(_`

/0dhh(=>

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

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

45HH()F)F(GqI	K 	HH&v'D'D&EQG	I 	

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

/0di>>+++  !2DHH='+DNN$d		))$/di',DNN$>>+++!!)!:!



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

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

;!1!112

4889N9NOPPmn	p 	}Y9K9K-KLM))%*F*FG 	

3

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

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

12

/0

34

/&2J2JJK

23

3

8

45

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

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

78

2S5E5EEF

7

<#"2"223

8

3++DNN;_	< 	<	B 	B	B 	B
	: 	:	S 	S	Y 	Y	Y 	YsT   +z4{1{%{{(4{5 ,|4z>{{{%({25{?|c                 L    j                          G fdd      }|S )a  
        Return a context manager that allows deviating the module init code generation
        into a separate function and instead inserts a call to it.

        Can be reused sequentially to create multiple functions.
        The functions get inserted at the point where the context manager was created.
        The call gets inserted where the context manager is used (on entry).
        c                   4    e Zd Zd Zd Z fdZ fdZy);ModuleNode.mod_init_subfunction.<locals>.ModInitSubfunctionc                     dj                  |j                         j                               }t        j                  d|      sJ d|z  | _        || _        d | _        d | _        y )Nr?  z^[a-z0-9_]+$z__Pyx_modinit_%s)	r  lowerr  r   match
cfunc_namedescriptionr  	call_code)rY   	code_typer=  s      r*   r[   zDModuleNode.mod_init_subfunction.<locals>.ModInitSubfunction.__init__  sT    !2!8!8!:;xx66"4u"<#, %)"!%r,   c                 .    |j                         | _        y r%   )r  r	  re   s     r*   rd   zIModuleNode.mod_init_subfunction.<locals>.ModInitSubfunction.set_call_code#  s    !%!5!5!7r,   c           	         | j                   j                         | _         }|j                  d| j                   dt        j
                   dt        j                   dd       |j                  dt        j                   d       |j                         | _        |j                  t        | j                               |j                  d	| j                  z         |S )
Nr  rm   r  rn   T)refnannyzCYTHON_UNUSED_VAR(r  z/*--- %s ---*/)r	  r  r  r  r   r  r  r  r  r  r   r  )rY   rf   function_code	orig_coder1   s     r*   	__enter__zEModuleNode.mod_init_subfunction.<locals>.ModInitSubfunction.__enter__&  s    >>)%.%>%>%@DN$$$4??+1V-I-I,J"VMjMjLkklmD % * 

/0M0M/NbQR%)%9%9%;"//doo0NO

+d.>.>>?r,   c                 ^   |d x| _         | _        y }|j                          |j                  d       | j                   j	                  |j
                         d | _         |j                  |j                        }|rp|j                  |j                         |j
                  j                         D ]  \  }}|j                  ||        |j                          |j                  d       |j                  d       |j                          |r[| j                  j                  | j                  j                  | j                  dt        j                  d	             d | _        y | j                  j                  d| j                   dt        j                   d       d | _        y )NrZ  r\  r  rm   rn   z(void)r  )r  r	  r  r  r  r  r  r  r  r  r  r   error_goto_if_negr  r   r  )
rY   exc_type	exc_valueexc_tbrf   needs_error_handlingr=  r   r  rV   s
           r*   __exit__zDModuleNode.mod_init_subfunction.<locals>.ModInitSubfunction.__exit__4  sf   ':>>D&$002

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

3%%''NN((88 OOV-J-J:LMPRS "& NN((  163P3P2QQSTV!%r,   N)r   r   r   r[   rd   r  r  )r  r  rV   r1   s   r*   ModInitSubfunctionr    s    &8&r,   r  )r  )rY   rV   r1   r  r  r  s    ``` @r*   rZ   zModuleNode.mod_init_subfunction  s&     "1138	& 8	&t "!r,   c                 8   |j                   d   }|dk(  r| j                  d   j                  }|r|j                  d       |j                  d|j                  d|j                  t        t        |                  d|j                  | j                        d       |j                  d	       |j                  r|j                  d       |j                  j                  t        d
      }|j                  |d|j                  t        t        t        j                  j                  |                        d|j!                  || j                               |j#                  |t               |j                  d|j                  d|d|j                  | j                        d       |j%                  |t               |j                  j'                  |       |j                  d	       n|j                  r|j                  d       |j(                  j+                  t-        j.                  dd             |j                  |j1                  d|j                  t        | j2                              z  | j                               |j                  d	       | j2                  }|j5                  d      rt        |d t7        d              }|j9                         }|j                  d       |j                  d|j!                  d| j                        z         |j                  d|z         |j                  |j1                  d|d|j                  d| j                               |j                  d	       |j                  d	       y )Nset_initial_path
SOURCEFILEr   z&if (!CYTHON_PEP489_MULTI_PHASE_INIT) {if (PyObject_SetAttrString(z, "__file__", ) < 0) r8  r  Tz = Py_BuildValue("[O]", ); z, "__path__", SetPackagePathFromImportLibrp   z%__Pyx_SetPackagePathFromImportLib(%s)z	.__init__r|  z0PyObject *modules = PyImport_GetModuleDict(); %sr  z)if (!PyDict_GetItemString(modules, %s)) {zPyDict_SetItemString(modules, r  rn   )rB   rV   r  r  rs  get_py_string_constr   r   r  r  r  allocate_tempr	   r   r'   r  r  
put_gotrefr  release_temprv   rw   r
   r  r  r   endswithr  r$  )rY   rC   rf   module_pathtempfq_module_namefq_module_name_cstrings          r*   r  z'ModuleNode.generate_module_import_setupV  s   nn%78,&((1+..KJJ?@JJ  ((!/+">?A)	+ ,
 JJsO~~

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

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

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

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

3

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

>AWWX

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

3

3r,   c                    t         j                  sy |j                  dt        j                  z         |j                  |       |j                  t        j                   dt        j                   d       |j                  d       |j                  dt        j                   d       |j                  d       |j                  t        j                   d       t         j                  d	k\  r|j                  d
       t        |j                        }|j                          |D ]  }|j                  dk7  s|j                  j                  r_|j                  rS|j                   r|j"                  }n|j%                  |j"                        }|j'                  ||j                  dd       |j                  j)                  |      s|j                  j+                  ||        |j                  dt        j                   d       t         j                  dk\  rp|j                  d       t-        |j.                  t1        j2                  d            D ]2  }|j5                  |j6                        }|j'                  ||dd       4 t         j8                  rO|j                  d       |j:                  D ]/  }|j'                  |j"                  t<        j>                  dd       1 |j                  d       |jA                  |j5                  t        jB                         t<        j>                  dd       |jD                  D ]  }|j                  }|jF                  s|jH                  r)|jJ                  jL                  jO                  dd      sP|jJ                  }	|j5                  |	jQ                  t        jR                              }
|j5                  |	jQ                  t        jT                              }|j                  d       |j                  d|z         |j                  d|
d|d       |j                  d       |j                  d       |j                  d        |j                  d!       |j                  d"       |j                  d#       |j                  d       |j                  d$       |j                  d%       |j                  d       |j                  d&       |j                  d        t         jV                  '|jA                  t        jX                  t>        dd'       t        jZ                  t        j\                  fD ],  }|j5                  |      }|jA                  |t>        dd'       . |jA                  |j5                  |j^                        t>        dd'       y )(Nz.static void %s(CYTHON_UNUSED PyObject *self) {r  r8  r  zif (!__Pyx_State_FindModule(&z
)) return;r  z! = __Pyx_PyModule_GetState(self);r   z/*--- Global cleanup code ---*/r  TF)r  r  z__Pyx_CleanupGlobals(r     z$/*--- Type import cleanup code ---*/r_  r<  z /*--- Builtin cleanup code ---*/z/*--- Intern cleanup code ---*/rv  r   rx  zwhile (%s > 0) {zPyObject* o = (PyObject*)r}  r~  r  r  r  r=  r  r  r<  r  r  r  )0r   r  r  r   cleanup_cnamer   r  r  r  r  r	  r  r   r   r  r  r  r=  r)  r  r  r  r   types_importedr  r  r  r_  r  cached_builtinsr   r	   r  r  r   rA  r  r1   rB   r  r  r  r  rt  ru  r  r  r  )rY   rC   rf   rev_entriesr   entry_cnamerr  r_  cclass_typer1   r  r  r=  s                r*   r  z'ModuleNode.generate_module_cleanup_func  s   ,,

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

f2232f6S6S5TTUVW 	

01

263K3K2LJWX

8

f3344UVW((A-JJ89s/K!$ N##x/zz--%** ++*/++K*.*C*CEKK*PK..'04"' / ) zz<<SA

@@uMN 	

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

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

56

->?

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

;<

67

/0

7#

YZ

56

8$

67

+,

8$

3

8$7	%R )!!&"8"8.(-4 " I1163H3HI 	`E99%@E!!%uZ^!_	` 	11#2G2GH%T 	 	Cr,   c                 @   | j                         }t        j                  dk(  rd}nt        j                  }t        j                  dd|j
                  |t        j                  |t        t        j                        d      }|j                  j                  |       y )NmainwmainMainFunctionzEmbed.c)r   r  r  wmain_methodembed_modulesr5  )
r  r   r  r    rx   r   tupler6  rv   rw   )rY   rC   rf   r  r3  r  s         r*   r  zModuleNode.generate_main_method  s~    779==F"EMME(44	#&??&4#*==$)%*7+@+@%ACD 	))+6r,   c                     |j                         rd|z   }n3d|j                  d      j                  dd      j                  d      z   }||S )Nr?  U_punycode   -   _rQ  isasciiencoderC  decode)rY   rD  ru   s      r*   rA  zModuleNode.punycode_module_name  sJ    <<>:D$++j199$ELLWUUD&&r,   c                     |j                         ry dd|z   j                  d      j                  dd      j                  d      z   S )NPyInitUr?  r:  r;  r<  rQ  r=  )rY   ru   s     r*   r  z%ModuleNode.wrong_punycode_module_name  sA    <<>CH,,Z8@@tLSST[\\\r,   c                 :    | j                  ||j                        S r%   )rA  r   )rY   rD  rC   s      r*   r#  zModuleNode.mod_init_func_cname  s    ((AAr,   c                 Z    | j                   }| j                  t        j                  |      S r%   )r1   r#  r   pymodule_exec_func_cname)rY   rC   s     r*   r  z!ModuleNode.module_init_func_cname%  s$    jj''(G(GMMr,   c                 	   |j                   rd|j                  |j                         z  }nd}t        j                  rdt        j
                  z  }nd}|j                  d       |j                  d       | j                         }|j                  dt        j                  z         |j                  d|z         |j                  d	t        j                  z         |j                  d
t        j                  z         |j                  d|z         |j                  d       |j                  d       |j                  d       |j                  d       ddddj                  |j                  d         }|j                  d|z         |j                  d       |j                  d       |j                  d       |j                  j                         s"|j                  d       |j                  d       |j                  d       |j                  d       |j                  d       |j                  d       |j                  dt        j                  z         |j                  d       |j                  dt        j                  z         |j                  d       |j                  d       |j                  d        |j                  d!|j                  j                         z         |j                  d"|z         |j                  d#       |j                  d$t        j                    d%       |j                  d       |j                  d&       |j                  d       |j                  d'|j"                  z         |j                  d       |j                  d(t        j                  z         |j                  d       |j                  d)       |j                  d       |j                  d#       |j                  d*t        j$                  z         |j                  d+t        j$                  z         |j                  d,|z         |j                  d       |j                  d-       |j                  d.       |j                  d,|z         |j                  d       |j                  d       |j                  d       |j                  d/       |j                  d       y )0N%sr  z(freefunc)%sNULLrH   r  z@static PyObject* %s(PyObject *spec, PyModuleDef *def); /*proto*/z*static int %s(PyObject* module); /*proto*/z static PyModuleDef_Slot %s[] = {z{Py_mod_create, (void*)%s},z{Py_mod_exec, (void*)%s},-#if CYTHON_COMPILING_IN_CPYTHON_FREETHREADINGz-{Py_mod_gil, __Pyx_FREETHREADING_COMPATIBLE},r  z;#if PY_VERSION_HEX >= 0x030C0000 && CYTHON_USE_MODULE_STATE*Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED&Py_MOD_MULTIPLE_INTERPRETERS_SUPPORTED$Py_MOD_PER_INTERPRETER_GIL_SUPPORTED)no
shared_gilown_gilsubinterpreters_compatiblez#{Py_mod_multiple_interpreters, %s},z	{0, NULL}r  z*#else /* CYTHON_PEP489_MULTI_PHASE_INIT */zT#error "Unicode module names are only supported with multi-phase init as per PEP489"r  r  zstruct PyModuleDef %s =r=  zstatic struct PyModuleDef %s =r|  z  PyModuleDef_HEAD_INIT,z  %s,z  %s, /* m_doc */r  z	  sizeof(z), /* m_size */z9  (CYTHON_PEP489_MULTI_PHASE_INIT) ? 0 : -1, /* m_size */z  %s /* m_methods */,z  %s, /* m_slots */z  NULL, /* m_reload */z  %s_traverse, /* m_traverse */z  %s_clear, /* m_clear */z  %s /* m_free */z  NULL, /* m_traverse */z  NULL, /* m_clear */r  )r   get_string_constr   r  r   r+  r  r  pymodule_create_func_cnamepymoduledef_slots_cnamer  rB   r   r>  r  r$  r  r  rs  )rY   rC   rf   r   cleanup_funcexec_func_cnamesubinterp_options          r*   r  z&ModuleNode.generate_pymoduledef_struct)  s   77..sww77CC(()F,@,@@L!L

2

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

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

?/QR

58V8VVW

063T3TTU

.@A

BC

BC

8

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

8;KKL

8

;

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

8

2

'(

=!

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

7

3f6N6NNO

8

3

-.

7S__@@BBC

&,-

01

Yv;;<OLM

7

NO

8

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

78

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

7

+,

8

01

4v7J7JJK

.1D1DDE

&56

7

-.

*+

&56

8

4

'(

01

8r,   c           
         |j                   rd|j                  |j                         z  }nd}|j                  j                  t        d      }|j                  d       |j                  |dt        j                  d       |j                  |t        d       |j                  d	       |j                  |d
t        j                  d|j                  || j                               |j                  d       |j                  d       |j                  d       |j                  d|dt        j                  d       |j                  |d|d|j                  j                         d       |j                  |j                  d| j                               |j                  d       |j                  d       |j                  d	       |j                  |j                   d| d       |j                  d       |j                  j!                  |       |j                  d       |j"                  d   rdnd}|j                  d|j                   d| d       |j                  d       |j                  t        j$                   dt        j&                   d       |j                  d|z         |j)                  |j*                        }|j                  |d|j                  d|j                  || j                               |j                  |t        d       |j)                  t        j,                        }|j                  |d |j                  || j                               |j)                  t        j.                        }|j                  |d!|j                  || j                               |j                  d"|j                  d#|d$|j1                  | j                               t2        j4                  ^|j                  t        j6                  d%t2        j4                  d&|j                  t        j6                  | j                               y y )'NrG  r  F
manage_refr  rG  r8  r  r=  z = PyModule_Create(&r  r  r  r|  z.int add_module_result = __Pyx_State_AddModule(z, &r  z! = 0; /* transfer ownership from r  z pseudovariable */add_module_resultzpystate_addmodule_run = 1;r  rI  rJ  rK  rL  zPyUnstable_Module_SetGIL(r  zCYTHON_UNUSED_VAR(%s);z = PyModule_GetDict(z; = __Pyx_PyImport_AddModuleRef(__Pyx_BUILTIN_MODULE_NAME); z2 = __Pyx_PyImport_AddModuleRef("cython_runtime"); r  z, "__builtins__", r  z  = __Pyx_PyImport_AddModuleRef("z"); )r   rQ  r  r!  r	   r  r   r  
put_increfr  r  rV   r   r$  r  rs  r#  rB   r  r  r  r  r  r  r  r   rt  ru  )	rY   rC   rf   r   module_temp
gil_option
dict_cnamer  runtime_cnames	            r*   r  z(ModuleNode.generate_module_creation_codet  s    77..sww77CC nn22>e2T

78

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

7

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

8

01

3

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

coo&I&I&K
 	 	

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

/0

3

7

c&&'s;-q9:

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

BC(BC ,, 	 	

.s/?/?.@:,bQR

8

f334C8V8V7WWXYZ

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

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

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

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

  )+	,
 )JJ**&&++F,B,BDHHMOP *r,   c                    |j                   D ]r  }|j                  dk7  s|j                  r|j                  j	                  ||       |j                  j                  |      sW|j                  j                  ||       t y Nr  )r	  r   r  r   global_init_coder  r  )rY   rC   rf   r   s       r*   r  z$ModuleNode.generate_global_init_code  sh     __ 	KE8+::JJ//t<::99#>JJ==dEJ	Kr,   c                    t        |j                  j                               D ].  \  }}|j                  s|j                  r!|j
                  |u s0|j                  j                  |      s#t        |j                  d|j                  z         |j                  d       |j                  d|j                  j                  d|j                  d       |j                  |j                  d|j                               |j                  d|j                  d|d	|j                  |j                        d
       |j                  d       1 y )Nz$Cannot convert '%s' to Python objectr|  zPyObject* wrapped = rm   r  wrappedr  rU  z", wrapped) < 0) r8  r  )r   r   r   r   r   r1   r   ro  r   rV   r  to_py_functionr=  r  rs  r  )rY   rC   rf   ru   r   s        r*   r  z(ModuleNode.generate_wrapped_entries_code  s    !#++"3"3"56 	 KD%$$!MMs*zz;;C@%))%Kejj%XY

3

JJ--KK! " 

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

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

3!	 r,   c                     |D cg c];  }|j                   s+|j                  st        j                  r|j                  dk7  r|= c}S c c}w ra  )r   r   r   r'  r   )rY   all_entriesr   s      r*   _select_exported_entriesz#ModuleNode._select_exported_entries  sH    *
yyE00W5M5MRWRbRbfnRn 
 	
 
s   A Ac                 V   | j                  |j                        }|sy|D cg c]3  }|j                  j                         |j                  |j
                  f5 }}|j                  j                  t        j                  dd             t        || j                  |dd       yc c}w )OGenerate code to create PyCFunction wrappers for exported C functions.
        NVoidPtrExportrp   __Pyx_ExportVoidPtrzvoid *{name})rh  r	  r   re  ru   r=  rv   rw   r
   rx   ry   rV   rY   rC   rf   r   r   r{   s         r*   r  z*ModuleNode.generate_c_variable_export_code  s     //@
 !
  ZZ..0%**ekkJ
 

 	))##O5EF	H 	dDHHg7Ln]
   8B&c                 V   | j                  |j                        }|sy|D cg c]3  }|j                  j                         |j                  |j
                  f5 }}|j                  j                  t        j                  dd             t        || j                  |dd       yc c}w )rj  Nro   rp   rq   rr   )rh  r   r   rd  ru   r=  rv   rw   r
   rx   ry   rV   rm  s         r*   r  z*ModuleNode.generate_c_function_export_code  s     //0A0AB
 !
  ZZ((*EJJD
 

 	))##$46FG	I 	dDHHg7MOef
rn  c           	          t        |      5 }|j                  D ]8  }|j                  s| j                  ||j                  |j
                  ||       : 	 d d d        y # 1 sw Y   y xY wr%   )rf  r   r   generate_type_import_coder   rV   )rY   r   rC   rf   rn  r   s         r*   r  z/ModuleNode.generate_type_import_code_for_module  sg     #4( 	g,<// g''223

EIItUefg	g 	g 	gs   A+AA'c                     |j                   dd D ]3  }|j                  j                  s|j                  j                          5 y)a  
        If fused c(p)def functions are defined in an imported pxd, but not
        used in this implementation file, we still have fused entries and
        not specialized ones. This method replaces any fused entries with their
        specialized ones.
        N)r   r   r  "get_all_specialized_function_types)rY   pxd_envr   s      r*   r  z!ModuleNode.specialize_fused_types  s=     **1- 	@Ezz""

==?	@r,   c                 `    |D cg c]  }|j                   r|r|j                  r|  c}S c c}w r%   )r   r  )rY   rg  	used_onlyr   s       r*   _select_imported_entriesz#ModuleNode._select_imported_entries   s3    *
##Y%** 
 	
 
rH  c           	         | j                  |j                  d      }|sy||u }|D cg c]_  }|j                  j                         |j                  |r|j
                  n)|j                  t        j                  |j                        fa }}|j                  j                  t        j                  dd             t        || j                  ||j                  dt        j                    d       yc c}w )QGenerate import code for all exported C functions in a cimported module.
        Frv  NrR  rp   __Pyx_ImportVoidPtr_zvoid **{name})rw  r	  r   re  ru   r=  ra  r   r#  rv   rw   r
   rx   r   rV   rB  r   )rY   r   rC   rf   r   is_module_scoper   r   s           r*   r  z5ModuleNode.generate_c_variable_import_code_for_module&  s     //0B0Be/T- !

  ZZ..0ZZ+U[[v?S?SUZU_U_1`b
 
 	))##O5EF	H 	$((GV%:%:>RSYScScRd<egv	x
s   A$C4c                    | j                  |j                  d      }|sy|D cg c]3  }|j                  j                         |j                  |j
                  f5 }}|j                  j                  t        j                  dd             t        || j                  ||j                  dt        j                   d       yc c}w )ry  Trz  Nr   rp   r   r   )rw  r   r   rd  ru   r=  rv   rw   r
   rx   r   rV   rB  r   r   )rY   r   rC   rf   r   r   r   s          r*   r  z5ModuleNode.generate_c_function_import_code_for_module;  s     //0D0DPT/U
 !
  ZZ((*EJJD
 

 	))##$46FG	I 	$((GV%:%:>STZTdTdSe<fh	A
s   8Cc           	         t        |      5 }|j                  D ]  }|j                  dk(  r6|j                  s*| j	                  ||j
                  |j                  ||       H| j                  ||||       | j                  ||       |j
                  j                  s| j                  ||        	 d d d        y # 1 sw Y   y xY wra  )rf  r   r   utility_code_definitionrq  r   rV   generate_base_type_import_code!generate_exttype_vtable_init_code
early_initgenerate_type_ready_code)rY   rC   rf   rn  r   s        r*   r  z"ModuleNode.generate_type_init_codeM  s     #4( 	C,<,, C##x/8U8U223

EIItUef77UDJZ[::5$Gzz,,55eTBC	C 	C 	Cs   BB<B<<Cc                     |j                   j                  }|ra|j                  |j                  k7  rG|j                  s:|j
                  s-|j                  s | j                  ||| j                  ||       y y y y y y r%   )	r   r  r   rB  r  is_cython_builtin_typer  rq  rV   )rY   rC   r   rf   rn  r  s         r*   r  z)ModuleNode.generate_base_type_import_codeZ  sr    JJ((	)//33E3EE**i.N.N66**3	488TK[\ 7 /O* FIr,   c                 T   ||j                   v ry |j                  t        j                  vr/|j                  j                  t        j                  dd             | j                  ||||       |j                  r|j                  j                  t        j                  dd             |j                  |j                  d|j                  d|j                  |j                        d|j                  |j                  |             |j                   j                  |       y )NrS  rp   )	error_pos	GetVTablez = (struct z*)__Pyx_GetVtable(r  )r,  ru   r   ctypedef_builtins_maprv   rw   r
   rx   rg  r   r  r
  r  r_  r  r  )rY   rC   r   rV   rf   rn  s         r*   rq  z$ModuleNode.generate_type_import_codea  s     3%%%99D666--''6FGI&&tT3Cs&S--''5EFHJJ""%%55d6H6HI''(:(:C@	B C
 	t$r,   c                    |j                   r|j                  nd|j                   x}}|j                  }	|j                  }
|	dv }|sd|	 d}	n|
t        j
                  v rB|j                  |j                  |j                         dt        j
                  |
    d       y d}	|
t        j                  v rt        j                  |
   }
|t        j                  v rt        j                  |   }|s|J |j                  |      }|j                  |	|      }|j                  }|s|j                  |      }|j                  | dt        j                   d| d	|	 d	|j                  j!                          d

       dt        j                   }|j                  d       |j                  d| d| d| d       |j                  d       |r|j                  d       n|j                  d| d| d| d       |j                  d       |j                  d| d| d| d       |j                  d       |j"                  r|j"                  dv r|j"                  }nC|j$                  r|j&                  rd}n(t)        d|j"                   d|	 d|j                         |j+                  d|j-                          dt        j                   d       |j                  d| d|        y )Nr  )__builtin__builtinsr@  rG  r8  __Pyx_BUILTIN_MODULE_NAMEz = __Pyx_ImportType_rm   r  r  __PYX_GET_STRUCT_ALIGNMENT_z>#if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000zsizeof(z), z),z%#elif CYTHON_COMPILING_IN_LIMITED_APIz0, 0,r=  r  )r   warnignorer   zinvalid value for check_size 'z' when compiling r  __Pyx_ImportType_CheckSize_r?  r  z if (!z) )r  r  r   ru   r   r  r  r)  r_  renamed_py2_builtins_mapbasicsize_builtins_mapr  r  r  r   r   r$  
check_sizerA  is_subclassedRuntimeErrorrL  rm  )rY   r   rf   rn  rX  r  rY  sizeof_objstructru  r   	type_name
is_builtinr   r_  alignment_funcr  s                   r*   rg  z$ModuleNode.generate_type_import_callv  s   ?C?P?Pt';';X_`d`t`t_uVvv9&&II	 $??
k]!,K$444JJ,,T-?-?@ATE_E_`iEjDkklmo5KD999 99)D	D777#'#>#>y#I ((3J!11+zJ** AA-PM

o1&2B2B1C1hbR		(E(E(G'HK	

 7v7G7G6HI

ST

WYKs>*:!I;bIJ

:;
 JJwJJ3~.>a	{"MN

7

W-.c.1ACSBTTVWX

8 ??t2MMJ!!T%7%7 J00AARS^R__`aeajaj`kln n.z/?/?/A.B!FDTDTCUUWXY

VM?"ZL9:r,   c                 D    t         j                  j                  ||       y r%   )r   CClassDefNoder  )rY   r   rf   s      r*   r  z#ModuleNode.generate_type_ready_code  s    44UDAr,   c                 z    | j                   j                  dd      }| j                  t        j                  |      S r?  )r   rC  rA  r   r  )rY   r   s     r*   r  z$ModuleNode.is_main_module_flag_cname  s5    0088dC(()>)>@PQQr,   c           
         |j                   }|j                  r1|j                  |j                  d|j                  d       |j                  r\|j                  j                  rF|j                  |j                  dt
        j                  d|j                  j                  d       |j                  j                  D cg c]  }|j                  r| }}|rl|D ]f  }|j                  xs |j                   }|j                         }|j                  |j                  d|j                  d||j                  d       h y y y c c}w )Nr  r8  r  z = *rG  )r   r_  r  r   r  r   r  r1   r   r  vtable_typesignature_cast_stringr=  )rY   r   rf   r   c_method_entries
meth_entryr  casts           r*   r  z,ModuleNode.generate_exttype_vtable_init_code  s%    zzJJ&&%%'( ~~$..">">

))--4467 $(::#;#; %##  %  %  "2 4J","8"8"KJOOK&<<>DJJ --&,, &11	344    %s   Er]  )F)TT)NNF)yr   r   r   child_attrsrB   r   r   propertyr   r   r   r   r   r   r   r   r   r   r"  r  r   r  r   r   r  r  r   r  r  r   r,  r  staticmethodr7  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r$  r%  r&  r'  r!  r#  r/  r0  r1  r  r  r=  rc  rq  r>  r?  r@  r  rB  rD  rF  rG  r  rR  rX  rI  rJ  rK  rL  rY  rX  rY  r[  r\  r  rP  rZ  r   r  r  r  r  r  r  rZ   r  r  r  rA  r  r#  r  r  r  r  r  rh  r  r  r  r  rw  r  r  r  r  rq  rg  r  r  r  r   r,   r*   r   r      s    (KJI )JV#6	452`(DD+eN!fDP$\L*$@**X	/I6S. H H`aD.
	2&#KJ!N+I
%>G"aF!AF$0
%FR
*`X3.1;fM :)x$0 
y 
ya F!2b H&U nL \ 26 p-N `G!R, \% N 6) VA &PEN@*,02@E N
A0.f.
YE NE"N9vlC\7 ']BNIVOPb	K &
^"g"g
@
x*A$C]%*<;zBR4r,   r   c                     t        t        |        \  }}}t        |      }d }t        |      D ]  \  }}||k(  rd||<   |} |||fS )NrH   )zipr   r  r  )item_tuples
signaturesnamesr   last_sigir7  s          r*   _deduplicate_inout_signaturesr    sf      #F;$78Juj!JH!*- !9 JqM H	! ue##r,   rf   c                 r   t        |      \  }}	}
t        j                   |rdnd d}|j                  d      }dj	                  |      j                  d      }dj	                  |	      j                  d      }|
D cg c]
  }d| d	|  }}t        |d
z   |z   d      }|rn| j                  d| d| j                  |       d       | j                  d       | j                  | j                  | d|             | j                  d       n&| j                  d| d|j                          d       | j                  d| d| dt        |      dz    d       | j                  |j                  d| d       ddj	                  |       d| d       | j                  j                  t        j                  dd             | j                  |j                  d| d       d | d!       | j                  d"| d#| d$       | j                  d%| d&       | j!                  || d| d| d'| d(| d)
       | j                  d*| d+       | j                  | d,| d-       | j                  | d.| d/       | j                  d0| d1| d#| d$       | j                  d2       y c c}w )3NrT  exportr?  rH   )ru    zutf-8rm   z)&    zconst char * z#signature = __Pyx_PyBytes_AsString(r  z#if !CYTHON_ASSUME_SAFE_MACROSr7  r  zsignature = r8  zname = zsignature + r   zconst z
pointers[]z = {r  z, (z) NULL};rz  r{  zconst *pointerrG  z	pointers;zconst char *zcurrent_signature = z
signature;zwhile (*z
pointer) {zname, *z	pointer, zcurrent_signature)z++zpointer;zname = strchr(zname, '\0') + 1;zsignature = strchr(zsignature, '\0') + 1;zif (*zsignature != '\0') r  )r  r   pyrex_prefixformatr  r?  r!   r  r   r  r$  r  rv   rw   r
   rx   r  )rf   rV   inout_item_tuplesper_item_functargetpointer_decluse_pybytes	is_importr  r  inout_itemspyxpointer_cast	sig_bytesnames_bytes
item_cnamepointerssigs_and_names_bytess                     r*   _generate_import_export_coder    s   %BCT%U"J{  !i(X!Fa
HC&&B&/L		*%,,W5I))E"))'2KCNOZ!L>J<0OHO(U):[)H'R

]3%'J4KcKcdxKyJzz|}~

34

4**cU)+<cBC

8

]3%|4H4\4\4^3__`abJJse73%|C	NQ<N;OqQRJJ,%%VC5
+C%DEU499U]K^J__bcobppyz{%% 0/BD 	JJ,%%WSE+A%BC3se9UVJJcU"6se:FGJJ#k*+/6("SEYseCUV 	JJC5!"JJ#nSE):;<JJ#)#.DEFJJse/u4HZXYJJsO? Ps   ?J4c           
         | j                  d       | j                  j                  t        d      }| j                  j                  t        j                  dd             | j                  | d| j                  ||              | j                  |t               t        | |||||dd       | j                  |t               | j                  j                  |       | j                  d	       y
)zqGenerate function/pointer export code.

    'exports' is a list of (signature, name, exported_cname) tuples.
    r|  TrX  
GetApiDictrp   z! = __Pyx_ApiExport_GetApiDict(); Fr  r  r  N)r  r  r!  r	   rv   rw   r
   rx   r  r"  r  r  r#  )rf   rV   r{   export_funcr  api_dicts         r*   ry   ry     s    
 	JJsO~~++Nt+LH%%.>?AJJ*5""8S1
2	4 	OOHn- sG[(Lfjv{|(N3NN)JJsOr,   c           
         | j                  d       | j                  j                  t        d      }| j                  | d|j	                          d| j                  ||              | j                  |t               t        | |||||dd       | j                  |t               | j                  j                  |       | j                  d       y)	zqGenerate function/pointer import code.

    'imports' is a list of (signature, name, imported_cname) tuples.
    r|  TrX   = PyImport_ImportModule(r  r  r  N)
r  r  r!  r	   r$  r  r"  r  r  r#  )rf   rV   r   qualified_module_namer   r  
module_refs          r*   r   r   -  s    
 	JJsO--n-NJJJ,/0E0Y0Y0[/\\_"":s3
4	6 	OOJ/ sG[*lhlx|}*n5NN
+JJsOr,   c                   *    e Zd ZdZddZd Zd Zd Zy)rf  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*|j                         D ]  \  }}|| j                  d|z  <    g | _        y )Nz"%s")rf   importedr   temps)rY   rf   rV  ru   r=  s        r*   r[   zModuleImportGenerator.__init__J  sH    	/557 5e/4ftm,5
r,   c           	      R   || j                   v r| j                   |   S | j                  }|j                  j                  t        d      }| j
                  j                  |       |j                  |d|d|d|       |j                  |t               || j                   |<   |S )NTrX  r  z); if (unlikely(!r  )	r  rf   r  r!  r	   r  r   r  r"  )rY   module_name_stringrX  rf   r&  s        r*   r  z%ModuleImportGenerator.imported_moduleR  s    .==!344yy~~++Nt+L

$

$dJ8 	9n-,0()r,   c                     | S r%   r   r   s    r*   r  zModuleImportGenerator.__enter___  s    r,   c                     | j                   }| j                  D ]3  }|j                  |t               |j                  j                  |       5 y r%   )rf   r  r  r	   r  r#  )rY   excrf   r&  s       r*   r  zModuleImportGenerator.__exit__b  s@    yyJJ 	.D!!$7NN''-	.r,   r%   )r   r   r   r   r[   r  r  r  r   r,   r*   rf  rf  E  s    .r,   rf  c                    | j                   xr | 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                  |      }|j                  | j                        }	|j                  |d|	|d       |j                  j!                  |        y y y )	Nr  rq  r   r  r  r  r7  z; /*proto*/)r  r  inline_func_in_pxdr  r   r   r   r;  r   r   r<  r=  r  r  r  rv   r!  )
r   rC   rf   r*  from_cy_utilityr%  r  r   r  r  s
             r*   r(  r(  i  s>   jjBU%B%BOzze..u7H7H%..%2B2Bh2NRax'"11M%K)"11MK*$MK$MKzz
$MKD>D&&KK[ ' 211%2F2FG	

 	 	//67 Sb 8Ir,   Refnannyr  zj
#if defined(__GNUC__)
#define __Pyx_PACKED __attribute__((__packed__))
#else
#define __Pyx_PACKED
#endif
rH   utility_code_proto_before_types)rN  rO  proto_block)Acythondeclareobjectcollectionsr   r_  r  r   r  r   r.   typingr   r   r   rH   r   r   r   r   r   r   r   r   Errorsr   r   r   r   r	   r   Utilsr   r   r   r   r   r
   r   r    StringEncodingr   r!   r"   r#   r+   r&   r5   r9   rE   r  rN   Node	BlockNoder   r  r  r  ry   r   rf  r(  r  r  r  r   r,   r*   <module>r     si    ff6VFPV#0 $   	  	 
             A A 8 o o > > Y Y #(
N
9, -.* .-* -.* .-*7<L  L ^X<4U__ X<4zx$ 't'7'7 'T 0 0 00!. !.H7L )((5HI ( 0 ;= r,   