
    gU                        d Z ddlZddlmZ ddlmZ ddlmZmZmZmZm	Z	m
Z
 ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 ddl9m:Z: e
d	k    rd
Z;ndZ;dZ<e
d	k    rdZ=ndZ=dZ>i Z?dZ@i ZAdZBdZCi ZDdZEdZFdZGi ZHddgZI ed eeB          dz             D ]!ZJeI eKdeJz  eB          dz   gdeJdz
  z  z  z  ZI"d ZLd ZMd ZNd ZOdXdZPeLd             ZQeLd             ZR	  ed          ZS ed           ZT ed!          ZU ed"          ZVd# ZWeLdYd$            ZXd% ZYd& ZZeLd'             Z[eLd(             Z\ eMe\          Z] eMeX          Z^ eMe[          Z_ eMeY          Z` eMeQ          Za eMeR          ZbeLd)             ZceLd*             Zd eMed          Ze eMec          Zfefd+Zgd, Zhd- Ziefd.Zjefd/ZkdZd0Zld1 Zmd2 Znd[d3Zod4 Zpefd5Zqd6 Zrd7 Zsd8 Ztd9 Zud: Zvefd;Zwefd<Zxefd=Zyefd>Zzefd?Z{efd@Z|efdAZ}efdBZ~d[dCZdD ZdE ZdF ZefdGZedfdHZdI ZeddfdJZefdKZefdLZefdMZefdNZefdOZefdPZefdQZefdRZefdSZdZdTZdZdUZe
dVk    rg	 ddlmc mc mZ ej4        Z4ej        Zejq        Zqej        Zej        Zejg        Zgej        Zej        Zejl        ZldS # eef$ r  edW           Y dS w xY wdS )\a(  
This module implements computation of elementary transcendental
functions (powers, logarithms, trigonometric and hyperbolic
functions, inverse trigonometric and hyperbolic) for real
floating-point numbers.

For complex and interval implementations of the same functions,
see libmpc and libmpi.

    N)bisect   )xrange)MPZMPZ_ZEROMPZ_ONEMPZ_TWOMPZ_FIVEBACKEND)-round_floorround_ceiling
round_downround_upround_nearest
round_fastComplexResultbitcountbctablelshiftrshiftgiant_steps
sqrt_fixedfrom_intto_intfrom_man_expto_fixedto_float
from_floatfrom_rational	normalizefzerofonefnonefhalffinffninffnanmpf_cmpmpf_signmpf_absmpf_posmpf_negmpf_addmpf_submpf_mulmpf_div	mpf_shiftmpf_rdiv_intmpf_pow_intmpf_sqrtreciprocal_rndnegative_rndmpf_perturb
isqrt_fast)ifibpythonX  i  i        i  i	  	      i           c                 ^     d _         d _         fd} j        |_         j        |_        |S )z
    Decorator for caching computed values of mathematical
    constants. This decorator should be applied to a
    function taking a single argument prec as input and
    returning a fixed-point value with the given precision.
    Nc                     j         }| |k    rj        || z
  z	  S t          | dz  dz             } |fi |_        |_         j        || z
  z	  S )Ng?
   )	memo_precmemo_valint)preckwargsrG   newprecfs       R/var/www/html/ai-engine/env/lib/python3.11/site-packages/mpmath/libmp/libelefun.pygzconstant_memo.<locals>.g^   sl    K	9:)D.11d4il##Qw))&))
zgdl++    )rG   rH   __name____doc__)rM   rO   s   ` rN   constant_memorS   U   sE     AKAJ, , , , , AJ	AIHrP   c                 8     t           f fd	} j        |_        |S )z
    Create a function that computes the mpf value for a mathematical
    constant, given a function that computes the fixed-point value.

    Assumptions: the constant is positive and has magnitude ~= 1;
    the fixed-point function rounds to floor.
    c                     | dz   } |          }|t           t          fv r|dz  }t          d|| t          |          | |          S )Nr?   r   r   )r   r   r    r   )rJ   rndwpvfixeds       rN   rM   zdef_mpf_constant.<locals>.fr   sR    BYE"II8]+++FAAsHQKKs;;;rP   )r   rR   )rY   rM   s   ` rN   def_mpf_constantrZ   j   s6      < < < < < < AIHrP   c                    ||z
  dk    r=t          d|z  dz             }|s|dz  rt          || dz  z  |fS t           || dz  z  |fS ||z   dz  }t          | |||          \  }}}t          | |||          \  }	}
}|
|z  ||	z  z   ||
z  ||z  fS )Nr   rB      )r   r   bsp_acot)qab
hyperbolica1mp1q1r1p2q2r2s               rN   r]   r]   {   s    1uzz1q\\ 	+1 	+BAIr))8R!Q$Y**	
1qA!Q:..JBB!Q:..JBBb52b5="R%B&&rP   c                     t          d|z  t          j        |           z  dz             }t          | d||          \  }}}||z   |z  || z  z  S )z
    Compute acot(a) or acoth(a) for an integer a with binary splitting; see
    http://numbers.computation.free.fr/Constants/Algorithms/splitting.html
    ffffff?r?   r   )rI   mathlogr]   )r_   rJ   ra   Npr^   rs          rN   
