
    -PhS                       d dl Z  e j        d{i dededededededed	ed
ededededededede d dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
 d dlmZmZ d dlmZ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d d!d"Zd#d#d$d%d&Zd'd(iZd)Z e g d*          Z!g d+Z" e j        e  e d,                    Z#d-d.ij$        Z% e j        edddd/j$                  Z& G d0 d1          Z'd2 Z(dZ)	 d3 Z*e*Z) G d4 d5          Z+ G d6 d7e+          Z, G d8 d9e,          Z-dd:dgd;d<Z. e.d=d>?          d@             Z/ e.            dAe-fdB            Z0 e.dCdDdEF          dG             Z1 e.dHdIdDdJF          dK             Z2 e.dLdM?          dN             Z3 e.dOd:dPF          dQ             Z4 e.            dR             Z5ddi fdSZ6 G dT dUe-          Z7 G dV dWe,          Z8 G dX dY          Z9 G dZ d[          Z: G d\ d]          Z; e j        eeee^            ej<        d_ej=                  j>        Z? ej<        d`          j>        Z@ ej<        da          jA        ZB ej<        db          jC        ZD G dc dd          ZE G de df          ZF G dg dh          ZGdi ZH G dj dk          ZI G dl dm          ZJ G dn do          ZK G dp dq          ZLe jM        e jN        dreOdse jP        dteOfdu                        ZQ e jR        dv          e jS        dweOdte jP        fdx                        ZT G dy dz          ZUdS )|    NosreoperatortextwrapTemplateNamingOptionsStringEncodingUtilsSourceDescriptorStringIOTree
DebugFlagsdefaultdictclosingpartialwrapsr   )r   r   )r   contextmanager)r      )r   )r	   )r   )r
      )r   )r   )r   strrangeinput)unicode
basestringxrange	raw_inputz&PyLong_Typez&PyFloat_Typez&PyWrapperDescr_Type)py_intpy_longpy_floatwrapper_descriptorPyTypeObjectPyHeapTypeObject)      r   alpha   )ArithmeticErrorAssertionErrorAttributeErrorBaseExceptionBaseExceptionGroupBlockingIOErrorBrokenPipeErrorBufferErrorBytesWarningChildProcessErrorConnectionAbortedErrorConnectionErrorConnectionRefusedErrorConnectionResetErrorDeprecationWarningEOFErrorEllipsisEncodingWarningEnvironmentError	ExceptionExceptionGroupFalseFileExistsErrorFileNotFoundErrorFloatingPointErrorFutureWarningGeneratorExitIOErrorImportErrorImportWarning_IncompleteInputErrorIndentationError
IndexErrorInterruptedErrorIsADirectoryErrorKeyErrorKeyboardInterruptLookupErrorMemoryErrorModuleNotFoundError	NameErrorNoneNotADirectoryErrorNotImplementedNotImplementedErrorOSErrorOverflowErrorPendingDeprecationWarningPermissionErrorProcessLookupErrorPythonFinalizationErrorRecursionErrorReferenceErrorResourceWarningRuntimeErrorRuntimeWarningStopAsyncIterationStopIterationSyntaxErrorSyntaxWarningSystemError
SystemExitTabErrorTimeoutErrorTrue	TypeErrorUnboundLocalErrorUnicodeDecodeErrorUnicodeEncodeErrorUnicodeErrorUnicodeTranslateErrorUnicodeWarningUserWarning
ValueErrorWarningWindowsErrorZeroDivisionError__build_class__	__debug__
__import__absaiterallanextanyasciibinbool
breakpoint	bytearraybytescallablechrclassmethodcompilecomplex	copyrightcreditsdelattrdictdirdivmod	enumerateevalexecexitfilterfloatformat	frozensetgetattrglobalshasattrhashhelphexidr   int
isinstance
issubclassiterlenlicenselistlocalsmapmax
memoryviewminnextobjectoctopenordpowprintpropertyquitr   reprreversedroundsetsetattrslicesortedstaticmethodr   sumsupertupletypevarszip)
rF   rZ   r,   r<   ry   r{   r9   r   rs   _)		__cinit____dealloc____richcmp____next__	__await__	__aiter__	__anext____getbuffer____releasebuffer__inlineCYTHON_INLINE)ustringr   r   c                   B    e Zd ZdZdZdZdZdZddZd	 Z	d
 Z
d Zd ZdS )IncludeCodez]
    An include file and/or verbatim C code to be included in the
    generated sources.
    r   r   r   NTFc                    | j         | _        t          |           xj         dz  c_         i | _        |rU|d         dk    r,|d         dk    r d                    |          | j        d<   d}nd                    |          | j        d<   |r|| j        | j        <   |r| j        | _        d S |r| j        | _        d S | j        | _        d S )	Nr   r   <>z#include {}Fz#include "{}")	counterorderr   piecesr   INITIALlocationLATEEARLY)selfincludeverbatimlateinitials        T/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/Cython/Compiler/Code.py__init__zIncludeCode.__init__  s    \
T

a 	AqzS  WR[C%7%7!.!5!5g!>!>A!0!7!7!@!@A 	/&.DK
# 	' LDMMM 	' IDMMM JDMMM    c                     ||v rH||         }t          | j        |j                  |_        |j                            | j                   dS | ||<   dS )z
        Insert `self` in dict `d` with key `key`. If that key already
        exists, update the attributes of the existing value with `self`.
        N)r   r   r   update)r   dkeyothers       r   dict_updatezIncludeCode.dict_update.  sV    
 !88cFE ??ENL,,,,,AcFFFr   c                     | j         S N)r   r   s    r   sortkeyzIncludeCode.sortkey:  s
    zr   c                 6    | j                             d          S )z
        Return the main piece of C code, corresponding to the include
        file. If there was no include file, return None.
        r   )r   getr   s    r   	mainpiecezIncludeCode.mainpiece=  s    
 {q!!!r   c                 t    t          | j                  D ]"}|                    | j        |                    #d S r   )r   r   putln)r   codeks      r   writezIncludeCode.writeD  s@    $$ 	' 	'AJJt{1~&&&&	' 	'r   )NNTF)__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   r    r   r   r   r      s         & GEDG' ' ' ',
 
 
  " " "' ' ' ' 'r   r   c                      t           j                            t           j                            t           j                            t                                        } t           j                            | d          S )NUtility)r   pathdirnameabspath__file__join)
Cython_dirs    r   get_utility_dirr  J  sI     1J1J!K!KLLJ7<<
I...r   c                     t           j                            t                      |           }t	          t          j        |d                    5 }|                                cddd           S # 1 swxY w Y   dS )zh
    Read all lines of the file at the provided path from a path relative
    to get_utility_dir().
    UTF-8)encodingN)r   r   r   r  r   r   open_source_file	readlines)r   filenamefs      r   read_utilities_from_utility_dirr	  [  s    
 w||O--t44H	'7CCC	D	D {{}}                 s   A11A58A5c                   $    e Zd ZdZd Zd Zd ZdS )AbstractUtilityCodeNc                     d S r   r   )r   outputs     r   put_codezAbstractUtilityCode.put_codel  s    r   c                     d S r   r   r   kwargss     r   get_treezAbstractUtilityCode.get_treeo      tr   c                     d S r   r   r  s     r   get_shared_library_scopez,AbstractUtilityCode.get_shared_library_scoper  r  r   )r   r   r   requiresr  r  r  r   r   r   r  r  h  sF        H        r   r  c                       e Zd ZdZdZi Zedd            Zed             Zed             Z	ei fd            Z
edd            Z ej        d	          j        fd
Zd Zd Zd ZddZdS )UtilityCodeBasea(  
    Support for loading utility code from a file.

    Code sections in the file can be specified as follows:

        ##### MyUtility.proto #####

        [proto declarations]

        ##### MyUtility.init #####

        [code run at module initialization]

        ##### MyUtility #####
        #@requires: MyOtherUtility
        #@substitute: naming

        [definitions]

        ##### MyUtility #####
        #@substitute: tempita

        [requires tempita substitution
         - context can't be specified here though so only
           tempita utility that requires no external context
           will benefit from this tag
         - only necessary when @required from non-tempita code]

    for prototypes and implementation respectively.  For non-python or
    -cython files backslashes should be used instead.  5 to 30 comment
    characters may be used on either side.

    If the @cname decorator is not used and this is a CythonUtilityCode,
    one should pass in the 'name' keyword argument to be used for name
    mangling of such entries.
    FNc                    |d S d                     |          }|rd|v rd|d         v r	 t          |                              t          t                              }n5# t
          t          f$ r!}	t          d| d| d|dd|	           d }	~	ww xY w||k    rt          d	| d| d
|dd          |}d|z  |z   }|dk    r||d<   n|dk    r||d<   n|d         }
||
|<   |rW|d         }
|                                D ]<\  }}|
	                    |t                                                    |           ;d S d S )N

substitutenamingz&Error parsing templated utility code '.z
' at line r   z: zFFound useless 'substitute: naming' declaration without replacements. (:)protor   implr   r   )r   r   r  r   r   rK   rq   r^   items
setdefaultr   r   )clsutilitynamer   linesbegin_linenotagsr   new_codeeall_tagsvaluess               r   _add_utilityzUtilityCodeBase._add_utility  s   ?Fyy 		LD((Xl9K-K-Kk#D>>44T&\\BBj) k k k"iTiiDiiT`iiifgiik k kk 4"|]a||dh||kw||||~ ~ ~D l"T)7??GAJJV^^GAJJqzH!HTN 	@qzH $

 @ @f##D#%%0077????	@ 	@@ @s   4A   B1BBc           	      r   | j                             |          }|r|S t          j                            |          \  }}|dv r6d}t          t          j        d          j        d          }t          j
        }nPd}t          t          j        d          j        d          }t          t          j        d          j        d          }t          j        d	d
|iz            j        }t          j        d          j        }	t          |          }
t          d           }g }t          t                    }d x}x}}d}t          |
          D ]#\  }} ||          }|r|                    d          r}|                     ||||||           |dz   }|d d = |                                 |                    d          } |	|          }|r|                                \  }}nd}||         }||                    d                                       |                    d                     |                    d           |                     | ||                               %|t-          d          |                     ||||||           t/          |          }|| j         |<   |S )N)z.pyxz.pyz.pxdz.pxi#z^\s*#(?!\s*cython\s*:).* /z^\s*//.*|/\*[^*]*\*/z	\s+(\\?)$z\1zd^%(C)s{5,30}\s*(?P<name>(?:\w|\.)+)\s*%(C)s{5,30}|^%(C)s+@(?P<tag>\w+)\s*:\s*(?P<value>(?:\w|[.:])+)Cz?(.+)[.](proto(?:[.]\S+)?|impl|init|cleanup|module_state_decls)$c                      d d i gS r   r   r   r   r   <lambda>z:UtilityCodeBase.load_utilities_from_file.<locals>.<lambda>  s    tR(8 r   r   r&  r   r!  tagvaluezEmpty utility code file)_utility_cacher   r   r   splitextr   r   r   subr   rstripmatchread_utilities_hookr   r   r   groupr.  cleargroupsaddappendrq   r   )r$  r   	utilitiesr   extcommentstrip_commentsr;  match_special
match_type	all_linesr'  r)  r%  r&  r   r(  linenolinemmtypes                        r   load_utilities_from_filez(UtilityCodeBase.load_utilities_from_file  s   &**400	 	!!$''3111G$RZ0K%L%L%PRTUUNZFFG$RZ0G%H%H%LbQQNRZ5595AAF
C'N  " 	 Z bcci
'--	 8 899	3 $$$$%i00 	; 	;LFDd##A ;776?? %$$WdD%tTTT#)A:LaaaJJLLL776??D&Jt,,E &%*\\^^
dd%'oGG(,,QWWW-=-=>>>LL$$$$VVNN4$8$899::::?6777 	$e\4HHHOO	#,4 r   c                    
 d|v r|                     dd          \  }sJ                                }||         \  }}}|rd|v r2d|d         v r(t           t                    st          j        |fi |S |                                
|                                D ]\  }}	||v r
|dk    r=
r 
fdt          |	          D             }	n[ fdt          |	          D             }	n>|dk    r|	ddhz
  }	|	s]n-|	sd	}	n(t          |	          dk    rt          |	          d
         }	|	||<   |||d<   |||d<   d|vr||d<   d|vrr|d<     di |S )z
        Load utility code from a file specified by from_file (relative to
        Cython/Utility) and name util_code_name.
        z::r   r  tempitar  c                 .    g | ]} j         |fi S r   )load).0depr$  	from_fileorig_kwargss     r   
<listcomp>z(UtilityCodeBase.load.<locals>.<listcomp>  s?     "= "= "=&) #+#(3	"I"I["I"I "= "= "=r   c                 <    g | ]}                     |          S r   )load_cached)rS  rT  r$  rU  s     r   rW  z(UtilityCodeBase.load.<locals>.<listcomp>  s7     "= "= "=&) #&//#y"A"A "= "= "=r   r  Nr   r   r!  r&  filer   )
rsplitrN  r   TempitaUtilityCoderR  copyr"  r   r   r   )r$  util_code_namerU  r  rC  r   r!  r)  r&  r-  rV  s   ` `       @r   rR  zUtilityCodeBase.load  s'    >!!(6(=(=dA(F(F%I~00;;	%n5tT 	&t##	T,5G(G(G!#'9:: X-2>9WWPVWWW ++--K $

 & &f6>>:%%" ="= "= "= "= "= "=-3F^^"= "= "="= "= "= "= "=-3F^^"= "= "=\)) $x&;;F! ! ! -!FF[[A%%!&\\!_F%t#F7O!F6N+F6NI&F6Ns}}V}}r   c                 x    ||| f}	 ||         S # t           $ r Y nw xY w|                     ||          x}||<   |S )z`
        Calls .load(), but using a per-type cache based on utility name and file name.
        )rK   rR  )r$  utility_code_namerU  _UtilityCodeBase__cacher   r   s         r   rY  zUtilityCodeBase.load_cached4  sa    
 !)S1	3< 	 	 	D	!hh'8)DDDws|s    
c                     | j         ||fi |}|s4|                    |j                  |                    |j                  fS g g cfd |           d                              d                              fS )a  
        Load a utility code as a string. Returns (proto, implementation).

        If 'include_requires=True', concatenates all requirements before the actually
        requested utility code, separately for proto and impl part.

        In a lot of cases it may be better to use regular "load" and "CCodeWriter.put_code_here"
        since that is able to apply the code transformations to the code too.
        c                    | j         r| j         D ]} |           | j        r-                    |                     | j                             | j        r/                    |                     | j                             d S d S r   )r  r   rB  format_coder!  )	util_coderT  implsprependprotoss     r   rg  z/UtilityCodeBase.load_as_string.<locals>.prependS  s    ! !$- ! !CGCLLLL Fi33IODDEEE~ DY229>BBCCCCCD Dr   r1  )rR  rd  r   r!  r   )	r$  r^  rU  include_requiresr  utilrf  rg  rh  s	         @@@r   load_as_stringzUtilityCodeBase.load_as_stringA  s     sx	<<V<< 	1$$TZ00$$TY//1 1 B	D 	D 	D 	D 	D 	D 	D 	wwv..r   z\n\n+c                 L    |r! |d|                                           dz   }|S )z3
        Format a code section for output.
        r  z

