U
    ZÊ¹j¬  ã                   @   sh   d dl mZ ddlZddlZd dlmZ d dlmZ d dlmZm	Z	m
Z
 d dlmZ G dd	„ d	eƒZdS )
é   )ÚStandardBaseContexté    N)Úmath2)Úfunction_docs)Úmpf_bernoulliÚto_floatÚ	int_types)Úlibmpc                   @   sÒ  e Zd ZdZdd„ Zdd„ ZejZdd„ Zdd	„ Z	d
d„ Z
dd„ ZdZeee	ƒZee
eƒZdZdZejZejZejZejZdZedd„ ƒZdd„ ZejZej Z ej!Z!dZ"dZ#dZ$dZ%dZ&dZ!dZ'dZ(dZ)dZ*e+ Z,Z-d d!„ Z.d"d#„ Z/d$d%„ Z0d&d'„ Z1d(d)„ Z2e3Z4e5Z6d*d+„ Z7e8ej9ƒZ:e8ej;ƒZ;e8ej<ƒZ<e8ej=ƒ Z>Z=e8ej?ƒZ?e8ej@ƒZ@e8ejAƒZAe8ejBƒZBe8ejCƒZCe8ejDƒZDe8ejEƒZEe8ejFƒZFe8ejGƒZGe8ejHƒZHe8ejIƒZIe8ejJƒZJe8ejKƒ ZLZKe8ejMƒZMe8ejNƒZNe8ejOƒZOe8ejPƒZPe8ejQƒZQe8ejRƒZSe8ejTƒZUe8ejVƒZWe8ejXƒ ZYZZd,d-„ Z[d.d/„ Z\d0d1„ Z]e^j_Z_e^j`Z`d2d3„ Zad4d5„ Zbd6d7„ Zcd8d9„ Zdd:d;„ Zed<d=„ ZfdOd?d@„ZgdAdB„ ZhdCdD„ Zie8ejjƒZjdEdF„ ZkelZmdGdH„ ZndIdJ„ Zoe8ejpƒZqe8ejrƒZsdPdLdM„ZtdNS )QÚ	FPContextz�
    Context for fast low-precision arithmetic (53-bit precision, giving at most
    about 15-digit accuracy), using Python's builtin float and complex.
    c                 C   s*   t  | ¡ tj| _i | _d| _|  ¡  d S )NF)r   Ú__init__r   ZloggammaÚ_bernoulli_cacheÚprettyZ_init_aliases©Úctx© r   úL/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mpmath/ctx_fp.pyr      s
    
zFPContext.__init__c                 C   s   t |d ƒ|d  S ©Nr   r   )Úfloat)ÚclsÚxr   r   r   Ú<lambda>   ó    zFPContext.<lambda>c                 C   s   dS )Né5   r   r   r   r   r   Ú	_get_prec    r   zFPContext._get_precc                 C   s   d S ©Nr   ©r   Úpr   r   r   Ú	_set_prec!   r   zFPContext._set_precc                 C   s   dS )Né   r   r   r   r   r   Ú_get_dps"   r   zFPContext._get_dpsc                 C   s   d S r   r   r   r   r   r   Ú_set_dps#   r   zFPContext._set_dpsTç        ç      ð?y              ð?c                    s8   |r‡ fdd„}nˆ }t j |ˆ j¡|_t| ||ƒ d S )Nc                    s(   | j ‰ ‡ fdd„|D ƒ}ˆ| f|ž|ŽS )Nc                    s   g | ]}ˆ |ƒ‘qS r   r   )Ú.0Úa©Úconvertr   r   Ú
<listcomp>8   s     z>FPContext._wrap_specfun.<locals>.f_wrapped.<locals>.<listcomp>r%   )r   ÚargsÚkwargs©Úfr%   r   Ú	f_wrapped6   s    z*FPContext._wrap_specfun.<locals>.f_wrapped)r   Ú__dict__ÚgetÚ__doc__Úsetattr)r   Únamer+   Úwrapr,   r   r*   r   Ú_wrap_specfun3   s
    zFPContext._wrap_specfunc                 C   s6   | j }||kr|| S tt|ddƒdd�||< || S )Nr   ÚnT)Ústrict)r   r   r   )r   r4   Úcacher   r   r   Ú	bernoulli?   s
    zFPContext.bernoulligÍ;fž ö?g¨ô—›wã@g¨ô—›wãù?gï9úþB.æ?gUµ»±k@g¶oüŒxâ?g]è—Oí?gm<BÎ{@g!ð ;ó?gsØ/OÒ„ô?c                 C   s   || dkS )Nr!   r   ©r   r   r   r   r   Ú
is_specialV   s    zFPContext.is_specialc                 C   s   ||kS r   r   r8   r   r   r   ÚisnanY   s    zFPContext.isnanc                 C   s   t |ƒtjkS r   )Úabsr   ÚINFr8   r   r   r   Úisinf\   s    zFPContext.isinfc                 C   s   |r|| dkS dS )Nr!   Fr   r8   r   r   r   Úisnormal_   s    zFPContext.isnormalc                 C   s0   t |ƒtkr|jrdS |j}|dko.t|ƒ|kS )NFr!   )ÚtypeÚcomplexÚimagÚrealÚroundr8   r   r   r   Úisnpintd   s
    zFPContext.isnpintc                 C   s$   z
