o
    0cv                     @   sP   d Z ddlmZ ddlmZmZmZ ddlmZm	Z	 d
ddZ
dd	 ZdgZdS )zD
``python-future``: pure Python implementation of Python 3 round().
    )division)PYPYPY26bind_method)DecimalROUND_HALF_EVENNc                 C   s   d}|du r
d}d}t | dr| |S td|  }dtt| v r't| } t| tr/| }nts7t| }nt	| }|dk rHt
|| | }n|j|td}|rUt|S t|S )	a  
    See Python 3 documentation: uses Banker's Rounding.

    Delegates to the __round__ method if for some reason this exists.

    If not, rounds a number to a given precision in decimal digits (default
    0 digits). This returns an int when called with one argument,
    otherwise the same type as the number. ndigits may be negative.

    See the test_round method in future/tests/test_builtins.py for
    examples.
    FNTr   	__round__10numpy)rounding)hasattrr   r   reprtypefloat
isinstancer   
from_floatfrom_float_26newroundquantizer   int)numberndigits
return_intexponentdresult r   e/var/www/html/portale_awareness/portale-venv/lib/python3.10/site-packages/future/builtins/newround.pyr      s(   


r   c           	      C   s   ddl }ddlm} t| ttfrt| S || s|| r%tt	| S |
d| dkr0d}nd}t|  \}}dd }||d }||t|d|  | }|S )	a  Converts a float to a decimal number, exactly.

    Note that Decimal.from_float(0.1) is not the same as Decimal('0.1').
    Since 0.1 is not exactly representable in binary floating point, the
    value is stored as the nearest representable value which is
    0x1.999999999999ap-4.  The exact equivalent of the value in decimal
    is 0.1000000000000000055511151231257827021181583404541015625.

    >>> Decimal.from_float(0.1)
    Decimal('0.1000000000000000055511151231257827021181583404541015625')
    >>> Decimal.from_float(float('nan'))
    Decimal('NaN')
    >>> Decimal.from_float(float('inf'))
    Decimal('Infinity')
    >>> Decimal.from_float(-float('inf'))
    Decimal('-Infinity')
    >>> Decimal.from_float(-0.0)
    Decimal('-0')

    r   N)_dec_from_tripleg      ?   c                 S   s    | dkrt tt| d S dS )Nr      )lenbinabs)r   r   r   r   
bit_length_   s   z!from_float_26.<locals>.bit_length   )mathdecimalr   r   r   longr   isinfisnanr   copysignr#   as_integer_ratiostr)	f_mathr   signnr   r$   kr   r   r   r   r   =   s   r   )N)__doc__
__future__r   future.utilsr   r   r   r'   r   r   r   r   __all__r   r   r   r   <module>   s    
0
,