U
    Ē-ek  ć                   @   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ttdd dks.ttdd d	ksBttdd
 dksVttdd  d”slttdd  d”sttdd  d”sttdd
  d”s®ttdd  d”sÄttdd  d”sŚt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ŚmpfŚAssertionErrorZae© r   r   śX/var/www/html/Darija-Ai-Train/env/lib/python3.8/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 sltttt|t|| t	|kst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_downr   Ś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szt| |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s4t| |d	|dksJt| |d	|dk s`t| |d
|dksvt| |d
|dkst| |d
|dks¢t| |d
|dksø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sVt| |d|dk slt| |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t}| |d|dks6t| |d|dksLt| |d|dksbt| |d|dksxt| |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s>t| |d
|dksTt| |d
|dksjt| |d
|dks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 s4t| |d	|dk sJt| |d	|dks`t| |d	|dksvt| |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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   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
   