ó
Y™xTc        %   @   si  d  d l  m Z d  d l m Z m Z m Z d  d l m Z d  d l m	 Z	 d  d l
 m Z m Z d  d l Z d  d l Z d  d l m Z d  d l Z d „  Z d	 „  Z d
 e f d „  ƒ  YZ e d d d d d g  d d g g d dA g d d g d d g ƒ e d d d d d dB g d d g d g g d dC g d d g d d g ƒ e d d d d d dD dE dF dG dH dI g d d d d d d d g g d dJ g d d g d d g ƒ e d d d d d dK dL dM dN dO dP dQ g d d g d g d g d g d g d g d g g d dR dS dT dU dV g d d g d d d d d d g d dW g d  dX dY g ƒ 	e d d! d d" d dZ d[ d\ d] d^ d_ d` da g d d g d g d g d g d g d g d g d g g d db dc dd de df dg g d d g d d d d d d d g d dh g d  di dj g ƒ 	e d d# d d$ d dk dl dm dn do dp dq dr ds g	 d d g d g d g d g d g d g d g d g d" g d% g g
 d dt du dv dw dx g d d g d d g d ƒ e d d& d d$ d dy dz d{ d| d} d~ d d€ d� d‚ g
 d d d d% g d g d g d g d g d g d g d" g g d dƒ d„ d… d† g d d g d d g d ƒ e d d' d d$ d d‡ dˆ d‰ dŠ d‹ dŒ d� dŽ d� d� g
 d d d d d g d g d g d g d g d" g d% g g d d‘ d’ g d d g d d g d ƒ e d d( d d$ d d“ d” d• d– d— d˜ d™ dš d› dœ g
 d d d d d d" g d g d g d g d g d% g g d d� dž g d d g d d g d ƒ e d d) d d$ d dŸ d  d¡ d¢ d£ d¤ d¥ d¦ d§ d¨ g
 d d d d d d d" g d g d g d g d% g g d d© dª g d d g d d g d ƒ e d d* d d$ d d« d¬ d­ d® d¯ d° d± d² d³ d´ dµ g d d d d d d d" g d g d g d g d% g g d d¶ d· g d d g d d g d ƒ e d d+ d d$ d d¸ d¹ dº d» d¼ d½ d¾ d¿ dÀ dÁ dÂ g d d d d d d" d% g d g d g d g d g g d dÃ dÄ g d d g d d g d ƒ e d d, d d$ d dÅ dÆ dÇ dÈ dÉ dÊ dË dÌ dÍ dÎ dÏ dÐ g d d d d d d d" d% g d g d g d g g d dÑ dÒ g d d g d d g d ƒ e d d- d d$ d dÓ dÔ dÕ dÖ d× dØ dÙ dÚ dÛ dÜ dÝ g d d d d d g d d d g d g d" g d% g g d dÞ dß g d d g d d g d ƒ e d d. d d d g  d d g d g g d dà dá g d d d g d d d g ƒ e d d/ d d d dâ g d d g d g d g g d dã dä g d d d g d d d g ƒ e d d0 d d$ d då dæ dç dè dé dê dë dì dí dî g
 d d d d d" g d d d g d g d g d% g g d dï dð dñ g d d d g d d d d g ƒ e d d1 d d$ d dò dó dô dõ dö d÷ dø dù dú dû g
 d d d d d g d d d d" g d g d% g g d dü dý dþ g d d d g d d d d g ƒ e d d2 d d$ d dÿ d ddddddddd	d
