ó
á™xTc           @   s¦   d  d l  m Z d  d l Z e j d d !d k s8 t ‚ d  d l Z d e f d „  ƒ  YZ d e j f d	 „  ƒ  YZ	 d
 e f d „  ƒ  YZ
 d e j f d „  ƒ  YZ d S(   iÿÿÿÿ(   t   divisionNi    i   i   t   imported_namec           B   s;   e  Z d Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   t   namet   linenoc         C   s%   t  | j d ƒ ƒ |  _ | |  _ d  S(   Nt   .(   t   tuplet   splitR   R   (   t   selfR   R   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyt   __init__   s    c         C   s"   |  j  | j  k o! |  j | j k S(   N(   R   R   (   R   t   other(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyt   __eq__   s    c         C   s   t  |  j |  j f ƒ S(   N(   t   hashR   R   (   R   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyt   __hash__   s    c         C   s   d |  j  ƒ  |  j f S(   Ns   %s imported at line %i(   t   name_as_strR   (   R   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyt   __repr__   s    c         C   s   d j  |  j ƒ S(   NR   (   t   joinR   (   R   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyR      s    (   s   names   lineno(   t   __name__t
   __module__t	   __slots__R   R
   R   R   R   (    (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyR      s   				t   unused_importsc           B   sž   e  Z d  Z e d „  ƒ Z d d d d d d „ Z d „  Z d „  Z d „  Z	 e
 d „  ƒ Z d „  Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z RS(   s±    Unused import's in a module.
  This finds more of them than the algorithm in
  libtbx.find_unused_imports_crude
  Work in progress: careful checking of the outcome mandatory
  c         C   s0   t  | ƒ t  | ƒ k r t S| | t  | ƒ  k S(   s    Whether a is a subpath of b (   t   lent   False(   t   clst   at   b(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyt   is_subpath_of$   s     c         C   s  | | f j  d  ƒ d k s! t ‚ | d  k rB t | ƒ j ƒ  } n  t t |  ƒ j ƒ  | |  _ | j	 ƒ  |  _
 | |  _ | |  _ d |  _ i  |  _ i  |  _ i  |  _ t j | ƒ } t ƒ  |  _ |  j | ƒ t ƒ  |  _ x' |  j j ƒ  D] } |  j j | ƒ qç W|  j |  j 8_ d  S(   Ni   (    (   t   countt   Nonet   AssertionErrort   filet   readt   superR   R   t   comment_flagst
   splitlinest   python_source_linet   ignored_importst   ignored_imports_fromt   current_contextt   imported_in_contextt"   imported_from_full_name_in_contextt   used_in_contextt   astt   parset   sett   _usedt   visitt   _unusedt
   itervaluest   update(   R   t   python_source_codet   python_source_filenameR#   R$   t"   ignore_imports_flagged_by_commentst   treet   imported(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyR   *   s&    !							c         C   s   d j  d „  |  Dƒ ƒ S(   Ns   
c         s   s   |  ] } t  | ƒ Vq d  S(   N(   t   str(   t   .0t   imp(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pys	   <genexpr>B   s    (   R   (   R   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyR   A   s    c         C   s   t  |  j ƒ S(   N(   t   iterR.   (   R   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyt   __iter__D   s    c         C   s   t  |  j ƒ S(   N(   t   boolR.   (   R   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyt   __nonzero__G   s    c         C   s   t  d „  |  Dƒ ƒ S(   Nc         s   s   |  ] } | j  ƒ  Vq d  S(   N(   R   (   R7   R8   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pys	   <genexpr>L   s    (   R+   (   R   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyt   namesJ   s    c            s�   x2 ˆ j  D]' } ˆ j ˆ  j d j | ƒ r
 d  Sq
 Wˆ j j ˆ j t ƒ  ƒ } | j ‡  ‡ f d †  ˆ  j	 Dƒ ƒ ˆ j
 ƒ  d  S(   Ni   c         3   sN   |  ]D } | j  ˆ j k r t | j d  k r6 | j  n | j ˆ  j ƒ Vq d  S(   N(   R   R#   R   t   asnameR   R   (   R7   R   (   R8   R   (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pys	   <genexpr>S   s   (   R    R"   R   t   endswithR&   t
   setdefaultR%   R+   R0   R=   t   consolidate_imports_info(   R   R8   t   commentR5   (    (   R8   R   sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyt   visit_ImportN   s     c            s¼   x2 ˆ j  D]' } ˆ j ˆ  j d j | ƒ r
 d  Sq
 Wˆ j j ˆ j t ƒ  ƒ } | j ‡  ‡ f d †  ˆ  j	 Dƒ ƒ ˆ j
 j ˆ j t ƒ  ƒ } | j ‡  f d †  ˆ  j	 Dƒ ƒ ˆ j ƒ  d  S(   Ni   c         3   s]   |  ]S } | j  d  k r ˆ  j ˆ j k r t | j d k rE | j  n | j ˆ  j ƒ Vq d S(   t   *N(   R   t   moduleR$   R   R>   R   R   (   R7   R   (   R8   R   (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pys	   <genexpr>]   s   c         3   s@   |  ]6 } | j  d  k r t ˆ  j j d ƒ ƒ | j  f Vq d S(   RD   R   N(   R   R   RE   R   (   R7   R   (   R8   (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pys	   <genexpr>c   s   (   R    R"   R   R?   R&   R@   R%   R+   R0   R=   R'   RA   (   R   R8   RB   R5   (    (   R8   R   sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyt   visit_ImportFromX   s     	c         C   s�   x‰ |  j  j ƒ  D]x \ } } t ƒ  } xV |  j j | t ƒ  ƒ D]< } x3 | D]+ } |  j | | j ƒ rK | j | ƒ qK qK Wq> W| | 8} q Wd  S(   N(   R&   t	   iteritemsR+   R'   t   getR   R   t   add(   R   t   ctxR5   t	   discardedt   imp1R8   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyRA   g   s    	c         C   s�   x† |  j  j ƒ  D]u \ } } |  j | |  j ƒ r xQ | D]F } | | j k  rS q8 n  |  j | j | ƒ sn q8 n  |  j j | ƒ q8 Wq q Wd  S(   N(   R&   RG   R   R%   R   R   R,   RI   (   R   t	   namespaceR   t
   import_ctxR5   R8   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyt   _process_namespacep   s      c         C   s   |  j  | j f | j ƒ d  S(   N(   RO   t   idR   (   R   R   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyt
   visit_Namex   s    c         C   sJ  g  } | j  } xâ t | t j ƒ só t | t j ƒ rR | j | j ƒ | j  } q t | t j ƒ r¸ x | j D] } |  j	 | ƒ qn Wx | j
 D] } |  j	 | ƒ q� Wg  } | j } q t | t j ƒ rì |  j	 | j ƒ g  } | j  } q d  Sq W| j | j ƒ t t | ƒ ƒ } |  j | | j ƒ |  j | | j f | j ƒ d  S(   N(   t   valuet
   isinstanceR)   t   Namet	   Attributet   appendt   attrt   Callt   argsR-   t   keywordst   funct	   Subscriptt   sliceRP   R   t   reversedRO   R   (   R   RW   RM   t   xt   argt   keyword(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyt   visit_Attribute{   s,    	c         C   sn   |  j  | j f 7_  x! | j j D] } |  j | ƒ q" Wx | j D] } |  j | ƒ qC W|  j  d  |  _  d  S(   Niÿÿÿÿ(   R%   R   RY   t   defaultsR-   t   body(   R   R[   t   defaultt   stmt(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyt   visit_FunctionDef”   s     N(    (    (    (   R   R   t   __doc__t   classmethodR   R   R   R   R:   R<   t   propertyR=   RC   RF   RA   RO   RQ   Rb   Rg   (    (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyR      s    				
						t   old_style_classc           B   s;   e  Z d Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   R   R   c         C   s%   t  | j d ƒ ƒ |  _ | |  _ d  S(   NR   (   R   R   R   R   (   R   R   R   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyR   ¡   s    c         C   s"   |  j  | j  k o! |  j | j k S(   N(   R   R   (   R   R	   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyR
   ¥   s    c         C   s   t  |  j |  j f ƒ S(   N(   R   R   R   (   R   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyR   ©   s    c         C   s   d |  j  ƒ  |  j f S(   Ns   class %s defined at line %i(   R   R   (   R   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyR   ¬   s    c         C   s   d j  |  j ƒ S(   NR   (   R   R   (   R   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyR   ¯   s    (   s   names   lineno(   R   R   R   R   R
   R   R   R   (    (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyRk   �   s   				t   find_old_style_classesc           B   s_   e  Z d  Z e d „  ƒ Z d d d „ Z e d „  ƒ Z d „  Z	 d „  Z
 d „  Z d „  Z RS(	   sF    Finds old-style classes (i.e. ones that don't inherit from object)
  c         C   s0   t  | ƒ t  | ƒ k r t S| | t  | ƒ  k S(   s    Whether a is a subpath of b (   R   R   (   R   R   R   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyR   ·   s     c         C   s™   | | f j  d  ƒ d k s! t ‚ | d  k rB t | ƒ j ƒ  } n  t t |  ƒ j ƒ  | j ƒ  |  _	 d |  _
 t j | ƒ } t ƒ  |  _ |  j | ƒ d  S(   Ni   (    (   R   R   R   R   R   R   Rl   R   R!   R"   R%   R)   R*   R+   t   _old_style_classesR-   (   R   R1   R2   R4   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyR   ½   s    !	c         C   s   t  d „  |  Dƒ ƒ S(   Nc         s   s   |  ] } | j  ƒ  Vq d  S(   N(   R   (   R7   R8   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pys	   <genexpr>Ê   s    (   R+   (   R   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyR=   È   s    c         C   s   d j  d „  |  Dƒ ƒ S(   Ns   
c         s   s   |  ] } t  | ƒ Vq d  S(   N(   R6   (   R7   R8   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pys	   <genexpr>Í   s    (   R   (   R   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyR   Ì   s    c         C   s   t  |  j ƒ S(   N(   R9   Rm   (   R   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyR:   Ï   s    c         C   s   t  |  j ƒ S(   N(   R;   Rm   (   R   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyR<   Ò   s    c         C   s;   t  | j ƒ d k r7 |  j j t | j | j ƒ ƒ n  d  S(   Ni    (   R   t   basesRm   RI   Rk   R   R   (   R   t   node(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyt   visit_ClassDefÕ   s    N(   R   R   Rh   Ri   R   R   R   Rj   R=   R   R:   R<   Rp   (    (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyRl   ³   s   			(   i   i   (   t
   __future__R    t   syst   version_infoR   R)   t   objectR   t   NodeVisitorR   Rk   Rl   (    (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/python_code_parsing.pyt   <module>   s   €