+
    TŎi͖                      ^ RI Ht ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIt^ RIt^ RIHtHt ^ RIHt ^ RIHtHtHt ^RIHtHtHt ^RIHtHtHtHtHtHt ^RI H!t!H"t"H#t#H$t$ ]%PL                  t'R	t(Rct)R
t*]
PV                  ! / 4      t,]%! 4       t-]P\                  ! ]P^                  ]P`                  4      t1 ! R R]Pd                  4      t3]3Ph                  t4  ! R R]54      t6]4RRRRRRRRRRRRRR3R lt7RdR R llt8ReR R llt9R R lt: ! R R]4      t;R t<R t=R R lt>R t?R R lt@R  tAR! tBR" tCR# tD ! R$ R%4      tER& tFR' tGRfR( ltHRgR* ltI]ItJ R+ tKR, R- ltLR. R/ ltMR0 R1 ltNR2 tOR3 R4 ltPR5 tQReR6 ltRR7 R8 ltSRhR9 ltTR: tUR; tVR< t0R= tWR> R? ltXR@ RA ltYRB RC ltZRD RE lt[RF RG lt\RH RI lt]RJ RK lt^RL RM lt_ ! RN RO4      t`]`P                   U u. uF  p ]`! V ]4RRRRR)V RP8g  RR)]_! V 4      RQ7      NK!  	  up tb]N! ]R! ]T! ]`]bRR7      ]b Uu. uF  qP                  RS8w  g   K  VNK  	  upRR7      ]b Uu. uF+  qP                  '       g   K  VP                  RS8w  g   K)  VNK-  	  upRR7      t` ! RT RU4      te]R! ]T! ]e4      4      te ! RV RW4      tf]fP                   U u. uF  p ]`! V ]4RRRRR)RRR)]_! V 4      RQ7      NK  	  up tg]R! ]T! ]f]gRR7      ]gRR7      tf ! RX RY4      th]hP                   U u. uF  p ]`! V ]4RRRRR)RRR)RZ7
      NK  	  up ti]N! ]R! ]T! ]h]iRR7      ]iRR7      ]iRR7      th ! R[ R\4      tjRi U u. uF  p ]`! V ]4RRRRR)RRR)RZ7
      NK  	  up ti]N! ]R! ]T! ]j]iRR7      ]iRR7      ]iRR7      tj]%3R3R] ltk]I! RRR^7       ! R_ R`4      4       tlRa tmRb t.R# u up i u upi u upi u up i u up i u up i )j    )annotationsN)CallableMapping)cached_property)Any
NamedTupleTypeVar)_compat_configsetters)PY_3_10_PLUSPY_3_11_PLUSPY_3_13_PLUS_AnnotationExtractor_get_annotationsget_generic_base)DefaultAlreadySetErrorFrozenInstanceErrorNotAnAttrsClassErrorUnannotatedAttributeErrorz__attr_factory_%s_attrs_cached_hashc                  H    ] tR t^>tRt]P                  ! 4       tR tR t	Rt
R# )_Nothinga.  
Sentinel to indicate the lack of a value when `None` is ambiguous.

If extending attrs, you can use ``typing.Literal[NOTHING]`` to show
that a value may be ``NOTHING``.

.. versionchanged:: 21.1.0 ``bool(NOTHING)`` is now False.
.. versionchanged:: 22.2.0 ``NOTHING`` is now an ``enum.Enum`` variant.
c                	    R # )NOTHING selfs   &Y/Users/ahmad/.openclaw/workspace/scripts/.venv/lib/python3.14/site-packages/attr/_make.py__repr___Nothing.__repr__K   s        c                	    R # Fr   r   s   &r   __bool___Nothing.__bool__N   s    r"   r   N)__name__
__module____qualname____firstlineno____doc__enumautor   r    r%   __static_attributes__r   r"   r   r   r   >   s     iikGr"   r   c                  4    ] tR t^ZtRt]! R4      R3R ltRtR# )_CacheHashWrapperac  
An integer subclass that pickles / copies as None

This is used for non-slots classes with ``cache_hash=True``, to avoid
serializing a potentially (even likely) invalid hash value. Since `None`
is the default value for uncalculated hashes, whenever this is copied,
the copy's value for the hash should automatically reset.

See GH #613 for more details.
Nc                	    W3# Nr   )r   _none_constructor_argss   &&&r   
__reduce___CacheHashWrapper.__reduce__f   s     ''r"   r   )r'   r(   r)   r*   r+   typer5   r.   r   r"   r   r0   r0   Z   s    	 ,0:R ( (r"   r0   Tc                x   \        W;VR4      w  rppVe   VRJd   VRJd   Rp\        V4      hV	eA   V \        Jd   Rp\        V4      h\	        V	4      '       g   Rp\        V4      h\        V	4      p Vf   / p\        V\        \        34      '       d   \        P                  ! V!  pV'       d&   \        V\        \        34      '       d
   \        V!  pV'       d&   \        V\        \        34      '       d
   \        V!  p\        R/ RV bRVbR	VbR
RbRVbRVbRVbRVbRVbRV
bRVbRVbRVbRVbRVbRVb # )a  
Create a new field / attribute on a class.

Identical to `attrs.field`, except it's not keyword-only.

Consider using `attrs.field` in new code (``attr.ib`` will *never* go away,
though).

..  warning::

    Does **nothing** unless the class is also decorated with
    `attr.s` (or similar)!


.. versionadded:: 15.2.0 *convert*
.. versionadded:: 16.3.0 *metadata*
.. versionchanged:: 17.1.0 *validator* can be a ``list`` now.
.. versionchanged:: 17.1.0
   *hash* is `None` and therefore mirrors *eq* by default.
.. versionadded:: 17.3.0 *type*
.. deprecated:: 17.4.0 *convert*
.. versionadded:: 17.4.0
   *converter* as a replacement for the deprecated *convert* to achieve
   consistency with other noun-based arguments.
.. versionadded:: 18.1.0
   ``factory=f`` is syntactic sugar for ``default=attr.Factory(f)``.
.. versionadded:: 18.2.0 *kw_only*
.. versionchanged:: 19.2.0 *convert* keyword argument removed.
.. versionchanged:: 19.2.0 *repr* also accepts a custom callable.
.. deprecated:: 19.2.0 *cmp* Removal on or after 2021-06-01.
.. versionadded:: 19.2.0 *eq* and *order*
.. versionadded:: 20.1.0 *on_setattr*
.. versionchanged:: 20.3.0 *kw_only* backported to Python 2
.. versionchanged:: 21.1.0
   *eq*, *order*, and *cmp* also accept a custom callable
.. versionchanged:: 21.1.0 *cmp* undeprecated
.. versionadded:: 22.2.0 *alias*
.. versionchanged:: 25.4.0
   *kw_only* can now be None, and its default is also changed from False to
   None.
TNF6Invalid value for hash.  Must be True, False, or None.z=The `default` and `factory` arguments are mutually exclusive.z*The `factory` argument must be a callable.default	validatorreprcmphashinit	convertermetadatar7   kw_onlyeqeq_keyorder	order_key
on_setattraliasr   )_determine_attrib_eq_order	TypeErrorr   
ValueErrorcallableFactory
isinstancelisttupler   pipeand__CountingAttr)r:   r;   r<   r=   r>   r?   rA   r7   r@   factoryrB   rC   rE   rG   rH   rD   rF   msgs   &&&&&&&&&&&&&&&   r   attribrV   j   s   t $>$ By D,U1BFn'!O  S/!  >CS/!'" *tUm,,\\:.
Z	D%=99)$	Z	D%=99)$	   	
             ! r"   c          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
   scriptstrglobsdict[str, Any] | NonelocsMapping[str, object] | NonefilenamereturnNoner   )formats   "r   __annotate__rc      s:            &  	 
 
 r"   c                6    \        WR4      p\        WAV4       R# )zO
Evaluate the script with the given global (globs) and local (locs)
variables.
execN)compileeval)rY   r[   r]   r_   bytecodes   &&&& r   _compile_and_evalri      s     v0H$r"   c          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
rX   rY   rZ   r_   r[   r\   localsr^   r`   zdict[str, Any]r   )rb   s   "r   rc   rc      s:           !  (	 
  r"   c                    Vf   / MTp^pTp \        V 4      RV P                  R4      V3p\        P                  P	                  W4      pW8X  d   MVRR  RV R2pV^,          pK[  \        WWA4       V# )zH
Cache the script with _linecache_, compile it and return the _locals_.
NT->)len
splitlines	linecachecache
setdefaultri   )	rY   r_   r[   rk   r]   countbase_filenamelinecache_tupleold_vals	   &&&&     r   _linecache_and_compilery      s     2VD EM
Kd#	
 //,,XG%#CR()5'3
fT4Kr"   c               $    V ^8  d   QhRRRRRR/# )rX   cls_namerZ   
attr_namesz	list[str]r`   r7   r   )rb   s   "r   rc   rc   	  s!     1 1S 1i 1D 1r"   c                    V  R2p/ p\        V4       F  w  rEV3R lp\        V4      W5&   K  	  \        V\        3V4      # )z
Create a tuple subclass to hold `Attribute`s for an `attrs` class.

The subclass is a bare tuple with properties for names.

class MyClassAttributes(tuple):
    __slots__ = ()
    x = property(itemgetter(0))

Attributesc                    W,          # r2   r   )r   is   &&r   getter&_make_attr_tuple_class.<locals>.getter  s	    7Nr"   )	enumeratepropertyr7   rP   )r{   r|   attr_class_namebodyr   	attr_namer   s   &&     r   _make_attr_tuple_classr   	  sO     "
*-OD!*- 	 #6* . %400r"   c                  6    ] tR tRt$ R]R&   R]R&   R]R&   RtR	# )
_Attributesi   r7   attrslist[Attribute]
base_attrsdict[str, type]base_attrs_mapr   N)r'   r(   r)   r*   __annotations__r.   r   r"   r   r   r      s    K##r"   r   c                    \        V 4      p V P                  R4      '       d   V P                  R4      '       d   V ^R p V P                  \        4      # )z
Check whether *annot* is a typing.ClassVar.

The string comparison hack is used to avoid evaluating all string
annotations which would put attrs-based classes at a performance
disadvantage compared to plain old classes.
)'"ro   )rZ   
startswithendswith_CLASSVAR_PREFIXES)annots   &r   _is_class_varr   &  sK     JE 
##z(B(Ba.//r"   c                    WP                   9   # )zJ
Check whether *cls* defines *attrib_name* (and doesn't just inherit it).
)__dict__)clsattrib_names   &&r   _has_own_attributer   7  s     ,,&&r"   c                   V ^8  d   QhRR/# )rX   r`   z'tuple[list[Attribute], dict[str, type]]r   )rb   s   "r   rc   rc   >  s     # #,#r"   c                   . p/ p\        V P                  ^R 4       Fm  p\        VR. 4       FY  pVP                  '       g   VP                  V9   d   K(  VP                  RR7      pVP                  V4       WCVP                  &   K[  	  Ko  	  . p\        4       p\        V4       FC  pVP                  V9   d   K  VP                  ^ V4       VP                  VP                  4       KE  	  Wc3# )zI
Collect attr.ibs from base classes of *cls*, except *taken_attr_names*.
__attrs_attrs__T	inheritedro   )
reversed__mro__getattrr   nameevolveappendsetinsertadd)r   taken_attr_namesr   base_attr_mapbase_clsafilteredseens   &&      r   _collect_base_attrsr   >  s     JM S[[2./#4b9A{{{aff(884(Aa $,!&&! : 0 H5Dj!66T>1	 " ""r"   c                "   . p/ pV P                   ^R  Fv  p\        VR. 4       Fb  pVP                  V9   d   K  VP                  RR7      pVP	                  VP                  4       VP                  V4       WCVP                  &   Kd  	  Kx  	  W#3# )a  
Collect attr.ibs from base classes of *cls*, except *taken_attr_names*.

N.B. *taken_attr_names* will be mutated.

Adhere to the old incorrect behavior.

Notably it collects from the front and considers inherited attributes which
leads to the buggy behavior reported in #428.
r   Tr   ro   )r   r   r   r   r   r   )r   r   r   r   r   r   s   &&    r   _collect_base_attrs_brokenr   _  s     JM KK"%#4b9Avv))4(A  (a $,!&&! : & $$r"   c                   V ^8  d   QhRR/# )rX   r`   r   r   )rb   s   "r   rc   rc   {  s     uE uE uEr"   c                h  a V P                   o\        V 4      pVe   \        VP                  4       4      pEM;VRJ Ed   SP                  4        UU	u0 uF  w  rV	P                  \
        J g   K  VkK  	  p
