a
    gŗhk  ć                   @   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   śE/var/www/auris/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
   