
    X-Ph                        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d S )%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_PROMOTIONStypr   is_stub_fileboolerrorsr   returnNonec                0    d _         g  _         j        rdS t                      }g }g } j        rdS  j        D ]R}|j                                        D ]4\  }}|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        f           | u r|                    |           n\t          |	t$                    rG|	j        r@||vr<d _         |                    |t          f           | u r|                    |           |                    |           6Tt+          |           _        |r j        r! j        j                            d          rdS  j        rdS |rX|sVd fd}d                    d t+          |          D                       } |d j         d| d            |dd            j        r\|r\d                    d t+          |          D                       }                     j         j        d j         d|            dS dS dS )zCalculate 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.ABCMetamessagestrseverityr   r    c                N                         j        j        | |           d S )Nr$   )reportlinecolumn)r"   r$   r   r   s     V/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mypy/semanal_classprop.pyr'   z/calculate_class_abstract_status.<locals>.reporti   s'    ch
GhOOOOO    z, c              3  (   K   | ]\  }}d | d V  dS "N .0attr_s      r*   	<genexpr>z2calculate_class_abstract_status.<locals>.<genexpr>l   s.      JJgdAk$kkkJJJJJJr+   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 V  dS r-   r/   r0   s      r*   r4   z2calculate_class_abstract_status.<locals>.<genexpr>r   s.      FF'$+d+++FFFFFFr+   zFinal class )r"   r#   r$   r#   r   r    ) 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   r   r   concreteabstractabstract_in_this_classbasenamesymnoder@   rB   r'   attrss   ` `          r*   calculate_class_abstract_statusrV   *   sF    CO C
 H&(H(*
~  	  !Z--// 	 	MD'<D$ 122 

 :  (,
1DDDD$	** !y$(( <([:M,NNNH,,&*COOOT4+?$@AAAs{{.55d;;;D#&& <' <D,@,@&*COOOT;$7888s{{.55d;;;LL=	D %X..C ! 	c&<&A&J&J=&Y&Y 	F? 	F 		2 		P P P P P P P IIJJ9I9IJJJJJEFJCLJJ5JJGTTTF[]c   | 
 
		FFVH5E5EFFFFFHcj"_"_"_X]"_"_	
 	
 	
 	
 	

 
 
 
r+   infoc                    | j         rI| j        D ]C}|j        j         s3|j        j        dk    r#|                    | j        | j        dd           BdS dS )z9Check that all classes in MRO of a protocol are protocolszbuiltins.objectz)All bases of a protocol must be protocolsr5   r&   N)rK   basesrI   rM   r'   r(   r)   )rW   r   rI   s      r*   check_protocol_statusrZ   x   s{     J 	 	D9( TY-?CT-T-TIK?$	     	 	r+   c                \   | j                                         D ]\  }}|j        }t          |t                    rp|j        ri|j        rb|j        s[| j        dd         D ]K}|j         	                    |          }|-t          |j        t                    r|j        j        rd|_        LdS )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@   rA   r   rW   is_inferredis_classvarr=   get)rW   rS   symr@   rR   members         r*   calculate_class_varsrb      s     Z%%'' , ,	cxdC   	,TY 	,43C 	,DL\ 	, , ,--%*V[#*F*F%6;Kb%'+D$, ,r+   module_namesr   optionsr   builtin_namesc                P   | j         }g }|j        D ]M}t          |t                    r6|j        }t          |t
                    r|                    |j                   N|s|j        t          v r|
                    t          |j                           }|j        dk    r
|j        rd}n|j        dk    r	|j        rd}|rA|j        }	t          |	t                    sJ |                    t          |	g                      |j        t           v ru|d         }
t          |
j        t                    sJ |
j        j                            t          |j        g                      t          |
j        g           |j        _        |r!|j        j                            |           dS dS )zSetup extra, ad-hoc subtyping relationships between classes (promotion).

    This includes things like 'int' being compatible with 'float'.
    r   Nr   int)defn
decoratorsrA   r   analyzedr   rD   rI   rM   r   r_   disable_bytearray_promotiondisable_memoryview_promotionr@   r   r   r   _promoterW   alt_promoteextend)rW   rc   rd   re   rh   promote_targets	decoratorrj   
target_symtarget_infoint_syms              r*   add_type_promotionru      s    9D(*O_ 6 6	i** 	6 )H(K00 6&&x}555 B=O++%))/$-*HIIJ} 4449\4!

"777G<`7!
 B(o!+x88888&&xR'@'@AAA }...&',11111$$Xdi%<%<=== (r : :	 3	!!/222223 3r+   N)r   r   r   r   r   r   r   r    )rW   r   r   r   r   r    )rW   r   r   r    )
rW   r   rc   r   rd   r   re   r   r   r    )__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 C C C C C C C C !"	     K
 K
 K
 K
\
 
 
 
, , , ,&$3 $3 $3 $3 $3 $3r+   