ó
\xTc           @   s  d  d l  m Z d  d l m Z d  d l m Z d  d l Z d  d l m Z m	 Z	 d  d l
 Z
 d  d l Z d  d l Z d   Z d   Z d   Z d	   Z d
   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   flex(   t   sparseN(   t   approx_equalt   Exception_expectedc          C   s˛  t  j d  }  |  j d k s$ t  |  j   s6 t  d |  d <d |  d <d |  d <t |   d( d) d* g k su t  t |  j    d+ d, d- g k s t  g  t d  D] } |  | ^ qŠ d d d d d g k sÚ t  t j	 d d d d
 d g  } t |  j
 |   d. d/ d0 g k s"t  |  j d k s7t  t  j d  }  d |  d <d |  d <d |  d
 <d |  d <d |  d <d |  d <d |  d
 <d |  d <d |  d
 <t |  j    d1 d2 d3 d4 g k sĘt  g  t d  D] } |  j |  ^ q×t t t t t t t t t t g
 k st  t  j d  }  |  d
 c d 7<|  d c d 7<|  d
 c d 7<d |  d <d |  d <|  d c d 7<t |  j    d5 d6 d7 g k sŚt  |  j d k sťt  t  j d  }  d |  d <d |  d <d |  d <|  j d k sýt  d |  d <|  d d k st  |  j d k s2t  t j d8  } t  j d  }  d |  d <d
 |  d <d |  d
 <| |  d k st  t  j d i d d 6d d 6d d 6 } t  j d i d d 6d d 6d d 6d d 6 }  | |  d k sďt  t  j | t j d  |   d k st  t j   } xG t d  D]9 } x0 t | d  D] } | j d | | d  qHWq2Wt t  j | | |   d9 d d st  t t  j | |  t  j | | |  d d sĎt  t  j d d  } t  j d
  } d | d <t  j d
  }  d |  d <d |  d <| | |   s2t  t  j d
  } t  j d
  }  d |  d <| | |   sot  t  j d i d d 6d d 6 } t | j    d d d d d g k sźt  y& t  j d
 d d d d
 g  t  WnC t k
 r'} | j j d  k st  | j j d! k s(t  n Xt  j d
 i d d 6d d 6 } t j d d d d
 g  }  | |  d" k syt  t  j d  } t j t t t t t f  } t j d:  }  | j | |   | t  j d i d d 6d
 d 6d d
 6 k sřt  t  j d  } t j	 d;  } t j d<  }  | j | |   | t  j d i d# d 6d$ d
 6d% d 6 k sht  t  j d d  } d&   }	 xŕ t j |	   d'  D]É \ } }  }
 d | d |  } d |  d | } | | |  sát  t t | j    |
 d d st  | d | 7} | d } | | |   s5t  | d |  8} | d } | | |  st  qWt  j d i d d 6 } | d }  |  t  j d i d d 6 k sŽt  d  S(=   Ni   i   i   i    i   i   g       @g        g      @i   i
   iű˙˙˙i   i˙˙˙˙g      "@i	   g      @g      @iţ˙˙˙i   iŃ˙˙˙iŁ  iź  t   epsgVçŻŇ<t	   tolerancegš?g)\Âő(đ?gR¸ëQđ?güŠńŇMbP?g333333Ó?s   Boost.Pythont   ArgumentErrori   g       Ŕg      Ŕg      Ŕc          s   s
  t  j d i d d 6d d 6 }  t  j d i d d 6d d	 6d
 d 6d d 6 } t d |  j   d | j    } |  | | f Vt j j t  j d d d d t j j d d d d	   } | j	   }  | j	   } t d |  j   d | j    } |  | | f Vd  S(   Ni   gń?i   gÍĚĚĚĚĚô?i   g       @i    g@i   gffffff@g333333@i   iţ˙˙˙t   densitygŮ?t   elementst   mint   max(
   R   t   vectort   listt   as_dense_vectort   scitbxt   randomt   variatet   vector_distributiont   uniform_distributiont   next(   t   ut   vt   wt   random_vectors(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/sparse/tests/tst_sparse.pyt    linear_combination_trial_vectorsy   s     .$	!$i2   (   i   g       @(   i   g        (   i   g      @(   i   g       @(   i   g        (   i   g      @(   i   g       @(   i   g        (   i   g      @(   i   g      @(   i   g        (   i   g      @(   i	   g      "@(   i   g       @(   i   g      @(   i   g      @(   i   i˙˙˙˙i   i    iţ˙˙˙gKrz, @(   i   i   i   i   i   (   i   i   i   (   g       Ŕg      Ŕg      Ŕ(   R   R   t   sizet   AssertionErrort   is_structurally_zeroR   t   compactt   xrangeR   t   size_tt   permutet
   non_zeroest   is_structural_zerot   Truet   Falset   doublet   weighted_dott   double_ranget   appendR   t   quadratic_formR   R   t	   Exceptiont	   __class__t
   __module__t   __name__t   boolt   set_selectedt	   itertoolst   islice(   R   t   it   pR   t   at   jt   sparse_approx_equalt   et   sR   R   t   w1t   w2(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/sparse/tests/tst_sparse.pyt   exercise_vector
   sÚ    


!'>*








*%-

'






'.*!



 -
 33	%'


c    	   	   C   sţ  t  j d d  }  |  j d k r0 |  j d k s6 t  x& |  j   D] } | j   sC t  qC Wd |  d <d |  d <|  j d	 k s t  xÂ t d  D]´ } xŤ t d  D] } | | f d k rß |  | | f d k sEt  q¨ | | f d k r|  | | f d k sEt  q¨ |  | | f d k s¨ t | | |  | | f f   q¨ Wq Wt  j d
 d  }  |  j d
 k stt  d |  d  <d |  d! <d |  d" <d |  d# <|  j d k sąt  |  j d
 k sĆt  d |  d$ <|  d% d k sćt  |  j d
 k sűt  t  j d d  }  d |  d& <t  j d d  } d | d' <d | d( <t  j	 d d  } | |  |  sdt  d } t  j | d	  }  t  j
 | i d d 6d d	 6 t  j
 | i d d 6d d 6 f } | d |  d  d   d f <| d |  d  d   d f <|  d  d   d f s(t |  d  d   d f | k   y3 t  j d	 i d d 6 |  d d  d   f <t  Wn% t k
 r} t |  st  n Xt  j d d d i d d 6d d 6i d d 6d d 6i d
 d
 6d d 6g }  d |  d k sät  d |  d k sút  d  S()   Ni
   i   g      đ?i    i   g       @i	   i   i   i   i   i   g)\Âő(đ?gR¸ëQđ?güŠńŇMbP?R   gš?gÉ?gŮ?gé?i   t   elements_by_columnsi˙˙˙˙s   
%ss   
{
{ 0, -1, 0 },
{ 1, 0, 0 },
{ 0, 0, 0 },
{ 0, 0, 0 },
{ 4, 0, 0 },
{ 0, 0, 0 },
{ 0, 0, 6 },
{ 0, 0, 0 },
{ 0, 8, 0 },
{ 0, 0, 9 }
}
s   
%rsÂ   
sparse.matrix(rows=10, columns=3,
              elements_by_columns=[ { 1: 1, 4: 4 },
                                    { 0: -1, 8: 8 },
                                    { 6: 6, 9: 9 }, ])(   i    i   (   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   t   matrixt   n_rowst   n_colsR   t   colsR   R!   R   R   t   matrix_columnR   R   t   RuntimeErrort   str(	   R4   t   cR2   R5   t   bR   t   mt   columnsR7   (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/sparse/tests/tst_sparse.pyt   exercise_matrix   sh    $

  =







#8)
c    
      C   sü  d d l  m }  m } |  t j d d d d d | d d d	 d
   } } xŐ t j | d  D]Á } | j d k r | j d k s t	  t
 | j | j | j d d d sś t	  xh t | j  D]W } xN | j |  D]= \ } } d | k o˙ d
 k  n sÜ t	 | | | f   qÜ WqĆ Wq` W|  t j d d d d | d d d	 d   } } x t j | d  D] }	 |	 j d k st	  t
 |	 j |	 j d d d sŹt	  xE |	 D]= \ } } d | k oÖd k  n słt	 | | | f   qłWqlWd  S(   Ni˙˙˙˙(   R   R   i   i   R   gŮ?R	   R
   R   g      ŕ?i
   R   i   i   g333333Ó?iţ˙˙˙i   (   t   scitbx.randomR   R   R   t   matrix_distributionR0   R1   R>   R?   R   R   R!   R   t   colR   R   (
   R   R   t   gt   random_matricesR4   R5   R2   t   xR   R   (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/sparse/tests/tst_sparse.pyt   exercise_randomŢ   s(    $,=%c          C   sÝ  d d l  m }  m } xd d d g D]đ \ } } |  t j | d d d | d d	 d
 d   } |  t j | | d d d | d d	 d
 d   } x~ t d  D]p } | j   } | j   } | | }	 | j   }
 | j	   } |	 j	   } |
 j
 |  } t | |  s˘ t  q˘ Wq& Wxź d d d g D]Ť \ } } |  t j | | d d d | d d	 d
 d   } xi t d  D][ } | j   } t j |  } | | }	 | j   }
 |
 j
 |  } t |	 |  svt  qvWq*Wd  S(   Ni˙˙˙˙(   R   R   i   i   R   gŮ?R	   R
   iţ˙˙˙R   i   g333333Ó?i2   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   RI   R   R   R   R   RJ   R   R   t   as_dense_matrixR   t   matrix_multiplyR   R   R   t   random_double(   R   R   RF   t   nR   RM   t   n_testR4   RN   t   yt   aat   xxt   yy1t   yy2t   yy(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/sparse/tests/tst_sparse.pyt   exercise_matrix_x_vectorö   s>    

c    	         sŞ   d d l  m  m      f d   }  |  d d  |  d d  } } | | } g  | | | f D] } | j   ^ qa \ } } } | j |  } t | |  sŚ t  d  S(   Ni˙˙˙˙(   R   R   c            s4    t  j |  | d d d   d d d d     S(   NR   gŮ?R	   R
   iö˙˙˙R   i
   (   R   RJ   (   RF   RS   (   R   R   (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/sparse/tests/tst_sparse.pyt   <lambda>  s   i   i   i   (   RI   R   R   RP   RQ   R   R   (	   t   matR4   RE   RD   RF   RV   t   bbt   cct   cc1(    (   R   R   sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/sparse/tests/tst_sparse.pyt   exercise_matrix_x_matrix  s    
1c          C   s  d d l  m }  m } xî d d d g D]Ý \ } } |  t j | | d d d | d d	 d
 d   } x t d  D] } t j | | d d  } | j   } | j	 |  } | j
   }	 | j   }
 | j   } t | |	 j   j |
 j |	    sr t  qr Wq& Wd  S(   Ni˙˙˙˙(   R   R   i   i   R   g333333ă?R	   R
   iý˙˙˙R   i
   i2   i   i   (   i   i   (   i   i   (   i   i   (   RI   R   R   R   RJ   R   R   RR   R   t)   self_transpose_times_symmetric_times_selfRP   t   matrix_packed_u_as_symmetricR   t   matrix_transposeRQ   R   (   R   R   RF   RS   RM   RT   RE   R4   RD   RV   R^   R_   (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/sparse/tests/tst_sparse.pyt   exercise_a_tr_b_a$  s     c          C   s  d d l  m }  m } xî d d d g D]Ý \ } } |  t j | | d d d | d d	 d
 d   } x t d  D] } t j | | d d  } | j   } | j	 |  } | j
   }	 | j   }
 | j   } t | |	 j |
 j |	 j      sr t  qr Wq& Wd  S(   Ni˙˙˙˙(   R   R   i   i   R   g333333ă?R	   R
   iý˙˙˙R   i
   i2   i   i   (   i   i   (   i   i   (   i   i   (   RI   R   R   R   RJ   R   R   RR   R   t)   self_times_symmetric_times_self_transposeRP   Rc   R   RQ   Rd   R   (   R   R   RF   RS   RM   RT   RE   R4   RD   RV   R^   R_   (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/sparse/tests/tst_sparse.pyt   exercise_a_b_a_tr6  s     c          C   s   t  j d
  }  t j d d  } d | d <d | d <d | d <d | d <d | d <|  | } t |  d d d d d	 g 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   (   R   R%   R   R=   R   R   (   R   R4   R   (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/sparse/tests/tst_sparse.pyt   exercise_row_vector_x_matrixH  s    





c          C   sh   t  j d i d d 6d d 6d d 6 }  t  j d i d d 6d d 6d d 6 } |  | d k sd t  d  S(	   Ni   i   i    i   i   i   i   i   (   R   R   R   (   R   R   (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/sparse/tests/tst_sparse.pyt   exercise_dot_productS  s    ''c       	   C   s   t  j d d d i d d 6d d 6d d 6i d d 6d d 6d	 d
 6i d d 6g }  |  j   } |  j   } | j   } | j | j   j |   s t  d  S(   Ni   i   R<   i   i    i   i   i˙˙˙˙iţ˙˙˙i   (   R   R=   RP   t   self_transpose_times_selft   all_eqRd   RQ   R   (   R4   RV   RE   R^   (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/sparse/tests/tst_sparse.pyt   exercise_a_tr_aX  s    c          C   s  t  j d d  }  x\ t |  j  D]K } xB t |  j  D]1 } d | | d d k r8 d |  | | f <q8 q8 Wq" Wt j g  t |  j  D] } d | | ^ q  } |  j |  } t  j 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  <t  j d d  | |  st	  d  S(!   Ni	   i   i   i   i   i˙˙˙˙g      @i    i   g      @i   g      Ŕi   R   gę-q=(   i    i    (   i    i   (   i    i   (   i   i   (   i   i   (   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?   R   R%   t(   self_transpose_times_diagonal_times_selfR   R   (   R4   R2   R5   R   RE   t   b0(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/sparse/tests/tst_sparse.pyt   exercise_a_tr_diag_ab  s4     3
















c    	      C   s'  i d d 6d d 6i d d 6d d 6i d d 6d d 6i d d 6d d 6g }  t  j d	 d |   } t j d
  } | j |  } t  j d	 t |  g  | D] } |  | ^ q  } | | k sÁ t  t j d  } | j |  } t  j d	 t |  g  | D] } |  | ^ qř  } | | k s#t  d  S(   Ni   i    i   i˙˙˙˙iţ˙˙˙i   i   i   i   (   i   i   (   i   i    i   i   (   R   R=   R   R   t   select_columnst   lenR   (	   RG   R4   R3   RE   t   kt   b1t   qRD   t   c1(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/sparse/tests/tst_sparse.pyt   exercise_column_selection}  s    22c          C   sb  t  j d d  }  d |  d	 <d |  d
 <d |  d <d |  d <t  j d d  } d | d <d | d <d | d <|  j | d d  t |  j    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  |  j d d  sű t  |  j d d  st  |  j d d  s+t  y |  j | d d  t  Wn t k
 r[n Xy |  j | d d  t  Wn t k
 rn Xt	 j
 d  } | j t	 j d d   |  j | d d  t |  j    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  |  j d d  sFt  |  j d d  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    (   R   R=   t   assign_blockR   RP   R   R"   R   RB   R   R%   t   reshapet   grid(   R4   RE   RD   (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/sparse/tests/tst_sparse.pyt   exercise_block_assignment  sL    






!!

 	!!c           C   se   t  j j   t   t   t   t   t   t   t	   t
   t   t   t   t   d  S(   N(   t   libtbxt   utilst   show_times_at_exitRz   Rv   Rl   Ro   Ri   R;   RH   RO   R[   Ra   Re   Rg   (    (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/sparse/tests/tst_sparse.pyt   runś  s    t   __main__(   t
   __future__R    t   scitbx.array_familyR   R   R   R{   t   libtbx.test_utilsR   R   R   RI   R0   R;   RH   RO   R[   Ra   Re   Rg   Rh   Ri   Rl   Ro   Rv   Rz   R~   R-   (    (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/sparse/tests/tst_sparse.pyt   <module>   s.   		H		"						
			*	