U
    ZÊ¹jh´  ã                   @   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   úV/var/www/html/bwave/python/venv/lib/python3.8/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   sv  |d }|d }t |  d|d  ¡d| d |  |¡ ƒ}|  d| ¡}t |  d| ¡|  |¡d | ƒ}|| _i }| j|d< | j|d	< tdd| d	 ƒD ]}	||	d	  | j ||	< qš|d | _i }
i }td|d	 ƒD ]F}	d
|	 |  d|	 ¡ }|  |¡|  d|	 ¡ }||d|	   |
|	< qÖtdd| d	 ƒD ]2}	| j|  |	¡ }|d|	  }|||	  ||	< �q0d| _d|  |¡ }i }td|d	 ƒD ]Ž}	d| _t |  d|	d  ¡d|	 | ƒ}|| _d}td|	d	 ƒD ].}|d
| |
|  |d|	 d|    7 }�qÌd
|	d	  | j	 | ||	< �qŠi }td|d	 ƒD ]z}	d| _t |  d|	d  ¡d|	 | ƒ}|| _d}td|	d	 ƒD ],}|| j	|	|  |
|  ||	|   7 }�qn|||	< �q,d| _d|  |¡ }t dd| | ƒ}|| _|  
|  d¡¡d }|  d¡d }i }td|ƒD ]D}	d| _t dd|	 | ƒ}|| _|||	  |||	   |d|	 < �qtd	d| dƒD ]}	d||	< �qZ||||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Ú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    *"


 , *$r0   c                    sÄ   ˆ j }||d kr.||d kr.|d |d fS ˆ jj}ztˆ j||ƒ}W 5 |ˆ j_X ˆ ˆ jk	r¢t‡ 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 r1   r2   r4   r   r   r   r6   Ï   s     )r   Z_mpr   r0   ÚdictÚitems)r   r$   r%   Ú_cacheÚorigÚdatar   r   r   ÚcoefÄ   s    

""r<   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 ¡ }	q”|}
|
S )Ngb—òk5„_@r   r   r   ç      @r   )Úlnr   Zloggamma)r   ÚxAÚxeps4ÚaÚxB1ÚxLÚaux1Úaux2ÚmÚaux3ÚxMr   r   r   Úaux_M_Fpß   s    
<68rI   c           	      C   sJ   |d|  }|| d }||   ||d  |d d ¡ | }t||ƒ}|S )Néx  gJ¤R”_@r   r   r   )ÚpowerÚmin)	r   r?   r@   rA   rB   rH   Úh1Úh2Úh3r   r   r   Úaux_J_neededí   s
    $
rP   c           ˆ   
      sâ  ˆ j }ˆ  |¡}ˆ  |¡}d| }dˆ _ ˆ  |dˆ j  ¡}|| }|| }	ˆ  dˆ  |¡d ¡}
ˆ  dˆ  |	¡d ¡}ˆ  d| ¡}|d }||
 d }|| d }dˆ _ |dkrÚd}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}d| ˆ  	|d ¡ ˆ  || | ¡ |k�rž|d }�qdt
