
    (HJj	                     n    d Z ddlZddlmZ ddlmZ ej                   G d d             Z G d d      Zy)	z
A parse tree.
    N)Iterable)replacec                   d    e Zd ZU dZeed<    ej                  e      Z	eed f   ed<   dZ
eed<   y)TreeNodezj
    Private class that creates the tree data structure from the orthography profile for
    parsing.
    char)default_factorychildrenFsentinelN)__name__
__module____qualname____doc__str__annotations__dataclassesfielddictr	   r
   bool     W/Users/ahmed/devFolder/claude-voice/.venv/lib/python3.12/site-packages/segments/tree.pyr   r   
   s8     I&7k&7&7&MHd3
?#MHdr   r   c            
       d    e Zd ZdZdee   fdZefdedee   fdZ	de
dededeee   ef   fd	Zy
)Treez
    The parse tree.

    >>> t = Tree('abcdefg')
    >>> t.parse('abcde')
    ['a', 'b', 'c', 'd', 'e']
    >>> t = Tree(['ab', 'c', 'de'])
    >>> t.parse('abcde')
    ['ab', 'c', 'de']
    	graphemesc                 b    d }t        dd      | _        |D ]  } || j                  |        y )Nc                 j    |D ]'  }| j                   j                  |t        |            } ) d| _        y )NT)r	   
setdefaultr   r
   )nodeliner   s      r   _multigraphz"Tree.__init__.<locals>._multigraph!   s-    }}//htnE  DMr    T)r
   )r   root)selfr   r    graphemes       r   __init__zTree.__init__    s/    	! R$/	!H		8, "r   r   returnc                    | j                  | j                  |d      \  }}||d }|rX|j                   ||d                |dd }| j                  | j                  |d      \  }}|j                  |       ||d }|rX|S )zSegment `line` into graphemes.r   N   )_parser"   appendextend)r#   r   errorresidxremris           r   parsez
Tree.parse+   s    ;;tyy$2S34jJJuSV}%ab'C;;tyy#q1DAqJJqMab'C  
r   r"   r.   c                 J   t        |      dk(  rg |fS g }d}|}|}|t        |      k  rt|j                  j                  ||         }|dz  }|snN|j                  r3| j	                  |||d ||z         \  }}|d| g}|j                  |       |t        |      k  rt|r|}||fS )z
        :param root: Tree node.
        :param line: String to parse.
        :param idx: Global counter of characters parsed.
        :return: (list of parsed graphemes, incremented character count)
        r   r(   N)lenr	   getr
   r)   r+   )	r#   r"   r   r.   r2   currr   cidxsubparses	            r   r)   zTree._parse8   s     t9>s7NSY==$$T$Z0DAID}}!%T4;d
!K$ etX& SY Cczr   N)r   r   r   r   r   r   r%   r   listr2   r   inttupler)   r   r   r   r   r      sa    		-(3- 	- &- # c 8 3 S U49c>=R r   r   )	r   r   collections.abcr   segments.errorsr   	dataclassr   r   r   r   r   <module>r?      s>     $ #   ? ?r   