
     #e                    x   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j0                  dd	 d
k(  ZerddZnd dlmZ g dZddZddZddZddZdddZ  eddd      Z! e e!d       e!jD                  Z"e!jF                  Z# eddd      Z$ e e$d       y)    )annotationsN)partial)AnyCallableTupleTypecast)fieldshasresolve_types)	Converter)AttributeOverridemake_dict_structure_fnmake_dict_unstructure_fnoverride)	Transform   )      c                    t        | dd       S )N
__origin__)getattr)cls    4/usr/lib/python3/dist-packages/ufoLib2/converters.py
get_originr      s    r<..    )r   )register_hooks	structureunstructurec                J    t        | dd      }|j                  d      d   dk(  S )N
__module__ .r   ufoLib2)r   split)clsmods     r   is_ufoLib2_classr(   #   s(    sL"-C99S>!	))r   c                ^    t        |       xr! t        |       xs t        t        |             S N)r(   r   r   r&   s    r   is_ufoLib2_attrs_classr,   (   s$    C Gc#h&F#jo2FGr   c                4    t        |       xr t        | d      S )N_unstructurer(   hasattrr+   s    r   (is_ufoLib2_class_with_custom_unstructurer1   ,   s    C AWS.%AAr   c                4    t        |       xr t        | d      S )N
_structurer/   r+   s    r   &is_ufoLib2_class_with_custom_structurer4   0   s    C ?WS,%??r   Tc                   	 	 	 	 	 	 	 	 	 d fd}d fd}d fd}dd} j                  t        t        |t        d              j                  t        |        j                  t        t        t           t              |        j                  t        t        |t        d              j                  t        |       |sAdd	lmm	 d	fd
}dfd} j                  t        |        j!                  t        |       y y )Nc           
     j   t        |       }|| }t        |      }t        |       dj                  i}|rj                  |d<   j
                  |d<   nj                  |d<   |D ]  }|j                  j                  v rj                  |j                     }n~t        |j                  j                  d|j                  d u xs d       |j                  j                  d|j                  d   dk(  r|j                  d	d  nd       |j                   
      }|||j                  <     || fi |S )N_cattrs_detailed_validation_cattrs_forbid_extra_keys _cattrs_prefer_attrib_converters_cattrs_omit_if_defaultomit_if_defaultrename_attrr   _   )r;   renameomit)r   r
   r   detailed_validationforbid_extra_keys_prefer_attrib_convertersr;   typetype_overridesr   metadatagetdefaultnameinit)	r&   gen_fnstructuringbaseattribskwargsaattrib_overrideconvs	           r   attrs_hook_factoryz*register_hooks.<locals>.attrs_hook_factory5   s9    #<D,d)4+C+C7
 262H2HF./9=9W9WF56040D0DF,- 	-Avv,,, #'"5"5aff"= #+$%JJNN)199+<+D% ::>>%QVVAY#5Eqvvabz4 VV# -F166N-	-0 c4*6**r   c                2    t        | j                        S N)	converter)r   r.   r&   rR   s    r   custom_unstructure_hook_factoryz7register_hooks.<locals>.custom_unstructure_hook_factory`   s    s''488r   c                2    t        | j                        S rU   )r   r3   rW   s    r   custom_structure_hook_factoryz5register_hooks.<locals>.custom_structure_hook_factoryc   s    s~~66r   c                B    t        t        t           t        |             S r*   )r	   r   floattuple)ts    r   unstructure_transformz-register_hooks.<locals>.unstructure_transformf   s    E%L%(++r   F)rK   rL   Tr   )	b64decode	b64encodec                X    | r |       j                  d      S dj                  d      S )Nr   utf8)decode)vra   s    r   unstructure_bytesz)register_hooks.<locals>.unstructure_bytes   s*    $%IaL66v>>366v>>r   c                     |       S r*    )re   r=   r`   s     r   structure_bytesz'register_hooks.<locals>.structure_bytes   s    Q<r   )r&   	Type[Any]rK   z!Callable[..., Callable[..., Any]]rL   boolreturnzCallable[..., Any])r&   rj   rl   zCallable[[Any], Any])r&   rj   rl   zCallable[[Any, Any], Any])r^   r   rl   zTuple[float])re   bytesrl   str)re   rn   r=   r   rl   rm   )!register_unstructure_hook_factoryr,   r   r   r1   register_unstructure_hookr	   r   r   register_structure_hook_factoryr   r4   base64r`   ra   rm   register_structure_hook)
rR   allow_bytesrS   rX   rZ   r_   rf   ri   r`   ra   s
   `       @@r   r   r   4   s   )+)+ A)+PT)+	)+V97, 	**"+CQVW 	**0' 	""T)_i(*? 	(("+AtT 	((.%
 /	?	  	&&u.?@$$UO< r   F)r;   rB   prefer_attrib_converters)rt   )r   rj   rl   r   )r&   rj   rl   rk   )T)rR   r   rt   rk   rl   None)%
__future__r   sys	functoolsr   typingr   r   r   r   r	   attrsr
   r   r   cattrsr   
cattrs.genr   r   r   r   fontTools.misc.transformr   version_infois_py37r   __all__r(   r,   r1   r4   r   default_converterr   r   binary_converterrh   r   r   <module>r      s    " 
  3 3 , ,   /


2A
&
(
/ "*
HB@T=n " 
  e 4''	++ " 
 T 2r   