B
    \1              	   @   s(  d dl mZ d dlZd dlZd dlZd dlZd dlZyd dlZW n ek
r\   d dl	ZY nX d dl
mZmZ d dlmZ d dlZddlmZmZmZ ddlmZmZmZmZ ddlmZ dd	lmZ d
dlmZmZm Z  ddl!m"Z"m#Z# ddl$m%Z% d dl&Z'ej(dkZ)ej(d  dk r"dd Z*ndd Z*G dd deeZ+e d4ddZ,d5ddZ-d6ddZ.dd Z/e dd Z0i Z1e0d Z2d7d!d"Z3e-ej45e% d#ddd$d$dddf	d%d&Z6de6_7e8d'j9Z:d(d) Z;e8d*Z<d+d, Z=yd d-lm>Z> W n ek
r
   d.d/ Z>Y nX d0d1 Z?G d2d3 d3e@ZAdS )8    )absolute_importN)Distribution	Extension)	build_ext   )ContextCompilationOptionsdefault_options)CythonTransformSkipDeclarationsAnalyseDeclarationsTransformEnvTransform)parse_from_strings)_unicode   )strip_string_literals	cythonizecached_function)PipelineNodes)get_cython_cache_dir)   r   r   c             C   s   t | tr| dS | S d S )Nascii)
isinstancebytesdecode)s r   2lib/python3.7/site-packages/Cython/Build/Inline.py
to_unicode   s    

r   c             C   s   | S )Nr   )xr   r   r   <lambda>$   s    r!   c                   s,   e Zd Zdd Zdd Z fddZ  ZS )UnboundSymbolsc             C   s   t | d  t | _d S )N)r
   __init__setunbound)selfr   r   r   r#   (   s    zUnboundSymbols.__init__c             C   s"   |   |js| j|j |S )N)Zcurrent_envlookupnamer%   add)r&   noder   r   r   visit_NameNode+   s    zUnboundSymbols.visit_NameNodec                s   t t| | | jS )N)superr"   __call__r%   )r&   r*   )	__class__r   r   r-   /   s    zUnboundSymbols.__call__)__name__
__module____qualname__r#   r+   r-   __classcell__r   r   )r.   r   r"   '   s   r"   c             C   s   t | } |d krtg t}ddlm} td| }x2t|dD ]"}|d krLq>||}t||r>P q>W ydd l	}W n t
k
r   dd l}Y nX tt |tt| S )Nr   )r   z(tree fragment)Zpyxr   )r   r   r	   Compiler.ParseTreeTransformsr   r   r   Zcreate_pipeliner   builtinsImportError__builtin__tupler"   r$   dir)codecontextr   ZtreeZphaser4   r   r   r   unbound_symbols4   s     


r;   c             C   s"   t | }|tkrdS t| |S d S )NZlong)typeint	safe_type)argr:   py_typer   r   r   unsafe_typeH   s    rA   c             C   s   t | }|ttttfkr|jS |tkr*dS |tkr6dS |tkrBdS dt	j
krpt| t	j
d jrpd| jj| jf S xT| D ]H}|jdkrdS |j|jdd	}|rz||j}|jrzd
|j|jf S qzW dS d S )Nzdouble complexZdoubleZbintnumpyz"numpy.ndarray[numpy.%s_t, ndim=%s])r6   r4   objectF)Zneed_pxdz%s.%s)r<   listr7   dictstrr/   complexfloatboolsysmodulesr   ZndarrayZdtyper(   ndimmror0   find_moduler'   Zis_type)r?   r:   r@   Z	base_typemoduleentryr   r   r   r>   P   s(    
r>   c              C   s,   t  } |  }| | t| }|  |S )N)r   Zfind_config_filesZparse_config_filesr   Zfinalize_options)ZdistZconfig_filesbuild_extensionr   r   r   _get_build_extensionh   s    
rR   c             C   s   t t| tS )N)r   rD   r	   )cython_include_dirsr   r   r   _create_contexts   s    rT   ).c             C   s   x|D ]~}|| kr|d ks"|d krLt  jjj}|d kr>|j}|d krL|j}||krb|| | |< q||krx|| | |< qtd|  qW d S )NzCouldn't find %r)inspectcurrentframef_backf_locals	f_globalsprint)kwdsr;   localsglobalsZsymbolZcalling_framer   r   r   _populate_unbound{   s    
r_   ZinlineFc
       *         s  d krdd |r t t|nt t| }|d k	rt||| t }t fdd|D }t| |f}|d k	rdd |D }|| S | }t| } t	| \} }t