pp	. p\        4       pVP                  4        Fp  w  r\        V4      '       d   K  VP                  V4       SP                  V\        4      pVP                  \
        Jd   \        V4      pVP                  W34       Kr  	  W,
          pV'       d8   \        RRP                  \        VV3R lR7      4      ,           R,           4      hM#\        R SP                  4        4       R R7      p\         P"                  p\$        P&                  P(                  pV UUu. uF"  w  ppV! VVVVJVP                  V4      4      NK$  	  pppV'       d*   \+        T V Uu0 uF  qP,                  kK  	  up4      w  ppM(\/        T V Uu0 uF  qP,                  kK  	  up4      w  ppV\$        P&                  P0                  J dA   V Uu. uF  qP3                  RR	7      NK  	  ppV Uu. uF  qP3                  RR	7      NK  	  ppVV,           pVe   \5        V! V V4      4      pR
pR V 4        FN  pVRJ d&   VP6                  \        J d   RV: 2p\9        V4      hVR
J g   K6  VP6                  \        Jg   KL  RpKP  	  V FF  pVP:                  '       d   K  \<        P?                  V4      ! R\A        VP,                  4      4       KH  	  V Uu. uF  qP,                  NK  	  pp\C        V PD                  V4      p\G        V! V4      VV4      # u up	pi u uppi u upi u upi u upi u upi u upi )a  
Transform all `_CountingAttr`s on a class into `Attribute`s.

If *these* is passed, use that and don't look for them on the class.

If *collect_by_mro* is True, collect them in the correct MRO order,
otherwise use the old -- incorrect -- order.  See #428.

Return an `_Attributes`.
Tz1The following `attr.ib`s lack a type annotation: , c                :   < SP                  V 4      P                  # r2   )getcounter)ncds   &r   <lambda>"_transform_attrs.<locals>.<lambda>  s    bffQi6G6Gr"   )key.c              3  X   "   T F   w  rVP                   \        J g   K  W3x  K"  	  R # 5ir2   )	__class__rS   ).0r   attrs   &  r   	<genexpr>#_transform_attrs.<locals>.<genexpr>  s)      ",JD>>]2 ",s   **c                (    V ^,          P                   # )   )r   )es   &r   r   r     s    !A$,,r"   )rB   Fc              3  l   "   T F*  qP                   R Jg   K  VP                  R J g   K&  Vx  K,  	  R# 5i)FN)r?   rB   r   r   s   & r   r   r     s(     MA&&"5a!))u:Laas   44
4zlNo mandatory attributes allowed after an attribute with a default value or factory.  Attribute in question: rH   )$r   r   rO   itemsr   rS   r   r   r   r   r   rV   r   r   joinsorted	Attributefrom_counting_attr
ClassPropsKeywordOnlyNOr   r   r   FORCEr   rP   r:   rK   rH   _OBJ_SETATTR__get___default_init_alias_forr   r'   r   )r   theseauto_attribsrB   collect_by_mrofield_transformerannsca_listr   r   ca_namesannot_namesr   r7   r   unannotatedfcanoca	own_attrsr   r   r   had_defaultrU   r|   
AttrsClassr   s   &&&&&&                     @r   _transform_attrsr   {  sm   $ 
BC Du{{}%		 !hhj
(
~~. D( 	 

 e#zz|OIT""OOI&y'*A{{-/1INNI>*  , ,+C));,GH 	   "$((*
 '
 
&
&C				"	"B % %MIr 	2HHY		
 %   $7),)Q&&),%
!
M %?),)Q&&),%
!
M *((...5>?YXXdX+Y	?6@Ajhhth,j
A"E$'U34 KMM$199#7 A  BC  AF  GCS/!%AIIW$<K N www  #G-DQVV-LM  #((%Q&&%J('jAJz%(*mDD{
L - - @A> )s0   N/N"(NN
N 
N%(N*N/c                   . ROpVe   VP                  R4       MVP                  . RO4       VP                  RR.4       \        VR4      pRV R\        P                  RV/p\        RP                  V4      WER	V/R
7      R,          # )def wrapper(_cls):z,         return original_getattr(self, item)z    return __getattr__z__getattr__ = wrapper(_cls)r   cached_properties_cached_setattr_getoriginal_getattr
_cls)rk   __getattr__)	r   z    __class__ = _clsz    def __getattr__(self, item, cached_properties=cached_properties, original_getattr=original_getattr, _cached_setattr_get=_cached_setattr_get):z+         func = cached_properties.get(item)z         if func is not None:z!              result = func(self)z1              _setter = _cached_setattr_get(self)z#              _setter(item, result)z              return result)z         try:z2             return super().__getattribute__(item)z         except AttributeError:z4             if not hasattr(super(), '__getattr__'):z                 raisez-             return super().__getattr__(item)zY         original_error = f"'{self.__class__.__name__}' object has no attribute '{item}'"z-         raise AttributeError(original_error))r   extend_generate_unique_filenamer   r   ry   r   )r   r   r   linesunique_filenameglobs   &&&   r   _make_cached_property_getattrr     s    E #:	
 			
 
LL$)	
 0Y?O 	.|33,D "		%/ r"   c                x    \        V \        4      '       d    VR9   d   \        P                  WV4       R# \        h)z,
Attached to frozen classes as __setattr__.
N)	__cause____context____traceback____suppress_context__	__notes__)rN   BaseException__setattr__r   r   r   values   &&&r   _frozen_setattrsr   '  s8     $&&4 4 , 	!!$e4
r"   c                v    \        V \        4      '       d   VR9   d   \        P                  W4       R# \        h)z,
Attached to frozen classes as __delattr__.
N)r   )rN   r   __delattr__r   )r   r   s   &&r   _frozen_delattrsr  8  s/     $&&4>+A!!$-
r"   c                 2    V w  pTP                  p\	        T4      pT FD  pTP
                  '       g   K  TP                  pTP                  pY9  g   K7  \        Y'4      Y&   KF  	  T! R/ TB #   \          d    R\        T 4       R2p\        T4      Rhi ; i)a  
Create a new instance, based on the first positional argument with
*changes* applied.

.. tip::

   On Python 3.13 and later, you can also use `copy.replace` instead.

Args:

    inst:
        Instance of a class with *attrs* attributes. *inst* must be passed
        as a positional argument.

    changes:
        Keyword changes in the new copy.

Returns:
    A copy of inst with *changes* incorporated.

Raises:
    TypeError:
        If *attr_name* couldn't be found in the class ``__init__``.

    attrs.exceptions.NotAnAttrsClassError:
        If *cls* is not an *attrs* class.

.. versionadded:: 17.1.0
.. deprecated:: 23.1.0
   It is now deprecated to pass the instance using the keyword argument
   *inst*. It will raise a warning until at least April 2024, after which
   it will become an error. Always pass the instance as a positional
   argument.
.. versionchanged:: 24.1.0
   *inst* can't be passed as a keyword argument anymore.
z*evolve() takes 1 positional argument, but z were givenNr   )	rK   rp   rJ   r   fieldsr?   r   rH   r   )	argschangesinstrU   r   r   r   r   	init_names	   *,       r   r   r   C  s    J' ..C3KEvvvFF	GG	#!(!9G  >>!  '8T;O 	 n$&	's   A/ /'Bc                      ] tR tRtRtRtR R ltR tR R ltR t	R	 t
R
 tR tR tR tR tR tR tR tR tR tR tR tR tR R ltR R ltRtR# )_ClassBuilderi}  z 
Iteratively build *one* class.
c               (    V ^8  d   QhRRRRRRRR/# )rX   r   r7   r   boolpropsr   has_custom_setattrr   )rb   s   "r   rc   _ClassBuilder.__annotate__  s>     cG cGcG 	cG
 cG !cGr"   c                	   \        VVVVP                  VP                  VP                  4      w  rgpWn        VP
                  '       d   \        VP                  4      M/ V n        W`n	        V U	u0 uF  qP                  kK  	  up	V n        Wn        \        ;QJ d    . R  V 4       F  NK  	  5M! R  V 4       4      V n        VP
                  V n        VP                   V n        VP$                  V n        VP(                  \*        P,                  P.                  J V n        \3        \5        VRR4      4      V n        RV n        V P6                  '       d@   VP:                  p
\<        P>                  ! V
4      p\A        VPB                  4      ^8  V n        \3        \5        VRR4      4      V n"        \3        V4      '       * V n#        VPH                  V n%        VPL                  V n'        WPn(        RV n)        V P                  V P                  R&   W@P                  R&   VP                   '       d/   \T        V P                  R&   \V        V P                  R&   RV n)        MV PN                  \X        \Z        P\                  \Z        P^                  39   d   R;rV F7  p	V	P`                  e   RpV	Pb                  e   RpV'       g   K-  V'       g   K7   M	  V PN                  \X        8X  d   V'       g	   V'       dO   V PN                  \Z        P\                  8X  d	   V'       d(   V PN                  \Z        P^                  8X  d   V'       g   R	V n'        VPd                  '       d.   V Pg                  4       w  V P                  R
&   V P                  R&   . V n4        RV n5        \m        V P                  R4      '       d   \m        V P                  R4      '       g   V Pn                  V n8        R	# V Pr                  V n8        R	# u up	i )c              3  8   "   T F  qP                   x  K  	  R # 5ir2   r   r   s   & r   r   )_ClassBuilder.__init__.<locals>.<genexpr>  s      7As   __attrs_pre_init__F__attrs_post_init__r   __attrs_props__r   r  TN__getstate____setstate__r(   r)   ):r   rB   collected_fields_by_mror   r   
is_slotteddictr   	_cls_dict_attrsr   _base_names_base_attr_maprP   _attr_names_slots	is_frozen_frozenhas_weakref_slot_weakref_slothashabilityr   HashabilityHASHABLE_CACHED_cache_hashr  r   _has_pre_init_pre_init_has_argsr  inspect	signaturerp   
parameters_has_post_init_delete_attribsis_exception_is_excon_setattr_hook_on_setattr_has_custom_setattr_wrote_own_setattrr   r  _DEFAULT_ON_SETATTRr   validateconvertr;   r@   added_pickling_make_getstate_setstate_script_snippets_repr_addedhasattr_add_method_dunders_safe_add_method_dunders_add_method_dunders_unsafe)r   r   r   r   r  r  r   r   base_mapr   pre_init_funcpre_init_signaturehas_validatorhas_converters   &&&&&&        r   __init___ClassBuilder.__init__  s-    '7MM))##'
#8 	/4/?/?/?cll+R,67JqFFJ7& 5 7 755 7 77&&"33!7!7!G!GG 	 "'#/CU"KL"'  22M!(!2!2=!A&)*<*G*G&H1&LD#"730Eu#MN#';)) 00#5 "',0KK(),1()???,<DNN=),<DNN=)&*D#OO"
 

 -21M;;*$(M;;*$(M =]]  $$(;;*m$$(8(88$$7
 $(  ,,.~.~.  	 ! tyy,//wII~8
 8
 (,'D'DD$'+'F'FD$_ 8s   0O3c                	6    R V P                   P                   R2# )z<_ClassBuilder(cls=z)>)r   r'   r   s   &r   r    _ClassBuilder.__repr__  s    $TYY%7%7$8;;r"   c                   V ^8  d   QhRR/# )rX   r`   ra   r   )rb   s   "r   rc   r    s     ' ' 'r"   c                X   RP                  V P                   Uu. uF  q^ ,          NK  	  up4      p/ pV P                   F  w  rEpVP                  V4       K  	  \        V\	        V P
                  R4      V4      pV P                   F  w   rGV! V P                  V4       K  	  R# u upi )z-
Evaluate any registered snippets in one go.
r   methodsN)r   r=  updatery   r   r   r  )r   snippetrY   r[   _snippet_globsr]   hooks   &       r   _eval_snippets_ClassBuilder._eval_snippets  s     d6K6KL6K7AJJ6KLM#'#8#8AaLL' $9 &%dii;
 //JAq& 0 Ms   B'c                ~   V P                  4        V P                  RJ d7   V P                  4       p\        P                  ! V4      V P
                  n        M2V P                  4       p\        '       d   \        P                  ! V4      p\        VRR4      '       d"   RVP                  9  d   VP                  4        V# )zk
Finalize class based on the accumulated configuration.

Builder cannot be used after calling this method.
T__attrs_init_subclass__N)rT  r"  _create_slots_classweakrefrefr   __attrs_base_of_slotted___patch_original_classr   abcupdate_abstractmethodsr   r   rW  )r   r   s   & r   build_class_ClassBuilder.build_class  s     	;;$**,C29++c2BDII/,,.C|005
 C2D99)='')
r"   c                H   V P                   pV P                  pV P                  '       dl   V P                   F[  pW29  g   K  \	        W\
        4      \
        Jg   K%  \        P                  ! \        4      ;_uu_ 4        \        W4       RRR4       K]  	  V P                  P                  4        F  w  r4\        WV4       K  	  V P                  '       g8   \	        VRR4      '       d%   RVn        V P                  '       g   \         Vn        V#   + '       g   i     K  ; i)z1
Apply accumulated methods and return the class.
N__attrs_own_setattr__F)r   r  r1  r!  r   	_SENTINEL
contextlibsuppressAttributeErrordelattrr  r   setattrr7  rb  r6  r   r   )r   r   
base_namesr   r   s   &    r   r\  #_ClassBuilder._patch_original_class-  s     ii%%
 ((*95YF
 $,,^<<* =< )  >>//1KDCu% 2
 &&&7(%,
 ,
 ).C%+++".
# =<<s   >DD!c                &
   V P                   P                  4        UUu/ uF*  w  rV. \        V P                  4      ORNRN59  g   K(  WbK,  	  ppp\	        \
        R4      '       d!   \
        P                  ! V P                  4       V P                  '       gb   RVR&   V P                  '       gK   V P                  P                   F0  pVP                  P                  RR4      '       g   K'  \        VR&    M	  / pRpV P                  P                  ^R  FY  pVP                  P                  RR4      e   RpTP                  \!        VR	. 4       Uu/ uF  pV\!        WG4      bK  	  up4       K[  	  \#        V P$                  4      pV P                  p	V P&                  '       d5   R\!        V P                  R	R4      9  d   RV	9  d   V'       g
   V	R,          p	VP                  4        UU
u/ uF)  w  rz\)        V
\*        4      '       g   K  WzP,                  bK+  	  ppp
. pV'       d   \/        V P                  4      pVP                  4        Fe  w  r~W3,          p	W7 VP1                  V4       \2        P4                  ! V4      P6                  pV\2        P8                  P:                  Jg   Ka  WV&   Kg  	  VP                  R
4      pVe   VP1                  V4       \=        VVV P                  4      VR
&   V	 Uu. uF  qwV9  g   K  VNK  	  ppVP                  4        UUu/ uF  w  ppVV9   g   K  VVbK  	  pppV Uu. uF  qwV9  g   K  VNK  	  ppVP                  V4       V P>                  '       d   VP1                  \@        4       \        V4      VR	&   V P                  PB                  VR&   \E        V P                  4      ! V P                  PF                  V P                  P                  V4      p\H        PJ                  ! VP                  PM                  4       V4       F  p\)        V\N        \P        34      '       d   \!        VPR                  RR4      pM;\)        V\T        4      '       d   \!        VPV                  RR4      pM\!        VRR4      pV'       g   K|  V F-  p VPX                  V P                  J pV'       d
   VVn,        K-  K/  	  K  	  V# u uppi u upi u up
