Ë
    pPêjY&  ã                  ó  — U d Z ddlmZ ddlmZ ddlmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZ ddlmZ ddlmZm Z   e!d«      Z"d	e#d
<    e!ddddge¢d‘d‘d‘d‘d‘­«      Z$d	e#d<    G d„ d«      Z%y)zySemantic analysis of call-based Enum definitions.

This is conceptually part of mypy.semanal (semantic analyzer pass 2).
é    )Úannotations)ÚFinal)Ú	ARG_NAMEDÚARG_POSÚEXCLUDED_ENUM_ATTRIBUTESÚMDEFÚAssignmentStmtÚCallExprÚContextÚDictExprÚEnumCallExprÚ
ExpressionÚListExprÚ
MemberExprÚNameExprÚRefExprÚStrExprÚSymbolTableNodeÚ	TupleExprÚTypeInfoÚVarÚis_StrExpr_list)ÚOptions)ÚSemanticAnalyzerInterface)ÚLiteralTypeÚget_proper_type)z	enum.Enumzenum.IntEnumz	enum.Flagzenum.IntFlagzenum.StrEnumr   Ú
ENUM_BASESÚnameÚvalueÚ_name_Ú_value_Ú
__module__Ú__annotations__Ú__doc__Ú	__slots__Ú__dict__ÚENUM_SPECIAL_PROPSc                  óp   — e Zd Zd	d„Zd
d„Zdd„Z	 	 	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 dd„Z	 	 	 	 	 	 dd„Zdd„Z	y)ÚEnumCallAnalyzerc                ó    — || _         || _        y ©N)ÚoptionsÚapi)Úselfr,   r-   s      úV/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/mypy/semanal_enum.pyÚ__init__zEnumCallAnalyzer.__init__;   s   € ØˆŒØˆ�ó    c                óp  — t        |j                  «      dk7  s#t        |j                  d   t        t        f«      sy|j                  d   }|j
                  }| j                  |j                  |«      }|€yt        |t        «      r| j                  d|«       y| j                  j                  |||«       y)zÆCheck if s defines an Enum; if yes, store the definition in symbol table.

        Return True if this looks like an Enum definition (but maybe with errors),
        otherwise return False.
        é   r   Fz'Enum type as attribute is not supportedT)ÚlenÚlvaluesÚ
isinstancer   r   r   Úcheck_enum_callÚrvalueÚfailr-   Ú
add_symbol)r.   ÚsÚlvaluer   Ú	enum_calls        r/   Úprocess_enum_callz"EnumCallAnalyzer.process_enum_call?   s—   € ô ˆq�y‰y‹>˜QÒ¤j°·±¸1±ÄÌ*Ð?UÔ&VØØ—‘˜1‘ˆØ�{‰{ˆØ×(Ñ(¨¯©°4Ó8ˆ	ØÐØÜ�fœjÔ)Ø�I‰IÐ?ÀÔHØà�‰×Ñ˜D )¨QÔ/Ør1   c                ó�  — t        |t        «      sy|}|j                  }t        |t        «      sy|j                  }|t
        vry| j                  ||j                  d«      d   «      \  }}}}	|	s| j                  |g ||j                  «      }
nA||k7  rd|› d|› d|› d�}| j                  ||«       | j                  ||||j                  «      }
| j                  j                  «       r| j                  j                  |||
«       t        |
||«      |_        |j                  j!                  |«       |j                  |
_	        |
S )zÊCheck if a call defines an Enum.

        Example:

          A = enum.Enum('A', 'foo bar')

        is equivalent to:

          class A(enum.Enum):
              foo = 1
              bar = 2
        Nú.éÿÿÿÿzString argument 1 "z" to z$(...) does not match variable name "ú")r6   r
   Úcalleer   Úfullnamer   Úparse_enum_call_argsÚsplitÚbuild_enum_call_typeinfoÚliner9   r-   Úis_nested_within_func_scopeÚadd_global_symbolr   ÚanalyzedÚset_line)r.   ÚnodeÚvar_nameÚcallrC   rD   Únew_class_nameÚitemsÚvaluesÚokÚinfoÚmsgs               r/   r7   z EnumCallAnalyzer.check_enum_callS   s2  € ô ˜$¤Ô)ØØˆØ—‘ˆÜ˜&¤'Ô*ØØ—?‘?ˆØœ:Ñ%Øà,0×,EÑ,EØ�(—.‘. Ó% bÑ)ó-
