Ë
    pPêjù  ã                  óÎ   — U d Z ddlm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 ddlmZ ddlmZmZmZ dd	d
d
dœZded<   dd„Zdd„Zdd„Z	 	 	 	 	 	 	 	 	 	 dd„Zy)zfCalculate some properties of classes.

These happen after semantic analysis and before type checking.
é    )Úannotations)ÚFinal)ÚErrors)ÚIMPLICITLY_ABSTRACTÚIS_ABSTRACTÚCallExprÚ	DecoratorÚFuncDefÚNodeÚOverloadedFuncDefÚPromoteExprÚSymbolTableÚTypeInfoÚVar)ÚOptions)ÚMYPYC_NATIVE_INT_NAMESÚInstanceÚ
ProperTypeÚfloatÚcomplexÚbytes)zbuiltins.intzbuiltins.floatúbuiltins.bytearrayúbuiltins.memoryviewr   ÚTYPE_PROMOTIONSc                ó6  ‡ ‡— d‰ _         g ‰ _        ‰ j                  ryt        «       }g }g }‰ j                  ry‰ j
                  D �]J  }|j                  j                  «       D �])  \  }}|j                  }	t        |	t        «      r|	j                  r|	j                  d   }
nd}
n|	}
t        |
t        «      r|
j                  }
t        |
t        «      rV|
j                  t        t         fv r‘||vr�d‰ _         |j#                  ||
j                  f«       |‰ u re|j#                  |«       nSt        |	t$        «      rC|	j&                  r7||vr3d‰ _         |j#                  |t        f«       |‰ u r|j#                  |«       |j)                  |«       �Œ, �ŒM t+        |«      ‰ _        |r�‰ j,                  r&‰ j,                  j.                  j1                  d«      ry‰ j2                  ry|rL|sJdˆˆ fd„}dj5                  d„ t+        |«      D «       «      } |d	‰ j6                  › d
|› �d«        |dd«       ‰ j8                  r\|rYdj5                  d„ t+        |«      D «       «      }‰j;                  ‰ j<                  ‰ j>                  d‰ j6                  › d
|› �«       yyy)zôCalculate abstract status of a class.

    Set is_abstract of the type to True if the type has an unimplemented
    abstract attribute.  Also compute a list of abstract attributes.
    Report error is required ABCMeta metaclass is missing.
    FNr   Tzabc.ABCMetac                óX   •— ‰j                  ‰j                  ‰j                  | |¬«       y )N©Úseverity)ÚreportÚlineÚcolumn)Úmessager   ÚerrorsÚtyps     €€ú[/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/mypy/semanal_classprop.pyr   z/calculate_class_abstract_status.<locals>.reporti   s   ø€ Ø—‘˜cŸh™h¨¯
©
°GÀh�ÕOó    z, c              3  ó.   K  — | ]  \  }}d |› d �–— Œ y­w©ú"N© ©Ú.0ÚattrÚ_s      r%   ú	<genexpr>z2calculate_class_abstract_status.<locals>.<genexpr>l   s   è ø€ ÒJ©g¨d°A  $  qœkÑJùó   ‚zClass z has abstract attributes ÚerrorzIIf it is meant to be abstract, add 'abc.ABCMeta' as an explicit metaclassÚnotec              3  ó.   K  — | ]  \  }}d |› d �–— Œ y­wr(   r*   r+   s      r%   r/   z2calculate_class_abstract_status.<locals>.<genexpr>r   s   è ø€ ÒF©'¨$°˜A˜d˜V 1œ+ÑFùr0   zFinal class )r"   Ústrr   r4   ÚreturnÚNone) Úis_abstractÚabstract_attributesÚtypeddict_typeÚsetÚ
is_newtypeÚmroÚnamesÚitemsÚnodeÚ
isinstancer   r	   Úfuncr
   Úabstract_statusr   r   Úappendr   Úis_abstract_varÚaddÚsortedÚdeclared_metaclassÚtypeÚhas_baseÚis_protocolÚjoinÚfullnameÚis_finalr   r    r!   )r$   Úis_stub_filer#   ÚconcreteÚabstractÚabstract_in_this_classÚbaseÚnameÚsymnoder?   rA   r   Úattrss   ` `          r%   Úcalculate_class_abstract_statusrV   *   sQ  ù€ ð €C„OØ €CÔØ