acot_fixedrq      sW    
 	D4K#b())Aq!Az**GAq!qS4K1Q3rP   Fc                     d}t           }| D ]9\  }}|t          |          t          t          |          ||z   |          z  z  }:||z	  S )z
    Evaluate a Machin-like formula, i.e., a linear combination of
    acot(n) or acoth(n) for specific integer values of n, using fixed-
    point arithmetic. The input should be a list [(c, n), ...], giving
    c*acot[h](n) + ...
    rF   )r   r   rq   )coefsrJ   ra   	extraprecsr_   r`   s          rN   machinrv      sZ     IA E E1	SVVjQiDDDDNrP   c                 (    t          g d| d          S )zz
    Computes ln(2). This is done with a hyperbolic Machin-type formula,
    with binary splitting at high precision.
    ))      )i  )r=   i-"  Trv   rJ   s    rN   	ln2_fixedr}      s     333T4@@@rP   c                 (    t          g d| d          S )zN
    Computes ln(10). This is done with a hyperbolic Machin-type formula.
    )).      )"   1   )r?      Tr{   r|   s    rN   
ln10_fixedr      s    
 1114>>>rP   iqc i-~ i@	    c                    || z
  dk    rVt          d|z  dz
  d|z  dz
  z  d|z  dz
  z            }|dz  t          dz  z  dz  }d|z  |z  t          t          |z  z   z  }nh|r|dk     rt	          d	| |           | |z   dz  }t          | ||dz   |          \  }}	}
t          |||dz   |          \  }}}|	|z  }||z  }|
|z  ||z  z   }|||fS )
z
    Computes the sum from a to b of the series in the Chudnovsky
    formula. Returns g, p, q where p/q is the sum as an exact
    fraction and g is a temporary value used to save work
    for recursive calls.
    r         rB   r\      rD      z  binary splitting)r   CHUD_CCHUD_ACHUD_Bprintbs_chudnovsky)r_   r`   levelverboserO   ro   r^   midg1rd   re   g2rg   rh   s                 rN   r   r      s
    	saxx1Q1Q1Q'((qD619"!GaK6&(?+ 	.uqyy&1---sQh"1c57G<<
B"357G<<
BrErErEBrEMa7NrP   c                     t          | dz  dz  dz             }|rt          d|           t          d|d|          \  }}}t          t          d| z  z            }|t          z  |z  |t
          |z  z   t          z  z  }|S )z
    Compute floor(pi * 2**prec) as a big integer.

    This is done using Chudnovsky's series (see comments in
    libelefun.py for details).
    gv	O
@g bi ],@rB   zbinary splitting with N =r   )rI   r   r   r8   r   r   CHUD_D)	rJ   r   verbose_basern   rO   ro   r^   sqrtCrX   s	            rN   pi_fixedr      s     	Dl*Q.//A .)1---Aq!W--GAq!v$'((E	&!F1H*f,-AHrP   c                 &    t          |           dz  S )N   )r   r|   s    rN   degree_fixedr      s    D>>3rP   c                     || z
  dk    rt           t          |          fS | |z   dz  }t          | |          \  }}t          ||          \  }}||z  |z   ||z  fS )ze
    Sum series for exp(1)-1 between a, b, returning the result
    as an exact fraction (p, q).
    r   rB   )r   r   bspe)r_   r`   rc   rd   re   rg   rh   s          rN   r   r      sf    
 	saxxA	
1qA!QZZFB!QZZFBb58RU?rP   c                     t          d| z  t          j        |           z  dz             }t          d|          \  }}||z   | z  |z  S )z
    Computes exp(1). This is done using the ordinary Taylor series for
    exp, with binary splitting. For a description of the algorithm,
    see:

        http://numbers.computation.free.fr/Constants/
            Algorithms/splitting.html
    g?r?   r   )rI   rl   rm   r   )rJ   rn   ro   r^   s       rN   e_fixedr   	  sK     	CHTXd^^#b())A!99DAqqS4K!rP   c                 `    | dz  } t          t          d| z  z            t          | z  z   }|dz	  S )z2
    Computes the golden ratio, (1+sqrt(5))/2
    rF   rB      )r8   r
   r   )rJ   r_   s     rN   	phi_fixedr     s5    
 	BJD8af%&&'T/:A7NrP   c           	          | dz   }t          t          t          t          |          d          |          | dz
            S )NrF   r   )r   mpf_logr1   mpf_pi)rJ   rW   s     rN   ln_sqrt2pi_fixedr   *  s9    	BGIfRjj!44b9946BBBrP   c                 <    t          t          |           |           S N)r   r   r|   s    rN   sqrtpi_fixedr   0  s    htnnd+++rP   c           	      F   | \  }}}}|\  }}	}
}|r|
dk     rt          d          |
dk    rt          | d|z  |	|
z  z  ||          S |
dk    r|	dk    rG|r4t          t          t	          | |dz   t
          |                   ||          S t	          | ||          S |r0t          t	          | |dz   t
          |                   |	 ||          S t          t	          | |dz   |          |	||          S t          | |dz   |          }t          t          ||          ||          S )zV
    Compute s**t. Raises ComplexResult if s is negative and t is
    fractional.
    r   z,negative number raised to a fractional powerrD   r   rF   )	r   r3   r0   r"   r4   r5   r   mpf_expr/   )ru   trJ   rV   ssignsmansexpsbctsigntmantexptbccs                rN   mpf_powr   >  s_   
 E4sE4s LJKKKqyy1rEkT4Z8$DDDrzz199 5tXab"3'&) &)*.5 5 5AtS))) <"8AtBw"3'$) $)+/%s< < <x47C88$cJJJ 	47C  A71a==$,,,rP   c                    |dk    r| | z  dfS t          |           }d}d|dt          |          z  z   dz   z  }t          \  }}}}		 |dz  rR|| z  }||z   }|	|dz
  z  }	|	t          t          ||	z	                     z   }	|	|k    r||	|z
  z	  }||	|z
  z  }|}	|dz  }|snP| | z  } ||z   }||z   dz
  }|t          t          | |z	                     z   }||k    r| ||z
  z	  } |||z
  z  }|}|dz  }||fS )zn-th power of a fixed point number with precision prec

       Returns the power in the form man, exp,
       man * 2**exp ~= y**n
    rB   r   r   r   )r   r"   r   rI   )
