ó
ęxTc           @   s   d  d l  m Z d  d l m 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   approx_equalc          C   sä  d d l  m }  m } m } m } |  d  d k s: t  |  d  d k sR t  |  d  d k sj t  |  d  d k s t  |  d	  d
 k s t  | d  d k s˛ t  | d  d k sĘ t  | d  d k sâ t  | d  d k sú t  | d  d k st  | d  d k s*t  | d  d k sBt  | d  d
 k sZt  | d  d k srt  | d  d
 k st  xS t d d  D]B } | | d  | k sźt  | | d  | d k st  qWd  S(   Ni˙˙˙˙(   t   iroundt   iceilt   ifloort   nearest_integeri    gffffffö?i   gfffffföżgů?i   gůżiţ˙˙˙gń?gńżgffffffţ?gffffffţżiý˙˙˙i   g333333Ó?gffffffć?i   (   t   libtbx.math_utilsR   R   R   R   t   AssertionErrort   xrange(   R   R   R   R   t   i(    (    sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_math_utils.pyt   exercise_integer   s&    "c          C   sĹ   d d l  m }  m } |  t t  s+ t  |  t t  sA t  |  t t  sV t  |  t t  sk t  | t t  s t  | t t  s t  | t t  sŹ t  | t t  sÁ t  d  S(   Ni˙˙˙˙(   t
   does_implyt   are_equivalent(   R   R   R   t   TrueR   t   False(   R   R   (    (    sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_math_utils.pyt   exercise_logical   s    c          C   sű  d d l  m }  g  |  g   D] } t |  ^ q g  k sA t  g  |  d g  D] } t |  ^ qQ d g g k s{ t  g  |  d g d t D] } t |  ^ q d g d g g k sÁ t  g  |  d g  D] } t |  ^ qŃ d g d g d g g k st  g  |  d d	 g d
 d g  D] } t |  ^ q#d	 g d g d g d g d g g k set  g  |  d d g d
 d g d t  D] } t |  ^ qd g d g d g g k s˝t  g  |  d d	 d g d
 d d g  D] } t |  ^ qßd	 d g d	 d g d d g d d g d d g d d g d d g d d g d d g d d g g
 k s]t  g  |  d d	 d g d
 d d g d t  D] } t |  ^ qd	 d g d	 d g d	 d g d d g d d g d d g d d g d d g d d g d d g d d g d d g d d g d d g d d g d d g d d g d d g g k sKt  g  |  d d d d g d
 d d d g  D] } t |  ^ qsd d d g d d d g d d d g d d d g d d d g d d d g d d d g d d d g g k s÷t  d  S(   Ni˙˙˙˙(   t   nested_loopi   i    t
   open_rangei   i   t   beginiţ˙˙˙t   endi   i   i   (   R   R   t   listR   R   (   t   nlR	   (    (    sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_math_utils.pyt   exercise_nested_loop&   s&    1:FF1-7!7H!=HQ=Hc       	   C   sĹ  d d l  m }  g  } |  |  t k s. t  d g } |  |  t k sO t  d d g } |  |  sm t  | d d g k s t  |  |  s t  | d d g k s° t  d d d g } g  } x- t rô | j t |   |  |  sČ PqČ qČ W| d d d	 d
 d d g k st  | d d d g k s4t  d } x t d d  D]s } | | 9} t |  } d } x$ t r| d 7} |  |  soPqoqoW| t |  k sŤt  | | k sJt  qJWd  S(   Ni˙˙˙˙(   t   next_permutationi    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   t   appendt   tupleR   t   range(   R   t   seqt   resultt
   expected_nt   mt   n(    (    sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_math_utils.pyt   exercise_next_permutation;   sF    		
	
c          C   s   d d l  m }  d d  l } | j d  t d  } x= t d  D]) } |  d |  | t d  k rB PqB qB Wt  t |  t d  k s t  d  S(   Ni˙˙˙˙(   t   random_permutation_in_placei    i   i
   R   (   R   R!   t   randomt   seedR   R   R   t   sorted(   R!   R"   t   lt   i_trial(    (    sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_math_utils.pyt$   exercise_random_permutation_in_place`   s    c          C   s'  d d l  m }  |  d d  g  k s+ t  t   } x¨ t d d  D] } |  |  } d } x | D] } | | 9} qc W| | k s t  | j |  | d k rD | t d d d	 d
 d d d d d d g
  k sŰ t  qD qD Wx) | D]! } |  |  | g k sć t  qć Wt |  d k s#t  d  S(   Ni˙˙˙˙(   t   prime_factors_ofR   i   i   id   i   i   i   i   i   i   i   i   i   i   i   (   R   R(   R   t   setR   t   updatet   len(   R(   t	   prime_setR   t   primest   ppt   p(    (    sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_math_utils.pyt   exercise_prime_factors_ofm   s    	=c          C   s  d d l  m }  d d  l } xř t d | j f t d f g D]× \ } } t |  d d | d d d so t  t |  d	 d | d	 d d s t  t |  d
 d | | d	 d d sÁ t  t |  d d | d d d sč t  t |  d d | | d d d s< t  q< Wt |  d  d  s2t  t |  d  d  sMt  t |  d d t d  snt  t |  d d t d  st  d  S(   Ni˙˙˙˙(   t   normalize_anglei   g     v@i    t   degt   epsgę-q=g:0âyE>g:0âyEži   g    ×AgJkXG˙?g    ×ÁgntŠ\@i  iP   (   R   R1   t   mathR   t   piR   R   R   (   R   R4   R2   t   period(    (    sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_math_utils.pyt   exercise_normalize_angle~   s    ,''+'/!c    	      C   s  d d l  m }  d d  l } d d  l } d } g  } x3 t |  D]% } | j d d  } | j |  qA Wx3 t d  D]% } | j d d  } | j |  qw W|  |  } | j t g  | D] } | d	 ^ qź  |  } | d k rô | | k  sú t	  |  d
 d
 g  d k st	  d  S(   Ni˙˙˙˙(   t   percentile_based_spreadi@â id   i
   ič  i,  i   i   i   i    (
   R   R8   R"   R4   R   t   gaussR   t   sqrtt   sumR   (	   R8   R"   R4   t   n_pointst   deltasR	   t   xt   pbst   rmsd(    (    sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_math_utils.pyt    exercise_percentile_based_spread   s    0c           C   sA   t    t   t   t   t   t   t   t   d GHd  S(   Nt   OK(   R
   R   R   R    R'   R0   R7   RA   (    (    (    sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_math_utils.pyt   exercise   s    t   __main__N(   t
   __future__R    t   libtbx.test_utilsR   R
   R   R   R    R'   R0   R7   RA   RC   t   __name__(    (    (    sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/tst_math_utils.pyt   <module>   s   				%					