
    Ae+                       d dl mZ d dlZ ej                  eeeeeeeeee
       d dlmZ d dlZd dlZd dl	Z	d dl
Z
ddl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 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" ddlm#Z# d Z$d Z%d Z& G d dejN                  ejP                        Z) G d de      Z*d Z+ ejX                  dd       Z- ed!d"d#$      Z. ejX                  d%      Z/y)&    )absolute_importN)
NamingOptions
PyrexTypes	TypeSlotserrorwarningpy_object_typeUtilityCodeEncodedStringre)defaultdict   )CPtrType)Future)Annotate)Code)r   )Nodes)r   )r   )r   )Pythran)r   r	   )r
      )open_new_filereplace_suffixdecode_filenamebuild_hex_version)r   IncludeCode)r   )has_np_pythranc                 :    | j                   j                          | S N)scopecheck_c_classes_pxdmodule_nodes    :lib/python3.12/site-packages/Cython/Compiler/ModuleNode.pycheck_c_declarations_pxdr$   $   s    ))+    c                 n    | j                   j                          | j                   j                          | S r   )r   check_c_classescheck_c_functionsr!   s    r#   check_c_declarationsr)   )   s,    %%''')r%   c                     t         j                  s|j                  rd}n|j                  }t        j                  || j
                  d   |j                        S )NFemit_code_comments)emit_linenumsr+   c_line_in_traceback)r   annotater,   r   CCodeConfig
directivesr-   )envoptionsr,   s      r#   generate_c_code_configr3   /   sO    7++--#>>*>?#779 9r%   c                   P   e Zd ZdgZdZdad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d Zd Zd Zd Zd Zd Zd Zd Zdbd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,d+ Z-d, Z.d- Z/d. Z0d/ Z1d0 Z2d1 Z3d2 Z4d3 Z5d4 Z6d5 Z7d6 Z8d7 Z9d8 Z:d9 Z;d: Z<d; Z=d< Z>d= Z?d> Z@d? ZAd@ ZBdA ZCdB ZDdC ZEdD ZFdE ZGdF ZHdG ZIdH ZJdI ZKdJ ZLdK ZMdL ZNdM ZOdN ZPdO ZQdP ZRdQ ZSdR ZTdS ZUdT ZVdU ZWdV ZXdW ZYdX ZZdY Z[dZ Z\d[ Z]d\ Z^d] Z_dcd^Z`d_ Zad` Zby)d
ModuleNodebodyNc                 .   t        | j                  t        j                        sJ t        |t        j                        r0| j                  j                  j                  |j                         n%| j                  j                  j                  |       | j                  j                  j                  |j                         |j                  j                         D ]  }| j                  j                  |        d } || j                  j                  |j                         |rk|j                  D ]@  }| j                  |j                  _        d|j                  j                  j"                  d<   B | j                  j%                  |       y y )Nc                 >    |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%   Tinternal)
isinstancer6   r   StatListNodestatsextendr9   r   utility_code_list
c_includesvaluesprocess_includeincluded_filesc_class_entriesfull_module_nametypemodule_namer0   merge_in)selftreer   merge_scopeincr=   entrys          r#   rL   zModuleNode.merge_inI   s'    $))U%7%788dE../IIOO""4::.IIOO""4(

$$++E,C,CD##**, 	,CJJ&&s+	,	!
 	22E4H4HI.. ?)-)>)>

&:>

  ++J7? JJ& r%   c                 t   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                  |       y )Nold_style_globalszFile: %s (starting at line %s)
)r   r   include_pythran_genericr0   rS   r   
docstringsdocembed_pos_in_docstringr   r   relative_positionposencodingr6   analyse_declarationsrM   r1   s     r#   r\   zModuleNode.analyse_declarationsl   s    #++C0??$(OO4G$HC!!!!%%CGdh++#$EH_H_`d`h`hHi$ijCGxx#'%$(((BC#'88#4#4 hhCG		&&s+r%   c                 b   | j                   }|j                  r| j                  |       t        |j                  j                               D ]`  \  }}|j                  s|j                   |u s"|j                  s/|j                  j                  sF|j                  j                  |       b y r   )r   has_import_star*create_import_star_conversion_utility_codesortedentriesitemscreate_wrapperis_typerJ   is_enumcreate_type_wrapperrM   r1   namerQ   s       r#   prepare_utility_codezModuleNode.prepare_utility_code~   s     jj;;C@!#++"3"3"56 	8KD%$$);MMejj&8&8JJ2237	8r%   c                 "   | j                   }t        j                  |_        g | _        | j                  || j                  i        | j                  |       | j                  |||       | j                  |||       | j                  |||       y r   )
r   r   c_void_typereturn_typereferenced_modulesfind_referenced_modulessort_cdef_classesgenerate_c_codegenerate_h_codegenerate_api_code)rM   r2   resultr1   s       r#   process_implementationz!ModuleNode.process_implementation   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   )rn   cfunc_entriesdefined_in_pxd)rM   modulerQ   s      r#   has_imported_c_functionsz#ModuleNode.has_imported_c_functions   s=    -- 	F-- ''	 r%   c                 (   dd} ||j                   d      } ||j                        } ||j                        } ||j                        }|s|s|s|rt	        |j
                  d      |_        t        j                         }	t        ||      }
t        j                  |	| |
       |j                  r;t	        |j
                  d      |_        t        j                  |j                        }nd }|	j                          t        j                   | j#                  |      z   }|	j%                  |       |	j'                  d       |	j'                  d       | j)                  ||	       |j*                  r| j-                  |g |	       |	j'                  d       t        j.                  | j#                  |      z   }|	j'                  d|z         |	j'                  d       | j1                  |	       |	j'                  d       | j3                  |	       |rS|	j'                  d       |D ]=  }| j5                  |j6                  |	       |s"| j9                  |j6                  |       ? |r+|	j'                  d       |D ]  }| j;                  ||	|        |r+|	j'                  d       |D ]  }| j;                  ||	|        |	j'                  d       |	j'                  d	|z         |	j'                  d       |	j'                  d
       |	j'                  d       |	j'                  d       |	j'                  d       |	j'                  d|j<                  z         |	j'                  d       |	j'                  d| j?                  d|      z         |	j'                  d       |	j'                  d       |	j'                  d	|z         tA        |j                        }	 |	jC                  |       |jE                          y y # |jE                          w 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apirx   )rb   r   pxdrQ   s       r#   	h_entriesz-ModuleNode.generate_h_code.<locals>.h_entries   sC    '. 9e))X5!5!5  9 9 9s   4<r   )r   z.hz.pxi #include "Python.h"
#ifndef %s#endif /* !%s */zP/* WARNING: the interface of the module init function changed in CPython 3.5. */zK/* It now returns a PyModuleDef instance instead of a PyModule instance. */#if PY_MAJOR_VERSION < 3zPyMODINIT_FUNC init%s(void);#elsezPyMODINIT_FUNC %s(void);PyInit#endif)r   r   )#type_entriesvar_entriesrw   rH   r   c_fileh_filer   CCodeWriterr3   GlobalStategenerate_pxii_filePyrexCodeWriterput_generated_byr   h_guard_prefixapi_nameput_h_guardputlngenerate_type_header_codecapi_reexport_cincludesgenerate_includesapi_guard_prefix"generate_extern_c_macro_definitiongenerate_dl_import_macrogenerate_cclass_header_coderJ   generate_cclass_include_codegenerate_public_declarationrK   mod_init_func_cnamer   copytoclose)rM   r1   r2   rt   r   h_typesh_varsh_funcsh_extension_typesh_codec_code_configi_codeh_guard	api_guardrQ   fs                   r#   rr   zModuleNode.generate_h_code   s]   	9
 C,,!43??+C--.%c&9&9:v,=*6==$?FM%%'F23@MVT=9## .v}}f E--fmm<##%++dmmC.@@Gw'LLLL./**7F;..&&sB7LL//$--2DDILL	12LL33F;LL))&1 R . NE44UZZH99%**fMN R $ LE44UFFKLR # LE44UFFKLLLLL+i78LLLLklLLfgLLLL34LL7#//IJLL!LL3d6N6NxY\6]]^LL"LLLL+g56fmm,Aa 	u ->t 	s   O? ?P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_macrorJ   declaration_codecname)rM   rQ   r   r   s       r#   r   z&ModuleNode.generate_public_declaration   sm    !!JJ''46 	7 LL)

++EKKq+AC D r%   c                 :    |j                   j                  dd      S )N.__)qualified_namereplacer]   s     r#   r   zModuleNode.api_name   s    !!))#t44r%   c                    d,d} ||j                         } ||j                        } ||j                        }|s|s|rt        |j                  d      |_        t        j                         }t        ||      }	t        j                  || |	       |j                          t        j                  | j                  |      z   }
|j                  |
       |j                  d       |j                  d       |j                  d       |j                  d       |j                   r;|j                  dt"        j$                  j'                  |j                         z         |rn|j                  d	       |D ]X  }|j(                  }|j                  d
|j*                  z         |j                  d|j,                  d|j*                  d       Z |r|j                  d	       |D ]  }t/        |j(                        }|j1                  t        j2                  |j4                        }|j                  d|j7                  |      z         |j                  d|j4                  d|        |r|j                  d	       |D ]  }t/        |j(                        }|j1                  t        j8                  |j4                        }|j                  d|j7                  |      z         |j                  d|j4                  d|d        |j;                  t=        j>                  dd      d          |r(|j;                  t=        j>                  dd      d          |r(|j;                  t=        j>                  dd      d          |rP|j;                  t=        j>                  dd      d          |j;                  t=        j>                  dd      d          |j                  d	       |j                  d| j                  |      z         |j                  d       |j                  d|j@                  z         |j                  d       |D ]|  }|j1                  t        j2                  |j4                        }|j(                  jC                         }|j                  dt        jD                  d|j4                  d|d|d	       ~ |D ]|  }|j1                  t        j8                  |j4                        }|j(                  jG                         }|j                  dt        jD                  d|j4                  d |d|d	       ~ tI        ||j@                  d!i"      5 }|D ]!  }| jK                  |j(                  ||d#$       # 	 d d d        |j                  d%       |j                  d&       |j                  d'       |j                  d(       |j                  d)       |j                  d*       |j                  d	       |j                  d+|
z         tM        |j
                        }	 |jO                  |       |jQ                          y y # 1 sw Y   xY w# |jQ                          w xY w)-Nr   c                 `    | D cg c]  }|j                   s|r|j                  r|  c}S c c}w r   )r   rx   )rb   r   rQ   s      r#   api_entriesz1ModuleNode.generate_api_code.<locals>.api_entries   s6    '. DeyySU-A-A  D D Ds   #+z_api.hz#ifdef __MINGW64__z#define MS_WIN64r   r   z#include "%s"r   static PyTypeObject *%s = 0;#define  (*)zstatic %s = 0;r   PyIdentifierFromStringImportExport.cVoidPtrImportr   FunctionImport
TypeImportzstatic int import_%s(void) {zPyObject *module = 0;z%module = PyImport_ImportModule("%s");zif (!module) goto bad;if (__Pyx_ImportFunction_z
(module, "", (void (**)(void))&, "z") < 0) goto bad;if (__Pyx_ImportVoidPtr_", (void **)&ry   )imported_modules	goto bad;)
error_codezPy_DECREF(module); module = 0;	return 0;bad:zPy_XDECREF(module);
return -1;}r   )r   ))r   rw   rH   r   r   api_filer   r   r3   r   r   r   r   r   r   r   r   ospathbasenamerJ   typeptr_cnametypeobj_cnamer   manglefunc_prefix_apiri   r   varptr_prefix_apiputr   load_as_stringr   signature_string	cyversionempty_declaration_codeModuleImportGeneratorgenerate_type_import_callr   r   r   )rM   r1   r2   rt   r   api_vars	api_funcsapi_extension_typesr   r   r   rQ   rJ   r   sigimport_generatorr   s                    r#   rs   zModuleNode.generate_api_code   sB   	D s/ 1 12	)#*=*=>y$7,V]]HEFO%%'F23@MVT=9##%//$--2DDIy)LL-.LL+,LL"LL./}}_rww/?/?/NNO"R 0 AE ::DLL!?$BTBT!TULL**D,>,>"@ AA
 R & HE#EJJ/DJJv'='=uzzJELL!1D4I4I%4P!PQLLEJJ!FG	H
 R % KE#EJJ/DJJv'?'?LELL!1T5J5J55Q!QRLLuzz5!IJ	K
 JJ{112JL\]^_`a

;55oGWXYZ[\

;556FHXYZ[\]"

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

;55lDTUVWXYLLLL7$--:LLMLL01LL@3CUCUUVLL12" B

6#9#95::Fjj113''UCABB " B

6#;#;UZZHjj779''UCABB 'vASASU]@^_ qcs0 qE225::vGWdo2pqq LL9:LL%LL LL./LL&LLLLLL+i78foo.Aa 	] %8|q q  	s   *'Y;Y* Y'*Y<c                     |j                  t        j                  dt        j                  dd      d|j
                  d       y )Nr   PyTypeObject	DL_IMPORTr   )r   r   r   r   public_declr   )rM   rJ   r   s      r#   r   z&ModuleNode.generate_cclass_header_codeB  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   r   pass)
r   rK   ri   indentr   r   rJ   r   r   dedent)rM   rJ   r   r   rQ   s        r#   r   z'ModuleNode.generate_cclass_include_codeH  s    dii) 	*jj,,$ HYJJ//1/EG HH LL r%   c                 &   | j                   }t        j                  s|j                  rt        j                         }nt        j                         }t        ||      }t        j                  || ||j                        }|j                          |d   }| j                  ||||j                  |       | j                  |_        | j                  |_        |j!                  t"               |d   }	|	j%                  d| j&                  z         t(        j*                  | j&                  j-                  dd      }
|	j%                  d|
z         |	j%                  d|
z         |	j%                  d	       |	j%                  d
|j.                  z         |d   }	|	j%                  d       | j1                  |||	d       |d   }	| j3                  ||	       | j5                  ||	       | j7                  ||	       | j8                  j;                  ||	       |	j=                  d        | j?                  ||	       | jA                  ||	       |jB                  r| jE                  ||	       | jG                  ||	       |	j%                  tI        jJ                  dd      d   jM                                | jO                  |d d ||d          | jQ                  ||d          t        jR                  r| jU                  ||d          | jW                  |d          | jY                  |||       |j[                  d       |j\                  d d  D ]  }|j!                  |        |j_                          ta        |jb                        }	 |je                  |       |jg                          d|_4        |jj                  r| jm                  ||       t        j                  s|j                  r| jo                  |||       y y # |jg                          w xY w)N)code_configcommon_utility_include_dirr   before_global_varz#define __Pyx_MODULE_NAME "%s"r   r   zextern int %s;zint %s = 0;r   z/* Implementation of '%s' */late_includesz/* Late includes */F)earlyall_the_restSmallCodeConfigModuleSetupCode.cr   init_modulecleanup_modulemain_methodfilename_tablerT   r   )8rn   r   r.   r   AnnotationCCodeWriterr   r   r3   r   r   initialize_main_c_codegenerate_module_preambleembedded_metadatarZ   
module_posr0   use_utility_coderefnanny_utility_coder   rI   r   module_is_mainr   r   r   generate_cached_builtins_declsgenerate_lambda_definitionsgenerate_variable_definitionsr6   generate_function_definitionsmark_posgenerate_typeobj_definitionsgenerate_method_tabler_   generate_import_stargenerate_pymoduledef_structr   r   stripgenerate_module_init_funcgenerate_module_cleanup_funcembedgenerate_main_methodgenerate_filename_table!generate_declarations_for_moduleswriterC   finalize_main_c_coder   r   r   r   c_file_generated	gdb_debug_serialize_lineno_map_generate_annotations)rM   r1   r2   rt   modules
rootwriterr   globalstater   coder  utilcoder   s                r#   rq   zModuleNode.generate_c_codeU  s   ))w//!779J))+J.sG<&&%'.'I'I

 	**,X&%%c7GV=U=UW]^!%!%$$%:;./

