
    q&f                         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ZeZ eed
d	      Ze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	)zr
These are Python 3.6+-only and 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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).
    - If *frozen* is `False`, run converters and validators when setting an
      attribute by default.
    - *slots=True*

      .. caution::

         Usually this has only upsides and few visible effects in everyday
         programming. But it *can* lead to some suprising 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``.
    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S )N	maybe_clsr   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   s     E/usr/lib/python3/dist-packages/mercurial/thirdparty/attr/_next_gen.pydo_itzdefine.<locals>.do_itV   s     


 
 	

 
 
 
 &
 
 &
 
 "
 
 
 
  $!
"  #
$ 0%
& "'
( 0)
* "+
 	
    c                 "   dt         j                  fv}du rt        | j                  D ]3  }|j                  t
        u s|rt        d      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_clsr   r(   r   r   s      r'   wrapzdefine.<locals>.wrapo   s     $D'--+@@ U?z1/J  		H##'77!$7 
 %]]
		 #l++	%d##( 	%e$$	%s   0A9 9BBr%   )r#   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r1   r(   s    ``````````````````` @r'   definer2      s2    |
 
 
2!%J Ir)   )r   r   default	validatorr   r   r   metadata	converterfactoryr   r   r   r   c                 0    t        | |||||||||	|
|      S )zx
    Identical to `attr.ib`, except keyword-only and with some arguments
    removed.

    .. versionadded:: 20.1.0
    r3   )r   r3   s               r'   fieldr:      s5    *  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<   r=   retain_collection_types)_asdict)r?   r;   r<   r=   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)r?   r;   r<   r@   )_astuple)r?   r;   r<   s      r'   r   r      s     764 r)   )N)__doc__	functoolsr    r   _funcsr   rA   r   rC   _maker   r	   r
   r   r   
exceptionsr   r2   mutabler   r:   r%   r)   r'   <module>rK      s      % '  2  			

+D 		6
 			
"J !   "$ 	r)   