B
    bdh                 @   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   d/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/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   s  |d }|d }t | d|d  d| d | | }| d| }t | d| | |d | }|| _i }| j|d< | j|d	< x0tdd| d	 D ]}	||	d	  | j ||	< qW |d | _i }
i }xXtd|d	 D ]F}	d
|	 | d|	  }| || d|	  }||d|	   |
|	< qW xHtdd| d	 D ]2}	| j| |	 }|d|	  }|||	  ||	< q:W d| _d| | }i }xtd|d	 D ]}	d| _t | d|	d  d|	 | }|| _d}x@td|	d	 D ].}|d
| |
|  |d|	 d|    7 }qW d
|	d	  | j	 | ||	< qW i }xtd|d	 D ]~}	d| _t | d|	d  d|	 | }|| _d}x>td|	d	 D ],}|| j	|	|  |
|  ||	|   7 }qW |||	< qBW d| _d| | }t dd| | }|| _| 
| dd }| dd }i }xRtd|D ]D}	d| _t dd|	 | }|| _|||	  |||	   |d|	 < q"W x"td	d| dD ]}	d||	< q|W ||||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}
       g       @r            (   r   r      	      2g      ?)maxmagZ	_eulernumpreconepirangempffacjsqrtZexpjpi)r   JepsZnewJZneweps6ZwpvwEZwppiZpipowernvwvawaZwpp1aZP1Zwpp1ZsumpkZP2Zwpp2Zwpc0Z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 d | j_X   jk	rt 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   s    | ]\}}|  |fV  qd S )N)convert).0r*   r&   )r   r   r   	<genexpr>   s    zcoef.<locals>.<genexpr>c             3   s    | ]\}}|  |fV  qd S )N)r/   )r0   r*   r&   )r   r   r   r1      s    )r   Z_mpr   r.   dictitems)r   r"   r#   _cacheorigdatar   )r   r   coef   s    

""r7   c             C   s   d| | }|  |}d|  | j |  | |  | d |  d| j d  }d| d }| |d | |d d  d | |d d  }	xZ||| |	 k r|dkr|d }| |d | |d d  d | |d d  }	qW |}
|
S )Ngbk5_@r   r   r   g      @g       @)lnr   Zloggamma)r   xAxeps4axB1xLaux1aux2maux3xMr   r   r   aux_M_Fp   s    
<6:rC   c       	      C   sJ   |d|  }|| d }||  ||d  |d d  | }t||}|S )Nix  gJR_@r   r   r   )powermin)	r   r9   r:   r;   r<   rB   h1h2h3r   r   r   aux_J_needed   s
    $
