
    [hh                        S r SSKrSSKJrJrJrJrJr  SSKJ	r	J
r
JrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2J3r3J4r4J5r5J6r6J7r7J8r8J9r9  SSK:J;r;J<r<J=r=J>r>J?r?J@r@JArAJBrBJCrCJDrDJErEJFrFJGrGJHrHJIrIJJrJJKrKJLrLJMrMJNrNJOrOJPrPJQrQJRrR  \ \4rS\\4rT\!\4rU\"\4rV\#\$4rW\#\$\%4rXS rYS rZS	 r[S
\4S jr\S r]\4S jr^S r_\4S jr`\4S jraS\4S jrbS\4S jrc\4S jrdS\4S jreS rf\4S jrg\4S jrh\4S jri\4S jrj\4S jrk\4S jrl\4S jrm\4S jrn\4S jro\4S jrp\4S  jrq\4S! jrr\4S" jrs\4S# jrt\4S$ jruS% rv\4S& jrw\4S' jrx\4S( jry\4S) jrzS* r{\4S+ jr|\4S, jr}\4S- jr~\4S. jr\4S/ jr\4S0 jr\4S1 jr\4S2 jr\4S3 jr\4S4 jr\4S5 jr\4S6 jr\4S7 jr\4S8 jr\4S9 jr\" S:5      r\" S;5      rS< r\4S= jr\4S> jr\4S? jr\4S@ jr\4SA jr\4SB jrSISC jrSISD jrSISE jrSISF jr\SG:X  a&   SSKJs  Js  Jr  \R                  r~\R                  rzgg! \\4 a    \" SH5         gf = f)Jz-
Low-level functions for complex arithmetic.
    N   )MPZMPZ_ZEROMPZ_ONEMPZ_TWOBACKEND)1round_floorround_ceiling
round_downround_upround_nearest
round_fastbitcountbctable	normalize
normalize1reciprocal_rndrshiftlshiftgiant_stepsnegative_rndto_strto_fixedfrom_man_exp
from_floatto_floatfrom_intto_intfzerofoneftwofhalffinffninffnanfnonempf_absmpf_posmpf_negmpf_addmpf_submpf_mulmpf_divmpf_mul_int	mpf_shiftmpf_sqrt	mpf_hypotmpf_rdiv_int	mpf_floormpf_ceilmpf_nintmpf_fracmpf_signmpf_hashComplexResult)mpf_pimpf_expmpf_logmpf_cos_sinmpf_cosh_sinhmpf_tanmpf_pow_intmpf_log_hypotmpf_cos_sin_pimpf_phimpf_cosmpf_sin
mpf_cos_pi
mpf_sin_pimpf_atan	mpf_atan2mpf_coshmpf_sinhmpf_tanhmpf_asinmpf_acos	mpf_acoshmpf_nthrootmpf_fibonaccic                 8    U u  pU[         ;   a  gU[         ;   a  gg)z2Check if either real or imaginary part is infiniteTF)_infszreims      K/var/www/auris/envauris/lib/python3.13/site-packages/mpmath/libmp/libmpc.py
mpc_is_infrY   )   s    FB	U{4	U{4    c                 8    U u  pU[         ;   a  gU[         ;   a  gg)z9Check if either real or imaginary part is infinite or nanTF)	_infs_nanrT   s      rX   mpc_is_infnanr]   0   s    FB	Yt	YtrZ   c                     U u  p4[        X15      nUS   (       a  US-   [        [        U5      U40 UD6-   S-   $ US-   [        XA40 UD6-   S-   $ )Nr   z - jz + )r   r)   )rU   dpskwargsrV   rW   rss         rX   
mpc_to_strrc   7   s[    FB	B	!uEzF72;>v>>DDEzF25f55;;rZ   Fc                 J    U u  p4[        [        X1U5      [        XAU5      5      $ N)complexr   )rU   strictrndrV   rW   s        rX   mpc_to_complexri   ?   s$    FB8B,hr3.GHHrZ   c                 J   [         R                  S:  aa  U u  p[        U5      [         R                  R                  [        U5      -  -   nUS[         R                  R
                  -  -  n[        U5      $  [        [        U SS95      $ ! [         a    [        U 5      s $ f = f)N)      rl   T)rg   )
sysversion_infor8   	hash_infoimagwidthinthashri   OverflowError)rU   rV   rW   hs       rX   mpc_hashrv   C   s    
6!RL3==--<<CMM'''(1v	q677 	7N	s   7B
 
B"!B"c                 &    U u  p4U[        XAU5      4$ re   r)   rU   precrh   rV   rW   s        rX   mpc_conjugater{   P   s    FBwr%%%rZ   c                     U [         :g  $ re   )mpc_zero)rU   s    rX   mpc_is_nonzeror~   T   s    =rZ   c                 B    U u  pEUu  pg[        XFX#5      [        XWX#5      4$ re   r*   rU   wrz   rh   abcds           rX   mpc_addr   W   )    DADA1#WQ4%===rZ   c                 &    U u  pE[        XAX#5      U4$ re   r   )rU   xrz   rh   r   r   s         rX   mpc_add_mpfr   \       DA1#Q&&rZ   c                 B    U u  pEUu  pg[        XFX#5      [        XWX#5      4$ re   r+   r   s           rX   mpc_subr   `   r   rZ   c                 &    U u  pE[        XAX#5      U4$ re   r   )rU   prz   rh   r   r   s         rX   mpc_sub_mpfr   e   r   rZ   c                 :    U u  p4[        X1U5      [        XAU5      4$ re   )r(   rU   rz   rh   r   r   s        rX   mpc_posr   i   "    DA1C '!3"777rZ   c                 :    U u  p4[        X1U5      [        XAU5      4$ re   rx   r   s        rX   mpc_negr   m   r   rZ   c                 6    U u  p#[        X!5      [        X15      4$ re   )r/   )rU   nr   r   s       rX   	mpc_shiftr   q   s    DAQ?IaO++rZ   c                 "    U u  p4[        X4X5      $ )zAAbsolute value of a complex number, |a+bi|.
Returns an mpf value.)r1   r   s        rX   mpc_absr   u   s     DAQ4%%rZ   c                 "    U u  p4[        XCX5      $ )z3Argument of a complex number. Returns an mpf value.)rI   r   s        rX   mpc_argr   {   s    DAQ4%%rZ   c                 :    U u  p4[        X1U5      [        XAU5      4$ re   )r3   r   s        rX   	mpc_floorr      s"    DAQc"Ias$;;;rZ   c                 :    U u  p4[        X1U5      [        XAU5      4$ re   )r4   r   s        rX   mpc_ceilr      "    DAAS!8AS#999rZ   c                 :    U u  p4[        X1U5      [        XAU5      4$ re   )r5   r   s        rX   mpc_nintr      r   rZ   c                 :    U u  p4[        X1U5      [        XAU5      4$ re   )r6   r   s        rX   mpc_fracr      r   rZ   c                     U u  pEUu  pg[        XF5      n[        XW5      n	[        XG5      n
[        XV5      n[        XX#5      n[        XX#5      nX4$ )z
Complex multiplication.

Returns the real and imaginary part of (a+bi)*(c+di), rounded to
the specified precision. The rounding mode applies to the real and
imaginary parts separately.
)r,   r+   r*   )rU   r   rz   rh   r   r   r   r   r   qrsrV   rW   s                 rX   mpc_mulr      sU     DADAAAAA	t	!B	t	!B6MrZ   c                     U u  p4[        X35      n[        XD5      n[        X4X5      n[        XVX5      n[        US5      n	X4$ Nr   )r,   r+   r/   )
rU   rz   rh   r   r   r   r   r   rV   rW   s
             rX   
mpc_squarer      sE    DAAATA	t	!B	1aB6MrZ   c                 @    U u  pE[        XAX#5      n[        XQX#5      nXg4$ re   )r,   rU   r   rz   rh   r   r   rV   rW   s           rX   mpc_mul_mpfr      s(    DA	t	!B	t	!B6MrZ   c                 R    U u  pE[        [        XQX#5      5      n[        XAX#5      nXg4$ )z:
Multiply the mpc value z by I*x where x is an mpf value.
)r)   r,   )rU   r   rz   rh   r   r   rV   rW   s           rX   mpc_mul_imag_mpfr      s/     DA	t)	*B	t	!B6MrZ   c                 @    U u  pE[        XAX#5      n[        XQX#5      nXg4$ re   )r.   )rU   r   rz   rh   r   r   rV   rW   s           rX   mpc_mul_intr      s(    DA	Q4	%B	Q4	%B6MrZ   c                    U u  pEUu  pgUS-   n[        [        Xf5      [        Xw5      U5      n	[        [        XF5      [        XW5      U5      n
[        [        XV5      [        XG5      U5      n[        XX#5      [        XX#5      4$ N
   )r*   r,   r+   r-   )rU   r   rz   rh   r   r   r   r   wpmagtus               rX   mpc_divr      st    DADA	B
'!-
3CgalB/AgalB/A1"GA$$;;;rZ   c                 @    U u  pE[        XAX#5      n[        XQX#5      nXg4$ )zCalculate z/p where p is real)r-   r   s           rX   mpc_div_mpfr      s(    DA	t	!B	t	!B6MrZ   c                     U u  p4[        [        X35      [        XD5      US-   5      n[        X5X5      n[        [        XEX5      5      nXg4$ )zCalculate 1/z efficientlyr   r*   r,   r-   r)   )rU   rz   rh   r   r   mrV   rW   s           rX   mpc_reciprocalr      sG    DAWQ\$r'2A	t	!B	t)	*B6MrZ   c                     Uu  pE[        [        XD5      [        XU5      US-   5      n[        [        X@5      XbU5      n[        [        [        XP5      5      XbU5      nXx4$ )z)Calculate p/z where p is real efficientlyr   r   )	r   rU   rz   rh   r   r   r   rV   rW   s	            rX   mpc_mpf_divr      sS    DAWQ\473A	q	,B	&	5B6MrZ   c                     SnSnU(       a>  US-  (       a  X0-  XA-  -
  X@-  X1-  -   pCUS-  nX -  X-  -
  SU -  U-  pUS-  nU(       a  M>  X44$ )zcComplex integer power: computes (a+b*I)**n exactly for
nonnegative n (a and b must be Python ints).r   r   rl    )r   r   r   wrewims        rX   complex_int_powr      sh     C
C
q5usu}cecemFAsQSy!A#a%1	a ! 8OrZ   c           	          US   [         :X  a  [        XS   X#5      $ [        [        [	        XS-   5      XS-   5      X#5      $ )Nr   r   r   )r   mpc_pow_mpfmpc_expr   mpc_log)rU   r   rz   rh   s       rX   mpc_powr      s?    tu}1dD..7712g.7;TGGrZ   c           	          Uu  pEpgUS:  a  [        U SU-  XV-  -  X#5      $ US:X  a!  [        XS-   5      n[        USU-  U-  X#5      $ [        [        [	        XS-   5      XS-   5      X#5      $ )Nr   r   )mpc_pow_intmpc_sqrtr   r   r   )	rU   r   rz   rh   psignpmanpexppbcsqrtzs	            rX   r   r      s{    Eqy1rEkTZ8$DDrzG$52+"4d@@;wqr'2ABw?KKrZ   c           	      P   U u  pEU[         :X  a  [        XAX#5      [         4$ U[         :X  a[  [        XQX#5      nUS-  nUS:X  a  U[         4$ US:X  a  [         U4$ US:X  a  [        U5      [         4$ US:X  a  [         [        U5      4$ US:X  a  [        $ US:X  a  [	        XU5      $ US:X  a  [        XU5      $ US:X  a  [        XU5      $ US:  a  [        [        X* US-   5      X#5      $ Uu  pxpUu  ppU(       a  U* nU(       a  U* nX-
  n[        U5      nUU[        X5      -   -  nUS:  aW  US:  a  X-  nUn	OX* -  nU	n[        XU5      u  nn[        U[        X-  5      X#5      n[        U[        X-  5      X#5      nUU4$ [        [        [        XS-   5      XS-   5      X#5      $ )	N   r   r   rl   rk   r   i'  r   )r   r@   r)   mpc_oner   r   r   r   absmaxr   r   rr   r   r   r   )rU   r   rz   rh   r   r   vasignamanaexpabcbsignbmanbexpbbcdeabs_de
exact_sizerV   rW   s                       rX   r   r      s   DAEz1+U22Ezd(	Q6e8O!V!8O!V1:u$$!V'!*$$Avg~Avgas++Avj#..Bw~as331u^K2tAv$>JJEEdUddUd	BWFFS]*+JE6KDDcNDD Q/B"c!&k45"c!&k452v;wqr'2ABw?KKrZ   c                 `   U u  p4U[         :X  aH  U[         :X  a  X44$ US   (       a  [        [        U5      X5      n[         U4$ [        X1U5      nU[         4$ US-   nUS   (       dU  [        [	        X44U5      X75      n[        US5      n	[        XU5      n[        US5      n
[        X5      n[        XKX5      nXe4$ [        [	        X44U5      X75      n[        US5      n	[        XU5      n[        US5      n
[        X5      n[        XKX5      nUS   (       a  [        U5      n[        U5      nXe4$ )zComplex square root (principal branch).

We have sqrt(a+bi) = sqrt((r+a)/2) + b/sqrt(2*(r+a))*i where
r = abs(a+bi), when a+bi is not a negative real number.r      r   r   )r   r0   r)   r*   r   r/   r-   r+   )rU   rz   rh   r   r   rW   rV   r   r   r   r   r   s               rX   r   r   '  s,   
 DAEz:6MQ4'!*d0B2;!3'B;	bBQ4WaVR(!0aas#aOa_Q4% 6M GQFB'/aas#aOa_Q4%Q4BB6MrZ   c                    Sn[        [        XX$-  -
  5      5      n[        [        XX$-  -
  5      5      n USU-  -   SU-  -  nUR                  nUR                  n	[	        [        U5      5      n[	        [        U	5      5      n	SnUnUn[        XCU-   5       H  n[        XUS-
  5      u  nn[        UUS-
  U-  U-
  U-
  5      n[        UUS-
  U-  U-
  U-
  5      nUU-  UU-  -   X-   -	  n[        XU-
  5      n[        XU-
  5      nUU-  UU-  -   U-	  nU* U-  UU-  -   U-	  nUU-  U-  nUU-  U-  nUUS-
  [        XU-
  5      -  -   U-  nUUS-
  [        XU-
  5      -  -   U-  n	UnM     X4$ ! [
         a]    [        XT5      n[        Xd5      n[        U5      n
[        SX5      n[        XV4U[        4U5      u  p[        U5      n[        U	5      n	 GNUf = f)N2   y              ?g      ?r   r   )rr   r   realrp   r   rt   r   r2   r   r   r   r   r   r   )r   r   r   rz   starta1b1r   rV   rW   fnnthextraprevpextra1r   re2im2r4apbprecimcrebimbs                            rX   mpc_nthroot_fixedr  K  s   E	VAag~&	'B	VAag~&	'B"r'\SU#VVVVR\R\ EEFU
+"21Q3/SS1Q3+/F23S1Q3+/F23#gCQZ0Aax Aax Cx"s("q(sSy28#)axBaxBQqS&uW---1QqS&uW---1 , 6M5  b b a[1b("C<7BZBZs   AE3 3A#GGc                 >   U u  pEUS   S:X  a  U[         :X  a  [        XAX#5      nU[         4$ US:  ab  US:X  a  [        $ US:X  a  [        XE4X#5      $ US:X  a  [	        [        XE4X#5      $ [        XE4U* US-   [        U   5      n[	        [        XrU5      $ US::  a  [        SUS-   -  5      nUu  ppUu  pnn[        XE4U5      nUS	   US   -   S
:  a\  US	   US   -   U:  aM  [        XH5      n[        XX5      n[        UUX5      u  nnSn[        Xh* U-
  X5      n[        UU* U-
  X5      nUU4$ [        U5      nUS-   S-   n[        SUU5      n[        XE4U[         4X5      u  nn[        US   US   US   US   X#5      n[        US   US   US   US   X#5      nUU4$ )ze
Complex n-th root.

Use Newton method as in the real case when it is faster,
otherwise use z**(1/n)
r   rl   r   r      r   g333333?r   irk   )r   rP   r   r   r   mpc_nthrootr   rr   r   r   r  r   r   r2   r   r   )rU   r   rz   rh   r   r   rV   inverseprec2r   r   r   r   r   r   r   r   pfafbfrW   r   r   r   s                           rX   r  r  r  s    DAtqyQ%Zt)E{1u6N6A64--77QFD66qfqb$q&.2EFws33BwC4"9%&!"T!"T3aUD!b6BrF?S bfr"vo&<!#B!#B&r2q8FBEb&,;Bb5&,;Br6M	!BGbLE
q"e
$CaVc5\56FB	2a5"Q%A1t	9B	2a5"Q%A1t	9Br6MrZ   c                     [        U SX5      $ )z
Complex cubic root.
rk   )r  rU   rz   rh   s      rX   mpc_cbrtr    s     q!T''rZ   c                     U u  p4U[         :X  a  [        XAU5      $ U[         :X  a  [        X1U5      [         4$ [        X1S-   U5      n[        XAS-   U5      u  pg[        XVX5      n[        XWX5      n	X4$ )aJ  
Complex exponential function.

We use the direct formula exp(a+bi) = exp(a) * (cos(b) + sin(b)*i)
for the computation. This formula is very nice because it is
pefectly stable; since we just do real multiplications, the only
numerical errors that can creep in are single-ulp rounding errors.

The formula is efficient since mpmath's real exp is quite fast and
since we can compute cos and sin simultaneously.

It is no problem if a and b are large; if the implementations of
exp/cos/sin are accurate and efficient for all real numbers, then
so is this function for all complex numbers.
r   )r   r=   r;   r,   )
rU   rz   rh   r   r   r   r   r   rV   rW   s
             rX   r   r     sy      DAEz1C((Ezq$e++
!!VS
!Cqq&#&DA		#B		#B6MrZ   c                 F    [        U S   U S   X5      n[        XU5      nX44$ )Nr   r   )rA   r   ry   s        rX   r   r     s+    	qtQqT4	-B	#	B6MrZ   c                    U u  p4U[         :X  a  [        X1U5      [         4$ U[         :X  a  [        XAU5      [         4$ US-   n[        X55      u  pg[	        XE5      u  p[        XhX5      n
[        XyX5      nU
[        U5      4$ )a?  Complex cosine. The formula used is cos(a+bi) = cos(a)*cosh(b) -
sin(a)*sinh(b)*i.

The same comments apply as for the complex exp: only real
multiplications are pewrormed, so no cancellation errors are
possible. The formula is also efficient since we can compute both
pairs (cos, sin) and (cosh, sinh) in single stwps.   )r   rD   rJ   r=   r>   r,   r)   rU   rz   rh   r   r   r   r   r   chshrV   rW   s               rX   mpc_cosr    s     DAEzq$e++Ez%u,,	BqDA1!FB		"B		"Bwr{?rZ   c                     U u  p4U[         :X  a  [        X1U5      [         4$ U[         :X  a  [         [        XAU5      4$ US-   n[        X55      u  pg[	        XE5      u  p[        XxX5      n
[        XiX5      nX4$ )z{Complex sine. We have sin(a+bi) = sin(a)*cosh(b) +
cos(a)*sinh(b)*i. See the docstring for mpc_cos for additional
comments.r  )r   rE   rK   r=   r>   r,   r  s               rX   mpc_sinr    s}     DAEzq$e++Ezhq,,,	BqDA1!FB		"B		"B6MrZ   c                 T   U u  p4Uu  pVpxUu  ppU[         :X  a  [        X1U5      [         4$ U[         :X  a  [         [        XAU5      4$ US-   n[        US5      n[        US5      n[	        X=5      u  p[        XM5      u  nn[        UUU5      n[        UUX5      n[        UUX5      nUU4$ )z_Complex tangent. Computed as tan(a+bi) = sin(2a)/M + sinh(2b)/M*i
where M = cos(2a) + cosh(2b).   r   )r   r?   rL   r/   r=   r>   r*   r-   )rU   rz   rh   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   rV   rW   s                        rX   mpc_tanr    s     DAEEEz'!3/66Ez%!3!777	B!QA!QAqDA1!FB
!R
C	C	#B	S$	$Br6MrZ   c                 :   U u  p4U[         :X  a  [        X1U5      [         4$ [        U[        US-   5      US-   5      nU[         :X  a  [	        XAU5      [         4$ US-   n[        X55      u  pg[        XE5      u  p[        XhX5      n
[        XyX5      nU
[        U5      4$ Nr  r  )r   rF   r,   r:   rJ   rB   r>   r)   r  s               rX   
mpc_cos_pir    s    DAEz!3'..6$q&>46*AEz%u,,	B! DA1!FB		"B		"Bwr{?rZ   c                 &   U u  p4U[         :X  a  [        X1U5      [         4$ [        U[        US-   5      US-   5      nU[         :X  a  [         [	        XAU5      4$ US-   n[        X55      u  pg[        XE5      u  p[        XxX5      n
[        XiX5      nX4$ r  )r   rG   r,   r:   rK   rB   r>   r  s               rX   
mpc_sin_pir     s    DAEz!3'..6$q&>46*AEzhq,,,	B! DA1!FB		"B		"B6MrZ   c                 h   U u  p4U[         :X  a  [        XAU5      u  pVU[         4[         U44$ U[         :X  a  [        X1U5      u  pxU[         4U[         44$ US-   n	[        X95      u  px[        XI5      u  pV[        XuX5      n
[        XX5      n[        XX5      n[        XvX5      nU
[	        U5      4X44$ )Nr  )r   r>   r=   r,   r)   )rU   rz   rh   r   r   r  r  r   r   r   crecimsresims                 rX   mpc_cos_sinr&    s    DAEzq,E{UBK''Ez1C(5zAu:%%	BqDA1!FB
!
#C
!
#C
!
#C
!
#C
**rZ   c                    U u  p4U[         :X  a  [        X1U5      u  pVU[         4U[         44$ [        U[        US-   5      US-   5      nU[         :X  a  [	        XAU5      u  pxU[         4[         U44$ US-   n	[        X95      u  pV[	        XI5      u  px[        XWX5      n
[        XhX5      n[        XgX5      n[        XXX5      nU
[        U5      4X44$ r  )r   rB   r,   r:   r>   r)   )rU   rz   rh   r   r   r   r   r  r  r   r"  r#  r$  r%  s                 rX   mpc_cos_sin_pir(  %  s    DAEzas+5zAu:%%6$q&>46*AEzq,E{UBK''	B! DA1!FB
!
#C
!
#C
!
#C
!
#C
**rZ   c                 8    U u  p4[        U[        U5      4X5      $ )z:Complex hyperbolic cosine. Computed as cosh(z) = cos(z*i).)r  r)   r   s        rX   mpc_coshr*  7  s    DAAwqz?D..rZ   c                 .    U u  p4[        XC4X5      u  pCX44$ )z;Complex hyperbolic sine. Computed as sinh(z) = -i*sin(z*i).)r  r   s        rX   mpc_sinhr,  <       DAA64%DA4KrZ   c                 .    U u  p4[        XC4X5      u  pCX44$ )z>Complex hyperbolic tangent. Computed as tanh(z) = -i*tan(z*i).)r  r   s        rX   mpc_tanhr/  B  r-  rZ   c                 L   U u  p4US-   n[        [        XE5      [        U5      4n[        [        XE5      U4n[	        Xe5      n[	        Xu5      n	[        XX5      u  p4[        [        US5      5      [        US5      4n
U
S   [        :X  a  [        U 5      (       a  U
S   [        4n
U
$ )Nr  r   r   r   )
r*   r    r)   r+   r   r   r/   r%   rY   r   )rU   rz   rh   r   r   r   r   yl1l2r   s              rX   mpc_atanr4  I  s    DA 
Bagaj(AaaA	B	B24%DA	!B )Ab/1A 	tt|
1qT5MHrZ   g:pΈ?g      ?c                 `	   U u  pEUS-   nU[         :X  a  [        [        [        U5      U5      nUS   (       d*  US:X  a  [	        XAU5      [         4$ [        XAU5      [         4$ US   (       aJ  [        X5      n[        [        U5      X5      n	US:X  a  U[        U	5      4$ [        [        US5      5      U	4$ [        XAU5      n	US:X  a  [         U	4$ [        X5      n[        US5      [        U	5      4$ S=pUS   (       a  [        U5      nSn
US   (       a  [        U5      nSn[        [        XF5      n[        [        XF5      n[        XU5      n[        XuU5      n[        [        XU5      S5      n[        XOU5      n[        XUU5      n[        [        UU5      S   (       d"  US:X  a  [	        UU5      nGOB[        UU5      nGO4[        XU5      nUS   (       d  [        U[        XU5      U5      n	[        XU5      n[        [        U[        U	UU5      U5      S5      nUS:X  a!  [        [        [!        UU5      XF5      U5      nO[        [        U[!        UU5      U5      U5      nO[        U[        XU5      U5      n	[        U[        XU5      U5      n[        [        U	UU5      S5      n[        U[!        UU5      U5      nUS:X  a  [        [        UXF5      U5      nO[        [        UUU5      U5      n[        ["        X5      S   (       d  [        U[        XU5      U5      n[        U5      S   (       a1  [        XU5      n[        UUU5      n[        [        UUU5      S5      nO#[        XU5      n[        [        UUU5      S5      n[        U[        U[        U5      U5      n[%        [        [        [        U[!        UU5      U5      U5      U5      nO<[!        [        [        XU5      [        U5      U5      n[%        [        UUU5      U5      nU
(       a(  US:X  a  [        [        U5      UU5      nO[        U5      nU(       d  US:X  a  [        U5      nU(       a  US:X  a  [        U5      n['        US   US   US   US   X5      n['        US   US   US   US   X5      nUU4$ )a  complex acos for n = 0, asin for n = 1
The algorithm is described in
T.E. Hull, T.F. Fairgrieve and P.T.P. Tang
'Implementing the Complex Arcsine and Arcosine Functions
using Exception Handling',
ACM Trans. on Math. Software Vol. 23 (1997), p299
The complex acos and asin can be defined as
acos(z) = acos(beta) - I*sign(a)* log(alpha + sqrt(alpha**2 -1))
asin(z) = asin(beta) + I*sign(a)* log(alpha + sqrt(alpha**2 -1))
where z = a + I*b
alpha = (1/2)*(r + s); beta = (1/2)*(r - s) = a/alpha
r = sqrt((a+1)**2 + y**2); s = sqrt((a-1)**2 + y**2)
These expressions are rewritten in different ways in different
regions, delimited by two crossovers alpha_crossover and beta_crossover,
and by abs(a) <= 1, in order to improve the numerical accuracy.
r   r   r   r   rl   rk   )r   r+   r    r'   rN   rM   r:   rO   r)   r/   r*   r1   r-   r,   beta_crossoverrH   r0   alpha_crossoverr<   r   )rU   rz   rh   r   r   r   r   ampir   r   r   r   r   r   alphabetab2rV   Axr   c1c2Am1rW   s                            rX   	acos_asinrA  _  sI   " DA	BEzT71:r*!uAv-u44-u44 tD&gaj$46wqz>)"9R#45q88 as+6 !8O*B$R,gaj88EtAJtAJ	q	B	q	B"A"AgaB',E1R D	b	B>4,Q/6$#B$#B Ur"!u
 GA2.3Ar"A72wq!R'8"=rBBAvghr2&6>Cga"b)92>C GA2.3AGA2.3A71a,b1BHR,b1BAvgb!0"5gaR0"5
 ?E.q1R+R02;q>#BR$BGBB/4C #BGBB/4CS'%r2B7WT73R0@"#ErJBO ggeB7rBBGWUB+R06R,BBQ!VR[aR[	2a5"Q%A1t	9B	2a5"Q%A1t	9Br6MrZ   c                     [        XUS5      $ Nr   rA  r  s      rX   mpc_acosrE        Qc1%%rZ   c                     [        XUS5      $ r   rD  r  s      rX   mpc_asinrH    rF  rZ   c                 V    U u  p4[        U[        U5      4X5      u  p4[        U5      U4$ re   )rH  r)   r   s        rX   	mpc_asinhrJ    s-    DAa_d0DA1:q=rZ   c                 z    [        XU5      u  p4US   (       d
  U[        :X  a  [        U5      U4$ U[        U5      4$ rC  )rE  r   r)   r   s        rX   	mpc_acoshrL    s;     AS!DAtqEzqz1}'!*}rZ   c                     US-   n[        U [        U5      n[        [        X5      n[        XC5      n[        XS5      n[	        [        XEU5      S5      nUS   [
        :X  a  [        U 5      (       a  [        US   4nU$ )Nr  r   r   r   )r   r   r   r   r   r%   rY   r   )rU   rz   rh   r   r   r   r   s          rX   	mpc_atanhrN    sq    	B7BAAAA'!#R(A 	tt|
1AaDMHrZ   c                    U u  p4U[         :X  a  [        X1U5      [         4$ [        [        US   US   -   5      [        US   US   -   5      5      nX-   S-   n[	        U5      n[        [        US5      [        U5      n[        U[         4X5      n	[        X5      n
[        XU5      n
[        XU5      n	[        XX5      n	U	$ )Nrl   rk   r   r   )r   rQ   r   r   rC   r*   r/   r&   r   r  r   r   r   )rU   rz   rh   rV   rW   sizer   r   r   r   r   s              rX   mpc_fibonaccirQ  
  s    FB	U{b,e44s2a5A;RU2a5[!12D	r	BA	!Q+AE
A"A1AbAbAA$$AHrZ   c                     [         ere   r9   r   rz   rh   s      rX   mpf_expjrU        
rZ   c                    U u  p4U[         :X  a  [        X1U5      $ U[         :X  a  [        [        U5      X5      [         4$ [        [        U5      US-   5      n[        X1S-   5      u  pg[	        XVX5      n[	        XWX5      nX44$ r   )r   r=   r;   r)   r,   )rU   rz   rh   rV   rW   eyr   r   s           rX   mpc_expjrY    s}    FB	U{2S))	U{wr{D.55	d2g	&Br7#DA		"B		"B6MrZ   c                     [         ere   rS  rT  s      rX   
mpf_expjpir[  (  rV  rZ   c                 `   U u  p4U[         :X  a  [        X1U5      $ Uu  pVpxUS-   n	U(       a  U	[        SXx-   5      -  n	[        [	        [        U	5      XI5      5      nU[         :X  a  [        XAU5      [         4$ [        XAS-   5      n
[        X1S-   5      u  p[	        XX5      n[	        XX5      nX44$ )Nr   r   )r   rB   r   r)   r,   r:   r;   )rU   rz   rh   rV   rW   signmanexpbcr   rX  r   r   s                rX   
mpc_expjpira  +  s    FB	U{b,,Ds	bB

c!SVn	R,	-B	U{r%u,,	"W	B"2g&DA		"B		"B6MrZ   sagez&Warning: Sage imports in libmpc failed)f)__doc__rm   backendr   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,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   	libelefunr:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   r   r}   mpc_twompc_halfrS   r\   rY   r]   rc   ri   rv   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  r  r  r  r   r&  r(  r*  r,  r/  r4  r6  r7  rA  rE  rH  rJ  rL  rN  rQ  rU  rY  r[  ra  sage.libs.mpmath.ext_libmplibsmpmath	ext_libmp_lbmpImportErrorAttributeErrorprintr   rZ   rX   <module>rr     sG    = =                   +%<
+5>	u5$	< #
 I  * & ' >
 !+ ' j >
 * ' $ 8 j 8, $ & $ &
 & < % : % : % :
 ' $ '  !+  &0  !+  ' 	< !+  !+  !+  ' H
 !+ L !+ &LP % "H%N !+ 'R % ( $ 6 $ 
 $ ( $   $ & '  '  ( +" !+ +$ % /
 %  %  % & F#S/FP % & % & &  &  &   * 
$ f822-->>	 
 ( 8678s   2$I I+*I+