o
    lhh                     @   s   d Z ddlZG dd deZddlmZ dd Zd	d
 Zdd Zdd Z	dddZ
dgfddZdddZdddZdddZdddZedddZedddZdS ) aI  
---------------------------------------------------------------------
.. sectionauthor:: Juan Arias de Reyna <arias@us.es>

This module implements zeta-related functions using the Riemann-Siegel
expansion: zeta_offline(s,k=0)

* coef(J, eps): Need in the computation of Rzeta(s,k)

* Rzeta_simul(s, der=0) computes Rzeta^(k)(s) and Rzeta^(k)(1-s) simultaneously
  for  0 <= k <= der. Used by zeta_offline and z_offline

* Rzeta_set(s, derivatives) computes Rzeta^(k)(s) for given derivatives, used by
  z_half(t,k) and zeta_half

* z_offline(w,k): Z(w) and its derivatives of order k <= 4
* z_half(t,k): Z(t) (Riemann Siegel function) and its derivatives of order k <= 4
* zeta_offline(s): zeta(s) and its derivatives of order k<= 4
* zeta_half(1/2+it,k):  zeta(s)  and its derivatives of order k<= 4

* rs_zeta(s,k=0) Computes zeta^(k)(s)   Unifies zeta_half and zeta_offline
* rs_z(w,k=0)    Computes Z^(k)(w)      Unifies z_offline and z_half
----------------------------------------------------------------------

This program uses Riemann-Siegel expansion even to compute
zeta(s) on points s = sigma + i t  with sigma arbitrary not
necessarily equal to 1/2.

It is founded on a new deduction of the formula, with rigorous
and sharp bounds for the  terms and rest of this expansion.

More information on the papers:

 J. Arias de Reyna, High Precision Computation of Riemann's
 Zeta Function by the Riemann-Siegel Formula I, II

 We refer to them as I, II.

 In them we shall find detailed explanation of all the
 procedure.

The program uses Riemann-Siegel expansion.
This  is useful when t is big, ( say  t > 10000 ).
The precision is limited, roughly it can compute zeta(sigma+it)
with an error less than exp(-c t) for some constant c depending
on sigma.  The program gives an error when the Riemann-Siegel
formula can not compute to the wanted precision.

    Nc                   @   s   e Zd Zdd ZdS )RSCachec                 C   s   ddi i g| _ d S )Nr   
   )	_rs_cachectx r   k/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/mpmath/functions/rszeta.py__init__6   s   zRSCache.__init__N)__name__
__module____qualname__r	   r   r   r   r   r   5   s    r      )defunc                 C   sp  |d }|d }t | d|d  d| d | | }| d| }t | d| | |d | }|| _i }| j|d< | j|d	< tdd| d	 D ]}	||	d	  | j ||	< qM|d | _i }
i }td|d	 D ]#}	d
|	 | d|	  }| || d|	  }||d|	   |
|	< qktdd| d	 D ]}	| j| |	 }|d|	  }|||	  ||	< qd| _d| | }i }td|d	 D ]E}	d| _t | d|	d  d|	 | }|| _d}td|	d	 D ]}|d
| |
|  |d|	 d|    7 }qd
|	d	  | j	 | ||	< qi }td|d	 D ]=}	d| _t | d|	d  d|	 | }|| _d}td|	d	 D ]}|| j	|	|  |
|  ||	|   7 }q4|||	< qd| _d| | }t dd| | }|| _| 
| dd }| dd }i }td|D ]"}	d| _t dd|	 | }|| _|||	  |||	   |d|	 < qtd	d| dD ]}	d||	< q||||gS )a  
    Computes the coefficients  `c_n`  for `0\le n\le 2J` with error less than eps

    **Definition**

    The coefficients c_n are defined by

    .. math ::

        \begin{equation}
        F(z)=\frac{e^{\pi i
        \bigl(\frac{z^2}{2}+\frac38\bigr)}-i\sqrt{2}\cos\frac{\pi}{2}z}{2\cos\pi
        z}=\sum_{n=0}^\infty c_{2n} z^{2n}
        \end{equation}

    they are computed applying the relation

    .. math ::

        \begin{multline}
        c_{2n}=-\frac{i}{\sqrt{2}}\Bigl(\frac{\pi}{2}\Bigr)^{2n}
        \sum_{k=0}^n\frac{(-1)^k}{(2k)!}
        2^{2n-2k}\frac{(-1)^{n-k}E_{2n-2k}}{(2n-2k)!}+\\
        +e^{3\pi i/8}\sum_{j=0}^n(-1)^j\frac{
        E_{2j}}{(2j)!}\frac{i^{n-j}\pi^{n+j}}{(n-j)!2^{n-j+1}}.
        \end{multline}
              @r            (   r   r      	      2g      ?)maxmag	_eulernumpreconepirangempffacjsqrtexpjpi)r   JepsnewJneweps6wpvwEwppipipowernvwvawawpp1aP1wpp1sumpkP2wpp2wpc0wpcmunucr   r   r   _coefN   sr   *"


 * *$r?   c                    s    j }||d kr||d kr|d |d fS  jj}zt j||}W | j_n| j_w   jurUt fdd|d  D |d< t fdd|d  D |d< | j d d <  j d  j d fS )Nr   r   r   r   c                 3   "    | ]\}}|  |fV  qd S Nconvert.0r7   r/   r   r   r   	<genexpr>        zcoef.<locals>.<genexpr>c                 3   r@   rA   rB   rD   r   r   r   rF      rG   )r   _mpr   r?   dictitems)r   r&   r'   _cacheorigdatar   r   r   coef   s   