ynrJ   bcexpworkprec_pmpepbcs
             rN   int_pow_fixedr   Z  sW    	Avv!ax	!B
CD1Xa[[=(1,-HNAr2sq5 	ABCB26MCB#I//CX~~CL)cHn$FA aC#g"Wq['#a2g,,''==bk"A2= CBF+, r6MrP   c                 \   d}	 t          | |||z  z
            }t          t          |d|z  z                      }n`# t          $ rS t	          ||          }t	          |          }t          d||          }t          |||          }t          |          }Y nw xY wd}|}	|}
t          |||z             D ]u}t          ||dz
  |
          \  }}t          ||dz
  |
z  |z
  |z
  |	z
            }t          | d|z  |z
  |	z             |z  }||dz
  t          |||
z
            z  z   |z  }|}
v|S )N2   g      ?r   rF   rB   )r   r   rI   OverflowErrorr   r2   r   r   r   r   r   )r   r   rJ   exp1starty1rp   fnextraextra1prevpro   r   r   ri   Bs                   rN   nthroot_fixedr     sf   EAtag~&&BQK  !!   b%  a[[!R''BE""1II EFEU
++  q!A#u--BB1ea",v5661ac$hvo&&*!A#1U7++++a/Hs   8= ABBc                    | \  }}}}|rt          d          |s[| t          k    rt          S | t          k    r!|dk    rt          S |dk    rt          S t          S |st          S |dk     rt          S t          S d}|dk     rZ|dk    rt          S |dk    rt          | ||          S |dk    rt          t          | ||          S t          |         }d}d}	||	z  }| }|d	k    r|d
k    s|t          dd|dz  z  z             k     r|dz   }
t          |          }t          d||
          }t          | ||
|          }t          |d         |d         |d         |d         ||          } |rt          t          | ||	z
  |          S | S |d|z  z   ||z  z
  }
|dk    r|
|
dz  z  }
|
|
|z  z
  }
||
z
  }d}||z   }|dk     rd}| }|r	|||z  z  }n|||z  z  }t          ||          }d}||z   |dz
  |
z  z
  |z  |z
  }d}|r|dk    s|dk    rd}n|dk    s|dk    rd}t          ||z   ||
|          }t          ||||          } |rt          t          | ||	z
  |          S | S )zanth-root of a positive number

    Use the Newton method when faster, otherwise use x**(1/n)
    znth root of a negative numberr   FrB   r   rD   Tr   r?   i N     gL<@gףp=
?rF   r\   ur   drM   )r   r'   r!   r"   r%   r+   r0   r5   rI   r   r2   r   r    r   r   r   )ru   r   rJ   rV   signmanr   r   flag_inverseextra_inverseprec2r   nthrp   shiftsign1esr   r   	rnd_shifts                       rN   mpf_nthrootr     s   
 D#sB =;<<< 99K::1uuAvvK 	Kq55LL1uu66K661dC(((774D#...S!B2vv1::C$D.,@(A(A!A!Ar	a[[1b%((AsE3''adAaD!A$!dC88 	4D$6<<<H1Q3J$q&!E 	2vvaJEE	UB	AvvS AA
e

CEY!U{"Q&%/DI #::I#::I
Iq%
6
6CS$c**A tQ] 2C888rP   c                 &    t          | d||          S )zcubic root of a positive numberr\   )r   )ru   rJ   rV   s      rN   mpf_cbrtr     s    q!T3'''rP   c                    | t           v rt           |          \  }}||k    r|||z
  z	  S |dz   }|t          k    r?|t          |          }t          |           }| ||z
  z  }t	          ||          ||z  z   }n.t          t          t          |           |dz             |          }| t          k     r||ft           | <   |||z
  z	  S )z`
    Fast computation of log(n), caching the value for small n,
    intended for zeta sums.
    rF   Nr   )	log_int_cacheLOG_TAYLOR_SHIFTr}   r   log_taylor_cachedr   r   r   MAX_LOG_INT_CACHE)	r   rJ   ln2valuevprecrW   rp   xrX   s	            rN   log_int_fixedr     s    
 	M$Q'uD==UT\**	B	;B--CQKK"Q$Ka$$qu,WXa[["Q$//44r7aD>rP   c                     d}	 | |z   dz	  }|dk    rt          | |z
            dk     r| S t          | |z            }|} |dz  }@)z^
    Fixed-point computation of agm(a,b), assuming
    a, b both close to unit magnitude.
    r   r   r   r=   )absr8   )r_   r`   rJ   ianews        rN   	agm_fixedr     s]    
 	
A!axq55S4[[1__HqsOO	QrP   c                 j   | | z  |z	  }|x}x}}|r||z  |z	  }||z  |z	  }||z  }||t           |z  z  }||z  |dz
  z	  }|t          | |z            z  |z	  }| x}x}}|r||z  |z	  }||z  |z	  }||z  }|t           |z  |dz  z   }||z  |z	  }t          |||          }t          |          |z  |z  S )a*  
    Fixed-point computation of -log(x) = log(1/x), suitable
    for large precision. It is required that 0 < x < 1. The
    algorithm used is the Sasaki-Kanada formula

        -log(x) = pi/agm(theta2(x)^2,theta3(x)^2). [1]

    For faster convergence in the theta functions, x should
    be chosen closer to 0.

    Guard bits must be added by the caller.

    HYPOTHESIS: if x = 2^(-n), n bits need to be added to
    account for the truncation to a fixed-point number,
    and this is the only significant cancellation error.

    The number of bits lost to roundoff is small and can be
    considered constant.

    [1] Richard P. Brent, "Fast Algorithms for High-Precision
        Computation of Elementary Functions (extended abstract)",
        http://wwwmaths.anu.edu.au/~brent/pd/RNC7-Brent.pdf

    rB   r   )r   r8   r   r   )r   rJ   x2ru   r_   r`   r   ro   s           rN   log_agmr   )  s   2 A#$BNANA
 rTdNqSTM	Q   '4-A	
