o
    lhr                     @   s  d dl mZ ddlmZmZ dd ZdZeg dfdd	Zed
d Zedd Z	edd Z
edd Zedd Zedd Zedd Zedd Zedd Zedd Zedd Zed d! Zd"d# Zed$d% Zed&d' Zed(d) Zed*d+ Zed,d- Zed.d/ Zed0d1 ZedAd3d4Zed5d6 Zed7d8 Zed9d: Zed;d< Z ed=d> Z!	 ed?d@ Z"d2S )B   )xrange   )defundefun_wrappedc                 C   sr  d }}d}g }t |D ]\}}	|	\}
}}}}}}d}t |
D ]\}}|s8| || dkr8|| r8d }}d}qg d}t |||gD ]O\}}t |D ]F\}}| |\}}|dkr\qL|| jkrd}|dkr{|D ]}| |rz|t|krzd} nqi|r~qL||  d7  < qL|dk r|| 7 }d}qLqD|r|d |d |d  kr|s|| qt|rd }}q||||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u r-   s/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/mpmath/functions/hypergeometric.py_check_need_perturb   sT   

r/   a  
hypercomb() failed to converge to the requested %i bits of accuracy
using a working precision of %i bits. The function value may be zero or
infinite; try passing zeroprec=N or infprec=M to bound finite values between
2^(-N) and 2^M. Otherwise try a higher maxprec or maxterms.
Tc           +         s   j } j} j} j}|d d  }	|dd}
|d |}||d< |d}|d}d }d}z>	   j d7  _  j |krKtt| j f  j }|	d d  }|| }|
rlt  td	 td
 j  td| t	 |||\}}}  j |7  _ |rd|v r|d }n j
rt j d }n|d | }  j| }|d | d  _ tt|D ]}||  |7  < |||d  7 }q|r|| }|rׇfddt|D }|s jW | _ S g }t|D ]\}}|\}}}}}} }!|
r7t  td|d t|t|t| f  td | | td | | td | |  td |!   j|| |!fi |g fdd|D   fdd|D   fddt||D  }"|
rltd|" ||" qt|dkr|s|d }n j
r |}n |} fdd|D }#t|#}$ |}%|$|% }&|
rt  td|&d td j | d |& j | k }'|d u rd}(n|$ j  | k }(|d u rd})n|$|k})|'r|r |&rne|'r%|d u r|d7 }|}q5 ||  || kr
nM|(r j}nM|)r j}nMd|v rnN|d9 }|}ntt|&|d t||}*  j |*7  _ |
r@td q5q6W | _ |
 S W | _ |
 S W | _ |
 S W | _ |
 S W | _ |
 S W | _ |
 S W | _ |
 S | _ w ) NverboseFmaxpreczeroprecinfprecr   r   
   zENTERING hypercomb main loopzprec =hextrahmagg333333?c                    s   g | ]
\}}| vr|qS r-   r-   ).0r'   r   )r   r-   r.   
<listcomp>k       zhypercomb.<locals>.<listcomp>z  Evaluating term %i/%i : %iF%iz
    powersz	    gammaz	    hyperz    zc                       g | ]}  |qS r-   )gammar7   ar   r-   r.   r8   ~       c                    r:   r-   )rgammar7   br>   r-   r.   r8      r?   c                    s   g | ]
\}}  ||qS r-   )power)r7   r#   cr>   r-   r.   r8      r9   z
    Value:c                    r:   r-   )mag)r7   r(   r>   r-   r.   r8      r?   z  Cancellation:bitsz  Increased precision:   r   z*  Must start over with increased precision)r   zeror
   r   get_default_hyper_maxprec
ValueError_hypercomb_msgprintr/   _fixed_precisionr   ldexponerangelenr   nstrfprodhyperzipr   fsummaxrE   isnaninfmin)+r   functionparamsr   kwargsorigsumvaluedistr   orig_paramsr0   r1   r2   r3   perturbed_reference_valuer5   orig2r   r   r   r   r6   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-   )r   r   r.   	hypercomb:   s  





R







