
    #hI>                       S r SSKJr  SSKrSSKrSSKJr  SSKJr	  SSK
Jr  SSKJrJr  SS	KJrJrJrJrJr  S
SKJrJr   " S S\5      rS r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r  " S S\5      r! " S S \!5      r" " S! S"\5      r# " S# S$\5      r$ " S% S&\5      r% " S' S(\5      r& " S) S*\!5      r' " S+ S,\!5      r( " S- S.\5      r) " S/ S0\5      r* " S1 S2\!5      r+ " S3 S4\!5      r, " S5 S6\,5      r- " S7 S8\!5      r. " S9 S:\.5      r/ " S; S<\.5      r0 " S= S>\.5      r1 " S? S@\/5      r2 " SA SB\/5      r3 " SC SD\5      r4 " SE SF\,5      r5 " SG SH\!5      r6 " SI SJ\5      r7 " SK SL\!5      r8 " SM SN\85      r9 " SO SP\85      r: " SQ SR\95      r; " SS ST\5      r< " SU SV\5      r= " SW SX\!5      r> " SY SZ\!5      r? " S[ S\\?5      r@ " S] S^\5      rAg)_z<
Python code generation for models defined with tatsu.model
    )annotationsN   )grammars)
OrderedSet)CodegenError)BASE_CLASS_TOKENNode)compress_seqindent	safe_name	timestamptrim   )CodeGeneratorModelRendererc                      \ rS rSrS rSrg)PythonCodeGenerator   c                    [        U[        5      (       d  g UR                  R                  n[	        5       R                  U5      nU(       a  [        U[        5      (       d  [        SU S35      eU$ )NzRenderer for z
 not found)	
isinstancer	   	__class____name__globalsget
issubclassBaser   )selfnodenamerenderers       T/Users/user/Downloads/htwk/venv/lib/python3.13/site-packages/tatsu/codegen/python.py_find_renderer_class(PythonCodeGenerator._find_renderer_class   sY    $%%~~&&9==&z(D99tfJ?@@     N)r   
__module____qualname____firstlineno__r"   __static_attributes__r%   r$   r!   r   r      s    r$   r   c                4    [        5       R                  U 5      $ N)r   render)models    r!   codegenr.      s     ''..r$   c                  $    \ rS rSrS rS rSrSrg)r   !   c                6    U R                   R                  5       $ r+   )r   definesr   s    r!   r2   Base.defines"   s    yy  ""r$   c                  ^ [        U R                  5       5      n[        S U 5       5      m[        U4S jU 5       5      nU(       d  T(       d  gSR                  SR	                  [        S U 5       5      5      5      nSR                  SR	                  [        S T 5       5      5      5      mT(       d	  SU ST S	3$ S
[        U R                  UT4-  5      -   $ )Nc              3  N   #    U  H  u  pU(       d  M  [        U5      v   M     g 7fr+   r   ).0dvalues      r!   	<genexpr>0Base.make_defines_declaration.<locals>.<genexpr>'   s     C'haU\Yq\\'s   %%c              3  `   >#    U  H#  u  pU(       a  M  UT;  d  M  [        U5      v   M%     g 7fr+   r7   )r8   r9   r:   ldefss      r!   r;   r<   (   s1      
# e^ IaLL#s   ... z[{}], c              3  8   #    U  H  n[        U5      v   M     g 7fr+   reprr8   r9   s     r!   r;   r<   1        2JEq477E   c              3  8   #    U  H  n[        U5      v   M     g 7fr+   rB   rD   s     r!   r;   r<   2   rE   rF   z

    self._define()
)r
   r2   osetformatjoinsortedr   define_template)r   r2   sdefsr>   s      @r!   make_defines_declarationBase.make_defines_declaration%   s    t||~.C'CC 
#
 
 MM$))F2JE2J,J"KLEMM$))F2JE2J,J"KLE.ugRwa@@d4#7#75%.#HIIIr$   zW            self._define(
                %s,
                %s,
            )        r%   N)r   r&   r'   r(   r2   rP   rN   r)   r%   r$   r!   r   r   !   s    #J&Or$   r   c                      \ rS rSrSrSrg)Void@   zself._void()r%   Nr   r&   r'   r(   templater)   r%   r$   r!   rS   rS   @       Hr$   rS   c                      \ rS rSrSrSrg)AnyD   zself._any()r%   NrU   r%   r$   r!   rY   rY   D       Hr$   rY   c                      \ rS rSrSrSrg)FailH   zself._fail()r%   NrU   r%   r$   r!   r]   r]   H   rW   r$   r]   c                      \ rS rSrS rSrSrg)CommentL   c                    SR                  S U R                  R                  R                  5        5       5      nUR	                  US9  g )NrI   c              3  .   #    U  H  nS U< 3v   M     g7f)z# Nr%   )r8   cs     r!   r;   (Comment.render_fields.<locals>.<genexpr>N   s      
 >1bJ >s   )lines)rL   r   comment
