
    wgh                     p   d Z ddlZddl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,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9 ddl:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZR e efZSeefZTe!efZUe"efZVe#e$fZWe#e$e%fZXd ZYd ZZd	 Z[d
efdZ\d Z]efdZ^d Z_efdZ`efdZadefdZbdefdZcefdZddefdZed ZfefdZgefdZhefdZiefdZjefdZkefdZlefdZmefdZnefdZoefdZpefd Zqefd!Zrefd"Zsefd#Ztefd$Zud% Zvefd&Zwefd'Zxefd(Zyefd)Zzd* Z{efd+Z|efd,Z}efd-Z~efd.Zefd/Zefd0Zefd1Zefd2Zefd3Zefd4Zefd5Zefd6Zefd7Zefd8Zefd9Z ed:      Z ed;      Zd< Zefd=Zefd>Zefd?Zefd@ZefdAZefdBZdIdCZdIdDZdIdEZdIdFZedGk(  r&	 ddlmc mc mZ ej                  Z~ej                  Zzyy# eef$ r  edH       Y yw xY w)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                 2    | \  }}|t         v ry|t         v ryy)z2Check if either real or imaginary part is infiniteTF)_infszreims      X/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/mpmath/libmp/libmpc.py
mpc_is_infrY   )   s     FB	U{4	U{4    c                 2    | \  }}|t         v ry|t         v ryy)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                     | \  }}t        ||      }|d   r|dz   t        t        |      |fi |z   dz   S |dz   t        ||fi |z   dz   S )Nr   z - jz + )r   r)   )rU   dpskwargsrV   rW   rss         rX   
mpc_to_strrc   7   sa    FB	CB	!uEzF72;>v>>DDEzF2s5f55;;rZ   Fc                 P    | \  }}t        t        |||      t        |||            S N)complexr   )rU   strictrndrV   rW   s        rX   mpc_to_complexri   ?   s*    FB8B,hr63.GHHrZ   c                 N   t         j                  dk\  rb| \  }}t        |      t         j                  j                  t        |      z  z   }|dt         j                  j
                  z  z  }t        |      S 	 t        t        | d            S # t        $ r t        |       cY S w xY w)N)      rl   T)rg   )
sysversion_infor8   	hash_infoimagwidthinthashri   OverflowError)rU   rV   rW   hs       rX   mpc_hashrv   C   s    
6!BRL3==--<<CMM'''(1v	q677 	7N	s   7B B$#B$c                 *    | \  }}|t        |||      fS re   r)   rU   precrh   rV   rW   s        rX   mpc_conjugater{   P   s    FBwr4%%%rZ   c                     | t         k7  S re   )mpc_zero)rU   s    rX   mpc_is_nonzeror~   T   s    =rZ   c                 N    | \  }}|\  }}t        ||||      t        ||||      fS re   r*   rU   wrz   rh   abcds           rX   mpc_addr   W   5    DAqDAq1as#WQ4%===rZ   c                 ,    | \  }}t        ||||      |fS re   r   )rU   xrz   rh   r   r   s         rX   mpc_add_mpfr   \   !    DAq1as#Q&&rZ   c                 N    | \  }}|\  }}t        ||||      t        ||||      fS re   r+   r   s           rX   mpc_subr   `   r   rZ   c                 ,    | \  }}t        ||||      |fS re   r   )rU   prz   rh   r   r   s         rX   mpc_sub_mpfr   e   r   rZ   c                 @    | \  }}t        |||      t        |||      fS re   )r(   rU   rz   rh   r   r   s        rX   mpc_posr   i   (    DAq1dC '!T3"777rZ   c                 @    | \  }}t        |||      t        |||      fS re   rx   r   s        rX   mpc_negr   m   r   rZ   c                 <    | \  }}t        ||      t        ||      fS re   )r/   )rU   nr   r   s       rX   	mpc_shiftr   q   s"    DAqQ?IaO++rZ   c                 (    | \  }}t        ||||      S )zEAbsolute value of a complex number, |a+bi|.
    Returns an mpf value.)r1   r   s        rX   mpc_absr   u   s     DAqQ4%%rZ   c                 (    | \  }}t        ||||      S )z3Argument of a complex number. Returns an mpf value.)rI   r   s        rX   mpc_argr   {   s    DAqQ4%%rZ   c                 @    | \  }}t        |||      t        |||      fS re   )r3   r   s        rX   	mpc_floorr      s(    DAqQc"Ias$;;;rZ   c                 @    | \  }}t        |||      t        |||      fS re   )r4   r   s        rX   mpc_ceilr      (    DAqAtS!8AtS#999rZ   c                 @    | \  }}t        |||      t        |||      fS re   )r5   r   s        rX   mpc_nintr      r   rZ   c                 @    | \  }}t        |||      t        |||      fS re   )r6   r   s        rX   mpc_fracr      r   rZ   c                     | \  }}|\  }}t        ||      }t        ||      }	t        ||      }
t        ||      }t        ||	||      }t        |
|||      }||fS )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      sk     DAqDAq1A1A1A1A	AtS	!B	AtS	!Br6MrZ   c                     | \  }}t        ||      }t        ||      }t        ||||      }t        ||||      }t        |d      }	||	fS Nr   )r,   r+   r/   )
rU   rz   rh   r   r   r   r   r   rV   rW   s
             rX   
