
    Mi0A                        S SK Jr  S SKJrJrJrJrJrJrJ	r	J
r
JrJr  SSKJr  SSKJrJr  SSKJrJr  \
" S5      r\
" S5      r\
" S	5      r\
" S
5      r\\\4   r\\\\\   \\   4   r " S S\\\\\4   5      r " S S\5      r\R>                  " S5      SSSS.S\ S\\\      S\\\\4      S\4S jj5       r!\R>                  " S5      SSSSS.S\ S\\\      S\\\\4      S\\   S\4
S jj5       r"\R>                  " S5      SSSSSS.S\ S\\\      S\\\\4      S\\   S\#S\4S  jj5       r$ " S! S"\5      r%\R>                  " S#5      SSS$.S\ S\\\      S\%4S% jj5       r&\R>                  " S&5      SSSS'.S\ S\\\      S\\   S\%4S( jj5       r'\R>                  " S)5      SSSSSS.S\ S\\\      S\\\\4      S\\   S\#S\%4S* jj5       r( " S+ S,\5      r)\R>                  " S-5      SS..S\ S\)4S/ jj5       r* " S0 S1\5      r+\R>                  " S25      SS3S4.S\ S5\ S\+4S6 jj5       r,S\4S7 jr-S\4S8 jr./ S9Qr/g):    )abstractmethod)
AnyDictGenericListOptionalSequenceTupleTypeVarUnioncast   )registry)Floats2dInts1d)get_array_moduleto_categoricalLossTGradTGuessTTruthTc                       \ rS rSrSrS\SS4S jrS\S\S\	\
\4   4S	 jr\S\S\S\
4S
 j5       r\S\S\S\4S j5       rSrg)Loss   a	  Base class for classes computing the loss / gradient. The class can
be initialized with settings if needed. It provides get_loss and
get_grad as separate methods to allow calculating them separately. It
also provides a __call__ method that returns a tuple of both.
kwargsreturnNc                     g N )selfr   s     d/var/www/eduai.edurigo.com/storigo/production/storigo_env/lib/python3.13/site-packages/thinc/loss.py__init__Loss.__init__"   s    s    guessestruthsc                 F    U R                  X5      U R                  X5      4$ r   get_gradget_lossr    r%   r&   s      r!   __call__Loss.__call__$       }}W-t}}W/MMMr$   c                     g)aU  Get the gradient of the loss. Note that the built-in loss functions
compute the gradient with respect to the pre-activation logits, not the
post-softmax probabilities. This is because thinc's softmax layer uses
the identity function as its backward pass, so the softmax derivative
is absorbed into the loss gradient for numerical stability.
Nr   r+   s      r!   r)   Loss.get_grad'   s     	r$   c                     g r   r   r+   s      r!   r*   Loss.get_loss1   s    BEr$   r   )__name__
__module____qualname____firstlineno____doc__r   r"   r   r   r
   r   r   r,   r   r)   r*   __static_attributes__r   r$   r!   r   r      s     322N N N5;N N   5   EEE5E Er$   r   c                   $   \ rS rSr% \\\      \S'   \\\\	4      \S'   \
