B
    @¹¿[rÉ  ã               @   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 }xvt |ƒD ]h\}}	|	\}
}}}}}}d}x>t |
ƒD ]2\}}|sF|  || ¡dkrF|| rFd }}d}qFW dddg}x¼t |||gƒD ]ª\}}x t |ƒD ]”\}}|  |¡\}}|dkrÈq¨|| jkr&d}|dkrx(|D ] }|  |¡rè|t|ƒkrèd}P qèW |rq¨||  d7  < q¨|dk r¨|| 7 }d}q¨W q–W |rv|d |d |d  krv|sv| |¡ qt|ƒrd }}qW ||||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*   ú>lib/python3.7/site-packages/mpmath/functions/hypergeometric.pyÚ_check_need_perturb   sH    



 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<x4ˆ  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
r0tˆ j d ƒ}n|d | }ˆ  ˆ j| ¡}|d | d ˆ _ x6tt|ƒƒD ]&}||  |7  < |||d  7 }qlW |r¤||Ž }|rÀ‡fdd„t|ƒD ƒ}|sÌˆ jS g }x"t|ƒD ]\}}|\}}}}}} }!|
r€tƒ  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ÜW t|ƒdkr|s|d }P ˆ j
r(ˆ  |¡}P ˆ  |¡}‡ 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êP qn|'rh|d kr
|d7 }|}qnn\ˆ  || ¡ˆ  |¡| kr,P n:|(r<ˆ j}P n*|)rLˆ j}P nd|krZP n|d9 }|}qntt|&|d ƒt||ƒƒ}*ˆ  j |*7  _ |
rntdƒ qnqnW W d |ˆ _ 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   Úb)r   r*   r+   r5      s    c                s   g | ]\}}ˆ   ||¡‘qS r*   )Úpower)r4   r"   Úc)r   r*   r+   r5   €   s    z
    Value:c                s   g | ]}ˆ   |¡‘qS r*   )Úmag)r4   r%   )r   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   ZldexpÚoneÚrangeÚlenr   ÚnstrZfprodÚhyperÚzipr   ÚfsumÚmaxr;   ZisnanÚinfÚmin)+r   ZfunctionZparamsr   ÚkwargsÚorigZsumvalueZ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Ü    





 6








