
    "`                     n    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	e      Zy)
   )StandardBaseContext    N)math2)function_docs)mpf_bernoullito_float	int_types)libmpc                   R   e Zd ZdZd Zd Zej                  Zd Zd Z	d Z
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j2                  ZdZed        Zd Zej>                  Zej@                  Z ejB                  Z!dZ"dZ#dZ$dZ%dZ&dZ!dZ'dZ(dZ)dZ*e+xZ,Z-d Z.d Z/d Z0d Z1d Z2e3Z4e5Z6d Z7 e8ejr                        Z: e8ejv                        Z; e8ejx                        Z< e8ejz                        xZ>Z= e8ej~                        Z? e8ej                        Z@ e8ej                        ZA e8ej                        ZB e8ej                        ZC e8ej                        ZD e8ej                        ZE e8ej                        ZF e8ej                        ZG e8ej                        ZH e8ej                        ZI e8ej                        ZJ e8ej                        xZLZK e8ej                        ZM e8ej                        ZN e8ej                        ZO e8ej                        ZP e8ej                        ZQ e8ej                        ZS e8ej                        ZU e8ej                        ZW e8ej                        xZYZZd Z[d Z\d  Z]e^j                  Z_e^j                  Z`d! Zad" Zbd# Zcd$ Zdd% Zed& Zfd/d'Zgd( Zhd) Zi e8ej                        Zjd* ZkelZmd+ Znd, Zo e8ej                        Zq e8ej                        Zsd0d-Zty.)1	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                     t        j                  |        t        j                  | _        i | _        d| _        | j                          y )NF)r   __init__r   loggamma_bernoulli_cachepretty_init_aliasesctxs    //usr/lib/python3/dist-packages/mpmath/ctx_fp.pyr   zFPContext.__init__   s8    $$S) ~~!
    c                 *    t        |d         |d   z  S Nr   r   )float)clsxs     r   <lambda>zFPContext.<lambda>   s    %!+ad* r   c                      y)N5    r   s    r   	_get_preczFPContext._get_prec    s    rr   c                      y Nr   r   ps     r   	_set_preczFPContext._set_prec!   s    6r   c                      y)N   r   r   s    r   _get_dpszFPContext._get_dps"   s    br   c                      y r"   r   r#   s     r   _set_dpszFPContext._set_dps#   s    &r   T              ?y              ?c                     |rfd}n}t         j                  j                  |j                        |_        t	        | ||       y )Nc                 h    | j                   }|D cg c]
  } ||       }} | g|i |S c c}w r"   )convert)r   argskwargsr/   afs        r   	f_wrappedz*FPContext._wrap_specfun.<locals>.f_wrapped6   s=    ++,01q
