
    #h                     *   S SK r S SKJr  S SKJr  S SKJrJrJrJr  SSK	J
r
Jr  SSKJr  SSKJrJr  SS	KJr  S
\ -   S-   r\" SSS/5      rSrSS jrS rS rS r " S S\5      r " S S\5      r " S S\
5      r " S S\5      r " S S\5      rg)    N)
namedtuple)datetime)compress_seqindentre	safe_name   )CodeGeneratorModelRenderer)CodegenError)BASE_CLASS_TOKENNode)Rendererz
(?!\d)\w+(z(?!\d)\w+)*TypeSpec
class_namebasez6
@dataclass(eq=False)
class ModelBase(Node):
    pass
c                 0    [        5       R                  XS9$ )N	base_type)ObjectModelCodeGeneratorrender)modelr   s     Y/Users/user/Downloads/htwk/venv/lib/python3.13/site-packages/tatsu/codegen/objectmodel.pycodegenr      s    #%,,U,HH    c                     U R                   (       d  g U R                   S   n[        U[        5      (       d  g [        R                  " [
        U5      (       d  g US   R                  5       (       d  g U$ )Nr   )params
isinstancestrr   matchNODE_NAME_PATTERNisupper)ruletypespecs     r   _get_node_class_namer%      sY    ;;{{1~Hh$$88%x00A;  Or   c                 ,   [        U 5      (       d  / $ U R                  S   R                  [        5      nU Vs/ s H  n[	        U5      PM     snS/-   n/ n[        US S 5       H&  u  pVX5S-      nUR                  [        Xg5      5        M(     U$ s  snf )Nr   	ModelBase   )r%   r   splitr   r   	enumerateappendr   )r#   specnclass_namesr$   ir   r   s           r   	_typespecr1   *   s    %%	;;q> 01D)-.A9Q<.+>KH";s#34q5!23 5 O /s   Bc                    [         R                  " U 5      (       d  [        S5      e[         R                  " U 5      nU(       d  [        S5      eUR                  nU R
                  n UR                  S5      n[        XS   5      nUSS   H  n[        XV5      nM     XP:X  d   e X#4$ ! [         a  n[        S5      UeS nAff = f)NzBase type has to be a classz#Base type has to be inside a module.r   r)   z0Couldn't find base type, it has to be importable)	inspectisclassr   	getmodule__name____qualname__r*   getattrAttributeError)clsmodule
modulenamenameidentscls_identes           r   _get_full_namerC   9   s    ??3899s#F@AAJD
Cvay)ABZE4'D   {{   >
	s   (=B) )
C3B??Cc                   2   ^  \ rS rSrU 4S jrS rSrSrU =r$ )BaseTypeRendererS   c                 .   > [         TU ]  5         Xl        g N)super__init__r   )selfr   	__class__s     r   rJ   BaseTypeRenderer.__init__T   s    "r   c                     [        U R                  5      u  p#SU;   a  SU 3nUR                  S5      S   nOSnUR                  X#US9  g )Nr3   z
ModelBase = r   z as ModelBase)r<   r>   lookup)rC   r   r*   update)rK   fieldsr<   r>   rO   s        r   render_fieldsBaseTypeRenderer.render_fieldsX   sL    %dnn5$;%dV,F::c?1%D$FVv>r   z4
        from {module} import {name}{lookup}        r   )	r7   
