ó
Y™xTc           @   s²  d  d l  m Z d  d l m Z m Z m Z m Z m Z m Z d  d l	 Z	 d  d l
 Z
 y d  d l m Z Wn e k
 r† d „  Z n Xd e	 j d k Z d e	 j d k rÃ e e	 j d  ƒ Z n d Z d	 e	 j d k Z d
 „  Z e e
 j j d ƒ ƒ Z e d k	 r/d Ge GHe	 j j ƒ  e j e ƒ n  d „  Z d „  Z i  Z d „  Z d „  Z d „  Z  d „  Z! d „  Z" d „  Z# d „  Z$ d „  Z% d „  Z& e' d k r®e& ƒ  n  d S(   iÿÿÿÿ(   t   division(   t   gcdt(   float_row_echelon_form_back_substitutiont!   row_reduced_float_rigidity_matrixt   determine_degrees_of_freedomt   randomt   double_banana_edge_listN(   t   next_permutationc         C   s   t  S(   N(   t   False(   t   seq(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_rigidity.pyR      s    s   --float-onlyi   s	   --repeatss   --allc         C   s&   |  d  k s |  d k r d  St |  ƒ S(   Nt	   undefined(   t   Nonet   int(   t   v(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_rigidity.pyt   int_or_none   s     t   SGE_TASK_IDs   sge_task_id:c           C   s‹   t  d d ƒ d k s t ‚ t  d d ƒ d k s6 t ‚ t  d d ƒ d k sQ t ‚ t  d d ƒ d k sl t ‚ t  d	 d
 ƒ d k s‡ t ‚ d  S(   Ni   i    iüÿÿÿi   i   i
   i   i   iîÿÿÿi*   i   (   R   t   AssertionError(    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_rigidity.pyt   exercise_gcd   s
    c          C   sÚ   d d d d g d d d d g d d d d g g }  d d g } d d d d g } t  d |  d	 | d
 | ƒ t | d d ƒ d k  sŠ t ‚ | d d k s  t ‚ t | d d ƒ d k  sÀ t ‚ | d d k sÖ t ‚ d  S(   Ni   i   i   i   i    i   i   t   mt	   free_varst   soli(   g:Œ0âŽyE>i   (   R   t   absR   (   R   R   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_rigidity.pyt1   exercise_float_row_echelon_form_back_substitution&   s      c         C   s6   y t  |  c d 7<Wn t k
 r1 d t  |  <n Xd  S(   Ni   (   t
   repeat_logt   KeyError(   t   nr(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_rigidity.pyt   update_repeat_log4   s      c          C   s^  xWd d g D]I}  x@t  d d ƒ D]/} x‚ t  d ƒ D]t } t d | d | d g  d	 |  ƒ | | k sm t ‚ t d | d | d g  d	 |  d
 t ƒ | | d f k s6 t ‚ q6 Wt d | d d d d g d	 |  ƒ d | d k sæ t ‚ t d | d d d d g d	 |  d
 t ƒ \ } } | d | d k s0t ‚ t | t ƒ sEt ‚ t d | ƒ q# Wq Wd  S(   Nt   integert   floati   i
   i   t   n_dimt
   n_verticest	   edge_listt   methodt   also_return_repeatsi    i   R   (   i    i   (   i    i   (   t   xrangeR   R   t   Truet
   isinstanceR   R   (   R    R   R   t   dofR   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_rigidity.pyt   exercise_minimal8   s&    c          C   sÃ  t  }  x!d d g D]} d d d g } xû t r%g  | D] } |  | ^ q8 } t d d d d d | |  ƒ } | d k r” | j ƒ  d k s¬ t ‚ n | j ƒ  d	 k s¬ t ‚ x* | |  D] } | j d
 | ƒ s· t ‚ q· W| d k r| j | d ƒ st ‚ n  t d | j ƒ t | ƒ s+ Pq+ q+ Wq Wt d d d d d |  d  ƒ } | j ƒ  d	 k sat ‚ x* |  d  D] } | j d
 | ƒ slt ‚ qlWt d | j ƒ t d d d d d |  ƒ } | j ƒ  d k sÑt ‚ x& |  D] } | j d
 | ƒ sØt ‚ qØW| j d
 d ƒ st ‚ xP d d d g D]? } x6 d d	 d g D]% } | j d
 | | f ƒ s8t ‚ q8Wq"Wt d | j ƒ d d d d d d d d d d d d g }  t d d d d	 d |  ƒ } | j ƒ  d	 k sÒt ‚ | j d
 d ƒ sêt ‚ | j d
 d ƒ st ‚ | j d
 d ƒ st ‚ t d | j ƒ |  d =t d d d d	 d |  ƒ } | j ƒ  d k sdt ‚ | j d
 d  ƒ s}t ‚ | j d
 d! ƒ s–t ‚ | j d
 d" ƒ s¯t ‚ t d | j ƒ d  S(#   Ni   i   i    i   R   R   R   i   i   t   edgeR   i   i	   i   i   (   i   i   (   i    i   (   i    i   (   i    i   (   i    i   (   i   i   (   i   i   (   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%   R   t   is_redundantR   t   repeatsR   (   R   t   nt   permt   it   elt   rrfrmR'   t   j(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_rigidity.pyt   exercise_is_redundantM   sf    	'c         C   sç   d t  t ƒ } g  d d g |  D]- } t d |  d | d | d | d t ƒ ^ q! } | d	 d
 } | d	 d
 d	 k r— d G| d	 d
 GHt j j ƒ  n  t d | ƒ t | ƒ d
 k rÛ | d	 d	 | d
 d	 k sÛ t	 ‚ n  | d	 d	 S(   Ni   R   R   R   R   R   R    R!   i    i   s   INFO: float repeats:R   (
   R   t   option_float_onlyR   R#   t   syst   stdoutt   flushR   t   lenR   (   R   R   R   R*   R    t   resultsR   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_rigidity.pyt   ddofˆ   s    A%c          C   sÅ  d }  t  } t | ƒ d k s$ t ‚ t d d d |  d | ƒ d k sK t ‚ t d d d |  d | ƒ d k sr t ‚ t d d	 d |  d | ƒ d
 k s™ t ‚ xQ t t | ƒ ƒ D]= } t d d d |  d | |  | | d ƒ d k s¬ t ‚ q¬ Wg  } xe t |  d ƒ D]S } xJ t | d |  ƒ D]5 } | j t d d d |  d | | | f g ƒ ƒ qWqW| d d d d d d d d d d d d d d d d d d d d d d d d d d d d g k sÁt ‚ d  S(   Ni   i   R   i   R   R   i   i   i   i   i   i   (   R   R5   R   R7   R"   t   append(   R   R   t   removet   dofsR,   R/   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_rigidity.pyt   exercise_double_banana—   s,    !!!)+*c       O   C   s9  d }  d  d! d" d# d$ d% d& d' d( d) d* d+ d, d- d. d/ d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d: d; d< d= d> d? d@ dA dB dC dD dE dF dG dH dI dJ dK dL dM dN dO dP dQ dR dS dT dU dV dW dX dY dZ d[ d\ d] d^ d_ d` da db dc dd de df dg dh di dj dk dl dm gN } t  | ƒ d k st ‚ t d d d |  d | ƒ d k s5t ‚ d  S(n   Ni   i    i   i	   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i
   i   i   i   i   iN   R   R   R   (   i    i   (   i    i	   (   i    i   (   i    i   (   i    i   (   i    i   (   i    i   (   i    i   (   i    i   (   i    i   (   i   i   (   i   i	   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i	   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i	   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i
   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i
   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i
   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i
   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i	   i
   (   i   i   (   i   i   (   i   i   (   i   i   (   R5   R   R7   (   R   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_rigidity.pyt   exercise_mt1996±   s    c          C   s©   d }  d d d d d d d d d d d d d d d  d! d" d# d$ d% d& d' d( d) d* d+ d, d- d. d/ g } t  | ƒ d k s~ t ‚ t d d d |  d | ƒ d	 k s¥ t ‚ d  S(0   Ni   i    i   i   i	   i
   i   i   i   i   i   i   i   i   R   R   R   (   i    i   (   i    i   (   i    i	   (   i    i
   (   i    i   (   i   i   (   i   i   (   i   i	   (   i   i
   (   i   i   (   i   i   (   i   i   (   i   i	   (   i   i
   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i
   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i	   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i	   (   i   i
   (   R5   R   R7   (   R   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_rigidity.pyt&   exercise_k6_6_minus_six_parallel_edgesÅ   s    c       ´   C   s–  d }  dD dE dF dG dH dI dJ dK dL dM dN dO dP dQ dR dS dT dU dV dW dX dY dZ d[ d\ d] d^ d_ d` da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz d{ d| d} d~ d d€ d� d‚ dƒ d„ d… d† d‡ dˆ d‰ dŠ d‹ dŒ d� dŽ d� d� d‘ d’ d“ d” d• d– d— d˜ d™ dš d› dœ d� dž dŸ d  d¡ d¢ d£ d¤ d¥ d¦ d§ d¨ d© dª d« d¬ d­ d® d¯ d° d± d² d³ d´ dµ d¶ d· d¸ d¹ dº d» d¼ d½ d¾ d¿ dÀ dÁ dÂ dÃ dÄ dÅ dÆ dÇ dÈ dÉ dÊ dË dÌ dÍ dÎ dÏ dÐ dÑ dÒ dÓ dÔ dÕ dÖ d× dØ dÙ dÚ dÛ dÜ dÝ dÞ dß dà dá dâ dã dä då dæ dç dè dé dê dë dì dí dî dï dð dñ dò dó dô dõ dö g³ } t  | ƒ d@ k s=t ‚ t dA d dB |  dC | ƒ d k sdt ‚ t dA d dB |  dC | d÷ g ƒ d k s’t ‚ d  S(ø   Ni>   i    i   i   i   i   i   i   i	   i
   i   i   i   i   i   i   i   i   i   i   i   i   i   i   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   i1   i2   i*   i3   i4   i5   i9   i6   i7   i8   i:   i;   i<   i=   i³   R   R   R   (   i    i   (   i    i   (   i    i   (   i    i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i	   (   i   i
   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i
   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i	   i
   (   i	   i   (   i	   i   (   i
   i   (   i
   i   (   i
   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i    (   i   i   (   i   i   (   i   i    (   i   i   (   i   i   (   i   i   (   i   i!   (   i   i"   (   i   i#   (   i   i   (   i   i   (   i   i$   (   i   i   (   i   i$   (   i   i   (   i   i   (   i   i$   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i    (   i   i    (   i   i!   (   i   i#   (   i   i$   (   i   i   (   i   i$   (   i   i%   (   i   i   (   i   i%   (   i   i&   (   i   i+   (   i   i,   (   i   i   (   i   i&   (   i   i-   (   i   i   (   i   i-   (   i   i   (   i   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    i1   (   i!   i"   (   i!   i)   (   i!   i2   (   i"   i#   (   i"   i2   (   i#   i$   (   i#   i*   (   i#   i2   (   i$   i%   (   i$   i*   (   i$   i3   (   i$   i4   (   i%   i+   (   i%   i4   (   i%   i5   (   i&   i,   (   i&   i-   (   i'   i-   (   i'   i.   (   i(   i/   (   i(   i0   (   i(   i9   (   i)   i1   (   i)   i2   (   i*   i2   (   i*   i3   (   i+   i,   (   i+   i5   (   i,   i6   (   i,   i-   (   i-   i.   (   i-   i6   (   i-   i7   (   i-   i8   (   i.   i/   (   i.   i8   (   i.   i9   (   i/   i9   (   i0   i1   (   i0   i9   (   i1   i2   (   i1   i9   (   i1   i:   (   i2   i3   (   i2   i:   (   i2   i;   (   i2   i<   (   i3   i4   (   i3   i<   (   i3   i5   (   i4   i5   (   i5   i6   (   i5   i7   (   i5   i;   (   i5   i<   (   i5   i=   (   i6   i7   (   i7   i8   (   i7   i9   (   i7   i=   (   i8   i9   (   i9   i:   (   i9   i;   (   i9   i=   (   i:   i;   (   i;   i<   (   i;   i=   (   i   i   (   R5   R   R7   (   R   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_rigidity.pyt   exercise_p120Ò   sB    !c          C   s¤   t  ƒ  t ƒ  t ƒ  x@ t t ƒ D]2 }  t ƒ  t ƒ  t ƒ  t ƒ  t	 r" t
 ƒ  q" q" Wd Gt GHt j ƒ  } d | d | d | d | d f GHt j j ƒ  d  S(   Ns   repeat_log =s   u+s,u,s: %.2f %.2f %.2fi    i   (   R   R   R&   R"   t   option_repeatsR0   R;   R<   R=   t
   option_allR>   R   t   ost   timesR2   R3   R4   (   t   i_repeatt   t(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_rigidity.pyt   exercise÷   s    	&t   __main__((   t
   __future__R    t   rigidityR   R   R   R   R   R   R2   RA   t   libtbx.math_utilsR   t   ImportErrort   argvR1   R   R?   R@   R   t   environt   gett   sge_task_idR   R3   R4   t   seedR   R   R   R   R&   R0   R7   R;   R<   R=   R>   RE   t   __name__(    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/tst_rigidity.pyt   <module>   s>   .							;					%	