mpc_squarer      sU    DAq!A!A!T3A	AtS	!B	1aBr6MrZ   c                 L    | \  }}t        ||||      }t        ||||      }||fS re   )r,   rU   r   rz   rh   r   r   rV   rW   s           rX   mpc_mul_mpfr      s4    DAq	AtS	!B	AtS	!Br6MrZ   c                 ^    | \  }}t        t        ||||            }t        ||||      }||fS )zB
    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;     DAq	AtS)	*B	AtS	!Br6MrZ   c                 L    | \  }}t        ||||      }t        ||||      }||fS re   )r.   )rU   r   rz   rh   r   r   rV   rW   s           rX   mpc_mul_intr      s4    DAq	Q4	%B	Q4	%Br6MrZ   c                    | \  }}|\  }}|dz   }t        t        ||      t        ||      |      }	t        t        ||      t        ||      |      }
t        t        ||      t        ||      |      }t        |
|	||      t        ||	||      fS N
   )r*   r,   r+   r-   )rU   r   rz   rh   r   r   r   r   wpmagtus               rX   mpc_divr      s    DAqDAq	B
'!Q-A
3C!galB/A!galB/A1Sc"GAc$s$;;;rZ   c                 L    | \  }}t        ||||      }t        ||||      }||fS )zCalculate z/p where p is real)r-   r   s           rX   mpc_div_mpfr      s4    DAq	AtS	!B	AtS	!Br6MrZ   c                     | \  }}t        t        ||      t        ||      |dz         }t        ||||      }t        t        ||||            }||fS )zCalculate 1/z efficientlyr   r*   r,   r-   r)   )rU   rz   rh   r   r   mrV   rW   s           rX   mpc_reciprocalr      sW    DAq!WQq\$r'2A	AtS	!B	AtS)	*Br6MrZ   c                     |\  }}t        t        ||      t        ||      |dz         }t        t        ||       |||      }t        t        t        ||             |||      }||fS )z)Calculate p/z where p is real efficientlyr   r   )	r   rU   rz   rh   r   r   r   rV   rW   s	            rX   mpc_mpf_divr      sc    DAq!WQq\473A	1q$	,B	1&4	5Br6MrZ   c                     d}d}|r;|dz  r|| z  ||z  z
  || z  ||z  z   }}|dz  }| | z  ||z  z
  d| z  |z  }} |dz  }|r;||fS )zgComplex 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      sx     C
