� I�g�h��v�dZddlZddlmZmZmZmZmZddlm Z m Z m Z m Z m Z mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm 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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9ddl:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRe efZSeefZTe!efZUe"efZVe#e$fZWe#e$e%fZXd�ZYd�ZZd �Z[d efd �Z\d �Z]efd �Z^d�Z_efd�Z`efd�Zadefd�Zbdefd�Zcefd�Zddefd�Zed�Zfefd�Zgefd�Zhefd�Ziefd�Zjefd�Zkefd�Zlefd�Zmefd�Znefd�Zoefd�Zpefd �Zqefd!�Zrefd"�Zsefd#�Ztefd$�Zud%�Zvefd&�Zwefd'�Zxefd(�Zyefd)�Zzd*�Z{efd+�Z|efd,�Z}efd-�Z~efd.�Zefd/�Z�efd0�Z�efd1�Z�efd2�Z�efd3�Z�efd4�Z�efd5�Z�efd6�Z�efd7�Z�efd8�Z�efd9�Z�ed:��Z�ed;��Z�d<�Z�efd=�Z�efd>�Z�efd?�Z�efd@�Z�efdA�Z�efdB�Z�dJdD�Z�dJdE�Z�dJdF�Z�dJdG�Z�edHkr6 ddl�m�cm�cm�Z�e�j~Z~e�jzZzdS#e�e�f$re�dI��YdSwxYwdS)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�<�|\}}|tvrdS|tvrdSdS)z2Check if either real or imaginary part is infiniteTF)�_infs��z�re�ims �c/home/asafur/pinokio/api/open-webui.git/app/env/lib/python3.11/site-packages/mpmath/libmp/libmpc.py� mpc_is_infrY)s*�� �F�B�� �U�{�{�4�4� �U�{�{�4�4� �5�c�<�|\}}|tvrdS|tvrdSdS)z9Check if either real or imaginary part is infinite or nanTF)� _infs_nanrTs rX� mpc_is_infnanr]0s*�� �F�B�� �Y���t�t� �Y���t�t� �5rZc ��|\}}t||��}|dr$|dztt|��|fi|��zdzS|dzt||fi|��zdzS)Nrz - �jz + )rr))rU�dps�kwargsrVrW�rss rX� mpc_to_strrc7sv�� �F�B�� ��C���B� �!�u�<��E�z�F�7�2�;�;��>�>�v�>�>�>��D�D��E�z�F�2�s�5�5�f�5�5�5��;�;rZFc�h�|\}}tt|||��t|||����S�N)�complexr)rU�strict�rndrVrWs rX�mpc_to_complexri?s3�� �F�B�� �8�B���,�,�h�r�6�3�.G�.G� H� H�HrZc�V�tjdkr\|\}}t|��tjjt|��zz}|dtjjzz}t |��S tt|d�����S#t$rt|��cYSwxYw)N)��rlT)rg) �sys� version_infor8� hash_info�imag�width�int�hashri� OverflowError)rUrVrW�hs rX�mpc_hashrvCs��� ��6�!�!����B� �R�L�L�3�=�-��� � �<� <�� ��C�M�'�'� (���1�v�v� � ���q��6�6�6�7�7� 7��� � � ���7�7�N�N�N� ���s�.B � B(�'B(c�2�|\}}|t|||��fSre�r)�rU�precrhrVrWs rX� mpc_conjugater{Ps"�� �F�B�� �w�r�4��%�%� %�%rZc��|tkSre)�mpc_zero)rUs rX�mpc_is_nonzeror~Ts �� ��=�rZc�^�|\}}|\}}t||||��t||||��fSre�r*�rU�wrzrh�a�b�c�ds rX�mpc_addr�W�;�� �D�A�q� �D�A�q� �1�a��s� #� #�W�Q��4��%=�%=� =�=rZc�4�|\}}t||||��|fSrer�)rU�xrzrhr�r�s rX� mpc_add_mpfr�\�$�� �D�A�q� �1�a��s� #� #�Q� &�&rZc�^�|\}}|\}}t||||��t||||��fSre�r+r�s rX�mpc_subr�`r�rZc�4�|\}}t||||��|fSrer�)rU�przrhr�r�s rX� mpc_sub_mpfr�er�rZc�P�|\}}t|||��t|||��fSre)r(�rUrzrhr�r�s rX�mpc_posr�i�.�� �D�A�q� �1�d�C� � �'�!�T�3�"7�"7� 7�7rZc�P�|\}}t|||��t|||��fSrerxr�s rX�mpc_negr�mr�rZc�L�|\}}t||��t||��fSre)r/)rU�nr�r�s rX� mpc_shiftr�qs&�� �D�A�q� �Q��?�?�I�a��O�O� +�+rZc�0�|\}}t||||��S)zEAbsolute value of a complex number, |a+bi|. Returns an mpf value.)r1r�s rX�mpc_absr�us!�� �D�A�q� �Q��4�� %� %�%rZc�0�|\}}t||||��S)z3Argument of a complex number. Returns an mpf value.)rIr�s rX�mpc_argr�{s�� �D�A�q� �Q��4�� %� %�%rZc�P�|\}}t|||��t|||��fSre)r3r�s rX� mpc_floorr��s.�� �D�A�q� �Q��c� "� "�I�a��s�$;�$;� ;�;rZc�P�|\}}t|||��t|||��fSre)r4r�s rX�mpc_ceilr���.�� �D�A�q� �A�t�S� !� !�8�A�t�S�#9�#9� 9�9rZc�P�|\}}t|||��t|||��fSre)r5r�s rX�mpc_nintr��r�rZc�P�|\}}t|||��t|||��fSre)r6r�s rX�mpc_fracr��r�rZc���|\}}|\}}t||��}t||��} t||��} t||��} t|| ||��} t| | ||��} | | fS)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*)rUr�rzrhr�r�r�r�r��q�r�srVrWs rX�mpc_mulr��sy�� �D�A�q� �D�A�q���1� � �A���1� � �A���1� � �A���1� � �A� ��A�t�S� !� !�B� ��A�t�S� !� !�B� �r�6�MrZc��|\}}t||��}t||��}t||||��}t||||��}t|d��} || fS�Nr)r,r+r/) rUrzrhr�r�r�r�r�rVrWs rX� mpc_squarer��sa�� �D�A�q���!� � �A���!� � �A���!�T�3���A� ��A�t�S� !� !�B� �1�a���B� �r�6�MrZc�\�|\}}t||||��}t||||��}||fSre)r,�rUr�rzrhr�r�rVrWs rX� mpc_mul_mpfr��s:�� �D�A�q� ��A�t�S� !� !�B� ��A�t�S� !� !�B� �r�6�MrZc�v�|\}}tt||||����}t||||��}||fS)zB Multiply the mpc value z by I*x where x is an mpf value. )r)r,)rUr�rzrhr�r�rVrWs rX�mpc_mul_imag_mpfr��sD�� �D�A�q� ���A�t�S�)�)� *� *�B� ��A�t�S� !� !�B� �r�6�MrZc�\�|\}}t||||��}t||||��}||fSre)r.)rUr�rzrhr�r�rVrWs rX� mpc_mul_intr��s:�� �D�A�q� �Q��4�� %� %�B� �Q��4�� %� %�B� �r�6�MrZc�v�|\}}|\}}|dz}tt||��t||��|��} tt||��t||��|��} tt||��t||��|��} t| | ||��t| | ||��fS�N� )r*r,r+r-) rUr�rzrhr�r�r�r��wp�mag�t�us rX�mpc_divr��s��� �D�A�q� �D�A�q� ���B� �'�!�Q�-�-���A���� 3� 3�C����!� � �g�a��l�l�B�/�/�A����!� � �g�a��l�l�B�/�/�A� �1�S��c� "� "�G�A�c�$�s�$;�$;� ;�;rZc�\�|\}}t||||��}t||||��}||fS)zCalculate z/p where p is real)r-r�s rX� mpc_div_mpfr��s:�� �D�A�q� ��A�t�S� !� !�B� ��A�t�S� !� !�B� �r�6�MrZc���|\}}tt||��t||��|dz��}t||||��}tt||||����}||fS)zCalculate 1/z efficientlyr��r*r,r-r))rUrzrhr�r��mrVrWs rX�mpc_reciprocalr��sg�� �D�A�q����!� � �W�Q�q�\�\�$�r�'�2�2�A� ��A�t�S� !� !�B� ���A�t�S�)�)� *� *�B� �r�6�MrZc��|\}}tt||��t||��|dz��}tt||��|||��}ttt||����|||��}||fS)z)Calculate p/z where p is real efficientlyr�r�) r�rUrzrhr�r�r�rVrWs rX� mpc_mpf_divr��sw�� �D�A�q����!� � �W�Q�q�\�\�4��7�3�3�A� ���1���q�$�� ,� ,�B� ����1���&�&��4�� 5� 5�B� �r�6�MrZc��d}d}|r:|dzr||z||zz ||z||zz}}|dz}||z||zz d|z|z}}|dz}|�:||fS)zgComplex integer power: computes (a+b*I)**n exactly for nonnegative n (a and b must be Python ints).rrrl�)r�r�r��wre�wims rX�complex_int_powr��s��� �C� �C� �� �q�5� ��1�u�s�1�u�}�c�!�e�c�!�e�m��C� ��F�A���s�Q�q�S�y�!�A�#�a�%�1�� �a��� �� ��8�OrZc ��|dtkrt||d||��Sttt ||dz��||dz��||��S)Nrrr�)r� mpc_pow_mpf�mpc_expr��mpc_log)rUr�rzrhs rX�mpc_powr��sW����t�u�}�}��1�a��d�D�#�.�.�.� �7�7�1�d�2�g�.�.��4��7�;�;�T�3� G� G�GrZc ��|\}}}}|dkrt|d|z||zz||��S|dkr+t||dz��}t|d|z|z||��Sttt ||dz��||dz��||��S)Nr�����r�)� mpc_pow_int�mpc_sqrtr�r�r�) rUr�rzrh�psign�pman�pexp�pbc�sqrtzs rXr�r��s�����E�4��s� �q�y�y��1�r�E�k�T�4�Z�8�$��D�D�D� �r�z�z���D��G�$�$���5�2��+��"4�d�C�@�@�@� �;�w�q�$�r�'�2�2�A�t�B�w�?�?��s� K� K�KrZc ��|\}}|tkrt||||��tfS|tkrmt||||��}|dz}|dkr |tfS|dkr t|fS|dkrt|��tfS|dkrtt|��fS|dkrtS|dkrt |||��S|dkrt |||��S|dkrt |||��S|dkr$t t|| |dz��||��S|\}}} } |\} } } }|r| }| r| } | | z }t|��}||t| |��zz}|dkrr|dkr||z}| } n| | z} | } t|| |��\}}t|t|| z��||��}t|t|| z��||��}||fSttt||dz��||dz��||��S) N�rrrlrkr�i'r�)rr@r)�mpc_oner�r�r�r��abs�maxr�rrrr�r�r�)rUr�rzrhr�r��v�asign�aman�aexp�abc�bsign�bman�bexp�bbc�de�abs_de� exact_sizerVrWs rXr�r��sL�� �D�A�q��E�z�z��1�a��s�+�+�U�2�2��E�z�z� ��1�d�C� (� (�� �Q��� ��6�6��e�8�O� �!�V�V��!�8�O� �!�V�V��1�:�:�u�$� $� �!�V�V��'�!�*�*�$� $��A�v�v�g�~��A�v�v�g�a��s�+�+�+��A�v�v�j��D�#�.�.�.��B�w�w�~�a��s�3�3�3��1�u�u�^�K��A�2�t�A�v�$>�$>��c�J�J�J���E�4��s���E�4��s� ��d�U�d� ��d�U�d� ���B� ��W�W�F��F�S��c�]�]�*�+�J��E��� ��6�6� �R�K�D��D�D� �r�c�N�D��D� ��t�Q�/�/���B� �"�c�!�D�&�k�k�4�� 5� 5�� �"�c�!�D�&�k�k�4�� 5� 5���2�v� � �;�w�q�$�r�'�2�2�A�t�B�w�?�?��s� K� K�KrZc��|\}}|tkrX|tkr||fS|dr'tt|��||��}t|fSt|||��}|tfS|dz}|dsutt ||f|��||��}t |d��} t| ||��}t |d��} t| |��} t || ||��}n�tt ||f|��||��}t |d��} t| ||��}t |d��} t| |��} t || ||��}|drt|��}t|��}||fS)z�Complex 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)rr0r)r*r�r/r-r+) rUrzrhr�r�rWrVr�r�r�r�r�s rXr�r�'s��� �D�A�q��E�z�z� ��:�:��q�6�M� �Q�4� ��'�!�*�*�d�C�0�0�B��2�;� ��!�T�3�'�'�B���;� � �b��B� �Q�4�� �W�a��V�R�(�(�!�R� 0� 0�� �a�� � �� �a��s� #� #�� �a��O�O�� �a��_�_�� �Q��4�� %� %��� �G�Q��F�B�'�'��B� /� /�� �a�� � �� �a��s� #� #�� �a��O�O�� �a��_�_�� �Q��4�� %� %�� �Q�4� �����B�����B� �r�6�MrZc�z�d}tt||||zz ����}tt||||zz ����} |d|zzd|z z}|j}|j} t t|����}t t| ����} n�#t $r~t ||��}t ||��}t |��} td| |��} t||f| tf|��\}} t|��}t| ��} YnwxYwd} |} |}t||| z��D]�}t|| |dz ��\}}t||dz | z|z |z ��}t||dz | z|z |z ��}||z||zz||zz }t|||z ��}t|||z ��}||z||zz|z }| |z||zz|z }||z|z}||z|z}||dz t||| z ��zz|z}||dz t| || z ��zz|z} |} ��|| fS)N�2y�?g�?rr�)rrr�realrprrtrr2r�rrrr�r)r�r�r�rz�start�a1�b1r�rVrW�fn�nth�extra�prevp�extra1r��re2�im2�r4�ap�bp�rec�imc�reb�imbs rX�mpc_nthroot_fixedrKs��� �E� �V�A�t�a��g�~� &� &� '� '�B� �V�A�t�a��g�~� &� &� '� '�B� � �"�r�'�\�S��U� #�� �V�� �V�� ��R���\�\�� ��R���\�\���� ���� �b�%� � �� �b�%� � �� �a�[�[���1�b�%�(�(���"�b��C��<��7�7���B� �B�Z�Z�� �B�Z�Z�������� �E� �E� �F� ���U� � +� +����"�2�r�1�Q�3�/�/���S��S�1�Q�3��+��/�F�2�3�3���S�1�Q�3��+��/�F�2�3�3���#�g��C���Q��Z� 0�� �A�t�a�x� � �� �A�t�a�x� � ���C�x�"�s�(�"�q�(���s�S�y�2��8�#��)���a�x�B����a�x�B����Q�q�S�&��Q�u�W�-�-�-�-�� 1���Q�q�S�&��Q�u�W�-�-�-�-�� 1����� �r�6�Ms� AB�BD'�&D'c�V�|\}}|ddkr&|tkrt||||��}|tfS|dkr|dkrtS|dkrt||f||��S|dkrt t||f||��St ||f| |dzt |��}t t|||��S|dkr�td|dzz��}|\} } } } |\} }}}t||f|��}|d |dzd kr||d |dz|krgt||��}t||��}t||||��\}}d}t|| |z ||��}t|| |z ||��}||fSt|��}|dzdz}td||��}t||f|tf||��\}}t|d|d|d|d ||��}t|d|d|d|d ||��}||fS) zu Complex n-th root. Use Newton method as in the real case when it is faster, otherwise use z**(1/n) rrlrr��r�g333333�?r������i����rk)rrPr�r�r�� mpc_nthrootrrrr�rrrrr2r�r)rUr�rzrhr�r�rV�inverse�prec2r�r�r�r�r�r�r�r��pf�af�bfrWr�r�r�s rXrrrs[�� �D�A�q���t�q�y�y�Q�%�Z�Z� ��A�t�S� )� )���E�{���1�u�u� ��6�6��N� ��6�6��A�q�6�4��-�-� -� ��7�7��7�Q��F�D�#�6�6� 6��q�!�f�q�b�$�q�&�.��2E�F�F���w���s�3�3�3��B�w�w��C�4�"�9�%�&�&��!"���t�T�3�!"���t�T�3� �a��U�D� !� !�� �b�6�B�r�F�?�S� � �b��f�r�"�v�o��&<�&<��!�U�#�#�B��!�U�#�#�B�&�r�2�q�%�8�8�F�B���E��b�5�&��,��s�;�;�B��b�5�&��,��s�;�;�B��r�6�M� �!���B� ��G�b�L�E� �q�"�e� $� $�C� �a��V�c�5�\�5�#� 6� 6�F�B�� �2�a�5�"�Q�%��A���1��t�S� 9� 9�B� �2�a�5�"�Q�%��A���1��t�S� 9� 9�B� �r�6�MrZc�&�t|d||��S)z Complex cubic root. rk)r�rUrzrhs rX�mpc_cbrtr�s�� �q�!�T�3� '� '�'rZc�0�|\}}|tkrt|||��S|tkrt|||��tfSt||dz|��}t||dz|��\}}t||||��}t||||��} || fS)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�)rr=r;r,) rUrzrhr�r�r�r�r�rVrWs rXr�r��s��� �D�A�q��E�z�z��1�d�C�(�(�(��E�z�z��q�$��$�$�e�+�+� �!�T�!�V�S� !� !�C� �q�$�q�&�#� &� &�D�A�q� ��a��s� #� #�B� ��a��s� #� #�B� �r�6�MrZc�h�t|d|d||��}t|||��}||fS)Nrr)rAr�rys rXr�r��s7�� �q��t�Q�q�T�4�� -� -�B� ��D�#� � �B� �r�6�MrZc�X�|\}}|tkrt|||��tfS|tkrt|||��tfS|dz}t||��\}}t ||��\}} t ||||��} t || ||��} | t | ��fS)aSComplex 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.�)rrDrJr=r>r,r)� rUrzrhr�r�r�r�r��ch�shrVrWs rX�mpc_cosr�s��� �D�A�q��E�z�z��q�$��$�$�e�+�+��E�z�z���4��%�%�u�,�,� ���B� �q�"� � �D�A�q� �1�b� !� !�F�B�� ��B��c� "� "�B� ��B��c� "� "�B� �w�r�{�{�?�rZc�>�|\}}|tkrt|||��tfS|tkrtt|||��fS|dz}t||��\}}t ||��\}} t ||||��} t || ||��} | | fS)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)rrErKr=r>r,rs rX�mpc_sinr�s��� �D�A�q��E�z�z��q�$��$�$�e�+�+��E�z�z��h�q�$��,�,�,�,� ���B� �q�"� � �D�A�q� �1�b� !� !�F�B�� ��B��c� "� "�B� ��B��c� "� "�B� �r�6�MrZc��|\}}|\}}}}|\} } } } |tkrt|||��tfS|tkrtt|||��fS|dz} t|d��}t|d��}t || ��\}}t || ��\}}t ||| ��}t||||��}t||||��}||fS)zcComplex tangent. Computed as tan(a+bi) = sin(2a)/M + sinh(2b)/M*i where M = cos(2a) + cosh(2b).�r)rr?rLr/r=r>r*r-)rUrzrhr�r�r�r�r�r�r�r�r�r�r�r�r�rrr�rVrWs rX�mpc_tanr�s��� �D�A�q���E�4��s���E�4��s��E�z�z�'�!�T�3�/�/��6�6��E�z�z�%��!�T�3�!7�!7�7�7� ���B��!�Q���A��!�Q���A� �q�"� � �D�A�q� �1�b� !� !�F�B�� �!�R�� � �C� ��C��s� #� #�B� ��S�$�� $� $�B� �r�6�MrZc��|\}}|tkrt|||��tfSt|t|dz��|dz��}|tkrt |||��tfS|dz}t ||��\}}t ||��\}} t||||��} t|| ||��} | t| ��fS�Nrr)rrFr,r:rJrBr>r)rs rX� mpc_cos_pir�s��� �D�A�q��E�z�z��!�T�3�'�'��.�.���6�$�q�&�>�>�4��6�*�*�A��E�z�z���4��%�%�u�,�,� ���B� �!�R� � �D�A�q� �1�b� !� !�F�B�� ��B��c� "� "�B� ��B��c� "� "�B� �w�r�{�{�?�rZc��|\}}|tkrt|||��tfSt|t|dz��|dz��}|tkrtt |||��fS|dz}t ||��\}}t ||��\}} t||||��} t|| ||��} | | fSr)rrGr,r:rKrBr>rs rX� mpc_sin_pir s��� �D�A�q��E�z�z��!�T�3�'�'��.�.���6�$�q�&�>�>�4��6�*�*�A��E�z�z��h�q�$��,�,�,�,� ���B� �!�R� � �D�A�q� �1�b� !� !�F�B�� ��B��c� "� "�B� ��B��c� "� "�B� �r�6�MrZc���|\}}|tkr&t|||��\}}|tft|ffS|tkr&t|||��\}}|tf|tffS|dz} t|| ��\}}t|| ��\}}t||||��} t||||��} t||||��} t||||��} | t | ��f| | ffS)Nr)rr>r=r,r))rUrzrhr�r�rrr�r�r��cre�cim�sre�sims rX� mpc_cos_sinr&s�� �D�A�q��E�z�z��q�$��,�,���B��E�{�U�B�K�'�'��E�z�z��1�d�C�(�(���1��5�z�A�u�:�%�%� ���B� �q�"� � �D�A�q� �1�b� !� !�F�B�� �!�R��s� #� #�C� �!�R��s� #� #�C� �!�R��s� #� #�C� �!�R��s� #� #�C� ����� ��c� � *�*rZc�(�|\}}|tkr&t|||��\}}|tf|tffSt|t|dz��|dz��}|tkr&t |||��\}}|tft|ffS|dz} t|| ��\}}t || ��\}}t||||��} t||||��} t||||��} t||||��} | t | ��f| | ffSr)rrBr,r:r>r))rUrzrhr�r�r�r�rrr�r"r#r$r%s rX�mpc_cos_sin_pir(%s!�� �D�A�q��E�z�z��a��s�+�+���1��5�z�A�u�:�%�%���6�$�q�&�>�>�4��6�*�*�A��E�z�z��q�$��,�,���B��E�{�U�B�K�'�'� ���B� �!�R� � �D�A�q� �1�b� !� !�F�B�� �!�R��s� #� #�C� �!�R��s� #� #�C� �!�R��s� #� #�C� �!�R��s� #� #�C� ����� ��c� � *�*rZc�L�|\}}t|t|��f||��S)z:Complex hyperbolic cosine. Computed as cosh(z) = cos(z*i).)rr)r�s rX�mpc_coshr*7s'�� �D�A�q� �A�w�q�z�z�?�D�#� .� .�.rZc�@�|\}}t||f||��\}}||fS)z;Complex hyperbolic sine. Computed as sinh(z) = -i*sin(z*i).)rr�s rX�mpc_sinhr,<�-�� �D�A�q� �A�q�6�4�� %� %�D�A�q� �a�4�KrZc�@�|\}}t||f||��\}}||fS)z>Complex hyperbolic tangent. Computed as tanh(z) = -i*tan(z*i).)rr�s rX�mpc_tanhr/Br-rZc��|\}}|dz}tt||��t|��f}tt||��|f}t ||��}t ||��} t || ||��\}}tt |d����t |d��f} | dtkrt|��r| dtf} | S)Nrr�rr) r*r r)r+r�r�r/r%rYr) rUrzrhr�r�r�r��y�l1�l2r�s rX�mpc_atanr4Is��� �D�A�q� ���B���a����g�a�j�j�(�A���a����a��A� ��B���B� ��B���B� �2�r�4�� %� %�D�A�q�� �!�B��� � �)�A�b�/�/�1�A� ��t�t�|�|� �1� � �|� �q�T�5�M�� �HrZg�:pΈ�?g�?c �0 �|\}}|dz}|tk�rttt|��|��}|ds6|dkrt |||��tfSt |||��tfS|drdt ||��}tt|��||��} |dkr|t| ��fStt|d����| fSt|||��} |dkr t| fSt ||��}t|d��t| ��fSdx} } |drt|��}d} |drt|��}d} tt||��}tt||��} t| ||��} t|||��}tt| ||��d��}t|||��}t|||��}tt||��ds*|dkrt ||��}�n�t ||��}�n�t|||��}|ds�t|t| | |��|��} t|||��}tt|t| ||��|��d��}|dkr.ttt!||��||��|��}n�tt|t!||��|��|��}n�t|t| | |��|��} t|t|||��|��}tt| ||��d��}t|t!||��|��}|dkr tt|||��|��}ntt|||��|��}tt"||��d�st|t| | |��|��}t|��drBt|||��}t|||��}tt|||��d��}n0t|||��}tt|||��d��}t|t|t|��|��}t%ttt|t!||��|��|��|��}nRt!tt|||��t|��|��}t%t|||��|��}| r4|dkrtt |��||��}nt|��}| s|dkrt|��}| r|dkrt|��}t'|d|d|d|d||��}t'|d|d|d|d||��}||fS)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�rr�rrlrk)rr+r r'rNrMr:rOr)r/r*r1r-r,�beta_crossoverrHr0�alpha_crossoverr<r)rUrzrhr�r�r�r��am�pir�r�r�r�r�r��alpha�beta�b2rV�Axr��c1�c2�Am1rWs rX� acos_asinrA_s���" �D�A�q� ���B��E�z�z� �T�7�1�:�:�r� *� *���!�u� 9��A�v�v���4��-�-�u�4�4���4��-�-�u�4�4���t� 9��D�#�&�&���g�a�j�j�$��4�4����6�6��w�q�z�z�>�)�"�9�R��#4�#4�5�5�q�8�8��a��s�+�+����6�6� �!�8�O���c�*�*�B�$�R��,�,�g�a�j�j�8�8���E�E���t�� �A�J�J������t�� �A�J�J���� ��q�"� � �B� ��q�"� � �B��"�a����A��"�a����A� �g�a��B�'�'�� ,� ,�E� �1�e�R� � �D� ��1�b� � �B� �>�4�� ,� ,�Q� /�&6� ��6�6��$��#�#�B�B��$��#�#�B�B��U�A�r� "� "���!�u� 6� ��G�A�r�2�.�.��3�3�A���2�r�"�"�A��7�2�w�q�!�R�'8�'8�"�=�=�r�B�B�B��A�v�v��g�h�r�2�&6�&6��2�>�>��C�C����g�a��"�b�)9�)9�2�>�>��C�C��� ��G�A�r�2�.�.��3�3�A���G�A�r�2�.�.��3�3�A��7�1�a��,�,�b�1�1�B���H�R��,�,�b�1�1�B��A�v�v��g�b�!�R�0�0�"�5�5����g�a��R�0�0�"�5�5�� �?�E�2� .� .�q� 1�1� �R���B��+�+�R� 0� 0�� �2�;�;�q�>� 5���B��#�#�B���R��$�$�B��G�B��B�/�/��4�4�C�C���B��#�#�B��G�B��B�/�/��4�4�C� �S�'�%��r�2�2�B� 7� 7�� �W�T�7�3���R�0@�0@�"�#E�#E�r�J�J�B� O� O����g�g�e�U�B�7�7��r�B�B�B� G� G�� �W�U�B��+�+�R� 0� 0�� �� ��6�6������R��,�,�B�B�����B� ��Q�!�V�V� �R�[�[�� ���a��� �R�[�[�� �2�a�5�"�Q�%��A���1��t�S� 9� 9�B� �2�a�5�"�Q�%��A���1��t�S� 9� 9�B� �r�6�MrZc�&�t|||d��S�Nr�rAr s rX�mpc_acosrE���� �Q��c�1� %� %�%rZc�&�t|||d��Sr�rDr s rX�mpc_asinrH�rFrZc�t�|\}}t|t|��f||��\}}t|��|fSre)rHr)r�s rX� mpc_asinhrJ�s:�� �D�A�q� �a�����_�d�C� 0� 0�D�A�q� �1�:�:�q�=�rZc��t|||��\}}|ds |tkrt|��|fS|t|��fSrC)rErr)r�s rX� mpc_acoshrL�sM�� �A�t�S� !� !�D�A�q���t��q�E�z�z��q�z�z�1�}���'�!�*�*�}�rZc�D�|dz}t|t|��}tt||��}t||��}t||��}t t|||��d��}|dt krt |��rt|df}|S)Nrr�rr)r�r�r�r�r�r%rYr)rUrzrhr�r�r�r�s rX� mpc_atanhrN�s��� ���B���7�B���A����B���A���2���A���2���A��'�!�Q��#�#�R�(�(�A� ��t�t�|�|� �1� � �|� �A�a�D�M�� �HrZc��|\}}|tkrt|||��tfStt|d|dz��t|d|dz����}||zdz}t |��}t t |d��t|��}t|tf||��} t||��} t| | |��} t| | |��} t| |||��} | S)Nrlrkr�r) rrQr�r�rCr*r/r&r�rr�r�r�) rUrzrhrVrW�sizer�r�r�r�r�s rX� mpc_fibonaccirQ s��� �F�B�� �U�{�{��b�$��,�,�e�4�4� �s�2�a�5��A��;����R��U�2�a�5�[�!1�!1� 2� 2�D� ���r� �B��� � �A�� �!�Q�����+�+�A���E� �A�r�"�"�A��1�b���A���1�b���A���1�b���A��A�q�$��$�$�A� �HrZ�fc��t�re�r9�r�rzrhs rX�mpf_expjrV��� �rZc�`�|\}}|tkrt|||��S|tkr%tt|��||��tfStt|��|dz��}t||dz��\}}t ||||��}t ||||��}||fSr�)rr=r;r)r,)rUrzrhrVrW�eyr�r�s rX�mpc_expjrZs��� �F�B�� �U�{�{��2�t�S�)�)�)� �U�{�{��w�r�{�{�D�#�.�.��5�5� �����d�2�g� &� &�B� �r�4��7� #� #�D�A�q� ��Q��c� "� "�B� ��Q��c� "� "�B� �r�6�MrZc��t�rerTrUs rX� mpf_expjpir\(rWrZc���|\}}|tkrt|||��S|\}}}}|dz} |r| td||z��z } tt t | ��|| ����}|tkrt |||��tfSt ||dz��} t||dz��\} } t | | ||��}t | | ||��}||fS)Nr�r)rrBr�r)r,r:r;) rUrzrhrVrW�sign�man�exp�bcr�rYr�r�s rX� mpc_expjpirb+s��� �F�B�� �U�{�{��b�$��,�,�,���D�#�s�B� �b��B� �� �c�!�S��V�n�n��� ������R��,�,� -� -�B� �U�{�{��r�4��%�%�u�,�,� ��T�"�W� � �B� �"�d�2�g� &� &�D�A�q� ��Q��c� "� "�B� ��Q��c� "� "�B� �r�6�MrZ�sagez&Warning: Sage imports in libmpc failed)rR)��__doc__rm�backendrrrrr�libmpfr r r r r rrrrrrrrrrrrrrrrrrr r!r"r#r$r%r&r'r(r)r*r+r,r-r.r/r0r1r2r3r4r5r6r7r8r9� libelefunr:r;r<r=r>r?r@rArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQr�r}�mpc_two�mpc_halfrSr\rYr]rcrirvr{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�rrrr�r�rrrrr r&r(r*r,r/r4r6r7rArErHrJrLrNrQrVrZr\rb�sage.libs.mpmath.ext_libmp�libs�mpmath� ext_libmp�_lbmp� ImportError�AttributeError�printr�rZrX�<module>rrs� ���� � � � �=�=�=�=�=�=�=�=�=�=�=�=�=�=� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ����������������������������������������������������� ��+�� �%�<�� ��+�� �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�5H6
Memory