ML iUdZddlmZddlmZddlmZddlmZm Z m Z m Z m Z m Z mZmZmZmZmZddlmZddlmZmZmZdd d d d Zd ed <ddZddZddZ ddZy)zfCalculate some properties of classes. These happen after semantic analysis and before type checking. ) annotations)Final)Errors) IMPLICITLY_ABSTRACT IS_ABSTRACTCallExpr DecoratorFuncDefNodeOverloadedFuncDef PromoteExpr SymbolTableTypeInfoVar)Options)MYPYC_NATIVE_INT_NAMESInstance ProperTypefloatcomplexbytes)z builtins.intzbuiltins.floatbuiltins.bytearraybuiltins.memoryviewrTYPE_PROMOTIONSc6d_g_jryt}g}g}jryj D]J}|j jD])\}}|j} t| tr| jr| jd} nd} n| } t| tr | j} t| trV| jtt fvr||vrd_|j#|| jf|ure|j#|nSt| t$rC| j&r7||vr3d_|j#|tf|ur|j#||j)|,Mt+|_|rj,r&j,j.j1dryj2ry|rL|sJdfd } dj5dt+|D} | d j6d | d | d d j8r\|rYdj5dt+|D} j;j<j>dj6d | yyy)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. FNrTz abc.ABCMetacXjjj||y)Nseverity)reportlinecolumn)messagererrorstyps \/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/mypy/semanal_classprop.pyrz/calculate_class_abstract_status..reportis chh Gh Oz, c3.K|] \}}d|dyw"N.0attr_s r% z2calculate_class_abstract_status..lsJgdA$qkJzClass z has abstract attributes errorzIIf it is meant to be abstract, add 'abc.ABCMeta' as an explicit metaclassnotec3.K|] \}}d|dywr(r*r+s r%r/z2calculate_class_abstract_status..rsF'$AdV1+Fr0z Final class )r"strrr4returnNone) is_abstractabstract_attributestypeddict_typeset is_newtypemronamesitemsnode isinstancer r funcr abstract_statusrrappendris_abstract_varaddsorteddeclared_metaclasstypehas_base is_protocoljoinfullnameis_finalrr r!) r$ is_stub_filer#concreteabstractabstract_in_this_classbasenamesymnoder?rArattrss ` ` r%calculate_class_abstract_statusrV*sQCO C H&(H(* ~~ !ZZ--/ MD'<)B5'JG T []c  || FVH5EFF HHcjjL>WX]W^"_ !|r&c|jrl|jD]\}|jjr|jjdk7s4|j |j |j dd^yy)z9Check that all classes in MRO of a protocol are protocolszbuiltins.objectz)All bases of a protocol must be protocolsr1rN)rJbasesrHrLrr r!)infor#rHs r%check_protocol_statusrZxsg JJ D99((TYY-?-?CT-T IIKK?$  r&c|jjD]\}}|j}t|ts#|j s0|j s=|jrJ|jddD]Y}|jj|}|!t|jts<|jjsSd|_[y)aHTry 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@rrY is_inferred is_classvarr<get)rYrSsymr?rRmembers r%calculate_class_varsrbsZZ%%', cxx dC TYY43C3CDL\L\  ,-%*V[[#*F6;;KbKb'+D$ ,,r&c|j}g}|jD]K}t|ts|j}t|t s1|j |jM|s|jtvr|jt|j}|jdk(r|jrd}n|jdk(r|jrd}|r9|j} t| tsJ|j t| g|jt vr|d} t| jtsJ| jj"j t|j$gt| jg|j$_|r&|j$j"j)|yy)zSetup extra, ad-hoc subtyping relationships between classes (promotion). This includes things like 'int' being compatible with 'float'. rNrint)defn decoratorsr@ranalyzedr rCrHrLrr_disable_bytearray_promotiondisable_memoryview_promotionr?rrr_promoterY alt_promoteextend) rY module_namesoptions builtin_namesrepromote_targets decoratorrg target_sym target_infoint_syms r%add_type_promotionrusl 99D(*O__6 i * ))H(K0&&x}}5 6  ==O +%))/$--*HIJ}} 449\9\! "77G<`<`! (oo !+x888&&x R'@A }}..&',,111 $$Xdii%<= (r :  !!/2r&N)r$rrNboolr#rr5r6)rYrr#rr5r6)rYrr5r6) rYrrmrrnrrorr5r6)__doc__ __future__rtypingr mypy.errorsr mypy.nodesrrrr r r r r rrr mypy.optionsr mypy.typesrrrr__annotations__rVrZrbrur*r&r%rs #    !CC!" K \ ,&$3 $3"-$38?$3P[$3 $3r&