splitlinesupdate)r   fieldsrf   s      r!   render_fieldsComment.render_fieldsM   s@    		 
 $		 1 1 < < >
 
 	E"r$   z	
{lines}
r%   Nr   r&   r'   r(   rk   rV   r)   r%   r$   r!   r`   r`   L   s    # Hr$   r`   c                      \ rS rSrSrg)
EOLCommentV   r%   Nr   r&   r'   r(   r)   r%   r$   r!   ro   ro   V       r$   ro   c                      \ rS rSrSrSrg)EOFZ   zself._check_eof()r%   NrU   r%   r$   r!   rt   rt   Z   s    "Hr$   rt   c                      \ rS rSrSrSrg)
_Decorator^   z{exp}r%   NrU   r%   r$   r!   rw   rw   ^   s    Hr$   rw   c                      \ rS rSrSrSrg)Groupb   zM                with self._group():
                {exp:1::}                r%   NrU   r%   r$   r!   rz   rz   b   	    Hr$   rz   c                      \ rS rSrS rSrSrg)Tokeni   c                \    UR                  [        U R                  R                  5      S9  g )N)token)ri   rC   r   r   r   rj   s     r!   rk   Token.render_fieldsj   s    D12r$   zself._token({token})r%   Nrm   r%   r$   r!   r~   r~   i   s    3 &Hr$   r~   c                      \ rS rSrS rSrSrg)Constantp   c                \    UR                  [        U R                  R                  5      S9  g )N)constant)ri   rC   r   literalr   s     r!   rk   Constant.render_fieldsq   s    tDII$5$567r$   zself._constant({constant})r%   Nrm   r%   r$   r!   r   r   p   s    8 ,Hr$   r   c                      \ rS rSrS rSrSrg)Alertw   c                    UR                  [        U R                  R                  5      U R                  R                  S9  g )N)r   level)ri   rC   r   r   r   r   s     r!   rk   Alert.render_fieldsx   s)    d499#4#45TYY__Mr$   zself._alert({literal}, {level})r%   Nrm   r%   r$   r!   r   r   w   s    N 1Hr$   r   c                      \ rS rSrS rSrSrg)Pattern~   c                `    [        U R                  R                  5      nUR                  US9  g )N)pattern)rC   r   r   ri   )r   rj   raw_reprs      r!   rk   Pattern.render_fields   s$    		))*h'r$   zself._pattern({pattern})r%   Nrm   r%   r$   r!   r   r   ~   s    ( *Hr$   r   c                      \ rS rSrSrSrg)	Lookahead   zJ                with self._if():
                {exp:1::}                r%   NrU   r%   r$   r!   r   r      r|   r$   r   c                      \ rS rSrSrSrg)NegativeLookahead   zM                with self._ifnot():
                {exp:1::}                r%   NrU   r%   r$   r!   r   r      r|   r$   r   c                      \ rS rSrS rSrSrg)Sequence   c                   ^  UR                  SR                  U 4S jT R                  R                   5       5      S9  T R	                  5       nUR                  US9  g )NrI   c              3  F   >#    U  H  nTR                  U5      v   M     g 7fr+   rend)r8   sr   s     r!   r;   )Sequence.render_fields.<locals>.<genexpr>   s     #M:LQDIIaLL:L   !)seqr2   )ri   rL   r   sequencerP   r   rj   r2   s   `  r!   rk   Sequence.render_fields   sF    $))#M$)):L:L#MMN//1g&r$   z/{seq}
                {defines}                r%   Nrm   r%   r$   r!   r   r      s    '