strip)r   code_stringreplace_empty_liness      r   rd  zUtilityCodeBase.format_code_  s6      	R--dK4E4E4G4GHH6QKr   c                 B    dt          |           j        d| j        dS )Nr   (z)>)r   r   r&  r   s    r   __repr__zUtilityCodeBase.__repr__g  s$     !$ZZ000$)))<<r   c                     d S r   r   r  s     r   r  zUtilityCodeBase.get_treej  r  r   c                     d S r   r   r  s     r   r  z(UtilityCodeBase.get_shared_library_scopem  r  r   c                     | S r   r   )r   memodicts     r   __deepcopy__zUtilityCodeBase.__deepcopy__p  s    r   r   F)r   r   r   r   is_cython_utilityr8  r   r.  rN  rR  rY  rk  r   r   r:  rd  rs  r  r  rx  r   r   r   r  r  v  s4       # #J N@ @ @ [@@ ; ; [;z 3 3 [3j ?A 
 
 
 [
 / / / [/: <F2:h;O;O;S    = = =         r   r  c                   b    e Zd ZdZg dZ	 	 	 ddZd Zd Zd Zdd	Z	d
dddde
fdZd Zd ZdS )UtilityCodeaF  
    Stores utility code to add during code generation.

    See GlobalState.put_utility_code.

    hashes/equals by instance

    proto           C prototypes
    impl            implementation code
    init            code to call on module initialization
    requires        utility code dependencies
    proto_block     the place in the resulting file where the prototype should
                    end up
    name            name of the utility code (or None)
    file            filename of the utility code file this utility was loaded
                    from (or None)
    )r   r!  initcleanupmodule_state_declsNutility_code_protoc
                      | _         | _        | _        | _        | _        | _        i  _        g  _        | _        | _	        |	 _
        t           fd j        D                        _        d S )Nc              3   :   K   | ]}t          |d           V  d S r   )r   )rS  partr   s     r   	<genexpr>z'UtilityCode.__init__.<locals>.<genexpr>  s/      !X!X'$d";";!X!X!X!X!X!Xr   )r   r!  r}  r~  r  r  _cachespecialize_listproto_blockr&  rZ  r   
code_parts_parts_tuple)
r   r   r!  r}  r~  r  r  r  r&  rZ  s
   `         r   r   zUtilityCode.__init__  s     
		"4 !&		 "!X!X!X!X!X!X!XXXr   c                 *    t          | j                  S r   )r   r  r   s    r   __hash__zUtilityCode.__hash__  s    D%&&&r   c                     | |u rdS t          |           t          |          }}||ur"t          ||          st          | |          sdS | j        |j        k    S )NTF)r   r   r  )r   r   	self_type
other_types       r   __eq__zUtilityCode.__eq__  sg    5==4 $T

DKK:	J&&
5)0L0L&PZ[_akPlPl&5 E$666r   c                     |dS ||z  S zY
        Format a string in this utility code with context. If None, do nothing.
        Nr   r   scontexts      r   none_or_subzUtilityCode.none_or_sub  s     947{r   c                    | j         }|<|                                d<   |                                d<   |dd         d}t          t	                                                              }	 | j        |         S # t          $ r | j        d }nfd| j        D             }t          | 
                    | j                  | 
                    | j                  | 
                    | j                  | 
                    | j                  | 
                    | j                  || j        |          x}| j        |<   | j                            |           |cY S w xY w)Nr   	type_name[]c                 :    g | ]}|                               S r   )
specialize)rS  rdatas     r   rW  z*UtilityCode.specialize.<locals>.<listcomp>  s%    FFF1ALL..FFFr   )r&  empty_declaration_codespecialization_namer   r   r"  r  rK   r  r|  r  r   r!  r}  r~  r  r  r  rB  )r   
pyrex_typer  r&  r   r  r  s     `    r   r  zUtilityCode.specialize  s}   y!%<<>>DL * > > @ @D#ttT+%6%6%67DF4::<<(())	;s## 	 	 	}$FFFFFFF#.  T22  D11  D11  t44  !8$?? 	$ 	$ 	AC   ''***HHH%	s   6B C%E+*E+writerCCodeWriterr  GlobalState	code_typec                 4   t          | |          }|sd S |dv }t          | ||          \  }}|dk    r|nd}|                    d| j         |rdnd | d           |r$|s"|                    || j         d|            d S |                    |           d S )N)r   r!  r!  r1  /* r   */r   )r   process_utility_ccoder   r&  put_or_includeput)r   r  r  r  ro  can_be_reusedresult_is_module_specificcode_type_names           r   _put_code_sectionzUtilityCode._put_code_section  s    dI.. 	F!%661FtVU`1a1a..&/6&9&9rX49X^&CccX^XXXYYY 	$!: 	$!!+$)/I/Ii/I/IJJJJJJJ{#####r   c                     | j         sd S |d         }|                     ||d           |                    |                    |j                             |                                 d S )Ninit_globalsr}  )r}  r  r   error_goto_if_PyErr
module_pos)r   r  r  s      r   _put_init_code_sectionz"UtilityCode._put_init_code_section  si    y 	F'vvv666 	V//0ABBCCCr   c                    | j         r| j         D ]}|                    |           | j        r"|                     || j                 |d           | j        r|                     |d         |d           | j        r)t          j        r|                     |d         |d           | j	        r|                     |d         |d           | j
        r|                     |           d S d S )Nr   utility_code_defr!  cleanup_globalsr~  module_state_contentsr  )r  use_utility_coder   r  r  r!  r~  r	   generate_cleanup_coder  r}  r  )r   r  
dependencys      r   r  zUtilityCode.put_code  s   = 	4"m 4 4
''
3333: 	N""6$*:#;VWMMM9 	O""6*<#=vvNNN< 	QG9 	Q""6*;#<fiPPP" 	b""6*A#BFL`aaa9 	0''/////	0 	0r   )	NNNNNNr  NNr   )r   r   r   r   r  r   r  r  r  r  r   r  r  r  r   r   r   r|  r|  u  s         " LKKJAE37CGY Y Y Y&' ' '7 7 7     <$ $} $Y\ $ $ $ $$  0 0 0 0 0r   r|  F)regexis_module_specific_last_macro_processorc                 2     d          fd}|S )z8Decorator to chain the code macro processors below.
    r   c                 n     t                     dt          dt          f fd            }|d<   |S )Nutility_codero  c                    d} | ||          \  }}rD ]}||v r n	||fS 	 | ||          }n$t          j        	t          |          |          }D ]!}||v rt          d| d| j         d          "|z  }||fS )NFzLeft-over utility code macro 'z()' found in '')r   r:  r   r^   r&  )
r  r  ro  r  macrofuncr  last_processormacro_namesr  s
        r   processz=add_macro_processor.<locals>.build_processor.<locals>.process  s    ).%)9GV\^i9j9j66  B( B BE++ , '(AAA }"d<EE fUGD&,A,A;OO % s sK''&'q'q'q]i]n'q'q'qrrr ( &);;% 999r   r   )r   r|  r   )r  r  r  r  r  r  r  s   ` r   build_processorz,add_macro_processor.<locals>.build_processor  sf    	t	:+ 	:C 	: 	: 	: 	: 	: 	: 	: 	: 	: 
	:8 $+a r   r   )r  r  r  r  r  r  s   ```` @r   add_macro_processorr    sI     +1-N        B r   CSTRINGz)CSTRING\(\s*"""([^"]*(?:"[^"]+)*)"""\s*\))r  c                     |                     d                              dd          }d                    d |                                D                       S )zUReplace CSTRING('''xyz''') by a C compatible string, taking care of line breaks.
    r   "z\042r1  c              3      K   | ]B}|                     d           r|                     d          rd| dnd|dd          dV  CdS )\z\\r  z\n"
Nr   "
)endswithrS  rK  s     r   r  z!_wrap_c_string.<locals>.<genexpr>-  s       * * !%d 3 3dt}}V7L7LdDRdVZ[^\^[^V_RdRdRd* * * * * *r   )r>  replacer   
splitlines)r   matchobjcontents      r   _wrap_c_stringr  %  sc     nnQ''W55G77 * *&&((* * * * * *r   r  c                 ,    |                      |          S r   )rd  )r  r   r!  s      r   _format_impl_coder  2  s    ##D)))r   CALL_UNBOUND_METHODTzLCALL_UNBOUND_METHOD\(([a-zA-Z_]+),\s*"([^"]+)",\s*([^),\s]+)((?:,[^),]+)*)\))r  r  c                 >   |                                 \  }}}}d|z  }|r'd |dd                             d          D             ng }t          |          dk     sJ dt          |          dd	            |                     t          j         d
||||          S )zRReplace 'UNBOUND_METHOD(type, "name")' by a constant Python identifier cname.
    z&%sc                 6    g | ]}|                                 S r   rm  )rS  args     r   rW  z*_inject_unbound_method.<locals>.<listcomp>H  s     777CCIIKK777r   r   N,r$   z'CALL_UNBOUND_METHOD() does not support r   z call arguments->)r@  splitr   cached_unbound_method_call_coder   modulestateglobal_cname)r  r  
type_cnamemethod_name	obj_cnameargss         r   _inject_unbound_methodr  7  s     08/@/@,JY#J;?G7748>>##6#67777RDt99q===`CII````===11)---:{D2 2 2r   PYIDENT	PYUNICODEzPY(IDENT|UNICODE)\("([^"]+)"\)c                     |                                 \  }}t          j        d|                     t	          j        |          |dk              j        S )zDReplace 'PYIDENT("xyz")' by a constant Python identifier cname.
    r  IDENT
identifier)r@  r   r  get_py_string_constr
   EncodedStringcname)r  r  str_typer&  s       r   _inject_string_constantr  O  sg     __&&NHd&&&""(..8w;N 	# 	P 	PPU	VW Wr   EMPTYzEMPTY\((bytes|unicode|tuple)\)c                 z    |                     d          }t          j        dt          t          d|           S )zLReplace 'EMPTY(bytes|tuple|...)' by a constant Python identifier cname.
    r   r  empty_)r>  r   r  r   )r  r  r  s      r   !_inject_empty_collection_constantr  ^  sD     q!!I&&&,,,---/ /r   CGLOBALz(NAMED_)?CGLOBAL\(([^)]+)\)c                     |                                 \  }}|rt          t          |          }t          j         d| S Nr  )r@  r   r   r  )r  r  is_namedr&  s       r   _inject_cglobalr  m  sE     __&&NHd %vt$$,66666r   c                     |S )z;Entry point for code processors, must be defined last.
    r   )r  r   ro  s      r   r  r  y  s
     r   c                     | sdS |r| d| }|r||d<   	 ||          }n(# t           $ r ddlm}  || |          x}|| <   Y nw xY w|                    |          S )z+Run tempita on string s with given context.Nr  __namer   r   )r&  )rK   Tempitar   r  )r  r  rZ  r&  __cachetemplater   s          r   sub_tempitar    s     t   ! 71: 7 7 7&&&&&& ( 6 6 6671:::7 w'''s    "AAc                   D     e Zd Zd fd	Zeddi fd            Zd Z xZS )r\  Nc                     |i }n|                                 }t          ||||          }t          ||||          }t          ||||          } t                      j        ||f|||d| d S )N)r}  r&  rZ  )r]  r  r   r   )	r   r&  r   r!  r}  rZ  r  r  	__class__s	           r   r   zTempitaUtilityCode.__init__  s    ?GG llnnGE7D$774$554$554	D"D	D 	D<B	D 	D 	D 	D 	Dr   c                    |r.t          t          |                                                    nd }t          |          J | |||f}	 ||         S # t          $ r Y nw xY w|                     |||          x}||<   |S )N)r  )r   r   r"  r   rK   rR  )r$  r`  rU  r  _TempitaUtilityCode__cachecontext_keyr   r   s           r   rY  zTempitaUtilityCode.load_cached  s    8?IeF7==??33444TK  ,,,I0+>	3< 	 	 	D	!hh'8)WhUUUws|s   A 
A A c                 B    |dS t          ||| j        | j                  S r  )r  rZ  r&  r  s      r   r  zTempitaUtilityCode.none_or_sub  s&     941gty$)<<<r   )NNNNNN)r   r   r   r   r   rY  r  __classcell__)r  s   @r   r\  r\    sz        
D 
D 
D 
D 
D 
D 6:DRT 	 	 	 [	= = = = = = =r   r\  c                   &    e Zd ZdZdZ dZd Zd ZdS )LazyUtilityCodez
    Utility code that calls a callback with the root code writer when
    available. Useful when you only have 'env' but not 'code'.
    z<lazy>Nc                     || _         d S r   )callback)r   r  s     r   r   zLazyUtilityCode.__init__  s     r   c                 d    |                      |j                  }|                    |           d S r   )r  
rootwriterr  )r   globalstater%  s      r   r  zLazyUtilityCode.put_code  s0    -- 677$$W-----r   )r   r   r   r   r  r   r  r   r   r   r  r    sH          HH! ! !. . . . .r   r  c                       e Zd Z e            dfdZd ZddZddZddZd	 Z	d
 Z
ddZd Zd Zd Zd Zd ZddZd Zd Zd Zd Zd Zd Zd Zd ZdS ) FunctionStateNc                    || _         || _        || _        d | _        d| _        t                      | _        |                                 | _        | 	                                 d | _
        d | _        g | _        d | _        d | _        d| _        d| _        g | _        i | _        i | _        t                      | _        d| _        d | _        g | _        d| _        d| _        d| _        d| _        d S )Nr   FT)names_takenownerscopeerror_labellabel_counterr   labels_used	new_labelreturn_labelnew_error_labelcontinue_labelbreak_labelyield_labelsexc_varscurrent_except	can_trace	gil_ownedtemps_allocated
temps_freetemps_used_typezombie_tempstemp_counterclosure_tempscollect_temps_stackshould_declare_error_indicatoruses_error_indicatorerror_without_exceptionneeds_refnanny)r   r  r  r  s       r   r   zFunctionState.__init__  s    &

55 NN,,""!!EE! $&  /4+$)!',$#r   c           	          | j         ra|                                 }|rMd| j        j        dd                    d t          |          D                       }t          |          d S d S )Nz&TEMPGUARD: Temps left over at end of 'z': , c                 &    g | ]\  }}}|d |dS )z [r  r   )rS  r&  ctype	is_pytemps       r   rW  z/FunctionState.validate_exit.<locals>.<listcomp>  sG     eE eE eE.eY "&uuu-eE eE eEr   )r$  temps_in_user  r&  r   r   r^   )r   	leftoversmsgs      r   validate_exitzFunctionState.validate_exit  s     	())++I ( (IMZ^ZcZc eE eE282C2CeE eE eE [F [F [F 
 #3'''	( 	(( (r   c                 ^    | j         }|dz   | _         dt          j        |fz  }||d|z   z  }|S )Nr   %s%dr   )r  r   label_prefix)r   r&  nlabels       r   r  zFunctionState.new_label  sA    -U&-q11S4ZEr   yieldc                     |                      d|z            }t          | j                  dz   |f}| j                            |           |S )Nzresume_from_%sr   )r  r   r  rB  )r   	expr_typer<  num_and_labels       r   new_yield_labelzFunctionState.new_yield_label  sP    /);<<T.//!3U;  ///r   r1  c                 N    | j         }|                     |dz             | _         |S )Nerror)r  r  )r   prefixold_err_lbls      r   r  zFunctionState.new_error_label  s)    &>>&7*:;;r   c                     | j         | j        fS r   r  r  r   s    r   get_loop_labelszFunctionState.get_loop_labels  s     	r   c                 $    |\  | _         | _        d S r   rG  r   labelss     r   set_loop_labelszFunctionState.set_loop_labels#  s    #						r   c                     |                                  }|                     |                     |dz             |                     |dz             f           |S )Ncontinuebreak)rH  rL  r  )r   rD  
old_labelss      r   new_loop_labelszFunctionState.new_loop_labels'  s`    ))++
^^FZ/00^^FW,--/	0 	0 	0 r   c                 6    | j         | j        | j        | j        fS r   r  r  r  r  r   s    r   get_all_labelszFunctionState.get_all_labels.  s$    	 	r   c                 <    |\  | _         | _        | _        | _        d S r   rS  rJ  s     r   set_all_labelszFunctionState.set_all_labels5  s)     $										r   c                    |                                  }g }t          |g d          D ]E\  }}|r)|                    |                     |                     0|                    |           F|                     |           |S )N)rN  rO  returnrC  )rT  r   rB  r  rV  )r   rP  
new_labels	old_labelr&  s        r   all_new_labelszFunctionState.all_new_labels;  s    ((**

":/W/W/WXX 	- 	-OIt -!!$.."6"67777!!),,,,J'''r   c                 :    | j                             |           d S r   )r  rA  r   lbls     r   	use_labelzFunctionState.use_labelF  s    S!!!!!r   c                     || j         v S r   )r  r]  s     r   
label_usedzFunctionState.label_usedI  s    d&&&r   FTc           	         |j         r|j        s|j        }n|j        r|j        s|j        }nv|j        rddlm} |                    |          }nS|j	        rL|j        sE| j
        j        d         r3| j
                            t                              dd                     |j        sd}| j                            ||f          }|r@|>|d         r6|d                                         }|d                             |           nl	 | xj        dz  c_        d
