o
    "i                     @  sH   d dl mZ d dlmZ ddlmZmZmZ dddZi fdddZ	dS )    )annotations)TypeVar   )get_args
get_origin
is_genericreturnboolc                 C  s.   z|   W S  ty   t| dddu Y S w )a  Does `tvar` have a default?

    In CPython 3.13+ and typing_extensions>=4.12.0:
    - TypeVars have a `no_default()` method for detecting
      if a TypeVar has a default
    - TypeVars with `default=None` have `__default__` set to `None`
    - TypeVars with no `default` parameter passed
      have `__default__` set to `typing(_extensions).NoDefault

    On typing_exensions<4.12.0:
    - TypeVars do not have a `no_default()` method for detecting
      if a TypeVar has a default
    - TypeVars with `default=None` have `__default__` set to `NoneType`
    - TypeVars with no `default` parameter passed
      have `__default__` set to `typing(_extensions).NoDefault
    __default__N)has_defaultAttributeErrorgetattr)tvar r   T/var/www/html/premium_crap/venv/lib/python3.10/site-packages/cattrs/gen/_generics.py_tvar_has_default   s
   
r   cltypeold_mappingdict[str, type]c                 C  s   t |}t| }|dur5tt| dd}|du rt |S t|t| D ]\}}t|tr-q#|||j< q#|S t| r|| j	}|D ]=}t
|dsFq>|j}	t
|jdrT|jj}
ntdd |	D rkdd |	D }t| \}
}	nq>t|
|	D ]	\}}|||j< qqq>|S )zCGenerate a mapping of typevars to actual types for a generic class.N__parameters____args__c                 s  s    | ]}t |V  qd S )N)r   .0base_argr   r   r   	<genexpr>>   s    z#generate_mapping.<locals>.<genexpr>c                 S  s   g | ]}t |r||jfqS r   )r   r
   r   r   r   r   
<listcomp>C   s    z$generate_mapping.<locals>.<listcomp>)dictr   r   zipr   
isinstancer   __name__r   __orig_bases__hasattrr   
__origin__r   any)r   r   mappingorigin
parameterspt
orig_basesbase	base_argsbase_paramsmapping_paramsparamargr   r   r   generate_mapping    s:   


r1   N)r   r	   )r   r   r   r   r   r   )

__future__r   typingr   _compatr   r   r   r   r1   r   r   r   r   <module>   s
    