d|ƒ}d}d| ˆ  	|d ¡ ˆ  || | ¡ |k�ræ|d }�q¬t
d|ƒ}d| d| | d k�std| d | dk �stt|ƒ|d k�std| d| | d k�std| d | dk �stt|ƒ|d k�r‚|ˆ _ tdƒ‚t
||ƒ}|d|  }|d|  }|d|  }|d|  }tˆ |||||ƒ}tˆ |||||ƒ} t
|| ƒ}!tˆ |||||ƒ}"tˆ ||||| ƒ}#t|"|#ƒ}"d}$dˆ j |$ ˆ  	|$d ¡ }%|%|"k�r`|$d }$dˆ j |% |$ }%�q8i }&tjtj | | }'tjtj | | }(tddƒD ]€})t |'|)d ¡d|  }*t |(|)d ¡d|  }+t|*|+ƒ},ˆ  	|)d ¡ˆ  	|)d d ¡ }-t |-¡}-|,|- t||ƒ |&|)< �q–td| d dƒd }.d|$ }/ˆ  d|$ ¡}0td|.ƒD ],})t
|0ˆ  |/ˆ  	|)d ¡ |&|)  ¡ƒ}0�qN|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|:< �q‚i }9|0ˆ _ td|!d ƒD ]x})d};td|$ |) d ddƒD ]}<|;|2 |6|<  };�qÊ|;|9|)< tdd|$ |) d ƒD ]}<|<d |6|<d   |6|<< �q �qªi }=t
dˆ  d| | ¡ƒ}>dˆ  dt|ƒ | ¡ ˆ  |¡ d }?ˆ  dˆ jˆ j | | | |  ¡d }@td|ƒD ]@}:ˆ  ˆ  ˆ  	|:d ¡¡¡ˆ  |:|@ ¡ |? }At
|A|>ƒ|=|:< �qœ|=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< n~d|Cd|:|<f< td|<ƒD ]d}H|Cd|:|Hf ˆ  d'¡ˆ  d|< d|H  ¡ ˆ  |<|H ¡  }I|Cd|:|<f  d|<|H  |I 8  < �q&�qpd|Cd|:d(f< d|Cd|:df< d|Cd|:d|: d d f< �qFtd(|d ƒD ]z}Jtd(|ƒD ]h}:td)t
dd|: d d ƒƒD ]D}<|Jdk �	s:|:dk �	s:|<dk �	s:|<d|: d k�	rd|C|J|:|<f< �	q�qæ�qØtd|d ƒD ]¼}Jtd|ƒD ]ª}:|=|: 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˜�	qp�	qbi }Kt
dˆ  d| | ¡ƒ}>dˆ  dt|ƒ | ¡ ˆ  |¡ d }Lˆ  dˆ jˆ j | | | |  ¡d }Mtd|ƒD ]@}:ˆ  ˆ  ˆ  	|:d ¡¡¡ˆ  |:|M ¡ |L }Nt
|N|>ƒ|K|:< �
q˜|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< n~d|Pd|:|<f< td|<ƒD ]d}H|Pd|:|Hf ˆ  d'¡ˆ  d|< d|H  ¡ ˆ  |<|H ¡  }I|Pd|:|<f  d|<|H  |I 8  < �q"�qld|Pd|:d(f< d|Pd|:df< d|Pd|:d|: d d f< �qBtd(|d ƒD ]z}Jtd(|ƒD ]h}:td)t
dd|: d d ƒƒD ]D}<|Jdk �s6|:dk �s6|<dk �s6|<d|: d k�rd|P|J|:|<f< �q�qâ�qÔtd|d ƒD ]¼}Jtd|ƒD ]ª}:|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”�ql�q^i }Qi }Rdˆ _ ˆ  d|d  ¡}Eˆ  d*|d  | ¡}Sˆ  || t ˆ j¡ ¡d }Ttd|ƒD ]„}<|S|<|T  ˆ  ˆ  |<d ¡¡d  }Ut
|E|Uˆ  |¡ d ƒd d d+ |Q|<< t
|Eˆ  |d ¡|U ˆ  |¡ d ƒd d |R|<< �qzi }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|<< �q^i }[td|d ƒD ]D}Jtd|ƒD ]2}<td(d|< d d ƒD ]}\d|[|J|<|\f< �q�q �qòtd|d ƒD ]¢}Jtd|ƒD ]�}<|Q|< ˆ _ tdd|< d d ƒD ]h}\|C|J|<|\f |9d|< d|\    |8d|< |\   |[|J|<|\f< |[|J|<|\f dˆ j |\  |[|J|<|\f< �qx�qT�qF‡ fd,d-„}]i }^td|d ƒD ]D}Jtd|ƒD ]2}<td(d|< d d ƒD ]}\d|^|J|<|\f< �q0�q�qt
|Qd |Vd ƒd ˆ _ |]|ƒ}_ˆ  |_¡ }`td|d ƒD ]¤}atd|ƒD ]’}<|Q|< ˆ _ tdd|< d d ƒD ]j}\d|^|a|<|\f< td|ad ƒD ]F}Jˆ  |a|J¡ˆ  |`|J¡ |[|a|J |<|\f  }b|^|a|<|\f  |b7  < �qÚ�qº�q–�qˆi }ctd|d ƒD ]D}Jtd|ƒD ]2}<td(d|< d d ƒD ]}\d|c|J|<|\f< �qh�qN�q@td|d ƒD ]¢}Jtd|ƒD ]�}<|V|< ˆ _ tdd|< d d ƒD ]h}\|P|J|<|\f |9d|< d|\    |8d|< |\   |c|J|<|\f< |c|J|<|\f dˆ j |\  |c|J|<|\f< �qÆ�q¢�q”i }dtd|d ƒD ]D}atd|ƒD ]2}<td(d|< d d ƒD ]}\d|d|a|<|\f< �qr�qX�qJtd|d ƒD ]¤}atd|ƒD ]’}<|V|< ˆ _ tdd|< d d ƒD ]j}\d|d|a|<|\f< td|ad ƒD ]F}Jˆ  |a|J¡ˆ  |`|J¡ |c|a|J |<|\f  }b|d|a|<|\f  |b7  < �qð�qÐ�q¬�qžt
|Qd |Vd ƒd ˆ _ i }ed|ed< |ed | |ed< t
|Qd |Vd ƒˆ _ td|ƒD ]}<|e|<d  |ed  |e|<< �q–i }ftd|d ƒD ]`}atd|ƒD ]N}<|Q|< ˆ _ tdd|< d d ƒD ]&}\|^|a|<|\f |e|<  |f|a|<|\f< �qú�qÖ�qÈi }gtd|d ƒD ]`}atd|ƒD ]N}<|V|< ˆ _ tdd|< d d ƒD ]&}\|d|a|<|\f |e|<  |g|a|<|\f< �qn�qJ�q<i }htd|d ƒD ]b}atd|ƒD ]P}:|R|: ˆ _ d}itdd|: d d ƒD ]}<|i|f|a|:|<f 7 }i�qæ|i|h|a|:f< �q¾�q°i }jtd|d ƒD ]b}atd|ƒD ]P}:|W|: ˆ _ d}itdd|: d d ƒD ]}<|i|g|a|:|<f 7 }i�q\|i|j|a|:f< �q4�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�qüi }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Ê�q°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 }ƒ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 ]0}a||a |n|a |z  |‡|a< ˆ  |‡|a ¡|‡|a< �q¢|ˆ _ |ƒ|‡fS )2Nr   r   r   ç      @r=   r   r   r   ç½5°U‚Å@çŸ`<@ç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   rb   ©r   r   r   ©r   r   r   ©r   r   r   z1.0rb   éýÿÿÿéD   ç      ø?c                    s.   ˆ j }|d ˆ _ ˆ  | dˆ j  ¡}|ˆ _ |S ©Nr   ©r   r#   r   ©ÚtZwpÚaar   r   r   Útrunc_a0  s
    