>84rq   c                    sd    |}t|}t|} fdd|D } fdd|D }|ddra|dd}d}||k ra|ra|| }	|	|v rW|sD |	d sW||	 ||	 |d	8 }|d	8 }n|d	7 }||k ra|s3|dkr}|d	krs j||fi |S |dkr| |S n|d	kr|d	kr j|||fi |S |d
kr j|||fi |S |dkr 	|d d |S no|d
kr|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 n.||d	 kr j|||||fi |S ||d	 kr|ds j|||||fi |S t||  \}
} j||||
|fi |S )z0
    Hypergeometric function, general case.
    c                    r:   r-   _convert_paramr<   r>   r-   r.   r8      r?   zhyper.<locals>.<listcomp>c                    r:   r-   rr   rA   r>   r-   r.   r8      r?   	eliminateTeliminate_allFr   r   r      force_series)convertrR   rI   r   remove_hyp0f1exp_hyp1f1_hyp1f2_hyp1f0_hyp2f1_hyp2f2_hyp2f3_hyp2f0_hypq1fq
_hyp_borelrV   hypsum)r   r   r   r    r^   pqelim_nonpositiver'   rB   coeffstypesr-   r>   r.   rU      sF   




 rU   c                 K   s   | j g |g|fi |S NrU   )r   rB   r    r^   r-   r-   r.   hyp0f1   s   r   c                 K   s   | j |g|g|fi |S r   r   r   r=   rB   r    r^   r-   r-   r.   hyp1f1      r   c                 K   s   | j |g||g|fi |S r   r   )r   a1b1b2r    r^   r-   r-   r.   hyp1f2      r   c                 K   s   | j ||g|g|fi |S r   r   )r   r=   rB   rD   r    r^   r-   r-   r.   hyp2f1   r   r   c                 K   s   | j ||g||g|fi |S r   r   )r   r   a2r   r   r    r^   r-   r-   r.   hyp2f2   s   r   c                 K   s    | j ||g|||g|fi |S r   r   )r   r   r   r   r   b3r    r^   r-   r-   r.   hyp2f3      r   c                 K   s   | j ||gg |fi |S r   r   r   r-   r-   r.   hyp2f0  r   r   c                 K   s    | j |||g||g|fi |S r   r   )r   r   r   a3r   r   r    r^   r-   r-   r.   hyp3f2	  r   r   c                 C   s   d| |  S Nr   r-   )r   r=   r    r-   r-   r.   r~     s   r~   c           	         s   |\\ }r }nd}|dkrm|dsmzJj}z/ jd|d  7  _ fdd}j|g dd	} dj  | }W |_n|_w  r_r_|}|
 W S  j	yl   Y nw j
dd
|f gfi |S )Nr      rw      r   c                     s     } j|  }dd|  }j  }d| }| |g|dgg g  j j  gg | f}||g|dgg g  j j  gg |f}||fS )Nr      r   )sqrtjmpq_1_2r{   mpq_3_2)r#   jwr,   rD   ET1T2rB   r   r    r-   r.   re   !  s   

.*z_hyp0f1.<locals>.hTrw   r   )rE   rI   r   rq   r;   r   pi_is_real_type_reNoConvergencer   )	r   r   r    r^   btypemagzr_   re   rh   r-   r   r.   rz     s(   
	 
rz   c              	      sv  |\\}}|\\}}s j  S  }	|	dkr |r& |dks rK | |  krE   krEdkrF jS   j S zTz@  j|	7  _ 	dk  fdd}
 j
|
||gdd} |r |r r |}|
 W W   j|	8  _S   jy   Y nw W   j|	8  _n  j|	8  _w  jdd||f||gfi |}|S )N   r   r   c                    s   r   j| dd}n  | }d }|gd|  g|g||  g| d|  | gg | f} gd| | g|g| g||  d|  gg |f}||fS )NTexactr   )expjpifnegr{   )r=   rB   r   rzr   r   r   sectorr    r-   r.   re   E  s   
24z_hyp1f1.<locals>.hTr   )rP   rE   isintr	   isinfsignrZ   nanr   _imrq   r   r   r   r   )r   r   r   r    r^   r=   atyperB   r   r   re   rh   r-   r   r.   r|   5  s8   



 
.
	
 "r|   c           %      K   s  ||||f\}}}}	| j }
|dd|
 }d}	 |