""rN   c                 C   s
  d| | }|  |}d|  | j |  | |  | d |  d| j d  }d| d }| |d | |d d  d | |d d  }	||| |	 k r|dkr|d }| |d | |d d  d | |d d  }	||| |	 k r|dksV|}
|
S )Ngbk5_@r   r   r         @r   )lnr   loggamma)r   xAxeps4axB1xLaux1aux2maux3xMr   r   r   aux_M_Fp   s   
<66r\   c           	      C   sJ   |d|  }|| d }||  ||d  |d d  | }t||}|S )Nx  gJR_@r   r   r   )powermin)	r   rR   rS   rT   rU   r[   h1h2h3r   r   r   aux_J_needed   s
   $
rc   c              
      s2   j } |} |}d| }d _  |d j  }|| }|| }	 d |d }
 d |	d } d| }|d }||
 d }|| d }d _ |dkrmd}td|d	 }td|}d}nd
}td| d	 }td| }d}|dkrd}td|d	 }td|}d}nd
}td| d	 }td| }d}d _ d}d|  	|d   || |  |kr|d }d|  	|d   || |  |kst
d|}d}d|  	|d   || |  |kr|d }d|  	|d   || |  |kst
d|}d| d| | d ks`d| d | dk s`t||d ks`d| d| | d ks`d| d | dk s`t||d krg| _ tdt
||}|d|  }|d|  }|d|  }|d|  }t |||||}t |||||} t
|| }!t |||||}"t ||||| }#t|"|#}"d}$d j |$  	|$d  }%|%|"kr|$d }$d j |% |$ }%|%|"ksi }&tjtj | | }'tjtj | | }(tddD ]@})t|'|)d d|  }*t|(|)d d|  }+t|*|+}, 	|)d  	|)d d  }-t|-}-|,|- t|| |&|)< qtd| d dd }.d|$ }/ d|$ }0td|.D ]})t
|0 |/ 	|)d  |&|)  }0qP|0 | d  _  |d j  } |}1dd||1   }2 |2 d|0  }3|2 d|0  |3 }4|4dk r|3}3n|3d }3 |3 d|0   }2  d j |$ 	|$d d |$  }5i }6i }7t |$|5\}7}8|7 }6i }9t|!d| d D ]}:d|9|:< qi }9|0 _ td|!d D ]<})d};td|$ |) d ddD ]}<|;|2 |6|<  };q|;|9|)< tdd|$ |) d D ]}<|<d |6|<d   |6|<< q)qi }=t
d d| | }>d dt| |   | d }? d j j | | | |  d }@td|D ] }:   	|:d  |:|@  |? }At
|A|>|=|:< qw|=d d  _ dd|  }Bi }Cd|Cd< d|Cd < d|Cd!< d|Cd"< d|Cd#< d|Cd$< d|Cd%< d|Cd&< td|D ]}:|=|: d  _ tdd|: d d D ]}<d|: d|<  })|)dkr/ j|) }D|Dd }E|B|D d }F|)d  }G|G|Cd|:d |<d f  |E|Cd|:d |<f   |F|Cd|:d |<d f   |Cd|:|<f< qd|Cd|:|<f< td|<D ]2}H|Cd|:|Hf  d' d|< d|H    |<|H   }I|Cd|:|<f  d|<|H  |I 8  < q;qd|Cd|:d(f< d|Cd|:df< d|Cd|:d|: d d f< qtd(|d D ]=}Jtd(|D ]4}:td)t
dd|: d d D ]"}<|Jdk s|:dk s|<dk s|<d|: d krd|C|J|:|<f< qqqtd|d D ]^}Jtd|D ]U}:|=|: d  _ tdd|: d d D ]?}<d|J d |C|Jd |:d |<d f  d||: d  |C|Jd |:d |<d f   }/|/|C|Jd |:d |<d f  |C|J|:|<f< qqqi }Kt
d d| | }>d dt| |   | d }L d j j | | | |  d }Mtd|D ] }:   	|:d  |:|M  |L }Nt
|N|>|K|:< qt|Kd d  _ dd|  }Oi }Pd|Pd< d|Pd < d|Pd!< d|Pd"< d|Pd#< d|Pd$< d|Pd%< d|Pd&< td|D ]}:|K|: d  _ tdd|: d d D ]}<d|: d|<  })|)dkr, j|) }D|Dd }E|O|D d }F|)d  }G|G|Pd|:d |<d f  |E|Pd|:d |<f   |F|Pd|:d |<d f   |Pd|:|<f< qd|Pd|:|<f< td|<D ]2}H|Pd|:|Hf  d' d|< d|H    |<|H   }I|Pd|:|<f  d|<|H  |I 8  < q8qd|Pd|:d(f< d|Pd|:df< d|Pd|:d|: d d f< qtd(|d D ]=}Jtd(|D ]4}:td)t
dd|: d d D ]"}<|Jdk s|:dk s|<dk s|<d|: d krd|P|J|:|<f< qqqtd|d D ]^}Jtd|D ]U}:|K|: d  _ tdd|: d d D ]?}<d|J d |P|Jd |:d |<d f  d||: d  |P|Jd |:d |<d f   }/|/|P|Jd |:d |<d f  |P|J|:|<f< qqݐqi }Qi }Rd _  d|d  }E d*|d  | }S || t j d }Ttd|D ]B}<|S|<|T    |<d d  }Ut
|E|U | d d d d+ |Q|<< t
|E |d |U  | d d d |R|<< qdi }Vi }Wd _  d|d  }E d*|d  | }X || t j d }Ytd|D ]@}<|X|<|Y    |<d d  }Zt
|E|Z | d d d+ |V|<< t
|E |d |Z  | d d d |W|<< qi }[td|d D ]"}Jtd|D ]}<td(d|< d d D ]
}\d|[|J|<|\f< q4q'q td|d D ]Q}Jtd|D ]H}<|Q|<  _ tdd|< d d D ]4}\|C|J|<|\f |9d|< d|\    |8d|< |\   |[|J|<|\f< |[|J|<|\f d j |\  |[|J|<|\f< qcqQqJ fd,d-}]i }^td|d D ]"}Jtd|D ]}<td(d|< d d D ]
}\d|^|J|<|\f< qqqt
|Qd |Vd d  _ |]|}_ |_ }`td|d D ]R}atd|D ]I}<|Q|<  _ tdd|< d d D ]5}\d|^|a|<|\f< td|ad D ]#}J |a|J |`|J |[|a|J |<|\f  }b|^|a|<|\f  |b7  < 	q	qqqi }ctd|d D ]"}Jtd|D ]}<td(d|< d d D ]
}\d|c|J|<|\f< 	q[	qN	qGtd|d D ]Q}Jtd|D ]H}<|V|<  _ tdd|< d d D ]4}\|P|J|<|\f |9d|< d|\    |8d|< |\   |c|J|<|\f< |c|J|<|\f d j |\  |c|J|<|\f< 	q	qx	qqi }dtd|d D ]"}atd|D ]}<td(d|< d d D ]
}\d|d|a|<|\f< 	q	qӐ	qtd|d D ]R}atd|D ]I}<|V|<  _ tdd|< d d D ]5}\d|d|a|<|\f< td|ad D ]#}J |a|J |`|J |c|a|J |<|\f  }b|d|a|<|\f  |b7  < 
q
q	q	qt
|Qd |Vd d  _ i }ed|ed< |ed | |ed< t
|Qd |Vd  _ td|D ]}<|e|<d  |ed  |e|<< 
qri }ftd|d D ]0}atd|D ]'}<|Q|<  _ tdd|< d d D ]}\|^|a|<|\f |e|<  |f|a|<|\f< 
q
q
qi }gtd|d D ]0}atd|D ]'}<|V|<  _ tdd|< d d D ]}\|d|a|<|\f |e|<  |g|a|<|\f< 
qސ
q̐
qi }htd|d D ]1}atd|D ](}:|R|:  _ d}itdd|: d d D ]}<|i|f|a|:|<f 7 }iq|i|h|a|:f< q
qi }jtd|d D ]1}atd|D ](}:|W|:  _ d}itdd|: d d D ]}<|i|g|a|:|<f 7 }iqU|i|j|a|:f< qAq:i }kd _ t j| ||  }ld _  d.|d d  |l | }mt
|m d|d  }m|m _ td|d D ] }ad|k|a< td|d D ]}<|k|a  |h|a||< f 7  < qqi }nd _ t j| ||  }od _  d.|d d  |o | }pt
|p d|d  }p|p _ td|d D ] }ad|n|a< td|d D ]}<|n|a  |j|a||< f 7  < qqd _ dt
 t|kd  t|nd  }q|d|q  }r| |d j   }sd/ dd|r  ||   |s  }td/ dd|r  ||   |s  }ut
