o
    i                  
   @   s   d dl mZmZmZ d dlZd dlmZ ddlmZ ddl	m
Z
 edde
d	ed
e
fddZde
deded
eeef fddZde
deded
dfddZdd Zdd ZdS )    )AnyCallableTupleN)Ops   )registry)Modelzwith_cpu.v1layeropsreturnc              	      s8       td j dt g|t fdd jD dS )Nz	with_cpu()c                    s   i | ]}|  |qS  )maybe_get_dim).0namer	   r   I/home/ubuntu/.local/lib/python3.10/site-packages/thinc/layers/with_cpu.py
<dictcomp>   s    zwith_cpu.<locals>.<dictcomp>)layersr
   initdims)to_cpur   r   forwardr   	dim_names)r	   r
   r   r   r   with_cpu   s   r   modelXis_trainc                    s8   | j d t|\} t| j|} fdd}||fS )Nr   c                    s   t | } |S )N_to_cpu)	d_outputscpu_d_outputsbackpropr   r   with_cpu_backprop   s   z"forward.<locals>.with_cpu_backprop)r   begin_updater   
_to_devicer
   )r   r   r   cpu_outputsgpu_outputsr$   r   r"   r   r      s   r   Yc                 C   s   | j d || d S )Nr   )r   
initialize)r   r   r)   r   r   r   r   #   s   r   c                 C   sZ   t | tjr| S t | trtdd | D S t | tr"dd | D S t| dr+|  S | S )Nc                 S      g | ]}t |qS r   r   r   xr   r   r   
<listcomp>+       z_to_cpu.<locals>.<listcomp>c                 S   r+   r   r   r,   r   r   r   r.   -   r/   get)
isinstancenumpyndarraytuplelisthasattrr0   )r   r   r   r   r   '   s   


r   c                    sF   t |trt fdd|D S t |tr fdd|D S  |S )Nc                       g | ]}t  |qS r   r&   r,   r
   r   r   r.   6       z_to_device.<locals>.<listcomp>c                    r7   r   r8   r,   r9   r   r   r.   8   r:   )r1   r4   r5   asarray)r
   r   r   r9   r   r&   4   s
   


r&   )typingr   r   r   r2   thinc.backendsr   configr   r   r   r   r   boolr   r   r   r&   r   r   r   r   <module>   s    "