| | _ | |	}| d}| d}| d}d}|| | }|| j }|d | j }d| }|| }|| | }|| | }|d }| j  d }| j}| j}| j}| j}	 || }|| ||  | d|d  | ||   }|||| | |   } ||| || |   }!|||| ||  |  |  d| |  }"|| |" }#t	|||#}||#| |k rn| |!|#}}}|d7 }qp|||# }$|$|k r	 |#S ||$7 }||kr| j
q)Nr1   d   r4   r   r   r   r   )r   rI   rx   mpfr   rS   nprintrE   r   rX   r   )%r   r=   rB   rD   r    r^   _a_b_c_zr_   r1   extrar*   efr"   abzchc1hnzgabgcbaz2tolrS   r   rE   maxmagkchkakbzd1e1ftf1rl   r-   r-   r.   _hyp2f1_gosperY  sZ   





,,r   c                    s  |\\}}\}}|\\ }	dkr  | | dk}
|r%|dkp-|o-|dk} oY dkoY|rH |  koEdkn  pX|oX |  koVdkn   }|
s^|rt|stj  | | g |  | gddS || djd  j S s s|dks|dkrd S jS  rǈ dkrǈ|r |  krdksn |rĈ |  krdkrn jS njS t}|dks|r|dkr|dks|r|dkr|dkrjdd|||	f|| gfi |S j	}z j	d7  _	|d	kr! fd
d}j
|||gfi |}nPtd dkr> fdd}j
|||gfi |}n:td  dkr^| |  d  d |  }n!t|| fi |}W |_	|
 S W |_	|
 S W |_	|
 S W |_	|
 S |_	w )Nr   r   T)_infsignr   g?ir4   g?c                    s   j   }| | }d } g|  g | g| |  g| ||  gj | g|f} g| g |g|  | g||| gj | g|f}||fS r   )mpq_1)r=   rB   tabr   r   r   rD   r   r    r-   r.   re     s   86z_hyp2f1.<locals>.hg      ?c                    s    |  | } |  } | }d }g g  |g||g| |gd| g|f}|g|g | |   g| |g||gd| g|f}||fS r   r-   )r=   rB   r   cacbr   r   r   )rD   r    r-   r.   re     s   $$0)r	   r   	gammaprodr   epsrZ   r   absr   r   rq   r   )r   r   r   r    r^   r=   r   rB   r   ctype
convergentfinitezerodivabszr_   re   rh   r-   r   r.   r     sj   
$B(  "&
*r   c              
      s  t  \}t  \}ttt}	d}
D ]}|r+|dkr+d}
 nq|	dk s2|
rVzj	
||  fi |W S  jyU   |	dksR|
rS Y nw dkrwtt }|dkrwjdfi |j	 S 	
fdkrtd dk r\ \  }
   g  d|g}d|if fd	d
	z!jdj	g|d|ddd}|
g g W S  jy   Y nw |	dk rȈdkrdjif	
fdd
	|dd}zjdj	g|d|dd|dddW S  jy4   d|vr2 Y nw |dr?td 	 fddfdd}jd }j}zidj } jd7  _tdD ]J}fddt|D }j|j	g||||dddd\}}||k r|| } n!|d 9 } jjd  7  _|d!krd"qkW |_|
 S W |_|
 S |_w 	
fd#d$}j| fi |S )%z&
    Evaluates 3F2, 4F3, 5F4, ...
    Fr   Tr   g?g?)rv   r   g?c                    s~     |  }| |v r||  }n$|| d  }||   d |   d  9 }|| |d   }||| < |  | S r   )r   )r"   _cacher,   r   )r   r   r   r   r   r   r    r-   r.   r     s   