pi u upi u uppi u upi   \Z         d     Kf  i ; i)z<
Build and return a new class with a `__slots__` attribute.
r   __weakref___clear_type_descriptorsFrb  r   NT	__slots__r   r)   __closure__ro   r   )rl  ).r  r   rP   r!  r?  sysrm  r   r7  r6  	__bases__r   r   r   r   rO  r   r   r  r&  rN   r   funcr   r   r-  r.  return_annotation	Parameteremptyr   r*  _HASH_CACHE_FIELDr)   r7   r'   	itertoolschainvaluesclassmethodstaticmethod__func__r   fgetcell_contentsrK   )r   kvr   r   existing_slotsweakref_inheritedr   ri  namescached_propr   &additional_closure_functions_to_updateclass_annotationsrr  
annotationr   
slot_namesslotslot_descriptorreused_slotsr   itemclosure_cellscellmatchs   &                         r   rX  !_ClassBuilder._create_slots_classQ  s    ,,.
.M% 0 01M:M}MM AD. 	 
 3122''		2 &&&*/B&'+++ $		 3 3H((,,-DeLL,8=) !4 !		))!B/H  $$]D9E$(!!! !(+r B B '(11 B 0 ))*
  WTYYR%HHU*%%%E &(XXZ
%/!+7 #D"""%/ 	 
 24. 0 ;/557
 H6==dC$..t4FF
W%6%6%<%<<.8d+ 8  "vvm4+6==>NO =!#3TYY!B} (-GutJ0Fddu
G *8)=)=)?
)?%oz! "D/!)? 	 

 (2Nzt5Mddz
N
		,/0
+;!YY33> 499odii00$))2E2ErJ OOLL!#I
D $l ;<< !(}d KD(++ !(		=$ G 'mT B %1 ..$));E
 -0*  &!
2 
S
F"
> H

 OJ " sS   %S S S&
.S+S+<S1	S1$S65S6S<S<-TTTc                	   a  \        S P                  V4      w  r#V 3R  lpS P                  P                  W#V34       RS n        S # )c                >   < SP                  VR ,          4      V R &   R# )r    NrA  cls_dictr[   r   s   &&r   _attach_repr,_ClassBuilder.add_repr.<locals>._attach_repr  s    #'#;#;E*<M#NHZ r"   T)_make_repr_scriptr  r=  r   r>  )r   nsrY   r[   r  s   f&   r   add_repr_ClassBuilder.add_repr  sC    )$++r:	O 	$$f\%BCr"   c                	    V P                   '       g   R p\        V4      hR pV P                  V4      V P                  R&   V # )z3__str__ can only be generated if a __repr__ exists.c                "    V P                  4       # r2   r    r   s   &r   __str__&_ClassBuilder.add_str.<locals>.__str__  s    ==?"r"   r  )r>  rK   rA  r  )r   rU   r  s   &  r   add_str_ClassBuilder.add_str  sB    GCS/!	# %)$<$<W$Ey!r"   c                   aa \         ;QJ d    . R V P                   4       F  NK  	  5M! R V P                   4       4      oV3R lpV P                  oVV3R lpW3# )z6
Create custom __setstate__ and __getstate__ methods.
c              3  6   "   T F  qR 8w  g   K  Vx  K  	  R# 5i)rl  Nr   )r   ans   & r   r   8_ClassBuilder._make_getstate_setstate.<locals>.<genexpr>  s      !
)2=-@BB)s   
c                D   < S Uu/ uF  q\        W4      bK  	  up# u upi !
Automatically created by attrs.
r   )r   r   state_attr_namess   & r   slots_getstate=_ClassBuilder._make_getstate_setstate.<locals>.slots_getstate  s(     ;KK:J$'$--:JKKKs   c                  < \         P                  V 4      p\        V\        4      '       d   \	        SV4       F  w  r4V! W44       K  	  M S F  pW19   g   K  V! W1V,          4       K  	  S'       d   V! \
        R4       R# R# )r  N)r   r   rN   rP   ziprv  )r   state_ClassBuilder__bound_setattrr   r   hash_caching_enabledr  s   &&   r   slots_setstate=_ClassBuilder._make_getstate_setstate.<locals>.slots_setstate  ss     +2248O%'' $''7#?KD#D0 $@ -D}'Dk: - $ 148 $r"   )rP   r!  r*  )r   r  r  r  r  s   &  @@r   r<  %_ClassBuilder._make_getstate_setstate  s`    
 !5 !
))!
55 !
))!
 
	L  $//	9, --r"   c                	$    R V P                   R&   V # )N__hash__)r  r   s   &r   make_unhashable_ClassBuilder.make_unhashable  s    %)z"r"   c                	   a  \        S P                  S P                  S P                  S P                  R 7      w  rR V 3R llpS P
                  P                  WV34       S # )frozen
cache_hashc               $    V ^8  d   QhRRRRRR/# )rX   r  r  r]   r`   ra   r   )rb   s   "r   rc   ,_ClassBuilder.add_hash.<locals>.__annotate__*  s&     	N 	N$ 	Nd 	Nt 	Nr"   c                >   < SP                  VR ,          4      V R &   R# )r  Nr  )r  r]   r   s   &&r   attach_hash+_ClassBuilder.add_hash.<locals>.attach_hash*  s    #'#;#;D<L#MHZ r"   )_make_hash_scriptr   r  r$  r*  r=  r   )r   rY   r[   r  s   f   r   add_hash_ClassBuilder.add_hash"  sY    )IIKK<<''	
	N 	N 	$$f[%ABr"   c                	b  a a \        S P                  S P                  S P                  S P                  S P
                  S P                  S P                  S P                  S P                  S P                  S P                  R R7      w  roVV 3R lpS P                  P                  WV34       S # )F
attrs_initc                P   < VR ,          pSVn         SP                  V4      V R &   R# )rH  Nr   rA  r  r[   r?   r   r   s   && r   _attach_init,_ClassBuilder.add_init.<locals>._attach_initA  s*    $D#.D #'#;#;D#AHZ r"   _make_init_scriptr   r  r+  r,  r0  r$  r"  r*  r   r3  r5  r=  r   )r   rY   r[   r  r   s   f   @r   add_init_ClassBuilder.add_init1  s    %6IIKK##LLKKLL&
"{	B
 	$$f\%BCr"   c                	D    V P                  R  4      V P                  R&   V # )c                    \        V 3/ VB # r2   )r   )r   r  s   &,r   r   +_ClassBuilder.add_replace.<locals>.<lambda>L  s    F4$;7$;r"   __replace__)rA  r  r   s   &r   add_replace_ClassBuilder.add_replaceJ  s%    (,(@(@;)
}% r"   c                	    \         ;QJ d    . R  V P                   4       F  NK  	  5M! R  V P                   4       4      V P                  R&   R# )c              3     "   T F9  pVP                   '       g   K  VP                  '       d   K+  VP                  x  K;  	  R # 5ir2   )r?   rB   r   )r   fields   & r   r   /_ClassBuilder.add_match_args.<locals>.<genexpr>Q  s0      1
$zz "'-- EJJ$s   AAA__match_args__N)rP   r  r  r   s   &r   add_match_args_ClassBuilder.add_match_argsP  s>    +05 1
1
55 1
1
 ,
'(r"   c                	b  a a \        S P                  S P                  S P                  S P                  S P
                  S P                  S P                  S P                  S P                  S P                  S P                  R R7      w  roVV 3R lpS P                  P                  WV34       S # )Tr  c                P   < VR ,          pSVn         SP                  V4      V R &   R# )__attrs_init__Nr  r  s   && r   _attach_attrs_init8_ClassBuilder.add_attrs_init.<locals>._attach_attrs_initg  s,    )*D#.D )-)A)A$)GH%&r"   r  )r   rY   r[   r  r   s   f   @r   add_attrs_init_ClassBuilder.add_attrs_initW  s    %6IIKK##LLKKLL&
"{	H
 	$$f5G%HIr"   c                	   a  S P                   p\        S P                  4      w  r#V 3R  lpS P                  P	                  W#V34       \
        VR&   S # )c                >   < SP                  VR ,          4      V R &   R# )__eq__Nr  r  s   &&r   
_attach_eq(_ClassBuilder.add_eq.<locals>._attach_equ  s    !%!9!9%/!JHXr"   __ne__)r  _make_eq_scriptr  r=  r   r  )r   r   rY   r[   r  s   f    r   add_eq_ClassBuilder.add_eqp  sK    ^^'4	K 	$$fZ%@A8r"   c                	   a  S P                   pV 3R  l\        S P                  S P                  4       4       w  VR&   VR&   VR&   VR&   S # )c              3  F   <"   T F  pSP                  V4      x  K  	  R # 5ir2   r  )r   methr   s   & r   r   *_ClassBuilder.add_order.<locals>.<genexpr>  s'      B
; $$T**;s   !__lt____le____gt____ge__)r  _make_orderr   r  )r   r   s   f r   	add_order_ClassBuilder.add_order~  sL    ^^B
#DIIt{{;B
>8blBxL"X,
 r"   c                	  a / oV P                    FS  pVP                  ;'       g    V P                  pV'       g   K-  V\        P                  Jg   KC  W3SVP
                  &   KU  	  S'       g   V # V P                  '       d   R p\        V4      hV3R lpRV P                  R&   V P                  V4      V P                  R&   RV n
        V # )z7Can't combine custom __setattr__ with on_setattr hooks.c                p   <  SV,          w  r4V! WV4      p\        WV4       R #   \          d    Tp Li ; ir2   )KeyErrorr   )r   r   valr   rS  nvalsa_attrss   &&&   r   r   ._ClassBuilder.add_setattr.<locals>.__setattr__  sA    *"4. DS)T*  s   % 55Trb  r   )r  rG   r5  r   NO_OPr   r6  rK   r  rA  r7  )r   r   rG   rU   r   r  s   &    @r   add_setattr_ClassBuilder.add_setattr  s    A99)9)9Jzj=#$=  
 K###KCS/!	+ 37./(,(@(@(M}%"&r"   c                    V ^8  d   QhRRRR/# rX   methodr   r`   r   )rb   s   "r   rc   r    s       h r"   c                    V P                   P                  Vn        V P                   P                   RVP                   2Vn        RV P                   P                   R2Vn        V# )z0
