U
    :qLerÉ  ć                   @   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*   śv/home/p21-0144/sympy/latex2sympy2solve-back-end/sympyEq/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*   )Ś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   ŚgetŚ_default_hyper_maxprecŚ
ValueErrorŚ_hypercomb_msgŚprintr,   Ś_fixed_precisionr   ŚldexpŚoneŚrangeŚlenr   ŚnstrŚfprodŚhyperŚzipr   ŚfsumŚmaxr?   ŚisnanŚinfŚmin)+r   ZfunctionZ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_okZ	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*   ©Ś_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)ŚconvertrL   rC   r   ŚremoveŚ_hyp0f1ŚexpŚ_hyp1f1Ś_hyp1f2Ś_hyp1f0Ś_hyp2f1Ś_hyp2f2Ś_hyp2f3Ś_hyp2f0Ś_hypq1fqŚ
_hyp_borelrP   Śhypsum)r   r   r   r    rV   ŚpŚqZelim_nonpositiver$   r<   ŚcoeffsŚtypesr*   r9   r+   rO   Ā   sV    




  

 
 
 

 
 
 
 rO   c                 K   s   | j g |g|f|S ©N©rO   )r   r<   r    rV   r*   r*   r+   Śhyp0f1ķ   s    ru   c                 K   s   | j |g|g|f|S rs   rt   ©r   r8   r<   r    rV   r*   r*   r+   Śhyp1f1ń   s    rw   c                 K   s   | j |g||g|f|S rs   rt   )r   Śa1Śb1Śb2r    rV   r*   r*   r+   Śhyp1f2õ   s    r{   c                 K   s   | j ||g|g|f|S rs   rt   )r   r8   r<   r>   r    rV   r*   r*   r+   Śhyp2f1ł   s    r|   c                 K   s   | j ||g||g|f|S rs   rt   )r   rx   Śa2ry   rz   r    rV   r*   r*   r+   Śhyp2f2ż   s    r~   c                 K   s   | j ||g|||g|f|S rs   rt   )r   rx   r}   ry   rz   Śb3r    rV   r*   r*   r+   Śhyp2f3  s    r   c                 K   s   | j ||gg |f|S rs   rt   rv   r*   r*   r+   Śhyp2f0  s    r   c                 K   s   | j |||g||g|f|S rs   rt   )r   rx   r}   Śa3ry   rz   r    rV   r*   r*   r+   Śhyp3f2	  s    r   c                 C   s   d| |  S ©Nr   r*   )r   r8   r    r*   r*   r+   rg     s    rg   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_2rd   Śmpq_3_2)r"   Zjwr)   r>   ŚEŚT1ŚT2©r<   r   r    r*   r+   rY   !  s    

