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mZmZmZmZmZ ddlmZ eeeeef Zede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edefddZdededefddZd
eeef 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
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Floats3dInts1dList2dPaddedRagged)is_xp_arraySeqT)boundzwith_padded.v1layerreturnc                    s.   t d j dtt g fdd jD dS )Nzwith_padded()c                    s   i | ]}|  |qS  )maybe_get_dim).0namer   r   L/home/ubuntu/.local/lib/python3.10/site-packages/thinc/layers/with_padded.py
<dictcomp>   s    zwith_padded.<locals>.<dictcomp>)initlayersdims)r   r   forwardr   	dim_namesr   r   r   r   with_padded   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|rPt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   _ragged_forward_is_padded_data_tuple_forward
PaddedDatar   _array_forwardr   _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/   r0   )r    
initialize_get_padded)r%   r/   r0   r   r   r   r   .   s   

r   seqc                 C   s$   t | tot| dkottt| S )N   )r(   tuplelenallmapr   )r3   r   r   r   r*   7   s   $r*   c                 C   s   t |tr|S t |tr| j| j|j|jS t|r!t| S t	|rYt
t|}| j|jd g|jd  }| j|jd g|jd  }| jj|jd }t||||S t |tsbJ || j|S )N   r   )r(   r   r   opslist2padded	unflattendatalengthsr*   r   r   r   	asarray1ishapexparangelist)r%   r3   floats3d_seq	size_at_tr>   indicesr   r   r   r2   ;   s   


r2   c                    sV   t | |}| ||\} |j|j|jdtdtf fdd}tt|j|fS )NdYr   c                    s   t | } |}|jS N)r   r=   )rG   dYpdXpget_dXprF   r>   rE   r   r   backpropW   s   z _array_forward.<locals>.backprop)r2   rE   r>   rF   r   r   r=   )r   r/   r'   XpYprM   r   rK   r   r-   M   s   
r-   c                    s<   | t | |\}  fdd}tt|j|j|j|jf|fS )Nc                    s     t |  }|j|j|j|jfS rH   )r   r=   rE   r>   rF   )rG   rJ   rL   r   r   rM   d   s   z _tuple_forward.<locals>.backprop)r   r   r   r=   rE   r>   rF   )r   r/   r'   rO   rM   r   rP   r   r+   _   s   r+   Xrc                    sr   | j j| j j| j j| j j | |j|j|\}dtf fdd} |}t||j|fS )NdYrc                    s*    | j | j}t|| jS rH   )r=   r>   r   )rR   	flattenedflattenrL   r;   padded2listr<   r   r   rM   y   s   z!_ragged_forward.<locals>.backprop)r:   r;   rV   r<   rU   r=   r>   r   )r   rQ   r'   rO   rM   rS   r   rT   r   r)   k   s   r)   Xsc                    s>   | j j| j j| ||\}  fdd}||fS )Nc                    s    | S rH   r   )dYsrL   r;   rV   r   r   rM      s   z_list_forward.<locals>.backprop)r:   r;   rV   )r   rW   r'   rO   rM   r   rY   r   r.      s
   r.   )NN)"typingr   r   r   r   r   r   r   configr
   r%   r   typesr   r   r   r   r   r   utilr   r,   r   r    r$   boolr"   r   r*   r2   r-   r+   r)   r.   r   r   r   r   <module>   s   $  $





	










