
    gr                        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"dS )%   )xrange   )defundefun_wrappedc                    dx}}d}g }t          |          D ]U\  }}	|	\  }
}}}}}}d}t          |
          D ]4\  }}|s-|                     ||                   dk    r||         rdx}}d}5g d}t          |||g          D ]\  }}t          |          D ]\  }}|                     |          \  }}|dk    r$|| j        k    rMd}|dk    r1|D ].}|                     |          r|t          |          k    rd} n/|rk||xx         dz  cc<   ||dk     r|| z  }d}|r4|d         |d         |d         z   k    r|s|                    |           Bt          |          rdx}}W||||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                                [/var/www/html/ai-engine/env/lib/python3.11/site-packages/mpmath/functions/hypergeometric.py_check_need_perturbr0      s   GiIG%e,, (' ('
D15.S'63Q(-% cNN 	9 	9DAq 966#a&>>Q&&3q6&*..Gi481YY
 )7FC*@ A A 	% 	%J!$ % %1((++1q55== B!Q!$ & &A"{{1~~ &!s1vv++%) % ! z***a/**** VV!OI $I-%.  	':a=:a=:a=3P#P#P1 $QNN:&&&&__ 	'"&&Gi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           
      ~   +  j         } j        } j        } j        }|d d          }	|                    dd          }
|                    d                     |                    }||d<   |                    d          }|                    d          }d }d}	 	  xj         dz  c_          j         |k    rt          t          | j         fz             j         }|	d d          } || }|
rBt                       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        |           }|dz   |z   dz    _         t          t          |                    D ]}||xx         |z  cc<   |||dz   z  z  }|r || }|r+fdt!          |          D             }|s j        | _         S g }t!          |          D ]\  }}|\  }}}}}} }!|
rt                       t          d|dz   t          |          t          |          t          |           fz             t          d                     |                               |                     t          d                     |                               |                     t          d                     |                               |                      t          d                     |!                                            j        || |!fi |g fd|D             z    fd|D             z    fdt)          ||          D             z             }"|
rt          d|"           |                    |"           t          |          dk    r|s
|d         }n j
        r                     |          }n                     |          } fd|D             }#t/          |#          }$                     |          }%|$|%z
  }&|
r8t                       t          d|&d           t          d j         |z
  d           |& j         |z
  k     }'|d}(n|$ j         z
  | k     }(|d})n|$|k    })|'r|r                     |&          rn|'r_|	|dz  }|}d                     ||z
                                 |          |z
  k    rnu|(r j        }nk|)r j        }nad|v rn\|dz  }|}nRt7          t/          |&|dz            t/          ||                    }* xj         |*z  c_         |
rt          d           
| _         n# | _         w xY w|
 S )NverboseFmaxpreczeroprecinfprecr   r   
   zENTERING hypercomb main loopzprec =hextrahmagg333333?c                 "    g | ]\  }}|v	|S  r;   ).0r)   r   r   s      r/   
<listcomp>zhypercomb.<locals>.<listcomp>k   s'    TTT)1d1GCSCSCSCSCSr1   z  Evaluating term %i/%i : %iF%iz
    powersz	    gammaz	    hyperz    zc                 :    g | ]}                     |          S r;   )gammar<   ar   s     r/   r=   zhypercomb.<locals>.<listcomp>~   s#    333aSYYq\\333r1   c                 :    g | ]}                     |          S r;   )rgammar<   br   s     r/   r=   zhypercomb.<locals>.<listcomp>   s#    333qSZZ]]333r1   c                 B    g | ]\  }}                     ||          S r;   )power)r<   r%   cr   s      r/   r=   zhypercomb.<locals>.<listcomp>   s)    >>>1SYYq^^>>>r1   z
    Value:c                 :    g | ]}                     |          S r;   )mag)r<   r*   r   s     r/   r=   zhypercomb.<locals>.<listcomp>   s#    CCCaswwqzzCCCr1   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zipr   fsummaxrJ   isnaninfmin),r   functionparamsr   kwargsorigsumvaluedistr   orig_paramsr3   r4   r5   r6   perturbed_reference_valuer8   orig2r   r   r   r   r9   hr$   evaluated_termsr   	term_datar   r   r   r   r    r!   r"   vterm_magnitudesmax_magnitudesum_magnitudecancellationprecision_okzero_okinf_ok	incrementr   s,   `                                          @r/   	hypercombrv   :   s   8DxHD8D)KjjE**GjjC$>$>t$D$DEEGF9zz*%%Hjj##G $Fwt	HHNHHx'!! 42B!BCCCHE ^FHf%E (4555h)))h'''#C6IJJ 3GY	7HH	!HH !V##!&>DD) .sx|,,DD"9v-DIIcgu-- 2:,r1s6{{++ ! !A1IIINIII
 AaCLAA * &)" UTTTTy/?/?TTT  xd c !O)25)9)9 * *%
I9B6S'63Q 0GGG;#As5zz3s88SXXFG H H H,sxx}}EEE+sxx'8'8#((6:J:JKKK+sxx}}chhsmmDDD'388A;;///
 IIysyc1????@3333733343333F3334 ?>>>S>>>? @ @  +,***&&q))))5zzQ*1-# 88O44xx00HCCCC?CCCO00MGGH--M(=8L I'v>>>.4HHH'#(T/9L'#(2hY>&0 W <1H1H  ,4bLF08-WWX(AABB))D01 1 
