ó
á™xTc           @   s}   d  d l  m Z d  d l m Z d  d l m Z d  d l Z d  d l Z e j e d „ Z	 d „  Z
 e d k ry e
 ƒ  n  d S(   iÿÿÿÿ(   t   division(   t	   FrameType(   t   StringIONc            sc   ‡ f d †  ‰ ‡  ‡ ‡ ‡ ‡ f d †  ‰ x2 ˆ  D]* } ˆ j  d | ƒ ˆ | | i  g  ƒ q1 Wd S(   so  
    objects:       A list of objects to find cycles in.  It is often useful
                   to pass in gc.garbage to find the cycles that are
                   preventing some objects from being garbage collected.
    outstream:     The stream for output.
    show_progress: If True, print the number of objects reached as they are
                   found.
    c            s^  xJt  |  ƒ D]<\ } } |  | d t |  ƒ } ˆ  j d t t | ƒ ƒ ƒ t | t ƒ rË xÜ | j ƒ  D]Z \ } } | | k r� ˆ  j d t | ƒ ƒ Pn  | | k rj ˆ  j d t | ƒ ƒ Pqj qj Wnq t | t	 ƒ r÷ ˆ  j d | j
 | ƒ ƒ nE t | t ƒ r)ˆ  j d t	 | ƒ j
 | ƒ ƒ n ˆ  j t | ƒ ƒ ˆ  j d ƒ q Wˆ  j d ƒ d  S(   Ni   s	      %s -- s   [%s]s
   [key] = %ss   [%d]s    ->
s   
(   t	   enumeratet   lent   writet   strt   typet
   isinstancet   dictt   itemst   reprt   listt   indext   tuple(   t   patht   it   stept   nextt   keyt   val(   t	   outstream(    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/find_reference_cycles.pyt
   print_path   s$    #c            s½   ˆ r  ˆ j  d t | ƒ ƒ n  d  | t |  ƒ <t j |  ƒ } xw | D]o } | | k re ˆ | ƒ qF | ˆ  k sF t | t ƒ r† qF qF t | ƒ | k rF ˆ | | | | |  g ƒ qF qF Wd  S(   Ns   %d(   R   R   t   Nonet   idt   gct   get_referentsR   R   (   t   objt   startt   allt   current_patht	   referentst   referent(   t   objectsR   R   t   recurset   show_progress(    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/find_reference_cycles.pyR"   -   s    s   Examining: %r
N(   R   (   R!   R   R#   R   (    (   R!   R   R   R"   R#   sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/find_reference_cycles.pyt   print_cycles   s
    	c          C   sä   d t  f d „  ƒ  Y}  |  ƒ  } t ƒ  } t | g d | ƒ| j ƒ  j ƒ  } t | ƒ d k se t ‚ | d j d ƒ s~ t ‚ | d j d ƒ d k s� t ‚ | d j d ƒ d k s¼ t ‚ | d j d	 ƒ d k sÛ t ‚ d
 GHd  S(   Nt	   bad_classc           B   s   e  Z d  „  Z d „  Z RS(   c         S   s   |  j  |  _ d  S(   N(   t   bt   a(   t   self(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/find_reference_cycles.pyt   __init__O   s    c           S   s   d S(   Ni   i   i   (    (    (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/find_reference_cycles.pyR&   R   s    (   t   __name__t
   __module__R)   R&   (    (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/find_reference_cycles.pyR%   M   s   	R   i   i    s   Examining: <i   i   R	   t   OK(	   t   objectR   R$   t   getvaluet
   splitlinesR   t   AssertionErrort
   startswitht   count(   R%   t   tt   siot   lines(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/find_reference_cycles.pyt   exerciseK   s    		t   __main__(   t
   __future__R    t   typesR   R   R   t   syst   stdoutt   FalseR$   R6   R*   (    (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/find_reference_cycles.pyt   <module>   s   >	