Hr$   r   c                  2   ^  \ rS rSrS rU 4S jrSrSrU =r$ )Choice   c                x  ^  T R                   R                  5       nU(       a  [        R                  " USS9nS/UQnOS/nU Vs/ s H  n[	        U5      PM     nnUR                  T R                  5       US9  UR                  SR                  U 4S jT R                   R                   5       5      S9  g s  snf )	N(   )widthzexpecting one of: zno available options)nerrorrI   c              3  F   >#    U  H  nTR                  U5      v   M     g 7fr+   r   )r8   or   s     r!   r;   'Choice.render_fields.<locals>.<genexpr>   s     F4Eqdiill4Er   )options)	r   lookahead_strtextwrapwraprC   ri   counterrL   r   )r   rj   firstsetmsglinesr   es   `     r!   rk   Choice.render_fields   s    99**,}}XR8H)5H5E+,E"'(%Qa%(e4IIFDII4E4EFF 	 	
 )s   B7c                   > [        U R                  R                  5      S:X  a   U R                  " U R                  S   40 UD6$ [        TU ]  " S0 UD6$ )Nr   r   r%   )lenr   r   r   superr,   r   rj   r   s     r!   r,   Choice.render   sH    tyy  !Q&99T\\!_7777>+F++r$   z                with self._choice():
                {options:1::}
                    self._error(
                {error:2:\n:}  # noqa: COM812
                    )                r%   	r   r&   r'   r(   rk   r,   rV   r)   __classcell__r   s   @r!   r   r      s    