\\	4   \S'   SSSSSS.S	\S\\\      S\\\\	4      S
\\   S\4
S jjrS\S\\\4   4S jrS\S\S\\\4   4S jrS\S\S\4S jrS\S\S\4S jrS\S\4S jrSrg)CategoricalCrossentropy5   namesmissing_value
_name_to_iTN        	normalizer<   r=   
neg_prefixlabel_smoothingrA   rB   rC   c                    Xl         X l        X0l        X@l        XPl        Ub&  [        U5       VVs0 s H  u  pgXv_M	     snnU l        g 0 U l        g s  snnf r   )rA   r<   r=   rB   rC   	enumerater>   )r    rA   r<   r=   rB   rC   inames           r!   r"    CategoricalCrossentropy.__init__:   sS     #
*$.6?6FG6F71tw6FGDO DO Hs   Ar%   r   c                    [        U5      n/ nS nU R                  (       a.  UR                  [        U5      [        U R                  5      4SS9nU R                  n[        U[        5      (       Gaf  [        U5      n[        U5      (       Ga.  [        US   [        5      (       a-  [        U5       H  u  pxX:X  d  M  UR                  U5        M     OU R                  c  Sn	[        U	5      e[        U5       H  u  pxX:X  a$  U R                  S   X'   UR                  U5        M.  U(       d  M7  U R                  (       d  MJ  UR                  U R                  5      (       d  Ml  U[        U R                  5      S  X'   U R                  X      n
SXW'   SXW   U
'   M     U Vs/ s H  oR                  U   PM     nnUR                  USS9n[        X$5      nO[!        XU5      nUR"                  UR"                  :w  a1  [%        ['        [(        U5      UR*                  S   U R,                  S9nOU R,                  (       a  [        S5      eUb  X-  nSXS:H  '   S	XUS:H  '   X-  nX4$ s  snf )
Nfdtyper   zCannot calculate loss from list of strings without names. You can pass the names as a keyword argument when you create the loss object, e.g. CategoricalCrossentropy(names=['dog', 'cat'])rF   )	n_classesrC   zLabel smoothing is only applied, when truths have type List[str], List[int] or Ints1d, but it seems like Floats2d was provided.r   )r   r<   oneslenr=   
isinstancelistintrE   append
ValueErrorrB   
startswithr>   asarray
_make_mask_make_mask_by_valuendimr   r   r   shaperC   )r    r&   r%   xpmissingnegatives_maskr=   rF   valuemsg	neg_indexrG   masks                r!   convert_truths&CategoricalCrossentropy.convert_truthsM   s/   g&::WWc&k3tzz?%C3WON**fd##&\F6{{fQi--$-f$5 1#NN1- %6 zz)Q  )o-$-f$5 1(,

1FI#NN1-!E $ % 0 0 A A(-c$//.B.D(EFI(,	(BI01N-;=N-i8 %6 AGGood3FGZZcZ2Fg/D&vFD;;',,&#VV$!--+ $ 4 4F ## $  %$F#$FR< 34NR/0"D|5 Hs   !I&r&   c                 H    U R                  X5      nX0R                  U5      4$ r   r)   _get_loss_from_gradr    r%   r&   d_truths       r!   r,    CategoricalCrossentropy.__call__   s&     --011':;;r$   c                    U R                  X!5      u  p4[        U5      nUR                  UR                  :w  a(  SUR                   SUR                   S3n[        U5      eUR	                  US:  5      (       d  UR	                  US:  5      (       a  Sn[        U5      eUR	                  US:  5      (       d  UR	                  US:  5      (       a  Sn[        U5      eX-
  nXt-  nU R
                  (       a  XqR                  S   -  nU$ )NzBCannot calculate CategoricalCrossentropy loss: mismatched shapes:  vs .r   r   zVCannot calculate CategoricalCrossentropy loss with guesses outside the [0,1] interval.z[Cannot calculate CategoricalCrossentropy loss with truth values outside the [0,1] interval.)rc   r   r[   rU   anyrA   )r    r%   r&   targetrb   r\   err
differences           r!   r)    CategoricalCrossentropy.get_grad   s    **6;f%==FLL(VW^WdWdVeeijpjvjviwwxyCS/!66'A+"&&1"5"5jCS/!66&1*
!3!3oCS/!%

>>#mmA&66Jr$   c                 F    U R                  X5      nU R                  U5      $ r   rf   rh   s       r!   r*    CategoricalCrossentropy.get_loss   s!    --0''00r$   ri   c                 (    US-  R                  5       $ )N   )sum)r    ri   s     r!   rg   +CategoricalCrossentropy._get_loss_from_grad   s    
!!r$   )r>   rC   r=   r<   rB   rA   )r3   r4   r5   r6   r   r	   str__annotations__r   rS   r   boolfloatr"   r   r
   rc   IntsOrFloatsOrStrsr,   r)   r*   rg   r8   r   r$   r!   r:   r:   5   s!   HSM""E#s(O,,S#X
 )-37$(!$! ! &	!
  c3h0! SM! !&?h ?58AS;T ?B<<);<	x	< 2D  $1 12D 1 1"8 " "r$   r:   zCategoricalCrossentropy.v1TNrA   r<   r=   rA   r<   r=   r   c                     [        XUS9$ )Nr~   r:   r~   s      r!   $configure_CategoricalCrossentropy_v1r      s     # r$   zCategoricalCrossentropy.v2rA   r<   r=   rB   rB   c                     [        U UUUS9$ )Nr   r   r   s       r!   $configure_CategoricalCrossentropy_v2r      s     ##	 r$   zCategoricalCrossentropy.v3r?   r@   rC   c                     [        U UUUUS9$ Nr@   r   r@   s        r!   $configure_CategoricalCrossentropy_v3r      s      ##' r$   c                       \ rS rSrSSSSSS.S\S\\\      S\\\\	4      S	\\   S
\
4
S jjrS\\   S\\   S\\\   \
4   4S jrS\\   S\\   S\\   4S jrS\\   S\\   S\
4S jrS\\   S\
4S jrSrg)SequenceCategoricalCrossentropy   TNr?   r@   rA   r<   r=   rB   rC   c                4    [        SUUUUS9U l        Xl        g )NFr@   )r:   ccrA   )r    rA   r<   r=   rB   rC   s         r!   r"   (SequenceCategoricalCrossentropy.__init__   s&     *'!+
 #r$   r%   r&   r   c                 L    U R                  X5      nU R                  U5      nX44$ r   rf   )r    r%   r&   gradslosss        r!   r,   (SequenceCategoricalCrossentropy.__call__   s*     g.''.{r$   c                    Sn[        U5      [        U5      :w  a  [        U5      e[        U5      n/ n[        X5       HF  u  pgU R                  R	                  Xg5      nU R
                  (       a  X-  nUR                  U5        MH     U$ )Nz]Cannot calculate SequenceCategoricalCrossentropy loss: guesses and truths must be same length)rP   rU   zipr   r)   rA   rT   )	r    r%   r&   rp   nd_scoresyhyd_yhs	            r!   r)   (SequenceCategoricalCrossentropy.get_grad   sx     nw<3v;&S/!L)EB77##B*D~~	OOD!	 *
 r$   c                 B    U R                  U R                  X5      5      $ r   )rg   r)   r+   s      r!   r*   (SequenceCategoricalCrossentropy.get_loss  s     ''g(FGGr$   r   c                 V    SnU H   nX R                   R                  U5      -  nM"     U$ )Nr?   )r   rg   )r    r   r   grads       r!   rg   3SequenceCategoricalCrossentropy._get_loss_from_grad  s-    DGG//55D r$   )r   rA   )r3   r4   r5   r6   r{   r   r	   ry   r   rS   r|   r"   r   r}   r
   r   r,   r)   r*   rg   r8   r   r$   r!   r   r      s
    )-37$(!$# # &	#
  c3h0# SM# #$)3;<N3O	tH~u$	%)3;<N3O	hH)H3;<N3OH	H
();  r$   r   z"SequenceCategoricalCrossentropy.v1rA   r<   c                     [        XS9$ )Nr   r   r   s     r!   ,configure_SequenceCategoricalCrossentropy_v1r     s     +YLLr$   z"SequenceCategoricalCrossentropy.v2rA   r<   rB   c                     [        XUS9$ )Nr   r   r   s      r!   ,configure_SequenceCategoricalCrossentropy_v2r     s     +Z r$   z"SequenceCategoricalCrossentropy.v3c                     [        U UUUUS9$ r   r   r@   s        r!   ,configure_SequenceCategoricalCrossentropy_v3r   %  s      +#' r$   c                   v    \ rS rSrSS.S\4S jjrS\S\S\\\4   4S	 jr	S\S\S\4S
 jr
S\S\S\4S jrSrg)
L2Distancei7  TrA   rA   c                    Xl         g r   r   )r    rA   s     r!   r"   L2Distance.__init__8  s    "r$   r%   r&   r   c                 F    U R                  X5      U R                  X5      4$ r   r(   r+   s      r!   r,   L2Distance.__call__;  r.   r$   c                     UR                   UR                   :w  a(  SUR                    SUR                    S3n[        U5      eX-
  nU R                  (       a  XAR                   S   -  nU$ )N1Cannot calculate L2 distance: mismatched shapes: rl   rm   r   )r[   rU   rA   )r    r%   r&   rp   rq   s        r!   r)   L2Distance.get_grad>  sd    ==FLL(Egmm_TXY_YeYeXffghCS/!%
>>#mmA&66Jr$   c                     UR                   UR                   :w  a(  SUR                    SUR                    S3n[        U5      eU R                  X5      nUS-  R                  5       $ )Nr   rl   rm   rv   )r[   rU   r)   rw   )r    r%   r&   rp   ri   s        r!   r*   L2Distance.get_lossG  s_    ==FLL(Egmm_TXY_YeYeXffghCS/!--0
!!r$   N)r3   r4   r5   r6   r{   r"   r   r
   r|   r,   r)   r*   r8   r   r$   r!   r   r   7  sl    ,0 #T #N N( NuXu_?U N ( x " "( "u "r$   r   zL2Distance.v1r   c                     [        U S9$ )Nr   )r   r   s    r!   configure_L2Distancer   P  s    	**r$   c                       \ rS rSrSSS.S\S\4S jjrS\S	\S
\\\4   4S jr	S\S	\S
\4S jr
S\S	\S
\4S jrS\S	\S
\4S jrSrg)CosineDistanceiU  TFrA   ignore_zerosrA   r   c                    Xl         X l        g r   r   )r    rA   r   s      r!   r"   CosineDistance.__init__V  s    "(r$   r%   r&   r   c                 F    U R                  X5      U R                  X5      4$ r   r(   r+   s      r!   r,   CosineDistance.__call__Z  r.   r$   c                 R   UR                   UR                   :w  a(  SUR                    SUR                    S3n[        U5      e[        U5      nUS-   nUS-   nUR                  R	                  USSS9nUR                  R	                  USSS9nXx-  n	XV-  R                  SSS9U	-  n
U
$ )N7Cannot calculate cosine similarity: mismatched shapes: rl   rm   :0yE>r   Taxiskeepdims)r[   rU   r   linalgnormrw   )r    r%   r&   rp   r\   r   r   norm_yhnorm_y	mul_normscosines              r!   get_similarityCosineDistance.get_similarity]  s    ==FLL(KGMM?Z^_e_k_k^llmnCS/!g&t^TM))..!d.;D9$	&1t4y@r$   c                 F   UR                   UR                   :w  a(  SUR                    SUR                    S3n[        U5      e[        U5      nU R                  (       a!  UR	                  U5      R                  SS9S:H  nUS-   nUS-   nUR                  R                  USSS	9nUR                  R                  USSS	9n	X-  n
Xg-  R                  SSS	9U
-  nXz-  XUS
-  -  -  -
  nU R                  (       a  SUW'   U R                  (       a  XR                   S   -  nU* $ )Nr   rl   rm   r   r   r   r   Tr   rv   )	r[   rU   r   r   absrw   r   r   rA   )r    r%   r&   rp   r\   zero_indicesr   r   r   r   r   r   r   s                r!   r)   CosineDistance.get_gradl  s   ==FLL(KGMM?Z^_e_k_k^llmnCS/! g&66&>--1-5:Lt^TM))..!d.;D9$	&1t4y@&!O"<=!"D>>--**Dur$   c                    UR                   UR                   :w  a(  SUR                    SUR                    S3n[        U5      e[        U5      nU R                  X5      nUR	                  US-
  5      nU R
                  (       a%  UR	                  U5      R                  SS9S:H  nSXg'   U R                  (       a  XaR                   S   -  nUR                  5       nU$ )Nr   rl   rm   r   r   r   )r[   rU   r   r   r   r   rw   rA   )	r    r%   r&   rp   r\   r   lossesr   r   s	            r!   r*   CosineDistance.get_loss  s    ==FLL(KGMM?Z^_e_k_k^llmnCS/!g&$$W5
#66&>--1-5:L#$F >>mmA..Fzz|r$   )r   rA   N)r3   r4   r5   r6   r{   r"   r   r
   r|   r,   r   r)   r*   r8   r   r$   r!   r   r   U  s    ,0u )T ) )N N( NuXu_?U Nh  U  ( x 4 ( u r$   r   zCosineDistance.v1Fr   r   c                     [        XS9$ )Nr   )r   r   s     r!   configure_CosineDistancer     s     IIIr$   c                 X    [        U 5      nUR                  U R                  SS9nSX1'   U$ )NrJ   rK   r   )r   rO   r[   )r%   r]   r\   rb   s       r!   rX   rX     s.    	'	"B777==7,DDMKr$   c                     [        U5      nUR                  UR                  SS9nUb0  U R                  S:X  a	  SX@U:H  '   U$ UR	                  U SS9nSXEU:H  '   U$ )NrJ   rK   r   r?   rM   r   )r   rO   r[   rZ   argmax)r&   r%   r=   r\   rb   labelss         r!   rY   rY     sn    	'	"B777==7,D ;;!,/D=() K YYvBY/F,/D=()Kr$   )r   r:   r   r   )0abcr   typingr   r   r   r   r   r	   r
   r   r   r   configr   typesr   r   utilr   r   r   r   r   r   IntsOrFloatsrS   ry   r}   r   r:   r   r{   r   r   r|   r   r   r   r   r   r   r   r   r   rX   rY   __all__r   r$   r!   <module>r      s       # 2				VX%&68Xc]HSMIJ F7665%/0 F4w"d w"t 
-. %)/3	 HSM" E#s(O,	
  / 
-. %)/3 $ HSM" E#s(O,	
   / 
-. %)/3 $  HSM" E#s(O,	
    /"2d 2j 
56MM&.x}&=M$M 7M 
56 %) $	 HSM" 	
 % 7 
56 %)/3 $  HSM" E#s(O,	
   % 7"" "2 
!.2 +t +z + "+@T @F 
$%EJJ-1JJ &JH 8  r$   