t*          j        | j        fz  }|| j        vrn1| j                            ||||f           |s| j                            |           ||f| j        |<   t:          j        r(| j                             d|d|d|rdndd           | j!        r"| j!        d                             ||f           |S )a
  
        Allocates a temporary (which may create a new one or get a previously
        allocated and released one of the same type). Type is simply registered
        and handed back, but will usually be a PyrexType.

        If type.needs_refcounting, manage_ref comes into play. If manage_ref is set to
        True, the temp will be decref-ed on return statements and in exception
        handling clauses. Otherwise the caller has to deal with any reference
        counting of the variable.

        If not type.needs_refcounting, then manage_ref will be ignored, but it
        still has to be passed. It is recommended to pass False by convention
        if it is known that type will never be a reference counted type.

        static=True marks the temporary declaration with "static".
        This is only used when allocating backing store for a module-level
        C array literals.

        if reusable=False, the temp will not be reused after release.

        A C string referring to the variable is returned.
        r   )
PyrexTypes
cpp_localsOptionalLocalsCppSupport.cppFNr   Tr9  r  z allocated (r  r1  	 - zombier  r   )"is_cv_qualifiedis_referencecv_base_typeis_fake_referenceref_base_typeis_cfunctionr1  rc  
c_ptr_typeis_cpp_classr  
directivesr  r|  rY  needs_refcountingr%  r   popremover(  r   codewriter_temp_prefixr  r$  rB  r'  rA  r&  r   debug_temp_code_commentsr  r   r*  )r   r   
manage_refstaticreusablerc  freelistresults           r   allocate_tempzFunctionState.allocate_tempN  sF   .  	e(9 	e$DD 	et'= 	e%DD 	e$$$$$$((..DD 	et'= 	e$*BWXdBe 	eJ''(?(?@PRb(c(cddd% 	 J?&&j'9:: 
	.,!,a[__&&FQKv&&&&9!!Q&!!6#@$BS"TT!11159  ''z6(JKKK .!%%f---(,j'9V$. 	lJFFFDDDPXJi""^iJiJijkkk# 	=$R(,,fd^<<<r   c                    | j         |         \  }}| j                            ||f          }|g t                      f}|| j        ||f<   ||d         v rt	          d|z            || j        vr|d                             |           |d                             |           t          j	        r.| j
                            d|d|| j        v rdndd	           dS dS )
zv
        Releases a temporary so that it can be reused by other code needing
        a temp of the same type.
        Nr   zTemp %s freed twice!r   r  z
 released rg  r1  */)r&  r%  r   r   r^   r'  rB  rA  r   ru  r  r   )r   r&  r   rv  ry  s        r   release_tempzFunctionState.release_temp  s   
  /5j?&&j'9::CEE{H2:DOT:./8A;5<===t(((QKt$$$. 	IJTT->%>%>kkBFFH I I I I I	I 	Ir   c                     g }| j         D ]N\  }}}}| j                            ||f          }|
||d         vr|                    |||o|j        f           O|S )zxReturn a list of (cname,type,manage_ref) tuples of temp names and their type
        that are currently in use.
        Nr   )r$  r%  r   rB  rq  )r   usedr&  r   rv  rw  ry  s          r   r4  zFunctionState.temps_in_use  s{     .2.B 	Q 	Q*D$
F**D*+=>>H4x{#:#:T4)N8NOPPPr   c                 >    d |                                  D             S )zReturn a list of (cname,type) tuples of temp names and their type
        that are currently in use. This includes only temps
        with a reference counted type which owns its reference.
        c                 0    g | ]\  }}}||j         ||fS r   )rq  )rS  r&  r   rv  s       r   rW  z9FunctionState.temps_holding_reference.<locals>.<listcomp>  sB     : : :*D$
:"&"8:t : : :r   )r4  r   s    r   temps_holding_referencez%FunctionState.temps_holding_reference  s/    
: :.2.?.?.A.A: : : 	:r   c                 $    d | j         D             S )zRReturn a list of (cname, type) tuples of refcount-managed Python objects.
        c                 $    g | ]\  }}}}|	||fS r   r   )rS  r  r   rv  rw  s        r   rW  z3FunctionState.all_managed_temps.<locals>.<listcomp>  s9       3E4V   r   )r$  r   s    r   all_managed_tempszFunctionState.all_managed_temps  s&     7;7K   	r   c                 b    t          d | j                                        D                       S )zReturn a list of (cname, type) tuples of refcount-managed Python
        objects that are not currently in use.  This is used by
        try-except and try-finally blocks to clean up temps in the
        error case.
        c                 <    g | ]\  \  }}}|
|d          D ]}||fS r   r   )rS  r   rv  ry  r  s        r   rW  z8FunctionState.all_free_managed_temps.<locals>.<listcomp>  sY     
 
 
,"zH:
 "!
 
  DM
 
 
 
r   )r   r%  r"  r   s    r   all_free_managed_tempsz$FunctionState.all_free_managed_temps  s@      
 
040E0E0G0G
 
 
   	r   c                 R    | j                             t                                 dS )zJ
        Useful to find out which temps were used in a code block
        N)r*  rB  r   r   s    r   start_collecting_tempsz$FunctionState.start_collecting_temps  s%     	 ''.....r   c                 4    | j                                         S r   )r*  rr  r   s    r   stop_collecting_tempsz#FunctionState.stop_collecting_temps  s    '++---r   c                 .    t          |          | _        d S r   )ClosureTempAllocatorr)  r   r  s     r   init_closure_tempsz FunctionState.init_closure_temps  s    1%88r   r   )r=  )r1  )FT)r   r   r   r   r   r7  r  rA  r  rH  rL  rQ  rT  rV  r[  r_  ra  r{  r~  r4  r  r  r  r  r  r  r   r   r   r  r    s        +.#%%t '$ '$ '$ '$V
( 
( 
(         
  
$ $ $     $ $ $	 	 	" " "' ' '
8 8 8 8tI I I&	 	 	: : :  
 
 
/ / /. . .9 9 9 9 9r   r  c                       e Zd ZdZddZdS )NumConstzGlobal info about a Python number constant held by GlobalState.

    cname       string
    value       string
    py_type     string     int, long, float
    value_code  string     evaluation code if different from value
    Nc                 B    || _         || _        || _        |p|| _        d S r   )r  r7  py_type
value_code)r   r  r7  r  r  s        r   r   zNumConst.__init__  s'    

$-r   r   r   r   r   r   r   r   r   r   r  r    s2         . . . . . .r   r  c                       e Zd ZdZd ZdS )PyObjectConstz>Global info about a generic constant held by GlobalState.
    c                 "    || _         || _        d S r   )r  r   r   r  r   s      r   r   zPyObjectConst.__init__  s    
			r   Nr  r   r   r   r  r    s-         
    r   r  )possible_unicode_identifierpossible_bytes_identifierreplace_identifierfind_alphanumsz(?![0-9])\w+$s   (?![0-9])\w+$z[^a-zA-Z0-9_]+z([a-zA-Z0-9]+)c                        e Zd ZdZd ZddZdS )StringConstz?Global info about a C string constant held by GlobalState.
    c                 b    || _         || _        t          j        |          | _        d | _        d S r   )r  textr
   escape_byte_stringescaped_value
py_strings)r   r  r  byte_strings       r   r   zStringConst.__init__  s.    
	+>{KKr   Nc                    | j         }|s|d x}}d}nAd}|                                }|dv rd }d }n"d                    t          |                    }|rd}nS|Ot	          |t
                    rt          t          |                    }nt          t          |                    }nd}|||f}| j	        i | _	        n	 | j	        |         S # t          $ r Y nw xY w|rt          j        d         nt          j         |rdnd |rd|z   nd d| j        t          t          j                  d           }t#          ||||          }	|	| j	        |<   |	S )	NTF)utf8zutf-8r}   usasciizus-asciir1  r   ubr   )r  lowerr   r  r   r   r   r  r  r  rK   r   interned_prefixespy_const_prefixr  r   const_prefixPyStringConst)
r   r  r  r  encoding_key
is_unicodeinternr   pystring_cname	py_strings
             r   r  zStringConst.get_py_string_const  s   y  	A)&**H|JJ J~~''HLLL#!ww~h'?'?@@ 	FF$&& A7==>>9$??@@Fz<0?" DOOs++    39Tv'..f>T 8 )ssc8%19s\!!r8 8 
3v2334458 8 	 ".(FJOO	(s   C 
CCr   )r   r   r   r   r   r  r   r   r   r  r    sA           / / / / / /r   r  c                        e Zd ZdZddZd ZdS )r  zDGlobal info about a Python string constant held by GlobalState.
    Fc                 >    || _         || _        || _        || _        d S r   )r  r  r  r  )r   r  r  r  r  s        r   r   zPyStringConst.__init__8  s"    
 $r   c                 "    | j         |j         k     S r   r  r   r   s     r   __lt__zPyStringConst.__lt__>  s    zEK''r   NFF)r   r   r   r   r   r  r   r   r   r  r  0  sA            ( ( ( ( (r   r  c                   (   e Zd Zi Zg dZg dZd0dZd Zd Zd Z	d Z
d	 Zd
 Zd0dZd1dZd Zd0dZd Zd Zd Zd0dZd Zd Zd Zd0dZd Zd Zd Zd2dZdefdZd Zd  Z d! Z!d" Z"d# Z#d3d%Z$d& Z%d' Z&d( Z'd) Z(d* Z)d+ Z*d, Z+d- Z,d. Z-d/ Z.dS )4r  )%h_codefilename_tableutility_code_proto_before_typesnumeric_typedefscomplex_type_declarationstype_declarationsr  module_declarationstypeinfobefore_global_var
global_varstring_declsdeclslate_includesmodule_stater  module_state_endconstant_name_definesmodule_state_clearmodule_state_traversemodule_codemodule_exttypesinitfunc_declarationsinit_modulepystring_tablecached_builtinscached_constantsinit_constantsinit_codeobjectsr  r  cleanup_modulemain_methodutility_code_pragmasr  utility_code_pragmas_endend)r  r  r  r  r  Nc                    i | _         g | _        i | _        t                      | _        i | _        d| _        || _        || _        i | _	        || _
        i | _        i | _        i | _        i | _        g | _        i | _        g | _        i | _        i | _        t                      | _        |                    |            || _        d S NF)r  filename_listinput_file_contentsr   utility_codesdeclared_cnamesin_utility_code_generationcode_configcommon_utility_include_dirpartsmodule_nodeconst_cnames_usedstring_const_indexdedup_const_indexpyunicode_ptr_const_indexcodeobject_constantsnum_const_indexarg_default_constantsconst_array_counterscached_cmethodsinitialised_constantsset_global_stater  )r   r  r  r  r  s        r   r   zGlobalState.__init__  s     #%  UU!*/'&*D'
& "$"$!#)+&$&!!%'"$&!!%(UU"%%% r   c                    | j         }t          | j                  D ]A\  }}|                                x}| j        |<   |dk    r|                    d|z             Bt          j        s	| j        d= n`| j        d         }|                    dt          j
         dt          j         d           |                    dt          j         d           | j        d	         }|                    d
t          j
         dt          j         dd           |                    dt          j         d           |                    t          j        d                     | j        d         }|                    d           | j        d         }|                    dt          j
         dt          j         d           |                    dt          j         d           t          j        s	| j        d= n`| j        d         }|                    dt          j
         dt          j         d           |                    dt          j         d           | j        d         }|                    d           |                    d           | j        d         }| j        j        r|                    d           |                    d           |                    d           d S )Nr   z/* #### Code section: %s ### */r  zint __Pyx_InitCachedBuiltins( *r  CYTHON_UNUSED_VAR();r  zint __Pyx_InitCachedConstants(T)refnanny__Pyx_InitCachedConstantsr  zint __Pyx_InitGlobals(void)r  zint __Pyx_InitConstants(r  zvoid __Pyx_CleanupGlobals(r  r1  z)/* --- Runtime support code (head) --- */r  z
#line 1 "cython_utility"
z"/* --- Runtime support code --- */)r  r   code_layoutinsertion_pointr  r   r	   cache_builtinsstart_initcfuncr   modulestatetype_cnamemodulestatevalue_cnameput_setup_refcount_contextr
   r  r  r  emit_linenumsr   )r   r  ir  wr   s         r   initialize_main_c_codez"GlobalState.initialize_main_c_code  sS   _
 !122 	B 	BGAt#-#=#=#?#??A
4 1uu9D@AAA% 	L
,--
,-AT/T T393PT T TU U U GGJ)FJJJKKKJ)*	P+P P/5/LP P P 	 	 	 	 	
FV%BFFFGGG	$$^%AB]%^%^___J~&	7888J'(	P+P P/5/LP P P	Q 	Q 	Q 	
FV%BFFFGGG, 	L
,--
,-AT/T T393PT T TU U U GGJ)FJJJKKKz./

2

>???z,-) 	7JJ5666

2

788888r   c                 `    | j         }| j        D ]}|                                | j        |<   d S r   )r  h_code_layoutr  r  )r   r  r  s      r   initialize_main_h_codez"GlobalState.initialize_main_h_code  s@    _
& 	< 	<D)99;;DJt	< 	<r   c                    |                                   | j        d         }t                              dd          }|                    |                    |j                             |                    d           | j        d         }t                              dd          }|                    |                    |j                             |                    d           | j        d         }t                              d	d          }|                    |                    |j                             |                    d           d S )
Nr  TypeConversionszTypeConversion.cr1  r  UtilityCodePragmasModuleSetupCode.cr  UtilityCodePragmasEnd)	close_global_declsr  r\  rY  r  rd  r!  r   r|  )r   r   rj  s      r   finalize_main_c_codez GlobalState.finalize_main_c_code  s   !!!
 z,-!--.?ASTT!!$),,---

2
 z01&&';=PQQ

4##DI..///

2z45&&'>@STT

4##DI..///

2r   c                     | j         |         S r   )r  )r   r   s     r   __getitem__zGlobalState.__getitem__  s    z#r   c                 $   |                                   t          j        r| j        d         }|                    d           |                    |j                  r/|                    |j                   |                    d           |                    d           |                                 | j        d         }|	                                 |                    d           |                    |j                  rC|                    |j                   |	                                 |                    d           |                    d           |                                 dD ]}| j        |         }|                    d           |                    |j                  r/|                    |j                   |                    d           |                    d           |                                 t          j
        r6| j        d         }|                    d           |                                 t          j
        r8| j        d         }|                    d           |                                 d S d S )	Nr  	return 0;