$z_hypq1fq.<locals>.termr0   strict)r0   r   c                    s   t | }|| kr0|  |  } D ]
}||| 9 }qD ]
}|||  }q#|S ||v r8|| S |d }|d }tD ]
}| | | 9 }qFtD ]
}|| |  }qU|9 }|| }|||< |S r   )r   r   facrfr   )kkr   r"   r   r=   rB   mr   )r   r   r   r   r   r   r    r-   r.   r   '  s    
sum_methodzr+s+er    )r0   r   methodz$Attempting Euler-Maclaurin summationc                 3   s    dg }t fddD t fdd|D    V  d 	 t  fddD t  fdd|D  } dkrN|7 }|V   d7  q))Nr   c                 3       | ]
}  | V  qd S r   loggammar<   r   k0r-   r.   	<genexpr>i      z._hypq1fq.<locals>.log_diffs.<locals>.<genexpr>c                 3   r   r   r   rA   r   r-   r.   r   j  r   r   c                 3        | ]}  | V  qd S r   psir<   r   r'   r   r-   r.   r   m      c                 3   r   r   r   rA   r   r-   r.   r   n  r   )r   log)r   r   rh   r   r   r   r    )r'   r   r.   	log_diffsg  s"   
z_hypq1fq.<locals>.log_diffsc                 3   sH     dd D dd  D }| D ]	}|| }|V  qd S )Nc                 S      g | ]}|qS r-   r-   rA   r-   r-   r.   r8   u      z1_hypq1fq.<locals>.hyper_diffs.<locals>.<listcomp>c                 S   r  r-   r-   r<   r-   r-   r.   r8   u  r  )r   	diffs_exp)r   Cr*   rh   )r   r   r   r  r-   r.   hyper_diffst  s    z_hypq1fq.<locals>.hyper_diffsi   2   rG      c                 3   s    | ]} |V  qd S r   r-   )r7   r"   )r   r-   r.   r     s    z_hypq1fq.<locals>.<genexpr>)r   adiffsr0   error_fast_abortr   r   z*Euler-Maclaurin summation did not convergec            
   
      s   t | d   t | d  g }j }jdd}td D ]Y  |g} g}g  fddtd D  } fddtD  }gfddtD  } fddtd D }	|||||||	|f q$|S )	NTr   r   c                    s    g | ]}|kr |  qS r-   r-   r7   r   r   akr"   r-   r.   r8          z'_hypq1fq.<locals>.h.<locals>.<listcomp>c                    s   g | ]}|   qS r-   r-   r  r  r   r-   r.   r8     s    c                    s   g | ]
} |  d  qS r   r-   r  r  r-   r.   r8     r9   c                    s$   g | ]}|krd  |   qS r  r-   r  r  r-   r.   r8        $ )listrP   r   rQ   r   )
argsTsrecznegzr  CpGnGdFnFd)r   r   r   r    )r   r  r   r"   r.   re     s   
(z_hypq1fq.<locals>.h)rV   r  r   r   r   r   r	   r   rU   rZ   r   nsumrI   r   rP   replacerM   r   r   dpsr   rW   sumemrq   )r   r   r   r   r   r    r^   a_typesb_typesr   ispolyr=   Sr,   initialr   r  r   r   truncr'   headtailerrrh   re   r-   )r   r   r   r   r   r   r   r   r  r   r   r   r    r.   r     s   $
, 

"







	r   c                    s   rt   \ }t  ng d }rt  \}tng d}|dj|d< zj||||   fi |W S  jyI   Y nw j}	zE|djd }
 jd7  _djif fdd	j}td	jD ]}|}||7 }t	||
kr|  W |	_S quW |	_n|	_w ||d
 kr|d}|sۈ
dk rֈtd	t	 }
dkrddd| d| jg}nddd| d| jg}ndjg}|di } fdd}j||fddi|\}}|t	|j d kr|S j)Nr-   maxterms	asymp_tolr   r4   r   c                    sl   | |v r||  S | d } D ]
}||| d  9 }qD ]
}||| d   }q|9 }||  }||| < |S r   r-   )r"   cacher   r=   rB   )r   r   r   r    r-   r.   r     s   z_hyp_borel.<locals>.termr   rv   contourg      ?y               @y       @       @r   y              y       @       quad_kwargsc                    s$    |   dg |   S r   )r{   rU   )r   r  r-   r.   r     s   $z_hyp_borel.<locals>.gr  Tr   )rV   r  rI   r   r   r   r   rP   r   r   argrX   rZ   quad)r   r   r   r   r   r    r^   r#  r$  r   r   sr"   r   r/  r,   r0  r   Ir+  r-   )r   r   r   r   r    r.   r     sX   



$


r   c                    s&  |\\}}\}}|\\}	}
\}}t } } j}|}|d o* |dk}|r~zLz<  j|7  _ fdd} j||||	|gdd j d}t fdd	|||	|fD d
krd |}|W W | _S   jyt   Y nw W | _n| _w  jdd|||
|f|||	|gfi |S )Nrw   rv   c                    sh  | | | | }| | }|| }i } j |d< |d | ||  | |  |d< d}d}	d}
	 |	|vrd| d|   | d  d|  |d  ||  | |  ||  d| d|d   |	  d|	d   }|	| | d |	| | d  |	| d  } j |	 |||	d   |||	d     ||	< ||	 |	   }t|d j k rn|	dkrt|