3d6K6KKL#)#8#8$:O:O:W:WX[]a:bc

#n45

=>12

2

1C4F4FFG?+

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

;--.?ATUVWX^^`a 	&&ws|S+m:TU))#{;K/LM==%%c;}+EF$$[1A%BC..sG[IT--a0 	3H((2	3((*&--(	a GGI"#&&sJ7w//&&z67C  0	 GGIs   O> >Pc                 6   | j                  |       t        j                  xs |j                  }|rt        j                  j                  |      re	 dd lmc m} |j                  |      j                         }t        |d      r|j                         }n|j!                         }|D ]	  }d |_         nd }|j%                  |j&                  |j(                  |       | j*                  j,                  sy | j*                  j.                  j0                  }	t        j                  j3                  t        j                  j5                  |j(                              }
| j*                  j,                  D ]  }t        j                  j3                  t        j                  j7                  |
|            }t        j                  j5                  |      }|j9                  |
      sq |	|d| j:                  d      }|s||
k7  r5t        j                  j                  |      s	 t        j<                  |       |j%                  |||        y # t        $ r dd l
mc m} Y w xY w# t>        $ r(}dd l }|j@                  |jB                  k7  r Y d }~\d }~ww xY w)Nr   iter)coverage_xmlr   T)include)"r.   r   annotate_coverage_xmlr   r   existsxml.etree.cElementTreeetreecElementTreeImportErrorxml.etree.ElementTreeElementTreeparsegetroothasattrr$  getiteratortailsave_annotationmain_source_filer   r   rG   contextsearch_include_directoriesabspathdirnamejoin
startswithrZ   makedirsOSErrorerrnoEEXIST)rM   r  rt   r2   coverage_xml_filenameETr%  iterator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333 88$9:BBDL|V,',,.'335   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-mRSWXK*,RWW^^O5TKK0
 &&{Kl&[!	\)  3223@   ww%,,. /s*   	I "I'I$#I$'	J0JJc           
         |j                   j                  }|j                  j                         }t	        t
              }t        |      D ]"  \  }}|dkD  s||   j                  |dz          $ |j                  d       t        |j                               D ]?  \  }}|j                  ddj                  t        t        |            t        |             A |j                  d       |j!                          y )Nr   r   LineNumberMapping
LineNumberr   )	c_linenoscython_lineno)r6  gdb_debug_outputwriterbuffer
allmarkersr   list	enumerater9   startra   rc   	add_entryr:  mapstrend	serialize)	rM   r1   ccodewritertbmarkersdc_linenorO  rN  s	            r#   r  z ModuleNode._serialize_lineno_map  s    [[//$$//1'0'9 	6#Hmq - ''15	6 	$%(.qwwy(9 	$M9LL((3sI#67!-0  	 	"#
r%   c                     ||vr;d||<   |j                   D ]  }| j                  |||        |j                  |       y y )Nr   )cimported_modulesro   r9   )rM   r1   module_listmodules_seenimported_modules        r#   ro   z"ModuleNode.find_referenced_modules  sP    l" !L#&#8#8 Y,,_k<XYs#	 #r%   c                    g }t        |      D ]  \  }}||   }t               }|}	|	rF|	j                  j                  }
|
sn- ||
      }|j	                  |       |j                  |      }	|	rF||_        t        |      D ])  }||   }||j                  v s|j                  ||         |j                  |        |S r   )
rT  setrJ   	base_typeaddget	base_keysrangeinsertr9   )rM   	type_dict
type_ordergetkey	type_listikey	new_entry	hierarchybaserg  base_keyjrQ   s                 r#   sort_types_by_inheritancez$ModuleNode.sort_types_by_inheritance  s     	
+ 	,FAs!#I ID II//	 !),h' }}X.  #,I 1X ,!!%//)$$Q	2	,   +-	,. 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%   )rH   usedin_cincluderJ   r|  r   rz  r?   r   rX  r9   r   rx   is_extension_typer  rx  )rM   rb  r1   	vtab_dictvtab_dict_ordervtabslot_dictvtabslot_dict_orderry   rQ   rJ   rr  rz  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
attrgetterrH   rJ   r9   rx  )rM   r1   key_func
entry_dictentry_orderrQ   rr  s          r#   rp   zModuleNode.sort_cdef_classes6  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_predeclarationrJ   rf  r   	is_ctupler  ri   rh  r9   rx   r   generate_objstruct_definitiongenerate_typeobj_predeclarationgenerate_exttype_vtable_struct$generate_exttype_vtabptr_declaration*generate_exttype_final_methods_declaration)rM   r1   r  r  r  r!  rQ   vtabslot_entriesctuple_namesry   
definitionr   ts                r#   generate_type_definitionsz$ModuleNode.generate_type_definitionsA  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 ]n  }	|	|u }
|j                  d       |j                  d
|	j                  z         | j	                  |	||
       | j                  |	||
       | j                  |	||
       p y c c}w )Ntype_declarationsr   z/*--- Type declarations ---*/zcpython.arrayz#ifndef _ARRAYARRAY_Hzstruct arrayobject;z'typedef struct arrayobject arrayobject;r   module_declarationsz#/* Module declarations from '%s' */)r   r   r  r  generate_c_class_declarationsgenerate_cvariable_declarationsgenerate_cfunction_declarations)rM   r1   r  r   typecodemr  r  
modulecodery   defined_heres              r#   r  z,ModuleNode.generate_declarations_for_modules\  s-   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 BVEZEZZ[..vz<P00\R00\R	S Bs   D+c                 T    |j                  t        j                  |d      d          y )Nr   r   )r   r   r   rM   r!  ri   s      r#   _put_setup_codezModuleNode._put_setup_codes  s!    ++D2EFqIJr%   c                    |j                          |rZ|j                  d       |j                  t        j                  |d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      z         |j                  dt!        |      z         |j                  dt"        j$                  |j&                  j(                  v z         | j+                  |d       |j&                  j,                  j.                  r| j+                  |d       n| j+                  |d       | j+                  |d       | j+                  |d       |j0                  r6t2        j4                  dt2        j6                  dt2        j4                  d }nd}|j                  d!       |j                  d"t2        j8                  dt2        j:                  d#t2        j8                  d t2        j<                  d$t2        j<                  d |d%       |j                  d&       |j                  d'       |j                  d       | j?                  |       |j                  d       |j                  d(t2        j@                  z  | jC                  |      z          |j                  d(t2        jD                  z  | jC                  |      z          |j                  d)       | jG                  |||d*+       |j                  d       |j                  d,       |j                  d-       |j                  d.       |j                  d       |jH                  d/   rU|j                  d       |j                  d0       |j                  d1       |j                  d.       |j                  d       |jK                  tM        jN                  d2d3      d4          |jH                  d5   }	|jH                  d6   }
|	d7vr|
stQ        | jR                  d8       |j                  d9tU        |
d:k(        z         |j                  d;tU        |
j                  d<d      jW                         d=k(        z         |
d>k(  r|j                  d?       n%|j                  d@       |j                  dA|
z         |	dBk(  rdC}n|	jY                         }|j                  dD|z         |j                  dE|z         |jK                  tM        jN                  dFdG      d4          tZ        j\                  j_                  |       tZ        j\                  ja                  |       tZ        jb                  ja                  |       |jK                  td        jf                         |j                  dH       |j                  d       |j                  dI|jh                  z         |j                  dJ|jj                  z         |j                  dJt2        jl                  z         |j                  dIt2        jn                  z         |j                  dJt2        jp                  z         |j                  dJt2        jr                  z         |j                  dJt2        jt                  z         tv        jx                  "|j                  dJt2        jz                  z         |j                  dKt2        j<                  z         |j                  dLt2        j4                  z         |j                  dMt2        j|                  dNt2        j~                  dO       |j                  dPt2        j8                  z         |j                  tM        j                  dQd3             t        |      r&|j                  tM        j                  dRdS             y y )TNz/* BEGIN: Cython Metadata   T)r   	sort_keyszEND: Cython Metadata */r   z#ifndef PY_SSIZE_T_CLEANz#define PY_SSIZE_T_CLEANz#endif /* PY_SSIZE_T_CLEAN */rr  z#ifndef Py_PYTHON_Hzg    #error Python headers needed to compile C extensions, please install development version of Python.zb#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000)z6    #error Cython requires Python 2.6+ or Python 3.3+.r   rY  z#endif /* Py_PYTHON_H */r   )__version__z#define CYTHON_ABI "%s"r   _z#define CYTHON_HEX_VERSION %sz!#define CYTHON_FUTURE_DIVISION %dCModulePreambleCppInitCode	CInitCodePythonCompatibilityMathInitCode = z; (void)z; z-#define __PYX_MARK_ERR_POS(f_index, lineno) \z    { z[f_index]; (void)z = lineno; (void)r   z.#define __PYX_ERR(f_index, lineno, Ln_error) \z:    { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; }z
#define %sz/* Early includes */F)latezL#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS)z!#define CYTHON_WITHOUT_ASSERTIONSr   ccomplexz#if !defined(CYTHON_CCOMPLEX)z#define CYTHON_CCOMPLEX 1UtilityFunctionPredeclarationsr   r   c_string_typec_string_encoding)bytes	bytearrayzGa default encoding must be provided if c_string_type is not a byte typez1#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII %sasciiz0#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 %s-utf8defaultz2#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT 1zq#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8)z*#define __PYX_DEFAULT_STRING_ENCODING "%s"r  	ByteArrayz7#define __Pyx_PyObject_FromString __Pyx_Py%s_FromStringzE#define __Pyx_PyObject_FromStringAndSize __Pyx_Py%s_FromStringAndSizeTypeConversionszTypeConversion.czOstatic CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; }zstatic PyObject *%s = NULL;zstatic PyObject *%s;zstatic int %s;static int %s = 0;zstatic const char * z= r   zstatic const char *%s;FastTypeChecksPythranConversionzCppSupport.cpp)Cr   r   jsondumpsra   rD   rE   r   sortkeylocationINITIALr  r   r   r  r   r   r   divisionr6  future_directivesr  r2   cplusr-   r   clineno_cnameline_c_macrofilename_cnamefiletable_cnamelineno_cnamer   r   r   r   r   r0   r   r   r   r   rZ   intlowertitler   c_long_typecreate_to_py_utility_codecreate_from_py_utility_code
c_int_typer   branch_prediction_macrosmodule_cnamemodule_dict_cnamebuiltins_cnamecython_runtime_cnameempty_tupleempty_bytesempty_unicoder   
pre_importpreimport_cnamecfilenm_cnamefile_c_macror  load_cachedr   )rM   r1   r2   ra  metadatar!  rP   r  cinfor  r  c_string_func_names               r#   r  z#ModuleNode.generate_module_preamblev  s   JJ23JJtzz(1EFJJ01JJrN

-.

-.

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

()

 C 	D

 S 	T

KL

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

,{/B/B3/LLM

25F{5SST

6OOs{{<<<> 	? 	T#45;;$$  }5  {3T#89T>2 &&-3-A-A6CVCVX^XlXlmEE

CD

!!6#9#96;P;P!4!4
 	
 	

DE

OP

2//5

2

<&"7"77$--:LLM

<&"9"99DMM#<NNO

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

2

ab

67

8

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

FM^biMiIjjk

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

LOaab

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

de

2

033C3CCD

)C,A,AAB

)F,A,AAB

063N3NNO

)F,>,>>?

)F,>,>>?

)F,@,@@A)JJ-0F0FFG

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

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

F4H4H&J]J]^_

+f.C.CCD[445EGZ[\#  !8!89LN^!_` r%   c                 $   t         j                  }|j                  d|z         |j                  d       |j                  d|z         |j                  d       |j                  d|z         |j                  d       |j                  d       y )Nr   z  #ifdef __cplusplusz    #define %s extern "C"z  #elsez    #define %s externz  #endifr   )r   r   r   r  s      r#   r   z-ModuleNode.generate_extern_c_macro_definition  ss    $$

