ó
Y™xTc           @   s4  d  d l  m Z d  d l Z e e d d ƒ d k rM d e f d „  ƒ  YZ n d e f d „  ƒ  YZ d	 „  Z d
 „  Z d e f d „  ƒ  YZ	 e
 Z d e f d „  ƒ  YZ d „  Z d „  Z d „  Z d „  Z d „  Z e d k r0d  d l Z z e ƒ  Wd e j ƒ  Z d e d e d e d e d f GHXn  d S(   iÿÿÿÿ(   t   divisionNt   api_versioni    iõ  t   dict_with_default_0c           B   s   e  Z d  „  Z RS(   c         C   s   d S(   Ni    (    (   t   selft   key(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/rigidity_matrix_symbolic.pyt   __missing__   s    (   t   __name__t
   __module__R   (    (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/rigidity_matrix_symbolic.pyR      s   c           B   s   e  Z d  „  Z RS(   c         C   sE   y t  j |  | ƒ SWn t k
 r' n Xd } t  j |  | | ƒ | S(   Ni    (   t   dictt   __getitem__t   KeyErrort   __setitem__(   R   R   t   val(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/rigidity_matrix_symbolic.pyR	      s      (   R   R   R	   (    (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/rigidity_matrix_symbolic.pyR      s   c         C   s=   t  |  ƒ } x* | j ƒ  D] \ } } | | c | 7<q W| S(   N(   R   t   items(   t   at   bt   resultt   iit   exp(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/rigidity_matrix_symbolic.pyt
   iiexps_mul   s    c         C   s,   d „  } |  j  ƒ  } | j | ƒ t | ƒ S(   Nc         S   s<   t  |  d | d ƒ } | d k r' | St  |  d | d ƒ S(   Ni    i   (   t   cmp(   R   R   R   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/rigidity_matrix_symbolic.pyt	   cmp_iiexp   s     (   R   t   sortt   tuple(   t   iiexpsR   R   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/rigidity_matrix_symbolic.pyt   iiexps_as_tuples   s    	t   termc           B   s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C   s   | | |  _  |  _ d  S(   N(   t   fR   (   R   R   R   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/rigidity_matrix_symbolic.pyt   __init__'   s    c         C   s   t  |  j |  j ƒ S(   N(   R   R   R   (   R   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/rigidity_matrix_symbolic.pyt   __neg__*   s    c         C   s&   t  |  j | j t |  j | j ƒ ƒ S(   N(   R   R   R   R   (   R   R   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/rigidity_matrix_symbolic.pyt   __mul__-   s    c         C   sÐ   g  } |  j  d k r; |  j  d k r; | j d |  j  ƒ n  xc t |  j ƒ D]R \ } } d | d d | d f } | d k r� | d | 7} n  | j | ƒ qK Wd j | ƒ } |  j  d k rÌ d	 | } n  | S(
   Ni   iÿÿÿÿs   %ds   v%d%si   t   xyzs   **%dt   *t   -(   R   t   appendR   R   t   join(   R   R   R   R   t   s(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/rigidity_matrix_symbolic.pyt   __str__0   s     (   R   R   R   R   R   R%   (    (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/rigidity_matrix_symbolic.pyR   %   s   			t   elemc           B   s>   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s°  t  ƒ  } x* | D]" } | t | j ƒ c | j 7<q Wg  } xK | j ƒ  D]= \ } } | d k rI | j t d | d t  | ƒ ƒ ƒ qI qI Wt r£i  } i  } xÌ t t	 | ƒ ƒ D]¸ } | | } x¥ | j j ƒ  D]” \ }	 }
 | j
 |	 d ƒ } | | k rF| d k rd | |	 <|
 | |	 <qc| |	 c d 7<t | |	 |
 ƒ | |	 <qÏ | d k rÏ | |	 =| |	 =qÏ qÏ Wq¯ Wx5 | j ƒ  D]$ \ }	 } | t	 | ƒ k sxt ‚ qxWn  | |  _ d  S(   Ni    R   R   i   (   R   R   R   R   R   R"   R   t   elem_common_factor_checkt   xranget   lent   gett   mint   AssertionErrort   terms(   R   R-   t   nt   tt   iesR   t   count_it   min_et   itt   it   et   cit   c(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/rigidity_matrix_symbolic.pyR   A   s4    	 )

c         C   s%   | d k s t  ‚ t |  j ƒ d k S(   Ni    (   R,   R)   R-   (   R   R   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/rigidity_matrix_symbolic.pyt   __eq___   s    c         C   s%   | d k s t  ‚ t |  j ƒ d k S(   Ni    (   R,   R)   R-   (   R   R   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/rigidity_matrix_symbolic.pyt   __ne__c   s    c         C   sL   g  } x6 |  j  D]+ } x" | j  D] } | j | | ƒ q  Wq Wt d | ƒ S(   NR-   (   R-   R"   R&   (   R   R   R-   t   tat   tb(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/rigidity_matrix_symbolic.pyR   g   s
    c         C   s+   t  d |  j g  | j D] } | ^ q ƒ S(   NR-   (   R&   R-   (   R   R   R;   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/rigidity_matrix_symbolic.pyt   __sub__n   s    c         C   sQ   d j  g  |  j D] } t | ƒ ^ q ƒ j d d ƒ } t | ƒ d k rM | Sd S(   Nt   +s   +-R!   i    t   0(   R#   R-   t   strt   replaceR)   (   R   R/   R   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/rigidity_matrix_symbolic.pyR%   q   s    7 (   R   R   R   R8   R9   R   R<   R%   (    (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/rigidity_matrix_symbolic.pyR&   ?   s   					c         C   so  g  } t  |  ƒ } t  |  d ƒ } d } d } x:| | k  rjd  } x5 t | | ƒ D]$ } |  | | d k rS | } PqS qS W| d  k	 rP| | k r³ |  | |  | |  | <|  | <n  |  | | } x t | d | ƒ D]j }	 |  |	 | }
 |
 d k rû qÕ n  xA t | | ƒ D]0 } |  |	 | | |  | | |
 |  |	 | <qWqÕ W| d 7} n | j | ƒ | d 7} q1 W| S(   Ni    i   (   R)   t   NoneR(   R"   (   t   mt	   free_varst   n_rowst   n_colst   piv_rt   piv_ct   best_rt   i_rowt   fpt   rt   frR7   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/rigidity_matrix_symbolic.pyt   symbolic_row_echelon_formv   s2      2c         C   sA  t  | ƒ } | d k r d  S| |  } g  } x| D]\ } } | | k sQ t ‚ g  } x' t | ƒ D] }	 | j t g  ƒ ƒ qd W| |  }
 | |  } x” t |  ƒ D]† } i d |
 | 6} i d | | 6} t d t d | ƒ t d | ƒ g ƒ | |
 | <t d t d | ƒ t d | ƒ g ƒ | | | <q¢ W| j | ƒ q3 W| S(   Ni    i   R-   iÿÿÿÿ(   R)   RA   R,   R(   R"   R&   R   (   t   n_dimt
   n_verticest	   edge_listt   n_edgest	   n_columnsR   R4   t   jt   rowt   icR6   t   cjt   dt   eit   ej(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/rigidity_matrix_symbolic.pyt"   construct_symbolic_rigidity_matrix‘   s&     


/3c         C   sT   | d k r d  St d |  d | d | ƒ } | d  k r; d  St d | ƒ } t | ƒ S(   Ni    RN   RO   RP   RB   (   RA   RZ   RM   R)   (   RN   RO   RP   RB   RC   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/rigidity_matrix_symbolic.pyt   determine_degrees_of_freedom¥   s      c         C   s®   d d l  m } | d d d |  d | ƒ } t d d d |  d | ƒ } | | k sX t ‚ t | ƒ d k rª x= t t | ƒ ƒ D]& } t | ƒ } | | =t |  | ƒ q} Wn  d  S(   Niÿÿÿÿ(   R[   RN   i   RO   RP   i   (   t   scitbx.graph.rigidityR[   R,   R)   R(   t   listt   compare_int_symb(   RO   RP   t   dof_intt   dit   dst   i_deletet   el(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/rigidity_matrix_symbolic.pyR^   ­   s    c          C   sØ   t  r] y4 t t d i d d 6ƒ t d i d d 6ƒ g ƒ Wn t k
 rM q] Xt d ƒ ‚ n  d }  d	 g } t |  | ƒ d }  | j d
 d g ƒ t d |  d | ƒ d }  | j d d d g ƒ t d |  d | ƒ d  S(   Ni   i   i    s   Exception expected.i   RO   RP   i   (   i    i   (   i    i   (   i   i   (   i    i   (   i   i   (   i   i   (   R'   R&   R   R,   t   RuntimeErrorR^   t   extend(   RO   RP   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/rigidity_matrix_symbolic.pyt   exercise¼   s      4 	t   __main__s   u+s,u,s: %.2f %.2f %.2fi   (   t
   __future__R    t   syst   getattrR   R   R   R   t   objectR   t   TrueR'   R&   RM   RZ   R[   R^   Rf   R   t   ost   timesR/   (    (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/graph/rigidity_matrix_symbolic.pyt   <module>   s(   				7					