zRzeta_simul.<locals>.trunc_açš™™™™™@r   Té   )r   Ú_imÚ_rer#   r   rK   r   ÚmathÚpowÚgammar   ÚabsÚNotImplementedErrorrI   rP   rL   r   Úfloorr    r3   r<   Úcopyr>   r   r!   r"   ÚbinomialÚexpjÚ_zetasumÚintÚconj)ˆr   ÚsÚderÚ	wpinitialrp   ZxsigmaZysigmarA   ZxasigmaZyasigmaZxA1ZyA1r%   Úeps1Zxeps2Zyeps2ÚxbZxcr?   rB   ZybZycZyAZyB1rC   ZyLÚLZxeps3Zyeps3r@   Zyeps4rH   ZyMÚMrO   Zh4r$   ÚjvalueÚeps5Zxforeps5Zyforeps5rF   Zxaux1Zyaux1rD   rE   Ú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Úellrr   Zxtcoefrq   Ú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ä   


.
.
Bÿÿÿ




 
*

. (*,      


V<*   0P4(*,      


V<*   0P4$(6$$6
<2
*&
<2
*&
,
,

$$*(($,,

($$r¯   c           \   
      sh  t |ƒ}ˆ j}ˆ  |¡}ˆ  |¡}dˆ _ˆ  |dˆ j  ¡}ˆ  ||¡}ˆ  dˆ  |¡d ¡}	ˆ  d| ¡}
