
    $HJj'                         d ddddddddd	d

Z d ZdefdZdefdZdefdZdefdZdefdZdefdZdefdZ	ddgZ
y)   không   mộthaibau   bốn   nămu   sáuu   bảyu   támu   chín)
0123456789c                 n    g }t        dt        |       |      D ]  }|j                  | |||z            |S )um  Hàm chia nhỏ danh sách đầu vào.

    Hàm dùng chia nhỏ danh sách đầu vào thành các nhóm danh sách con với số lượng các phần tử trong
    nhóm con là n

    Args:
        lst: Danh sách đầu vào.
        n: Số lượng phần tử trong một nhóm con.

    Returns:
        Danh sách các nhóm con có n phần tử.
        )rangelenappend)lstn
chunks_lstis       b/Users/ahmed/devFolder/claude-voice/.venv/lib/python3.12/site-packages/misaki/vi_cleaner/num2vi.pychunksr      s@     J1c#h"#a!a%.) #     numbersc                 `    | st        d      t        |       dkD  rt        d      t        |    S )u5  Hàm chuyển đổi số sang chữ số cho hàng đơn vị.

    Args:
        numbers (str): Chuỗi số đầu vào.

    Returns:
        Chuỗi chữ số đầu ra.

    Raises:
        ValueError: Số đầu vào là rỗng.
        ValueError: Số đầu vào có giá trị lớn hơn 9.

    u:   Số rỗng!! vui lòng nhập số đúng định dạng!   u4   Số vượt quá giá trị của hàng đơn vị!)
ValueErrorr   units)r   s    r   	n2w_unitsr"   '   s5     UVV
7|aOPP>r   numberc                     d}ddddd}|j                         D ]  \  }}| j                  ||      }  | j                         st        d      | D ]  }|t        v s||z  } |st        d      |S )u   Hàm tiền xữ lý dữ liệu đầu vào.

    Args:
        number (str): Chuỗi số đầu vào.

    Returns:
        Chuỗi số sau khi được tiền xữ lý.
     ) -.,uW   Đầu vào không phải là kiểu chuỗi chỉ chứa các ký tự số (isdigit)!uD   Số không hợp lệ, vui lòng nhập số đúng định dạng!)itemsreplaceisdigitr    r!   )r#   clean_numberchar_to_replacekeyvalueelements         r   pre_process_n2wr2   >   s     L 	O &++-
UU+ . >>rss eG#L 
 _``r   c                 R    d}| D ]  }|t         |   dz   z  } |j                         S )u   Hàm chuyển đổi số sang chữ số theo từng số một.

    Args:
        numbers (str): Chuỗi số đầu vào.

    Returns:
        Chuỗi chữ số đầu ra.
    r%   r&   )r!   strip)r   total_numberr1   s      r   process_n2w_singler6   c   s7     Lg,,  r   c                    t        |       dkD  rt        d      t        |       dk(  rt        d      t        |       dk  rt        |       S | ddd   }g }t        dt        |            D ]k  }|dk(  r|j	                  t
        ||             $|dk(  r|j	                  t
        ||      dz          H|dk(  sN|j	                  t
        ||      d	z          m t        |      D ]l  \  }}|dk(  r|d
k(  r|d   dk(  rd|d<   d||<   |dk(  r|dk(  r|d   dk7  r|d   dk7  rd||<   |dk(  r|dk(  r|d   dk7  rd||<   |dk(  rd||<   |dk(  shd||<   n dj                  |ddd         j                         S )u  Hàm chuyển đổi số sang chữ số lớp trăm.

    Hàm chuyển đổi số sang chữ số áp dụng cho các số từ 0 đến 999

    Args:
        numbers (str): Chuỗi số đầu vào.

    Returns:
        Chuỗi chữ số đầu ra.

    Raises:
        ValueError: Nếu số đầu vào lớn hơn 999.
        ValueError: Nếu số đầu vào là chuỗi rỗng.

       u/   Số vượt quá giá trị của hàng trăm!r   r   Nu    mươi    u    trăm r   u   không mươi r%   r   u   một mươi u   mốtr   u   lămu   lẻ u   mười )	r   r    r"   r   r   r!   	enumeratejoinr4   )r   reversed_hundredsr5   eidxr0   s         r   n2w_hundredsr@   r   s     7|aJKK
7|qJKK
7|q!!  "L1c+,-6&7&: ;<!V&7&: ;j HI!V&7&: ;i GH .&  -
U!8)A"22"$Q "L!8(A/1l1oIY6Y$+S!!8A"22$*S!$$ 'LO# *L) ., 77<"%&,,..r   c                    | ddd   }t        |d      }g }t        dt        |            D ]  }|dk(  r%|d   ddd   }|j                  t	        |             |dk(  r(|d   ddd   }|j                  t	        |      dz          |dk(  r(|d   ddd   }|j                  t	        |      dz          |dk(  s|d   ddd   }|j                  t	        |      d	z           d
j                  |ddd         j                         S )u  Hàm chuyển đổi các số có giá trị lớn.

    Hàm chuyển đổi các số có giá trị lớn từ 999 đến 999.999.999.999

    Args:
        numbers (str): Chuỗi số đầu vào.

    Returns:
        Chuỗi chữ số đầu ra.

    Nr9   r8   r   r   u    nghìn r:   u	    triệu u    tỷ r%   )r   r   r   r   r@   r<   r4   )r   reversed_large_numberr5   r>   value_of_hundredvalue_of_thousandvalue_of_millionvalue_of_billions           r   n2w_large_numberrG      s,    $DbDM ##8!<L1c/0164Q7"=-= >?6 5a 82 >-> ?* LM64Q7"=-= > LM64Q7"=-= > IJ 2 77<"%&,,..r   c                 .    t        |       }t        |      S )N)r2   rG   r#   r-   s     r   n2wrJ      s    "6*LL))r   c                 b    | dd dk(  r| j                  dd      } t        |       }t        |      S )Nr   r8   z+84r   )r+   r2   r6   rI   s     r   
n2w_singlerL      s7    a{es+ #6*Ll++r   rJ   rL   N)r!   r   strr"   r2   r6   r@   rG   rJ   rL   __all__ r   r   <module>rP      s    
										&s .#C #J   J/# J/X$/c $/L* *,s , ,
r   