NL i!0dZddlmZddlmZddlmZmZmZm Z m Z m Z m Z m Z mZmZmZmZmZmZmZmZmZmZmZmZmZddlmZddlmZddlm Z hdZ!dd Z"dd Z#dd Z$dd Z%dd Z&ddZ'ddZ(ddZ)d dZ*d!dZ+d"dZ,d#dZ-d$dZ.d%dZ/d&dZ0d'dZ1d(dZ2y))zFVarious utilities that don't depend on other modules in mypyc.irbuild.) annotations)Any) ARG_NAMED ARG_NAMED_OPTARG_OPTARG_POSGDEFArgKind BytesExprCallExprClassDef Decorator Expression FloatExprFuncDefIntExprNameExprOverloadedFuncDefRefExprStrExpr TupleExpr UnaryExprVar)refers_to_fullname)FINAL_DECORATOR_NAMES)Errors>attr.s attr.attrsdataclasses.dataclassc"t|tSN)rrds X/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/mypyc/irbuild/util.pyis_final_decoratorr%%s a!6 77cDt|txr|jdk(S)Nzmypy_extensions.trait) isinstancerfullnamer"s r$is_trait_decoratorr*)s a ! Kajj4K&KKr&cjtd|jDxs|jjS)Nc32K|]}t|ywr!)r*.0r#s r$ zis_trait...s>!!$>)any decoratorsinfo is_protocolcdefs r$is_traitr7-s& >doo> > W$))BWBWWr&ct|tr0|jtvr|jj ddSt|t rt|j tr|j jtvr|j jj dd}|dk(rVd|jvrH|j|jjd}t|tr|jdk(ry|Sy)N.rattr auto_attribsTruez attr-auto) r(rr)DATACLASS_DECORATORSsplitr callee arg_namesargsindexrname)r#rCautos r$dataclass_decorator_typerE1s!W!**0D"Dzz$Q''1h qxx ) HH  !5 5xx  &&s+A. 6>n ;66!++++N;.JsBQ%a(Br0)r1r2r5s r$ is_dataclassrJIs B$//B BBr&cH|jD]}t|}||cSyr!)r2rE)r6r#typs r$dataclass_typerMOs. __&q) ?J r&ct|tttfr |jSt|t r|j dk(ryt|t r|j dk(ryt|t r|j dk(rytS)zcConvert an expression from a mypyc_attr decorator to a value. Supports a pretty limited range. builtins.TrueTbuiltins.FalseF builtins.NoneN)r(rrrvaluerr)NotImplementedes r$get_mypyc_attr_literalrVWsm!gw 23ww Aw AJJ/$A Aw AJJ2B$B Aw AJJ/$A r&ct|tr5t|jtr|jjdk(r|Sy)zCCheck if an expression is a call to mypyc_attr and return it if so.zmypy_extensions.mypyc_attrN)r(r r?rr)r"s r$get_mypyc_attr_callrXfs7 1h qxx ) HH  != = r&ci}|jD]i}t|}|st|j|jD]6\}}|!t |t sd||j<)t|||<8k|S)zJCollect all the mypyc_attr attributes on a class definition or a function.T) r2rXzipr@rAr(rrRrV)stmtattrsdecr#rCargs r$get_mypyc_attrsr_qs{E>  $  aff5 > c<!#w/+/cii("8"=E$K  >> Lr&ct|||}|duryt|\}}|dur"|s |jd|||j|S)NFTzEClass is marked as native_class=True but it can't be a native class. )get_explicit_native_classis_implicit_extension_classerrorline)pathr6errorsexplicit_native_classimplicit_extension_classreasons r$is_extension_classrjse5dD&I%'B4'H$f$-E STZS[ \  II $#r&c|jD]}t|}|st|jD]\}}|dk7r |j|}t |t s |jd||jy|jdk(ry|jdk(ry|jd||jyy)zReturn value of @mypyc_attr(native_class=True/False) decorator. Look for a @mypyc_attr decorator with native_class=True/False and return the value assigned or None if it doesn't exist. Other values are an error. native_classz1native_class must be used with True or False onlyNFalseFr<T) r2rX enumerater@rAr(rrcrdrC)rer6rfr#mypyc_attr_callirCr^s r$raras__-a0  !:!:; GAt~%!&&q)Cc8, PRVX\XaXabxx7"V# PRVX\XaXab  * r&cj|jD]3}t|rt|rt|r't |r3y|j j ry|j jry|j jr-|j jjjdvryy)zXCheck if class can be extension class and return a user-friendly reason it can't be one.)FzUClasses that have decorators other than supported decorators can't be native classes.)Fz*TypedDict classes can't be native classes.)Fz+NamedTuple classes can't be native classes.)z abc.ABCMetaztyping.TypingMetaztyping.GenericMeta)Fz_Classes with a metaclass other than ABCMeta, TypingMeta or GenericMeta can't be native classes.)T) r2r*rGrXr%r3typeddict_typeis_named_tuplemetaclass_typetyper))r6r#s r$rbrbs__ "1%*1-'*&q)  yyB yyC yyDII$<$<$A$A$J$JS%  r&ct|tr|jsJ|j}t|tr |j}|Sr!)r(rimplrfunc)ops r$ get_func_defr{s9"'(www WW"i WW Ir&cB|tk(rtS|tk(rtS|S)z>Find the concrete version of an arg kind that is being passed.)rrrr)kinds r$concrete_arg_kindr~s! w   r&ct|ttttfxst|t xr1|j dk(xr t|jttfxst|txrtd|jDxsit|txrW|jtk(xrB|jdvxs2t|jt xr|jj"S)aSCheck whether we allow an expression to appear as a default value. We don't currently properly support storing the evaluated values for default arguments and default attribute values, so we restrict what expressions we allow. We allow literals of primitives types, None, and references to Final global variables. -c32K|]}t|ywr!) is_constant)r.rUs r$r/zis_constant..s,M[^,Mr0)rOrPrQ)r(rr rrrrzexprrallitemsrr}r r)noderis_finalrTs r$rrs 1w 7I>? q) $ a aAFFWV_L`9a q) $ M,MQWW,M)M  q' " $  RRAqvvs+? r&cVt|djdjdS)zConvert a string representing bytes into actual bytes. This is needed because the literal characters of BytesExpr (the characters inside b'') are stored in BytesExpr.value, whose type is 'str' not 'bytes'. utf8zunicode-escapezraw-unicode-escape)bytesdecodeencode)rRs r$bytes_from_strrs)   & &'7 8 ? ?@T UUr&N)r#rreturnbool)r6r rr)r#rr str | None)r6r rr)rUrrr)r#rrzCallExpr | None)r[zClassDef | Decoratorrzdict[str, Any])restrr6r rfrrr)rerr6r rfrrz bool | None)r6r rztuple[bool, str])rzz'FuncDef | Decorator | OverloadedFuncDefrr)r}r rr )rUrrr)rRrrr)3__doc__ __future__rtypingr mypy.nodesrrrrr r r r r rrrrrrrrrrrr mypy.semanalr mypy.typesr mypyc.errorsrr=r%r*r7rErGrJrMrVrXr_rjrarbr{r~rrr&r$rsL".,,H8LX(3C    $,>B0Vr&