t| dk r j||7 }|}
|	d7 }	q. | }|g|dg||g| |gg g df} g|  g||||  g|||  ||  g| | | d | | d g| | d gd f} g| g||| | g| || || g||| d || d g|  | d gd f}|||fS )	Nr   r   r   rv   皙?r
        ?r   )rP   r   r   r   r{   )r   r   r   r   XA2B2rD   s1r"   tprevuu1uu2t1r&  r   r   T3r   r    r-   r.   re     s8   
 d,."VX
z_hyp2f2.<locals>.hTr   rw   r,  c                 3       | ]}  |V  qd S r   r   r7   r,   r>   r-   r.   r   !      z_hyp2f2.<locals>.<genexpr>r
  r   )	r   rE   r   rI   rq   r   r	   r   r   )r   r   r   r    r^   r   a1typer   a2typer   b1typer   b2typer   r   r_   asymp_extrapreccan_use_asymptoticre   rh   r-   r@  r.   r     s2   
 $
*r   c                    s2  |\\}}|\\}}\}	}
t } } j}o|d }|d o4 |dko4 |d| k}|rzJz:  j|7  _ fdd} j||||	gdd j d	}t fd
d|||	fD dkrl |}|W W | _S   jy|   Y nw W | _n| _w  j	dd|||
f|||	gfi |S )Nr   rw      r6  c                    sP   j | | |  j   }i } j|d< d jd|  | | d  | | |  ||   j  |d< d||  j| | |  d|  | | d    j d   jdd|  d  | | d| | |  d| d  d|   | | d   d   |d< d}d}d}d}	 ||vrd|d  d	|  d|  d|  d |  d| d   || d  d|  || d    j }	||  | |  j  ||  | |  j   ||  | |  j  }
 jd|  |	||d   |
||d     ||< ||  d
|   } j |  d|   | } j|  d|   | }t|d j	 k r%n"|dkr8t|t| dk r8 j
||7 }||7 }|}|d7 }q  j| d    |   j| d     |  }d|  j gdd
|g||g| gg g df} g|  g||g||  ||  g| | | d | | d gg d f}||fS )Nr   r   rv   r   r      i      r5  r
  r6        ?)r   rP   mpq_1_4mpq_3_16mpq_1_16mpq_5_2r   r   r   r   r   expjr   r   )r   r   r   r7  rD   r:  s2r"   r;  r<  r=  r#   r>  t2r&  r   r   r@  r-   r.   re   I  sd   
<:.6
*2  "$"  z_hyp1f2.<locals>.hTr   rA  c                 3   rB  r   rC  rD  r>   r-   r.   r   r  rE  z_hyp1f2.<locals>.<genexpr>r   
r   rE   r   rI   r   rq   r   r	   r   r   )r   r   r   r    r^   r   rF  r   rH  r   rI  r   r   r_   rJ  rK  re   rh   r-   r@  r.   r}   -  s6   

("
&r}   c              	      sN  |\\}}\}}|\\}	}
\}}\}}t } }o!|d } j}|d o: |dko: |d| k}|rzNz>  j|7  _ fdd} j||||	||gdd j d	}t fd
d|||	||fD dkrv |}|W W | _S   jy   Y nw W | _n| _w  j	dd|||
||f|||	||gfi |S )Nr   rw   rL  r6  c              	      s   j | | | | |  j   }| | }|| | }| | }|| ||  ||  }	|| | }
i } j|d< d|	|  jd| | d  ||    j  |d<  j |d d   jdd| d  |	|  d|
  dd|d  d	|  d
|  | d  ||   d   |d< d}d}d}d}	 ||vr\|d|  d |d|  d|  d  |d|  d|  d  |d|  d|  d  }d|d d  dd| |  |d d   dd|d  d| |  d|	  | d  |d   d|d   d| |d   d|	  d
|
  dd|	 | d  |  d|  d }d|d d  dd| | d|  d  |d   d|d   } jd|  |||d   |||d    |||d     ||< ||   d|  } j |  d|   | } j|  d|   | }t|d j	 k rn"|dkrt|t| dk r j
||7 }||7 }|}|d7 }q  j| d    |   j| d     |  }d|  j gdd|g|||g| |gg g df} g|  g|||||  g|||  ||  ||  g| | | d | | d | | d g| | d gd f} g| g|||| | g| || || || g||| d || d || d g|  | d gd f}|||fS )Nr   r   rv   r   rM      r   rN  rO  r         r   r
  irP  r5  r6  rQ  )r   rP   rR  rS  rT  rC   r   r   r   r   r   rV  r   r   )r   r   r   r   r   r7  r8  B3ABRrD   r:  rW  r"   r;  r<  r=  uu3r#   r>  rX  r&  r   r   r?  r@  r-   r.   re     s    
