o
    i                  
   @   sp  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 edeeee eef dZe	dd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eeef dededeeef fddZdeeef dee dedeee ef fddZdS )     )CallableListSequenceTupleTypeVarUnioncast   )registry)Model)ArrayXdPaddedRaggedInT)boundz
Dropout.v1        ratereturnc                 C   s   t dt| dddS )zHelp prevent overfitting by adding a random distortion to the input data
    during training.  Specifically, cells of the input are zeroed with
    probability determined by the `rate` argument.
    dropoutT)dropout_rate
is_enabled)attrs)r   forward)r    r   H/home/ubuntu/.local/lib/python3.10/site-packages/thinc/layers/dropout.pyDropout
   s   r   modelXis_trainc           
      C   s   | j d }| j d o|}|dks|s|dd fS t|tr,t| ||\}}tt||fS t|tr@t| ||\}}tt||fS t|trTt	| ||\}}tt||fS t
| tt||\}	}tt|	|fS )Nr   r   r   c                 S   s   | S Nr   dYr   r   r   <lambda>   s    zforward.<locals>.<lambda>)r   
isinstancer   _dropout_raggedr   r   r   _dropout_paddedr   _dropout_lists_dropout_arrayr   )
r   r   r   r   r   data_rbackpropdata_pdata_ldata_ar   r   r   r      s   



r   c                    sB   | j d }| j|j| dtdtf fdd}tt|  |fS )Nr   r!   r   c                    s   |   S r   r   r    maskr   r   r)   ,   s   z _dropout_array.<locals>.backprop)r   opsget_dropout_maskshaper   r   )r   r   r   r   r)   r   r-   r   r'   &   s   
r'   Xpc                    sR   |j }| j|j| jd  |  }dtdtf fdd}t||j|j|j|fS )Nr   dYpr   c                    s   t | j  | j| j| jS r   )r   data	size_at_tlengthsindices)r3   r-   r   r   r)   9   s   z!_dropout_padded.<locals>.backprop)	r4   r/   r0   r1   r   r   r5   r6   r7   )r   r2   r   r   Yr)   r   r-   r   r%   2   s
   r%   Xrc                    sN   |j }|j}| j|j| jd  |  }dtdtf fdd}t|||fS )Nr   dYrr   c                    s   t | j  | jS r   )r   r4   r6   )r:   r-   r   r   r)   G   s   z!_dropout_ragged.<locals>.backprop)r4   r6   r/   r0   r1   r   r   )r   r9   r   r   r6   r8   r)   r   r-   r   r$   ?   s   r$   Xsc                    sX   j d fdd|D  dd t| D }dtt dtt f fdd}||fS )	Nr   c                    s   g | ]
} j |jqS r   )r/   r0   r1   ).0r   )r   r   r   r   
<listcomp>Q   s    z"_dropout_lists.<locals>.<listcomp>c                 S      g | ]\}}|| qS r   r   )r<   r   r.   r   r   r   r=   R       dYsr   c                    s   dd t |  D S )Nc                 S   r>   r   r   )r<   r!   r.   r   r   r   r=   U   r?   z4_dropout_lists.<locals>.backprop.<locals>.<listcomp>)zip)r@   )masksr   r   r)   T   s   z _dropout_lists.<locals>.backprop)r   rA   r   r   )r   r;   r   Ysr)   r   )rB   r   r   r   r&   M   s
   
r&   N)r   )typingr   r   r   r   r   r   r   configr
   r   r   typesr   r   r   r   layersfloatr   boolr   r'   r%   r$   r&   r   r   r   r   <module>   sX   $ *









