
    i3/                        d dl Z d dlZd dlmZ d dlmZmZmZmZ  e j                  dd      Z
 e j                  g dd      Z e j                  g d	g d
g dg dg      Z e j                  g d      Z e j                  g dg dg dg dg      Zg dZ e j                  g dg      Z e j                  dg      ZdgZdZd Zej,                  j/                  d e        ed       e       g      ej,                  j/                  de
eeg      d               Zej,                  j/                  deefeefg      d        Zd Zej,                  j/                  deg dfg      d        Zej,                  j/                  deefeefg      d         Zej,                  j/                  d!eegeegg feegeegg feegeegg d"fg      d#        Zej,                  j/                  d!egg d$gg d"fg      d%        Zd& Zd' Z d( Z!d) Z"ej,                  j/                  d*d+i e
effd,i e
gegffd-d.d/ie
effd0d.d/ie
effd1d.d/ie
gegffd2d.d/ie
gegffd3i e
e
ffd4ddd5e
e
ffg      d6        Z#y)7    N)registry)CategoricalCrossentropyCosineDistance
L2DistanceSequenceCategoricalCrossentropy)   r   f)dtype)r      r   i)皙?      ?333333?)皙?r   333333?)r   r   r   )r   r   r   )   r   r   r   )r   r   r   )r   r   r   )r   r   r   )CBAr   )皙?r           r   r   g-C6?c                     t               j                  t        t              } | j                  dk(  sJ | j
                  t        j
                  k(  sJ t               j                  t        gt        g      } | d   j                  dk(  sJ | d   j
                  t        j
                  k(  sJ t               j                  g g       g k(  sJ y )Nfloat32r   )r   get_gradscores0labels0r
   shaper   )d_scoress    f/var/www/vps2.regionflexible.com/Desarrollo/venv/lib/python3.12/site-packages/thinc/tests/test_loss.py	test_lossr       s    &(11'7CH>>Y&&&>>W]]***.0997)gYOHA;	)))A;---*,55b"=CCC    distT)ignore_zerosvectc                     t        | j                  ||      d   d         t        j                  dt              k(  sJ | j                  ||      t        j                  dt              k(  sJ y )Nr   )intr   pytestapproxepsget_loss)r"   r$   s     r   test_equalityr+   '   s[    
 t}}T4(+A./6==C3HHHH==t$a(====r!   zguesses, labelsc                 8   t        d      j                  | |      }|j                  | j                  k(  sJ |d   d   t        j                  dt
              k(  sJ |d   d   t        j                  dt
              k(  sJ |d   d   t        j                  dt
              k(  sJ |d   d   t        j                  dt
              k(  sJ |d   d   t        j                  dt
              k(  sJ |d	   d   t        j                  dt
              k(  sJ |d	   d   t        j                  dt
              k(  sJ |d	   d   t        j                  d
t
              k(  sJ t        d      j                  | |      }|t        j                  dt
              k(  sJ y )NT	normalizer   r   r   皙r   g      ?r         пgp=
ף?r   r   r   r'   r(   r)   r*   guesseslabelsr   losss       r   test_categorical_crossentropyr6   0   so    '6??PH>>W]]*** A;q>V]]34444A;q>V]]45555 A;q>V]]1c2222A;q>V]]45555A;q>V]]45555 A;q>V]]1c2222A;q>V]]1c2222A;q>V]]5#6666"T2;;GVLD6==3////r!   c                     t        j                  dg      } t        j                  g dg      }t        j                  t        d      5  t        d      j                  ||        d d d        t        j                  g dg      }t        j                  t        d      5  t        d      j                  ||        d d d        t        j                  g dg      }t        j                  g dg      }t        j                  t        d	      5  t        d      j                  ||       d d d        t        j                  g d
g      }t        j                  t        d	      5  t        d      j                  ||       d d d        y # 1 sw Y   +xY w# 1 sw Y   xY w# 1 sw Y   {xY w# 1 sw Y   y xY w)Nr   )r/   r   r   zCannot calculate.*guesses)matchTr-   )g?r   r   )r   r   r   zCannot calculate.*truth)g       @r   r   )numpyasarrayr'   raises
ValueErrorr   r   )r4   guesses_negguesses_larger_than_one
guesses_oktargets_negtargets_larger_than_ones         r   *test_crossentropy_incorrect_scores_targetsrB   I   si   ]]A3F--!1 23K	z)E	F N$/88fMN $mm_,=>	z)E	F 
$/88#V	


 01J--!1 23K	z)C	D R$/88[QR $mm_,=>	z)C	D 
$/88/	

 
N N
 
