o
    Si2                     @   sl   d dl Z d dlmZ 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mZmZ G dd	 d	eZdS )
    N)warn)Union)
preprocess   )An2Cn)NUMBER_CN2AN
UNIT_CN2ANSTRICT_CN_NUMBERNORMAL_CN_NUMBERNUMBER_LOW_AN2CNUNIT_LOW_AN2CNc                	   @   s   e Zd ZdddZddeeeef dedeeef fdd	Zde	fd
dZ
dd ZdededeeeeffddZdedefddZdedefddZdedefddZdS )Cn2AnreturnNc              	   C   s  d tt | _d tt | _t| _t	| _
d | j d d | j
 d d | j
 d d d| _|  | _t | _g d| _td| j d| j d| _td| j d	| _td
| j d| _td| j d| j d| j d| _d S )N u   点负z01234567890.-)strictnormalsmartu   ^.*?[元圆][u   ]角([u   ]分)?$z^-?\d+(\.\d+)?[z]?$z^[z]+$z^([z]{0,2}[z])+[z]$)joinlistr   keysall_numr   all_unitr	   strict_cn_numberr
   normal_cn_numbervaluescheck_key_dict_Cn2An__get_patternpattern_dictr   ac	mode_listrecompileyjf_patternpattern1ptn_all_numptn_speaking_modeself r(   ?/home/ubuntu/.local/lib/python3.10/site-packages/cn2an/cn2an.py__init__   s   

*zCn2An.__init__r   inputsmodec                 C   s  |dus|dkr|| j vrtdt| j  dt|ts!t|}t|ddgd}|dd	}| ||\}}}}|d
kr?|S |sc|du rN| |}|| S | || | }t	|t
|}|| S |du rp| |}|| S | || | }t	|t
|}|| S td)u   中文数字转阿拉伯数字

        :param inputs: 中文数字、阿拉伯数字、中文数字和阿拉伯数字
        :param mode: strict 严格，normal 正常，smart 智能
        :return: 阿拉伯数字
        Nr   u   mode 仅支持 u    ！traditional_to_simplifiedfull_angle_to_half_angle)	pipelinesu   廿u   二十r   u   输入数据为空！)r   
ValueErrorstr
isinstancer   replace!_Cn2An__check_input_data_is_valid_Cn2An__integer_convert_Cn2An__decimal_convertroundlen_Cn2An__direct_convert)r'   r+   r,   signinteger_datadecimal_data
is_all_numoutputr(   r(   r)   cn2an   s6   



zCn2An.cn2anc              	   C   s  d}d}| d| d}d| d| d}d| d| d	| d
| d	}d| d| d}d| d| d	| d| d	}d| d| d}d| d| d	| d| d	}	d|	 d| d}
d|
 d|
 d	|
 d|	 d	}d| d|
 d}d| d| d}d| d| d}d}d}| j  D ]}||| j | }||| j | }q| j D ]}||| j| }||| j| }qt|t|dt|t|dd}|S )Nu   [零]u   [一二三四五六七八九]u   ?[十]?(|)u   [百]([零]z)?|u   [百]u   [千]([零]u   [千]u   [万]([零]u   [万]u   [亿]([零]u   [亿]z^(z)$uE   ^[零一二三四五六七八九]{0,15}[一二三四五六七八九]$u(   ^[零一二三四五六七八九]{0,16}$)intdec)r   r   )r   r   r3   r   r    r!   )r'   _0_1_9_10_99_1_99_100_999_1_999
_1000_9999_1_9999_10000_99999999_1_99999999_100000000_9999999999999999_1_9999999999999999str_int_patternnor_int_patternstr_dec_patternnor_dec_patternstr_numnor_numr   r(   r(   r)   __get_patternS   s<   
zCn2An.__get_patternc                 C   s"   d}|D ]
}|t t| 7 }q|S )Nr   )r   rD   )r'   numcn_numnr(   r(   r)   
__copy_numz   s   zCn2An.__copy_num
check_datac                    s  g d}|D ]}|dd  |kr|d d }q|dkr0ddg}|D ]}|d |kr/|d d }q! j |}|rF|dddd	d
d	}d|v rP|dd}d|v rZ|dd}|D ]}| j| vrptd| d| dq\|d dkr|dd  }d}nd}d|v r|d}	t|	dkr|	\}
}|dkrtd fdd|
}
td fdd|}d}nJtd|}
d }|dkr j	|
}|r|
 |
kr|
d t v rtt|
d d t|
d   }nt|
}d|d d fS td fdd|
}
d} j| d |
}|r7|
 |
kr6|d ur0 j| d |}|r/|
 |kr/||
|d fS n||
|d fS n|dkrCtd!|
 |dkrψ j|
}|r~|
 |
kr~|d urx j| d |}|rw|
 |krw||
|d"fS n||
|d"fS  j|
}t|
d#kr|r|
 |
kr| d d }tt| d$  }|
| }
|d urɈ j| d |}|r|
 |kr||
|d fS n||
|d fS td!| )%N)u   元整u   圆整u   元正u   圆正r   u   圆u   元u   点u   角r   u   分u   零十u	   零一十u   零百u	   零一百u	   当前为u0   模式，输入的数据不在转化范围内：u   ！r   u   负r      r   z\d+c                        j |  S Nr   an2cngroupxr&   r(   r)   <lambda>       z3Cn2An.__check_input_data_is_valid.<locals>.<lambda>c                    s     |  S rb   )_Cn2An__copy_numre   rf   r&   r(   r)   rh      s    r   u!   数据中包含不止一个点！c                    ra   rb   rc   rf   r&   r(   r)   rh      ri   rD   rE   Fu   不符合格式的数据：T   
   )r"   searchr3   r   r0   splitr8   r    subr#   re   r   r   rD   floatr   r$   r%   groupsr   )r'   r]   r,   
stop_wordswordnormal_stop_wordsresultdatar:   
split_datar;   r<   result1r>   
result_int
result_decresult_all_numresult_speaking_mode	last_unit_unitr(   r&   r)   __check_input_data_is_valid   s   
"

	

"
z!Cn2An.__check_input_data_is_validr;   c                 C   s   d}d}d}t t|D ]I\}}|tv rt| }||| 7 }q|tv rOt| }|d dkr:||kr4|}n|| }|}||k rB|| }|t|d krN||7 }qt| dt|S )Nr   r   i'  u    不在转化范围内)	enumeratereversedr   r   r8   r0   rD   )r'   r;   output_integerunitten_thousand_unitindexrZ   rY   r(   r(   r)   __integer_convert   s*   zCn2An.__integer_convertr<   c                 C   s~   t |}|dkrtd| d |d d }d}d}tt |d ddD ]}t||  }||d|d    7 }q$t||}|S )N   u   注意：小数部分长度为 u,    ，将自动截取前 16 位有效精度！r   r   r_   rl   )r8   r   ranger   r7   )r'   r<   len_decimal_dataoutput_decimalr   unit_keyr(   r(   r)   __decimal_convert  s   
zCn2An.__decimal_convertrv   c                 C   sJ   d}t t|d ddD ]}t||  }||dt|| d   7 }q|S )Nr   r   r_   rl   )r   r8   r   )r'   rv   output_datar   r   r(   r(   r)   __direct_convert   s
   zCn2An.__direct_convert)r   N)Nr   )__name__
__module____qualname__r*   r   r1   rD   rp   r?   dictr   rj   boolr4   r5   r6   r9   r(   r(   r(   r)   r      s    
*4'm!r   )r    warningsr   typingr   procesr   rd   r   confr   r   r	   r
   r   r   objectr   r(   r(   r(   r)   <module>   s     