
    "`r                        d dl mZ ddlmZmZ d ZdZeg df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       Zed        Zed        Zed         Zed!        Z ed"        Z!	 ed#        Z"y)%   )xrange   )defundefun_wrappedc                    dx}}d}g }t        |      D ],  \  }}	|	\  }
}}}}}}d}t        |
      D ],  \  }}|r	| j                  ||         dk  s!||   s'dx}}d}. g d}t        |||g      D ]  \  }}t        |      D ]  \  }}| j                  |      \  }}|dkD  r || j                  k(  rCd}|dk(  r+|D ]&  }| j	                  |      s|t        |      k\  s$d} n |rd||xx   dz  cc<   r|dk  sx|| z  }d}  |r&|d   |d   |d   z   kD  r|s|j                  |       t        |      s)dx}}/ ||||fS )NF    T)r   r   r   r   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zhave_singular_nongamma_weightkw
pole_count
data_indexdataixndokus                                A/usr/lib/python3/dist-packages/mpmath/functions/hypergeometric.py_check_need_perturbr0      s   GiIG%e, ('
D15.S'63Q(-% cN 	9DAq66#a&>Q&3q6*..Gi481		9
 
 )7FC*@ A 	%J!$ %1((+1q5= B!Q!$ &A"{{1~!s1v+%) %&  z*a/* V!OI $I-%	%0 :a=:a=:a=3P#P1NN:&_"&&GiQ('R Iy'11    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                 d   | j                   }| j                  }| j                  }| j                  }|d d  }	|j	                  dd      }
|j	                  d| j                  |            }||d<   |j	                  d      }|j	                  d      }d }d}	 	 | xj                   dz  c_         | j                   |kD  rt        t        || j                   fz        | j                   }|	d d  } || }|
r7t                t        d	       t        d
| j                          t        d|       t        | |||      \  }}}}| xj                   |z  c_         |rd|v r|d   }n-| j                  rt        | j                   dz        }n|dz   |z   }| j                  | j                  |       }|dz   |z   dz   | _         t        t        |            D ]  }||xx   |z  cc<   |||dz   z  z  } |r || }|r"t!        |      D cg c]  \  }}||vs| }}}|s| j                  || _         S g }t!        |      D ]  \  }}|\  }}} }!}"}#}$|
rt                t        d|dz   t        |      t        |"      t        |#      fz         t        d| j#                  |      | j#                  |             t        d| j#                  |       | j#                  |!             t        d| j#                  |"      | j#                  |#             t        d| j#                  |$             | j%                   | j&                  |"|#|$fi |g| D %cg c]  }%| j)                  |%       c}%z   |!D &cg c]  }&| j+                  |&       c}&z   t-        ||      D '(cg c]  \  }'}(| j/                  |'|(       c}(}'z         })|
rt        d|)       |j1                  |)        t        |      dk(  r	|s|d   }n| j                  r| j3                  |      }nx| j3                  |      }|D *cg c]  }*| j5                  |*       }+}*t7        |+      },| j5                  |      }-|,|-z
  }.|
r1t                t        d|.d       t        d| j                   |z
  d       |.| j                   |z
  k  }/|d}0n|,| j                   z
  | k  }0|d}1n|,|kD  }1|/r|r| j9                  |.      rn|/r`|	|dz  }|}N| j5                  ||z
        | j5                  |      |z
  k  rnt|0r| j                  }ne|1r| j:                  }nVd|v rnQ|dz  }|}nGt=        t7        |.|dz        t7        ||            }2| xj                   |2z  c_         |
rt        d       || _         |S c c}}w c c}%w c c}&w c c}(}'w c c}*w # || _         w xY w)NverboseFmaxpreczeroprecinfprecr   r   
   zENTERING hypercomb main loopzprec =hextrahmagg333333?z  Evaluating term %i/%i : %iF%iz
    powersz	    gammaz	    hyperz    zz
    Value:z  Cancellation:bitsz  Increased precision:   r   z*  Must start over with increased precision)r   zeror   r   get_default_hyper_maxprec
ValueError_hypercomb_msgprintr0   _fixed_precisionr   ldexponerangelenr
   nstrfprodhypergammargammazippowerr   fsummagmaxisnaninfmin)3r   functionparamsr   kwargsorigsumvaluedistr   orig_paramsr3   r4   r5   r6   perturbed_reference_valuer8   orig2r   r   r   r   r   r9   hr$   r)   r   evaluated_termsr   	term_datar   r   r   r   r    r!   r"   abr%   cvr*   term_magnitudesmax_magnitudesum_magnitudecancellationprecision_okzero_okinf_ok	increments3                                                      r/   	hypercombrl   :   s   88DxxHD88D)KjjE*GjjC$>$>t$DEGF9zz*%Hjj#G $FwHHNHxx'! 42B!BCCHHE ^Ff%E45h)h'#C6IJ 3GY	7HH	!HV#!&>D))sxx|,D"9v-DIIcggu- 2:,r1s6{+ !A1INI
 AaCLA!  &)"/8/?T)1d1GCSTTxxd c !O)25)9 *%
I9B6S'63QG;#As5z3s8SXFG H,sxx}E+sxx'8#((6:JK+sxx}chhsmD'388A;/
 IIysyyc1??@+23aSYYq\34,23qSZZ]34 25S>1SYYq^>? @ ,*&&q))*, 5zQ*1-##88O4xx0H3BCaswwqzCOC0MGGH-M(=8L'v>.4H'#((T/9L'#((2hY>&0W<1H,4bLF08-WWX(AAB)D01"xxH"wwHv%aKF08-  L$' :C	$<OP	I%FGi l 9k U& 43> Db s^   E(V& =V
VV& &DV&  VV&  V8V& V'A7V& V!6EV& V& &	V/c                    | j                  |      }t        |      }t        |      }|D cg c]  }| j                  |       }}|D cg c]  }| j                  |       }}|j                  dd      rt|j                  dd      }	d}
|
|k  r[|rY||
   }||v rC|	s| j	                  |d         s-|j                  |       |j                  |       |dz  }|dz  }n|
dz  }
|
|k  r|rY|dk(  r0|dk(  r | j                  ||fi |S |dk(  r#| j                  |      S |dk(  rQ|dk(  r | j                  |||fi |S |dk(  r | j                  |||fi |S |dk(  r| j                  |d   d   |      S |dk(  rh|dk(  r | j                  |||fi |S |dk(  r | j                  |||fi |S |dk(  r | j                  |||fi |S |dk(  rd | j                  |||fi |S ||dz   k(  r | j                  |||||fi |S ||dz   kD  r(|j                  d	      s | j                   |||||fi |S t#        ||z    \  }} | j$                  |||||fi |S c c}w c c}w )
z0
    Hypergeometric function, general case.
    	eliminateTeliminate_allFr   r   r      force_series)convertrF   _convert_paramr=   r   remove_hyp0f1exp_hyp1f1_hyp1f2_hyp1f0_hyp2f1_hyp2f2_hyp2f3_hyp2f0_hypq1fq
_hyp_borelrL   hypsum)r   r    r!   r"   rV   pqr`   ra   elim_nonpositiver)   coeffstypess                r/   rI   rI      s   
 	AACACA*-