t |ƒW S    t|ƒ Y S X d S r   )r   r@   r8   r   r   r   r&   n   s    
zFPContext.convertc                 C   s   t |ƒ}t |j|j¡S r   )r@   ÚmathÚatan2rA   rB   ©r   Úzr   r   r   Úarg�   s    zFPContext.argc                 C   s   |   | j| ¡S r   )ÚexpÚjr8   r   r   r   Úexpj”   s    zFPContext.expjc                 C   s   |   | j| j | ¡S r   )rJ   rK   Úpir8   r   r   r   Úexpjpi—   s    zFPContext.expjpic                 C   s   |r|   t|ƒ¡d S | jS )Nr   )Úfrexpr;   ÚninfrG   r   r   r   Úmag�   s    zFPContext.magc                 C   s<   t |dƒr|jrdS |j}z|t|ƒkW S    Y dS X d S )NrA   F)ÚhasattrrA   rB   ÚintrG   r   r   r   Úisint¢   s    
zFPContext.isintc                 C   sF   t |dƒrt|jƒ}nt|ƒ}||kr0|| jfS ||  t|| ƒ¡fS )NrA   )rR   rC   rB   rP   rQ   r;   )r   rH   r4   r   r   r   Únint_distance¬   s    

zFPContext.nint_distancec                 C   s\   t |ƒtkr&|\}}|  |¡| dfS t|dƒr<t|jƒ}nt|ƒ}||krT|dfS |dfS )NÚRrA   ÚZ)r?   ÚtupleÚmpfrR   rS   rB   )r   rH   r   ÚqZintzr   r   r   Ú_convert_paramµ   s    
zFPContext._convert_paramc                 C   s   t |tƒpt |tƒS r   )Ú
isinstancer   r   rG   r   r   r   Ú_is_real_typeÁ   s    zFPContext._is_real_typec                 C   s
   t |tƒS r   )r\   r@   rG   r   r   r   Ú_is_complex_typeÄ   s    zFPContext._is_complex_typeép  c                 K   s¨   t |ƒ}t|ƒ}t||| ƒ}	| j}
d }}d}|D ]}||| | 9 }q4|	D ]}||| |  }qN|d7 }|| }||9 }||7 }t|ƒ|
k r”|S ||kr0| j‚q0d S )Nr"   r   r   )ÚlistÚrangeÚepsr;   ÚNoConvergence)r   r   rZ   ÚtypesZcoeffsrH   Zmaxtermsr)   ÚnumZdenZtolÚsÚtÚkÚir   r   r   ÚhypsumÇ   s$         zFPContext.hypsumc                 C   s   t  ||¡S r   )rE   rF   )r   r   Úyr   r   r   rF   ×   s    zFPContext.atan2c                 C   s@   t |ƒ}|dkr|  |¡S d|d  |  |¡ |  |d |¡ S )Nr   éÿÿÿÿr   )rS   ÚdigammaÚfacÚzeta)r   ÚmrH   r   r   r   ÚpsiÚ   s    
zFPContext.psic                 C   s2   |   |¡}|dks|dkr|S |  |d ¡| j S r   )r&   rm   Úeulerr8   r   r   r   Úharmonicâ   s    
zFPContext.harmonicc                 C   s   t t ||¡ƒS r   )rS   rE   Úldexp)r   r   Úprecr   r   r   Úto_fixedê   s    zFPContext.to_fixedc                 C   s   dd l }|  ¡ S )Nr   )Úrandom)r   rw   r   r   r   Úrandí   s    zFPContext.randr   c                 C   sN   | j }d}|ƒ D ]8}||7 }|| s@|r@t|ƒdt|ƒ kr@ qJ|d7 }q|S )Nr   g¬CÒÑ]r2<r   )Úzeror;   )r   ZtermsZ
check_steprf   rh   Útermr   r   r   Úsum_accuratelyô   s    

zFPContext.sum_accuratelyN)r_   )r   )uÚ__name__Ú
__module__Ú__qualname__r/   r   Z_mpqr	   rc   r   r   r   r    Z_fixed_precisionÚpropertyru   Zdpsry   Úoner   ZEPSrb   r<   ÚinfZNINFrP   ZNANÚnanrK   Úclassmethodr3   r7   rM   Úerr   Zsqrt2Zsqrt5ÚphiZln2Zln10ÚcatalanZkhinchinZaperyZglaisherr;   ZabsminZabsmaxr9   r:   r=   r>   rD   r   rY   r@   Zmpcr&   ÚstaticmethodÚpowÚpowerÚsqrtrJ   ÚlogÚlnÚcosÚsinÚtanZcos_sinÚacosÚasinÚatanÚcoshÚsinhÚtanhÚgammaZrgammaÚ	factorialrn   ÚfloorÚceilZcospiZsinpiZcbrtZnthrootZ_nthrootÚeiZ_eiÚe1Z_e1ro   Z_zetaZ	_zeta_intrI   rL   rN   rE   rt   rO   rQ   rT   rU   r[   r]   r^   rj   rF   rq   rm   rs   ÚstrZnstrrv   rx   ÚerfZ_erfÚerfcZ_erfcr{   r   r   r   r   r
      s¶   



























	



r
   )Zctx_baser   rE   ZcmathÚ r   r   r	   r   r   r   r
   r   r   r   r   Ú<module>   s   