42.
>*2
@B  "$&0406
z_hyp2f3.<locals>.hTr   rA  c                 3   rB  r   rC  rD  r>   r-   r.   r     rE  z_hyp2f3.<locals>.<genexpr>r[  rv   rY  )r   r   r   r    r^   r   rF  r   rG  r   rH  r   rI  r   b3typer   r   rJ  r_   rK  re   rh   r-   r@  r.   r     s6   
".&
.r   c                    s   |\\}}\}}z|  }	|	d j|	d<  jdd||f||gfi |	W S   jy7   |dr5 Y nw  fdd}
 j|
|d| | gfi |S )Nr,  r   r   rw   c                    s     |}d } j||gdd| gg | | d |g| g|g|f} j ||gddd|  | gg | d| g| | d gd| g|f}||fS )Nr   r   r   )sinpir   )r=   rB   r#   r   r   r   r@  r-   r.   re     s
   
0Bz_hyp2f0.<locals>.hr   )copyrI   r   r   r   rq   )r   r   r   r    r^   r=   r   rB   r   kwargsbre   r-   r@  r.   r     s   $
 r   Nc                    s.  |\}}|\}	}
t |t | t |	t |
 || }|	|
 } fdd|D } fdd|D } |d u r`k rEd}krKd}kr` kr^tdkr^d}nd}|drntd| |dkr fdd	}n fd
d	} j||| fi |S )Nc                    r:   r-   rx   r7   _r>   r-   r.   r8     r?   zmeijerg.<locals>.<listcomp>c                    r:   r-   rf  rg  r>   r-   r.   r8     r?   r   r   r0   zMeijer G m,n,p,q,series =c            	   
      s  | d   | d  g }t D ]z	g}  g}fddt D }| fddt D 7 } fddt D }|fddt D 7 } fddt D }fddt D }j    	j   }||||||||f q|S )Nc                    s$   g | ]}|kr |    qS r-   r-   r  rB   r"   r-   r.   r8     r  &meijerg.<locals>.h.<locals>.<listcomp>c                        g | ]}d  |    qS r  r-   r  r=   rB   r"   r-   r.   r8     r  c                    s   g | ]
} |   qS r-   r-   r  rl  r-   r.   r8     r9   c                    s    g | ]}d  |     qS r  r-   r  ri  r-   r.   r8     r  c                    rk  r  r-   r  rl  r-   r.   r8   	  r  c                    s(   g | ]}|krd  |     qS r  r-   r  ri  r-   r.   r8   
     ( )rQ   rP   r   	r  r   basesexptsgngdhnhdhzr   r   r)   r   r   rr    rl  r.   re     s   "zmeijerg.<locals>.hc            	   
      s@  | d   | d  g }t D ]	g}dkr#  d g}n  d  g} fddt D }| fddt D 7 } fddt D }| fddt D 7 } fddt D } fddt D }j    	j   }||||||||f q|S )	Nr   c                    s$   g | ]}|kr   |  qS r-   r-   r  r=   r"   r-   r.   r8     r  rj  c                        g | ]}d    |  qS r  r-   r  rl  r-   r.   r8     r  c                    s   g | ]
}  |  qS r-   r-   r  rl  r-   r.   r8     r9   c                    s    g | ]}d     |  qS r  r-   r  rx  r-   r.   r8     r  c                    ry  r  r-   r  rl  r-   r.   r8     r  c                    s(   g | ]}|krd  |     qS r  r-   r  rx  r-   r.   r8     rm  )rQ   rx   rP   r   rn  rv  rl  r.   re     s"   ")rR   rx   r   rI   rM   rq   )r   r   r   r    rw  seriesr^   anapbmbqr=   rB   re   r-   rv  r.   meijerg  s0   

r  c           
      K   s  t |t |kr||}}||}}dd }| |rnO| |r"nI| |r2||||f\}}}}n9||sk|| |d  }	||	sFtdd| |  d| || |   | j|| ||| | ||	|fi | S | j|g|g|gdd|gi||fi |S )Nc                 S   s   t | dk S )NgGz?)r   )r(   r-   r-   r.   r+   +  s   zappellf1.<locals>.okr   z%Analytic continuation not implementedm+nr   r)   r  )r   r   rK   appellf1hyper2d)
