
    h                         S SK r S SKrS SKJrJrJrJrJrJrJ	r	J
r
  \ R                  S 5       r " S S5      r " S S\5      rS rS	 rS
 rS rS rS rS rS rS rS rS rg)    N)LinearMaxoutModelShimchaindeserialize_attrserialize_attr
with_arrayc                      [        SS5      $ )N      )r        T/home/james-whalen/.local/lib/python3.13/site-packages/thinc/tests/test_serialize.pylinearr      s    !Q<r   c                   $    \ rS rSrSrS rS rSrg)SerializableAttr   fooc                 8    U R                   R                  S5      $ Nutf8valueencodeselfs    r   to_bytesSerializableAttr.to_bytes       zz  ((r   c                 8    UR                  S5       S3U l        U $ Nr   z from bytesdecoder   r   datas     r   
from_bytesSerializableAttr.from_bytes       F+,K8
r   r   N)__name__
__module____qualname____firstlineno__r   r   r'   __static_attributes__r   r   r   r   r      s    E)r   r   c                   (    \ rS rSrSrSrS rS rSrg)SerializableShim    testshimshimdatac                 8    U R                   R                  S5      $ r   r   r   s    r   r   SerializableShim.to_bytes$   r    r   c                 8    UR                  S5       S3U l        U $ r"   r#   r%   s     r   r'   SerializableShim.from_bytes'   r)   r   r*   N)	r+   r,   r-   r.   namer   r   r'   r/   r   r   r   r1   r1       s    DE)r   r1   c                    U R                   R                  SS5      U R                   R                  SS5      /n[        U 5      R                  5       n[        R
                  " U5      n[        R                  " U5      nUR                  U5      n[        U5      S:X  d   eUS   R                  US   R                  S   U R                  S5      4:X  d   eUS   R                  US   R                  S   U R                  S5      4:X  d   eg )N   r      r   nO   )opsalloc2fr
   
initializesrslypickle_dumpspickle_loadspredictlenshapeget_dim)r   XsmodelpickledloadedYss         r   test_pickle_with_flattenrN   ,   s    
**

Q
"FJJ$6$6q!$<	=Bv))+E  'G(F		Br7a<<a5;;2a5;;q>6>>$+?@@@@a5;;2a5;;q>6>>$+?@@@@r   c                     [        SSSS9R                  5       n U R                  S5      nUS-  nU R                  5       nU R                  S5      nUS-  nU R	                  U5      n U R                  S5      S   S:X  d   eg )Nr   
   r;   nPbr>   r   r   )r   rA   	get_paramr   r'   rJ   rS   r&   s      r   !test_simple_model_roundtrip_bytesrW   7   s    1bQ**,EAFA>>DAFAT"E??3%***r   c                      [        SSSS9n [        SSSS9nU R                  5       nUR                  U5      nUR                  5       nX#:X  d   e[        U5      [        U5      :X  d   eg)zFEnsure that serialization of non-initialized weight matrices goes finer   rP   r;   rQ   N)r   r   r'   rF   )model1model2data1data2s       r   (test_simple_model_roundtrip_bytes_lengthr]   B   sf    Ara FAra FOOEu%FOOE>>u:U###r   c                     S n [        5       nUR                  S:X  d   eUR                  5       S:X  d   e[        SU SU0S9nUR	                  5         [
        R                  " [         5      S 5       n[        R                  " [         5      S 5       nUR                  5       nUR                  U5      nSUR                  ;   d   eUR                  S   R                  S:X  d   eg )	Nc                     US 4$ )Nc                     U $ Nr   dYs    r   <lambda>Xtest_simple_model_roundtrip_bytes_serializable_attrs.<locals>.<lambda>.<locals>.<lambda>P       Br   r   rJ   Xis_trains      r   rd   Ftest_simple_model_roundtrip_bytes_serializable_attrs.<locals>.<lambda>P   	    a%7r   r      footestattrsc                 "    UR                  5       $ ra   r   _r   r9   rJ   s       r   serialize_attr_customStest_simple_model_roundtrip_bytes_serializable_attrs.<locals>.serialize_attr_customW       ~~r   c                 4    [        5       R                  U5      $ ra   r   r'   rr   s       r   deserialize_attr_customUtest_simple_model_roundtrip_bytes_serializable_attrs.<locals>.deserialize_attr_custom[       !,,U33r   foo from bytes)