C
q51us1u}c!ec!emCFAsQqSy!A#a%1	a  8OrZ   c           	          |d   t         k(  rt        | |d   ||      S t        t        t	        | |dz         ||dz         ||      S )Nr   r   r   )r   mpc_pow_mpfmpc_expr   mpc_log)rU   r   rz   rh   s       rX   mpc_powr      sI    tu}1adD#..771d2g.47;T3GGrZ   c           	          |\  }}}}|dk\  rt        | d|z  ||z  z  ||      S |dk(  r#t        | |dz         }t        |d|z  |z  ||      S t        t        t	        | |dz         ||dz         ||      S )Nr   r   )mpc_pow_intmpc_sqrtr   r   r   )	rU   r   rz   rh   psignpmanpexppbcsqrtzs	            rX   r   r      s    E4sqy1rEkT4Z8$DDrzDG$52+"4dC@@;wq$r'2AtBw?sKKrZ   c           	      V   | \  }}|t         k(  rt        ||||      t         fS |t         k(  rYt        ||||      }|dz  }|dk(  r|t         fS |dk(  rt         |fS |dk(  rt        |      t         fS |dk(  rt         t        |      fS |dk(  rt        S |dk(  rt	        | ||      S |dk(  rt        | ||      S |dk(  rt        | ||      S |dk  rt        t        | | |dz         ||      S |\  }}}	}
|\  }}}}|r| }|r| }|	|z
  }t        |      }||t        |
|      z   z  }|dk  r]|dkD  r||z  }|}	n|| z  }|	}t        |||      \  }}t        |t        ||	z        ||      }t        |t        ||z        ||      }||fS t        t        t        | |dz         ||dz         ||      S )	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   DAqEz1as+U22Ez1dC(	Q6e8O!V!8O!V1:u$$!V'!*$$Avg~Avgas++AvjD#..Bw~as331u^KA2tAv$>cJJE4sE4sdUddUd	BWFFSc]*+JE6RKDDrcNDD tQ/B"c!D&k45"c!D&k452v;wq$r'2AtBw?sKKrZ   c                 b   | \  }}|t         k(  rE|t         k(  r||fS |d   rt        t        |      ||      }t         |fS t        |||      }|t         fS |dz   }|d   s\t        t	        ||f|      ||      }t        |d      }	t        |	||      }t        |d      }
t        |
|      }t        ||||      }||fS t        t	        ||f|      ||      }t        |d      }	t        |	||      }t        |d      }
t        |
|      }t        ||||      }|d   rt        |      }t        |      }||fS )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   '  sP   
 DAqEz:q6MQ4'!*dC0B2;!T3'B;	bBQ4WaVR(!R0aas#aOa_Q4% r6M GQFB'B/aas#aOa_Q4%Q4BBr6MrZ   c                    d}t        t        | |||z  z
              }t        t        ||||z  z
              }	 |d|z  z   d|z  z  }|j                  }|j                  }	t	        t        |            }t	        t        |	            }	d}|}|}t        |||z         D ]  }t        ||	|dz
        \  }}t        ||dz
  |z  |z
  |z
        }t        ||dz
  |z  |z
  |z
        }||z  ||z  z   ||z   z	  }t        | ||z
        }t        |||z
        }||z  ||z  z   |z	  }| |z  ||z  z   |z	  }||z  |z  }||z  |z  }||dz
  t        |||z
        z  z   |z  }||dz
  t        |	||z
        z  z   |z  }	|} ||	fS # t
        $ rb t        ||      }t        ||      }t        |      }
