
    gh                     v   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ZdJdDZdJdEZdJdFZdJdGZedHk    r6	 ddlmc mc mZ ej~        Z~ejz        ZzdS # eef$ r  edI           Y dS w xY wdS )Kz-
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                 <    | \  }}|t           v rdS |t           v rdS dS )z2Check if either real or imaginary part is infiniteTF)_infszreims      O/var/www/html/ai-engine/env/lib/python3.11/site-packages/mpmath/libmp/libmpc.py
mpc_is_infrY   )   s*    FB	U{{44	U{{445    c                 <    | \  }}|t           v rdS |t           v rdS dS )z9Check if either real or imaginary part is infinite or nanTF)	_infs_nanrT   s      rX   mpc_is_infnanr]   0   s*    FB	Ytt	Ytt5rZ   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   sv    FB	CB	!u <EzF72;;>>v>>>DDEzF2s55f555;;rZ   Fc                 h    | \  }}t          t          |||          t          |||                    S N)complexr   )rU   strictrndrV   rW   s        rX   mpc_to_complexri   ?   s3    FB8B,,hr63.G.GHHHrZ   c                 V   t           j        dk    r\| \  }}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RLL3=-<<CM''(1vv	q666777 	 	 	77NNN	s   .B B('B(c                 2    | \  }}|t          |||          fS re   r)   rU   precrh   rV   rW   s        rX   mpc_conjugater{   P   s"    FBwr4%%%%rZ   c                     | t           k    S re   )mpc_zero)rU   s    rX   mpc_is_nonzeror~   T   s    =rZ   c                 ^    | \  }}|\  }}t          ||||          t          ||||          fS re   r*   rU   wrz   rh   abcds           rX   mpc_addr   W   ;    DAqDAq1as##WQ4%=%===rZ   c                 4    | \  }}t          ||||          |fS re   r   )rU   xrz   rh   r   r   s         rX   mpc_add_mpfr   \   $    DAq1as##Q&&rZ   c                 ^    | \  }}|\  }}t          ||||          t          ||||          fS re   r+   r   s           rX   mpc_subr   `   r   rZ   c                 4    | \  }}t          ||||          |fS re   r   )rU   prz   rh   r   r   s         rX   mpc_sub_mpfr   e   r   rZ   c                 P    | \  }}t          |||          t          |||          fS re   )r(   rU   rz   rh   r   r   s        rX   mpc_posr   i   .    DAq1dC  '!T3"7"777rZ   c                 P    | \  }}t          |||          t          |||          fS re   rx   r   s        rX   mpc_negr   m   r   rZ   c                 L    | \  }}t          ||          t          ||          fS re   )r/   )rU   nr   r   s       rX   	mpc_shiftr   q   s&    DAqQ??IaOO++rZ   c                 0    | \  }}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                 0    | \  }}t          ||||          S )z3Argument of a complex number. Returns an mpf value.)rI   r   s        rX   mpc_argr   {   s    DAqQ4%%%rZ   c                 P    | \  }}t          |||          t          |||          fS re   )r3   r   s        rX   	mpc_floorr      s.    DAqQc""Ias$;$;;;rZ   c                 P    | \  }}t          |||          t          |||          fS re   )r4   r   s        rX   mpc_ceilr      .    DAqAtS!!8AtS#9#999rZ   c                 P    | \  }}t          |||          t          |||          fS re   )r5   r   s        rX   mpc_nintr      r   rZ   c                 P    | \  }}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      sy     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      sa    DAq!A!A!T3A	AtS	!	!B	1aBr6MrZ   c                 \    | \  }}t          ||||          }t          ||||          }||fS re   )r,   rU   r   rz   rh   r   r   rV   rW   s           rX   mpc_mul_mpfr      s:    DAq	AtS	!	!B	AtS	!	!Br6MrZ   c                 v    | \  }}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      sD     DAq	AtS))	*	*B	AtS	!	!Br6MrZ   c                 \    | \  }}t          ||||          }t          ||||          }||fS re   )r.   )rU   r   rz   rh   r   r   rV   rW   s           rX   mpc_mul_intr      s:    DAq	Q4	%	%B	Q4	%	%Br6MrZ   c                 v   | \  }}|\  }}|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
3
3C!gallB//A!gallB//A1Sc""GAc$s$;$;;;rZ   c                 \    | \  }}t          ||||          }t          ||||          }||fS )zCalculate z/p where p is real)r-   r   s           rX   mpc_div_mpfr      s:    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      sg    DAq!WQq\\$r'2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      sw    DAq!WQq\\4733A	1q$	,	,B	1&&4	5	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  }|:||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      s     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      sW    tu}}1adD#...771d2g..47;;T3G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qyy1rEkT4Z8$DDDrzzDG$$52+"4dC@@@;wq$r'22AtBw??sKKKrZ   c           	         | \  }}|t           k    rt          ||||          t           fS |t           k    rmt          ||||          }|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     rr|dk    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      sL   DAqEzz1as++U22Ezz1dC((	Q66e8O!VV!8O!VV1::u$$!VV'!**$$Avvg~Avvgas+++AvvjD#...Bww~as3331uu^KA2tAv$>$>cJJJE4sE4sdUddUd	BWWFFSc]]*+JE66RKDDDrcNDD tQ//B"c!D&kk455"c!D&kk4552v;wq$r'22AtBw??sKKKrZ   c                    | \  }}|t           k    rX|t           k    r||fS |d         r't          t          |          ||          }t           |fS t          |||          }|t           fS |dz   }|d         sut          t	          ||f|          ||          }t          |d          }	t          |	||          }t          |d          }
t          |
|          }t          ||||          }nt          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   '  s   
 DAqEzz::q6MQ4 	'!**dC00B2;!T3''B;	bBQ4 WaVR((!R00aas##aOOa__Q4%%GQFB''B//aas##aOOa__Q4%%Q4 	BBr6MrZ   c                 z   d}t          t          | |||z  z
                      }t          t          ||||z  z
                      }	 |d|z  z   d|z  z  }|j        }|j        }	t	          t          |                    }t	          t          |	                    }	n# t
          $ r~ t          ||          }t          ||          }t          |          }