9"xH 9"wHv%%aKF08--  L$' : :C	$<O<OPP	I% HFGGGit	l 49s   FV0 'NV0 0	V9c                                           |          }t          |          }t          |          } fd|D             } fd|D             }|                    dd          r|                    dd          }d}||k     rm|rk||         }	|	|v rR|s                     |	d                   s5|                    |	           |                    |	           |dz  }|dz  }n|dz  }||k     r|k|dk    r2|dk    r  j        ||fi |S |dk    r                     |          S n|dk    rU|dk    r  j        |||fi |S |d	k    r  j        |||fi |S |dk    r" 	                    |d         d         |          S n|d	k    rY|dk    r  j
        |||fi |S |d	k    r  j        |||fi |S |d
k    r  j        |||fi |S |dk    r  j        |||fi |S nK||dz   k    r  j        |||||fi |S ||dz   k    r'|                    d          s  j        |||||fi |S t!          ||z    \  }
}  j        ||||
|fi |S )z0
    Hypergeometric function, general case.
    c                 :    g | ]}                     |          S r;   _convert_paramr@   s     r/   r=   zhyper.<locals>.<listcomp>   '    
.
.
.Q3a  
.
.
.r1   c                 :    g | ]}                     |          S r;   ry   rD   s     r/   r=   zhyper.<locals>.<listcomp>   r{   r1   	eliminateTeliminate_allFr   r   r      force_series)convertrW   rN   r   remove_hyp0f1exp_hyp1f1_hyp1f2_hyp1f0_hyp2f1_hyp2f2_hyp2f3_hyp2f0_hypq1fq
_hyp_borelr[   hypsum)r   r    r!   r"   rc   pqelim_nonpositiver)   rE   coeffstypess   `           r/   rZ   rZ      s   
 	AACACA
.
.
.
.#
.
.
.C
.
.
.
.#
.
.
.Czz+t$$ !::ou==!eeeAACxx-xS[[15F5Fx

1

1QQQ !eee 	Avv!VVKCKQ99&999!VVCGGAJJ&V	
a!VVKCKS!>>v>>>!VVKCKS!>>v>>>!VVCKKAq	1555V	
a!VVKCKS!>>v>>>!VVKCKS!>>v>>>!VVKCKS!>>v>>>!VVKCKS!>>v>>>V	
acs|Aq#sA88888	
QqSN33s~aCa::6:::#c'OMFE3:aE6177777r1   c                 $     | j         g |g|fi |S NrZ   )r   rE   r"   rc   s       r/   hyp0f1r      s"    39RA'''''r1   c                 &     | j         |g|g|fi |S r   r   r   rA   rE   r"   rc   s        r/   hyp1f1r      s$    39aS!Q(((((r1   c                 (     | j         |g||g|fi |S r   r   )r   a1b1b2r"   rc   s         r/   hyp1f2r      s&    39bT2b'!--f---r1   c                 (     | j         ||g|g|fi |S r   r   )r   rA   rE   rH   r"   rc   s         r/   hyp2f1r      s&    39aUA3q**6***r1   c                 *     | j         ||g||g|fi |S r   r   )r   r   a2r   r   r"   rc   s          r/   hyp2f2r      s(    39bWbWQ00000r1   c                 ,     | j         ||g|||g|fi |S r   r   )r   r   r   r   r   b3r"   rc   s           r/   hyp2f3r     s*    39bWbBZ33F333r1   c                 &     | j         ||gg |fi |S r   r   r   s        r/   hyp2f0r     s$    39aU2a))&)))r1   c                 ,     | j         |||g||g|fi |S r   r   )r   r   r   a3r   r   r"   rc   s           r/   hyp3f2r   	  s*    39bBZB33F333r1   c                     d|z
  | z  S Nr   r;   )r   rA   r"   s      r/   r   r     s    aCaR=r1   c                 \   	 |\  \  	}r                                }nd}|dk    r|                    d          s	  j        }	  xj        d|dz  z   z  c_        	 fd}                     |g d          }                     	          d                      j                  z  z  |z  }| _        n# | _        w xY w                     	          r*                               r                     |          }|
 S #  j	        $ r Y nw xY w  j
        dd	|f	gfi |S )
Nr      r      r   c                                           	           } j        | z  }dd|z  z  }j        z
  }                    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_2r   mpq_3_2)
r%   jwr.   rH   ET1T2rE   r   r"   s
          r/   rj   z_hyp0f1.<locals>.h!  s    !AqB1R4AaA"A3q'Ab62rAckM3;q=3QSUXYWYZBa&1Q%R!CK-Q1OQSUVWBr6Mr1   Tr   r   )rJ   rN   r   rv   r?   r   pi_is_real_type_reNoConvergencer   )