Ñ)ˆ˜˜v rñ à×0Ñ0°¸2¸xÈÏÉÓS‰Dà Ò)Ø+¨NÐ+;¸5ÀÀ
ÐJnÐowÐnxÐxyÐz�Ø—	‘	˜#˜tÔ$Ø×0Ñ0°¸5À(ÈDÏIÉIÓVˆDà�8‰8×/Ñ/Ô1Ø�H‰H×&Ñ& x°°tÔ<Ü$ T¨5°&Ó9ˆŒØ�‰×Ñ˜tÔ$Ø—I‘IˆŒ	Øˆr1   c                ój  — | j                   j                  |«      }|€J ‚| j                   j                  |||«      }|j                  «       |_        d|_        |D ]U  }t        |«      }||_        d|_        d|_	        |j                  › d|› �|_        t        t        |«      |j                  |<   ŒW |S )NTr@   )r-   Únamed_type_or_noneÚbasic_new_typeinfoÚcalculate_metaclass_typeÚmetaclass_typeÚis_enumr   rT   Úis_propertyÚhas_explicit_valuerD   Ú	_fullnamer   r   Únames)	r.   r   rQ   rD   rH   ÚbaserT   ÚitemÚvars	            r/   rG   z)EnumCallAnalyzer.build_enum_call_typeinfo}   s¶   € ð �x‰x×*Ñ*¨8Ó4ˆØÐÐÐØ�x‰x×*Ñ*¨4°°tÓ<ˆØ"×;Ñ;Ó=ˆÔØˆŒØò 	:ˆDÜ�d“)ˆCØˆCŒHØ"ˆCŒOð &*ˆCÔ"Ø#Ÿ}™}˜o¨Q¨t¨fÐ5ˆCŒMÜ.¬t°SÓ9ˆD�J‰J�tÒð	:ð ˆr1   c                ó>	  — |j                   }t        d„ |j                  D «       «      s| j                  d|› d�|«      S t	        |«      dk  r| j                  d|› d�|«      S t	        |«      dkD  r| j                  d|› d�|«      S g d¢}|j
                  D ]  }||vsŒ| j                  d	|› d
�|«       Œ d\  }}t        |j
                  |«      D ]  \  }}|dk(  r|}|dk(  sŒ|}Œ |€|d   }|€|d   }t        |t        «      s| j                  |› d�|«      S |j                  }	g }
g }t        |t        «      rD|j                  }|j                  dd«      j                  «       D ]  }|
j                  |«       Œ �nÓt        |t        t        f«      rÇ|j                  }t!        |«      r|D �cg c]  }|j                  ‘Œ }
}�n‹t        d„ |D «       «      rn|D ]g  }t        |t        t        f«      sJ ‚|j                  \  }}t        |t        «      sJ ‚|
j                  |j                  «       |j                  |«       Œi �n| j                  d|z  |«      S t        |t"        «      ri|j                  D ]X  \  }}t        |t        «      s| j                  |› d�|«      c S |
j                  |j                  «       |j                  |«       ŒZ �n}t        |d   t$        «      �rTt        |d   j&                  t(        «      �r6t+        |d   j&                  j,                  «      }|�mt        |t.        «      r]t        |j                  t0        «      rC|j                  }|j                  dd«      j                  «       D ]  }|
j                  |«       Œ nº|d   j&                  j2                  rwt        |d   j&                  j4                  t0        «      rP|d   j&                  j4                  }|j                  dd«      j                  «       D ]  }|
j                  |«       Œ n*| j                  d|z  |«      S | j                  d|z  |«      S |
s| j                  |› d�|«      S |sdgt	        |
«      z  }t	        |
«      t	        |«      k(  sJ ‚|	|
|dfS c c}w )zhParse arguments of an Enum call.

        Return a tuple of fields, values, was there an error.
        c              3  ó8   K  — | ]  }|t         t        fv –— Œ y ­wr+   )r   r   )Ú.0Úarg_kinds     r/   ú	<genexpr>z8EnumCallAnalyzer.parse_enum_call_args.<locals>.<genexpr>›   s   è ø€ ÒS¸�8¤¬Ð3Ô3ÑSùs   ‚zUnexpected arguments to z()é   zToo few arguments for é   zToo many arguments for )Nr   r_   ÚmoduleÚqualnameÚtypeÚstartzUnexpected keyword argument "rB   )NNr   r_   Nr   r3   z1() expects a string literal as the first argumentú,ú c              3  óº   K  — | ]S  }t        |t        t        f«      xr7 t        |j                  «      d k(  xr t        |j                  d   t
        «      –— ŒU y­w)rh   r   N)r6   r   r   r4   rQ   r   )re   Úseq_items     r/   rg   z8EnumCallAnalyzer.parse_enum_call_args.<locals>.<genexpr>¿   sY   è ø€ ò ð ô ˜8¤i´Ð%:Ó;ò ;Ü˜Ÿ™Ó'¨1Ñ,ò;ä˜xŸ~™~¨aÑ0´'Ó:ó;ñùs   ‚AAz>%s() with tuple or list expects strings or (name, value) pairsz-() with dict literal requires string literalszfSecond argument of %s() must be string, tuple, list or dict literal for mypy to determine Enum membersz() needs at least one itemT)ÚargsÚallÚ	arg_kindsÚfail_enum_call_argr4   Ú	arg_namesÚzipr6   r   r   ÚreplacerF   Úappendr   r   rQ   r   r   r   rM   r   r   rl   r   ÚstrÚis_finalÚfinal_value)r.   rO   Ú
