� I�gU����dZddlZddlmZddlmZddlmZmZmZmZm Z m Z ddl 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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8ddl9m:Z:e d krd Z;nd Z;d Z<e d krd Z=nd Z=dZ>iZ?dZ@iZAdZBdZCiZDdZEdZFdZGiZHddgZIedeeB��dz��D]!ZJeIeKdeJzeB��dzgdeJdz zzz ZI�"d�ZLd�ZMd�ZNd�ZOdXd�ZPeLd���ZQeLd���ZR ed��ZSed ��ZTed!��ZUed"��ZVd#�ZWeLdYd$���ZXd%�ZYd&�ZZeLd'���Z[eLd(���Z\eMe\��Z]eMeX��Z^eMe[��Z_eMeY��Z`eMeQ��ZaeMeR��ZbeLd)���ZceLd*���ZdeMed��ZeeMec��Zfefd+�Zgd,�Zhd-�Ziefd.�Zjefd/�ZkdZd0�Zld1�Zmd2�Znd[d3�Zod4�Zpefd5�Zqd6�Zrd7�Zsd8�Ztd9�Zud:�Zvefd;�Zwefd<�Zxefd=�Zyefd>�Zzefd?�Z{efd@�Z|efdA�Z}efdB�Z~d[dC�ZdD�Z�dE�Z�dF�Z�efdG�Z�edfdH�Z�dI�Z�eddfdJ�Z�efdK�Z�efdL�Z�efdM�Z�efdN�Z�efdO�Z�efdP�Z�efdQ�Z�efdR�Z�efdS�Z�dZdT�Z�dZdU�Z�e dVkrg ddl�m�cm�cm�Z�e�j4Z4e�j�Z�e�jqZqe�j�Z�e�j�Z�e�jgZge�j�Z�e�j�Z�e�jlZldS#e�e�f$re�dW��YdSwxYwdS)\a( This module implements computation of elementary transcendental functions (powers, logarithms, trigonometric and hyperbolic functions, inverse trigonometric and hyperbolic) for real floating-point numbers. For complex and interval implementations of the same functions, see libmpc and libmpi. �N)�bisect�)�xrange)�MPZ�MPZ_ZERO�MPZ_ONE�MPZ_TWO�MPZ_FIVE�BACKEND)-� round_floor� round_ceiling� round_down�round_up� round_nearest� round_fast� ComplexResult�bitcount�bctable�lshift�rshift� giant_steps� sqrt_fixed�from_int�to_int� from_man_exp�to_fixed�to_float� from_float� from_rational� normalize�fzero�fone�fnone�fhalf�finf�fninf�fnan�mpf_cmp�mpf_sign�mpf_abs�mpf_pos�mpf_neg�mpf_add�mpf_sub�mpf_mul�mpf_div� mpf_shift� mpf_rdiv_int� mpf_pow_int�mpf_sqrt�reciprocal_rnd� negative_rnd� mpf_perturb� isqrt_fast)�ifib�python�Xi�i����i�i� � �i� ���c�^��d�_d�_�fd�}�j|_�j|_|S)z� Decorator for caching computed values of mathematical constants. This decorator should be applied to a function taking a single argument prec as input and returning a fixed-point value with the given precision. �����Nc����j}||kr �j||z z St|dzdz��}�|fi|���_|�_�j||z z S)Ng�������?� )� memo_prec�memo_val�int)�prec�kwargsrG�newprec�fs ��f/home/asafur/pinokio/api/open-webui.git/app/env/lib/python3.11/site-packages/mpmath/libmp/libelefun.py�gzconstant_memo.<locals>.g^sl����K� � �9� � ��:�)�D�.�1� 1��d�4�i��l�#�#���Q�w�)�)�&�)�)�� ��� ��z�g�d�l�+�+�)rGrH�__name__�__doc__)rMrOs` rN� constant_memorSUsE����A�K��A�J�,�,�,�,�,���A�J�� �A�I� �HrPc�8��tf�fd� }�j|_|S)z� Create a function that computes the mpf value for a mathematical constant, given a function that computes the fixed-point value. Assumptions: the constant is positive and has magnitude ~= 1; the fixed-point function rounds to floor. c���|dz}�|��}|ttfvr|dz }td|| t|��||��S)Nr?rr)rr r r)rJ�rnd�wp�v�fixeds �rNrMzdef_mpf_constant.<locals>.frsR��� �B�Y�� �E�"�I�I�� �8�]�+� +� +� ��F�A���A��s�H�Q�K�K��s�;�;�;rP)rrR)rYrMs` rN�def_mpf_constantrZjs6����<�<�<�<�<�<� � �A�I� �HrPc��||z dkr=td|zdz��}|s|dzrt||dzz|fSt ||dzz|fS||zdz}t||||��\}}}t||||��\} } } | |z|| zz|| z|| zfS)NrrB�)rr�bsp_acot) �q�a�b� hyperbolic�a1�m�p1�q1�r1�p2�q2�r2s rNr]r]{s����1�u��z�z� ��1��q��\�\�� � +��1�� +��B��A��I�r�)� )��8�R�!�Q�$�Y��*� *� �1��q��A��!�Q��:�.�.�J�B��B��!�Q��:�.�.�J�B��B� �b�5�2�b�5�=�"�R�%��B�� &�&rPc��td|ztj|��z dz��}t|d||��\}}}||z|z||zzS)z� Compute acot(a) or acoth(a) for an integer a with binary splitting; see http://numbers.computation.free.fr/Constants/Algorithms/splitting.html �ffffff�?r?r)rI�math�logr])r_rJra�N�pr^�rs rN� acot_fixedrq�sW�� �D�4�K���� � � #�b� (�)�)�A��q�!�A�z�*�*�G�A�q�!� �q�S�4�K�1�Q�3� �rPFc��d}t}|D]9\}}|t|��tt|��||z|��zz }�:||z S)z� Evaluate a Machin-like formula, i.e., a linear combination of acot(n) or acoth(n) for specific integer values of n, using fixed- point arithmetic. The input should be a list [(c, n), ...], giving c*acot[h](n) + ... rF)rrrq)�coefsrJra� extraprec�sr_r`s rN�machinrv�sZ���I��A��E�E���1� �S��V�V�j��Q����i���D�D� D�D��� ��N�rPc�(�tgd�|d��S)zz Computes ln(2). This is done with a hyperbolic Machin-type formula, with binary splitting at high precision. ))��)�����i�)r=i-"T�rv�rJs rN� ln2_fixedr}�s�� �3�3�3�T�4� @� @�@rPc�(�tgd�|d��S)zN Computes ln(10). This is done with a hyperbolic Machin-type formula. ))�.�)�"�1)r?�Tr{r|s rN� ln10_fixedr��s�� �1�1�1�4�� >� >�>rPiqc�i�-~ i@� � c��||z dkrVtd|zdz d|zdz zd|zdz z��}|dztdzzdz}d|z|ztt|zzz}nh|r|dkrt d ||��||zdz}t |||dz|��\}} } t |||dz|��\} } } | | z}|| z}| | z| |zz}|||fS) z� Computes the sum from a to b of the series in the Chudnovsky formula. Returns g, p, q where p/q is the sum as an exact fraction and g is a temporary value used to save work for recursive calls. r��rBr\�rD�z binary splitting)r�CHUD_C�CHUD_A�CHUD_B�print� bs_chudnovsky)r_r`�level�verboserOror^�mid�g1rdre�g2rgrhs rNr�r��s �� ��s�a�x�x� ��1��Q���1��Q����1��Q��'� (� (�� �q�D�6�1�9� �� "�� �!�G�a�K�6�&��(�?� +��� � .�u�q�y�y� �&��1� -� -� -���s�Q�h��"�1�c�5��7�G�<�<� ��B��"�3��5��7�G�<�<� ��B�� �r�E�� �r�E�� �r�E�B�r�E�M�� �a��7�NrPc��t|dz dz dz��}|rtd|��td|d|��\}}}ttd|zz��}|tz|z|t |zzt zz}|S)z� Compute floor(pi * 2**prec) as a big integer. This is done using Chudnovsky's series (see comments in libelefun.py for details). g��v O� @gbi�],@rBzbinary splitting with N =r)rIr�r�r8r�r��CHUD_D) rJr�� verbose_basernrOror^�sqrtCrXs rN�pi_fixedr��s��� �D�� �l� *�Q� .�/�/�A��.� �)�1�-�-�-��A�q�!�W�-�-�G�A�q�!� �v��$��'� (� (�E� �&����!�F�1�H�*�f�,�-�A� �HrPc�&�t|��dzS)N�)r�r|s rN� degree_fixedr��s�� �D�>�>�3� �rPc��||z dkrtt|��fS||zdz}t||��\}}t||��\}}||z|z||zfS)ze Sum series for exp(1)-1 between a, b, returning the result as an exact fraction (p, q). rrB)rr�bspe)r_r`rcrdrergrhs rNr�r��sf��  ��s�a�x�x���A����� �1��q��A� �!�Q�Z�Z�F�B�� �!�Q�Z�Z�F�B�� �b�5��8�R��U�?�rPc��td|ztj|��z dz��}td|��\}}||z|z|zS)z� Computes exp(1). This is done using the ordinary Taylor series for exp, with binary splitting. For a description of the algorithm, see: http://numbers.computation.free.fr/Constants/ Algorithms/splitting.html g�������?r?r)rIrlrmr�)rJrnror^s rN�e_fixedr� sK�� �C��H�T�X�d�^�^� #�b� (�)�)�A� ��!�9�9�D�A�q� �q�S�4�K�!� �rPc�`�|dz }ttd|zz��t|zz}|dz S)z2 Computes the golden ratio, (1+sqrt(5))/2 rFrB� )r8r r)rJr_s rN� phi_fixedr�s5��  �B�J�D��8�a��f�%�&�&�'�T�/�:�A� ��7�NrPc ��|dz}tttt|��d��|��|dz ��S)NrFr)r�mpf_logr1�mpf_pi)rJrWs rN�ln_sqrt2pi_fixedr�*s9�� ���B� �G�I�f�R�j�j�!�4�4�b�9�9�4��6� B� B�BrPc�<�tt|��|��S�N)rr�r|s rN� sqrtpi_fixedr�0s�� �h�t�n�n�d� +� +�+rPc �F�|\}}}}|\}} } } |r| dkrtd���| dkrt|d|z| | zz||��S| dkr�| dkrG|r4ttt ||dzt |��||��St |||��S|r0tt ||dzt |��| ||��Stt ||dz|��| ||��St ||dz|��} tt|| ��||��S)zV Compute s**t. Raises ComplexResult if s is negative and t is fractional. rz,negative number raised to a fractional powerrDrrF) rr3r0r"r4r5r��mpf_expr/) ru�trJrV�ssign�sman�sexp�sbc�tsign�tman�texp�tbc�cs rN�mpf_powr�>s_�� ��E�4��s���E�4��s� �L������J�K�K�K� �q�y�y��1�r�E�k�T�4�Z�8�$��D�D�D� �r�z�z� �1�9�9�� 5��t�X�a��b��"�3�'�&)�&)�*.��5�5�5��A�t�S�)�)� )�� <�"�8�A�t�B�w�"�3�'�$)�$)�+/�%��s�<�<�<��x��4��7�C�8�8�$��c�J�J� J� ��4��7�C� � �A� �7�1�a�=�=�$�� ,� ,�,rPc���|dkr||zdfSt|��}d}d|dt|��zzdzz}t\}}}} |dzrR||z}||z}| |dz z } | tt|| z ��z} | |kr|| |z z }|| |z z }|} |dz}|snP||z}||z}||zdz }|tt||z ��z}||kr|||z z }|||z z }|}|dz}��||fS)z�n-th power of a fixed point number with precision prec Returns the power in the form man, exp, man * 2**exp ~= y**n rBrr�r)rr"rrI) �y�nrJ�bc�exp�workprec�_�pm�pe�pbcs rN� int_pow_fixedr�ZsW��  �A�v�v��!��a�x�� �!���B� �C��D�1�X�a�[�[�=�(�1�,�-�H��N�A�r�2�s�� �q�5� ��A��B��C��B� �2��6�M�C����B�#�I���/�/�C��X�~�~��C��L�)���c�H�n�$���� ��F�A�� �� �a�C���#�g�� �"�W�q�[�� �'�#�a�2�g�,�,�'� '�� ��=�=��b��k�"�A� �2��=� �C��B� ��F��+�, �r�6�MrPc�\�d} t||||zz ��}tt|d|z z����}n`#t$rSt ||��}t |��}t d||��}t |||��}t|��}YnwxYwd}|} |} t|||z��D]u} t||dz | ��\} } t| |dz | z| z | z | z ��}t|d| z|z | z��|z}||dz t|| | z ��zz|z}| } �v|S)N�2g�?rrFrB) rrrI� OverflowErrorrr2r�rrr�r)r�r�rJ�exp1�start�y1rp�fn�extra�extra1�prevpror�r�ri�Bs rN� nthroot_fixedr��sf�� �E�� �A�t�a��g�~� &� &�� ��B��Q��K� � � !� !���� ���� �b�%� � �� �a�[�[�� �!�R�� '� '�� �B��E� "� "�� �1�I�I���� ���� �E� �F� �E� ���U� � +� +�����q�!�A�#�u�-�-���B� �B��1��e� �a��"�,�v�5� 6� 6�� �1�a��c�$�h�v�o� &� &�� *�� �!�A�#���1�U�7�+�+�+� +�a� /����� �Hs�8=�AB�Bc��|\}}}}|rtd���|s[|tkrtS|tkr!|dkrtS|dkrtStS|stS|dkrtStSd}|dkrZ|dkrtS|dkrt |||��S|dkrt t|||��St|}d}d} || z }| }|d kr�|d ks|td d |d zzz��kr�|dz} t|��} td| | ��} t|| | |��} t| d| d| d| d||��}|rt t||| z |��S|S|d|zz||zz } |dkr| | dzz } | | |zz } || z }d}||z}|dkrd}| }|r |||zz }n|||zz}t||��}d}||z|dz | zz |z|z }d}|r|dks|dkrd}n|dks|dkrd}t||z|| |��}t||||��}|rt t||| z |��S|S)zanth-root of a positive number Use the Newton method when faster, otherwise use x**(1/n) znth root of a negative numberrFrBrrDTr�r?i N��g�����L<@gףp= ��?rFr\�ur��drM)rr'r!r"r%r+r0r5rIrr2r�r rr�r)rur�rJrV�sign�manr�r�� flag_inverse� extra_inverse�prec2r��nthrp�shift�sign1�esr�r�� rnd_shifts rN� mpf_nthrootr��s�� ��D�#�s�B� �=��;�<�<�<� �� ��9�9��K� ��:�:��1�u�u�� ��A�v�v�� ��K�� ��K� �q�5�5��L�� ��L��1�u�u� ��6�6��K� ��6�6��1�d�C�(�(� (� ��7�7��4��D�#�.�.� .��S�!��� �� � � ��� �B���2�v�v�1��:�:���C�$��D��.�,@�(A�(A�!A�!A��r� �� �a�[�[���1�b�%�(�(�� �A�s�E�3� '� '�� �a��d�A�a�D�!�A�$��!��d�C� 8� 8�� � ��4��D��$6��<�<� <��H� �1�Q�3�J�$�q�&� !�E� �2�v�v� ��������a���� ��J�E� �E� �U��B� �A�v�v����S�� �� ��A�� ��� ��A�� �� ��e� � �C� �E� ��Y��!��U�{� "�Q� &�%� /�D��I��� �#�:�:������I�� �#�:�:������I� ��I� �q�%�� 6� 6�C��S�$��c�*�*�A����t�Q��]� 2�C�8�8�8��rPc�&�t|d||��S)zcubic root of a positive numberr\)r�)rurJrVs rN�mpf_cbrtr��s�� �q�!�T�3� '� '�'rPc��|tvrt|\}}||kr|||z z S|dz}|tkr?|�t|��}t|��}|||z z}t ||��||zz}n.t t t|��|dz��|��}|tkr ||ft|<|||z z S)z` Fast computation of log(n), caching the value for small n, intended for zeta sums. rFNr�) � log_int_cache�LOG_TAYLOR_SHIFTr}r�log_taylor_cachedrr�r�MAX_LOG_INT_CACHE) r�rJ�ln2�value�vprecrWrp�xrXs rN� log_int_fixedr�s���  �M���$�Q�'� ��u� �D�=�=��U�T�\�*� *� ���B� � ��� �;��B�-�-�C� �Q�K�K�� �"�Q�$�K�� �a�� $� $�q��u� ,��� �W�X�a�[�[�"�Q�$�/�/�� 4� 4��� ����r�7� �a�� ��D��>�rPc��d} ||zdz }|dkrt||z ��dkr|St||z��}|}|dz }�@)z^ Fixed-point computation of agm(a,b), assuming a, b both close to unit magnitude. rrr�r=)�absr8)r_r`rJ�i�anews rN� agm_fixedr�s]�� �A���!��a�x�� �q�5�5�S��4��[�[�1�_�_��H� �q��s�O�O�� �� �Q��� rPc�j�||z|z }|x}x}}|r||z|z }||z|z }||z }|�|t|zz }||z|dz z }|t||z��z|z }|x}x}}|r||z|z }||z|z }||z }|�t|z|dzz}||z|z }t|||��}t|��|z|zS)a* Fixed-point computation of -log(x) = log(1/x), suitable for large precision. It is required that 0 < x < 1. The algorithm used is the Sasaki-Kanada formula -log(x) = pi/agm(theta2(x)^2,theta3(x)^2). [1] For faster convergence in the theta functions, x should be chosen closer to 0. Guard bits must be added by the caller. HYPOTHESIS: if x = 2^(-n), n bits need to be added to account for the truncation to a fixed-point number, and this is the only significant cancellation error. The number of bits lost to roundoff is small and can be considered constant. [1] Richard P. Brent, "Fast Algorithms for High-Precision Computation of Elementary Functions (extended abstract)", http://wwwmaths.anu.edu.au/~brent/pd/RNC7-Brent.pdf rBr)rr8r�r�)r�rJ�x2rur_r`r�ros rN�log_agmr�)s��2 �A�#�$��B��N�A�N��A� �� �r�T�d�N�� �q�S�T�M�� �Q��� ���'�4�-��A� �1���Q���A� �:�a��g� � � ��%�A��M�A�M��A� �� �r�T�d�N�� �q�S�T�M�� �Q��� �� �$��1�a�4� �A� �1��t� �A��!�Q����A� �T�N�N�d� "�q� (�(rPc�R�t|��D]}t||z��}�t|z}||z |z||zz}|dk}|r| }||z|z }||z|z }|} |dz} ||z|z }d} |r$| || zz } | dz } | || zz } ||z|z }| dz } |�$| |z|z } | | zd|zz} |r| S| S)a: Fixed-point calculation of log(x). It is assumed that x is close enough to 1 for the Taylor series to converge quickly. Convergence can be improved by specifying r > 0 to compute log(x^(1/2^r))*2^r, at the cost of performing r square roots. The caller must provide sufficient guard bits. rr\r�rBr)rr8r) r�rJrpr��onerXr��v2�v4�s0�s1�krus rN� log_taylorr�Xs���A�Y�Y� � �� �q�$�w� � ��� �T�/�C� �C�%�$��!�C�%� �A� �q�5�D� �� �B�� �A�#�$��B� �R�%�D��B� �B� �A��B� �2��$��A� �A� �� �a�1�f� �� �Q��� �a�1�f� �� �r�T�d�N�� �Q��� �� �R�%�D��B� �B��A�a�C��A� ���r� � �HrPc���||tz z }t|}||z }||ftvrt||f\}}n,||tz z}t||d��}||ft||f<||z}||z}||z |z|z}||zt|z|zz}||z|z } | | z|z } |} |dz} || z|z }d} |r$| || zz } | dz } | || zz } || z|z }| dz } |�$| | z|z } | | zdz}||zS)zd Fixed-point computation of log(x), assuming x in (0.5, 2) and prec <= LOG_TAYLOR_PREC. r=r\r�rBr)r��cache_prec_steps�log_taylor_cacher�r )r�rJr�� cached_prec�dprecr_�log_ar�rXr�r�r�r�r�rus rNr�r�zsg�� �d�#�#�$�A�"�4�(�K� �$� �E� �;��+�+�+�#�A�{�N�3���5�5� �+� 0�0� 1���1�k�1�-�-��,-�u�:���K��(��%�K�A� �e�O�E� �a�%�D��Q��A� �d���D��A�-�.�A� �A�#�$��B� �R�%�D��B� �B� �A��B� �2��$��A� �A� �� �a��d� �� �Q��� �a��d� �� �r�T�d�N�� �Q��� �� �R�%�D��B� �B��1� �A� �1�9�rPc���|\}}}}|s6|tkrtS|tkrtS|tkrtS|rt d���|dz}|dkr,|stSt |t |��z| ||��S||z}t|��} | dkrmd| z } | rt|z|z } n|t|dz zz } t| ��} || z } | |kr)t| | | |z | | d��}t|| ||��S|| z }| dkr6t| ��|kr#t |t |��z| ||��S|tkr9tt|||z ��|��}|r||t |��zz }nZ| tz}||z }t!||��}|| z }t#t%||��|�� }||t |��zz}t || ||��S)zj Compute the natural logarithm of the mpf value x. If x is negative, ComplexResult is raised. zlogarithm of a negative numberr?rr�i')r!r&r%r'rrr}r�rrr r7�LOG_TAYLOR_PRECr�r�LOG_AGM_MAG_PREC_RATIOr1r�r)r�rJrVr�r�r�r�rW�mag�abs_magr�r�r�� cancellationr�rc� optimal_magr�s rNr�r��sA�� ��D�#�s�B� �"� ��:�:�e�|� ��9�9�T�k� ��9�9�T�k� �>��<�=�=�=� ���B� �a�x�x�� ��L��C� �"� � �-��s�D�#�>�>�>� �b�&�C��#�h�h�G� �!�|�|��'� �� � +��R�K�3�&�D�D��'�B�q�D�/�*�D��t�n�n���C�x� � �"� � ��%��w�r�z�3��S�A�A�A��q�%��s�3�3� 3� �,� �B����� �G� � �r� !� !���I�b�M�M� 1�B�3��c�B�B� B� �_��� �f�S�"�R�%�0�0�"� 5� 5�� � #� ��Y�r�]�]�"� "�A���c�1�1� � �#� �� �a��O�O�� � �|��� �X�a��_�_�b� )� )� )�� �Q�y��}�}�_��� ��B�3��c� *� *�*rPc ��|ds||}}|ds|ds5||cxkr tkr nntSt||fvrtStS|tkrt t |��||��S|tkrtStSt ||��}t ||��}d}t||||z��}t|td��}|d|dz} |tks | | dzkr1t||||zt|d|d��z ��}tt |||��d��S)z1 Computes log(sqrt(a^2+b^2)) accurately. rr?rFrBr\rD) r!r&r'r%r�r*r/r-r#�minr1) r_r`rJrV�a2�b2r��h2� cancelled� mag_cancelleds rN� mpf_log_hypotr�sV�� �Q�4���!�1�� �Q�4����t� ��A������������ ���1�v�~�~�� ��K� ��:�:��7�1�:�:�t�S�1�1� 1� ��9�9��K�� � ��1���B� ��1���B� �E� ��R��e�� $� $�B���E�2�&�&�I��a�L��1��-�M��E���]�e�V�Q�Y�6�6� �R��T�%�Z��B�q�E�"�Q�%�(8�(8�8� 9� 9�� �W�R��s�+�+�R� 0� 0�0rPc��|dkr+tjt||dz z ��dz ��}n'tjt|��d|zz ��}d}tt|dz��d|z z ��}d}t ||��D]^}||z }|||z z}t ||��\}}||z|z}|t |||z ��z |zt|z|dz|z zz} || z }|}�_t |||z ��S)N�d�5g@Cg@r�rB)rl�atanrIrr� cos_sin_fixedrr) r�rJrpr��extra_prW�cos�sin�tanr_s rN� atan_newtonrs"�� �s�{�{� �I�c�1�t�B�w�<�)�)�'�1� 2� 2��� �I�c�!�f�f�S�$�Y�&� '� '�� �E� �C��G� � � ��E�� *�+�+�A��G��%��&�&���� �g� �� �"�U�(�O�� ��B�'�'���S��b�y�S� ���&��D��G�$�$�$�� +�'�2�+�3��6�B�,�1O� P�� ��E����� �!�U�4�Z� � � rPc���dt|dz ��zdz}||z }||ftvrt||f\}}n+||tz z}t||��}||ft||f<||z ||z fS)Nrr?)r�atan_taylor_cache�ATAN_TAYLOR_SHIFTr)r�rJr�r�r_�atan_as rN�atan_taylor_get_cachedr"s��� ��$�q�&�!�!� "�b� (�E� �D�L�E� �5�z�&�&�&�%�a��h�/� ��6�6� �%�+�+� ,���Q��&�&��'(�&�k��!�U�(�#� ��J�&�E�/� *�*rPc�B�||tz z }t||��\}}||z }||z|dz|z ||z|z zt|zzzx}}|dz|z }||z|z } |dz} || z|z }d} |r$||| zz }| dz } | || zz } || z|z }| dz } |�$| |z|z } || z } || zS)NrBr\r�)rrr) r�rJr�r_rr�r�rXr�r�r�r�rus rN� atan_taylorr1s�� �t�%�%� &�A�&�q�$�/�/�I�A�v� �A��A��4�i�a��d�d�l�q��s�d�{�;�w�$��O� P�P�B�� �Q�$�$�,�B� �r�'�d� �B� �A��B� �R��D��A� �A� �� �a�1�f� �� �Q��� �a�1�f� �� ��V�� �� �Q��� �� �r�'�d� �B� �R��A� �A�:�rPc ��|stt||��d��Sttt|t|��d����S)NrD)r1r�r,r6)r�rJrVs rN�atan_infr!EsK�� �0����c�*�*�B�/�/�/� �9�V�D�,�s�*;�<�<�b�A�A� B� B�BrPc�z�|\}}}}|sQ|tkrtS|tkrtd||��S|tkrtd||��StS||z}||dzkrt|||��S| |dzkrt |d|z ||��S|dzt |��z}|dkrtd||��}d} nd} t||��} |r| } |tkrt| |��} nt| |��} | rt|��dz dz| z } |r| } t| | ||��S)Nrrr?�rBTF)r!r%r!r&r'r7r�r2r�ATAN_TAYLOR_PRECrrr�r) r�rJrVr�r�r�r�rrW� reciprocalr�r_s rN�mpf_atanr&Jsu����D�#�s�B� �� ��:�:�e�|� ��9�9�X�a��s�3�3�3� ��:�:�h�q�$��4�4�4�� � ��(�C� �T�"�W�}�}���d�C�(�(�(� �t�d�2�g�~�~��1�a��f�d�C�0�0�0� ���S��X�X� �B� �a�x�x� ��A�r� "� "��� � �� ���B���A� �� �B�� � ��� ��2� � ��� ��2� � ���&��r�l�l�A�o�q� �A� %�� �� �B�� ��B�3��c� *� *�*rPc ���|\}}}}|\}} } } | s�|tkr5|tkr*t|��dkrtSt||��S|tt fvrv|tt fvrtS|tkrt t||��d��Stt t|t|��d����StS|r7ttt|��||t|����S|so|tkrtS|tkrtS|t krt||��S|tkrtSt t||��d��Stt|||dz��|dz��} |r"tt|dz��| ||��St| ||��S)NrrDr�)r!r'r)r�r%r&r1r,r6� mpf_atan2r&r0r-r+) r�r�rJrV�xsign�xman�xexp�xbc�ysign�yman�yexp�ybc�tquos rNr(r(ms�����E�4��s���E�4��s� � � ��:�:�!�t�)�)���{�{�a���� ��$��$�$� $� ��u� � � ��T�5�M�!�!�� ��D�y�y� ���c�!2�!2�B�7�7�7��9�V�D�,�s�2C�%D�%D�b�I�I�J�J� J�� � �J��y�����Q��l�3�6G�H�H�I�I�I� � 0� ��9�9��K� ��9�9��L� ��:�:��$��$�$� $� ��:�:��L����c�*�*�B�/�/�/� �G�A�q�$�q�&�)�)�4��6� 2� 2�D� �(��v�d�1�f�~�~�t�T�3�7�7�7��t�T�3�'�'�'rPc �Z�|\}}}}||zdkr|ttfvrtd���|dz}t||��}t tt t t||��|��|��} t|| |��} tt| ||��d��S)Nrz%asin(x) is real only for -1 <= x <= 1�r) r"r#rr/r-r4r.r0r1r&� r�rJrVr�r�r�r�rWr_r`r�s rN�mpf_asinr5�s�����D�#�s�B� �#�v��z�z�a��e�}�,�,��C�D�D�D� ���B���1� � �A���h�w�t�Q��3�3�R�8�8�"�=�=�A���1�b���A� �X�a��s�+�+�Q� /� /�/rPc��|\}}}}||zdkr:|ttfvrtd���|tkrt||��S|dz}t ||��}t t t||��|��} t| tt||��|��} tt| ||��d��S)Nrz%acos(x) is real only for -1 <= x <= 1r3r) r"r#rr�r/r4r.r0r-r1r&r4s rN�mpf_acosr7�s�����D�#�s�B� �C�x�!�|�|� �T�5�M� !� !�� G�H�H� H� ��:�:��$��$�$� $� ���B���1� � �A����q�"�%�%�r�*�*�A���7�4��B�'�'��,�,�A� �X�a��s�+�+�Q� /� /�/rPc��|dz}|\}}}}||z}|dkr"|| krt|d|z ||��S|| z }ttt||��t|��|��} tt |��| |��} |r)t t| |t|����St| ||��S)Nr?�����r) r7r4r-r/r"r*r,r�r6) r�rJrVrWr�r�r�r�rr^s rN� mpf_asinhr:�s��� ���B���D�#�s�B� �b�&�C� �R�x�x� �"��9�9��q�!�D�&�$��4�4� 4� ��t� �� ����A����b�1�1�2�6�6�A���� � �A�r�"�"�A� �%��w�q�$� �S�(9�:�:�;�;�;��q�$��$�$�$rPc��|dz}t|t��dkrtd���tt t ||��t |��|��}tt |||��||��S)Nr3rDz acosh(x) is real only for x >= 1)r(r"rr4r-r/r#r�)r�rJrVrWr^s rN� mpf_acoshr<�sp�� ���B��q�$���2����>�?�?�?�����1���u�b�1�1�2�6�6�A� �7�1�a��$�$�d�C� 0� 0�0rPc ���|\}}}}|s#|r!|ttfvr|Std���||z}|dkr/|dkr|dkrttg|Std���|dz}|dkr|| krt ||||��S|| z }t |t|��} tt||��} ttt| | |��||��d��S)Nz&atanh(x) is real only for -1 <= x <= 1rrr3r9rD) r!r'rr%r&r7r-r"r.r1r�r0) r�rJrVr�r�r�r�rrWr_r`s rN� mpf_atanhr>�s ����D�#�s�B� �F�S�F� ��� � � ��H��D�E�E�E� �s�(�C� �Q�w�w� �!�8�8��q����%�=��&� &��D�E�E�E� ���B� �R�x�x� �"��9�9��q�$��c�2�2� 2� ��t� ����4����A���a����A� �W�W�Q��2�.�.��c�:�:�B� ?� ?�?rPc��|\}}}}|s|tkrtS|St||z��}|dkrD|dks|t|��kr+t t t |����||��S||zdz}t|��} tt| d��t|��} t| ||��} t||��} t| | |��} t| | |��} t| | ||��} | S)NrrFr?r)r&r'r�rrr9r�mpf_phir-r1r#r�� mpf_cos_pir0r.) r�rJrVr�r�r�r��sizerWr_r`r�rXs rN� mpf_fibonaccirC�s����D�#�s�B� �� ��:�:��K��� �s�2�v�;�;�D� �a�x�x� �"�9�9������.�.��D�����O�O�T�3�7�7� 7� ���r� �B��� � �A�� �!�Q�����+�+�A���1�b���A��1�b���A���1�b���A���1�b���A���1�d�C� � �A� �HrPc�(�|dkr| }d}nd}td|dzz��}t|��|z }td||z��}ddt|| ��zz}||z}|||z z}t|z}|dk} |tkrp||z|z x} } | | z|z } t x} }d}| r4| |dz |zz} | | z } |dz }| |dz |zz} || z }|dz }| | z|z } | �4| |z|z }| r || z |z}�n|| z|z}n�td|dzz��}||z|z x} } || g}t d|��D]#}|�|d| z|z ���$t g|z}d}| rZt |��D]:}| |dz |zz} | r|dzr||xx| zcc<n||xx| z cc<|dz }�;| |dz|z } | �Zt d|��D]}||||z|z ||<�t|��|z}|dkrDt||z||zz ��}|r||z }n||z}t |��D] }||z|z }� ||z S|dz }t |��D] }||z|z |z }�tt||z||zz ����}|r| }||z ||z fS) z� Taylor series for cosh/sinh or cos/sin. type = 0 -- returns exp(x) (slightly faster than cosh+sinh) type = 1 -- returns (cosh(x), sinh(x)) type = 2 -- returns (cos(x), sin(x)) rr��?rFrBg333333�?rkrD) rIr�maxr�EXP_SERIES_U_CUTOFFrr�append�sumr8r�)r�rJ�typer�rp�xmagr�rWr��altr�r_�x4r�r�r�r�r��xpowersr��sumsrurX�pshifts rN�exponential_seriesrQ�s��� �1�u�u� �B������� �C��c� �M���A� �A�;�;�� �D� �A�t�a�x���A� ��3�q�$��<�<�� �E� ���B��5�1�9��A� �R�-�C� �1�9�C� �!�!�!��A�#�"����Q���e��]�����R� ��� � �1�Q�3��'�M�A�2��7�2�A��F�A� �1�Q�3��'�M�A�2��7�2�A��F�A��2��"� �A�� ���e��]�� � ��R��#� �A�A��R��#� �A�A� ��D�$�J�� � ���A�#�"����Q���)����1��� 1� 1�A� �N�N�G�B�K��N�R�/� 0� 0� 0� 0��z�A�~�� ��� &��A�Y�Y� � ���q��s�A�g� ���/�1�q�5�/�$�q�'�'�'�Q�,�'�'�'�'�"&�q�'�'�'�Q�,�'�'�'��Q�����7�2�;��2�%�A� � &���1��� 1� 1�A��A�w�w�q�z�)�b�0�D��G�G� ��I�I��O�� �q�y�y� �q��s�c�2�g�� '� '�� � ��A��A�A��A��A����� � �A��1��� �A�A��E�z�� �A������� (� (�A��A�#�&��C�'�A�A� �s�C��G�q��s�?�+�+� ,� ,�� � ���A��5��A�u�H�%�%rPc�6�|tkrt||d��St|dz��}||z }t|zx}}d}||z|z x}}|r(||z}||z }|dz }||z}||z }|dz }||z|z }|�(||z|z }||z}|} |r||z|z }|dz}|�|| z S)z� Compute exp(x) as a fixed-point number. Works for any x, but for speed should have |x| < 1. For an arbitrary number, use exp(x) = exp(x-m*log(2)) * 2^m where m = floor(x/log(2)). rrErBr)�EXP_COSH_CUTOFFrQrIr) r�rJrpr�r�r�r_r�rur�s rN� exp_basecaserT>s���  �o���!�!�T�1�-�-�-� �D�#�I���A��A�I�D��$���B�� �A���c�d�]��A�� �� �a����q���!�q�&�!� �a����q���!�q�&�!� �r�T�d�N�� �� �Q�$�4��B� �R��A� �A� �� �q�S�T�M�� �Q��� �� ��6�MrPc��|tkrt||d��\}}||z||z fSt||��}t||zz|z}||fS)z( Computation of exp(x), exp(-x) r)rSrQrTr)r�rJ�cosh�sinhr_r`s rN�exp_expneg_basecaserXWsb�� �o���'��4��3�3� ��d��D�y�$�t�)�#�#��Q����A� �T�$�Y� �A�%�A� �a�4�KrPc�2�|tkrt||d��S|tz }||z }t|��}|tvrC|dtztz z}t|dtzd��\}}|dz |dz ft|<t|\}}t|z }||z}||z}|||zz}t |z} |} d} ||z|z } | r1| | z} | | z } | dz } | |z|z } | | z} | | z } | dz } | |z|z } | �1| |z| |zz |z | |z| |zz|z fS)z� Compute cos(x), sin(x) as fixed-point numbers, assuming x in [0, pi/2). For an arbitrary number, use x' = x - m*(pi/2) where m = floor(x/(pi/2)) along with quarter-period symmetries. rBrFr)�COS_SIN_CACHE_PRECrQ�COS_SIN_CACHE_STEPrI� cos_sin_cacher) r�rJ�precsr�r��w�cos_t�sin_t�offsetrrr�r_s rN�cos_sin_basecaserbbs���  � � � �!�!�T�1�-�-�-� �%� %�E� �U� �A� �A���A�� ��� ��%�%�&8�8� 9��)�!�R�0B�-B�A�F�F� ��u�!�2�I����3� �a�� ��#�L�E�5� �$� &�F� �f��E� �f��E���e��O�A� �T�/�C� �C� �A� �Q�3�4�-��A� �8� �a�������1��6�1��!���}�1� �a�������1��6�1�!�A�#�$��'7�1� �8���Y�s�5�y� �T� )�c�%�i��E� �.A�d�-J� K�KrPc�^�|\}}}}|�r||z}|dz}|r| }|dkr=|dkr7t|td|z��z��} t| ||z||��S|| krtt|||��S|dkrS||z} || z} | dkr|| z} n|| z } t | ��} t | | ��\}} t|��}| |z} n||z} | dkr|| z} n|| z } d}t| |��}t|||z ||��S|stS|tkrtS|S)N�r;rg333333�?r) �mpf_erIr3r7r"r}�divmodrTrr&r!)r�rJrVr�r�r�r�rrW�e�wpmodrar��lg2r�s rNr�r�s�����D�#�s�B� �#2��3�h�� �B�Y�� � ��$�C� �#�:�:�#��(�(��b��T�#�X���&�'�'�A��q�#�s�(�D�#�6�6� 6� �"��9�9��t�T�4��5�5� 5� ��7�7���H�E��5�[�F���{�{��6�M����V�G�$���E�"�"�C��!�S�>�>�D�A�q��A���A� �#�I�A�A��2�X�F���{�{��6�M����V�G�$���A��1�b�!�!���C��2��t�S�1�1�1� ��� ��E�z�z�� � �HrPc��|\}}}}|so|rm|r+|tkrtS|tkrtStS|tkrttfS|tkrttfSttfS||z}|dz} |dkrQ|| krD|rt |d|z ||��St td||��} t ||||��} | | fS| | z } |dkr{dd|dz zz| krl|r't ttg|d|z ||��St tt|��||��d��x} } |rt| ��} | | fS|dkrS| |z}||z}|dkr||z}n|| z }t|��}t||��\}}t|��}||z}n|| z}|dkr||z}n|| z }d}t|| ��\}}||d|zz z} ||d|zz z } |r| } |r| | z| z}t|| ||��St| || z dz ||��} t| || z dz ||��} | | fS) z4Simultaneously compute (cosh(x), sinh(x)) for real xrd�����rrrFr\rDrB)r%r"r&r#r'r7r1r�r*r,r}rfrIrXr)r�rJrV�tanhr�r�r�r�rrWrVrWr�rurhrar�rir�r_r`s rN� mpf_cosh_sinhrm�s�����D�#�s�B� ��S�� � ��D�y�y��+��E�z�z�%�<��K� ��9�9�d�D�\�)� ��:�:�t�U�m�+��T�z�� �b�&�C� �b��B� �R�x�x� �"��9�9�� 9�"�1�a��f�d�C�8�8�8��t�Q��c�2�2�D��q�$��c�2�2�D���:� � ��t� �� �R�x�x� �a�#�a�%�j�>�B� � �� J�"�D��<��#5�q��v�t�S�I�I�I��g�g�a�j�j�$��<�<�b�A�A� A�A��� ��A�J�J���a�4�K� �Q�w�w��S����u��� �Q�;�;��v� �A�A���� �A�������a��~�~���1� ��F�F�� �c� ����r��� �Q�;�;��v� �A�A���� �A� �� �q�"� %� %�D�A�q� ��A�a�C��>�D� ��A�a�C��>�D� ���u�� ���r�z�d�"���C�"��d�C�0�0�0��D�!�B�$�q�&�$��4�4���D�!�B�$�q�&�$��4�4���T�z�rPc�l�|dkr�d} d|z}||z|z}t|dz ��}|dz }||z} | dkr|| z} n|| z } t| |��\} } | |kr|| z } n| } | ||zdz z rt| ��} | |z } ||z }n|dz }��n|| z }||z} | dkr|| z} n|| z } d} | | |fS)Nrrr?rF)r�rfrI)r�r�rrWr��cancellation_precrh�pi2�pi4rar�r�r��smalls rN�mod_pi2rs�s)�� �Q�w�w� �� � "�a�� ���H�0�0�E��5��7�#�#�C���(�C��S�[�F���{�{��6�M����V�G�$���!�S�>�>�D�A�q��3�w�w��a��������C����#� ���F�F����H���S�[��� ��F�A�) �&� ��t� ���r��� �Q�;�;��v� �A�A���� �A� �� �a��8�OrPc�L�|\}}}}|sA|rtt} } ntt} } |dkr| | fS|dkr| S|dkr| S|dkr| S||z} |dz} | dkr�| | kr}|rt|t | ����}t td||��} t |d|z ||��} |dkr| | fS|dkr| S|dkr| S|dkrt ||||��S|r�|dkr�|dkr/t} tt ft|dz��|z } n#|dkrt t} } ntt} } |dkr| | fS|dkr| S|dkr| S|dkrt| | ||��S|| dz z dzdz } || | dz zz }t|��|z}|dz|z } || z}|dkr||z}n|| z }|t| ��z| z }nt||| | ��\}} } t|| ��\} } | dz}|dkr| | } } n|dkr| | } } n |dkr| | } } |r| } |dkr*t| | ||��} t| | ||��} | | fS|dkrt| | ||��S|dkrt| | ||��S|dkrt| | ||��SdS)z� which: 0 -- return cos(x), sin(x) 1 -- return cos(x) 2 -- return sin(x) 3 -- return tan(x) if pi=True, compute for pi*x rrrBr\rFrDN)r'r"r!r/r�r7r#�boolr0rr�rsrbrr)r�rJrV�which�pir�r�r�r�r�rurrWr��mag2rar�rcs rN� mpf_cos_sinrysq����D�#�s�B� � � � ���q�A�A���q�A� �A�:�:�a��d�{� �A�:�:�a�x� �A�:�:�a�x� �A�:�:�a�x� �s�(�C� ���B� �Q�w�w� �"��9�9�� +��A�v�b�z�z�*�*���D�!�T�3�/�/�A��A�q��v�t�S�1�1�A���z�z�!�Q�$�;���z�z�!�8���z�z�!�8���z�z�+�a��t�S�"A�"A�A� �.� �"�9�9��b�y�y����5�M�$�s�Q�w�-�-�$�"6�7��������u�1����e�1����z�z�!�Q�$�;���z�z�!�8���z�z�!�8���z�z�'�!�Q��c�":�":�:��s�d�1�f�o�� "�q� (���Q�C�4��6�]�#����}�}�s�"�� �B�Y�� ���r��� �Q�;�;��v� �A�A���� �A� �x��|�|�^�� "����3��S�"�-�-���1�b� �A�r� "� "�D�A�q� �A��A� �a�����A�A��� �a�����Q�B�A��� �a����A�2�A�� �� �B�� ��z�z� ��R�C��s� +� +�� ��R�C��s� +� +���!�t� � ��z�z��A��s�D�#�.�.�.� ��z�z��A��s�D�#�.�.�.� ��z�z��Q��4��-�-�-��zrPc�&�t|||d��S�Nr�ry�r�rJrVs rN�mpf_cosr~b���[��D�#�q�-I�-I�&IrPc�&�t|||d��S)NrBr|r}s rN�mpf_sinr�crrPc�&�t|||d��S)Nr\r|r}s rN�mpf_tanr�drrPc�(�t|||dd��S)Nrrr|r}s rN�mpf_cos_sin_pir�es��K��4��a�QR�4S�4S�-SrPc�(�t|||dd��Sr{r|r}s rNrArAf��� �A�t�S�!�Q�0O�0O�)OrPc�(�t|||dd��S)NrBrr|r}s rN� mpf_sin_pir�gr�rPc�0�t|||��dS�Nr�rmr}s rN�mpf_coshr�h���m�A�t�S�.I�.I�!�.L�'LrPc�0�t|||��dSr{r�r}s rN�mpf_sinhr�ir�rPc�(�t|||d���S)Nr)rlr�r}s rN�mpf_tanhr�js��m�A�t�S�q�.Q�.Q�.Q�'QrPc���|�t|dz ��}t||��\}}t|��}t||��\}}|dz}|dkr||fS|dkr| |fS|dkr| | fS|dkr|| fSdS)Nrr\rrB)r�rfrIrb)r�rJrpr�r�r�rurcs rNrros��� �{��t�A�v���� �!�S�>�>�D�A�q� �A���A� �A�t� $� $�D�A�q� �A��A��A�v�v�a��d�{��A�v�v�q�b�!�e�|��A�v�v�q�b�1�"�f�}��A�v�v�a�!��e�|�v�vrPc��|�t|��}t||��\}}t|��}t||��}|dkr||zS|| z Sr�)r}rfrIrT)r�rJr�r�r�rXs rN� exp_fixedr�{s[�� �{���o�o�� �!�S�>�>�D�A�q� �A���A��Q����A��A�v�v��A�v� ��a�R�y�rP�sagez)Warning: Sage imports in libelefun failed)F)FNr�)r)�rRrlr�backendrrrrr r r �libmpfr r rrrrrrrrrrrrrrrrrrr r!r"r#r$r%r&r'r(r)r*r+r,r-r.r/r0r1r2r3r4r5r6r7r8� libintmathr9rSrGrZr[r\r�r�rr�r�rr$rrr�r�rrSrZr]rqrvr}r�r�r�r�r�r�r�r�r�r�r�r@r�re� mpf_degree�mpf_ln2�mpf_ln10r�r�� mpf_sqrtpi�mpf_ln_sqrt2pir�r�r�r�r�r�r�r�r�r�r�rrrrr!r&r(r5r7r:r<r>rCrQrTrXrbr�rmrsryr~r�r�r�rAr�r�r�r�rr��sage.libs.mpmath.ext_libmp�libs�mpmath� ext_libmp�_lbmp� ImportError�AttributeErrorr��rPrN�<module>r�si �� � � � � � �������������G�G�G�G�G�G�G�G�G�G�G�G�G�G�G�G� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ������� �h����O�O��O��� �h����������� ���� ����������������r�7�� ���8�8�O�,�,�Q�.� /� /�B�B�A����Q��T�/�2�2�2�5�6��Q�q�S��A�A��� � � �* � � �" '� '� '� � � � � � � � �A�A���A��?�?���?��8 ��X���� ��Y���� ��V���� ��R�������,� � � ��� � ��� � � �� � ��� �������� �i� (� (�� � �h� '� '�� � �g� &� &�� � �l� +� +� � � �i� (� (�� � �j� )� )���C�C���C� �,�,���,� �� �-�-� �#�#�$4�5�5��'�-�-�-�-�8"�"�"�l � � �,!+�Q�Q�Q�Q�f%�(�(�(�(�����,  �  �  �-)�-)�-)�^  �  �  �  �D � � �D$�F+�F+�F+�F+�P%1�%1�%1�X!�!�!�$ +� +� +����(C�C�C� %� +� +� +� +�F)�!(�!(�!(�!(�F%� 0� 0� 0� 0�%� 0� 0� 0� 0�&�%�%�%�%�"&�1�1�1�1�&�@�@�@�@�* *� � � � �8I&�I&�I&�I&�V���2 � � �L�L�L�:$�* �* �* �* �Z *��@�@�@�@�F!�!�!�H(�q�U�M.�M.�M.�M.�^$�I�I�I�I�#�I�I�I�I�#�I�I�I�I� *�S�S�S�S�&�O�O�O�O�&�O�O�O�O�$�L�L�L�L�$�L�L�L�L�$�Q�Q�Q�Q� � � � � � � � � �f��� ;�2�2�2�2�2�2�2�2�2�2�2�2��>���-���-���-���-���-���O� ��+� ��+� � � �� �� (�;�;�;� ��9�:�:�:�:�:�:�;�����s�A K,�,L�L
Memory