o
    i;                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZmZ e	 dkZ
ejdd dkZejdd dkZdd ZG d	d
 d
Zdd Ze Ze ZdS )    N)MappingSequencePyPy   )   
   )r      c                  O   s   t jdtdd d S )NzRunning interpreter doesn't sufficiently support code object introspection.  Some features like bare super() or accessing __class__ will not work with slotted classes.r   )
stacklevel)warningswarnRuntimeWarning)argskw r   G/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/attr/_compat.py	just_warn   s
   
r   c                   @   s.   e Zd ZdZdgZdd Zdd Zdd Zd	S )
_AnnotationExtractorz^
    Extract type annotations from a callable, returning None whenever there
    is none.
    sigc              	   C   s2   z	t || _W d S  ttfy   d | _Y d S w N)inspect	signaturer   
ValueError	TypeError)selfcallabler   r   r   __init__%   s
   z_AnnotationExtractor.__init__c                 C   s>   | j sdS t| j j }|r|d jtjjur|d jS dS )zU
        Return the type annotation of the first argument if it's not empty.
        Nr   )r   list
parametersvalues
annotationr   	Parameterempty)r   paramsr   r   r   get_first_param_type+   s   
z)_AnnotationExtractor.get_first_param_typec                 C   s"   | j r| j jtjjur| j jS dS )z;
        Return the return type if it's not empty.
        N)r   return_annotationr   	Signaturer!   )r   r   r   r   get_return_type8   s
   z$_AnnotationExtractor.get_return_typeN)__name__
__module____qualname____doc__	__slots__r   r#   r&   r   r   r   r   r      s    r   c                     s   t rdd } | S dd }zf|j}|jdks|jdkrttjdkr&dd } n4|jg}||j	 |
|j|j|j|j|j|j|j|j|j|j|j|j|jg tj|   fd	d} d
d }| jd }| |d |jdkrptW | S  ty}   t Y S w )z|Return a function of two arguments (cell, value) which sets
    the value stored in the closure cell `cell` to `value`.
    c                 S   s   |  |f d S r   )__setstate__cellvaluer   r   r   set_closure_cellM   s   z/make_set_closure_cell.<locals>.set_closure_cellc                    s   |  d S r   r   )r/   force_x_to_be_a_cellr   xr   set_first_cellvar_toU   s   z3make_set_closure_cell.<locals>.set_first_cellvar_tor2   r   )r      c                 S   s
   || _ d S r   )cell_contentsr-   r   r   r   r0   j   s   
c                    s    t  i dd| f}|| d S )Nsetterr   )typesFunctionType)r.   r/   r7   set_first_freevar_coder   r   r0      s   c                     s   d   fdd} | S )Nc                      s    S r   r   r   r2   r   r   func   s   z@make_set_closure_cell.<locals>.make_func_with_cell.<locals>.funcr   )r<   r   r2   r   make_func_with_cell   s   z2make_set_closure_cell.<locals>.make_func_with_cellr   d   )PYPY__code__co_cellvarsco_freevarsAssertionErrorsysversion_infoco_argcountappendco_kwonlyargcountextend
co_nlocalsco_stacksizeco_flagsco_code	co_constsco_namesco_varnamesco_filenameco_nameco_firstlineno	co_lnotabr8   CodeType__closure__r6   	Exceptionr   )r0   r4   cor   r=   r.   r   r:   r   make_set_closure_cellE   sP   





rY   )r   platformrD   	threadingr8   r
   collections.abcr   r   python_implementationr?   rE   PY310PY_3_12_PLUSr   r   rY   r0   localrepr_contextr   r   r   r   <module>   s   
(]