ó
<Zc           @   s?   d  d l  Td  d l Td  d l Z d „  Z d „  Z d „  Z d S(   iÿÿÿÿ(   t   *Nc           C   s7  d t  _ t d ƒ d d k s% t ‚ t d ƒ d d k sA t ‚ t d ƒ d d	 k s] t ‚ t d ƒ d
 d k sy t ‚ t d ƒ d j d ƒ s˜ t ‚ t d ƒ d j d ƒ s· t ‚ t d ƒ d j d ƒ sÖ t ‚ t d ƒ d
 j d ƒ sõ t ‚ t d ƒ d j d ƒ st ‚ t d ƒ d j d ƒ s3t ‚ d  S(   Ni   i   g      @i   i@   g      à?i   g      à¿g      À?g      Àg      P?i
   gR[Ú:XL	@gX—úí¤Ãs@gIHb=Ô?g·3äÆçi?g333333Ó?g¯¸[-˜ìÿ?g333333Ó¿gRB3Ï¹	à?(   t   mpt   dpst   mpft   AssertionErrort   ae(    (    (    s6   lib/python2.7/site-packages/mpmath/tests/test_power.pyt   test_fractional_pow   s    	c          C   sâ   t  j d ƒ xÎ d d d g D]½ }  x´ t d ƒ D]¦ } t  j d |  d >d |  >ƒ } t  j d d ƒ } | | } t t t | ƒ t | ƒ |  t ƒ ƒ | k  s£ t ‚ t t t | ƒ t | ƒ |  t	 ƒ ƒ | k s0 t ‚ q0 Wq Wd	 S(
   sR   
    Test that inexact integer powers are rounded in the right
    direction.
    iÒ  i
   i5   iÈ   i2   i   i   id   N(
   t   randomt   seedt   ranget   randintt   to_intt   mpf_powt   from_intt
   round_downR   t   round_up(   t   prect   it   at   bt   ab(    (    s6   lib/python2.7/site-packages/mpmath/tests/test_power.pyt   test_pow_integer_direction   s    
3c          C   s)  d „  }  xd d g D]\ } } | t  _ t d ƒ t d ƒ | d } t d ƒ t d ƒ | d } | } | } | t  _ 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 sXt ‚ |  | d
 | ƒ d k sv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 sHt ‚ |  | d | ƒ d k sft ‚ 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  sz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 sLt ‚ t } |  | d | ƒ d k sp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 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 s2t ‚ t } |  | d | ƒ d k sVt ‚ |  | d | ƒ d k  st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  sFt ‚ |  | d | ƒ d k sd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 ‚ q Wd t  _ d S(   sµ  
    Stress test directed rounding for powers with integer exponents.
    Basically, we look at the following cases:

    >>> 1.0001 ** -5 # doctest: +SKIP
    0.99950014996500702
    >>> 0.9999 ** -5 # doctest: +SKIP
    1.000500150035007
    >>> (-1.0001) ** -5 # doctest: +SKIP
    -0.99950014996500702
    >>> (-0.9999) ** -5 # doctest: +SKIP
    -1.000500150035007

    >>> 1.0001 ** -6 # doctest: +SKIP
    0.99940020994401269
    >>> 0.9999 ** -6 # doctest: +SKIP
    1.0006002100560125
    >>> (-1.0001) ** -6 # doctest: +SKIP
    0.99940020994401269
    >>> (-0.9999) ** -6 # doctest: +SKIP
    1.0006002100560125

    etc.

    We run the tests with values a very small epsilon away from 1:
    small enough that the result is indistinguishable from 1 when
    rounded to nearest at the output precision. We check that the
    result is not erroneously rounded to 1 in cases where the
    rounding should be done strictly away from 1.
    c         S   s   t  t |  j | t j | ƒ ƒ S(   N(   t   make_mpft   mpf_pow_intt   _mpf_R   R   (   t   xt   nt   r(    (    s6   lib/python2.7/site-packages/mpmath/tests/test_power.pyt   powrC   s    id   i   iˆ  i¸  i   i   i   iÿÿÿÿi   iûÿÿÿiúÿÿÿi   N(   id   i   (   iˆ  i¸  (	   R   R   R   R   R   R   t   round_ceilingt   round_floorR   (   R   t   inprect   outprect   pos10001t   pos09999t   neg10001t   neg09999R   (    (    s6   lib/python2.7/site-packages/mpmath/tests/test_power.pyt   test_pow_epsilon_rounding#   sš     			"(   t   mpmatht   mpmath.libmpR   R   R   R%   (    (    (    s6   lib/python2.7/site-packages/mpmath/tests/test_power.pyt   <module>   s
   

		