class_namerr   Ú
valid_nameÚarg_namer   r_   ÚargrP   rQ   rR   ÚfieldsÚfieldÚ	seq_itemsrq   r   ÚkeyÚproper_types                      r/   rE   z%EnumCallAnalyzer.parse_enum_call_args“   s�  € ð �y‰yˆÜÑSÀDÇNÁNÔSÔSØ×*Ñ*Ð-EÀjÀ\ÐQSÐ+TÐVZÓ[Ð[Üˆt‹9�qŠ=Ø×*Ñ*Ð-CÀJÀ<ÈrÐ+RÐTXÓYÐYÜˆt‹9�qŠ=Ø×*Ñ*Ð-DÀZÀLÐPRÐ+SÐUYÓZÐZÚTˆ
ØŸ™ò 	[ˆHØ˜zÒ)Ø×'Ñ'Ð*GÈÀzÐQRÐ(SÐUYÕZð	[ð "‰ˆˆuÜ  §¡°Ó6ò 	‰MˆH�cØ˜7Ò"Ø�Ø˜7Ó"Ø‘ð		ð
 ˆ=Ø˜‘GˆEØˆ=Ø˜‘GˆEÜ˜%¤Ô)Ø×*Ñ*Ø�,ÐOÐPÐRVóð ð Ÿ™ˆàˆØ*,ˆÜ�eœWÔ%Ø—[‘[ˆFØŸ™¨¨SÓ1×7Ñ7Ó9ò $�Ø—‘˜UÕ#ò$ä˜¤	¬8Ð4Ô5ØŸ™ˆIÜ˜yÔ)Ø8AÖB¨H˜Ÿ›ÐB�ÒBÜñ ð !*ô	ô ð !*ò )�HÜ% h´¼HÐ0EÔFÐFÐFØ"*§.¡.‘K�D˜%Ü% d¬GÔ4Ð4Ð4Ø—L‘L §¡Ô,Ø—M‘M %Õ(ò)ð ×.Ñ.ØTÐWaÑaØóð ô ˜œxÔ(Ø#Ÿk™kò %‘
��UÜ! #¤wÔ/Ø×2Ñ2Ø%˜,Ð&SÐTÐVZóò ð —‘˜SŸY™YÔ'Ø—‘˜eÕ$ò%ô ˜˜Q™¤Õ)¬j¸¸a¹¿¹ÄsÕ.KÜ)¨$¨q©'¯,©,×*;Ñ*;Ó<ˆKàÐ'Ü˜{¬KÔ8Ü˜{×0Ñ0´#Ô6à$×*Ñ*�Ø#Ÿ^™^¨C°Ó5×;Ñ;Ó=ò (�EØ—L‘L Õ'ñ(à�a‘—‘×&Ò&¬:°d¸1±g·l±l×6NÑ6NÔPSÔ+TØ˜a™Ÿ™×1Ñ1�Ø#Ÿ^™^¨C°Ó5×;Ñ;Ó=ò (�EØ—L‘L Õ'ñ(ð ×.Ñ.Ø|Ø ñ!àóð ð ×*Ñ*ØxØñàóð ñ
 Ø×*Ñ*¨j¨\Ð9SÐ+TÐVZÓ[Ð[ÙØ�Vœc %›jÑ(ˆFÜ�5‹zœS ›[Ò(Ð(Ð(Ø˜u f¨dÐ2Ð2ùòu Cs   Æ1Rc                ó2   — | j                  ||«       dg g dfS )NÚ F)r9   )r.   ÚmessageÚcontexts      r/   ru   z#EnumCallAnalyzer.fail_enum_call_argú   s!   € ð 	�	‰	�'˜7Ô#Ø�2�r˜5Ð Ð r1   c                ó<   — | j                   j                  ||«       y r+   )r-   r9   )r.   rU   Úctxs      r/   r9   zEnumCallAnalyzer.fail  s   € Ø�‰�‰�c˜3Õr1   N)r,   r   r-   r   ÚreturnÚNone)r;   r	   rŒ   Úbool)rM   r   rN   rz   rŒ   zTypeInfo | None)
r   rz   rQ   z	list[str]rD   rz   rH   ÚintrŒ   r   )rO   r
   r}   rz   rŒ   ú4tuple[str, list[str], list[Expression | None], bool])rˆ   rz   r‰   r   rŒ   r�   )rU   rz   r‹   r   rŒ   r�   )
Ú__name__r"   Ú__qualname__r0   r>   r7   rG   rE   ru   r9   © r1   r/   r)   r)   :   sƒ   „ óóó((ðTØðØ )ðØ58ðØ@Cðà	óð,e3Øðe3Ø*-ðe3à	=óe3ðN!Øð!Ø%,ð!à	=ó!ô r1   r)   N)&r$   Ú
__future__r   Útypingr   Ú
mypy.nodesr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Úmypy.optionsr   Úmypy.semanal_sharedr   Ú
mypy.typesr   r   Ú	frozensetr   r#   r'   r)   r“   r1   r/   ú<module>r›      s¾   ðòõ
 #å ÷÷ ÷ ÷ ÷ ó õ, !Ý 9ß 3ñ ØNó€
ˆEó ñ &àØØØð	ð
 
"ðð 	ðð 	ðð 	ðð 	ðð 	ñóÐ �Eó ÷"I ò I r1   