Add __module__ and __qualname__ to a *method*.
r   $Method generated by attrs for class )r   r(   r)   r'   r+   r   r  s   &&r   rB  (_ClassBuilder._add_method_dunders_unsafe  s`     !II00!%!7!7 8&//9JK 34993I3I2J!L 	 r"   c                    V ^8  d   QhRRRR/# r  r   )rb   s   "r   rc   r    s      x H r"   c                D   \         P                  ! \        4      ;_uu_ 4        V P                  P                  Vn        RRR4       \         P                  ! \        4      ;_uu_ 4        V P                  P
                   RVP                   2Vn        RRR4       \         P                  ! \        4      ;_uu_ 4        RV P                  P
                   R2Vn        RRR4       V#   + '       g   i     L; i  + '       g   i     Lo; i  + '       g   i     T# ; i)z<
Add __module__ and __qualname__ to a *method* if possible.
Nr   r  )rd  re  rf  r   r(   r)   r'   r+   r	  s   &&r   r@  &_ClassBuilder._add_method_dunders_safe  s       00 $		 4 4F 1   00%)YY%;%;$<Afoo=N"OF 1   00CDIIDZDZC[[\]FN 1  10 10 10 s#   C()+C;> D(C8	;D	D	)rA  r!  r  r   r  r*  r   r  r1  r$  r6  r0  r+  r3  r5  r,  r>  r=  r"  r&  r7  N)r'   r(   r)   r*   r+   rn  rH  r    rT  r_  r\  rX  r  r  r<  r  r  r  r  r  r  r  r  r  rB  r@  r.   r   r"   r   r  r  }  s    I0cGJ<'$2"HM^	'.R2
2@ r"   r  c                    V e%   \        VRJVRJ34      '       d   Rp\        V4      hV e   W 3# Vf   TpVf   TpVRJ d   VRJ d   Rp\        V4      hW3# )
Validate the combination of *cmp*, *eq*, and *order*. Derive the effective
values of eq and order.  If *eq* is None, set it to *default_eq*.
N&Don't mix `cmp` with `eq' and `order`.FT-`order` can only be True if `eq` is True too.anyrK   )r=   rC   rE   
default_eqrU   s   &&&& r   _determine_attrs_eq_orderr    sx    
 3$T0ABCC6o x 
z}	U{u}=o9r"   c                    V e%   \        VRJVRJ34      '       d   Rp\        V4      hR pV e   V! V 4      w  rWW3# Vf   TRrqM
V! V4      w  rVf   YrM
V! V4      w  r(VRJ d   VRJ d   Rp\        V4      hWW(3# )r  Nr  c                :    \        V 4      '       d   RT rW3# RpW3# )z(
Decide whether a key function is used.
TN)rL   )r   r   s   & r   decide_callable_or_boolean>_determine_attrib_eq_order.<locals>.decide_callable_or_boolean  s-     E??u3 z Czr"   FTr  r  )	r=   rC   rE   r  rU   r  cmp_keyrD   rF   s	   &&&&     r   rI   rI     s    
 3$T0ABCC6o 1#6S)) 
zF/3
}y5e<	U{u}=ou''r"   c                t    VRJ g   VRJ d   V# Vf	   VRJ d   V# V F  p\        W4      '       g   K   R# 	  V# )aX  
Check whether we should implement a set of methods for *cls*.

*flag* is the argument passed into @attr.s like 'init', *auto_detect* the
same as passed into @attr.s and *dunders* is a tuple of attribute names
whose presence signal that the user has implemented it themselves.

Return *default* if no reason for either for or against is found.
TF)r   )r   flagauto_detectdundersr:   dunders   &&&&& r   _determine_whether_to_implementr     sH     t|tu}|u, c**  Nr"   Fc                T  aaaaaaaa	a
aaaaaaaaaaaaa Se!   ^ RI pVP                  \        R4      ^R7       \        WOVR4      w  ooVe   Vo\	        S\
        \        34      '       d   \        P                  ! S!  oVVVVVVVVVVVVVVVVVVVV
VV	3R lpV f   V# V! V 4      # )a  
A class decorator that adds :term:`dunder methods` according to the
specified attributes using `attr.ib` or the *these* argument.

Consider using `attrs.define` / `attrs.frozen` in new code (``attr.s`` will
*never* go away, though).

Args:
    repr_ns (str):
        When using nested classes, there was no way in Python 2 to
        automatically detect that.  This argument allows to set a custom
        name for a more meaningful ``repr`` output.  This argument is
        pointless in Python 3 and is therefore deprecated.

.. caution::
    Refer to `attrs.define` for the rest of the parameters, but note that they
    can have different defaults.

    Notably, leaving *on_setattr* as `None` will **not** add any hooks.

.. versionadded:: 16.0.0 *slots*
.. versionadded:: 16.1.0 *frozen*
.. versionadded:: 16.3.0 *str*
.. versionadded:: 16.3.0 Support for ``__attrs_post_init__``.
.. versionchanged:: 17.1.0
   *hash* supports `None` as value which is also the default now.
.. versionadded:: 17.3.0 *auto_attribs*
.. versionchanged:: 18.1.0
   If *these* is passed, no attributes are deleted from the class body.
.. versionchanged:: 18.1.0 If *these* is ordered, the order is retained.
.. versionadded:: 18.2.0 *weakref_slot*
.. deprecated:: 18.2.0
   ``__lt__``, ``__le__``, ``__gt__``, and ``__ge__`` now raise a
   `DeprecationWarning` if the classes compared are subclasses of
   each other. ``__eq`` and ``__ne__`` never tried to compared subclasses
   to each other.
.. versionchanged:: 19.2.0
   ``__lt__``, ``__le__``, ``__gt__``, and ``__ge__`` now do not consider
   subclasses comparable anymore.
.. versionadded:: 18.2.0 *kw_only*
.. versionadded:: 18.2.0 *cache_hash*
.. versionadded:: 19.1.0 *auto_exc*
.. deprecated:: 19.2.0 *cmp* Removal on or after 2021-06-01.
.. versionadded:: 19.2.0 *eq* and *order*
.. versionadded:: 20.1.0 *auto_detect*
.. versionadded:: 20.1.0 *collect_by_mro*
.. versionadded:: 20.1.0 *getstate_setstate*
.. versionadded:: 20.1.0 *on_setattr*
.. versionadded:: 20.3.0 *field_transformer*
.. versionchanged:: 21.1.0
   ``init=False`` injects ``__attrs_init__``
.. versionchanged:: 21.1.0 Support for ``__attrs_pre_init__``
.. versionchanged:: 21.1.0 *cmp* undeprecated
.. versionadded:: 21.3.0 *match_args*
.. versionadded:: 22.2.0
   *unsafe_hash* as an alias for *hash* (for :pep:`681` compliance).
.. deprecated:: 24.1.0 *repr_ns*
.. versionchanged:: 24.1.0
   Instances are not compared as tuples of attributes anymore, but using a
   big ``and`` condition. This is faster and has more correct behavior for
   uncomparable values like `math.nan`.
.. versionadded:: 24.1.0
   If a class has an *inherited* classmethod called
   ``__attrs_init_subclass__``, it is executed after the class is created.
.. deprecated:: 24.1.0 *hash* is deprecated in favor of *unsafe_hash*.
.. versionchanged:: 25.4.0
   *kw_only* now only applies to attributes defined in the current class,
   and respects attribute-level ``kw_only=False`` settings.
.. versionadded:: 25.4.0 *force_kw_only*
NzQThe `repr_ns` argument is deprecated and will be removed in or after August 2025.)
stacklevelc                
  < S;'       g    \        V 4      pSR J ;'       d    \        V \        4      pS;'       d    \        V R4      pV'       d   V'       d   Rp\	        V4      hV'       * ;'       d    \        V SSR4      p\        P                  pV'       d   VP                  pMSR J d"   S'       d   VP                  MVP                  pMSRJ d   VP                  pMSfs   SR J d    \        V R4      '       d   VP                  pMZVR J d(   VR J d"   S'       d   VP                  MVP                  pM-VRJ d   VP                  pMVP                  pMRp\        V4      h\        P                  pS'       d"   S'       d   VP                  MVP                  p	MVP                   p	\        R/ RVbRVbRSbR	SbR
\        V SSR4      bR\        V SSR4      bRVbRV'       * ;'       d    \        V SSR 4      bRVbRSbRV	bRS!bRSbR\        V SSR!SR7      bRSbRSb p
V
P"                  '       g   S'       d   Rp\        V4      h\%        V S SV
VR7      pV
P&                  '       d   VP)                  S4       V
P*                  '       d   VP-                  4        V
P.                  '       d   VP1                  4        V
P2                  '       d   VP5                  4        S'       g   VP7                  4        V
P"                  '       d   VP9                  4        M*V
P:                  VP                  J d   VP=                  4        V
P>                  '       d   VPA                  4        M%VPC                  4        S'       d   Rp\        V4      h\D        '       d#   \        V R4      '       g   VPG                  4        \H        '       d+   S'       d#   \        V R4      '       g   VPK                  4        VPM                  4       # )"Tr   z/Can't freeze a class with a custom __setattr__.Fr  r9   r2  r#  r  r  
added_init
added_repradded_eqadded_orderingr'  added_match_argsrB   r%  	added_strr;  )r:   r4  r   zlInvalid value for cache_hash.  To use hash caching, hashing must be either explicitly or implicitly enabled.)r   r  r  zFInvalid value for cache_hash.  To use hash caching, init must be True.r  r  )r  r  r   rH  r  )r  r  r  r  )r  r  )'_has_frozen_base_class
issubclassr   r   rK   r   r   r(  LEAVE_ALONEr)  HASHABLE
UNHASHABLErJ   r   r   YESr   is_hashabler  r%  r  r)  r  r&  r  r'  r  r  r  r'  r  r$  r  r  r   r  r   r  r_  )"r   r#  is_exchas_own_setattrrU   rC   r(  r'  r   kwor  builderr   r  auto_excr  r   eq_r   force_kw_onlyr  getstate_setstater>   r?   rB   
match_argsrG   order_r<   repr_nsslotsrZ   r   weakref_slots"   &           r   wrapattrs.<locals>.wrap  s   994S9	T!DDjm&D% 
 
*<+
 yCCS/!Z 
 
;k#7
 !,,%11KT\  ++ )) 
 U]%11K\d"'9#z'J'J)55t	T 1 "  //$-- 
 u)55)44JCC.  ,,'4+##+//C..C !
!
!
 !
 %3	!

 7T;!
 7T;!
 !
  &:  /8	!
