o
    b                     @  s  d dl mZ d dlZd dlmZ d dlmZmZmZm	Z	m
Z
 d dlmZmZmZ d dlmZ d dlmZmZmZmZ d dlmZ ejdd	 d
kZerQd'ddZnd dlmZ g dZd(ddZd(ddZd(ddZd(ddZd)d*d"d#Z eddd$d%Z!e e!d$d& e!j"Z"e!j#Z#dS )+    )annotationsN)partial)AnyCallableTupleTypecast)fieldshasresolve_types)GenConverter)AttributeOverridemake_dict_structure_fnmake_dict_unstructure_fnoverride)	Transform   )      cl	Type[Any]returnr   c                 C  s   t | dd S )N
__origin__)getattr)r    r   4/usr/lib/python3/dist-packages/ufoLib2/converters.py
get_origin   s   r   )r   )register_hooks	structureunstructureclsboolc                 C  s   t | dd}|dd dkS )N
__module__ .r   ZufoLib2)r   split)r    modr   r   r   is_ufoLib2_class#   s   r'   c                 C  s   t | ot| ptt| S N)r'   r
   r   r    r   r   r   is_ufoLib2_attrs_class(      r*   c                 C     t | ot| dS )N_unstructurer'   hasattrr)   r   r   r   (is_ufoLib2_class_with_custom_unstructure,      r0   c                 C  r,   )N
_structurer.   r)   r   r   r   &is_ufoLib2_class_with_custom_structure0   r1   r3   Tconvr   allow_bytesNonec                   s   d"fd	d
}d#fdd}d#fdd}d$dd} tt|tdd  t| ttt t| 	tt|t
dd 	t| |smddlm m d%fdd}d& fd d!}t| t| d S d S )'Nr    r   gen_fn#Callable[..., Callable[[Any], Any]]structuringr!   r   Callable[[Any], Any]c              	     s   t | }|d u r
| }t|}t| i }|r! j|d<  j|d< n j|d< |D ]:}|j jv r7 j|j }n&t|j	
d|jd u pBd |j	
d|jd dkrU|jdd  nd |j d	}|||j< q(||  fi |S )
NZ_cattrs_forbid_extra_keysZ _cattrs_prefer_attrib_convertersZ_cattrs_omit_if_defaultomit_if_defaultZrename_attrr   _   )r;   renameZomit)r   r	   r   forbid_extra_keysZ_prefer_attrib_convertersr;   typeZtype_overridesr   ZmetadatagetdefaultnameZinit)r    r7   r9   baseZattribskwargsaZattrib_overrider4   r   r   attrs_hook_factory5   s0   

 	z*register_hooks.<locals>.attrs_hook_factoryc                      t | j dS N)Z	converter)r   r-   r)   rG   r   r   custom_unstructure_hook_factory^      z7register_hooks.<locals>.custom_unstructure_hook_factoryc                   rI   rJ   )r   r2   r)   rG   r   r   custom_structure_hook_factorya   rL   z5register_hooks.<locals>.custom_structure_hook_factorytr   Tuple[float]c                 S  s   t tt t| S r(   )r   r   floattuple)rN   r   r   r   unstructure_transformd   r1   z-register_hooks.<locals>.unstructure_transformF)r7   r9   Tr   )	b64decode	b64encodevbytesstrc                   s   | r	 |  dS d dS )N    utf8)decode)rU   )rT   r   r   unstructure_bytes   r+   z)register_hooks.<locals>.unstructure_bytesr<   r   c                   s    | S r(   r   )rU   r<   )rS   r   r   structure_bytes   s   z'register_hooks.<locals>.structure_bytes)r    r   r7   r8   r9   r!   r   r:   )r    r   r   r:   )rN   r   r   rO   )rU   rV   r   rW   )rU   rW   r<   r   r   rV   )Z!register_unstructure_hook_factoryr*   r   r   r0   Zregister_unstructure_hookr   r   r   Zregister_structure_hook_factoryr   r3   base64rS   rT   rV   Zregister_structure_hook)r4   r5   rH   rK   rM   rR   r[   r\   r   )rS   rT   r4   r   r   4   s<   )
r   F)r;   r?   Zprefer_attrib_converters)r5   )r   r   r   r   )r    r   r   r!   )T)r4   r   r5   r!   r   r6   )$Z
__future__r   sys	functoolsr   typingr   r   r   r   r   attrr	   r
   r   Zcattrr   Z	cattr.genr   r   r   r   ZfontTools.misc.transformr   version_infoZis_py37r   __all__r'   r*   r0   r3   r   Zdefault_converterr   r   r   r   r   r   <module>   s4    



U
