ó
mxTc           @   s)   d  d l  m Z d d  Z d   Z d S(   i’’’’(   t   divisionc         C   s×  g  } t  |   } | d k s$ t  t  |  d  } | d  k sX t  |  | k sX t  d } xrt d |  D]a} x? t | |  D] } |  | | d k r Pq q W| j |  qn | | k r|  | |  | |  | <|  | <| d  k r| | | | | | <| | <qn  |  | | } x¦ t | d |  D] }	 |  |	 | }
 |
 d k rVq0n  |
 | } x7 t | |  D]& } |  |	 | c |  | | | 8<qpW| d  k	 r0| |	 c | | | 8<q0q0W| d 7} qn W| S(   Ni    i   (   t   lent   AssertionErrort   Nonet   xranget   append(   t   mt   tt	   free_varst   n_rowst   n_colst   piv_rt   piv_ct   i_rowt   fpt   rt   frt   frpt   c(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/row_echelon.pyt   form_rational   s8    $# 
$c         C   sŖ  t  |   } t  |  d  } | d  k s@ t  |  | k s@ t  t  |  | k sX t  | d  k	 r„ | t  |  } x. t | |  D] } | | d k r d  Sq Wn  t g | } x | D] }	 t | |	 <q¹ Wg  }
 x0 t |  D]" \ }	 } | są |
 j |	  qą qą Wx t t  |
  d d d  D] } |
 | } | d  k rHd } n | | } x5 t | d |  D]  }	 | |  | |	 | |	 7} qgW| |  | | | | <q#W| S(   Ni    i   i’’’’(   R   R   R   R   t   Falset   Truet	   enumerateR   (   R   R   R   t   solR	   R
   t   rankR   t
   free_flagsR   t   piv_colst   fR   t   s(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/row_echelon.pyt   back_substitution_rational    s2    $ #
 	N(   t
   __future__R    R   R   R   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/row_echelon.pyt   <module>   s   