
    #h                        S SK Jr  S SKrS SKJr  S SKJr  S SKJr  \" S5      r	\
" 5       r\4S jrSS jrSS	 jrSSS \4S
 jrSS jr\SS j5       rg)    )annotationsN)Iterable)cache)TypeVar_Tc                     [        [        U 5      5      $ ! [         a!  nU[        L a  [	        S5      UeUs SnA$ SnAff = f)a  Return the first item of *iterable*, or *default* if *iterable* is
empty.

    >>> first([0, 1, 2, 3])
    0
    >>> first([], 'some default')
    'some default'

If *default* is not provided and there are no items in the iterable,
raise ``ValueError``.

:func:`first` is useful when you have a generator of expensive-to-retrieve
values and want any arbitrary one. It is marginally shorter than
``next(iter(iterable), default)``.

zKfirst() was called on an empty iterable, and no default value was provided.N)nextiterStopIteration
_undefined
ValueError)iterabledefaultes      O/Users/user/Downloads/htwk/venv/lib/python3.13/site-packages/tatsu/util/misc.pyfirstr      sN    $DN## 

 j .  
s    
A<AAc                    U c  g U R                  U R                  SS S9n[        U5      S:X  a  US   $ U=(       d    U R                  5       $ )Nr   r      )groupsstringlengroup)mgs     r   match_to_findr   .   sH    y	!A'A
1v{t~AGGI    c              #    #    [        U [        R                  5      (       a  U O[        R                  " XS9nUb  UR	                  XUS9nO$Ub  UR	                  XS9nOUR	                  U5      nU H  n[        U5      v   M     g7f)zt
like finditer(), but with return values like findall()

implementation taken from cpython/Modules/_sre.c/findall()
)flagsN)posendpos)r    )
isinstancerePatterncompilefinditerr   )patternr   r    r!   r   riteratorr   s           r   findalliterr*   8   s      grzz** 	ZZ- 
 ::ff:=	::f:.::f%A s   BBc           
     (    [        [        XX#US9US9$ )zF
Avoids using the inefficient findall(...)[0], or first(findall(...))
)r    r!   r   r   )r   r*   )r'   r   r    r!   r   r   s         r   	findfirstr,   M   s      G5I r   c                  ^ [        T5      m/ nSU4S jjn[        [        U 5      U" 5       -
  5      nU(       av  UR                  5       nUR                  U5        T VVs1 s H  u  pgXe:X  d  M  UiM     nnnTU Vs1 s H  ouU4iM     sn-  mUR	                  X" 5       -
  5        U(       a  Mv  T(       a  [        S5      e[        [        U5      5      $ s  snnf s  snf )Nc                 >   > T V Vs1 s H  u  pUiM	     snn $ s  snn f N )_r   orders     r   with_incomingtopsort.<locals>.with_incoming]   s     %&fq&&&s   z)There are cycles in the topological order)returnzset[_T])setlistpopappendextendr   reversed)	nodesr2   resultr3   pendingnxr   outgoings	    `       r   topsortrB   W   s     JEF' 3u:/0G
KKMa %*4E&1QVAE4(+(Qa&(++x-/12 ' DEE !! 5+s    C/C=Cc                    [        U [        R                  5      (       a  U $ [        U [        [        -  5      (       a  [        R
                  " U 5      $ S $ r/   )r"   r#   r$   strbytesr%   )regexs    r   cached_re_compilerG   q   s<    %$$ *53; @ @2::eJdJr   )r   zre.Match)NNr   )r<   zIterable[_T]r2   zIterable[tuple[_T, _T]]r5   zlist[_T])rF   zre.Pattern | str | bytesr5   zre.Pattern | None)
__future__r   r#   collections.abcr   	functoolsr   typingr   r   objectr   r   r   r*   r,   rB   rG   r0   r   r   <module>rM      sd    " 	 $  T]X
 ' B* $(Az "4 K Kr   