| } |d krt jjj}|d krt jjj}y"t|  t|< }t||| W n$ tk
r&   |s"td Y nX t|p2i }|	d k	rH|	|d< g }x8t D ](\}}|tkrZ|d|  |= qZW t}t fd	d|D }||tjtj|	tjf}d
tt|d   }|tj!krtj!| }nd }t"j#d krt$ }|%dt"_#t&j'(||t"j# }t&j')|sBt&*| |sVt&j'+|sg }g }t,-d}x`|D ]X\}}|.|} | rn|d| / d   | / d dkrndd l0}!||!1  qnW t2| \}"}#d(dd |D }$dd(||"|$|#d }%x"| D ]\}}&|%3||&}%qW t&j'(||d }'t4|'d}(z|(5|% W d |(6  X t7||'g||d})|d kr~t$ }t8|)g|pdg||d|_9t&j':|'|_;||_<|=  t>?||}|j@t||f< fdd|D }|j@| S )Nc             S   s   dS )NrC   r   )r    r   r   r   r!      s    zcython_inline.<locals>.<lambda>c                s   g | ]\}}| |fqS r   r   ).0r?   value)ctxget_typer   r   
<listcomp>   s    z!cython_inline.<locals>.<listcomp>c             S   s   g | ]}|d  qS )r   r   )r`   r?   r   r   r   rd      s    z>Could not parse code as a string (to extract unbound symbols).language_levelz
cimport cython as %sc                s   g | ]}|  |fqS r   r   )r`   r?   )rb   rc   r\   r   r   rd      s    Z_cython_inline_zutf-8 z([.\w]+)[.]z
cimport %sr   rB   z, c             S   s   g | ]}d | qS )z%s %sr   )r`   ar   r   r   rd      s    zf
%(module_body)s
%(cimports)s
def __invoke(%(params)s):
%(func_body)s
    return locals()
            
)cimportsmodule_bodyparams	func_bodyz.pyxw)r(   ZsourcesZinclude_dirsZextra_compile_argsrU   )Zinclude_pathZcompiler_directivesquietc                s   g | ]} | qS r   r   )r`   r?   )r\   r   r   rd      s    )ArT   r7   _cython_inline_default_context_cython_inline_cachegetr_   sorteditemsr   r   strip_common_indentrV   rW   rX   rY   rZ   r;   AssertionErrorr[   rE   rD   cython_moduleappendrJ   version_info
executableCython__version__hashlibmd5r   encodeZ	hexdigestrK   cython_inlineso_extrR   Zget_ext_filenameospathjoinexistsmakedirsisfilerecompilematchgroupsrB   Zget_includeextract_func_codereplaceopenwritecloser   r   
extensionsdirnameZ
build_tempZ	build_librunimpZload_dynamicZ__invoke)*r9   rc   Zlib_dirrS   Zcython_compiler_directivesZforcern   r]   r^   re   r\   Z_unbound_symbolsargsZarg_sigsZinvokearg_listZ	orig_codeliteralsri   r(   r?   Z	arg_nameskeyZmodule_namerO   rQ   Zmodule_pathZcflagsZc_include_dirsZ	qualifiedr<   _mrB   rj   rl   rk   Zmodule_codera   Zpyx_fileZfh	extensionr   )rb   rc   r\   r   r      s    












r   z[^ ]c             C   s   d }|   }xD|D ]<}t|}|s$q| }|| dkr:q|d ksJ||kr|}qW xJt|D ]>\}}t|}|r\|r\|||d  dkrq\||d  ||< q\W d|S )N#r   rh   )
splitlines_find_non_spacestart	enumerater   )r9   Z
min_indentlinesliner   indentixr   r   r   rt   	  s"    
rt   zI^((cdef +(extern|class))|cimport|(from .+ cimport)|(from .+ import +[*]))c             C   sp   g }g }|}|  dd} | d}x4|D ],}|dsJt|rF|}n|}|| q(W d|dd| fS )N	 rh   z    z
    )r   split
startswithmodule_statementr   rw   r   )r9   rO   ZfunctionZcurrentr   r   r   r   r   r     s    



r   )getcallargsc             O   s"  i }t | \}}}}|d k	r2|t|d  ||< xt||D ]\}}	|	||< q>W xBt| D ]2\}}	||kr`||krtd| ||||< q`W |d k	r|||< n|rtdt| |d krd}t|t| }
xDt|D ]8\}}||kr||
kr|||
  ||< qtd| qW |S )NzDuplicate argument %sz Unexpected keyword arguments: %sr   zMissing argument: %s)	rV   Z
getargspeclenziprD   rs   	TypeErrorpopr   )funcZ
arg_valuesZ
kwd_valuesallr   Zvarargsr\   defaultsr(   ra   Zfirst_defaultr   r   r   r   r   1  s0    

r   c             C   sB   |  d}| d d dkr.d| |d d   S | |d d  S d S )N:   lambdaz	return %sr   )index)sourcer   r   r   r   get_bodyM  s    
r   c               @   s   e Zd Zdd Zdd ZdS )RuntimeCompiledFunctionc             C   s   || _ tt|| _d S )N)_fr   rV   Z	getsource_body)r&   fr   r   r   r#   Y  s    z RuntimeCompiledFunction.__init__c             O   sZ   t | jf||}tr6t| jf| jj| jjd|S t| jf| jj| jjd|S d S )N)r]   r^   )r   r   IS_PY3r   r   __globals__Zfunc_globals)r&   r   r\   r   r   r   r   r-   ]  s     z RuntimeCompiledFunction.__call__N)r/   r0   r1   r#   r-   r   r   r   r   r   W  s   r   )N)N)N)NN)BZ
__future__r   rJ   r   r   rV   r   r|   r5   r}   Zdistutils.corer   r   Zdistutils.command.build_extr   rz   ZCompiler.Mainr   r   r	   r3   r
   r   r   r   ZCompiler.TreeFragmentr   ZCompiler.StringEncodingr   ZDependenciesr   r   r   ZCompilerr   r   ZUtilsr   Zcythonrv   rx   r   r   r"   r;   rA   r>   rR   rT   rp   ro   r_   r   r   r   r   r   searchr   rt   r   r   r   r   rC   r   r   r   r   r   <module>   s\    




v

