o
    iM                  
   @   sZ  d dl mZmZmZmZmZmZmZ ddlm	Z	 ddl
mZ ddlmZmZmZmZmZmZ edeeeee ee Ze	ddeeef d	eeef fd
dZdeeef deded	eeef fddZ	ddeeef dee dee d	dfddZdd Zdeeef deded	eeef fddZdeeef deded	eeef fddZdS )    )CallableListOptionalTupleTypeVarUnioncast   )registry)Model)Array2dFloats2dInts2dList2dPaddedRaggedSeqTzwith_list.v1layerreturnc                    s.   t d j dtt g fdd jD dS )Nz
with_list()c                    s   i | ]}|  |qS  )maybe_get_dim).0namer   r   J/home/ubuntu/.local/lib/python3.10/site-packages/thinc/layers/with_list.py
<dictcomp>   s    zwith_list.<locals>.<dictcomp>)initlayersdims)r   r   forwardr   	dim_namesr   r   r   r   	with_list
   s   r"   modelXseqis_trainc                 C   sT   | j d }t|trt|||S t|trt|||S tttt	f |tt
||S )Nr   )r   
isinstancer   _padded_forwardr   _ragged_forwardr   r   r   r   r   )r#   r$   r%   r   r   r   r   r       s   


r    NXYc                 C   s<   | j d j|d urt| |nd |d urt| |nd d d S )Nr   )r)   r*   )r   
initialize	_get_list)r#   r)   r*   r   r   r   r   !   s   

r   c                 C   s6   t |tr| j|S t |tr| j|j|jS |S N)r&   r   opspadded2listr   	unflattendatalengths)r#   seqr   r   r   r,   *   s
   

r,   Xrc                    sR   | j j| j j | |j|j|\}dtf fdd}t ||j|fS )NdYrc                    s   t  | j| j| jS r-   )r   r1   r2   )r5   flattenget_dXsr0   r   r   backprop?   s   z!_ragged_forward.<locals>.backprop)r.   r0   r7   r1   r2   r   )r   r4   r%   Ysr9   r   r6   r   r(   3   s
   r(   Xpc                    s>   | j j| j j| ||\}  fdd}||fS )Nc                    s    | S r-   r   )dYpr8   list2paddedr/   r   r   r9   T   s   z!_padded_forward.<locals>.backprop)r.   r/   r>   )r   r;   r%   r:   r9   r   r=   r   r'   H   s
   r'   )NN)typingr   r   r   r   r   r   r   configr
   r#   r   typesr   r   r   r   r   r   r   r   r"   boolr    r   r,   r(   r'   r   r   r   r   <module>   sZ   $  $





		




