ó
t™xTc           @   sÑ  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
 d  d l m Z m Z d  d l m Z m Z d  d	 l Z d  d	 l Z e j d
 ƒ e j d
 ƒ d e j f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d d „ Z  d d „ Z! d „  Z" d „  Z# e$ e j% ƒ Z& g  d „ Z' d
 d d g d f d d g d f d  g d! f g Z( d" „  Z) e* d# k rÍe) e j+ d$ ƒ n  d	 S(%   iÿÿÿÿ(   t   division(   t   tardy(   t
   tardy_tree(   t   test_cases_tardy_pdb(   t   flex(   t   matrix(   t   null_outt   show_times_at_exit(   t   approx_equalt   is_above_limitNi    t   tardy_modelc           B   s    e  Z d  d „ Z d d „ Z RS(   g�íµ ÷Æ°>c         C   s  g  } x|  j  D]÷ } g  } | j } t | j ƒ  ƒ } x¤ t | j ƒ D]“ } g  } xc | | g D]T }	 t | ƒ }
 |
 | c |	 7<| j d |
 ƒ | _ |  j ƒ  | j |  j	 ƒ  ƒ qa W| j | d | d d | ƒ qG W| | _ |  j ƒ  | j t
 j | ƒ ƒ q W| S(   Nt   qi    i   i   (   t   bodiest   jointt   listt   get_qt   xranget   q_sizet   new_qt   flag_positions_as_changedt   appendt   e_potR   t   col(   t   Ot   epst   resultt   bodyt   gst   j_origt   q_origt   iqt   fst
   signed_epst   q_eps(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/tst_tardy.pyt"   d_e_pot_d_q_via_finite_differences   s$    	
%	
i    c         C   sš   |  j  ƒ  } |  j ƒ  } |  j ƒ  } | rf x5 t | | ƒ D]$ \ } } d G| j GHd G| j GHq: WHn  t | | ƒ s{ t ‚ t |  j  ƒ  | ƒ s– t ‚ d  S(   Ns   fin:s   ana:(   t	   qdd_arrayt   d_e_pot_d_qR"   t   zipt   elemsR   t   AssertionError(   R   t   verboset   qdd_origt   anat   fint   at   f(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/tst_tardy.pyt   check_d_e_pot_d_q&   s    (   t   __name__t
   __module__R"   R.   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/tst_tardy.pyR
      s   t   potential_objectc           B   s-   e  Z d  d d d „ Z d „  Z d „  Z RS(   i   gš™™™™™¹?i   g0Žä.ÿ++c   
      C   s¸   t  | t j ƒ r7 g  | D] } t j | ƒ ^ q } n  | |  _ g  |  _ x_ | D]W } g  | D] } t j | | ƒ ^ q] }	 |  j j | t |	 d |	 d ƒ | f ƒ qP W| |  _	 d  S(   Ni    i   (
   t
   isinstanceR   t   vec3_doubleR   R   t   wellst
   restraintsR   t   abst   epsilon(
   R   t   sitesR4   t   restraint_edgest   restraint_edge_weightR7   t   wt   edget   it   s(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/tst_tardy.pyt   __init__4   s    %		&/c   
      C   sû   t  | t j ƒ r7 g  | D] } t j | ƒ ^ q } n  d } x4 t | |  j ƒ D]  \ } } | | | j ƒ  7} qP Wx€ |  j D]u \ } } } g  | D] } | | ^ q” } t	 | d | d ƒ } | |  j
 k  r× q~ n  | | }	 | | |	 d 7} q~ W| S(   Ni    i   i   (   R2   R   R3   R   R   R%   R4   t   dotR5   R6   R7   (
   R   t   sites_movedR>   R   R;   R<   t   d_idealR=   t   d_modelt   delta(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/tst_tardy.pyR   C   s    % 
c         C   s5  t  | t j ƒ r7 g  | D] } t j | ƒ ^ q } n  g  } x5 t | |  j ƒ D]! \ } } | j d | | ƒ qP Wx¹ |  j D]® \ } } } g  | D] } | | ^ q• } t	 | d | d ƒ } | |  j
 k  rØ q n  | | }	 | d |	 | | d | d }
 | | d c |
 7<| | d c |
 8<q W| S(   Ni   i    i   (   R2   R   R3   R   R   R%   R4   R   R5   R6   R7   (   R   RA   R>   R   R;   R<   RB   R=   RC   RD   t   g0(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/tst_tardy.pyt   d_e_pot_d_sitesQ   s    % 
#g|®Gáz„?(   R/   R0   R?   R   RF   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/tst_tardy.pyR1   2   s   
	c            s=   ‡  f d †  } | ƒ  } ˆ  j  ƒ  } t | | ƒ s9 t ‚ d  S(   Nc             sN  t  j ƒ  }  xˆ  j D]ý } | j } | j j } t | ƒ } x± t t | ƒ ƒ D]� } | | d | | <t j	 | ƒ | _
 | | | | <ˆ  j ƒ  | j d | j
 d d ƒ | _ ˆ  j ƒ  } | d k  rØ |  j d ƒ qP |  j d | d ƒ qP W| | _ | j j | _
 ˆ  j ƒ  q Wˆ  j ƒ  d k s/t ‚ t |  ƒ ˆ  j k sJt ‚ |  S(   Ni   t   qdt   delta_tgê-�™—q=g      à?i    (   R   t   doubleR   R   t   qd_zeroR   R   t   lenR   R   RG   t   flag_velocities_as_changedt   time_step_positiont   e_kinR   R   R'   t   degrees_of_freedom(   R   R   t   bj0t   qd0RG   t   iqdRN   (   R
   (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/tst_tardy.pyt   slowb   s*    	
	(   t   qd_e_kin_scalesR   R'   (   R
   RS   t   scales_slowt   scales_fast(    (   R
   sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/tst_tardy.pyt   exercise_qd_e_kin_scalesa   s    	c         C   s¥   |  j  ƒ  } xE d d d d g D]1 } |  j d | ƒ t |  j ƒ  | ƒ s t ‚ q Wt |  j  ƒ  | d d  ƒsv t ‚ |  j d | ƒ t |  j  ƒ  | ƒ s¡ t ‚ d  S(   Ni   gÍÌÌÌÌÌô?i    i   t   e_kin_targett   outt	   qd_packed(   t   pack_qdt   assign_random_velocitiesR   RN   R'   t   Nonet	   unpack_qd(   R
   t   prev_qdRX   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/tst_tardy.pyt   exercise_random_velocities}   s    "c          C   sj  d „  }  |  d d d g  d d g d g d g d	 g d
 g g d d d d d d g d d d d d d  g ƒ |  d d d d! d" d# g d d d d g d	 d
 g g d d$ d% g d d& d' g ƒ |  d d d d( d) d* d+ g d d d d g d	 g d
 g g d d, g d d- g ƒ |  d d d d. d/ d0 d1 d2 d3 g d d d d	 d g d g d
 g d g g d d4 g d d5 g ƒ d  S(6   Nc      	   S   sq  t  j g  t |  ƒ D] } | | d d f ^ q ƒ } g  t |  ƒ D] } t | ƒ ^ qB } d d d d d d d	 g |   } t | ƒ |  k s‘ t ‚ t j d
 | d | ƒ }	 t |	 j j	 ƒ d k sÇ t ‚ |	 j j
 | k sß t ‚ t d | d
 | d | d |	 ƒ }
 |
 j ƒ  t t g  | D] \ } } | ^ qƒ ƒ k s=t ‚ |
 j ƒ  | k sUt ‚ |
 j ƒ  | k smt ‚ d  S(   Ni   i    i   i   i   i   i   i   i   R8   t	   edge_listt   labelst   massesR   (   R   t   col_listR   t   strRK   R'   R   t	   constructt   cluster_managert   fixed_hingest   clusterst   construct_tardy_modelt   root_indicesR   t   reversedt   number_of_sites_in_each_treet   sum_of_masses_in_each_tree(   t
   n_verticesRa   Ri   t   nosiett   somietR=   R8   Rb   Rc   t   ttt   tmt   n(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/tst_tardy.pyt   check‡   s    5%=Ro   i   Ra   Ri   i    i   i   i   i   Rp   Rq   i   i   i   i   i   i0   i+   i[   i   iw   (   i   i   (   i   i   (   i   i   (   i   i   (   i    i   (   i   i   (   i   i   (   i   i   (   i   i   (   i    i   (   i    i   (   i   i   (   i   i   (   i   i   (   i    i   (   i   i0   (   i    i+   (   i    i   (   i   i   (   i   i   (   i   i   (   i    i   (   i    i[   (   i    i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i    i   (   i    iw   (    (   Ru   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/tst_tardy.pyt    exercise_accumulate_in_each_tree†   s2    	$	
'	c             s`  d d ‰ d ‰ ‡ ‡ f d †  }  d d d d d  g } |  d	 d ƒ ‰ x; | D]3 \ } } t  t ˆ | ˆ | ƒ d ƒ sM t ‚ qM W|  d	 d
 ƒ ‰ g  t t ˆ ƒ ƒ D] } t | ƒ ^ q¦ ‰  d g t ˆ ƒ ‰ t j d t ˆ ƒ d | ƒ ‰ ˆ j ƒ  ˆ j	 j
 d d d d g d g g k s&t ‚ ‡  ‡ ‡ ‡ f d †  } t  | ƒ  d ƒ sVt ‚ ˆ j d ˆ ƒ ˆ j	 j d! g k s�t ‚ ˆ j	 j
 d d d d d g g k s«t ‚ t  | ƒ  d d	 d ƒsÉt ‚ ˆ j t j d" ƒ ƒ ˆ  j d ƒ ˆ j d ƒ | j d# ƒ t j d t ˆ ƒ d | ƒ ‰ ˆ j ƒ  ˆ j	 j
 d d d d g d g d g g k sat ‚ t  | ƒ  d ƒ syt ‚ ˆ j d ˆ ƒ ˆ j	 j d$ d% g k s§t ‚ ˆ j	 j
 d d d d d d g g k sÔt ‚ t  | ƒ  d d	 d ƒsòt ‚ ˆ j t j d ˆ ˆ d f ƒ ƒ t  t ˆ d ˆ d ƒ d ƒ s=t ‚ ˆ  j d ƒ ˆ j d ƒ | j d& ƒ t j d t ˆ ƒ d | ƒ ‰ ˆ j ƒ  ˆ j	 j
 d d d d g d g d g d g g k sÅt ‚ t  | ƒ  d ƒ sÝt ‚ ˆ j d ˆ ƒ ˆ j	 j d' d( g k st ‚ ˆ j	 j
 d d d d d d g d g g k s>t ‚ t  | ƒ  d d	 d ƒs\t ‚ d S()   sS   
    0                6
    | \             /
    |  2---3---4---5
    | /
    1
  g      à¿i   g      à?c            s8   t  j ˆ  ˆ d f ˆ  ˆ d f d d d d |  f g ƒ S(   Ni    i   i   (   i    i    i    (   i   i    i    (   R   Rd   (   R   (   t   xt   y(    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/tst_tardy.pyt   build_sites¹   s    i    i   i   i   R   gñhãˆµøä>Ro   Ra   c       	      s„   t  d ˆ  d ˆ d ˆ d ˆ ƒ }  t j d ƒ } |  j d d d | j ƒ t |  j ƒ  d d	 d
 ƒsj t ‚ |  j d d ƒ |  j ƒ  S(   NRb   R8   Rc   R   i    RX   i   t   random_gaussR   g»½×Ùß|Û=RH   g{®Gáz„?(	   Rj   t   randomt   RandomR\   t   gaussR   RN   R'   t   dynamics_step(   Rs   t   rnd(   Rb   Rc   R8   Rr   (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/tst_tardy.pyt   e_kin_1Ê   s    	!gy„¾h~N@R8   g�ìä¥2 ð?g»½×Ùß|Û=t   5i   g|]^M4#@g³tì7 ð?i   t   6gµ„Šÿï?gƒêð- ð?NgªLXèz¶û?(   i    i   (   i    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   R6   R'   R   RK   Re   R   Rf   t
   build_treeRg   Ri   t   fix_near_singular_hingesRh   R   R   R   (   Ry   Ra   R=   t   jR€   (    (   Rb   Rc   R8   Rr   Rw   Rx   sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/tst_tardy.pyt   exercise_near_singular_hinges®   sX    	
++
-*
3-$'
93c         C   s  xd  |  j ƒ  g D]û } |  j d d ƒ |  j d k rt t |  j ƒ  d ƒ sS t ‚ |  j d d  ƒ d  k st ‚ q t |  j ƒ  d ƒ s� t ‚ |  j d | ƒ } | d  k	 r t d t	 | ƒ d d ƒ sÎ t ‚ |  j
 d | d | ƒ |  j d | ƒ } t | d ƒ st ‚ q q Wd  S(	   NRX   i   i    Rm   t   valuet   limitgü©ñÒMbP?(   i    i    i    (   R]   Rm   R\   RO   R   RN   R'   t   mean_linear_velocityR	   R6   t   subtract_from_linear_velocities(   R
   Rp   t   mlv(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/tst_tardy.pyt&   exercise_linear_velocity_manipulationsö   s     			!			c       
   C   s¬  g  }  d d } d } t  j d d d | | d f g ƒ } d d g } x; | D]3 \ } } t t | | | | ƒ d ƒ sN t ‚ qN Wg  t t | ƒ ƒ D] } t | ƒ ^ q˜ } d g t | ƒ } t j	 d | d | d g  ƒ }	 |	 j
 j d d d g g k st ‚ t d	 | d | d
 | d |	 ƒ }
 |  j |
 ƒ t |
 j ƒ d k sNt ‚ |
 j d j j d k smt ‚ t d |
 ƒ d d d d d d d g } t j d ƒ } xÉt d g d g d g d d g d d g d d g d d d g g ƒ D]‚\ } } t j	 d | d | d | g ƒ }	 |	 j
 j d d d g g k s;t ‚ t d	 | d | d
 | d |	 ƒ }
 |  j |
 ƒ t |
 j ƒ d k s„t ‚ |
 j d j j d d d g t | ƒ d k sºt ‚ |
 j d d d | j ƒ t | ƒ d k r	t |
 j ƒ  d d d ƒs*t ‚ n! t |
 j ƒ  d d d ƒs*t ‚ |
 j d d ƒ t |
 j ƒ  | | d d ƒs_t ‚ t d |
 ƒ qêWt  j d d d g ƒ | d <t | d | d j | d | d ƒ d ƒ sÂt ‚ xã d d g d d g d d g g D]À } t j	 d | d | d | g ƒ }	 |	 j
 j d d d g g k s/t ‚ t d	 | d | d
 | d |	 ƒ }
 |  j |
 ƒ t |
 j ƒ d k sxt ‚ |
 j d j j d k s—t ‚ t d |
 ƒ qäW|  S(   Ng      à?i   i    i   i   R8   Ra   t   fixed_vertex_listsRb   Rc   R   i   R
   gôíÕmf ð?gs Ct ð?gürê ð?g      ð?g        RX   Rz   R   g»½×Ùß|Û=RH   g{®Gáz„?iÿÿÿÿgªLXèz¶û?(   i    i    i    (   i   i    i    (   i    i   (   i   i   (   R   Rd   R   R6   R'   R   RK   Re   R   Rf   Rg   Ri   Rj   R   R   R   RO   RŒ   R{   R|   t	   enumerateR\   R}   RN   R~   R   t	   cos_angle(   t   tardy_modelsRw   Rx   R8   Ra   R=   R…   Rb   Rc   Rr   Rs   t   expected_e_kin_1R   t   i_fvt   fixed_vertices(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/tst_tardy.pyt%   exercise_fixed_vertices_special_cases	  s†    
++		$		$&$!%6(	$c         C   sè  | j  ƒ  t j | j ƒ  g ƒ } t j | j ƒ  g ƒ } xJ t | ƒ D]< } | j d | ƒ | j | j ƒ  ƒ | j | j ƒ  ƒ qG W| | } | j  ƒ  |  d I| j IJ|  d I| j	 ƒ  IJ|  d It
 | ƒ It | ƒ IJ|  d It
 | ƒ It | ƒ IJ|  d It
 | ƒ It | ƒ IJ|  d I| d IJ|  d	 I| d
 IJt j | ƒ | j	 ƒ  } t j | ƒ t j
 | ƒ }	 | d k rœd }
 n
 |	 | }
 |  d I| IJ|  d I|	 IJ|  d I|
 IJ|  J|  j ƒ  |
 S(   NRH   s   degrees of freedom:s   energy samples:s   e_pot min, max:s   e_kin min, max:s   e_tot min, max:s   start e_tot:i    s   final e_tot:iÿÿÿÿs   ave:s   range:s   relative range:(   R.   R   RI   R   RN   R   R~   R   RO   t   sizet   mint   maxt   sumt   flush(   RY   t   n_dynamics_stepsRH   R
   t   e_potst   e_kinst   i_stept   e_totst   avet   ranget   relative_range(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/tst_tardy.pyt   exercise_tardy_modelX  s6    


""" 	

g-Cëâ6?c      	   C   s}   t  d |  d | d | d | ƒ } |  t j k	 ru t | j j j ƒ d k r` | d k  sr t ‚ qu | d k  su t ‚ n  |  Jd  S(   NRY   Rš   RH   R
   i    gñhãˆµøä>g-Cëâ6*?(   R¢   t   syst   stdoutRK   R   Rg   t
   loop_edgesR'   (   RY   R
   Rš   RH   R¡   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/tst_tardy.pyt   exercise_dynamics_quickt  s    	i   c         C   sŽ   |  d IJ|  d I| j  ƒ  IJ| j  ƒ  } | j d | ƒ |  d I| j  ƒ  IJ| j  ƒ  } |  t j k	 r† | | d k  s† t ‚ n  |  Jd  S(   Ns   Minimization:s     start e_pot:t   max_iterationss     final e_pot:gffffffæ?(   R   t   minimizationR£   R¤   R'   (   RY   R
   R§   t   e_pot_startt   e_pot_final(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/tst_tardy.pyt   exercise_minimization_quick‚  s    
c         C   sM   | j  } t d |  d | d | d | d t d | d | d | j | j ƒ ƒ S(   NRb   R8   Rc   R   t   potential_objR4   R9   (   Rg   R
   R1   R¥   t   loop_edge_bendings(   Rb   R8   Rc   R   t   cm(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/tst_tardy.pyRj   �  s    	c         C   s‰  | j  j d |  d d  ƒ | j ƒ  } t | ƒ d k s= t ‚ | j ƒ  } t | ƒ d k sa t ‚ | d d | d k s t ‚ | d d t | j ƒ k s¢ t ‚ | j ƒ  } t | ƒ d k sÆ t ‚ | d d | d k sä t ‚ | d d t | j ƒ k st ‚ t d | ƒ t	 d | ƒ t
 d | ƒ | j d d ƒ t | j ƒ  d ƒ sYt ‚ t d |  d | d | ƒ t d |  d | ƒ d  S(   NRY   t   vertex_labelsi   i    R
   RX   Rš   (   R   t   show_summaryR]   Rk   RK   R'   Rm   R8   RW   R`   RŒ   R\   R   RN   R¦   R«   (   RY   R
   Rš   t   riRp   Rq   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/tst_tardy.pyt   exercise_with_tardy_model�  s&    ##c      	   C   sT   t  j |  } | j d | ƒ } t d | j d | j d d g t | j ƒ d | ƒ S(   NR�   Rb   R8   Rc   g      ð?R   (   R   t
   test_casest   tardy_tree_constructRj   Rb   R8   RK   (   R=   R�   t   tcRr   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/tst_tardy.pyt   get_test_model_by_index¶  s    		i   i   i   i   i   c      	   C   så  t  |  ƒ d k s t ‚ t  |  ƒ d k r< d } t ƒ  } n" t d t |  d ƒ ƒ } t j } t ƒ  t ƒ  t	 ƒ  t
 ƒ  x_t t ƒ D]Q} | d I| IJt d | ƒ } t d | d | d | ƒ | d k r;| j d	 k sæ t ‚ d g } | d I| Id
 I| IJt d | d | g ƒ } | j d k sØt ‚ q‡ | d k r‡ | j d k s\t ‚ xy t D]n \ } } | d I| Id
 I| IJt d | d | g ƒ } | j | k s¸t ‚ t d | d | d | ƒ qcWq‡ q‡ Wd GHd  S(   Ni    i   id   s   test model index:R=   RY   R
   Rš   i   s   fixed_vertices:R�   i   i   t   OK(   i    i   (   RK   R'   R   R—   t   intR£   R¤   R   Rv   R†   R”   R   t   n_test_modelsR¶   R²   RO   t'   test_case_5_fixed_vertices_expected_dof(   t   argsRš   RY   R=   R
   R“   t   expected_dof(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/tst_tardy.pyt   runÄ  sJ    		t   __main__i   (,   t
   __future__R    t   scitbx.rigid_body.essenceR   t   scitbx.graphR   R   t   scitbx.array_familyR   t   scitbxR   t   libtbx.utilsR   R   t   libtbx.test_utilsR   R	   R{   R£   t   seedt   set_random_seedt   modelR
   t   objectR1   RW   R`   Rv   R†   RŒ   R”   R¢   R¦   R«   Rj   R²   RK   R³   R¹   R¶   Rº   R½   R/   t   argv(    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/tst_tardy.pyt   <module>   s@   "/				(	H		O			
	,