return -1;}r  )r  r  r  r  )generate_const_declarationsr	   r  r  r   ra  r  	put_labelexit_cfunc_scopeput_finish_refcount_contextr  )r   r  r  s      r   r  zGlobalState.close_global_decls  sL    	((***! 	!
,-AGGK   ||AM** &AM***%%%GGCLLL   J)*	%%'''	<<&& 	"KK&&&))+++GGL!!!		6 	! 	!D
4 AGGK   ||AM** &AM***%%%GGCLLL    ( 	!
,-AGGCLLL   ( 	!
+,AGGCLLL     	! 	!r   c                 L    | d                              d|j        z             d S )Nr  zstatic PyObject *%s;)r   r  r   entrys     r   put_pyobject_declzGlobalState.put_pyobject_decl-  s)    \  !7%+!EFFFFFr   c                 j    |%|| j         v rd S | j                             |           | j        d         S )Nr  )r  rA  r  r   targets     r   get_cached_constants_writerz'GlobalState.get_cached_constants_writer2  s@    333t&**6222z,--r   Fc                     |rdpd}	 | j         ||f         }n&# t          $ r |                     ||          }Y nw xY w|S )Nlongr   r  rK   new_num_const)r   	str_valuelongnessr  cs        r   get_int_constzGlobalState.get_int_const:  sc    %v.	7$i%9:AA 	7 	7 	7""9g66AAA	7s     ;;c                 v    	 | j         |df         }n'# t          $ r |                     |d|          }Y nw xY w|S )Nr   r%  )r   r'  r  r)  s       r   get_float_constzGlobalState.get_float_constB  s[    	C$i%9:AA 	C 	C 	C""9gzBBAAA	Cs    !66c                     || j                             |          }||S |                     |          }|
|| j         |<   |S r   )r  r   new_array_const_cname)r   rD  	dedup_keyconsts       r   get_py_constzGlobalState.get_py_constI  sT     *..y99E **622 05D"9-r   c                     |                      d          }t          ||          }| j                            |           |S Nr1  )new_const_cnamer  r  rB  )r   r   r  r)  s       r   get_argument_default_constz&GlobalState.get_argument_default_constS  sB    $$R((%&&"))!,,, r   c                     |j         r|                                }n|                                }	 | j        |         }n&# t          $ r |                     ||          }Y nw xY w|S r   )r  
utf8encode
byteencoder  rK   new_string_const)r   r  r  r)  s       r   get_string_constzGlobalState.get_string_const\  sy    ? 	,//++KK//++K	9'4AA 	9 	9 	9%%dK88AAA	9s   A    A#"A#c                     |j         sJ 	 | j        |         }n.# t          $ r! |                                 x}| j        |<   Y nw xY w|S r   )r  r  rK   r4  )r   r  r)  s      r   get_pyunicode_ptr_constz#GlobalState.get_pyunicode_ptr_consth  sm    	N.t4AA 	N 	N 	N7;7K7K7M7MMA.t444	Ns    (AAc                 f    |                      |          }|                    |j        |          }|S r   )r:  r  r  )r   r  r  c_stringr  s        r   r  zGlobalState.get_py_string_constq  s2    ((..00
KK	r   c                     t          | j                  }t          j         d| d}| j                            |           |S )Nr  r  )r   r  r   codeobjtab_cnamerB  )r   nodeidxr&  s       r   get_py_codeobj_constz GlobalState.get_py_codeobj_constw  sG    $+,,)22C222!((...r   c                 0    |                      |d          S NTr  r  r   r  s     r   get_interned_identifierz#GlobalState.get_interned_identifier}      '''>>>r   c                 f    |                      |          }t          |||          }|| j        |<   |S r   )new_string_const_cnamer  r  )r   r  r  r  r)  s        r   r9  zGlobalState.new_string_const  s8    ++K88t[11/0,r   c                 n    |                      ||          }t          ||||          }|| j        ||f<   |S r   )new_num_const_cnamer  r  )r   r7  r  r  r  r)  s         r   r&  zGlobalState.new_num_const  sA    ((88UE7J7712eW-.r   c                 Z    |                     dd          }|                     |          S )NASCIIignore)r7  )decoder4  )r   bytes_valuer7  s      r   rK  z"GlobalState.new_string_const_cname  s.    ""7H55##%#000r   c                     | j         }|                    dd          x}}||v r+||         dz   x}||<   |                    d|          }||v +d||<   |S )Nr1  )sepr   r   r   )r  r   )r   
format_strr  r  r7  r   s         r   unique_const_cnamezGlobalState.unique_const_cname  sy    %"))b")===tmm$(K!O3Gd5k%%#w%??E tmm Ur   c                 V   |dk    r|dz  }d}t           j        |         }|                    dd                              dd                              dd          }t          |          d	k    r2|                     |d
z   |d d         z   dz   |dd          z             }n||}|S )Nr$  Lr   r  r   +-neg_*   zlarge{counter}_   _xxx_i)r   r  r  r   rV  )r   r7  r  rD  r  s        r   rM  zGlobalState.new_num_const_cname  s    fSLEG)'2c3''//S99AA#vNNu::??++**U3B3Z7'AE#$$KOQ QEE %fee,Er   r1  c                     t          d|          d d                             d          }|                     |dz             }|rt          j        |         }nt          j        }||S )Nr       z{sep}{counter})r  rn  rV  r   r  r  )r   rD  r7  name_suffixs       r   r4  zGlobalState.new_const_cname  so    "3..ss399#>>--e6F.FGG 	)-f5FF(F--r   rD  c                 z    | j                             |d          }|dz   | j         |<   t          j         | d| dS )Nr   r   r  r  )r  r   r   pyrex_prefix)r   rD  counts      r   r.  z!GlobalState.new_array_const_cname  sJ    )--fa88,1!G!&)%8v888888r   c                     ||f}	 | j         |         }n5# t          $ r( |                     d|d|          x}| j         |<   Y nw xY w|S )Numethodr   )r  rK   r4  )r   r  r  r   r  s        r   get_cached_unbound_methodz%GlobalState.get_cached_unbound_method  s    ;'	@(-EE 	@ 	@ 	@040D0Djjj++>1@ 1@ @ED(---	@ s    /AAc           	          dt          |          z  }|                     t                              |d                     |                     ||          }|g|z   }d|d||dd                    |          dS )NzCallUnboundCMethod%dObjectHandling.c__Pyx_z(&r0  r  )r   r  r|  rY  rg  r   )	r   modulestate_cnamer  r  r  
arg_cnamesr`  cache_cnamer  s	            r   r  z+GlobalState.cached_unbound_method_call_code  s    2S__Dk556GI[\\]]]44ZMM{Z'KKIIdOOOO	
 	
r   c                 .   |j         r|j        r|                     |j        |          rk|                     |           |j        }|t          v rt          |         }|                     |j        t          j
        |          |j                   d S d S d S d S r   )
is_builtinis_constshould_declarer  r  r&  renamed_py2_builtins_mapput_cached_builtin_initposr
   r  )r   r  r&  s      r   add_cached_builtin_declz#GlobalState.add_cached_builtin_decl  s     	! 	!""5;66 !&&u---z3333D9D,,I~;DAAK! ! ! ! !	! 	! 	! 	!! !r   c                 <   | j         d         }|                    |                     |          j                  }|                     t
                              dd                     |                    |d|d|d|                    |                     d S )Nr  GetBuiltinNameri  z = __Pyx_GetBuiltinName(z); if (!) )	r   name_in_main_c_code_module_staterH  r  r  r|  rY  r   
error_goto)r   rt  r&  r  r  cname_in_modulestates         r   rs  z#GlobalState.put_cached_builtin_init  s    J() AA((..4 6  6##$46HII	K 	K 	K	EE   EELL	 	  	  	  	  	 r   c                     |                                   |                                  |                                  |                                  |                                  d S r   )generate_cached_methods_declsgenerate_object_constant_declsgenerate_codeobject_constantsgenerate_string_constantsgenerate_num_constantsr   s    r   r  z'GlobalState.generate_const_declarations  sd    **,,,++---**,,, 	&&(((##%%%%%r   Tc                     |dk     rdnd}|rdnd}| j         d         }|                    d| d| d	| d
| d	           | j         d         }|                    d| d| d| d           d S )Ni   r   
Py_ssize_tPy_VISIT__Pyx_VISIT_CONSTr  zfor (z i=0; i<z	; ++i) { z(traverse_module_state->z[i]); }r  z&; ++i) { Py_CLEAR(clear_module_state->)r  r   )r   struct_attr_cnamerd  may_have_refcyclescounter_type
visit_callr  s          r   )_generate_module_array_traverse_and_clearz5GlobalState._generate_module_array_traverse_and_clear  s     %uu<#5NZZ;N
34  D\  D  D5  D  DJ  D  Dhy  D  D  D  	E  	E  	E01|\||5||ar|||}}}}}r   c                    d | j         D             }|                                 |D ]\  }}}| j        d                             d|j                            |          z             |j        j        sN| j        d                             d| |j        dd           |j        j        r|d	z  }| j        d
                             d| d           t          | j
                                                  D ]\  }}t          j         | }| j        d                             d| d| d           |                     ||d           t          |          }|d|t           j        k    rT| j        d         }	|	                    d| d           |	                    d|	                    | d          z             d S )Nc                 F    g | ]}t          |j                  |j        |fS r   r   r  rS  r)  s     r   rW  z>GlobalState.generate_object_constant_decls.<locals>.<listcomp>  s9     7 7 7 qw<<!, 7 7 7r   r  z%s;r  zclear_module_state->TF)clear_before_decrefnannyz	->memviewr  z Py_VISIT(traverse_module_state->r  
PyObject *r  ];r  r  zfor (size_t i=0; i<z; ++i) z{ Py_CLEAR(%s); }z[i])r  sortr  r   r   declaration_coderq  put_xdecref_clearis_memoryviewslicer   r  r"  r   rc  r  cleanup_level_for_type_prefixr	   r  r  ry  )
r   constsr   r  r)  rD  rd  r  cleanup_levelpart_writers
             r   r~  z*GlobalState.generate_object_constant_decls  s/   7 757 7 7! 	> 	>KAuaJ~&,,UQV5L5LU5S5S-STTT6+  J+,>>.u..$(	 ?    v( %$J./55<5<<<> > > > $D$=$C$C$E$EFF 	 	MFE#)#6 @ @ @J~&,,-W:K-W-We-W-W-WXXX ::;Lehm:nnn9&AAM(]g>[-[-["j):; De D D DEEE!!'#DDHYE^E^E^__`  	 	r   c                    | j         sd S | j        d         }| j        d         }g }t          | j                                                   D ]\  \  }}}|                    |           |                     t          j        |                    j        }|	                    d|z             |	                    |
                    |          d|d           |	                    |
                    |           d|
                    |           d           t          j        r>| j        d         }|D ]0}|	                    d|
                    |           d	           /d S d S )
Nr  r  z__Pyx_CachedCFunction %s;z.type = (PyObject*);z.method_name = &r  z	Py_CLEAR(z	.method);)r  r  r   r"  rB  rH  r
   r  r  r   ry  r	   r  )	r   declr}  cnamesr  r  r  method_name_cnamer~  s	            r   r}  z)GlobalState.generate_cached_methods_decls"  s   # 	Fz.)z*+06t7K7Q7Q7S7S0T0T 	Q 	Q,%ZuMM%    $ < <^=YZe=f=f g g mJJ2    JJ55e<<<<jjjJ K K K JJ88?? P P99:KLLP P PQ Q Q Q ( 	cj!23G c ca$*O*OPU*V*Vaaabbbb	c 	cc cr   c                 	   d | j                                         D             }|                                 g }d}t                      }d }| j        d         }|D ]\  }}}	t          j        |	j                  }
|                    d| d|
 dd	           |	j	        t          |	j                  |k    rt          |	j                  }|	j	                                        D ]O}|                     ||                     |                    |	j        t          |j                  |f           Pt          | j                                                  D ]\  }	}t          j        |	          \  }}|r|                    d
           |                    d|d|d           |rF|                    d           |                    d|d|d           |                    d           |sd S |                                 | j        d         }|                    d           |                    t'          j        dt+          |t          |                    z                       t          |          }| j        d                             dt,          j         d| d           |                     t,          j        |d           t          |          }|                    t                     |rd|vs|d         dk    s
J |            d t3          |          D             }|                    dt,          j        dd                    |          d           |                    dt,          j        z             t3          |          D ]\  }\  }}}| ||                   }|j        }| j        d                              d!|j        d"t,          j        d|d#           |                    d$|||||j        |j        fz             |                    d%           |                    d&           |                     t>                               d'd(                     | j        d)         }|                    d*t,          j        d|!                    t,          j                  dt,          j        d+|"                    | j#                  d,	           d S )-Nc                 F    g | ]}t          |j                  |j        |fS r   r  r  s     r   rW  z9GlobalState.generate_string_constants.<locals>.<listcomp><  s)    YYY1S\\17A.YYYr   r   c                 `    | j         r&| j         dvrd| j                                          dS dS )N)rO  USASCIIzUS-ASCIIUTF8r  r  0)r  r  )r  s    r   normalise_encoding_namezFGlobalState.generate_string_constants.<locals>.normalise_encoding_nameB  sJ    ! i&8 AE 'E 'E89-33558888sr   r  zstatic const char z[] = "z";T)safez#ifdef Py_UNICODE_WIDEzstatic Py_UNICODE z[] = { z };#else#endifr  r1  a          typedef struct {
            const char *s;
        #if %(max_length)d <= 65535
            const unsigned short n;
        #elif %(max_length)d / 2 < INT_MAX
            const unsigned int n;
        #elif %(max_length)d / 2 < LONG_MAX
            const unsigned long n;
        #else
            const Py_ssize_t n;
        #endif
        #if %(num_encodings)d <= 31
            const unsigned int encoding : 5;
        #elif %(num_encodings)d <= 255
            const unsigned char encoding;
        #elif %(num_encodings)d <= 65535
            const unsigned short encoding;
        #else
            const Py_ssize_t encoding;
        #endif
            const unsigned int is_unicode : 1;
            const unsigned int intern : 1;
        } __Pyx_StringTabEntry;
        )