rI   c          
      s   j } |} |}d| }d _  |d j  }|| }|| }	 d |d }
 d |	d } d| }|d }||
 d }|| d }d _ |dkrd}td|d	 }td|}d}n(d
}td| d	 }td| }d}|dkr2d}td|d	 }td|}d}n(d
}td| d	 }td| }d}d _ d}x<d|  	|d   || |  |kr|d }qfW t
d|}d}x<d|  	|d   || |  |kr|d }qW t
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r| _ tdt
||}|d|  }|d|  }|d|  }|d|  }t |||||}t |||||} t
|| }!t |||||}"t ||||| }#t|"|#}"d}$d j |$  	|$d  }%x*|%|"krj|$d }$d j |% |$ }%qBW i }&tjtj | | }'tjtj | | }(xtddD ]})t|'|)d d|  }*t|(|)d d|  }+t|*|+}, 	|)d  	|)d d  }-t|-}-|,|- t|| |&|)< qW td| d dd }.d|$ }/ d|$ }0x:td|.D ],})t
|0 |/ 	|)d  |&|)  }0q`W |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 }9x$t|!d| d D ]}:d|9|:< qW i }9|0 _ xtd|!d D ]})d};x2td|$ |) d ddD ]}<|;|2 |6|<  };qW |;|9|)< x8tdd|$ |) d D ]}<|<d |6|<d   |6|<< q W qW i }=t
d d| | }>d dt| |   | d }? d j j | | | |  d }@xNt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&< xtd|D ]}:|=|: d  _ x<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< nd|Cd|:|<f< xrtd|<D ]d}H|Cd|:|Hf  d' d|< d|H    |<|H   }I|Cd|:|<f  d|<|H  |I 8  < qXW qW d|Cd|:d(f< d|Cd|:df< d|Cd|:d|: d d f< qrW xtd(|d D ]}Jxztd(|D ]l}:xdtd)t
dd|: d d D ]D}<|Jdk 	sx|:dk 	sx|<dk 	sx|<d|: d k	rDd|C|J|:|<f< 	qDW 	q"W 	qW xtd|d D ]}Jxtd|D ]}:|=|: d  _ xt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< 	qW 	qW 	qW i }Kt
d d| | }>d dt| |   | d }L d j j | | | |  d }MxNtd|D ]@}:   	|:d  |:|M  |L }Nt
|N|>|K|:< 
qW |Kd d  _ dd|  }Oi }Pd|Pd< d|Pd < d|Pd!< d|Pd"< d|Pd#< d|Pd$< d|Pd%< d|Pd&< xtd|D ]}:|K|: d  _ x<tdd|: d d D ] }<d|: d|<  })|)dkrf 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< nd|Pd|:|<f< xrtd|<D ]d}H|Pd|:|Hf  d' d|< d|H    |<|H   }I|Pd|:|<f  d|<|H  |I 8  < qW qW d|Pd|:d(f< d|Pd|:df< d|Pd|:d|: d d f< qW xtd(|d D ]}Jxztd(|D ]l}:xdtd)t
dd|: d d D ]D}<|Jdk s|:dk s|<dk s|<d|: d krld|P|J|:|<f< qlW qJW q:W xtd|d D ]}Jxtd|D ]}:|K|: d  _ xt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
W qW qW i }Qi }Rd _  d|d  }E d*|d  | }S || t j d }Txtd|D ]}<|S|<|T    |<d d  }Ut
|E|U | d d d d+ |Q|<< t
|E |d |U  | d d d |R|<< qW i }Vi }Wd _  d|d  }E d*|d  | }X || t j d }Yxtd|D ]}<|X|<|Y    |<d d  }Zt
|E|Z | d d d+ |V|<< t
|E |d |Z  | d d d |W|<< qW i }[x^td|d D ]L}JxDtd|D ]6}<x.td(d|< d d D ]}\d|[|J|<|\f< qW qW qxW xtd|d D ]}Jxtd|D ]}<|Q|<  _ xtdd|< d d D ]h}\|C|J|<|\f |9d|< d|\    |8d|< |\   |[|J|<|\f< |[|J|<|\f d j |\  |[|J|<|\f< qW qW qW  fd,d-}]i }^x^td|d D ]L}JxDtd|D ]6}<x.td(d|< d d D ]}\d|^|J|<|\f< qW qW qW t
|Qd |Vd d  _ |]|}_ |_ }`xtd|d D ]}axtd|D ]}<|Q|<  _ xtdd|< d d D ]n}\d|^|a|<|\f< xXtd|ad D ]F}J |a|J |`|J |[|a|J |<|\f  }b|^|a|<|\f  |b7  < qW qhW qBW q2W i }cx^td|d D ]L}JxDtd|D ]6}<x.td(d|< d d D ]}\d|c|J|<|\f< q&W q
W qW xtd|d D ]}Jxtd|D ]}<|V|<  _ xtdd|< d d D ]h}\|P|J|<|\f |9d|< d|\    |8d|< |\   |c|J|<|\f< |c|J|<|\f d j |\  |c|J|<|\f< qW qjW qZW i }dx^td|d D ]L}axDtd|D ]6}<x.td(d|< d d D ]}\d|d|a|<|\f< qHW q,W qW xtd|d D ]}axtd|D ]}<|V|<  _ xtdd|< d d D ]n}\d|d|a|<|\f< xXtd|ad D ]F}J |a|J |`|J |c|a|J |<|\f  }b|d|a|<|\f  |b7  < qW qW qW q|W t
|Qd |Vd d  _ i }ed|ed< |ed | |ed< t
|Qd |Vd  _ x,td|D ]}<|e|<d  |ed  |e|<< qW i }fxztd|d D ]h}ax`td|D ]R}<|Q|<  _ x@tdd|< d d D ]&}\|^|a|<|\f |e|<  |f|a|<|\f< qW qW qW i }gxztd|d D ]h}ax`td|D ]R}<|V|<  _ x@tdd|< d d D ]&}\|d|a|<|\f |e|<  |g|a|<|\f< qpW qJW q:W i }hx|td|d D ]j}axbtd|D ]T}:|R|:  _ d}ix2tdd|: d d D ]}<|i|f|a|:|<f 7 }iqW |i|h|a|:f< qW qW i }jx|td|d D ]j}axbtd|D ]T}:|W|:  _ d}ix2tdd|: d d D ]}<|i|g|a|:|<f 7 }iqvW |i|j|a|:f< qLW q<W i }kd _ t j| ||  }ld _  d.|d d  |l | }mt
|m d|d  }m|m _ xVtd|d D ]D}ad|k|a< x4td|d D ]"}<|k|a  |h|a||< f 7  < q:W qW i }nd _ t j| ||  }od _  d.|d d  |o | }pt
|p d|d  }p|p _ xVtd|d D ]D}ad|n|a< x4td|d D ]"}<|n|a  |j|a||< f 7  < qW qW d _ 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 }x0td|d D ]}a|~|a |k|a |y  ||a< qVW d _ t|| }t|n| |z }t
d| dd| d1|    }| _ i }xBtd|d D ]0}a||a |n|a |z  ||a<  ||a ||a< qW | _ ||fS )2Nr   r   r   g      @g      @r   g       @r   g5U@g`<@gY?r   g      ?g      9@z2Riemann-Siegel can not compute with such precisionr         g     s@   i  ,      r   r   r   r         r   )r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   rQ   )r   r   r   )r   r   r   )r   r   r   z1.0rQ   D   g      ?c                s.    j }|d  _  | d j  }| _ |S )Nr   )r   r!   r   )twpaa)r   r   r   trunc_a0  s
    
zRzeta_simul.<locals>.trunc_ag@r   T   )r   _im_rer!   r   rD   r   mathpowgammar   absNotImplementedErrorrC   rI   rE   r   floorr   r/   r7   copyr8   r   r   r    binomialexpj_zetasumintconj)r   sder	wpinitialrT   ZxsigmaZysigmar;   ZxasigmaZyasigmaZxA1ZyA1r#   eps1Zxeps2Zyeps2xbZxcr9   r<   ZybZycZyAZyB1r=   ZyLLZxeps3Zyeps3r:   Zyeps4rB   ZyMMrH   Zh4r"   jvalueeps5Zxforeps5Zyforeps5r@   Zxaux1Zyaux1r>   r?   twentyauxwpfpNpnum
differenceeps6cccontpipowersFpr%   sumPr*   Zxwpdd1Zxd2ZxconstZxd3ZxpsigmaZxdm1c1c2c3raddr+   ZywpdZyd2ZyconstZyd3ZypsigmaZydZxwptcoefZxwptermZxc2Zxc4Zxc3ZywptcoefZywptermZyc2Zyc4Zyc3Z	xfortcoefellrW   ZxtcoefrV   lachitcoefterZ	yfortcoefZytcoefavZxtvZytvZxtermteZytermZxrssumZxrsboundZxwprssumZyrssumZyrsboundZywprssumA2eps8TZxwps3Zywps3tpiargUZxS3ZyS3ZxwpsumZywpsumwpsumZxS1ZyS1ZxabsS1ZxabsS2ZxwpendxrzZyabsS1ZyabsS2Zywpendyrzr   )r   r   Rzeta_simul   s   


0
0
BB



 
,

.$(*,       


V<.   "0 P:(*,       


V<.   "0 P:$(8$$8 
<8 
*. 
<8 
*.
2
2

((*(($,,

($$r   c       \   
      s  t |} j} |} |}d _ |d j  } ||} d |d }	 d| }
|
d }|
|	 d }d _|dkrd}t	d|d	 }t	d|}d}n(d
}t	d| d	 }t	d| }d}d _d}x:d|  
|d   || |  |kr |d }qW t d|}d| d| | d ksnd| d | dk snt||d kr|| _td|d|  }|d|  }t |||||}i }x$t|d| d D ]}d||< qW |d|  } j j | |  d tj tj }| ||d  |d d  | }t||}d}d j |  
|d  }x*||kr~|d }d j | | }qVW i }tjtj | | }xftddD ]X}t	||d d|  } 
|d  
|d d  } t| } ||  | ||< qW td| d dd }!d| }" d| }#x:td|!D ],}t |# |" 
|d  ||  }#q8W |# | d  _ |d j  } |}$dd||$   }% |% d|#  }&|% d|#  |& }'|'dk r|&}&n|&d }& |& d|#   }% d j | 
|d d |  }(i })i }*t ||(\}*}+|* })i }x$t|d| d D ]}d||< qjW |# _xtd|d D ]}d},x2td| | d ddD ]}-|,|% |)|-  },qW |,||< x8tdd| | d D ]}-|-d |)|-d   |)|-< qW qW i }.t d d| | }/d dt| |   | d }0 d j j | | | |  d }1xNtd|D ]@}   
|d  ||1  |0 }2t |2|/|.|< qW |.d d  _dd|  }3i }4d|4d< d|4d < d|4d!< d|4d"< d|4d#< d|4d$< d|4d%< d|4d&< xtd|D ]}|.| d  _x8t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< n~d|4d||-f< xntd|-D ]`}9|4d||9f  j d|- d|9    |-|9   }:|4d||-f  d|-|9  |: 8  < q&W qnW d|4d|d'f< d|4d|df< d|4d|d| d d f< q@W xtd'|d D ]};xztd'|D ]l}xdtd(t dd| d d D ]D}-|;dk sB|dk sB|-dk sB|-d| d krd|4|;||-f< qW qW qW xtd|d D ]};xtd|D ]}|.| d  _xt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< qW qW qrW i }<i }=d _ d|d  }6 d)|d  | }7 || t j d }>xtd|D ]}-|7|-|>    |-d d  }8t |6|8 | d d d |<|-< t |6 |d |8  | d d d |=|-< 	qW i }?xT|D ]L};xDtd|D ]6}-x.td'd|- d d D ]}@d|?|;|-|@f< 
qTW 
q8W 
q(W x|D ]};xtd|D ]}-|<|-  _xtdd|- d d D ]h}@|4|;|-|@f |d|- d|@    |+d|- |@   |?|;|-|@f< |?|;|-|@f d j |@  |?|;|-|@f< 
qW 
qW 
q~W  fd*d+}Ai }BxT|D ]L}CxDtd|D ]6}-x.td'd|- d d D ]}@d|B|C|-|@f< qnW qRW qBW |<d d  _|A|}D |D }Ex|D ]}Cxtd|D ]}-|<|-  _xtdd|- d d D ]j}@d|B|C|-|@f< xTtd|Cd D ]B}; |C|;|E|;  |?|C|; |-|@f  }F|B|C|-|@f  |F7  < qW qW qW qW |<d d  _i }Gd|Gd< |Gd | |Gd< |<d  _x,td|D ]}-|G|-d  |Gd  |G|-< qW i }Hxp|D ]h}Cx`td|D ]R}-|<|-  _x@tdd|- d d D ]&}@|B|C|-|@f |G|-  |H|C|-|@f< qW qW qW i }Ixr|D ]j}Cxbtd|D ]T}|=|  _d}Jx2tdd| d d D ]}-|J|H|C||-f 7 }JqW |J|I|C|f< q\W qLW i }Kd _t j| ||  }Ld _ d,|d d  |L | }Mt |M d|d  }M|M _xL|D ]D}Cd|K|C< x4td|d D ]"}-|K|C  |I|C||- f 7  < q@W q$W d _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 }[x&|D ]}C|W|C |K|C |U  |[|C< qW | _|[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   g      @g      @r   g       @r   g5U@g`<@gY?r   g      ?g      9@z2Riemann-Siegel can not compute with such precisionr   ix  rJ   rK   g     s@rL   i  rM   rN   r   r   r   rO   rP   r   )r   r   rQ   )r   r   r   )r   r   r   )r   r   r   )r   r   rQ   )r   r   r   )r   r   r   )r   r   r   rQ   rR   rS   c                s.    j }|d  _  | d j  }| _ |S )Nr   )r   r!   r   )rT   rU   rV   )r   r   r   rW     s
    
