ó
@¹¿[c           @   sã  d  d l  m Z d d l m Z m Z d „  Z d Z e g  e d „ ƒ Z e d „  ƒ Z	 e d „  ƒ Z
 e d	 „  ƒ Z e d
 „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z d „  Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d d" d „ ƒ Z e d „  ƒ Z e d „  ƒ Z  e d „  ƒ Z! e d „  ƒ Z" e d  „  ƒ Z# e d! „  ƒ Z$ d" S(#   i   (   t   xrangei   (   t   defunt   defun_wrappedc         C   s*  t  } } d } g  } xt | ƒ D]ó\ } }	 |	 \ }
 } } } } } } t  } xY t |
 ƒ D]K \ } } | s] |  j | | ƒ d k r¨ | | r¨ t } } t } q¨ q] q] Wd d d g } xt | | | g ƒ D]ï \ } } xà t | ƒ D]Ò \ } } |  j | ƒ \ } } | d k rqê n  | |  j k rœt  } | d k r}x< | D]1 } |  j | ƒ rE| t | ƒ k rEt } PqEqEWn  | r‰qê n  | | c d 7<qê | d k  rê | | 7} t } qê qê WqÑ W| rý| d | d | d k rý| rý| j | ƒ q# t	 | ƒ r# t } } q# q# W| | | | f S(   Ni    i   i   iüÿÿÿ(
   t   Falset	   enumeratet   ret   Truet   nint_distancet   ninft   isnpintt   intt   appendt   sum(   t   ctxt   termst   prect   discard_known_zerost   perturbt	   recomputet	   extraprect   discardt
   term_indext   termt   w_st   c_st   alpha_st   beta_st   a_st   b_st   zt   have_singular_nongamma_weightt   kt   wt
   pole_countt
   data_indext   datat   it   xt   nt   dt   okt   u(    (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyt   _check_need_perturb   sH    
#
"!"s  
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.
c   3      K   s9  |  j  } |  j } |  j } |  j } | }	 | j d t ƒ }
 | j d |  j | ƒ ƒ } | | d <| j d ƒ } | j d ƒ } d  } d } z›x”|  j  d 7_  |  j  | k rÌ t t	 | |  j  f ƒ ‚ n  |  j  } |	 } | | Œ  } |
 rd GHd GHd |  j  f GHd	 | f GHn  t
 |  | | | ƒ \ } } } } |  j  | 7_  | rýd
 | k rc| d
 } n- |  j r‚t |  j  d ƒ } n | d | } |  j |  j | ƒ } | d | d |  _  x? t t | ƒ ƒ D]( } | | c | 7<| | | d 7} qÎWn  | r| | Œ  } n  | rLg  t | ƒ D] \ } } | | k r%| ^ q%} n  | sY|  j Sg  } x™t | ƒ D]‹\ } } | \ } } }  }! }" }# }$ |
 r@d GHd | d t | ƒ t |" ƒ t |# ƒ f GHd |  j | ƒ |  j | ƒ f GHd |  j |  ƒ |  j |! ƒ f GHd |  j |" ƒ |  j |# ƒ f GHd |  j |$ ƒ f GHn  |  j |  j |" |# |$ |  g g  |  D] }% |  j |% ƒ ^ qeg  |! D] }& |  j |& ƒ ^ q…g  t | | ƒ D] \ }' }( |  j |' |( ƒ ^ q®ƒ }) |
 rêd |) f GHn  | j |) ƒ qlWt | ƒ d k r"| r"| d } Pn  |  j r>|  j | ƒ } Pn  |  j | ƒ } g  | D] }* |  j |* ƒ ^ qT}+ t |+ ƒ }, |  j | ƒ }- |, |- }. |
 rÅd GHd |. d f GHd |  j  | d f GHn  |. |  j  | k  }/ | d  k rít }0 n |, |  j  | k  }0 | d  k rt }1 n |, | k }1 |/ r/| s>|  j |. ƒ rBPq’ |/ rÝ| d  k rj| d 7} | } q’ q"|  j | | ƒ |  j | ƒ | k r”Pq"|0 r§|  j } Pq"|1 rº|  j } Pq"d
 | k rÊPq"| d 9} | } q’ t t |. | d ƒ t | | ƒ ƒ }2 |  j  |2 7_  |
 r’ d GHq’ q’ q’ WWd  | |  _  X| 
