o
    5ti                  
   @   s   U d Z ddlZddlZddlmZ ddlmZmZmZmZ ddl	m
Z
mZmZ edejZeed< ded	efd
dZG dd dZe Z	ddeded	eee ee f fddZded	dfddZded	efddZddeded	efddZdS )zA
.. codeauthor:: Tsuyoshi Hombashi <tsuyoshi.hombashi@gmail.com>
    N)Decimal)AnyFinalOptionalUnion)Integer
RealNumberTypeConversionErrorz(\x9b|\x1b\[)[0-?]*[ -\/]*[@-~]_ansi_escapevaluereturnc                 C   s&  t | }t }d|_tj|_zt| }W n5 tyM   z
tt	|  }W n ty=   t
d|  dt|  dw tt| Y W  d    S w | r[	 W d    dS ztt|jtdtjdW W  d    S  tjy   tt| Y W  d    S w 1 sw   Y  d S )N<   z#the value must be a number: value='z' type=''   z1.)rounding)r   decimallocalcontextprecROUND_HALF_DOWNr   absconvertr	   r   
ValueErrortypelenstris_zeroquantizer   
ROUND_DOWNInvalidOperation)r   
float_typectx	abs_value r"   J/home/ubuntu/.local/lib/python3.10/site-packages/dataproperty/_function.pyget_integer_digit   s8   

r$   c                   @   sP   e Zd ZU edZeed< edZeed< de	e
eeef defddZd	S )
DigitCalculatorz[\d\.]+[eE]\-\d+REGEXP_COMMON_LOGz[eE]\-REGEXP_SPLITr   r   c                 C   s|   t | rdS d}tt|}t|}d}|ddkr*|dd }t|}|S | j	|r<| j
|d }t|}|S )Nr   0.r   )r   is_typer   floatr   findsplitr   r&   searchr'   int)selfr   float_digit_lenr!   
text_value
float_textr"   r"   r#   get_decimal_places0   s   z"DigitCalculator.get_decimal_placesN)__name__
__module____qualname__recompiler&   r   __annotations__r'   r   r   r,   r0   r   r5   r"   r"   r"   r#   r%   ,   s   
 "r%   c   max_decimal_placesc              
   C   sd   zt | }W n tttfy   Y dS w ztt| |}W ||fS  ttfy1   d }Y ||fS w )N)NN)r$   r   	TypeErrorOverflowErrormin_digit_calculatorr5   )r   r=   integer_digitsdecimal_placesr"   r"   r#   get_number_of_digitE   s   
rD   east_asian_ambiguous_widthc                 C   s   | dv rd S t d| )N)r      z>invalid east_asian_ambiguous_width: expected=1 or 2, actual={})r   format)rE   r"   r"   r#   _validate_eaawW   s   rH   unicode_strc                 C   s   t d| S )N )r
   sub)rI   r"   r"   r#   strip_ansi_escapeb   s   rL   r   c                 C   sX   dd l }d}| D ]!}||}|dv r|d7 }q|dkr%t| ||7 }q|d7 }q|S )Nr   WFrF   Ar   )unicodedataeast_asian_widthrH   )rI   rE   rO   widthchar
char_widthr"   r"   r#   calc_ascii_char_widthf   s   



rT   )r<   )r   )__doc__r   r9   r   typingr   r   r   r   typepyr   r   r	   r:   
IGNORECASEr
   r;   r0   r$   r%   rA   tuplerD   rH   r   rL   rT   r"   r"   r"   r#   <module>   s*    