r   r!   r"   rc   btypemagzrd   rj   rm   rE   s
   ` `      @r/   r   r     s|   KJQ wwqzzqyyN33y	
 8D BqL(" " " " " " " MM!RdM;;IIaLL!CHHSV$4$4"45a74  ## (9(9!(<(< GGAJJ2I  	 	 	D	3:aUHqc177777s,   D
 	A+B< 4D
 <	CAD
 

DDc                     |\  \  }}|\  \  }}s
 j         z   S                                }	|	dk    r                     |          r                     |          dk    s`                               ra                     |                               |          cxk    r                                cxk    rdk    r
n n j        S  j        z  S 	 	  xj        |	z  c_         	                              dk      fd}
 
                    |
||gd          }                     |          r?                     |          r*                               r                     |          }|
  xj        |	z  c_        S #  j        $ r Y nw xY w	  xj        |	z  c_        n#  xj        |	z  c_        w xY w  j        dd||f||gfi |}|S )N   r   r   c                 ,   r+                                         | d                    }n                     |           }dz  }|gd|  g|g|| z
  g| d| z   |z
  gg | f}                              gd| |z
  g|g| g|| z
  d| z
  gg |f}||fS )NTexactr   )expjpifnegr   )	rA   rE   r   rzr   r   r   sectorr"   s	         r/   rj   z_hyp1f1.<locals>.hE  s     *JJsxxx'>'>??JJqMM1BQ%!QB!qsea1QZbSIB771::a.1QqS'A3ac1Q3ZRPBr6Mr1   Tr   )rU   rJ   isintr   isinfsignr_   nanr   _imrv   r   r   r   r   )r   r    r!   r"   rc   rA   atyperE   r   r   rj   rm   r   s   `  `        @r/   r   r   5  s0   KJQKJQ wqy771::Dqyy#))A,,y366!99>>99Q<< 	xx{{chhqkk====SXXa[[====A=====w7Q;	D a" " " " " " " MM!aUM>>$$Q'' #C,=,=a,@,@ #SEVEVWXEYEY #

Ar HHHHH $   HHHHHCHHHHHHHH
1a%!Q==f==AHs%   !B F 
FF4 FF4 4Gc                    ||||f\  }}}}	| j         }
|                    dd|
z            }d}	 |
|z   | _         |                     |	          }|                     d          }|                     d          }|                     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n||$z  }||k    r| j
        |#S )Nr4   d   r7   r   r   r   r   )r   rN   r   mpfr   rX   nprintrJ   r   r]   r   )%r   rA   rE   rH   r"   rc   _a_b_c_zrd   r4   extrar,   efr$   abzchc1hnzgabgcbaz2tolrX   r   rJ   maxmagkchkakbzd1e1ftf1rq   s%                                        r/   _hyp2f1_gosperr   Y  s\    Q1*KBr"R8DjjCH--GE,(%< KKOOGGAJJGGAJJGGAJJ c!e_sck!qSbDc!ec!eqSxi"nxg	B$CqS1Q3KMQ!WS[!C%%89E1S5!)A+&B#qsAg&BAs1uQrTz!|$S()1S584BQBR))Fs2a4yy3"b!qAFA	 B'%\!Ew''Y,(Z Ir1   c                     |\  \  }}\  }}|\  \  }	dk    r                      |z
  |z
            dk    }
                     |          r|dk    p                     |          o|dk    }                               oPdk    oJ                     |          r|cxk    odk    nc p$                     |          o|cxk    odk    nc  }|
s|r*|s(                     |z
  |z
  g|z
  |z
  gd          S                      ||d j        dz  z
             j        z  S ss|dk    s|dk    rdz   S  j        S                                rWdk    rQ                     |          r|cxk    rdk    s'n                      |          r|cxk    rdk    rn nn j        S t                    }|dk    sB                     |          r|dk    r|dk    s!                     |          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 |}nt          dz
            dk    rfd}  j
        |||gfi |}nUt          dz
  z            dk    r+                     ||z
  dz
  z            dz
  |z  z  }nt           ||fi |}| _	        n# | _	        w xY w|
 S )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)
rA   rE   tabr   r   r   rH   r   r"   s
          r/   rj   z_hyp2f1.<locals>.h  s    IaKac!2rdQB4!RC!AaC1QqS'39R<.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;   )
rA   rE   r   cacbr   r   r   rH   r"   s
           r/   rj   z_hyp2f1.<locals>.h  s    aCE!2!A#RAaCraURGaUQqSE2=TA31Q3q5	Aa52b'AaC5"D2vr1   )r   r   	gammaprodr   epsr_   r   absr   r   rv   r   )r   r    r!   r"   rc   rA   r   rE   r   ctype
convergentfinitezerodivabszrd   rj   rm   rH   s   `  `             @r/   r   r     s    JQ
EKJQAvvVVAaCE]]Q&
))A,,)16Gsyy||/FQ))A,, O16 Oiill*qA{{{{{{{{M		!0La1/O  	H& 	H' 	H==!QqSUac1Q3Z$=GGG zz!Aa#'!),,sw66    	Q!q&&Q3Jw yy|| QIIaLL 	Q![[[[q[[[[IIaLL )![[[[q[[[[[ 7Nq66D s{{syy||{Q1::yy|| 4>()Q1::sz!Qu 51ay!NNvNNN8DB 3;;      
 a!A11&11AA 1XX     
 a!A11&11AA AaC\\T!!

1ac1a1g..!A#9AA s1Qq44V44A 42Is   0B2K* *	K3c           
           t           \  }t           \  }t                    t                    t                    }	d}
D ]!}                     |          r
|dk    rd}
 n"|	dk     s|
r2	   j        ||z   z   fi |S #  j        $ r |	dk    s|
r Y nw xY wdk    rP                     t                    t                    z
            }|dk    r  j        dfi | j	        z  S fdk    rt          dz
            dk     r\  \  z   z
  } 
                    z
  z
  gz
  z
  d|g          }d|if fd		 	                       d j	        g|                    d
          |                    dd                    }| 
                    gg          z  S #  j        $ r Y nw xY w|	dk     r                               dk    rd j        if  fd	 |                    dd          }	                       d j	        g|                    d
          |                    dd          |                    dd                    S #  j        $ r d|vr Y nw xY w|                    d
          rt!          d           	  fd fd} j        dz  } j        }	 d j        z  } xj        dz  c_        t)          d          D ]}                      fdt)          |          D                       }                      | j	        g| ||          |                    d
          dd          \  }}||k     r||z   } n9|dz  } xj         j        dz  z  c_        |dk    r                     d          | _        n# | _        w xY w|
 S  fd}  j        |z   fi |S ) z&
    Evaluates 3F2, 4F3, 5F4, ...
    Fr   Tr   g?g?)r   r   g?c                     z   z
  | z   }| |v r	||          }n5|| dz
           }|| z   z
  dz
  | z   z
  dz
  z  z  }|| |dz
  z  z  }||| <   |	                     |
          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          |           }|| k    rl
                    |           z  
                    |           z  }D ]}|
                    ||           z  }	D ]}|
                    ||           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   rA   rE   mr   r    r!   r   r   r   r   r"   s           r/   r   z_hypq1fq.<locals>.term'  s   BABww$swwr{{2//Aa366!B<</aa//Aa366!B<</aaF{{ay QqS		A!AAYY//c!fQhAYY//c!fQhFAFAF1IHr1   
sum_methodzr+s+er    )r3   r  methodz$Attempting Euler-Maclaurin summationc              3      K   dgz   }t           fdD                       t           fd|D                       z
                                 z  z   V  d	 t           fdD                       t           fd|D                       z
  }dk    r|                              z  }|V  dz  c)Nr   c              3   H   K   | ]}                     |z             V  d S r   loggamma)r<   rA   r   k0s     r/   	<genexpr>z._hypq1fq.<locals>.log_diffs.<locals>.<genexpr>i  s3      66Qcll1R4((666666r1   c              3   H   K   | ]}                     |z             V  d S r   r  )r<   rE   r   r  s     r/   r  z._hypq1fq.<locals>.log_diffs.<locals>.<genexpr>j  s3      331CLL2&&333333r1   r   c              3   J   K   | ]}                     |z             V  d S r   psi)r<   rA   r   r)   r  s     r/   r  z._hypq1fq.<locals>.log_diffs.<locals>.<genexpr>m  s3      55A!B$555555r1   c              3   J   K   | ]}                     |z             V  d S r   r  )r<   rE   r   r)   r  s     r/   r  z._hypq1fq.<locals>.log_diffs.<locals>.<genexpr>n  s3      44A!B$444444r1   )r   log)r  r   rm   r)   r    r!   r   r"   s   `  @r/   	log_diffsz_hypq1fq.<locals>.log_diffsg  s     sB66666#666663333333333468mD D D DA5555555555544444444444566OAQr1   c              3      K                        d D             d D                       }                     |                     D ]}||z  }|V  d S )Nc                     g | ]}|S r;   r;   r<   rE   s     r/   r=   z1_hypq1fq.<locals>.hyper_diffs.<locals>.<listcomp>u  s    ...Qq...r1   c                     g | ]}|S r;   r;   r<   rA   s     r/   r=   z1_hypq1fq.<locals>.hyper_diffs.<locals>.<listcomp>u  s    0@0@0@q0@0@0@r1   )r   	diffs_exp)r  Cr,   rm   r    r!   r   r  s       r/   hyper_diffsz_hypq1fq.<locals>.hyper_diffst  sy      ..#...0@0@C0@0@0@AAA]]99R==11  E r1   i   2   rL      c              3   .   K   | ]} |          V  d S r   r;   )r<   r$   r   s     r/   r  z_hypq1fq.<locals>.<genexpr>  s+      ??AQ??????r1   )r   adiffsr3   error_fast_abortr   r   z*Euler-Maclaurin summation did not convergec            
      >  
 t          | d                    
