a
    °mJhÌ
  ã                   @   sú   U d dl Z d dlmZ d dlmZmZmZmZmZm	Z	m
Z
mZmZmZ ddlmZmZmZ eeef ed< e jdk r’ee
eeee	eeeeeeiZni Zeeef eedœd	d
„Zedœdd„Zedœdd„Zedœdd„Zedœdd„Zedœdd„ZdS )é    N)Údeque)
ÚAnyÚDictÚGenericÚTypeÚget_type_hintsÚTupleÚListÚSetÚ	FrozenSetÚDequeé   )Úget_self_type_hintsÚ
is_genericÚis_generic_concreteÚCOMPAT_ORIGINS)é   é	   )ÚargsÚtype_Úreturnc                 C   sT   |   ||¡}t|ƒrPg }|jD ]}| t| |ƒ¡ qt  |j|j¡}|t|ƒ }|S ©N)Úgetr   Ú__args__ÚappendÚfill_type_argsr   Ú
__origin__Útuple)r   r   Z	type_argsÚargÚorigin© r    úL/var/www/shaz/venv/lib/python3.9/site-packages/dataclass_factory/generics.pyr      s    
r   ©r   c                 C   s(   t | ƒrt| ƒS t| ƒr t| ƒS t| ƒS r   )r   Úresolve_concrete_hintsr   Úresolve_generic_hintsr   r"   r    r    r!   Úresolve_hints$   s
    r%   c                 C   sV   | t u ri S t| dƒsi S i }t| jƒD ]}t|ƒ}| |¡ q(t| ƒ}| |¡ |S )NÚ__orig_bases__)r   ÚhasattrÚreversedr&   r%   Úupdater   )r   ÚresÚbaseZ
base_hintsZ
self_hintsr    r    r!   r$   ,   s    

r$   c                    s@   t | jƒ}|si S tt| jj| jƒƒ‰ ‡ fdd„| ¡ D ƒ}|S )Nc                    s   i | ]\}}|t ˆ |ƒ“qS r    ©r   ©Ú.0Únamer   ©r   r    r!   Ú
<dictcomp>?   s   ÿz*resolve_concrete_hints.<locals>.<dictcomp>)r$   r   ÚdictÚzipÚ__parameters__r   Úitems)r   Úhintsr*   r    r0   r!   r#   :   s    

þr#   c                    sL   t | ƒst| jƒS t| jjƒ}tt| jjj| jjƒƒ‰ ‡ fdd„| 	¡ D ƒS )Nc                    s   i | ]\}}|t ˆ |ƒ“qS r    r,   r-   r0   r    r!   r1   K   s   ÿz&resolve_init_hints.<locals>.<dictcomp>)
r   r   Ú__init__r   r2   r3   Ú__self__r4   r   r5   )r   r6   r    r0   r!   Úresolve_init_hintsF   s    

þr9   c                    sV   t | ƒs| S | j}t |ƒs| S tt|j| jƒƒ‰ t‡ fdd„|jD ƒƒ}t|j| ƒS )zÂ
    This function normalizes generics created via aliases.
    E.g. `List[List[T]][int]` should replaced via `List[List[int]]`

    On each call it normalizes one level, so it is recurrent
    c                 3   s   | ]}t ˆ |ƒV  qd S r   r,   )r.   Úar0   r    r!   Ú	<genexpr>^   ó    z$fix_generic_alias.<locals>.<genexpr>)r   r   r2   r3   r4   r   r   Úfix_generic_alias)r   r   Zorigin_argsr    r0   r!   r=   Q   s    r=   ) ÚsysÚcollectionsr   Útypingr   r   r   r   r   r   r	   r
   r   r   Ztype_detectionr   r   r   Ú__annotations__Úversion_infoÚlistr2   r   ÚsetÚ	frozensetr   r   r%   r$   r#   r9   r=   r    r    r    r!   Ú<module>   s&   
0
ú	