<$&'

)*

.56

9

*T12

:

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

&'

/0

8r%   c                 X   g }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>)
ra   rD   rE   r   r  r  EARLYr  LATEputln_openmp)rM   r1   ra  r!  r   r  includesrP   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                  rr|j                  j                  D ]X  }|j                         } ||      r ||      }|j                  dd      j                  dd      }|j                  d	|z         Z n|j                  d
       |j                  d       y )Nr   )isabsr   r   zstatic const char *%s[] = {\z\\"z\""%s",0};)
os.pathr  r   r   r   r  r   filename_listget_filenametable_entryr   )rM   r!  r  r   source_desc	file_pathescaped_filenames          r#   r  z"ModuleNode.generate_filename_table
  s    +

2

063I3IIJ))#//== 7'??A	# ( 3I#,#4#4T6#B#J#J3PU#V 

7%5567 JJsO

4r%   c                      y r    )rM   r1   r!  s      r#   generate_type_predeclarationsz(ModuleNode.generate_type_predeclarations  s    r%   c                 d   |D ]  }|j                   r|j                  }|j                  r)|j                  s|j                  r| j                  ||       T|j                  r3|j                  r'| j                  |j                  j                  |       |j                  s| j                  ||        |D ]  }|j                   r|j                  }|j                  r| j                  ||       ;|j                  r| j                  ||       Z|j                  r| j                  ||       y|j                  r3|j                  r'| j                  |j                  j                  |       |j                  r| j                  ||       |j                  s| j!                  ||        y r   )r  rJ   
is_typedefis_struct_or_unionis_cpp_class$generate_struct_union_predeclarationr  r  struct_entryr  r  generate_typedefrf   generate_enum_definition generate_struct_union_definitiongenerate_cpp_class_definitionr  )rM   r   r!  rQ   rJ   s        r#   r   z$ModuleNode.generate_type_header_code  sY    " 	GE$$zz??,,0A0A==eTJ^^

==ejj>U>UW[\++::4F	G " 	CE$$zz??))%6\\11%>,,99%F^^

99%**:Q:QSWX&&66udC++66tTB	Cr%   c                     |j                  d       |j                  D ]X  }|j                  }|j                  r|j                  }|j                  d      r|dd  }n|}|j                  d|d|d       Z y )Nr   __pyx_   typedef struct z __pyx_gcc33_r   )r   rH   rJ   typedef_flagr  r;  )rM   r1   r!  rQ   rJ   ri   r3  s          r#   generate_gcc33_hackzModuleNode.generate_gcc33_hack?  sq    

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

$  !		!r%   c                     |j                   j                  }|j                  r	 |j                  d   }n|}|j                  |j                         |j                  d|j                  |j                        z         y # t        $ r |}Y Vw xY w)Nnumeric_typedefsztypedef %s;)
rJ   typedef_base_type
is_numericr   KeyErrorr  rZ   r   r   r   )rM   rQ   r!  rg  writers        r#   r	  zModuleNode.generate_typedefM  s}    JJ00	))*<= F		"]Y%?%?%LLM  s   A? ?BBc           
      L    |j                   r|d|d|d|d|d
S |d|dS )Nr   z
;
typedef r   )r  )rM   rJ   kindri   s       r#   sue_predeclarationzModuleNode.sue_predeclarationY  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 )	rJ   r  	templatesr   r:  r   r  r  r   )rM   rQ   r!  rJ   Ts        r#   r  z/ModuleNode.generate_struct_union_predeclarationa  s    zzJJ/-2D2D59^^D))+D3F F G

4**4DJJGH Es   
B%c                     |d|d}d}||fS )Nr    {r  r  )rM   rJ   r  ri   headerfooters         r#   sue_header_footerzModuleNode.sue_header_footerh  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                  }	|	st        |j                  d       |	D ]9  }
|j                  d	|
j                  j                  |
j                        z         ; |j                  |       |rV|j                  d       |j                  d
       |j                  d       |j                  d       |j                  d       y y y )Nr   __Pyx_PACKEDz#if defined(__SUNPRO_C)z  #pragma pack(1)z#elif !defined(__GNUC__)z  #pragma pack(push, 1)r   zOEmpty struct or union definition not allowed outside a 'cdef extern from' block%s;z  #pragma pack()z  #pragma pack(pop))r  rZ   rJ   r   r  	is_structpackedr   r  packed_struct_utility_coder#  r   r   r   r   r   )rM   rQ   r!  rJ   r   r  r(  r!  r"  r   attrs              r#   r  z+ModuleNode.generate_struct_union_definitionm  s   eii zz

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

45

./

56

45

8$JJv++Keii!rs# D

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

45

-.

56

01

8$ - r%   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                         D cg c]&  }|j                  j                  r|j                  s|( }	}d}
d }d }|j                  D ]  }|j                  j                   r(|j                  j"                  r|j                  d       nM|j$                  d	k(  r|}n;|j$                  d
k(  r|}n)|j                  j                   r|j                  d       d}
|j                  d|j                  j'                  |j                        z          d|j(                  j*                  v }|s|	r|rg }g }|j                  j,                  d t/        |j                  j0                        |j                  j2                  z
   D ]<  }|j5                  |j'                                |j5                  |j                         > |j                  j2                  ra|j5                  |j                  j6                  j'                  t8        j:                               |j5                  t8        j:                         |s	dg}ndg}g }|r|j                  |j                  ddj                  |      d       |	r*|j=                          |	D ]  }|j?                  |d        |r0|j                  |j                  ddj                  |      d       |	r|jA                          |j                  d       n0|j                  |j                  ddj                  |      d       |s|	s|