1QA	
:ag	%AMAMA
 rTdNqSTM	Q   
$1a4 A	
1tA!QATNNd"q((rP   c                 R   t          |          D ]}t          | |z            } t          |z  }| |z
  |z  | |z   z  }|dk     }|r| }||z  |z	  }||z  |z	  }|}	|dz  }
||z  |z	  }d}|r$|	||z  z  }	|dz  }|
||z  z  }
||z  |z	  }|dz  }|$|
|z  |z	  }
|	|
z   d|z   z  }|r| S |S )a:  
    Fixed-point calculation of log(x). It is assumed that x is close
    enough to 1 for the Taylor series to converge quickly. Convergence
    can be improved by specifying r > 0 to compute
    log(x^(1/2^r))*2^r, at the cost of performing r square roots.

    The caller must provide sufficient guard bits.
    r   r\   r   rB   r   )r   r8   r   )r   rJ   rp   r   onerX   r   v2v4s0s1kru   s                rN   
log_taylorr   X  s    AYY    q$w
T/C
C%$!C% Aq5D B
A#$B
R%DB	
B	
AB	
2$A	A
 
a1f	Q
a1frTdN	Q   R%DB	BAaCA r	HrP   c                    | |t           z
  z	  }t          |         }||z
  }||ft          v rt          ||f         \  }}n,||t           z
  z  }t          ||d          }||ft          ||f<   ||z  }||z  }| |z
  |z  |z  }||z  t          |z  |z   z  }||z  |z	  }	|	|	z  |z	  }
|}|dz  }||
z  |z	  }d}|r$|||z  z  }|dz  }|||z  z  }||
z  |z	  }|dz  }|$||	z  |z	  }||z   dz  }||z   S )zd
    Fixed-point computation of log(x), assuming x in (0.5, 2)
    and prec <= LOG_TAYLOR_PREC.
    r=   r\   r   rB   r   )r   cache_prec_stepslog_taylor_cacher   r	   )r   rJ   r   cached_precdprecr_   log_ar   rX   r   r   r   r   r   ru   s                  rN   r   r   z  sg   
 	
d##$A"4(K$E	;+++#A{N355+ 0011k1--,-u:K(%KA	eOE
a%DQA	
dDA-.A
A#$B
R%DB	
B	
AB	
2$A	A
 
ad
	Q
ad
rTdN	Q   R%DB	B1A19rP   c                    | \  }}}}|s6| t           k    rt          S | t          k    rt          S | t          k    rt          S |rt	          d          |dz   }|dk    r,|st           S t          |t          |          z  | ||          S ||z   }t          |          }	|	dk    rmd|	z
  }
|
rt          |z  |z
  }n|t          |dz
  z  z
  }t          |          }||z
  }||k    r)t          |
||	|z
  ||d          }t          ||
||          S ||z  }|	dk    r6t          |	          |k    r#t          |t          |          z  | ||          S |t          k    r9t          t          |||z
            |          }|r||t          |          z  z  }nZ| t          z  }||z
  }t!          | |          } || z  }t#          t%          | |          |           }||t          |          z  z  }t          || ||          S )zj
    Compute the natural logarithm of the mpf value x. If x is negative,
    ComplexResult is raised.
    zlogarithm of a negative numberr?   r   r   i'  )r!   r&   r%   r'   r   r   r}   r   r   r   r    r7   LOG_TAYLOR_PRECr   r   LOG_AGM_MAG_PREC_RATIOr1   r   r   )r   rJ   rV   r   r   r   r   rW   magabs_magr   r   r   cancellationr   rc   optimal_magr   s                     rN   r   r     sA   
 D#sB  "::e|99Tk99Tk ><===	B axx 	LC	"-sD#>>>
b&C#hhG !||'	 	+RK3&DD'BqD/*DtnnCx"%wrz3SAAAq%s333,B Gr!!IbMM 1B3cBBB 
_fS"R%00"55 	#Yr]]""Ac11#aOO
|Xa__b)))	Qy}}_B3c***rP   c           
         |d         s|| }} | d         s|d         s5| |cxk    rt           k    r
n nt          S t          | |fv rt          S t          S | t           k    rt	          t          |          ||          S | t          k    rt          S t          S t          | |           }t          ||          }d}t          ||||z             }t          |t          d          }|d         |d         z   }	|t           k    s
|	| dz  k     r1t          ||||z   t          |d         |d                   z
            }t          t	          |||          d          S )z1
    Computes log(sqrt(a^2+b^2)) accurately.
    r   r?   rF   rB   r\   rD   )r!   r&   r'   r%   r   r*   r/   r-   r#   minr1   )