__module__r8   __firstlineno__rJ   rR   template__static_attributes____classcell__rL   s   @r   rE   rE   S   s    #?Hr   rE   c                   ,   ^  \ rS rSrU 4S jrSrSrU =r$ )BaseClassRendererg   c                 f   > [         TU ]  5         UR                  U l        UR                  U l        g rH   )rI   rJ   r   r   )rK   r-   rL   s     r   rJ   BaseClassRenderer.__init__h   s$    //II	r   zZ
        @dataclass(eq=False)
        class {class_name}({base}):
            pass        )r   r   )r7   rT   r8   rU   rJ   rV   rW   rX   rY   s   @r   r[   r[   g   s    
Hr   r[   c                       \ rS rSrS rSrg)r   t   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)	r   r   rL   r7   globalsget
issubclassr   r   )rK   noder>   renderers       r   _find_renderer_class-ObjectModelCodeGenerator._find_renderer_classu   sY    $%%~~&&9==&z(MBBtfJ?@@r    N)r7   rT   r8   rU   rg   rW   ri   r   r   r   r   t   s    r   r   c                       \ rS rSrS rSrSrg)Rule   c                 b   [        U R                  5       5       VVs/ s H  u  p#[        U5      PM     nnn[        [	        U5      5      nUS   nSR                  S U 5       5      nU(       a  [        U5      O
[        S5      nUR                  UR                  UR                  US9  g s  snnf )Nr-   
c              3   *   #    U  H	  o S 3v   M     g7f)z: Any = NoneNri   ).0ds     r   	<genexpr>%Rule.render_fields.<locals>.<genexpr>   s     <t!S-ts   pass)r   r   kwargs)
r   definesr   sortedsetjoinr   rP   r   r   )rK   rQ   rq   _defsr-   ru   s          r   rR   Rule.render_fields   s    )5dlln)EF)E	!)EFc$i f~<t<<#)vf~TYYv 	 	
 Gs   B+zZ
        @dataclass(eq=False)
        class {class_name}({base}):
        {kwargs}        ri   Nr7   rT   r8   rU   rR   rV   rW   ri   r   r   rk   rk      s    

Hr   rk   c                       \ rS rSrS rSrSrg)Grammar   c           	      d  ^ [        5       m/ n/ nU R                  R                   H  n[        U5      nU(       d  M  US   n[	        USS  5      nUR
                  T;  a  UR                  XF45        UR                  U4S jU 5       5        TR                  S U 5       5        M     U Vs/ s H  n[        U5      R                  5       PM     n	nU VVs/ s H#  u  pHU R                  U5      R                  US9PM%     n
nnSR                  U	5      n	U	(       a  U	S-  n	SR                  U
5      n
[        R                  " 5       R                  S5      nUS	   nUR                  U R                  R                   U	U
UU(       a  [#        U5      R                  5       O[$        S
9  g s  snf s  snnf )Nr   r)   c              3   L   >#    U  H  nUR                   T;  d  M  Uv   M     g 7frH   r   )rp   r   node_class_namess     r   rr   (Grammar.render_fields.<locals>.<genexpr>   s'      %D??*:: %s   $	$c              3   8   #    U  H  oR                   v   M     g 7frH   r   )rp   ss     r   rr   r      s     #@%QLL%s   )r-   z


z

z%Y.%m.%d.%Hr   )r>   base_class_declarationsmodel_class_declarationsversionr   )rx   re   rulesr1   reversedr   r,   extendrP   r[   r   get_rendererry   r   nowstrftimer>   rE   DEFAULT_BASE_TYPE)rK   rQ   basesmodel_rulesr#   specs	node_spec	base_specr-   r   r   r   r   r   s                @r   rR   Grammar.render_fields   s   5IIOODdOEaI qr+I##+;;""D#45LL %  ###@%#@@# $( :?#
9>d#**, 	  #
 *$
)
 d#***5) 	! $

 #+--0G"H"#v-##+==1I#J ,,.))-8;'	$;%= 'y188:" 	 	
%#
$
s   -#F'*F,a                  #!/usr/bin/env python

                # 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.

                from __future__ import annotations

                from typing import Any
                from dataclasses import dataclass

                from tatsu.objectmodel import Node
                from tatsu.semantics import ModelBuilderSemantics

                {base_type}

                class {name}ModelBuilderSemantics(ModelBuilderSemantics):
                    def __init__(self, context=None, types=None):
                        types = [
                            t for t in globals().values()
                            if type(t) is type and issubclass(t, ModelBase)
                        ] + (types or [])
                        super().__init__(context=context, types=types)

                {base_class_declarations}
                {model_class_declarations}
                ri   Nr}   ri   r   r   r   r      s    2
h Hr   r   rH   )r4   collectionsr   r   
tatsu.utilr   r   r   r   codegen.cgbaser
   r   
exceptionsr   objectmodelr   r   	renderingr   r!   r   r   r   r%   r1   rC   rE   r[   r   rk   r   ri   r   r   <module>r      s     "  : : 9 % 0  !(8'9:^K  j<"89 I4x (
 
	} 	= (Um Ur   