t          | d                    g }j        z  }                    d          }t          dz             D ]
         |g} g}gz   
fdt          dz             D             z   }
fdt                    D             z   }gfdt                    D             z   }
fdt          dz             D             }	|                    ||||||	|f           |S )NTr   r   c                 2    g | ]}|k    |         z
  S r;   r;   r<   r   r    akr$   s     r/   r=   z'_hypq1fq.<locals>.h.<locals>.<listcomp>  s&    GGGQQs1vbyr1   c                 &    g | ]}|         z
  S r;   r;   r<   r   r*  r!   s     r/   r=   z'_hypq1fq.<locals>.h.<locals>.<listcomp>  s!    444aAr	444r1   c                 ,    g | ]}|         z
  d z   S r   r;   r,  s     r/   r=   z'_hypq1fq.<locals>.h.<locals>.<listcomp>  s%    777CF1777r1   c                 8    g | ]}|k    d |         z
  z   S r.  r;   r)  s     r/   r=   z'_hypq1fq.<locals>.h.<locals>.<listcomp>  s*    <<<!Q!VV!CF(2+VVVr1   )listrU   r   rV   r   )argsTsrecznegzr  CpGnGdFnFdr    r*  r!   r$   r   r   r   r"   s             @@@@r/   rj   z_hypq1fq.<locals>.h  s]   48nn48nnwqyxxx&&qs 	5 	5AQBA#BtGGGGGG%!**GGGGB444445884444B77777eAhh7777B<<<<<<uQqSzz<<<BIIq"b"b"d34444	r1   )r[   r0  r   r   r   r   r   r   rZ   r_   r   nsumrN   r   rU   replacerR   r   r   dpsr   r\   sumemrv   )!r   r   r   r    r!   r"   rc   a_typesb_typesr   ispolyrA   Sr.   initialr	  r   r   r   truncr)   headtailerrrm   rj   r   r   r   r   r   r  r   s!   ``````                    @@@@@@@r/   r   r     s   
 9LC9LC
s))C
s))Cq66DF  99Q<< 	AFFFEaxx6x	3:aGGOSWaJJ6JJJ  	 	 	czzVz z	$ 	Avv FF3s88CHH$%%6639S#s55f55??	!u~~#ac((T//2b2rE"H--Br"uR 3RU2b514EFFg; 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		-	#'{FJJy4I4Izz(D11  3 3As}}bWbBZ8888  	 	 	D	 czzcggajjAooswK 	 	 	 	 	 	 	 	 	 	 	 	$ ZZg66
	88D1SW+vzz)7L7Lzz(D11!))#b11  3 3 3   	 	 	*$$D	
 ::i   	:8999	>	 	 	 	 	 	 	 		 	 	 	 	 	 	 	 gnx	LEHHNHHAYY F Fxx?????????IIdUCG,<#&;u--"JJy11 $	 & & &	c
 99tAE
 CHaK'66++DF F F  CHHtCHOOOOr	
         3=CG..v...sE   B B0/B04A$G 
