
    i5              
          d dl mZmZ d dlZd dlZd dlmZ d dlmZm	Z	m
Z
 d dlmZmZ d dlmZmZmZ  e	       Zej&                  j)                  g dg dg d	gd
      Zej&                  j)                  g dg dg dgd
      Zd Zdedededeeef   fdZej2                  j5                  e d      ej2                  j7                  dg d      d               Zd Zy)    )TuplecastN)assert_allclose)ModelNumpyOps
Softmax_v2)Floats2dInts1d)	has_torchtorch2xpxp2torch)         r   )      r   r   )	      r      fdtype)5w6.?gUכZ?gc<?r   )Y1a ?gM?gˀ珽?r   )gRC?g}Ⱥ?g0?g%7Ŷ?c                     t        d      } | j                  t        t                | t        d      \  }}t	        j
                  t        d      5   |t        j                  j                  t                     d d d         | t        d      \  }} |t        j                  j                  t                    }t        j                  j                  |dk(        sJ y # 1 sw Y   hxY w)NFnormalize_outputsis_trainzbackprop is not supportedmatchT        )r   
initializeinputsoutputspytestraises
ValueErrorOPSxp
zeros_likeall)model_backpropdXs       p/var/www/vps2.regionflexible.com/Desarrollo/venv/lib/python3.12/site-packages/thinc/tests/layers/test_softmax.py"test_unnormalized_softmax_backpropr2      s    /E	VW%/KAx	z)D	E -""7+,- .KAx	#&&##G,	-B66::bCi   - -s   *C$$C-r-   Xtargetsreturnc           
      F   dd l }t        | j                  d            }t        | j                  d            }| j                  d   }t        |d      }t        |      j	                         }||z  |z   }	|	|z  }
|j
                  j                         } ||
|      }|j                          t        t        t        |j
                  j                  j                  |
d                  t        t        t        t        |j                  |j                                    fS )	Nr   Wbsoftmax_temperatureT)requires_grad)dim)torchr   	get_paramattrslongnnCrossEntropyLossbackwardr   r	   r   
functionalsoftmaxTensorgrad)r-   r3   r4   r=   WtbttemperatureXtYt_goldXWbt	XWbt_templossoutputs                r1   torch_softmax_with_temperaturerQ   %   s     	%//#&	'B	%//#&	'B++34K	!4	(Bw$$&GGr>D{"I88$$&D)W%F
OO(588..66yb6IJHhtELL"'':;<= =    zneeds PyTorch)reasonrJ   )g      ?g      ?g       @c                    t        | d d       }t        j                  j                  dddd      j	                  dd	      }t        j                  d
g      }t        j                  j                  d	d      |   }|j                  ||       t        |||      \  }} ||d      \  }} |||z
        }	t        ||d       t        |	|d       y )Nc                 B    | j                   j                  |d   d      S )Nr   r   r   )r*   eyeopsshapes     r1   <lambda>z*test_softmax_temperature.<locals>.<lambda>B   s    #&&**U1XS*"A rR   c                 <    | j                   j                  |d      S )Nr   r   )r*   zerosrW   s     r1   rZ   z*test_softmax_temperature.<locals>.<lambda>C   s    #&&,,uC,"@ rR   )rJ   init_Winit_br;   r   g?r   r   
   r   Tr   g-C6?)atol)
r   r)   r*   arangereshape	asarray1irV   r#   rQ   r   )
rJ   r-   r3   r4   Y_goldYtdXtYr/   r0   s
             r1   test_softmax_temperaturerh   =   s     A@E 	b!S,44Q;AmmQC GVVZZ#Z&w/F	Q,UAw?GBD)KAx	!f*	BAr%B$'rR   c                  d   t        j                  t        d      5  t        dd       d d d        t        d      } d| j                  d<   | j                  t        t               t        j                  t        d      5   | t        d       d d d        y # 1 sw Y   qxY w# 1 sw Y   y xY w)	Nzsoftmax temperature.*zeror    Fr"   )r   rJ   r   r9   r   )r&   r'   r(   r   r?   r#   r$   r%   )r-   s    r1   !test_reject_incorrect_temperaturerj   T   s    	z)E	F =U<= /E),EKK%&	VW%	z)E	F &fu%& &= =& &s   BB&B#&B/)typingr   r   numpyr&   numpy.testingr   	thinc.apir   r   r   thinc.typesr	   r
   
thinc.utilr   r   r   r)   r*   asarrayr$   r%   r2   rQ   markskipifparametrizerh   rj    rR   r1   <module>rv      s       ) 1 1 ( 4 4j	|\B#	N
&&..876
   
!===(.=
8X=0 	M/:8( 9 ;(*&rR   