t          d|
|          }t          ||f|t          f|          \  }}	t          |          }t          |	          }	Y nw xY w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 )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	VAtag~&&	'	'B	VAtag~&&	'	'B"r'\SU#VVR\\R\\   b%  b%  a[[1b%(("bC<77BBZZBZZ EEFU
++  "2r1Q3//SS1Q3+/F233S1Q3+/F233#gCQZ0Atax  Atax  Cx"s("q(sSy28#)axBaxBQqS&QuW----1QqS&QuW----1r6Ms   
AB BD'&D'c                 V   | \  }}|d         dk    r&|t           k    rt          ||||          }|t           fS |dk     r|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
k    r||d	         |d         z   |k     rgt          ||          }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tqyyQ%ZZAtS))E{1uu66N66Aq64---777QFD#666q!fqb$q&.2EFFws333BwwC4"9%&&!"tT3!"tT3aUD!!b6BrF?S  bfr"vo&<&<!U##B!U##B&r2q%88FBEb5&,s;;Bb5&,s;;Br6M	!BGbLE
q"e
$
$CaVc5\5#66FB	2a5"Q%A1tS	9	9B	2a5"Q%A1tS	9	9Br6MrZ   c                 &    t          | d||          S )z
    Complex cubic root.
    rk   )r  rU   rz   rh   s      rX   mpc_cbrtr    s     q!T3'''rZ   c                 0   | \  }}|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Ezz1dC(((Ezzq$$$e++
!T!VS
!
!Cq$q&#&&DAq	as	#	#B	as	#	#Br6MrZ   c                 h    t          | d         | d         ||          }t          | ||          }||fS )Nr   r   )rA   r   ry   s        rX   r   r     s7    	qtQqT4	-	-B	D#		Br6MrZ   c                 X   | \  }}|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Ezzq$$$e++Ezz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Ezzq$$$e++Ezzhq$,,,,	Bq"DAq1b!!FB	Bc	"	"B	Bc	"	"Br6MrZ   c                    | \  }}|\  }}}}|\  }	}
}}|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Ezz'!T3//66Ezz%!T3!7!777	B!QA!QAq"DAq1b!!FB
!R

C	Cs	#	#B	S$	$	$Br6MrZ   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          ||	||          }|
t          |          fS Nr  r  )r   rF   r,   r:   rJ   rB   r>   r)   r  s               rX   
mpc_cos_pir    s    DAqEzz!T3''..6$q&>>46**AEzz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Ezz!T3''..6$q&>>46**AEzz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Ezzq$,,BE{UBK''Ezz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Ezzas++15zAu:%%6$q&>>46**AEzzq$,,BE{UBK''	B!R  DAq1b!!FB
!Rs
#
#C
!Rs
#
#C
!Rs
#
#C
!Rs
#
#Cc
**rZ   c                 L    | \  }}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Awqzz?D#...rZ   c                 @    | \  }}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                 @    | \  }}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                    | \  }}|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gajj(AaaA	BB	BB2r4%%DAq	!B  )Ab//1A 	tt||
1|qT5MHrZ   g:pΈ?g      ?c                 0   | \  }}|dz   }|t           k    rt          t          t          |          |          }|d         s6|dk    rt	          |||          t           fS t          |||          t           fS |d         rdt          ||          }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	          ||          }nt          ||          }nt          |||          }|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         st          |t          |||          |          }t          |          d         rBt          |||          }t          |||          }t          t          |||          d          }n0t          |||          }t          t          |||          d          }t          |t          |t          |          |          }t%          t          t          t          |t!          ||          |          |          |          }nRt!          t          t          |||          t          |          |          }t%          t          |||          |          }|
r4|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EzzT71::r**!u 	9Avv4--u444--u44 t 9D#&&gajj$4466wqzz>)"9R#4#455q88 as++66 !8Oc**B$R,,gajj88EEt AJJt AJJ	q"		B	q"		B"aA"aAgaB'',,E1eR  D	1b		B>4,,Q/ &666$##BB$##BB UAr""!u 	6
 GAr2..33A2r""A72wq!R'8'8"==rBBBAvvghr2&6&62>>CCga"b)9)92>>CC GAr2..33AGAr2..33A71a,,b11BHR,,b11BAvvgb!R00"55gaR00"55
 ?E2..q1 1RB++R002;;q> 	5B##BR$$BGBB//44CC B##BGBB//44CS'%r22B77WT73R0@0@"#E#ErJJBOO ggeUB77rBBBGGWUB++R00 66R,,BBB Q!VVR[[ aR[[	2a5"Q%A1tS	9	9B	2a5"Q%A1tS	9	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          |t          |          f||          \  }}t          |          |fS re   )rH  r)   r   s        rX   	mpc_asinhrJ    s:    DAqa_dC00DAq1::q=rZ   c                     t          | ||          \  }}|d         s|t          k    rt          |          |fS |t          |          fS rC  )rE  r   r)   r   s        rX   	mpc_acoshrL    sM     AtS!!DAqt qEzzqzz1}'!**}rZ   c                 D   |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    s    	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!122D	r	BA	!Q++AE
Ar""A1bA1bA1bAAq$$$AHrZ   fc                     t           re   r9   r   rz   rh   s      rX   mpf_expjrV        
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_expjrZ    s    FB	U{{2tS)))	U{{wr{{D#..55	d2g	&	&Br47##DAq	Qc	"	"B	Qc	"	"Br6MrZ   c                     t           re   rT  rU  s      rX   
mpf_expjpir\  (  rW  rZ   c                    | \  }}|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   rY  r   r   s                rX   
mpc_expjpirb  +  s    FB	U{{b$,,,D#sB	bB
 
c!SVnn	R,,	-	-B	U{{r4%%u,,	T"W		B"d2g&&DAq	Qc	"	"B	Qc	"	"Br6MrZ   sagez&Warning: Sage imports in libmpc failed)rR  )__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  rV  rZ  r\  rb  sage.libs.mpmath.ext_libmplibsmpmath	ext_libmp_lbmpImportErrorAttributeErrorprintr   rZ   rX   <module>rr     s	    


 = = = = = = = = = = = = = =                                                                                                                                                         +%<
+5>	u5$	    < < < #
 I I I I    * & & & &   ' > > > >
 !+ ' ' ' ' j > > > >
 * ' ' ' ' $ 8 8 8 8 j 8 8 8 8, , , $ & & & & $ & & & &
 & < < < < % : : : : % : : : : % : : : :
 '    $ '     !+     &0     !+     ' 	< 	< 	< 	< !+     !+     !+       ' H H H H
 !+ L L L L !+ &L &L &L &LP % " " " "H% % %N !+ ' ' ' 'R % ( ( ( ( $    6 $    
 $    ( $      $    & '     '     ( + + + +" !+ + + + +$ % / / / /
 %     %     %    & F##*S//F F FP % & & & & % & & & & &     &     &      *       
 
 
 
      $ f8222222222222->( 8 8 867777778 s   H   H65H6