g d d d d d d d d d d" d% g
 g d dg d d g d d g ƒ e d d3 d d d dddddddg d d d d g d d d g g d ddg d d g d d g d ƒ g Z d4 „  Z d5 „  Z d6 „  Z d$ d7 „ Z d$ d8 „ Z d9 „  Z d: „  Z d; „  Z d< „  Z d= „  Z d> „  Z  d? „  Z! e" d@ k ree! e j# d ƒ n  d S(  iÿÿÿÿ(   t   division(   t   cluster_managert
   find_pathst	   construct(   t   construct_edge_sets(   t   matrix(   t   Exception_expectedt	   show_diffN(   t   StringIOc         C   s2   d d l  m } | j |  | j d t |  ƒ ƒ ƒ S(   Niÿÿÿÿ(   t   flext   size(   t   scitbx.array_familyR	   t   selectt   random_permutationt   len(   t   sR	   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_tardy_tree.pyR   
   s    c          C   sß  t  d d ƒ }  |  j g  k s$ t ‚ |  j g  k s9 t ‚ t  d d ƒ }  x‡ t d ƒ D]y } |  j d d d d d g k s t ‚ |  j d g d g d g d g d g g k s² t ‚ |  j d d d	 d d
 t ƒ qU Wx‡ t d ƒ D]y } |  j d d d	 d d
 t ƒ |  j d d d d d g k s%t ‚ |  j d g d d g d g g  d g g k sß t ‚ qß Wx¨ t d ƒ D]š } |  j d d d	 d d
 t ƒ |  j d d d d d g k s¯t ‚ xQ t d ƒ D]C } |  j g  d d d g d g g  d g g k sõt ‚ |  j ƒ  q¼WqiW|  j d d d	 d d
 t ƒ |  j g  d d d g d d g g  g  g k sVt ‚ |  j d d d d d g k szt ‚ |  j d d d	 d d
 t ƒ |  j g  d d d d d g g  g  g  g k sÉt ‚ |  j d d d d d g k sít ‚ |  j ƒ  |  j d d d d d g g k st ‚ |  j d d d d d g k sBt ‚ t  d d ƒ }  |  j d d d	 d d
 t ƒ |  j d d d	 d d
 t ƒ |  j d d d	 d d
 t ƒ |  j ƒ  |  j d d d g d d g d g g k sßt ‚ |  j d d d d d d g k st ‚ d d d d g } |  j d d d	 d d
 t ƒ |  j ƒ  |  j d d d d g d d g g k skt ‚ |  j d d d d d d g k s’t ‚ t	 d d d | ƒ } |  j
 d | ƒ |  j d d d d d g d g g k sät ‚ |  j d d d d d d g k st ‚ |  j d d g k s&t ‚ |  j d d g k sAt ‚ |  j ƒ  d g k s\t ‚ |  j ƒ  d d g k szt ‚ |  j d | ƒ |  j d d g k s¥t ‚ d d d d d d g |  _ d d d d g d d g g |  _ d  |  _ d  |  _ d  |  _ |  j d | ƒ |  j d d d d d d g g k s6t ‚ |  j d d d d d d g k s]t ‚ t ƒ  } |  j d | d d ƒ |  k sŠt ‚ t | j ƒ  d ƒ s¦t ‚ t  d d d t ƒ }  |  j d d d g g k sÜt ‚ |  j d d d g k sút ‚ |  j ƒ  |  j
 d d  ƒ |  j d d d g g k s5t ‚ |  j d d d g k sSt ‚ |  j d g k skt ‚ |  j g  k s€t ‚ |  j ƒ  d g k s›t ‚ |  j ƒ  d g k s¶t ‚ |  j d d  ƒ |  j g  k sÛt ‚ d  S(   Nt
   n_verticesi    i   i   i   i   i   t   it   jt   optimizei   t	   edge_listt	   edge_setsiÿÿÿÿt   outt   prefixt   >s  >number of fixed vertex lists: 0
>number of fixed vertices: 0
>number of clusters: 1
>merge clusters with multiple connections: 2 passes
>number of hinge edges: None
>number of loop edges: None
>number of loop edge bendings: None
>number of fixed hinges: None
t   all_in_one_rigid_body(   i    i   (   i    i   (   i   i   (   i   i   (   iÿÿÿÿi   (   i   i    (   i   i    (   i   i   (   i   i   (   i   i   (   iÿÿÿÿi    (   R   t   cluster_indicest   AssertionErrort   clusterst   xranget   connect_verticest   Truet   refresh_indicest   tidyR   t   construct_spanning_treest   hinge_edgest
   loop_edgest   rootst   tree_idst   find_loop_edge_bendingst   loop_edge_bendingst   Nonet(   merge_clusters_with_multiple_connectionsR   t   show_summaryR   t   getvalue(   t   cmt   pt   qt   edgest   est   sio(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_tardy_tree.pyt   exercise_cluster_manager   s”    $3 $7$33$3$
'$
0'
-'-'!			*'	$	!
!t   test_case_datac           B   s   e  Z g  g  d  „ Z RS(   c
   
      C   so   | d d k s t  ‚ | d |  _ | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ |	 |  _	 d  S(   Ni    s   
i   (
   R   t   artR   R   t	   clusters1t   hinge_edges1t   roots1t	   tree_ids1t   loop_edges1t   loop_edge_bendings1(
   t   OR5   R   R   R6   R7   R8   R9   R:   R;   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_tardy_tree.pyt   __init__h   s    
							(   t   __name__t
   __module__R=   (    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_tardy_tree.pyR4   f   s   
R5   s   
0
R   i   R   R6   i    R7   R8   R9   s   
0 - 1
i   s   
6-membered loop
i   i   i   i   s   
7-membered loop
i   R:   R;   s   
8-membered loop
i   s�   
           7
           |
  5        1
   \     /   \
    4 - 0     2 - 8
   /         /
  6        3
           |
           9
i
   i	   s…   
           7
           |
  5        1
   \     /   \
    4 - 0     2 - 8
   /         //
  6        3 /
           |/
           9
s�   
           7
           |
  5        1
   \     /   \
    4 - 0     2 - 8
   /     \   /
  6        3
           |
           9
sˆ   
           7
           |
  5        1--\
   \     /   \ \-\
    4 - 0     2 - 8
   /     \   /
  6        3
           |
           9
s‹   
           7
           | \
  5        1   \
   \     /       \
    4 - 0     2 - 8
   /     \   /
  6        3
           |
           9
s‹   
           7
           | \
  5        1   \
   \     /   \   \
    4 - 0     2 - 8
   /     \   /
  6        3
           |
           9
s‹   
           7
           |
  5        1
   \     /   \
    4 - 0     2 - 8
   /     \   /   /
  6        3   /
           | /
           9
s•   
           7
           | \
  5        1   \
   \     /   \   \
    4 - 0     2 - 8
   /     \   /   /
  6        3   /
           | /
           9
s�   
           7
           |
  5        1
  |\     /   \
  | 4 - 0     2 - 8
  |/     \   /
  6        3
           |
           9
s   
0   1
s   
0 - 2   1
s‹   
           7
           | \
  5        1   \
  |\         \   \
  | 4 - 0     2 - 8
  |/         /
  6        3
           |
           9
s‹   
           7
           | \
  5        1   \
             \   \
    4 - 0     2 - 8
   /     \   /
  6 ------ 3
           |
           9
sp   
    3 - 6 ----- 4 - 0
   /     \     /     \
  8       1   5       9
    \   /       \   /
      2 --------  7
sB   
  1        5
  |\     / |
  | 0 - 3  |
  |/     \ |
  2        4
c            s�  x‰t  t ƒ D]{\ } } ˆ  d I| IJˆ  | j IJ| j | j | j | j | j | j | j | j | j | j f
 \
 } } } } } } }	 }
 } } ‡  f d †  } t	 d | j
 d | j ƒ } | j } | d | j | ƒ | j d | j ƒ ˆ  d I| j IJ| d | j | ƒ | d	 | j | ƒ | j ƒ  } | d
 | | ƒ | j ƒ  } | d | | ƒ | j d | j ƒ | d | j | ƒ t	 d | j
 d | j ƒ } | j } | j d | j ƒ | d | j |	 ƒ | j d | j ƒ ˆ  d I| j IJ| d | j |
 ƒ | d | j | ƒ | j d | j ƒ | d | j | ƒ t d | j ƒ } x- t t | j ƒ ƒ D] } | j d | ƒ qjWˆ  Jq Wd  S(   Ns   test_case index:c            sZ   ˆ  |  I| IJ| d  k	 rV | | k r; ˆ  d I| IJn  | | k sV t d ƒ ‚ n  d  S(   Ns	   expected:s   Note: --verbose for details(   R)   R   (   t   labelt   havet   expected(   R   (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_tardy_tree.pyt   assert_same  s
    R   R   s   c1:R   s   c1t:s   he1:s   le1:s   r1:s   tid1:s   leb1:s   c2:s   c2t:s   he2:s   le2:s   leb2:t   iv(   t	   enumeratet
   test_casesR5   R6   R7   R8   R9   R:   R;   R   R   R   R   R   R"   R   R#   R$   R%   R&   R'   R(   R*   R   R   R   t   search_from(   R   t   i_tct   tct   tc_c1t   tc_he1t   tc_r1t   tc_tid1t   tc_le1t   tc_leb1t   tc_c2t   tc_he2t   tc_le2t   tc_leb2RC   t   ttR-   t   rt   tidt   fpRD   (    (   R   sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_tardy_tree.pyt   exercise_test_casesø  sD    <		c         C   sN   d d l  m } x7 t | j ƒ D]& \ } } |  d I| IJ| j ƒ  q  Wd  S(   Niÿÿÿÿ(   t   test_cases_tardy_pdbs   test_cases_tardy_pdb index:(   t   scitbx.graphRY   RE   RF   t   tardy_tree_construct(   R   RY   RH   RI   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_tardy_tree.pyt   exercise_pdb_test_cases'  s    c          C   se  d }  d d d d d  d! d" d# d$ d% d& d' d( g } t  d |  d | ƒ } | j } t | j d | j ƒ ƒ d) d* d+ d, d- d. d/ d0 d1 d2 d3 d4 g k sœ t ‚ | j d | j ƒ \ } } | d5 d6 d7 d8 d9 d: d; d< d= d> d? d@ g k sí t ‚ | d g t | ƒ k st ‚ t  d |  d | ƒ } t ƒ  } | j	 d d  d | d d ƒ | k sTt ‚ t | j ƒ  d ƒ spt ‚ | j ƒ  t ƒ  } | j	 d d  d | d d ƒ | k s­t ‚ t | j ƒ  d ƒ sÉt ‚ t ƒ  } | j j d | ƒ | j k söt ‚ t | j ƒ  d ƒ st ‚ t ƒ  } | j d | d d d t ƒ | k sEt ‚ t | j ƒ  d ƒ sat ‚ d  S(A   Ni   i    i   i   i   i   i   i   i   i   i	   i
   i   R   R   R   t   vertex_labelsR   R   t   $sL  $number of vertices: 12
$number of edges: 13
$find cluster loops: None
$number of fixed vertex lists: 0
$number of fixed vertices: 0
$number of clusters: 12
$merge clusters with multiple connections: 0 passes
$number of hinge edges: None
$number of loop edges: None
$number of loop edge bendings: None
$number of fixed hinges: None
R   sE  >number of vertices: 12
>number of edges: 13
>find cluster loops: 0 repeats
>number of fixed vertex lists: 0
>number of fixed vertices: 0
>number of clusters: 9
>merge clusters with multiple connections: 1 pass
>number of hinge edges: 9
>number of loop edges: 2
>number of loop edge bendings: 5
>number of fixed hinges: None
s•  # clusters are in square brackets []
# hinge edges are in parentheses ()
# (0, 1) -> [2, 3] means that the cluster with vertices [2, 3]
#   rotates around the axis through vertices (0, 1)
# integers are vertex indices (counting from 0)
[2, 3, 4, 11]
  (3, 2) -> [1]
    (2, 1) -> [0]
      (1, 0) -> [10]
  (3, 4) -> [5]
    (4, 5) -> [6]
      (5, 6) -> [7]
        (6, 7) -> [8]
          (7, 8) -> [9]
s   =-t   headers»   =-[2, 3, 4, 11]
=-  (3, 2) -> [1]
=-    (2, 1) -> [0]
=-      (1, 0) -> [10]
=-  (3, 4) -> [5]
=-    (4, 5) -> [6]
=-      (5, 6) -> [7]
=-        (6, 7) -> [8]
=-          (7, 8) -> [9]
(   i    i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i	   (   i	   i
   (   i	   i   (   i    i
   (   i   i   (   i    i   i   (   i    i   i
   (   i    i	   i
   (   i   i   i   (   i   i   i   i   (   i   i   i   (   i   i	   i   (   i   i   i   (   i   i   i   (   i   i   i   (   i   i   i	   (   i   i	   i
   i   (   i   i   (   i	   i   (   i    i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i
   i   (   i   i   (   R   R   t   sortedt   overlapping_rigid_clustersR   R   t4   determine_weighted_order_for_construct_spanning_treeR   R   R+   R)   R   R,   t
   build_treet	   show_treet   False(   R   R   RT   R-   t   cii_orcst   fixed_vertex_infoR2   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_tardy_tree.pyt"   exercise_special_case_ZINC03847121-  sB    		!	*
	*	$	*
c   	      C   sæ  d d d d d d d d g } d d g d g d g d g d g d g d g d g d	 g g	 d f d d d d g d d d d g d d d d	 g g d d g d g d g d g d g d g d g d	 g g d f d d d d g d d d d g d d d d	 g g d d d g d g d g d g d g d g d	 g g d f d d d d g d d d d g d d d d g g d d d d g d g d g d g d g d	 g g d f d d d d g d d d d g d d d d g d d d d	 g g d d d d d g d g d g d g d	 g g d f d d d d g d d d d g d d d d	 g g d d d g d d g d g d g d g d	 g g d f d d d d g d d d d	 g g d d g d d g d g d g d g d g d	 g g d f g } x_ | D]W \ } } } t d
 d d | d | ƒ } | j j | k st ‚ | j | k sÚt ‚ qÚWxª | D]¢ \ } } } | d k r`g  } n  x{ t |  ƒ D]m } t d
 d d t | ƒ d g  | D] } t | ƒ ^ q’ƒ } | j j | k sÅt ‚ | j | k smt ‚ qmWq<Wd S(   s	  
CRYST1   12.661   12.601   14.403  90.00  90.00  90.00 P 1
ATOM      0  C   GLY A 138       5.965   6.290   5.906  1.00 35.93           C
ATOM      1  O   GLY A 138       5.429   5.188   5.784  1.00 40.71           O
ATOM      2  N   GLY A 138       7.860   7.800   5.206  1.00 34.54           N
ATOM      3  CA  GLY A 138       6.857   6.828   4.801  1.00 33.64           C
ATOM      4  N   GLY A 139       5.798   7.062   6.977  1.00 33.49           N
ATOM      5  CA  GLY A 139       4.960   6.636   8.087  1.00 33.25           C
ATOM      6  C   GLY A 139       5.536   5.495   8.904  1.00 32.97           C
ATOM      7  O   GLY A 139       4.801   4.801   9.602  1.00 35.18           O
ATOM      8  OXT GLY A 139       6.772   5.318   8.862  1.00 34.96           O
END
  i    i   i   i   i   i   i   i   i   R   i	   R   t   external_clustersN(   i    i   (   i    i   (   i    i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   R)   R   R   R   R   t   external_clusters_connect_countR   R   (	   t   n_trialsR   RB   Ri   t   expected_clusterst   expected_countRT   t   i_trialt   c(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_tardy_tree.pyt   exercise_external_clusters‡  sJ    9060300?-00!3 	"c         C   sD  t  d d d d g g ƒ } | j d g d g g k s< t ‚ t  d d d d g g ƒ } | j d g d g g k sx t ‚ d$ d% d& d' g } t d d d | ƒ } x’d d g D]„} x{t t g D]m} xdd( d) g d* d+ g d, d- g g D]A} t  d d d | g g ƒ } x0 | D]( \ } } | j d	 | d
 | d | ƒ qW| d k ri| d d. k r½| s�| j d g g  g  d d d g g k sºt ‚ q5| j d g g  d d d g g  g k s5t ‚ nx | sØ| d d d k r| j d g d d d g g  g  g k s5t ‚ n- | j d g g  d d d g g  g k s5t ‚ | j ƒ  | j d g d d d g g k sÇt ‚ n^ | j d d d g d g g  g  g k s–t ‚ | j ƒ  | j d d d g d g g k sÇt ‚ | j d | ƒ | j d d d d g g k sût ‚ | j	 d/ g k st ‚ | j
 g  k sç t ‚ qç Wq¿ Wq¬ Wd d l m }	 |	 j d }
 |
 j d k sft ‚ |
 j d d d d g g ƒ } | j  j d d d d d d d d d d d d d d d d d d d g d g d g g k sät ‚ y  |
 j d d g d g g ƒ Wn+ t k
 r1} t | ƒ d  k s8t ‚ n Xt ‚ y  |
 j d d g d g g ƒ Wn+ t k
 r…} t | ƒ d! k sŒt ‚ n Xt ‚ y  |
 j d d g d g g ƒ Wn+ t k
 rÙ} t | ƒ d" k sàt ‚ n Xt ‚ xèt D]à}
 t |
 j ƒ d k rqçn  t d |
 j d |
 j ƒ } | j ƒ  | j  } | j } | j ƒ  } | d | d k set ‚ x_t d t | d ƒ d ƒ D]@} x7t d t | d ƒ d ƒ D]} xt |  ƒ D]} t | d ƒ |  } t | d ƒ |  } t d |
 j d |
 j d | | g ƒ j ƒ  } | j  } | j } | j ƒ  } t | ƒ t | j ƒ k sTt ‚ xd | j D]Y } t t  g  | D] } | | ^ qqƒ ƒ d k s™t ‚ | | | d | k s^t ‚ q^WqºWq§WqƒWqçWx_ d d g D]Q } t d d d d0 g d | g g ƒ j ƒ  } | j  j d d g g k sØt ‚ qØWxh d d d g D]W } t d d d d1 d2 g d | g g ƒ j ƒ  } | j  j d d d g g k s=t ‚ q=Wd3 d4 d5 d6 d7 d8 d9 d: d; d< d= g } t d d d | d# d> ƒ } | j  j d? k sòt ‚ t d d d | d# d@ ƒ } | j  j d d d g d d g d g g k s@t ‚ d  S(A   NR   i   t   fixed_vertex_listsi    i   i   i   R   R   R   R   R   iÿÿÿÿ(   RY   i   t
   tyr_with_hi   i   i   i   i   i	   i
   i   i   i   i   i   i   i   i   s>   connect_clusters(): fixed vertex lists in same connected tree.sb   determine_weighted_order_for_construct_spanning_tree(): fixed vertex lists in same connected tree.sF   construct_spanning_trees(): fixed vertex lists in same connected tree.t   fixed_vertices(   i    i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   iÿÿÿÿi   (   i    i   (   i    i   (   i   i   (   i   i	   (   i   i	   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i    i   (    (    (   i   i   i   i   i	   i   (!   R   R   R   R   Re   R   R   R!   R"   R#   R$   RZ   RY   RF   t   tagR[   t   RuntimeErrort   strR   t   maxR9   R   R   R   Rc   R&   R   R   R   R   t'   fixed_vertices_given_cluster_index_dictRq   t   set(   Rk   R-   R   R   t   fixed_vertexR   t   connectsR   R   RY   RI   RT   t   et   clt   tit   lfvl0t   lfvl1Rn   t   fvl0t   fvl1t   ttft   cmft   cift   fvgciRs   t   el(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_tardy_tree.pyt   exercise_fixed_vertices¼  sÄ    !!( 000-
*-
'$!	< 	 	 	 
		$$				!52	%(	c       	   C   sÄ   d d d d d  g }  t  j d! d" d# d$ d% d& g ƒ } t d | d |  d d ƒ } | j j d d d d d d g k s{ t ‚ t d | d |  d d ƒ } | j j d d d d d d g k sÀ t ‚ d  S('   Ni    i   i   i   i   i   gsh‘í|? @g…ëQ¸¾R@g¤p=
×£@g/Ý$�å?g     èR@g
×£p=Š@g¬Zd;¯¿gmçû©ñÊR@gÇK7‰A`@gßO�—n ÀgœÄ °r˜R@gyé&1¬Ô?gã¥›Ä °æ¿gh‘í|?ÅR@g`åÐ"Ûùæ?g¸…ëQ¸Ö¿g²�ï§ÆÃR@g!°rh‘í@t   sitesR   t*   near_singular_hinges_angular_tolerance_deg(   i    i   (   i   i   (   i   i   (   i   i   (   i   i   (   gsh‘í|? @g…ëQ¸¾R@g¤p=
×£@(   g/Ý$�å?g     èR@g
×£p=Š@(   g¬Zd;¯¿gmçû©ñÊR@gÇK7‰A`@(   gßO�—n ÀgœÄ °r˜R@gyé&1¬Ô?(   gã¥›Ä °æ¿gh‘í|?ÅR@g`åÐ"Ûùæ?(   g¸…ëQ¸Ö¿g²�ï§ÆÃR@g!°rh‘í@(   R   t   col_listR   R   R   R   (   R   R‰   RT   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_tardy_tree.pyt   exercise_fixed_hinges+  s$    	*	c          C   sÓ   d d l  m }  |  j d d g ƒ } t | ƒ d k s= t ‚ | d j ƒ  } x d  d f t d	 ƒ d f g D]_ \ } } t ƒ  } | j	 d | d | d d ƒ | k s« t ‚ t
 | j ƒ  d | ƒ sl t ‚ ql Wd  S(   Niÿÿÿÿ(   RY   t   tags_or_indicest   ZINC03847120i   i    t   10t   11t   ABCDEFGHIKLMNOt   Lt   MR]   R   R   t   &sp  &number of vertices: 14
&number of edges: 15
&find cluster loops: 0 repeats
&number of fixed vertex lists: 0
&number of fixed vertices: 0
&number of clusters: 1
&merge clusters with multiple connections: 1 pass
&number of hinge edges: 1
&number of loop edges: 0
&number of loop edge bendings: 0
&number of fixed hinges: 1
&tardy fixed hinge: %s
&                   %s
(   R�   R�   (   R’   R“   (   RZ   RY   t   select_test_casesR   R   R[   R)   t   listR   R+   R   R,   (   RY   t   tcsRT   t   vlt   cbR2   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_tardy_tree.pyt   exercise_show_summary@  s    		*c          C   s“  d „  }  |  d d ƒ \ } } | i d( d) d* d+ d, d- d. d/ g d 6d0 d1 d2 d3 d4 d5 d6 d7 g d 6d8 d9 d: d; d< d= d> d? d@ dA dB dC g d! 6dD g d" 6g  d# 6k sª t  ‚ xƒ t d d$ f t d d% f g D]c \ } } } | j d& | ƒ } t | ƒ | k st  ‚ | j d& | ƒ } t | ƒ | k sÉ t  ‚ qÉ W|  d d' ƒ \ } } | i dE dF dG g d 6dH g d 6dI g d! 6g  d" 6dJ dK g d# 6k s�t  ‚ d  S(L   Nc         S   s½   d d l  m } | j d |  g ƒ } t | ƒ d k s= t ‚ | d j ƒ  } | j j ƒ  } i g  d 6g  d 6g  d 6g  d	 6g  d
 6} x+ | j D]  } | | d | ƒ j	 | ƒ q� W| | f S(   Niÿÿÿÿ(   RY   R�   i   i    t   baset   hinget   intrat   loopt   fixedt   edge(
   RZ   RY   R•   R   R   R[   R   t   edge_classifierR   t   append(   Rt   RY   R—   RT   t   ect   edge_classesR|   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_tardy_tree.pyt   get[  s    
Rt   t   van_fragmenti   i   i   i   i   i   i   i   R›   i    i   i   i   i
   i   i   i   i   Rœ   i   i   i   i   i   i	   i   i   i   i   R�   Rž   RŸ   i   i    t   include_loop_edge_bendingst	   collinear(   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i    i   (   i    i   (   i   i   (   i   i
   (   i
   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i	   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i    i   (   i    i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   R   Re   R   t   viewer_lines_with_colors_legendR   t   viewer_lines_with_colors(   R¥   RT   R¤   t   fR   R   t   vlclt   vlc(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_tardy_tree.pyt   exercise_edge_classifierZ  s*    	
.

c          C   sf   t  d t j d
 d d g ƒ d d ƒ }  t ƒ  } |  j d d  d | ƒ t | j ƒ  d	 ƒ sb t ‚ d  S(   NR‰   i    i   i   R   R   R]   R   s:  number of vertices: 3
number of edges: None
find cluster loops: 0 repeats
number of fixed vertex lists: 0
number of fixed vertices: 0
number of clusters: 1
merge clusters with multiple connections: 0 passes
number of hinge edges: 1
number of loop edges: 0
number of loop edge bendings: 0
number of fixed hinges: 0
(   i    i    i    (   i    i    i   (   i    i    i   (	   R   R   R‹   R   R+   R)   R   R,   R   (   RT   R2   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_tardy_tree.pyt   exercise_all_in_one_rigid_body…  s    		c    	      C   s*  d d l  m }  |  j d d g ƒ } t | ƒ d k s= t ‚ | d j ƒ  } y d | _ Wn t k
 rm n Xt ‚ t	 ƒ  } | j
 d d  d | ƒ x� t t g D]‚ } xy t t j ƒ D]h } | j | | ƒ } | j | ƒ } t	 ƒ  } | j
 d d  d | ƒ t | j ƒ  | j ƒ  ƒ s¶ t ‚ q¶ Wq  Wd  S(	   Niÿÿÿÿ(   RY   R�   RŽ   i   i    R]   R   (   RZ   RY   R•   R   R   R[   t	   arbitraryt   AttributeErrorR   R   R+   R)   t   picklet   cPickleR   t   HIGHEST_PROTOCOLt   dumpst   loadsR   R,   (	   RY   R—   RT   t   tst   pickle_modulet   protocolR   t   lt   ls(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_tardy_tree.pyt   exercise_pickle™  s&    	 		c          C   s  d d l  m }  d d l m } |  j d d d g ƒ } | j |  j d d d g ƒ ƒ } t d | d d d g ƒ } | j ƒ  } | | d	 | d
 | ƒ d ƒ s¤ t	 ‚ | | d	 | d
 | ƒ d ƒ sÈ t	 ‚ |  j d d d d d d d g ƒ } | j |  j d d d d d d d g ƒ ƒ } t d | d d d d d  d! d" g ƒ } t
 | j d	 | d
 | ƒ ƒ d d d d d d d g k st	 ‚ t
 | j d	 | d
 | ƒ ƒ d d d d d d d g k s¾t	 ‚ t
 | j d	 | d
 | ƒ ƒ d d d d d d d g k sýt	 ‚ | j d# ƒ | j d$ ƒ t d | d d% d& d' d( d) d* d+ g ƒ } t
 | j d	 | d
 | ƒ ƒ d d d d d d d d g k sƒt	 ‚ t
 | j d	 | d
 | ƒ ƒ d d d d d d d d g k sÅt	 ‚ t
 | j d	 | d
 | ƒ ƒ d d d d d d d d g k st	 ‚ d  S(,   Niÿÿÿÿ(   R	   (   t   approx_equali    i   i   R‰   R   t   sites_cart_1t   sites_cart_2iþÿÿÿi   i   i   i   i   (   i    i    i    (   i    iÿÿÿÿi   (   i    i   i   (   i    i   (   i    i   (   i    i    i    (   i    iÿÿÿÿi   (   i    i   i   (   i    iÿÿÿÿi   (   i    iþÿÿÿi   (   i    i   i   (   i    i   i   (   i    i   (   i    i   (   i   i   (   i   i   (   i   i   (   i   i   (   i    i   i   (   i    i   i   (   i    i   (   i    i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   R   R	   t   libtbx.test_utilsR½   t   vec3_doubleR   t   size_tR   t   rmsd_calculatorR   R–   t   rmsd_permutationR¢   (   R	   R½   t   sites_1t   sites_2RT   RÃ   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_tardy_tree.pyt   exercise_rmsd_calculation­  sB    !		-33366c         C   s«   |  g  d g g k s t  ‚ d |  k } | r9 t j } n	 t ƒ  } t ƒ  t d | ƒ t d | ƒ t ƒ  t ƒ  t	 ƒ  t
 ƒ  t ƒ  t ƒ  t ƒ  t ƒ  t ƒ  d GHd  S(   Ns	   --verboseR   t   OK(   R   t   syst   stdoutR   R3   RX   R\   Rh   Rp   Rˆ   RŒ   Rš   R®   R¯   R¼   RÇ   (   t   argst   verboseR   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_tardy_tree.pyt   runÒ  s$    	t   __main__(   iÿÿÿÿi    (   i    i   (   iÿÿÿÿi    (   i    i   (   i    i   (   i   i   (   i   i   (   i   i   (   i   i   (   iÿÿÿÿi    (   i    i   (   i    i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   iÿÿÿÿi    (   i    i   (   i   i   (   i   i   (   i   i   (   i   i   (   i    i   (   i   i   (   i    i   (   i    i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   iÿÿÿÿi    (   i    i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i    i   (   i   i   (   i    i   (   i    i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i	   (   i   i   (   i   i   (   iÿÿÿÿi   (   i   i   (   i   i    (   i    i   (   i   i   (   i    i   (   i    i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i	   (   i   i	   (   i   i   (   i   i   (   iÿÿÿÿi   (   i   i   (   i   i    (   i    i   (   i    i   (   i    i   (   i    i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i	   (   i   i   (   i   i   (   iÿÿÿÿi    (   i    i   (   i    i   (   i    i   (   i    i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i	   (   i   i   (   i   i   (   iÿÿÿÿi    (   i    i   (   i    i   (   i    i   (   i    i   (   i   i   (   i   i   (   i   i   (   i   i	   (   i   i   (   i   i   (   i   i   (   iÿÿÿÿi    (   i    i   (   i    i   (   i    i   (   i    i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i	   (   i   i   (   i   i   (   i   i   (   iÿÿÿÿi    (   i    i   (   i    i   (   i    i   (   i    i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i	   (   i   i   (   i   i   (   i   i	   (   iÿÿÿÿi    (   i    i   (   i    i   (   i    i   (   i    i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i	   (   i   i   (   i   i   (   i   i   (   i   i	   (   iÿÿÿÿi    (   i    i   (   i    i   (   i    i   (   i    i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i	   (   i   i   (   i   i   (   i   i   (   iÿÿÿÿi    (   i    i   (   iÿÿÿÿi    (   iÿÿÿÿi   (   i    i   (   iÿÿÿÿi    (   iÿÿÿÿi   (   i    i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i	   (   i   i   (   i   i   (   i   i   (   i   i   (   iÿÿÿÿi   (   i   i   (   iÿÿÿÿi   (   i    i   (   i    i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i	   (   i   i   (   i   i   (   iÿÿÿÿi    (   i   i   (   iÿÿÿÿi   (   i    i   (   i    i	   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i	   (   iÿÿÿÿi    (   i    i   (   i    i   (   i    i   (   i   i   (   i   i   (   i   i   (   i   i   (   iÿÿÿÿi    (   i    i   ($   t
   __future__R    t   scitbx.graph.tardy_treeR   R   R   t   scitbx.graph.utilsR   t   scitbxR   RÀ   R   R   R²   R³   R   RÉ   R   R3   t   objectR4   RF   RX   R\   Rh   Rp   Rˆ   RŒ   Rš   R®   R¯   R¼   RÇ   RÍ   R>   t   argv(    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_tardy_tree.pyt   <module>   sô  		X										0		6		B		<		9		6			3			3			3			0			3			3	0	'							/		Z5o			+			%	