max_lengthnum_encodingsr  r  r  r  Fr  )r   r  c                     i | ]\  }}||	S r   r   )rS  r  r  s      r   
<dictcomp>z9GlobalState.generate_string_constants.<locals>.<dictcomp>  s    MMMH1MMMr   zstatic const char * const r0  z*static const __Pyx_StringTabEntry %s[] = {r  z#define  r  z6{%s, sizeof(%s), %d, %d, %d}, /* PyObject cname: %s */z{0, 0, 0, 0, 0}z};InitStringszStringTools.cr  zif (__Pyx_InitStrings(z) < 0) r  )$r  r-  r  r   r  r
   split_string_literalr  r   r  r   rA  rB  r  r   r  r"  encode_pyunicode_stringr  r   dedentr   r   stringtab_cnamer  r   stringtab_encodings_cnamer   r  r  r  r|  rY  ry  rz  r  )r   c_constsr  longest_pystring	encodingsr  decls_writerr   r  r)  cliteralr  utf16_arrayutf32_arrayr  py_string_countencodings_mapr;  c_cnameencodings_indexr  r  s                         r   r  z%GlobalState.generate_string_constants;  sn   YY8O8V8V8X8XYYY
EE		 	 	 z.1# 	R 	RKAua%:1?KKH>U>>(>>>     |'q''*::: (+1?';';$!"!4!4!6!6 R RIMM"9"9)"D"DEEE%%qwIO0D0Di&PQQQQt=CCEEFF 		- 		-HAu'5'Ma'P'P$K =""#;<<<UUUKKKXYYY -""7+++"""P[P[P[#\]]]""8,,, 	FJ'(	 	
ho 0 'i..
 
 
1
   	 	 	: j//
>"(()bf6L)b)b)b)b)bccc66v7Msx6yyy9%%	3V9 4 4	!8K8K8KY8K8K8KMM	)8L8LMMM	,,,IIi    
 	 	 	
 	
<v?UUVVV*3J*?*? 	 	&A&I+,C,CI,N,NOO"-JJ./555&&&7   
 GGL P      	
!"""	k55m_UUVVV$45&&&??@VWWWW000))$/::::	<	= 	= 	= 	= 	=r   c                    | j         d         }dt          j         dt          j         d}| j        sx|                    |           |                    dt          j         d           |                    d           |                                 |                    d           d S d	}d
}d
}d
}d
}d
}d
}	| j        D ]}
|
j        }|j	        sTt          |t          |j                  |j        z
            }t          ||j                  }t          ||j                  }t          |t          |
j                            }t          ||j        d
                   }t          |	t          |j                            }	|	dz  }|                    t'          j        d|                                 d|                                 d|                                 d|                                 d|                                 d|                                 d|                                 d                     |                     t.                              dd                     |                    |           |                    d           |                    d           | j        D ]}
|
                    |d           |                    d           |                    d           |                    d           |                    d           |                    d           |                                 |                    d           t          | j                  }| j         d                             dt          j         d| d           |                     t          j        |d !           d S )"Nr  zint __Pyx_CreateCodeObjects(r  r  r  r  r  r  i  r   /   z=        typedef struct {
            unsigned int argcount : z.;
            unsigned int num_posonly_args : z-;
            unsigned int num_kwonly_args : z%;
            unsigned int nlocals : z#;
            unsigned int flags : z(;
            unsigned int first_line : z/;
            unsigned int line_table_length : z;;
        } __Pyx_PyCode_New_function_description;
        
NewCodeObjr  z)PyObject* tuple_dedup_map = PyDict_New();z*if (unlikely(!tuple_dedup_map)) return -1;badzPy_DECREF(tuple_dedup_map);zbad:r  r  r  r  r  Fr  )r  r   r   r  r  r  r   r  def_nodeis_generator_expressionr   r   r  num_kwonly_argsnum_posonly_argsvarnamesrt  node_positionsr  r   r  
bit_lengthr  r|  rY  generate_codeobjr@  r  )r   r  init_function	max_flagsmax_func_argsmax_kwonly_argsmax_posonly_argsmax_varsmax_linemax_positionsrA  r  max_linetable_lencode_object_counts                 r   r  z)GlobalState.generate_codeobject_constants  s   J)*k6+Gkk6Khkkk 	 ( 	m,,,GGJ)FJJJKKKGGK      GGCLLLF 	- 	M 	MD}H3 T #M3x}3E3EH`3` a a"%ox7O"P"P#&'79R#S#S 8S%7%788H8X\!_55Hs83J/K/KLLMM *B.	ho 
%2%=%=%?%?
 
 .>-H-H-J-J
 
 -<,F,F,H,H	
 

 %-$7$7$9$9
 
 #,"6"6"8"8
 
 (0':':'<'<
 
 /@.J.J.L.L
 
 
 
 
 
	 
	 
	 	k55lDWXXYYY	-(((	;<<<	<===- 	, 	,D!!!U++++	-...			-...			 9::
>"(()ef6M)e)ePa)e)e)efff66v7NPav{6|||||r   c                    d | j                                         D             }|                                 | j        d         }|D ]\  }}}}}}|j        }| j        d                             d|z             | j        d                             d|z             | j        d                             d|z             |d	k    rd
}	nK|dk    rd}	nBt          j        |          rd}	n+t          |	                    d                    dk    rd}	nd}	|
                    |          }
|                    |
d|	|z  d|                    |
| j                             d S )Nc                 ~    g | ]:}|j         |j        d          dk    t          |j                  |j        |j        |f;S )r   rZ  )r  r7  r   r  r  s     r   rW  z6GlobalState.generate_num_constants.<locals>.<listcomp>  sO     : : : 9agajC/QWqwVWX : : :r   r  r  zPyObject *%s;r  z!Py_CLEAR(clear_module_state->%s);r  z-__Pyx_VISIT_CONST(traverse_module_state->%s);r   zPyFloat_FromDouble(%s)r$  zPyLong_FromString("%s", 0, 0)rZ     zPyLong_FromLong(%sL)zPyLong_FromLong(%s) = z; )r  r-  r  r  r  r   r   long_literalr   lstripry  error_goto_if_nullr  )r   r  r  r  r   r7  r  r)  r  function
init_cnames              r   r  z"GlobalState.generate_num_constants  s   : :/6688: : :$4539 	Q 	Q/GQ5*aGEJ~&,,_u-DEEEJ+,223e;= = =J./55?%GI I I'!!3F"":#E** 1:U\\#&&''!++10'HHOOJ  

Hz11111*doNNN"P Q Q Q Q%	Q 	Qr   c                     || j         v rM| j         |         }t          |j                  t          |j                  k    sJ |j        |j        k    sJ dS || j         |<   dS )NFT)r  r   r   r}  )r   r  r  r   s       r   rq  zGlobalState.should_declare  sj    D((((/Euz??c%*oo5555:++++5*/D '4r   c                     |                                 }	 | j        |         }nH# t          $ r; t          | j                  }| j                            |           || j        |<   Y nw xY w|S r   )get_filenametable_entryr  rK   r   r  rB  )r   source_descr  indexs       r   lookup_filenamezGlobalState.lookup_filename*  s    3355	/'.EE 	/ 	/ 	/*++E%%k222).D&&&	/ s   $ AA)(A)c                 j   	 | j         |         S # t          $ r Y nw xY w|                    dd          }	 d |D             }t          |d          r|                                 n*# t          |d          r|                                 w w xY w|s|                    d           || j         |<   |S )NrO  rP  )r  error_handlingc                     g | ]A}d |                                                     dd                              dd          z   BS )z * r}  z.*[inserted by cython to avoid comment closer]/z/*z-/[inserted by cython to avoid comment start]*)r;  r  r  s     r   rW  z7GlobalState.commented_file_contents.<locals>.<listcomp><  sd     * * *
  ..J gI  * * *r   closer1  )r  rK   	get_linesr   r  rB  )r   r  source_fileFs       r   commented_file_contentsz#GlobalState.commented_file_contents4  s    	+K88 	 	 	D	!++W;C , E E		$* *
 )* * *A {G,, $!!### {G,, $!!####$!((2,,,01 -s    
A( ('Bc                     |r:|| j         vr3| j                             |           |                    |            dS dS dS )a  
        Adds code to the C file. utility_code should
        a) implement __eq__/__hash__ for the purpose of knowing whether the same
           code has already been included
        b) implement put_code, which takes a globalstate instance

        See UtilityCode.
        N)r  rA  r  )r   r  s     r   r  zGlobalState.use_utility_codeM  sZ      	(L0BBB""<000!!$'''''	( 	(BBr   c                     |d S |j         r|                     |j                    |j        r|                     |j                   d S d S r   )r  r  utility_code_definitionr  s     r   use_entry_utility_codez"GlobalState.use_entry_utility_codeZ  sc    =F 	6!!%"4555( 	A!!%"?@@@@@	A 	Ar   r   ry  )r1  r1  T)/r   r   r   rp  r  r  r   r  r	  r  r  r  r  r"  r*  r,  r1  r5  r:  r<  r  rC  rH  r9  r&  rK  rV  rM  r4  r   r.  rg  r  ru  rs  r  r  r~  r}  r  r  r  rq  r  r  r  r  r   r   r   r  r  B  s       : J& & &KR  M! ! ! !629 29 29h< < <
  .  (! (! (!TG G G
. . . .          
 
 
       ? ? ?     1 1 1
    . . . .9C 9 9 9 9
  
 
 
	! 	! 	!
  
  
 & & &~ ~ ~ ~( ( (Tc c c2x= x= x=tE} E} E}NQ Q Q@      2( ( (A A A A Ar   r  c                 p    | j         t          j                  fd}fd}t          ||          S )Nc                 $     | j                   S r   )	funcstate)r   attribute_ofs    r   r   z!funccontext_property.<locals>.getf  s    |DN+++r   c                 4    t          | j        |           d S r   )r   r  )r   r7  r&  s     r   r   z!funccontext_property.<locals>.seth  s    e,,,,,r   )r   r   
attrgetterr   )r  r   r   r  r&  s      @@r   funccontext_propertyr  c  s]    =D&t,,L, , , , ,- - - - -Cr   c                       e Zd ZddZdS )CCodeConfigTc                 0    || _         || _        || _        d S r   )emit_code_commentsr  c_line_in_traceback)r   r  r  r  s       r   r   zCCodeConfig.__init__r  s     "4*#6   r   N)TTT)r   r   r   r   r   r   r   r  r  m  s(        
7 7 7 7 7 7r   r  c                      e Zd ZdZ ej        d           dd            Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             ZddZdd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'dd'Z(dd(Z)d) Z*d* Z+dd+Z,d, Z-d- Z.dd.Z/d/ Z0d0 Z1d1 Z2d2 Z3dd3Z4d4 Z5e6d5             Z7e6d6             Z8d7 Z9d8 Z:dd:Z;dd;Z<d< Z=d= Z>d> Z?d? Z@d@ ZAdA ZBdBeCfdCZDdD ZEdE ZFdF ZGdG ZHdH ZIdI ZJdJ ZKdK ZL	 	 ddLZMdM ZNdN ZOdO ZPdP ZQeRfdQZSdR ZTdS ZUdT ZVdU ZWdV ZXdW ZYddXZZddYZ[ddZZ\dd[Z]dd\Z^dd]Z_d^ Z`d_ Zad` Zbda Zcdb Zddc Zedd Zfde Zgdf Zhdg Zidh Zjdi Zkdj Zldk Zmdl Zndm ZoddoZpdp Zqdq ZrddrZsddtZtdduZudv Zvdw ZwddxZxddyZydz Zzd{ Z{dd|Z|dd}Z}d~ Z~d ZddZddZddZd Zd Zd Zd Zd Zd ZddZddZddZddZd Zd ZddZddZddZddZd Zd ZddZd Zd ZddZd ZddZeC                    dd          fdZd Zd Zd ZdS )r  a  
    Utility class to output C code.

    When creating an insertion point one must care about the state that is
    kept:
    - formatting state (level, bol) is cloned and used in insertion points
      as well
    - labels, temps, exc_vars: One must construct a scope in which these can
      exist by calling enter_cfunc_scope/exit_cfunc_scope (these are for
      sanity checking and forward compatibility). Created insertion points
      looses this scope and cannot access it.
    - marker: Not copied to insertion point
    - filename_table, filename_list, input_file_contents: All codewriters
      coming from the same root share the same instances simultaneously.
    create_fromNFc                    |t                      }|| _        d | _        d | _        g | _        d | _        d | _        d | _        d| _        d| _	        d| _
        |f|                     |j                   |j        | _        |r$|j        | _        |j
        | _
        |j	        | _	        |j        | _        |j        | _        d S d S )Nr   r   )r   bufferlast_poslast_marked_pospyclass_stackr  r  r  level
call_levelbolr  )r   r  r  copy_formattings       r   r   zCCodeWriter.__init__  s    >LNN6#
"!!+"9:::(2DN 9(.
&?"-"8'0DM#.#>D    #"r   c                 (    t          |||          }|S r   r  )r   r  r  r
  rz  s        r   
create_newzCCodeWriter.create_new  s     [&/BBr   c                 >    | j         J || _         |j        | _        d S r   )r  r  )r   global_states     r   r  zCCodeWriter.set_global_state  s*    '''''3r   c                 :    | j                             |           d S r   )r  copyto)r   r  s     r   r  zCCodeWriter.copyto  s    1r   c                 4    | j                                         S r   )r  getvaluer   s    r   r  zCCodeWriter.getvalue  s    {##%%%r   c                 f    d|v r|                      |           d S |                     |           d S Nr  )_write_lines_write_to_bufferr   r  s     r   r   zCCodeWriter.write  s?    199a     !!!$$$$$r   c                     | j         r| j         d d         nd}| j        j                            |g|                    d          z             |                     |           d S )Nr   Nr   r  )r  r  markersextendrd  r  )r   r  filename_lines      r   r  zCCodeWriter._write_lines  sf     594HW,RaR00i""M?QWWT]]#BCCCa     r   c                 :    | j                             |           d S r   )r  r   r  s     r   r  zCCodeWriter._write_to_buffer  s    !r   c                 d    |                      | | j                                        d          }|S )NT)r  r  r
  )r  r  r  r  s     r   r  zCCodeWriter.insertion_point  s-    D9T9T9V9Vhlmmr   c                 "    t          |           S )z
        Creates a new CCodeWriter connected to the same global state, which
        can later be inserted using insert.
        r   r  r   s    r   
new_writerzCCodeWriter.new_writer  s    
 t,,,,r   c                 d    |j         | j         u sJ | j                            |j                   dS )z
        Inserts the contents of another code writer (created with
        the same global state) in the current location.

        It is ok to write to the inserted writer also after insertion.
        N)r  r  insert)r   r  s     r   r#  zCCodeWriter.insert  s9     !T%555556=)))))r   c                     d S r   r   r   s    r   r  zCCodeWriter.label_counter  s    !Tr   c                     d S r   r   r   s    r   r  zCCodeWriter.return_label       Dr   c                     d S r   r   r   s    r   r  zCCodeWriter.error_label      4r   c                     d S r   r   r   s    r   r  zCCodeWriter.labels_used  r(  r   c                     d S r   r   r   s    r   r  zCCodeWriter.continue_label  s    "dr   c                     d S r   r   r   s    r   r  zCCodeWriter.break_label  r(  r   c                     d S r   r   r   s    r   return_from_error_cleanup_labelz+CCodeWriter.return_from_error_cleanup_label  s    /3tr   c                     d S r   r   r   s    r   r  zCCodeWriter.yield_labels  r&  r   Tc              #   &  K   t          ||          D ]}\  }}|                     |          s|r|                     |           d}||                     ||           |                     |           ||fV  |                     |           ~dS )a  
        Helper for generating multiple label interceptor code blocks.

        @param new_labels: the new labels that should be intercepted
        @param orig_labels: the original labels that we should dispatch to after the interception
        @param skip_to_label: a label to skip to before starting the code blocks
        @param pos: the node position to mark for each interceptor block
        @param trace: add a trace line for the pos marker or not
        N)trace)r   ra  put_gotomark_posr  )r   rY  orig_labelsskip_to_labelrt  r0  r<  
orig_labels           r   label_interceptorzCCodeWriter.label_interceptor  s       "%Z!=!= 	& 	&E:??5))  %m,,, $c///NN5!!!*%%%%MM*%%%%	& 	&r   c                 6    | j                             |          S r   )r  r  r   r&  s     r   r  zCCodeWriter.new_label	  s    dn.F.Ft.L.L'Lr   c                       | j         j        | S r   )r  r  r   r  s     r   r  zCCodeWriter.new_error_label	      .Ldn.Ld.S'Sr   c                       | j         j        | S r   )r  rA  r:  s     r   rA  zCCodeWriter.new_yield_label	  r;  r   c                 4    | j                                         S r   )r  rH  r   s    r   rH  zCCodeWriter.get_loop_labels	  s    dn.L.L.N.N'Nr   c                 6    | j                             |          S r   )r  rL  rJ  s     r   rL  zCCodeWriter.set_loop_labels	  s    dn.L.LV.T.T'Tr   c                       | j         j        | S r   )r  rQ  r:  s     r   rQ  zCCodeWriter.new_loop_labels	  r;  r   c                 4    | j                                         S r   )r  rT  r   s    r   rT  zCCodeWriter.get_all_labels	      dn.K.K.M.M'Mr   c                 6    | j                             |          S r   )r  rV  rJ  s     r   rV  zCCodeWriter.set_all_labels	  s    dn.K.KF.S.S'Sr   c                 4    | j                                         S r   )r  r[  r   s    r   r[  zCCodeWriter.all_new_labels	  rA  r   c                 6    | j                             |          S r   )r  r_  r]  s     r   r_  zCCodeWriter.use_label	  s    dn.F.Fs.K.K'Kr   c                 6    | j                             |          S r   )r  ra  r]  s     r   ra  zCCodeWriter.label_used	  s    dn.G.G.L.L'Lr   c                 2    t          | |          | _        d S )N)r  )r  r  r  s     r   enter_cfunc_scopezCCodeWriter.enter_cfunc_scope"	  s    &t5999r   c                 X    | j         d S | j                                          d | _         d S r   )r  r7  r   s    r   r  zCCodeWriter.exit_cfunc_scope%	  s.    >!F$$&&&r   c                    | j         j        d         }|                    d| d           |                     |           |                     d           |                     d| d           |r|                                  dS dS )z
        Init code helper function to start a cfunc scope and generate
        the prototype and function header ("static SIG {") of the function.
        r  zstatic CYTHON_SMALL_CODE ; /*proto*/r1  static  {N)r  r  r   rG  put_declare_refcount_context)r   	signaturer  r  r   s        r   r  zCCodeWriter.start_initcfunc+	  s    
  &'>?F	FFFGGGu%%%

2

+Y+++,,, 	0--/////	0 	0r   c                 b   |                     |          }d|                    |           d| d}|r7| j        d                             |                    dd          dz              |r|                     |           |                     d           |                     |dz              d S )	NrK  rr  r  r  CYTHON_UNUSED r1  rJ  rL  )mangle_internalr  r  r   r  rG  )	r   class_scopereturn_typec_slot_nameargs_signatureneeds_funcstateneeds_prototypeslotfunc_cnamedeclarations	            r   start_slotfunczCCodeWriter.start_slotfunc8	  s    $44[AA` < <^ L L``~``` 	gW%++K,?,?@PRT,U,UXe,efff 	0"";///

2

;%&&&&&r   c                 h    |                      | j                            ||          j                  S r   )name_in_module_stater  r*  r  )r   r'  r(  s      r   
get_py_intzCCodeWriter.get_py_intF	  s3    ((**9h??E
 
 	
r   c                 h    |                      | j                            ||          j                  S r   )r\  r  r,  r  )r   r'  r  s      r   get_py_floatzCCodeWriter.get_py_floatK	  s3    ((,,Y
CCI
 
 	
r   c                 ^    |                      | j                            ||                    S r   )r\  r  r1  )r   rD  r/  s      r   r1  zCCodeWriter.get_py_constP	  s0    (())&)<<
 
 	
r   c                 @    | j                             |          j        S r   )r  r:  r  rG  s     r   r:  zCCodeWriter.get_string_constU	  s    0066<<r   c                 6    | j                             |          S r   )r  r<  rG  s     r   r<  z#CCodeWriter.get_pyunicode_ptr_constX	  s    77===r   c                 l    | j                             ||          j        }|                     |          S r   )r  r  r  r\  )r   r  r  r  s       r   r  zCCodeWriter.get_py_string_const[	  s9     44* # 	((///r   c                 \    |                      | j                            |                    S r   )r\  r  rC  )r   rA  s     r   rC  z CCodeWriter.get_py_codeobj_const`	  s'    (()9)N)Nt)T)TUUUr   c                 f    |                      | j                            |          j                  S r   )r\  r  r5  r  r   r   s     r   r5  z&CCodeWriter.get_argument_default_constc	  s+    (()9)T)TUY)Z)Z)`aaar   c                 ,    |                      |          S r   rF  rG  s     r   r  zCCodeWriter.internf	  s    ''---r   c                 0    |                      |d          S rE  rF  rG  s     r   intern_identifierzCCodeWriter.intern_identifieri	  rI  r   c                 6    | j                             |          S r   )r  r"  r   s     r   r"  z'CCodeWriter.get_cached_constants_writerl	  s    ;;FCCCr   c                     | j         j        |                     |          S | j         j                            |          S r   )r  r  ry  r\  )r   r  s     r   r\  z CCodeWriter.name_in_module_stateo	  s<    >' 88???~#88???r   c                 $    t           j         d|  S r  )r   r  r  s    r   ry  z,CCodeWriter.name_in_main_c_code_module_statey	  s    
 /::5:::r   c                 $    t           j         d|  S r  )r   r  r  s    r   name_in_slot_module_statez%CCodeWriter.name_in_slot_module_state	  s     0;;E;;;r   c                 R    |j         r|j        S |                     |j                  S r   )is_py_class_scopenamespace_cnamer\  r  s     r   namespace_cname_in_module_statez+CCodeWriter.namespace_cname_in_module_state	  s.    " 	D((,,U-BCCCr   c                 R    |j         r|                     |j                  S |j        S r   )is_extension_typer\  typeptr_cnamerf  s     r   typeptr_cname_in_module_statez)CCodeWriter.typeptr_cname_in_module_state	  s-    ! 	&,,T-?@@@%%r   r1  c                 x   | j         r| j        r|                                  | j        j        r@| j        r9| j        \  }}}|                     d| d|                                 d           |r-|r|                     |           n| 	                    |           |                     d           d| _        d S )Nz
#line z "r  r  r   )
r  r	  emit_markerr  r  r  r  get_escaped_descriptionput_safer  )r   r   r  r  rK  r   s         r   r   zCCodeWriter.putln	  s    = 	TX 	) 	]d.B 	]#'#7 Kq[[[1T1T1V1V[[[\\\ 	 d####$r   c                 h    |d S | j         r| j         d d         |d d         k    rd S ||f| _        d S )Nr   )r  r  r   rt  r0  s      r   r2  zCCodeWriter.mark_pos	  sI    ;F 	D$8!$<BQB$G$GFer   c                 "   | j         \  }}|| _        d | _         |                     d           | j        j        r<|                                  |                     |                     |                     |r|                     |           d S d S r  )r  r  r  r  r  indent_build_markerwrite_trace_liner|  s      r   rx  zCCodeWriter.emit_marker	  s    ]
U"$. 	7KKMMMd0055666 	'!!#&&&&&	' 	'r   c                 <   | j         r| j         j        r| j        j        d         rv|                                  |                     d|d         dd|                     |          dd| j         j         dd|                     |           d	           d S d S d S d S )N	linetracez__Pyx_TraceLine(r   r   r  z)
)	r  r"  r  rp  r~  r  pos_to_offsetr#  rz  r   rt  s     r   r  zCCodeWriter.write_trace_line	  s   > 	Fdn6 	F4;K;VWb;c 	FKKMMM E3q6  E  E  Ed.@.@.E.E  E  E  EdnNfJf  E  E  Ekokzkz{~kk  E  E  EF F F F F	F 	F 	F 	F 	F 	Fr   c                 N   |\  }}}t          |t                    sJ | j                            |          }|t	          d|dz
            |         }|dxx         dz  cc<   ||||dz            z  }d                    |          }d|                                 d|d	d| d
S )Nr   r$   r   z             # <<<<<<<<<<<<<<r   r  z/* "z":r   z
*/
)r   r   r  r  r   r   ry  )r   rt  r  rK  colcontentsr'  r   s           r   r  zCCodeWriter._build_marker	  s    !$T3+'788888#;;KHHQQ,-b			44			$tAv+&&yyUk99;;UUtUUUUUUUr   c                 >    |                      |           d| _        d S r  )r   r	  r   r   s     r   rz  zCCodeWriter.put_safe	  s    

4r   c                    | j         j        }|rt          |          dk    rt          j        |                    d                                                    }| d| d}t          j        	                    ||          }t          j        
                    |          s| dt          j                     }d}	 t          j        |          5 }	|	                    |           d d d            n# 1 swxY w Y   t          j        ||           d}n7# t"          t$          f$ r# t          j        
                    |          s Y nw xY w|s3t          j        
                    |          rt          j        |           n<# |s4t          j        
                    |          rt          j        |           w w w xY w|                    dd	          }
d
|
 d}|                     |           d S )Ni   r  r   z.hz.tmpFTr  r2  z
#include "r  )r  r  r   hashlibsha256encode	hexdigestr   r   r   existsgetpidr   open_new_filer   shutilmover>   rX   unlinkr  r  )r   r   r&  include_dirr   include_filer   tmp_pathdoner  c_paths              r   r  zCCodeWriter.put_or_include	  s(   &A 	,3t99t++>$++f"5"566@@BBD"--T---L7<<\::D7>>$'' ,"55	55,,X66 &!& & & & & & & & & & & & & & &K$///DD'9    7>>$//     ,BGNN8$<$< ,	(+++   ,BGNN8$<$< ,	(++++, , \\$,,F++++DsN    D C6*D 6C::D =C:>D F 1E
F EF 9F?c                    d}d|v r|                     d          }nd}d|v rS||                     d          z  }|dk     r| xj        |z  c_        n$|dk    r|d         dk    rd}| xj        dz  c_        | j        r|                                  |                     |           d| _        |dk    r| xj        |z  c_        d S |r| xj        dz  c_        d S d S )NF{r   r  Tr   )rd  r  r	  r~  r   )r   r   
fix_indentdls       r   r  zCCodeWriter.put	  s    
$;;CBBB$;;$**S//!BAvv

b 


qT!W^^!


a

8 	KKMMM

466JJ"JJJJ 	JJ!OJJJJ	 	r   r%  c                    |j         rJ |j                    |                    | | j        d           |                    | j                   |j        r5t          j        r+|                    | j        d         | j        d           d S d S d S )Nr!  r  r~  )r   r&  r  r  r  r~  r	   r  )r   r%  s     r   put_code_herezCCodeWriter.put_code_here	  s     =..',...!!$(8&AAA&&t'7888? 	Rw< 	R%% !23T5EyR R R R R	R 	R 	R 	Rr   c                 &    | xj         dz  c_         d S Nr   r  r   s    r   increase_indentzCCodeWriter.increase_indent
      

a



r   c                 &    | xj         dz  c_         d S r  r  r   s    r   decrease_indentzCCodeWriter.decrease_indent

  r  r   c                 X    |                      d           |                                  d S )Nr  )r   r  r   s    r   begin_blockzCCodeWriter.begin_block
  s)    

3r   c                 X    |                                   |                     d           d S )Nr  )r  r   r   s    r   	end_blockzCCodeWriter.end_block
  s'    

3r   c                 @    |                      d| j        z             d S )Nz  )r  r  r   s    r   r~  zCCodeWriter.indent
  s#    dTZ/00000r   c                 <    dt          |          dz   d d         z  S )Nz0x%02X%02X%02X%02X)r   r   r   r   r  )r   )r   	pyversions     r   get_py_version_hexzCCodeWriter.get_py_version_hex
  s#    #uY'7'7)'CRaR&HHHr   c                 V    || j         j        v r|                     d|z             d S d S )Nz%s:;)r  r  r   r]  s     r   r  zCCodeWriter.put_label
  s6    $.,,,JJv|$$$$$ -,r   c                 j    | j                             |           |                     d|z             d S )Ngoto %s;)r  r_  r   r]  s     r   r1  zCCodeWriter.put_goto
  s5      %%%

:#$$$$$r   c                    |j         dk    r|s	|j        sd S |j         dk    r	|j        sd S |j        s|                     d           |r|                     d|z             |j        r5|                     |j                            |j        |                     n4|                     |j        	                    |j        |                     |j
        6|                     d|j                            |j
                  z             n!|j        j        r|                     d           |                     d           | j        j                            |           d S )NprivaterP  %s )dll_linkagez = %sz = NULLr  )
visibilitydefined_in_pxdr  cf_usedr  is_cpp_optionalr   cpp_optional_declaration_coder  r  r}  rz  literal_codeis_pyobjectr   r  r  r  )r   r  storage_classr  
definitions        r   put_var_declarationzCCodeWriter.put_var_declaration#
  sy    y((*(@T(Fy(((F} 	'HH%&&& 	,HHU]*+++  	7HHUZ== > 6 6 7 7 7 7 HHUZ00 1 6 6 7 7 7:!MM'EJ$;$;EJ$G$GGHHHHZ# 	 HHY

333E:::::r   c                    |j         D ]\  }}}}|j        r/|j        s(|j        j        d         r|                    |          }n|                    |          }|j        r|                     d|z             r|j	        r4|                     |d|
                    |j                  d           |                     |rdpd|d           |j        r| j        j        rd}nd}|                     |dt          j        d	           |                     |d
t          j        d           |                     |dt          j        d	           d S d S )Nrd  z
%s = NULL;r  r  rK  r1  rP  zint z = 0;zconst char *z = NULL;)r$  ro  rk  r  rp  r  r  r  r   r  r  default_valuer+  r  r,  r   lineno_cnamefilename_cnameclineno_cname)r   func_contextr&  r   rv  rw  r  unuseds           r   put_temp_declarationsz!CCodeWriter.put_temp_declarations=
  s   .:.J 
	I 
	I*D$
F  3)? 3LDVDabnDo 399$??,,T22 I

<$.////( I

t/@/@AS/T/T/T/TUVVVV

f&:&@b&@$$$GHHHH6 	I~2 *)JJ&&&&2E2E2EFGGGJJVVVV=R=R=RSTTTJJ&&&&2F2F2FGHHHHH	I 	Ir   c                 n    |                      t          j                   |                      d           d S r3  )r   r   GENERATED_BY_MARKERr   s    r   put_generated_byzCCodeWriter.put_generated_byT
  s*    

5,---

2r   c                 f    |                      d|z             |                      d|z             d S )Nz
#ifndef %sz
#define %sr   )r   guards     r   put_h_guardzCCodeWriter.put_h_guardX
  s6    

<%'(((

<%'(((((r   c                 (    t           j        rd|z  S |S )Nzunlikely(%s))r	   gcc_branch_hintsr   conds     r   unlikelyzCCodeWriter.unlikely\
  s    # 	!D((Kr   c                 T    |sdS dd                     fd|D                       z  S )Nr1  r  r  c                 (    g | ]} ||          S r   r   )rS  rL  mappers     r   rW  z8CCodeWriter.build_function_modifiers.<locals>.<listcomp>e
  s#     @ @ @! @ @ @r   )r   )r   	modifiersr  s     `r   build_function_modifiersz$CCodeWriter.build_function_modifiersb
  s<     	2sxx @ @ @ @i @ @ @AAAAr   c                     |j         }|j        s|j                                         r|j         j        r
d|j        z   S |j        S )Nz(PyObject *))r   is_self_argis_completert  r  )r   r  r   s      r   entry_as_pyobjectzCCodeWriter.entry_as_pyobjecti
  sK    z! 	%**@*@*B*B 	:/	!EK//;r   c                 ,    ddl m}m}  ||||          S )Nr   py_object_typetypecast)rc  r  r  )r   r  r   r  r  s        r   as_pyobjectzCCodeWriter.as_pyobjectq
  s.    88888888xe444r   c                 2    |                     | |           d S r   )generate_gotrefr  s      r   
put_gotrefzCCodeWriter.put_gotrefu
  s    T5)))))r   c                 2    |                     | |           d S r   )generate_giverefr  s      r   put_giverefzCCodeWriter.put_giverefx
      dE*****r   c                 2    |                     | |           d S r   )generate_xgiverefr  s      r   put_xgiverefzCCodeWriter.put_xgiveref{
  s    tU+++++r   c                 2    |                     | |           d S r   )generate_xgotrefr  s      r   put_xgotrefzCCodeWriter.put_xgotref~
  r  r   c                 6    |                     | ||           d S N)r  )generate_increfr   r  r   r  s       r   
put_increfzCCodeWriter.put_incref
  s%     	T566666r   c                 6    |                     | ||           d S r  )generate_xincrefr  s       r   put_xincrefzCCodeWriter.put_xincref
  s#    dE77777r   c                 8    |                     | |||           d S N)r  have_gil)generate_decrefr   r  r   r  r  s        r   
put_decrefzCCodeWriter.put_decref
  s%    T5IIIIIr   c                 8    |                     | |||           d S r  )generate_xdecrefr  s        r   put_xdecrefzCCodeWriter.put_xdecref
  s%    dEJJJJJr   c                 :    |                     | ||||           d S N)r  r  r  )generate_decref_clearr   r  r   r  r  r  s         r   put_decref_clearzCCodeWriter.put_decref_clear
  s5    ""4DW$)H 	# 	> 	> 	> 	> 	>r   c                 :    |                     | ||||           d S r  )generate_xdecref_clearr  s         r   r  zCCodeWriter.put_xdecref_clear
  s5    ##D%EX$)H 	$ 	> 	> 	> 	> 	>r   c                 4    |                     | ||           d S r   )generate_decref_setr   r  r   	rhs_cnames       r   put_decref_setzCCodeWriter.put_decref_set
  s       ui88888r   c                 4    |                     | ||           d S r   )generate_xdecref_setr	  s       r   put_xdecref_setzCCodeWriter.put_xdecref_set
  s     !!$y99999r   c                 6    |                     | ||           d S N)r  )generate_incref_memoryviewslice)r   slice_cnamer   r  s       r   put_incref_memoryviewslicez&CCodeWriter.put_incref_memoryviewslice
  s#    ,,T;,RRRRRr   c                 J    |                      |j        |j        |           d S r  )r  r  r   )r   r  r  s      r   put_var_incref_memoryviewslicez*CCodeWriter.put_var_incref_memoryviewslice
  s'    ''UZ('SSSSSr   c                 F    |                      |j        |j                   d S r   )r  r  r   r  s     r   put_var_gotrefzCCodeWriter.put_var_gotref
  s     UZ00000r   c                 F    |                      |j        |j                   d S r   )r  r  r   r  s     r   put_var_giverefzCCodeWriter.put_var_giveref
  "    ej11111r   c                 F    |                      |j        |j                   d S r   )r  r  r   r  s     r   put_var_xgotrefzCCodeWriter.put_var_xgotref
  r  r   c                 F    |                      |j        |j                   d S r   )r  r  r   r  s     r   put_var_xgiverefzCCodeWriter.put_var_xgiveref
  s"    %+uz22222r   c                 8     | j         |j        |j        fi | d S r   )r  r  r   r   r  kwdss      r   put_var_increfzCCodeWriter.put_var_incref
  (    UZ88488888r   c                 8     | j         |j        |j        fi | d S r   )r  r  r   r   s      r   put_var_xincrefzCCodeWriter.put_var_xincref
  )    ej99D99999r   c                 8     | j         |j        |j        fi | d S r   )r  r  r   r   s      r   put_var_decrefzCCodeWriter.put_var_decref
  r#  r   c                 8     | j         |j        |j        fi | d S r   )r  r  r   r   s      r   put_var_xdecrefzCCodeWriter.put_var_xdecref
  r&  r   c                 F     | j         |j        |j        fd|j        i| d S Nr  )r  r  r   
in_closurer   s      r   put_var_decref_clearz CCodeWriter.put_var_decref_clear
  s2    ek5:dd5K[d_cdddddr   c                 :     | j         |j        |j        |fi | d S r   )r  r  r   r   r  r
  r!  s       r   put_var_decref_setzCCodeWriter.put_var_decref_set
  s+    EKYGG$GGGGGr   c                 :     | j         |j        |j        |fi | d S r   )r  r  r   r0  s       r   put_var_xdecref_setzCCodeWriter.put_var_xdecref_set
  s+    U[%*iHH4HHHHHr   c                 F     | j         |j        |j        fd|j        i| d S r,  )r  r  r   r-  r   s      r   put_var_xdecref_clearz!CCodeWriter.put_var_xdecref_clear
  s2    u{EJeeEL\e`deeeeer   r   c                     |D ]=}|r|j         r2|j        r|                     |           (|                     |           >d S r   )r  xdecref_cleanupr*  r(  )r   entries	used_onlyr  s       r   put_var_decrefszCCodeWriter.put_var_decrefs
  sc     	/ 	/E /
 /( /((////''...	/ 	/r   c                 :    |D ]}|                      |           d S r   )r*  r   r8  r  s      r   put_var_xdecrefszCCodeWriter.put_var_xdecrefs
  s2     	( 	(E  ''''	( 	(r   c                 :    |D ]}|                      |           d S r   )r5  r<  s      r   put_var_xdecrefs_clearz"CCodeWriter.put_var_xdecrefs_clear
  s2     	. 	.E&&u----	. 	.r   c                     ddl m}m}  |||d          }|r|                     |d|d           d S |                     |d|d           d S )Nr   r  Py_Noner  z; __Pyx_INCREF(Py_None);z; Py_INCREF(Py_None);)rc  r  r  r   )r   r  r   r  r  r  py_nones          r   put_init_to_py_nonezCCodeWriter.put_init_to_py_none
  s    88888888(4;; 	JJJEEE777KLLLLLJJHIIIIIr   %sc                     ||j         z  }|                     ||j        |           |j        r|                     d           d S d S )NrA  )r  rC  r   r-  r  )r   r  r   r  r   s        r   put_init_var_to_py_nonez#CCodeWriter.put_init_var_to_py_none
  sY    %+% 	  uz5999 	(Y'''''	( 	(r   c                 z   d}|j         s|j        dk    rSddlm} |j        t          vr?|                    |j                  rd}n"|j        dk    r| j        j        d         sn|rd S |j        	                                }|sd S |j         r||j
        gz  }|r|                    |          n|j        }|j                                        }	|	dk    rd	|	d
|}|j                                        }
|rb|                    | j        j                                      |j                  }|                                }|r|                     |           |                     d|
d|dd                    |          d|j        r|j        ndd|
           |r|r|                     d           d S d S d S )NF__getattribute__r   )	TypeSlotsT__getattr__fast_getattrPyCFunctionz(void(*)(void))(r  r  z, (PyCFunction)r0  |r  r  r  )
is_specialr&  r1  rI  special_py_methodsis_binop_number_slotr  rp  rN  method_flagsmethod_coexistput_pymethoddef_wrapper
func_cnamemethod_function_typeas_c_string_literalget_slot_tableget_slot_by_method_namepreprocessor_guard_coder   r   doc	doc_cname)r   r  term
allow_skipwrapper_code_writeris_number_slotrI  rQ  func_ptrcast
entry_nameslotpreproc_guards                r   put_pymethoddefzCCodeWriter.put_pymethoddef
  s)    	uz-???######z!33311%*==  &*NNZ=009I9TUc9d0   F3355 	F 	7Y566LI\r&>>uEEEbgbr3355=   26$$AHZ3355
 	* ++D,<,GHH``afakllD 88::M *

=)))




&&&&#(95#55	 	 	  	!m 	!JJx     	! 	! 	! 	!r   c                    |j         }|j        r|j                                        pg }ddlm} ||v rt          j        |z   }|                     d|z             d|j         z  }|j	        dk    rC|                     d|z             |                     d           |                     d           n|                     d	|z             |                     d
           |S )Nr   )method_noargszBstatic PyObject *%s(PyObject *self, CYTHON_UNUSED PyObject *arg) {z%s(self)r   zPyObject *res = %s;zFif (!res && !PyErr_Occurred()) { PyErr_SetNone(PyExc_StopIteration); }zreturn res;z
return %s;r  )
rT  rN  rN  rQ  rI  rg  r   method_wrapper_prefixr   r&  )r   r  rT  rQ  rg  	func_calls         r   rS  z#CCodeWriter.put_pymethoddef_wrapper  s    %
 	  ?7799?RL000000,,#9JF


_bllmmm&)99	:++JJ4y@AAAJJghhhJJ}----JJ|i7888

3r   c                     | j         j        d         r5| j                             t                              dd                     d S | j                             t                              dd                     d S )Nfast_gilFastGilr  	NoFastGil)r  rp  r  r|  rY  r   s    r   use_fast_gil_utility_codez%CCodeWriter.use_fast_gil_utility_code0  sr    &z2 	i--k.E.EiQd.e.efffff--k.E.EkSf.g.ghhhhhr   c                 V   | j         j        d         dk    rddlm}  || j        dd           | j                             t                              dd                     |                                  |sd	}|r| 	                    d
           | 
                    d|z             dS )a  
        Acquire the GIL. The generated code is safe even when no PyThreadState
        has been allocated for this thread (for threads not initialized by
        using the Python API). Additionally, the code generated by this method
        may be called recursively.
        subinterpreters_compatiblenor   )warningzTAcquiring the GIL is currently very unlikely to work correctly with subinterpreters.r   ForceInitThreadsr  __pyx_gilstate_savezPyGILState_STATE z%s = __Pyx_PyGILState_Ensure();N)r  rp  Errorsrr  r  r  r|  rY  rn  r  r   )r   declare_gilstatevariablerr  s       r   put_ensure_gilzCCodeWriter.put_ensure_gil6  s     &'CDLL''''''G$f  
 	))##$68KLL	N 	N 	N&&((( 	.,H .,---

4x?@@@@@r   c                 f    |                                   |sd}|                     d|z             dS )zD
        Releases the GIL, corresponds to `put_ensure_gil`.
        rt  z__Pyx_PyGILState_Release(%s);N)rn  r   )r   rw  s     r   put_release_ensured_gilz#CCodeWriter.put_release_ensured_gilM  sA     	&&((( 	-,H

2X=>>>>>r   c                     |                      d           |                      dt          j         d           |                      d           d S )N-#if CYTHON_COMPILING_IN_CPYTHON_FREETHREADINGzPyMutex_Lock(&r  r  r   r   parallel_freethreading_mutexr   s    r   put_acquire_freethreading_lockz*CCodeWriter.put_acquire_freethreading_lockV  sN    

BCCC

KF$GKKKLLL

8r   c                     |                      d           |                      dt          j         d           |                      d           d S )Nr|  zPyMutex_Unlock(&r  r  r}  r   s    r   put_release_freethreading_lockz*CCodeWriter.put_release_freethreading_lock[  sN    

BCCC

Mf&IMMMNNN

8r   c                    |                                   |                     d           |r|                     d|z             |r|                     d           |                     d           |rU|                     d           |                     d           |                                  |                     d           dS dS )	z
        Acquire the GIL. The thread's thread state must have been initialized
        by a previous `put_release_gil`
        z__Pyx_FastGIL_Forget();z_save = %s;zif (_save) {Py_BLOCK_THREADSr  ##if CYTHON_COMPILING_IN_LIMITED_APIr  N)rn  r   rz  r   rw  unknown_gil_states      r   put_acquire_gilzCCodeWriter.put_acquire_gil`  s    
 	&&(((

,--- 	1JJ}x/000 	'JJ~&&&

%&&& 	!JJsOOOJJ<===((***JJx     		! 	!r   c                 6   |                                   |                     d           |                     d           |r}|                     d           |                                  |                     d           |                     d           |                     d           |                     d           |                     d           |r|                     d	           |r|                     d
|z             |                     d           dS )z2Release the GIL, corresponds to `put_acquire_gil`.zPyThreadState *_save;z_save = NULL;r  r  zif (PyGILState_Check())r  r  Py_UNBLOCK_THREADSr  z%s = _save;z__Pyx_FastGIL_Remember();N)rn  r   rx  r  s      r   put_release_gilzCCodeWriter.put_release_gilr  s   &&(((

*+++

?### 
	 JJ<=== !!!JJwJJ0111JJx   JJsOOO

'((( 	JJsOOO 	1JJ}x/000

./////r   c                 0    |                      d           d S )Nz%PyGILState_STATE __pyx_gilstate_save;r  r   s    r   rv  zCCodeWriter.declare_gilstate  s    

:;;;;;r   c                 ^    |                      d|d|                     |                    S )Nif (z < 0) )r   rz  )r   rt  r7  s      r   put_error_if_negzCCodeWriter.put_error_if_neg  s0     zzzeeeT__S5I5I5IJKKKr   c                    |rdnd}|j         rd}nA|j        j        r
|j        rd}n+|j        j        r|j        r|j        s|j        j        rd}nd}| j        	                    t                              | | d                     |s|j                            |j                  }|                     d|d	d
| | d|j                                        d|                     |          d	           d S )NNogilr1  RaiseClosureNameErrorRaiseCppGlobalNameErrorRaiseCppAttributeErrorRaiseUnboundLocalErrorri  zif (unlikely(!z)) { rj  rr  z); z })from_closurer   ro  
is_cglobalis_variable	is_memberr  is_c_class_scoper  r  r|  rY  check_for_null_coder  r   r&  rV  rz  )r   rt  r  in_nogil_contextunbound_check_code	nogil_tagr  s          r   put_error_if_unboundz CCodeWriter.put_error_if_unbound  sN   /7GGR	 		,*DDZ$ 	,)9 	,,DDZ$ 	,): 	,5? 	,W\WbWs 	, ,DD+D))''4(<(<(<>PQQ	S 	S 	S " 	M!&!?!?!L!L


 2 2 2 : :y : : : : %
 > > @ @ @ @ $ 4 4 4 4	6 	7 	7 	7 	7 	7r   c                     d| j         _        |rd| j         _        d|                     |d                   d|d         dS )NTz__PYX_MARK_ERR_POS(r   r0  r   r  )r  r+  r,  r  )r   rt  r  s      r   set_error_infozCCodeWriter.set_error_info  sO    8<5 	726DN/  Q((((FFF 	r   c                     | j         j        }| j                             |           |d|z  S d| j         _        |rd| j         _        d|                     |d                   d|d         d|dS )Nr  Tz
__PYX_ERR(r   r0  r   r  )r  r  r_  r+  r,  r  )r   rt  r  r^  s       r   rz  zCCodeWriter.error_goto  s    n(  %%%;##8<5 	726DN/  Q((((FFFCC 	r   c                 ^    d|                      |          d|                     |          S )Nr  rx  )r  rz  )r   r  rt  s      r   error_goto_ifzCCodeWriter.error_goto_if  s0     #}}T2222DOOC4H4H4HIIr   c                 4    |                      d|z  |          S )Nz!%sr  r   r  rt  s      r   r  zCCodeWriter.error_goto_if_null  s    !!%%-555r   c                 4    |                      d|z  |          S )Nz(%s < 0)r  r  s      r   error_goto_if_negzCCodeWriter.error_goto_if_neg  s    !!*u"4c:::r   c                 .    |                      d|          S )NzPyErr_Occurred()r  r  s     r   r  zCCodeWriter.error_goto_if_PyErr  s    !!"4c:::r   c                 6    | j                             |          S r   )r  r  )r   r  s     r   r  zCCodeWriter.lookup_filename  s    //999r   c                 0    |                      d           d S )N__Pyx_RefNannyDeclarationsr  r   s    r   rM  z(CCodeWriter.put_declare_refcount_context  s    

/00000r   c                     |                                 }|r3| j                            t                              dd                     |                     d||rdpdfz             d S )Nrs  r  z#__Pyx_RefNannySetupContext(%s, %d);r   r   )rV  r  r  r|  rY  r   )r   r&  acquire_gils      r   r  z&CCodeWriter.put_setup_refcount_context  s~    '')) 	R--''(:<OPPR R R

8D+BSRSBXWX;YYZZZZZr   c                 8    |                      |rdnd           d S )Nz"__Pyx_RefNannyFinishContextNogil()z__Pyx_RefNannyFinishContext();r  r   nogils     r   r  z'CCodeWriter.put_finish_refcount_context  s&    

5f77Ffgggggr   c                     |                                 }||rt          j        ndt          j        t          j        f}d| j        _        |                     d|z             dS )z
        Build a Python traceback for propagating exceptions.

        qualified_name should be the qualified name of the function.
        r   Tz#__Pyx_AddTraceback(%s, %s, %s, %s);N)rV  r   r  r  r  r  r,  r   )r   qualified_nameinclude_clineformat_tuples       r   put_add_tracebackzCCodeWriter.put_add_traceback  se     (;;==$18F  q!	
 /3+

8<GHHHHHr   c                     |t           j        t           j        t           j        | j        j        d         |f}d| j        _        |                     d|z             | j        	                    t                              dd                     dS )z
        Generate code to print a Python warning for an unraisable exception.

        qualified_name should be the qualified name of the function.
        unraisable_tracebacksTz0__Pyx_WriteUnraisable("%s", %s, %s, %s, %d, %d);WriteUnraisableExceptionzExceptions.cN)r   r  r  r  r  rp  r  r,  r   r  r|  rY  )r   r  r  r  s       r   put_unraisablezCCodeWriter.put_unraisable  s      !'(?@
 /3+

ETUUU))##$>OO	Q 	Q 	Q 	Q 	Qr   c                 J    | j         j        d         p| j         j        d         S )Nprofiler  )r  rp  r   s    r   
is_tracingzCCodeWriter.is_tracing  s$    *95a9I9TU`9aar   c                 v    | j         j        }|r||j        vr|j        }|r	||j        v|r|j        |         ndS )zk
        Calculate a fake 'instruction offset' from a node position as 31 bit int (32 bit signed).
        r   )r  r  node_positions_to_offsetparent_scope)r   rt  r  s      r   r  zCCodeWriter.pos_to_offset  sZ     $ 	'5#AAA&E  	'5#AAA6;Bu-c22Br   c                 8    |                      |rdnd           d S )N__Pyx_TraceDeclarationsGen__Pyx_TraceDeclarationsFuncr  )r   is_generators     r   put_trace_declarationsz"CCodeWriter.put_trace_declarations  s&    

<b//Ebcccccr   c                 >    |r|                      d|z             d S d S )Nz__Pyx_TraceFrameInit(%s)r  )r   codeobjs     r   put_trace_frame_initz CCodeWriter.put_trace_frame_init  s2     	=JJ1G;<<<<<	= 	=r   c                 T   |rdnd}|                      | d|                                 dt          j         d|                     |d                    d|d          d|                     |          d	d|d	d|rt          j        nd
 d|                     |           d           d S )N__Pyx_TraceStartGen__Pyx_TraceStartFuncrr  r0  r  r   ], r   r   r  r  )r   rV  r   filetable_cnamer  r  skip_dispatch_cnamerz  )r   r&  rt  r  r  is_cpdef_func
trace_funcs          r   put_trace_startzCCodeWriter.put_trace_start  s   .:V**@V


  '')) % (,(<(<SV(D(D  1v  !!#&&,	 
 N  .;Cv))  s##  
	
 
	
 
	
 
	
 
	
r   c                 T    |                      dt          |          dd           d S )Nz__Pyx_PyMonitoring_ExitScope(r   r  )r   r   r  s     r   put_trace_exitzCCodeWriter.put_trace_exit"  s/    

D4;;DDDDEEEEEr   c           	          |                      |          }|                     d| d|                     |           d| d           d S )Nz__Pyx_TraceYield(r0  r  rz  r   r  )r   retvalue_cnamert  rz  s       r   put_trace_yieldzCCodeWriter.put_trace_yield%  sV    __S))


b~bb9K9KC9P9PbbT^bbbcccccr   c                 |   | j         j        }|j        r|j        j        d         n|d         }|j                                        }|                     |d                   }|                     |          }|                     d| dt          j
         d| d| d|                     |           d| d           d S )Nr   r   z__Pyx_TraceResumeGen(r0  r  r  r  )r  r  scope_classrt  r&  rV  r  rz  r   r   r  r  )r   rt  r  
first_liner&  filename_indexrz  s          r   put_trace_resumezCCodeWriter.put_trace_resume)  s    $161BNU&*1--A
z--//--c!f55__S))


 % (6    !!#&&	 
   	
 	
 	
 	
 	
r   c           
          |                      d|                     |           dt          |          ddt          |          dd           d S )N__Pyx_TraceException(r0  r   r  r   r  r   )r   rt  reraisefreshs       r   put_trace_exceptionzCCodeWriter.put_trace_exception:  sZ    

j4+=+=c+B+Bjjd7mmjjjY]^cYdYdjjjjkkkkkr   c                 L    |                      dt          j         d           d S )Nr  z, 0, 0);)r   r   r  r   s    r   put_trace_exception_propagatingz+CCodeWriter.put_trace_exception_propagating=  s)    

H6+>HHHIIIIIr   c                 ^    |                      d|                     |           d           d S )Nz__Pyx_TraceExceptionHandled(r  )r   r  r  s     r   put_trace_exception_handledz'CCodeWriter.put_trace_exception_handled@  s4    

M$2D2DS2I2IMMMNNNNNr   c                     |                      d|                     |           dt          |          dd           d S )Nz__Pyx_TraceExceptionUnwind(r0  r   r  r  )r   rt  r  s      r   put_trace_unwindzCCodeWriter.put_trace_unwindC  sF    

]1C1CC1H1H]]DQVKK]]]]^^^^^r   c           	          |                      |          }|                     d| d|                     |           d| d           d S )Nz__Pyx_TraceStopIteration(r0  r  r  )r   rt  r7  rz  s       r   put_trace_stopiterationz#CCodeWriter.put_trace_stopiterationF  sV    __S))


auaa8J8J38O8OaaS]aaabbbbbr   c                 Z   d}d}|nG|j         r|                    |          }n*|j        rd}n |j        rd}n|j        rd}d|j         }nd}|                     |          }|                     | d| | d|                     |           dt          |          dd| d           d S )	Nr1  __Pyx_TraceReturnValuerA  __Pyx_TraceReturnCValuer0  rr  r   r  )	r  r  is_void	is_stringto_py_functionrz  r   r  r   )r   r  rt  rS  r  	extra_argr  r  s           r   put_trace_returnzCCodeWriter.put_trace_returnJ  s    	-
$ 	'(44^DDNN  	'&NN" 		'&NN' 	'2J9[799II 'N--

j~~>~9~~@R@RSV@W@W~~[_`e[f[f~~~lz~~~r   DefaultPlacementNewrf  c                 l    | j                             |           |                     d| d           d S )Nz$__Pyx_default_placement_construct(&(z));)r  r  r   )r   r!  _utility_codes      r   put_cpp_placement_newz!CCodeWriter.put_cpp_placement_newb  s=    ))-888

E&EEEFFFFFr   c                     |                      d           |                      |           |                      d           d S )Nz#ifdef _OPENMPz#endif /* _OPENMP */r  )r   strings     r   putln_openmpzCCodeWriter.putln_openmpg  s@    

#$$$

6

)*****r   c                    |                      d|z             |                      d           |                      d           |                      d           |                      d           |                      d           dS )zl
        Redefine the macros likely() and unlikely to no-ops, depending on
        condition 'cond'
        #if %s    #undef likely    #undef unlikelyz    #define likely(x)   (x)z    #define unlikely(x) (x)r  Nr  r  s     r   undef_builtin_expectz CCodeWriter.undef_builtin_expectl  s~    
 	

8d?###

&'''

()))

0111

0111

8r   c                    |                      d|z             |                      d           |                      d           |                      d           |                      d           |                      d           d S )Nr  r  r  z2    #define likely(x)   __builtin_expect(!!(x), 1)z2    #define unlikely(x) __builtin_expect(!!(x), 0)r  r  r  s     r   redef_builtin_expectz CCodeWriter.redef_builtin_expectx  s|    

8d?###

&'''

()))

GHHH

GHHH

8r   )NNF)NNTr   r  )TF)r1  Fr  )r1  NT)TT)FTTr  )rD  T)TNNT)FNry  )FFFr  )r   r   r   r   cythonr   r   r  r  r  r  r   r  r  r  r!  r#  r  r  r  r  r  r  r  r-  r  r6  r  r  rA  rH  rL  rQ  rT  rV  r[  r_  ra  rG  r  r  rZ  r]  r_  r1  r:  r<  r  rC  r5  r  ri  r"  r\  r   ry  rn  rr  rv  r   r2  rx  r  r  rz  r  r  r|  r  r  r  r  r  r~  r  r  r1  r  r  r  r  r  modifier_output_mapperr  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.  r1  r3  r5  r:  r=  r?  rC  rF  re  rS  rn  rx  rz  r  r  r  r  rv  r  r  r  rz  r  r  r  r  r  rM  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rR  r  r  r  r   r   r   r   r  r  x  s
        < V]}---? ? ? .-?4  4 4 4
  & & &% % %! ! !    - - -* * * !! !      "" " 33 3    & & & &2 MLLLSSSSSSNNNTTTSSSMMMSSSMMMKKKLLL: : :  0 0 0 0
' 
' 
' 
'
 
 


 
 


 
 
 

= = => > >0 0 0 0
V V Vb b b. . .? ? ?D D D D@ @ @ ; ; \; < < \<
D D D& & &   % % % %	' 	' 	'F F FV V V  
  8  .	R[ 	R 	R 	R 	R        1 1 1I I I% % %% % % 8:9=; ; ; ;4I I I.  ) ) )   :P B B B B  5 5 5* * *+ + +, , ,+ + +7 7 7 78 8 8 8J J J JK K K K> > > >> > > >9 9 9: : :S S ST T T1 1 12 2 22 2 23 3 39 9 9: : :9 9 9: : :e e eH H HI I If f f/ / / /( ( (. . .J J J J( ( ( (/! /! /! /!b  ,i i iA A A A.? ? ? ?  
  
! ! ! !$0 0 0 0.< < <
L L L
7 7 7 70      J J J6 6 6; ; ;; ; ;: : :1 1 1[ [ [ [h h h hI I I I"Q Q Q Q&b b bC C Cd d d d= = = =
 
 
 
F F F Fd d d
 
 
"l l l lJ J JO O O_ _ _ _c c c@ @ @ @2 -8,<,<=RTd,e,eG G G G
+ + +

 
 
    r   r  c                   &    e Zd Zd Zd Zd Zd ZdS )PyrexCodeWriterc                 F    t          j        |          | _        d| _        d S r  )r   r  r  r  )r   outfile_names     r   r   zPyrexCodeWriter.__init__  s    $\22


r   c                 T    | j                             d| j        z  |d           d S )Nr  r  )r  r   r  r  s     r   r   zPyrexCodeWriter.putln  s/    tz!1!1444899999r   c                 &    | xj         dz  c_         d S r  r  r   s    r   r~  zPyrexCodeWriter.indent  r  r   c                 &    | xj         dz  c_         d S r  r  r   s    r   r  zPyrexCodeWriter.dedent  r  r   N)r   r   r   r   r   r~  r  r   r   r   r  r    sP          : : :      r   r  c                   t    e Zd ZdZddZddZddZed	             Zd
 Z	d Z
ddZddZd Zd Zd Zd ZdS )PyxCodeWriterz7
    Can be used for writing out some Cython code.
    Nr   r}   c                 v    |pt                      | _        || _        || _        || _        || _        i | _        d S r   )r   r  r  original_levelr  r  _insertion_points)r   r  indent_levelr  r  s        r   r   zPyxCodeWriter.__init__  s=    .!
* !#r   r   c                 &    | xj         |z  c_         dS r  r  r   levelss     r   r~  zPyxCodeWriter.indent  s    

f

tr   c                 &    | xj         |z  c_         d S r   r  r  s     r   r  zPyxCodeWriter.dedent  s    

f



r   c              #      K   |                      |           |                                  dV  |                                  dS )zf
        with pyx_code.indenter("for i in range(10):"):
            pyx_code.putln("print i")
        N)r   r~  r  )r   rK  s     r   indenterzPyxCodeWriter.indenter  sA       	

4r   c                 4    | j                                         S r   )r  emptyr   s    r   r  zPyxCodeWriter.empty  s    {  """r   c                     | j                                         }t          |t                    r|                    | j                  }|S r   )r  r  r   r   rQ  r  )r   rz  s     r   r  zPyxCodeWriter.getvalue  s?    %%''fe$$ 	2]]4=11Fr   c                     || j         | j         }|t          ||          }| j                            |r| j        dz   | dnd           d S )Nz    r  )r  r  r  r   r  )r   rK  r  s      r   r   zPyxCodeWriter.putln  sf    ?|',tW--DdLTZ&0:$::::MMMMMr   c                     || j         | j         }|t          ||          }t          || j        dz            }| j                            |           d S )Nr  )r  r  _indent_chunkr  r  r   )r   chunkr  s      r   	put_chunkzPyxCodeWriter.put_chunk  s\    ?|',w//EeTZ!^44%     r   c                 x     t          |           | j                                        | j        | j                  S r   )r   r  r  r  r  r   s    r   r  zPyxCodeWriter.insertion_point  s.    tDzz$+5577T\RRRr   c                 P    | j                                          | j        | _        d S r   )r  resetr  r  r   s    r   r!  zPyxCodeWriter.reset  s&     	(


