U
    —9%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   úV/var/www/html/Darija-Ai-API/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
   