U
    ª€lj�
  ã                   @   sò   d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZ e 	¡ dkZ
ejdd… dkZejdd… dkZejdd… dkZejdd… d	kZejdd… d
kZejdd… dkZerÈd dlZejZndd„ ZG dd„ dƒZe ¡ Zdd„ ZdS )é    N)ÚMappingÚSequence)Ú_GenericAliasÚPyPyé   )é   é	   )r   é
   )r   é   )r   é   )r   é   )r   é   c                 C   s   | j  di ¡S )z,
        Get annotations for *cls*.
        Ú__annotations__)Ú__dict__Úget)Úcls© r   ú0/tmp/pip-unpacked-wheel-6yt30op9/attr/_compat.pyÚ_get_annotations   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   s4   zt  |¡| _W n ttfk
r.   d | _Y nX d S )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k	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_type1   s    
z)_AnnotationExtractor.get_first_param_typec                 C   s"   | j r| j jtjjk	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_type>   s    ÿþz$_AnnotationExtractor.get_return_typeN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r   r%   r(   r   r   r   r   r   #   s
   r   c                 C   s   | j tkr| jS dS )zDIf this is a generic class (A[str]), return the generic base for it.N)Ú	__class__r   Ú
__origin__)Zclr   r   r   Úget_generic_baseZ   s    
r0   )r   ÚplatformÚsysÚ	threadingÚcollections.abcr   r   Útypingr   Úpython_implementationZPYPYÚversion_infoZPY_3_9_PLUSZPY_3_10_PLUSZPY_3_11_PLUSZPY_3_12_PLUSZPY_3_13_PLUSZPY_3_14_PLUSZannotationlibZget_annotationsr   r   ÚlocalZrepr_contextr0   r   r   r   r   Ú<module>   s&   4