a
    ›¬<bk  ã                   @   s4   d dl T d dlT d dlZdd„ Zdd„ Zdd„ ZdS )	é    )Ú*Nc                   C   sÞ   dt _tdƒd dksJ ‚tdƒd dks.J ‚tdƒd d	ksBJ ‚tdƒd
 dksVJ ‚tdƒd  d¡slJ ‚tdƒd  d¡s‚J ‚tdƒd  d¡s˜J ‚tdƒd
  d¡s®J ‚tdƒd  d¡sÄJ ‚tdƒd  d¡sÚJ ‚d S )Né   é   g      @i   é@   g      à?é   g      à¿g      À?g      Àg      P?é
   gR[Ú:XL	@gX—úí¤Ãs@gIHb=Ô?g·3äÆçi?g333333Ó?g¯¸[-˜ìÿ?g333333Ó¿gRB3Ï¹	à?)ÚmpÚdpsÚmpfZae© r   r   úg/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/mpmath/tests/test_power.pyÚtest_fractional_pow   s    r   c                  C   s–   t  d¡ dD ]‚} tdƒD ]t}t  d| d > d| > ¡}t  dd¡}|| }ttt|ƒt|ƒ| tƒƒ|k slJ ‚ttt|ƒt|ƒ| tƒƒ|ksJ ‚qqdS )zR
    Test that inexact integer powers are rounded in the right
    direction.
    iÒ  )r   é5   éÈ   é2   é   é   éd   N)	ÚrandomÚseedÚrangeÚrandintZto_intZmpf_powÚfrom_intÚ
round_downÚround_up)ÚprecÚiÚaÚbÚabr   r   r   Útest_pow_integer_direction   s    
"r    c                  C   sî  dd„ } dD ]Ô\}}|t _tdƒtdƒ| d   }tdƒtdƒ| d   }| }| }|t _t}| |d|ƒdkszJ ‚| |d|ƒdksŽJ ‚| |d|ƒdk s¢J ‚| |d|ƒdks¶J ‚| |d|ƒdksÊJ ‚| |d|ƒdksÞJ ‚| |d|ƒdksòJ ‚| |d|ƒdksJ ‚| |d	|ƒdksJ ‚| |d	|ƒdks4J ‚| |d	|ƒdksJJ ‚| |d	|ƒdk s`J ‚| |d
|ƒdksvJ ‚| |d
|ƒdksŒJ ‚| |d
|ƒdks¢J ‚| |d
|ƒdks¸J ‚t}| |d|ƒdksÒJ ‚| |d|ƒdk sèJ ‚| |d|ƒdksþJ ‚| |d|ƒdksJ ‚| |d|ƒdks*J ‚| |d|ƒdk s@J ‚| |d|ƒdksVJ ‚| |d|ƒdk slJ ‚| |d	|ƒdk s‚J ‚| |d	|ƒdks˜J ‚| |d	|ƒdks®J ‚| |d	|ƒdksÄJ ‚| |d
|ƒdk sÚJ ‚| |d
|ƒdksðJ ‚| |d
|ƒdk sJ ‚| |d
|ƒdksJ ‚t}| |d|ƒdks6J ‚| |d|ƒdksLJ ‚| |d|ƒdksbJ ‚| |d|ƒdksxJ ‚| |d|ƒdksŽJ ‚| |d|ƒdks¤J ‚| |d|ƒdksºJ ‚| |d|ƒdksÐJ ‚| |d	|ƒdksæJ ‚| |d	|ƒdksüJ ‚| |d	|ƒdksJ ‚| |d	|ƒdks(J ‚| |d
|ƒdks>J ‚| |d
|ƒdksTJ ‚| |d
|ƒdksjJ ‚| |d
|ƒdks€J ‚t}| |d|ƒdksšJ ‚| |d|ƒdk s°J ‚| |d|ƒdk sÆJ ‚| |d|ƒdksÜJ ‚| |d|ƒdksòJ ‚| |d|ƒdk sJ ‚| |d|ƒdksJ ‚| |d|ƒdk s4J ‚| |d	|ƒdk sJJ ‚| |d	|ƒdks`J ‚| |d	|ƒdksvJ ‚| |d	|ƒdk sŒJ ‚| |d
|ƒdk s¢J ‚| |d
|ƒdks¸J ‚| |d
|ƒdk sÎJ ‚| |d
|ƒdksJ ‚qdt _dS )aµ  
    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)Zmake_mpfZmpf_pow_intZ_mpf_r   r   )ÚxÚnÚrr   r   r   ÚpowrC   s    z'test_pow_epsilon_rounding.<locals>.powr))r   é   )iˆ  i¸  r   r   é   éÿÿÿÿé   éûÿÿÿiúÿÿÿr   N)r   r   r
   r   r   Zround_ceilingZround_floorr	   )r$   ZinprecZoutprecZpos10001Zpos09999Zneg10001Zneg09999r#   r   r   r   Útest_pow_epsilon_rounding#   sš     r*   )ZmpmathZmpmath.libmpr   r   r    r*   r   r   r   r   Ú<module>   s
   