G&%G&5AJ J#"J#-C!O 	Oc                 l    rt           \  }t                    ng dc}rt           \  }t                    ng dc}|                    d j                  |d<   	   j        ||||z   z   fi |S #  j        $ r Y nw xY w j        }		 |                    d j        dz            }
 xj        dz  c_        d j        iffd	 j        }t          d j                  D ]0} |          }||z  }t          |          |
k    r|c |	 _        S 1	 |	 _        n# |	 _        w xY w||d	z   k    r|                    d
          }|s 
                              dk     r_t          dt                              z  } 
                              dk    rddd|z  d|z   j        g}nddd|z  d|z   j        g}n	d j        g}|                    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   rA   rE   r    r!   r   r"   s	        r/   r   z_hyp_borel.<locals>.term  s    EzzQxQqS		A((!1Q3.!!((!1Q3.!!FAFAE!HHr1   r   r   contourg      ?y               @y       @       @r   y              y       @       quad_kwargsc                 n                         |                                dgz   | z            z  S r   )r   rZ   )r   r    r!   r   r"   s    r/   r   z_hyp_borel.<locals>.g  s4    77A2;;syyc1#gqs;;;;r1   r%  Tr   )r[   r0  rN   r   r   r   r   rU   r   r   argr]   r_   quad)r   r   r   r    r!   r"   rc   r>  r?  r   r   sr$   r   rL  r.   rM  r   IrF  r   s   `  ```              @r/   r   r     s   
 CyW3ii2W
 CyW3ii2WJ99F:sz!QS!FFvFFF   8Djjcgai00BSW+ 		 		 		 		 		 		 		 		 		 G38$$ 	 	AQAFA1vv}} 	 4AaCxx**Y'' 	'wwqzzD  As1vv&771::?? "tQh!SW=GG #qy!A#sw?GG
 cg,jj33	< 	< 	< 	< 	< 	< 	< 	<!W@@D@K@@3#a&&."""H

s%   +B 
BBBD0 &D0 0	D9c           	      j    |\  \  }}\  }}|\  \  }	}
\  }}t                    }                               } j        }|}|                    d           o                     |          dk    }|r	 	  xj        |z  c_         fd}                     ||||	|gdd j        z            }t           fd|||	|fD                       dk    r                     |          }|| _        S #  j        $ r Y nw xY w	 | _        n# | _        w xY w  j        d	d	|||
|f|||	|gfi |S )
Nr   r   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n>|	dk    r*t          |
          t          |          z  dk     rj        ||z  }|}
|	dz  }	                              |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   r   皙?r"        ?r   )rU   r   r   r   r   )r   r   r   r   XA2B2rH   s1r$   tprevuu1uu2t1rA  r   r   T3r   r"   s                     r/   rj   z_hyp2f2.<locals>.h  s   2bABBBBA7AaD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#&719AacF
3q1v:0E#FAaDqTAG^r77S[00!q55SZZ#b''%9C%?%?"%"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   r   rH  c              3   B   K   | ]}                     |          V  d S r   r   r<   r.   r   s     r/   r  z_hyp2f2.<locals>.<genexpr>!  s1      EEs((++EEEEEEr1   r"  r   )	r   rJ   r   rN   rv   r   r   r   r   )r   r    r!   r"   rc   r   a1typer   a2typer   b1typer   b2typer   r   rd   asymp_extrapreccan_use_asymptoticrj   rm   s   `  `                r/   r   r     s   !$LR,2v!$LR,2vq66D771::D8D O %jj888 		 
  -+	(O+& & & & & &> MM!bBr]PQRURZPZM[[EEEEbBr!_EEEEEJJq		A CHH $   CHHtCHOOOO3:aVVVV<r2r2>NPQ\\U[\\\s%   9A5C6 6
D D DD 	Dc                     |\  \  }}|\  \  }}\  }	}
t                    }                               } j        }o|dz  }|                    d           o4                     |          dk    o                     |          d|z  k    }|r	 	  xj        |z  c_         fd}                     ||||	gdd j        z            }t           fd	|||	fD                       dk    r                     |          }|| _        S #  j        $ r Y nw xY w	 | _        n# | _        w xY w  j	        d
d|||
f|||	gfi |S )Nr   r      rV  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                      d          | z  z  |z  }j        |z                      d          | z  z  |z  }t          |          dj	        z  k     rnC|dk    r*t          |          t          |          z  dk     rj
        ||z  }||z  }|}|dz  }v                    j        |z  d                               z  z             |z                      j        |z  d                               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   r   r   r      i      rU  r"  rV        ?)r   rU   mpq_1_4mpq_3_16mpq_1_16mpq_5_2r   r   r   r   r   expjr   r   )r   r   r   rW  rH   rZ  s2r$   r[  r\  r]  r%   r^  t2rA  r   r   r   r"   s                    r/   rj   z_hyp1f2.<locals>.hI  s   RU2Xck%9:AA7AaDck1R472:a<8"R%(CBrEI#,VWAaDbeCK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^$<>Ak$JC#$R472:ck#9AbDGBJs{<R"S!"2bCK!7#9C#&7AaC=#a!f*S1Q3Z2G#HAaDaDQB$q&>1"ufq[3771::+;;a? UAX

aR(881<r77S[00!q55SZZ#b''%9C%?%?"%"33bb "Q)* !CHHaRLL.!899"<36!8AchhrllN#:!;<<R?@Aa%!,q$lRHrdB"B"ur"gr"uRUmBrE!GBrE!G,b!A#6Br6Mr1   Tr   r`  c              3   B   K   | ]}                     |          V  d S r   rb  rc  s     r/   r  z_hyp1f2.<locals>.<genexpr>r  s1      BBs((++BBBBBBr1   r   
r   rJ   r   rN   r   rv   r   r   r   r   )r   r    r!   r"   rc   r   rd  r   rf  r   rg  r   r   rd   rh  ri  rj   rm   s   `  `              r/   r   r   -  s   MLR!$LR,2vq66D771::D8D mD!GO %jj888 $		$	$#d(	"   64	1O+'" '" '" '" '" '"P MM!bBZdQsxZMXXBBBBbBq\BBBBBaGGq		A CHH $   CHHtCHOOOO 3:aVVV4r2rlAPPPPPs%   A3D 
DD* DD* *	D3c           
          |\  \  }}\  }}|\  \  }	}