r_   r`   rJ   rV   a2b2r   h2	cancelledmag_cancelleds
             rN   mpf_log_hypotr    sV   
 Q4 !1Q4 t 	A1v~~K::71::tS11199K	1B	1BE	Re	$	$BE2&&IaL1-M E]eVQY66RT%ZBqE"Q%(8(8899WRs++R000rP   c                    |dk    r+t          j        t          | |dz
  z	            dz            }n't          j        t          |           d|z  z            }d}t          t          |dz            d|z
  z	            }d}t	          ||          D ]^}||z  }|||z
  z  }t          ||          \  }}||z  |z  }|t          | ||z
            z
  |z  t          |z  |dz  |z	  z   z  }	||	z
  }|}_t          |||z
            S )Nd   5   g      @Cg       @r   rB   )rl   atanrI   r   r   cos_sin_fixedr   r   )
r   rJ   rp   r   extra_prW   cossintanr_   s
             rN   atan_newtonr    s"   s{{Ic1tBw<))'122Ic!ffS$Y&''ECGE*++AG%&&  
g"U(O B''SbyS &DG$$$+'2+36B,1OPE!U4Z   rP   c                     dt          |dz
            z  dz   }||z
  }| |ft          v rt          | |f         \  }}n+| |t          z
  z  }t          ||          }||ft          | |f<   ||z	  ||z	  fS )Nr   r?   )r   atan_taylor_cacheATAN_TAYLOR_SHIFTr  )r   rJ   r   r   r_   atan_as         rN   atan_taylor_get_cachedr  "  s    
 $q&!!"b(EDLE	5z&&&%ah/	66%++,Q&&'(&k!U(#J&E/**rP   c                 B   | |t           z
  z	  }t          ||          \  }}| |z
  }||z  |dz  |z	  ||z  |z	  z   t          |z  z   z  x}}|dz  |z	  }||z  |z	  }	|dz  }
||	z  |z	  }d}|r$|||z  z  }|dz  }|
||z  z  }
||	z  |z	  }|dz  }|$|
|z  |z	  }
||
z
  }||z   S )NrB   r\   r   )r  r  r   )r   rJ   r   r_   r  r   r   rX   r   r   r   r   ru   s                rN   atan_taylorr  1  s   	
t%%	&A&q$//IAv	AA4iaddlqsd{;w$OPPB
Q$$,B
r'd	B	
AB	
RDA	A
 
a1f	Q
a1fV	Q   r'd	B
RAA:rP   c           	          | st          t          ||          d          S t          t          t          |t          |                   d                    S )NrD   )r1   r   r,   r6   )r   rJ   rV   s      rN   atan_infr!  E  sK     0c**B///9VD,s*;<<bAABBBrP   c                 z   | \  }}}}|sQ| t           k    rt           S | t          k    rt          d||          S | t          k    rt          d||          S t          S ||z   }||dz   k    rt          |||          S | |dz   k    rt          | d|z
  ||          S |dz   t          |          z   }|dk    rt          d| |          } d}	nd}	t          | |          }
|r|
 }
|t          k     rt          |
|          }nt          |
|          }|	rt          |          dz	  dz   |z
  }|r| }t          || ||          S )Nr   r   r?      rB   TF)r!   r%   r!  r&   r'   r7   r   r2   r   ATAN_TAYLOR_PRECr  r  r   r   )r   rJ   rV   r   r   r   r   r  rW   
reciprocalr   r_   s               rN   mpf_atanr&  J  su   D#sB ::e|99Xas333::hq$444
(C
T"W}}dC(((td2g~~1afdC000	SXX	B
axxAr""


BA B	22 &rllAoq A% BB3c***rP   c           	         |\  }}}}| \  }}	}
}|	s| t           k    r5|t          k    r*t          |          dk    rt           S t          ||          S | t          t
          fv rv|t          t
          fv rt          S | t          k    rt          t          ||          d          S t          t          t          |t          |                   d                    S t          S |r7t          t          t          |           ||t          |                             S |so|t          k    rt          S |t          k    rt           S |t
          k    rt          ||          S | t           k    rt           S t          t          ||          d          S t          t          | ||dz             |dz             }|r"t          t          |dz             |||          S t          |||          S )Nr   rD   r   )r!   r'   r)   r   r%   r&   r1   r,   r6   	mpf_atan2r&  r0   r-   r+   )r   r   rJ   rV   xsignxmanxexpxbcysignymanyexpybctquos                rN   r(  r(  m  s   E4sE4s ::!t)){{a$$$$uT5M!!Dyy c!2!2B7779VD,s2C%D%DbIIJJJ JyQl36GHHIII 	099K99L::$$$$::Lc**B///GAq$q&))4622D (vd1f~~tT3777tT3'''rP   c           
      Z   | \  }}}}||z   dk    r| t           t          fvrt          d          |dz   }t          | |           }t	          t           t          t          t           ||          |          |          }	t          | |	|          }
t          t          |
||          d          S )Nr   z%asin(x) is real only for -1 <= x <= 1   r   )
r"   r#   r   r/   r-   r4   r.   r0   r1   r&  r   rJ   rV   r   r   r   r   rW   r_   r`   r   s              rN   mpf_asinr5    s    D#sB	#vzzae},,CDDD	B1AhwtQ33R88"==A1bAXas++Q///rP   c                    | \  }}}}||z   dk    r:| t           t          fvrt          d          | t          k    rt          ||          S |dz   }t	          | |           }t          t          t           ||          |          }	t          |	t          t           | |          |          }
t          t          |
||          d          S )Nr   z%acos(x) is real only for -1 <= x <= 1r3  r   )r"   r#   r   r   r/   r4   r.   r0   r-   r1   r&  r4  s              rN   mpf_acosr7    s    D#sB	Cx!||T5M!! GHHH::$$$$	B1Aq"%%r**A74B'',,AXas++Q///rP   c                    |dz   }| \  }}}}||z   }|dk     r"|| k     rt          | d|z
  ||          S || z  }t          t          t          | |           t          |          |          }	t          t          |           |	|          }	|r)t          t          |	|t          |                             S t          |	||          S )Nr?   r   )	r7   r4   r-   r/   r"   r*   r,   r   r6   )
r   rJ   rV   rW   r   r   r   r   r  r^   s
             rN   	mpf_asinhr:    s    	BD#sB
