o
    vqi                  
   @   s|  d dl Z d dlZd dlmZmZ d dlm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 dd Ze Zdd	 Zd
d ZG dd deZe Zefdedeeedf ef deeedf ef fddZdededeeef fddZdd Zdd Zdd Zdd Zdd  Z d!d" Z!d#d$ Z"d%d& Z#d'd( Z$d)d* Z%d+d, Z&d-e'fd.d/Z(d0d1 Z)d2e*fd3d4Z+ed5e
d6Z,dS )7    N)datetimetimezone)Counter)is_dataclass)	
CollectionMappingOptionalTypeVarAnyTypeTupleUnioncastc                 C   s   t jjdkrKz| j}W n& ty1   z| j}W n ty"   | }Y nw |du r)| n|}Y |S Y |S w z|du r:| jn|}W |S  tyJ   | }Y |S w | j}|S )z$More spaghetti logic for 3.6 vs. 3.7   N)sysversion_infominor	__extra__AttributeError
__origin__)type_Zcons r   ]/home/app/PaddleOCR-VL/.venv_paddleocr/lib/python3.10/site-packages/dataclasses_json/utils.py_get_type_cons
   s.   


r   c                 C   sz   z| j }W n ty   t}Y nw tjjdkr5z| j}W n ty(   | }Y |S w |dtfv r1| n|}|S |tu r;| }|S )zYSome spaghetti logic to accommodate differences between 3.6 and 3.7 in
    the typing apir   N)r   r   _NO_TYPE_ORIGINr   r   r   r   )r   originr   r   r   _get_type_origin#   s"   

r   c                    sP   zt  fdd|D }W |S  ty   Y dS  ty'    jd u r&Y dS  w )Nc                 3   s    | ]}| j v V  qd S N)__args__).0argr   r   r   	<genexpr>;   s    z_hasargs.<locals>.<genexpr>F)allr   	TypeErrorr   )r   argsresr   r!   r   _hasargs9   s   	
r'   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
_NoArgsc                 C      dS NFr   selfr   r   r   __bool__H      z_NoArgs.__bool__c                 C   r)   )Nr   r   r+   r   r   r   __len__K   r.   z_NoArgs.__len__c                 C   s   | S r   r   r+   r   r   r   __iter__N   r.   z_NoArgs.__iter__c                 C   s   t r   )StopIterationr+   r   r   r   __next__Q   r.   z_NoArgs.__next__N)__name__
__module____qualname__r-   r/   r0   r2   r   r   r   r   r(   G   s
    r(   tpdefault.returnc                 C   s   t | dr| jd ur| jS |S )Nr   )hasattrr   )r6   r7   r   r   r   _get_type_argsX   s   

r:   indexc              
   C   sH   t | }|tur"ztttdf || W S  tttfy!   Y tS w tS )N.)r:   _NO_ARGSr   r   r   r$   
IndexErrorNotImplementedError)r6   r;   _argsr   r   r   _get_type_arg_param`   s   r@   c                 C   s&   zt | |}W |S  ty   Y dS w r*   )
isinstance	Exception)otresultr   r   r   _isinstance_safek   s   rF   c                 C   s:   zt | |W S  ty   t| rt| | Y S d Y S w r*   )
issubclassrB   _is_new_type_is_new_type_subclass_safe)cls	classinfor   r   r   _issubclass_safet   s   rL   c                 C   s<   t | dd }|rt||S zt| |W S  ty   Y dS w )N__supertype__F)getattrrI   rG   rB   )rJ   rK   Z
super_typer   r   r   rI   }   s   
rI   c                 C   s   t | o	t| dS )NrM   )inspect
isfunctionr9   r!   r   r   r   rH      s   rH   c                 C   s    t | tpt| td p| tu S r   )rL   r   r'   typer
   r!   r   r   r   _is_optional   s
   
rR   c                 C      t t| tS r   )rL   r   r   r!   r   r   r   _is_counter      rT   c                 C   rS   r   )rL   r   r   r!   r   r   r   _is_mapping   rU   rV   c                 C   rS   r   )rL   r   r   r!   r   r   r   _is_collection   rU   rW   c                 C   rS   r   )rL   r   r   r!   r   r   r   	_is_tuple   rU   rX   c                 C   s   t t| tot | t S r   )rL   r   r   strr!   r   r   r   _is_nonstr_collection   s   
rZ   c                 C   s   t t| S r   )r   r   r!   r   r   r   _is_generic_dataclass   s   r[   	timestampc                 C   s$   t tj j}t j| |d}|S )N)tz)r   nowr   utc
astimezonetzinfofromtimestamp)r\   r]   dtr   r   r   _timestamp_to_dt_aware   s   rd   c              	   C   sR   z| j d u r	W d S | j d }W n ttfy   Y d S w |d u s%|jd u r'd S |S )N	undefined)Zdataclass_json_configr   KeyErrorvalue)rJ   Zaction_enumr   r   r    _undefined_parameter_action_safe   s   
rh   usagec                 C   s   t | }| }|du r|dkr|S | jS |dkr!|jj| |dS |dkr-|jj| |dS |dkr8|jj| dS |dkrC|jj| dS td	| d
)zd
    Checks if an undefined parameters action is defined and performs the
    according action.
    Ninitfrom)rJ   kvsto)objrl   dump)rn   z=usage must be one of ['to', 'from', 'dump', 'init'], but is '')	rh   lower__init__rg   Zhandle_from_dictZhandle_to_dictZhandle_dumpZcreate_init
ValueError)rJ   rl   ri   Zundefined_parameter_actionr   r   r   !_handle_undefined_parameters_safe   s*   rt   CatchAllVar)bound)-rO   r   r   r   collectionsr   dataclassesr   typingr   r   r   r	   r
   r   r   r   r   r   objectr   r   r'   r(   r<   r:   intr@   rF   rL   rI   rH   rR   rT   rV   rW   rX   rZ   r[   floatrd   rh   rY   rt   ru   r   r   r   r   <module>   s>    ,
		