|t|u _ |d j  }v|d  |v |d   jd  }w |w }x|]|} || } || }	d|1d  | |x }yd|1d  |	 |x }zd _ d |1 |1d|   |1 |  }{d |1 |1d|   |1 |  }|t
|{||}}|}d  _ 	  |dt|1d td|d d0\}~}d _ t|~| }t|k| |y }t
d| dd| d1|    }| _ i }td|d D ]}a|~|a |k|a |y  ||a< q:d _ t|| }t|n| |z }t
d| dd| d1|    }| _ i }td|d D ]}a||a |n|a |z  ||a<  ||a ||a< qy| _ ||fS )2Nr   r   r         @rO   r   r   r   5U@`<@Y?r         ?      9@2Riemann-Siegel can not compute with such precisionr              s@     ,      r   r   r   r         r   r   r   r   r   r   r   r   r   r   r   r   r   r   ru   r   r   r   r   r   r   r   r   r   z1.0ru   D         ?c                    .    j }|d  _  | d j  }| _ |S Nr   r   r$   r   twpaar   r   r   trunc_a0  
   
zRzeta_simul.<locals>.trunc_a皙@r   T   )r   _im_rer$   r   r^   r   mathpowgammar   absNotImplementedErrorr\   rc   r_   r    floorr!   rC   rN   copyrP   r   r"   r#   binomialexpj_zetasumintconj)r   sder	wpinitialr   xsigmaysigmarT   xasigmayasigmaxA1yA1r'   eps1xeps2yeps2xbxcrR   rU   ybycyAyB1rV   yLLxeps3yeps3rS   yeps4r[   yMMrb   h4r&   jvalueeps5xforeps5yforeps5rY   xaux1yaux1rW   rX   twentyauxwpfpNpnum
differenceeps6cccontpipowersFpr.   sumPr7   xwpdd1xd2xconstxd3xpsigmaxdm1c1c2c3raddr<   ywpdyd2yconstyd3ypsigmaydxwptcoefxwptermxc2xc4xc3ywptcoefywptermyc2yc4yc3	xfortcoefellr   xtcoefr   lachitcoefter	yfortcoefytcoefavxtvytvxtermteytermxrssumxrsboundxwprssumyrssumyrsboundywprssumA2eps8Txwps3ywps3tpiargUxS3yS3xwpsumywpsumwpsumxS1yS1xabsS1xabsS2xwpendxrzyabsS1yabsS2ywpendyrzr   r   r   Rzeta_simul   s  

,,
.,
BB





 
*

.(*,  


X<&: 0P,(*,  


X<&: 0P,
$(6$$6
<*
*
<*
*
$
$
	
	  *(($,,

($$r  c           \   
      s  t |} j} |} |}d _ |d j  } ||} d |d }	 d| }
|
d }|
|	 d }d _|dkrZd}t	d|d	 }t	d|}d}nd
}t	d| d	 }t	d| }d}d _d}d|  
|d   || |  |kr|d }d|  
|d   || |  |kst d|}d| d| | d ksd| d | dk st||d kr| _td|d|  }|d|  }t |||||}i }t|d| d D ]}d||< q|d|  } j j | |  d tj tj }| ||d  |d d  | }t||}d}d j |  
|d  }||krM|d }d j | | }||ks;i }tjtj | | }tddD ],}t	||d d|  } 
|d  
|d d  } t| } ||  | ||< q^td| d dd }!d| }" d| }#td|!D ]}t |# |" 
|d  ||  }#q|# | d  _ |d j  } |}$dd||$   }% |% d|#  }&|% d|#  |& }'|'dk r|&}&n|&d }& |& d|#   }% d j | 
|d d |  }(i })i }*t ||(\}*}+|* })i }t|d| d D ]}d||< q=|# _td|d D ]<}d},td| | d ddD ]}-|,|% |)|-  },q_|,||< tdd| | d D ]}-|-d |)|-d   |)|-< qzqOi }.t d d| | }/d dt| |   | d }0 d j j | | | |  d }1td|D ] }   
|d  ||1  |0 }2t |2|/|.|< q|.d d  _dd|  }3i }4d|4d< d|4d < d|4d!< d|4d"< d|4d#< d|4d$< d|4d%< d|4d&< td|D ]}|.| d  _tdd| d d D ]}-d| d|-  }|dkr j| }5|5d }6|3|5 d }7|d  }8|8|4d|d |-d f  |6|4d|d |-f   |7|4d|d |-d f   |4d||-f< q1d|4d||-f< td|-D ]0}9|4d||9f  j d|- d|9    |-|9   }:|4d||-f  d|-|9  |: 8  < qq1d|4d|d'f< d|4d|df< d|4d|d| d d f< qtd'|d D ]=};td'|D ]4}td(t dd| d d D ]"}-|;dk s|dk s|-dk s|-d| d krd|4|;||-f< qqqtd|d D ]^};td|D ]U}|.| d  _tdd| d d D ]?}-d|; d |4|;d |d |-d f  d|| d  |4|;d |d |-d f   }"|"|4|;d |d |-d f  |4|;||-f< qCq/q(i }<i }=d _ d|d  }6 d)|d  | }7 || t j d }>td|D ]@}-|7|-|>    |-d d  }8t |6|8 | d d d |<|-< t |6 |d |8  | d d d |=|-< qi }?|D ]"};td|D ]}-td'd|- d d D ]
}@d|?|;|-|@f< qqq|D ]Q};td|D ]H}-|<|-  _tdd|- d d D ]4}@|4|;|-|@f |d|- d|@    |+d|- |@   |?|;|-|@f< |?|;|-|@f d j |@  |?|;|-|@f< q9q'q  fd*d+}Ai }B|D ]"}Ctd|D ]}-td'd|- d d D ]
}@d|B|C|-|@f< qqq||<d d  _|A|}D |D }E|D ]P}Ctd|D ]G}-|<|-  _tdd|- d d D ]3}@d|B|C|-|@f< td|Cd D ]!}; |C|;|E|;  |?|C|; |-|@f  }F|B|C|-|@f  |F7  < qېqːqq|<d d  _i }Gd|Gd< |Gd | |Gd< |<d  _td|D ]}-|G|-d  |Gd  |G|-< q"i }H|D ]0}Ctd|D ]'}-|<|-  _tdd|- d d D ]}@|B|C|-|@f |G|-  |H|C|-|@f< qOq=q6i }I|D ]1}Ctd|D ](}|=|  _d}Jtdd| d d D ]}-|J|H|C||-f 7 }Jq|J|I|C|f< qrqki }Kd _t j| ||  }Ld _ d,|d d  |L | }Mt |M d|d  }M|M _|D ] }Cd|K|C< td|d D ]}-|K|C  |I|C||- f 7  < qސqd _d |Kd  }N|
d|N  }O| |d j   }Pd- dd|O  ||   |P  }Q|Q _|d j  }R|d  |R |d   jd  }S |S }T|A|} || }d|$d  | |T }Ud _d |$ |$d|   |$ |  }V|Vd  _	  |dt|$d |d }Wd _t|W| }Xt|K| |U }Yt d| dd|X d.|Y    }Z|Z _i }[|D ]}C|W|C |K|C |U  |[|C< q| _|[S )/a  
    Computes several derivatives of the auxiliary function of Riemann `R(s)`.

    **Definition**

    The function is defined by

    .. math ::

        \begin{equation}
        {\mathop{\mathcal R }\nolimits}(s)=
        \int_{0\swarrow1}\frac{x^{-s} e^{\pi i x^2}}{e^{\pi i x}-
        e^{-\pi i x}}\,dx
        \end{equation}

    To this function we apply the Riemann-Siegel expansion.
    r   r   r   rd   rO   r   r   r   re   rf   rg   r   rh   ri   rj   r   r]   rk   rl   rm   rn   ro   rp   rq   r   r   r   rr   rs   r   rt   rv   rw   rx   ry   rz   r{   r|   ru   r}   r~   c                    r   r   r   r   r   r   r   r     r   zRzeta_set.<locals>.trunc_ar   r   r   )r   r   r   r   r$   r   r^   r   r   r   r   r   r   r\   r    er_   r   r!   rC   rN   r   rP   r   r"   r#   r   r   r   r   )\r   r   derivativesr   r   r   sigmarT   asigmaA1r'   r   eps2br>   AB1r   eps3eps4r   r   r.   r`   ra   rb   r&   r   r   foreps5rY   rW   rX   r   r   r   r   r   r   r   r   r   r   r   r   r7   wpdr   d2constd3psigmadr   r   r   r   r   r   r<   wptcoefwptermc4fortcoefr   r   tcoefr   r   r   r   r   tvtermr   rssumrsboundwprssumr   r   r   wps3r   r   r   S3r  S1absS1absS2wpendrzr   r   r   	Rzeta_set  s  