rR   c                sJ  ˆ   |¡}t|ƒ}t|ƒ}‡ fdd„|D ƒ}‡ fdd„|D ƒ}| dd¡r¼| dd¡}d}x`||k rº|rº|| }	|	|kr°|sŠˆ  |	d ¡s°| |	¡ | |	¡ |d	8 }|d	8 }q\|d	7 }q\W |dkrò|d	krÜˆ j||f|ŽS |dkrîˆ  |¡S n2|d	krT|d	krˆ j|||f|ŽS |d
kr4ˆ j|||f|ŽS |dkr$ˆ  	|d d |¡S nÐ|d
krÐ|d	krzˆ 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_param)r4   r7   )r   r*   r+   r5   Ê   s    zhyper.<locals>.<listcomp>c                s   g | ]}ˆ   |¡‘qS r*   )rS   )r4   r8   )r   r*   r+   r5   Ë   s    Z	eliminateTZeliminate_allFr   r   r   é   Úforce_series)ÚconvertrE   r?   r   ÚremoveÚ_hyp0f1ÚexpÚ_hyp1f1Ú_hyp1f2Ú_hyp1f0Ú_hyp2f1Ú_hyp2f2Ú_hyp2f3Ú_hyp2f0Ú_hypq1fqÚ
_hyp_borelrH   Úhypsum)r   r   r   r    rM   ÚpÚqZelim_nonpositiver$   r8   ZcoeffsÚtypesr*   )r   r+   rG   Â   sV    



  

 
 
 

 
 
 
 rG   c             K   s   | j g |g|f|ŽS )N)rG   )r   r8   r    rM   r*   r*   r+   Úhyp0f1í   s    rg   c             K   s   | j |g|g|f|ŽS )N)rG   )r   r7   r8   r    rM   r*   r*   r+   Úhyp1f1ñ   s    rh   c             K   s   | j |g||g|f|ŽS )N)rG   )r   Úa1Úb1Úb2r    rM   r*   r*   r+   Úhyp1f2õ   s    rl   c             K   s   | j ||g|g|f|ŽS )N)rG   )r   r7   r8   r:   r    rM   r*   r*   r+   Úhyp2f1ù   s    rm   c             K   s   | j ||g||g|f|ŽS )N)rG   )r   ri   Úa2rj   rk   r    rM   r*   r*   r+   Úhyp2f2ý   s    ro   c             K   s   | j ||g|||g|f|ŽS )N)rG   )r   ri   rn   rj   rk   Úb3r    rM   r*   r*   r+   Úhyp2f3  s    rq   c             K   s   | j ||gg |f|ŽS )N)rG   )r   r7   r8   r    rM   r*   r*   r+   Úhyp2f0  s    rr   c             K   s   | j |||g||g|f|ŽS )N)rG   )r   ri   rn   Úa3rj   rk   r    rM   r*   r*   r+   Úhyp3f2	  s    rt   c             C   s   d| |  S )Nr   r*   )r   r7   r    r*   r*   r+   r\     s    r\   c       	         sî   |\\‰ }ˆrˆ  ˆ¡}nd}|dkrÔ| d¡sÔyŒˆj}zXˆ jd|d  7  _‡ ‡‡fdd„}ˆj|g dd	}ˆ ˆ ¡dˆ ˆj¡  | }W d |ˆ_X ˆ ˆ ¡r¸ˆ ˆ¡r¸ˆ |¡}|
 S  ˆj	k
rÒ   Y nX ˆj
dd
|fˆ gˆf|ŽS )Nr   é   rU   é   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_2rY   Zmpq_3_2)r"   Zjwr)   r:   ÚEÚT1ÚT2)r8   r   r    r*   r+   rO   !  s    

.*z_hyp0f1.<locals>.hT)rU   r   )r;   r?   r   rR   r6   ry   ÚpiÚ_is_real_typeÚ_reÚNoConvergencerc   )	r   r   r    rM   ÚbtypeÚmagzrN   rO   rP   r*   )r8   r   r    r+   rX     s&    
	"
rX   c          	      sd  |\\}}|\\}}ˆs"ˆ j ˆ S ˆ  ˆ¡}	|	dkrBˆ  |¡rPˆ  |¡dksBˆ  ˆ¡ržˆ  |¡ˆ  |¡  krŠˆ  ˆ¡  krŠdkr”n nˆ jS ˆ jˆ S z’ytˆ  j|	7  _ˆ  	ˆ¡dk ‰‡ ‡‡fdd„}
ˆ j
|
||gdd}ˆ  |¡rˆ  |¡rˆ  ˆ¡rˆ  |¡}|
 S  ˆ jk
r,   Y nX W d ˆ  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ÚfnegrY   )r7   r8   r|   Úrzr}   r~   )r   Úsectorr    r*   r+   rO   E  s    
24z_hyp1f1.<locals>.hT)rU   )rC   r;   Úisintr	   ZisinfZsignrK   Únanr   Z_imrR   r€   r   r‚   rc   )r   r   r   r    rM   r7   Úatyper8   rƒ   r„   rO   rP   r*   )r   r‰   r    r+   rZ   5  s0    



$
4
	$

rZ   c       %      K   sô  ||||f\}}}}	| j }
| dd|
 ¡}d}x¾|
| | _ |  |	¡}|  d¡}|  d¡}|  d¡}d}|| | }|| j }|d | j }d| }|| }|| | }|| | }|d }| j  d }| j}| j}| j}| j}xÚ|| }|| ||  | d|d  | ||   }|||| | |   } ||| || |   }!|||| ||  |  |  d| |  }"|| |" }#t	|||#ƒƒ}||#| ƒ|k r P | |!|#  }}}|d7 }qâW |||#ƒ }$|$|k rÖP q2||$7 }||kr2| j
‚q2W |#S )Nr.   éd   r1   r   r   r   rw   )r   r?   rV   Úmpfr{   rF   Únprintr;   r   rJ   r‚   )%r   r7   r8   r:   r    rM   Z_aZ_bZ_cZ_zrN   r.   Zextrar'   ÚeÚfr!   ZabzZchZc1hZnzÚgZabgZcbaZz2ÚtolrF   r   r;   ZmaxmagZkchZkakbzZd1Ze1ZftÚf1rQ   r*   r*   r+   Ú_hyp2f1_gosperY  sV    





,,

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 d |ˆ_	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 )Nr   )Zmpq_1)r7   r8   ÚtZabrˆ   r}   r~   )r:   r   r    r*   r+   rO   Ã  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 )Nr   r*   )r7   r8   r–   ZcaÚcbrˆ   r}   r~   )r:   r    r*   r+   rO   Ì  s       $0)r	   rŠ   Ú	gammaprodrm   ÚepsrK   r‹   Úabsrc   r   rR   r•   )r   r   r   r    rM   r7   rŒ   r8   rƒ   ZctypeZ
convergentZfiniteZzerodivÚabszrN   rO   rP   r*   )r:   r   r    r+   r]     sJ    

$F( &(* "
*r]   c          
      s¤  t ˆŽ \‰}t ˆŽ \‰}tˆƒ‰tˆƒ‰tˆƒ}	d}
x$ˆD ]}ˆ |¡r:|dkr:d}
P q:W |	dk sf|
rªyˆjˆ	ˆ
|| ˆˆ ˆf|Ž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
„	‰y@ˆjˆdˆj	g| d¡| dd¡d}|ˆ 
ˆˆgˆ ˆˆg¡ S  ˆjk
rÊ   Y nX |	dk r~ˆ ˆ¡dkr~dˆjif‡‡‡‡	‡
‡‡fdd
„	‰| dd¡}y0ˆjˆdˆj	g| d¡| dd¡| dd¡dS  ˆjk
rh   d|krd‚ Y nX | d¡r~tdƒ ‡‡‡‡fdd„‰‡‡‡‡fdd„}ˆjd }ˆj}z¼dˆj }ˆ jd7  _xžtdƒD ]’}ˆ ‡fdd„t|ƒD ƒ¡}ˆjˆ|ˆj	g|||ƒ| d¡ddd\}}||k r6|| }P |d 9 }ˆ jˆjd  7  _|d!krÖˆ d"¡‚qÖW W d#|ˆ_X |
 S ‡‡	‡
‡fd$d%„}ˆj|ˆˆ f|ŽS )&z&
    Evaluates 3F2, 4F3, 5F4, ...
    Fr   Tr   gš™™™™™ñ?gÍÌÌÌÌÌì?)rT   r   gš™™™™™©?c                s~   ˆˆ ˆ |  }| |kr"||  }nH|| d  }|ˆ|  ˆ d ˆ|  ˆ d  9 }|| |d   }||| < |ˆ  ˆ ˆ|ˆ¡ S )Nr   )rm   )r!   Ú_cacher)   r–   )ri   rn   rs   rj   rk   r   r    r*   r+   r     s    
$z_hypq1fq.<locals>.termr-   Ústrict)r-   r   c                sì   t | ƒ}|| krhˆˆ | ¡ ˆ | ¡ }xˆ D ]}|ˆ || ¡9 }q.W xˆD ]}|ˆ || ¡ }qLW |S ||krx|| S ˆ|d ƒ}|d }x tˆƒD ]}|ˆ | | 9 }q–W x tˆƒD ]}|ˆ| |  }q¸W |ˆ9 }|| }|||< |S )Nr   )r   rŽ   ZfacZrfr   )Zkkrœ   r!   r–   r7   r8   Úmrz   )r   r   r   rd   re   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‰ x\t ‡‡ ‡fdd„ˆD ƒƒt ‡‡ ‡fdd„|D ƒƒ }ˆ dkrš|ˆ ˆ¡7 }|V  ˆ d7 ‰ qPW d S )Nr   c             3   s   | ]}ˆ   |ˆ ¡V  qd S )N)Úloggamma)r4   r7   )r   Úk0r*   r+   ú	<genexpr>i  s    z._hypq1fq.<locals>.log_diffs.<locals>.<genexpr>c             3   s   | ]}ˆ   |ˆ ¡V  qd S )N)r¢   )r4   r8   )r   r£   r*   r+   r¤   j  s    r   c             3   s   | ]}ˆ   ˆ|ˆ ¡V  qd S )N)Úpsi)r4   r7   )r   r$   r£   r*   r+   r¤   m  s    c             3   s   | ]}ˆ   ˆ|ˆ ¡V  qd S )N)r¥   )r4   r8   )r   r$   r£   r*   r+   r¤   n  s    )r   Úlog)r£   rk   rP   )r   r   r   r    )r$   r£   r+   Ú	log_diffsg  s    
@z_hypq1fq.<locals>.log_diffsc             3   sJ   ˆ  dd„ ˆD ƒdd„ ˆ D ƒ¡}x$ˆ ˆ| ƒ¡D ]}|| }|V  q0W d S )Nc             S   s   g | ]}|‘qS r*   r*   )r4   r8   r*   r*   r+   r5   u  s    z1_hypq1fq.<locals>.hyper_diffs.<locals>.<listcomp>c             S   s   g | ]}|‘qS r*   r*   )r4   r7   r*   r*   r+   r5   u  s    )r˜   Z	diffs_exp)r£   ÚCr'   rP   )r   r   r   r§   r*   r+   Úhyper_diffst  s     z_hypq1fq.<locals>.hyper_diffsi   é2   r=   é   c             3   s   | ]}ˆ |ƒV  qd S )Nr*   )r4   r!   )r   r*   r+   r¤   €  s    z_hypq1fq.<locals>.<genexpr>)r“   Zadiffsr-   ÚerrorZ_fast_abortr   rw   z*Euler-Maclaurin summation did not convergeNc        
   
      s  t | d ˆ… ƒ‰ t | ˆd … ƒ‰g }ˆjˆ }ˆjˆdd}xÂ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¡ qJW |S )	NT)r†   r   c                s    g | ]}|ˆkrˆ | ˆ ‘qS r*   r*   )r4   rz   )r   Úakr!   r*   r+   r5   ¡  s    z'_hypq1fq.<locals>.h.<locals>.<listcomp>c                s   g | ]}ˆ| ˆ  ‘qS r*   r*   )r4   rz   )r­   r   r*   r+   r5   ¢  s    c                s   g | ]}ˆ ˆ|  d  ‘qS )r   r*   )r4   rz   )r­   r   r*   r+   r5   £  s    c                s$   g | ]}|ˆkrd ˆ |  ˆ ‘qS )r   r*   )r4   rz   )r   r­   r!   r*   r+   r5   ¤  s    )ÚlistrC   r‡   rD   r   )
ÚargsZTsZreczZnegzr¨   ZCpZGnZGdZFnZFd)r   rd   re   r    )r   r­   r   r!   r+   rO   —  s    
(z_hypq1fq.<locals>.h)rH   r®   rš   rŠ   rc   r‚   r	   r   rG   rK   r˜   Znsumr?   r   rC   ÚreplacerB   r™   r   Zdpsr   rI   ZsumemrR   )r   rd   re   r   r   r    rM   Úa_typesÚb_typesr›   Zispolyr7   ÚSr)   ÚinitialrŸ   r©   r“   r   Ztruncr$   ÚheadÚtailÚerrrP   rO   r*   )ri   rn   rs   r   rj   rk   r   r   r§   rd   re   r   r    r+   ra   ß  sŽ    
 
, 
"

"



ra   c                s
  ˆ rt ˆ Ž \‰ }tˆ ƒ‰ n
g d ‰ }ˆr>t ˆŽ \‰}tˆƒ‰n
g d ‰}| dˆj¡|d< yˆj|||| ˆ ˆ ˆf|ŽS  ˆjk
rŽ   Y nX ˆj}	z|| dˆjd ¡}
ˆ jd7  _dˆjif‡ ‡‡‡fdd„	‰ˆj}x4td	ˆjƒD ]$}ˆ|ƒ}||7 }t	|ƒ|
krè|S qèW W d |	ˆ_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_tolrw   r1   r   c                st   | |kr||  S ˆ| d ƒ}xˆ D ]}||| d  9 }q"W xˆD ]}||| d   }q@W |ˆ9 }||  }||| < |S )Nr   r*   )r!   Úcacher–   r7   r8   )r   r   r   r    r*   r+   r   ¿  s    
 
 z_hyp_borel.<locals>.termr   rT   Úcontourg      Ð?y               @y       @       @r   y       €       Ày       @       ÀÚquad_kwargsc                s$   ˆ  |  ¡ˆ ˆ ˆdg | ˆ ¡ S )Nr   )rY   rG   )r–   )r   r   r   r    r*   r+   r’   à  s    z_hyp_borel.<locals>.gr¬   Tru   )rH   r®   r?   r   rc   r‚   r™   rC   r   rš   ÚargrJ   rK   Zquad)r   rd   re   r   r   r    rM   r±   r²   r   r“   Úsr!   r–   rº   r)   r»   r’   ÚIr·   r*   )r   r   r   r   r    r+   rb   ©  sP    






rb   c                s  |\\}}\}}|\\}	}
\}}t ˆƒ}ˆ  ˆ¡}ˆ j}|}| d¡ oTˆ  |¡dk}|rîzŠynˆ  j|7  _‡ ‡fdd„}ˆ j||||	|gddˆ j d}t‡ fdd	„|||	|ˆgD ƒƒd
krÈˆ  |¡}|S  ˆ jk
rà   Y nX W d |ˆ _X ˆ jdd|||
|f|||	|gˆf|ŽS )NrU   rT   c                st  | | | | }| | }|| }i }ˆ j |d< |d | ||  | |  |d< d}d}	d}
x.|	|kr&d| d|   | d  d|  |d  ||  | |  ||  d| d|d   |	  d|	d   }|	| | d |	| | d  |	| d  }ˆ j |	 |||	d   |||	d     ||	< ||	 ˆ|	   }t|ƒdˆ j k rNP |	dkrtt|
ƒt|ƒ dk rtˆ j‚||7 }|}
|	d7 }	q^W ˆ  ˆ¡| }ˆ|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   rT   gš™™™™™¹?r«   g      ø?rx   )rC   rš   r™   r‚   rY   )ri   rn   rj   rk   ÚXÚA2ZB2r:   Ús1r!   ÚtprevÚuu1Úuu2Út1r³   r}   r~   ÚT3)r   r    r*   r+   rO     s6    
 
d,. "VXz_hyp2f2.<locals>.hTrw   )rU   r¸   c             3   s   | ]}ˆ   |¡V  qd S )N)r€   )r4   r)   )r   r*   r+   r¤   !  s    z_hyp2f2.<locals>.<genexpr>r«   r   )	rš   r;   r   r?   rR   r   r	   r‚   rc   )r   r   r   r    rM   ri   Úa1typern   Úa2typerj   Úb1typerk   Úb2typer›   r„   rN   Úasymp_extraprecÚcan_use_asymptoticrO   rP   r*   )r   r    r+   r^   è  s*    
 $

r^   c                s"  |\\}}|\\}}\}	}
t ˆƒ}ˆ  ˆ¡}ˆ j}ˆo<|d }| d¡ ohˆ  |¡dkohˆ  |¡d| k}|r z†yjˆ  j|7  _‡ ‡fdd„}ˆ j||||	gddˆ j d	}t‡ fd
d„|||	ˆgD ƒƒdkrÚˆ  |¡}|S  ˆ jk
rò   Y nX W d |ˆ _X ˆ j	dd|||
f|||	gˆf|ŽS )Nr   rU   é   g      ø?c                sX  ˆ 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}xŽ||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 rNP |dkrtt|ƒt|ƒ dk rtˆ j
‚||7 }||7 }|}|d7 }qW ˆ  ˆ 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   rT   r   iðÿÿÿrw   iøÿÿÿé   iúÿÿÿg      à¿gš™™™™™¹?r«   g      ø?g      à?)r{   rC   Úmpq_1_4Úmpq_3_16Úmpq_1_16Zmpq_5_2rz   rŽ   rš   r™   r‚   Úexpjr   ry   )ri   rj   rk   r¿   r:   rÁ   Ús2r!   rÂ   rÃ   rÄ   r"   rÅ   Út2r³   r}   r~   )r   r    r*   r+   rO   I  sF    
<:T
^*2  "("
 $z_hyp1f2.<locals>.hTrw   )rU   r¸   c             3   s   | ]}ˆ   |¡V  qd S )N)r€   )r4   r)   )r   r*   r+   r¤   r  s    z_hyp1f2.<locals>.<genexpr>r   )
rš   r;   r   r?   ry   rR   r   r	   r‚   rc   )r   r   r   r    rM   ri   rÇ   rj   rÉ   rk   rÊ   r›   r„   rN   rË   rÌ   rO   rP   r*   )r   r    r+   r[   -  s,    

("

r[   c          	      s@  |\\}}\}}|\\}	}
\}}\}}t ˆƒ}ˆ  ˆ¡}ˆoB|d }ˆ j}| d¡ otˆ  |¡dkotˆ  |¡d| k}|rzyrˆ  j|7  _‡ ‡fdd„}ˆ j||||	||gddˆ j d	}t‡ fd
d„|||	||ˆgD ƒƒdkrîˆ  |¡}|S  ˆ jk
r   Y nX W d |ˆ _X ˆ j	dd|||
||f|||	||gˆf|ŽS )Nr   rU   rÍ   g      ø?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}xJ||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(P |dkrNt|ƒt|ƒ dk rNˆ j
‚||7 }||7 }|}|d7 }q&W ˆ  ˆ 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   rT   r   iðÿÿÿé    rw   iøÿÿÿrÎ   ru   é   é   rv   r«   iöÿÿÿg      à¿gš™™™™™¹?g      ø?g      à?)r{   rC   rÏ   rÐ   rÑ   r9   rz   rŽ   rš   r™   r‚   rÒ   r   ry   )ri   rn   rj   rk   rp   r¿   rÀ   ZB3ÚAÚBÚRr:   rÁ   rÓ   r!   rÂ   rÃ   rÄ   Zuu3r"   rÅ   rÔ   r³   r}   r~   rÆ   )r   r    r*   r+   rO   ˜  sT     
4\
>°@B  "(&
080:z_hyp2f3.<locals>.hTrw   )rU   r¸   c             3   s   | ]}ˆ   |¡V  qd S )N)r€   )r4   r)   )r   r*   r+   r¤   Ç  s    z_hyp2f3.<locals>.<genexpr>rÖ   rT   )
rš   r;   r   r?   ry   rR   r   r	   r‚   rc   )r   r   r   r    rM   ri   rÇ   rn   rÈ   rj   rÉ   rk   rÊ   rp   Zb3typer›   r„   rË   rN   rÌ   rO   rP   r*   )r   r    r+   r_     s*    
 ."&

r_   c                s–   |\\}}\}}y8|  ¡ }	|	 dˆ j¡|	d< ˆ jdd||f||gˆf|	ŽS  ˆ jk
rj   | d¡rf‚ Y nX ‡ ‡fdd„}
ˆ j|
|d| | gf|ŽS )Nr¸   r   r   rU   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 )Nrx   r   r   )Zsinpir   )r7   r8   r"   rˆ   r}   r~   )r   r    r*   r+   rO   Þ  s
    
0Bz_hyp2f0.<locals>.hr   )Úcopyr?   r   rc   r‚   rR   )r   r   r   r    rM   r7   rŒ   r8   rƒ   ZkwargsbrO   r*   )r   r    r+   r`   Ñ  s    
r`   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*   )rV   )r4   Ú_)r   r*   r+   r5   ð  s    zmeijerg.<locals>.<listcomp>c                s   g | ]}ˆ   |¡‘qS r*   )rV   )r4   rÜ   )r   r*   r+   r5   ñ  s    r   r   r-   zMeijer G m,n,p,q,series =c        	   
      s$  | d ˆ… ‰ | ˆd … ‰g }x 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(W |S )Nc                s$   g | ]}|ˆkrˆ | ˆ ˆ  ‘qS r*   r*   )r4   rz   )r8   r!   r*   r+   r5     s    z&meijerg.<locals>.h.<locals>.<listcomp>c                s    g | ]}d ˆ |  ˆˆ  ‘qS )r   r*   )r4   rz   )r7   r8   r!   r*   r+   r5     s    c                s   g | ]}ˆ | ˆˆ  ‘qS r*   r*   )r4   rz   )r7   r8   r!   r*   r+   r5     s    c                s    g | ]}d ˆ |  ˆ ˆ  ‘qS )r   r*   )r4   rz   )r8   r!   r*   r+   r5     s    c                s    g | ]}d ˆ |  ˆˆ  ‘qS )r   r*   )r4   rz   )r7   r8   r!   r*   r+   r5   	  s    c                s(   g | ] }|ˆkrd ˆ |  ˆ ˆ  ‘qS )r   r*   )r4   rz   )r8   r!   r*   r+   r5   
  s    )rD   rC   r   )	r¯   r   ÚbasesÚexptsÚgnÚgdÚhnÚhdÚhz)r   rž   r&   rd   re   Úrr    )r7   r8   r!   r+   rO   þ  s    "zmeijerg.<locals>.hc        	   
      sH  | d ˆ… ‰ | ˆd … ‰g }x$t ˆƒD ]‰ˆ	g}ˆdkrLˆ ˆ 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(W |S )	Nr   c                s$   g | ]}|ˆkrˆ ˆ ˆ |  ‘qS r*   r*   )r4   rz   )r7   r!   r*   r+   r5     s    z&meijerg.<locals>.h.<locals>.<listcomp>c                s    g | ]}d ˆ ˆ  ˆ|  ‘qS )r   r*   )r4   rz   )r7   r8   r!   r*   r+   r5     s    c                s   g | ]}ˆ ˆ ˆ|  ‘qS r*   r*   )r4   rz   )r7   r8   r!   r*   r+   r5     s    c                s    g | ]}d ˆ ˆ  ˆ |  ‘qS )r   r*   )r4   rz   )r7   r!   r*   r+   r5     s    c                s    g | ]}d ˆ ˆ  ˆ|  ‘qS )r   r*   )r4   rz   )r7   r8   r!   r*   r+   r5     s    c                s(   g | ] }|ˆkrd ˆ |  ˆ ˆ  ‘qS )r   r*   )r4   rz   )r7   r!   r*   r+   r5     s    )rD   rV   rC   r   )	r¯   r   rÝ   rÞ   rß   rà   rá   râ   rã   )r   rž   r&   rd   re   rä   r    )r7   r8   r!   r+   rO     s"    ")rE   rV   rš   r?   rB   rR   )r   r   r   r    rä   ZseriesrM   ZanZapZbmZbqr7   r8   rO   r*   )r   rž   r&   rd   re   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)zm+nrž   r&   zm+n)rš   r   r@   Úappellf1Úhyper2d)
r   r7   rj   rk   r:   r%   ÚyrM   r(   Zu1r*   r*   r+   ræ   $  s"    




 &ræ   c       	      K   s,   | j |g|g|gdœ|g|gdœ||f|ŽS )N)zm+nrž   r&   )rž   r&   )rç   )	r   r7   rj   rk   Úc1Úc2r%   rè   rM   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 )N)rž   r&   zm+n)r   rš   rç   )r   ri   rn   rj   rk   r:   r%   rè   rM   Zouter_polynomialZinner_polynomialr*   r*   r+   Úappellf3G  s    
rì   c             K   s&   | j d||gi|g|gdœ||f|ŽS )Nzm+n)rž   r&   )rç   )r   r7   r8   ré   rê   r%   rè   rM   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
 }x°d}d}t	|
ƒ}t	|ƒ}‡fdd„|	D ƒ}‡fdd„|D ƒ}x*|D ]"}|ˆ }| 
|¡ | 
|¡ q\W x*|D ]"}|ˆ }| 
|¡ | 
|¡ qˆW x.|D ]&}| 
|ˆ ¡ | 
|ˆ d ¡ q´W xD|D ]<}|d9 }|dˆ 9 }| 
d| ˆ ¡ | 
| ˆ ¡ qäW xB|D ]:}| 
|dˆ  ¡ | 
|dˆ  d| dˆ   ¡ q*W xN|D ]F}|d9 }| 
d| dˆ  ¡ | 
|dˆ  d| dˆ   ¡ qnW xP|D ]H}|d9 }| 
d|ˆ  ¡ | 
d|ˆ d  ¡ | 
|ˆ d ¡ q¾W ˆ j|||| fdˆ ji|—Ž} ||  | }!t|!ƒ|k rN|d7 }nd}|dksb|sdP ||!7 }x|D ]}||9 }qrW x|D ]}|| }qŠW ˆd7 ‰|| ˆ }ˆ|krˆ  d¡‚qW W d|ˆ _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 ¡}yt|ƒ}W n tk
r2   |g}Y nX ‡ fdd„|D ƒS )Nc                s   g | ]}ˆ   |¡‘qS r*   )rV   )r4   r¼   )r   r*   r+   r5   æ  s    z*hyper2d.<locals>.parse.<locals>.<listcomp>)Úpopr®   Ú	TypeError)ZdctÚkeyr¯   )r   r*   r+   Úparseà  s    zhyper2d.<locals>.parserž   r&   zm+nzm-nzn-mz2m+nz2m-nz2n-mzunsupported key: %rr   r¸   r=   r1   r   c                s   g | ]}|ˆ  ‘qS r*   r*   )r4   r7   )rž   r*   r+   r5     s    zhyper2d.<locals>.<listcomp>c                s   g | ]}|ˆ  ‘qS r*   r*   )r4   r8   )rž   r*   r+   r5     s    rx   r   rw   g      à?r/   rT   zmaxterms exceeded in hyper2dN)rV   Údictr@   ÚkeysrC   rŽ   r   r?   r™   r®   r   rG   rš   r‚   )"r   r7   r8   r%   rè   rM   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½   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*   )r4   r8   r*   r*   r+   r5   ~  s    z&bihyper.<locals>.h.<locals>.<listcomp>c             S   s   g | ]}d | ‘qS )r   r*   )r4   r7   r*   r*   r+   r5     s    rx   c             S   s   g | ]}d | ‘qS )r   r*   )r4   r8   r*   r*   r+   r5   €  s    c             S   s   g | ]}d | ‘qS )r   r*   )r4   r7   r*   r*   r+   r5   €  s    r   )r®   rE   )	r   r   r   Zaa_sZbb_sZrpZrcr}   r~   )Únegrd   r    r*   r+   rO   {  s    *" zbihyper.<locals>.h)rV   rE   r>   rR   )r   r   r   r    rM   r   re   rO   r*   )rõ   rd   r    r+   ÚbihyperD  s    0


rö   )r   N)#Zlibmp.backendr   Z	functionsr   r   r,   rA   rR   rG   rg   rh   rl   rm   ro   rq   rr   rt   r\   rX   rZ   r•   r]   ra   rb   r^   r[   r_   r`   rå   ræ   rë   rì   rí   rç   rö   r*   r*   r*   r+   Ú<module>   sH   4 +$$6P K?ERR=
 o