& $'!
( ()!
* +!
, *-!
. /!
0 ;!01!
> '?!
@ 0A!
F    Z ACC. %.
 W%???OO>>>NN!+"8"88##%""$^n$< 23 F F! L&s,<==""$""$$r"   )	warningswarnDeprecationWarningr  rN   rO   rP   r   rQ   )	maybe_clsr   r<  r<   r=   r>   r?   r=  r  r>  rZ   r   rB   r  r6  rC   rE   r  r   r9  rG   r   r:  unsafe_hashr8  rA  r?  r7  r;  s   &fff&ffffffffff&&ffffff&f  @@r   r   r   '  s    B c 	 	 	
 ,CUDAKC *tUm,,\\:.
G% G% G% G%V 	?r"   c                &    V P                   \        J # )zJ
Check whether *cls* has a frozen ancestor by looking at its
__setattr__.
)r   r   )r   s   &r   r+  r+  3  s    
 ??...r"   c               $    V ^8  d   QhRRRRRR/# )rX   r   r7   	func_namerZ   r`   r   )rb   s   "r   rc   rc   ;  s!      4 C C r"   c           
     X    RV RV P                    R\        V RV P                  4       R2# )z>
Create a "filename" suitable for a function being generated.
z<attrs generated  r   r)   rn   )r(   r   r'   )r   rH  s   &&r   r   r   ;  s7    
 I;a'7q35
6a	9r"   c          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
rX   r   r7   r   r   r  r  r  r`   tuple[str, dict]r   )rb   s   "r   rc   rc   E  s;     E E	E%E/3EAEEEr"   c                  aaa	a
aa \         ;QJ d    . R  S 4       F  NK  	  5M! R  S 4       4      oRp\        \        V R4      4      o/ o	RpRo
RoV'       g   VR,          pM$VR,          pVR,          pR	S
,           o
SR
,          oV.oVVV	V
VV3R lpV'       d   SP                  VR\         R2,           4       V'       d9   V! R\         R2V^,          4       SP                  V^,          R
,           4       MV! R\         R2V^,          4       SP                  VR\         2,           4       M	V! RV4       RP                  S4      pVS	3# )c              3     "   T F8  qP                   R J g#   VP                   e   K"  VP                  R J g   K4  Vx  K:  	  R# 5i)TN)r>   rC   r   s   & r   r   $_make_hash_script.<locals>.<genexpr>H  s/      aFFdNqvv!$$$,5s   AA
A        r>   zdef __hash__(selfzhash((z))z):z, *zC, _cache_wrapper=__import__('attr._make')._make._CacheHashWrapper):z_cache_wrapper()c           	       < SP                  W,           S,           VRS	 R2,           .4       S F  pVP                  '       dK   RVP                   R2pVP                  SV&   SP                  VRV RVP                   R2,           4       K_  SP                  VRVP                   R2,           4       K  	  SP                  VR,           S,           4       R	# )
z
Generate the code for actually computing the hash code.
Below this will either be returned directly or used to compute
a value which is then cached, depending on the value of cache_hash
rP  ,rQ  _key(self.z),        self.    N)r   rD   r   r   )
prefixindentr   cmp_namer   closing_bracesr[   	hash_funcmethod_lines	type_hashs
   &&  r   append_hash_computation_lines8_make_hash_script.<locals>.append_hash_computation_lines`  s     	)+8I;a00	
 Axxxqvvhd+"#((h##xzxrBB ##F}QVVHA-F$FG  	FVOn<=r"   zif self.z	 is None:zobject.__setattr__(self, '', self. = zreturn self.zreturn r   )rP   r>   r   r   rv  r   )r   r   r  r  tabhash_defr_  rY   r[  r[   r\  r]  r^  s   &f&&    @@@@@r   r  r  E  sY    E EE  E C.sF;<IE"HINDEYY%	1	#:L> >4 CH->,?y"IIJ),->,?sCS1W a#.))*#.a 	CL1B0C"DDE%i5YY|$F5=r"   c                    V ^8  d   QhRRRR/# )rX   r   r7   r   r   r   )rb   s   "r   rc   rc     s      4  r"   c                p    \        WRRR7      w  r#\        W#\        V R4      R7       VR,          V n        V # )z
Add a hash method to *cls*.
Fr  r  r_   )r  ri   r   r  r   r   rY   r[   s   &&  r   	_add_hashrj    sA     &5UMF  9#z J $CLJr"   c                R    V P                  V4      pV\        J d   \        # V'       * # )zR
Check equality and either forward a NotImplemented or
return the result negated.
)r  NotImplemented)r   otherresults   && r   r  r    s(    
 [[F:r"   c                    V ^8  d   QhRRRR/# )rX   r   rO   r`   rL  r   )rb   s   "r   rc   rc     s     " "4 "$4 "r"   c                h   V  Uu. uF  qP                   '       g   K  VNK  	  p p. ROp/ pV '       d   VP                  R4       V  F  pVP                  '       dR   RVP                   R2pVP                  W4&   VP                  RV RVP                   RV RVP                   R2	4       M+VP                  R	VP                   R
VP                   24       WR,          Jg   K  VR,           R2VR&   K  	  VP                  R4       MVP                  R4       RP	                  V4      pWS3# u upi )z.
Create __eq__ method for *cls* with *attrs*.
z    return  (rQ  rT  rP  rU  z) == z(other.rQ  rV  z
 == other.z andz    )z    return Truer   )zdef __eq__(self, other):z-    if other.__class__ is not self.__class__:z        return NotImplementedro   )rC   r   rD   r   r   )r   r   r   r[   rZ  rY   s   &     r   r  r    s    &1QQE&E E_%Axxxqvvhd+ #$((xjqvvheH:WQVVHTUV }QVVHJqvvhGHb	!$Ryk.b	  	W&'YYuF== 's
   D/D/c                   aa S Uu. uF  q"P                   '       g   K  VNK  	  upoV3R loV3R lpV3R lpV3R lpV3R lpW4WV3# u upi )z1
Create ordering methods for *cls* with *attrs*.
c                   <a  \         ;QJ d    . R V 3R lS 4        4       F  NK  	  5# ! R V 3R lS 4        4       4      # )z
Save us some typing.
c              3  J   "   T F  w  rV'       d	   V! V4      MTx  K  	  R # 5ir2   r   )r   r   r   s   &  r   r   6_make_order.<locals>.attrs_to_tuple.<locals>.<genexpr>  s(      

 CJ5(s   !#c              3  h   <"   T F'  p\        SVP                  4      VP                  3x  K)  	  R # 5ir2   )r   r   rF   )r   r   objs   & r   r   rt    s(      =Baff%q{{3Us   /2)rP   )rv  r   s   fr   attrs_to_tuple#_make_order.<locals>.attrs_to_tuple  sK     u 
=B
u 	
u 
=B
 
 	
r"   c                f   < VP                   V P                   J d   S! V 4      S! V4      8  # \        # r  r   rl  r   rm  rw  s   &&r   r  _make_order.<locals>.__lt__  0     ??dnn,!$'.*???r"   c                f   < VP                   V P                   J d   S! V 4      S! V4      8*  # \        # r  rz  r{  s   &&r   r  _make_order.<locals>.__le__  0     ??dnn,!$'>%+@@@r"   c                f   < VP                   V P                   J d   S! V 4      S! V4      8  # \        # r  rz  r{  s   &&r   r  _make_order.<locals>.__gt__  r}  r"   c                f   < VP                   V P                   J d   S! V 4      S! V4      8  # \        # r  rz  r{  s   &&r   r  _make_order.<locals>.__ge__  r  r"   )rE   )r   r   r   r  r  r  r  rw  s   &f     @r   r  r    sK     )1QQ)E	
 6))c *s
   A
A
c                    Vf   V P                   p\        V4      w  r#\        W#\        V R4      R7       VR,          V n        \
        V n        V # )z-
Add equality methods to *cls* with *attrs*.
r  rh  )r   r  ri   r   r  r  ri  s   &&  r   _add_eqr    sN     }###E*MF 9#x H xCJCJJr"   c                   V ^8  d   QhRR/# )rX   r`   rL  r   )rb   s   "r   rc   rc     s     6# 6#$4 6#r"   c                T   \         ;QJ d    . R V  4       F  NK  	  5M! R V  4       4      pV UUUu/ uF  w  r4qT\        8w  g   K  VR,           VbK  	  pppp\        VR&   \        VR&   \        VR&   . pV F[  w  r4pV'       d
   RV,           MRV,           R,           p	V\        8X  d   V: R	V	: R
2MV: R	V: RV	: R2p
VP                  V
4       K]  	  RP                  V4      pVf   RpM	VR,           pRRRRRRRRRRRRRV RV R2RR.pR P                  V4      V3# u upppi )!z;
Create the source and globs for a __repr__ and return it.
c              3     "   T FP  pVP                   R Jg   K  VP                  VP                   RJ d   \         MVP                   VP                  3x  KR  	  R# 5i)FTN)r<   r   r?   r   s   & r   r   $_make_repr_script.<locals>.<genexpr>  sD      "A66 	?!&&D.$affqvv>s   AAA_reprr
   rf  r   rb  zgetattr(self, "z", NOTHING)z={z!r}z_repr(z)}r   z1{self.__class__.__qualname__.rsplit(">.", 1)[-1]}z.{self.__class__.__name__}zdef __repr__(self):z  try:z:    already_repring = _compat.repr_context.already_repringz  except AttributeError:z!    already_repring = {id(self),}z:    _compat.repr_context.already_repring = already_repringz  else:z#    if id(self) in already_repring:z      return '...'z	    else:z#      already_repring.add(id(self))z    return f'(z)'z
  finally:z$    already_repring.remove(id(self))r   )rP   r<   r
   rf  r   r   r   )r   r  attr_names_with_reprsr   rrQ  r[   attribute_fragmentsr   accessorfragmentrepr_fragmentcls_name_fragmentr   s   &&            r   r  r    sp    "E ""EE ""  -B,Ajdq$Yw,A 
  E),E
E)+
GdN%6%=%M 	
 Dy  *'+T8< 	
 	""8, , II12M	zO!== 	D"+D--
)*!M?"=.E$ 99UU""Us   D#D#c                    Vf   V P                   p\        W!4      w  r4\        W4\        V R4      R7       VR,          V n        V # )z
Add a repr method to *cls*.
r    rh  )r   r  ri   r   r    )r   r  r   rY   r[   s   &&&  r   	_add_reprr  N  sH     }##%e0MF 9#z J $CLJr"   c                    \        V 4      pVf$   \        V \        4      '       g   Rp\        V4      h\	        V RR4      pVf/   Ve   \	        VRR4      pVe	   W0n        V# V : R2p\        V4      hV# )a  
Return the tuple of *attrs* attributes for a class.

The tuple also allows accessing the fields by their names (see below for
examples).

Args:
    cls (type): Class to introspect.

Raises:
    TypeError: If *cls* is not a class.

    attrs.exceptions.NotAnAttrsClassError:
        If *cls* is not an *attrs* class.

Returns:
    tuple (with name accessors) of `attrs.Attribute`

.. versionchanged:: 16.2.0 Returned tuple allows accessing the fields
   by name.
.. versionchanged:: 23.1.0 Add support for generic classes.
NPassed object must be a class.r   ! is not an attrs-decorated class.)r   rN   r7   rJ   r   r   r   )r   generic_baserU   r   s   &   r   r  r  ]  s    . $C(LJsD$9$9.nC*D1E}#L*;TBE  ',#89"3''Lr"   c                    \        V \        4      '       g   Rp\        V4      h\        V RR4      pVf   V : R2p\	        V4      hV Uu/ uF  q3P
                  VbK  	  up# u upi )a  
Return an ordered dictionary of *attrs* attributes for a class, whose keys
are the attribute names.

Args:
    cls (type): Class to introspect.

Raises:
    TypeError: If *cls* is not a class.

    attrs.exceptions.NotAnAttrsClassError:
        If *cls* is not an *attrs* class.

Returns:
    dict[str, attrs.Attribute]: Dict of attribute name to definition

.. versionadded:: 18.1.0
r  r   Nr  )rN   r7   rJ   r   r   r   )r   rU   r   r   s   &   r   fields_dictr    sj    & c4  .nC*D1E}89"3''$%u!FFAIu%%%s   
A"c           	         \         P                  RJ d   R# \        V P                  4       F1  pVP                  pVf   K  V! W\        WP                  4      4       K3  	  R# )z
Validate all attributes on *inst* that have a validator.

Leaves all exceptions through.

Args:
    inst: Instance of a class with *attrs* attributes.
