o
    i^                  
   @   s  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 ddlmZmZmZmZmZmZ e	 Zeeef Zedeeeeef d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f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
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   )NumpyOps)registry)Model)Array2dInts1dList2dListXdPaddedRaggedSeqT)boundzwith_ragged.v1layerreturnc                 C   s   t d| j dtt| gdS )Nzwith_ragged())initlayers)r   nameforwardr   )r    r   L/home/ubuntu/.local/lib/python3.10/site-packages/thinc/layers/with_ragged.pywith_ragged   s   r   modelXseqis_trainc                 C   s   | j d }t|trttttf |||S t|tr(ttttf t|||S t	|r<ttttf t
|tt||S ttttf t|tt||S )Nr   )r   
isinstancer   r   r   r   r   r   _padded_forward_is_ragged_data_tuple_forward
RaggedData_list_forwardr   )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_ragged)r   r(   r)   r   r   r   r   '   s   

r   c                 C   s   t | to
t| dkS )Nr	   )r"   tuplelen)seqr   r   r   r$   2   s   r$   r.   c                 C   s   t |tr|S t |tr,| j|}| jdd |D }| j|}t| j||S t|r4t| S tt	|}| jdd |D }t| j||S )Nc                 S      g | ]}t |qS r   r-   .0xr   r   r   
<listcomp>;       z_get_ragged.<locals>.<listcomp>c                 S   r/   r   r0   r1   r   r   r   r4   B   r5   )
r"   r   r   opspadded2list	asarray1iflattenr$   r   r   )r   r.   listslengthsk
list2d_seqr   r   r   r+   6   s   


r+   c                    s8   | t | |\} dtdtf fdd}|j|jf|fS )NdYr   c                    s    t |  }|j|jfS N)r   datar;   )r>   dXrget_dXrr   r   backpropK   s   z _tuple_forward.<locals>.backprop)r   r&   r@   r;   )r   r(   r!   YrrD   r   rB   r   r%   F   s   r%   Xpc                    s   | j j| j j| j j| j j |}tdd |D | t || j |\}dtf fdd}|j	|j
|fS )Nc                 S   r/   r   r0   r1   r   r   r   r4   d   r5   z#_padded_forward.<locals>.<listcomp>dYpc                    s*    | }t |}|jS r?   r   r@   )rG   	flattenedrA   r9   rC   r;   list2paddedr7   	unflattenr   r   rD   g   s   z!_padded_forward.<locals>.backprop)r6   rK   r7   rL   r9   	NUMPY_OPSr8   r   r   r@   r;   )r   rF   r!   XsrE   rD   r   rJ   r   r#   R   s    r#   rN   c                    sb   | j j | j jdd |D | t || j |\} fdd}|j|j|fS )Nc                 S   r/   r   r0   r1   r   r   r   r4   y   r5   z!_list_forward.<locals>.<listcomp>c                    s    | }t |jS r?   rH   )dYsrI   r9   rC   r;   rL   r   r   rD   |   s   z_list_forward.<locals>.backprop)r6   r9   rL   r   r8   r@   r;   )r   rN   r!   rE   rD   r   rP   r   r'   r   s    r'   )NN)"typingr   r   r   r   r   r   r   backendsr
   configr   r   r   typesr   r   r   r   r   r   rM   r&   r   r   r   boolr   r   r$   r+   r%   r#   r'   r   r   r   r   <module>   sv   $  $










 