r|
r|j                  d       |r|j                  d|j                  z         |	r|j=                          |r|j                  d|j                  z         |	r*|	D ]  }|jC                  |d        |jA                          |j                  d       n|j                  d|j                  z         |	r$|r|j                  |j                  d|j                  d       |j=                          |j                  D ]W  }|j                  j                   r|j                  |j                  d|j                  d       |jE                  |d       Y |jA                          |j                  d       |j                  |j                  d|j                  d       |j                  d       |j=                          |j                  D ]j  }|j                  j                   r|jC                  |d       |j                  |j                  d|j                  d       |jE                  |d       l |jA                          |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   void(, ) {nanny);r   z~%s() {z%s();z~%s();z(const z& __Pyx_other) {z = __Pyx_other.r   z& operator=(const zif (this != &__Pyx_other) {zreturn *this;z& __Pyx_other);r  )#r  rZ   rJ   r   r  r   r:  r   r   r   base_classesrb   rE   is_pyobjectis_inheritedr   is_cfunctionis_static_methodri   r   r   partsoriginal_argslenargsoptional_arg_countr9   op_arg_structr   optional_args_cnameput_ensure_gilput_init_var_to_py_noneput_release_ensured_gilput_var_xdecrefput_var_incref)rM   rQ   r!  rJ   r   r  
base_classbase_class_declrJ  py_attrshas_virtual_methodsconstructor
destructorr*  is_implementing	arg_decls	arg_namesargs                     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#(==#7#7#9 Fa66--ann  FH F"'KJ)) 
K99))dii.H.HHHY'YY(*"&KYY')!%JYY++HHZ(*.'

5499#=#=djj#IIJ
K ,t/?/?/E/EEOh "I "I*//==[S!1!1!6!678H8H8[8[[ ] 4!(()=)=)?@!((34 #''::!(()9)9)G)G)X)XY_YsYs)tu!(()C)CD$%+H	!'I "I"**4::tyy7KLM))+"* K$66t56IK jjk.?.?9AU!VW224**S/**$**dii	6JKLX)<&HHZ("**Y34))+jj:+;+;!;<"* C$..t5.AC224**S/**X

23"**djj$**UV%%'#// Ad!YY33**tzz4::%VW--d%-@A ..0**S/**UYU_U_`a**:;%%'#// Ad!YY33..t5.A**tzz4::%VW--d%-@	A
 ..0**S/**_-**S/**TZZTU**

TXT^T^_`JJtG  I
 ^Fs   (]].+]c                    |j                  |j                         |j                  }|j                  xs |j                  xs d}| j                  |d|      \  }}|j                  |       |j                  }|st        |j                  d       n|d   }|D ]*  }	|	j                  |	j                  j                  |       , |D ]^  }	|	j                  |	j                  }
n)|	j                  d|	j                  j                         }
|	|ur|
dz  }
|j                  |
       ` |j                  |       |j                  j                  r|j                  d|d|d	       y y )
Nr   enumzDEmpty enum definition not allowed outside a 'cdef extern from' blockr   r  ,ztypedef enum r   r   )r  rZ   rJ   r   ri   r#  r   enum_valuesr   
value_nodegenerate_evaluation_codert   r  )rM   rQ   r!  rJ   ri   r!  r"  rS  
last_entryvalue_entry
value_codes              r#   r
  z#ModuleNode.generate_enum_definition  sJ   eii zz{{.ejj.B//fdC

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

:&	' 	

6::""JJ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 )	Nr   externr   r   r   r   r~   	DL_EXPORT)	r   rJ   r   r   r  r   r   r   r   )rM   rQ   r!  ri   s       r#   r  z*ModuleNode.generate_typeobj_predeclaration  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 ]I  }|j                  r|j                  d|j                  j                  d|j                  z        z         K |j                  d       y y )	Nr   zstruct %s {struct r   r   r&  z(*%s)r  )r  r  rZ   rJ   r   specialize_fused_typesr|  r   rg  r   obj_base_cnamerw   r7  r   r   )rM   rQ   r!  rJ   r   method_entrys         r#   r  z)ModuleNode.generate_exttype_vtable_struct(  s   zzeii zz

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

NN33))+ , !& 3 3 i#00JJu|'8'8'I'I'T`TfTfJf'gghi JJt !r%   c                     |j                   sy |j                  |j                         |j                  }|j                  r-|j                  d|j                  d|j                  d       y y )Nstatic struct  *r   )r  r  rZ   rJ   vtabptr_cnamer   r|  )rM   rQ   r!  rJ   s       r#   r  z/ModuleNode.generate_exttype_vtabptr_declaration?  sV    zzeii zzJJ%%""$ % r%   c                    |j                   sy |j                  |j                         |j                  }|j                  j                  j
                  D ]s  }|j                  r|j                  s|j                  j                  |j                        }|j                  |j                        }|j                  d||d       u y )Nr-  r   )r  r  rZ   rJ   r   rw   r7  final_func_cnamer   build_function_modifiersfunc_modifiersr   )rM   rQ   r!  rJ   r`  declaration	modifierss          r#   r  z5ModuleNode.generate_exttype_final_methods_declarationK  s    zzeii zz!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)r   r   r  r  )rM   rJ   r!  s      r#   r  z,ModuleNode.generate_objstruct_predeclarationY  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 ]N  }|j                  rt        }n|j                  }|j                  d
|j!                  |j"                        z         P |j                  |       |j$                  -|j                  d|j                  d|j$                  d       y y )Nrl  r   PyHeapTypeObject)r]  r   r   r   PyObject_HEADr]  rc  r&  r  )r  rZ   r   r#  r  r   rg  r  r   r_  vtabslot_cnamer|  r   is_declared_genericr
   rJ   r   r   objtypedef_cname)	rM   rJ   r!  r!  r"  rg  basestruct_cnamer*  	attr_types	            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	JJ	224::>>@	@ 	

6  ,JJ$2F2FH]H]^_ -r%   c                     |j                   D ]9  }|s|j                  s|j                  d|j                  j                  z         ; y )Nr   )rH   rx   r   rJ   r   rM   r1   r!  r  rQ   s        r#   r  z(ModuleNode.generate_c_class_declarations  sC    (( 	/EU11

9JJ,,. /	/r%   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#                  |j%                  |	|	             ||j'                  d
|z         |j)                  d       |j                  |	k7  s|j)                  d|j                  d|	d        y )NprivaterZ  r   r~   r[  staticr   z%s dll_linkage = %sr   r   r   r   )is_cython_builtinr   r  
in_closurer   rx   r  r   r   initrJ   literal_coder   r   r   varptr_prefixri   r   r   put_safer   )
rM   r1   r!  r  rQ   storage_classr{  r  rJ   r   s
             r#   r  z*ModuleNode.generate_cvariable_declarations  s     __ )	F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./HHT**; + 0 1gn-JJsO{{e#

eDES)	Fr%   c                     |j                   D ]8  }|j                  s|j                  dk(  s|j                  s+t	        ||||       : y r}   )rw   r  r   r   generate_cfunction_declarationrv  s        r#   r  z*ModuleNode.generate_cfunction_declarations  sA    && 	MEzze..(:eii.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|  r   )r   r  r   r   rJ   r   r   r  r  r  r   )rM   r1   r!  rQ   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
                  d   st        | j                  d       | j                  ||       | j                  |||       | j                  ||       |j                         r6| j                  |||       |j                         r| j                  |||       |j                  dg      r| j!                  ||       |j                  ddg      r| j#                  ||       |j                  g d      rJt%        | j                  dd	       |j'                  d
       |j'                  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| j1                  ||       |j2                  s$|j5                  dg      r| j7                  ||       |j                  t8        j:                        r| j=                  ||       | j?                  ||       | jA                  ||       | jC                  ||       | jE                  |||        y )NrZ  c_api_binop_methodszaThe 'c_api_binop_methods' directive is only supported for forward compatibility and must be True.__getitem____setitem____delitem__)__getslice____setslice____delslice__z__getslice__, __setslice__, and __delslice__ are not supported by Python 3, use __getitem__, __setitem__, and __delitem__ insteadr   #if PY_MAJOR_VERSION >= 3zN#error __getslice__, __setslice__, and __delslice__ not supported in Python 3.r   r  r  __getattr____getattribute____setattr____delattr____get____set__
__delete____dict__)#r   rH   r   rJ   r   r0   r   rZ   generate_exttype_vtablegenerate_new_functiongenerate_dealloc_functionneeds_gcgenerate_traverse_functionneeds_tp_cleargenerate_clear_functiondefines_any_specialgenerate_getitem_int_functiongenerate_ass_subscript_functionr	   r   generate_ass_slice_functiongenerate_getattro_functiongenerate_setattro_functiongenerate_descr_get_functiongenerate_descr_set_functionis_closure_class_scopedefines_anygenerate_dict_getter_functionr   richcmp_special_methodsgenerate_richcmp_functiongenerate_property_accessorsr  generate_getset_tablegenerate_typeobj_definition)rM   r1   r!  rI   rQ   rJ   r   s          r#   r  z'ModuleNode.generate_typeobj_definitions  s   --(( .	TE 8+zz

 ++,ABdhh34 00=..udEB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

8,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 77E<M<Mzl<[::5$G001R1RS66udC44UDA..ud;..ud;445EudS].	Tr%   c                     |j                   }|j                  r-|j                  d|j                  d|j                  d       y y )Nrb  r   r   )parent_typevtable_cnamer   r|  rM   r   r!  rJ   s       r#   r  z"ModuleNode.generate_exttype_vtable  s>      JJ%%!!# $ r%   c                     |j                   }|j                  |j                  d      d|j                         d       y )Npz = (z)o;)r  r   r   r   r  s       r#   generate_self_castzModuleNode.generate_self_cast  s8      

%%c*++-/	0r%   c           	         t        j                  dd      }|j                  d      }|j                  }|j                  }|j                         \  }\  }	}
}|j                  j                  }|j                  rg }	|j                  D cg c]  }|j                  j                  r| }}|j                  d      }|s|r|j                  r|j                  sd}nd}|rd}n|j                  j                  dd      }|j                  t         j"                        }|j                  t         j$                        }|j&                  d   }|j)                  d|z         |j)                  d       |rT|j)                  d	|j                  j+                  |      |fz         |j)                  d
|z         |j)                  d       |j)                  d|d|d|d       |j,                  xs |
xs |xs |	xs |}|r-|j)                  d|j                  j+                  d      z         |r=t        j.                  ||      }|d|j0                  z  }|j)                  d|z         nP|j)                  d       |r|j&                  j3                  t5        j6                  dd             |rd}nd}|j+                  dd      }|j)                  d|d|d|d       |j)                  d|d|d       |j)                  d |z         |j)                  d!       |j9                         r|j)                  d"       |j)                  d#       |s|j)                  d$       |j)                  d%       |sD|j)                  d#       |j)                  d&t         j:                  z         |j)                  d'       |j)                  d(       |r|s|j)                  d'       |r#|j)                  d)|j=                  d*      z         d+}|j,                  r|}|j                  rE|j                  j>                  r/|j                  }|j                  r|j                  j>                  r/||urd,|j>                  z  }nd}|j)                  d-|j,                  d.||j@                  d/       |D ]<  }|j)                  d0|jB                  d1|j                  jE                         d2       > |	D ]T  }|jF                  d3k(  r/d}|jI                  d-|jB                  d4|jB                  d5       A|jK                  |d6d+7       V |D ]>  }|j)                  d8|jB                  z         |j)                  d9|jB                  z         @ |
D ]   }|j)                  d:|jB                  z         " |jB                  d;k(  r|j)                  d<       |rR|j                  rF|j                  rd=t         j:                  z  }nd>}d}|j)                  d?|jL                  d@|dA       |j)                  dB       |r:|j)                  dC       |jO                  d*tP        d+7       |j)                  dD       |j)                  d'       y c c}w )ENtp_new__new__r   CYTHON_UNUSED r   freelistdeclszIstatic PyObject *%s(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/zstatic %s[%d];r  zstatic PyObject *z(PyTypeObject *t, zPyObject *a, zPyObject *k) {r&  r  z
%s->tp_newzPyObject *o = %s(t, a, k);zPyObject *o;IncludeStringHStringTools.czH & ((t->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)) == 0)Tderefz+if (CYTHON_COMPILING_IN_CPYTHON && likely((z# > 0) & (t->tp_basicsize == sizeof(z))z)) {zo = (PyObject*)[--];zmemset(o, 0, sizeof(%s));z(void) PyObject_INIT(o, t);PyObject_GC_Track(o);} else {z:if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {zo = (*t->tp_alloc)(t, 0);z4o = (PyObject *) PyBaseObject_Type.tp_new(t, %s, 0);r   zif (unlikely(!o)) return 0;zp = %s;oFz(struct %s*)zp->r  r   znew((void*)&(p->)) z();r  z" = PyDict_New(); if (unlikely(!p->z)) goto bad;p->%sr2  zp->%s.data = NULL;zp->%s.memview = NULL;zp->%s.obj = NULL;__pyx_memoryviewslicezp->from_slice.memview = NULL;zo, %s, NULLzo, a, kzif (unlikely(r/  z) < 0)) goto bad;z	return o;r   zreturn NULL;))r   ConstructorSlotmangle_internalr  rg  get_refcounted_entriesis_final_typeis_internalr   rJ   r  lookup_here
is_specialtrivial_signaturer0   ri  r   freelist_namefreecount_namer   r   r   rp  get_base_slot_functionr   r  r   r  r  r  	cast_coder|  rd  r   r   ri   r   rB  
func_cnameput_decref_clearr
   )rM   r   r!  cclass_entrytp_slot	slot_funcrJ   rg  have_entriesrH  
py_buffersmemoryview_slicesr  rQ   cpp_class_attrsnew_func_entryunused_markerfreelist_sizer  r  r  need_self_castr  type_safety_check
obj_structneeds_error_cleanupvtab_base_typestruct_type_cast
cinit_argss                                r#   r  z ModuleNode.generate_new_function	  s   ++Hi@))(3	  NN	 446 	@?x->))77H.3.?.? 7U#jj55 ! 7 7 **95N,E,E!/!A!AM,MM!,,00Q?M--f.B.BC..v/D/DE  )_ 	

2JJ'!!22=A+    JJ+n<=JJrN

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

&
4EGH 

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

6CD

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

:& 

WXJJ23 

:&

QTZTfTffg

3

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 % 	CEJJUZZ>>@B C	C  	JEzzZ'&*#KK. / ,,UG5,I	J ' 	>EJJ+ekk9:JJ.<=	>   	:EJJ*U[[89	: !88JJ67n77//*V-?-??
&
"&JJ)):7 8 	

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

	A7s   	Y?c           	      <	   t        j                  dd      }|j                  d      }|j                  j                  }|j                  |      |k7  ry |j                  d      }|j                  d       |j                  d|z         |j                  j                  }|j                         }|j                  s|j                  d      nd }	|	|j                  vrd }	|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                  ||       |s_|j                  d       |rd}nd	}|j                  d
|z         |j                  d       |j                  d       |j                  d       |r|j                  d       | j!                  ||       |	r|j                  d       |
r|j                  d       |D ]   }|j                  d|j"                  z         " |D ].  }|j%                  d|j"                  z  |j                  dd       0 |D ]"  }|j'                  d|j"                  z  d       $ |r|j(                  }|rL|j*                  r,|j*                  j                         r|j                  d       n|j                  d|z         t        j,                  ||      }||j                  d|z         nc|j.                  r|j                  d|z         nA|j                  d|d|d|d       |j0                  j3                  t5        j6                  dd              n|j8                  j;                  d!d"      }|r|j                  t<        j>                        }|j                  t<        j@                        }|rd}nd#}|j                  }|j                  d$|||jC                  dd%      |fz         |j                  |d&|d'|jE                  d(      d)       |j                  d*       |j                  d+       |r|j                  d       |j                  d       y c c}w ),N
tp_dealloc__dealloc__r   zstatic void %s(PyObject *o) {__weakref__r  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(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && %s) {z1if (PyObject_CallFinalizerFromDealloc(o)) return;r   r   zPyObject_GC_UnTrack(o);z.if (p->__weakref__) PyObject_ClearWeakRefs(o);z+if (p->__dict__) PyDict_Clear(p->__dict__);z__Pyx_call_destructor(p->%s);r  FTr3  clear_before_decref)have_gilr  z+if (PyType_IS_GC(%s)) PyObject_GC_Track(o);%s(o);z%s->tp_dealloc(o);if (likely(r  z4->tp_dealloc(o); else __Pyx_call_next_tp_dealloc(o, r4  CallNextTpDeallocExtensionTypes.cr  r   zQ & ((Py_TYPE(o)->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)) == 0)z^if (CYTHON_COMPILING_IN_CPYTHON && ((%s < %d) & (Py_TYPE(o)->tp_basicsize == sizeof(%s))%s)) {r  [z++] = r  r   r  (*Py_TYPE(o)->tp_free)(o);)#r   r  r  r  rg  	slot_coder   r  r  r  r  r   r  rJ   r  r  generate_usr_dealloc_callr   put_xdecref_clearput_xdecref_memoryviewslicer   r   r  is_builtin_typer   r  r   r  r0   ri  r   r  r  r   r  )rM   r   r!  r  r  rg  slot_func_cnamer  r  weakref_slot	dict_slotr  rH  r  rQ   r  finalised_check
base_cnamer  r  r  r  r  rJ   s                           r#   r  z$ModuleNode.generate_dealloc_function  sl   ++L-H)),7	%%//	U#y0//=

2

+o=	? ))77>>#?D?[?[u((7aeu000L9>9U9UE%%j1[_	E---I.3.J.J.L++Ha*.3.?.? 7U#jj55 ! 7 7 *;|y##E40JJ34"E W  JJ8:IJK JJJKJJsOJJx  JJ01 	&&ud3JJGHJJDE$ 	FEJJ6DE	F  	=E""7U[[#8%**E7; # =	= ' 	<E,,Wu{{-B6: - <	< "00J ??y'?'?'AJJ67JJLzYZ"99%IJ%

8j01**

/*<= 

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

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

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

:&JJ34

3

	E7s   2Rc                 V   |j                  d      }|sy |j                  d       |j                  d       |j                  d       |j                  d       |j                  d|j                  z         |j                  d       |j                  d       |j                  d	       y )
Nr  {zPyObject *etype, *eval, *etb;z!PyErr_Fetch(&etype, &eval, &etb);z&__Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);r  z&__Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);z PyErr_Restore(etype, eval, etb);r   )r  r   r  )rM   r   r!  rQ   s       r#   r  z$ModuleNode.generate_usr_dealloc_call  s    !!-0

3

23

67 	

;<

8e.../

;<

56

3r%   c                    t        j                  d      }|j                  d      }|j                  j                  }|j                  |      |k7  ry |j                  d       |j                  d|z         |j                  d      \  }\  }}	}
|s|r|j                  d       |s|	r| j                  ||       |rt        j                  ||      }|r|j                  d|z         n|j                  r%|j                  }|j                  d|d	|d
       nY|j                  }|j                  d|d|d|d|d	       |j                  j                  t        j                  dd             |D ]o  }d|j                   z  }t#        j$                  t&        |j(                  |      }|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       y )Ntp_traverser   z2static int %s(PyObject *o, visitproc v, void *a) {Finclude_gc_simplezint e;z!e = %s(o, v, a); if (e) return e;if (!z->tp_traverse); else { e = z(->tp_traverse(o,v,a); if (e) return e; }ze = ((likely(z)) ? ((z->tp_traverse) ? zC->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, z)); if (e) return e;CallNextTpTraverser  r  	if (%s) {z!e = (*v)(%s, a); if (e) return e;r   z.objzif (p->%s) {z$e = (*v)(p->%s, a); if (e) return e;r   )r   GCDependentSlotr  r  rg  r  r   r  r  r  r  r   r   r  r   r  r   r   typecastr
   rJ   )rM   r   r!  r  r  r  rg  r  rH  r  r  static_callr  rQ   var_codevar_as_pyobjectr   s                    r#   r  z%ModuleNode.generate_traverse_function%  s)   ++M:))-8	%%//	U#y0

2

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

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

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

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

;

3r%   c                 Z   t        j                  d      }|j                  d      }|j                  j                  }|j                  |      |k7  ry |j                  d      \  }\  }}	}
|s|	s|rd}nd}|j                  d       |j                  d|d|d       |r!t        j                  r|j                  d	       |s|	r| j                  ||       |rt        j                  ||      }|r|j                  d
|z         n|j                  r%|j                  }|j                  d|d|d       nY|j                  }|j                  d|d|d|d|d	       |j                  j                  t!        j"                  dd             t        j                  r|D ]y  }d|j$                  z  }|j                  d|z         |j&                  r|j)                  |t*        d       n|j)                  ||j,                  d       |j                  d       { n%|D ]   }|j                  d|j$                  z         " |	D ]   }|j                  d|j$                  z         " |j$                  dk(  r|j                  d       |j                  d       |j                  d       y )Ntp_clearFr  r   r  zstatic int r/  zPyObject *o) {zPyObject* tmp;r  r  z->tp_clear); else z->tp_clear(o);r  z	)) { if (z->tp_clear) z2->tp_clear(o); } else __Pyx_call_next_tp_clear(o, r4  CallNextTpClearr  r  ztmp = ((PyObject*)%s);r2  zPy_XDECREF(tmp);zPy_CLEAR(p->%s);zPy_CLEAR(p->%s.obj);r  z&__PYX_XDEC_MEMVIEW(&p->from_slice, 1);r   r   )r   get_slot_by_namer  r  rg  r  r  r   r   clear_to_noner  r  r  r   r   r  r   r  r   rq  put_init_to_py_noner
   rJ   )rM   r   r!  r  r  r  rg  r  rH  r  r  unusedr	  r  rQ   ri   s                   r#   r  z"ModuleNode.generate_clear_functionb  sp   ,,Z8))*5	%%//	U#y0 ((5(A 	@?x-> zYF%F

2

y&IJ--JJ'(z##E40#::5'JK

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

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

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

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

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

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

;

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

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

	

B	D

@	B

	

	

	r%   c                 *   |j                   j                  }|j                  d      }|j                  d      }|j                  d       |j                  d|j	                  d      z         |j                  d       |r|j                  d|j
                  z         nH| j                  |ddd	|       |j                  d
       |j                  d       |j                  d       |j                  d       |j                  d       |r|j                  d|j
                  z         nH| j                  |ddd	|       |j                  d
       |j                  d       |j                  d       |j                  d       |j                  d       y )Nr  r  r   6static int %s(PyObject *o, PyObject *i, PyObject *v) {mp_ass_subscriptif (v) {return %s(o, i, v);tp_as_mappingo, i, v'PyErr_Format(PyExc_NotImplementedError,zG  "Subscript assignment not supported by %.200s", Py_TYPE(o)->tp_name);r   r   else {return %s(o, i);zE  "Subscript deletion not supported by %.200s", Py_TYPE(o)->tp_name);r  rg  r  r   r  r  generate_guarded_basetype_callrM   r   r!  rg  	set_entry	del_entrys         r#   r  z*ModuleNode.generate_ass_subscript_function  s    %%//	%%m4	%%m4	

2

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

	JJ,y/C/CCD//?,>	4QJJ9;JJY[JJ

	

	JJ"((*+ //?,>	4QJJ9;JJWYJJ

	

	r%   c                    |r|j                   }|r@|j                  d|d|d|d|d|d       |j                  d|d|d|d|d	       y |j                  d|d|d       |j                  d|d|d|d       y y )Nif (z->z && r   z	  return r/  r4  )r   r   )rM   rg  substructureslotr=  r!  base_tpnames          r#   r!  z)ModuleNode.generate_guarded_basetype_call  s    #11K

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

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

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

#T412 r%   c                 *   |j                   j                  }|j                  d      }|j                  d      }|j                  d       |j                  d|j	                  d      z         |j                  d       |r|j                  d|j
                  z         nH| j                  |ddd	|       |j                  d
       |j                  d       |j                  d       |j                  d       |j                  d       |r|j                  d|j
                  z         nH| j                  |ddd	|       |j                  d
       |j                  d       |j                  d       |j                  d       |j                  d       y )Nr  r  r   zEstatic int %s(PyObject *o, Py_ssize_t i, Py_ssize_t j, PyObject *v) {sq_ass_slicer  zreturn %s(o, i, j, v);tp_as_sequencez
o, i, j, vr  zM  "2-element slice assignment not supported by %.200s", Py_TYPE(o)->tp_name);r   r   r  zreturn %s(o, i, j);zK  "2-element slice deletion not supported by %.200s", Py_TYPE(o)->tp_name);r   r"  s         r#   r  z&ModuleNode.generate_ass_slice_function  s    %%//	%%n5	%%n5	

2

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

	JJ(((*+ //+^\4QJJ9;JJ_aJJ

	

	JJ%((*+ //+^\4QJJ9;JJ]_JJ

	

	r%   c                 L   |j                  d      ry |j                  d      }|j                  d       |j                  d|z         |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 }d}t        j                  D ]  }	|D ]  }
|
j                  |	      }| n  |	j                  d      j                         }|j                  d	|z         |	d
k(  r|}n|	dk(  rd}|j                  d|j                  z         |j                  d        |r|s|s|j                  d       |j                  d       |j                  d|j                  z         |j                  d       |j                  d       |j                  d       |j                  d       |j                  d       |j                  d       |j                  d       |j                  d       |j                  d       |r8|j                  r,|j                  d|j                  d|j                  d       |j                  d       |j                  d       |j                  d       |j                  d       y )N__richcmp__tp_richcomparer   z9static PyObject *%s(PyObject *o1, PyObject *o2, int op) {zswitch (op) {rZ  Fr  zcase Py_%s: {__eq____ne__Tzreturn %s(o1, o2);r   zcase Py_NE: {zPyObject *ret;zret = %s(o1, o2);z.if (likely(ret && ret != Py_NotImplemented)) {z3int b = __Pyx_PyObject_IsTrue(ret); Py_DECREF(ret);z!if (unlikely(b < 0)) return NULL;zret = (b) ? Py_False : Py_True;zPy_INCREF(ret);zreturn ret;z
default: {r  z->tp_richcompare)) return z->tp_richcompare(o1, o2, op);z'return __Pyx_NewRef(Py_NotImplemented);)r  r  r   r  rQ   r   r9   r   rg  r   r   r  r  upperr  )rM   r   r!  richcmp_cfuncclass_scopesclsextern_parenteq_entryhas_ne
cmp_methodclass_scoperQ   cmp_types                r#   r  z$ModuleNode.generate_richcmp_function+  s   ]+--.>?

2

NQ^^_

?#ocii&:&:h&F		*))''11C ocii&:&:h&F $$399''83#&#4#4C%:K:K:U:UM#;; 	J+ #//
;$
 !'',224HJJ12X%  x' JJ+e.>.>>?JJsO'	* F=JJ'JJ'( JJ*X-@-@@AJJGHJJLMJJ:;JJ89JJ()JJsOJJ}%JJsO

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

<=

3

3

3r%   c                    dfd	 dd      } d      } d      }|j                  d       |j                  dj                  d	      z         ||j                  d
|j                  z         n|sHj                  j                  r2|j
                  j                  t        j                  dd             d}n;|r|dk(  r2|j
                  j                  t        j                  dd             d}nd}|j                  d
|z         |Q|j                  d       |j                  d       |j                  d|j                  z         |j                  d       |j                  d       |j                  d       y )Nc                     |j                   }|j                  j                  |       }|/|j                  r||S |j                   | |j                        S |S r   )r  r   r  is_externalrg  )ntpextern_returnrlookup_here_or_baser   s       r#   rC  zBModuleNode.generate_getattro_function.<locals>.lookup_here_or_basex  s^    z&&$$Q'Ay>>m&?((<<+.q",,??Hr%   r  rZ  )rA  r  r  r   z/static PyObject *%s(PyObject *o, PyObject *n) {tp_getattrozPyObject *v = %s(o, n);PyObject_GenericGetAttrNoDictzObjectHandling.c#__Pyx_PyObject_GenericGetAttrNoDictPyObject_GenericGetAttr__Pyx_PyObject_GenericGetAttrz9if (!v && PyErr_ExceptionMatches(PyExc_AttributeError)) {zPyErr_Clear();zv = %s(o, n);r   z	return v;NN)	r   r  r  r  r  r   r  r   r  )rM   r   r!  has_instance_dictgetattr_entrygetattribute_entrygeneric_getattr_cfuncrC  s    `     @r#   r  z%ModuleNode.generate_getattro_functionq  s   
	 0
(S+M:01CD

2

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

	

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

2

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

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

	

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

	

	r%   c                 t   |j                  d      }|j                  d       |j                  d|j                  d      z         |j                  d       |j                  d       |j                  d       |j                  d|j                  z         |j                  d	       |j                  d
       y )Nr  r   z<static PyObject *%s(PyObject *o, PyObject *i, PyObject *c) {tp_descr_getzPyObject *r = 0;zif (!i) i = Py_None;zif (!c) c = Py_None;zr = %s(o, i, c);r  r   )r  r   r  r  )rM   r   r!  user_get_entrys       r#   r  z&ModuleNode.generate_descr_get_function  s    
 **95

2

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

	 

"	$

"	$ 	

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

	

	r%   c                    |j                   j                  }|j                  d      }|j                  d      }|j                  d       |j                  d|j	                  d      z         |j                  d       |r|j                  d|j
                  z         n7| j                  |d dd|       |j                  d	       |j                  d
       |j                  d       |j                  d       |r|j                  d|j
                  z         n7| j                  |d dd|       |j                  d       |j                  d
       |j                  d       |j                  d       y )Nr  r  r   r  tp_descr_setr  r  r  6PyErr_SetString(PyExc_NotImplementedError, "__set__");r   r   r  r  z9PyErr_SetString(PyExc_NotImplementedError, "__delete__");r   )rM   r   r!  rg  user_set_entryuser_del_entrys         r#   r  z&ModuleNode.generate_descr_set_function  se    %%//	**95**<8

2

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

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

	

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

	

	r%   c                     |j                   D ]X  }|j                  }|j                  dg      r| j                  ||       |j                  ddg      sG| j	                  ||       Z y )Nr  r  __del__)property_entriesr   r  generate_property_get_functiongenerate_property_set_function)rM   cclass_scoper!  rQ   property_scopes        r#   r  z&ModuleNode.generate_property_accessors  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 )Nr  r   9static PyObject *%s(PyObject *o, CYTHON_UNUSED void *x) {return %s(o);r   )
r   parent_scoper   r   prop_get_prefixri   getter_cnamer  r   r  )rM   property_entryr!  r^  	get_entrys        r#   r[  z)ModuleNode.generate_property_get_function%  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 )Nr  rY  r   z@static int %s(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {r  zreturn %s(o, v);rU  r   r   r  ra  z6PyErr_SetString(PyExc_NotImplementedError, "__del__");)
r   rb  r   r   prop_set_prefixri   setter_cnamer  r   r  )rM   re  r!  r^  r#  r$  s         r#   r\  z)ModuleNode.generate_property_set_function4  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                    |j                   }|j                  }t        j                  D ]  }|j	                  ||        |j                  d       |j                  dk(  rd}nd}|j                  ||j                  z         |j                  d       |j                  d| j                  d|j                  d       |j                  r|j                  }nd	|j                  z  }|j                  d
|z         |j                  d       t        j                  D ]  }	|	j                  ||        |j                  d       y )Nr   r~   zDL_EXPORT(PyTypeObject) %s = {zstatic PyTypeObject %s = {zPyVarObject_HEAD_INIT(0, 0)r  r   z", /*tp_name*/r,  zsizeof(%s), /*tp_basicsize*/z0, /*tp_itemsize*/r  )rJ   r   r   substructuresgenerate_substructurer   r   r   rI   
class_namer  r  
slot_tablegenerate)
rM   modnamerQ   r!  rJ   r   suiter!  	objstructr(  s
             r#   r  z&ModuleNode.generate_typeobj_definition[  s   zz

,, 	5E''t4	5

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

6D.../

)	+

