ó
¦V]c           @@  s®   d  d l  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 e j	 f d „  ƒ  YZ
 d	 e f d
 „  ƒ  YZ d e j f d „  ƒ  YZ e d „ Z d S(   i    (   t   absolute_importi   (   t   parse_from_stringst   StringParseContext(   t   Symtab(   t   Naming(   t   Codet   NonManglingModuleScopec           B@  s&   e  Z d  „  Z d „  Z d d „ Z RS(   c         O@  sA   | |  _  d  |  _ | j d t ƒ |  _ t j j |  | | Ž d  S(   Nt   cpp(	   t   prefixt   Nonet   cython_scopet   popt   FalseR   R   t   ModuleScopet   __init__(   t   selfR   t   argst   kw(    (    s:   lib/python2.7/site-packages/Cython/Compiler/UtilityCode.pyR      s    		c         C@  s%   t  | _ t t |  ƒ j | | | ƒ S(   N(   t   Truet   usedt   superR   t   add_imported_entry(   R   t   namet   entryt   pos(    (    s:   lib/python2.7/site-packages/Cython/Compiler/UtilityCode.pyR      s    	c         C@  s[   | rD | t  j t  j t  j t  j f k r6 |  j } n  d | | f St j j |  | ƒ Sd  S(   Ns   %s%s(	   R   t   typeobj_prefixt   func_prefixt
   var_prefixt   pyfunc_prefixR   R   R   t   mangle(   R   R   R   (    (    s:   lib/python2.7/site-packages/Cython/Compiler/UtilityCode.pyR      s
    $N(   t   __name__t
   __module__R   R   R	   R   (    (    (    s:   lib/python2.7/site-packages/Cython/Compiler/UtilityCode.pyR   	   s   		t   CythonUtilityCodeContextc           B@  s#   e  Z d Z d d e e d  „ Z RS(   c      	   C@  s“   | r t  d ƒ ‚ n  | |  j k rP | |  j k rB t  d ƒ ‚ qP |  j | Sn  |  j d  k rŒ t |  j | d d  d |  d |  j ƒ|  _ n  |  j S(   Ns/   Relative imports not supported in utility code.s%   Only the cython cimport is supported.t   parent_modulet   contextR   (   t   AssertionErrort   module_namet   modulest   scopeR	   R   R   R   (   R   R$   t   relative_toR   t   need_pxdt   absolute_fallback(    (    s:   lib/python2.7/site-packages/Cython/Compiler/UtilityCode.pyt   find_module#   s    *N(   R   R   R	   R&   R   R*   (    (    (    s:   lib/python2.7/site-packages/Cython/Compiler/UtilityCode.pyR        s   t   CythonUtilityCodec        	   B@  sŒ   e  Z d  Z e Z d d d d d d d d d „ Z d „  Z d „  Z d „  Z	 e
 d d „ Z d „  Z e d d	 „ ƒ Z e
 d d d
 „ Z RS(   sR  
    Utility code written in the Cython language itself.

    The @cname decorator can set the cname for a function, method of cdef class.
    Functions decorated with @cname('c_func_name') get the given cname.

    For cdef classes the rules are as follows:
        obj struct      -> <cname>_obj
        obj type ptr    -> <cname>_type
        methods         -> <class_cname>_<method_cname>

    For methods the cname decorator is optional, but without the decorator the
    methods will not be prototyped. See Cython.Compiler.CythonScope and
    tests/run/cythonscope.pyx for examples.
    t	   __pyxutilt    c
         C@  sÛ   i  }
 | d  k	 r€ d d l m } x@ | j ƒ  D]2 \ } } t | | ƒ r/ | | | <| |
 | <q/ q/ Wt j | | | | ƒ } n  | |  _ | |  _ | |  _	 | |  _
 | p­ g  |  _ | |  _ |	 |  _ | |  _ |
 |  _ d  S(   Ni   (   t   BaseType(   R	   t
   PyrexTypesR.   t   itemst
   isinstanceR   t   sub_tempitat   implR   t   fileR   t   requirest
   from_scopet   outer_module_scopet   compiler_directivest   context_types(   R   R3   R   R   R5   R4   R6   R"   R8   R7   R9   R.   t   keyt   value(    (    s:   lib/python2.7/site-packages/Cython/Compiler/UtilityCode.pyR   F   s"    	
							c         C@  s-   t  | t ƒ r% |  j ƒ  | j ƒ  k St Sd  S(   N(   R1   R+   t   _equality_paramsR   (   R   t   other(    (    s:   lib/python2.7/site-packages/Cython/Compiler/UtilityCode.pyt   __eq__a   s    c         C@  s;   |  j  } x t | t ƒ r' | j } q W|  j | |  j f S(   N(   R7   R1   R   t   outer_scopeR3   R8   (   R   R?   (    (    s:   lib/python2.7/site-packages/Cython/Compiler/UtilityCode.pyR<   g   s    	c         C@  s   t  |  j ƒ S(   N(   t   hashR3   (   R   (    (    s:   lib/python2.7/site-packages/Cython/Compiler/UtilityCode.pyt   __hash__m   s    c         @  sl  d d l  m } | g } d d l m } m } t ˆ  j d ˆ  j d | rV | j ƒ  n t	 ƒ} ˆ  j
 | _
 | | _ t ˆ  j ˆ  j d | d t ƒ} | j | d d	 | ƒ}	 | rö g  }
 x1 |	 D]) } |
 j | ƒ t |
 | j ƒ rÀ PqÀ qÀ W|
 }	 n  | j | ƒ } | j } | j |	 | d
 | ƒ}	 d „  } ˆ  j r_| j |	 | ˆ  j ƒ d
 | j ƒ}	 n  x` ˆ  j D]U } t | t ƒ rit | d ƒ ri| ri| j |	 | | j j ƒ d
 | j ƒ}	 qiqiWˆ  j rø‡  f d †  } | j |	 | d
 | j ƒ}	 n  ˆ  j r.‡  f d †  } | j |	 | d
 | j ƒ}	 n  | j |	 | d t	 ƒ\ } } | s_t | ƒ ‚ | ˆ  _ | S(   Ni   (   t   AutoTestDictTransform(   t   Pipelinet   ParseTreeTransformsR8   R   R"   t   allow_struct_enum_decoratort   pyxt   exclude_classest   beforec         @  s   ‡  f d †  } | S(   Nc         @  s   |  j  j ˆ  ƒ |  S(   N(   R&   t   merge_in(   t   module_node(   R&   (    s:   lib/python2.7/site-packages/Cython/Compiler/UtilityCode.pyt   merge_scope_transform“   s    (    (   R&   RK   (    (   R&   s:   lib/python2.7/site-packages/Cython/Compiler/UtilityCode.pyt   merge_scope’   s    t   treec         @  s   ˆ  j  |  j _ |  S(   N(   R7   R&   R?   (   RJ   (   R   (    s:   lib/python2.7/site-packages/Cython/Compiler/UtilityCode.pyt   scope_transform¥   s    c         @  sK   xD ˆ  j  j ƒ  D]3 \ } } |  j j | | d  d d ƒ} t | _ q W|  S(   Nt
   visibilityt   extern(   R9   R0   R&   t   declare_typeR	   R   t   in_cinclude(   RJ   R   t   typeR   (   R   (    s:   lib/python2.7/site-packages/Cython/Compiler/UtilityCode.pyRN   ¯   s    t	   printtree(    t   AnalysedTreeTransformsRB   R-   RC   RD   R    R   R8   t   is_cppR   R   R
   R   R3   R   t   create_pipelinet   appendR1   t   AnalyseDeclarationsTransformt   CnameDirectivesTransformt   InterpretCompilerDirectivest   insert_into_pipelineR6   R5   R+   t   hasattrRM   R&   R7   R9   t   run_pipelineR#   (   R   t   entries_onlyR
   RB   t   excludesRC   RD   R"   RM   t   pipelinet   pt   tt	   transformRH   RL   t   depRN   t   err(    (   R   s:   lib/python2.7/site-packages/Cython/Compiler/UtilityCode.pyt   get_treep   s\    							%					c         C@  s   d  S(   N(    (   R   t   output(    (    s:   lib/python2.7/site-packages/Cython/Compiler/UtilityCode.pyt   put_code¾   s    c         K@  s%   |  j  | | |  } | j | j f S(   sR   
        Load a utility code as a string. Returns (proto, implementation)
        (   t   loadt   protoR3   (   t   clst   util_code_namet	   from_filet   kwargst   util(    (    s:   lib/python2.7/site-packages/Cython/Compiler/UtilityCode.pyt   load_as_stringÁ   s    c   
      C@  sã   |  j  d t d | ƒ } | j j } | j d ƒ | j d ƒ | j d ƒ | j d ƒ x& | j ƒ  D] } |  | _ | | _ qe W| j } | j | d t d | ƒ| | _ x0 |  j	 D]% }	 |	 j
 r¶ |	 j | d | ƒq¶ q¶ W| S(	   sÉ   
        Declare all entries from the utility code in dest_scope. Code will only
        be included for used entries. If module_name is given, declare the
        type entries with that name.
        R_   R
   R   t   __file__t   __builtins__t   __doc__t   merge_unusedt	   whitelist(   Rg   R   R&   t   entriesR   t   valuest   utility_code_definitionR   RI   R5   t   is_cython_utilityt   declare_in_scope(
   R   t
   dest_scopeR   R
   Rv   RM   Rw   R   t   original_scopeRe   (    (    s:   lib/python2.7/site-packages/Cython/Compiler/UtilityCode.pyR{   É   s     				N(   R   R   Rt   R   Rz   R	   R   R>   R<   RA   R   Rg   Ri   t   classmethodRq   R{   (    (    (    s:   lib/python2.7/site-packages/Cython/Compiler/UtilityCode.pyR+   3   s   				N	c         O@  s   t  |  | | Ž j | ƒ d S(   s`   
    Declare some declarations given as Cython code in declaration_string
    in scope env.
    N(   R+   R{   (   t   declaration_stringt   envt   private_typeR   Ro   (    (    s:   lib/python2.7/site-packages/Cython/Compiler/UtilityCode.pyt   declare_declarations_in_scopeç   s    N(   t
   __future__R    t   TreeFragmentR   R   R-   R   R   R   R   R   R    t   UtilityCodeBaseR+   R   R‚   (    (    (    s:   lib/python2.7/site-packages/Cython/Compiler/UtilityCode.pyt   <module>   s   ´