\  }}\  }}t                    }                               }o|dz  } j        }|                    d           o4                     |          dk    o                     |          d|z  k    }|r	 	  xj        |z  c_         fd}                     ||||	||gdd j        z            }t           fd	|||	||fD                       d
k    r                     |          }|| _        S #  j        $ r Y nw xY w	 | _        n# | _        w xY w  j	        dd|||
||f|||	||gfi |S )Nr   r   rk  rV  c           	         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r3|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  ||<   ||                              d|z            z  }j         |z                      d          | z  z  |z  }j        |z                      d          | z  z  |z  }t          |          dj	        z  k     rnC|dk    r*t          |          t          |          z  dk     rj
        ||z  }||z  }|}|dz  }	                    j        |z  d                               z  z             |z                      j        |z  d                               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   r   r   rm      r   rn  ro  r         r   r"  irp  rU  rV  rq  )r   rU   rr  rs  rt  rG   r   r   r   r   r   rv  r   r   )r   r   r   r   r   rW  rX  B3ABRrH   rZ  rw  r$   r[  r\  r]  uu3r%   r^  rx  rA  r   r   r_  r   r"   s                             r/   rj   z_hyp2f3.<locals>.h  s   RU2Xb[^CK%?@ABBBrB2A2beBrE)A2bAA7AaDa!eck1R4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#&7AaC=#a!f*S1Q3Z2GAaPQcF
2R#SAaDaD399aRa#8#88"ufq[3771::+;;a? UAX

aR(881<r77S[00!q55SZZ#b''%9C%?%?"%"33bb "Q)* !CHHaRLL.!899"<36!8AchhrllN#:!;<<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   r`  c              3   B   K   | ]}                     |          V  d S r   rb  rc  s     r/   r  z_hyp2f3.<locals>.<genexpr>  s1      HHs((++HHHHHHr1   r~  r   rz  )r   r    r!   r"   rc   r   rd  r   re  r   rf  r   rg  r   b3typer   r   rh  rd   ri  rj   rm   s   `  `                  r/   r   r     s   !$LR,2v/2,LR,2vVq66D771::D mD!GO8D
 %jj888 =		="%((4..3t8";   <:	7O+-& -& -& -& -& -&\ MM!bBr"%5DSTUXU]S]M^^HHHHbBr"Q5GHHHHHAMMq		A CHH $   CHHtCHOOOO3:aVVVVVDr2rSUWYFZ\]hhaghhhs%   A7D 
D*'D6 )D**D6 6	D?c                 4    |\  \  }}\  }}	 |                                 }	|	                    d j                  |	d<     j        dd||f||gfi |	S #  j        $ r |                    d          r Y nw xY w fd}
  j        |
|d|z   |z
  gfi |S )NrH  r   r   r   c                                          |          }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   )rA   rE   r%   r   r   r   r   r"   s         r/   rj   z_hyp2f0.<locals>.h  s    IIaLLTvamQr!HR1Qq	1#qc"=wqna1Q3q5\"a!Wac!eWacU2F2vr1   r   )copyrN   r   r   r   rv   )r   r    r!   r"   rc   rA   r   rE   r   kwargsbrj   s   `  `       r/   r   r     s     JQ
E++--%kk*ch??
sz!Qu!uaCC7CCC   ::n%% 	      3=Q!AJ11&111s   AA  A:9A:Nc                 @    |\  }}|\  }	}
t          |          t          |          z   t          |	          t          |
          z   ||z   }|	|
z   } fd|D             } fd|D             }                               |7k     rd}k    rd}k    r!z   k    rt                    dk    rd}nd}|                    d          rt	          d|           |dk    r fd}n fd}  j        |||z   fi |S )	Nc                 :    g | ]}                     |          S r;   r   r<   _r   s     r/   r=   zmeijerg.<locals>.<listcomp>  #    ###AQ###r1   c                 :    g | ]}                     |          S r;   r  r  s     r/   r=   zmeijerg.<locals>.<listcomp>  r  r1   r   r   r3   zMeijer G m,n,p,q,series =c            
      \  	
 | d          	| d          
g }t                    D ] g}
         z  g}