S(   Nt   verboset   maxprect   zeroprect   infpreci    i
   s   ENTERING hypercomb main loops   prec =t   hextrat   hmagg333333Ó?i   s     Evaluating term %i/%i : %iF%is
       powerss	       gammas	       hypers       zs
       Value:s     Cancellation:t   bitss     Increased precision:i   i   s*     Must start over with increased precision(    (    (    (    R   t   zeroR   R   t   getR   t   _default_hyper_maxprect   Nonet
   ValueErrort   _hypercomb_msgR*   t   _fixed_precisionR
   t   ldexpt   onet   ranget   lenR   t   nstrt   fprodt   hypert   gammat   rgammat   zipt   powerR   t   fsumt   magt   maxt   isnant   inft   min(3   R   t   functiont   paramsR   t   kwargst   origt   sumvaluet   distR   t   orig_paramsR+   R,   R-   R.   t   perturbed_reference_valueR/   t   orig2R   R   R   R   R   R0   t   hR   R$   R   t   evaluated_termsR   t	   term_dataR   R   R   R   R   R   R   t   at   bR    t   ct   vR%   t   term_magnitudest   max_magnitudet   sum_magnitudet   cancellationt   precision_okt   zero_okt   inf_okt	   increment(    (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyt	   hypercomb:   sÜ    				
	!	4(   X8
	"
		
		
	%
c         K   s  |  j  | ƒ } t | ƒ } t | ƒ } g  | D] } |  j | ƒ ^ q. } g  | D] } |  j | ƒ ^ qP } | j d t ƒ r| j d t ƒ }	 d }
 x„ |
 | k  r| r| |
 } | | k r|	 sÚ |  j | d ƒ r| j | ƒ | j | ƒ | d 8} | d 8} q˜ |
 d 7}
 q˜ Wn  | d k rc| d k rG|  j | | |  S| d k rÙ|  j	 | ƒ Snv| d k rÚ| d k r‘|  j
 | | | |  S| d k r³|  j | | | |  S| d k rÙ|  j | d d | ƒ Snÿ | d k rq| d k r|  j | | | |  S| d k r*|  j | | | |  S| d k rL|  j | | | |  S| d k rÙ|  j | | | |  Snh | | d k r|  j | | | | | |  S| | d k rÙ| j d ƒ rÙ|  j | | | | | |  St | | Œ  \ } } |  j | | | | | |  S(   s0   
    Hypergeometric function, general case.
    t	   eliminatet   eliminate_alli    i   i   i   t   force_series(   t   convertR<   t   _convert_paramR3   R   R   R	   t   removet   _hyp0f1t   expt   _hyp1f1t   _hyp1f2t   _hyp1f0t   _hyp2f1t   _hyp2f2t   _hyp2f3t   _hyp2f0t   _hypq1fqt
   _hyp_borelRB   t   hypsum(   R   R   R   R   RL   t   pt   qRV   RW   t   elim_nonpositiveR$   t   coeffst   types(    (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyR?   Â   sV    ""
&
          c         K   s   |  j  g  | g | |  S(   N(   R?   (   R   RW   R   RL   (    (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyt   hyp0f1í   s    c         K   s   |  j  | g | g | |  S(   N(   R?   (   R   RV   RW   R   RL   (    (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyt   hyp1f1ñ   s    c         K   s   |  j  | g | | g | |  S(   N(   R?   (   R   t   a1t   b1t   b2R   RL   (    (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyt   hyp1f2õ   s    c         K   s   |  j  | | g | g | |  S(   N(   R?   (   R   RV   RW   RX   R   RL   (    (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyt   hyp2f1ù   s    c         K   s"   |  j  | | g | | g | |  S(   N(   R?   (   R   R|   t   a2R}   R~   R   RL   (    (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyt   hyp2f2ý   s    c         K   s%   |  j  | | g | | | g | |  S(   N(   R?   (   R   R|   R   R}   R~   t   b3R   RL   (    (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyt   hyp2f3  s    c         K   s   |  j  | | g g  | |  S(   N(   R?   (   R   RV   RW   R   RL   (    (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyt   hyp2f0  s    c         K   s%   |  j  | | | g | | g | |  S(   N(   R?   (   R   R|   R   t   a3R}   R~   R   RL   (    (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyt   hyp3f2	  s    c         C   s   d | | S(   Ni   (    (   R   RV   R   (    (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyRm     s    c   	         sC  | \ \ ‰  } ˆ r' ˆ j  ˆ ƒ } n d } | d k r!| j d ƒ r!y¾ ˆ j } zo ˆ j d | d 7_ ‡  ‡ ‡ f d †  } ˆ j | g  d t ƒ} ˆ j ˆ  ƒ d ˆ j ˆ j ƒ | } Wd  | ˆ _ Xˆ j ˆ  ƒ rˆ j ˆ ƒ rˆ j	 | ƒ } n  | 
SWq!ˆ j
 k
 rq!Xn  ˆ j d d | f ˆ  g ˆ |  S(   Ni    i   Re   i   i   c             sÍ   ˆ j  ˆ ƒ }  ˆ j |  } d d | } ˆ j ˆ  } ˆ j d | ƒ } | | g | d g g  g  ˆ  ˆ j ˆ j ˆ  g g  | f } | | g | d g g  g  ˆ  ˆ j ˆ j ˆ  g g  | f } | | f S(   Ni   i   i   iÿÿÿÿ(   t   sqrtt   jt   mpq_1_2Rj   t   mpq_3_2(   R    t   jwR)   RX   t   Et   T1t   T2(   RW   R   R   (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyRS   !  s    =;i   (   RE   R3   R   Rb   R   R@   Rˆ   t   pit   _is_real_typet   _ret   NoConvergenceRt   (	   R   R   R   RL   t   btypet   magzRM   RS   RY   (    (   RW   R   R   s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyRi     s&    		+
	c            sÐ  | \ \ } } | \ \ } } ˆ s/ ˆ  j  ˆ Sˆ  j ˆ ƒ }	 |	 d k r¢ˆ  j | ƒ ok ˆ  j | ƒ d k r¢ˆ  j ˆ ƒ rÒ ˆ  j | ƒ ˆ  j | ƒ k o» ˆ  j ˆ ƒ k o» d k n rÇ ˆ  j Sˆ  j ˆ Szº yŸ ˆ  j |	 7_ ˆ  j	 ˆ ƒ d k  ‰ ‡  ‡ ‡ f d †  }
 ˆ  j
 |
 | | g d t ƒ} ˆ  j | ƒ rnˆ  j | ƒ rnˆ  j ˆ ƒ rnˆ  j | ƒ } n  | 
SWn ˆ  j k
 rŠn XWd  ˆ  j |	 8_ Xn  ˆ  j d d | | f | | g ˆ |  } | S(   Ni   i    i   c            sÓ   ˆ r' ˆ  j  ˆ  j |  d t ƒƒ } n ˆ  j  |  ƒ } d ˆ } | ˆ g d |  g | g | |  g |  d |  | g g  | f } ˆ  j ˆ ƒ ˆ g d |  | g | g |  g | |  d |  g g  | f } | | f S(   Nt   exacti   (   t   expjpit   fnegR   Rj   (   RV   RW   R   t   rzRŽ   R   (   R   t   sectorR   (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyRS   E  s    !
AHRe   (   R:   RE   t   isintR   t   isinft   signRH   t   nanR   t   _imRb   R   R‘   R’   R“   Rt   (   R   R   R   R   RL   RV   t   atypeRW   R”   R•   RS   RY   (    (   R   Rš   R   s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyRk   5  s0    1B	-	*c   %      K   ss  | | | | f \ } } } }	 |  j  }
 | j d d |
 ƒ } d } x)|
 | |  _  |  j |	 ƒ } |  j d ƒ } |  j d ƒ } |  j d ƒ } d } | | | } | |  j } | d |  j } d | } | | } | | | } | | | } | d } |  j  d } |  j } |  j } |  j } |  j } xù | | } | | | | | d | d | | | } | | | | | | }  | | | | | | }! | | | | | | | | d | | }" | | |" }# t	 | | |# ƒ ƒ } | |# | ƒ | k  rPn  |  |! |# } } } | d 7} q0W| | |# ƒ }$ |$ | k  rIPqF | |$ 7} | | k rF |  j
 ‚ qF qF W|# S(   NR,   id   i
   i    i   i   i   (   R   R3   Rf   t   mpfRŠ   R=   t   nprintRE   R   RF   R“   (%   R   RV   RW   RX   R   RL   t   _at   _bt   _ct   _zRM   R,   t   extraR'   t   et   fR   t   abzt   cht   c1ht   nzt   gt   abgt   cbat   z2t   tolR=   R¢   RE   t   maxmagt   kcht   kakbzt   d1t   e1t   ftt   f1R]   (    (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyt   _hyp2f1_gosperY  sV    	


				
..
c            sÅ  | \ \ } } \ } } | \ \ ‰  }	 ˆ d k reˆ j  ˆ  | | ƒ d k }
 ˆ j | ƒ rk | d k pƒ ˆ j | ƒ oƒ | d k } ˆ j ˆ  ƒ oõ ˆ  d k oõ ˆ j | ƒ rÌ ˆ  | k oÇ d k n pô ˆ j | ƒ oô ˆ  | k oò d k n } |
 s| r=| r=ˆ j ˆ  ˆ  | | g ˆ  | ˆ  | g d t ƒSˆ j | | ˆ  d ˆ j d ƒ ˆ j Sˆ s˜ˆ  s‰| d k s‰| d k r‘d ˆ Sˆ j Sˆ j ˆ  ƒ rˆ  d k rˆ j | ƒ rÞˆ  | k oÙd k n sˆ j | ƒ rˆ  | k od k n rqˆ j Sn  t ˆ ƒ } | d k s|ˆ j | ƒ rU| d k rU| d k s|ˆ j | ƒ rª| d k rª| d k rªˆ j	 d d | | |	 f | | ˆ  g ˆ |  Sˆ j
 } z ˆ j
 d 7_
 | d k r‡  ‡ ‡ f d	 †  } ˆ j | | | g |  } n® t d ˆ ƒ d
 k rJ‡  ‡ f d †  } ˆ j | | | g |  } nh t ˆ ˆ d ƒ d
 k r—ˆ j | ˆ  | ˆ  ˆ ˆ d ƒ d ˆ | } n t ˆ | | ˆ  ˆ |  } Wd  | ˆ _
 X| 
