
    i                        d dl mZ 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 d dl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 ej2                  d	efd
       Zej2                  d	efd       Zej2                  d	efd       Zej2                  d	efd       Zej2                  ded	efd       Zej2                  deded	efd       Z ej2                  dededefd       Z!ej2                  d	eeef   fd       Z"ejF                  jI                  e d      d        Z%ejF                  jI                  e d      d        Z&ejF                  jI                  e d      deeef   dedefd       Z'ejF                  jI                  e d      deeef   defd       Z(ejF                  jI                  e d      deeef   dededefd       Z)ejF                  jI                  e d      deeef   defd        Z*ejF                  jI                  e d      deeef   defd!       Z+ejF                  jI                  e d      deeef   defd"       Z,ejF                  jI                  e d      deeef   defd#       Z-ejF                  jI                  e d      defd$       Z.ejF                  jI                  e d      ejF                  jI                  e d%      deeef   defd&              Z/ejF                  jI                  e d      ejF                  ja                  d' ejb                  d(d)*      d+g f ejb                  d(d)*       ejb                  d(d)*      gdg f ejb                  d(d)*       ejb                  d(d)*      fdg f ejb                  d(d)*       ejb                  d(d)*      d,d d-d.gf e ejb                  d(d)*       ejb                  d(d)*      fd/ ejb                  d(d)*      i      dd/gfg      d0               Z2ejF                  jI                  e d      d1        Z3ejF                  jI                  e d      d2        Z4y)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                       y)N    r       v/var/www/vps2.regionflexible.com/Desarrollo/venv/lib/python3.12/site-packages/thinc/tests/layers/test_mxnet_wrapper.pyn_hiddenr          r   c                       y)Ni  r   r   r   r   
input_sizer      s    r   c                       y)N
   r   r   r   r   	n_classesr!   !   r   r   c                       y)N   r   r   r   r   answerr$   &   s    r   r   c                 Z    t               }t        t        |j                  d| f            S )Nr#   )shape)r	   r   r   alloc)r   opss     r   Xr)   +   s&     C!Z9::r   r$   r!   c                     t               }t        t        t        t        t        |j                  | g            |            S )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           
         dd l }|j                  j                  j                         }|j	                  |j                  j                  j                  |       |j                  j                  j                         |j                  j                  j                  | d      |j                  j                  j                         |j                  j                  j                  dd             |j                          |S )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                     t        |       S N)r   )r:   s    r   modelr=   J   s    !!r   zneeds MXNet)reasonc                      dd l } t        j                  dd      }t        |      }t	        || j
                  j                        sJ t        |      }t        j                  ||      sJ y )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   sW    F#.I#Ii///Y'MY666r   c                      dd l } | j                  j                  j                         }|j	                  | j                  j                  j                  d             t        |      }t        |t              sJ y )Nr   r   )	r1   r2   r3   r4   r5   r6   r   rG   r   )r9   r:   wrappeds      r   #test_mxnet_wrapper_gluon_sequentialrQ   Z   sT    xx{{%%'HLL""2&'8$Ggu%%%r   r=   r,   c                 l    | j                  |      J | j                  | j                               J y r<   )predict
from_bytesto_bytes)r=   r)   r,   s      r   test_mxnet_wrapper_built_modelrV   d   s7    
 =='''ENN,-999r   c                 &    | j                  |       y r<   )rS   r=   r)   s     r   test_mxnet_wrapper_predictrY   n   s    	MM!r   c                     t               }t        d      D ]=  } | |d      \  }}||z
  |j                  d   z  } ||       | j                  |       ? | j	                  |      j                         }	|	|k(  sJ y )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   s     I3Z '!!d3q[GMM!$44	I&	'
 a '')Ir   c                 N    | j                  |       | j                         }|J y r<   )rS   copy)r=   r)   ri   s      r   !test_mxnet_wrapper_can_copy_modelrj      s%    	MM!$)JJLDr   c                 p    | j                  |       | j                         }|J | j                  |       y r<   rS   rU   rT   )r=   r)   model_bytess      r   test_mxnet_wrapper_to_bytesrn      s4    	MM!.."K"""	[!r   c                     | j                  |       t               5 }|dz  }| j                  |       | j                  |      }|J 	 d d d        y # 1 sw Y   y xY w)Nzmodel.bytes)rS   r   to_disk	from_disk)r=   r)   tmp_path
model_fileanother_models        r   test_mxnet_wrapper_to_from_diskru      sZ    	MM!	 )8-
j!
3(((	) ) )s   ,AAc                 p    | j                  |       | j                         }| j                  |      }|J y r<   rl   )r=   r)   rm   rt   s       r   test_mxnet_wrapper_from_bytesrw      s6    	MM!.."K$$[1M$$$r   c                 \    t        |       }|j                  |       |j                          y r<   )r   rS   to_cpu)r:   r)   r=   s      r   test_mxnet_wrapper_to_cpurz      s!    "E	MM!	LLNr   zneeds GPU/cupyc                 H    | j                  |       | j                  d       y )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                 t   dd l }|j                  j                  j                         }|j	                  |j                  j                  j                  d             |j                          t        |      }|j                  d   } ||| d      \  }}t        ||| |||j                  j                         y )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<KAx1hfk255==Qr   c                      G d dt               }t        | |      }t        ||      sJ |j                         dk(  sJ y )Nc                       e Zd ZdefdZy)<test_mxnet_wrapper_thinc_model_subclass.<locals>.CustomModelr   c                      y)N9  r   )selfs    r   fnz?test_mxnet_wrapper_thinc_model_subclass.<locals>.CustomModel.fn   s    r   N)__name__
__module____qualname__intr   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                 @    t        | d      }|j                  dk(  sJ y )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u{{6-KEKKc4R	SUVY\^aXbc	[U[[s3[U[[s5STWZ\g\a\g\ghnvy\zV{	|~  CF  BG  	H	R 9	R 	M-8 9 	M-8  9 r   