R R
 
s0   
F"FF)*F5FF&)F25F>c                    t        dd      j                  | |      }|j                  | j                  k(  sJ |d   d   t        j                  dt
              k(  sJ |d   d   t        j                  dt
              k(  sJ |d   d   dk(  sJ |d   d   dk(  sJ |d   d   dk(  sJ |d	   d   t        j                  dt
              k(  sJ |d	   d   t        j                  dt
              k(  sJ |d	   d   t        j                  d
t
              k(  sJ t        dd      j                  | |      }|t        j                  dt
              k(  sJ y NTr   )r.   missing_valuer   r   r/   r   r   r   r0   gHzG?r1   r2   s       r   .test_categorical_crossentropy_int_list_missingrF   b   s\   
 'QGPPH >>W]]*** A;q>V]]34444A;q>V]]45555 A;q>S   A;q>S   A;q>S    A;q>V]]1c2222A;q>V]]1c2222A;q>V]]5#6666"TCLLD 6==3////r!   c                    t        dd      j                  | |      }|j                  | j                  k(  sJ |d   d   t        j                  dt
              k(  sJ |d   d   t        j                  dt
              k(  sJ |d   d   dk(  sJ |d   d   dk(  sJ |d   d   dk(  sJ |d	   d   t        j                  dt
              k(  sJ |d	   d   t        j                  dt
              k(  sJ |d	   d   t        j                  d
t
              k(  sJ t        dd      j                  | |      }|t        j                  dt
              k(  sJ y rD   r1   r2   s       r   %test_categorical_crossentropy_missingrH      s\    'QGPPH >>W]]*** A;q>V]]34444A;q>V]]45555 A;q>S   A;q>S   A;q>S    A;q>V]]1c2222A;q>V]]1c2222A;q>V]]5#6666"TCLLD 6==3////r!   zguesses, labels, names)r   r   r   c                    t        d|      j                  | |      }|d   }|d   }|j                  t        j                  k(  sJ |j                  t        j                  k(  sJ |d   d   t        j                  dt              k(  sJ |d   d   t        j                  dt              k(  sJ t        d|      j                  | |      }|d   }|d   }|d   d   t        j                  dt              k(  sJ |d   d   t        j                  d	t              k(  sJ |d
   d   t        j                  dt              k(  sJ |d
   d   t        j                  dt              k(  sJ |d
   d
   t        j                  dt              k(  sJ |d   d   t        j                  dt              k(  sJ |d   d   t        j                  dt              k(  sJ |d   d
   t        j                  dt              k(  sJ |d   d   t        j                  dt              k(  sJ |d   d   t        j                  dt              k(  sJ t        d|      j                  | |      }|t        j                  dt              k(  sJ y )NF)r.   namesr   r   r   gٿTr   gɿr   r   r   g      r   gffffffֿgq=
ףp?)	r   r   r   guesses1guesses2r'   r(   r)   r*   )r3   r4   rJ   r   	d_scores1	d_scores2r5   s          r   &test_sequence_categorical_crossentropyrO      sY    /eLUUH II??hnn,,,??hnn,,,Q<?fmmC5555Q<?fmmD#6666.UKTTH IIQ<?fmmC5555Q<?fmmD#6666 Q<?fmmAs3333Q<?fmmC5555Q<?fmmC5555 Q<?fmmAs3333Q<?fmmAs3333Q<?fmmD#6666 Q<?fmmC5555Q<?fmmE37777*TGPPD 6==s++++r!   )r   z!A z!Cc                    t        d|dd      j                  | |      }|d   }|d   d   t        j                  dt              k(  sJ |d   d   t        j                  dt              k(  sJ |d   d	   t        j                  d
t              k(  sJ |d   d   t        j                  dt              k(  sJ |d   d   t        j                  dt              k(  sJ |d   d	   t        j                  dt              k(  sJ |d	   d   t        j                  dt              k(  sJ |d	   d   t        j                  dt              k(  sJ |d	   d	   t        j                  dt              k(  sJ |d   d   t        j                  dt              k(  sJ |d   d   t        j                  dt              k(  sJ |d   d	   t        j                  dt              k(  sJ y )NF!rP   )r.   rJ   
neg_prefixrE   r   gr   r   r   r   r   r   r   )r   r   r'   r(   r)   )r3   r4   rJ   r   	d_scores0s        r   *test_sequence_categorical_missing_negativerU      s    /uBhw  I Q<?fmmD#6666Q<?fmmC5555Q<?fmmC5555 Q<?fmmC5555Q<?fmmC5555Q<?fmmC5555 Q<?fmmC5555Q<?fmmC5555Q<?fmmC5555 Q<?fmmC5555Q<?fmmC5555Q<?fmmC5555r!   c                  b   t        j                  ddgddgg      } t        j                  ddgddgg      }t               j                  | |      }|j                  | j                  k(  sJ t         j
                  j                  |d   t        j                  |d   j                        t        t               t        d	
      j                  | |      }|t        j                  dt              k(  sJ t        d
      j                  | |      }|t        j                  dt              k(  sJ y )Nr   r      	   
      r   rtolatolFr-      T)r9   r:   r   r   r   testingassert_allclosezerosr)   r*   r'   r(   vec1vec2d_vecsloss_not_normalizedloss_normalizeds        r   test_L2rh      s    ==1a&1a&)*D==1a&2q'*+D\""4.F<<4::%%%	MM!!q	5;;vay/c "  %u5>>tTJ&--C"8888 4099$EOfmmAs3333r!   c                  2   t        j                  ddgddgg      } t        j                  ddgddgg      }t        d      j                  | |      }|j                  | j                  k(  sJ |d   d   dk  sJ |d   d   dkD  sJ |d   d   dk  sJ |d   d   dkD  sJ t        d	      j                  | |      }|t        j                  dt              k(  sJ t        d      j                  | |      }|t        j                  dt              k(  sJ y )
Nr   r   rZ   rW      Tr-   r   F)	r9   r:   r   r   r   r*   r'   r(   r)   rb   s        r   test_cosine_orthogonalrk      s   ==1a&1a&)*D==1a&1a&)*Dd+44T4@F<<4::%%%!9Q<!!9Q<!!9Q<!!9Q<!(59BB4N&--3"7777$t4==dDIOfmmAs3333r!   c                  b   t        j                  ddgddgddgg      } t        j                  ddgddgddgg      }t               j                  | |      }|j                  | j                  k(  sJ t         j
                  j                  |t        j                  |j                        t        t        	       t        d
      j                  | |      }|t        j                  dt              k(  sJ t        d      j                  | |      }|t        j                  dt              k(  sJ y )Nr   r   rW   rX   r   P   Z   i,  r[   Fr-   r   T)r9   r:   r   r   r   r_   r`   ra   r)   r*   r'   r(   )rc   rd   d_vec1rf   rg   s        r   test_cosine_equalrp     s    ==1a&1a&1a&12D==1a&2r(S#J78D&&tT2F<<4::%%%	MM!!&%++fll*C#TW!X(59BB4N&--3"7777$t4==dDIOfmmAs3333r!   c                      t        j                  g dg      } t        j                  ddgg      }t        j                  t              5  t               j                  | |       d d d        y # 1 sw Y   y xY w)N)r   r   r   r   r   )r9   r:   r'   r;   r<   r   r   )rc   rd   s     r   test_cosine_unmatchedrr   "  sZ    ==)%D==1a&"D	z	" .!!$-. . .s   
A..A7zname,kwargs,argszCategoricalCrossentropy.v1z"SequenceCategoricalCrossentropy.v1zCategoricalCrossentropy.v2rS   rR   zCategoricalCrossentropy.v3z"SequenceCategoricalCrossentropy.v2z"SequenceCategoricalCrossentropy.v3zL2Distance.v1zCosineDistance.v1)r.   r#   c                     dd| i|i}t        j                  |      d   } |j                  | }t        |t        t
        f      r|d   }|j                  dk(  sJ  |j                  |   ||  y)zUTest that losses are loaded and configured correctly from registry
    (as partials).testz@lossesr   r   N)r   resolver   
isinstancelisttuplendimr*   )namekwargsargscfgfuncr5   s         r   test_loss_from_configr   )  sy    8 It.v.
/CC (D4==$D$u&Aw99>>DMM4$Kr!   )$r9   r'   thincr   	thinc.apir   r   r   r   ra   r   r:   r   rK   labels1labels1_fulllabels1_stringsrL   labels2labels2_stringsr)   r    markparametrizer+   r6   rB   rF   rH   rO   rU   rh   rk   rp   rr   r    r!   r   <module>r      sN       %++fC
(
%--	
- 5==/?IyQR
%--
%u}}iIyIJ&5==/*+
%--
%D 
$&D(I:<X '8X!>?> @>
 7+h-EF00,
2 0	04 7+h-EF004 
H	126
H	g6;
H	A?S%,%,P 
+,o>6664"4&4 . 	%rGW+=>	-rWIy3IJ	%c':Wg<NO	%c':Wg<NO03Y	"	
 13Y	"	

 
"w015g	
!2
32
r!   