o
    Sig                      @   sP   d dl mZ d dlmZ d dlmZ ddlmZmZm	Z	m
Z
 G dd deZdS )	    )Union)warn)
preprocess   )NUMBER_LOW_AN2CNNUMBER_UP_AN2CNUNIT_LOW_ORDER_AN2CNUNIT_UP_ORDER_AN2CNc                   @   s   e Zd ZdddZddeeeef dedefdd	Zdedefd
dZ	e
deeef defddZdeddfddZdededefddZdededefddZdS )An2CnreturnNc                 C   s    d| _ t| _t| _g d| _d S )N
0123456789)lowuprmbdirect)all_numr   
number_lowr   	number_up	mode_list)self r   ?/home/ubuntu/.local/lib/python3.10/site-packages/cn2an/an2cn.py__init__
   s   zAn2Cn.__init__r   inputsmodec                 C   s  |durv|dkrv|| j vrtdt| j  dt|ts$| |}t|ddgd}| | |d d	kr@d
}|dd }nd}|dkrO| |}|| S |d}t	|}|dkrz|d }|dkrp| 
|dd }|| S | 
||}|| S |dkrn|\}}|dkr^| 
|d}	| |d}
t	|
}|dkr|	d }|| S |dkrtd|
 |dkr|
d dkr|	dkr|
d d }|| S |	d |
d  d }|| S |	d }|| S |
d dkr0|
d dkr|	dkr|
d d |
d  d }|| S |	d |
d  d |
d  d }|| S |	dkr"|
d d }|| S |	d |
d  d }|| S |
d dkrV|	dkrF|
d d }|| S |	d d |
d  d }|| S |	d }|| S | 
||| || }|| S td| dtd)u   阿拉伯数字转中文数字

        :param inputs: 阿拉伯数字
        :param mode: low 小写数字，up 大写数字，rmb 人民币大写，direct 直接转化
        :return: 中文数字
        N u   mode 仅支持 u    ！traditional_to_simplifiedfull_angle_to_half_angle)	pipelinesr   -u   负r   r   .r   r   u   元整   u   异常输出：   零u   角u   元u   分u   输入格式错误：   ！u   输入数据为空！)r   
ValueErrorstr
isinstance_An2Cn__number_to_stringr   _An2Cn__check_inputs_is_valid_An2Cn__direct_convertsplitlen_An2Cn__integer_convert_An2Cn__decimal_convert)r   r   r   signoutputsplit_resultlen_split_resultinteger_datadecimal_dataint_datadec_datalen_dec_datar   r   r   an2cn   s   




;
20

&  


zAn2Cn.an2cnc                 C   s6   d}|D ]}|dkr|d7 }q|| j t| 7 }q|S )Nr   r       点)r   int)r   r   _outputdr   r   r   __direct_convertp   s   
zAn2Cn.__direct_convertnumber_datac                 C   sn   t | }d|v r5|d}|d }|d }|d dkr-ddt|dd  d   | }|S |dt|  }|S )Ner   r   r   z0.0)r%   r*   r9   )r=   string_datastring_data_list
string_keystring_valuer   r   r   __number_to_stringy   s   
 zAn2Cn.__number_to_string
check_datac                 C   s0   | j d }|D ]}||vrtd| dqd S )Nz.-u'   输入的数据不在转化范围内：r#   )r   r$   )r   rE   all_check_keysdatar   r   r   __check_inputs_is_valid   s   
zAn2Cn.__check_inputs_is_validr2   c           	      C   sL  |dkr	t }t}n|dkrt}t}ntd| tt|}t|}|t|kr3tdt| dd}t|D ]C\}}t|rR||t| ||| d   7 }q9|| d d sj||t| ||| d   7 }|d	kr||d
 dks|||t| 7 }q9|	dd	dd	dd	dd
d}|d d dv r|dd  }|sd}|S )Nr   r   error mode: u"   超出数据范围，最长支持 u    位r   r      r   r"   u   零零u   零万u   万u   零亿u   亿u   亿万r!   )u   一十)r   r   r   r	   r$   r%   r9   r+   	enumeratereplacestrip)	r   r2   r   numeral_list	unit_listlen_integer_data	output_anir;   r   r   r   __integer_convert   s8   " "zAn2Cn.__integer_convertr3   o_modec                 C   s   t |}|dkrtd| d |d d }|rd}nd}|dkr$t}n|dkr+t}ntd| |D ]
}||t| 7 }q4|S )	N   u   注意：小数部分长度为 u,    ，将自动截取前 16 位有效精度！r8   r   r   r   rI   )r+   r   r   r   r$   r9   )r   r3   rU   len_decimal_datarR   rO   rG   r   r   r   __decimal_convert   s   zAn2Cn.__decimal_convert)r   N)Nr   )__name__
__module____qualname__r   r   r%   r9   floatr7   r)   staticmethodr'   r(   r,   r-   r   r   r   r   r
   	   s    
"`	)r
   N)typingr   warningsr   procesr   confr   r   r   r	   objectr
   r   r   r   r   <module>   s
    