×ÒØÜ›€Hà&(€HØ(*ÐØ
‡~‚~ð 	Ø—‘ó ˆØ!ŸZ™Z×-Ñ-Ó/ó 	‰MˆD�'Ø—<‘<ˆDÜ˜$Ô 1Ô2ð
 —:’:Ø(,¯
©
°1©‘Dà‘Dà�Ü˜$¤	Ô*Ø—y‘y�Ü˜$¤Ô(à×(Ñ(¬[Ô:MÐ,NÑNØ HÑ,à&*�C”OØ—O‘O T¨4×+?Ñ+?Ð$@ÔAØ˜s‘{Ø.×5Ñ5°dÕ;Ü˜D¤#Ô&Ø×'Ò'¨D¸Ñ,@Ø&*�C”OØ—O‘O T¬;Ð$7Ô8Ø˜s‘{Ø.×5Ñ5°dÔ;Ø�L‰L˜Öò=	ðôF % XÓ.€CÔÙØ×!Ò! c×&<Ñ&<×&AÑ&A×&JÑ&JÈ=Ô&YØØ�?Š?ØÙÑ2öPð —I‘IÑJ¼ÀÓ9IÔJÓJˆEÙ�V˜CŸL™L˜>Ð)BÀ5À'ÐJÈGÔTÙØ[Ð]côð ‡|‚|™Ø—	‘	ÑF´V¸HÓ5EÔFÓFˆØ�‰Ø�H‰H�c—j‘j L°·±°Ð>WÐX]ÐW^Ð"_õ	
ð !€|r&   c                óô   — | j                   rl| j                  D ]\  }|j                  j                   rŒ|j                  j                  dk7  sŒ4|j	                  | j
                  | j                  dd¬«       Œ^ yy)z9Check that all classes in MRO of a protocol are protocolszbuiltins.objectz)All bases of a protocol must be protocolsr1   r   N)rJ   ÚbasesrH   rL   r   r    r!   )Úinfor#   rH   s      r%   Úcheck_protocol_statusrZ   x   sg   € à×ÒØ—J‘Jò 	ˆDØ—9‘9×(Ó(¨T¯Y©Y×-?Ñ-?ÐCTÓ-TØ—‘Ø—I‘IØ—K‘KØ?Ø$ð	 õ ñ	ð r&   c                ó¦  — | j                   j                  «       D ]´  \  }}|j                  }t        |t        «      sŒ#|j
                  sŒ0|j                  sŒ=|j                  rŒJ| j                  dd D ]Y  }|j                   j                  |«      }|€Œ!t        |j                  t        «      sŒ<|j                  j                  sŒSd|_        Œ[ Œ¶ y)aH  Try to infer additional class variables.

    Subclass attribute assignments with no type annotation are assumed
    to be classvar if overriding a declared classvar from the base
    class.

    This must happen after the main semantic analysis pass, since
    this depends on base class bodies having been fully analyzed.
    é   NT)
r=   r>   r?   r@   r   rY   Úis_inferredÚis_classvarr<   Úget)rY   rS   Úsymr?   rR   Úmembers         r%   Úcalculate_class_varsrb   …   sŸ   € ð —Z‘Z×%Ñ%Ó'ò ,‰	ˆˆcØ�x‰xˆÜ�dœCÕ  T§Y£Y°4×3CÓ3CÈD×L\ÓL\ØŸ™  ˜ò ,�ØŸ™Ÿ™¨Ó-�ØÑ%¬*°V·[±[Ä#Õ*FÈ6Ï;É;×KbÓKbØ'+�DÕ$ñ,ñ,r&   c                óž  — | j                   }g }|j                  D ]K  }t        |t        «      sŒ|j                  }t        |t
        «      sŒ1|j                  |j                  «       ŒM |sª|j                  t        v r˜|j                  t        |j                     «      }|j                  dk(  r|j                  rd}n|j                  dk(  r|j                  rd}|r9|j                  }	t        |	t        «      sJ ‚|j                  t        |	g «      «       |j                  t         v r|d   }
t        |
j                  t        «      sJ ‚|
j                  j"                  j                  t        |j$                  g «      «       t        |
j                  g «      |j$                  _        |r&|j$                  j"                  j)                  |«       yy)z‘Setup extra, ad-hoc subtyping relationships between classes (promotion).

    This includes things like 'int' being compatible with 'float'.
    r   Nr   Úint)ÚdefnÚ
decoratorsr@   r   Úanalyzedr   rC   rH   rL   r   r_   Údisable_bytearray_promotionÚdisable_memoryview_promotionr?   r   r   r   Ú_promoterY   Úalt_promoteÚextend)rY   Úmodule_namesÚoptionsÚbuiltin_namesre   Úpromote_targetsÚ	decoratorrg   Ú
target_symÚtarget_infoÚint_syms              r%   Úadd_type_promotionru   ˜   sl  € ð �9‰9€DØ(*€OØ—_‘_ò 6ˆ	Ü�i¤Õ*Ø ×)Ñ)ˆHÜ˜(¤KÕ0à×&Ñ& x§}¡}Õ5ð6ñ Ø�=‰=œOÑ+Ø%×)Ñ)¬/¸$¿-¹-Ñ*HÓIˆJØ�}‰}Ð 4Ò4¸×9\Ò9\Ø!‘
Ø—‘Ð"7Ò7¸G×<`Ò<`Ø!�
áØ(Ÿo™o�Ü! +¬xÔ8Ð8Ð8Ø×&Ñ&¤x°¸RÓ'@ÔAð ‡}�}Ô.Ñ.Ø Ñ&ˆÜ˜'Ÿ,™,¬Ô1Ð1Ð1Ø�‰×Ñ×$Ñ$¤X¨d¯i©i¸Ó%<Ô=Ü (¨¯©°rÓ :ˆ�	‰	ÔÙØ�	‰	×Ñ×!Ñ! /Õ2ð r&   N)r$   r   rN   Úboolr#   r   r5   r6   )rY   r   r#   r   r5   r6   )rY   r   r5   r6   )
rY   r   rm   r   rn   r   ro   r   r5   r6   )Ú__doc__Ú
__future__r   Útypingr   Úmypy.errorsr   Ú
mypy.nodesr   r   r   r	   r
   r   r   r   r   r   r   Úmypy.optionsr   Ú
mypy.typesr   r   r   r   Ú__annotations__rV   rZ   rb   ru   r*   r&   r%   ú<module>r      sŽ   ðòõ
 #å å ÷÷ ÷ ñ õ !ß CÑ Cð ØØ!Ø"ñ	€�ó óK
ó\
ó,ð&$3Ø
ð$3Ø"-ð$3Ø8?ð$3ØP[ð$3à	ô$3r&   