\d ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddlm Z m Z gdZ GddeZGddZeZGdd ZeZGd d ZeZejiZGd d ZedZedZedZdZdZdZejdZ dZ!GddZ"GddZ#GddZ$eedddddeddZ%dZ&d Z'dded!d"Z(d#Z)d$Z*d%Z+d&Z,d'Z-d(Z.d)Z/d*Z0d+Z1d,Z2d-Z3d.Z4d/Z5d0Z6d1Z7d2Z8d3Z9d4Z:id5dd6dd7dd8dd9e8d:dd;e9de:d?e9d@e:dAe9dBe:dCe9dDe:Z;dEZdHZ?dIZ@dZddddJdJdJddJdJdJdK dLZAdMZBdNZCdOZDeEdPdQZFdRZGeHdSdTZIdUZJdVdddddJdJdJddJdJdJdW dXZKdYZLdS)[N) FunctionType GenericAlias) dataclassfieldFieldFrozenInstanceErrorInitVarKW_ONLYMISSINGfieldsasdictastuplemake_dataclassreplace is_dataclassceZdZdS)rN__name__ __module__ __qualname__..\python\lib\dataclasses.pyrrsrrceZdZdZdS)_HAS_DEFAULT_FACTORY_CLASScdS)Nz rselfs r__repr__z#_HAS_DEFAULT_FACTORY_CLASS.__repr__s{rN)rrrrrrrrrs#rrceZdZdS) _MISSING_TYPENrrrrr!r!Drr!ceZdZdS) _KW_ONLY_TYPENrrrrr$r$r"rr$ceZdZdZdZdS) _FIELD_BASEc||_dSNnamerr*s r__init__z_FIELD_BASE.__init__  rc|jSr(r)rs rrz_FIELD_BASE.__repr__s yrN)rrrr,rrrrr&r&s2rr&_FIELD_FIELD_CLASSVAR_FIELD_INITVAR__dataclass_fields____dataclass_params__ __post_init__z^(?:\s*(\w+)\s*\.)?\s*(\w+)cfttjfd}|S)Nct|tjf}|vrdS| |}|n#|wxYw|S)Nz...)id_thread get_identadddiscard)rkeyresult repr_running user_functions rwrapperz _recursive_repr..wrappershh)+++ ,  5 &"]4((F   % % % %L  % % % % s A!!A8)set functoolswraps)r?r@r>s` @r_recursive_reprrDsI55L_]##     $#  Nrc$eZdZdZdZdZdZdS)r typec||_dSr(rF)rrGs rr,zInitVar.__init__r-rct|jtr |jj}nt|j}d|dS)Nzdataclasses.InitVar[]) isinstancerGrrepr)r type_names rrzInitVar.__repr__sB di & & ( *IITYI2i2222rc t|Sr()r )clsrGs r__class_getitem__zInitVar.__class_getitem__st}}rN)rrr __slots__r,rrPrrrr r sFI333rr cJeZdZdZdZedZdZee Z dS)r) r*rGdefaultdefault_factoryrLhashinitcomparemetadatakw_only _field_typec d|_d|_||_||_||_||_||_||_|tntj ||_ ||_ d|_ dSr()r*rGrSrTrVrLrUrW_EMPTY_METADATAtypesMappingProxyTyperXrYrZ) rrSrTrVrLrUrWrXrYs rr,zField.__init__st   .    $,)/99  rcd|jd|jd|jd|jd|jd|jd|jd|jd |jd |j d |j d S) Nz Field(name=z,type=z ,default=z,default_factory=z,init=,repr=z,hash=z ,compare=z ,metadata=z ,kw_only=z ,_field_type=)) r*rGrSrTrVrLrUrWrXrYrZrs rrzField.__repr__/s        <  $(#7            <  !M   <   $/    rcxtt|jdd}|r||j||dSdS)N __set_name__)getattrrGrS)rownerr*funcs rrczField.__set_name__GsMtDL))>4@@  , Dud + + + + + , ,rN) rrrrQr,rDrrc classmethodrrPrrrrrsb I     _ .,,,$ L11rrceZdZdZdZdZdS)_DataclassParamsrVrLeqorder unsafe_hashfrozencZ||_||_||_||_||_||_dSr(rj)rrVrLrkrlrmrns rr,z_DataclassParams.__init__Zs1   & rc hd|jd|jd|jd|jd|jd|jd S)Nz_DataclassParams(init=r`z,eq=z,order=z ,unsafe_hash=z,frozen=rarjrs rrz_DataclassParams.__repr__bst  g  $/  +  rN)rrrrQr,rrrrririQs9IrriTrSrTrVrLrUrWrXrYc p|tur|turtdt||||||||S)aReturn an object to identify dataclass fields. default is the default value of the field. default_factory is a 0-argument function called to initialize a field's value. If init is true, the field will be a parameter to the class's __init__() function. If repr is true, the field will be included in the object's repr(). If hash is true, the field will be included in the object's hash(). If compare is true, the field will be used in comparison functions. metadata, if specified, must be a mapping which is stored but not otherwise examined by dataclass. If kw_only is true, the field will become a keyword-only parameter to __init__(). It is an error to specify both default and default_factory. z/cannot specify both default and default_factory)r ValueErrorrrqs rrrpsK$g/"@"@JKKK /4tW7 $ $$rcftd|Dtd|DfS)Nc36K|]}|j |j|VdSr(rVrY.0fs r z(_fields_in_init_order..s0@@qv@ai@!@@@@@@rc36K|]}|j |j|VdSr(rvrws rrzz(_fields_in_init_order..s0<<qvz_tuple_str..s)@@@AH//qv//@@@r,))join)rr s` r _tuple_strrsD t Esxx@@@@@@@AA E E EEr)globalslocals return_typecX|i}d}|tur||d<d}d|}dd|D}d|d|d |d |}d |}d |d |d|}i} t||| | ddi|S)N _return_typez->_return_typer c3 K|] }d|V dS)z Nr)rxbs rrzz_create_fn..s(,,!X!XX,,,,,,rz def rraz: , zdef __create_fn__(z): z return __create_fn__r)r rkeysexec) r*argsbodyrrrreturn_annotationtxt local_varsnss r _create_fnrs ~'!!!,~, 88D>>D 99,,t,,, , ,D =$ < < < < 1 < z_init_fn..$s' 8 8 8Aqv 8 8 8r)r _HAS_DEFAULT_FACTORY__dataclass_builtins_object__rc3@K|]}|jtu|jVdSr()rZr1r*rws rrzz_init_fn..5s@BB!".!@!@ f!@!@!@!@BBrrrrapassc,g|]}t|Srrrws rrz_init_fn..=s777qKNN777r*c,g|]}t|Srrrws rrz_init_fn..Cs@@@AQ@@@rr,)rrr)rVrSr rT TypeErrorr*updaterobjectrappendr_POST_INIT_NAMEr)r std_fieldskw_only_fieldsrn has_post_initrrr seen_defaultryr body_linesline params_str _init_paramss r_init_fnrsL << 6 <I((Q->'-I-I#  <!;!;!;!;<<<9 8 8 8 8F MM 4)/ J $$1ffi??  $   d # # #JXXBBfBBBBB YHHHH:HHHIII X 77J777LA  @@@@@@ j kL0 #%"&  ( ( ((rc tddddd|Dzdzg|}t|S)Nrrz(return self.__class__.__qualname__ + f"(rc2g|]}|jd|jdS)z={self.z!r}r)rws rrz_repr_fn..Ps= 1 1 1$%$%6 ? ?16 ? ? ? 1 1 1rz)"r)rrrD)r rfns r_repr_fnrLst J?YY 1 1)/ 1 1 1222%  & & &B 2  rc|td}|r&ddd|Dzdz}nd}tddd |d d d f|| tddd |d ddf|| fS)N)rOrrrc3>K|]}t|jVdSr()rLr*rws rrzz'_frozen_get_del_attr..[s*#A#AQDLL#A#A#A#A#A#Arrr __setattr__)rr*rz if type(self) is cls or name in :z> raise FrozenInstanceError(f"cannot assign to field {name!r}")z)super(cls, self).__setattr__(name, value))rr __delattr__r+z; raise FrozenInstanceError(f"cannot delete field {name!r}")z"super(cls, self).__delattr__(name))rrr)rOr rr fields_strs r_frozen_get_del_attrrWs%8::F 388#A#A&#A#A#AAAADH  }/G*GGGXCE%&  ( ( ( }&G*GGGU<>%&  ( ( ( rc <t|ddd|||dg|S)N)rotherz%if other.__class__ is self.__class__:z return zreturn NotImplementedr)r)r*op self_tuple other_tuplers r_cmp_fnrpsE d'??*?b?+??/1&  ' ' ''rcRtd|}tddd|dg|S)Nr__hash__rz return hash(rar)rr)r rrs r_hash_fnr~sAFF++J j3j3334% ' ' ''rc\||jup#t||juo |j|juSr()ClassVarrG _GenericAlias __origin__)a_typetypings r _is_classvarrs; fo % :V  449%8;rc@||jupt||juSr()r rGr dataclassess r _is_initvarrs* k) ) 3F||{224rc||juSr()r rs r _is_kw_onlyrs [( ((rct|}|rd}|d}|s*tj|jj}nktj|j}|rE|j||ur)tj|jj}|r4|||d|rdSdS)NTF)_MODULE_IDENTIFIER_REmatchgroupsysmodulesgetr__dict__) annotationrOa_moduleris_type_predicaterr module_namemodules r_is_typersR " ' ' 3 3E  kk!nn  A009BB[__S^44F A&/--k::hFF[__V%677@  ##BFF5;;q>>$:$:HEE 4 5rct||t}t|tr|}n1t|tjrt}t |}||_||_t|_ tj d}|rXt||s|jjj-t;dt|jd|jd|S) N)rSrfield z cannot have a default factoryz$ is a ClassVar but specifies kw_onlyzmutable default z for field z$ is not allowed: use default_factory)rdr rKrr]MemberDescriptorTyperr*rGr/rZrrrrstrrrr0rrr r1rTrrYrS __class__rrs)rOa_namerdefault_kw_onlyrSryrrs r _get_fieldrszc67++G'5!!#  gu9 : : G ' " " "AF AF AM [__X & &F ,  ( ( ,163'' ,QVS&&/)++ ,,AM }k(+  , , +163'' +QVS+{7J(** ++AM }.999 G + +.QV...// / }000 9  'AI}//// 9G # #&QV&&&'' '  }19#6#?#GIDOOIIFIIIJJ J Hrc\t|tr|jd|j|_|S)Nr)rKrrr)rOrs r _set_qualnamer4s7%&&D # 0CC5>CC Lrc^||jvrdSt||t|||dS)NTF)rrsetattr)rOr*rs r_set_new_attributer;s= s|t#u Cu 5rcdSr(rrOr rs r_hash_set_nonerJs 4rcVd|D}t|t||S)Nc>g|]}|j|jn|j|Sr()rUrWrws rrz_hash_add..Ns) K K K!qv~!)~~16~A~~~r)rr)rOr rfldss r _hash_addr Ms/ K Kv K K KD htW55 6 66rc0td|j)Nz-Cannot overwrite attribute __hash__ in class )rrrs r_hash_exceptionr Qs( / # // 0 00r)FFFF)FFFT)FFTF)FFTT)FTFF)FTFT)FTTF)FTTT)TFFF)TFFT)TFTF)TFTT)TTFF)TTFT)TTTF)TTTTc  i} |jtjvrtj|jj} ni} t |t t ||||||d} d}|jdddD]Y}t|td}|?d}| D] }|| |j < t|t j rd} Z|j di}g}d}tjt}|D]\}}t!||s2t#|t$r6t'||||jt r|rt+|dd}d}`|t/|||||D]t}|| |j <t#t||j dt0r?|jt4urt7||j Yt ||j |ju|jD]0\}}t#|t0r||vrt+|d1|r&| r|st+d| s|rt+d t |t| |j d t4}|t4up |duod |jv }|r|st9d d | D}t;|\}}|r@t=|t>}tA|dtC|||||d| vrdnd| | d| D}|r+d|D} tA|dtE| | |rOd|D} tGd| }!tGd| }"tA|d tId d|!|"| |rrd|D} tGd| }!tGd| }"dD]C\}}#tA||tI||#|!|"| rt+d|d|jdD|rItK||| D]7}$tA||$j|$rt+d|$jd|j8tLtO|tO|tO||f}%|%r|%||| |_(t|ds_ t%tSj*|+dd}&n#t*t8f$rd}&YnwxYw|j|&z|_,|r(tA|d t[d!|D| r| st+d"| rt]||| }t_j0||S)#NFrT__annotations__z3 is KW_ONLY, but KW_ONLY has already been specifiedz& is a field but has no type annotationz5cannot inherit non-frozen dataclass from a frozen onez5cannot inherit frozen dataclass from a non-frozen oner__eq__z eq must be true if order is truec<g|]}|jttfv|Sr)rZr/r1rws rrz"_process_class..s6EEEQ-FN+CCCCCCrr,r__dataclass_self__c.g|]}|jtu|SrrZr/rws rrz"_process_class..s$HHH 0G0G!0G0G0Grc g|] }|j | Sr)rLrws rrz"_process_class..s000a0000rrc g|] }|j | SrrWrws rrz"_process_class..333a3333rrz==rc g|] }|j | Srrrws rrz"_process_class..&rr))__lt__<)__le__z<=)__gt__>)__ge__z>=zCannot overwrite attribute z in class z). Consider using functools.total_ordering__doc__z -> Noner__match_args__c3$K|] }|jV dSr(r)rws rrzz!_process_class..Rs$ A AA A A A A A Arz'weakref_slot is True but slots is False)1rrrrr_PARAMSri__mro__rd_FIELDSvaluesr*rnrritemsrrKrrr rrrrrSr delattrrsr~hasattrrrrrrrr _hash_actionboolrinspect signaturerrr| _add_slotsabcupdate_abstractmethods)'rOrVrLrkrlrmrn match_argsrYr weakref_slotr rany_frozen_basehas_dataclass_basesr base_fieldsrycls_annotations cls_fields KW_ONLY_seenrr*rGr class_hashhas_explicit_hashall_init_fieldsstd_init_fieldskw_only_init_fieldsr field_listrrrrr hash_actiontext_sigs' r_process_classr@ts F ~$$+cn-6 C*4r5+6@@AAAO [Ab ! ' 'a$//  ""&  '')) # #!"qvq'"") '"&l&&'8"==O JL+h'K%++--DD d k * * D4%% DT3 [5H(** D  >4!=!=!=>>>LGG   jdD'BB C C C C 00qv gc16400% 8 8 0yG##QV$$$$QVQY///|))++OO e eU # # ODO,C,CtMMMNN N .  *6 *)** * .6 .-.. .  C&!!!!!*g66J'72O(D0MX5MP  =R=;<<< EE&--//EEEO2/BB_ _55 3 #O$3$7$*$1=Cf.ds% 8 8 8aGD!& ! ! 8 8 8rr}rs`r_dataclass_getstaterCcs# 8 8 8 86$<< 8 8 88rctt||D]&\}}t||j|'dSr()zipr rrr*)rstaterrs r_dataclass_setstaterGgsLF4LL%0044 u4U333344rc#K|jdxdSxtdx \}|VdS}t|ds |Ed{VdS t d|jd)NrQr__next__z Slots of 'z' cannot be determined)rrrr(rr)rOslotiterables r _get_slotsrLms ,  ; ' ' TT F SYYYYYJJJJJWXz::X          MMMMNN Nrc "d|jvrt|jdt|j}t dt |D}t tj tt|j dd}t tj |jtj||rdnd|d<|D]}||d|dd|d dt!|d d}t#||j|j|}|||_|r d |vr t(|_d |vr t,|_|S) NrQz already specifies __slots__c3$K|] }|jV dSr(r)rws rrzz_add_slots..s$441444444rrr ) __weakref__rrrOr __getstate__ __setstate__)rrrdictr|r rA itertoolschain from_iterablemaprLr# filterfalse __contains__poprdrG __bases__rrCrPrGrQ)rO is_frozenr1cls_dict field_namesinherited_slots field_namequalnames rr-r-{s cl""3<EEEFFFCL!!H44s 44444K%%c*ck!B$6G&H&HIIO "  ( OE--2      H["''   Z&&&& LLT""" LL%%%sND11H $s))CL#- : :C#3  ) )2C   ) )2C  JrF rVrLrkrlrmrnr0rYrr1c P   f d} || S| |S)aAdd dunder methods based on the fields defined in the class. Examines PEP 526 __annotations__ to determine fields. If init is true, an __init__() method is added to the class. If repr is true, a __repr__() method is added. If order is true, rich comparison dunder methods are added. If unsafe_hash is true, a __hash__() method is added. If frozen is true, fields may not be assigned to after instance creation. If match_args is true, the __match_args__ tuple is added. If kw_only is true, then by default all fields are keyword-only. If slots is true, a new class with a __slots__ attribute is returned. c 6 t|  Sr()r@) rOrkrnrVrYr0rlrLrrmr1s rwrapzdataclass..wraps-c4r5+$j'5*,, ,rr) rOrVrLrkrlrmrnr0rYrr1rds `````````` rrrsn",,,,,,,,,,,,,,  {  499rc t|t}n#t$rtddwxYwt d|DS)zReturn a tuple describing the fields of this dataclass. Accepts a dataclass or an instance of one. Tuple elements are of type Field. z0must be called with a dataclass type or instanceNc36K|]}|jtu|VdSr(rrws rrzzfields..s.GGqq}/F/F/F/F/F/FGGr)rdr$AttributeErrorrr|r%)class_or_instancer s rr r srV*G44 VVVJKKQUUV GGFMMOOGGG G GGs3cFtt|tS)z2Returns True if obj is an instance of a dataclass.)r(rGr$)objs r_is_dataclass_instancerks 499g & &&rcxt|tr|nt|}t|tS)zEReturns True if obj is a dataclass or an instance of a dataclass.)rKrGr(r$)rjrOs rrrs2C&& 5##DIIC 3  r) dict_factoryc^t|stdt||S)aReturn the fields of a dataclass instance as a new dictionary mapping field names to field values. Example usage:: @dataclass class C: x: int y: int c = C(1, 2) assert asdict(c) == {'x': 1, 'y': 2} If given, 'dict_factory' will be used instead of built-in dict. The function applies recursively to field values that are dataclass instances. This will also look into built-in containers: tuples, lists, and dicts. z0asdict() should be called on dataclass instances)rkr _asdict_inner)rjrms rr r s4& "# & &LJKKK l + ++rct|r^g}t|D]A}tt||j}||j|fB|St |tr.t|drt|fd|DSt |ttfr$t|fd|DSt |tr6t|fd| DStj|S)N_fieldsc0g|]}t|Srrorxvrms rrz!_asdict_inner.."s#GGGa=L99GGGrc38K|]}t|VdSr(rsrts rrzz _asdict_inner..'s-EEAq,77EEEEEErc3^K|]'\}}t|t|fV(dSr(rs)rxkrurms rrzz _asdict_inner..)sW22!Q(<88'<88:222222r)rkr rordr*rrKr|r(rGlistrRr&copydeepcopy)rjrmr=ryrs ` rrorosoc""%" + +A!'#qv"6"6 EEE MM165/ * * * *|F### C  "GC$;$;"(tCyyGGGG3GGGHH C$ ' ' "tCyyEEEEEEEEEE C  "tCyy2222%(YY[[22222 2}S!!!r) tuple_factoryc^t|stdt||S)aReturn the fields of a dataclass instance as a new tuple of field values. Example usage:: @dataclass class C: x: int y: int c = C(1, 2) assert astuple(c) == (1, 2) If given, 'tuple_factory' will be used instead of built-in tuple. The function applies recursively to field values that are dataclass instances. This will also look into built-in containers: tuples, lists, and dicts. z1astuple() should be called on dataclass instances)rkr_astuple_inner)rjr|s rrr0s4& "# & &MKLLL #} - --rct|rWg}t|D]:}tt||j}||;|St |tr.t|drt|fd|DSt |ttfr$t|fd|DSt |tr6t|fd| DStj|S)Nrqc0g|]}t|Srr~rxrur|s rrz"_astuple_inner..Vs#III>!];;IIIrc38K|]}t|VdSr(rrs rrzz!_astuple_inner..[s-GGa=99GGGGGGrc3^K|]'\}}t|t|fV(dSr(r)rxrxrur|s rrzz!_astuple_inner..]sT33"a)M::N1m<\<\]333333r)rkr r~rdr*rrKr|r(rGryrRr&rzr{)rjr|r=ryrs ` rr~r~Hsic""" ! !A"73#7#7GGE MM% }V$$$ C  "GC$;$;"tCyyIIIISIIIJJ C$ ' ' "tCyyGGGG3GGGGGG C  "tCyy3333&)iikk33333 3}S!!!rr) bases namespacerVrLrkrlrmrnr0rYrr1c it}ii|D]}t|tr|}d}nJt|dkr|\}}n1t|dkr |\}}}||<nt d|t|tr|st d|t j|rt d|||vrt d|||||<fd }tj ||i|}t||||||| | | | | S) aReturn a new dynamically created dataclass. The dataclass name will be 'cls_name'. 'fields' is an iterable of either (name), (name, type) or (name, type, Field) objects. If type is omitted, use the string 'typing.Any'. Field objects are created by the equivalent of calling 'field(name, type [, Field-info])'.:: C = make_dataclass('C', ['x', ('y', int), ('z', int, field(init=False))], bases=(Base,)) is equivalent to:: @dataclass class C(Base): x: 'typing.Any' y: int z: int = field(init=False) For the bases and namespace parameters, see the builtin type() function. The parameters init, repr, eq, order, unsafe_hash, and frozen are passed to dataclass(). Nz typing.AnyrzInvalid field: z'Field names must be valid identifiers: z"Field names must not be keywords: zField name duplicated: cf|||d<dS)Nr)r)r annotationsdefaultsrs rexec_body_callbackz*make_dataclass..exec_body_callbacks8 ) ( + rra) rArKrlenr isidentifierkeyword iskeywordr:r] new_classr)cls_namer rrrVrLrkrlrmrnr0rYrr1seenitemr*tpspecrrOrrs ` @@rrrcs6  55DKH dC 8DBB YY!^^ID"" YY!^^!ND"d!HTNN6d6677 7$$$ PD,=,=,?,? PNdNNOO O  T " " KIIIJJ J 4<<>d>>?? ?  D,,,,,,, /(E2/A B BC St$2U!,V *G5". 0 0 00rc t|stdt|tD]}|jt ur|js"|j|vrtd|jd:|j|vrQ|jtur&|j turtd|jdt||j||j<|j di|S)a+Return a new object replacing specified fields with new values. This is especially useful for frozen classes. Example usage:: @dataclass(frozen=True) class C: x: int y: int c = C(1, 2) c1 = replace(c, x=3) assert c1.x == 3 and c1.y == 2 z1replace() should be called on dataclass instancesrzC is declared with init=False, it cannot be specified with replace()zInitVar z! must be specified with replace()r)rkrrdr$r%rZr0rVr*rsr1rSr r)rjchangesrys rrrs*$ "# & &MKLLL S' " " ) ) + +33 =O + + v v   "-!&"-"-"-...  6 }..193G3G "DAF"D"D"DEEE%c1622GAFO 3= # #7 # ##rr()Mrerrzr]r+rbuiltinsrBrSr.r8rr__all__rgrrrr!r r$r r^r\r&r/r0r1r$r"rcompilerrDr rrirr~rrrrrrrrrrrrrrrrrrr r r)r@rCrGrLr-rr rkrrRr ror|rr~rrrrrrs!  ,,,,,,,,   |0////./// 2133        -//        -//)%(,, X  +/00-.. ! !" # #ABB$6=2=2=2=2=2=2=2=2@>gDtTD'$$$$$0 F F F-1")))))0 ) ) )9;9;9;x///&9(9(9(x2 ' ' '''';;;444 )))888v_ _ _ B777000,d,d,d-d-n  -d  -i -d-i-o-i-o-i-o-i-o *hhh^999444 O O O444n4dt5$5u>HHH$''' !!!!%,,,,,0&"&"&"R#(.....0"""6/1DtUD%u %G0G0G0G0G0T0$0$0$0$0$r