
V]c           @@  s@  d  d l  m Z d  d l Z d  d l m Z d d l m Z d d l m Z d d l m Z d d l m Z m	 Z	 m
 Z
 d d	 l m Z d
   Z d   Z d   Z d   Z d   Z d   Z d d  Z d   Z d   Z d   Z d d  Z e d d  Z d   Z d   Z d   Z d d d  Z i  Z e d  Z  d S(   i    (   t   absolute_importN(   t   timei   (   t   Errors(   t
   DebugFlags(   t   Options(   t   CompileErrort   InternalErrort
   AbortError(   t   Namingc         C@  s   |  j    GH|  S(   N(   t   dump(   t   t(    (    s7   lib/python2.7/site-packages/Cython/Compiler/Pipeline.pyt   dumptree   s    c         C@  s"   t  j d k r t d   n  |  S(   Ni    s   pipeline break(   R   t
   num_errorsR   (   t   node(    (    s7   lib/python2.7/site-packages/Cython/Compiler/Pipeline.pyt   abort_on_errors   s    c         @  s     f d   } | S(   Nc         @  s   |  j  } |  j } | d d f } t j t } t _   j | d | d d } | t _   j | | d d d | } |  | _ | | _ t | _	 | S(   Ni   i    t   post   need_pxdt   pxdt   full_module_name(
   t   source_descR   R   t   cimport_from_pyxt   Falset   find_modulet   parset   compilation_sourcet   scopet   is_pxd(   t   compsrcR   R   t   initial_post   saved_cimport_from_pyxR   t   tree(   t   context(    s7   lib/python2.7/site-packages/Cython/Compiler/Pipeline.pyR      s    						(    (   R   R   (    (   R   s7   lib/python2.7/site-packages/Cython/Compiler/Pipeline.pyt   parse_stage_factory   s    c         @  s       f d   } | S(   Nc         @  s4     j  |   d t d  }  | _ t | _ | S(   NR   R   (   R   t   TrueR   R   (   R   R   (   R   t   module_nameR   (    s7   lib/python2.7/site-packages/Cython/Compiler/Pipeline.pyR   *   s
    			(    (   R   R   R"   R   (    (   R   R"   R   s7   lib/python2.7/site-packages/Cython/Compiler/Pipeline.pyt   parse_pxd_stage_factory)   s    c         @  s      f d   } | S(   Nc         @  s    |  j      |  j  _  S(   N(   t   process_implementationR   (   t   module_node(   t   optionst   result(    s7   lib/python2.7/site-packages/Cython/Compiler/Pipeline.pyt   generate_pyx_code_stage3   s    (    (   R&   R'   R(   (    (   R&   R'   s7   lib/python2.7/site-packages/Cython/Compiler/Pipeline.pyt   generate_pyx_code_stage_factory2   s    c         @  s     f d   } | S(   Nc         @  s:   x3   j  j   D]" \ } \ } } |  j | |  q W|  S(   N(   t   pxdst   itemst   merge_in(   R%   t   namet   statlistnodeR   (   R   (    s7   lib/python2.7/site-packages/Cython/Compiler/Pipeline.pyt   inject_pxd_code_stage;   s    "(    (   R   R/   (    (   R   s7   lib/python2.7/site-packages/Cython/Compiler/Pipeline.pyt   inject_pxd_code_stage_factory:   s    c         C@  s   | d  k r t   } n  x |  j j   D] } | | k r@ q( n  | j |  | j r | j r | j | j  xC | j j D] } | j |  q| Wq( | j	 r( t
 | j	 | |  q( q( Wd  S(   N(   t   Nonet   sett   entriest   valuest   addt   usedt   utility_code_definitiont   use_utility_codet   requirest	   as_modulet   use_utility_code_definitions(   R   t   targett   seent   entryt   required_utility(    (    s7   lib/python2.7/site-packages/Cython/Compiler/Pipeline.pyR;   B   s    	c         @  se   i      f d     x |  D] }   |  q Wg  t   j   d d   D] \ } } | ^ qO S(   Nc         @  st   |   k rl d  |  <t    } d t g  |  j p7 d D] }   |  ^ q8 pV d g  | d  |  <n   |  S(   Ni    i   ig:0yE>(    (   t   lent   minR9   (   t   utilcodet   original_ordert   dep(   t   get_rankt   ranks(    s7   lib/python2.7/site-packages/Cython/Compiler/Pipeline.pyRE   U   s
    
Jt   keyc         S@  s   |  d S(   Ni   (    (   t   kv(    (    s7   lib/python2.7/site-packages/Cython/Compiler/Pipeline.pyt   <lambda>]   t    (   t   sortedR+   (   t	   utilcodesRB   t   _(    (   RE   RF   s7   lib/python2.7/site-packages/Cython/Compiler/Pipeline.pyt   sort_utility_codesS   s
    c         @  sp   i    x |  D] } |   | <q W  f d   } x9 |  D]1 } g  | j  pL d D] } | |  ^ qM | _  q7 Wd  S(   Nc         @  s&   |    k r   |  S|    |  <|  Sd  S(   N(    (   RD   (   t   deps(    s7   lib/python2.7/site-packages/Cython/Compiler/Pipeline.pyt	   unify_depe   s    
(    (   R9   (   RL   RB   RP   RD   (    (   RO   s7   lib/python2.7/site-packages/Cython/Compiler/Pipeline.pyt   normalize_deps`   s    c         @  s     f d   } | S(   Nc         @  s  |  j    t   j |  j  t |  j j  |  j _ t |  j j  g  } x |  j j D] } | | k rp qX n  | j |  | j r xH | j D]: } | | k r | |  j j k r |  j j j |  q q Wn  | j	 d   j  } | rX |  j
 | j | j d t qX qX W|  S(   Nt   cython_scopet   merge_scope(   t   prepare_utility_codeR;   RR   R   RN   t   utility_code_listRQ   t   appendR9   t   get_treeR,   t   bodyR!   (   R%   t   addedRB   RD   R   (   R   (    s7   lib/python2.7/site-packages/Cython/Compiler/Pipeline.pyt   inject_utility_code_stageq   s"    
	#(    (   R   RZ   (    (   R   s7   lib/python2.7/site-packages/Cython/Compiler/Pipeline.pyt!   inject_utility_code_stage_factoryp   s    c   2   (   C@  s  | d k s t   d d l m } d d l m } m } m } m } d d l m } m	 }	 m
 }
 d d l m } m } d d	 l m } m } m } d d
 l m } m } m } d d l m } m } d d l m } d d l m } m } d d l m } m } d d l m } m } d d l m } d d l m  } d d l! m" } d d l# m$ } m% }  m& }! d d l# m' }" m( }# d d l# m) }$ d d l# m* }% m+ }& d d l# m, }' d d l# m- }( d d l. m/ }) d d l0 m1 }* m2 }+ | d k r|+ }, | |   }- n |* }, d  }- | d k r,| |   }. n d  }. | |   | |   |- |   | |  |  j4  | |   | |   | |   | |   |. | |   |%   |   | |   | |   |	   |
 |   | |   | |   |" |   | |   | |   | |   | |   | |   |) |   |, |$ |   | |   | |   | |   |! |   |  |   |# |   | |   | |   |( |   |'   |& |   |   g( }/ g  }0 x- |/ D]% }1 |1 j5 | k r|0 j6 |1  qqW|0 S(   Nt   pyxt   pyR   i   (   t	   PrintTree(   t   WithTransformt   NormalizeTreet	   PostParset   PxdPostParse(   t   ForwardDeclareTypest   InjectGilHandlingt   AnalyseDeclarationsTransform(   t   AnalyseExpressionsTransformt   FindInvalidUseOfFusedTypes(   t   CreateClosureClassest   MarkClosureVisitort   DecoratorTransform(   t   TrackNumpyAttributest   InterpretCompilerDirectivest   TransformBuiltinMethods(   t   ExpandInplaceOperatorst   ParallelRangeTransform(   t    CalculateQualifiedNamesTransform(   t   MarkParallelAssignmentst   MarkOverflowingArithmetic(   t   AdjustDefByDirectivest   AlignFunctionDefinitions(   t   RemoveUnreachableCodet   GilCheck(   t   ControlFlowAnalysis(   t   AutoTestDictTransform(   t   EmbedSignature(   t   FlattenInListTransformt   SwitchTransformt   IterationTransform(   t   EarlyReplaceBuiltinCallst   OptimizeBuiltinCalls(   t   InlineDefNodeCalls(   t   ConstantFoldingt   FinalOptimizePhase(   t   DropRefcountingTransform(   t   ConsolidateOverflowCheck(   t   IntroduceBufferAuxiliaryVars(   t   check_c_declarationst   check_c_declarations_pxd(   R\   R]   R   (7   t   AssertionErrort   VisitorR^   t   ParseTreeTransformsR_   R`   Ra   Rb   Rc   Rd   Re   Rf   Rg   Rh   Ri   Rj   Rk   Rl   Rm   Rn   Ro   Rp   t   TypeInferenceRq   Rr   Rs   Rt   Ru   Rv   t   FlowControlRw   t   AnalysedTreeTransformsRx   t   AutoDocTransformsRy   t   OptimizeRz   R{   R|   R}   R~   R   R   R   R   R   t   BufferR   t
   ModuleNodeR   R   R1   t   compiler_directivest	   __class__RV   (2   R   t   modet   exclude_classesR^   R_   R`   Ra   Rb   Rc   Rd   Re   Rf   Rg   Rh   Ri   Rj   Rk   Rl   Rm   Rn   Ro   Rp   Rq   Rr   Rs   Rt   Ru   Rv   Rw   Rx   Ry   Rz   R{   R|   R}   R~   R   R   R   R   R   R   R   R   t   _check_c_declarationst   _specific_post_parset   _align_function_definitionst   stagest   filtered_stagest   s(    (    s7   lib/python2.7/site-packages/Cython/Compiler/Pipeline.pyt   create_pipeline   s    "																														c      
   C@  s   | r d } n d } g  } | j  rG d d l m } | j |    n  | j r d d l m } d d l m }	 | j	 | j
  |  _ |	 |  | |  g }
 n g  }
 t t j t |   g t |  | d | | t |   t |   t g |
 t | |  g   S(	   NR]   R\   i   (   t   TreeAssertVisitor(   t   DebugWriteri   (   t   DebugTransformR   (   t   evaluate_tree_assertionst	   TestUtilsR   RV   t	   gdb_debugt   DebuggerR   R   R   t   CythonDebugWritert
   output_dirt   gdb_debug_outputwritert   listt	   itertoolst   chainR    R   R0   R[   R   R)   (   R   R&   R'   R]   R   R   t   test_supportR   R   R   t   debug_transform(    (    s7   lib/python2.7/site-packages/Cython/Compiler/Pipeline.pyt   create_pyx_pipeline   s.    						c         C@  s:   d d l  m } t |  | |  g t |  d  |   g S(   Ni   (   t   ExtractPxdCodeR   (   t   CodeGenerationR   R#   R   (   R   R   R"   R   (    (    s7   lib/python2.7/site-packages/Cython/Compiler/Pipeline.pyt   create_pxd_pipeline  s    c         C@  s   t  |  | | d t S(   NR]   (   R   R!   (   R   R&   R'   (    (    s7   lib/python2.7/site-packages/Cython/Compiler/Pipeline.pyt   create_py_pipeline  s    c      
   @  s   d d l  m } m } m } m } d d l m } m } d d l m	   g  } t
 |  |  j | d | | | | | g }	 x. |	 D]& }
 | j |
  t |
 |  r Pq q W  f d   } | j |  | S(   Ni   (   Rt   Ri   R_   Re   (   R   Rz   (   t   StatListNodeR   c         @  s   xq |  j  j j   D]] } | j s d | _ | j | j k rp | j d k rp | j  j t	 j
 | j  | _ qp q q W  |  j d g  |  j  f S(   Ni   t   externt   stats(   R   R3   R4   t   in_cincludet   defined_in_pxdR-   t   cnamet
   visibilityt   mangleR   t   func_prefixR   (   t   rootR>   (   R   (    s7   lib/python2.7/site-packages/Cython/Compiler/Pipeline.pyt   fake_pxd$  s    		!((   R   Rt   Ri   R_   Re   R   R   Rz   t   NodesR   R   R&   RV   t
   isinstance(   R   R'   Rt   Ri   R_   Re   R   Rz   t   pipelinet   pyx_pipelinet   stageR   (    (   R   s7   lib/python2.7/site-packages/Cython/Compiler/Pipeline.pyt   create_pyx_as_pxd_pipeline  s"    "c         C@  sx   | s | s t   | p | } x- t |   D] \ } } t | |  r+ Pq+ q+ W| ra | d 7} n  |  |  | g |  | S(   s   
    Insert a new transform into the pipeline after or before an instance of
    the given class. e.g.

        pipeline = insert_into_pipeline(pipeline, transform,
                                        after=AnalyseDeclarationsTransform)
    i   (   R   t	   enumerateR   (   R   t	   transformt   beforet   aftert   clst   iR
   (    (    s7   lib/python2.7/site-packages/Cython/Compiler/Pipeline.pyt   insert_into_pipeline/  s    c         B@  s  d d l  m } e j r( e   j   n d  } d   } d  } | } yy x |  D] } | d  k	 rP | r~ e | |  r~ qP n  e j r e   }	 d | GHe	 | d e
 |  j  }
 y e |
 } Wq e k
 r d |
 | U| |
 } e |
 <q Xn  | | |  } e j r%d e   |	 GHq%qP qP WWn, e k
 rX} e j | d e | } n XWnF e k
 r} e j d	 k r  n  | } n e k
 r} | } n X| | f S(
   Ni   (   R^   c         S@  s
   |  |  S(   N(    (   t   phaset   data(    (    s7   lib/python2.7/site-packages/Cython/Compiler/Pipeline.pyt   runN  s    s   Entering pipeline phase %rt   __name__s'   def %s(phase, data): return phase(data)s       %.3f secondst	   use_stacki    (   R   R^   R   t   debug_verbose_pipelinet   globalst   copyR1   R   R   t   getattrt   typeR   t   _pipeline_entry_pointst   KeyErrorR   R   t   report_errorR   R   R   R   (   R   t   sourcet	   printtreeR^   t   exec_nsR   t   errorR   R   R
   t
   phase_namet   err(    (    s7   lib/python2.7/site-packages/Cython/Compiler/Pipeline.pyt   run_pipelineJ  sB    						
(    (    (!   t
   __future__R    R   R   RJ   R   R   R   R   R   R   R   R   R   R    R#   R)   R0   R1   R;   RN   RQ   R[   R   R   R   R   R   R   R   R   R!   R   (    (    (    s7   lib/python2.7/site-packages/Cython/Compiler/Pipeline.pyt   <module>   s2   										Z			