fdt                    D             }|	
fdt                    D             z  }	
fdt                    D             }|
fdt                    D             z  }	
fdt                    D             }
fdt                    D             }j         z
  z
  z  j        z  z  z  }|                    |||||||f           |S )Nc                 >    g | ]}|k    |                  z
  S r;   r;   r<   r   rE   r$   s     r/   r=   z&meijerg.<locals>.h.<locals>.<listcomp>  *    <<<AQ!VVad1Q4iVVVr1   c                 8    g | ]}d |         z
           z   S r.  r;   r<   r   rA   rE   r$   s     r/   r=   z&meijerg.<locals>.h.<locals>.<listcomp>  )    555qq1vad{555r1   c                 2    g | ]}|                  z
  S r;   r;   r  s     r/   r=   z&meijerg.<locals>.h.<locals>.<listcomp>  %    444Aad1Q4i444r1   c                 8    g | ]}d |         z
           z   S r.  r;   r  s     r/   r=   z&meijerg.<locals>.h.<locals>.<listcomp>  )    777qq1vad{777r1   c                 8    g | ]}d |         z
           z   S r.  r;   r  s     r/   r=   z&meijerg.<locals>.h.<locals>.<listcomp>	  )    444aa!fQqTk444r1   c                 D    g | ]}|k    d |         z
           z   S r.  r;   r  s     r/   r=   z&meijerg.<locals>.h.<locals>.<listcomp>
  .    >>>aqAvva!fQqTkvvvr1   )rV   rU   r   r1  r   basesexptsgngdhnhdhzrA   rE   r$   r   r  r+   r   r   rr"   s            @@@r/   rj   zmeijerg.<locals>.h  s   RaRAQRRAE1XX 
A 
A1a<<<<<q<<<555555E!HH5555444444q44477777E!AJJ7777444444588444>>>>>588>>>wh!A#a%(1swqy>9eUBBB?@@@@Lr1   c            
        	
 | d          	| d          
g }t                    D ])g}dk    r	         dz
  g}n"	         dz
                                z  g}	fdt                    D             }|	
fdt                    D             z  }	
fdt                    D             }|	fdt                    D             z  }	
fdt                    D             }	fdt                    D             }j         z
  z
  z  j        z  z  z  }|                    |||||||f           +|S )Nr   c                 >    g | ]}|k             |         z
  S r;   r;   r<   r   rA   r$   s     r/   r=   z&meijerg.<locals>.h.<locals>.<listcomp>  r  r1   c                 8    g | ]}d          z
  |         z   S r.  r;   r  s     r/   r=   z&meijerg.<locals>.h.<locals>.<listcomp>  r  r1   c                 2    g | ]}         |         z
  S r;   r;   r  s     r/   r=   z&meijerg.<locals>.h.<locals>.<listcomp>  r  r1   c                 8    g | ]}d          z
  |         z   S r.  r;   r  s     r/   r=   z&meijerg.<locals>.h.<locals>.<listcomp>  r  r1   c                 8    g | ]}d          z
  |         z   S r.  r;   r  s     r/   r=   z&meijerg.<locals>.h.<locals>.<listcomp>  r  r1   c                 D    g | ]}|k    d |         z            z
  S r.  r;   r  s     r/   r=   z&meijerg.<locals>.h.<locals>.<listcomp>  r  r1   )rV   r   rU   r   r  s            @@@r/   rj   zmeijerg.<locals>.h  s   RaRAQRRAE1XX A A66qT!VHEEd1fckk!nn45E<<<<<q<<<555555E!HH5555444444q44477777E!AJJ7777444444588444>>>>>588>>>wh!A#a%(1swqy>9eUBBB?@@@@Lr1   )rW   r   r   rN   rR   rv   )r   r    r!   r"   r  seriesrc   anapbmbqrA   rE   rj   r  r+   r   r   s   `  ``         @@@@r/   meijergr    s   FBFBBA	CGGABA	CGGA
2A
2A#######A#######AAA~q551&q551&66saxxCFFQJJzz) ;)1Qq6:::{{	 	 	 	 	 	 	 	 	 	 	 	"	 	 	 	 	 	 	 	 	 	 	& 3=AaC**6***r1   c           	         t          |          t          |          k    r||}}||}}d }|                     |          rn|                     |          rn|                     |          r||||f\  }}}}ne ||          sZ||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    1vv}r1   r   z%Analytic continuation not implementedm+nr  r+   r  )r   r   rP   appellf1hyper2d)
r   rA   r   r   rH   r*   yrc   r-   u1s
             r/   r  r  $  sa    1vvA!1RB   {{1~~ =	R =	R =!R|1b""
 r!uu 	=A#!B2b66 J !HIIIaCB3<1!B/QqSAbDGAb<<V<<= =3;qcrdt44uaSk1QQQ&QQQr1   c                 <     | j         |g|g|gd|g|gd||fi |S )Nr  r  r+   r  )	r   rA   r   r   c1c2r*   r  rc   s	            r/   appellf2r  A  sL     3;qcrdt44TrdQq, ,$*, , ,r1   c                 F   |                      |          p|                      |          }	|                      |          p|                      |          }
|	s1|
s t          |          t          |          k    r||}}||||f\  }}}} | j        ||g||gdd|gi||fi |S )Nr  r  )r   r   r  )r   r   r   r   r   rH   r*   r  rc   outer_polynomialinner_polynomials              r/   appellf3r  G  s    {{29#++b//{{29#++b// & 	&s1vvAaqAR2+KBr"R3;RGB005!+aKKFKKKr1   c                 6     | j         d||gi|g|gd||fi |S )Nr  r  r  )r   rA   rE   r  r  r*   r  rc   s           r/   appellf4r  Q  s8     3;qe}B4RD&9&9!AGGGGGr1   c                 ~   "                       |          }                      |          } fd}t          |          }t          |          } ||d          }	 ||d          }
 ||d          } ||d          } ||d          } ||d          } ||d          } ||d	          } ||d          } ||d          } ||d          }|r*t          d