FN)r   _run_validatorsr  r   r;   r   r   )r  r   r  s   &  r   r9  r9    sI     %'DNN#KK=dwtVV,- $r"   c                V    VP                  V 4      pT;'       d    RVP                  9   # )z6
Check if the attribute name comes from a slot class.
rn  )r   r   )a_namer   r   s   && r   _is_slot_attrr    s+     

F
#C..;#,,..r"   c                   V ^8  d   QhRR/# )rX   r`   tuple[str, dict, dict]r   )rb   s   "r   rc   rc     s     B& B& B&r"   c                H   V
R J;'       d    V
\         P                  JpV'       d   V'       d   Rp\        V4      hT;'       g    Tp. p/ pV F  pVP                  '       g   VP                  \
        J d   K+  VP                  V4       VVVP                  &   VP                  e   VRJ d   Rp\        V4      hRpKp  V'       g   Kz  VP                  \         P                  Jg   K  RpK  	  \        TTTTTTTTT	TTV'       d   RMR4      w  pppV P                  \        P                  9   d;   VP                  \        P                  V P                  ,          P                  4       VP                  R\
        RV/4       V'       d   \        P                   VR&   VVV3# )Nz$Frozen classes can't use on_setattr.Tr  rH  r   	attr_dictr   )r   r  rK   r?   r:   r   r   r   rG   _attrs_to_init_scriptr(   rp  modulesrO  r   r   r   )r   r   pre_initpre_init_has_args	post_initr  r=  r  r   r2  cls_on_setattrr  has_cls_on_setattrrU   needs_cached_setattrfiltered_attrsr  r   rY   r[   r   s   &&&&&&&&&&&&         r   r  r    st    	d"JJ~W]]'J  $4o%//NIvvv!))w.a 	!&&<<#~< o%#' ALL$E#'    "7&J"FE; ~~$S[[099:	LL)Wk9=> (4';';#$5+%%r"   c               (    V ^8  d   QhRRRRRRRR/# rX   r   rZ   	value_varhas_on_setattrr  r`   r   )rb   s   "r   rc   rc     s(     3 3 3 3T 3c 3r"   c                    RV  RV R2# )zB
Use the cached object.setattr to set *attr_name* to *value_var*.

_setattr('ra  rQ  r   )r   r  r  s   &&&r   _setattrr    s     	{#i[22r"   c          
     ,    V ^8  d   QhRRRRRRRRRR/# 	rX   r   rZ   r  r  r  r@   	Converterr`   r   )rb   s   "r   rc   rc     s;     ] ]]"]48]EN]]r"   c                2    RV  RVP                  W4       R2# )z_
Use the cached object.setattr to set *attr_name* to *value_var*, but run
its converter first.
r  ra  rQ  )_fmt_converter_callr   r  r  r@   s   &&&&r   _setattr_with_converterr    s&     	{#i&C&CI&Y%ZZ[\\r"   c               (    V ^8  d   QhRRRRRRRR/# )rX   r   rZ   r   r  r  r`   r   )rb   s   "r   rc   rc     s(     ) )s )3 ) ) )r"   c                :    V'       d   \        WR4      # RV  RV 2# )zc
Unless *attr_name* has an on_setattr hook, use normal assignment. Otherwise
relegate to _setattr.
Trb  rc  )r  )r   r   r  s   &&&r   _assignr    s'    
 	$//9+S((r"   c          
     ,    V ^8  d   QhRRRRRRRRRR/# r  r   )rb   s   "r   rc   rc   #  s;     
W 
W
W"
W48
WEN
W
Wr"   c                Z    V'       d   \        WRV4      # RV  RVP                  W4       2# )z
Unless *attr_name* has an on_setattr hook, use normal assignment after
conversion. Otherwise relegate to _setattr_with_converter.
Trb  rc  )r  r  r  s   &&&&r   _assign_with_converterr  #  s5     &yT9MM9+S!>!>y!T UVVr"   c               $    V ^8  d   QhRRRRRR/# )rX   r  r  r=  r   r   r   )rb   s   "r   rc   rc   0  s$     ,/ ,/,/,/.=,/r"   c                ~   a V RJ d+   VRJ d   R\         \        3# R V3R llpR V3R llpRVV3# R\        \        3# )z[
Determine the correct setter functions based on whether a class is frozen
and/or slotted.
Tc               (    V ^8  d   QhRRRRRRRR/# r  r   )rb   s   "r   rc   (_determine_setters.<locals>.__annotate__@  s,     	> 	>	>'*	><@	>	>r"   c                P   < \        V S4      '       d   \        WV4      # R V  RV 2# _inst_dict['z'] = )r  r  )r   r  r  r   s   &&&r   
fmt_setter&_determine_setters.<locals>.fmt_setter@  s2     Y66	nEE!)E)==r"   c          
     ,    V ^8  d   QhRRRRRRRRRR/# r  r   )rb   s   "r   rc   r  H  sA     	h 	h	h	h !	h !		h
 	hr"   c                ~   < V'       g   \        V S4      '       d   \        WW#4      # R V  RVP                  W4       2# r  )r  r  r  )r   r  r  r@   r   s   &&&&r   fmt_setter_with_converter5_determine_setters.<locals>.fmt_setter_with_converterH  sH     y-!H!H..  ")E)2O2OPY2e1fggr"   r   )z_inst_dict = self.__dict__)r  r  r  r  )r  r=  r   r  r  s   &&f  r   _determine_settersr  0  s\     ~D=x!888	> 	>	h 	h ,%
 	
 w...r"   c               L    V ^8  d   QhRRRRRRRRRRRRR	RR
RRRRRRRRRRR/# )rX   r   r   r#  r  r  call_pre_initr  call_post_initdoes_cache_hashr   r   r2  r  r  method_namerZ   r`   r  r   )rb   s   "r   rc   rc   _  s     E EEE E 	E
 E E E #E E E E E Er"   c           
        V'       d   R.M. pV	'       d   VP                  R4       \        WV4      w  rpVP                  V4       . p. p. p. p/ pRR/pV  EF  pVP                  '       d   VP                  V4       VP                  pVP
                  RJ;'       g'    VP
                  \        P                  J;'       d    T
pVP                  p\        VP                  \        4      pV'       d   VP                  P                  '       d   RMRpVP                  e7   \        VP                  \        4      '       g   \        VP                  4      pMVP                  pVP                  RJ Ed   V'       d   \         VP                  3,          pVeO   VP                  V! VVRV R	2,           VV4      4       VP                  VVP#                  VP                  4      &   M$VP                  V! VVRV R	2,           V4      4       VP                  P$                  VV&   EMtVeI   VP                  V! VR
V R2VV4      4       VP                  VVP#                  VP                  4      &   EM(VP                  V! VR
V R2V4      4       EM	VP                  \&        Jd   V'       g   V RV R2pVP(                  '       d   VP                  V4       M"VP                  V4       VP                  V4       VeE   VP                  V! VVVV4      4       VP                  VVP#                  VP                  4      &   EMWVP                  V! VVV4      4       EM<V'       Ed   V R2pVP(                  '       d   VP                  V4       M"VP                  V4       VP                  V4       VP                  RV R24       \         VP                  3,          pVe   VP                  RV! VVVV4      ,           4       VP                  R4       VP                  RV! VVR,           V,           R	,           VV4      ,           4       VP                  VVP#                  VP                  4      &   MfVP                  RV! VVV4      ,           4       VP                  R4       VP                  RV! VVR,           V,           R	,           V4      ,           4       VP                  P$                  VV&   MVP(                  '       d   VP                  V4       M"VP                  V4       VP                  V4       VeD   VP                  V! VVVV4      4       VP                  VVP#                  VP                  4      &   MVP                  V! VVV4      4       VP                  RJ g   EKV  VP*                  e   Vf   VP*                  VV&   EKz  Vf   EK  VP,                  '       g   EK  VP,                  VV&   EK  	  V'       d   \.        VR&   VP                  R4       V Fb  pRVP                  ,           pRVP                  ,           pVP                  RV RV RVP                   R	24       VP                  VV&   VVV&   Kd  	  V'       d   VP                  R4       V'       dB   V'       d   V'       d   R\0         R2p MR\0         R2p M
R\0         R2p VP                  V 4       V'       d.   R P3                  R! V  4       4      p!VP                  R"V! R	24       R#P3                  V4      pR#P3                  V4      pV'       dq   TV'       d   R#MR R$R#P3                  V4       2,          pR#P3                  R% V 4        U"u. uF
  p"V" R&V" 2NK  	  up"4      p#TV'       d   R#MR,          pVV#,          pV'       d   V'       d
   R'V R	2V^ &   R(p$R)T RT R*V'       d   V$P3                  V4      MR+ R,2VV3# u up"i )-z
Return a script of an initializer for *attrs*, a dict of globals, and
annotations for the initializer.

The globals are required by the generated script.
zself.__attrs_pre_init__()z$_setattr = _cached_setattr_get(self)r`   Nr    Fr  rQ  zattr_dict['z
'].defaultz=attr_dict['z=NOTHINGzif z is not NOTHING:rW  zelse:Tr   z#if _config._run_validators is True:__attr_validator___attr_z(self, z, self.zself.__attrs_post_init__()r  z', None)r  z	'] = Nonerb  z = NonerS  c              3  f   "   T F'  qP                   '       g   K  R VP                   2x  K)  	  R# 5i)rb  N)r?   r   r   s   & r   r   (_attrs_to_init_script.<locals>.<genexpr>E	  s"     B%Q66(%x(%s   11zBaseException.__init__(self, r   z*, c              3  P   "   T F  qP                  R 4      ^ ,          x  K  	  R# 5i)=N)split)r   kwas   & r   r   r  R	  s     #N#IIcN1$5$5s   $&r  zself.__attrs_pre_init__(z
    zdef z):
    passr   )r   r  r   r;   r   rG   r   r  rH   rN   r:   rM   
takes_selfr@   r  r?   _INIT_FACTORY_PAT_get_global_namerT   r   rB   r7   _first_param_typer   rv  r   )%r   r#  r  r  r  r  r  r   r2  r  r  r  r   extra_linesr  r  r  pre_init_argskw_only_argsattrs_to_validatenames_for_globalsr   r   r   r  arg_namehas_factory
maybe_selfr@   init_factory_nameargval_nameinit_hash_cachevalskw_arg_namepre_init_kw_only_argsNLs%   &&&&&&&&&&&&                         r   r  r  _  sw   ( .;()E 3		
 :L}:6K6 
LLDML T"K;;;$$Q'FF	T1 
 
LL-DD2D 	
 77 G4*qyy/C/C/CV
;;":akk9+M+M!!++.II66U?$5	$A!(LL1%-!J<q0AA*%	 "++ &i&@&@&HI LL"%-!J<q0AA* 89yy7H7H!"34&-!%i[
;&!	 '' ")"<"<QVV"DE !%i[
;& YYg%kJl9+Z@Cyyy##C(C $$X.$-!8^Y '' ")"<"<QVV"DE Z	8^LM[Jh'Cyyy##C(C $$X.LL3xj(89: 1QVVI =$/!8^Y W%/!)C/*<sB&!	 '' ")"<"<QVV"DE Z	8^LL W% !)C/*<sB& 45993D3D/0yyy##H-H%$$X.$-!8^Y '' ")"<"<QVV"DE Z	8^LM66T>vv!i&7()H%&9+F+F+F(1(C(CH%q t '.)$:;"A*QVV3H!AFF*ILL4z7166(!LM*+++h'+,i( # 12 $./@.A"J$01B0C9"M %&7%8@O_% xxB%BB4TF!<=99T?DIIm,M44R(DIIl,C+DEE $		 $O#N $OK -q.#N!
 	B6..*-m_A>a 
BWTF +RWWU^&) *	 	 s   	_?c                    V ^8  d   QhRRRR/# )rX   r   rZ   r`   r   )rb   s   "r   rc   rc   g	  s      # # r"   c                $    V P                  R4      # )z
The default __init__ parameter name for a field.

This performs private-name adjustment via leading-unscore stripping,
and is the default value of Attribute.alias if not provided.
rQ  )lstripr  s   &r   r   r   g	  s     ;;sr"   c                  `    ] tR tRtRtRtRR ltR t]RR R ll4       t	R t
R	 tR
 tR tRtR# )r   ir	  a6  
*Read-only* representation of an attribute.

.. warning::

   You should never instantiate this class yourself.

