U
    kufì	  ã                   @   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k rÆzd d
lmZ W qÒ ek
rÂ   eZY qÒX nd d
lmZ G dd„ dƒZe ¡ Zdd„ ZdS )é    N)ÚMappingÚSequence)Ú_GenericAliasÚPyPyé   )é   é   )r   é	   )r   é
   )r   é   )ÚProtocolc                   @   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Úcallable© r   ú0/tmp/pip-unpacked-wheel-563mi0su/attr/_compat.pyÚ__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_type*   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_type7   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_baseS   s    
r*   )r   ÚplatformÚsysÚ	threadingÚcollections.abcr   r   Útypingr   Úpython_implementationZPYPYÚversion_infoZPY_3_8_PLUSZPY_3_9_PLUSZPY310ZPY_3_12_PLUSZtyping_extensionsr   ÚImportErrorÚobjectr   ÚlocalZrepr_contextr*   r   r   r   r   Ú<module>   s&   
4