r   r=   r   r   rD   r(   yr^   r+   u1r-   r-   r.   r  $  s$   




 &,r  c           	      K   s0   | j |g|g|gd|g|gd||fi |S )Nr  r   r)   r  )	r   r=   r   r   c1c2r(   r  r^   r-   r-   r.   appellf2A  s
   r  c                 K   s   |  |p	|  |}	|  |p|  |}
|	s/|
s t|t|kr/||}}||||f\}}}}| j||g||gdd|gi||fi |S )Nr  r  )r   r   r  )r   r   r   r   r   rD   r(   r  r^   outer_polynomialinner_polynomialr-   r-   r.   appellf3G  s   
,r  c                 K   s*   | j d||gi|g|gd||fi |S )Nr  r  r  )r   r=   rB   r  r  r(   r  r^   r-   r-   r.   appellf4Q  s   *r  c           "         s    |}  |} fdd}t|}t|}||d}	||d}
||d}||d}||d}||d}||d	}||d
}||d}||d}||d}|r[td| d  |rgtd| d  d} j} dd} j}|dd| }zS  jd7  _ j
 }	 d}d}t	|
}t	|}fdd|	D }fdd|D }|D ]}| }|
| |
| q|D ]}| }|
| |
| q|D ]}|
|  |
| d  q|D ]}|d9 }|d 9 }|
d|   |
|   q|D ]}|
|d   |
|d  d| d    q|D ]#}|d9 }|
d| d   |
|d  d| d    q'|D ]$}|d9 }|
d|   |
d| d   |
| d  qM j|||| fd ji|} ||  | }!t|!|k r|d7 }nd}|dks|sn-||!7 }|D ]}||9 }q|D ]}|| }qd7 ||  }|krˈ dqW | _|
 S | _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                    sD   |  |g }zt|}W n ty   |g}Y nw  fdd|D S )Nc                    r:   r-   rf  )r7   r1  r>   r-   r.   r8     r?   z*hyper2d.<locals>.parse.<locals>.<listcomp>)popr  	TypeError)dctkeyr  r>   r-   r.   parse  s   
zhyper2d.<locals>.parser   r)   r  zm-nzn-mz2m+nz2m-nz2n-mzunsupported key: %rr   r,  rG   r4   r   c                       g | ]}|  qS r-   r-   r<   r   r-   r.   r8         zhyper2d.<locals>.<listcomp>c                    r  r-   r-   rA   r  r-   r.   r8     r  r   r   r   rQ  r2   rv   zmaxterms exceeded in hyper2d)rx   dictrK   keysrP   r   r   rI   r   r  r   rU   r   r   )"r   r=   rB   r(   r  r^   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_nr3  outerok_countr   r,  r   
inner_sign
outer_signinner_ainner_bouter_aouter_binnerr   r-   )r   r   r.   r  V  s    
	














&&


2	r  c                    st   |  || }t|t|}|fdks|fdkr"| j S | d   fd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            	         s   t | d  }t | d  }dd |D }dd |D }d   gdd |D  dd |D  }dgdgt|  dgt|  }g g g g |dg |f}||g g |dg |d   f}||fS )Nc                 S      g | ]}d | qS r   r-   rA   r-   r-   r.   r8   ~  r  z&bihyper.<locals>.h.<locals>.<listcomp>c                 S   r  r  r-   r<   r-   r-   r.   r8     r  r   c                 S   r  r  r-   rA   r-   r-   r.   r8     r  c                 S   r  r  r-   r<   r-   r-   r.   r8     r  r   )r  rR   )	r   r   r   aa_sbb_srprcr   r   negr   r    r-   r.   re   {  s   *" zbihyper.<locals>.h)rx   rR   rH   rq   )r   r   r   r    r^   r   r   re   r-   r  r.   bihyperD  s   
0

r  )r   N)#libmp.backendr   	functionsr   r   r/   rL   rq   rU   r   r   r   r   r   r   r   r   r~   rz   r|   r   r   r   r   r   r}   r   r   r  r  r  r  r  r  r  r-   r-   r-   r.   <module>   s~    / 
*









#
#6
O
 J
>
D
Q
Q
=


	

 g