The class has *all* arguments of `attr.ib` (except for ``factory`` which is
only syntactic sugar for ``default=Factory(...)`` plus the following:

- ``name`` (`str`): The name of the attribute.
- ``alias`` (`str`): The __init__ parameter name of the attribute, after
  any explicit overrides and default private-attribute-name handling.
- ``inherited`` (`bool`): Whether or not that attribute has been inherited
  from a base class.
- ``eq_key`` and ``order_key`` (`typing.Callable` or `None`): The
  callables that are used for comparing and ordering objects by this
  attribute, respectively. These are set by passing a callable to
  `attr.ib`'s ``eq``, ``order``, or ``cmp`` arguments. See also
  :ref:`comparison customization <custom-comparison>`.

Instances of this class are frequently used for introspection purposes
like:

- `fields` returns a tuple of them.
- Validators get them passed as the first argument.
- The :ref:`field transformer <transform-fields>` hook receives a list of
  them.
- The ``alias`` property exposes the __init__ parameter name of the field,
  with any overrides and default private-attribute handling applied.


.. versionadded:: 20.1.0 *inherited*
.. versionadded:: 20.1.0 *on_setattr*
.. versionchanged:: 20.2.0 *inherited* is not taken into account for
    equality checks and hashing anymore.
.. versionadded:: 21.1.0 *eq_key* and *order_key*
.. versionadded:: 22.2.0 *alias*

For the full version history of the fields, see `attr.ib`.
Nc                	   \        Y^;'       g    TT;'       g    TR 4      w  rpp\        P                  V 4      pV! RV4       V! RV4       V! RV4       V! RV4       V! RV4       V! RV4       V! RV4       V! RV4       V! R	V4       V! R
V4       V! RV4       T! RV	'       d    \        P                  ! \        V	4      4      M\        4       V! RV
4       V! RV4       V! RV4       V! RV4       V! RV4       R# )Tr   r:   r;   r<   rC   rD   rE   rF   r>   r?   r@   rA   r7   rB   r   rG   rH   N)rI   r   r   typesMappingProxyTyper  _EMPTY_METADATA_SINGLETON)r   r   r:   r;   r<   r=   r>   r?   r   rA   r7   r@   rB   rC   rD   rE   rF   rG   rH   bound_setattrs   &&&&&&&&&&&&&&&&&&& r   rH  Attribute.__init__	  s   * (B2y11E4(
$E9
 %,,T2 	fd#i)k9-fd#dBh'gu%k9-fd#fd#k9-  &&tH~6.	
 	fd#i)k9-lJ/gu%r"   c                	    \         hr2   )r   r   s   &&&r   r   Attribute.__setattr__	  s    !!r"   c               $    V ^8  d   QhRRRRRR/# )rX   r   rZ   r   rS   rB   r  r   )rb   s   "r   rc   Attribute.__annotate__	  s$     
 

)
48
r"   c                	   Vf   VP                   pMVP                   e   RV R2p\        V4      hT ! TVP                  VP                  VP                  R VP
                  VP                  RVP                  TVP                  VP                  f   TMVP                  VP                  VP                  VP                  VP                  VP                  VP                  4      # )Nz>Type annotation and type argument cannot both be present for 'z'.F)r7   rK   _default
_validatorr<   r>   r?   rA   r@   rB   rC   rD   rE   rF   rG   rH   )r   r   r   rB   r7   rU   s   &&&&& r   r   Attribute.from_counting_attr	  s     <77DWW RSWRXXZ[CS/!KKMMGGGGGGKKLLzz)GrzzEEIIHHLLMMHH%
 	
r"   c                p    \         P                   ! V 4      pVP                  VP                  4       4       V# )z
Copy *self* and apply *changes*.

This works similarly to `attrs.evolve` but that function does not work
with :class:`attrs.Attribute`.

It is mainly meant to be used for `transform-fields`.