zRzeta_set.<locals>.trunc_ag@r   rX   )r   r   rY   rZ   r!   r   rD   r   r[   r\   r]   r^   r_   rC   r   erE   r`   r   r/   r7   ra   r8   r   r   r    rb   rc   rd   re   )\r   rg   Zderivativesrh   ri   rT   sigmar;   ZasigmaA1r#   rj   Zeps2br-   AZB1rl   Zeps3Zeps4rm   r{   r%   rF   rG   rH   r"   rn   ro   Zforeps5r@   r>   r?   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r|   r*   Zwpdr}   Zd2constZd3Zpsigmadr~   r   r   r   r   r   r+   ZwptcoefZwptermZc4Zfortcoefr   rW   Ztcoefr   rV   r   r   r   tvtermr   ZrssumZrsboundZwprssumr   r   r   Zwps3r   r   r   ZS3r   ZS1ZabsS1ZabsS2Zwpendrzr   )r   r   	Rzeta_set  s   

0
B*$
 
,

($(*,       


V8.   "0 P:$$8
 

<8
 

.


2


(($,
$
r   c             C   sv  |  d| j|  }| j}d| _|d| j  }|d | d|d  | |  }|d | d| | |  }|| _| |}|| _t| |t|d }	|dkr| 	| 
d|d d | | jd  }
|dkr| 	| j| 
d|d  d	 }|dkr| 	| 
d|d  d
 }|dkrH| 	| j | 
d|d  d }| |}|dkrld| |	d  }|dkrd| }||
|	d  |	d   }|dkrd| }| d|	d  |
 |	d |
d   |	d  | j|	d  |   }|dkrnd| }d|	d  |
d  |	d |
d   d|
 |	d   }||d|	d  |  d|	d  |
 |  |	d  |	d |   }|d	krfd| }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)
    z0.5r   r   r   r   g      ?rJ   r   r   rP      y               @y              y              @r   y              (@y              @)r   r    r   r   r   r8   siegelthetar   r   rZ   psirc   )r   rT   rh   rg   ri   ttwpthetaZwpzthetar   ps1ps2ps3ps4expthetazzfr   r   r   z_halfr  sN    $ 
 *  
 
 "



@
4@
8TRr   c             C   s  | j }| |}| |}d| _ |dkr8| t|}n&d| j |d  td| d|   }|dkrd| |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 }x*td|d D ]}| || ||< q6W |
| _ | d| }|dkr|d ||d   }|dkr|d  d|d  |  }|d ||  }|dkr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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?
    zeta_half(s,k=0) Computes zeta^(k)(s) when Re s = 0.5
    5   r   r   r   g      ?r   r   r   g(\ @g3333335@g?g@g?z0.5rP   r   rQ   y               @iy              @y              (@       y              H@rJ   )r   rZ   rY   r!   r^   r   r[   logr   r   r   r    r   r   r8   r   r   rf   rc   )r   rg   r*   ri   r   rT   XM1abstr   wpbasicwpbasic2r   wpRr   r   r   r   r   r   r   r   r   zvzv1r   r   r   	zeta_half  sl    

&6
$
 *
 
 
 


<
H0
<0H0r   c             C   s*  | j }| |}| |}d| _ |dkr:| t|d}n.| d| j |d | td| d|  }|dkrd| |d| j   }nd| | }d| dkrd| |d| j   }n0d| | 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rf| j| d|d | dd| d   d }|dkr| d|d | dd| d   d }|dkr| 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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 ||  }|| _ |S )z+
    Computes zeta^(k)(s) off the line
    r   r   g      ?r   r   r   r   r   g(\ @g3333335@g?g@g?z0.5rP   r   r   rQ   y               @iy              @y              (@r   y              H@rJ   )r   rZ   rY   rD   r^   r   r!   r[   r   r   r   r   r    r   rf   r   r   r8   rc   )r   rg   r*   ri   r   rT   r   r   M2r   r   r   r   r   r   r   s1s2r   r   r   r   r   r   r   r   r   r   r   r   zeta_offline  sp    

.06
$
 8
 .
 *
 0


<
H0
<0H0r   c          	   C   sz  |  d| j|  }|}| d| }| j}d| _| |dkrnd| | |d| j   }| t|}nDd| j | |d  td| d| |   }d| | | }| |dkrd| | |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rfd| d|| d|  }|dkrd| 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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krpd|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
    z0.5r   #   r   r   g      ?r   r   r      gRQ @g      ?y              ?y              ?g      y             rQ   rR   y              @y              (@y              @)r   r    rf   r   rZ   r!   rY   r   r^   r   r   r   r   r   r8   rc   )r   r'   r*   rg   r   r   ri   r   r   r   r   r>   r?   rA   r   r   r   r   r   r   ZptaZptbr   r   r   r   r   r   r    r   Zzv2r   r   r   	z_offline  s|    2 @
,

 ,
 
 
 


8
<@
H4H4
8@L8@Lr   c             K   sv   |dkrt | |}| |}| |}|dk rN| | | ||}|S |dk}|rft| ||S t| ||S d S )Nr   r   g      ?)r_   r/   rZ   rY   rf   rs_zetar   r   )r   rg   
derivativekwargsreimr   critical_liner   r   r   r   b  s    

 
r   c             C   s\   |  |}| |}| |}|dk r4t| | |S |dk}|rLt| ||S t| ||S d S )Nr   )r/   rZ   rY   rs_zr   r   )r   r'   r   r   r   r   r   r   r   r   q  s    

 
r   )r   )r   )r   )r   )r   )r   )r   )__doc__r[   objectr   Z	functionsr   r.   r7   rC   rI   r   r   r   r   r   r   r   r   r   r   r   r   <module>1   s.   v
    
  v
(
>
B
H