,Hr$   r   c                      \ rS rSrS rSrSrg)Option   c                B    U R                  5       nUR                  US9  g )Nr   )rP   ri   r   s      r!   rk   Option.render_fields   s    //1g&r$   zN                with self._option():
                {exp:1::}                r%   Nrm   r%   r$   r!   r   r      s    'Hr$   r   c                  2   ^  \ rS rSrS rU 4S jrSrSrU =r$ )Closure   c                >    UR                  U R                  5       S9  g N)r   ri   r   r   s     r!   rk   Closure.render_fields       'r$   c                   > SU R                   R                  R                  5       ;   a  [        U R                    S35      eS[        TU ]  " S0 UD6-   $ )Nr%   z may repeat empty sequencerI   r   exp	lookaheadr   r   r,   r   s     r!   r,   Closure.render   sJ    ((**$)),FGHHegn.v...r$   zq                def block{n}():
                {exp:1::}
                self._closure(block{n})                r%   r   r   s   @r!   r   r      s    (/
Hr$   r   c                      \ rS rSrSrSrg)PositiveClosure   zz                def block{n}():
                {exp:1::}
                self._positive_closure(block{n})                r%   NrU   r%   r$   r!   r   r      s	    Hr$   r   c                  2   ^  \ rS rSrS rU 4S jrSrSrU =r$ )Join   c                >    UR                  U R                  5       S9  g r   r   r   s     r!   rk   Join.render_fields   r   r$   c                   > SU R                   R                  R                  5       ;   a  [        S5      eS[        TU ]  " S0 UD6-   $ )Nr%   zmay repeat empty sequencerI   r   r   s     r!   r,   Join.render   s?    ((**:;;egn.v...r$   z                def sep{n}():
                {sep:1::}

                def block{n}():
                {exp:1::}
                self._join(block{n}, sep{n})                r%   r   r   s   @r!   r   r      s    (/
Hr$   r   c                      \ rS rSrSrSrg)PositiveJoin   z                def sep{n}():
                {sep:1::}

                def block{n}():
                {exp:1::}
                self._positive_join(block{n}, sep{n})                r%   NrU   r%   r$   r!   r   r      	    Hr$   r   c                      \ rS rSrSrSrg)Gather   z                def sep{n}():
                {sep:1::}

                def block{n}():
                {exp:1::}
                self._gather(block{n}, sep{n})                r%   NrU   r%   r$   r!   r   r      r   r$   r   c                      \ rS rSrSrSrg)PositiveGatheri  z                def sep{n}():
                {sep:1::}

                def block{n}():
                {exp:1::}
                self._positive_gather(block{n}, sep{n})                r%   NrU   r%   r$   r!   r   r     r   r$   r   c                      \ rS rSrSrSrg)LeftJoini  z                def sep{n}():
                {sep:1::}

                def block{n}():
                {exp:1::}
                self._left_join(block{n}, sep{n})                r%   NrU   r%   r$   r!   r   r     r   r$   r   c                      \ rS rSrSrSrg)	RightJoini  z                def sep{n}():
                {sep:1::}

                def block{n}():
                {exp:1::}
                self._right_join(block{n}, sep{n})                r%   NrU   r%   r$   r!   r   r     r   r$   r   c                      \ rS rSrSrSrg)EmptyClosurei)  zself._empty_closure()r%   NrU   r%   r$   r!   r   r   )  s    &Hr$   r   c                      \ rS rSrSrSrg)SkipToi-  ze                def block{n}():
                {exp:1::}
                self._skip_to(block{n})    r%   NrU   r%   r$   r!   r   r   -  s	    Hr$   r   c                      \ rS rSrSrSrg)Optionali5  zP                with self._optional():
                {exp:1::}                r%   NrU   r%   r$   r!   r   r   5  r|   r$   r   c                      \ rS rSrSrSrg)Cuti<  zself._cut()r%   NrU   r%   r$   r!   r   r   <  r[   r$   r   c                  $    \ rS rSrS rS rSrSrg)Namedi@  c                V    U R                    SU R                  U R                  5       3$ )N:)r   r   r   r3   s    r!   __str__Named.__str__A  s%    ))Adii1233r$   c                z    UR                  U R                  5       [        U R                  R                  5      S9  g )N)r   r   )ri   r   r   r   r   r   s     r!   rk   Named.render_fieldsD  s%    Ytyy~~-FGr$   zT
                {exp}
                self.name_last_node('{name}')                r%   N)r   r&   r'   r(   r   rk   rV   r)   r%   r$   r!   r   r   @  s    4HHr$   r   c                      \ rS rSrSrSrg)	NamedListiM  z[
                {exp}
                self.add_last_node_to_name('{name}')                r%   NrU   r%   r$   r!   r  r  M  r|   r$   r  c                      \ rS rSrSrg)OverrideiT  r%   Nrq   r%   r$   r!   r  r  T  rr   r$   r  c                      \ rS rSrSrg)OverrideListiX  r%   Nrq   r%   r$   r!   r  r  X  rr   r$   r  c                      \ rS rSrSrg)Speciali\  r%   Nrq   r%   r$   r!   r	  r	  \  rr   r$   r	  c                      \ rS rSrSrSrg)RuleRefi`  zself._{name}_()r%   NrU   r%   r$   r!   r  r  `  s     Hr$   r  c                  ,   ^  \ rS rSrU 4S jrSrSrU =r$ )RuleIncludeid  c                   > [         TU ]  U5        UR                  U R                  U R                  R
                  R                  5      S9  g N)r   )r   rk   ri   r   r   ruler   r   s     r!   rk   RuleInclude.render_fieldse  s5    f%$))DIINN$6$678r$   z'
                {exp}
                r%   )r   r&   r'   r(   rk   rV   r)   r   r   s   @r!   r  r  d  s    9Hr$   r  c                  F   ^  \ rS rSr\S 5       rU 4S jrS rSrSr	Sr