.*z_hyp0f1.<locals>.hT©r`   r   )r?   rC   r   r\   r6   r   ŚpiŚ_is_real_typeŚ_reŚNoConvergencern   )	r   r   r    rV   ŚbtypeŚmagzrW   rY   rZ   r*   r   r+   rc     s&    
	"
rc   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   )ŚexpjpiŚfnegrd   )r8   r<   r   Śrzr   r   ©r   Zsectorr    r*   r+   rY   E  s    
24z_hyp1f1.<locals>.hTr   )rJ   r?   Śisintr	   ŚisinfŚsignrT   Śnanr   Ś_imr\   r   r   r   rn   )r   r   r   r    rV   r8   Śatyper<   r   r   rY   rZ   r*   r   r+   re   5  s0    



$
4
	$

re   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   rC   ra   Śmpfr   rM   Śnprintr?   r   rR   r   )%r   r8   r<   r>   r    rV   Z_aZ_bZ_cZ_zrW   r.   Śextrar'   ŚeŚfr!   ZabzŚchZc1hZnzŚgZabgZcbaŚz2ŚtolrM   r§   r?   ZmaxmagZkchZkakbzZd1Śe1ZftŚf1r[   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)Ś_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   )Śmpq_1)r8   r<   ŚtZabr   r   r   ©r>   r   r    r*   r+   rY   Ć  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+   rY   Ģ  s       $0)r	   r   Ś	gammaprodr|   ŚepsrT   r¢   Śabsrn   r   r\   r±   )r   r   r   r    rV   r8   r¤   r<   r   ZctypeZ
convergentZfiniteZzerodivŚabszrW   rY   rZ   r*   rµ   r+   rh     sb    

$B’( &’ ’
’*’’’"
*rh   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   )r|   )r!   Ś_cacher)   r“   )rx   r}   r   ry   rz   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¦   ŚfacŚrfr   )Zkkr¼   r!   r“   r8   r<   Śmr   )r   r   r   ro   rp   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 rs   ©Śloggammar7   ©r   Śk0r*   r+   Ś	<genexpr>i  s     z._hypq1fq.<locals>.log_diffs.<locals>.<genexpr>c                 3   s   | ]}   | ”V  qd S rs   rÄ   r;   rĘ   r*   r+   rČ   j  s     r   c                 3   s   | ]}   | ”V  qd S rs   ©Śpsir7   ©r   r$   rĒ   r*   r+   rČ   m  s     c                 3   s   | ]}   | ”V  qd S rs   rÉ   r;   rĖ   r*   r+   rČ   n  s     )r   Ślog)rĒ   rz   rZ   ©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ø   Ś	diffs_exp)rĒ   ŚCr'   rZ   )r   r   r   rĪ   r*   r+   Śhyper_diffst  s     z_hypq1fq.<locals>.hyper_diffsi   é2   rA   é   c                 3   s   | ]} |V  qd S rs   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      )ŚlistrJ   r   rK   r   )
ŚargsZTsZreczZnegzrŠ   ZCpZGnZGdZFnZFd)r   ro   rp   r    )r   r×   r   r!   r+   rY     s    
(z_hypq1fq.<locals>.h)rP   rŚ   rŗ   r   rn   r   r	   r   rO   rT   rø   ŚnsumrC   r   rJ   ŚreplacerG   r¹   r   Śdpsr   rQ   Śsumemr\   )r   ro   rp   r   r   r    rV   Śa_typesŚb_typesr»   Zispolyr8   ŚSr)   ZinitialrĮ   rŃ   r®   r   Śtruncr$   ŚheadŚtailŚerrrZ   rY   r*   )rx   r}   r   r   ry   rz   r   r   rĪ   ro   rp   r   r    r+   rl   ß  s      
, 

’"

ž
"

ü


’rl   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   )rd   rO   )r“   rĶ   r*   r+   r¬   ą  s    z_hyp_borel.<locals>.grŌ   Tr   )rP   rŚ   rC   r   rn   r   r¹   rJ   r   rŗ   ŚargrR   rT   Śquad)r   ro   rp   r   r   r    rV   rą   rį   r   r®   Śsr!   r“   ré   r)   rź   r¬   ŚIrę   r*   )r   r   r   r   r    r+   rm   ©  sP    



 


rm   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   )rJ   rŗ   r¹   r   rd   )rx   r}   ry   rz   ŚXŚA2ZB2r>   Śs1r!   ŚtprevŚuu1Śuu2Śt1rā   r   r   ŚT3©r   r    r*   r+   rY     s4    
 
d,. 
"VXz_hyp2f2.<locals>.hTr   ©r`   rē   c                 3   s   | ]}   |”V  qd S rs   ©r   ©r4   r)   r9   r*   r+   rČ   !  s     z_hyp2f2.<locals>.<genexpr>rÓ   r   )	rŗ   r?   r   rC   r\   r   r	   r   rn   )r   r   r   r    rV   rx   Śa1typer}   Śa2typery   Śb1typerz   Śb2typer»   r   rW   Śasymp_extraprecŚcan_use_asymptoticrY   rZ   r*   rł   r+   ri   č  s,    
’ $


