o
    FZh                     @   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   </var/www/auris/lib/python3.10/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      dS )N5   r   r   r   r   r   	_get_prec        zFPContext._get_precc                 C      d S Nr   r   pr   r   r   	_set_prec!   r   zFPContext._set_precc                 C   r   )N   r   r   r   r   r   _get_dps"   r   zFPContext._get_dpsc                 C   r   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 }| g|R i |S )Nc                    s   g | ]} |qS r   r   ).0aconvertr   r   
<listcomp>8   r   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 }||v r|| S tt|dddd||< || S )Nr   nT)strict)r   r   r   )r   r7   cacher   r   r   	bernoulli?   s
   zFPContext.bernoullig;f?gw@gw?g9B.?gUk@gox?g]O?gm<B{@g!;?gs/O҄?c                 C   s   || dkS )Nr$   r   r   r   r   r   r   
is_specialV      zFPContext.is_specialc                 C   s   ||kS r   r   r;   r   r   r   isnanY   s   zFPContext.isnanc                 C   s   t |tjkS r   )absr   INFr;   r   r   r   isinf\   s   zFPContext.isinfc                 C   s   |r|| dkS dS )Nr$   Fr   r;   r   r   r   isnormal_   s   zFPContext.isnormalc                 C   s0   t |tu r|jrdS |j}|dkot||kS )NFr$   )typecompleximagrealroundr;   r   r   r   isnpintd   s
   zFPContext.isnpintc                 C   s   zt |W S    t| Y S r   )r   rD   r;   r   r   r   r)   n   s   
zFPContext.convertc                 C   s   t |}t|j|jS r   )rD   mathatan2rE   rF   r   zr   r   r   arg   s   zFPContext.argc                 C   s   |  | j| S r   )expjr;   r   r   r   expj      zFPContext.expjc                 C   s   |  | j| j | S r   )rN   rO   pir;   r   r   r   expjpi   s   zFPContext.expjpic                 C   s   |r|  t|d S | jS )Nr   )frexpr?   ninfrK   r   r   r   mag   s   zFPContext.magc                 C   s6   t |dr|jr
dS |j}z|t|kW S    Y dS )NrE   F)hasattrrE   rF   intrK   r   r   r   isint   s   
zFPContext.isintc                 C   sF   t |drt|j}nt|}||kr|| jfS || t|| fS )NrE   )rW   rG   rF   rU   rV   r?   )r   rL   r7   r   r   r   nint_distance   s   

zFPContext.nint_distancec                 C   s\   t |tu r|\}}| || dfS t|drt|j}nt|}||kr*|dfS |dfS )NRrE   Z)rC   tuplempfrW   rX   rF   )r   rL   r   qZintzr   r   r   _convert_param   s   
zFPContext._convert_paramc                 C   s   t |tp	t |tS r   )
isinstancer   r   rK   r   r   r   _is_real_type   s   zFPContext._is_real_typec                 C   s
   t |tS r   )ra   rD   rK   r   r   r   _is_complex_type   s   
zFPContext._is_complex_typep  c                 K   s   t |}t|}t||| }	| j}
d }}d}	 |D ]
}||| | 9 }q|	D ]
}||| |  }q(|d7 }|| }||9 }||7 }t||
k rK|S ||krR| jq)Nr%   r   r   )listrangeepsr?   NoConvergence)r   r   r_   typesZcoeffsrL   Zmaxtermsr,   numZdenZtolstkir   r   r   hypsum   s    zFPContext.hypsumc                 C   s   t ||S r   )rI   rJ   )r   r   yr   r   r   rJ      r=   zFPContext.atan2c                 C   s@   t |}|dkr| |S d|d  | | | |d | S )Nr   r   )rX   digammafaczeta)r   mrL   r   r   r   psi   s   
&zFPContext.psic                 C   s2   |  |}|dks|dkr|S | |d | j S r   )r)   rr   eulerr;   r   r   r   harmonic   s   
zFPContext.harmonicc                 C   s   t t||S r   )rX   rI   ldexp)r   r   precr   r   r   to_fixed   rQ   zFPContext.to_fixedc                 C   s   dd l }|  S )Nr   )random)r   r|   r   r   r   rand   s   zFPContext.randr   c                 C   sP   | j }d}| D ]}||7 }|| s!|r!t|dt| kr! |S |d7 }q|S )Nr   gC]r2<r   )zeror?   )r   ZtermsZ
check_steprk   rm   termr   r   r   sum_accurately   s   

zFPContext.sum_accuratelyN)rd   )r   )u__name__
__module____qualname__r2   r   Z_mpqr	   rh   r   r    r"   r#   Z_fixed_precisionpropertyrz   Zdpsr~   oner   ZEPSrg   r@   infZNINFrU   ZNANnanrO   classmethodr6   r:   rR   erw   Zsqrt2Zsqrt5phiZln2Zln10catalanZkhinchinZaperyZglaisherr?   ZabsminZabsmaxr<   r>   rA   rB   rH   r   r^   rD   Zmpcr)   staticmethodpowpowersqrtrN   loglncossintanZcos_sinacosasinatancoshsinhtanhgammaZrgamma	factorialrs   floorceilZcospiZsinpiZcbrtZnthrootZ_nthrooteiZ_eie1Z_e1rt   Z_zetaZ	_zeta_intrM   rP   rS   rI   ry   rT   rV   rY   rZ   r`   rb   rc   ro   rJ   rv   rr   rx   strZnstrr{   r}   erfZ_erferfcZ_erfcr   r   r   r   r   r
      s    



























	



r
   )Zctx_baser   rI   Zcmath r   r   r	   r   r   r   r
   r   r   r   r   <module>   s    