a
    <b                     @   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   ]/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/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 )N5   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 }| 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   r4   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   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u 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 0 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 0 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u 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_typep  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   gC]r2<r   )zeror;   )r   ZtermsZ
check_steprf   rh   Z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   Z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_erfcrz   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   