o
     ¢i3/  ã                   @   s²  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dZ
e jg d¢ddZe  g d	¢g d
¢g d¢g d¢g¡Ze  g d¢¡Ze  g d¢g d¢g d¢g d¢g¡Zg d¢Ze  g d¢g¡Ze  dg¡ZdgZdZdd„ Zej deƒ eddeƒ g¡ej de
eeg¡dd„ ƒƒZej deefeefg¡dd „ ƒZd!d"„ Zej deg d¢fg¡d#d$„ ƒZej deefeefg¡d%d&„ ƒZe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)d*„ ƒZej d'egg d+¢gg d(¢fg¡d,d-„ ƒZd.d/„ Zd0d1„ Z d2d3„ Z!d4d5„ Z"ej d6d7i e
effd8i e
gegffd9d:d;ie
effd<d:d;ie
effd=d:d;ie
gegffd>d:d;ie
gegffd?i e
e
ffd@dddAœe
e
ffg¡dBdC„ ƒZ#dS )Dé    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                  C   s~   t ƒ  tt¡} | jdksJ ‚| jtjksJ ‚tƒ  tgtg¡} | d jdks(J ‚| d jtjks2J ‚tƒ  g g ¡g ks=J ‚d S )NÚfloat32r   )r   Úget_gradÚscores0Úlabels0r	   Úshaper   )Úd_scores© r   úI/home/ubuntu/.local/lib/python3.10/site-packages/thinc/tests/test_loss.pyÚ	test_loss   s   r   ÚdistT)Úignore_zerosÚvectc                 C   sH   t |  ||¡d d ƒt dt¡ksJ ‚|  ||¡t dt¡ks"J ‚d S )Nr   )Úintr   ÚpytestÚapproxÚepsÚget_loss)r    r"   r   r   r   Útest_equality'   s   ( r(   zguesses, labelsc                 C   s,  t dd | |¡}|j| jksJ ‚|d d t dt¡ksJ ‚|d d t dt¡ks-J ‚|d d t dt¡ks;J ‚|d d t dt¡ksIJ ‚|d d t dt¡ksWJ ‚|d	 d t dt¡kseJ ‚|d	 d t dt¡kssJ ‚|d	 d t d
t¡ksJ ‚t dd | |¡}|t dt¡ks”J ‚d S )NT©Ú	normalizer
   r   r   çš™™™™™¹¿r   g      Ð?r   ç      Ð¿g¤p=
×£Î?©r   r   r   r$   r%   r&   r'   ©ÚguessesÚlabelsr   Úlossr   r   r   Útest_categorical_crossentropy0   s   r2   c                  C   sb  t  dg¡} t  g d¢g¡}tjtdd tdd || ¡ W d   ƒ n1 s)w   Y  t  g d¢g¡}tjtdd tdd || ¡ W d   ƒ n1 sQw   Y  t  g d¢g¡}t  g d¢g¡}tjtd	d tdd ||¡ W d   ƒ n1 sw   Y  t  g d
¢g¡}tjtd	d tdd ||¡ W d   ƒ d S 1 sªw   Y  d S )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   )r0   Úguesses_negÚguesses_larger_than_oneÚ
guesses_okÚtargets_negÚtargets_larger_than_oner   r   r   Ú*test_crossentropy_incorrect_scores_targetsI   s,   ÿ
ÿÿÿ
ÿ"ÿr=   c                 C   ó  t ddd | |¡}|j| jksJ ‚|d d t dt¡ks J ‚|d d t dt¡ks.J ‚|d d dks8J ‚|d d dksBJ ‚|d d dksLJ ‚|d	 d t dt¡ksZJ ‚|d	 d t dt¡kshJ ‚|d	 d t d
t¡ksvJ ‚t ddd | |¡}|t dt¡ksŠJ ‚d S ©NTr   )r*   Úmissing_valuer
   r   r+   r   r   r   r,   gHáz®G½?r-   r.   r   r   r   Ú.test_categorical_crossentropy_int_list_missingb   s    ÿÿrA   c                 C   r>   r?   r-   r.   r   r   r   Ú%test_categorical_crossentropy_missing€   s    ÿÿrB   zguesses, labels, names)r   r   r   c                 C   sä  t d|d | |¡}|d }|d }|jtjksJ ‚|jtjks"J ‚|d d t dt¡ks0J ‚|d d t dt¡ks>J ‚t d|d | |¡}|d }|d }|d d t dt¡ks^J ‚|d d t d	t¡kslJ ‚|d
 d t dt¡kszJ ‚|d
 d t dt¡ksˆJ ‚|d
 d
 t dt¡ks–J ‚|d d t dt¡ks¤J ‚|d d t dt¡ks²J ‚|d d
 t dt¡ksÀJ ‚|d d t dt¡ksÎJ ‚|d d t dt¡ksÜJ ‚t d|d | |¡}|t dt¡ksðJ ‚d S )NF)r*   Únamesr   r
   r   gš™™™™™Ù¿Tr   gš™™™™™É¿r   r   r   g      à¿r   gffffffÖ¿gq=
