U
    9%erÉ  ć                   @   s  d dl mZ ddlmZmZ dd ZdZeg dfdd	Zed
d Zedd Z	edd Z
edd Zedd Zedd Zedd Zedd Zedd Zedd Zedd Zed d! Zd"d# Zed$d% Zed&d' Zed(d) Zed*d+ Zed,d- Zed.d/ Zed0d1 ZedAd3d4Zed5d6 Zed7d8 Zed9d: Zed;d< Z ed=d> Z!ed?d@ Z"d2S )Bé   )Śxrangeé   )ŚdefunŚdefun_wrappedc                 C   s  d }}d}g }t |D ]X\}}	|	\}
}}}}}}d}t |
D ]2\}}|s@|  || ”dkr@|| r@d }}d}q@dddg}t |||gD ]¢\}}t |D ]\}}|  |”\}}|dkr¼q|| jkrd}|dkrü|D ]"}|  |”rŲ|t|krŲd} qüqŲ|rq||  d7  < q|dk r|| 7 }d}qq|rb|d |d |d  krb|sb| |” qt|rd }}q||||fS )NFé    Tr   r   éü’’’)Ś	enumerateŚreŚnint_distanceŚninfŚisnpintŚintŚappendŚsum)ŚctxŚtermsŚprecŚdiscard_known_zerosŚperturbŚ	recomputeŚ	extraprecŚdiscardŚ
term_indexŚtermŚw_sŚc_sŚalpha_sŚbeta_sŚa_sŚb_sŚzZhave_singular_nongamma_weightŚkŚwZ
pole_countZ
data_indexŚdataŚiŚxŚnŚdŚokŚu© r*   ś^/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/mpmath/functions/hypergeometric.pyŚ_check_need_perturb   sJ    

 ’
r,   a  
hypercomb() failed to converge to the requested %i bits of accuracy
using a working precision of %i bits. The function value may be zero or
infinite; try passing zeroprec=N or infprec=M to bound finite values between
2^(-N) and 2^M. Otherwise try a higher maxprec or maxterms.
Tc           +         sø   j } j} j} j}|d d  }	| dd”}
| d  |””}||d< | d”}| d”}d }d}z@  j d7  _  j |krtt| j f  j }|	d d  }|| }|
rÖt  td td	 j  td
| t	 |||\}}}  j |7  _ |rd|kr|d }n$ j
r,t j d }n|d | }   j| ”}|d | d  _ tt|D ]&}||  |7  < |||d  7 }qf|r|| }|røfddt|D }|sŹ jW ¢āS g }t|D ]\}}|\}}}}}} }!|
rzt  td|d t|t|t| f  td  |”  |” td  |”  |” td  |”  | ” td  |!”    j|| |!f|g fdd|D   fdd|D   fddt||D  ”}"|
rątd|" | |"” qÖt|dkr|s|d }q¦ j
r$  |”}q¦  |”} fdd|D }#t|#}$  |”}%|$|% }&|
rt  td|&d td j | d |& j | k }'|d kr¢d}(n|$ j  | k }(|d krĀd})n|$|k})|'rÖ|r¦  |&”rčq¦qj|'rn|d kr|d7 }|}qjnd  || ”  |”| kr,q¦n@|(r> j}q¦n.|)rP j}q¦nd|kr`q¦n|d9 }|}qjtt|&|d t||}*  j |*7  _ |
rjtd qjqjW 5 | _ X |
 S ) NŚverboseFŚmaxprecŚzeroprecŚinfprecr   é
   zENTERING hypercomb main loopzprec =ŚhextraŚhmagg333333Ó?r   c                    s   g | ]\}}| kr|qS r*   r*   )Ś.0r$   r   )r   r*   r+   Ś
<listcomp>k   s      zhypercomb.<locals>.<listcomp>z  Evaluating term %i/%i : %iF%iz
    powersz	    gammaz	    hyperz    zc                    s   g | ]}   |”qS r*   )Śgamma©r4   Śa©r   r*   r+   r5   ~   s     c                    s   g | ]}   |”qS r*   )Zrgamma©r4   Śbr9   r*   r+   r5      s     c                    s   g | ]\}}   ||”qS r*   )Śpower)r4   r"   Ścr9   r*   r+   r5      s     z
    Value:c                    s   g | ]}   |”qS r*   )Śmag)r4   r%   r9   r*   r+   r5      s     z  Cancellation:Śbitsz  Increased precision:é   r   z*  Must start over with increased precision)r   Śzeror
   r   ŚgetZ_default_hyper_maxprecŚ
ValueErrorŚ_hypercomb_msgŚprintr,   Z_fixed_precisionr   ŚldexpŚoneŚrangeŚlenr   ŚnstrZfprodŚhyperŚzipr   ŚfsumŚmaxr>   ŚisnanŚinfŚmin)+r   ŚfunctionŚparamsr   ŚkwargsŚorigZsumvalueŚdistr   Zorig_paramsr-   r.   r/   r0   Zperturbed_reference_valuer2   Zorig2r   r   r   r   r3   Śhr!   Zevaluated_termsr   Z	term_datar   r   r   r   r   r   r    ŚvZterm_magnitudesZmax_magnitudeZsum_magnitudeŚcancellationZprecision_okZzero_okZinf_okŚ	incrementr*   )r   r   r+   Ś	hypercomb:   sč    



’


’’žż






