ó
V™xTc           @   s)  d  d l  m Z d  d l m Z d  d l m Z m Z 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  d l Z d  d l Z d  d l Z d d	 d
 d g d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z e d k r%e e j d
 ƒ n  d S(   iÿÿÿÿ(   t   division(   t   flex(   t   have_lbfgs_femt   fortrant   raw_referencet   raw(   t
   show_times(   t	   show_diff(   t   easy_runNid   i   i   i    c         C   sá  | d d k s t  ‚ t j | ƒ } t j | ƒ } t j | ƒ } d } d } d }	 x2 t d | d ƒ D] }
 d | |
 <d | |
 d <qh W| d | d d | } t j | ƒ } d } d } xd } x” t d | d ƒ D]€ }
 d | |
 } d	 | |
 d | |
 | |
 } d
 | | |
 d <d | |
 | |
 d | | |
 <| | | | | } qÛ W|  d | d | d | d | d | d | d | d | d | d |	 d | d | ƒ } | d k rÀPn  | d 7} | d k rÂ PqÂ qÂ d  S(   Ni   i    gñhãˆµøä>g¼‰Ø—²Òœ<g333333ó¿g      ð?i   g        g      $@g      4@g       Àt   nt   mt   xt   ft   gt   diagcot   diagt   iprintt   epst   xtolt   wt   iflagiÐ  (   t   AssertionErrorR   t   doublet   xrange(   t
   lbfgs_implR	   R
   R   R   R   R   R   R   R   t   jt   size_wR   R   t   icallR   t   t1t   t2(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/tst_lbfgs_fem.pyt   exercise   s<    
""*! 
 c         C   s„   |  GHt  j j ƒ  t j d |  ƒ } d j | j ƒ } t | ƒ d k rt | GH| j d ƒ d k  rt t	 d ƒ ‚ qt n  d j | j
 ƒ S(   Nt   commands   
i    s*   == ERROR SUMMARY: 0 errors from 0 contextss3   stderr output does not appear to be valgrind output(   t   syst   stdoutt   flushR   t   fully_bufferedt   joint   stderr_linest   lent   findR   t   stdout_lines(   t   cmdt   outt   err(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/tst_lbfgs_fem.pyt   run_cmd+   s    c         C   s„   t  j j d d ƒ } t j j | ƒ s+ d  Sg  } x. | d |  g D] } | j t d | ƒ ƒ qB Wt | d | d ƒ s€ t	 ‚ d  S(   Nt   paths   scitbx/lbfgs/sdrive_fems$   scitbx.python "%s" fortran 100 5 1 0R)   i    i   (
   t   libtbxt   envt   under_buildt   osR-   t   isfilet   appendR,   R   R   (   t   this_scriptt
   sdrive_femt   outputsR)   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/tst_lbfgs_fem.pyt   run_and_compare_sdrive_fem7   s    c   	      C   sâ   t  j d |  ƒ } g  } d } x£ | D]› } | j ƒ  } | j ƒ  } t |  | | !ƒ } t | ƒ d k  rq d } n t |  | | d !ƒ } d | d | } | j |  | | !| | ƒ | d } q% W| j |  | ƒ d j | ƒ S(   Ns)   [ -][0-9]\.[0-9][0-9][0-9]E[-+][0-9][0-9]i    g›+¡†›„=i   s   %%%d.1ft    (   t   ret   finditert   startt   endt   floatt   absR3   R$   (	   R*   t   match_objectst	   fragmentst   kt	   match_objt   iR   t   vt   fmt(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/tst_lbfgs_fem.pyt   truncate_floats@   s     	c         C   sØ   t  j d |  ƒ } g  } d } x™ | D]‘ } | j ƒ  d } |  j d | | ƒ } | d k sb t ‚ | | d k  r˜ | j |  | | !d |  | | !ƒ n | j |  | | !ƒ | d } q% W| j |  | ƒ d j | ƒ S(   Ns   E[-+]0[0-9][0-9]i    i   t    i	   i   R8   (   R9   R:   R;   t   rfindR   R3   R$   (   R*   R?   R@   RA   RB   R   RC   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/tst_lbfgs_fem.pyt   replace_e0dd_with_eddS   s    &c      	   C   s<  g  } xÍ d d d g D]¼ } | d k r5 t  r5 q n  d |  | | | | d | d f } t d | ƒ } | d k r• | j d d	 ƒ j d
 d ƒ } n  t d | ƒ } | j d d ƒ } t d | ƒ } | j | ƒ q Wt | ƒ d k sî t ‚ | d } x= t d t | ƒ ƒ D]& }	 | |	 }
 t	 | |
 ƒ st ‚ qWd  S(   NR   R   R   s!   scitbx.python "%s" %s %d %d %d %di    i   R)   s   D-s   E-s   D+s   E+R*   s   E-00s   E+00i   (
   R   R,   t   replaceRI   RF   R3   R&   R   R   R   (   R4   R	   R
   R   R6   t   implR)   R*   t   aRC   t   b(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/tst_lbfgs_fem.pyt   run_and_compare_implementationsc   s$    !!

c          C   s÷   t  j j d d d d ƒ }  |  j d ƒ d k  s6 t ‚ t d |  ƒ t j d d ƒ } x› d	 d d
 d d g D]„ } x{ d d
 d d g D]g } | j d d d d g ƒ } | j d d d d d d g ƒ } t	 d |  d | d | d | | g ƒ q„ Wqk Wd  S(   Nt   module_namet   scitbxR-   s   lbfgs/tst_lbfgs_fem.pyt   "i    R4   R   iÿÿÿÿi   i   i   id   i   i   i   i   i   R	   R
   R   (
   R.   R/   t
   under_distR'   R   R7   t   randomt   Randomt   choiceRN   (   R4   t   rndt   iprint1t   iprint2R	   R
   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/tst_lbfgs_fem.pyt   compare_implementationsw   s    !c         C   s)  t  d d ƒ } t |  ƒ d k r| t d t |  d ƒ d t |  d ƒ d t |  d	 ƒ d
 t |  d ƒ t |  d ƒ g ƒ d  S|  g  d g d g g k s� t ‚ t s« d GHn  d |  k } d |  k } | sÏ | rxG t rè t d t ƒ n  t d t ƒ t d t	 ƒ | sÒ PqÒ qÒ n t
 ƒ  | ƒ  d GHd  S(   Nt
   time_startt   nowi   R   i    R	   i   R
   i   R   i   i   s   --onces	   --endlesssD   Skipping some tests: lbfgs_fem.cpp not linked into scitbx_lbfgs_ext.t   OK(   R   R&   R   t   evalt   intR   R   R   R   R   RY   (   t   argst   timert   oncet   endless(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/tst_lbfgs_fem.pyt   run„   s0    !! 
t   __main__(   t
   __future__R    t   scitbx.array_familyR   t   scitbx.lbfgsR   R   R   R   t   libtbx.utilsR   t   libtbx.test_utilsR   R.   R   t   libtbx.load_envRS   R9   R    R1   R   R,   R7   RF   RI   RN   RY   Rc   t   __name__t   argv(    (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/tst_lbfgs_fem.pyt   <module>   s&   "								