×£pñ?)	r   r   r   Úguesses1Úguesses2r$   r%   r&   r'   )r/   r0   rC   r   Ú	d_scores1Ú	d_scores2r1   r   r   r   Ú&test_sequence_categorical_crossentropy   s8   	ÿÿÿrH   )r   z!AÚ z!Cc                 C   st  t d|ddd | |¡}|d }|d d t dt¡ksJ ‚|d d t dt¡ks,J ‚|d d	 t d
t¡ks:J ‚|d d t dt¡ksHJ ‚|d d t dt¡ksVJ ‚|d d	 t dt¡ksdJ ‚|d	 d t dt¡ksrJ ‚|d	 d t dt¡ks€J ‚|d	 d	 t dt¡ksŽJ ‚|d d t dt¡ksœJ ‚|d d t dt¡ksªJ ‚|d d	 t dt¡ks¸J ‚d S )NFú!rI   )r*   rC   Ú
neg_prefixr@   r   gÍÌÌÌÌÌì¿r
   r   r   r   r   r   r   )r   r   r$   r%   r&   )r/   r0   rC   r   Ú	d_scores0r   r   r   Ú*test_sequence_categorical_missing_negativeÍ   s$   ÿþ rM   c                  C   s¾   t  ddgddgg¡} t  ddgddgg¡}tƒ  | |¡}|j| jks%J ‚t jj|d t  |d j¡ttd td	d
 	| |¡}|t
 dt¡ksJJ ‚tdd
 	| |¡}|t
 dt¡ks]J ‚d S )Nr
   r   é   é	   é
   é   r   ©ÚrtolÚatolFr)   é   T)r4   r5   r   r   r   ÚtestingÚassert_allcloseÚzerosr&   r'   r$   r%   ©Úvec1Úvec2Úd_vecsÚloss_not_normalizedÚloss_normalizedr   r   r   Útest_L2î   s   ÿr_   c                  C   sî   t  ddgddgg¡} t  ddgddgg¡}tdd | |¡}|j| jks'J ‚|d d dk s1J ‚|d d dks;J ‚|d d dk sEJ ‚|d d dksOJ ‚td	d | |¡}|t dt¡ksbJ ‚tdd | |¡}|t dt¡ksuJ ‚d S )
Nr   r   rQ   rN   é   Tr)   r
   F)	r4   r5   r   r   r   r'   r$   r%   r&   rY   r   r   r   Útest_cosine_orthogonalÿ   s   ra   c                  C   sÂ   t  ddgddgddgg¡} t  ddgddgddgg¡}tƒ  | |¡}|j| jks+J ‚t jj|t  |j¡ttd	 td
d 	| |¡}|t
 dt¡ksLJ ‚tdd 	| |¡}|t
 dt¡ks_J ‚d S )Nr
   r   rN   rO   r   éP   éZ   i,  rR   Fr)   r   T)r4   r5   r   r   r   rV   rW   rX   r&   r'   r$   r%   )rZ   r[   Úd_vec1r]   r^   r   r   r   Útest_cosine_equal  s   re   c                  C   s^   t  g d¢g¡} t  ddgg¡}t t¡ tƒ  | |¡ W d   ƒ d S 1 s(w   Y  d S )N)r
   r   r   r
   r   )r4   r5   r$   r6   r7   r   r   )rZ   r[   r   r   r   Útest_cosine_unmatched"  s
   "ÿrf   zname,kwargs,argszCategoricalCrossentropy.v1z"SequenceCategoricalCrossentropy.v1zCategoricalCrossentropy.v2rK   rJ   zCategoricalCrossentropy.v3z"SequenceCategoricalCrossentropy.v2z"SequenceCategoricalCrossentropy.v3zL2Distance.v1zCosineDistance.v1)r*   r!   c                 C   sb   dd| i|¥i}t  |¡d }|j|Ž }t|ttfƒr|d }|jdks&J ‚|j|Ž  ||Ž  dS )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Úfuncr1   r   r   r   Útest_loss_from_config)  s   

rr   )$r4   r$   Úthincr   Ú	thinc.apir   r   r   r   rX   r   r5   r   rD   Úlabels1Úlabels1_fullÚlabels1_stringsrE   Úlabels2Úlabels2_stringsr&   r   ÚmarkÚparametrizer(   r2   r=   rA   rB   rH   rM   r_   ra   re   rf   rr   r   r   r   r   Ú<module>   s”    ""
ÿÿ
þ
ÿ
ýþ
(ÿþ

ý
ýýðþ