’
r[   c                    sF     |”}t|}t|} fdd|D } fdd|D }| dd”rø| dd”}d}||k rø|rø|| }	|	|kr®|s  |	d ”s®| |	” | |	” |d	8 }|d	8 }qZ|d	7 }qZ|dkrī|d	krŲ j||f|S |dkrź  |”S n2|d	krP|d	kr j|||f|S |d
kr0 j|||f|S |dkr   	|d d |”S nŠ|d
krĢ|d	krv j
|||f|S |d
kr j|||f|S |dkr® j|||f|S |dkr  j|||f|S nT||d	 krš j|||||f|S ||d	 kr | d”s  j|||||f|S t||  \}
} j||||
|f|S )z0
    Hypergeometric function, general case.
    c                    s   g | ]}   |”qS r*   ©Z_convert_paramr7   r9   r*   r+   r5   Ź   s     zhyper.<locals>.<listcomp>c                    s   g | ]}   |”qS r*   r\   r:   r9   r*   r+   r5   Ė   s     Z	eliminateTZeliminate_allFr   r   r   é   Śforce_series)ŚconvertrI   rB   r   ŚremoveŚ_hyp0f1ŚexpŚ_hyp1f1Ś_hyp1f2Ś_hyp1f0Ś_hyp2f1Ś_hyp2f2Ś_hyp2f3Ś_hyp2f0Ś_hypq1fqŚ
_hyp_borelrL   Śhypsum)r   r   r   r    rT   ŚpŚqZelim_nonpositiver$   r;   ZcoeffsŚtypesr*   r9   r+   rK   Ā   sV    




  

 
 
 

 
 
 
 rK   c                 K   s   | j g |g|f|S ©N©rK   )r   r;   r    rT   r*   r*   r+   Śhyp0f1ķ   s    rr   c                 K   s   | j |g|g|f|S rp   rq   ©r   r8   r;   r    rT   r*   r*   r+   Śhyp1f1ń   s    rt   c                 K   s   | j |g||g|f|S rp   rq   )r   Śa1Śb1Śb2r    rT   r*   r*   r+   Śhyp1f2õ   s    rx   c                 K   s   | j ||g|g|f|S rp   rq   )r   r8   r;   r=   r    rT   r*   r*   r+   Śhyp2f1ł   s    ry   c                 K   s   | j ||g||g|f|S rp   rq   )r   ru   Śa2rv   rw   r    rT   r*   r*   r+   Śhyp2f2ż   s    r{   c                 K   s   | j ||g|||g|f|S rp   rq   )r   ru   rz   rv   rw   Śb3r    rT   r*   r*   r+   Śhyp2f3  s    r}   c                 K   s   | j ||gg |f|S rp   rq   rs   r*   r*   r+   Śhyp2f0  s    r~   c                 K   s   | j |||g||g|f|S rp   rq   )r   ru   rz   Śa3rv   rw   r    rT   r*   r*   r+   Śhyp3f2	  s    r   c                 C   s   d| |  S ©Nr   r*   )r   r8   r    r*   r*   r+   re     s    re   c           	         sš   |\\ }r  ”}nd}|dkrÖ| d”sÖzj}zX jd|d  7  _ fdd}j|g dd	}  ”d j”  | }W 5 |_X   ”rø ”rø |”}|
 W S  j	k
rŌ   Y nX j
dd
|f gf|S )Nr   é   r^   é   r   c                     s      ”} j|  }dd|  }j  } d| ”}| |g|dgg g  j j  gg | f}||g|dgg g  j j  gg |f}||fS )Nr   é   r   é’’’’)ŚsqrtŚjŚmpq_1_2rb   Zmpq_3_2)r"   Zjwr)   r=   ŚEŚT1ŚT2©r;   r   r    r*   r+   rW   !  s    

.*z_hyp0f1.<locals>.hT©r^   r   )r>   rB   r   r[   r6   r   ŚpiŚ_is_real_typeŚ_reŚNoConvergencerl   )	r   r   r    rT   ŚbtypeŚmagzrU   rW   rX   r*   r   r+   ra     s&    
	"
ra   c              	      sj  |\\}}|\\}}s" j  S   ”}	|	dkrH  |”rP  |”dksH  ”r  |”  |”  kr  ”  krdkrn n jS  j S zzz  j|	7  _  	”dk  fdd}
 j
|
||gdd}  |”r  |”r  ”r  |”}|
 W W ¢S   jk
r2   Y nX W 5   j|	8  _X  jdd||f||gf|}|S )Né   r   r   c                    s   r    j| dd”}n
   | ”}d }|gd|  g|g||  g| d|  | gg | f}  ”gd| | g|g| g||  d|  gg |f}||fS )NT©Śexactr   )ZexpjpiŚfnegrb   )r8   r;   r   Śrzr   r   ©r   Zsectorr    r*   r+   rW   E  s    
24z_hyp1f1.<locals>.hTr   )rG   r>   Śisintr	   ŚisinfŚsignrP   Śnanr   Z_imr[   r   r   r   rl   )r   r   r   r    rT   r8   Śatyper;   r   r   rW   rX   r*   r   r+   rc   5  s0    



$
4
	$

rc   c           %      K   sī  ||||f\}}}}	| j }
| dd|
 ”}d}|
| | _ |  |	”}|  d”}|  d”}|  d”}d}|| | }|| j }|d | j }d| }|| }|| | }|| | }|d }| j  d }| j}| j}| j}| j}|| }|| ||  | d|d  | ||   }|||| | |   } ||| || |   }!|||| ||  |  |  d| |  }"|| |" }#t	|||#}||#| |k rq¶| |!|#  }}}|d7 }qÜ|||# }$|$|k rŅqźq.||$7 }||kr.| j
q.|#S )Nr.   éd   r1   r   r   r   r   )r   rB   r_   Śmpfr   rJ   Śnprintr>   r   rN   r   )%r   r8   r;   r=   r    rT   Z_aŚ_bZ_cZ_zrU   r.   Śextrar'   ŚeŚfr!   ZabzŚchZc1hZnzŚgZabgZcbaZz2ŚtolrJ   r”   r>   ZmaxmagZkchZkakbzZd1Śe1ŚftŚf1rY   r*   r*   r+   Ś_hyp2f1_gosperY  sR    