r   c                 >    |                                  | j        |<   d S r   )r  r  r8  s     r   named_insertion_pointz#PyxCodeWriter.named_insertion_point  s!    '+';';'='=t$$$r   c                     | j         |         S r   )r  r8  s     r   r  zPyxCodeWriter.__getitem__  s    %d++r   )Nr   Nr}   )r   r   )r   r   r   r   r   r~  r  r   r  r  r  r   r  r  r!  r#  r  r   r   r   r  r    s         $ $ $ $         ^# # #  N N N N! ! ! !S S S) ) )> > >, , , , ,r   r  r  indentation_lengthrX  c                   	 d| vsJ |                      d          }|s| S |d                             d          }|r||d<   n|d= |sdS t          |           dz   }t          |          D ]8\  }}t	          |          }|dz   t          |          k    rd||<   0||k     r|}9|t          |           k    rd}||k     rd||z
  z  fd	|D             }n||k    r||z
  		fd
|D             }d                    |          S )zONormalise leading space to the intended indentation and strip empty lines.
    	T)keependsr   r  r  r   r   c                 *    g | ]}|d k    r|z   nd S )r  r   )rS  rK  
add_indents     r   rW  z!_indent_chunk.<locals>.<listcomp>  s;     
 
 
 "&J4
 
 
