HEX
Server: Apache
System: Linux pdx1-shared-a1-38 6.6.104-grsec-jammy+ #3 SMP Tue Sep 16 00:28:11 UTC 2025 x86_64
User: mmickelson (3396398)
PHP: 8.1.31
Disabled: NONE
Upload Files
File: //lib/python3/dist-packages/mercurial/thirdparty/attr/__pycache__/_funcs.cpython-310.pyc
o

�]Lb��@s�ddlmZmZmZddlZddlmZddlmZm	Z	m
Z
ddlmZdde
dfd	d
�Zddedfdd�Zd
d�Zdd�Zdd�ZdS)�)�absolute_import�division�print_functionN�)�	iteritems)�NOTHING�fields�_obj_setattr)�AttrsAttributeNotFoundErrorTFc
s�t|j�}��}|D]k}t||j�}�dur�||�sq
|durpt|j�r1t|d��d�||j<q
t|ttt	f�rR|dur@|jnt}	|	��fdd�|D��||j<q
t|t
�rj����fdd�t|�D��||j<q
|||j<q
|||j<q
|S)a�
    Return the ``attrs`` attribute values of *inst* as a dict.

    Optionally recurse into other ``attrs``-decorated classes.

    :param inst: Instance of an ``attrs``-decorated class.
    :param bool recurse: Recurse into classes that are also
        ``attrs``-decorated.
    :param callable filter: A callable whose return code deteremines whether an
        attribute or element is included (``True``) or dropped (``False``).  Is
        called with the :class:`attr.Attribute` as the first argument and the
        value as the second argument.
    :param callable dict_factory: A callable to produce dictionaries from.  For
        example, to produce ordered dictionaries instead of normal Python
        dictionaries, pass in ``collections.OrderedDict``.
    :param bool retain_collection_types: Do not convert to ``list`` when
        encountering an attribute whose type is ``tuple`` or ``set``.  Only
        meaningful if ``recurse`` is ``True``.

    :rtype: return type of *dict_factory*

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

    ..  versionadded:: 16.0.0 *dict_factory*
    ..  versionadded:: 16.1.0 *retain_collection_types*
    NT��recurse�filter�dict_factorycs*g|]}t|j�rt|d��d�n|�qS)Tr��has�	__class__�asdict)�.0�i)rr
��B/usr/lib/python3/dist-packages/mercurial/thirdparty/attr/_funcs.py�
<listcomp>3s�
���zasdict.<locals>.<listcomp>c3sH�|]\}}t|j�rt|�d�n|t|j�rt|�d�n|fVqdS))rNr�r�kk�vv)�dfrr�	<genexpr>;s���zasdict.<locals>.<genexpr>)rr�getattr�namerr�
isinstance�tuple�list�set�dictr)
�instrr
r�retain_collection_types�attrs�rv�a�v�cfr)rrr
rr
s0

��
�rc
st|j�}g}|�|D]u}t||j�}�dur�||�sq|dur{t|j�r3|�t|d���d��qt|tt	t
f�rU�durB|jnt	}	|�|	���fdd�|D���qt|t�ru�dura|jnt}
|�|
��fdd�t|�D���q|�|�q|�|�q�t	ur�|S�|�S)a8
    Return the ``attrs`` attribute values of *inst* as a tuple.

    Optionally recurse into other ``attrs``-decorated classes.

    :param inst: Instance of an ``attrs``-decorated class.
    :param bool recurse: Recurse into classes that are also
        ``attrs``-decorated.
    :param callable filter: A callable whose return code determines whether an
        attribute or element is included (``True``) or dropped (``False``).  Is
        called with the :class:`attr.Attribute` as the first argument and the
        value as the second argument.
    :param callable tuple_factory: A callable to produce tuples from.  For
        example, to produce lists instead of tuples.
    :param bool retain_collection_types: Do not convert to ``list``
        or ``dict`` when encountering an attribute which type is
        ``tuple``, ``dict`` or ``set``.  Only meaningful if ``recurse`` is
        ``True``.

    :rtype: return type of *tuple_factory*

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

    ..  versionadded:: 16.2.0
    NT�rr
�
tuple_factoryr%c	s,g|]}t|j�rt|d���d�n|�qS)Tr+�rr�astuple)r�j�r
�retainr,rrrps�
���zastuple.<locals>.<listcomp>c3sL�|]!\}}t|j�rt|��d�n|t|j�rt|��d�n|fVqdS))r,r%Nr-r)r1r,rrrys&�
������
�zastuple.<locals>.<genexpr>)
rrrrr�appendr.rr r!r"r#r)r$rr
r,r%r&r'r(r)r*rrr0rr.Fs4


��

�r.cCst|dd�duS)z�
    Check whether *cls* is a class with ``attrs`` attributes.

    :param type cls: Class to introspect.
    :raise TypeError: If *cls* is not a class.

    :rtype: :class:`bool`
    �__attrs_attrs__N)r)�clsrrrr�s	rcKsrddl}|�dt�t�|�}t|j�}t|�D]\}}t||t�}|tur0t	dj
||jd���t|||�q|S)a�
    Copy *inst* and apply *changes*.

    :param inst: Instance of a class with ``attrs`` attributes.
    :param changes: Keyword changes in the new copy.

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

    :raise attr.exceptions.AttrsAttributeNotFoundError: If *attr_name* couldn't
        be found on *cls*.
    :raise attr.exceptions.NotAnAttrsClassError: If *cls* is not an ``attrs``
        class.

    ..  deprecated:: 17.1.0
        Use :func:`evolve` instead.
    rNz6assoc is deprecated and will be removed after 2018/01.z&{k} is not an attrs attribute on {cl}.)�k�cl)�warnings�warn�DeprecationWarning�copyrrrrrr
�formatr	)r$�changesr7�newr&r5r)r(rrr�assoc�s �

��r>cKsf|j}t|�}|D]"}|jsq	|j}|ddkr|n|dd�}||vr+t||�||<q	|di|��S)a�
    Create a new instance, based on *inst* with *changes* applied.

    :param inst: Instance of a class with ``attrs`` attributes.
    :param changes: Keyword changes in the new copy.

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

    :raise TypeError: If *attr_name* couldn't be found in the class
        ``__init__``.
    :raise attr.exceptions.NotAnAttrsClassError: If *cls* is not an ``attrs``
        class.

    ..  versionadded:: 17.1.0
    r�_rNr)rr�initrr)r$r<r4r&r(�	attr_name�	init_namerrr�evolve�s�rC)�
__future__rrrr:�_compatr�_makerrr	�
exceptionsr
r#rr r.rr>rCrrrr�<module>s
�<
�H!