ó
m™xTc           @   sU   d  d l  m Z d „  Z d „  Z e d k rQ d  d l Z e d e j d ƒ n  d S(   iÿÿÿÿ(   t   divisionc             só  d d l  m ‰ d d l m ‰ d d l m ‰  d d l m ‰ d d  l }  |  j	 d ƒ ‰ d g g } d g } ˆ j
 | | ƒ } | d g g k sš t ‚ | d g k s¯ t ‚ | d g k sÄ t ‚ ˆ j | | | d g ƒ } | d g k sô t ‚ ˆ j | d  | d g ƒ } | d g k s$t ‚ d g g } d g } ˆ j
 | | ƒ } | d g g k sct ‚ | d g k sxt ‚ | d g k s�t ‚ ˆ j | | | d g ƒ } | d  k sºt ‚ d g g } d g } ˆ j
 | | ƒ } | d g g k sùt ‚ | d g k st ‚ | g  k s t ‚ ˆ j | | | d g ƒ } | d g k sPt ‚ ‡ ‡ f d	 †  } xät d
 ƒ D]Ö} xÍd d d g D]¼} x³d d d g D]¢} g  } x= t | ƒ D]/ }	 | j g  t | ƒ D] }
 | ƒ  ^ qÍƒ q´Wˆ j ˆ  | ƒ | | f ƒ } g  t | ƒ D] }
 | ƒ  ^ q} t | ˆ j | ƒ ƒ } t | ƒ } ˆ j
 | | ƒ } d  g | } x | D] }
 | |
 | |
 <qrWˆ j | | | | ƒ } | d  k	 s´t ‚ | j d  ƒ d k sÏt ‚ | | k sát ‚ d g | } ˆ j | d  | | ƒ } | d  k	 st ‚ | ˆ j | ƒ j ƒ  d k s›t ‚ q›Wq…WqoWx£t d
 ƒ D]•} d d l m } x{ | d
 ƒ D]g } ˆ j | ƒ  | ƒ  | ƒ  g ƒ } ˆ j | ƒ  | ƒ  | ƒ  g ƒ } | j | ƒ j ƒ  d k ryPqyqyWt ‚ ˆ j d d ƒ } ˆ j d d ƒ } ‡  ‡ ‡ f d †  } | | | | | | | g  | | g ƒ | | | | j | ƒ g  d  ƒ | | d | d | d g d d g ƒ | | d | | d g d  ƒ | d d d g d d d g d d d g d d g d d g ƒ qVWd  S(   Niÿÿÿÿ(   t   row_echelon(   t   matrix(   t	   flat_list(   t   rationali    i   i   c              s(   ˆ  j  ˆ j d d ƒ ˆ j d d ƒ ƒ S(   Niûÿÿÿi   i   i
   (   t   intt	   randrange(    (   R   t   rng(    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/tests/tst_row_echelon.pyt   rr'   s    i
   i   (   t   countiûÿÿÿi   c            sö   g  } g  } x@ t  d ƒ D]2 } | j |  | | | g ƒ | j | | ƒ q Wˆ j ˆ  | ƒ d ƒ } t | ƒ }	 ˆ j | | ƒ }
 |
 | k s— t ‚ ˆ j | | |
 d d g ƒ } | | k sÇ t ‚ | d  k	 rò t | | ƒ |	 k sò t ‚ n  d  S(   Ni   i   i   (   i   i   (   t   xranget   appendt   rect   listt   form_rationalt   AssertionErrort   back_substitution_rationalt   None(   t   at   bt   ct   expected_free_varst   expected_solt   mt   tt   it   m_origt   t_origt	   free_varst   sol(   R   R   R   (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/tests/tst_row_echelon.pyt   checkL   s    i   iùÿÿÿiÂÿÿÿi   (   t   scitbx.matrixR   t   scitbxR   t   libtbx.utilsR   t   boostR   t   randomt   RandomR   R   R   R   R
   R   R   R   t   colR	   t   dott	   itertoolst   crosst   RuntimeErrorR   (   R#   R   R   R   R   R   t   i_trialt   nrt   nct   irt   icR   t   sol_origR   R	   R   R   R   t   pt   qR   (    (   R   R   R   R   R   sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/tests/tst_row_echelon.pyt   exercise_rational   sŽ    			-"1!!('c         C   s(   t  |  ƒ d k s t ‚ t ƒ  d GHd  S(   Ni    t   OK(   t   lenR   R2   (   t   args(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/tests/tst_row_echelon.pyt   run`   s    t   __main__NR5   i   (   t
   __future__R    R2   R6   t   __name__t   syst   argv(    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/matrix/tests/tst_row_echelon.pyt   <module>   s
   	^	