t        d|
|      }t        ||f|t        f|      \  }}	t        |      }t        |	      }	Y _w xY w)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  sD   E	VAtag~&	'B	VAtag~&	'B"r'\SU#VVVVR\R\ EEFU
+ "2r1Q3/SS1Q3+/F23S1Q3+/F23#gCQZ0Atax Atax Cx"s("q(sSy28#)axBaxBQqS&QuW---1QqS&QuW---1 r6M5  b% b% a[1b%("bC<7BBZBZs   AE= =A'G('G(c                 Z   | \  }}|d   dk(  r|t         k(  rt        ||||      }|t         fS |dk  re|dk(  rt        S |dk(  rt        ||f||      S |dk(  rt	        t        ||f||      S t        ||f| |dz   t        |         }t	        t        |||      S |dk  rt        d|dz   z        }|\  }	}
}}|\  }}}}t        ||f|      }|d	   |d   z   d
kD  ra|d	   |d   z   |k  rSt        ||      }t        ||      }t        ||||      \  }}d}t        || |z
  ||      }t        || |z
  ||      }||fS t        |      }|dz   dz   }t        d||      }t        ||f|t         f||      \  }}t        |d   |d   |d   |d   ||      }t        |d   |d   |d   |d   ||      }||fS )zu
    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    DAqtqyQ%ZAtS)E{1u6N6Aq64--77QFD#66q!fqb$q&.2EFws33BwC4"9%&!"tT3!"tT3aUD!b6BrF?S bfr"vo&<!U#B!U#B&r2q%8FBEb5&,s;Bb5&,s;Br6M	!BGbLE
q"e
$CaVc5\5#6FB	2a5"Q%A1tS	9B	2a5"Q%A1tS	9Br6MrZ   c                     t        | d||      S )z
    Complex cubic root.
    rk   )r  rU   rz   rh   s      rX   mpc_cbrtr    s     q!T3''rZ   c                     | \  }}|t         k(  rt        |||      S |t         k(  rt        |||      t         fS t        ||dz   |      }t        ||dz   |      \  }}t        ||||      }t        ||||      }	||	fS )av  
    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     s      DAqEz1dC((Ezq$$e++
!T!VS
!Cq$q&#&DAq	as	#B	as	#Br6MrZ   c                 L    t        | d   | d   ||      }t        | ||      }||fS )Nr   r   )rA   r   ry   s        rX   r   r     s1    	qtQqT4	-B	D#	Br6MrZ   c                    | \  }}|t         k(  rt        |||      t         fS |t         k(  rt        |||      t         fS |dz   }t        ||      \  }}t	        ||      \  }}	t        ||||      }
t        ||	||      }|
t        |      fS )aS  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     DAqEzq$$e++Ez4%u,,	Bq"DAq1b!FB	Bc	"B	Bc	"Bwr{?rZ   c                    | \  }}|t         k(  rt        |||      t         fS |t         k(  rt         t        |||      fS |dz   }t        ||      \  }}t	        ||      \  }}	t        ||||      }
t        ||	||      }|
|fS )zComplex 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     DAqEzq$$e++Ezhq$,,,	Bq"DAq1b!FB	Bc	"B	Bc	"Br6MrZ   c                 h   | \  }}|\  }}}}|\  }	}
}}|t         k(  rt        |||      t         fS |t         k(  rt         t        |||      fS |dz   }t        |d      }t        |d      }t	        ||      \  }}t        ||      \  }}t        |||      }t        ||||      }t        ||||      }||fS )zcComplex 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     DAqE4sE4sEz'!T3/66Ez%!T3!777	B!QA!QAq"DAq1b!FB
!R
C	Cs	#B	S$	$Br6MrZ   c                 L   | \  }}|t         k(  rt        |||      t         fS t        |t        |dz         |dz         }|t         k(  rt	        |||      t         fS |dz   }t        ||      \  }}t        ||      \  }}	t        ||||      }
t        ||	||      }|
t        |      fS Nr  r  )r   rF   r,   r:   rJ   rB   r>   r)   r  s               rX   
mpc_cos_pir    s    DAqEz!T3'..6$q&>46*AEz4%u,,	B!R DAq1b!FB	Bc	"B	Bc	"Bwr{?rZ   c                 :   | \  }}|t         k(  rt        |||      t         fS t        |t        |dz         |dz         }|t         k(  rt         t	        |||      fS |dz   }t        ||      \  }}t        ||      \  }}	t        ||||      }
t        ||	||      }|
|fS r  )r   rG   r,   r:   rK   rB   r>   r  s               rX   
mpc_sin_pir     s    DAqEz!T3'..6$q&>46*AEzhq$,,,	B!R DAq1b!FB	Bc	"B	Bc	"Br6MrZ   c                    | \  }}|t         k(  r t        |||      \  }}|t         ft         |ffS |t         k(  r t        |||      \  }}|t         f|t         ffS |dz   }	t        ||	      \  }}t        ||	      \  }}t        ||||      }
t        ||||      }t        ||||      }t        ||||      }|
t	        |      f||ffS )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    DAqEzq$,BE{UBK''Ez1dC(15zAu:%%	Bq"DAq1b!FB
!Rs
#C
!Rs
#C
!Rs
#C
!Rs
#Cc
**rZ   c                    | \  }}|t         k(  r t        |||      \  }}|t         f|t         ffS t        |t        |dz         |dz         }|t         k(  r t	        |||      \  }}|t         ft         |ffS |dz   }	t        ||	      \  }}t	        ||	      \  }}t        ||||      }
t        ||||      }t        ||||      }t        ||||      }|
t        |      f||ffS 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    DAqEzas+15zAu:%%6$q&>46*AEzq$,BE{UBK''	B!R DAq1b!FB
!Rs
#C
!Rs
#C
!Rs
#C
!Rs
#Cc
**rZ   c                 <    | \  }}t        |t        |      f||      S )z:Complex hyperbolic cosine. Computed as cosh(z) = cos(z*i).)r  r)   r   s        rX   mpc_coshr*  7  s"    DAqAwqz?D#..rZ   c                 8    | \  }}t        ||f||      \  }}||fS )z;Complex hyperbolic sine. Computed as sinh(z) = -i*sin(z*i).)r  r   s        rX   mpc_sinhr,  <  *    DAqAq64%DAqa4KrZ   c                 8    | \  }}t        ||f||      \  }}||fS )z>Complex hyperbolic tangent. Computed as tanh(z) = -i*tan(z*i).)r  r   s        rX   mpc_tanhr/  B  r-  rZ   c                 P   | \  }}|dz   }t        t        ||      t        |      f}t        t        ||      |f}t	        ||      }t	        ||      }	t        ||	||      \  }}t        t        |d            t        |d      f}
|
d   t        k(  rt        |       r|
d   t        f}
|
S )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    DAq 
Bagaj(AaaA	BB	BB2r4%DAq	!B )Ab/1A 	tt|
1qT5MHrZ   g:pΈ?g      ?c                 	   | \  }}|dz   }|t         k(  rt        t        t        |      |      }|d   s+|dk(  rt	        |||      t         fS t        |||      t         fS |d   rKt        ||      }t        t        |      ||      }	|dk(  r|t        |	      fS t        t        |d            |	fS t        |||      }	|dk(  rt         |	fS t        ||      }t        |d      t        |	      fS dx}
}|d   rt        |      }d}
|d   rt        |      }d}t        t        ||      }t        t        ||      }t        |||      }t        |||      }t        t        |||      d      }t        |||      }t        |||      }t        t        ||      d   s!|dk(  rt	        ||      }nBt        ||      }n4t        |||      }|d   st        |t        |||      |      }	t        |||      }t        t        |t        |	||      |      d      }|dk(  r"t        t        t!        ||      ||      |      }nt        t        |t!        ||      |      |      }nt        |t        |||      |      }	t        |t        |||      |      }t        t        |	||      d      }t        |t!        ||      |      }|dk(  rt        t        |||      |      }nt        t        |||      |      }t        t"        ||      d   st        |t        |||      |      }t        |      d   r2t        |||      }t        |||      }t        t        |||      d      }n$t        |||      }t        t        |||      d      }t        |t        |t        |      |      }t%        t        t        t        |t!        ||      |      |      |      }n=t!        t        t        |||      t        |      |      }t%        t        |||      |      }|
r'|dk(  rt        t        |      ||      }nt        |      }|s|dk(  rt        |      }|r|dk(  rt        |      }t'        |d   |d   |d   |d   ||      }t'        |d   |d   |d   |d   ||      }||fS )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  _  s   " DAq	BEzT71:r*!uAv4-u444-u44 tD#&gaj$46wqz>)"9R#45q88 as+6 !8Oc*B$R,gaj88EEtAJtAJ	q"	B	q"	B"aA"aAgaB',E1eR D	1b	B>4,Q/6$#B$#B UAr"!u
 GAr2.3A2r"A72wq!R'8"=rBBAvghr2&62>Cga"b)92>C GAr2.3AGAr2.3A71a,b1BHR,b1BAvgb!R0"5gaR0"5
 ?E2.q1RB+R02;q>B#BR$BGBB/4C B#BGBB/4CS'%r2B7WT73R0@"#ErJBO ggeUB7rBBGWUB+R06R,BBQ!VR[aR[	2a5"Q%A1tS	9B	2a5"Q%A1tS	9Br6MrZ   c                     t        | ||d      S Nr   rA  r  s      rX   mpc_acosrE        Qc1%%rZ   c                     t        | ||d      S r   rD  r  s      rX   mpc_asinrH    rF  rZ   c                 \    | \  }}t        |t        |      f||      \  }}t        |      |fS re   )rH  r)   r   s        rX   	mpc_asinhrJ    s3    DAqa_dC0DAq1:q=rZ   c                 r    t        | ||      \  }}|d   s	|t        k(  rt        |      |fS |t        |      fS rC  )rE  r   r)   r   s        rX   	mpc_acoshrL    s?     AtS!DAqtqEzqz1}'!*}rZ   c                     |dz   }t        | t        |      }t        t        | |      }t        ||      }t        ||      }t	        t        |||      d      }|d   t
        k(  rt        |       rt        |d   f}|S )Nr  r   r   r   )r   r   r   r   r   r%   rY   r   )rU   rz   rh   r   r   r   r   s          rX   	mpc_atanhrN    sw    	B7BABA2A2A'!Q#R(A 	tt|
