� I�g�����dZddlZddlZddlmZmZmZmZmZddl 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/m0Z0ddl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m-Z-m9Z9ddl:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNdd l mOZOdd lPmQZQmRZRmSZSGd �d eT��ZU d �ZVedkrd�ZVe fd�ZWd�ZXe fd�ZYd�ZZd�Z[d�Z\d�Z]e dfd�Z^e dfd�Z_e fd�Z`e fd�Zae dfd�Zbd/d�Zcd/d�Zde dfd �Zee fd!�Zfe fd"�Zge fd#�Zhe fd$�Zie fd%�Zje fd&�Zke fd'�Zle fd(�Zme fd)�Zne fd*�Zoe fd+�Zpe fd,�Zqe fd-�Zre fd.�ZsdS)0z� This module implements computation of hypergeometric and related functions. In particular, it provides code for generic summation of hypergeometric series. Optimized versions for various special cases are also provided. �N�)�MPZ_ZERO�MPZ_ONE�BACKEND�xrange�exec_)�gcd)%� ComplexResult� round_fast� round_nearest� negative_rnd�bitcount�to_fixed� from_man_exp�from_int�to_int� from_rational�fzero�fone�fnone�ftwo�finf�fninf�fnan�mpf_sign�mpf_add�mpf_abs�mpf_pos�mpf_cmp�mpf_lt�mpf_le�mpf_gt� mpf_min_max� mpf_perturb�mpf_neg� mpf_shift�mpf_sub�mpf_mul�mpf_div� sqrt_fixed�mpf_sqrt� mpf_rdiv_int� mpf_pow_int� to_rational) �mpf_pi�mpf_exp�mpf_log�pi_fixed� mpf_cos_sin�mpf_cos�mpf_sinr+� agm_fixed)�mpc_one�mpc_sub� mpc_mul_mpf�mpc_mul�mpc_neg�complex_int_pow�mpc_div� mpc_add_mpf� mpc_sub_mpf�mpc_log�mpc_add�mpc_pos� mpc_shift� mpc_is_infnan�mpc_zero�mpc_sqrt�mpc_abs� mpc_mpf_div� mpc_square�mpc_exp)�ifac)� mpf_gamma_int� mpf_euler� euler_fixedc��eZdZdS)� NoConvergenceN)�__name__� __module__� __qualname__���e/home/asafur/pinokio/api/open-webui.git/app/env/lib/python3.11/site-packages/mpmath/libmp/libhyper.pyrPrP+s�������DrUrPc ��|\}}}}d�|��}d|||d|�||d�|fz}d|v}|dk}|p|} g} | j} g} g} g}g}g}g}g}g}| d��| d��| d��| d��| r | d ��|r-| d ��| d ��| d ��| d ��n| d��| d ��| d��| d��| d��| d��| d��|r7| d��| d��| d��| d��| d��t|��D�]�\}}ddg||k}|dkr3| |g||k�|��| d|||fz���M|dkr5| |g||k�|��| d|||||fz����|dkr}||g||k�|��| d|z��| d ��| d��| d��| d||fz��| d��| d ||fz���� |dkr�||g||k�|��| d!|z��| d"��| d ��| d#��| d ��| d��| d��| d$||fz��| d��| d%||fz��| d��| d��| d&||fz��| d��| d'||fz�����t�t |��}t |��}t ||��}||d�}||d�}| d(��| d)��| d*��| r | d+��| d,��d-�d.�| D��d/�| D��zd0�|D��z��}d-�d1�|D��d2�|D��zd3�| D��zd4gz��}|r| d5|z��| d6|z��| d7��|r| d8��| d9��| d:��| �r�t |��D]}| d;||||fz���|D].}| d<�d=t|�������/|D].}| d>�d=t|�������/t |��D]}| d?||||fz���|D].}| d@�d=t|�������/|D].}| dA�d=t|�������/|r;|r"| dB��| dC��| dD��nQ| dE��| dF��n:|r"| dG��| dC��| dD��n| dH��| dI��|D]D}| dJ�d=t|������| dC��| dD���E|D]�}| dK�d=t|������| dL�d=t|������| dM�d=t|������| dN�d=t|������| dO�d=t|��������n�t |��D]}| d;||||fz���|D].}| d<�d=t|�������/|D].}| d>�d=t|�������/|r | dP��n | dH��| r-| dQ��| dR��| dS��| dT��n!| dQ��| dU��| dT��| dV��| dW��| D].}| dX�d=t|�������/|D].}| dY�d=t|�������/| D].}| dZ�d=t|�������/|D].}| d[�d=t|�������/|D].}| d\�d=t|�������/|D].}| d]�d=t|�������/|D].}| d^�d=t|�������/|D].}| d_�d=t|�������/| r�| d`��| da��| db��| dc��| dd��| de��| df��| dg��| dh��| d��| di��| dj��nB| d`��| db��| dk��| d��| di��| dl��dm�dn�| D����} do|z| z} i}t| t��|��| ||fS)pz� Returns a function that sums a generalized hypergeometric series, for given parameter types (integer, rational, real, complex). �zhypsum_%i_%i_%s_%s_%sN�Cz$MAX = kwargs.get('maxterms', wp*100)zHIGH = MPZ_ONE<<epsshiftz LOW = -HIGHz!SRE = PRE = one = (MPZ_ONE << wp)zSIM = PIM = MPZ_ZEROzxsign, xm, xe, xbc = z[0]zif xsign: xm = -xmzysign, ym, ye, ybc = z[1]zif ysign: ym = -ymzxsign, xm, xe, xbc = zzoffset = xe + wpzif offset >= 0:z ZRE = xm << offsetzelse:z ZRE = xm >> (-offset)zoffset = ye + wpz ZIM = ym << offsetz ZIM = ym >> (-offset)�A�B�Zz%sINT_%i = coeffs[%i]�Qz!%sP_%i, %sQ_%i = coeffs[%i]._mpq_�Rz%xsign, xm, xe, xbc = coeffs[%i]._mpf_z %sREAL_%i = xm << offsetz %sREAL_%i = xm >> (-offset)z__re, __im = coeffs[%i]._mpc_zxsign, xm, xe, xbc = __rezysign, ym, ye, ybc = __imz %sCRE_%i = xm << offsetz %sCRE_%i = xm >> (-offset)z %sCIM_%i = ym << offsetz %sCIM_%i = ym >> (-offset)zfor n in xrange(1,10**8):z if n in magnitude_check:z" p_mag = bitcount(abs(PRE))z. p_mag = max(p_mag, bitcount(abs(PIM)))z% magnitude_check[n] = wp-p_magz * c�T�g|]%}d�dt|������&S)zAINT_#�#��replace�str��.0�is rV� <listcomp>z%make_hyp_summator.<locals>.<listcomp>��.��I�I�I�q�X�-�-�c�3�q�6�6�:�:�I�I�IrUc�T�g|]%}d�dt|������&S)zAP_#r`rards rVrgz%make_hyp_summator.<locals>.<listcomp>��,��G�G�G�Q�V�^�^�C��Q���8�8�G�G�GrUc�T�g|]%}d�dt|������&S)zBQ_#r`rards rVrgz%make_hyp_summator.<locals>.<listcomp>�rjrUc�T�g|]%}d�dt|������&S)zBINT_#r`rards rVrgz%make_hyp_summator.<locals>.<listcomp>�rhrUc�T�g|]%}d�dt|������&S)zBP_#r`rards rVrgz%make_hyp_summator.<locals>.<listcomp>�rjrUc�T�g|]%}d�dt|������&S)zAQ_#r`rards rVrgz%make_hyp_summator.<locals>.<listcomp>�rjrU�nz mul = z div = z if not div:z if not mul:z breakz raise ZeroDivisionErrorz$ PRE = PRE * AREAL_%i // BREAL_%iz PRE = (PRE * AREAL_#) >> wpr`z PRE = (PRE << wp) // BREAL_#z$ PIM = PIM * AREAL_%i // BREAL_%iz PIM = (PIM * AREAL_#) >> wpz PIM = (PIM << wp) // BREAL_#zI PRE, PIM = (mul*(PRE*ZRE-PIM*ZIM))//div, (mul*(PIM*ZRE+PRE*ZIM))//divz PRE >>= wpz PIM >>= wpz* PRE = ((mul * PRE * ZRE) >> wp) // divz* PIM = ((mul * PIM * ZRE) >> wp) // divz= PRE, PIM = (PRE*ZRE-PIM*ZIM)//div, (PIM*ZRE+PRE*ZIM)//divz$ PRE = ((PRE * ZRE) >> wp) // divz$ PIM = ((PIM * ZRE) >> wp) // divz; PRE, PIM = PRE*ACRE_#-PIM*ACIM_#, PIM*ACRE_#+PRE*ACIM_#z% mag = BCRE_#*BCRE_#+BCIM_#*BCIM_#z re = PRE*BCRE_# + PIM*BCIM_#z im = PIM*BCRE_# - PRE*BCIM_#z PRE = (re << wp) // magz PIM = (im << wp) // magz* PRE = ((PRE * mul * ZRE) >> wp) // divz SRE += PREz SIM += PIMz1 if (HIGH > PRE > LOW) and (HIGH > PIM > LOW):z breakz if HIGH > PRE > LOW:z if n > MAX:zc raise NoConvergence('Hypergeometric series converges too slowly. Try increasing maxterms.')z AINT_# += 1z BINT_# += 1z AP_# += AQ_#z BP_# += BQ_#z AREAL_# += onez BREAL_# += onez ACRE_# += onez BCRE_# += onez%a = from_man_exp(SRE, -wp, prec, 'n')z%b = from_man_exp(SIM, -wp, prec, 'n')zif SRE:z if SIM:z( magn = max(a[2]+a[3], b[2]+b[3])z else:z magn = a[2]+a[3]z elif SIM:z magn = b[2]+b[3]z magn = -wp+1zreturn (a, b), True, magnz magn = a[2]+a[3]zreturn a, False, magn� c3� K�|] }d|zV�� dS)z NrT)re�lines rV� <genexpr>z$make_hyp_summator.<locals>.<genexpr>+s&����:�:�4��� �:�:�:�:�:�:rUzBdef %s(coeffs, z, prec, wp, epsshift, magnitude_check, **kwargs): ) �join�append� enumerate� ValueError�len�min�rangerbrcr�globals) �key�p�q� param_types�ztype�pstring�fname�have_complex_param�have_complex_arg� have_complex�source�add�aint�arat�bint�brat�areal�breal�acomplex�bcomplexrf�flag�W�l_areal�l_breal�cancellable_real�noncancellable_real_num�noncancellable_real_den� multiplier�divisor�k� namespaces rV�make_hyp_summatorr�@s��� #��A�q�+�u��g�g�k�"�"�G� #�q�!�W�R�a�R�[�'�!�"�"�+�u�&M� M�E�� �+����|��%�9�)9�L� �F� �-�C� �D� �D� �D� �D� �E� �E��H��H��C�.�/�/�/��C�"�#�#�#��C� �����C�+�,�,�,��$� �� "�#�#�#��"� �� '�(�(�(� �� �!�!�!� �� '�(�(�(� �� �!�!�!�!� �� $�%�%�%� �� �!�!�!��C������C������C� �!�!�!��C��L�L�L��C�#�$�$�$��)� �� ���� �� ���� �� $�%�%�%� ��G� � � � �� '�(�(�(��[�)�)�$�$���4� �#�J�q�A�v� �� �3�;�;��4�[��a�� � (� (�� +� +� +� �C�'�1�a��)�3� 4� 4� 4� 4� �S�[�[��4�[��a�� � (� (�� +� +� +� �C�3�q�!�Q��1�o�E� F� F� F� F� �S�[�[��E�]�1��6� "� *� *�1� -� -� -� �C�7�!�;� <� <� <� �C�$� %� %� %� �C�"� #� #� #� �C�!� "� "� "� �C�.�!�Q��7� 8� 8� 8� �C��L�L�L� �C�1�Q��F�:� ;� ;� ;� ;� �S�[�[��x� ��a�� (� 0� 0�� 3� 3� 3� �C�/�!�3� 4� 4� 4� �C�+� ,� ,� ,� �C�$� %� %� %� �C�+� ,� ,� ,� �C�$� %� %� %� �C�"� #� #� #� �C�!� "� "� "� �C�-��A��6� 7� 7� 7� �C��L�L�L� �C�0�A�q�6�9� :� :� :� �C�"� #� #� #� �C�!� "� "� "� �C�-��A��6� 7� 7� 7� �C��L�L�L� �C�0�A�q�6�9� :� :� :� :�� ��%�j�j�G��%�j�j�G��7�G�,�,��#�$4�$5�$5�6��#�$4�$5�$5�6���C�#�$�$�$��C�&�'�'�'��C�,�-�-�-��>� �� <�=�=�=��C�/�0�0�0����I�I�D�I�I�I�G�G�$�G�G�G�H�G�G�$�G�G�G�H�I�I�J����I�I�D�I�I�I�G�G�$�G�G�G�H�G�G�$�G�G�G�H�KN�%�P�Q�Q�G��'� ��L�:� %�&�&�&��C� �w������C������!� �� !�"�"�"� �� � � � ��C�)�*�*�*��08� �'�(�(�l�l�A�#�#�.T�X]�^_�X`�bg�hi�bj�Wk�.k�*l�*l�*l�*l�(�e�e�A�#�#�.O�.W�.W�X[�]`�ab�]c�]c�.d�.d�*e�*e�*e�*e�(�f�f�A�#�#�.P�.X�.X�Y\�^a�bc�^d�^d�.e�.e�*f�*f�*f�*f��'�(�(�l�l�A�#�#�.T�X]�^_�X`�bg�hi�bj�Wk�.k�*l�*l�*l�*l�(�e�e�A�#�#�.O�.W�.W�X[�]`�ab�]c�]c�.d�.d�*e�*e�*e�*e�(�f�f�A�#�#�.P�.X�.X�Y\�^a�bc�^d�^d�.e�.e�*f�*f�*f�*f� � <�� B���_�`�`�`���$�%�%�%���$�%�%�%�%���@�A�A�A���@�A�A�A�A�� <���S�T�T�T���$�%�%�%���$�%�%�%�%���:�;�;�;���:�;�;�;�� "� "�A� �C�M�U�U�VY�[^�_`�[a�[a�b�b� c� c� c� �C� � !� !� !� �C� � !� !� !� !�� D� D�A� �C�7�?�?��S��V�V�L�L� M� M� M� �C�2�:�:�3��A���G�G� H� H� H� �C�2�:�:�3��A���G�G� H� H� H� �C�-�5�5�c�3�q�6�6�B�B� C� C� C� �C�-�5�5�c�3�q�6�6�B�B� C� C� C� C�  D��'�(�(�l�l�A�#�#�.T�X]�^_�X`�bg�hi�bj�Wk�.k�*l�*l�*l�*l�(�e�e�A�#�#�.O�.W�.W�X[�]`�ab�]c�]c�.d�.d�*e�*e�*e�*e�(�f�f�A�#�#�.P�.X�.X�Y\�^a�bc�^d�^d�.e�.e�*f�*f�*f�*f� � 8� �C�<� =� =� =� =� �C�6� 7� 7� 7��� �� ���� �� ���� �� ?�@�@�@� ��O����� �� ���� �� &�'�'�'� ��O���� �C������C�m�n�n�n��B�B��s�s�,�4�4�S�#�a�&�&�A�A�B�B�B�B� �B�B��s�s�,�4�4�S�#�a�&�&�A�A�B�B�B�B� �C�C��s�s�-�5�5�c�3�q�6�6�B�B�C�C�C�C� �C�C��s�s�-�5�5�c�3�q�6�6�B�B�C�C�C�C� �E�E��s�s�/�7�7��S��V�V�D�D�E�E�E�E� �E�E��s�s�/�7�7��S��V�V�D�D�E�E�E�E� �D�D��s�s�.�6�6�s�C��F�F�C�C�D�D�D�D� �D�D��s�s�.�6�6�s�C��F�F�C�C�D�D�D�D��%� �� 3�4�4�4� �� 3�4�4�4� ��I���� ��M���� �� 6�7�7�7� ��K���� �� &�'�'�'� ��K���� �� "�#�#�#� ��G� � � � �� ���� �� '�(�(�(�(� �� 3�4�4�4� ��I���� �� "�#�#�#� ��G� � � � �� ���� �� #�$�$�$� �Y�Y�:�:�6�:�:�:� :� :�F�S�V[�[�_e� e�F��I� �&�'�)�)�Y�'�'�'� �9�U�#� #�#rU�sagec�@������ddlm�|\���������fd�}d|fS)z� Returns a function that sums a generalized hypergeometric series, for given parameter types (integer, rational, real, complex). r)�hypsum_internalc �.����� � � |||||||� � S�NrT) �coeffs�z�prec�wp�epsshift�magnitude_check�kwargsr�r}rr~r�s �����rV�_hypsumz"make_hyp_summator.<locals>._hypsum?s.���"�?�1�a��e�V�Q��b�(�O�V�=�=� =rUz(none))�sage.libs.mpmath.ext_mainr�)r|r�r�r}rr~r�s @@@@@rVr�r�8sc������� >�=�=�=�=�=�#&� ��1�k�5� =� =� =� =� =� =� =� =� =��� � rUc�@�|\}}}}|s=|tkrtS|tkrtS|tkrtSt S||z}t j}|dkrId|dz zdz||d��kr0|rttd||��Sttd||��S|| krEt|d��}tt|dz��|dz��} t|| ||��S|t|��zdz} tt|| ����} | | z| z } | dd}}} |r-| | z| z |z} | d|zdzz}|dzr| |z} n| |z } |dz }|�-| | dzztt!| ��| ��z} |r| } t#| | ||��S) N��rgW������?r��i90)rrrrrr�math�logr$r&r+r/r)�absrr*r2r)�xr��rnd�sign�man�exp�bc�size�lg�cr��t�t2�s�termr�s rV�mpf_erfr�Os�����D�#�s�B� �� ��:�:�e�|� ��9�9�T�k� �u�9�9�U�l�� � ��8�D� ��B� �a�x�x�A�t�A�v�J��)�B�B�t�A�J�J�6�6� � 3��u�a��s�3�3� 3��t�Q��c�2�2� 2� �t�e�|�|� �a��N�N�� �V�D��G�_�_�d�2�g� .� .���q�!�T�3�'�'�'� ��D� � � �B� �B� �H�Q��O�O���A� �A�#�"��B��E�1�Q�t�A� ���"�f��^�� !���Q�q�S��U�|�� �q�5� � ��I�A�A� ��I�A� �Q��� �� �r�!�t���H�R�L�L�"�5�5�5�A� �� �B�� ��B�3��c� *� *�*rUc�@�t|��}|dzdz|krdSdS)Nr�� ףp= �?TF)r)r�r�ros rV�erfc_check_seriesr�|s*���q� � �A��!�t�d�{�T����t� �5rUc ���|\}}}}|s=|tkrtS|tkrtS|tkrtSt S|dz}||z}|t dd|z��z }|p|dk} | st||��s�| r4ttt||dzt|��||��St|��dz} ttt||t| dzdz��zdz��||��St|zx} } d} dt||��dzz|z }d} | d|zdz z|z|z} |dkr| | ks| sn|dzr| | z} n| | z } | } |dz }�8| |ztt!|��|��z} t#| | |��} t%t't)|||��|��|��}t+t)|| |��|||��}|S)Nr�rr�� rr��)rrrrrr�maxr�r'r�r r�intrrr*r2rr0r%r(r))r�r�r�r�r�r�r�r��mag� regular_erfror�r�� term_prevr�r�r��ys rV�mpf_erfcr��s)����D�#�s�B� �� ��:�:�d�{� ��9�9�U�l� ��:�:�d�{�� � ���B� �S�&�C��#�a��3��-�-��B��/�#��'�K��P�+�A�r�2�2�P� � T��4���D��G�\�#�5F�!G�!G��s�S�S� S� �1�I�I�a�K���t�W�Q��s�1�a�4��9�~�~�(=��(B�C�C�T�3�O�O�O��"�}��A���I� �X�a��_�_�� !� !�b�(�A� �A� ���1��q��!�b�(�Q�.�� �q�5�5�T�I�%�%�T�%� � �q�5� � ��I�A�A� ��I�A�� � �Q��� � �b��Z��� � �b�1�1�1�A��Q���R� � �A�����!�B����+�+�B�/�/�A����1�b�!�!�1�d�C�0�0�A� �HrUc�J�|x}}d}|r||z|z |z}|||zz }|dz }|�|S�Nr�rrT)r�r�r�r�r�s rV� ei_taylorr��sQ�� �I�A�� �A� ����c�d�]�q� �� �Q�!�V� �� �Q��� �� �HrUc��t}|x}}|x}}d}||��||��zdkrR||z||zz |z|z ||z||zz|z|z }}|||zz }|||zz }|dz }||��||��zdk�R||fS)Nr��r)r�) �zre�zimr��_abs�sre�tre�sim�timr�s rV�complex_ei_taylorr��s��� �D��O�C�#��O�C�#� �A� �$�s�)�)�d�d�3�i�i� �!� #� #���W�S��W�_�q�(�4�/�3�s�7�3�s�7�?�Q�2F��1M�S�� �s�a�x��� �s�a�x��� �Q��� �$�s�)�)�d�d�3�i�i� �!� #� #� ��8�OrUc�n�t|z}||z|zx}}||z}d}|r||z|z|z }||z }|dz }|�|Sr�)r)r�r��oner�r�r�s rV� ei_asymptoticr��sh�� �T�/�C��T�k�a� � �A�� �a��A� �A� �� �q�S��U�t�O�� �Q��� �Q��� �� �HrUc�l�t}t|z}||z||zz|z }||z|zx}}| |z|zx}} ||z} |} d} ||��|| ��zdkrY||z| |zz | z|z ||z| |zz| z|z } }| |z } | | z } | dz } | |krt�||��|| ��zdk�Y| | fS)Nr�i�r)r�rrP) r�r�r�r�r��M�xrer��ximr�r�r�r�s rV�complex_ei_asymptoticr��s�� �D� �T�/�C� �S��3�s�7� �t�#�A�����"�"�C�#��$�4��A�%�%�C�#� ��)�C� �C� �A� �$�s�)�)�d�d�3�i�i� �$� &� &���W�S��W�_�a�'�$�.�#�c�'�#�c�'�/�1�1D�t�0K�S�� �s� �� �s� �� �Q��� �t�8�8�� � �$�s�)�)�d�d�3�i�i� �$� &� &� ��8�OrUFc��|rt|��}|\}}}}|r#|s!|tkrtStd���|�r8d|||f}||z} |dz} | | k} | s+|dkr||z} n|| z } | t | dz��dzk} | rm| | krt } n-t tt|| ��| ��| ��} t| t|| ��| ��} t| |||��} n�| dt t|����zz } t|| ��}t|| ��t| ��z} t | | ��}t|| ��}t!||||��} n@|tkrt"} n-|tkrt} n|t"krt} nt$} |rt| ��} | S)NzE1(x) for x < 0rr��V-�?r�r�)r%rrr r�rrr�rr(r0r)rr�rNr1rrr)r�r�r��e1r�r�r�r��xabs�xmagr�� can_use_asymp�xabsint�v�u�t1r�s rV�mpf_eir��s��� �� �A�J�J����D�#�s�B� �/�$�/� ��:�:��K��-�.�.�.� ���#�s�B����2�v�� �B�Y���r� � �� 9��a�x�x���*����3�$�-��#�c�"�U�(�m�m�b�&8�8�M� � +��b�y�y���� ��x��2����!C�!C�b�S�I�I����7�1�b�>�>�2�.�.�A���1�d�C�(�(�A�A� �!�C��t� � �%�%�%� %�B���B���A��!�R� � �;�r�?�?�2�A��a���$�$�B���b�!�!�B���B��c�*�*�A�A� ��:�:�5�q�q� �$�Y�Y�D��� �%�Z�Z�U����a� �� �A�J�J�� �HrUc ��|rt|��}|\}}|\}}}} |\} } } } |tkrc|rItt|||����}|stt ||����}nt}||fSt|||��tfS|tkr|r| st t fS|dz}|| z}| | z}t ||��}||k}|sRtt|����tt|����z}|t|dz��dzk} |�r||krttf}nVt||��}t||��}t|||��\}}t|| ��t|| ��f}t|t||��|��}t!|||��}|rt|||��}nh|\}}| r1t#|||��t%|t |��||��f}n0t#|||��t'|t |��||��f}|Sn#t($rYnwxYw|dttt+|d������zz }t||��}t||��}t-|||��\}}|t/|��z }t|| ��t|| ��f}|rt1t|��|��}nt1||��}t3||||��}|rt|��}|S)N�(r�r�r�r�)r;rr%r�r/rr�r�rr�rrr�rr:rJr=rr'rrPrGr�rNr@rA)r�r�r�r��a�b�asign�aman�aexp�abc�bsign�bman�bexp�bbcr�r�r��amag�bmag�zmagr��zabsintr�r�r��vre�vimr�s rV�mpc_eir�sm�� �� �A�J�J�� �D�A�q���E�4��s���E�4��s��E�z�z� � /���q�$��,�,�-�-�A�� ��F�4��-�-�.�.������a�4�K��!�T�3�'�'��.� .��E�z�z�� �4� ��$�<� � ���B� ��8�D� ��8�D� �t�T�?�?�D��2�I�M� �5��f�Q�i�i�.�.�3�v�a�y�y�>�>�1���#�b��h�-�-�"�"4�4� � � � ��b�y�y��%�K����q�"�o�o���q�"�o�o��0��c�2�>�>���S� ��r�c�*�*�L��r�c�,B�,B�B����7�1�b�>�>�2�.�.�A���1�b�!�!�A�� Q��A�t�S�)�)������1��Q���4��-�-�w�q�&��*�*�d�C�/P�/P�P�A�A���4��-�-�w�q�&��*�*�d�C�/P�/P�P�A��H�% ��& � � � � �� �����!�C��w�q�!�}�}�%�%� &� &� &�&�B� �1�b�/�/�C� �1�b�/�/�C� ��c�2�.�.�H�C���;�r�?�?��C��S�"����|�C���4�4�4�A� �� �G�A�J�J�r� "� "��� �A�b�M�M����1�d�C� � �A� �� �A�J�J�� �Hs�*DI� I�Ic�&�t|||d��S�NT)r��r�r�r�s rV�mpf_e1rO��� �!�T�3�� %� %�%rUc�&�t|||d��Sr)r�rs rV�mpc_e1rRrrUc �H �|\}}}}|s�|rO|tkr"|dkr tdfSt|||��dfS|tkr tdfSttfS|tkr&|dkrt d|dz ||��dfStdfS|tkr tdfSttfS|} |rd|z }|dz} ||z} | dkrt �t t|����} |dko|} t|��}|dks d| z| z | kr\|r6t|| ��}t|t|| dz | ��||��}�n8t|| ��}t||||��}�nd| z|cxkodknc}|s�tt|����}ttd||z ��d| z��}| | z||zt t||z����zz|| zz d|zd zz }| d z }||k}|r�t | | zzt#|| ��z}|}||z}t | z}|r|r||z }|dz }||z|z| z }|r|�t|| ��}|r$t|t|| dz | ��| ��}nt||| ��}t|t%|| ��||��}�n�|dkr tt'|||����}�n�|dk�r�|d | zk�r�tt'|| ����}|r| dzrt|��}n#t|t||dz | ��| ��}t#|| ��x}}dg|dz z}t)d|dz ��D]}||dz |z||<�|ddd �}|d| z}t)d|dz ��D],}|dzr||||zz}n||||zz }||z| z }�-t%|| | ��}t|t|| ����}|r t|t|| | ��| ��}t+||��}t|t-t/|dz ����||��}nt �| r�t-t/|dz �� ��}|r4tt1| ��|||��}| dzrt|��}n@ttt1| ��t|| dz | ��| ��|||��}||fS|dfS) z� E_n(x), n an integer, x real With gamma=True, computes Gamma(n,x) (upper incomplete gamma function) Returns (real, None) if real, otherwise (real, imag) The imaginary part is an optional branch cut term rNrr�i����r��������dr�r������)rrrLrr�NotImplementedErrorrr�r%r0r(r-r)rryr�rrrr�rzrrrKr/) ror�r�r��gammar�r�r�r��n_origr�r��nmag� have_imag�negxr��re�can_use_asymptotic_series�xi�m�siz�tol�rr�r��T1�facsr��T2r^r��ims rV� mpf_expintrUs�����D�#�s�B� �� � ��E�z�z���6�6���:�%�$�Q��c�2�2�D�8�8��D�y�y��d�{�"���:� ��E�z�z��q�5�5�(��A�a�C��s�;�;�T�A�A���:�%��D�y�y��d�{�"���:� � �F� �� �a�C�� ���B� ��8�D� �c�z�z�!�!� �C��F�F� � �D��A���$�I� �1�:�:�D��A�v�v��4��$��"��$�$� � *���b�!�!�A���K��6�!�8�R�8�8�$��D�D�B�B���b�!�!�A���A�t�S�)�)�B�B�%'�r�E�A�N�N�N�N��N�N�N�N�!�(� 2��V�A�Y�Y���B��C��2�a�4�L�L�!�B�$�'�'�A��"�T�'�Q�q�S�(�3�q��s�8�8�"4�"4�4�4�q��v�=��Q����L�C��#�b�&�C�(+�c� � %� $�- &��(��2��&�8�A�r�?�?�:�A��A��!��A��2� �A�� "�� "��Q����Q����q�S��U�r�M��� "�� "���b�!�!�A�� &��A�{�1�f�Q�h��;�;�R�@�@����A�q�"�%�%����L��R�C�0�0�$��<�<�B�B� �!�V�V����d�C�0�0�1�1�B�B� ��U�U�q�1�R�4�x�x����b�)�)�*�*�B�� A��A�:�%� ����B���R��T�1�Q�3��!;�!;�R�@�@���Q��O�O� #�A���3�!�A�#�;�D��1�Q�q�S�\�\� (� (���q��s�)�a�-��Q������"��:�D��Q��2� �A��1�a��c�]�]� � ���q�5�%���a��1��$�A�A���a��1��$�A��q�S�R�K����a�"��b�)�)�B���W�T�2�.�.�/�/�B�� A��R��Q���!;�!;�R�@�@����B���A���H�T�!�A�#�Y�Y�/�/��s�;�;�B�B�%� %�� � �d�1�Q�3�i�i�Z� � �� � a������Q��c�2�2�B���z� !��R�[�[���������[��v�a�x��-L�-L�b�Q�Q�ST�VZ�\_�`�`�B��2�v� ��4�x�rUc���t||��}||z |z }|dkrdt|zd}}}n||d}}}|r ||z||dz zz|z }|||zz }|dz }|� t|| ��S)z2 0 - Ci(x) - (euler+log(x)) 1 - Si(x) rr�r�r)rrr)r�r��which�x2r�r�r�s rV�mpf_ci_si_taylorr!�s��� ��B���A� �Q�3��2��B� ��z�z��g�r�k�A�a�1����Q��a�1�� �� �r�T�A�q��s�G�_�r� !�� �Q��T� �� �Q��� �� ��B�3� � �rUc�H�|dr|d|dz}n|dr|d|dz}|drt||d|dz��}|dks|| krt�|d|z z }t||��}t||��}||z||zz |z }d|z|z|z }|} |} t|z} |dkrddt|zddf\} } } } }n ||||df\} } } } }tt | ��t | ����dkrm||dz z}| |z| |zz |z|z | |z| |zz|z|z } } | | |zz } | | |zz } |dz }tt | ��t | ����dk�mt | | ��t | | ��fS)Nrr�r������r)r�r rrr�r)rrr�rr�r�r��z2re�z2imr�r�r�r�r�r��fs rV�mpc_ci_si_taylorr'�s��� �!�u����e�B�q�E�k��� �A�����e�B�q�E�k�� �!�u�$��#�r�!�u�R��U�{�#�#�� �Q�w�w�#���)�)�!�!��1�S�5�M�B� �2�r� � �C� �2�r� � �C� ��G�C��G�O�b� �D� �s�F�3�J�� �D� �C� �C� �2�+�C� ��z�z� !�1�w��{�Q�� 9���S�#�s�A�A� #�S�#�s�A� 5���S�#�s�A� �c�#�h�h��C��� !� !�A� %� %� �q��s�G����X�c�$�h�&��*�R�/�3�t�8�C��H�3D�q�2H�2�1M�S�� �s�A�v� �� �s�A�v� �� �Q��� �c�#�h�h��C��� !� !�A� %� %� ��b�S� !� !�<��b�S�#9�#9� 9�9rUr�c ���|dz}|\}}}}d\} } |s�|tkrttfS|tkr||fSt} |dkrj|tkrt t ||��d��} |tkr6t t t |t|��d����} | | fS||z} | | krc|dkrt|d|z ||��} |dkr>t|��} t|��} t| t| |��||��} | | fS| |kr{|dkrK|r)t t |t|����} nt ||��} t | d��} |dkr tt||��|||��} | | fS|t| ��z }| dz t!j|d��k}|s�|dkr t%t'||d��||��} |dkr\t'||d��} t| t|��|��} t| tt|��|��||��} | | fSt|��}t)||��}t*d|zz|z}t*|z}|}|}d}|r/| }||z|z|z }|dz }||z }||z|z|z }|dz }||z }|�/t-|| ��}t-|| ��}t|||��}t|||��}t/||��\}}|dkr{tt1||��t1||��|��} t3t t |��d��| |��} |rt | ��} t%| ||��} |dkr.t3t1||��t1||��||��} | | fS)z� Calculation of Ci(x), Si(x) for real x. which = 0 -- returns (Ci(x), -) which = 1 -- returns (Si(x), -) which = 2 -- returns (Ci(x), Si(x)) Note: if x < 0, Ci(x) needs an additional imaginary term, pi*i. r�)NNrr rr�)rrrrr&r/r%r r$rMrrr1r)r5r�r�r�rr!rrrr3r(r')r�r�r�rr�r�r�r�r��ci�sir�r�r�� asymptotic�xf�xr�s1�s2r�r��cos�sins rV� mpf_ci_sir2�s�� ���B���D�#�s�B� �F�B�� � � ��:�:��5�>� !� ��9�9��q�6�M� �� �A�:�:��D�y�y��v�d�C�0�0�"�5�5���E�z�z��Y�v�d�L��4E�'F�'F��K�K�L�L���B�x�� �b�&�C� �b�S�y�y� �A�:�:��Q��$���c�2�2�B� �A�:�:��"� � �A��1�:�:�D���G�D�"�-�-�t�S�9�9�B��2�v� � �r��� �A�:�:�� '��V�D�,�s�*;�<�<�=�=����D�#�&�&���2�r�"�"�B� �A�:�:����B����D�#�6�6�B��2�v� � �c�#�h�h����Q����"�a���(�J� �� �A�:�:��)�!�R��3�3�T�3�?�?�B� �A�:�:�!�!�R��+�+�B���Y�r�]�]�B�/�/�B���W�W�Q�Z�Z��4�4�d�C�@�@�B��2�v� ��� � �A� �!�R���B� �A�b�D�/�b� �B� �R�-�B� �B� �A� �A� �� �B�� �r�T�!�V�b�L�� �Q��� �a��� �r�T�!�V�b�L�� �Q��� �a��� �� �b�2�#� � �B� �b�2�#� � �B� ��Q�� � �B� ��Q�� � �B��1�b�!�!�H�C�� ��z�z� �W�S�"�%�%�w�s�B�'7�'7�� <� <�� �Y�v�b�z�z�2�.�.��B� 7� 7�� � �����B� �R��s� #� #�� ��z�z� �W�S�"�%�%�w�s�B�'7�'7��s� C� C�� �r�6�MrUc�f�t|��dkrt�t|||d��dS)Nr)rr r2rs rV�mpf_cir4Xs0����{�{�Q����� �Q��c�1� %� %�a� (�(rUc�2�t|||d��dS)Nr)r2rs rV�mpf_sir6]s�� �Q��c�1� %� %�a� (�(rUc�f�|\}}|tkrFt|||d��d}t|��dkr|t||��fS|tfS|dz}t |||d��\}}t |t |��|��}t||ft||��||��}|S)Nrr�) rr2rr/r'rrMrAr@) r�r�r�rrr)r��cre�cims rV�mpc_cir:`s��� �F�B�� �U�{�{� �r�4��a� (� (�� +�� �B�<�<�!� � ���t�S�)�)�*� *��E�{�� ���B���B��A�.�.�H�C�� �#�y��}�}�b� )� )�C� �#�s��W�Q��^�^�T�3� 7� 7�B� �IrUc��|\}}|tkrt|||d��dtfS|dz}t|||d��}t|||��S)Nrr�)rr2r'rB)r�r�r�rrr�s rV�mpc_sir<ms`�� �F�B�� �U�{�{��"�d�C��+�+�A�.��6�6� ���B���R��Q�'�'�A� �1�d�C� � � rUc��|dz }|dko|dz}|d|dz}t|��}|dz|t|��zz}|dkr|||zz}t||��}|dz|z }|s t|zx}} n#||zt |��z|dz |z|zz x}} d} | r | |zd| z| |zzz|z } || z }| dz } | � |r| }t || ||��S)N�2rrr�r�r������)r�rrrrKr) ror�r��rounding�negater�r�r r�r�r�s rV� mpf_besseljnrB�s0���B�J�D� ��U�_�q�1�u�F� �A�$�q��t�)�C� �A���A� ���Q�x��{�{�]� "�B� �Q�w�w� �a�#�g� ����B���A� �Q�$�2��B� �4��2� ���A�A��A���a����q��s�B�h��l�3�3��A� �A� ���"�f�"�Q�$��!��*� %�"� ,�� �Q��� �Q��� ���� �B�� ��B�3��h� /� /�/rUc���|dko|dz}t|��}|}|\}}t|d|dz|d|dz��}|d|t|��zzt|��zz }|dkr|||zz}t||��}t||��}|dz|dzz |z } ||z|dz z } |st|zx} } t x} }nTt |||��\}}|t|��z|dz |z|zz x} } |t|��z|dz |z|zz x} }d}t| ��t|��zdkrcd|z||zz}| | z|| zz || z| | zz}} | |z|z } ||z|z }| | z } | |z } |dz }t| ��t|��zdk�c|r| } | } t| | ||��}t| | ||��}||fS)Nrrr�r�r�r?) r�r�rrrrr<rKr)ror�r�r@rA�origprecr�r�r�r$r%r�r�r�r�rrr�r}s rV� mpc_besseljnrE�sI�� ��U�_�q�1�u�F� �A���A��H��H�C�� �c�!�f�S��V�m�S��V�C��F�]� +� +�C��B��8�A�;�;�� ��S��� )�)�D� �Q�w�w� ��C���� �3�� � �C� �3�� � �C� ��F�S�!�V�O�� $�D� ��G��a�� �D� �8��t�O�#��c����c�c� ��c�1�-�-���B��4��7�7�]��1��d� �Q��7�7��c��4��7�7�]��1��d� �Q��7�7��c� �A� �c�(�(�S��X�X� �� !� !� �q�D�!�A�#�J���t�8�c�$�h�&��D��3�t�8�(;�S���a�x�D� ���a�x�D� �� �s� �� �s� �� �Q��� �c�(�(�S��X�X� �� !� !����d���d�� �c�D�5�(�H� 5� 5�B� �c�D�5�(�H� 5� 5�B� ��8�OrUc��|\}}}}|\}} } } |s|rtd���|r| sl|tks |tkrtS|tkr|tkrtStS|tkr|tkrtStStS|dz} ||z} | | z}| |z }t |��}|dkrl|dkrIt t ||| ��d��tt||| ��| ��}}|dz}|dk�I|\}}}}|\}} } } ||z} | | z}| |z }t| |��}t| |��}d}|dkr| }n |dkr| }|r t ||��}t ||��}t|| ��}t|| ��}t||| ��}t|| |z ||��S)z^ Computes the arithmetic-geometric mean agm(a,b) for nonnegative mpf values a, b. zagm of a negative numberr�r�r r�ri����)r rrrr�r&rr+r(ryr�rr6r)r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�� mag_delta� abs_mag_delta�min_mag�max_magro�af�bf�gs rV�mpf_agmrN�s�� ��E�4��s���E�4��s� �8��8��6�7�7�7� � �T� � ��9�9��T� � ��K� ��9�9��E�z�z�� ��K� ��9�9��E�z�z�� ��K�� � ���B� ��8�D� ��8�D��t� �I�� �N�N�M��r����b� � ��W�Q�q��_�_�R�0�0����1�R����,�,��A� �a� �M��b� � �"#���t�T�3�!"���t�T�3��C�x���C�x���4�K� ��$�t�n�n�G��$�t�n�n�G� �A���|�|� �H��� �2��� �H���� �a��O�O�� �a��O�O�� �!�R���B� �!�R���B��"�b�"���A� ��B�3�q�5�$�� ,� ,�,rUc�0�tt|||��S)z\ Computes the arithmetic-geometric mean agm(1,a) for a nonnegative mpf value a. )rNr�r�r�r�s rV�mpf_agm1rQ s�� �4��D�#� &� &�&rUc��t|��st|��rttfSt||fvrttfSt |��|krttfS|dz}t t | dz��} tt|||��d��}tt|||��|��}||}}tt|d��t|d��g��d}tt||d��d��} |tkst| t||����r|S��)z� Complex AGM. TODO: * check that convergence works as intended * optimize * select a nonarbitrary branch r�r�rr )rDrrErr;r&rrCrArFr:r#rGr8r r() r�r�r�r�r��eps�a1�b1r��errs rV�mpc_agmrWs.���Q����=��+�+���T�z���A�q�6����e�|���q�z�z�Q����e�|�� �b��B� �D�2�#�b�&� !� !�C�� �w�q�!�R�(�(�"� -� -�� �g�a��B�'�'�� ,� ,���2�1���G�A�b�M�M�7�1�R�=�=�9�:�:�1�=���g�a��B�'�'��,�,�� �5�=�=�F�3���T�(:�(:�;�;�=��H�rUc�0�tt|||��Sr�)rWr7rPs rV�mpc_agm1rY,s�� �7�A�t�S� )� )�)rUc��|dsH|tkrtt||��d��S|tkrtS|tkr|S|t krt S|dz}ttt ||��|��}t||��}tt|��|||��}t|d��S)Nrr �) rr&r/rrrrr+r'rQr))r�r�r�r�r�r�rs rV� mpf_ellipkr\/s��� �Q�4�� ��:�:��V�D�#�.�.��3�3� 3� ��:�:��L� ��9�9��H��D�y�y�� � ���B� ���q�"�%�%�r�*�*�A���B���A���r� � �A�t�S�)�)�A� �Q�� � �rUc�p�|\}}|tkr?|tkrtSt|t��rt |||��tfS|dz}t tt||��|��}t||��}tt|��|||��}t|d��S)Nr[r ) rrrEr!rr\rFr8r7rYrHr/rC) r�r�r�rrr�r�r�rs rV� mpc_ellipkr^Cs��� �F�B�� �U�{�{� ��:�:��O� �"�d� � � 4��b�$��,�,�e�3� 3� ���B����!�R�(�(�"�-�-�A���B���A��F�2�J�J��4��-�-�A� �Q�� � �rUc���|\}}}}|sZ|tkrtt||��d��S|tkrtS|t kr|S|tkrt �|tkrtS|dz}||z}|| krtt||��d��St|d��|z } tt| ��} t|d|z��} tt|| ��d|z��} tt| | ��| ��} tt|��}t| t|d��|��}t|t| |��||��S)Nr r�rr�r) rr&r/rrrr rr�r\r'r(r)r�r�r�r�r�r�r�r�r�r}�h�K�Kh�Kdiffr�r�s rV� mpf_elliperdPsY����D�#�s�B� � � ��:�:��V�D�#�.�.��3�3� 3� ��:�:��K� ��9�9��H� ��9�9�� ��D�y�y�� � �b��B� �b�&�C� �b�S�y�y����c�*�*�B�/�/�/� �C�� � �b��A��$����A��1�a��d���A� �G�A�q�M�M�1�R�4� (� (�B� �g�a��n�n�q�b� )� )�E���a���A���y��1�~�~�r�*�*�A� �1�g�a��m�m�T�3� /� /�/rUc��|\}}|tkrF|tkrttfSt|t��rt |||��tfS|dz}t |d��}t |d|dzd��|z }tt|��}t|d|z��} tt||d|z��d|z��} tt| | |��| ��} tt||��} t| t|d��|��} t| t| | |��||��S)Nr[rr�r�r)rrr!rrdrGr�r&r^r>rCr8r7r:rA)r�r�r�rrr�r�r}r`rarbrcr�r�s rV� mpc_elliperfns2�� �F�B�� �U�{�{� ��:�:��4�=� � �"�d� � � 4��b�$��,�,�e�3� 3� ���B� �!�Q�-�-�C� �C��F�3�q�6�M�1����"�A��$����A��1�a��d���A� �K��1�a��d�+�+�Q�r�T� 2� 2�B� �g�b�!�R�(�(�1�"� -� -�E����B���A���y��1�~�~�r�*�*�A� �1�g�a��B�'�'��s� 3� 3�3rU)r)t�__doc__�operatorr��backendrrrrr� libintmathr �libmpfr r r r rrrrrrrrrrrrrrrrrrr r!r"r#r$r%r&r'r(r)r*r+r,r-r.� libelefunr/r0r1r2r3r4r5r6�libmpcr7r8r9r:r;r<r=r>r?r@rArBrCrDrErFrGrHrIrJrK� gammazetarLrMrN� ExceptionrPr�r�r�r�r�r�r�r�r�r�rrrr!r'r2r4r6r:r<rBrErNrQrWrYr\r^rdrfrTrUrV�<module>rps{�������� � � � �>�>�>�>�>�>�>�>�>�>�>�>�>�>������� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ����������������������� ��������������������������������������������������<�<�<�<�<�<�<�<�<�<� � � � � �I� � � � �s$�s$�s$�l �f��� !� !� !�.$�&+�&+�&+�&+�Z��� %�% �% �% �% �\ � � � � � �  �  �  ����(#�u�( �( �( �( �T#�u�? �? �? �? �B#�&�&�&�&�#�&�&�&�&� *��t�t�t�t�l � � � �":�:�:�:�>&�Q�[�[�[�[�z#�)�)�)�)� #�)�)�)�)�#� � � � �#�!�!�!�!�P'1�0�0�0�0�.'1�"�"�"�"�H'�9-�9-�9-�9-�v%�'�'�'�'�'�����4%�*�*�*�*�'�����('� � � � �'�0�0�0�0�<'�4�4�4�4�4�4rU
Memory