Ë
    Èúàe;  ã                   óô   — d Z ddlmZ ddlmZ ddlmZ ddlmZ	 ddl
mZmZmZmZmZ ddlmZ 	 dd	d	d	d	d	d
dd
dd	ddd
d	dd
d	d	d	d
dœd„ZeZ eed
d	¬«      Zed	d
d	d
d	d	d	d	dd	d	d	d	dœd„Zd
d	d	dœd„Zd
d	dœd„Zy	)z]
These are keyword-only APIs that call `attr.s` and `attr.ib` with different
default values.
é    )Úpartialé   )Úsetters)Úasdict)Úastuple)ÚNOTHINGÚ_frozen_setattrsÚ_ng_default_on_setattrÚattribÚattrs)ÚUnannotatedAttributeErrorNTF)ÚtheseÚreprÚunsafe_hashÚhashÚinitÚslotsÚfrozenÚweakref_slotÚstrÚauto_attribsÚkw_onlyÚ
cache_hashÚauto_excÚeqÚorderÚauto_detectÚgetstate_setstateÚ
on_setattrÚfield_transformerÚ
match_argsc                ó‚   ‡‡‡‡‡‡‡‡‡	‡
‡‡‡‡‡‡‡‡‡‡‡— ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ	ˆˆˆfd„Šˆ
ˆˆˆfd„}| €|S  || «      S )aæ  
    Define an *attrs* class.

    Differences to the classic `attr.s` that it uses underneath:

    - Automatically detect whether or not *auto_attribs* should be `True` (c.f.
      *auto_attribs* parameter).
    - Converters and validators run when attributes are set by default -- if
      *frozen* is `False`.
    - *slots=True*

      .. caution::

         Usually this has only upsides and few visible effects in everyday
         programming. But it *can* lead to some surprising behaviors, so please
         make sure to read :term:`slotted classes`.
    - *auto_exc=True*
    - *auto_detect=True*
    - *order=False*
    - Some options that were only relevant on Python 2 or were kept around for
      backwards-compatibility have been removed.

    Please note that these are all defaults and you can change them as you
    wish.

    :param Optional[bool] auto_attribs: If set to `True` or `False`, it behaves
       exactly like `attr.s`. If left `None`, `attr.s` will try to guess:

       1. If any attributes are annotated and no unannotated `attrs.fields`\ s
          are found, it assumes *auto_attribs=True*.
       2. Otherwise it assumes *auto_attribs=False* and tries to collect
          `attrs.fields`\ s.

    For now, please refer to `attr.s` for the rest of the parameters.

    .. versionadded:: 20.1.0
    .. versionchanged:: 21.3.0 Converters are also run ``on_setattr``.
    .. versionadded:: 22.2.0
       *unsafe_hash* as an alias for *hash* (for :pep:`681` compliance).
    c                 óš   •— t        di d| “d‰“d‰“d‰	“d‰“d‰
“d‰“d‰“d	‰“d
‰“d|“d‰“d‰“d‰“d‰“d‰“d‰“dd“d‰“d‰“d‰“d‰“ŽS )NÚ	maybe_clsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Úcollect_by_mroTr   r   r    r!   © )r   )Úclsr   r   r   r   r   r    r   r   r   r   r   r!   r   r   r   r   r   r   r   r   s     €€€€€€€€€€€€€€€€€€€ú0/usr/lib/python3/dist-packages/attr/_next_gen.pyÚdo_itzdefine.<locals>.do_itY   sè   ø€ Üò 
Ùð
áð
ñ ð
ñ ð	
ñ
 $ð
ñ ð
ñ ð
ñ ð
ñ &ð
ñ ð
ñ &ð
ñ ð
ñ "ð
ñ ð
ñ ð
ñ  ð!
ñ" $ð#
ñ$  ð%
ñ& 0ð'
ñ( "ð)
ñ* 0ð+
ñ, "ð-
ð 	
ó    c                 ó&  •— ‰dt         j                  fv}‰du r‰€t        Š| j                  D ]5  }|j                  t
        u sŒ|rd}t        |«      ‚t         j                  Š n ‰�	 ‰| ‰«      S 	  ‰| d«      S # t        $ r  ‰| d«      cY S w xY w)z—
        Making this a wrapper ensures this code runs during class creation.

        We also ensure that frozen-ness of classes is inherited.
        NFz@Frozen classes can't use on_setattr (frozen-ness was inherited).T)r   ÚNO_OPr
   Ú	__bases__Ú__setattr__r	   Ú
ValueErrorr   )r'   Úhad_on_setattrÚbase_clsÚmsgr   r)   r   r   s       €€€€r(   Úwrapzdefine.<locals>.wraps   s°   ø€ ð $¨D´'·-±-Ð+@Ð@ˆð �U‰?˜zÐ1Ü/ˆJð Ÿ™ò 	ˆHØ×#Ñ#Ô'7Ò7Ù!Ø\�CÜ$ S›/Ð)ä$Ÿ]™]�
Ùð	ð Ð#Ù˜˜lÓ+Ð+ð	%Ù˜˜dÓ#Ð#øÜ(ò 	%Ù˜˜eÓ$Ò$ð	%ús   Á2A; Á;BÂBr&   )r$   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r3   r)   s    ```````````````````` @r(   Údefiner4      s2   ÿÿü€ ÷B
÷ 
ö 
÷4%ðF ÐØˆá�	‹?Ðr*   )r   r   ©ÚdefaultÚ	validatorr   r   r   ÚmetadataÚtypeÚ	converterÚfactoryr   r   r   r   Úaliasc                 ó4   — t        | |||||||||	|
|||¬«      S )a  
    Identical to `attr.ib`, except keyword-only and with some arguments
    removed.

    .. versionadded:: 23.1.0
       The *type* parameter has been re-added; mostly for `attrs.make_class`.
       Please note that type checkers ignore this metadata.
    .. versionadded:: 20.1.0
    r5   )r   r5   s                 r(   Úfieldr>       s;   € ô4 ØØØØØØØØØØØØØØôð r*   )ÚrecurseÚfilterÚvalue_serializerc                ó"   — t        | |||d¬«      S )zŸ
    Same as `attr.asdict`, except that collections types are always retained
    and dict is always used as *dict_factory*.

    .. versionadded:: 21.3.0
    T)Úinstr?   r@   rA   Úretain_collection_types)Ú_asdict)rC   r?   r@   rA   s       r(   r   r   Ì   s    € ô ØØØØ)Ø $ôð r*   )r?   r@   c                ó    — t        | ||d¬«      S )z¨
    Same as `attr.astuple`, except that collections types are always retained
    and `tuple` is always used as the *tuple_factory*.

    .. versionadded:: 21.3.0
    T)rC   r?   r@   rD   )Ú_astuple)rC   r?   r@   s      r(   r   r   Ü   s   € ô Ø˜7¨6È4ôð r*   )N)Ú__doc__Ú	functoolsr   Ú r   Ú_funcsr   rE   r   rG   Ú_maker   r	   r
   r   r   Ú
exceptionsr   r4   Úmutabler   r>   r&   r*   r(   ú<module>rO      sØ   ðñõ å Ý %Ý '÷õ õ 2ð ðAð Ø	ØØ	Ø	Ø
ØØØØØØØØØ
ØØØØØô-AðH €Ù	� °Ô	6€ð
 ØØ	Ø	Ø	ØØ	ØØØØØ
ØØ
ô)ðX !¨Àô ð  "¨$õ 	r*   