ó
Y™xTc           @   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 Z d „  Z	 d d „ Z
 d	 „  Z d
 d d „ Z d „  Z d d „ Z d d „ Z d „  Z e d k rÉ e e j d ƒ n  d S(   iÿÿÿÿ(   t   division(   t
   find_pathst	   construct(   t   rigidity(   t   utilsNc          C   s¨   t  j d d d g  ƒ }  t d |  ƒ j d d ƒ i  i  f k sE t ‚ t  j d d d d g ƒ }  xA d d g D]3 } t d |  ƒ j d | ƒ i  i  f k sm t ‚ qm Wd  S(	   Nt
   n_verticesi   t	   edge_listt	   edge_setst   ivi    i   (   i    i   (   R   t   construct_edge_setsR   t   search_fromt   AssertionError(   R   R   (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_tardy_tree_find_paths.pyt   exercise_minimal   s
    -i
   c         C   s6  x/t  d |  d ƒ D]} g  t  | ƒ D]& } t t | | d | f ƒ ƒ ^ q' } t j d | d | ƒ } t d | ƒ j d d ƒ \ } } | d k rÚ t | ƒ d	 k s° t ‚ t | j	 ƒ  ƒ t
 d | ƒ k st ‚ nC t | ƒ d k sò t ‚ t | j	 ƒ  ƒ t
 d	 | d ƒ k st ‚ | d k r�| i d	 g g d 6d g g d	 6k sUt ‚ | i t d	 g ƒ g d 6t d g ƒ g d	 6k s.t ‚ q | d
 k r | i d	 d g g d 6d	 d g g d 6k sÎt ‚ | i t d	 d g ƒ g d 6t d g ƒ t d g ƒ g d	 6t d d	 g ƒ g d 6k s.t ‚ q q Wd  S(   Ni   i   R   R   R   R   i    i   i   i   (   t   xranget   tuplet   sortedR   R	   R   R
   t   lenR   t   keyst   ranget   set(   t   loop_size_maxR   t   iR   R   t   loopst	   dendrites(    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_tardy_tree_find_paths.pyt   exercise_simple_loops   s$    6	!*+,;2c       	   C   sÄ  t  j d d d d
 d d d g ƒ }  i  i t d g ƒ t d d g ƒ g d 6t d d g ƒ t d g ƒ g d 6f i d g g d 6d g g d 6i t d g ƒ g d 6t d g ƒ g d 6f i d g g d 6d g g d 6i t d g ƒ g d 6t d g ƒ g d 6t d g ƒ g d 6f i d g g d 6d g g d 6i t d g ƒ g d 6t d g ƒ g d 6t d g ƒ g d 6f g } xE t d ƒ D]7 } t d |  ƒ j d	 | ƒ } | | | k s…t ‚ q…Wd  S(   NR   i   R   i    i   i   i   R   R   (   i    i   (   i   i   (   i   i   (   i   i   (   R   R	   R   R   R   R
   R   (   R   t   expected_loops_dendritesR   t   loop_dendrites(    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_tardy_tree_find_paths.pyt   exercise_knot#   s    	MI\bi    i   c         C   s`   t  |  ƒ } | } x4 t | | | ƒ D] } | j | | f ƒ | } q& W| j | | f ƒ | S(   N(   t   listR   t   append(   R   t   offst   sizet   avt   bvt   resultR   t   j(    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_tardy_tree_find_paths.pyt   archs_grow_edge_list0   s    
c         C   s¡   t  j d |  d | ƒ } t  j d | ƒ } t  j d | ƒ } g  d d g D]* } t j d d d |  d | d | ƒ ^ qI } | d	 | d
 k s“ t ‚ | | d	 f S(   NR   R   R   t   floatt   integert   n_dimi   t   methodi    i   (   R   R	   t   bond_bending_edge_setst   extract_edge_listR   t   determine_degrees_of_freedomR   (   R   R   t   est   bbest   bbelR(   t   dofs(    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_tardy_tree_find_paths.pyt   arch_dof9   s    :i   c         C   s  xt  d |  d ƒ D]} t d g d | ƒ } xå t  d |  d ƒ D]Ð } d | | } t | d | | ƒ } t d | d | ƒ \ } } | d k } | d k  o¹ | d k  o¹ | | d k  }	 |	 | k sÎ t ‚ t d | d | ƒ j ƒ  }
 t |
 j j ƒ d k }	 |	 | k sC t ‚ qC Wq Wd  S(	   Ni   i    i   R   R   i   i
   (   i    i   (	   R   R$   R0   R   R   t
   build_treeR   t   cluster_managert   clusters(   t   arch_size_maxt   arch_size_1t   edge_list_1t   arch_size_2R   t   edge_list_12R,   t   doft   is_rigidt   inferred_is_rigidt   tt(    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_tardy_tree_find_paths.pyt   exercise_fused_loopsC   s"    c      	   C   s–  x�t  d |  d ƒ D]z} t g  d | ƒ } x_t  d |  d ƒ D]J} t | d | | ƒ } x+t  d |  d ƒ D]} d | | | } t | d | | | ƒ } t d | d | ƒ \ } }	 t d t | | | ƒ d | | | d ƒ }
 |
 |	 k sý t ‚ |	 d k } | d k  o>| d k  o>| d k  o>| | | d k  } | | k sSt ‚ t d | d | ƒ j ƒ  } t | j j	 ƒ d k } qp Wq@ Wq Wd  S(   Ni   i   R   R   i   i   i
   (
   R   R$   R0   t   maxR   R   R1   R   R2   R3   (   R4   R5   R6   R7   R8   t   arch_size_3R   t   edge_list_123R,   R9   t   expectedR:   R;   R<   (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_tardy_tree_find_paths.pyt   exercise_three_archsX   s2    c         C   sD   t  |  ƒ d k s t ‚ t ƒ  t ƒ  t ƒ  t ƒ  t ƒ  d GHd  S(   Ni    t   OK(   R   R   R   R   R   R=   RB   (   t   args(    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_tardy_tree_find_paths.pyt   runu   s    t   __main__(   t
   __future__R    t   scitbx.graph.tardy_treeR   R   t   scitbx.graphR   R   t   sysR   R   R   R$   R0   R=   RB   RE   t   __name__t   argv(    (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_tardy_tree_find_paths.pyt   <module>   s   				
		