o
    i                     @   s   d dl Z d dlZd dlmZmZmZmZmZmZm	Z	m
Z
 e jdd ZG dd dZG dd de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S )    N)LinearMaxoutModelShimchaindeserialize_attrserialize_attr
with_arrayc                   C   s
   t ddS )N      )r    r   r   N/home/ubuntu/.local/lib/python3.10/site-packages/thinc/tests/test_serialize.pylinear   s   
r   c                   @   s    e Zd ZdZdd Zdd ZdS )SerializableAttrfooc                 C      | j dS Nutf8valueencodeselfr   r   r   to_bytes      zSerializableAttr.to_bytesc                 C      | d d| _| S Nr   z from bytesdecoder   r   datar   r   r   
from_bytes      zSerializableAttr.from_bytesN)__name__
__module____qualname__r   r   r!   r   r   r   r   r      s    r   c                   @   s$   e Zd ZdZdZdd Zdd ZdS )SerializableShimtestshimshimdatac                 C   r   r   r   r   r   r   r   r   $   r   zSerializableShim.to_bytesc                 C   r   r   r   r   r   r   r   r!   '   r"   zSerializableShim.from_bytesN)r#   r$   r%   namer   r   r!   r   r   r   r   r&       s
    r&   c                 C   s   | j dd| j ddg}t|  }t|}t|}||}t|dks+J |d j	|d j	d | 
dfks>J |d j	|d j	d | 
dfksQJ d S )N   r      r   nO   )opsalloc2fr	   
initializesrslypickle_dumpspickle_loadspredictlenshapeget_dim)r   XsmodelpickledloadedYsr   r   r   test_pickle_with_flatten,   s   


&*r=   c                  C   sb   t dddd } | d}|d7 }|  }| d}|d8 }| |} | dd dks/J d S )Nr
   
   r*   nPbr-   r   r   )r   r0   	get_paramr   r!   r9   rA   r    r   r   r   !test_simple_model_roundtrip_bytes7   s   


rE   c                  C   sZ   t dddd} t dddd}|  }||}| }||ks!J t|t|ks+J dS )zFEnsure that serialization of non-initialized weight matrices goes finer
   r>   r*   r?   N)r   r   r!   r5   )model1model2data1data2r   r   r   (test_simple_model_roundtrip_bytes_lengthB   s   
rJ   c                  C   s   dd } t  }|jdksJ | dksJ td| d|id}|  tt dd }tt d	d
 }| }||}d|j	v sEJ |j	d jdksOJ d S )Nc                 S      |dd fS )Nc                 S      | S Nr   dYr   r   r   <lambda>P       zXtest_simple_model_roundtrip_bytes_serializable_attrs.<locals>.<lambda>.<locals>.<lambda>r   r9   Xis_trainr   r   r   rP   P       zFtest_simple_model_roundtrip_bytes_serializable_attrs.<locals>.<lambda>r      footestattrsc                 S      |  S rM   r   _r   r)   r9   r   r   r   serialize_attr_customW      zStest_simple_model_roundtrip_bytes_serializable_attrs.<locals>.serialize_attr_customc                 S      t  |S rM   r   r!   r\   r   r   r   deserialize_attr_custom[      zUtest_simple_model_roundtrip_bytes_serializable_attrs.<locals>.deserialize_attr_customfoo from bytes)
r   r   r   r   r0   r   registerr   r!   rY   )fwdattrr9   r^   rb   model_bytesr   r   r   4test_simple_model_roundtrip_bytes_serializable_attrsO   s   


ri   c                  C   s   t tddddtdd } | jd d}|d7 }| jd d}|d7 }|  }| jd d}|d8 }| jd d}|d8 }| |} | jd dd	 dksVJ | jd dd	 dksdJ d S 
Nr
   r>   r*   r?   r   r   rA   r-   rB   r   r   r0   layersrC   r   r!   rD   r   r   r    test_multi_model_roundtrip_bytese   s   
 rm   c                  C   s   t tddddtdd } | jd d}|d7 }| jd d}|d7 }|  }t tdd dtd d}||}|jd dd	 dksJJ |jd dd	 dksXJ d S rj   rk   )r9   rA   r    rG   r   r   r   "test_multi_model_load_missing_dimsu   s   
 rn   c                  C   s   dd } t d }td| |gd}ttdd|tdd}|  |jd jd jd	ks-J |	 }t