1AaDMHrZ   c                    | \  }}|t         k(  rt        |||      t         fS t        t        |d   |d   z         t        |d   |d   z               }||z   dz   }t	        |      }t        t        |d      t        |      }t        |t         f| |      }	t        | |      }
t        |
|	|      }
t        |	|
|      }	t        |	|||      }	|	S )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
Ar"A1bA1bA1bAAq$$AHrZ   c                     t         re   r9   r   rz   rh   s      rX   mpf_expjrU        
rZ   c                    | \  }}|t         k(  rt        |||      S |t         k(  rt        t        |      ||      t         fS t        t        |      |dz         }t        ||dz         \  }}t	        ||||      }t	        ||||      }||fS r   )r   r=   r;   r)   r,   )rU   rz   rh   rV   rW   eyr   r   s           rX   mpc_expjrY    s    FB	U{2tS))	U{wr{D#.55	d2g	&Br47#DAq	Qc	"B	Qc	"Br6MrZ   c                     t         re   rS  rT  s      rX   
mpf_expjpir[  (  rV  rZ   c                 p   | \  }}|t         k(  rt        |||      S |\  }}}}|dz   }	|r|	t        d||z         z  }	t        t	        t        |	      ||	            }|t         k(  rt        |||      t         fS t        ||dz         }
t        ||dz         \  }}t	        |
|||      }t	        |
|||      }||fS )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$,,D#sB	bB

c!SVn	R,	-B	U{r4%u,,	T"W	B"d2g&DAq	Qc	"B	Qc	"Br6MrZ   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   =$H# #H54H5