,,
<
*$


 
*

((*,  


X8&: 0P,
$$6
<*


$
	 ($,
$r2  c                 C   sl  |  d| j|  }| j}d| _|d| j  }|d | d|d  | |  }|d | d| | |  }|| _| |}|| _t| |t|d }	|dkrg| 	| 
d|d d | | jd  }
|dkr{| 	| j| 
d|d  d	 }|dkr| 	| 
d|d  d
 }|dkr| 	| j | 
d|d  d }| |}|dkrd| |	d  }|dkrd| }||
|	d  |	d   }|dkrd| }| d|	d  |
 |	d |
d   |	d  | j|	d  |   }|dkr2d| }d|	d  |
d  |	d |
d   d|
 |	d   }||d|	d  |  d|	d  |
 |  |	d  |	d |   }|d	krd| }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  |  }|| }|| _| 	|S )z-
    z_half(t,der=0) Computes Z^(der)(t)
    0.5r   r   r   r   r   rk   r   r   rs                     @y                            @r                 (@              @)r!   r#   r   r   r   rP   siegelthetar2  r    r   psir   )r   r   r   r   r   ttwpthetawpzthetar1  ps1ps2ps3ps4expthetazzfr   r   r   z_halfr  sF   $ 
2($*
@
4@
8TR
rF  c                 C   s  | j }| |}| |}d| _ |dkr| t|}nd| j |d  td| d|   }|dkr@d| |d| j   }nd| | }td| }d| t| }	tdd| 	| }
d| 	d	| d
| |  d| | |	   | d }t|
|}
tdd| 	d| |  | d }d| 	dd|   | d }|| _ | 
|| j|| d   }|dkr| | d|d d | | jd  }|dkr| | d|d  d }|dkr| | d|d  d }|dkr| | d|d d }|| _ t| |t|d }i }td|d D ]}| || ||< q|
| _ | d| }|dkr=|d ||d   }|dkrW|d  d|d  |  }|d ||  }|dkrd|d  | d|d  |d   |d  d|d  |  }|d ||  }|dkrd|d  |d  d|d  |d   d|d  |  d|d  |  }|d|d  | |  |d  d|d  |  }|d ||  }|dkrJd|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 ||  }|| _ |S )z?
    zeta_half(s,k=0) Computes zeta^(k)(s) when Re s = 0.5
    5   r   r   r   rh   r   r   r   (\ @3333335@?皙@皙?r3  rs   r4  ru   r5  r8  r7                       H@rk   )r   r   r   r$   r   r   r   logr   r   r9  r#   r!   r:  rP   r2  r    r   r   )r   r   r7   r   r  r   XM1abstr   wpbasicwpbasic2r<  wpRr>  r?  r@  rA  rB  r	  r  r   rC  zvzv1r   r   r   	zeta_half  sd   