,,

r¬   c                    sś  |\\}}\}}|\\ }	dkr
   | | ”dk}
 |”rL|dkp\ |”o\|dk}  ”o“ dko“ |”r |  kodkn  p² |”o² |  ko®dkn   }|
s¾|rź|sźj  | | g |  | gddS  || djd  ”j S s8 s*|dks*|dkr2d S jS   ”r¤ dkr¤ |”rt |  krrdks¤n  |”r |  krdkrn nnjS t}|dksö |”rÖ|dkrÖ|dksö |”r|dkr|dkrjdd|||	f|| gf|S j	}zĢ j	d7  _	|d	kr^ fd
d}j
|||gf|}ntd dkr fdd}j
|||gf|}nTtd  dkrŌ | |  d  ”d |  }nt|| f|}W 5 |_	X |
 S )Nr   r   T)Z_infsignr   gé?iü’’r1   gĶĢĢĢĢĢō?c                    s   j   }| | }d } g|  g | g| |  g| ||  gj | g|f} g| g |g|  | g||| gj | g|f}||fS r   )Zmpq_1)r8   r;   ŚtŚabr   r   r   ©r=   r   r    r*   r+   rW   Ć  s    
  86z_hyp2f1.<locals>.hg      č?c                    s    |  | } |  } | }d }g g  |g||g| |gd| g|f}|g|g | |   g| |g||gd| g|f}||fS r   r*   )r8   r;   r­   ŚcaŚcbr   r   r   )r=   r    r*   r+   rW   Ģ  s       $0)r	   r   Ś	gammaprodry   ŚepsrP   r   Śabsrl   r   r[   r¬   )r   r   r   r    rT   r8   r   r;   r   ŚctypeZ
convergentZfiniteZzerodivŚabszrU   rW   rX   r*   rÆ   r+   rf     sb    

$B’( &’ ’
’*’’’"
*rf   c              
      sØ  t  \}t  \}ttt}	d}
D ]} |”r8|dkr8d}
 qXq8|	dk sd|
rŖz j	
||  f|W S  jk
rØ   |	dks¢|
r¤ Y nX dkrč tt ”}|dkrčjdf|j	 S 	
fdkrĪtd dk rĪ\ \  } 
   g  d|g”}d|if fd	d
	zBjdj	g| d”| dd”d}| 
g g” W S  jk
rĢ   Y nX |	dk r ”dkrdjif	
fdd
	| dd”}z2jdj	g| d”| dd”| dd”dW S  jk
rl   d|krh Y nX | d”rtd fddfdd}jd }j}z¼dj } jd7  _tdD ]} fddt|D ”}j|j	g|||| d”ddd\}}||k r<|| } qp|d 9 } jjd  7  _|d!krŲ d"”qŲW 5 |_X |
 S 	
fd#d$}j| f|S )%z&
    Evaluates 3F2, 4F3, 5F4, ...
    Fr   Tr   gń?gĶĢĢĢĢĢģ?)r]   r   g©?c                    s~     |  }| |kr"||  }nH|| d  }||   d |   d  9 }|| |d   }||| < |   |” S r   )ry   )r!   Ś_cacher)   r­   )ru   rz   r   rv   rw   r   r    r*   r+   r     s    