.Q3a 
.C
.*-
.Q3a 
.C
.zz+t$!::ou=!eAACx-S[[15F

1

1QQQ !e 	Av!VKCKKQ9&99!VCGGAJ&	
a!VKCKKS!>v>>!VKCKKS!>v>>!VCKKAq	155	
a!VKCKKS!>v>>!VKCKKS!>v>>!VKCKKS!>v>>!VKCKKS!>v>>	
acs||Aq#sA888	
QqSN3s~~aCa:6::#c'OMFE3::aE61777C /
.s   I
Ic                 .     | j                   g |g|fi |S NrI   )r   ra   r"   rV   s       r/   hyp0f1r      s    399RA'''r1   c                 0     | j                   |g|g|fi |S r   r   r   r`   ra   r"   rV   s        r/   hyp1f1r      s     399aS!Q(((r1   c                 2     | j                   |g||g|fi |S r   r   )r   a1b1b2r"   rV   s         r/   hyp1f2r      s"    399bT2b'!-f--r1   c                 2     | j                   ||g|g|fi |S r   r   )r   r`   ra   rb   r"   rV   s         r/   hyp2f1r      s"    399aUA3q*6**r1   c                 4     | j                   ||g||g|fi |S r   r   )r   r   a2r   r   r"   rV   s          r/   hyp2f2r      s$    399bWbWQ000r1   c                 6     | j                   ||g|||g|fi |S r   r   )r   r   r   r   r   b3r"   rV   s           r/   hyp2f3r     s&    399bWbBZ3F33r1   c                 0     | j                   ||gg |fi |S r   r   r   s        r/   hyp2f0r     s     399aU2a)&))r1   c                 6     | j                   |||g||g|fi |S r   r   )r   r   r   a3r   r   r"   rV   s           r/   hyp3f2r   	  s&    399bBZB3F33r1   c                     d|z
  | z  S Nr    )r   r`   r"   s      r/   ry   ry     s    aCaR=r1   c                 J   	 |\  \  	}r j                        }nd}|dk\  r|j                  d      s	  j                  }	  xj                  d|dz  z   z  c_        	 fd} j                  |g d      } j	                  	      d j                   j                        z  z  |z  }| _         j                  	      r" j                        r j                  |      }|S   j                  dd	|f	gfi |S # | _        w xY w#  j                  $ r Y 6w xY w)
Nr      rq      r   c                  L   j                  	       } j                  | z  }dd|z  z  }j                  z
  }j                  d|z        }| |g|dgg g j                  z
  j                  z
  gg | f}||g|dgg g j                  z
  j                  z
  gg |f}||fS )Nr      r   )sqrtjmpq_1_2rv   mpq_3_2)
r%   jwr.   rb   ET1T2ra   r   r"   s
          r/   r]   z_hyp0f1.<locals>.h!  s    !AqB1R4AaA"A3q'Ab62rAckkM3;;q=3QSUXYWYZBa&1Q%R!CKK-Q1OQSUVWBr6Mr1   Trq   r   )rO   r=   r   rl   rJ   r   pi_is_real_type_reNoConvergencer   )
r   r!   r"   rV   btypemagzrW   r]   rc   ra   s
   ` `      @r/   ru   ru     s"   KJQwwqzqyN3	
 88D BqL(" MM!RdM;IIaL!CHHSVV$4"45a7  #(9(9!(<GGAJ2I 3::aUHqc1777      		s*   D A)D .<D 	DD D"!D"c                     |\  \  }}|\  \  }}s j                   z   S  j                        }	|	dk\  r5 j                  |      r j                  |      dk  s j	                        rZ j                  |       j                  |      cxk(  r% j                        cxk(  rdk(  r j                  S   j                  z  S 	 	  xj                  |	z  c_         j                        dk   fd}
 j                  |
||gd      } j                  |      r3 j                  |      r" j                        r j                  |      }| xj                  |	z  c_        S   j                  dd||f||gfi |}|S #  j                  $ r Y nw xY w	  xj                  |	z  c_        I#  xj                  |	z  c_        w xY w)N   r   r   c                    r#j                  j                  | d            }nj                  |       }dz  }|gd|  g|g|| z
  g| d| z   |z
  gg | f}j                        gd| |z
  g|g| g|| z
  d| z
  gg |f}||fS NT)exactr   )expjpifnegrv   )	r`   ra   r   rzr   r   r   sectorr"   s	         r/   r]   z_hyp1f1.<locals>.hE  s    JJsxxx'>?JJqM1BQ%!QB!qsea1QZbSIB771:a.1QqS'A3ac1Q3ZRPBr6Mr1   Tr   )rD   rO   isintr   isinfsignrR   nanr   _imrl   r   r   r   r   )r   r    r!   r"   rV   r`   atypera   r   r   r]   rc   r   s   `  `        @r/   rw   rw   5  s   KJQKJQwwqy771:Dqy#))A,366!9>99Q<xx{chhqk=SXXa[=A=ww >77Q;	D a" MM!aUM>$$Q'C,=,=a,@SEVEVWXEY
Ar HHH

1a%!Q=f=AH $$ HHHCHHHs%   BF FF8 FF8 8Gc                    ||||f\  }}}}	| j                   }
|j                  dd|
z        }d}	 |
|z   | _         | j                  |	      }| j                  d      }| j                  d      }| j                  d      }d}||z  |z  }|| j                  z  }|dz   | j                  z  }d|z
  }||z  }||z  |z  }||z
  |z
  }|dz
  }| j                    dz
  }| j
                  }| j                  }| j                  }| j                  }	 ||z   }||z   ||z   z  |z  d|dz   z  |z  ||z   z  z  }||||z   |z  |z  z
  z  } |||z  ||z   |z  z   z  }!||||z  ||z  z   |z
  z  |z
  z  d|z  |z  z  }"||z   |"z
  }#t        | ||#            } ||#|z
        |k  rn| |!|#}}}|dz  }| ||#      z
  }$|$|k  r	 |#S ||$z  }||kD  r| j                  )Nr4   d   r7   r   r   r   r   )r   r=   rr   mpfr   rG   nprintrO   r   rP   r   )%r   r`   ra   rb   r"   rV   _a_b_c_zrW   r4   extrar,   efr$   abzchc1hnzgabgcbaz2tolrG   r   rO   maxmagkchkakbzd1e1ftf1rg   s%                                        r/   _hyp2f1_gosperr   Y  sK    Q1*KBr"R88DjjCH-GE
%< KKOGGAJGGAJGGAJ c!e_sckk!qSbDc!ec!eqSxxi"nxxggB$CqS1Q3KMQ!WS[!C%%89E1S5!)A+&B#qsAg&BAs1uQrTz!|$S()1S584BQBR)F2a4y3"b!qAFA  B'%
 I \!Ew'''Y r1   c                     |\  \  }}\  }}|\  \  }	dk(  r
 j                  |z
  |z
        dkD  }
 j                  |      xr |dk  xs  j                  |      xr |dk  } j                        xrP dk  xrI  j                  |      xr |cxk  xr dk  nc xs#  j                  |      xr |cxk  xr dk  nc  }|
s|r&|s$ j                  |z
  |z
  g|z
  |z
  gd      S  j                  ||d j                  dz  z
         j
                  z  S ss
|dk(  s|dk(  rdz   S  j                  S  j                        rZdk  rU j                  |      r|cxk  rdk  s,n  j                  |      r|cxk  rdk  rn  j
                  S n j
                  S t              }|dk  s6 j                  |      r
|dk  r|dk\  s j                  |      r'|dk  r"|dk\  r  j                  dd|||	f||gfi |S  j                  }	  xj                  dz  c_	        |d	k\  r fd
}  j                  |||gfi |}nyt        dz
        dk  rfd}  j                  |||gfi |}nKt        dz
  z        dk  r' j                  ||z
  dz
  z        dz
  |z  z  }nt         ||fi |}| _	        |S # | _	        w xY w)Nr   r   T)_infsignr   g?ir7   g?c                     j                   z
  }| |z
  }d	z  }	 g|  g| g|| z
  g| || z   gj                   |z   g|f}	 g| g|g| |z
  g|||z   gj                   |z
  g|f}||fS r   )mpq_1)
r`   ra   tabr   r   r   rb   r   r"   s
          r/   r]   z_hyp2f1.<locals>.h  s    IIaKac!2rdQB4!RC!AaC1QqS'399R<.2NrdQB4!B1Q3!AaC#))B,"M2vr1   g      ?c                     | z
  |z
  }| z
  }|z
  }d	z
  }g g |g||g| |gd|z
  g|f}|g|g| |z   z
  g| |g||gd|z   g|f}||fS r   r   )
r`   ra   r   cacbr   r   r   rb   r"   s
           r/   r]   z_hyp2f1.<locals>.h  s    aCE!2!A#RAaCraURGaUQqSE2=TA31Q3q5	Aa52b'AaC5"D2vr1   )r   r   	gammaprodr   epsrR   r   absr   r   rl   r   )r   r    r!   r"   rV   r`   r   ra   r   ctype
convergentfinitezerodivabszrW   r]   rc   rb   s   `  `             @r/   rz   rz     s    JQ
EKJQAvVVAaCE]Q&
))A,)16Gsyy|/FQ))A, O16 Oiil*qA{{M		!0La1/O &'==!QqSUac1Q3Z$=GG zz!Aa#''!),sww66  Q!q&Q3Jww yy|QIIaLQ![q[IIaLQ![q[ 77N  77Nq6D s{syy|Q1:yy|Q1:szz!Qu 51ay!NvNN88DB 3;
 a!A1&1A 1X
 a!A1&1A AaC\T!

1ac1a1g.!A#9A s1Qq4V4A 2I s    B1K 	K$c           
           t         \  }t         \  }t              t              t              }	d}
D ]  } j                  |      s|dk  sd}
 n |	dk  s|
r	   j                  ||z   z   fi |S dk(  rM j                  t              t              z
        }|dk  r"  j                  dfi | j                  z  S fdk(  rt        dz
        dk  r\  \  z   z
  } j                  z
  z
  gz
  z
  d|g      }d|if fd		 	  j                   d j                  g|j                  d
      |j                  dd            }| j                  gg      z  S |	dk  r j                        dk  r}d j                  if  fd	 |j                  dd      }	  j                   d j                  g|j                  d
      |j                  dd      |j                  dd            S  fd}  j.                  |z   fi |S #  j
                  $ r |	dkD  s|
r Y w xY w#  j
                  $ r Y w xY w#  j
                  $ r d|vr Y nw xY w|j                  d
      rt!        d       	  fd fd} j"                  dz  } j$                  }	 d j&                  z  } xj$                  dz  c_        t)        d      D ]  } j+                   fdt)        |      D              } j-                   | j                  g| ||      |j                  d
      dd      \  }}||k  r||z   } n?|dz  } xj$                   j$                  dz  z  c_        |dk(  s j                  d       | _        S # | _        w xY w) z&
    Evaluates 3F2, 4F3, 5F4, ...
    Fr   Tr   g?g?)rp   r   g?c                     z   z
  | z   }| |v r||    }n2|| dz
     }|| z   z
  dz
  | z   z
  dz
  z  z  }|| |dz
  z  z  }||| <   |	j                  |
      z  S r   )r   )r$   _cacher.   r   r   r   r   r   r   r   r"   s       r/   r   z_hypq1fq.<locals>.term  s    2b
AF{1I1Q3Kbd2gai"Q$r'!),,Q!Wq	szz"R!,,,r1   r3   strict)r3   r   c                    t        |       }|| k7  r`
j                  |       z  
j                  |       z  }D ]  }|
j                  ||       z  } 	D ]  }|
j                  ||       z  } |S ||v r||   S  |dz
        }|dz
  }t	              D ]  }||   |z   z  } t	              D ]  }|	|   |z   z  } |z  }||z  }|||<   |S r   )r   r   facrfr   )kkr   r$   r   r`   ra   mr   r    r!   r   r   r   r   r"   s           r/   r   z_hypq1fq.<locals>.term'  s    BABw$swwr{2/Aa366!B</a//Aa366!B</a/F{ay QqS	A!AAY/c!fQh/AY/c!fQh/FAFAF1IHr1   
sum_methodzr+s+er    )r3   r   methodz$Attempting Euler-Maclaurin summationc              3   F   K   dgz   }t         fdD              t         fd|D              z
   j                        z  z    d	 t         fdD              t         fd|D              z
  }dk(  r|j                        z  }| dz  Pw)Nr   c              3   F   K   | ]  }j                  |z           y wr   loggamma).0r`   r   k0s     r/   	<genexpr>z._hypq1fq.<locals>.log_diffs.<locals>.<genexpr>i  s     6Qcll1R4(6   !c              3   F   K   | ]  }j                  |z           y wr   r  )r  ra   r   r  s     r/   r  z._hypq1fq.<locals>.log_diffs.<locals>.<genexpr>j  s     31CLL2&3r  r   c              3   H   K   | ]  }j                  |z           y wr   psi)r  r`   r   r)   r  s     r/   r  z._hypq1fq.<locals>.log_diffs.<locals>.<genexpr>m  s     5A!B$5   "c              3   H   K   | ]  }j                  |z           y wr   r	  )r  ra   r   r)   r  s     r/   r  z._hypq1fq.<locals>.log_diffs.<locals>.<genexpr>n  s     4A!B$4r  )r   log)r  r   rc   r)   r    r!   r   r"   s   `  @r/   	log_diffsz_hypq1fq.<locals>.log_diffsg  s     sB6#66333468mD DA55544456OAQ s   BB!c              3      K   j                  D cg c]  }| c}D cg c]  }| c}      }j                   	|             D ]  }||z  }|  y c c}w c c}w wr   )r   	diffs_exp)
r  ra   r`   Cr,   rc   r    r!   r   r  s
         r/   hyper_diffsz_hypq1fq.<locals>.hyper_diffst  s_     #.Qq.C0@q0@AA]]9R=1 E /0@s   A"	AA"	A
7A"i   2   r;      c              3   .   K   | ]  } |        y wr   r   )r  r$   r   s     r/   r  z_hypq1fq.<locals>.<genexpr>  s     ?AQ?s   )r   adiffsr3   error_fast_abortr   r   z*Euler-Maclaurin summation did not convergec            
      `   t        | d        }t        | d        }g }j                  z  }j                  d      }t        dz         D ]  }||   }|g}| g}	||gz   t        dz         D 
cg c]  }
|
|k7  s	||
   |z
   c}
z   }|t              D 
cg c]
  }
||
   |z
   c}
z   }|gt              D 
cg c]  }
|||
   z
  dz    c}
z   }t        dz         D 
cg c]  }
|
|k7  s	d||
   z
  |z    }}
|j	                  ||	|||||f        |S c c}
w c c}
w c c}
w c c}
w r   )listrD   r   rE   r   )argsr    r!   Tsrecznegzr$   akr  Cpr   GnGdFnFdr   r   r   r"   s                  r/   r]   z_hypq1fq.<locals>.h  sL   48n48nwwqyxxx&qs 	5AQBA#Bt%!*GQQs1vbyGGB584aAr	44BeAh7CF177B',QqSz<!Q!V!CF(2+<B<IIq"b"b"d34	5 	 H47<s$   4
D?
DD!?D&&
D+1D+)rL   r  r   r   r   r   r   r   rI   rR   r   nsumr=   r   rD   replacerA   r   r   dpsr   rN   sumemrl   )!r   r   r   r    r!   r"   rV   a_typesb_typesr   ispolyr`   Sr.   initialr   r  r   r   truncr)   headtailerrrc   r]   r   r   r   r   r   r  r   s!   ``````                    @@@@@@@r/   r~   r~     s   
 9LC9LC
s)C
s)Cq6DF 99Q<AFF
 ax6	3::aGGOSWaJ6JJ& 	Av FF3s8CH$%6399S#s5f5??	!u~#ac(T/2b2rE"H--Br"uR 3RU2b514EFg; 		- 		-	#''{FJJy4Izz(D1  3As}}bWbBZ888 czcggajAoswwK 	 	$ ZZg6
	88D1SWW+vzz)7Lzz(D1!))#b1  3 3v  3==CG.v..k    	czV $	Z    		@    	*$	
 ::i 89	>		 ggnxx	LEHHNHAY Fxx???IIdUCGG,<#&u-"JJy1 $	 & &	c
 9tA
 CHHaK'6++DF FF$ CHr	 CHsK   1I AI.  AJ I+*I+.J ?J JJ&C	O 0O 	Oc                     rt         \  }t              ng dc}rt         \  }t              ng dc}|j                  d j                        |d<   	   j                  ||||z   z   fi |S #  j
                  $ r Y nw xY w j                  }		 |j                  d j                  dz        }
 xj                  dz  c_        d j                  iffd	 j                  }t        d j                        D ](  } |      }||z  }t        |      |
k  s|c |	 _        S  	 |	 _        n# |	 _        w xY w||d	z   k  r|j                  d
      }|s~ j                        dk  r\t        dt                    z  } j                        dk\  rddd|z  d|z   j                  g}n&ddd|z  d|z   j                  g}nd j                  g}|j                  di       } fd}  j                  ||fddi|\  }}|t        |       j                  z  dz  k  r|S  j
                  )Nr   maxterms	asymp_tolr   r7   r   c                     | |v r||    S  | dz
        }D ]  }||| dz
  z   z  } D ]  }||| dz
  z   z  } |z  }|| z  }||| <   |S r   r   )	r$   cacher   r`   ra   r    r!   r   r"   s	        r/   r   z_hyp_borel.<locals>.term  sv    EzQxQqS	A(!1Q3.!((!1Q3.!(FAFAE!HHr1   r   rp   contourg      ?y               @y       @       @r   y              y       @       quad_kwargsc                 ^    j                  |        j                  dgz   | z        z  S r   )rv   rI   )r   r    r!   r   r"   s    r/   r   z_hyp_borel.<locals>.g  s/    77A2;syyc1#gqs;;;r1   r  Tr   )rL   r  r=   r   r   r   r   rD   r   r   argrP   rR   quad)r   r   r   r    r!   r"   rV   r)  r*  r   r   sr$   r   r7  r.   r8  r   Ir1  r   s   `  ```              @r/   r   r     sC   
CyW3i2W
CyW3i2WJ9F:szz!QS!FvFF 88Djjcggai0BSWW+ 		 		 GG388$ 	AQAFA1v}	 4AaCx**Y'wwqzD As1v&771:? "tQh!SWW=G #qy!A#sww?G
 cgg,jj3	<!W@D@K@3#a&.""H


s+   "A? ?BB!B
E ,E 7E 	E
c           	      ^    |\  \  }}\  }}|\  \  }	}
\  }}t              } j                        } j                  }|}|j                  d       xr  j                  |      dkD  }|ry	 	  xj                  |z  c_         fd} j	                  ||||	|gdd j                  z        }t         fd|||	|fD              dk(  r j                  |      }|| _        S   j                  d	d	|||
|f|||	|gfi |S #  j                  $ r Y nw xY w	 | _        =# | _        w xY w)
Nrq   rp   c                    | |z   |z
  |z
  }| |z   }||z   }i }j                   |d<   |dz
  |z  ||z  z   | |z  z
  |d<   d}d}	d}
	 |	|vrd|z
  d| z  z   | dz  z   d|z  z   |dz  z   ||z  z
  | |z  z   ||z  z   d|z  d|dz   z  z
  |	z  z   d|	dz  z  z   }|	|z
  |z   dz
  |	|z
  |z   dz
  z  |	|z
  dz
  z  }j                   |	z  |||	dz
     z  |||	dz
     z  z
  z  ||	<   ||	   |	 z  z  }t        |      dj                  z  k  rn8|	dkD  r&t        |
      t        |      z  dk  rj                  ||z  }|}
|	dz  }	j	                        |z  }|g|dg||g| |gg g df} g|  g|||| z
  g||| z
  || z
  g| | |z
  dz   | |z
  dz   g| |z
  dz   gdz  f} g| g||| |z
  g| ||z
  ||z
  g|||z
  dz   ||z
  dz   g|  |z   dz   gdz  f}|||fS )	Nr   r   r   rp   皙?r        ?r   )rD   r   r   r   rv   )r   r   r   r   XA2B2rb   s1r$   tprevuu1uu2t1r,  r   r   T3r   r"   s                     r/   r]   z_hyp2f2.<locals>.h  s   2bABBBBA77AaDqD!8BrE>"R%/AaDBAEA:"#B$qt)BE/!B$"6r1u"<RU"B2b5"HB"NPQRTPTUVXZ[\X\U]P]_`O`"`abcdfgcgag"gC#$R4719qtBwqy"91Q3q5"AC#&7719AacF
3q1v:0E#FAaDqTAG^r7S[0!q5SZ#b'%9C%?"%"3"33b "Q   
2AA12w2wr"Q>B"seR2b5M2beBrE2BBr"uQwrRTuUVwCWY[\^Y^_`Y`XabdefbffB"seR2b5M2beBrE2BBr"uQwrRTuUVwCWZ\Y\]_Y_`aYaXbcefgcggBr2:%r1   Tr   rq   r3  c              3   @   K   | ]  }j                  |        y wr   r   r  r.   r   s     r/   r  z_hyp2f2.<locals>.<genexpr>!  s     Es((+E   r  r   )	r   rO   r   r=   rl   r   r   r   r   )r   r    r!   r"   rV   r   a1typer   a2typer   b1typer   b2typer   r   rW   asymp_extrapreccan_use_asymptoticr]   rc   s   `  `                r/   r{   r{     s[   !$LR,2v!$LR,2vq6D771:D88D O %jj88 		 
 +	(O+&> MM!bBr]PQRURZRZPZM[EbBr!_EEJq	A CH3::aVVVV<r2r2>NPQ\U[\\ $$ CHtCHs%   /A/D DD# DD# #	D,c                     |\  \  }}|\  \  }}\  }	}
t              } j                        } j                  }xr |dz  }|j                  d       xr-  j                  |      dkD  xr  j	                  |      d|z  kD  }|rw	 	  xj                  |z  c_         fd} j                  ||||	gdd j                  z        }t         fd	|||	fD              dk(  r j                  |      }|| _        S   j                  d
d|||
f|||	gfi |S #  j                  $ r Y nw xY w	 | _        ;# | _        w xY w)Nr   rq      rA  c                    j                   | |z
  |z
  j                   z   z  }i }j                  |d<   dj                  d| z  |z   |z   dz
  z  | |z
  |z
  z  ||z  z   j                  z
  z  |d<   d||z  j                  | |z
  |z
  z  d| z  |z   |z   dz
  z  z   j                  z
  dz  z  j                  dd| z  dz
  z  |z  |z  d| |z
  |z
  z  d| dz  z  d| z  z   |z   |z   dz
  z  z   dz
  z  z   |d<   d}d}d}d}	 ||vrd|dz  z  d	| z  d|z  z   d|z  z   dz
  |z  z   d| dz  z  z   ||z
  dz  z
  d| z  ||z   dz
  z  z
  j                  z   }	|| z
  |z   |z
  j                   z
  || z
  |z
  |z   j                   z
  z  || z
  |z   |z   j
                  z
  z  }
j                  d|z  z  |	||dz
     z  |
||dz
     z  z
  z  ||<   ||    d
|z  z  z  }j                   |z  j                  d      | z  z  |z  }j                  |z  j                  d      | z  z  |z  }t        |      dj                  z  k  rn>|dkD  r&t        |      t        |      z  dk  rj                  ||z  }||z  }|}|dz  }j                  j                  |z  dj                         z  z         |z  j                  j                  |z  dj                         z  z          |z  z   }d|z  j                   gdd
|g||g| gg g df} g|  g||g|| z
  || z
  g| | |z
  dz   | |z
  dz   gg dz  f}||fS )Nr   r   rp   r   r      i      r@  r  rA        ?)r   rD   mpq_1_4mpq_3_16mpq_1_16mpq_5_2r   r   r   r   r   expjr   r   )r   r   r   rB  rb   rE  s2r$   rF  rG  rH  r%   rI  t2r,  r   r   r   r"   s                    r/   r]   z_hyp1f2.<locals>.hI  s    RU2Xckk%9:AA77AaDckk1R472:a<8"R%(CBrEI#,,VWAaDbeCKKBr$:AbDGBJqL$II#,,VYZZZc1R46l2ob&82b58bQhr"unR&7&:1&<='>>?'@ AAAaD BBAEA:#$QT62b52:ad?1+<a*?#?!BE'#I!#B
$+-.rT2b57^$<>Akk$JC#$R472:ckk#9AbDGBJs{{<R"S!"2bCKK!7#9C#&77AaC=#a!f*S1Q3Z2G#HAaDaDQB$q&>1"uufq[3771:+;;a? UUAX
aR(881<r7S[0!q5SZ#b'%9C%?"%"3"33bb "Q) * !CHHaRL.!89"<366!8AchhrlN#:!;<R?@Aa%!,q$lRHrdB"B"ur"gr"uRUmBrE!GBrE!G,b!A#6Br6Mr1   Tr   rK  c              3   @   K   | ]  }j                  |        y wr   rM  rN  s     r/   r  z_hyp1f2.<locals>.<genexpr>r  s     Bs((+BrO  r   
r   rO   r   r=   r   rl   r   r   r   r   )r   r    r!   r"   rV   r   rP  r   rR  r   rS  r   r   rW   rT  rU  r]   rc   s   `  `              r/   rx   rx   -  sh   MLR!$LR,2vq6D771:D88D mD!GO %jj88 $		$	$#d(	"  4	1O+'"P MM!bBZdQsxxZMXBbBq\BBaGq	A CH 3::aVVV4r2rlAPPP $$ CHtCHs%   A-D D/,D; .D//D; ;	Ec           
          |\  \  }}\  }}|\  \  }	}
\  }}\  }}t              } j                        }xr |dz  } j                  }|j                  d       xr-  j                  |      dkD  xr  j	                  |      d|z  kD  }|r{	 	  xj                  |z  c_         fd} j                  ||||	||gdd j                  z        }t         fd	|||	||fD              d
k(  r j                  |      }|| _        S   j                  dd|||
||f|||	||gfi |S #  j                  $ r Y nw xY w	 | _        ?# | _        w xY w)Nr   rq   rW  rA  c           	      8   j                   | |z   |z
  |z
  |z
  j                   z   z  }| |z   }||z   |z   }| |z  }||z  ||z  z   ||z  z   }	||z  |z  }
i }j                  |d<   d|	|z
  j                  d|z  |z   dz
  z  ||z
  z  z   j                  z
  z  |d<   j                   |d   dz  z  j                  dd|z  dz
  z  |	|z
  z  d|
z  z   dd|dz  z  d	|z  z   d
|z  z   |z   dz
  z  ||z
  z  z   dz
  z  z   |d<   d}d}d}d}	 ||vr,|d|z  z
  dz
  |d|z  z
  d|z  z
  dz
  z  |d|z  z
  d|z  z
  dz
  z  |d|z  z
  d|z  z
  dz
  z  }d|dz
  dz  z  dd|z  |z   z  |dz
  dz  z  z
  dd|dz  z  d|z  |z  z   d|	z  z   |z   dz
  z  |dz
  z  z   d|dz  z  z
  d|z  |dz  z  z
  d|	z  z
  d
|
z  z
  dd|	z  |z   dz
  z  |z  z
  d|z  z   dz
  }d|dz
  dz  z  dd|z  |z   d|z  z
  dz   z  |dz
  z  z   d|d   z  z   }j                  d|z  z  |||dz
     z  |||dz
     z  z
  |||dz
     z  z   z  ||<   ||   j                   d|z        z  }j                   |z  j                  d      | z  z  |z  }j                  |z  j                  d      | z  z  |z  }t        |      dj                  z  k  rn>|dkD  r&t        |      t        |      z  dk  rj                  ||z  }||z  }|}|dz  }j                  j                  |z  dj                         z  z         |z  j                  j                  |z  dj                         z  z          |z  z   }d|z  j                   gdd|g|||g| |gg g df} g|  g||||| z
  g||| z
  || z
  || z
  g| | |z
  dz   | |z
  dz   | |z
  dz   g| |z
  dz   gdz  f} g| g|||| |z
  g| ||z
  ||z
  ||z
  g|||z
  dz   ||z
  dz   ||z
  dz   g|  |z   dz   gdz  f}|||fS )Nr   r   rp   r   rY      r   rZ  r[  r         r   r  ir\  r@  rA  r]  )r   rD   r^  r_  r`  rM   r   r   r   r   r   rb  r   r   )r   r   r   r   r   rB  rC  B3ABRrb   rE  rc  r$   rF  rG  rH  uu3r%   rI  rd  r,  r   r   rJ  r   r"   s                             r/   r]   z_hyp2f3.<locals>.h  s   RU2Xb[^CKK%?@ABBBrB2A2beBrE)A2bAA77AaDa!eckk1R4719&=r"u&EETUAaD;;qtQw.sAbDF|QqS?QTVWXTX?X2b!e8be+ac1B6:;RUC@DDE@F 2G GAaDBBAEA:#$QqS57QqsU1R4Z\":AacE!B$JqL"I!"1Q3qtA#/C#$acAX:1Q3r6
AaC!80C#C !2ad72b57?1Q3#6r#9!#; <ac B$CEG1W$M "2ad
$+-.qS$134Q3$79:AaCF1Ha$HJKB$$OOP$QC $%acAX:aQr!B$q.A1Q3.G#G!A$#NC#&77AaC=#a!f*S1Q3Z2GAaPQcF
2R#SAaDaD399aRa#88"uufq[3771:+;;a? UUAX
aR(881<r7S[0!q5SZ#b'%9C%?"%"3"33bb "Q) * !CHHaRL.!89"<366!8AchhrlN#:!;<R?@Aa%!,q$lRRL2r(B"B"ur"R2&62b5Br"u7MBrE!GBrE!GBrE!G4r"uQwi1EB"ur"R2&62b5Br"u7MBrE!GBrE!GBrE!G4rc"fQhZ1EBr2:%r1   Tr   rK  c              3   @   K   | ]  }j                  |        y wr   rM  rN  s     r/   r  z_hyp2f3.<locals>.<genexpr>  s     Hs((+HrO  rj  rp   rf  )r   r    r!   r"   rV   r   rP  r   rQ  r   rR  r   rS  r   b3typer   r   rT  rW   rU  r]   rc   s   `  `                  r/   r|   r|     s   !$LR,2v/2,LR,2vVq6D771:D mD!GO88D
 %jj88 =		="%((4.3t8";  :	7O+-&\ MM!bBr"%5DSTUXU]U]S]M^HbBr"Q5GHHAMq	A CH3::aVVVVVDr2rSUWYFZ\]haghh $$ CHtCHs%   A1D- -D?<E >D??E 	Ec                 D    |\  \  }}\  }}	 |j                         }	|	j                  d j                        |	d<     j                  dd||f||gfi |	S #  j                  $ r |j                  d      r Y nw xY w fd}
  j
                  |
|d|z   |z
  gfi |S )Nr3  r   r   rq   c                     j                  |      }dz  }j                  ||gdd| gg | |z
  dz   |g| g|g|f}j                   ||gddd| z   |z
  gg | d|z
  g| |z
  dz   gd|z
  g|f}||fS )Nr   r   r   )sinpir   )r`   ra   r%   r   r   r   r   r"   s         r/   r]   z_hyp2f0.<locals>.h  s    IIaLTvvamQr!HR1Qq	1#qc"=wqna1Q3q5\"a!Wac!eWacU2F2vr1   r   )copyr=   r   r   r   rl   )r   r    r!   r"   rV   r`   r   ra   r   kwargsbr]   s   `  `       r/   r}   r}     s     JQ
E++-%kk*chh?
szz!Qu!uaC7CC ::n% 3==Q!AJ1&11s   A	A !A=<A=Nc                 R    |\  }}|\  }	}
t        |      t        |      z   t        |	      t        |
      z   ||z   }|	|
z   }|D cg c]  } j                  |       }}|D cg c]  } j                  |       }} j                        |.k  rd}kD  rd}k(  rz   k(  rt              dkD  rd}nd}|j                  d      rt	        d|       |dk(  r fd}n fd}  j
                  |||z   fi |S c c}w c c}w )Nr   r   r3   zMeijer G m,n,p,q,series =c            
         | d  }| d  }g }t              D ]8  }g}||   z  g}t              D cg c]  }||k7  s	||   ||   z
   }}|t              D cg c]  }d||   z
  ||   z    c}z  }t              D cg c]  }||   ||   z
   }	}|	t              D cg c]  }d||   z
  ||   z    c}z  }	t              D cg c]  }d||   z
  ||   z    }
}t              D cg c]  }||k7  s	d||   z
  ||   z    }}j                   z
  z
  z  j                  z  z  z  }|j                  ||||	|
||f       ; |S c c}w c c}w c c}w c c}w c c}w c c}w r   )rE   rD   r   r  r`   ra   r   r$   basesexptsr   gngdhnhdhzr   r   r+   r   r   rr"   s                r/   r]   zmeijerg.<locals>.h  s   RaAQRAE1X 
A1a).q<AQ!Vad1Q4i<<E!H5qq1vad{55).q4Aad1Q4i44E!AJ7qq1vad{77+084aa!fQqTk44+08>aqAva!fQqTk>>wwh!A#a%(1swwqy>9eUBBB?@
A L =5474>s/   
EEEE!)E&E+4
E0?E0c            
      ,   | d  }| d  }g }t              D ]Y  }g}dk(  r
||   dz
  g}n||   dz
  j                        z  g}t              D cg c]  }||k7  s	||   ||   z
   }}|t              D cg c]  }d||   z
  ||   z    c}z  }t              D cg c]  }||   ||   z
   }	}|	t              D cg c]  }d||   z
  ||   z    c}z  }	t              D cg c]  }d||   z
  ||   z    }
}t              D cg c]  }||k7  s	d||   z   ||   z
   }}j                   z
  z
  z  j                  z  z  z  }|j                  ||||	|
||f       \ |S c c}w c c}w c c}w c c}w c c}w c c}w r   )rE   rr   rD   r   rz  s                r/   r]   zmeijerg.<locals>.h  s   RaAQRAE1X A6qT!VHEd1fckk!n45E).q<AQ!Vad1Q4i<<E!H5qq1vad{55).q4Aad1Q4i44E!AJ7qq1vad{77+084aa!fQqTk44+08>aqAva!fQqTk>>wwh!A#a%(1swwqy>9eUBBB?@A L =5474>s0   
E8"E8?E='F
F1F
F F)rF   rr   r   r=   rA   rl   )r   r    r!   r"   r  seriesrV   anapbmbqr`   ra   _r]   r   r+   r   r   s   `  ``          @@@@r/   meijergr    s8   FBFBBA	CGABA	CGA
2A
2A!"#AQ#A#!"#AQ#A#AA~q51&q51&6saxCFQJzz))1Qq6:{	 	"	 	& 3==AaC*6**e 	$#s   D0D$c           	         t        |      t        |      kD  r||}}||}}d }| j                  |      rn| j                  |      rn}| j                  |      r||||f\  }}}}n` ||      sX||z
  |dz
  z  }	 ||	      st        d      d|z
  | z  d|z
  ||z
  |z
  z  z   | j                  ||z
  |||z
  |z
  ||	|fi |z  S  | j                  |g|g|gdd|gi||fi |S )Nc                     t        |       dk  S )NgGz?)r   )r*   s    r/   r-   zappellf1.<locals>.ok+  s    1v}r1   r   z%Analytic continuation not implementedm+nr   r+   r  )r   r   r?   appellf1hyper2d)
r   r`   r   r   rb   r*   yrV   r-   u1s
             r/   r  r  $  s    1vA!1RB {{1~	R	R!R|1b"
 !uA#!Bb6 !HIIaCB3<1!B/QqSAbDGAb<V<= =3;;qcrdt4uaSk1QQ&QQr1   c                 F     | j                   |g|g|gd|g|gd||fi |S )Nr  r   r+   r  )	r   r`   r   r   c1c2r*   r  rV   s	            r/   appellf2r  A  s>     3;;qcrdt4TrdQq,$*, ,r1   c                 &   | j                  |      xs | j                  |      }	| j                  |      xs | j                  |      }
|	s(|
st        |      t        |      kD  r||}}||||f\  }}}} | j                  ||g||gdd|gi||fi |S )Nr  r  )r   r   r  )r   r   r   r   r   rb   r*   r  rV   outer_polynomialinner_polynomials              r/   appellf3r  G  s    {{29#++b/{{29#++b/s1vAaqAR2+KBr"R3;;RGB05!+aKFKKr1   c                 @     | j                   d||gi|g|gd||fi |S )Nr  r  r  )r   r`   ra   r  r  r*   r  rV   s           r/   appellf4r  Q  s1     3;;qe}B4RD&9!AGGGr1   c                      j                  |      } j                  |      } fd}t        |      }t        |      } ||d      }	 ||d      }
 ||d      } ||d      } ||d      } ||d      } ||d      } ||d	      } ||d      } ||d      } ||d      }|rt        d
|j                         d   z        |rt        d
|j                         d   z        d} j                  } j                  d      }d} j                  }|j                  dd|z        }	  xj                  dz  c_         j                  }	 d}d}t        |
      }t        |      }|	D cg c]  }||z   	 }}|D cg c]  }||z   	 } }|D ])  }||z   }|j                  |       |j                  |       + |D ])  }||z   }|j                  |       | j                  |       + |D ]-  }|j                  ||z
         | j                  ||z
  dz
         / |D ];  }|dz  }|d|z  z  }|j                  d|z
  |z
         |j                  | |z
         = |D ]<  }|j                  |d|z  z          |j                  |d|z  z   d|z   d|z  z   z         > |D ]D  }|dz  }|j                  d|z
  d|z  z
         |j                  |d|z  z   d|z   d|z  z   z         F |D ]O  }|dz  }|j                  d||z
  z         |j                  d||z
  dz   z         | j                  ||z
  dz
         Q   j                  ||||z  fd j                  i|}!||!z  |z  }"t        |"      |k  r|dz  }nd}|dk\  s|snB||"z  }|D ]  }||z  }	 | D ]  }||z  }	 |dz  }||z  |z  }||kD  r j                  d      v	 | _        |S c c}w c c}w # | _        w xY w)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                     | j                  |g       }	 t        |      }|D cg c]  }j                  |       c}S # t        $ r |g}Y -w xY wc c}w r   )popr  	TypeErrorrr   )dctkeyr  r:  r   s       r/   parsezhyper2d.<locals>.parse  sW    wwsB	:D -11SC 11  	6D	1s   ? AAAr   r+   r  zm-nzn-mz2m+nz2m-nz2n-mzunsupported key: %rr   r3  r;   r7   r   r   r   r   r]  r5   rp   zmaxterms exceeded in hyper2d)rr   dictr?   keysrD   r   r   r=   r   r  r   rI   r   r   )#r   r`   ra   r*   r  rV   r  r    r!   a_ma_n	a_m_add_n	a_m_sub_n	a_n_sub_m
a_2m_add_n
a_2m_sub_n
a_2n_sub_mb_mb_n	b_m_add_nr<  outerr   ok_countr   r3  r   
inner_sign
outer_signinner_ainner_bouter_aouter_binnerr   s#   `                                  r/   r  r  V  sj   P 	AAAA2 q'C
q'C
3-C
3-CaIaIaIq&!Jq&!Jq&!J
3-C
3-CaI
01668A;>?
?
01668A;>?
?	AGGE
AH88Dzz*bg.H>BwwhJJ3iG3iG$'(qqs(G($'(qqs(G( "aCq!q!"
  "aCq!q!"
  &qs#qs1u%&  %r"
rQi'
qs1u%r!t$	%   2q1u%!A#!AaC012   2r"
qs1Q3w'!A#!AaC012
   &a
sAaCy)sAaCE{+qs1u%	&
 CIIgw
1 --%+-E5=:-D4y3A1}EIA(eqje((eqje(FAAIME8|''(FGGs d  2Io )(j s,   'AO (O4O :OH:O 
O 	Oc                    	 | j                        ||z   }t        |      	t        |      }	|fdk(  s	|fdk(  r| j                  z  S 	|z
  dz  	fd} | j                  ||fi |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                     t        | d        }t        | d        }|D cg c]  }d|z
  	 }}|D cg c]  }d|z
  	 }}dz  z  g|D cg c]  }d|z
  	 c}z   |D cg c]  }d|z
  	 c}z   }dgdgt        |      z  z   dgt        |      z  z   }g g g g |dgz   |f}	||g g |dgz   |dz  z  f}
|	|
fS c c}w c c}w c c}w c c}w )Nr   r   r   )r  rF   )r   r    r!   ra   aa_sr`   bb_srprcr   r   negr   r"   s              r/   r]   zbihyper.<locals>.h{  s    3r7m3qr7m !!!! !!!!Ci!m_S1!11#4FQQqS4FFTQCCL B4C=0RSA3YQ.RTQCZSy1}<2v "!14Fs   B:B?C"C	)rr   rF   r<   rl   )
r   r    r!   r"   rV   r   r   r]   r  r   s
      `    @@r/   bihyperr  D  s}    ` 	AA
)CCACA	1v1a&E/xx!|Q3!)C	 3==C*6**r1   )r   N)#libmp.backendr   	functionsr   r   r0   r@   rl   rI   r   r   r   r   r   r   r   r   ry   ru   rw   r   rz   r~   r   r{   rx   r|   r}   r  r  r  r  r  r  r  r   r1   r/   <module>r     sl   " +-2^ $&D E EN (8 (8T ( ( ) ) . . + + 1 1 4 4 * * 4 4   !8 !8F ! !F4l M M^ G/ G/R ; ;| @] @]H MQ MQb Oi Oib 2 2( ;+ ;+z R R8 , ,
 L L H H d dL @+ @+r1   