
NWc           @@  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 d l m	 Z	 d d	 l m
 Z
 d d
 l	 m Z m Z d d l m Z m Z y e Wn! e k
 r d  d l m Z n Xd e j f d     YZ e e  Z d e f d     YZ d e f d     YZ d e f d     YZ d e f d     YZ d   Z d   Z d   Z d   Z d   Z d S(   i    (   t   absolute_importi   (   t   errort   message(   t	   ExprNodes(   t   Nodes(   t   Builtin(   t
   PyrexTypesi   (   t   Utils(   t   py_object_typet   unspecified_type(   t   CythonTransformt   EnvTransform(   t   reducet   TypedExprNodec           B@  s   e  Z g  Z d d   Z RS(   c         C@  s    t  t |   j | d | d  S(   Nt   type(   t   superR   t   __init__(   t   selfR   t   pos(    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyR      s    N(   t   __name__t
   __module__t   subexprst   NoneR   (    (    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyR      s   t   MarkParallelAssignmentsc           B@  s   e  Z e Z e Z d    Z d d  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 d   Z d   Z d   Z RS(   c         C@  s#   g  |  _  t t |   j |  d  S(   N(   t   parallel_block_stackR   R   R   (   R   t   context(    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyR   %   s    	c         C@  sO  t  | t j t j f  r | j d  k r. d  S|  j rK|  j d } | j j	 | j  } | r | \ } } | r | r | | k r | | f } t
 | j d |  q n	 | j } | | f | j | j <| j j |  qKnm t  | t j  rKxX t | j  D]D \ }	 }
 | s|
 j r%d  } n | j |	  } |  j |
 |  q Wn  d  S(   NisM   Reduction operator '%s' is inconsistent with previous reduction operator '%s'(   t
   isinstanceR   t   NameNodeR   t   PyArgDeclNodet   entryR   R   t   assignmentst   getR   R   t   assigned_nodest   appendt   SequenceNodet	   enumeratet   argst
   is_starredt   inferable_item_nodet   mark_assignment(   R   t   lhst   rhst
   inplace_opt   parallel_nodet   previous_assignmentR   t   previous_inplace_opt   tt   it   argt	   item_node(    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyR'   *   s0    				c         C@  s*   |  j  | j | j j  |  j |  | S(   N(   R'   R(   t	   with_nodet
   enter_callt   visitchildren(   R   t   node(    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyt"   visit_WithTargetAssignmentStatNodeQ   s    c         C@  s'   |  j  | j | j  |  j |  | S(   N(   R'   R(   R)   R4   (   R   R5   (    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyt   visit_SingleAssignmentNodeV   s    c         C@  s8   x$ | j  D] } |  j | | j  q
 W|  j |  | S(   N(   t   lhs_listR'   R)   R4   (   R   R5   R(   (    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyt   visit_CascadedAssignmentNode[   s    c         C@  s0   |  j  | j | j   | j  |  j |  | S(   N(   R'   R(   t   create_binop_nodet   operatorR4   (   R   R5   (    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyt   visit_InPlaceAssignmentNodea   s    c   
      C@  s  t  } | j j } | j } t | t j  r| j } | j d  k r| j
 r|  j   j | j  } | sv | j r~| j d k r t | j  d k r | j d } q{| j d k r{t | j  d k r{| j rxt | j  d k rx| j d } | j
 ru| j |  j    } | j rr|  j | j d t j | j d d d t j  | j d } | j d } qrquqxq{q~qn  t | t j  rp| j } | j d  k rp| j
 rp|  j   j | j  } | s| j rm| j d k rjt } x% | j d  D] }	 |  j | |	  qWt | j  d k rg|  j | t j | j d | j d | j d   qgqjqmqpn  | s|  j | t j | j d | d t j | j d d d t j  n  |  j |  | S(   Nt   reversedi   i    R#   i   t   valuet   PY_SSIZE_T_MAXR   t   ranget   xranget   +t   baset   index(   s   ranges   xrange(   t   Falset   iteratort   sequencet   targetR   R   t   SimpleCallNodet   functionR   R   t   is_namet   current_envt   lookupt   namet
   is_builtint   lenR$   t   is_sequence_constructort
   infer_typet   is_builtin_typeR'   t   IntNodeR   R   t   c_py_ssize_t_typet   Truet
   binop_nodet	   IndexNodeR4   (
   R   R5   t
   is_specialRG   RH   RJ   R   RF   t   iterator_typeR0   (    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyt   visit_ForInStatNodef   s\    		$$		
"	
 	c         C@  sg   |  j  | j | j  | j d  k	 rV |  j  | j t j | j d | j | j   n  |  j |  | S(   NRB   (	   R'   RH   t   bound1t   stepR   R   RW   R   R4   (   R   R5   (    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyt   visit_ForFromStatNode   s    c         C@  s   |  j  |  | S(   N(   R4   (   R   R5   (    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyt   visit_WhileStatNode   s    c         C@  s6   | j  d  k	 r% |  j | j  t  n  |  j |  | S(   N(   RH   R   R'   t   object_exprR4   (   R   R5   (    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyt   visit_ExceptClauseNode   s    c         C@  s   d  S(   N(    (   R   R5   (    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyt   visit_FromCImportStatNode   s    c         C@  sJ   x6 | j  D]+ \ } } | d k r
 |  j | t  q
 q
 W|  j |  | S(   Nt   *(   t   itemsR'   R`   R4   (   R   R5   RN   RH   (    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyt   visit_FromImportStatNode   s
    c         C@  sp   | j  r. |  j | j  t t j | j   n  | j r\ |  j | j t t j | j   n  t j	 |  |  | S(   N(
   t   star_argR'   R   R   t
   tuple_typeR   t   starstar_argt	   dict_typeR   t   visit_FuncDefNode(   R   R5   (    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyt   visit_DefNode   s    		c         C@  s5   x! | j  D] } |  j | |  q
 W|  j |  | S(   N(   R$   R'   R4   (   R   R5   R0   (    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyt   visit_DelStatNode   s    c         C@  s  |  j  r |  j  d | _ n	 d  | _ t } | j rt | j sI t | _ q | j j p_ | j j | _ | j j } n t | _ | j o | j j } |  j  j |  | p t |  j   d k } |  j	 r | r | j r t
 | j d  t |  _	 n  | j r^| j } d d d g | _ |  j |  | | _ |  j  j   | j rx|  j | j  | _ qxn |  j |  |  j  j   t |  _	 | S(   Nii   s   Only prange() may be nestedt   bodyRH   R$   (   R   t   parentR   RE   t	   is_prangeRV   t   is_parallelR!   RP   t   parallel_errorsR   R   t   child_attrsR4   t   popt   else_clauset   visit(   R   R5   t   nestedRr   (    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyt   visit_ParallelStatNode   s:    										c         C@  s    |  j  r t | j d  n  | S(   Ns&   Yield not allowed in parallel sections(   R   R   R   (   R   R5   (    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyt   visit_YieldExprNode   s    	c         C@  s   t  |  j  | _ | S(   N(   t   boolR   t   in_parallel(   R   R5   (    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyt   visit_ReturnStatNode  s    N(   R   R   RE   t   in_loopRq   R   R   R'   R6   R7   R9   R<   R[   R^   R_   Ra   Rb   Re   Rk   Rl   Rw   Rx   R{   (    (    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyR      s&   	'					9								,	t   MarkOverflowingArithmeticc           B@  s   e  Z e Z d    Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 e Z e Z e Z e Z d   Z d   Z d	   Z RS(
   c         C@  s+   g  |  _  | j |  _ t t |   j |  S(   N(   t	   env_stackt   scopet   envR   R}   t   __call__(   R   t   root(    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyR     s    	c         C@  s-   t  |  j |  _ } |  j |  | |  _ | S(   N(   RE   t   might_overflowR4   (   R   R5   t   saved(    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyt   visit_safe_node  s    	c         C@  s   |  j  |  | S(   N(   R4   (   R   R5   (    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyt   visit_neutral_node  s    c         C@  s-   t  |  j |  _ } |  j |  | |  _ | S(   N(   RV   R   R4   (   R   R5   R   (    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyt   visit_dangerous_node  s    	c         C@  sB   |  j  j |  j  | j |  _ |  j |  |  j  j   |  _ | S(   N(   R~   R!   R   t   local_scopeR   Rs   (   R   R5   (    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyRj   "  s
    c         C@  s@   |  j  r< | j p$ |  j j | j  } | r< t | _  q< n  | S(   N(   R   R   R   RM   RN   RV   (   R   R5   R   (    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyt   visit_NameNode)  s
    	c         C@  s-   | j  d k r |  j |  S|  j |  Sd  S(   Ns   &|^(   R;   R   R   (   R   R5   (    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyt   visit_BinopNode0  s    c         C@  sm   t  | t j  ri t  | t j  ri t j | j  ri | j pQ |  j j	 | j
  } | ri t | _ qi n  d  S(   N(   R   R   RT   R   R   t   long_literalR>   R   R   RM   RN   RV   R   (   R   R(   R)   R   (    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyt   visit_assignment>  s    c         C@  s'   |  j  | j | j  |  j |  | S(   N(   R   R(   R)   R4   (   R   R5   (    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyR7   F  s    c         C@  s8   x$ | j  D] } |  j | | j  q
 W|  j |  | S(   N(   R8   R   R)   R4   (   R   R5   R(   (    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyR9   K  s    (   R   R   RE   R   R   R   R   R   Rj   R   R   t   visit_UnopNodet   visit_UnaryMinusNodeR<   t
   visit_NodeR   R7   R9   (    (    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyR}     s   									t   PyObjectTypeInfererc           B@  s   e  Z d  Z d   Z RS(   s0   
    If it's not declared, it's a PyObject.
    c         C@  s?   x8 | j  j   D]' \ } } | j t k r t | _ q q Wd S(   sY   
        Given a dict of entries, map all unspecified types to a specified type.
        N(   t   entriesRd   R   R	   R   (   R   R   RN   R   (    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyt   infer_typesU  s    (   R   R   t   __doc__R   (    (    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyR   Q  s   t   SimpleAssignmentTypeInfererc           B@  s    e  Z d  Z d   Z d   Z RS(   s   
    Very basic type inference.

    Note: in order to support cross-closure type inference, this must be
    applies to nested scopes in top-down order.
    c         C@  s-   | | _  x | j   D] } | | _  q Wd  S(   N(   R   t   all_entries(   R   R   t
   entry_typet   e(    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyt   set_entry_typed  s    	c         @  s   j  d }  j  d } | t k r/ t 
 nU | d  k rD t 
 n@ x9  j j   D]( } | j t k rT 	 j	 | t
  qT qT Wd  St   } t    i   i    x  j j   D] \ } } x[ | j D]P } | j   } |   | <t   }	 x | D] }
 |	 j |
 j  q W|	  | <q W| j t k r>| j | j  q  j | j  q W 
 f d     
 f d         f d   }    f d    t       f d   } x) t r| |  s| |  sPqqqWt    x  j j   D] } | j t k	 rqn  t
 }  j | j  rg  | j D] } | j ^ q@} | rt |  r
 | | j | j   }  j |  qn  	 j	 | |  qW  	 
 f d   } x |   rqW| rx1  D]& } t | j d	 | j | j f  qWn  d  S(
   NR   s   infer_types.verbosec         @  s_   g  |  j  D] } | j ^ q
 } | s. t } n$ |  j }  | | j | j    } | |  _ d  S(   N(   t   cf_statet   inferred_typeR   R   R   R   (   R5   t   assmtt   typest	   node_typeR   (   R   t   spanning_type(    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyt   infer_name_node_type  s    		c         @  sZ   g  |  j  D] } | j d  k	 r
 | j ^ q
 } | s8 d  S|  j }  | | j | j    S(   N(   R   R   R   R   R   R   (   R5   R   R   R   (   R   R   (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyt   infer_name_node_type_partial  s    	c         @  s   t    } xo |  D]g }  | }  j |  r x   | D] }  |  q: W| j   }  j |  | j |  q q W|  j |  | S(   N(   t   sett
   issupersetRR   t   addt   difference_update(   R   t   resolvedR   t   depsR5   R   (   t   assmt_to_namest   assmts_resolvedt   dependenciesR   (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyt   resolve_assignments  s    	
c         @  sx   g  } xA   |  D]5 }  |  } | d  k r3 t S| j | | f  q Wx | D] \ } } | | _ qQ W|  j   t S(   N(   R   RE   R!   R   RR   RV   (   R   t   partial_typesR5   t   partial_type(   R   R   (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyt   partial_infer  s    
c         @  sf   t    } xI |  D]A } |  k r( q n   |  r | j |    j |  q q W j |  | S(   N(   R   R   t   update(   R   t   partialsR   (   R   t   partial_assmtsR   (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyt   resolve_partial  s    	c          @  s   t  }  xs   D]k } g  | j D] } | j   ^ q }  | | j | j   } | | j k r  j | |  t }  q q W|  S(   N(   RE   t   cf_assignmentsRR   R   R   R   R   RV   (   t   dirtyR   R   R   t   new_type(   t   inferredR   R   R   (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyt   reinfer  s    s    inferred '%s' to be of type '%s'(   t
   directivesRV   t   aggressive_spanning_typeR   t   safe_spanning_typeR   t   valuesR   R	   R   R   R   Rd   R   t   type_dependenciesR   R   R   R   t   allR   R   R   R   RN   (   R   R   t   enabledt   verboseR   R   RN   R   t   namest   assmtsR5   R   R   R   R   R   (    (   R   R   R   R   R   R   R   R   R   R   R   s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyR   i  sl    				
	
			(   R   R   R   R   R   (    (    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyR   ]  s   	c         C@  sr   |  | k r |  } n4 |  t  j k s3 | t  j k r7 t St  j |  |  } | t  j t  j t j f k rn t  j S| S(   N(   R   t   c_bint_typeR   R   t   c_double_typet   c_float_typeR   t
   float_type(   t   type1t   type2t   result_type(    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyt   find_spanning_type  s    	c         C@  se   |  j  r |  j }  n  |  j r* |  j }  n  |  j rC |  j |  n  |  j ra t j |  j	  }  n  |  S(   N(
   t   is_referencet   ref_base_typet   is_constt   const_base_typet   is_cpp_classt   check_nullary_constructort   is_arrayR   t
   c_ptr_typet	   base_type(   R   R   (    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyt   simply_type  s    				c         C@  s   t  t t |   |  S(   N(   R   R   R   (   R   R   R   R   (    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyR     s    c         C@  s   t  t t |   |  } | j r; | j d k r4 t S| Sn | t j k rN | S| t j k ra | S| j	 rn | S| j
 r{ | S| j r | S| j s | j r | r | S| j |  r | j r | St S(   Nt   str(   R   R   R   t   is_pyobjectRN   R   R   R   R   t   is_ptrR   t	   is_structt   is_intt   is_enumt   can_coerce_to_pyobjectt   is_error(   R   R   R   R   R   (    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyR   
  s*    				
c           C@  s   t    S(   N(   R   (    (    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyt   get_type_inferer3  s    N(    t
   __future__R    t   ErrorsR   R   t    R   R   R   R   R   R   R	   t   VisitorR
   R   R   t	   NameErrort	   functoolst   ExprNodeR   R`   R   R}   t   objectR   R   R   R   R   R   R   (    (    (    s@   /bar/jli/Chip-seq/script/cython/Cython/Compiler/TypeInference.pyt   <module>   s.   K				)