
    #Zj	                     x    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dS )	z
A parse tree.
    N)Iterable)replacec                   h    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<   dS )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     Y/Users/jameslopez/projects/MentorCore/.venv/lib/python3.11/site-packages/segments/tree.pyr   r   
   s`           III&7k&7&M&M&MHd3
?#MMMHdr   r   c            
       ~    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d
S )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                 d    d }t          dd          | _        |D ]} || j        |           d S )Nc                 n    |D ]*}| j                             |t          |                    } +d| _        d S )NT)r	   
setdefaultr   r
   )nodeliner   s      r   _multigraphz"Tree.__init__.<locals>._multigraph!   s=     F F}//htnnEE DMMMr    T)r
   )r   root)selfr   r    graphemes       r   __init__zTree.__init__    sW    	! 	! 	! R$///	! 	- 	-HK	8,,,,	- 	-r   r   returnc                 8   |                      | j        |d          \  }}||d         }|rn|                     ||d                              |dd         }|                      | j        |d          \  }}|                    |           ||d         }|n|S )zSegment `line` into graphemes.r   N   )_parser"   appendextend)r#   r   errorresidxremris           r   parsez
Tree.parse+   s    ;;ty$22S344j 	JJuuSV}}%%%abb'C;;ty#q11DAqJJqMMMabb'C  	 
r   r"   r.   c                    t          |          dk    rg |fS g }d}|}|}|t          |          k     r|j                            ||                   }|dz  }|sn_|j        rE|                     |||d         ||z             \  }}|d|         g}|                    |           |t          |          k     |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     t99>>s7NSYY=$$T$Z00DAID } '!%T4;d
!K!K$ eteX&&& SYY  	Cczr   N)r   r   r   r   r   r   r%   r   listr2   r   inttupler)   r   r   r   r   r      s        	 		-(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   