
    ,h                        d dl mZ d dlmZ d dlZddlmZ  G d d      Zde	d	e
d
e
ddfdZ G d de
e      Z G d dee      Z G d dee      ZdD ]  Z eeed         G d dee      ZdD ]  Z eeed         G d dej(                  j*                  e      Z ed      ZdedefdZe
eeeeeeeiZdedefdZdedefdZ e       Z e       Zy)     )wraps)TypeVarN   )SetuptoolsDeprecationWarningc                        e Zd ZU dZdZeed<   y)Statica`  
    Wrapper for built-in object types that are allow setuptools to identify
    static core metadata (in opposition to ``Dynamic``, as defined :pep:`643`).

    The trick is to mark values with :class:`Static` when they come from
    ``pyproject.toml`` or ``setup.cfg``, so if any plugin overwrite the value
    with a built-in, setuptools will be able to recognise the change.

    We inherit from built-in classes, so that we don't need to change the existing
    code base to deal with the new types.
    We also should strive for immutability objects to avoid changes after the
    initial parsing.
    F	_mutated_N)__name__
__module____qualname____doc__r	   bool__annotations__     T/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/setuptools/_static.pyr   r   	   s     Itr   r   targetmethodcopyingreturnc                     t        | |d      yt              dt        ffd       }d|_        t	        | ||       y)a	  
    Because setuptools is very flexible we cannot fully prevent
    plugins and user customizations from modifying static values that were
    parsed from config files.
    But we can attempt to block "in-place" mutations and identify when they
    were done.
    Nselfc                 b    d| _         t        j                  dd dd        | g|i |S )NTz/Direct modification of value will be disallowedz
            In an effort to implement PEP 643, direct/in-place changes of static values
            that come from configuration files are deprecated.
            If you need to modify this value, please first create a copy with z
            and make sure conform to all relevant standards when overriding setuptools
            functionality (https://packaging.python.org/en/latest/specifications/).
            )i  
   r   )due_date)r	   r   emit)r   argskwargsr   fns      r   _replacementz+_prevent_modification.<locals>._replacement'   sS     $))=O PWi X $
	
 $((((r    )getattrr   r   r   setattr)r   r   r   r    r   s     ` @r   _prevent_modificationr$      sN     
	&B	z
2Y)6 ) )" LFFL)r   c                       e Zd Zy)StrNr
   r   r   r   r   r   r&   r&   =       r   r&   c                       e Zd Zy)TupleNr'   r   r   r   r*   r*   A   r(   r   r*   c                       e Zd ZdZy)Lista  
    :meta private:
    >>> x = List([1, 2, 3])
    >>> is_static(x)
    True
    >>> x += [0]  # doctest: +IGNORE_EXCEPTION_DETAIL
    Traceback (most recent call last):
    SetuptoolsDeprecationWarning: Direct modification ...
    >>> is_static(x)  # no longer static after modification
    False
    >>> y = list(x)
    >>> y.clear()
    >>> y
    []
    >>> y == x
    False
    >>> is_static(List(y))
    True
    Nr
   r   r   r   r   r   r   r,   r,   E   s    r   r,   )
__delitem____iadd____setitem__appendclearextendinsertremovereversepopz`list(value)`c                       e Zd ZdZy)Dicta  
    :meta private:
    >>> x = Dict({'a': 1, 'b': 2})
    >>> is_static(x)
    True
    >>> x['c'] = 0  # doctest: +IGNORE_EXCEPTION_DETAIL
    Traceback (most recent call last):
    SetuptoolsDeprecationWarning: Direct modification ...
    >>> x._mutated_
    True
    >>> is_static(x)  # no longer static after modification
    False
    >>> y = dict(x)
    >>> y.popitem()
    ('b', 2)
    >>> y == x
    False
    >>> is_static(Dict(y))
    True
    Nr-   r   r   r   r9   r9   l   s    r   r9   )r.   __ior__r0   r2   r7   popitem
setdefaultupdatez`dict(value)`c                       e Zd ZdZy)SpecifierSetz>Not exactly a built-in type but useful for ``requires-python``Nr-   r   r   r   r?   r?      s    Hr   r?   Tvaluec                     | S )z
    >>> noop(42)
    42
    r   rA   s    r   nooprD      s	    
 Lr   c                 R    t        j                  t        |       t              |       S )zc
    >>> is_static(attempt_conversion("hello"))
    True
    >>> is_static(object())
    False
    )_CONVERSIONSgettyperD   rC   s    r   attempt_conversionrI      s      DK.u55r   c                 @    t        | t              xr | j                   S )z
    >>> is_static(a := Dict({'a': 1}))
    True
    >>> is_static(dict(a))
    False
    >>> is_static(b := List([1, 2, 3]))
    True
    >>> is_static(list(b))
    False
    )
isinstancer   r	   rC   s    r   	is_staticrL      s     eV$<U__)<<r   )	functoolsr   typingr   packaging.specifiers	packagingwarningsr   r   rH   strr$   r&   tupler*   listr,   _methoddictr9   
specifiersr?   r@   rD   rF   rI   objectr   rL   
EMPTY_LIST
EMPTY_DICTr   r   r   <module>r[      s;      2 $*$ * *c *d *D	#v 		E6 	4 0 :G $9:4 0	 
:G $9
:I9''44f I CL a  S%dD$?6a 6A 6=V = = V
V
r   