U =r$ )Rulein  c                    [        U [        [        -  5      (       a  [        U 5      $ [	        U R                  [        5      S   5      $ )Nr   )r   intfloatstrrC   splitr   )ps    r!   
param_reprRule.param_repro  s6    au%%q6M 01!455r$   c                   >  [         TU ]  " S0 UD6$ ! [         a*  n[        U R                  R                   SU 35      UeS nAff = f)N=r%   )r   r,   r   r   r   )r   rj   r   r   s      r!   r,   Rule.renderv  sK    	?7>+F++ 	?$))..!11#67Q>	?s    
A%AAc                h  ^  T R                  5         S=p#T R                  R                  (       a/  SR                  U 4S jT R                  R                   5       5      nT R                  R                  (       a3  SR                  U 4S jT R                  R                  5        5       5      nU(       a  U(       a	  US-   U-   nO	U(       a  UnUR                  US9  Sn[        T R                  [        R                  5      (       d  T R                  5       nUR                  US9  T R                  R                  nUR                  U(       a  SOSS9  UR                  T R                  R                  (       d	  U(       d  S	OSS
9  UR                  T R                  R                  (       a  SOSS9  g )Nr?   r@   c              3  d   >#    U  H%  nTR                  TR                  U5      5      v   M'     g 7fr+   r  r   )r8   r  r   s     r!   r;   %Rule.render_fields.<locals>.<genexpr>  s)      7G!		!--7Gs   -0c              3  r   >#    U  H,  u  pU S TR                  TR                  U5      5       3v   M.     g7f)r  Nr!  )r8   kvr   s      r!   r;   r"    s7      !1DA #Qttyy|4561s   47)paramsr   z	
@leftrec)leftrecz
@nomemo)nomemoz
@isname)isname)reset_counterr   r&  rL   kwparamsitemsri   r   r   r   rP   
is_leftrecis_memoizableis_name)r   rj   r&  r+  sdefinesr'  s   `     r!   rk   Rule.render_fields|  sH   99YY 7;yy7G7G F 99yy ! MM//1! H
 hd]X-FFV$$))X__55446Hh'))&&gl2>99**7  	 	

 	DII,=,=[2Fr$   z
        @tatsumasu({params})        {leftrec}        {nomemo}        {isname}
        def _{name}_(self):
        {exp:1::}
        zV            self._define(
                %s,
                %s
            )        r%   )r   r&   r'   r(   staticmethodr  r,   rk   rV   rN   r)   r   r   s   @r!   r  r  n  s/    6 6? GDHOr$   r  c                  .   ^  \ rS rSrS rU 4S jrSrU =r$ )	BasedRulei  c                6    U R                   R                  5       $ r+   )rhsr2   r3   s    r!   r2   BasedRule.defines  s    xx!!r$   c                V   > [         TU ]  U5        UR                  U R                  S9  g r  )r   rk   ri   r6  r   s     r!   rk   BasedRule.render_fields  s"    f%$((#r$   r%   )r   r&   r'   r(   r2   rk   r)   r   r   s   @r!   r4  r4    s    "$ $r$   r4  c                  "    \ rS rSrS rSrSrSrg)Grammari  c                d   [        U R                  5      nU R                  R                   Vs/ s H%  nUR	                  [        UR                  5      S9PM'     nn[        SR                  U5      5      nU R                  R                  R                  nU(       d  SnO1[        U[        R                  5      (       a  [        U5      nOSU S3nU R                  R                  R                  b*  [        U R                  R                  R                  5      nOSnU R                  R                  R                   nU R                  R                  R"                  nU R                  R                  R$                  n	[        U R                  R                  R&                  =(       d    S5      n
[        U R                  R                  R(                  5      n[        U R                  R                  R*                  5      nSR                  U R                  R                   Vs/ s H!  o0R-                  U5      R/                  5       PM#     sn5      n[1        [3        S [1        [5        5       5      R7                  S5       5       5      5      nU R8                   Vs/ s H  oc  M  [1        U5      PM     nnSR                  S	 U 5       5      nU(       a  S
U S3nUR;                  [        U5      U R                  R                  S   R                  UUUUUUU	UU
UUS9  g s  snf s  snf s  snf )N)r   rI   Nonezre.compile(r"z")r?   c              3  8   #    U  H  n[        U5      v   M     g 7fr+   )r  )r8   r   s     r!   r;   (Grammar.render_fields.<locals>.<genexpr>  s     H,GqCFF,GrF   .c              3  0   #    U  H  nS U< S3v   M     g7f)z    ,Nr%   )r8   r$  s     r!   r;   r?    s     =HqtA5]Hs   z(
z
)r   )rulesstartabstract_rulesversion
whitespace	nameguard
ignorecaseleft_recursion	parseinfokeywords	namecharscommentseol_comments)r   abstract_rule_templater   rC  rK   r   r   r   rL   configrG  r   rer   rC   rH  rI  rJ  rK  rM  rN  rO  get_rendererr,   r  tupler   r  rL  ri   )r   rj   abstract_templater  rE  rG  rH  rI  rJ  rK  rM  rN  rO  rC  rF  r$  rL  s                    r!   rk   Grammar.render_fields  s}    !<!<= 		
' $$)DII*>$?' 	 
  		. 9:YY%%00