|
d }|
|	 d }dˆ _|dkr´d}t 	d|¡d	 }t 	d|¡}d}n(d
}t 	d| ¡d	 }t 	d| ¡}d}dˆ _d}d| ˆ  
|d ¡ ˆ  || | ¡ |k�r|d }qæt d|ƒ}d| d| | d k�sjd| d | dk �sjt|ƒ|d k�rx|ˆ _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�rt|d }dˆ j | | }�qLi }tjtj | | }tddƒD ]X}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||< �qT|#ˆ _td|d ƒD ]x}d},td| | d ddƒD ]}-|,|% |)|-  },�q˜|,||< tdd| | d ƒD ]}-|-d |)|-d   |)|-< �qÎ�qxi }.t dˆ  d| | ¡ƒ}/dˆ  dt|ƒ | ¡ ˆ  |¡ d }0ˆ  dˆ jˆ j | | | |  ¡d }1td|ƒD ]@}ˆ  ˆ  ˆ  
|d ¡¡¡ˆ  ||1 ¡ |0 }2t |2|/ƒ|.|< �qj|.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< nzd|4d||-f< td|-ƒD ]`}9|4d||9f ˆ jˆ  d|- d|9  ¡ ˆ  |-|9 ¡  }:|4d||-f  d|-|9  |: 8  < �qô�q>d|4d|d'f< d|4d|df< d|4d|d| d d f< �qtd'|d ƒD ]z};td'|ƒD ]h}td(t dd| d d ƒƒD ]D}-|;dk �s|dk �s|-dk �s|-d| d k�rÐd|4|;||-f< �qÐ�q°�q¢td|d ƒD ]¼};td|ƒD ]ª}|.| 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< �qb�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 |=|-< �	qHi }?|D ]D};td|ƒD ]2}-td'd|- d d ƒD ]}@d|?|;|-|@f< �	qú�	qà�	qÒ|D ]¢};td|ƒD ]�}-|<|- ˆ _tdd|- d d ƒD ]h}@|4|;|-|@f |d|- d|@    |+d|- |@   |?|;|-|@f< |?|;|-|@f dˆ j |@  |?|;|-|@f< �
qN�
q*�
q‡ fd*d+„}Ai }B|D ]D}Ctd|ƒD ]2}-td'd|- d d ƒD ]}@d|B|C|-|@f< �
qü�
qâ�
qÔ|<d d ˆ _|A|ƒ}Dˆ  |D¡ }E|D ] }Ctd|ƒD ]Ž}-|<|- ˆ _tdd|- d d ƒD ]f}@d|B|C|-|@f< td|Cd ƒD ]B};ˆ  |C|;¡|E|;  |?|C|; |-|@f  }F|B|C|-|@f  |F7  < �q’�qr�qN�q@|<d d ˆ _i }Gd|Gd< |Gd | |Gd< |<d ˆ _td|ƒD ]}-|G|-d  |Gd  |G|-< �q i }H|D ]`}Ctd|ƒD ]N}-|<|- ˆ _tdd|- d d ƒD ]&}@|B|C|-|@f |G|-  |H|C|-|@f< �qz�qV�qHi }I|D ]b}Ctd|ƒD ]P}|=| ˆ _d}Jtdd| d d ƒD ]}-|J|H|C||-f 7 }J�qè|J|I|C|f< �qÀ�q²i }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˜�q~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 }[|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   rQ   r=   r   r   r   rR   rS   rT   r   rU   rV   rW   r   rJ   rX   rY   rZ   r[   r\   r]   r^   r   r   r   r_   r`   r   ra   rc   rd   re   rf   rg   rh   ri   rb   rj   rk   c                    s.   ˆ j }|d ˆ _ ˆ  | dˆ j  ¡}|ˆ _ |S rm   rn   ro   r   r   r   rr   ô  s
    
zRzeta_set.<locals>.trunc_ars   r   rt   )r   r   ru   rv   r#   r   rK   r   rw   rx   ry   rz   r{   rI   r   ÚerL   r|   r    r3   r<   r}   r>   r   r!   r"   r~   r   r€   r�   )\r   rƒ   Zderivativesr„   r…   rp   ÚsigmarA   ZasigmaÚA1r%   r†   Zeps2Úbr/   ÚAZB1rˆ   Zeps3Zeps4r‰   r—   r'   rM   rN   rO   r$   rŠ   r‹   Zforeps5rF   rD   rE   rŒ   r�   rŽ   r�   r�   r‘   r’   r“   r”   r•   r–   r˜   r,   Zwpdr™   Zd2ÚconstZd3ZpsigmaÚdrš   r›   rœ   r�   rž   rŸ   r-   ZwptcoefZwptermZc4Zfortcoefr    rr   Ztcoefr¢   rq   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Ä   

.

B*$

 
*

( (*,      


V8*   0P4$$6
<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�r–d| }||
|	d  |	d   }|dk�rèd| }| 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)
    ú0.5r   r   r   r   rl   rX   r   r   r`   é   ù               @y       €       Àù              @r   ù              (@ù              @)r    r"   r   r   r   r>   Úsiegelthetarº   r   rv   Úpsir   )r   rp   r„   rƒ   r…   Ú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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 ]}|  || ¡||< �q4|
| _ |  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�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?
    zeta_half(s,k=0) Computes zeta^(k)(s) when Re s = 0.5
    é5   r   r   r   rU   r   r   r   çö(\�Âõ @ç3333335@çÍÌÌÌÌÌô?çš™™™™™@çš™™™™™ñ?r»   r`   r¼   rb   r½   éôÿÿÿrÀ   r¿   é    é   ù              H@rX   )r   rv   ru   r#   rz   r   rw   Úlogr   r   rÁ   r"   r    rÂ   r>   rº   r   r‚   r   )r   rƒ   r,   r…   r±   rp   Ú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rŠd|  |d| j  ¡ }nd| | }d| dkr¼d|  |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�r�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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   rU   r   r   r   r   r   rÏ   rÐ   rÑ   rÒ   rÓ   r»   r`   r¼   rÕ   rb   r½   rÔ   rÀ   r¿   rÖ   r×   rX   )r   rv   ru   rK   rz   r   r#   rw   rØ   r   r   rÁ   r"   r    r‚   r¯   rÂ   r>   r   )r   rƒ   r,   r…   r±   rp   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ràd|  |  |¡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�rŒd|  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�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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
    r»   r   é#   r   r   rU   r   r   r   é   gR¸…ëQ @g      Ð?y              à?y              À?g      °¿y       €       ¿rb   rj   r¾   r¿   rÀ   )r    r"   r‚   r   rv   r#   ru   r   rz   rÁ   r   r   r¯   rÂ   r>   r   )r   r)   r,   rƒ   rã   rä   r…   rÚ   rÙ   râ   r¨   rD   rE   rG   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   rU   )r{   r3   rv   ru   r‚   Úrs_zetará   rå   )r   rƒ   Ú
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   )r3   rv   ru   Úrs_zrÍ   rè   )r   r)   rê   rì   rí   rî   r   r   r   rï   q  s    

 
rï   )r   )r   )r   )r   )r   )r   )r   )Ú__doc__rw   Úobjectr   Z	functionsr   r0   r<   rI   rP   r¯   rº   rÍ   rá   rå   rè   ré   rï   r   r   r   r   Ú<module>   s.   2v
    
  v
(
>
B
H