&6
$2$$$


<
H0
<0H0rZ  c                 C   s*  | j }| |}| |}d| _ |dkr| t|d}n| d| j |d | td| d|  }|dkrEd| |d| j   }nd| | }d| dkr^d| |d| j   }nd| | d| j |  | t||d  }td| }	d|	 t|	 }
t	dd| 
| }d| 
d	| d
| |  d| | |
   | d }t	||}t	dd| 
d| |  | d }d| 
dd|   | d }|| _ | || j|| d   }|}| d| }|| _ t| ||\}}|dkr| d|d | dd| d  d | | jd  }|dkr3| j| d|d | dd| d   d }|dkrM| d|d | dd| d   d }|dkrj| j | d|d | dd| d   d }|| _ | d| }|dkr|d ||d   }|dkr|d  d|d  |  }|d ||  }|dkrd|d  | d|d  |d   |d  d|d  |  }|d ||  }|dkrd|d  |d  d|d  |d   d|d  |  d|d  |  }|d|d  | |  |d  d|d  |  }|d ||  }|dkrd|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 ||  }|| _ |S )z+
    Computes zeta^(k)(s) off the line
    rG  r   rh   r   r   r   r   r   rH  rI  rJ  rK  rL  r3  rs   r4  rN  ru   r5  rM  r8  r7  rO  rP  rk   )r   r   r   r^   r   r   r$   r   rQ  r   r   r9  r#   r!   r   r  r:  rP   r   )r   r   r7   r   r  r   rR  rS  M2rT  r   rU  rV  r<  rW  r>  s1s2r	  r  r?  r@  rA  rB  rC  rX  rY  r   r   r   zeta_offline  sh   