r   r   r   r   rA   r	   registerr   r'   ro   )fwdattrrJ   rt   ry   model_bytess         r   4test_simple_model_roundtrip_bytes_serializable_attrsr   O   s    
7CD::==?f$$$&#fd^4E	-.  /  /04 14 .."K[)EU[[   ;;v$$(8888r   c                  T   [        [        SSSS9[        SS5      5      R                  5       n U R                  S   R	                  S5      nUS-  nU R                  S   R	                  S5      nUS-  nU R                  5       nU R                  S   R	                  S5      nUS-  nU R                  S   R	                  S5      nUS-  nU R                  U5      n U R                  S   R	                  S5      S	   S:X  d   eU R                  S   R	                  S5      S	   S:X  d   eg 
Nr   rP   r;   rQ   r   r   rS   r>   rT   r   r   rA   layersrU   r   r'   rV   s      r    test_multi_model_roundtrip_bytesr   e   s   &B1%va|4??AEQ!!#&AFAQ!!#&AFA>>DQ!!#&AFAQ!!#&AFAT"E<<?$$S)$/1444<<?$$S)$/1444r   c                     [        [        SSSS9[        SS5      5      R                  5       n U R                  S   R	                  S5      nUS-  nU R                  S   R	                  S5      nUS-  nU R                  5       n[        [        SS S9[        S S95      nUR                  U5      nUR                  S   R	                  S5      S	   S:X  d   eUR                  S   R	                  S5      S	   S:X  d   eg r   r   )rJ   rS   r&   rZ   s       r   "test_multi_model_load_missing_dimsr   u   s    &B1%va|4??AEQ!!#&AFAQ!!#&AFA>>D6!%v7Ft$F==%%c*40A555==%%c*40A555r   c                     S n [        S 5      n[        SX/S9n[        [        SS5      U[	        SS5      5      nUR                  5         UR                  S   R                  S   R                  S:X  d   eUR                  5       n[        R                  " [        5         [        SS5      R                  U5        S S S 5        [        S 5      n[        SX/S9n[        [        SS5      U[	        SS5      5      R                  U5      nUR                  S   R                  S   R                  S	:X  d   eg ! , (       d  f       N= f)
Nc                     US 4$ )Nc                     U $ ra   r   rb   s    r   rd   Ntest_serialize_model_shims_roundtrip_bytes.<locals>.<lambda>.<locals>.<lambda>   rf   r   r   rg   s      r   rd   <test_serialize_model_shims_roundtrip_bytes.<locals>.<lambda>   rk   r   	shimmodel)shimsr;   r   r>   r   r4   zshimdata from bytes)r1   r   r   r   r   rA   r   r   r   r   pytestraises
ValueErrorr'   )r~   	test_shim
shim_modelrJ   r   	new_models         r   *test_serialize_model_shims_roundtrip_bytesr      s   
7C &I{C{;J&A,
F1aL9E	<<?  #))Z777.."K	z	"q!, 
# &I{C{;JfQlJq!=HHUIA$$Q'--1FFFF 
#	"s   !D88
Ec                  <   S n [        SU 5      n[        SXS S.S9R                  5       n[        R                  " [        5         UR                  5         S S S 5        [        SXS S.U/S9nUR                  S:X  d   eUR                  5       n[        R                  " [        5         [        SU 5      R                  U5        S S S 5        [        SX/S9nUR                  U5        UR                  S:X  d   eg ! , (       d  f       N= f! , (       d  f       NN= f)Nc                     US 4$ )Nc                     U $ ra   r   rb   s    r   rd   Gtest_serialize_refs_roundtrip_bytes.<locals>.<lambda>.<locals>.<lambda>   rf   r   r   rg   s      r   rd   5test_serialize_refs_roundtrip_bytes.<locals>.<lambda>   rk   r   arm   )r   rS   )refs)r   r   )r   )r   rA   r   r   r   r   	ref_namesr'   )r~   model_arJ   r   r   s        r   #test_serialize_refs_roundtrip_bytesr      s    
7CCoG&#$=>IIKE	z	" 
#&#$=wiPE??j(((.."K	z	"fc%%k2 
#fc)4I%*,,, 
#	"
 
#	"s   C<)D<
D

Dc                     S n SS0n[        SXS9R                  5       n[        UR                  S   US   SU5      nU[        R
                  " S5      :X  d   e[        SU SS0S9n[        UR                  S   USU5      nUS:X  d   e[        R                  " [        5      S 5       n[        R                  " [        5      S 5       nS[        5       0n[        SXS9n[        UR                  S   US   SU5      nUS:X  d   e[        SXS9n	U	R                  S   R                  S:X  d   e[        U	R                  S   USU	5      nUR                  S	:X  d   eg )
Nc                     US 4$ )Nc                     U $ ra   r   rb   s    r   rd   8test_serialize_attrs.<locals>.<lambda>.<locals>.<lambda>   rf   r   r   rg   s      r   rd   &test_serialize_attrs.<locals>.<lambda>   rk   r   rm   r   rn    c                 "    UR                  5       $ ra   rq   rr   s       r   rt   3test_serialize_attrs.<locals>.serialize_attr_custom   rv   r   c                 4    [        5       R                  U5      $ ra   rx   rr   s       r   ry   5test_serialize_attrs.<locals>.deserialize_attr_custom   r{   r   rl   r|   )
r   rA   r	   ro   rB   msgpack_dumpsr   r}   r   r   )
r~   ro   rY   
bytes_attrrZ   resultrt   ry   model3model4s
             r   test_serialize_attrsr      sn   
7CUOE63,779FV 4eFmVVTJ,,U333363vrl3Ffll62JOFU?? -.  /  /04 14 %'(E63,FV 4eFmVVTJ63,F<<%%...fll62JOF<<++++r   c                  J   [        SSSS9R                  5       n U R                  5       nU R                  U5      (       d   e[        SSSS9R                  U5      (       d   e[        SSSS9R                  U5      (       a   e[        SSS9R                  U5      (       d   eg )Nr   rP   r;   rQ   )r   rA   to_dictcan_from_dict)rJ   
model_dicts     r   test_simple_model_can_from_dictr      s    1bQ**,EJz****!RA,,Z8888b!"00<<<<!?((4444r   c                     [        [        SSSS9[        SS5      5      R                  5       n U R                  5       nU R	                  U5      (       d   e[        [        SSSS9[        SS5      5      R	                  U5      (       d   e[        [        SSSS9[        SS5      5      nUR	                  U5      (       a   eg )Nr   rP   r;   rQ   r   )r   r   rA   r   r   )rJ   r   resizeds      r   test_multi_model_can_from_dictr      s    &B1%va|4??AEJz****2!$fQl3AA*MMMMF1bQ'16G$$Z00000r   )r   rB   	thinc.apir   r   r   r   r   r   r	   r
   fixturer   r   r1   rN   rW   r]   r   r   r   r   r   r   r   r   r   r   r   <module>r      s     	 	 	   	t 	A+
$9,5 6G - ,:51r   