J
BJJ//j)J(B7J99%%1TYY--778IIYY%%00
))88II$$..	))339r:			((112DII,,99:		:>))//J/$t$++-/J
 eHC	,<,B,B3,GHHI$(MMCMqFCFMC99=H==XJc*H-))//!$)))!!)% 	 	
K
6 K
 Ds   ,L#%(L(L-'L-zK
            def {name}(self, ast):
                return ast
            a                  #!/usr/bin/env python3

                # WARNING: CAVEAT UTILITOR
                #
                # This file was automatically generated by TatSu.
                #
                #    https://pypi.python.org/pypi/tatsu/
                #
                # Any changes you make to it will be overwritten the next time
                # the file is generated.

                # ruff: noqa: C405, I001, F401, SIM117

                import sys
                from pathlib import Path

                from tatsu.buffering import Buffer
                from tatsu.parsing import Parser
                from tatsu.parsing import tatsumasu
                from tatsu.parsing import leftrec, nomemo, isname
                from tatsu.infos import ParserConfig
                from tatsu.util import re, generic_main


                KEYWORDS: set[str] = set({keywords})


                class {name}Buffer(Buffer):
                    def __init__(self, text, /, config: ParserConfig | None = None, **settings):
                        config = ParserConfig.new(
                            config,
                            owner=self,
                            whitespace={whitespace},
                            nameguard={nameguard},
                            ignorecase={ignorecase},
                            namechars={namechars},
                            parseinfo={parseinfo},
                            comments={comments},
                            eol_comments={eol_comments},
                            keywords=KEYWORDS,
                            start={start!r},
                        )
                        config = config.replace(**settings)
                        super().__init__(text, config=config)


                class {name}Parser(Parser):
                    def __init__(self, /, config: ParserConfig | None = None, **settings):
                        config = ParserConfig.new(
                            config,
                            owner=self,
                            whitespace={whitespace},
                            nameguard={nameguard},
                            ignorecase={ignorecase},
                            namechars={namechars},
                            parseinfo={parseinfo},
                            comments={comments},
                            eol_comments={eol_comments},
                            left_recursion={left_recursion},
                            keywords=KEYWORDS,
                            start={start!r},
                        )
                        config = config.replace(**settings)
                        super().__init__(config=config)

                {rules}


                class {name}Semantics:
                {abstract_rules}


                def main(filename, **kwargs):
                    if not filename or filename == '-':
                        text = sys.stdin.read()
                    else:
                        text = Path(filename).read_text()
                    parser = {name}Parser()
                    return parser.parse(
                        text,
                        filename=filename,
                        **kwargs,
                    )


                if __name__ == '__main__':
                    import json
                    from tatsu.util import asjson

                    ast = generic_main(main, {name}Parser, name='{name}')
                    data = asjson(ast)
                    print(json.dumps(data, indent=2))
                r%   N)r   r&   r'   r(   rk   rP  rV   r)   r%   r$   r!   r;  r;    s    5
n
]Hr$   r;  )B__doc__
__future__r   rR  r   r?   r   collectionsr   rJ   
exceptionsr   objectmodelr   r	   utilr
   r   r   r   r   cgbaser   r   r   r.   r   rS   rY   r]   r`   ro   rt   rw   rz   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r	  r  r  r  r4  r;  r%   r$   r!   <module>r^     s   # 	   , % 0 C C 0	- 	/= >4 $ 4 d 	 	#$ # J &D &,t ,1D 1*d *
 
 t T :Z j  g : &4 T T |  '4 'W z $ 
J 
 	u 		9 		d 	!d !* >: >B$ $Zd Zr$   