r   c                 4    g | ]}|d k    r
|d         nd S )r  Nr   )rS  rK  starts     r   rW  z!_indent_chunk.<locals>.<listcomp>  s=     
 
 
 !DLLDLLd
 
 
r   r1  )r  r;  r   r   _count_indentationr   )
r  r%  r'  	last_linemin_indentationr  rK  line_indentationr*  r,  s
           @@r   r  r    s   
 ud++E b	  %%I b		"I 	4 #&e**q.O U## / /4-d33a3t99,,E!HH//.OU##+++.@A

 
 
 

 
 
 
-	-	-+.@@
 
 
 

 
 

 775>>r   r   r  c                 D    d}t          |           D ]\  }}|dk    r n|S )Nr   r  )r   )r  r  chs      r   r-  r-    s:     A1  299E Hr   c                        e Zd Zd Zd Zd ZdS )r  c                 >    || _         i | _        i | _        d| _        d S r  )klassr$  r%  temps_count)r   r5  s     r   r   zClosureTempAllocator.__init__  s&    
!r   c                 r    | j                                         D ]\  }}t          |          | j        |<   d S r   )r$  r"  r   r%  )r   r   r  s      r   r!  zClosureTempAllocator.reset!  sC     06688 	1 	1LD&$(LLDOD!!	1 	1r   c                 f   || j         vrg | j         |<   g | j        |<   n-| j        |         r | j        |                             d          S dt          j        | j        fz  }| j                            d |||d           | j         |                             |           | xj        dz  c_        |S )Nr   r9  T)rt  r&  r  r   is_cdefr   )	r$  r%  rr  r   rt  r6  r5  declare_varrB  )r   r   r  s      r   r{  z"ClosureTempAllocator.allocate_temp%  s    t+++)+D &$&DOD!!_T" 	0?4(,,Q///&79IJJ
4e5tUYZZZT"))%000Ar   N)r   r   r   r   r!  r{  r   r   r   r  r    sA          1 1 1
 
 
 
 
r   r  r   )Vr  declarer   r  r   r   r   r  r   r  r   	functoolsr   r   
contextlibr   r   collectionsr   r1  r   r	   r   r
   r   Scanningr   r   rr  ctypedef_builtins_mapbasicsize_builtins_mapKNOWN_PYTHON_BUILTINS_VERSIONr   KNOWN_PYTHON_BUILTINSuncachable_builtinsrO  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   Ur<  r  r  r:  r  findallr  r  r  r  r  r  r  r  r  finalccallr   r   r  	exceptvalcfuncr-  r  r   r   r   <module>rK     s     = = =&& =VV =ff =vv =='-v=7=v=NTf=V=.4f=CI6= !&= /5f= v	= (.v	= 6<V	= =   				 				         $ $ $ $ $ $ $ $ . . . . . . . . # # # # # #                               & & & & & & ' ' ' ' ' '
    *)*1   &  !7 !	 \# \# \# \ \ |   * $V^Iyy : 0 0    o  !/v8 8 	! ! I' I' I' I' I' I' I' I'X/ / /     6        | | | | |) | | |~D0 D0 D0 D0 D0/ D0 D0 D0N -1Ueidj & & & & &R 
6  * *	 * *K * * * * 		  	2 	2 	2 {
+  
W W 
W  ,	  / / / 
(  
7 7 
7    "&D" ( ( ( (&= = = = = = = =D. . . . .o . . . G9 G9 G9 G9 G9 G9 G9 G9T. . . . . . . .         6V"(A A A A(bj)924@@F &BJ'899? RZ 1226 ,--5< < < < < < < <~( ( ( ( ( ( ( ($^A ^A ^A ^A ^A ^A ^A ^AB  7 7 7 7 7 7 7 7F F F F F F F FR        $H, H, H, H, H, H, H, H,V , ,&* , , , ,  ,^ "# &*              r   