o
    ×•`è  ã                   @   s®   d 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 	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d�Zedddddddd	ddddœdd„ZdS )zr
These are Python 3.6+-only and keyword-only APIs that call `attr.s` and
`attr.ib` with different default values.
é    )Úpartial)ÚUnannotatedAttributeErroré   )Úsetters)ÚNOTHINGÚ_frozen_setattrsÚattribÚattrsNTF)ÚtheseÚreprÚhashÚinitÚslotsÚfrozenÚweakref_slotÚstrÚauto_attribsÚkw_onlyÚ
cache_hashÚauto_excÚeqÚorderÚauto_detectÚgetstate_setstateÚ
on_setattrÚfield_transformerc                   sR   ‡‡‡‡‡‡‡‡	‡
‡‡‡‡‡‡‡‡fdd„‰‡ ‡‡‡fdd„}| du r%|S || ƒS )aD  
    The only behavioral differences are the handling of the *auto_attribs*
    option:

    :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 `attr.ib`\ s
          are found, it assumes *auto_attribs=True*.
       2. Otherwise it assumes *auto_attribs=False* and tries to collect
          `attr.ib`\ s.

    and that mutable classes (``frozen=False``) validate on ``__setattr__``.

    .. versionadded:: 20.1.0
    c                    s‚   t di 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   Úcollect_by_mroTr   r   r   © )r	   )Úclsr   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
   r   r   ú0/usr/lib/python3/dist-packages/attr/_next_gen.pyÚdo_it5   sR   ÿþýüûúùø	÷
öõôóòñðïîíìzdefine.<locals>.do_itc                    sŒ   ˆdt jfv}ˆdu rˆdu rt j‰| jD ]}|jtu r'|r"tdƒ‚t j‰ nqˆ dur1ˆ| ˆ ƒS zˆ| dƒW S  tyE   ˆ| dƒ Y S 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_OPÚvalidateÚ	__bases__Ú__setattr__r   Ú
ValueErrorr   )r   Úhad_on_setattrÚbase_cls)r   r!   r   r   r   r    ÚwrapM   s&   

ÿø

ÿzdefine.<locals>.wrapNr   )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!   r   r   r   r   r   r   r   r   r   r   r   r   r
   r   r    Údefine   s
   ,'%r*   )r   r   ©ÚdefaultÚ	validatorr   r   r   ÚmetadataÚ	converterÚfactoryr   r   r   r   c                 C   s    t | |||||||||	|
|d�S )zx
    Identical to `attr.ib`, except keyword-only and with some arguments
    removed.

    .. versionadded:: 20.1.0
    r+   )r   r+   r   r   r    Úfield|   s   ôr1   )N)Ú__doc__Ú	functoolsr   Úattr.exceptionsr   Ú r   Ú_maker   r   r   r	   r*   Úmutabler   r1   r   r   r   r    Ú<module>   sR    ÿìjó