
    6h                         S r SSKJr  SSKJr  SSKJr  SSKJr	  SSK
JrJrJrJrJr  SSKJr   SS	S	S	S	S
SS
SS	SSS
S	SS
S	S	S	S
S.S jjr\r\" \S
S	S9r\S	S
S	S
S	S	S	SS	S	S	S.S jrS
S	S	S.S jrS
S	S.S jrg	)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                   ^^^^^^^^^	^
^^^^^^^^^^ UUUUUUUUUU
UUUUUUUU4S jmU	UUU4S jnU c  U$ U" U 5      $ )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                    > [        S0 SU _ST_ST_ST	_ST
_ST_ST_ST_S	T_S
U_ST_ST_ST_ST_ST_ST_SS_ST_ST_ST_ST_6$ )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_itdefine.<locals>.do_itV   s     


 
 	

 
 
 
 &
 
 &
 
 "
 
 
 
  $!
"  #
$ 0%
& "'
( 0)
* "+
 	
    c                 <  > TS[         R                  4;  nTSL a	  Tc  [        mU R                   H:  nUR                  [
        L d  M  U(       a  [        S5      e[         R                  m  O   Tb	  T" U T5      $  T" U S5      $ ! [         a    T" U S5      s $ f = f)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'   wrapdefine.<locals>.wrapo   s     $D'--+@@ U?z1/J H##'77!$7 
 %]]
 & #l++	%d##( 	%e$$	%s   <B BBr%   )r#   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r2   r(   s    ``````````````````` @r'   definer4      s7    |
 
 
2!% !%J Ir*   )r   r   default	validatorr   r   r   metadata	converterfactoryr   r   r   r   c                 *    [        U UUUUUUUUU	U
US9$ )zh
Identical to `attr.ib`, except keyword-only and with some arguments
removed.

.. versionadded:: 20.1.0
r5   )r   r5   s               r'   fieldr<      s5    *  r*   )recursefiltervalue_serializerc                    [        U UUUSS9$ )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)rA   r=   r>   r?   s       r'   r   r      s      ) $ r*   )r=   r>   c                    [        XUSS9$ )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)rA   r=   r>   rB   )_astuple)rA   r=   r>   s      r'   r   r      s     64 r*   )N)__doc__	functoolsr    r   _funcsr   rC   r   rE   _maker   r	   r
   r   r   
exceptionsr   r4   mutabler   r<   r%   r*   r'   <module>rM      s      % '  2  			

+D 		6
 			
"J !   "$ 	r*   