$z_hypq1fq.<locals>.termr-   Śstrict)r-   rø   c                    sÜ   t | }|| kr` | ”  | ” } D ]}| || ”9 }q,D ]}| || ” }qF|S ||krp|| S |d }|d }tD ]}| | | 9 }qtD ]}|| |  }qŖ|9 }|| }|||< |S r   )r   r    ZfacŚrfr   )Śkkr·   r!   r­   r8   r;   Śmr   )r   r   r   rm   rn   r   r    r*   r+   r   '  s(        Ś
sum_methodzr+s+er¤   Ś )r-   rø   Śmethodz$Attempting Euler-Maclaurin summationc                 3   s¬   dg }t fddD t fdd|D   ”  V  d t  fddD t  fdd|D  } dkr| ”7 }|V   d7  qNd S )Nr   c                 3   s   | ]}   | ”V  qd S rp   ©Zloggammar7   ©r   Śk0r*   r+   Ś	<genexpr>i  s     z._hypq1fq.<locals>.log_diffs.<locals>.<genexpr>c                 3   s   | ]}   | ”V  qd S rp   ræ   r:   rĄ   r*   r+   rĀ   j  s     r   c                 3   s   | ]}   | ”V  qd S rp   ©Śpsir7   ©r   r$   rĮ   r*   r+   rĀ   m  s     c                 3   s   | ]}   | ”V  qd S rp   rĆ   r:   rÅ   r*   r+   rĀ   n  s     )r   Ślog)rĮ   rw   rX   ©r   r   r   r    )r$   rĮ   r+   Ś	log_diffsg  s    
’’’z_hypq1fq.<locals>.log_diffsc                 3   sF     dd D dd  D ”} | ”D ]}|| }|V  q.d S )Nc                 S   s   g | ]}|qS r*   r*   r:   r*   r*   r+   r5   u  s     z1_hypq1fq.<locals>.hyper_diffs.<locals>.<listcomp>c                 S   s   g | ]}|qS r*   r*   r7   r*   r*   r+   r5   u  s     )r²   Z	diffs_exp)rĮ   ŚCr'   rX   )r   r   r   rČ   r*   r+   Śhyper_diffst  s     z_hypq1fq.<locals>.hyper_diffsi   é2   r@   é   c                 3   s   | ]} |V  qd S rp   r*   )r4   r!   )r   r*   r+   rĀ     s     z_hypq1fq.<locals>.<genexpr>)rØ   Zadiffsr-   ŚerrorZ_fast_abortr   r   z*Euler-Maclaurin summation did not convergec            
   
      s   t | d   t | d  g }j }jdd}td D ]²  |g} g}g  fddtd D  } fddtD  }gfddtD  } fddtd D }	| ||||||	|f” qH|S )	NTr   r   c                    s    g | ]}|kr |  qS r*   r*   ©r4   r   ©r   Śakr!   r*   r+   r5   ”  s      z'_hypq1fq.<locals>.h.<locals>.<listcomp>c                    s   g | ]}|   qS r*   r*   rĪ   ©rŠ   r   r*   r+   r5   ¢  s     c                    s   g | ]} |  d  qS ©r   r*   rĪ   rŃ   r*   r+   r5   £  s     c                    s$   g | ]}|krd  |   qS rŅ   r*   rĪ   rĻ   r*   r+   r5   ¤  s      )ŚlistrG   r   rH   r   )
ŚargsZTsZreczZnegzrÉ   ZCpZGnZGdZFnZFd)r   rm   rn   r    )r   rŠ   r   r!   r+   rW     s    
(z_hypq1fq.<locals>.h)rL   rÓ   r“   r   rl   r   r	   r   rK   rP   r²   ZnsumrB   r   rG   ŚreplacerE   r³   r   Zdpsr   rM   Zsumemr[   )r   rm   rn   r   r   r    rT   Śa_typesŚb_typesr¶   Zispolyr8   ŚSr)   Śinitialr¼   rŹ   rØ   r   Śtruncr$   ŚheadŚtailŚerrrX   rW   r*   )ru   rz   r   r   rv   rw   r   r   rČ   rm   rn   r   r    r+   rj   ß  s      
, 

’"

ž
"

ü


’rj   c                    s   rt   \ }t  n
g d  }r>t  \}tn
g d }| dj”|d< z j||||   f|W S  jk
r   Y nX j}	z| djd ”}
 jd7  _djif fdd	j}td	jD ],}|}||7 }t	||
krč|  W ¢S qčW 5 |	_X ||d
 kr| d”}|s° 
”dk r¦td	t	 } 
”dkrddd| d| jg}nddd| d| jg}n
djg}| di ”} fdd}j||fddi|\}}|t	|j d kr|S jd S )Nr*   ŚmaxtermsZ	asymp_tolr   r1   r   c                    sl   | |kr||  S | d } D ]}||| d  9 }q D ]}||| d   }q:|9 }||  }||| < |S r   r*   )r!   Ścacher­   r8   r;   )r   r   r   r    r*   r+   r   æ  s      z_hyp_borel.<locals>.termr   r]   Ścontourg      Š?y               @y       @       @r   y              Ąy       @       ĄŚquad_kwargsc                    s$     |  ”  dg |  ” S r   )rb   rK   )r­   rĒ   r*   r+   r§   ą  s    z_hyp_borel.<locals>.grĶ   Tr   )rL   rÓ   rB   r   rl   r   r³   rG   r   r“   ŚargrN   rP   Śquad)r   rm   rn   r   r   r    rT   rÖ   r×   r   rØ   Śsr!   r­   rą   r)   rį   r§   ŚIrŻ   r*   )r   r   r   r   r    r+   rk   ©  sP    



 


rk   c                    s  |\\}}\}}|\\}	}
\}}t }  ”} j}|}| d” oT  |”dk}|rōzzt  j|7  _ fdd} j||||	|gdd j d}t fdd	|||	|fD d
krČ  |”}|W W ¢S   jk
rę   Y nX W 5 | _X  jdd|||
|f|||	|gf|S )Nr^   r]   c                    sp  | | | | }| | }|| }i } j |d< |d | ||  | |  |d< d}d}	d}
|	|kr"d| d|   | d  d|  |d  ||  | |  ||  d| d|d   |	  d|	d   }|	| | d |	| | d  |	| d  } j |	 |||	d   |||	d     ||	< ||	 |	   }t|d j k rLq|	dkrrt|
t| dk rr j||7 }|}
|	d7 }	qZ  ”| }|g|dg||g| |gg g df} g|  g||||  g|||  ||  g| | | d | | d g| | d gd f} g| g||| | g| || || g||| d || d g|  | d gd f}|||fS )	Nr   r   r   r]   ē¹?rĢ   ē      ų?r   )rG   r“   r³   r   rb   )ru   rz   rv   rw   ŚXŚA2ZB2r=   Śs1r!   ŚtprevŚuu1Śuu2Śt1rŲ   r   r   ŚT3©r   r    r*   r+   rW     s4    
 
d,. 
"VXz_hyp2f2.<locals>.hTr   ©r^   rŽ   c                 3   s   | ]}   |”V  qd S rp   ©r   ©r4   r)   r9   r*   r+   rĀ   !  s     z_hyp2f2.<locals>.<genexpr>rĢ   r   )	r“   r>   r   rB   r[   r   r	   r   rl   )r   r   r   r    rT   ru   Śa1typerz   Śa2typerv   Śb1typerw   Śb2typer¶   r   rU   Śasymp_extraprecŚcan_use_asymptoticrW   rX   r*   rš   r+   rg   č  s,    
’ $


rg   c                    s(  |\\}}|\\}}\}	}
t }  ”} j}o<|d }| d” oh  |”dkoh  |”d| k}|rzzp  j|7  _ fdd} j||||	gdd j d	}t fd
d|||	fD dkrŚ  |”}|W W ¢S   jk
rų   Y nX W 5 | _X  j	dd|||
f|||	gf|S )Nr   r^   é   rē   c                    sT   j | | |  j   }i } j|d< d jd|  | | d  | | |  ||   j  |d< d||  j| | |  d|  | | d    j d   jdd|  d  | | d| | |  d| d  d|   | | d   d   |d< d}d}d}d}||krąd|d  d	|  d|  d|  d |  d| d   || d  d|  || d    j }	||  | |  j  ||  | |  j   ||  | |  j  }
 jd|  |	||d   |
||d     ||< ||  d
|   } j |   d”|   | } j|   d”|   | }t|d j	 k rLq|dkrrt|t| dk rr j
||7 }||7 }|}|d7 }q   j| d   ”  ”|    j| d   ”   ”|  }d|  j gdd
|g||g| gg g df} g|  g||g||  ||  g| | | d | | d gg d f}||fS )Nr   r   r]   r   éš’’’r   éų’’’é   iś’’’ē      ąærę   rĢ   rē   ē      ą?)r   rG   Śmpq_1_4Śmpq_3_16Śmpq_1_16Zmpq_5_2r   r    r“   r³   r   Śexpjr   r   )ru   rv   rw   rč   r=   rź   Śs2r!   rė   rģ   rķ   r"   rī   Śt2rŲ   r   r   rš   r*   r+   rW   I  sh    
<:.’’’
6
’’’*’2  "$’"  ’   ’z_hyp1f2.<locals>.hTr   rń   c                 3   s   | ]}   |”V  qd S rp   rņ   ró   r9   r*   r+   rĀ   r  s     z_hyp1f2.<locals>.<genexpr>r   ©
r“   r>   r   rB   r   r[   r   r	   r   rl   )r   r   r   r    rT   ru   rō   rv   rö   rw   r÷   r¶   r   rU   rų   rł   rW   rX   r*   rš   r+   rd   -  s0    

’ž("


rd   c              	      sF  |\\}}\}}|\\}	}
\}}\}}t }  ”}oB|d } j}| d” ot  |”dkot  |”d| k}|rzzx  j|7  _ fdd} j||||	||gdd j d	}t fd
d|||	||fD dkrī  |”}|W W ¢S   jk
r   Y nX W 5 | _X  j	dd|||
||f|||	||gf|S )Nr   r^   rś   rē   c              	      sĀ   j | | | | |  j   }| | }|| | }| | }|| ||  ||  }	|| | }
i } j|d< d|	|  jd| | d  ||    j  |d<  j |d d   jdd| d  |	|  d|
  dd|d  d	|  d
|  | d  ||   d   |d< d}d}d}d}||kr¶|d|  d |d|  d|  d  |d|  d|  d  |d|  d|  d  }d|d d  dd| |  |d d   dd|d  d| |  d|	  | d  |d   d|d   d| |d   d|	  d
|
  dd|	 | d  |  d|  d }d|d d  dd| | d|  d  |d   d|d   } jd|  |||d   |||d    |||d     ||< ||    d| ” } j |   d”|   | } j|   d”|   | }t|d j	 k r&ql|dkrLt|t| dk rL j
||7 }||7 }|}|d7 }q"   j| d   ”  ”|    j| d   ”   ”|  }d|  j gdd|g|||g| |gg g df} g|  g|||||  g|||  ||  ||  g| | | d | | d | | d g| | d gd f} g| g|||| | g| || || || g||| d || d || d g|  | d gd f}|||fS )Nr   r   r]   r   rū   é    r   rü   rż   r   é   é   r   rĢ   iö’’’rž   rę   rē   r’   )r   rG   r   r  r  r<   r   r    r“   r³   r   r  r   r   )ru   rz   rv   rw   r|   rč   ré   ZB3ŚAŚBŚRr=   rź   r  r!   rė   rģ   rķ   Zuu3r"   rī   r  rŲ   r   r   rļ   rš   r*   r+   rW     s     
42.’’
>’*2’
’žžžžžž@B  "$’&  ’0"  ’0"  ’z_hyp2f3.<locals>.hTr   rń   c                 3   s   | ]}   |”V  qd S rp   rņ   ró   r9   r*   r+   rĀ   Ē  s     z_hyp2f3.<locals>.<genexpr>r  r]   r  )r   r   r   r    rT   ru   rō   rz   rõ   rv   rö   rw   r÷   r|   Zb3typer¶   r   rų   rU   rł   rW   rX   r*   rš   r+   rh     s0    
’’."&


rh   c                    s   |\\}}\}}z:|  ” }	|	 d j”|	d<  jdd||f||gf|	W S   jk
rl   | d”rh Y nX  fdd}
 j|
|d| | gf|S )NrŽ   r   r   r^   c                    s      |”}d } j||gdd| gg | | d |g| g|g|f} j ||gddd|  | gg | d| g| | d gd| g|f}||fS )Nr   r   r   )Zsinpir   )r8   r;   r"   r   r   r   rš   r*   r+   rW   Ž  s
    
0Bz_hyp2f0.<locals>.hr   )ŚcopyrB   r   rl   r   r[   )r   r   r   r    rT   r8   r   r;   r   ZkwargsbrW   r*   rš   r+   ri   Ń  s     
ri   Nc                    s*  |\}}|\}	}
t |t | t |	t |
 || }|	|
 } fdd|D } fdd|D }  ”|d krĄk rd}krd}krĄ kr¼tdkr¼d}nd}| d”rÜtd| |dkrž fdd	}n fd
d	} j||| f|S )Nc                    s   g | ]}   |”qS r*   ©r_   ©r4   Ś_r9   r*   r+   r5   š  s     zmeijerg.<locals>.<listcomp>c                    s   g | ]}   |”qS r*   r  r  r9   r*   r+   r5   ń  s     r   r   r-   zMeijer G m,n,p,q,series =c            	   
      s  | d   | d  g }t D ]ō	g}  g}fddt D }| fddt D 7 } fddt D }|fddt D 7 } fddt D }fddt D }j    	j   }| |||||||f” q$|S )Nc                    s$   g | ]}|kr |    qS r*   r*   rĪ   ©r;   r!   r*   r+   r5     s      ś&meijerg.<locals>.h.<locals>.<listcomp>c                    s    g | ]}d  |    qS rŅ   r*   rĪ   ©r8   r;   r!   r*   r+   r5     s     c                    s   g | ]} |   qS r*   r*   rĪ   r  r*   r+   r5     s     c                    s    g | ]}d  |     qS rŅ   r*   rĪ   r  r*   r+   r5     s     c                    s    g | ]}d  |    qS rŅ   r*   rĪ   r  r*   r+   r5   	  s     c                    s(   g | ] }|krd  |     qS rŅ   r*   rĪ   r  r*   r+   r5   
  s      )rH   rG   r   ©	rŌ   r   ŚbasesZexptsZgnŚgdZhnZhdŚhz©r   r»   r&   rm   rn   Śrr    r  r+   rW   ž  s    "zmeijerg.<locals>.hc            	   
      sB  | d   | d  g }t D ]	g}dkrH  d g}n  d  ” g} fddt D }| fddt D 7 } fddt D }| fddt D 7 } fddt D } fddt D }j    	j   }| |||||||f” q$|S )	Nr   c                    s$   g | ]}|kr   |  qS r*   r*   rĪ   ©r8   r!   r*   r+   r5     s      r  c                    s    g | ]}d    |  qS rŅ   r*   rĪ   r  r*   r+   r5     s     c                    s   g | ]}  |  qS r*   r*   rĪ   r  r*   r+   r5     s     c                    s    g | ]}d     |  qS rŅ   r*   rĪ   r  r*   r+   r5     s     c                    s    g | ]}d    |  qS rŅ   r*   rĪ   r  r*   r+   r5     s     c                    s(   g | ] }|krd  |     qS rŅ   r*   rĪ   r  r*   r+   r5     s      )rH   r_   rG   r   r  r  r  r+   rW     s"    ")rI   r_   r“   rB   rE   r[   )r   r   r   r    r  ZseriesrT   ZanZapZbmŚbqr8   r;   rW   r*   r  r+   Śmeijergę  s4    
  
r  c           
      K   sś   t |t |kr$|| }}|| }}dd }|  |”r8n|  |”rDn|  |”rd||||f\}}}}nn||sŅ|| |d  }	||	stdd| |  d| || |   | j|| ||| | ||	|f| S | j|g|g|gdd|gi||f|S )Nc                 S   s   t | dk S )Ng®Gįz®ļ?)r“   )r%   r*   r*   r+   r(   +  s    zappellf1.<locals>.okr   z%Analytic continuation not implemented©śm+nr»   r&   r  )r“   r   rC   Śappellf1Śhyper2d)
r   r8   rv   rw   r=   r%   ŚyrT   r(   Śu1r*   r*   r+   r  $  s$    




 "’r  c           	      K   s,   | j |g|g|gd|g|gd||f|S )Nr  ©r»   r&   ©r   )	r   r8   rv   rw   Śc1Śc2r%   r!  rT   r*   r*   r+   Śappellf2A  s      ’’r'  c                 K   s   |   |”p|   |”}	|   |”p&|   |”}
|	s^|
s@t|t|kr^|| }}||||f\}}}}| j||g||gdd|gi||f|S )Nr#  r  )r   r“   r   )r   ru   rz   rv   rw   r=   r%   r!  rT   Zouter_polynomialZinner_polynomialr*   r*   r+   Śappellf3G  s    
r(  c                 K   s&   | j d||gi|g|gd||f|S )Nr  r#  r$  )r   r8   r;   r%  r&  r%   r!  rT   r*   r*   r+   Śappellf4Q  s    r)  c           "         s“     |”}   |”} fdd}t|}t|}||d}	||d}
||d}||d}||d}||d}||d	}||d
}||d}||d}||d}|r¶td| ” d  |rĪtd| ” d  d} j}  d”d} j}| dd| ”}z¦  jd7  _ j
 }d}d}t	|
}t	|}fdd|	D }fdd|D }|D ]"}| }| 
|” | 
|” qV|D ]"}| }| 
|” | 
|” q~|D ]&}| 
| ” | 
| d ” q¦|D ]<}|d9 }|d 9 }| 
d|  ” | 
|  ” qŅ|D ]:}| 
|d  ” | 
|d  d| d   ” q|D ]F}|d9 }| 
d| d  ” | 
|d  d| d   ” qT|D ]H}|d9 }| 
d|  ” | 
d| d  ” | 
| d ” q  j|||| fd ji|} ||  | }!t|!|k r.|d7 }nd}|dks¢|sFq¢||!7 }|D ]}||9 }qR|D ]}|| }qfd7 ||  }|kr  d”qW 5 | _X |
 S )az  
    Sums the generalized 2D hypergeometric series

    .. math ::

        \sum_{m=0}^{\infty} \sum_{n=0}^{\infty}
            \frac{P((a),m,n)}{Q((b),m,n)}
            \frac{x^m y^n} {m! n!}

    where `(a) = (a_1,\ldots,a_r)`, `(b) = (b_1,\ldots,b_s)` and where
    `P` and `Q` are products of rising factorials such as `(a_j)_n` or
    `(a_j)_{m+n}`. `P` and `Q` are specified in the form of dicts, with
    the `m` and `n` dependence as keys and parameter lists as values.
    The supported rising factorials are given in the following table
    (note that only a few are supported in `Q`):

    +------------+-------------------+--------+
    | Key        |  Rising factorial | `Q`    |
    +============+===================+========+
    | ``'m'``    |   `(a_j)_m`       | Yes    |
    +------------+-------------------+--------+
    | ``'n'``    |   `(a_j)_n`       | Yes    |
    +------------+-------------------+--------+
    | ``'m+n'``  |   `(a_j)_{m+n}`   | Yes    |
    +------------+-------------------+--------+
    | ``'m-n'``  |   `(a_j)_{m-n}`   | No     |
    +------------+-------------------+--------+
    | ``'n-m'``  |   `(a_j)_{n-m}`   | No     |
    +------------+-------------------+--------+
    | ``'2m+n'`` |   `(a_j)_{2m+n}`  | No     |
    +------------+-------------------+--------+
    | ``'2m-n'`` |   `(a_j)_{2m-n}`  | No     |
    +------------+-------------------+--------+
    | ``'2n-m'`` |   `(a_j)_{2n-m}`  | No     |
    +------------+-------------------+--------+

    For example, the Appell F1 and F4 functions

    .. math ::

        F_1 = \sum_{m=0}^{\infty} \sum_{n=0}^{\infty}
              \frac{(a)_{m+n} (b)_m (c)_n}{(d)_{m+n}}
              \frac{x^m y^n}{m! n!}

        F_4 = \sum_{m=0}^{\infty} \sum_{n=0}^{\infty}
              \frac{(a)_{m+n} (b)_{m+n}}{(c)_m (d)_{n}}
              \frac{x^m y^n}{m! n!}

    can be represented respectively as

        ``hyper2d({'m+n':[a], 'm':[b], 'n':[c]}, {'m+n':[d]}, x, y)``

        ``hyper2d({'m+n':[a,b]}, {'m':[c], 'n':[d]}, x, y)``

    More generally, :func:`~mpmath.hyper2d` can evaluate any of the 34 distinct
    convergent second-order (generalized Gaussian) hypergeometric
    series enumerated by Horn, as well as the Kampe de Feriet
    function.

    The series is computed by rewriting it so that the inner
    series (i.e. the series containing `n` and `y`) has the form of an
    ordinary generalized hypergeometric series and thereby can be
    evaluated efficiently using :func:`~mpmath.hyper`. If possible,
    manually swapping `x` and `y` and the corresponding parameters
    can sometimes give better results.

    **Examples**

    Two separable cases: a product of two geometric series, and a
    product of two Gaussian hypergeometric functions::

        >>> from mpmath import *
        >>> mp.dps = 25; mp.pretty = True
        >>> x, y = mpf(0.25), mpf(0.5)
        >>> hyper2d({'m':1,'n':1}, {}, x,y)
        2.666666666666666666666667
        >>> 1/(1-x)/(1-y)
        2.666666666666666666666667
        >>> hyper2d({'m':[1,2],'n':[3,4]}, {'m':[5],'n':[6]}, x,y)
        4.164358531238938319669856
        >>> hyp2f1(1,2,5,x)*hyp2f1(3,4,6,y)
        4.164358531238938319669856

    Some more series that can be done in closed form::

        >>> hyper2d({'m':1,'n':1},{'m+n':1},x,y)
        2.013417124712514809623881
        >>> (exp(x)*x-exp(y)*y)/(x-y)
        2.013417124712514809623881

    Six of the 34 Horn functions, G1-G3 and H1-H3::

        >>> from mpmath import *
        >>> mp.dps = 10; mp.pretty = True
        >>> x, y = 0.0625, 0.125
        >>> a1,a2,b1,b2,c1,c2,d = 1.1,-1.2,-1.3,-1.4,1.5,-1.6,1.7
        >>> hyper2d({'m+n':a1,'n-m':b1,'m-n':b2},{},x,y)  # G1
        1.139090746
        >>> nsum(lambda m,n: rf(a1,m+n)*rf(b1,n-m)*rf(b2,m-n)*\
        ...     x**m*y**n/fac(m)/fac(n), [0,inf], [0,inf])
        1.139090746
        >>> hyper2d({'m':a1,'n':a2,'n-m':b1,'m-n':b2},{},x,y)  # G2
        0.9503682696
        >>> nsum(lambda m,n: rf(a1,m)*rf(a2,n)*rf(b1,n-m)*rf(b2,m-n)*\
        ...     x**m*y**n/fac(m)/fac(n), [0,inf], [0,inf])
        0.9503682696
        >>> hyper2d({'2n-m':a1,'2m-n':a2},{},x,y)  # G3
        1.029372029
        >>> nsum(lambda m,n: rf(a1,2*n-m)*rf(a2,2*m-n)*\
        ...     x**m*y**n/fac(m)/fac(n), [0,inf], [0,inf])
        1.029372029
        >>> hyper2d({'m-n':a1,'m+n':b1,'n':c1},{'m':d},x,y)  # H1
        -1.605331256
        >>> nsum(lambda m,n: rf(a1,m-n)*rf(b1,m+n)*rf(c1,n)/rf(d,m)*\
        ...     x**m*y**n/fac(m)/fac(n), [0,inf], [0,inf])
        -1.605331256
        >>> hyper2d({'m-n':a1,'m':b1,'n':[c1,c2]},{'m':d},x,y)  # H2
        -2.35405404
        >>> nsum(lambda m,n: rf(a1,m-n)*rf(b1,m)*rf(c1,n)*rf(c2,n)/rf(d,m)*\
        ...     x**m*y**n/fac(m)/fac(n), [0,inf], [0,inf])
        -2.35405404
        >>> hyper2d({'2m+n':a1,'n':b1},{'m+n':c1},x,y)  # H3
        0.974479074
        >>> nsum(lambda m,n: rf(a1,2*m+n)*rf(b1,n)/rf(c1,m+n)*\
        ...     x**m*y**n/fac(m)/fac(n), [0,inf], [0,inf])
        0.974479074

    **References**

    1. [SrivastavaKarlsson]_
    2. [Weisstein]_ http://mathworld.wolfram.com/HornFunction.html
    3. [Weisstein]_ http://mathworld.wolfram.com/AppellHypergeometricFunction.html

    c                    sF   |   |g ”}zt|}W n tk
r2   |g}Y nX  fdd|D S )Nc                    s   g | ]}   |”qS r*   r  )r4   rā   r9   r*   r+   r5   ę  s     z*hyper2d.<locals>.parse.<locals>.<listcomp>)ŚpoprÓ   Ś	TypeError)ŚdctŚkeyrŌ   r9   r*   r+   Śparseą  s    zhyper2d.<locals>.parser»   r&   r  zm-nzn-mz2m+nz2m-nz2n-mzunsupported key: %rr   rŽ   r@   r1   r   c                    s   g | ]}|  qS r*   r*   r7   ©r»   r*   r+   r5     s     zhyper2d.<locals>.<listcomp>c                    s   g | ]}|  qS r*   r*   r:   r/  r*   r+   r5     s     r   r   r   r’   r/   r]   zmaxterms exceeded in hyper2d)r_   ŚdictrC   ŚkeysrG   r    r   rB   r³   rÓ   r   rK   r“   r   )"r   r8   r;   r%   r!  rT   r.  r   r   Za_mZa_nZ	a_m_add_nZ	a_m_sub_nZ	a_n_sub_mZ
a_2m_add_nZ
a_2m_sub_nZ
a_2n_sub_mZb_mZb_nZ	b_m_add_nrä   ŚouterZok_countr   rŽ   rØ   Z
inner_signZ
outer_signZinner_aZinner_bZouter_aZouter_bŚinnerr   r*   )r   r»   r+   r   V  s¬     	












  


&&’’
  
r   c                    sp   |   ”|| }t|t|}|fdks:|fdkrD| j S | d   fdd}| j||f|S )a`  
    Evaluates the bilateral hypergeometric series

    .. math ::

        \,_AH_B(a_1, \ldots, a_k; b_1, \ldots, b_B; z) =
            \sum_{n=-\infty}^{\infty}
            \frac{(a_1)_n \ldots (a_A)_n}
                 {(b_1)_n \ldots (b_B)_n} \, z^n

    where, for direct convergence, `A = B` and `|z| = 1`, although a
    regularized sum exists more generally by considering the
    bilateral series as a sum of two ordinary hypergeometric
    functions. In order for the series to make sense, none of the
    parameters may be integers.

    **Examples**

    The value of `\,_2H_2` at `z = 1` is given by Dougall's formula::

        >>> from mpmath import *
        >>> mp.dps = 25; mp.pretty = True
        >>> a,b,c,d = 0.5, 1.5, 2.25, 3.25
        >>> bihyper([a,b],[c,d],1)
        -14.49118026212345786148847
        >>> gammaprod([c,d,1-a,1-b,c+d-a-b-1],[c-a,d-a,c-b,d-b])
        -14.49118026212345786148847

    The regularized function `\,_1H_0` can be expressed as the
    sum of one `\,_2F_0` function and one `\,_1F_1` function::

        >>> a = mpf(0.25)
        >>> z = mpf(0.75)
        >>> bihyper([a], [], z)
        (0.2454393389657273841385582 + 0.2454393389657273841385582j)
        >>> hyper([a,1],[],z) + (hyper([1],[1-a],-1/z)-1)
        (0.2454393389657273841385582 + 0.2454393389657273841385582j)
        >>> hyper([a,1],[],z) + hyper([1],[2-a],-1/z)/z/(a-1)
        (0.2454393389657273841385582 + 0.2454393389657273841385582j)

    **References**

    1. [Slater]_ (chapter 6: "Bilateral Series", pp. 180-189)
    2. [Wikipedia]_ http://en.wikipedia.org/wiki/Bilateral_hypergeometric_series

    )r   r   )r   r   r   c            	         sČ   t | d  }t | d  }dd |D }dd |D }d   gdd |D  dd |D  }dgdgt|  dgt|  }g g g g |dg |f}||g g |dg |d   f}||fS )Nc                 S   s   g | ]}d | qS ©r   r*   r:   r*   r*   r+   r5   ~  s     z&bihyper.<locals>.h.<locals>.<listcomp>c                 S   s   g | ]}d | qS r4  r*   r7   r*   r*   r+   r5     s     r   c                 S   s   g | ]}d | qS rŅ   r*   r:   r*   r*   r+   r5     s     c                 S   s   g | ]}d | qS rŅ   r*   r7   r*   r*   r+   r5     s     r   )rÓ   rI   )	r   r   r   Zaa_sZbb_sŚrpŚrcr   r   ©Śnegrm   r    r*   r+   rW   {  s    *" zbihyper.<locals>.h)r_   rI   rA   r[   )r   r   r   r    rT   r   rn   rW   r*   r7  r+   ŚbihyperD  s    0


r9  )r   N)#Zlibmp.backendr   Z	functionsr   r   r,   rD   r[   rK   rr   rt   rx   ry   r{   r}   r~   r   re   ra   rc   r¬   rf   rj   rk   rg   rd   rh   ri   r  r  r'  r(  r)  r   r9  r*   r*   r*   r+   Ś<module>   sz   / 
*









#
#6
O
 J
>
D
Q
Q
=


	

 n