.06
$B84:


<
H0
<0H0r^  c              	   C   sz  |  d| j|  }|}| d| }| j}d| _| |dkr7d| | |d| j   }| t|}n"d| j | |d  td| d| |   }d| | | }| |dkrpd| | |d| j   }	n d| | d| j | |d   td| d| |   }	dt| 	| }
| |}|||	  }d| }t
d	d| |
 | |d
d|
   | }t
d| d| | }| d| | }|| _| 	|}|| _t| ||\}}dd|  }dd|  }|dkrd| d|| d|  | | jd  }|dkr d| d|| d|  }|dkr3d| d|| d|  }|dkrFd| d|| d|  }|| _| |}|dkr_||d  |d |  }| j}|dkr|| |d |d |   ||d |d |   |  }|dkr|d|d  | |d |d   |d  ||d  |   }|d|d  | |d |d   |d  ||d  |  |  }|dkrKd|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kr8d|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|d  | |  }||d  ||d  |  }|| ||  }|| _|S )z8
    Computes Z(w) and its derivatives off the line
    r3  r   #   r   r   rh   r   r   r      gRQ @g      ?y              ?y              ?g      y             ru   r}   r6  r7  r8  )r!   r#   r   r   r   r$   r   r   r   r9  r   r   r  r:  rP   r   )r   r0   r7   r   r\  r]  r   rS  rR  r[  r   rW   rX   rZ   rU  r<  rW  r>  r	  r  ptaptbr?  r@  rA  rB  rC  rX  r#   rY  zv2r   r   r   	z_offline  st   2 @
,
6&&&


8
<@
H4H4
8@L8@Lrd  c                 K   sr   |dkrt | |}| |}| |}|dk r'| | | ||}|S |dk}|r3t| ||S t| ||S )Nr   r   rh   )r   rC   r   r   r   rs_zetarZ  r^  )r   r   
derivativekwargsreimrD  critical_liner   r   r   re  b  s   
re  c                 C   sX   |  |}| |}| |}|dk rt| | |S |dk}|r&t| ||S t| ||S )Nr   )rC   r   r   rs_zrF  rd  )r   r0   rf  rh  ri  rj  r   r   r   rk  q  s   
rk  )r   )__doc__r   objectr   	functionsr   r?   rN   r\   rc   r  r2  rF  rZ  r^  rd  re  rk  r   r   r   r   <module>   s0    2v
    
  
v
(
>
BH