%%u'7'79	: ,,I#d&:&::I

*Y6	8

 	"(( 	'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bindingr   zstatic PyMethodDef %s[] = {rR  )wrapper_code_writerz{0, 0, 0, 0}r  )
is_c_class_scopepyfunc_entriesr0   r   insertion_pointmethod_table_cnamefused_cfunctionis_overridableput_pymethoddefgetvalue)rM   r1   r!  rt  ru  rQ   s         r#   r  z ModuleNode.generate_method_tabley  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|z         | j                  ||       |j	                  d|z         |j	                  d|z         |j	                  d       |j	                  d|z         |j	                  d	|z         |j	                  d       y )
Nr  __dict__getterr   r`  zif (unlikely(!p->%s)){zp->%s = PyDict_New();r   zPy_XINCREF(p->%s);zreturn p->%s;)r  is_variabler  r   r   r  )rM   r   r!  	dict_attr	func_name	dict_names         r#   r  z(ModuleNode.generate_dict_getter_function  s    %%j1		 5 5))*:;	OO	

2

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

+i78

*Y67

3

')34

?Y./

3r%   c                    |j                   r|j                  d       |j                  d|j                  z         |j                   D ]  }|j                  }|r-|j                  r|j                         }|j                         }nd}|j                  d|j                  d|j                  xs dd|j                  xs dd|d	        |j                  d	       |j                  d
       y y )Nr   z"static struct PyGetSetDef %s[] = {r  z
{(char *)"", r0  z
, (char *)z, 0},z{0, 0, 0, 0, 0}r  )
rZ  r   getset_table_cnamerW   
is_unicodeas_utf8_stringas_c_string_literalri   rd  ri  )rM   r1   r!  rQ   rW   doc_codes         r#   r  z ModuleNode.generate_getset_table  s    JJrNJJ4&&'( -- #ii~~!002"668H"H



**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   )ra   rb   rc   
is_cglobalr  rJ   r6  r  rh   s       r#   r`   z5ModuleNode.create_import_star_conversion_utility_code  sY     "#++"3"3"56 	@KD%EJJzz--JJ::3?	@r%   c           
      d
   |j                  t        j                  dd             |j                          |j	                          |j                  dt
        j                  z         |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 ]O  \  }}|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$                  rJ|j                  d|j                  j'                  d      d|j)                  |j*                        d       |j                  d       |j-                  |j.                  |j                  d       |j                  |j.                  dt1        j2                  |j                  t4        d      d       n|j                  j7                  |      rB|j                  |j                  j9                  d|j.                  |j*                  |             nL|j                  d|d |j                  d!       |j                  |j)                  |j*                               |j                  d       R |j                  d"       |j                  d#t
        j:                  z         |j                  d       |j                  d$       |j=                  |j>                        r6|jA                  |j>                         |jC                  | jD                         ||_        |j                  d%       |j                  d&       |j                  d       |j                  d'       |j                  t        jF                  d(d)      d          |jI                          y )*NCStringEqualsr  z;static int %s(PyObject *o, PyObject* py_name, char *name) {z,static const char* internal_type_names[] = {r  r  r  z-const char** type_name = internal_type_names;zwhile (*type_name) {z$if (__Pyx_StrEq(name, *type_name)) {zBPyErr_Format(PyExc_TypeError, "Cannot overwrite C type %s", name);r   r   ztype_name++;zif (0);r   r   d   z#ifdef _MSC_VERz)if (0);  /* Workaround for MSVC C1061. */r   z#else if (__Pyx_StrEq(name, "%s")) {zif (!(r  r  r   zPy_INCREF(o);Fr2  r  z<PyErr_Format(PyExc_TypeError, "Cannot convert Python object z to z");r  z3if (PyObject_SetAttr(%s, py_name, o) < 0) goto bad;r   r   r   r   