b&C
Rxx"99q!D&$444
t 	Ab11266A

Ar""A %wq$S(9::;;;q$$$$rP   c                     |dz   }t          | t                    dk    rt          d          t          t	          t          | |           t          |          |          }t          t	          | ||          ||          S )Nr3  rD   z acosh(x) is real only for x >= 1)r(   r"   r   r4   r-   r/   r#   r   )r   rJ   rV   rW   r^   s        rN   	mpf_acoshr<    sp    	Bq$2>???1ub11266A71a$$dC000rP   c           	         | \  }}}}|s#|r!| t           t          fv r| S t          d          ||z   }|dk    r/|dk    r|dk    rt          t          g|         S t          d          |dz   }|dk     r|| k     rt          | |||          S || z  }t          | t          |          }	t          t          | |          }
t          t          t          |	|
|          ||          d          S )Nz&atanh(x) is real only for -1 <= x <= 1r   r   r3  r9  rD   )r!   r'   r   r%   r&   r7   r-   r"   r.   r1   r   r0   )r   rJ   rV   r   r   r   r   r  rW   r_   r`   s              rN   	mpf_atanhr>    s   D#sB FS FHDEEE
s(C
Qww!88q%=&&DEEE	B
Rxx"99q$c222
t4AaAWWQ2..c::B???rP   c                    | \  }}}}|s| t           k    rt          S | S t          ||z             }|dk    rD|dk     s|t          |          k    r+t	          t          t          |                     ||          S ||z   dz   }t          |          }	t          t          |	d          t          |          }
t          |	| |          }t          | |          }t          |||          }t          |||          }t          ||
||          }|S )Nr   rF   r?   r   )r&   r'   r   r   r   r9   r   mpf_phir-   r1   r#   r   
mpf_cos_pir0   r.   )r   rJ   rV   r   r   r   r   sizerW   r_   r`   r   rX   s                rN   mpf_fibonaccirC    s   D#sB ::Ks2v;;D
axx"99..DOOT3777	r	BA	!Q++A1bA1bA1bA1bA1dC  AHrP   c                 (   | dk     r|  } d}nd}t          d|dz  z            }t          |           |z
  }t          d||z             }ddt          ||           z  z   }||z   }| ||z
  z  } t          |z  }|dk    }	|t          k     rp| | z  |z	  x}
}|
|
z  |z	  }t
          x}}d}|r4||dz
  |z  z  }||z  }|dz  }||dz
  |z  z  }||z  }|dz  }||z  |z	  }|4|
|z  |z	  }|	r
||z
  |z   }n||z   |z   }nt          d|dz  z            }| | z  |z	  x}
}||
g}t          d|          D ]#}|                    |d         |
z  |z	             $t
          g|z  }d}|rZt          |          D ]:}||dz
  |z  z  }|	r|dz  r||xx         |z  cc<   n||xx         |z  cc<   |dz  };||d         z  |z	  }|Zt          d|          D ]}||         ||         z  |z	  ||<   t          |          |z   }|dk    rDt          ||z  ||z  z
            }|r||z
  }n||z   }t          |          D ]
}||z  |z	  }||z	  S |dz
  }t          |          D ]}||z  |z	  |z
  }t          t          ||z  ||z  z
                      }|r| }||z	  ||z	  fS )	z
    Taylor series for cosh/sinh or cos/sin.

    type = 0 -- returns exp(x)  (slightly faster than cosh+sinh)
    type = 1 -- returns (cosh(x), sinh(x))
    type = 2 -- returns (cos(x), sin(x))
    r   r         ?rF   rB   g333333?rk   rD   )rI   r   maxr   EXP_SERIES_U_CUTOFFr   r   appendsumr8   r   )r   rJ   typer   rp   xmagr   rW   r   altr   r_   x4r   r   r   r   r   xpowersr   sumsru   rX   pshifts                           rN   exponential_seriesrQ    s    	1uuBCc	MAA;;DAtaxA3q$<<E	B519A
R-C19C!!!A#"Qe]R 	1Q3'MA272AFA1Q3'MA272AFA2"A  	 e] 	R#AAR#AAD$JA#"Q)1 	1 	1ANNGBKNR/0000zA~ 	&AYY  qsAg /1q5 /$q'''Q,''''"&q'''Q,'''Q72;2%A  	& 1 	1 	1AAwwqz)b0DGGIIOqyyqsc2g'' 	AAAAA 	 	A1AAEz
 A 	( 	(AA#&C'AAsCGqs?++,, 	A5AuH%%rP   c                 6   |t           k    rt          | |d          S t          |dz            }||z  }t          |z  x}}d}| | z  |z	  x}}|r(||z  }||z  }|dz  }||z  }||z  }|dz  }||z  |z	  }|(|| z  |z	  }||z   }|}	|r||z  |z	  }|dz  }|||	z	  S )z
    Compute exp(x) as a fixed-point number. Works for any x,
    but for speed should have |x| < 1. For an arbitrary number,
    use exp(x) = exp(x-m*log(2)) * 2^m where m = floor(x/log(2)).
    r   rE  rB   r   )EXP_COSH_CUTOFFrQ  rI   r   )
r   rJ   rp   r   r   r   r_   r   ru   r   s
             rN   exp_basecaserT  >  s     o!!T1---D#IAAID$B	Acd]A
 	aq!q&!	aq!q&!rTdN   Q$4B
RA	A
 qSTM	Q   6MrP   c                     |t           k    rt          | |d          \  }}||z   ||z
  fS t          | |          }t          ||z   z  |z  }||fS )z(
    Computation of exp(x), exp(-x)
    r   )rS  rQ  rT  r   )r   rJ   coshsinhr_   r`   s         rN   exp_expneg_basecaserX  W  sb     o'433