t tdd| W d    n1 sIw   Y  t d }td| |gd}ttdd|tdd|}|jd jd jd
ksvJ d S )Nc                 S   rK   )Nc                 S   rL   rM   r   rN   r   r   r   rP      rQ   zNtest_serialize_model_shims_roundtrip_bytes.<locals>.<lambda>.<locals>.<lambda>r   rR   r   r   r   rP      rU   z<test_serialize_model_shims_roundtrip_bytes.<locals>.<lambda>	shimmodel)shimsr*   r   r-   r   r(   zshimdata from bytes)r&   r   r   r   r   r0   rl   rp   r   r   pytestraises
ValueErrorr!   )rf   	test_shim
shim_modelr9   rh   	new_modelr   r   r   *test_serialize_model_shims_roundtrip_bytes   s   rw   c                  C   s   dd } t d| }t d| |d dd }tt |  W d    n1 s)w   Y  t d| |d d|gd}|jdksAJ | }tt t d| | W d    n1 s]w   Y  t d| |gd}|| |jdksvJ d S )	Nc                 S   rK   )Nc                 S   rL   rM   r   rN   r   r   r   rP      rQ   zGtest_serialize_refs_roundtrip_bytes.<locals>.<lambda>.<locals>.<lambda>r   rR   r   r   r   rP      rU   z5test_serialize_refs_roundtrip_bytes.<locals>.<lambda>arW   )rx   rA   )refs)ry   rl   )rl   )r   r0   rq   rr   rs   r   	ref_namesr!   )rf   model_ar9   rh   rv   r   r   r   #test_serialize_refs_roundtrip_bytes   s   


r|   c            
      C   s&  dd } ddi}t d| |d }t|jd |d d|}|tdks&J t d| ddid}t|jd |d|}|dks?J ttdd }ttd	d
 }dt i}t d| |d}t|jd |d d|}|dksoJ t d| |d}	|	jd j	dksJ t|	jd |d|	}|j	dksJ d S )Nc                 S   rK   )Nc                 S   rL   rM   r   rN   r   r   r   rP      rQ   z8test_serialize_attrs.<locals>.<lambda>.<locals>.<lambda>r   rR   r   r   r   rP      rU   z&test_serialize_attrs.<locals>.<lambda>rW   r   rX    c                 S   rZ   rM   r[   r\   r   r   r   r^      r_   z3test_serialize_attrs.<locals>.serialize_attr_customc                 S   r`   rM   ra   r\   r   r   r   rb      rc   z5test_serialize_attrs.<locals>.deserialize_attr_customrV   rd   )
r   r0   r   rY   r1   msgpack_dumpsr   re   r   r   )
rf   rY   rF   
bytes_attrrG   resultr^   rb   model3model4r   r   r   test_serialize_attrs   s(   


r   c                  C   sr   t dddd } |  }| |sJ t dddd|s J t dddd|r,J t ddd|s7J d S )Nr
   r>   r*   r?   )r   r0   to_dictcan_from_dict)r9   
model_dictr   r   r   test_simple_model_can_from_dict   s   r   c                  C   s   t tddddtdd } |  }| |sJ t tddddtdd|s,J t tddddtdd}||r@J d S )Nr
   r>   r*   r?   r   )r   r   r0   r   r   )r9   r   resizedr   r   r   test_multi_model_can_from_dict   s   $r   )rq   r1   	thinc.apir   r   r   r   r   r   r   r	   fixturer   r   r&   r=   rE   rJ   ri   rm   rn   rw   r|   r   r   r   r   r   r   r   <module>   s$    (
