ó
v™xTc           @   s*  d  d l  m Z d  d l 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 m Z m Z d  d l m Z d  d l Z d  d l Z d  d l Z d  d l Z d	 „  Z d
 „  Z e e d „ Z d „  Z d „  Z d „  Z d „  Z e d k r&e d e j d ƒ n  d S(   iÿÿÿÿ(   t   divisionN(   t	   tst_tardy(   t   test_cases_tardy_pdb(   t   flex(   t   matrix(   t   approx_equalt   is_above_limitt   is_below_limitt   Exception_expected(   t   format_cpu_timesc          C   s¶  t  j d }  |  j ƒ  } d g t |  j ƒ } t j d ƒ j d t j d ƒ d
 d d t ƒ } g  |  j D] } | | ^ qi } t	 j
 j j j d |  j d | d | d | d d  ƒ } t | j ƒ d k sÐ t ‚ | j d k så t ‚ t j d d ƒ } x¸ t d ƒ D]ª } | j d | j ƒ d d }	 | j d |	 ƒ | j ƒ  }
 t j t	 j
 j d t t j | ƒ j ƒ  ƒ d |	 ƒ ƒ } g  | D] } | | ^ qƒ} t | |
 ƒ st ‚ qWd  S(   Ni	   g      ð?gáz®GáÊ¿gR¸…ëQà¿g{®Gázä?t   pointgš™™™™™é¿gìQ¸…ëÑ?g{®Gázì¿t   angleiÛÿÿÿt   degt   labelst   sitest   massest
   tardy_treet   potential_obji   i   t   seedi    i   t   sizei   t   q_packedt   center_of_masst   q(   gáz®GáÊ¿gR¸…ëQà¿g{®Gázä?(   gš™™™™™é¿gìQ¸…ëÑ?g{®Gázì¿(   R   t
   test_casest   tardy_tree_constructt   lenR   R   t   colt#   rt_for_rotation_around_axis_throught   Truet   scitbxt
   rigid_bodyt   essencet   tardyt   modelR   t   Nonet   bodiest   AssertionErrort   q_packed_sizeR   t   mersenne_twistert   xranget   random_doublet   unpack_qt   sites_movedt   rtt    joint_lib_six_dof_aja_simplifiedt   tuplet   vec3_doublet   meanR   (   t   tct   ttR   t   rt_arbitraryt   siteR   t   tmt   mtt   i_trialR   t   smt   ajat   sm2(    (    sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/tst.pyt)   exercise_joint_lib_six_dof_aja_simplified   s0     		c         C   s÷  t  j j d |  j d t j |  j ƒ d t j |  j ƒ d |  j	 d |  j
 d |  j ƒ } | j ƒ  t |  j ƒ k sx t ‚ | j |  j k s� t ‚ | j |  j k s¨ t ‚ | j |  j k sÀ t ‚ t | j ƒ  ƒ g  |  j D] } | j j ^ qÙ k sú t ‚ t | j ƒ  ƒ g  |  j D] } | j j ^ qk s4t ‚ | j ƒ  | j ƒ  | j |  j k s`t ‚ | j j ƒ  t |  j ƒ k s„t ‚ | j j ƒ  t |  j ƒ k s¨t ‚ | j	 |  j	 k sÀt ‚ | j
 |  j
 k sØt ‚ t | j |  j ƒ sót ‚ | S(   NR   R   R   R   R   t*   near_singular_hinges_angular_tolerance_deg(   R   R   t   tardy_modelR   R   R.   R   t   doubleR   R   R   R;   t   bodies_sizeR   R#   R$   t   number_of_treest   degrees_of_freedomR%   t   listt   degrees_of_freedom_each_jointt   jointt   q_size_each_jointt   q_sizet   flag_positions_as_changedt   flag_velocities_as_changedR   R   (   t   etmt   ftmt   body(    (    sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/tst.pyt
   etm_as_ftm*   s4    			!++

$$c   .         sY  t  j j j j d ˆ  j d ˆ  j d ˆ  j d ˆ  j d ˆ  j	 d ˆ  j
 ƒ ‰  t d ˆ  ƒ ‰ t ˆ j ƒ  ƒ ˆ  j ƒ  k s~ t ‚ ˆ  j ƒ  } ˆ  j ƒ  } ‡  ‡ f d †  } | ƒ  t j d	 d
 ƒ } | j d | j ƒ  ƒ d d } | j d | j ƒ  ƒ d d } x$ ˆ  ˆ g D] }	 |	 j d | ƒ qW| ƒ  x$ ˆ  ˆ g D] }	 |	 j d | ƒ q<W| ƒ  x$ ˆ  ˆ g D] }	 |	 j d | ƒ qjW| ƒ  x$ ˆ  ˆ g D] }	 |	 j d | ƒ q˜W| ƒ  x$ ˆ  ˆ g D] }	 |	 j d | ƒ qÆW| ƒ  x$ ˆ  ˆ g D] }	 |	 j d | ƒ qôW| ƒ  ˆ j ƒ  ‰ t ˆ ƒ ˆ  j ƒ  k s?t ‚ ˆ  j ƒ  }
 ˆ j ƒ  } t |
 | ƒ slt ‚ ‡  ‡ ‡ f d †  } | ƒ  t j | j d d ƒ d d ƒ } x* ˆ  ˆ g D] }	 |	 j d d  d | ƒ q¸W| ƒ  x* ˆ  ˆ g D] }	 |	 j d ˆ d | ƒ qìW| ƒ  ˆ  j ƒ  }
 ˆ j ƒ  } t |
 | ƒ s@t ‚ ˆ  j ƒ  }
 ˆ j ƒ  } t |
 | ƒ smt ‚ ˆ  j  ƒ  }
 ˆ j  ƒ  } t |
 | ƒ sšt ‚ ˆ  j! ƒ  }
 ˆ j! ƒ  } |
 j ƒ  d
 k rß| j ƒ  d
 k sTt ‚ nu t j" t j# |
 ƒ ƒ } ˆ  j	 d  k r$t$ d | d d ƒ s?t ‚ n t% d | d d ƒ s?t ‚ t |
 | ƒ sTt ‚ ˆ  j& ƒ  }
 ˆ j& ƒ  } t |
 | ƒ s�t ‚ ˆ  j' ƒ  }
 ˆ j' ƒ  } t |
 | ƒ s®t ‚ ˆ  j( d d ƒ ˆ j( d d ƒ ˆ  j& ƒ  }
 ˆ  j) d
 k rt |
 d
 ƒ st ‚ n t |
 d ƒ st ‚ ˆ j& ƒ  } t |
 | ƒ s7t ‚ y ˆ j( d d d d
 ƒ Wn4 t* k
 r‡}
 t+ |
 ƒ j, d ƒ d
 k sŽt ‚ n Xt- ‚ ˆ  j. ƒ  ˆ j. ƒ  ˆ  j& ƒ  d
 k sºt ‚ ˆ j& ƒ  d
 k sÒt ‚ t/ j0 d
 ƒ ˆ  j1 ƒ  t/ j0 d
 ƒ ˆ j1 ƒ  ˆ  j& ƒ  }
 ˆ j& ƒ  } t |
 | ƒ s-t ‚ t j d	 d
 ƒ } g  } xA ˆ  j2 D]6 } | j3 t j | j d | j4 j) ƒ d d ƒ ƒ qOWg  } xA ˆ  j2 D]6 } | j3 t j | j d | j4 j) ƒ d d ƒ ƒ q™Wg  } xG t5 t6 ˆ  j2 ƒ ƒ D]0 } | j3 t j | j d d ƒ d d ƒ ƒ qïWt j | j d d ƒ d d ƒ } d  d „ ‰ ˆ d | d ˆ  j) ƒ } ˆ d | d ˆ  j) ƒ } ˆ d | d t6 ˆ  j2 ƒ d ƒ } d  d  d  ‡  ‡ f d † } d  d  d  ‡  ‡ f d  † } | d! | ƒ }
 ˆ j7 d" | ƒ } t |
 | ƒ st ‚ | d# | ƒ }
 ˆ j7 d$ | ƒ } t |
 | ƒ sFt ‚ | d% | ƒ }
 ˆ j7 d% t j8 | ƒ ƒ } t |
 | ƒ s…t ‚ xÕ d/ | | f g D]Á \ } } x² d0 | | f g D]ž \ } } x� d  | g D]� } | | | g j9 d  ƒ d k rúqÐn  | d! | d# | d% | ƒ }
 ˆ j7 d" | d$ | d% t j8 | ƒ ƒ } t |
 | ƒ sÐt ‚ qÐWq·Wq˜W| ƒ  }
 ˆ j: ƒ  } t |
 | ƒ s‡	t ‚ | d& | ƒ }
 ˆ j: d' | ƒ } t |
 | ƒ s½	t ‚ | d# | ƒ }
 ˆ j: d$ | ƒ } t |
 | ƒ só	t ‚ | d% | ƒ }
 ˆ j: d% t j8 | ƒ ƒ } t |
 | ƒ s2
t ‚ x^d1 | | f g D]J\ } }  x;d2 | | f g D]'\ } } xd  | g D]
} | d  k r˜
d  }! n t j8 | ƒ }! ˆ  j; d& | d# | d% | ƒ }" ˆ d |" d ˆ  j) ƒ }# ˆ j: d' |  d$ | d% |! ƒ }$ t |# |$ ƒ st ‚ ˆ  j< d! |" d# | d% | ƒ }% ˆ d |% d ˆ  j) ƒ }& ˆ j7 d" |$ d$ | d% |! ƒ }' t |& |' ƒ syt ‚ ˆ  j) d
 k r£|& j ƒ  d
 k st ‚ n` | s|  d  k råt$ t j" t j# |& ƒ ƒ d
 d( d) ƒs t ‚ qt |& |  d( d) ƒst ‚ n  ˆ  j; d& |% d# | d% | ƒ }( ˆ d |( d ˆ  j) ƒ }) ˆ j: d' |' d$ | d% |! ƒ }* t |) |* ƒ slt ‚ t |) |# d( d* ƒs}
t ‚ q}
Wqd
WqE
W‡  ‡ ‡ f d+ †  }+ |+ ƒ  ˆ j= ƒ  ˆ j> ƒ  sÌt ‚ ˆ j? ƒ  sßt ‚ ˆ j ƒ  ˆ j> ƒ  sût ‚ ˆ j? ƒ  st ‚ |+ ƒ  ˆ j> ƒ  s't ‚ ˆ j? ƒ  s9t ‚ ˆ j d ˆ j ƒ  ƒ ˆ j> ƒ  sbt ‚ ˆ j? ƒ  sut ‚ ˆ j@ ƒ  ˆ j	 d  k r®ˆ j> ƒ  s¡t ‚ ˆ j ƒ  n  ˆ j> ƒ  sÀt ‚ ˆ j? ƒ  sÒt ‚ ˆ j d ˆ j ƒ  ƒ ˆ j> ƒ  sút ‚ ˆ j? ƒ  st ‚ |+ ƒ  d, }, ˆ  jA d- |, ƒ ˆ jA d- |, ƒ ˆ j> ƒ  sMt ‚ ˆ j? ƒ  s`t ‚ | ƒ  |+ ƒ  ˆ  j. ƒ  ˆ j. ƒ  | d# | ƒ }
 ˆ j7 d$ | ƒ } t |
 | ƒ s¸t ‚ |
 }- ˆ d ˆ  jB d# | ƒ d ˆ  j) ƒ }
 t |- |
 ƒ s÷t ‚ ˆ jC d$ | ƒ } t |- | ƒ st ‚ | rU| ƒ  ˆ  jD d. d ƒ ˆ jD d. d ƒ | ƒ  n  d  S(3   NR   R   R   R   R   R;   RH   c             s^   ˆ  j  ƒ  }  ˆ j  ƒ  } t |  | ƒ s- t ‚ ˆ  j ƒ  }  ˆ j ƒ  } t |  | ƒ sZ t ‚ d  S(   N(   t   pack_qR   R$   t   pack_qd(   t   et   f(   RH   RI   (    sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/tst.pyt   check_packedZ   s    R   i    R   i   i   R   t	   qd_packedc             s{   ˆ  j  d d  ƒ }  xb ˆ j  d d  ƒ ˆ j  d ˆ ƒ g D]< } |  d  k r^ | d  k ss t ‚ q7 t |  | ƒ s7 t ‚ q7 Wd  S(   Nt   number_of_sites_in_each_tree(   t   mean_linear_velocityR"   R$   R   (   RN   RO   (   RH   t   fnosietRI   (    sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/tst.pyt   check_mean_linear_velocityx   s     i   RR   t   valuet   limitg»½×Ùß|Û=gš™™™™™¹?t   e_kin_targetgX9´Èv¾ó?t   e_kin_epsilons   e_kin_epsilon > 0i   c         S   sz   t  j ƒ  } | d  k	 r( | j | ƒ n  x$ |  D] } | j t  j | ƒ ƒ q/ W| d  k	 rv | j ƒ  | k sv t ‚ n  | S(   N(   R   R=   R"   t   reservet   extendR   R$   (   t   arrayt   packed_sizet   resultt   sub(    (    sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/tst.pyt
   pack_arrayÐ   s    R\   R]   c      	      s.   ˆ d ˆ  j  d |  d | d | ƒ d ˆ  j ƒ S(   NR\   t	   qdd_arrayt   f_ext_arrayt	   grav_accnR]   (   t   inverse_dynamicsR@   (   Ra   Rb   Rc   (   RH   R`   (    sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/tst.pyt   etm_inverse_dynamics_packedß   s    		c      	      s.   ˆ d ˆ  j  d |  d | d | ƒ d ˆ  j ƒ S(   NR\   t	   tau_arrayRb   Rc   R]   (   t   forward_dynamics_abR@   (   Rf   Rb   Rc   (   RH   R`   (    sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/tst.pyt   etm_forward_dynamics_ab_packedç   s    		Ra   t
   qdd_packedRb   t   f_ext_packedRc   Rf   t
   tau_packedt   epsgñhãˆµøä>g-Cëâ6?c             sC   ˆ d ˆ  j  ƒ  d ˆ  j ƒ }  ˆ j ƒ  } t |  | ƒ s? t ‚ d  S(   NR\   R]   (   Ra   R@   Ri   R   R$   (   RN   RO   (   RH   RI   R`   (    sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/tst.pyt	   check_qddY  s    góŽSt$—¿?t   delta_tt   max_iterations(   NN(   NN(   NN(   NN(E   R   R   R   R    R!   R   R   R   R   R   R;   RK   RA   t   root_indicesR$   RL   RM   R   R&   R(   R   R)   t	   unpack_qdRR   t   sum_of_masses_in_each_treeR   R   R   t   subtract_from_linear_velocitiesR"   R*   t   e_pott   d_e_pot_d_sitest   d_e_pot_d_q_packedt   maxt   absR   R   t   e_kint   e_tott   reset_e_kinR@   t   RuntimeErrort   strt   findR   t   assign_zero_velocitiest   randomR   t   assign_random_velocitiesR#   t   appendRC   R'   R   t   inverse_dynamics_packedR=   t   countt   forward_dynamics_ab_packedRg   Rd   RF   t   sites_moved_is_cachedt   qdd_array_is_cachedRi   t   dynamics_stept   f_ext_as_taut   f_ext_as_tau_packedt   minimization(.   RH   t   have_singularityt   run_minimizationt   q_packed_zerot   qd_packed_zeroRP   R5   t   q_packed_randt   qd_packed_randR4   RN   RO   RU   RV   t	   e_max_abst   qdd_rand_arrayRJ   t   tau_rand_arrayt   f_ext_rand_arrayt   ibt   grav_accn_randt   qdd_rand_packedt   tau_rand_packedt   f_ext_rand_packedRe   Rh   Ra   Ri   Rb   Rj   Rc   Rf   Rk   t   grav_accn_ft   qdd_array_et   qdd_packed_et   qdd_packed_ft   tau2_array_et   tau2_packed_et   tau2_packed_ft   qdd2_array_et   qdd2_packed_et   qdd2_packed_fRm   Rn   t   e_ref(    (   RH   RT   RI   R`   sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/tst.pyt%   compare_essence_and_fast_tardy_modelsG   s(   					$        #		%



(("#											!																		-				'




							c          C   sú   d }  xí t  j D]â } | j ƒ  } d g t | j ƒ } |  d k  r� t j j j j	 d | j
 d | j d | d | d d  ƒ } t d	 | ƒ n  t j d | j
 d | j d | d | ƒ } | j d  k	 sÌ t ‚ t d	 | d
 | j d k ƒ |  d 7}  q Wd  S(   Ni    g      ð?i   R   R   R   R   R   RH   R�   t
   tyr_with_hi   (   R   R   R   R   R   R   R   R   R    R!   R   R"   R¦   R   t   construct_tardy_modelR   R$   t   tag(   t   n_testedR0   R1   R   RH   (    (    sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/tst.pyt"   exercise_with_test_cases_tardy_pdb”  s,    							c          C   sì   t  j d d d d g g ƒ }  |  j d k s3 t ‚ t d |  ƒ xN t t  j ƒ  ƒ D]: \ } }  |  j d  k	 st t ‚ t d |  d | d k  ƒ qS WxT t  j	 D]I \ } } t  j d d d | g ƒ }  |  j | k s× t ‚ t d |  ƒ q› Wd  S(   Nt   ii    t   fixed_vertex_listsRH   RŒ   i   i   (
   R   t   get_test_model_by_indexR@   R$   R¦   t	   enumeratet%   exercise_fixed_vertices_special_casesR   R"   t'   test_case_5_fixed_vertices_expected_dof(   RH   t   i_caset   fixed_verticest   expected_dof(    (    sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/tst.pyt   exercise_fixed_vertices¬  s     		c             s³  t  j d d ƒ ‰  g  ˆ  j D] }  |  j j ^ q d d d d d d g k sR t ‚ ˆ  j d  k	 sg t ‚ ˆ  j d d ƒ ˆ  j	 d d ƒ ‡  f d	 †  } xt
 t g D]} xÿ t t
 j ƒ D]î } | ƒ  } | j | ƒ  | ƒ } t j | ƒ } t | j ƒ  | j ƒ  ƒ st ‚ t | j ƒ  | j ƒ  ƒ s.t ‚ xv d
 d g D]h } | j	 d | ƒ | j	 d | ƒ t | j ƒ  | j ƒ  ƒ s‚t ‚ t | j ƒ  | j ƒ  ƒ s;t ‚ q;Wq¹ Wq£ Wd  S(   NR¬   i   i   i   RX   g¸…ëQ¸@Rn   g–C‹lçûí?c             s9   t  d ˆ  ƒ }  |  j ˆ  j ƒ  ƒ |  j ˆ  j ƒ  ƒ |  S(   NRH   (   RK   R)   RL   Rq   RM   (   R^   (   RH   (    sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/tst.pyt   etm_as_ftm_with_q_qdÇ  s    gžï§ÆK7á?gôýÔxé&Ù?(   R   R®   R#   RC   R@   R$   R   R"   R�   Rˆ   t   picklet   cPickleR'   t   HIGHEST_PROTOCOLt   dumpst   loadsR   RL   RM   (   RJ   R¶   t   pickle_modulet   protocolt   ftm1t   st   ftm2Rn   (    (   RH   sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/tst.pyt   exercise_pickleÀ  s&    !	!!!c         C   s@   t  |  ƒ d k s t ‚ t ƒ  t ƒ  t ƒ  t ƒ  t ƒ  GHd  S(   Ni    (   R   R$   R:   R«   Rµ   RÁ   R	   (   t   args(    (    sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/tst.pyt   runÙ  s    t   __main__RÂ   i   (   t
   __future__R    t   scitbx.rigid_body.essenceR   R   t   scitbx.graphR   t   scitbx.array_familyR   R   t   libtbx.test_utilsR   R   R   R   t   libtbx.utilsR	   R·   R¸   R€   t   sysR:   RK   t   FalseR¦   R«   Rµ   RÁ   RÃ   t   __name__t   argv(    (    (    sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/tst.pyt   <module>   s*   "		ÿ K				