|                                d         z            |r*t          d
|                                d         z            d} j        }                     d          "d} j        }|                    dd|z            }	  xj        dz  c_         j        
 }	 d}d}t          |
          }t          |          }"fd|	D             }"fd|D             }|D ]1}|"z   }|
                    |           |
                    |           2|D ]1}|"z   }|
                    |           |
                    |           2|D ]5}|
                    |"z
             |
                    |"z
  dz
             6|D ]C}|dz  }|d"z  z  }|
                    d|z
  "z
             |
                    | "z
             D|D ]D}|
                    |d"z  z              |
                    |d"z  z   d|z   d"z  z   z             E|D ]L}|dz  }|
                    d|z
  d"z  z
             |
                    |d"z  z   d|z   d"z  z   z             M|D ][}|dz  }|
                    d|"z
  z             |
                    d|"z
  dz   z             |
                    |"z
  dz
             \  j        ||||z  fd j        i|} || z  |z  }!t          |!          |k     r|dz  }nd}|dk    s|snC||!z  }|D ]}||z  }|D ]}||z  }"dz  "||z  "z  }"|k    r                     d          	 | _        n# | _        w xY w|
 S )az  
    Sums the generalized 2D hypergeometric series

    .. math ::

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

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

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

    For example, the Appell F1 and F4 functions

    .. math ::

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

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

    can be represented respectively as

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

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

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

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

    **Examples**

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

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

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

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

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

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

    **References**

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

    c                     |                      |g           }	 t          |          }n# t          $ r |g}Y nw xY wfd|D             S )Nc                 :    g | ]}                     |          S r;   r  )r<   rO  r   s     r/   r=   z*hyper2d.<locals>.parse.<locals>.<listcomp>  s%    111SC  111r1   )popr0  	TypeError)dctkeyr1  r   s      r/   parsezhyper2d.<locals>.parse  sh    wwsB	::DD 	 	 	6DDD	1111D1111s   ) 99r  r+   r  zm-nzn-mz2m+nz2m-nz2n-mzunsupported key: %rr   rH  rL   r7   r   c                     g | ]}|z   S r;   r;   )r<   rA   r  s     r/   r=   zhyper2d.<locals>.<listcomp>      (((qqs(((r1   c                     g | ]}|z   S r;   r;   )r<   rE   r  s     r/   r=   zhyper2d.<locals>.<listcomp>  r  r1   r   r   r   rq  r5   r   zmaxterms exceeded in hyper2d)r   dictrP   keysrU   r   r   rN   r   r0  r   rZ   r   r   )#r   rA   rE   r*   r  rc   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_nrQ  outerok_countr   rH  r   
inner_sign
outer_signinner_ainner_bouter_aouter_binnerr   r  s#   `                                 @r/   r  r  V  sI   P 	AAAA2 2 2 2 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?
016688A;>??
??
016688A;>??
?	AGE

AH8Dzz*bg..H>Bwh9	HJJ3iiG3iiG((((C(((G((((C(((G " "aCq!!!q!!!! " "aCq!!!q!!!! & &qs###qs1u%%%% % %r"
rQi'
qs1u%%%r!t$$$$ 2 2q1u%%%!A#!AaC01111 2 2r"
qs1Q3w'''!A#!AaC01111 & &a
sAaCy)))sAaCE{+++qs1u%%%%CIgw
1 - --%+- -E5=:-D4yy3A1}}E}IA((eqjee((eqjeeFAAIME8||''(FGGGs9	Hd  42Is   -J:P0 0	P9c                    	 |                                ||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   t          | d 
                   }t          | 
d                    }d |D             }d |D             }d	z  z  gd |D             z   d |D             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 )Nc                     g | ]}d |z
  S r   r;   r  s     r/   r=   z&bihyper.<locals>.h.<locals>.<listcomp>~      !!!!!!!r1   c                     g | ]}d |z
  S r  r;   r  s     r/   r=   z&bihyper.<locals>.h.<locals>.<listcomp>  r  r1   r   c                     g | ]}d |z
  S r.  r;   r  s     r/   r=   z&bihyper.<locals>.h.<locals>.<listcomp>  s    111!111r1   c                     g | ]}d |z
  S r.  r;   r  s     r/   r=   z&bihyper.<locals>.h.<locals>.<listcomp>  s    4F4F4FQQqS4F4F4Fr1   r   )r0  rW   )r   r    r!   aa_sbb_srprcr   r   negr   r"   s            r/   rj   zbihyper.<locals>.h{  s    3rr7mm3qrr7mm!!S!!!!!S!!!Ci!m_11S11114F4F#4F4F4FFTQCCL B4C=0RSA3YQ.RTQCZSy1}<2vr1   )r   rW   rM   rv   )
r   r    r!   r"   rc   r   r   rj   r  r   s
      `    @@r/   bihyperr  D  s    ` 	AA
)CCACA	1v1a&E//x!|Q3!)C	 	 	 	 	 	 	 3=C**6***r1   )r   N)#libmp.backendr   	functionsr   r   r0   rQ   rv   rZ   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r;   r1   r/   <module>r     s   " " " " " " + + + + + + + +-2 -2 -2^ $&D E E E EN (8 (8 (8T ( ( ( ) ) ) . . . + + + 1 1 1 4 4 4 * * * 4 4 4    !8 !8 !8F ! ! !F4 4 4l M M M^ G/ G/ G/R ; ; ;| @] @] @]H MQ MQ MQb Oi Oi Oib 2 2 2( ;+ ;+ ;+ ;+z R R R8 , , ,
 L L L H H H d d dL @+ @+ @+ @+ @+r1   