dDy$t)##QA	T$Y	A%Aa4KrP   c                 2   |t           k    rt          | |d          S |t          z
  }| |z	  }t          |          }|t          vrC|dt           z   t          z
  z  }t          |dt           z   d          \  }}|dz	  |dz	  ft          |<   t          |         \  }}t           |z
  }||z  }||z  }| ||z  z  } t
          |z  }	| }
d}| | z  |z	   }|r1||z  }|	|z  }	|dz  }|| z  |z	  }||z  }|
|z  }
|dz  }|| z  |z	   }|1|	|z  |
|z  z
  |z	  |
|z  |	|z  z   |z	  fS )z
    Compute cos(x), sin(x) as fixed-point numbers, assuming x
    in [0, pi/2). For an arbitrary number, use x' = x - m*(pi/2)
    where m = floor(x/(pi/2)) along with quarter-period symmetries.
    rB   rF   r   )COS_SIN_CACHE_PRECrQ  COS_SIN_CACHE_STEPrI   cos_sin_cacher   )r   rJ   precsr   r   wcos_tsin_toffsetr  r  r   r_   s                rN   cos_sin_basecaserb  b  s       !!T1---%%E	U
AAA%%&889)!R0B-BAFFu!2I3a #LE5$&F	fE	fEeOA
T/C
C	AQ34-A
 8	a161!}1	a161!A#$'71  8 Ys5y T)c%iE	.Ad-JKKrP   c                 ^   | \  }}}}|r||z   }|dz   }|r| }|dk    r=|dk    r7t          |t          d|z            z             }	t          |	||z  ||          S || k     rt          t          |||          S |dk    rS||z   }
||
z   }|dk    r||z  }n|| z	  }t          |
          }t          ||          \  }}t          |          }||z  }n||z   }|dk    r||z  }n|| z	  }d}t          ||          }t          |||z
  ||          S |st          S | t          k    rt          S | S )N   r;   r   g333333?r   )mpf_erI   r3   r7   r"   r}   divmodrT  r   r&   r!   )r   rJ   rV   r   r   r   r   r  rW   ewpmodra  r   lg2r   s                  rN   r   r     s   D#sB
 #23hBY 	$C#::#((bT#X&''Aq#s(D#666"99tT455577 HE5[F{{6MVG$E""C!S>>DAqAA#IAA2XF{{6MVG$A1b!!C2tS111 EzzHrP   c                    | \  }}}}|so|rm|r+| t           k    rt          S | t          k    rt          S t          S | t           k    rt           t           fS | t          k    rt           t          fS t          t          fS ||z   }|dz   }	|dk     rQ||	 k     rD|rt          | d|z
  ||          S t          t          d||          }
t          | |||          }|
|fS |	| z  }	|dk    r{dd|dz
  z  z  |	k    rl|r't          t          t          g|         d|z
  ||          S t          t          t          |           ||          d          x}}|rt          |          }||fS |dk    rS|	|z   }||z   }|dk    r||z  }n|| z	  }t          |          }t          ||          \  }}t          |          }||z  }n||	z   }|dk    r||z  }n|| z	  }d}t          ||	          \  }}||d|z  z	  z   }
||d|z  z	  z
  }|r| }|r||	z  |
z  }t          ||	 ||          S t          |
||	z
  dz
  ||          }
t          |||	z
  dz
  ||          }|
|fS )	z4Simultaneously compute (cosh(x), sinh(x)) for real xrd  r   r   rF   r\   rD   rB   )r%   r"   r&   r#   r'   r7   r1   r   r*   r,   r}   rf  rI   rX  r   )r   rJ   rV   tanhr   r   r   r   r  rW   rV  rW  r   ru   rh  ra  r   ri  r   r_   r`   s                        rN   mpf_cosh_sinhrm    s   D#sB S  	Dyy+Ezz%<K99dD\)::tUm+Tz
b&C	bB
Rxx"99 9"1afdC888tQc22Dq$c22D:
t
Rxxa#a%j>B J"D<#5qvtSIIIggajj$<<bAAAA AJJa4K
QwwSuQ;;vAA Aa~~1FF	c	rQ;;vAA Aq"%%DAqAaC>DAaC>D u rzd"C"dC000D!B$q&$44D!B$q&$44TzrP   c                 l   |dk    rd}	 d|z  }||z   |z   }t          |dz
            }|dz	  }||z   }	|	dk    r| |	z  }
n| |	 z	  }
t          |
|          \  }}||k    r||z
  }n|}|||z   dz
  z	  rt          |          }||z	  }
||z
  }n|dz  }n|| z  }||z   }	|	dk    r| |	z  }
n| |	 z	  }
d}|
||fS )Nr   r   r?   rF   )r   rf  rI   )r   r   r  rW   r   cancellation_precrh  pi2pi4ra  r   r   r   smalls                 rN   mod_pi2rs    s)   
Qww	 "aH00E57##C(CS[F{{6MVG$!S>>DAq3wwaC# FFHS[FA)	&  	trQ;;vAA Aa8OrP   c                 L   | \  }}}}|sA|rt           t           }
}	nt          t          }
}	|dk    r|	|
fS |dk    r|	S |dk    r|
S |dk    r|
S ||z   }|dz   }|dk     r|| k     r}|rt          | t	          |                    } t          t          d||          }	t          | d|z
  ||          }
