ó
r™xTc           @   s²   d  d l  m Z d  d l Z d  d l m Z m Z d  d l m Z d  d l m	 Z	 d  d l
 m Z d  d l Z d  d l Z d „  Z d d	 „ Z d
 „  Z e d k r® e ƒ  n  d S(   iÿÿÿÿ(   t   divisionN(   t   eigensystemt   time_eigensystem_real_symmetric(   t   flex(   t   approx_equal(   t
   matrix_mulc          C   s�  t  j d t j t j d d ƒ ƒ d d d d ƒ }  |  j ƒ  j ƒ  d% k |  j ƒ  j ƒ  d& k sg t ‚ |  j	 ƒ  } | j ƒ  d' k s‹ t ‚ | j
 ƒ  } | j ƒ  d( k s¯ t ‚ xot d d ƒ D]^} t j t j | | ƒ ƒ } t  j | ƒ }  t t |  j ƒ  ƒ d g | ƒ st ‚ |  j ƒ  } xe t | ƒ D]W } xN t | ƒ D]@ } d } | | k rdd } n  t | | | f | ƒ sCt ‚ qCWq0Wg  } xE t | ƒ D]7 } | d d	 | } | j | ƒ | | | | d <qžWt  j | ƒ }  | d
 k rrt  j | d | d | d | d | d | d f ƒ } t |  j ƒ  | j ƒ  ƒ sNt ‚ t |  j ƒ  | j ƒ  ƒ srt ‚ n  | j ƒ  | j ƒ  t |  j ƒ  | ƒ s¡t ‚ | d k rÔt t j |  j ƒ  ƒ d ƒ sÔt ‚ n  t t j |  j ƒ  ƒ d ƒ søt ‚ t t j |  j ƒ  ƒ | ƒ st ‚ xþt d ƒ D]ð}	 xw t | ƒ D]i } x` t | | ƒ D]O } t j ƒ  d | | | | <| | k rR| | | | | | | | <qRqRWq<Wt  j | ƒ }  | d
 k rBt  j | d | d | d | d | d | d f ƒ } t |  j ƒ  | j ƒ  ƒ st ‚ t |  j ƒ  | j ƒ  ƒ sBt ‚ n  t |  j ƒ  ƒ } | j ƒ  | j ƒ  t |  j ƒ  ƒ | k s†t ‚ x� t | ƒ D]‚ } |  j ƒ  | }
 |  j ƒ  | | | | | !} t | | | | | d ƒ } g  | D] } | |
 ^ qê} t | | ƒ s“t ‚ q“Wq)Wq¿ Wd) } d } t j ƒ  } t | | ƒ } | d* k sZt ‚ d t j ƒ  | | d GHd d l m } x¶ t t g D]¨ } | s¼t j j ƒ  s³q’n  d } n t j j  ƒ  sÑq’n  d } | | d | ƒ } t j ƒ  } | | | | ƒ } | d+ k st ‚ d | t j ƒ  | | d f GHq’Wt  j d | ƒ }  |  j! ƒ  d k sht ‚ |  j! ƒ  d k  s€t ‚ t |  j	 ƒ  d d  d! d" d# d$ g ƒ s­t ‚ t  j d | d d ƒ }  |  j! ƒ  d k sÝt ‚ t |  j ƒ  d d d d d d d d d g	 ƒ st ‚ t |  j ƒ  d d d g ƒ s7t ‚ t  j d | d d ƒ }  |  j! ƒ  d k sgt ‚ t |  j ƒ  d
 d d g ƒ s‹t ‚ d  S(,   Nt   mi    t   relative_epsilong�íµ ÷Æ°>t   absolute_epsiloni   i
   i   i   i   i   i   i   i   g      à?g¨àÍÄ?Q÷?g÷êvXÇû?g1š]ñÔs@g"/\UE=á¿g¶àß}Q¤’¿g�2„–¬ÅÜ?i'  s3   time_eigensystem_real_symmetric: %.3f micro secondsg    €„.Aiÿÿÿÿ(   t   time_lapack_dsyevt   femt   fors(   time_lapack_dsyev %s: %.3f micro secondsg»½×Ùß|Û=gÐÊp�èè?g2,~0Z
Ð?gŽ…^ø¡¿gƒ…|åÏå?gHÎÌ‰»¿g:zµzOä×?(   i    (   i    i    (   i    (   i    i    (   g¨àÍÄ?Q÷?g÷êvXÇû?g1š]ñÔs@g"/\UE=á¿g¶àß}Q¤’¿g�2„–¬ÅÜ?(   i    i    i    (   i    i    i    ("   R   t   real_symmetricR   t   doublet   gridt   valuest   allt   vectorst   AssertionErrort   generalized_inverse_as_packed_ut   matrix_packed_u_as_symmetrict   xrangeR   t   tuplet   appendt   sortt   reverset   mint   maxt   sumt   randomt   listR   t   timeR   t   scitbx.linalgR	   t   Falset   Truet   scitbxt   linalgt   fem_is_availablet   for_is_availablet   min_abs_pivot(   t   st   uR   t   nt   vt   it   jt   xt   sst   tt   lt   mxt   et   lxt   n_repetitionst   t0R	   t   use_fortrant   impl_id(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/linalg/tests/tst_eigensystem.pyt   exercise_eigensystem
   sÀ    		( 	'9!$

'$$)9!$

!  	 "	6i   c         C   s*  d d l  m } t j d d ƒ } t } d } xõt d |  d ƒ D]à} d | } | j d	 | | d d ƒ d d } | j ƒ  } | j ƒ  }	 | j ƒ  | j ƒ  g }
 t j	 | d
 ƒ t j	 | d
 ƒ g } t
 j
 ƒ  } t j |	 ƒ } | | t
 j
 ƒ  | g } xÏ t t t g ƒ D]» \ } } t
 j
 ƒ  } | d d d d d |
 | d | | d | ƒ } | d k rw| j d ƒ q| d k s‰t ‚ | j | t
 j
 ƒ  | ƒ t t t | j ƒ  ƒ ƒ | | ƒ st ‚ qW| rìd GHd GHt } n  | j | j ƒ  d | j ƒ  d g ƒ d t | ƒ GHqB Wd  S(   Niÿÿÿÿ(   t   lapack_dsyevt   seedi    s   %5.2fi   i   i   t   sizeg}Ã”%­I²Ôt   jobzt   Vt   uplot   Ut   at   wR7   ic   s    --- s$         time [s]           eigenvaluess#    n    es   fem   for     min    maxs   %3d %s %s %s [%6.2f %6.2f](   R    R:   R   t   mersenne_twisterR"   R   t   random_doublet   matrix_packed_l_as_symmetrict	   deep_copyR   R   R   R   t	   enumerateR!   R   R   R   R   t   reversedR   t   extendR   (   t   max_n_powerR:   t   mtt   show_tab_headert   tfmtt   n_powerR*   R1   RA   t   aest   alat   wlaR6   t   est   tabR,   R7   t   info(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/linalg/tests/tst_eigensystem.pyt   compare_timesn   s:    
&$)/	'c           C   s   t  ƒ  t ƒ  d GHd  S(   Nt   OK(   R9   RU   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/linalg/tests/tst_eigensystem.pyt   runŽ   s    t   __main__(   t
   __future__R    R    R#   R   R   t   scitbx.array_familyR   t   libtbx.test_utilsR   t   scitbx.math.tests.tst_mathR   R   R   R9   RU   RW   t   __name__(    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/linalg/tests/tst_eigensystem.pyt   <module>   s   	d 	