S(   Ni   i    t   _infsigni   gš™™™™™é?iüÿÿi
   gÍÌÌÌÌÌô?c            sº   ˆ j  ˆ  } |  | } d ˆ } ˆ g |  g ˆ  | g | ˆ  |  g |  | |  g ˆ j  | g | f } ˆ g | g ˆ  | g |  ˆ  | g | | | g ˆ j  | g | f } | | f S(   Ni   (   t   mpq_1(   RV   RW   t   tt   abR™   RŽ   R   (   RX   R   R   (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyRS   Ã  s     
 
HGg      è?c            s¬   ˆ  |  | } ˆ  |  } ˆ  | } d ˆ } g  g  ˆ  | g | | g |  | g d | g | f } | g | g ˆ  |  | ˆ  g |  | g | | g d | g | f } | | f S(   Ni   (    (   RV   RW   R½   t   cat   cbR™   RŽ   R   (   RX   R   (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyRS   Ì  s     
 
 
4B(   R   R›   t	   gammaprodR   R€   t   epsRH   Rž   t   absRt   R   Rb   Rº   (   R   R   R   R   RL   RV   R    RW   R”   t   ctypet
   convergentt   finitet   zerodivt   abszRM   RS   RY   (    (   RX   R   R   s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyRn     sJ    6W2(++
3'.	3
c            sô  t  ˆ Œ  \ ‰ } t  ˆ Œ  \ ‰ } t ˆ ƒ ‰ t ˆ ƒ ‰ t ˆ ƒ }	 t }
 x3 ˆ D]+ } ˆ j | ƒ rU | d k rU t }
 PqU qU W|	 d k  s– |
 rð y( ˆ j ˆ	 ˆ
 | | ˆ ˆ ˆ |  SWqð ˆ j k
 rì |	 d k sã |
 rí ‚  qí qð Xn  ˆ d k rGˆ j t	 ˆ ƒ t	 ˆ ƒ ƒ } | d k rGˆ j
 ˆ ˆ d |  ˆ j Sn  ˆ	 ˆ
 f d! k rzt ˆ d ƒ d k  rzˆ \ ‰  ‰ ‰ ˆ \ ‰ ‰ ˆ ˆ ˆ } ˆ j ˆ ˆ ˆ ˆ ˆ  ˆ g ˆ ˆ ˆ ˆ d | g ƒ } i | d 6‡  ‡ ‡ ‡ ‡ ‡ ‡ f d † ‰ yc ˆ j ˆ d ˆ j g d	 | j d	 ƒ d
 | j d
 t ƒ ƒ} | ˆ j ˆ ˆ g ˆ  ˆ ˆ g ƒ SWqzˆ j k
 rvqzXn  |	 d k  rÅˆ j ˆ ƒ d k rÅi ˆ j d 6‡ ‡ ‡ ‡	 ‡
 ‡ ‡ f d † ‰ | j d d ƒ } yP ˆ j ˆ d ˆ j g d	 | j d	 ƒ d
 | j d
 t ƒ d | j d d ƒ ƒSWn& ˆ j k
 rSd | k rT‚  qTn X| j d	 ƒ rkd GHn  ‡ ‡ ‡ ‡ f d †  ‰ ‡ ‡ ‡ ‡ f d †  } ˆ j d } ˆ j } zd ˆ j } ˆ j d 7_ xß t d ƒ D]Ñ } ˆ j ‡ f d †  t | ƒ Dƒ ƒ } ˆ j ˆ | ˆ j g d | d | | ƒ d	 | j d	 ƒ d t d t ƒ\ } } | | k  rp| | } Pn  | d 9} ˆ j ˆ j d 7_ | d k rÝˆ j d ƒ ‚ qÝqÝWWd | ˆ _ X| 
