o
    i                     @   s~  d dl 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 ddlmZmZmZ eZeZed				d$d	d	d
dee dee dee dee de
eef f
ddZed				d$d	d	ddddee dee dee dee 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$dedede
eef dee dee dd	fd d!Zd"d# Zd	S )%    )CallableOptionalTuplecast   )registry)	zero_init)Model)Floats1dFloats2d)	ArrayInfo	get_widthpartialz
Softmax.v1N)init_Winit_bnOnIr   r   returnc             	   C   sF   |d u rt }|d u rt }tdttt||| |dd d dddddS )Nsoftmaxr   r   WbT      ?softmax_normalizesoftmax_temperatureinitdimsparamsattrs)r   r	   forwardr   r   )r   r   r   r    r#   H/home/ubuntu/.local/lib/python3.10/site-packages/thinc/layers/softmax.pySoftmax   s   
r%   z
Softmax.v2Tr   )r   r   normalize_outputstemperaturer&   r'   c             	   C   sN   |d u rt }|d u rt }t| tdttt||| |dd d d||ddS )Nr   r   r   r   r   )r   validate_temperaturer	   r"   r   r   )r   r   r   r   r&   r'   r#   r#   r$   
Softmax_v2#   s   

r)   modelXis_trainc                    s   j d p|}j d t ttd ttd}j |}|r2jj|d}t	
|dtdtf fdd	}dtfd
d}|rS||fS ||fS )Nr   r   r   r   )r'   dYr   c                    sV    |  dkr|  } d| jdd djj| dd j|  S )Nr   r   r   )axisr   T)trans1)check_consistencyinc_gradsumopsgemm)r-   r   r+   
array_infor*   r'   r#   r$   backpropN   s   
zforward.<locals>.backpropc                 S   s   d}t |)Nz;backprop is not supported for an unnormalized Softmax layer
ValueError)r-   msgr#   r#   r$   backprop_unnormalizedW   s   z&forward.<locals>.backprop_unnormalized)r!   r(   r   r   	get_paramr
   r3   affiner   r   
from_arrayInTOutT)r*   r+   r,   	normalizer   Yr7   r;   r#   r5   r$   r"   ?   s   

	r"   rB   c              	   C   s   |d ur| dd u r|dt| |d ur&| dd u r&|dt| |d| |j|d|df |d||j|df d S )Nr   r   r   r   )has_dimset_dimr   	set_paramr3   get_dim)r   r   r*   r+   rB   r#   r#   r$   r   a   s   $ r   c                 C   s   | dkr
d}t |d S )Ng        z0softmax temperature must not be zero or negativer8   )r'   r:   r#   r#   r$   r(   p   s   r(   )NN)typingr   r   r   r   configr   initializersr   r*   r	   typesr
   r   utilr   r   r   r?   r@   layersintr%   boolfloatr)   r"   r   r(   r#   r#   r#   r$   <module>   s    

*&