|dk    r|	|
fS |dk    r|	S |dk    r|
S |dk    rt          | |||          S |r|dk    r|dk    r/t          }	t          t          ft          |dz            |z           }
n#|dk    rt          t          }
}	nt          t          }
}	|dk    r|	|
fS |dk    r|	S |dk    r|
S |dk    rt          |
|	||          S || dz
  z	  dz   dz	  }||| dz
  z  z
  }t          |          |z   }|dz   |z
  }||z   }|dk    r||z  }n|| z	  }|t          |          z  |z	  }nt          ||||          \  }}}t          ||          \  }	}
|dz  }|dk    r|
 |	}
}	n|dk    r|	 |
 }
}	n|dk    r|
|	 }
}	|r|
 }
|dk    r*t          |	| ||          }	t          |
| ||          }
|	|
fS |dk    rt          |	| ||          S |dk    rt          |
| ||          S |dk    rt          |
|	||          S dS )z
    which:
    0 -- return cos(x), sin(x)
    1 -- return cos(x)
    2 -- return sin(x)
    3 -- return tan(x)

    if pi=True, compute for pi*x
    r   r   rB   r\   rF   rD   N)r'   r"   r!   r/   r   r7   r#   boolr0   r   r   rs  rb  r   r   )r   rJ   rV   whichpir   r   r   r   r   ru   r  rW   r   mag2ra  r   rc   s                     rN   mpf_cos_sinry    sq    D#sB   	qAAqAA::ad{A::axA::axA::ax
s(C	B Qww"99 +Avbzz**D!T3//AAqvtS11Azz!Q$;zz!8zz!8zz+atS"A"AA	 ."99byy5M$sQw--$"67u1e1zz!Q$;zz!8zz!8zz'!Qc":"::sd1fo"q(QC46]#}}s"BYrQ;;vAA Ax||^"3S"--1bAr""DAq	AA	
aAA	
aQBA	
aA2A BzzRCs++RCs++!tzzAsD#...zzAsD#...zzQ4--- zrP   c                 &    t          | ||d          S Nr   ry  r   rJ   rV   s      rN   mpf_cosr~  b      [D#q-I-I&IrP   c                 &    t          | ||d          S )NrB   r|  r}  s      rN   mpf_sinr  c  r  rP   c                 &    t          | ||d          S )Nr\   r|  r}  s      rN   mpf_tanr  d  r  rP   c                 (    t          | ||dd          S )Nr   r   r|  r}  s      rN   mpf_cos_sin_pir  e  s    K4aQR4S4S-SrP   c                 (    t          | ||dd          S r{  r|  r}  s      rN   rA  rA  f      AtS!Q0O0O)OrP   c                 (    t          | ||dd          S )NrB   r   r|  r}  s      rN   
mpf_sin_pir  g  r  rP   c                 0    t          | ||          d         S Nr   rm  r}  s      rN   mpf_coshr  h      mAtS.I.I!.L'LrP   c                 0    t          | ||          d         S r{  r  r}  s      rN   mpf_sinhr  i  r  rP   c                 (    t          | ||d          S )Nr   )rl  r  r}  s      rN   mpf_tanhr  j  s    mAtSq.Q.Q.Q'QrP   c                     |t          |dz
            }t          | |          \  }}t          |          }t          ||          \  }}|dz  }|dk    r||fS |dk    r| |fS |dk    r| | fS |dk    r|| fS d S )Nr   r\   r   rB   )r   rf  rI   rb  )r   rJ   rp  r   r   r   ru   rc   s           rN   r  r  o  s    
{tAv!S>>DAqAAAt$$DAq	AAAvvad{Avvqb!e|Avvqb1"f}Avva!e|vvrP   c                     |t          |          }t          | |          \  }}t          |          }t          ||          }|dk    r||z  S || z	  S r  )r}   rf  rI   rT  )r   rJ   r   r   r   rX   s         rN   	exp_fixedr  {  s[    
{oo!S>>DAqAAQAAvvAvaRyrP   sagez)Warning: Sage imports in libelefun failed)F)FNr   )r   )rR   rl   r   backendr   r   r   r   r	   r
   r   libmpfr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   
libintmathr9   rS  rG  rZ  r[  r\  r   r   r  r   r   r  r$  r  r  r   r   r  rS   rZ   r]   rq   rv   r}   r   r   r   r   r   r   r   r   r   r   r   r@  r   re  
mpf_degreempf_ln2mpf_ln10r   r   
mpf_sqrtpimpf_ln_sqrt2pir   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r!  r&  r(  r5  r7  r:  r<  r>  rC  rQ  rT  rX  rb  r   rm  rs  ry  r~  r  r  r  rA  r  r  r  r  r  r  sage.libs.mpmath.ext_libmplibsmpmath	ext_libmp_lbmpImportErrorAttributeErrorr    rP   rN   <module>r     si	  	 	              G G G G G G G G G G G G G G G G                                                                                                    hOOO  h          r7 	88O,,Q.	/	/ B BAQT/22256QqSAA  *  "
' 
' 
'          A A A ? ? ?8 
X	Y	V	R  ,       
 
 
       i((h''g&&l++
i((j)) C C C
 , , ,  --
##$455 ' - - - -8" " "l  , !+ Q Q Q Qf % ( ( ( (   ,  -) -) -)^       D     D $ F+ F+ F+ F+P%1 %1 %1X! ! !$+ + +  (C C C
 %  +  +  +  +F ) !( !( !( !(F % 	0 	0 	0 	0 % 0 0 0 0 & % % % %" & 1 1 1 1 & @ @ @ @*  *    8I& I& I& I&V  2	 	 	L L L: $ * * * *Z  * @ @ @ @F! ! !H (qU M. M. M. M.^ $ I I I I# I I I I# I I I I * S S S S& O O O O& O O O O$ L L L L$ L L L L$ Q Q Q Q

 
 
 
	 	 	 	 f;222222222222>-----O	++( ; ; ;9::::::; s   AK, ,LL