o
    lh                     @   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   loggamma_bernoulli_cachepretty_init_aliasesctx r   a/var/www/html/construction_image-detection-poc/venv/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   namer0   wrapr1   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   r9   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   rF   r=   r   r   r   r+   n   s   
zFPContext.convertc                 C   s   t |}t|j|jS r   )rF   mathatan2rG   rH   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   )rP   rQ   pir=   r   r   r   expjpi   s   zFPContext.expjpic                 C   s   |r|  t|d S | jS )Nr   )frexprA   ninfrM   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 )NrG   F)hasattrrG   rH   intrM   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 )NrG   )rY   rI   rH   rW   rX   rA   )r   rN   r9   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RrG   Z)rE   tuplempfrY   rZ   rH   )r   rN   r!   qintzr   r   r   _convert_param   s   
zFPContext._convert_paramc                 C   s   t |tp	t |tS r   )
isinstancer   r   rM   r   r   r   _is_real_type   s   zFPContext._is_real_typec                 C   s
   t |tS r   )rd   rF   rM   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epsrA   NoConvergence)r   r!   ra   typescoeffsrN   maxtermsr.   numdentolstkir   r   r   hypsum   s    zFPContext.hypsumc                 C   s   t ||S r   )rK   rL   )r   r   yr   r   r   rL      r?   zFPContext.atan2c                 C   s@   t |}|dkr| |S d|d  | | | |d | S )Nr   r   )rZ   digammafaczeta)r   mrN   r   r   r   psi   s   
&zFPContext.psic                 C   s2   |  |}|dks|dkr|S | |d | j S r   )r+   ry   eulerr=   r   r   r   harmonic   s   
zFPContext.harmonicc                 C   s   t t||S r   )rZ   rK   ldexp)r   r   precr   r   r   to_fixed   rS   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   )zerorA   )r   terms
check_steprr   rt   termr   r   r   sum_accurately   s   

zFPContext.sum_accuratelyN)rg   )r   )u__name__
__module____qualname__r4   r   _mpqr	   rk   r   r"   r$   r%   _fixed_precisionpropertyr   dpsr   oner   EPSrj   rB   infNINFrW   NANnanrQ   classmethodr8   r<   rT   er~   sqrt2sqrt5philn2ln10catalankhinchinaperyglaisherrA   absminabsmaxr>   r@   rC   rD   rJ   r   r`   rF   mpcr+   staticmethodpowpowersqrtrP   loglncossintancos_sinacosasinatancoshsinhtanhgammargamma	factorialrz   floorceilcospisinpicbrtnthroot_nthrootei_eie1_e1r{   _zeta	_zeta_intrO   rR   rU   rK   r   rV   rX   r[   r\   rc   re   rf   rv   rL   r}   ry   r   strnstrr   r   erf_erferfc_erfcr   r   r   r   r   r
      s    



























	



r
   )ctx_baser   rK   cmath r   r   r	   r   r   r   r
   r   r   r   r   <module>   s    