
    h                        S SK Jr  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  S SKJrJr  S SKJrJrJr  S SKJr  SSKJrJr  \R2                  S	\4S
 j5       r\R2                  S	\4S j5       r\R2                  S	\4S j5       r\R2                  S	\4S j5       r\R2                  S\S	\4S j5       r\R2                  S\S\S	\4S j5       r \R2                  S\S\S\4S j5       r!\R2                  S	\\\4   4S j5       r"\RF                  RI                  \(       + SS9S 5       r%\RF                  RI                  \(       + SS9S 5       r&\RF                  RI                  \(       + SS9S\\\4   S\S\4S j5       r'\RF                  RI                  \(       + SS9S\\\4   S\4S j5       r(\RF                  RI                  \(       + SS9S\\\4   S\S\S\4S j5       r)\RF                  RI                  \(       + SS9S\\\4   S\4S  j5       r*\RF                  RI                  \(       + SS9S\\\4   S\4S! j5       r+\RF                  RI                  \(       + SS9S\\\4   S\4S" j5       r,\RF                  RI                  \(       + SS9S\\\4   S\4S# j5       r-\RF                  RI                  \(       + SS9S\4S$ j5       r.\RF                  RI                  \(       + SS9\RF                  RI                  \(       + S%S9S\\\4   S\4S& j5       5       r/\RF                  RI                  \(       + SS9\RF                  Ra                  S'\Rb                  " S(S)S*9S+/ 4\Rb                  " S(S)S*9\Rb                  " S(S)S*9/S/ 4\Rb                  " S(S)S*9\Rb                  " S(S)S*94S/ 4\Rb                  " S(S)S*9\Rb                  " S(S)S*9S,.S S-S./4\" \Rb                  " S(S)S*9\Rb                  " S(S)S*94S/\Rb                  " S(S)S*905      SS//4/5      S0 5       5       r2\RF                  RI                  \(       + SS9S1 5       r3\RF                  RI                  \(       + SS9S2 5       r4g)3    )castN)Adam
ArgsKwargsModelMXNetWrapperOpsget_current_opsmxnet2xpxp2mxnet)has_cupy_gpu	has_mxnet)Array1dArray2dIntsXd)to_categorical   )check_input_convertersmake_tempdirreturnc                      g)N    r       _/home/james-whalen/.local/lib/python3.13/site-packages/thinc/tests/layers/test_mxnet_wrapper.pyn_hiddenr          r   c                      g)Ni  r   r   r   r   
input_sizer      s    r   c                      g)N
   r   r   r   r   	n_classesr!   !   r   r   c                      g)N   r   r   r   r   answerr$   &   s    r   r   c                 T    [        5       n[        [        UR                  SU 4S95      $ )Nr#   )shape)r	   r   r   alloc)r   opss     r   Xr)   +   s&     C!Z9::r   r$   r!   c                     [        5       n[        [        [        [        [        UR                  U /5      5      US95      $ )N)r!   )r	   r   r   r   r   asarray)r$   r!   r(   s      r   Yr,   1   s6     CtFCKK$9:iP r   r   r)   c                    SS K nUR                  R                  R                  5       nUR	                  UR                  R                  R                  U 5      UR                  R                  R                  5       UR                  R                  R                  U SS9UR                  R                  R                  5       UR                  R                  R                  SSS95        UR                  5         U$ )Nr   relu)
activationr    softrelu)mxnetgluonnn
SequentialaddDense	LayerNorm
initialize)r   r   r)   mxmx_models        r   r:   r:   :   s    xx{{%%'HLL
(#

(v6

"4 Or   c                     [        U 5      $ N)r   )r:   s    r   modelr=   J   s    !!r   zneeds MXNet)reasonc                      SS K n [        R                  " SSS9n[        U5      n[	        X R
                  R                  5      (       d   e[        U5      n[        R                  " X5      (       d   eg )Nr   r      fdtype)	r1   numpyzerosr   
isinstancendNDArrayr
   array_equal)r9   	xp_tensor	mx_tensornew_xp_tensors       r   'test_mxnet_wrapper_roundtrip_conversionrN   O   sY    F#.I#Ii////Y'MY6666r   c                      SS K n U R                  R                  R                  5       nUR	                  U R                  R                  R                  S5      5        [        U5      n[        U[        5      (       d   eg )Nr   r   )	r1   r2   r3   r4   r5   r6   r   rG   r   )r9   r:   wrappeds      r   #test_mxnet_wrapper_gluon_sequentialrQ   Z   sW    xx{{%%'HLL""2&'8$Ggu%%%%r   r=   r,   c                 p    U R                  U5      c   eU R                  U R                  5       5      c   eg r<   )predict
from_bytesto_bytes)r=   r)   r,   s      r   test_mxnet_wrapper_built_modelrV   d   s7    
 =='''ENN,-999r   c                 &    U R                  U5        g r<   )rS   r=   r)   s     r   test_mxnet_wrapper_predictrY   n   s    	MM!r   c                     [        5       n[        S5       H9  nU " USS9u  pgXb-
  UR                  S   -  nU" U5        U R                  U5        M;     U R	                  U5      R                  5       n	X:X  d   eg )Nd   Tis_trainr   )r   ranger&   finish_updaterS   argmax)
r=   r)   r,   r$   	optimizeriguessesbackprop	d_guesses	predicteds
             r   !test_mxnet_wrapper_train_overfitsrg   s   sx     I3Z!!d3[GMM!$44	I&	 
 a '')Ir   c                 P    U R                  U5        U R                  5       nUc   eg r<   )rS   copy)r=   r)   ri   s      r   !test_mxnet_wrapper_can_copy_modelrj      s%    	MM!$)JJLDr   c                 r    U R                  U5        U R                  5       nUc   eU R                  U5        g r<   rS   rU   rT   )r=   r)   model_bytess      r   test_mxnet_wrapper_to_bytesrn      s4    	MM!.."K"""	[!r   c                     U R                  U5        [        5        nUS-  nU R                  U5        U R                  U5      nUc   e S S S 5        g ! , (       d  f       g = f)Nzmodel.bytes)rS   r   to_disk	from_disk)r=   r)   tmp_path
model_fileanother_models        r   test_mxnet_wrapper_to_from_diskru      sO    	MM!	8-
j!
3(((	 
s   -A
A!c                 r    U R                  U5        U R                  5       nU R                  U5      nUc   eg r<   rl   )r=   r)   rm   rt   s       r   test_mxnet_wrapper_from_bytesrw      s6    	MM!.."K$$[1M$$$r   c                 \    [        U 5      nUR                  U5        UR                  5         g r<   )r   rS   to_cpu)r:   r)   r=   s      r   test_mxnet_wrapper_to_cpurz      s!    "E	MM!	LLNr   zneeds GPU/cupyc                 H    U R                  U5        U R                  S5        g )Nr   )rS   to_gpurX   s     r   test_mxnet_wrapper_to_gpur}      s     
MM!	LLOr   zdata,n_args,kwargs_keysr@   rB   rC   r#   )abr~   r   cc                 d   SS K nUR                  R                  R                  5       nUR	                  UR                  R                  R                  S5      5        UR                  5         [        U5      nUR                  S   nU" XPSS9u  px[        XxXX#R                  R                  5        g )Nr   r   convert_inputsTr\   )r1   r2   r3   r4   r5   r6   r8   r   attrsr   rH   rI   )	datan_argskwargs_keysr9   r:   r=   r   r,   rd   s	            r   !test_mxnet_wrapper_convert_inputsr      s     xx{{%%'HLL""2&'"E[[!12N t<KA1k55==Qr   c                      " S S[         5      n[        XS9n[        X!5      (       d   eUR                  5       S:X  d   eg )Nc                   "    \ rS rSrS\4S jrSrg)<test_mxnet_wrapper_thinc_model_subclass.<locals>.CustomModel   r   c                     g)N9  r   )selfs    r   fn?test_mxnet_wrapper_thinc_model_subclass.<locals>.CustomModel.fn   s    r   r   N)__name__
__module____qualname____firstlineno__intr   __static_attributes__r   r   r   CustomModelr      s    	 	r   r   )model_classr   )r   r   rG   r   )r:   r   r=   s      r   'test_mxnet_wrapper_thinc_model_subclassr      s?    e  ;Ee))))88:r   c                 <    [        U SS9nUR                  S:X  d   eg )Ncool)
model_name)r   name)r:   r=   s     r   'test_mxnet_wrapper_thinc_set_model_namer      s     f5E::r   )5typingr   rE   pytest	thinc.apir   r   r   r   r   r	   r
   r   thinc.compatr   r   thinc.typesr   r   r   
thinc.utilr   utilr   r   fixturer   r   r   r!   r$   r)   r,   r:   r=   markskipifrN   rQ   rV   rY   rg   rj   rn   ru   rw   rz   r}   parametrizerF   r   r   r   r   r   r   <module>r      s     	 	 	 1 0 0 % 7 #   C   3      ;# ;' ; ;
 c c g   s     "uWg-. " " 	M-87 97 	M-8& 9& 	M-8:'!":'.:3:: 9: 	M-8eGW,<&= '  9 	M-8
'!"
'.
3:
DG
 9
 	M-8U7G3C-D   9 	M-8"uWg-='> "7 " 9" 	M-8)5'1A+B )w ) 9) 	M-8%w/?)@ %W % 9% 	M-87  9 	M-8$-=>U7G+;%<   ? 9
 	M-8 
V3	'B/
++fC
(%++fC*H	I1bQ
++fC
(%++fC*H	I1bQ{{6-EKKc4R	SUVY\^aXbc	U[[s3U[[s5STWZ\a\g\ghnvy\zV{	|~  CF  BG  	H	R 9	R 	M-8 9 	M-8  9 r   