S‡ ‡	 ‡
 ‡ f d  †  } ˆ j | ˆ ˆ |  S("   s&   
    Evaluates 3F2, 4F3, 5F4, ...
    i    i   gš™™™™™ñ?gÍÌÌÌÌÌì?i   i   gš™™™™™©?c            s•   ˆ ˆ ˆ |  } |  | k r+ | |  } nP | |  d } | ˆ |  ˆ d ˆ |  ˆ d 9} | |  | d :} | | |  <| ˆ j  ˆ  ˆ | ˆ ƒ S(   Ni   (   R€   (   R   t   _cacheR)   R½   (   R|   R   R†   R}   R~   R   R   (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyR     s    &
R+   t   strictc            s,  t  |  ƒ } | |  k rŠ ˆ ˆ j |  ƒ ˆ j |  ƒ } x$ ˆ  D] } | ˆ j | |  ƒ 9} q? Wx$ ˆ D] } | ˆ j | |  ƒ :} qf W| S| | k rž | | Sˆ | d ƒ } | d } x& t ˆ ƒ D] } | ˆ  | | 9} qÅ Wx& t ˆ ƒ D] } | ˆ | | :} qî W| ˆ 9} | | :} | | | <| S(   Ni   (   R
   R¡   t   fact   rfR    (   t   kkRÉ   R   R½   RV   RW   t   mR‰   (   R   R   R   Ru   Rv   R   R   (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyR   '  s(       
  


t
   sum_methods   r+s+et   methodR¨   t    s$   Attempting Euler-Maclaurin summationc         3   sÝ   ˆ d g } t  ‡ ‡ f d †  ˆ Dƒ ƒ t  ‡ ‡ f d †  | Dƒ ƒ ˆ ˆ j ˆ ƒ Vd ‰  xw t  ‡ ‡  ‡ f d †  ˆ Dƒ ƒ t  ‡ ‡  ‡ f d †  | Dƒ ƒ } ˆ  d k rÆ | ˆ j ˆ ƒ 7} n  | Vˆ  d 7‰  qb Wd  S(   Ni   c         3   s"   |  ] } ˆ  j  | ˆ ƒ Vq d  S(   N(   t   loggamma(   t   .0RV   (   R   t   k0(    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pys	   <genexpr>i  s    c         3   s"   |  ] } ˆ  j  | ˆ ƒ Vq d  S(   N(   RÒ   (   RÓ   RW   (   R   RÔ   (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pys	   <genexpr>j  s    i    c         3   s%   |  ] } ˆ  j  ˆ | ˆ ƒ Vq d  S(   N(   t   psi(   RÓ   RV   (   R   R$   RÔ   (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pys	   <genexpr>m  s    c         3   s%   |  ] } ˆ  j  ˆ | ˆ ƒ Vq d  S(   N(   RÕ   (   RÓ   RW   (   R   R$   RÔ   (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pys	   <genexpr>n  s    (   R   t   log(   RÔ   R~   RY   (   R   R   R   R   (   R$   RÔ   s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyt	   log_diffsg  s    L#c         3   sk   ˆ j  g  ˆ D] } | ^ q g  ˆ  D] } | ^ q# ƒ } x, ˆ j ˆ |  ƒ ƒ D] } | | } | VqN Wd  S(   N(   RÁ   t	   diffs_exp(   RÔ   RW   RV   t   CR'   RY   (   R   R   R   R×   (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyt   hyper_diffst  s    8
i   i2   i   i   c         3   s   |  ] } ˆ  | ƒ Vq d  S(   N(    (   RÓ   R   (   R   (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pys	   <genexpr>€  s    R²   t   adiffst   errort   _fast_aborti   s*   Euler-Maclaurin summation did not convergeNc       	      s€  t  |  ˆ  ƒ } t  |  ˆ ƒ } g  } ˆ  j ˆ } ˆ  j ˆ d t ƒ} x1t ˆ d ƒ D]} | | } | g } | g }	 | | g g  t ˆ d ƒ D]  }
 |
 | k r— | |
 | ^ q— } | g  t ˆ ƒ D] }
 | |
 | ^ qÎ } | g g  t ˆ ƒ D] }
 | | |
 d ^ qü } g  t ˆ d ƒ D]$ }
 |
 | k r,d | |
 | ^ q,} | j | |	 | | | | | f ƒ qY W| S(   NR–   i   (   t   listR:   R˜   R   R;   R   (   t   argsR   R   t   Tst   reczt   negzR   t   akRÙ   t   CpR‰   t   Gnt   Gdt   Fnt   Fd(   R   Ru   Rv   R   (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyRS   —  s    
	
B+2;&(   i   i   (   RB   RÞ   RÃ   R   R›   R   Rt   R“   R   R   R?   RH   RÁ   t   nsumR3   R’   R:   t   replaceRÂ   R   t   dpsR    RD   t   sumemRb   (   R   Ru   Rv   R   R   R   RL   t   a_typest   b_typesRÈ   t   ispolyRV   t   SR)   t   initialRÏ   RÚ   R²   R   t   truncR$   t   headt   tailt   errRY   RS   (    (   R|   R   R†   R   R}   R~   R   R   R×   Ru   Rv   R   R   s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyRr   ß  sŽ    ( (:+
''!.'"	%


c            sµ  ˆ  r' t  ˆ  Œ  \ ‰  } t ˆ  ƒ ‰  n g  d ‰  } ˆ r[ t  ˆ Œ  \ ‰ } t ˆ ƒ ‰ n g  d ‰ } | j d ˆ j ƒ | d <y( ˆ j | | | | ˆ  ˆ ˆ |  SWn ˆ j k
 r¿ n Xˆ j }	 z£ | j d ˆ j d ƒ }
 ˆ j d 7_ i ˆ j d 6‡  ‡ ‡ ‡ f d † ‰ ˆ j } xF t d ˆ j ƒ D]2 } ˆ | ƒ } | | 7} t	 | ƒ |
 k r5| Sq5WWd  |	 ˆ _ X| | d k r¨| j d	 ƒ } | s9ˆ j
 ˆ ƒ d
 k  r'ˆ t d t	 ˆ ƒ ƒ } ˆ j
 ˆ ƒ d k rd d d | d | ˆ j g } q6d d d | d | ˆ j g } q9d ˆ j g } n  | j d i  ƒ } ‡  ‡ ‡ ‡ f d †  } ˆ j | | d t | \ } } | t	 | ƒ ˆ j d k r¨| Sn  ˆ j ‚ d  S(   Nt   maxtermst	   asymp_toli   i
   i    c            sŒ   |  | k r | |  Sˆ |  d ƒ } x  ˆ  D] } | | |  d 9} q+ Wx  ˆ D] } | | |  d :} qN W| ˆ 9} | |  :} | | |  <| S(   Ni   (    (   R   t   cacheR½   RV   RW   (   R   R   R   R   (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyR   ¿  s      


i   i   t   contourg      Ð?y               @i   y               Àt   quad_kwargsc            s,   ˆ j  |  ƒ ˆ j ˆ  ˆ d g |  ˆ ƒ S(   Ni   (   Rj   R?   (   R½   (   R   R   R   R   (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyR®   à  s    RÜ   i   (    (    y       @       @y       @       À(   RB   RÞ   R3   R   Rt   R“   RÂ   R:   R    RÃ   t   argRF   RH   t   quadR   (   R   Ru   Rv   R   R   R   RL   Rí   Rî   R   R²   t   sR   R½   Rù   R)   Rú   R®   t   IRõ   (    (   R   R   R   R   R   s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyRs   ©  sP    (	%
	

##!c            s  | \ \ } } \ } } | \ \ }	 }
 \ } } t  ˆ ƒ } ˆ  j ˆ ƒ } ˆ  j } | } | j d ƒ o| ˆ  j | ƒ d k } | rMz¸ y ˆ  j | 7_ ‡  ‡ f d †  } ˆ  j | | | |	 | g d t d d ˆ  j ƒ} t ‡  f d †  | | |	 | ˆ g Dƒ ƒ d k r ˆ  j | ƒ } n  | SWn ˆ  j k
 r;n XWd  | ˆ  _ Xn  ˆ  j	 d d | | |
 | f | | |	 | g ˆ |  S(	   NRe   i   c            sì  |  | | | } |  | } | | } i  } ˆ  j  | d <| d | | | |  | | d <d } d }	 d }
 xV|	 | k rDd | d |  |  d d | | d | | |  | | | d | d | d |	 d |	 d } |	 | | d |	 | | d |	 | d } ˆ  j  |	 | | |	 d | | |	 d | |	 <n  | |	 ˆ |	 } t | ƒ d ˆ  j k  rtPn  |	 d k r¨t |
 ƒ t | ƒ d k  r¨ˆ  j ‚ n  | | 7} | }
 |	 d 7}	 qp Wˆ  j ˆ ƒ | } ˆ | 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(	   Ni    i   i   i   gš™™™™™¹?i   g      ø?iÿÿÿÿ(   R:   RÃ   RÂ   R“   Rj   (   R|   R   R}   R~   t   Xt   A2t   B2RX   t   s1R   t   tprevt   uu1t   uu2t   t1Rð   RŽ   R   t   T3(   R   R   (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyRS     s6    

"f.4(
3ijRö   i   c         3   s   |  ] } ˆ  j  | ƒ Vq d  S(   N(   R‘   (   RÓ   R)   (   R   (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pys	   <genexpr>!  s    i   i   (
   RÃ   RE   R   R3   Rb   R   R   R   R“   Rt   (   R   R   R   R   RL   R|   t   a1typeR   t   a2typeR}   t   b1typeR~   t   b2typeRÈ   R•   RM   t   asymp_extraprect   can_use_asymptoticRS   RY   (    (   R   R   s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyRo   è  s*    	11c            s  | \ \ } } | \ \ } } \ }	 }
 t  ˆ ƒ } ˆ  j ˆ ƒ } ˆ  j } ˆ oX | d } | j d ƒ o– ˆ  j | ƒ d k o– ˆ  j | ƒ d | k } | raz² y— ˆ  j | 7_ ‡  ‡ f d †  } ˆ  j | | | |	 g d t d d ˆ  j ƒ} t ‡  f d †  | | |	 ˆ g Dƒ ƒ d k r4ˆ  j | ƒ } n  | SWn ˆ  j	 k
 rOn XWd  | ˆ  _ Xn  ˆ  j
 d	 d | | |
 f | | |	 g ˆ |  S(
   Ni   Re   i   g      ø?c            s×  ˆ  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 | | <n  | | ˆ d
 | } ˆ  j | ˆ  j d ƒ | | } ˆ  j | ˆ  j d ƒ | | } t | ƒ d ˆ  j	 k  rˆPn  | d k r¼t | ƒ t | ƒ d k  r¼ˆ  j
 ‚ n  | | 7} | | 7} | } | d 7} q!Wˆ  j ˆ  j | d ˆ  j ˆ ƒ ƒ | ˆ  j ˆ  j | d ˆ  j ˆ ƒ ƒ | } d | ˆ  j ˆ g d d
 | g | | g |  g g  g  d f } ˆ g |  g | | g | |  | |  g |  |  | d |  | d g g  d ˆ f } | | f S(   Ni    i   i   i   iðÿÿÿi   iøÿÿÿi   iúÿÿÿg      à¿gš™™™™™¹?i   g      ø?g      à?(   RŠ   R:   t   mpq_1_4t   mpq_3_16t   mpq_1_16t   mpq_5_2R‰   R¡   RÃ   RÂ   R“   t   expjR   Rˆ   (   R|   R}   R~   Rÿ   RX   R  t   s2R   R  R  R  R    R  t   t2Rð   RŽ   R   (   R   R   (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyRS   I  sF    @=Ta-8$#(

)./(,Rö   i   c         3   s   |  ] } ˆ  j  | ƒ Vq d  S(   N(   R‘   (   RÓ   R)   (   R   (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pys	   <genexpr>r  s    i   (   RÃ   RE   R   R3   Rˆ   Rb   R   R   R   R“   Rt   (   R   R   R   R   RL   R|   R  R}   R
  R~   R  RÈ   R•   RM   R  R  RS   RY   (    (   R   R   s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyRl   -  s,    	(..c      	      s¹  | \ \ } } \ } } | \ \ }	 }
 \ } } \ } } t  ˆ ƒ } ˆ  j ˆ ƒ } ˆ oa | d } ˆ  j } | j d ƒ o¨ ˆ  j | ƒ d k o¨ ˆ  j | ƒ d | k } | rz¾ y£ ˆ  j | 7_ ‡  ‡ f d †  } ˆ  j | | | |	 | | g d t d d ˆ  j ƒ} t ‡  f d †  | | |	 | | ˆ g Dƒ ƒ d	 k rRˆ  j | ƒ } n  | SWn ˆ  j	 k
 rmn XWd  | ˆ  _ Xn  ˆ  j
 d d
 | | |
 | | f | | |	 | | g ˆ |  S(   Ni   Re   i   g      ø?c      	      sn  ˆ  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 } x| | 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 | | <n  | | ˆ  j ˆ d | ƒ } ˆ  j | ˆ  j d ƒ | | } ˆ  j | ˆ  j d ƒ | | } t | ƒ d ˆ  j	 k  rmPn  | d k r¡t | ƒ t | ƒ d k  r¡ˆ  j
 ‚ n  | | 7} | | 7} | } | d 7} qHWˆ  j ˆ  j | d ˆ  j ˆ ƒ ƒ | ˆ  j ˆ  j | d ˆ  j ˆ ƒ ƒ | } 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(   Ni    i   i   i   iðÿÿÿi    i   iøÿÿÿi   i   i   i   i   i   iöÿÿÿg      à¿gš™™™™™¹?g      ø?g      à?(   RŠ   R:   R  R  R  RC   R‰   R¡   RÃ   RÂ   R“   R  R   Rˆ   (   R|   R   R}   R~   Rƒ   Rÿ   R   t   B3t   At   Bt   RRX   R  R  R   R  R  R  t   uu3R    R  R  Rð   RŽ   R   R  (   R   R   (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyRS   ˜  sT    $

8\?²BH$#(

).5<B<CRö   i   c         3   s   |  ] } ˆ  j  | ƒ Vq d  S(   N(   R‘   (   RÓ   R)   (   R   (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pys	   <genexpr>Ç  s    i   i   (   RÃ   RE   R   R3   Rˆ   Rb   R   R   R   R“   Rt   (   R   R   R   R   RL   R|   R  R   R	  R}   R
  R~   R  Rƒ   t   b3typeRÈ   R•   R  RM   R  RS   RY   (    (   R   R   s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyRp     s*    !	..44c            sÈ   | \ \ } } \ } } yQ | j  ƒ  }	 |	 j d ˆ  j ƒ |	 d <ˆ  j d d | | f | | g ˆ |	  SWn) ˆ  j k
 r” | j d ƒ r• ‚  q• n X‡  ‡ f d †  }
 ˆ  j |
 | d | | g |  S(   NRö   i   i    Re   c            s¼   ˆ  j  | ƒ } 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(   Niÿÿÿÿi   i   (   t   sinpiR   (   RV   RW   R    R™   RŽ   R   (   R   R   (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyRS   Þ  s
    
DUi   (   t   copyR3   R   Rt   R“   Rb   (   R   R   R   R   RL   RV   R    RW   R”   t   kwargsbRS   (    (   R   R   s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyRq   Ñ  s    ,c            sÁ  | \ } } | \ }	 }
 t  | ƒ ‰ ˆ t  | ƒ ‰ t  |	 ƒ ‰ ˆ t  |
 ƒ ‰ | | } |	 |
 } g  | D] } ˆ  j | ƒ ^ qk } g  | D] } ˆ  j | ƒ ^ q } ˆ  j ˆ ƒ ‰ | d  k r0ˆ ˆ k  rØ d } n  ˆ ˆ k rí d } n  ˆ ˆ k r0ˆ ˆ ˆ k r$t ˆ ƒ d k r$d } q-d } q0n  | j d ƒ rYd ˆ ˆ ˆ ˆ | f GHn  | d k r‰‡  ‡ ‡ ‡ ‡ ‡ ‡ f d †  } n! ‡  ‡ ‡ ‡ ‡ ‡ ‡ f d †  } ˆ  j | | | |  S(   Ni   i   R+   s   Meijer G m,n,p,q,series =c       	      sÎ  |  ˆ  } |  ˆ } g  } x­t  ˆ ƒ D]Ÿ} ˆ g } | | ˆ g } g  t  ˆ ƒ D]$ } | | k rT | | | | ^ qT } | g  t  ˆ ƒ D] } d | | | | ^ qŽ 7} g  t  ˆ ˆ ƒ D] } | | | | ^ qÁ }	 |	 g  t  ˆ ˆ ƒ D] } d | | | | ^ qò 7}	 g  t  ˆ ƒ D] } d | | | | ^ q"}
 g  t  ˆ ƒ D]( } | | k rQd | | | | ^ qQ} ˆ  j ˆ ˆ ˆ ˆ ˆ  j ˆ } | j | | | |	 |
 | | f ƒ q' W| S(   Ni   (   R;   R:   R   (   Rß   RV   RW   R   R   t   basest   exptsR‰   t   gnt   gdt   hnt   hdt   hz(   R   RÎ   R&   Ru   Rv   t   rR   (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyRS   þ  s    

	73.6/;%&c       	      sû  |  ˆ  } |  ˆ } g  } xÚt  ˆ ƒ D]Ì} ˆ g } ˆ d k rV | | d g } n | | d ˆ  j ˆ ƒ g } g  t  ˆ ƒ D]$ } | | k r | | | | ^ q } | g  t  ˆ ƒ D] } d | | | | ^ q» 7} g  t  ˆ ˆ ƒ D] } | | | | ^ qî }	 |	 g  t  ˆ ˆ ƒ D] } d | | | | ^ q7}	 g  t  ˆ ƒ D] } d | | | | ^ qO}
 g  t  ˆ ƒ D]( } | | k r~d | | | | ^ q~} ˆ  j ˆ ˆ ˆ ˆ ˆ  j ˆ } | j | | | |	 |
 | | f ƒ q' W| S(   Ni   (   R;   Rf   R:   R   (   Rß   RV   RW   R   R   R  R  R‰   R   R!  R"  R#  R$  (   R   RÎ   R&   Ru   Rv   R%  R   (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyRS     s"    

	73.6/;%&(   R<   Rf   R5   RÃ   R3   Rb   (   R   R   R   R   R%  t   seriesRL   t   ant   apt   bmt   bqRV   RW   t   _RS   (    (   R   RÎ   R&   Ru   Rv   R%  R   s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyt   meijergæ  s4    

"" 	 	"	$!c   
   	   K   sX  t  | ƒ t  | ƒ k r5 | | } } | | } } n  d „  } |  j | ƒ rP nÇ |  j | ƒ rb nµ |  j | ƒ r’ | | | | f \ } } } } n… | | ƒ s| | | d }	 | |	 ƒ sË t d ƒ ‚ n  d | | d | | | | |  j | | | | | | | |	 | |  S|  j i | g d 6| g d 6| g d 6i | g d 6| | |  S(   Nc         S   s   t  |  ƒ d k  S(   Ng®Gáz®ï?(   RÃ   (   R%   (    (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyR(   +  s    i   s%   Analytic continuation not implementeds   m+nRÎ   R&   (   RÃ   R	   R6   t   appellf1t   hyper2d(
   R   RV   R}   R~   RX   R%   t   yRL   R(   t   u1(    (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyR-  $  s"    	! ,c   	      K   sK   |  j  i | g d 6| g d 6| g d 6i | g d 6| g d 6| | |  S(   Ns   m+nRÎ   R&   (   R.  (	   R   RV   R}   R~   t   c1t   c2R%   R/  RL   (    (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyt   appellf2A  s    'c         K   sÎ   |  j  | ƒ p |  j  | ƒ }	 |  j  | ƒ p9 |  j  | ƒ }
 |	 s‘ |
 s` t | ƒ t | ƒ k r‘ | | } } | | | | f \ } } } } q‘ n  |  j i | | g d 6| | g d 6i | g d 6| | |  S(   NRÎ   R&   s   m+n(   R	   RÃ   R.  (   R   R|   R   R}   R~   RX   R%   R/  RL   t   outer_polynomialt   inner_polynomial(    (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyt   appellf3G  s    $c         K   s:   |  j  i | | g d 6i | g d 6| g d 6| | |  S(   Ns   m+nRÎ   R&   (   R.  (   R   RV   RW   R1  R2  R%   R/  RL   (    (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyt   appellf4Q  s    c   #         sß  ˆ  j  | ƒ } ˆ  j  | ƒ } ‡  f d †  } t | ƒ } t | ƒ } | | d ƒ }	 | | d ƒ }
 | | d ƒ } | | d ƒ } | | d ƒ } | | d ƒ } | | d ƒ } | | d	 ƒ } | | d ƒ } | | d ƒ } | | d ƒ } | rt d
 | j ƒ  d ƒ ‚ n  | r0t d
 | j ƒ  d ƒ ‚ n  d } ˆ  j } ˆ  j d ƒ } d } ˆ  j } | j d d | ƒ } zZˆ  j d 7_ ˆ  j 
} x:d } d } t	 |
 ƒ } t	 | ƒ } g  |	 D] } | | ^ q½} g  | D] } | | ^ qÚ}  x2 | D]* } | | } | j
 | ƒ | j
 | ƒ q÷Wx2 | D]* } | | } | j
 | ƒ |  j
 | ƒ q,Wx4 | D], } | j
 | | ƒ |  j
 | | d ƒ qaWxM | D]E } | d 9} | d | 9} | j
 d | | ƒ | j
 | | ƒ q˜WxH | D]@ } | j
 | d | ƒ | j
 | d | d | d | ƒ qèWxV | D]N } | d 9} | j
 d | d | ƒ | j
 | d | d | d | ƒ q3Wx[ | D]S } | d 9} | j
 d | | ƒ | j
 d | | d ƒ |  j
 | | d ƒ qŒWˆ  j | | | | d ˆ  j | }! | |! | }" t |" ƒ | k  r5| d 7} n d } | d k sN| rRPn  | |" 7} x | D] } | | 9} qcWx |  D] } | | :} q~W| d 7} | | | } | | k r’ˆ  j d ƒ ‚ q’q’WWd | ˆ  _ X| 
S(   sz  
    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            s_   |  j  | g  ƒ } y t | ƒ } Wn t k
 r> | g } n Xg  | D] } ˆ  j | ƒ ^ qF S(   N(   t   popRÞ   t	   TypeErrorRf   (   t   dctt   keyRß   Rû   (   R   (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyt   parseà  s    RÎ   R&   s   m+ns   m-ns   n-ms   2m+ns   2m-ns   2n-ms   unsupported key: %ri    Rö   i   i
   i   iÿÿÿÿi   i   g      à?R-   i   s   maxterms exceeded in hyper2dN(   Rf   t   dictR6   t   keysR:   R¡   R   R3   RÂ   RÞ   R   R?   RÃ   R“   (#   R   RV   RW   R%   R/  RL   R<  R   R   t   a_mt   a_nt	   a_m_add_nt	   a_m_sub_nt	   a_n_sub_mt
   a_2m_add_nt
   a_2m_sub_nt
   a_2n_sub_mt   b_mt   b_nt	   b_m_add_nRý   t   outerRÎ   t   ok_countR   Rö   R²   t
   inner_signt
   outer_signt   inner_at   inner_bt   outer_at   outer_bt   innerR   (    (   R   s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyR.  V  s¦    ˆ  		



)
)

  

c            s–   |  j  ˆ ƒ ‰ | | } t | ƒ ‰ t | ƒ } ˆ | f d k sU ˆ | f d k r` |  j ˆ Sˆ | d ‰  ‡  ‡ ‡ f d †  } |  j | | |  S(   s`  
    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

    i    i   i   c             s"  t  |  ˆ  ƒ } t  |  ˆ ƒ } g  | D] } d | ^ q' } g  | D] } d | ^ qD } d ˆ  ˆ g g  | D] } d | ^ qo g  | D] } d | ^ qŠ } d g d g t | ƒ d g t | ƒ } g  g  g  g  | d g | ˆ f }	 | | g  g  | d g | d ˆ  ˆ f }
 |	 |
 f S(   Ni   iÿÿÿÿi   (   RÞ   R<   (   R   R   R   RW   t   aa_sRV   t   bb_st   rpt   rcRŽ   R   (   t   negRu   R   (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyRS   {  s    G+"*(   i    i    (   i   i   (   Rf   R<   R2   Rb   (   R   R   R   R   RL   R   Rv   RS   (    (   RW  Ru   R   s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyt   bihyperD  s    0
$
N(%   t   libmp.backendR    t	   functionsR   R   R*   R7   R   Rb   R?   Rz   R{   R   R€   R‚   R„   R…   R‡   Rm   Ri   Rk   Rº   Rn   Rr   Rs   Ro   Rl   Rp   Rq   R5   R,  R-  R3  R6  R7  R.  RX  (    (    (    s>   lib/python2.7/site-packages/mpmath/functions/hypergeometric.pyt   <module>   sB   	4‡+$$	6PÊ?ERR=
î