.. versionadded:: 20.3.0
)copy	_setattrsr   )r   r  news   &, r   r   Attribute.evolve
  s(     iiogmmo&
r"   c                   a  \         ;QJ d!    . V 3R lS P                   4       F  NK  	  5# ! V 3R lS P                   4       4      # )
Play nice with pickle.
c              3  t   <"   T F-  pVR 8w  d   \        SV4      M\        SP                  4      x  K/  	  R# 5irA   N)r   r  rA   r   r   r   s   & r   r   )Attribute.__getstate__.<locals>.<genexpr>%
  s4      
& $(:#5GD$4;NN&s   58rP   rn  r   s   fr   r  Attribute.__getstate__!
  s?     u 

u 	
u 

 
 	
r"   c                P    V P                  \        V P                  V4      4       R# r  N)r  r  rn  r   r  s   &&r   r  Attribute.__setstate__*
  s     	s4>>512r"   c           	     	    \         P                  V 4      pV FJ  w  r4VR 8w  d   V! W44       K  T! TV'       d    \        P                  ! \	        V4      4      M\
        4       KL  	  R# r  )r   r   r  r  r  r  )r   name_values_pairsr  r   r   s   &&   r   r  Attribute._setattrs0
  sU    $,,T2,KDz!d* ! ..tE{;6	 -r"   r   )r   r:   r;   r<   rC   rD   rE   rF   r>   r?   rA   r7   r@   rB   r   rG   rH   )
NNNFNNNNNNr2   )r'   r(   r)   r*   r+   rn  rH  r   rz  r   r   r  r  r  r.   r   r"   r   r   r   r	  sC    (XI(5&n" 
 
B$
3r"   r   rA   )r   r:   r;   r<   r=   rC   rE   r>   r?   r   rH   )r   r   c                      ] tR tRtRtRt. ];QJ d    . R R 4       F  NK  	  5M! R R 4       4      O]! RRRRRRRRRRRRRRRR7      N5t^ t	R	 t
R
 tR tRtR# )rS   iZ
  a  
Intermediate representation of attributes that uses a counter to preserve
the order in which the attributes have been defined.

*Internal* data structure of the attrs library.  Running into is most
likely the result of a bug like a forgotten `@attr.s` decorator.
rA   c              #  	p   "   T F,  p\        V\        V4      \        R RR RRRRR RR RR R7      x  K.  	  R # 5i)NTFr   rH   r:   r;   r<   r=   r>   r?   rB   rC   rD   rE   rF   r   rG   )r   r   r   )r   r   s   & r   r   _CountingAttr.<genexpr>v
  sW      
$
# -d3 "
s   46NTFr  c                	    \         ;P                  ^,          un        \         P                  V n        Wn        W n        Wpn        W0n        Wn        Wn        Wn	        Wn
        WPn        W`n        Wn        Wn        Wn        Wn        VV n        R# )r   N)rS   cls_counterr   r  r  r@   r<   rC   rD   rE   rF   r>   r?   rA   r7   rB   rG   rH   )r   r:   r;   r<   r=   r>   r?   r@   rA   r7   rB   rC   rD   rE   rF   rG   rH   s   &&&&&&&&&&&&&&&&&r   rH  _CountingAttr.__init__
  so    & 	!!Q&!$00#"	
"		 	$
r"   c                h    V P                   f	   Wn         V# \        V P                   V4      V n         V# )zl
Decorator that adds *meth* to the list of validators.

Returns *meth* unchanged.

.. versionadded:: 17.1.0
)r  rR   r   r  s   &&r   r;   _CountingAttr.validator
  s3     ??""O  #4??D9DOr"   c                ^    V P                   \        Jd   \        h\        VRR7      V n         V# )z
Decorator that allows to set the default for an attribute.

Returns *meth* unchanged.

Raises:
    DefaultAlreadySetError: If default has been set before.

.. versionadded:: 17.1.0
T)r  )r  r   r   rM   r"  s   &&r   r:   _CountingAttr.default
  s)     =='((6r"   )r  r  rH   r@   r   rC   rD   r>   r?   rB   rA   rG   rE   rF   r<   r7   )	r   r  r<   rC   rE   r>   r?   rG   rH   )r'   r(   r)   r*   r+   rn  rP   r   r   r  rH  r;   r:   r.   r   r"   r   rS   rS   Z
  s    I$0	 
$
%
 
$
%
 

0> 		
?0Ob K#Jr"   rS   c                      ] tR tRtRt ! R R]P                  4      t ! R R]P                  4      tRt	R t
]R 4       tR	tR
# )r   i
  a  
Effective class properties as derived from parameters to `attr.s()` or
`define()` decorators.

This is the same data structure that *attrs* uses internally to decide how
to construct the final class.

Warning:

    This feature is currently **experimental** and is not covered by our
    strict backwards-compatibility guarantees.


Attributes:
    is_exception (bool):
        Whether the class is treated as an exception class.

    is_slotted (bool):
        Whether the class is `slotted <slotted classes>`.

    has_weakref_slot (bool):
        Whether the class has a slot for weak references.

    is_frozen (bool):
        Whether the class is frozen.

    kw_only (KeywordOnly):
        Whether / how the class enforces keyword-only arguments on the
        ``__init__`` method.

    collected_fields_by_mro (bool):
        Whether the class fields were collected by method resolution order.
        That is, correctly but unlike `dataclasses`.

    added_init (bool):
        Whether the class has an *attrs*-generated ``__init__`` method.

    added_repr (bool):
        Whether the class has an *attrs*-generated ``__repr__`` method.

    added_eq (bool):
        Whether the class has *attrs*-generated equality methods.

    added_ordering (bool):
        Whether the class has *attrs*-generated ordering methods.

    hashability (Hashability): How `hashable <hashing>` the class is.

    added_match_args (bool):
        Whether the class supports positional `match <match>` over its
        fields.

    added_str (bool):
        Whether the class has an *attrs*-generated ``__str__`` method.

    added_pickling (bool):
        Whether the class has *attrs*-generated ``__getstate__`` and
        ``__setstate__`` methods for `pickle`.

    on_setattr_hook (Callable[[Any, Attribute[Any], Any], Any] | None):
        The class's ``__setattr__`` hook.

    field_transformer (Callable[[Attribute[Any]], Attribute[Any]] | None):
        The class's `field transformers <transform-fields>`.

.. versionadded:: 25.4.0
c                  0    ] tR tRtRtRt Rt Rt RtRt	R# )	ClassProps.Hashabilityi6  z7
The hashability of a class.

.. versionadded:: 25.4.0
hashablehashable_cache
unhashableleave_aloner   N)
r'   r(   r)   r*   r+   r.  r)  r/  r-  r.   r   r"   r   r(  r(  6  s)    	 #*6!
+#'r"   r(  c                  *    ] tR tRtRtRt Rt RtRtR# )ClassProps.KeywordOnlyiF  z_
How attributes should be treated regarding keyword-only parameters.

.. versionadded:: 25.4.0
r   yesforcer   N)	r'   r(   r)   r*   r+   r   r0  r   r.   r   r"   r   r   r.  F  s!    	 .Q.r"   r   c                	    Wn         W n        W0n        W@n        WPn        W`n        Wpn        Wn        Wn        Wn	        Wn
        Wn        Wn        Wn        Wn        VV n        R # r2   r2  r  r%  r#  rB   r  r$  r%  r&  r'  r'  r(  r)  r;  r4  r   )r   r2  r  r%  r#  rB   r  r$  r%  r&  r'  r'  r(  r)  r;  r4  r   s   &&&&&&&&&&&&&&&&&r   rH  ClassProps.__init__g  s_    & )$ 0"'>$$$ ,& 0",.!2r"   c                	    V P                   \        P                  P                  J ;'       g'    V P                   \        P                  P                  J # r2   )r'  r   r(  r.  r)  r   s   &r   r1  ClassProps.is_hashable  sI     
 6 6 ? ?? J J:#9#9#I#II	
r"   )r&  r$  r(  r'  r;  r%  r)  r  r   r%  r'  r2  r#  r  rB   r4  Nr2  )r'   r(   r)   r*   r+   r,   Enumr(  r   rn  rH  r   r1  r.   r   r"   r   r   r   
  sJ    BH(dii ( /dii /I&"3H 
 
r"   r   c                  4    ] tR tRtRtRtRR ltR tR tRt	R# )	rM   i  a  
Stores a factory callable.

If passed as the default value to `attrs.field`, the factory is used to
generate a new value.

Args:
    factory (typing.Callable):
        A callable that takes either none or exactly one mandatory
        positional argument depending on *takes_self*.

    takes_self (bool):
        Pass the partially initialized instance that is being initialized
        as a positional argument.

.. versionadded:: 17.1.0  *takes_self*
c                	    Wn         W n        R # r2   rT   r  )r   rT   r  s   &&&r   rH  Factory.__init__  s    $r"   c                   a  \         ;QJ d!    . V 3R lS P                   4       F  NK  	  5# ! V 3R lS P                   4       4      # )r  c              3  <   <"   T F  p\        SV4      x  K  	  R # 5ir2   r  r  s   & r   r   'Factory.__getstate__.<locals>.<genexpr>  s     D^TWT4((^s   r  r   s   fr   r  Factory.__getstate__  s/     uDT^^DuDuDT^^DDDr"   c                \    \        V P                  V4       F  w  r#\        WV4       K  	  R# r  )r  rn  rh  )r   r  r   r   s   &&  r   r  Factory.__setstate__  s%     t~~u5KDD& 6r"   r9  Nr$   )
r'   r(   r)   r*   r+   rn  rH  r  r  r.   r   r"   r   rM   rM     s    $ *I%E'r"   rM   )
r   r:   r;   r<   r=   rC   rE   r>   r?   r   c                  ^    ] tR tRtRtRtRRRR/R lt]R R l4       tR	 R
 lt	R t
R tRtR# )r  i  a1  
Stores a converter callable.

Allows for the wrapped converter to take additional arguments. The
arguments are passed in the order they are documented.

Args:
    converter (Callable): A callable that converts the passed value.

    takes_self (bool):
        Pass the partially initialized instance that is being initialized
        as a positional argument. (default: `False`)

    takes_field (bool):
        Pass the field definition (an :class:`Attribute`) into the
        converter as a positional argument. (default: `False`)

.. versionadded:: 24.1.0
takes_fieldr  Fc               	  a  VS n         VS n        VS n        \        V4      pVP	                  4       S n        S P                  '       g   S P                  '       g   V 3R  lS n        MkS P                  '       d   S P                  '       g   V 3R lS n        M;S P                  '       g   S P                  '       d   V 3R lS n        MV 3R lS n        VP                  4       pVe   VS P                  P                  R&   R# R# )c                &   < SP                  V 4      # r2   r@   )r   rQ  __r   s   &&&r   r   $Converter.__init__.<locals>.<lambda>  s    1Fr"   c                &   < SP                  W4      # r2   rE  )r   instancerF  r   s   &&&r   r   rG  
  s    9r"   c                &   < SP                  W4      # r2   rE  )r   rF  r  r   s   &&&r   r   rG    s    T^^6r"   c                (   < SP                  WV4      # r2   rE  )r   rI  r  r   s   &&&r   r   rG    s    4>><r"   Nr`   )	r@   r  rB  r   get_first_param_typer  __call__get_return_typer   )r   r@   r  rB  exrts   f&$$  r   rH  Converter.__init__  s    "$&!),!#!8!8!:4#3#3#3FDM___T%5%5%5DM T%5%5%5DMDM !>68DMM))(3 r"   c                    V ^8  d   QhRRRR/# )rX   r   rZ   r`   r   )rb   s   "r   rc   Converter.__annotate__  s     / /C /C /r"   c                    RV  2# )zP
Return the name that a converter for an attribute name *attr_name*
would have.
__attr_converter_r   )r   s   &r   r  Converter._get_global_name  s     #9+..r"   c               $    V ^8  d   QhRRRRRR/# )rX   r   rZ   r  r`   r   )rb   s   "r   rc   rS  "  s&     \ \S \S \S \r"   c                z   V P                   '       g*   V P                  '       g   V P                  V4       RV R2# V P                   '       d-   V P                  '       d   V P                  V4       RV RV R2# V P                   '       d   V P                  V4       RV R2# V P                  V4       RV RV R2# )z
Return a string that calls the converter for an attribute name
*attr_name* and the value in variable named *value_var* according to
`self.takes_self` and `self.takes_field`.
r  rQ  z, self, attr_dict['z'])z, self)z, attr_dict[')r  rB  r  )r   r   r  s   &&&r   r  Converter._fmt_converter_call"  s     4#3#3#3++I67q1EE???t///++I67qCVW`Vaadee???++I67q7KK''	231YK}YKWZ[[r"   c                N    RV P                   RV P                  RV P                  /# )z`
Return a dict containing only converter and takes_self -- the rest gets
computed when loading.
r@   r  rB  r@   r  rB  r   s   &r   r  Converter.__getstate__3  s+     $//4++
 	
r"   c                *    V P                   ! R/ VB  R# )z
Load instance from state.
Nr   r*  r  s   &&r   r  Converter.__setstate__>  s     	r"   )rM  r  r@   rB  r  N)rM  r  _global_namer@   rB  r  )r'   r(   r)   r*   r+   rn  rH  r{  r  r  r  r  r.   r   r"   r   r  r    sE    (I9 95 96 / /\"	
r"   r  c                6  a \         P                  ! RV 4      p \        V\        4      '       d   TpMC\        V\        \
        34      '       d   V Uu/ uF  qf\        4       bK  	  ppMRp\        V4      hVP                  RR4      pVP                  RR4      p	VP                  RR4      p
/ oVe   SP                  V4       Ve   VSR&   V	e   V	SR&   V
e   V
SR&   \        P                  ! W/ V3R l4      p\        P                  ! \        \        4      ;_uu_ 4        \         P"                  ! ^4      P$                  P'                  RR	4      Vn        RRR4       VP                  R
R4      p\+        VVP'                  R4      VP'                  R4      R4      w  VR&   VR&   \-        RRV/VB ! V4      pVP/                  4        UUu/ uF!  w  rVP0                  f   K  WP0                  bK#  	  uppVn        V# u upi   + '       g   i     L; iu uppi )a  
A quick way to create a new class called *name* with *attrs*.

.. note::

    ``make_class()`` is a thin wrapper around `attr.s`, not `attrs.define`
    which means that it doesn't come with some of the improved defaults.

    For example, if you want the same ``on_setattr`` behavior as in
    `attrs.define`, you have to pass the hooks yourself: ``make_class(...,
    on_setattr=setters.pipe(setters.convert, setters.validate)``

.. warning::

    It is *your* duty to ensure that the class name and the attribute names
    are valid identifiers. ``make_class()`` will *not* validate them for
    you.

Args:
    name (str): The name for the new class.

    attrs (list | dict):
        A list of names or a dictionary of mappings of names to `attr.ib`\
        s / `attrs.field`\ s.

        The order is deduced from the order of the names or attributes
        inside *attrs*.  Otherwise the order of the definition of the
        attributes is used.

    bases (tuple[type, ...]): Classes that the new class will subclass.

    class_body (dict):
        An optional dictionary of class attributes for the new class.

    attributes_arguments: Passed unmodified to `attr.s`.

Returns:
    type: A new class with *attrs*.

.. versionadded:: 17.1.0 *bases*
.. versionchanged:: 18.1.0 If *attrs* is ordered, the order is retained.
.. versionchanged:: 23.2.0 *class_body*
.. versionchanged:: 25.2.0 Class names can now be unicode.
NFKCz(attrs argument must be a dict or a list.r  Nr  rH  c                &   < V P                  S4      # r2   )rO  )r  r   s   &r   r   make_class.<locals>.<lambda>  s    		$r"   r'   __main__r=   rC   rE   Tr   r   )unicodedata	normalizerN   r  rO   rP   rV   rJ   poprO  r  	new_classrd  re  rf  rK   rp  	_getframe	f_globalsr   r(   r  r  r   r7   r   )r   r   bases
class_bodyattributes_argumentsr  r   rU   r  r  	user_inittype_r=   r   r  r  r   s   &&&&,           @r   
make_classrp  Z  s   `   .D%	ED%=	)	))./AvxK/8n||0$7H2D9IZ.IDJ%-!"&/"#$ZOOD-GHE 
		^Z	8	8==+5599

 
9 
"
"5$
/C 	"  &  )		T"W% 
8x
8#7
8
?C 'nn..da!&&	66	.C J_ 02 
9	8&s   G= 6HH"HH	)r=  rE  c                  .    ] tR tRtRt]! 4       tR tRtR# )_AndValidatori  z*
Compose many validators to a single one.
c                	>    V P                    F  pV! WV4       K  	  R # r2   )_validators)r   r  r   r   r  s   &&&& r   rM  _AndValidator.__call__  s    !!Ad%  "r"   r   N)	r'   r(   r)   r*   r+   rV   rt  rM  r.   r   r"   r   rr  rr    s     (K!r"   rr  c                     . pV  F7  pTP                  \        V\        4      '       d   VP                  MV.4       K9  	  \        \	        V4      4      # )z
A validator that composes multiple validators into one.

When called on a value, it runs all wrapped validators.

Args:
    validators (~collections.abc.Iterable[typing.Callable]):
        Arbitrary number of validators.

.. versionadded:: 17.1.0
)r   rN   rr  rt  rP   )
validatorsr  r;   s   *  r   rR   rR     sM     D	)]33 !!	
   t%%r"   c                 d  a  \         ;QJ d    R S  4       F  '       g   K   RM	  RM! R S  4       4      pV'       d   V 3R lpMV 3R lpS '       g,   \        R4      pVP                  P                  RVRV/4       M\	        S ^ ,          4      P                  4       pV'       d   WBP                  R&   S R
,          p\        '       g#   \        V\        4      '       d   VP                  p\	        V4      P                  4       pV'       d   WbP                  R&   V'       d   \        VRRR	7      # V# )aa  
A converter that composes multiple converters into one.

When called on a value, it runs all wrapped converters, returning the
*last* value.

Type annotations will be inferred from the wrapped converters', if they
have any.

    converters (~collections.abc.Iterable[typing.Callable]):
        Arbitrary number of converters.

.. versionadded:: 20.1.0
c              3  B   "   T F  p\        V\        4      x  K  	  R # 5ir2   rN   r  )r   cs   & r   r   pipe.<locals>.<genexpr>  s     GJq*Q	22Js   TFc                h   < S F*  p\        V\        4      '       d
   V! WV4      MV! V 4      p K,  	  V # r2   rz  )r  r  r  r{  
converterss   &&& r   pipe_converterpipe.<locals>.pipe_converter  s5    +5a+C+CAc'3   
 Jr"   c                *   < S F  pV! V 4      p K  	  V # r2   r   )r  r{  r~  s   & r   r  r    s    f   Jr"   Ar  r`   )r  rB  ro   )r  r	   r   rO  r   rL  r   rN   r  rM  rN  )r~  return_instancer  r  tlastrP  s   j      r   rQ   rQ     s      cGJGcccGJGGO		 CL&&--ua1.EF !A/DDF45**51"~|
4 ; ;==D "$'77979**84DdKKr"   )ztyping.ClassVarz
t.ClassVarClassVarztyping_extensions.ClassVar)Nr  r2   )T)NNNNNNNFFTFFFFFNNFFNNNTNT)NNr[  )n
__future__r   r]  rd  r  r,   r-  rw  rr   rp  r  re  rY  collections.abcr   r   	functoolsr   typingr   r   r	   r  r
   r   r   r   r   r   r   r   r   
exceptionsr   r   r   r   objectr   r   r  r   rv  r  r  rc  rQ   r:  r9  r8  r6  r   r   intr0   rV   ri   ry   r   r   r   r   r   r   r   r   r   r  r   r  r  rI   r   r   r  r+  r   r  rj  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   rn  _ar   r>   rS   r   _casrM   _fr  rp  rr  rR   )r   r   s   00r   <module>r     s   # 
       
    - % + + ( '   !!'   ) !2226  H	ll7??G4D4DE tyy ( 

( (" 				

k\  F1.$* $0"'#B%8uEp1h"7tF	 F	R8((V4BJ 
/EP	"J5*p"6#r+\&:.$/B&J3])
W,/^EPK Kx ## $ j %d+ $" )2&6"Q+ 5qq"6 
=bFF1qvv'<11b
=	Q Qh 	-01_
 _
` $$ % %d+ %" Yz6dC
$' $'h !! "  "  GIgR8C2
Na ab ; ;  ;  Iir*"5R	 yTdV Tt$	! 	! %	!&.9S( 7
=z	vns6   (%N&!N+8N+	N0
!N0
4N0
2"N5N:N?