ImportStarr   )%r  r   r  r   enter_cfunc_scoper   import_star_setra   rb   rc   re   new_error_labelr  r  rJ   is_constr6  r  r  type_test_code
error_gotorZ   
put_decrefr   r   r  r
   r  from_py_call_coder  
label_usederror_label	put_labelput_add_tracebackrI   r   exit_cfunc_scope)rM   r1   r!  ri   rQ   old_error_label
msvc_counts          r#   r  zModuleNode.generate_import_star  s   [44_oVW

 

PSYSiSiij

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

35	 6 	

8

H6K^K^^_

3

;??4++,NN4++,""4#8#89*

6

< 

3

2

;--l<LMaPQr%   c                    | j                  | j                  | j                  |      }|j                  | j                         |j	                  d       |j	                  t        j                  dd      d          d|j                  z  }d| j                  d|      z  }|j	                  d       |j	                  d	|z         |j	                  |       |j	                  d
       |j	                  d	|z         |j	                  |       |j	                  d       |j	                  d       |j	                  dt        j                  z         |j	                  d       t        j                  dd      d   }|j                  |       |j	                  d       |j	                  d| j                  t        j                  |      dt        j                  d       |j	                  d       |j	                  d       |j	                  d       |j                         }|j                  j                   d   }	|j                  j                   d   }
|	s|
r/|j                  j#                  t        j$                  dd             |j'                          |j	                  d       |j	                  dt        j(                  z         |j	                  dt        j(                  dt        j                  d       |j	                  d|j                  z         |j	                  d       |j	                  d       |j	                  d       |j	                  dt        j(                  d t        j(                  d!       |j	                  d       |	s|
r |j+                          |j-                          t        j                  d"d      d   }|j	                  |j/                                |j1                  |       |j#                  t        j2                  d#d             |j5                  | j                  d$       |j	                  d%       |j	                  d&       |j	                  d       |j	                  t        j6                  d'|j9                  t        j6                  | j                               |j	                  t        j:                  d(|j9                  t        j:                  | j                               |j	                  t        j<                  d)|j9                  t        j<                  | j                               d*D ]F  }|j	                  d+|z         |j5                  | j                  d,|z         |j	                  d       H |j	                  d-       |j                   d.   r|j5                  | j                  d/       |j	                  d0       |j	                  d1       |j	                  d2       |j	                  d       |j	                  d3       | j?                  ||       |j	                  d4       |j5                  | j                  d5       |j	                  d6       |j5                  | j                  d7       |j	                  d       |j	                  dt        j@                  | jB                  jE                  d8d9      d:       |j5                  | j                  d;|j(                  d<|jG                  tI        d=            d<|jG                  tI        d>            d       |j	                  d       | jK                  ||       tL        jN                  r-|j	                  d?       |j5                  | j                  d@       |j	                  dA       |j5                  | j                  dB       |j	                  dC        |dD      5 }| jQ                  ||       d d d         |dE      5 }| jS                  ||       d d d         |dF      5 }| jU                  ||       d d d         |dG      5 }| jW                  ||       d d d         |dH      5 }|D ]  }| jY                  |||        	 d d d         |dI      5 }|D ]  }| j[                  |||        	 d d d         |dJ      5 }|D ]&  }| j]                  |       | j_                  |||       ( 	 d d d        |j	                  dK       |ja                  d        |j	                  dL       |j5                  | j                  dM       |j	                  d       |	s|
rD|jc                  || j                  |jd                  jf                   N       dO|jd                  _4        | jj                  jm                  |       |	s|
r9dP|jd                  _4        |jo                  dQ|jd                  jf                   N       |j	                          |j	                  dR       | jq                  ||       |j	                          tL        jr                  r\|j                  j#                  t        j$                  dSd             |j	                  dT|ju                  | j                        z         |jw                  |jx                         |j{                  |j|                         |jd                  j                         D ]  \  }}|j                  ||        |j	                  d|j(                  z         |j	                  d|j                  z         |j                  dU|j                  z         |j                  j#                  t        j                         |j	                  d       |j                  |j(                  t        dPdOV       |j	                  dW       |j	                  dX|j                  z         |j	                  d       |j{                  |jx                         |j                          |j	                  d       |j	                  dY|j(                  z         |j	                  d       |j	                  dZ|j(                  z         |j	                  d
       |j	                  d[       |j	                  d       |j	                  d       |j                  |jd                         |j                          y # 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   xY w# 1 sw Y   axY w)\Nr   PyModInitFuncTyper   r   z!__Pyx_PyMODINIT_FUNC init%s(void)z__Pyx_PyMODINIT_FUNC %s(void)r   r   z%s CYTHON_SMALL_CODE; /*proto*/r   "#if CYTHON_PEP489_MULTI_PHASE_INITr  zreturn PyModuleDef_Init(&%s);r   ModuleCreationPEP489r   zstatic CYTHON_SMALL_CODE int z(PyObject *r   r   profile	linetraceProfilez	Profile.cr  r&  z == z) return 0;zrPyErr_SetString(PyExc_RuntimeError, "Module '%s' has already been imported. Re-initialisation is not supported.");r   z#elif PY_MAJOR_VERSION >= 3z) return __Pyx_NewRef(r4  ImportRefnannyAPICheckBinaryVersionz__Pyx_check_binary_version()z'#ifdef __Pxy_PyFrame_Initialize_Offsetsz#__Pxy_PyFrame_Initialize_Offsets();z = PyTuple_New(0); z% = PyBytes_FromStringAndSize("", 0); z' = PyUnicode_FromStringAndSize("", 0); )
CyFunctionFusedFunction	Coroutine	GeneratorAsyncGenStopAsyncIterationz#ifdef __Pyx_%s_USEDz__pyx_%s_init()z)/*--- Library function declarations ---*/
np_pythranz_import_array()z'/*--- Threads initialization code ---*/zx#if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADSzPyEval_InitThreads();z /*--- Module creation code ---*/z4/*--- Initialize various global constants etc. ---*/z__Pyx_InitGlobals()zp#if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT)z*__Pyx_init_sys_getdefaultencoding_params()r   r   r1  zPyObject_SetAttr(r0  __name____main__z/*--- Builtin init code ---*/z__Pyx_InitCachedBuiltins()z/*--- Constants init code ---*/z__Pyx_InitCachedConstants()z*/*--- Global type/function init code ---*/zGlobal init codezVariable export codezFunction export codezType init codezType import codezVariable import codezFunction import codez/*--- Execution code ---*/zB#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED)z__Pyx_patch_abc())nogilTFPy_Nonez/*--- Wrapped vars code ---*/RegisterModuleCleanupzif (__Pyx_RegisterCleanup()) %szinit %sr  z} else if (!PyErr_Occurred()) {z.PyErr_SetString(PyExc_ImportError, "init %s");zreturn (%s != NULL) ? 0 : -1;z
return %s;zreturn;)Kmod_init_subfunctionrZ   r   r  r   r   r   rK   r   r   pymoduledef_cnamer   pymodule_exec_func_cnamepymodinit_module_argrx  r   r0   r  r  put_declare_refcount_contextr  put_trace_declarationsput_trace_frame_initrstripput_setup_refcount_contextloadput_error_if_negr  error_goto_if_nullr  r  generate_module_creation_coder  rI   r   intern_identifierr   generate_module_import_setupr   cache_builtinsgenerate_global_init_codegenerate_c_variable_export_codegenerate_c_function_export_codegenerate_type_init_code$generate_type_import_code_for_module*generate_c_variable_import_code_for_moduler^  *generate_c_function_import_code_for_moduler  put_trace_call	funcstate	gil_owned	can_tracer6   generate_execution_codeput_trace_returngenerate_wrapped_entries_codegenerate_cleanup_coder  put_gotoreturn_labelr  r  all_managed_tempsput_xdecrefr  r  r   r   traceback_utility_coder  r
   put_finish_refcount_contextput_temp_declarationsr  )rM   r   r1   r!  subfunctionheader2header3mod_create_functempdecl_coder  r  refnanny_import_codeext_type
