ó
¦V]c        
   @@  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 Wn e k
 r{ d  d l	 Z n Xd  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 „  Z* n	 d „  Z* d e e f d „  ƒ  YZ+ e  d d „ ƒ Z- d d „ Z. d d „ Z/ d „  Z0 e  d „  ƒ Z1 i  Z2 e1 d& ƒ Z3 d d d „ Z4 e. e j5 j6 e% ƒ  d ƒ d d e7 e7 d d d d „	 Z8 d e8 _9 e j: d ƒ j; Z< d „  Z= e j: d ƒ Z> d „  Z? y d  d  l m@ Z@ Wn e k
 r¯d! „  Z@ n Xd" „  ZA d# eB f d$ „  ƒ  YZC d S('   i    (   t   absolute_importN(   t   Distributiont	   Extension(   t	   build_exti   (   t   Contextt   CompilationOptionst   default_options(   t   CythonTransformt   SkipDeclarationst   AnalyseDeclarationsTransformt   EnvTransform(   t   parse_from_strings(   t   _unicodei   (   t   strip_string_literalst	   cythonizet   cached_function(   t   Pipelinet   Nodes(   t   get_cython_cache_diri   c         C@  s$   t  |  t ƒ r |  j d ƒ S|  Sd  S(   Nt   ascii(   t
   isinstancet   bytest   decode(   t   s(    (    s2   lib/python2.7/site-packages/Cython/Build/Inline.pyt
   to_unicode   s    c         C@  s   |  S(   N(    (   t   x(    (    s2   lib/python2.7/site-packages/Cython/Build/Inline.pyt   <lambda>$   t    t   UnboundSymbolsc           B@  s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C@  s    t  j |  d  ƒ t ƒ  |  _ d  S(   N(   R   t   __init__t   Nonet   sett   unbound(   t   self(    (    s2   lib/python2.7/site-packages/Cython/Build/Inline.pyR   (   s    c         C@  s2   |  j  ƒ  j | j ƒ s. |  j j | j ƒ n  | S(   N(   t   current_envt   lookupt   nameR    t   add(   R!   t   node(    (    s2   lib/python2.7/site-packages/Cython/Build/Inline.pyt   visit_NameNode+   s    c         C@  s   t  t |  ƒ j | ƒ |  j S(   N(   t   superR   t   __call__R    (   R!   R&   (    (    s2   lib/python2.7/site-packages/Cython/Build/Inline.pyR)   /   s    (   t   __name__t
   __module__R   R'   R)   (    (    (    s2   lib/python2.7/site-packages/Cython/Build/Inline.pyR   '   s   		c         C@  sê   t  |  ƒ }  | d  k r* t g  t ƒ } n  d d l m } t d |  ƒ } xK t j | d ƒ D]7 } | d  k rt q\ n  | | ƒ } t	 | | ƒ r\ Pq\ q\ Wy d d  l
 } Wn t k
 rÆ d d  l } n Xt t ƒ  | ƒ t t | ƒ ƒ ƒ S(   Ni   (   R	   s   (tree fragment)t   pyxi    (   R   R   R   R   t   Compiler.ParseTreeTransformsR	   R   R   t   create_pipelineR   t   builtinst   ImportErrort   __builtin__t   tupleR   R   t   dir(   t   codet   contextR	   t   treet   phaseR/   (    (    s2   lib/python2.7/site-packages/Cython/Build/Inline.pyt   unbound_symbols4   s     c         C@  s-   t  |  ƒ } | t k r d St |  | ƒ Sd  S(   Nt   long(   t   typet   intt	   safe_type(   t   argR5   t   py_type(    (    s2   lib/python2.7/site-packages/Cython/Build/Inline.pyt   unsafe_typeH   s    c         C@  s  t  |  ƒ } | t t t t f k r+ | j S| t k r; d S| t k rK d S| t k r[ d Sd t	 j
 k rš t |  t	 j
 d j ƒ rš d |  j j |  j f Sxt | j D]i } | j d k r½ d S| j | j d	 t ƒ} | r¤ | j | j ƒ } | j rd
 | j | j f Sq¤ q¤ Wd Sd  S(   Ns   double complext   doublet   bintt   numpys"   numpy.ndarray[numpy.%s_t, ndim=%s]R1   R/   t   objectt   need_pxds   %s.%s(   R1   R/   (   R:   t   listR2   t   dictt   strR*   t   complext   floatt   boolt   syst   modulesR   t   ndarrayt   dtypeR$   t   ndimt   __mro__R+   t   find_modulet   FalseR#   t   is_type(   R=   R5   R>   t	   base_typet   modulet   entry(    (    s2   lib/python2.7/site-packages/Cython/Build/Inline.pyR<   P   s(    (	c          C@  s<   t  ƒ  }  |  j ƒ  } |  j | ƒ t |  ƒ } | j ƒ  | S(   N(   R   t   find_config_filest   parse_config_filesR   t   finalize_options(   t   distt   config_filest   build_extension(    (    s2   lib/python2.7/site-packages/Cython/Build/Inline.pyt   _get_build_extensionh   s    	
c         C@  s   t  t |  ƒ t ƒ S(   N(   R   RE   R   (   t   cython_include_dirs(    (    s2   lib/python2.7/site-packages/Cython/Build/Inline.pyt   _create_contexts   s    t   .c         C@  sÇ   xÀ | D]¸ } | |  k r | d  k s1 | d  k ry t j ƒ  j j j } | d  k r^ | j } n  | d  k ry | j } qy n  | | k r– | | |  | <q¿ | | k r³ | | |  | <q¿ d | GHq q Wd  S(   Ns   Couldn't find %r(   R   t   inspectt   currentframet   f_backt   f_localst	   f_globals(   t   kwdsR8   t   localst   globalst   symbolt   calling_frame(    (    s2   lib/python2.7/site-packages/Cython/Build/Inline.pyt   _populate_unbound{   s    t   inlinec
   ,   	   K@  sÂ  | d  k r d „  } n  | r0 t t | ƒ ƒ n t } t j |  ƒ } | d  k	 rõ t |
 | | | ƒ t |
 j ƒ  ƒ } t g  | D]! \ } } | | | ƒ | f ^ q€ ƒ } t j |  | f ƒ } | d  k	 rõ g  | D] } | d ^ qÒ } | | Œ  Sn  |  } t	 |  ƒ }  t
 |  ƒ \ }  } t |  ƒ }  | d  k rIt j ƒ  j j j } n  | d  k rmt j ƒ  j j j } n  y+ t |  ƒ t | <} t |
 | | | ƒ Wn t k
 r¹| sºd GHqºn Xt | pÆi  ƒ } |	 d  k	 rå|	 | d <n  g  } xG t |
 j ƒ  ƒ D]3 \ } } | t k rþ| j d | ƒ |
 | =qþqþWt |
 ƒ } t g  | D] } | |
 | | ƒ | f ^ qKƒ } | | t j t j |	 t j f } d t j t | ƒ j d ƒ ƒ j  ƒ  } | t j! k rÛt j! | } nªd  } t" j# d  k rt$ ƒ  } | j% d ƒ t" _# n  t& j' j( | | t" j# ƒ } t& j' j) | ƒ sLt& j* | ƒ n  | set& j' j+ | ƒ rsg  } g  } t, j- d	 ƒ } x | D]w \ }  }! | j. |  ƒ }" |" r‡| j d
 |" j/ ƒ  d ƒ |" j/ ƒ  d d k rþd d  l0 }# | j |# j1 ƒ  ƒ qþq‡q‡Wt2 |  ƒ \ }$ }% d j( g  | D] }& d |& ^ q!ƒ }' d i d j( | ƒ d 6|$ d 6|' d 6|% d 6}( x, | j ƒ  D] \ } } |( j3 | | ƒ }( qvWt& j' j( | | d ƒ }) t4 |) d ƒ }* z |* j5 |( ƒ Wd  |* j6 ƒ  Xt7 d | d |) g d | d | ƒ }+ | d  k rt$ ƒ  } n  t8 |+ g d | p3d g d | d | ƒ| _9 t& j' j: |) ƒ | _; | | _< | j= ƒ  n  t> j? | | ƒ } | j@ t | | f <g  | D] } |
 | ^ qŸ} | j@ | Œ  S(   Nc         S@  s   d S(   NRC   (    (   R   (    (    s2   lib/python2.7/site-packages/Cython/Build/Inline.pyR   ‘   R   i   s>   Could not parse code as a string (to extract unbound symbols).t   language_levels   
cimport cython as %st   _cython_inline_s   utf-8R   s   ([.\w]+)[.]s   
cimport %si    RB   s   , s   %s %ssf   
%(module_body)s
%(cimports)s
def __invoke(%(params)s):
%(func_body)s
    return locals()
            s   
t   cimportst   module_bodyt   paramst	   func_bodys   .pyxt   wR$   t   sourcest   include_dirst   extra_compile_argst   include_pathR`   t   compiler_directivest   quiet(A   R   R_   R2   t   _cython_inline_default_contextt   _cython_inline_cachet   getRk   t   sortedt   itemsR   R   t   strip_common_indentRa   Rb   Rc   Rd   Re   R8   t   AssertionErrorRF   RE   t   cython_modulet   appendRK   t   version_infot
   executablet   Cythont   __version__t   hashlibt   md5R   t   encodet	   hexdigestRL   t   cython_inlinet   so_extR]   t   get_ext_filenamet   ost   patht   joint   existst   makedirst   isfilet   ret   compilet   matcht   groupsRB   t   get_includet   extract_func_codet   replacet   opent   writet   closeR   R   t
   extensionst   dirnamet
   build_tempt	   build_libt   runt   impt   load_dynamict   __invoke(,   R4   t   get_typet   lib_dirR^   t   cython_compiler_directivest   forceRy   Rg   Rh   Rm   Rf   t   ctxt   _unbound_symbolst   argsR=   t   valuet   arg_sigst   invoket   arg_listt	   orig_codet   literalsRo   R$   t	   arg_namest   keyt   module_nameRU   R\   t   module_patht   cflagst   c_include_dirst	   qualifiedR:   t   _t   mRB   Rp   Rr   t   aRq   t   module_codet   pyx_filet   fht	   extension(    (    s2   lib/python2.7/site-packages/Cython/Build/Inline.pyR‹   ‹   s´    42!(	&				s   [^ ]c         C@  sí   d  } |  j ƒ  } xi | D]a } t | ƒ } | s7 q n  | j ƒ  } | | d k rY q n  | d  k sq | | k r | } q q Wx_ t | ƒ D]Q \ } } t | ƒ } | s‹ | s‹ | | | d !d k rÎ q‹ n  | | | | <q‹ Wd j | ƒ S(   Nt   #i   s   
(   R   t
   splitlinest   _find_non_spacet   startt	   enumerateR   (   R4   t
   min_indentt   linest   lineR–   t   indentt   ix(    (    s2   lib/python2.7/site-packages/Cython/Build/Inline.pyR   	  s"    %sI   ^((cdef +(extern|class))|cimport|(from .+ cimport)|(from .+ import +[*]))c         C@  s¡   g  } g  } | } |  j  d d ƒ }  |  j d ƒ } xK | D]C } | j d ƒ sp t j | ƒ rg | } qp | } n  | j | ƒ q: Wd j | ƒ d d j | ƒ f S(   Ns   	t    s   
s       s   
    (   Rš   t   splitt
   startswitht   module_statementR–   R‚   R   (   R4   RU   t   functiont   currentRÇ   RÈ   (    (    s2   lib/python2.7/site-packages/Cython/Build/Inline.pyR™     s    		(   t   getcallargsc         O@  s–  i  } t  j |  ƒ \ } } } } | d  k	 rD | t | ƒ | | <n  x' t | | ƒ D] \ } }	 |	 | | <qT Wxa t | j ƒ  ƒ D]M \ } }	 | | k r | | k r¸ t d | ƒ ‚ n  | j | ƒ | | <q q W| d  k	 rë | | | <n | r
t d t | ƒ ƒ ‚ n  | d  k rd } n  t | ƒ t | ƒ }
 xZ t	 | ƒ D]L \ } } | | k rB| |
 k r{| | |
 | | <qŽt d | ƒ ‚ qBqBW| S(   Ns   Duplicate argument %ss    Unexpected keyword arguments: %ss   Missing argument: %s(    (
   Ra   t
   getargspecR   t   lent   zipRE   R~   t	   TypeErrort   popRÅ   (   t   funct
   arg_valuest
   kwd_valuest   allR¬   t   varargsRf   t   defaultsR$   R­   t   first_defaultRÊ   (    (    s2   lib/python2.7/site-packages/Cython/Build/Inline.pyRÑ   1  s0    	c         C@  s?   |  j  d ƒ } |  d  d k r/ d |  | d S|  | d Sd  S(   Nt   :i   t   lambdas	   return %si   (   t   index(   t   sourceRÊ   (    (    s2   lib/python2.7/site-packages/Cython/Build/Inline.pyt   get_bodyM  s    t   RuntimeCompiledFunctionc           B@  s   e  Z d  „  Z d „  Z RS(   c         C@  s%   | |  _  t t j | ƒ ƒ |  _ d  S(   N(   t   _fRâ   Ra   t	   getsourcet   _body(   R!   t   f(    (    s2   lib/python2.7/site-packages/Cython/Build/Inline.pyR   Y  s    	c         O@  so   t  |  j | | Ž } t rC t |  j d |  j j d |  j j | St |  j d |  j j d |  j j | Sd  S(   NRg   Rh   (   RÑ   Rä   t   IS_PY3R‹   Ræ   t   __globals__t   func_globals(   R!   R¬   Rf   RÚ   (    (    s2   lib/python2.7/site-packages/Cython/Build/Inline.pyR)   ]  s    ((   R*   R+   R   R)   (    (    (    s2   lib/python2.7/site-packages/Cython/Build/Inline.pyRã   W  s   	(   i   i    (   R`   (D   t
   __future__R    RK   RŽ   R”   Ra   R£   R‡   R0   Rˆ   t   distutils.coreR   R   t   distutils.command.build_extR   R…   t   Compiler.MainR   R   R   R-   R   R   R	   R
   t   Compiler.TreeFragmentR   t   Compiler.StringEncodingR   t   DependenciesR   R   R   t   CompilerR   R   t   UtilsR   t   cythonR   Rƒ   Rè   R   R   R   R8   R?   R<   R]   R_   R{   Rz   Rk   R   R   RR   R‹   RŒ   R•   t   searchRÃ   R   RÎ   R™   RÑ   Râ   RC   Rã   (    (    (    s2   lib/python2.7/site-packages/Cython/Build/Inline.pyt   <module>   s\   0"		v				
