ML i'UdZddlmZddlmZmZddlmZmZm Z m Z m Z m Z m Z mZmZmZmZmZmZmZmZmZmZmZmZmZddlmZddlmZddlm Z m!Z!e"dZ#d e$d <e"d d d dge dddddZ%d e$d<GddZ&y)zySemantic analysis of call-based Enum definitions. This is conceptually part of mypy.semanal (semantic analyzer pass 2). ) annotations)Finalcast) ARG_NAMEDARG_POSEXCLUDED_ENUM_ATTRIBUTESMDEFAssignmentStmtCallExprContextDictExpr EnumCallExpr ExpressionListExpr MemberExprNameExprRefExprStrExprSymbolTableNode TupleExprTypeInfoVaris_StrExpr_list)Options)SemanticAnalyzerInterface) LiteralTypeget_proper_type)z enum.Enumz enum.IntEnumz enum.Flagz enum.IntFlagz enum.StrEnumr ENUM_BASESnamevalue_name__value_ __module____annotations____doc__ __slots____dict__ENUM_SPECIAL_PROPSceZdZd dZd dZ d dZ d dZ d dZ ddZddZ y)EnumCallAnalyzerc ||_||_yN)optionsapi)selfr-r.s W/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/mypy/semanal_enum.py__init__zEnumCallAnalyzer.__init__;s crt|jdk7s#t|jdttfsy|jd}|j }|j |j||}|yt|tr|jd|y|jj|||y)zCheck 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. rFz'Enum type as attribute is not supportedT) lenlvalues isinstancerrrcheck_enum_callrvaluefailr. add_symbol)r/s is_func_scopelvaluer enum_calls r0process_enum_callz"EnumCallAnalyzer.process_enum_call?s qyy>Q j1*?U&V1{{((4G   fj ) II? H D)Q/r2c8t|tsy|}|j}t|tsy|j}|t vry|j ||jdd\}}} } | s>|} |r| dt|jzz } |j| g||j} n||k7rd|d|d|d} |j| |tt|jd j} | |k7s|r| dt|jzz } |j| |||j} | |k7s|r|j j#| | t%| || |_|j&j)||j| _ | S) zCheck 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.@zString argument 1 "z" to z$(...) does not match variable name ""r)r7r calleerfullnamerparse_enum_call_argssplitstrlinebuild_enum_call_typeinfor:rrargsr r.add_symbol_skip_localranalyzedset_line)r/nodevar_namer=callrFrGnew_class_nameitemsvaluesokrinfomsgs r0r8z EnumCallAnalyzer.check_enum_callSs$)&'*?? : %,0,E,E (..%b)- )vrDc$))n,,00r8TYYOD)+N+;5 Jnownxxyz #t$1.44Dx=c$))n,,00uh RD 8 } HH * *4 6$T5&9  t$II  r2cj|jj|}|J|jj|||}|j|_d|_|D]U}t |}||_d|_d|_ |jd||_ tt||j|<W|S)NTrB)r.named_type_or_nonebasic_new_typeinfocalculate_metaclass_typemetaclass_typeis_enumrrX is_propertyhas_explicit_valuerG _fullnamerr names) r/rrUrGrKbaserXitemvars r0rLz)EnumCallAnalyzer.build_enum_call_typeinfosxx**84xx**4t<";;=  :Dd)CCH"CO &*C "#}}oQtf5CM.tS9DJJt  : r2c> |j}td|jDs|jd|d|St |dkr|jd|d|St |dkDr|jd|d|Sgd}|j D]}||vs|jd |d |d \}}t |j |D]\}}|d k(r|}|d k(s|}||d}||d}t|ts|j|d|S|j} g} g} t|trD|j} | jddjD]} | j| nt|ttfr|j}t!|r|Dcgc]}|j} }ntd|Drn|D]g}t|ttfsJ|j\}}t|tsJ| j|j| j|in |jd|z|St|t"ri|jD]X\}}t|ts|j|d|cS| j|j| j|Zn}t|dt$rTt|dj&t(r6t+|dj&j,}|mt|t.r]t|jt0rC|j} | jddjD]} | j| n|dj&j2rwt|dj&j4t0rP|dj&j4} | jddjD]} | j| n*|jd|z|S|jd|z|S| s|j|d|S| sdgt | z} t | t | k(sJ| | | dfScc}w)zhParse arguments of an Enum call. Return a tuple of fields, values, was there an error. c38K|]}|ttfvywr,)rr).0arg_kinds r0 z8EnumCallAnalyzer.parse_enum_call_args..sS833SszUnexpected arguments to z()zToo few arguments for zToo many arguments for )Nr rcmodulequalnametypestartzUnexpected keyword argument "rE)NNr rcNrr4z1() expects a string literal as the first argument, c3K|]S}t|ttfxr7t|jdk(xrt|jdt Uyw)rlrN)r7rrr5rUr)riseq_items r0rkz8EnumCallAnalyzer.parse_enum_call_args..sY8i%:;;'1,;x~~a0':;sAAz>%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)rMall arg_kindsfail_enum_call_argr5 arg_nameszipr7rr replacerIappendrrrUrr rrQrrrprrJis_final final_value)r/rS class_namerM valid_namearg_namer rcargrTrUrVfieldsfield seq_itemsrurkey proper_types r0rHz%EnumCallAnalyzer.parse_enum_call_argssyySDNNSS**-Ej\QS+TVZ[ [ t9q=**-CJB2 2h )58@C ,e3e3*-e3 =e3N!!%,! =! r2r*N)'r% __future__rtypingrr mypy.nodesrrrr r r r r rrrrrrrrrrrr mypy.optionsrmypy.semanal_sharedr mypy.typesrr frozensetrr$r(r*rr2r0rs #,!93N E&  "           E"S S r2