ri   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   rJ   Śmpq_1_4Śmpq_3_16Śmpq_1_16Śmpq_5_2r   r¦   rŗ   r¹   r   Śexpjr   r   )rx   ry   rz   rń   r>   ró   Śs2r!   rō   rõ   rö   r"   r÷   Śt2rā   r   r   rł   r*   r+   rY   I  sh    
<:.’’’
6
’’’*’2  "$’"  ’   ’z_hyp1f2.<locals>.hTr   rś   c                 3   s   | ]}   |”V  qd S rs   rū   rü   r9   r*   r+   rČ   r  s     z_hyp1f2.<locals>.<genexpr>r   ©
rŗ   r?   r   rC   r   r\   r   r	   r   rn   )r   r   r   r    rV   rx   rż   ry   r’   rz   r   r»   r   rW   r  r  rY   rZ   r*   rł   r+   rf   -  s0    

’ž("


rf   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   rJ   r	  r
  r  r=   r   r¦   rŗ   r¹   r   r  r   r   )rx   r}   ry   rz   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+   rY     s     
42.’’
>’*2’
’žžžžžž@B  "$’&  ’0"  ’0"  ’z_hyp2f3.<locals>.hTr   rś   c                 3   s   | ]}   |”V  qd S rs   rū   rü   r9   r*   r+   rČ   Ē  s     z_hyp2f3.<locals>.<genexpr>r  r_   r  )r   r   r   r    rV   rx   rż   r}   rž   ry   r’   rz   r   r   Zb3typer»   r   r  rW   r  rY   rZ   r*   rł   r+   rj     s0    
’’."&


rj   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   )Śsinpir   )r8   r<   r"   r   r   r   rł   r*   r+   rY   Ž  s
    
0Bz_hyp2f0.<locals>.hr   )ŚcopyrC   r   rn   r   r\   )r   r   r   r    rV   r8   r¤   r<   r   ZkwargsbrY   r*   rł   r+   rk   Ń  s     
rk   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*   ©ra   ©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      )rK   rJ   r   ©	rŪ   r   ŚbasesZexptsZgnZgdZhnZhdŚhz©r   rĄ   r&   ro   rp   Śrr    r  r+   rY   ž  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      )rK   ra   rJ   r   r  r"  r  r+   rY     s"    ")rL   ra   rŗ   rC   rG   r\   )r   r   r   r    r#  ŚseriesrV   ŚanŚapZbmZbqr8   r<   rY   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   rE   Śappellf1Śhyper2d)
r   r8   ry   rz   r>   r%   ŚyrV   r(   Z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   ry   rz   Śc1Śc2r%   r-  rV   r*   r*   r+   Śappellf2A  s      ’’r2  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   rx   r}   ry   rz   r>   r%   r-  rV   Zouter_polynomialZinner_polynomialr*   r*   r+   Śappellf3G  s    
r3  c                 K   s&   | j d||gi|g|gd||f|S )Nr*  r.  r/  )r   r8   r<   r0  r1  r%   r-  rV   r*   r*   r+   Śappellf4Q  s    r4  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)Z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ē   rA   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;   r9  r*   r+   r5     s     r   r   r   r  r/   r_   zmaxterms exceeded in hyper2d)ra   ŚdictrE   ŚkeysrJ   r¦   r   rC   r¹   rŚ   r   rO   rŗ   r   )"r   r8   r<   r%   r-  rV   r8  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ķ   Z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 r=  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Ś   rL   )	r   r   r   Zaa_sZbb_sZrpZrcr   r   ©Śnegro   r    r*   r+   rY   {  s    *" zbihyper.<locals>.h)ra   rL   rB   r\   )r   r   r   r    rV   r   rp   rY   r*   r>  r+   ŚbihyperD  s    0


r@  )r   N)#Ślibmp.backendr   Ś	functionsr   r   r,   rF   r\   rO   ru   rw   r{   r|   r~   r   r   r   rg   rc   re   r±   rh   rl   rm   ri   rf   rj   rk   r(  r+  r2  r3  r4  r,  r@  r*   r*   r*   r+   Ś<module>   sz   / 
*









#
#6
O
 J
>
D
Q
Q
=


	

 n