ó
r™xTc           @   s¢   d  d l  m Z d  d l Z d  d l Z d  d l m Z d  d l m Z d  d l m	 Z	 d  d l
 Z
 d „  Z d „  Z d „  Z d	 „  Z e d
 k rž e ƒ  n  d S(   iÿÿÿÿ(   t   divisionN(   t   matrix(   t   flex(   t   approx_equalc          C   sc   d d l  m }  |  j |  _ t |  _ d |  _ |  j ƒ  |  j |  _ |  j d k sY t ‚ |  ` d  S(   Niÿÿÿÿ(   t   immoptibox_portsi    i+  (   t   scitbx.examplesR   t   cholesky_decompositiont   py_cholesky_decompositiont&   exercise_scitbx_cholesky_decompositiont   tst_flex_countst   exercise_choleskyt   AssertionError(   R   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/linalg/tests/tst_cholesky.pyt   exercise_cholesky_decomposition	   s    		
c   	      C   sù   d d l  m } | j |  ƒ } |  j ƒ  } t j j | ƒ } | } | d  k ra | j sæ t	 ‚ n… t
 | | j ƒ  ƒ s| t	 ‚ xg t d ƒ D]Y } t j d |  j ƒ  d d d ƒ d } | j | ƒ } t
 |  j | ƒ | ƒ s‰ t	 ‚ q‰ W| j d 7_ | S(	   Niÿÿÿÿ(   R   i
   t   sizei    t   factori   i   (   R   R   R   t   matrix_symmetric_as_packed_lt   scitbxt   linalgt-   l_l_transpose_cholesky_decomposition_in_placet   Nonet   failureR   R   t!   matrix_lower_triangle_as_packed_lt   xrangeR   t   random_doublet   focust   solvet   matrix_multiplyR	   (	   t   aR   t   ct   alt   cholt   clt   i_trialt   bt   x(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/linalg/tests/tst_cholesky.pyR      s    &"c             s-  d „  ‰  ‡  f d †  }  t  j g  ƒ } |  | ƒ \ } } } | j ƒ  d k sT t ‚ | j ƒ  d k sl t ‚ t | ƒ d k s„ t ‚ d } d } x• t d | d ƒ D]€ } t  j d g | ƒ } |  | ƒ \ } } } t | ƒ t | ƒ k só t ‚ t	 | d g | ƒ st ‚ t	 | | ƒ s¤ t ‚ q¤ Wxü t d | d ƒ D]ç } t  j d g | | ƒ } |  | ƒ \ } } } t | ƒ t | ƒ k s�t ‚ t | ƒ t
 j j ƒ  g | k s·t ‚ xi t | ƒ D][ } xR t | ƒ D]D }	 | |	 k rÿ| | |	 ƒ d k q×| | |	 ƒ | d d ƒ k q×WqÄWq<WxÑ t d | d ƒ D]¼ } x³ t | ƒ D]¥ }
 t  j t j d | ƒ ƒ } |  | ƒ \ } } } t	 | d g | ƒ s t ‚ xP t | ƒ D]B } x9 t | ƒ D]+ }	 | |	 k rÀt	 | | |	 ƒ d ƒ qÀqÀWq­WqNWq;Wx¿ t d | d ƒ D]ª } x¡ t | ƒ D]“ }
 t  j t j d | d d	 ƒ d ƒ } |  | ƒ \ } } } xP t | ƒ D]B } x9 t | ƒ D]+ }	 | |	 k r‚t	 | | |	 ƒ d ƒ q‚q‚WqoWq"WqWx˜ t d | d ƒ D]ƒ } xz t | ƒ D]l }
 t  j t j d | | d d	 ƒ d ƒ } | j ƒ  } |  | ƒ \ } } } t	 | d g | ƒ sät ‚ qäWqÑWx™ t d | d ƒ D]„ } | | d d	 } xi t | ƒ D][ }
 t j d | d d	 ƒ d j ƒ  } |  t  j | ƒ ƒ | j d ƒ |  t  j | ƒ ƒ q‘WqlWx2t d
 ƒ D]$} xt d
 ƒ D]}	 t j d d	 d g d	 d d
 g d d
 d g g ƒ } | j d | d |	 ƒ | j d | d |	 ƒ |  t  j | ƒ ƒ \ } } } | d k rÓ|	 d k rÓt | ƒ d d d	 g k sÓt ‚ n  t	 | d d d g ƒ sñt ‚ t	 | d d d d d d d d d g	 ƒ st ‚ qWqWd  S(   Nc         S   s   t  |  ƒ } t j t j | | ƒ ƒ } | j d ƒ x; t | ƒ D]- } |  | | k rA | j | |  | ƒ qA qA Wt j | ƒ S(   Ni   (	   t   lenR   t   doublet   gridt   matrix_diagonal_set_in_placeR   t   matrix_swap_rows_in_placeR   t   sqr(   t   pt   nt   mt   i(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/linalg/tests/tst_cholesky.pyt   p_as_mx*   s    c      	      s*  t  j |  ƒ } | j t  j |  j ƒ ƒ | j ƒ  } t j j | d d ƒ} | j	 d k sa t
 ‚ | j ƒ  } t j j | ƒ } | j	 t j j ƒ  k s� t
 ‚ | j j ƒ  | j ƒ  k s¾ t
 ‚ | j | j } } t j | j ƒ  ƒ } |  j d k r| j ƒ  | } ˆ  | ƒ } | |  | j ƒ  }	 |	 t j | ƒ }
 t j j |
 | ƒ } | d k  set
 | ƒ ‚ t  j d |  j d d d ƒ d } | j d	 | ƒ } | t j | ƒ } | t j | ƒ } t j j d
 |
 j ƒ  d t  j | ƒ d	 t  j | ƒ d | j	 ƒ } | d k  st
 | ƒ ‚ n  | | | f S(   Nt   epsilong:Œ0âŽyE>i    i
   R   R   i   i   R!   R   R"   (   i    i    (   R   R$   t   resizeR%   R*   t!   matrix_upper_triangle_as_packed_uR   R   t2   gill_murray_wright_cholesky_decomposition_in_placeR.   R   t   matht!   floating_point_epsilon_double_gett   packed_ut   idt   pivotst   eR   R(   t!   matrix_packed_u_as_upper_trianglet	   transposet   diagt   matrix_equality_ratioR   R   t   colt   matrix_cholesky_test_ratiot   as_flex_double_matrix(   R   R   t   ut   gwmR)   R7   t   rt   rtrt   pmt   paptt   paeptt   delta_decompositionR!   R"   t   pxt   pbt   delta_solve(   R-   (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/linalg/tests/tst_cholesky.pyt   core3   s>    		!#i    i   i
   i   R   R   i   i   i   i   gü©ñÒMbp¿R,   t   jg        gªñÒMb@g.!	Ž˜@g=,p½ ê?g.!	Ž˜ó?g¿ÜH=6ý?gètA=Ÿó?(   R   R(   R   R   R#   R   R:   t   listt   rangeR   R   R2   R3   R   R   t   transpose_multiplyt   matrix_packed_u_as_symmetricR&   R$   R'   t   matrix_swap_columns_in_place(   RJ   R   R)   R7   RA   t   n_maxt   n_trials_per_nR*   R,   RK   R    R+   R   (    (   R-   sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/linalg/tests/tst_cholesky.pyt2   exercise_gill_murray_wright_cholesky_decomposition(   sˆ    		&( ( )% ))$"3$		c           C   s   t  ƒ  t ƒ  d GHd  S(   Nt   OK(   R   RS   (    (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/linalg/tests/tst_cholesky.pyt   run£   s    t   __main__(   t
   __future__R    t   scitbx.mathR   t   scitbx.linalgR   t   scitbx.array_familyR   t   libtbx.test_utilsR   t   randomR   R   RS   RU   t   __name__(    (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/linalg/tests/tst_cholesky.pyt   <module>   s   			{	