11.t.v.. 2s   /)r   __dict__get__doc__setattr)r   namer3   wrapr4   s     `  r   _wrap_specfunzFPContext._wrap_specfun3   s=    /
 I)2266tQYYG	T9%r   c                 l    | j                   }||v r||   S t        t        |dd      d      ||<   ||   S )Nr   nT)strict)r   r   r   )r   r=   caches      r   	bernoullizFPContext.bernoulli?   s?    $$:8OM!R5dCaQxr   g;f?gw@gw?g9B.?gUk@gox?g]O?gm<B{@g!;?gs/O҄?c                     ||z
  dk7  S )Nr+   r   r   r   s     r   
is_specialzFPContext.is_specialV   s    1u|r   c                     ||k7  S r"   r   rB   s     r   isnanzFPContext.isnanY   s    Avr   c                 :    t        |      t        j                  k(  S r"   )absr   INFrB   s     r   isinfzFPContext.isinf\   s    1v""r   c                     |r||z
  dk(  S y)Nr+   Fr   rB   s     r   isnormalzFPContext.isnormal_   s    q5C<r   c                     t        |      t        u r|j                  ry|j                  }|dk  xr t	        |      |k(  S )NFr+   )typecompleximagrealroundrB   s     r   isnpintzFPContext.isnpintd   s8    7gvvACx)E!HM)r   c                 >    	 t        |      S #  t        |      cY S xY wr"   )r   rN   rB   s     r   r/   zFPContext.convertn   s!    	8O	1:s   
 c                 l    t        |      }t        j                  |j                  |j                        S r"   )rN   mathatan2rO   rP   r   zs     r   argzFPContext.arg   s$    AJzz!&&!&&))r   c                 >    | j                  | j                  |z        S r"   )expjrB   s     r   expjzFPContext.expj   s    wwsuuQwr   c                 X    | j                  | j                  | j                  z  |z        S r"   )r[   r\   pirB   s     r   expjpizFPContext.expjpi   s!    wwsuuSVV|A~&&r   c                 X    |r| j                  t        |            d   S | j                  S )Nr   )frexprG   ninfrW   s     r   magzFPContext.mag   s&    99SV$Q''xxr   c                 x    t        |d      r|j                  ry|j                  }	 |t        |      k(  S #  Y yxY w)NrO   F)hasattrrO   rP   intrW   s     r   isintzFPContext.isint   s<    1fvvA	A;	s   5 9c                     t        |d      rt        |j                        }nt        |      }||k(  r|| j                  fS || j	                  t        ||z
              fS )NrO   )rf   rQ   rP   rc   rd   rG   )r   rX   r=   s      r   nint_distancezFPContext.nint_distance   sS    1faffAaA6chh;#''#ac(###r   c                     t        |      t        u r|\  }}| j                  |      |z  dfS t        |d      rt	        |j
                        }nt	        |      }||k(  r|dfS |dfS )NRrO   Z)rM   tuplempfrf   rg   rP   )r   rX   r$   qintzs        r   _convert_paramzFPContext._convert_param   sh    7eDAq771:>3&&1fqvv;Dq6D99#vr   c                 F    t        |t              xs t        |t              S r"   )
isinstancer   r	   rW   s     r   _is_real_typezFPContext._is_real_type   s    !U#?z!Y'??r   c                 "    t        |t              S r"   )rt   rN   rW   s     r   _is_complex_typezFPContext._is_complex_type   s    !W%%r   c                 &   t        |      }t        |      }t        |||z         }	| j                  }
dx}}d}	 |D ]  }|||   |z   z  } |	D ]  }|||   |z   z  } |dz  }||z  }||z  }||z  }t        |      |
k  r|S ||kD  r| j                  Z)Nr,   r   r   )listrangeepsrG   NoConvergence)r   r$   rp   typescoeffsrX   maxtermsr1   numdentolstkis                  r   hypsumzFPContext.hypsum   s    fAhAaclggA,!q	!,!,,!q	!,!,FAAFAAFAAFA1v|8|''' r   c                 .    t        j                  ||      S r"   )rU   rV   )r   r   ys      r   rV   zFPContext.atan2   s    zz!Qr   c                     t        |      }|dk(  r| j                  |      S d|dz   z  | j                  |      z  | j                  |dz   |      z  S )Nr   r   )rg   digammafaczeta)r   mrX   s      r   psizFPContext.psi   sO    F6;;q>!ac{SWWQZ'#((1Q3*:::r   c                 ~    | j                  |      }|dk(  s|dk(  r|S | j                  |dz         | j                  z   S r   )r/   r   eulerrB   s     r   harmoniczFPContext.harmonic   s=    KKN6Q!VH{{1Q3#))++r   c                 @    t        t        j                  ||            S r"   )rg   rU   ldexp)r   r   precs      r   to_fixedzFPContext.to_fixed   s    4::a&''r   c                 *    dd l }|j                         S )Nr   )random)r   r   s     r   randzFPContext.rand   s    }}r   c                     | j                   }d} |       D ]0  }||z  }||z  s|rt        |      dt        |      z  k  r |S |dz  }2 |S )Nr   gC]r2<r   )zerorG   )r   terms
check_stepr   r   terms         r   sum_accuratelyzFPContext.sum_accurately   sa    HHG 	DIA
Nt9c!f, FA	 r   N)ip  )r   )u__name__
__module____qualname__r7   r   _mpqr
   r|   r    r%   r(   r*   _fixed_precisionpropertyr   dpsr   oner   EPSr{   rH   infNINFrc   NANnanr\   classmethodr;   r@   r_   er   sqrt2sqrt5philn2ln10catalankhinchinaperyglaisherrG   absminabsmaxrC   rE   rI   rK   rR   r   ro   rN   mpcr/   staticmethodpowpowersqrtr[   loglncossintancos_sinacosasinatancoshsinhtanhgammargamma	factorialr   floorceilcospisinpicbrtnthroot_nthrootei_eie1_e1r   _zeta	_zeta_intrY   r]   r`   rU   r   rb   rd   rh   rj   rr   ru   rw   r   rV   r   r   r   strnstrr   r   erf_erferfc_erfcr   r   r   r   r   r      s.   
 +D''M!!  Iy)D
8X
&CD
C
))C
))C::D
))C
A 	& 	& 
BAKKE!E!E
C
 CD"E$G$H!E$HFV#
* C
C #E

#D
uyy
!CEII&&B
uyy
!C
uyy
!C
uyy
!C5==)G

#D

#D

#D

#D

#D

#D%E%,,'F"5??33C)%E

#D%E%E

#DEMM*H
uxx
 C
uxx
 C$UZZ00EI* ' JJEJJE
$
@&(  ; 5==)G, D( 		"D$E	r   r   )ctx_baser   rU   cmath r   r   r
   r   r   r	   r   r   r   r   <module>r      s,    )     5 5 q# qr   