o
    i                     @   s   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jd	efd
dZejd	efddZejd	efddZejd	efddZejded	efddZejdeded	efddZ ejdededefddZ!ejd	eeef fddZ"ej#j$e dddd Z%ej#j$e dddd Z&ej#j$e dddeeef dedefd d!Z'ej#j$e dddeeef defd"d#Z(ej#j$e dddeeef dededefd$d%Z)ej#j$e dddeeef defd&d'Z*ej#j$e dddeeef defd(d)Z+ej#j$e dddeeef defd*d+Z,ej#j$e dddeeef defd,d-Z-ej#j$e dddefd.d/Z.ej#j$e ddej#j$e d0ddeeef defd1d2Z/ej#j$e ddej#0d3ej1d4d5d6d7g fej1d4d5d6ej1d4d5d6gdg fej1d4d5d6ej1d4d5d6fdg fej1d4d5d6ej1d4d5d6d8d d9d:gfeej1d4d5d6ej1d4d5d6fd;ej1d4d5d6idd;gfgd<d= Z2ej#j$e ddd>d? Z3ej#j$e ddd@dA Z4dS )B    )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                   C      dS )N    r   r   r   Y/home/ubuntu/.local/lib/python3.10/site-packages/thinc/tests/layers/test_mxnet_wrapper.pyn_hidden      r   c                   C   r   )Ni  r   r   r   r   r   
input_size   r   r   c                   C   r   )N
   r   r   r   r   r   	n_classes!   r   r   c                   C   r   )N   r   r   r   r   r   answer&   r   r   c                 C   s   t  }tt|jd| fdS )Nr   )shape)r   r   r   alloc)r   opsr   r   r   X+   s   r#   c                 C   s&   t  }ttttt|| g|dS )N)r   )r   r   r   r   r   asarray)r   r   r"   r   r   r   Y1   s
   r%   c              
   C   sh   dd l }|jj }||jj| |jj |jjj| dd|jj |jjjddd |  |S )Nr   relu)
activationr   softrelu)mxnetgluonnn
SequentialaddDense	LayerNorm
initialize)r   r   r#   mxmx_modelr   r   r   r2   :   s   

r2   c                 C   s   t | S N)r   )r2   r   r   r   modelJ   s   r4   zneeds MXNet)reasonc                  C   sL   dd l } tjddd}t|}t|| jjsJ t|}t||s$J d S )Nr   r      fdtype)	r)   numpyzerosr
   
isinstancendNDArrayr	   array_equal)r1   	xp_tensor	mx_tensornew_xp_tensorr   r   r   'test_mxnet_wrapper_roundtrip_conversionO   s   rD   c                  C   sB   dd l } | jj }|| jjd t|}t|tsJ d S )Nr   r   )	r)   r*   r+   r,   r-   r.   r   r=   r   )r1   r2   wrappedr   r   r   #test_mxnet_wrapper_gluon_sequentialZ   s
   rF   c                 C   s,   |  |d us	J | |  d usJ d S r3   )predict
from_bytesto_bytes)r4   r#   r%   r   r   r   test_mxnet_wrapper_built_modeld   s   rJ   c                 C   s   |  | d S r3   )rG   r4   r#   r   r   r   test_mxnet_wrapper_predictn   s   rL   c           
      C   sf   t  }tdD ]}| |dd\}}|| |jd  }|| | | q| | }	|	|ks1J d S )Nd   Tis_trainr   )r   ranger    finish_updaterG   argmax)
r4   r#   r%   r   	optimizeriguessesbackprop	d_guesses	predictedr   r   r   !test_mxnet_wrapper_train_overfitss   s   rY   c                 C   s"   |  | |  }|d usJ d S r3   )rG   copy)r4   r#   rZ   r   r   r   !test_mxnet_wrapper_can_copy_model   s   
r[   c                 C   s,   |  | |  }|d usJ | | d S r3   rG   rI   rH   )r4   r#   model_bytesr   r   r   test_mxnet_wrapper_to_bytes   s   
r^   c                 C   s^   |  | t }|d }| | | |}|d usJ W d    d S 1 s(w   Y  d S )Nzmodel.bytes)rG   r   to_disk	from_disk)r4   r#   tmp_path
model_fileanother_modelr   r   r   test_mxnet_wrapper_to_from_disk   s   


"rd   c                 C   s,   |  | |  }| |}|d usJ d S r3   r\   )r4   r#   r]   rc   r   r   r   test_mxnet_wrapper_from_bytes   s   

re   c                 C   s   t | }|| |  d S r3   )r   rG   to_cpu)r2   r#   r4   r   r   r   test_mxnet_wrapper_to_cpu   s   
rg   zneeds GPU/cupyc                 C   s   |  | | d d S )Nr   )rG   to_gpurK   r   r   r   test_mxnet_wrapper_to_gpu   s   
ri   zdata,n_args,kwargs_keysr6   r8   r9   r   )abrj   rk   cc           	      C   sn   dd l }|jj }||jjd |  t|}|jd }||| dd\}}t	||| |||j
j d S )Nr   r   convert_inputsTrN   )r)   r*   r+   r,   r-   r.   r0   r   attrsr   r>   r?   )	datan_argskwargs_keysr1   r2   r4   rm   r%   rV   r   r   r   !test_mxnet_wrapper_convert_inputs   s   
rr   c                 C   s>   G dd dt }t| |d}t||sJ | dksJ d S )Nc                   @   s   e Zd ZdefddZdS )z<test_mxnet_wrapper_thinc_model_subclass.<locals>.CustomModelr   c                 S   r   )N9  r   )selfr   r   r   fn   s   z?test_mxnet_wrapper_thinc_model_subclass.<locals>.CustomModel.fnN)__name__
__module____qualname__intru   r   r   r   r   CustomModel   s    rz   )model_classrs   )r   r   r=   ru   )r2   rz   r4   r   r   r   'test_mxnet_wrapper_thinc_model_subclass   s   r|   c                 C   s   t | dd}|jdksJ d S )Ncool)
model_name)r   name)r2   r4   r   r   r   'test_mxnet_wrapper_thinc_set_model_name   s   r   )5typingr   r;   pytest	thinc.apir   r   r   r   r   r   r	   r
   thinc.compatr   r   thinc.typesr   r   r   
thinc.utilr   utilr   r   fixturery   r   r   r   r   r#   r%   r2   r4   markskipifrD   rF   rJ   rL   rY   r[   r^   rd   re   rg   ri   parametrizer<   rr   r|   r   r   r   r   r   <module>   s    (



	
	
	  &6