inner_codery   r   rJ   s                    r#   r  z$ModuleNode.generate_module_init_func	  s
   //$**dKtzz*

2

;--.ACVWXYZ[5G1D4L4LXWZ4[[

-.

4w>?

7

7

4w>?

7 	

78

3

2V5M5MMN

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

2

$$V%D%DcJ'') 	* 	

8

8 	

3,,.""--i8$$//<	i--k.E.EiQ\.]^))+

78 	

;!4!445

''
 	 	

 g??# 	$ 	

< 

3

01


 	 	

8i002%%'*99:MObcdef

'..01''0[--.BDWXYdhh(FG

<=

89

8

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

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

  $"9"9&:N:NPTPXPX"Y[ 	\ t 	!HJJ-89!!$((,=,HIJJx 	!
 	

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

<=

 V 	W

*+

8

56**35

IJdhh(=>

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

8

F$9$94;P;P;X;XY\^b;cdedhh""=#<=""=#<=)? 	@ 	

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

45dhh(EF

?@+, 	<
**3
;	< /0 	BJ00jA	B /0 	BJ00jA	B )* 	: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d

WXdhh(;<

8iT^^=U=U9UV'+DNN$		))$/i',DNN$!!)t~~7O7O3O!P



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

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

;!1!112

;!6!667y3+=+==>))%*F*FG 	

3c..eaef

45

CcFXFXXY

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

78

2S5E5EEF

01

<#"2"223

7

9

8

3++DNN;k	< 	<	B 	B	B 	B	: 	:	S 	S	Y 	Y	Y 	YsT   8tt'>t4!uu0u,u(t$'t14t>uuu%(u2c                     j                         j                  d       j                         j                  d        G fddt              }|S )a  
        Return a context manager that allows deviating the module init code generation
        into a separate function and instead inserts a call to it.

        Can be reused sequentially to create multiple functions.
        The functions get inserted at the point where the context manager was created.
        The call gets inserted where the context manager is used (on entry).
        r   c                   0    e 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:  r  splitr   match
cfunc_namedescriptionr  	call_code)rM   	code_typer   s      r#   __init__zDModuleNode.mod_init_subfunction.<locals>.ModInitSubfunction.__init__	  sT    !2!8!8!:;xx66"4u"<#, %)"!%r%   c                    j                         | _        }|j                         j                  d| j                  z         |j                  d| j                  z         |j                          |j                         | _        |j                  | j                         |j                  d| j                  z         |S )Nz0static CYTHON_SMALL_CODE int %s(void); /*proto*/zstatic int %s(void) {z/*--- %s ---*/)	rx  r  r  r   r  r  r  r  r  )rM   r!  function_code	orig_code
prototypesr   s     r#   	__enter__zEModuleNode.mod_init_subfunction.<locals>.ModInitSubfunction.__enter__	  s    !*!:!:!<$&&u-  !SVZVeVe!ef

2T__DE113%)%9%9%;"//@

+d.>.>>?r%   c                    }|j                          |j                  d       | j                  j                  |j                         d | _        |j                  |j                        }|rp|j                  |j                         |j                  j                         D ]  \  }}|j                  ||        |j                          |j                  d       |j                  d       |j                          |j                  d       |rJ| j                  j                  | j                  j                  d| j                  z               d | _        y | j                  j                  d| j                  z         d | _        y )Nr   r   r   r   z%s()z(void)%s();)r  r   r  r  r  r  r  r  r  r  r  r  error_goto_if_negr  )rM   r=  r!  needs_error_handlingr   rJ   r  rZ   s         r#   __exit__zDModuleNode.mod_init_subfunction.<locals>.ModInitSubfunction.__exit__
  s5   $002

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

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

2'NN((88$//9QSVWY "& NN(()HI!%r%   N)r  
__module____qualname__r  r  r  )r  r  rZ   r  r   s   r#   ModInitSubfunctionr  	  s    &&r%   r  )rx  r   object)rM   rZ   r   r  r  r  r  s    ``` @@r#   r  zModuleNode.mod_init_subfunction	  sW     ..0
!113B.	& .	& .	&` "!r%   c                    |j                   d   }|dk(  r| j                  d   j                  }|r|j                  d       |j                  d|j                  d|j
                  j                  t        t        |                  j                  d|j                  | j                        d       |j                  d	       |j                  r	|j                  d       |j                  j                  t        d
      }|j                  |d|j
                  j                  t        t        t        j                   j#                  |                        j                  d|j%                  || j                               |j'                  |       |j                  d|j                  d|d|j                  | j                        d       |j)                  |t               |j                  j+                  |       |j                  d	       n|j                  r|j                  d       |j
                  j-                  t/        j0                  dd             |j                  |j3                  d|j
                  j                  t        | j4                              j                  z  | j                               |j                  d	       | j4                  }|j7                  d      r|d t9        d        }|j                  d       |j                  d       |j                  d|j%                  d| j                        z         |j                  d|z         |j                  |j3                  d|d|j                  d| j                               |j                  d	       |j                  d	       |j                  d       y )Nset_initial_path
SOURCEFILEr   z&if (!CYTHON_PEP489_MULTI_PHASE_INIT) {if (PyObject_SetAttrString(z, "__file__", ) < 0) r   r   Tz = Py_BuildValue("[O]", ); z, "__path__", SetPackagePathFromImportLibr   z%__Pyx_SetPackagePathFromImportLib(%s)z	.__init__r  r  z0PyObject *modules = PyImport_GetModuleDict(); %sr  z+if (!PyDict_GetItemString(modules, "%s")) {zPyDict_SetItemString(modules, "r  r   r   )r0   rZ   filenamer   r  r   get_py_string_constr   r   r   r  
is_packager  allocate_tempr
   r   r   r9  r  
put_gotrefr  release_tempr  r   r  r  rI   endswithr<  )rM   r1   r!  module_pathtempfq_module_names         r#   r  z'ModuleNode.generate_module_import_setup 
  s   nn%78,&((1+..KJJ?@JJ    44!/+">?AAFG)	+ ,
 JJsO~~

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

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

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

3^^ JJ?@--k.>.>-/?/A BJJt--7$$88%d&;&;<>>CeE 	 
 JJsO .."";/+,>c+.>->?N

./

3

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

@>QR

4))C,,+./3xx9 	:

3

3

8r%   c                    t         j                  sy |j                  dt        j                  z         |j                  |       t         j                  dk\  r|j                  d       t        |j                        }|j                          |D ]_  }|j                  dk7  s|j                  j                  s*|j                  s7|j                  |j                  |j                  dd       a |j                  d       t         j                  d	k\  r_|j                  d
       t        |j                   t#        j$                  d            D ]!  }|j                  |j&                  |dd       # t         j(                  rO|j                  d       |j*                  D ]/  }|j                  |j                  t,        j.                  dd       1 |j                  d       |j1                  t        j2                  t,        j.                  dd       |j4                  D ]  }|j                  }|j6                  s|j8                  r(|j:                  j<                  j?                  dd      sO|j:                  }|jA                  t        jB                        }|jA                  t        jD                        }	|j                  d|	z         |j                  d|d|	d       |j                  d       |j                  d        t         jF                  '|j1                  t        jH                  t.        dd       |jJ                  t        jL                  t        jN                  fD ]  }
|j1                  |
t.        dd        y )Nz.static void %s(CYTHON_UNUSED PyObject *self) {r   z/*--- Global cleanup code ---*/rZ  TF)r  r3  z__Pyx_CleanupGlobals();   z$/*--- Type import cleanup code ---*/r   r  z /*--- Builtin cleanup code ---*/z/*--- Intern cleanup code ---*/r  r   zwhile (%s > 0) {zPyObject* o = (PyObject*)r  r  r  r   r  )(r   r  r   r   cleanup_cnamer  rS  r   reverser   rJ   r6  r  r  r   ra   types_importedr  r  r   r  cached_builtinsr   r
   r  r  rH   r>  rg  r   r0   ri  r  r  r  r  r  r  r  r  )rM   r1   r!  rev_entriesrQ   r  cclass_typer   r  r  r   s              r#   r  z'ModuleNode.generate_module_cleanup_func\
  s   ,,

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

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

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

->?

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

78

3	 4 )!!&"8"8.(-4 " I++V-H-H&J_J_` 	`E!!%uZ^!_	`r%   c                 d   t         j                  | j                  j                  dd      }t        j
                  dk(  rd}nt        j
                  }t        j                  dd      }|j                  j                  |j                  |j                  |t        j
                  |             y )Nr   r   mainwmainMainFunctionzEmbed.c)rK   r  r   wmain_method)r   r  rI   r   r   r  r   r  r   r  
specializerK   )rM   r1   r!  r  r  r   s         r#   r  zModuleNode.generate_main_method
  s    #)#8#8$:O:O:W:WX[]a:bc==F"EMME!--niH))""OO-#MM"	 # $	%r%   c                 $    |d|j                   S )Nr  )rK   )rM   prefixr1   s      r#   r   zModuleNode.mod_init_func_cname
  s     #//22r%   c                     |j                   rd|j                  |j                         z  }nd}t        j                  rdt        j
                  z  }nd}|j                  d       |j                  d       |j                  d       | j                  t        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       |j                  dt        j                  z         |j                  d       |j                  d|j                  z         |j                  d|z         |j                  d       |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       |j                  d|z         |j                  d       |j                  d       y )N%sr  z(freefunc)%sNULLr   r  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},z	{0, NULL}r  r   z static struct PyModuleDef %s = {z  PyModuleDef_HEAD_INIT,z  "%s",z  %s, /* m_doc */z  0, /* m_size */r   z  -1, /* m_size */z  %s /* m_methods */,z  %s, /* m_slots */z  NULL, /* m_reload */z  NULL, /* m_traverse */z  NULL, /* m_clear */z  %s /* m_free */)rW   get_string_constr   r  r   r  r   r   r  pymodule_create_func_cnamepymoduledef_slots_cnamer  rK   ry  )rM   r1   r!  rW   cleanup_funcexec_func_cnames         r#   r  z&ModuleNode.generate_pymoduledef_struct
  sT   77..sww77CC(()F,@,@@L!L

2

./

782263R3RTWX

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

?/QR

58V8VVW

063T3TTU

.@A

;

4

8

2

58P8PPQ

-.

9s./

&,-

78

&'

7

'(

8

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

78

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

7

+,

8

-.

*+

&56

4

8r%   c                    |j                   rd|j                  |j                         z  }nd}|j                  d       |j                  |j                  dt        j
                  d       |j                  |j                  t        d       |j                  d       |j                  d	       |j                  |j                  d
|j                  d|j                  d|d|j                  d
       |j                  d       |j                  |j                  dt        j                  d       |j                  d       |j                  |j                  |j                  | j                               |j                  d       |j                  |j                  d|j                  d|j                  |j                  | j                               |j                  |j                  t        d       |j                  t        j                  d|j                  t        j                  | j                               |j                  t        j                  t        d       |j                  t        j                  d|j                  t        j                  | j                               |j                  t        j                  t        d       |j                  d|j                  dt        j                  d|j!                  | j                               t"        j$                  |j                  t        j&                  dt"        j$                  d|j                  t        j&                  | j                               |j                  t        j&                  t        d       y y )Nr  r  r  r  r   Fr2  r   r   z = Py_InitModule4("r  r0  z%, 0, PYTHON_API_VERSION); Py_XINCREF(r4  z = PyModule_Create(&r   z = PyModule_GetDict(r   z2 = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); z2 = PyImport_AddModule((char *) "cython_runtime"); r  z, "__builtins__", r  z = PyImport_AddModule("z"); )rW   r  r   r  r   r  
put_increfr
   rK   ry  r  r  rZ   r  r  r  r  r   r  r  )rM   r1   r!  rW   s       r#   r  z(ModuleNode.generate_module_creation_code
  s    77..sww77CC

