o
    ïyAfì	  ã                   @   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 razd d
lmZ W n ey`   eZY nw 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   s2   z	t  |¡| _W d S  ttfy   d | _Y d S w )N)ÚinspectÚ	signaturer   Ú
ValueErrorÚ	TypeError)ÚselfÚcallable© r   ú1/usr/lib/python3.10/site-packages/attr/_compat.pyÚ__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_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u r| jS dS )zDIf this is a generic class (A[str]), return the generic base for it.N)Ú	__class__r   Ú
__origin__)Ú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