78

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

7

-.

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

7

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

8

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

8

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

%%''(=(=txxHJ	K 	--~UK

++''(C(CTXXNP	Q 	33^5Q

  %%)+	,
 )JJ**&&++F,B,BDHHMOP
 OOF22N%OP *r%   c                     |j                   D ];  }|j                  dk7  s|j                  s |j                  j	                  ||       = y NrZ  )r   r   r  rJ   global_init_code)rM   r1   r!  rQ   s       r#   r  z$ModuleNode.generate_global_init_code  s@     __ 	=E8+::JJ//t<	=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 = r/  r4  wrappedr  r   z", wrapped) < 0) r   r   )ra   rb   rc   rd   re   r   rJ   r  r   rZ   r   to_py_functionr   r  r  r  )rM   r1   r!  ri   rQ   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                    g }|j                   D ]L  }|j                  s-|j                  s!t        j                  s,|j
                  dk(  r<|j                  |       N |r|j                  t        j                  dd             |D ]w  }|j                  j                         }|j                  |j                        }|j                  d|d|j                  d|d|j!                  | j"                               y y y )NrZ  VoidPtrExportr   zif (__Pyx_ExportVoidPtr(z, (void *)&r   ") < 0) )r   r   rx   r   cimport_from_pyxr   r9   r  r   r  rJ   r   r  ri   r   r   r  rZ   )rM   r1   r!  rb   rQ   	signatureri   s          r#   r  z*ModuleNode.generate_c_variable_export_code:  s    __ 	&E		++009I9IX9Uu%		&
   !8!8JZ![\  0!JJ==?	--ejj9

%++yOODHH-/ 00 r%   c                    g }|j                   D ]L  }|j                  s-|j                  s!t        j                  s,|j
                  dk(  r<|j                  |       N |r|j                  t        j                  dd             |D ]f  }|j                  j                         }|j                  d|j                  d|j                  d|d|j                  | j                                h y y )NrZ  FunctionExportr   zif (__Pyx_ExportFunction("z", (void (*)(void))r   r.  )rw   r   rx   r   r/  r   r9   r  r   r  rJ   r   r   ri   r   r  rZ   )rM   r1   r!  rb   rQ   r0  s         r#   r  z*ModuleNode.generate_c_function_export_codeK  s    && 	&E		++009I9IX9Uu%		&
   ''(8:JKM ! 0!JJ779	

JJKKOODHH-	/ 00 r%   c           	          t        |      5 }|j                  D ]8  }|j                  s| j                  ||j                  |j
                  ||       : 	 d d d        y # 1 sw Y   y xY wr   )r   rH   rx   generate_type_import_coderJ   rZ   )rM   ry   r1   r!  r   rQ   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)rw   rJ   is_fused"get_all_specialized_function_types)rM   pxd_envrQ   s      r#   r^  z!ModuleNode.specialize_fused_typesi  s=     **1- 	@Ezz""

==?	@r%   c                 \   g }|j                   D ]   }|j                  s|j                  |       " |rx|j                  t	        j
                  dd             |j                  j                  t        d      }|j                  |d|j                  d|d|j                  | j                               |j                  |       |D ]  }||u r|j                  }n*|j                  t         j"                  |j$                        }|j&                  j)                         }|j                  dt         j*                  d	|d
|j$                  d|d
|d|j                  | j                                |j-                  |t               |j                  j/                  |       y y )Nr   r   T
manage_ref = PyImport_ImportModule("	"); if (!) r   r/  r   r   r.  )r   rx   r9   r  r   r  r  r  r
   r   r   r  rZ   r  r   r   r   r  ri   rJ   r   r   r  r  )	rM   ry   r1   r!  rb   rQ   r
  r   r0  s	            r#   r  z5ModuleNode.generate_c_variable_import_code_for_moduleu  sX   '' 	&E##u%	&   ''9IJL>>//4/PDJJ))OODHH-	/0 OOD!  
4&=!KKE"MM&*>*>

KE!JJ==?	

((ejj%134
4 !!$7NN''-/ r%   c                    g }|j                   D ]-  }|j                  s|j                  s|j                  |       / |rE|j	                  t        j                  dd             |j                  j                  t        d      }|j                  |d|j                  d|d|j                  | j                               |j                  |       |D ]x  }|j                  dt        j                   d	|d
|j"                  d|j$                  d
|j&                  j)                         d|j                  | j                               z |j+                  |t               |j                  j-                  |       y y )Nr   r   Tr:  r<  r=  r>  r   r/  r   r   r.  )rw   rx   r  r9   r  r   r  r  r  r
   r   r   r  rZ   r  r   r   ri   r   rJ   r   r  r  )rM   ry   r1   r!  rb   rQ   r
  s          r#   r  z5ModuleNode.generate_c_function_import_code_for_module  s7   )) 	&E##

u%	&   ''(8:JKM>>//4/PDJJ))OODHH-	/0 OOD!  4

((



3351344 !!$7NN''-+ r%   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r'  )r   rH   r   utility_code_definitionr4  rJ   rZ   generate_base_type_import_code!generate_exttype_vtable_init_code
early_initgenerate_type_ready_code)rM   r1   r!  r   rQ   s        r#   r  z"ModuleNode.generate_type_init_code  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                  }|rT|j                  |j                  k7  r:|j                  s-|j
                  s | j                  ||| j                  ||       y y y y y r   )rJ   rg  rK   r   r  rA  r4  rZ   )rM   r1   rQ   r!  r   rg  s         r#   rB  z)ModuleNode.generate_base_type_import_code  sd    JJ((	)//33E3EE))%2O2O**3	488TK[\ 3P) FIr%   c                 6   ||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                  d|j                  |j                  |             |j                   j                  |       y )Nr   r   )	error_pos	GetVTablez = (struct z*)__Pyx_GetVtable(z->tp_dict); )r  ri   r   ctypedef_builtins_mapr   r  r   r  r   rd  r   r|  r   r  rh  )rM   r1   rJ   rZ   r!  r   s         r#   r4  z$ModuleNode.generate_type_import_code  s     3%%%99D666--''6FGI&&tT3Cs&S--''5EFHJJ""%%""''(:(:C@	B C
 	t$r%   c           
         |j                   r|j                  }nd|j                  z  }|}|j                  }d x}	}
|dvrd|z  }n|j                  t        j
                  v r?t        j
                  |j                     }|j                  |j                  d|d       y d}|j                  t        j                  v r t        j                  |j                     \  }	}
|t        j                  v rt        j                  |   }|s|J |j                  |      }|j                  ||      }|j                  |j                  dt        j                  d|d	|d
       |	r||
rz|j                  d       |j                  d|	z         |j                  d|
z         |j                  d       |j                  d|j                  z         |j                  d       n|j                  d|j                  z         ||k7  r|	s|j                  d       |j                  d       |j                  d|dt        j                  d|d       |j                  d       |j                  d|dt        j                  d|d       |j                  d       n)|j                  d|dt        j                  d|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|j                  d|       y )Nr,  )__builtin__builtins"%s"r  r   __Pyx_BUILTIN_MODULE_NAMEz = __Pyx_ImportType_r/  r0  rR  r   z#if %sr  r   r   z "%s", z>#if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000zsizeof(z), __PYX_GET_STRUCT_ALIGNMENT_z),)r   warnignorer   zinvalid value for check_size 'z' when compiling r   __Pyx_ImportType_CheckSize_r  r4  z if (!r>  )r  r  rK   ri   r   rJ  r   r   non_portable_builtins_mapbasicsize_builtins_mapr  rd  r   r   r   
check_sizer>  is_subclassedRuntimeErrorr  )rM   rJ   r!  r   r   rH  rr  sizeof_objstructrK   	conditionreplacement	ctypenamery   rU  s                 r#   r   z$ModuleNode.generate_type_import_call  s   ,,I#d&:&::I$&&"&&	K99 ;.KYY$44422499=IJJT%7%7CD5KyyD:::)-)G)G		)R&	;D777#'#>#>y#I ((3J!11+zJ	 	 JJrNJJx)+,JJw,-JJwJJw*+JJx HHY*+y(

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

T%7%7DEr%   c                 D    t         j                  j                  ||       y r   )r   CClassDefNoderE  )rM   rQ   r!  s      r#   rE  z#ModuleNode.generate_type_ready_code   s    44UDAr%   c           
         |j                   }|j                  r!|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| }}|r\|D ]V  }|j                   j                         }|j                  |j                  d|j                  d||j                  d       X y y y c c}w )Nz = &r   r   z = *r  )rJ   r  r   rd  rg  r   r_  r   rw   r  signature_cast_stringr   )rM   rQ   r!  rJ   c_method_entries
meth_entrycasts          r#   rC  z,ModuleNode.generate_exttype_vtable_init_code#  s    zzJJ&&%%'( ~~$..">">

))--4467 $(::#;#; %##  %  %  "2 4J%??@@BDJJ --&,, &11	344    %s   D<)F)TTrI  )cr  r  r  child_attrsr0   rL   r\   rj   ru   rz   rr   r   r   rs   r   r   rq   r  r  ro   rx  r  rp   r  r  r  r  r   r   r   r  r  r   r  r	  r  r  r#  r  r  r
  r  r  r  r  r  r  r  r  r  r
  r  r  r  r  r  r  r  r  r  r  r!  r  r  r  r  r  r  r  r[  r\  r  r  r  r  r`   r  r  r  r  r  r  r   r  r  r  r  r  r  r  r^  r  r  r  rB  r4  r   rE  rC  r  r%   r#   r5   r5   ;   s-    (KJ!'F,$	85DLD5Un!ODb+\Z&$:**X	/I6S.Kwar

2  CD!
N+I
%BgR=>$.
%FR
&`P/,F\M
 0Td$0M^{z ;zBH(,\2&.`DL:x&P8*XA%N<*, 2@B HZ x>"@:xE`N%3-^:Qx= &0"0*g
@.>.:C]%*EFNB4r%   r5   c                   *    e Zd ZdZddZd Zd Zd Zy)r   z
    Helper to generate module import while importing external types.
    This is used to avoid excessive re-imports of external modules when multiple types are looked up.
    Nc                     || _         i | _        |r*|j                         D ]  \  }}|| j                  d|z  <    g | _        y )NrN  )r!  importedrc   temps)rM   r!  r   ri   r   s        r#   r  zModuleImportGenerator.__init__F  sH    	/557 5e/4ftm,5
r%   c           	      H   || j                   v r| j                   |   S | j                  }|j                  j                  t        d      }| j
                  j                  |       |j                  |d|d|d|       |j                  |       || j                   |<   |S )NTr:  z = PyImport_ImportModule(z); if (unlikely(!r  )	rf  r!  r  r  r
   rg  r9   r   r  )rM   module_name_stringr   r!  r
  s        r#   rd  z%ModuleImportGenerator.imported_moduleN  s    .==!344yy~~++Nt+L

$

$dJ8 	9,0()r%   c                     | S r   r  )rM   s    r#   r  zModuleImportGenerator.__enter__[  s    r%   c                     | j                   }| j                  D ]3  }|j                  |t               |j                  j                  |       5 y r   )r!  rg  r  r
   r  r  )rM   excr!  r
  s       r#   r  zModuleImportGenerator.__exit__^  s@    yyJJ 	.D!!$7NN''-	.r%   r   )r  r  r  __doc__r  rd  r  r  r  r%   r#   r   r   A  s    .r%   r   c                 n   | 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       y y y )	NrZ  r   r~   rx  ry  rz  r   z; /*proto*/)r  rA  inline_func_in_pxdr  rx   r   r   r   rJ   r   r   r   rg  rh  r   )
rQ   r1   r!  r  from_cy_utilityr  r{  rJ   r!  rj  s
             r#   r  r  e  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	

 	/ Sb 8Ir%   Refnannyr   zj
#if defined(__GNUC__)
#define __Pyx_PACKED __attribute__((__packed__))
#else
#define __Pyx_PACKED
#endif
r   utility_code_proto_before_types)protoimplproto_blockCapsule)0
__future__r   cythondeclarer  collectionsr   r  r  r   r   r   r   r   r   r   r   r   r   r   r   r   Errorsr   r	   r
   Utilsr   r   r   r   r   r   StringEncodingr   r   r$   r)   r3   Node	BlockNoder5   r   r  r  r  r)  capsule_utility_coder  r%   r#   <module>r     s   
 '  ff6VFPV#0 $   	 	            " & U U * ) #
	9C04U__ C04L`!.F !.HJ )((5HI ( 0 ;=  ({''	2 r%   