Ë
    ›¾j  ã                   óŽ  — d dl mZmZmZmZ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mZmZ ddlmZ dd	lmZ dd
lmZ  edeeef   ¬«      ZeZ e
j6                  d«      dddddœdededee   dee   dee   dee   deeef   fd„«       Zdeeef   dededeeef   fd„Z 	 	 ddedeeef   dee   dee   ddf
d„Z!y) é    )ÚAnyÚCallableÚDictÚOptionalÚTupleÚTypeVarÚUnionÚcasté   )Úregistry)Úuniform_init)ÚModel)ÚFloats1dÚFloats2dÚInts1dÚInts2d)Úpartialé   )Úints_getitem)ÚchainÚInT)ÚboundzHashEmbed.v1N)ÚseedÚcolumnÚinitializerÚdropoutÚnOÚnVr   r   r   r   Úreturnc          
      óP  — ||dœ}|€t         }|�||d<   t        dt        t        t        |«      ddi| |ddœ|¬«      }|€|j
                  |j                  d<   |�!t        t        t        d	d«      |f«      |«      }||j                  d
<   t        t        t        t        f   |«      S )u'  
    An embedding layer that uses the â€œhashing trickâ€� to map keys to distinct values.
    The hashing trick involves hashing each key four times with distinct seeds,
    to produce four likely differing values. Those values are modded into the
    table, and the resulting vectors summed to produce a single result. Because
    itâ€™s unlikely that two different keys will collide on all four â€œbucketsâ€�,
    most distinct keys will receive a distinct vector under this scheme, even
    when the number of vectors in the table is very low.
    )r   r   NÚdropout_rateÚ	hashembedÚE)r   r   ÚnI)ÚinitÚparamsÚdimsÚattrsr   r   r   )r   r   Úforwardr   r%   Úidr(   r   r   Úslicer
   r   ÚOutT)r   r   r   r   r   r   r(   Úmodels           ú`/home/spazio/kingdom_calls/work5/transenv/lib/python3.12/site-packages/thinc/layers/hashembed.pyÚ	HashEmbedr/      s¸   € ð& (.°tÑ<€EØÐÜ"ˆØÐØ 'ˆˆnÑÜØÜÜ”T˜;Ó'Ø�Tˆ{Ø˜b¨Ñ-Øô€Eð €|Ø#Ÿh™hˆ�‰�FÑØÐô
 ”l¤E¨!¨T£N°FÐ#;Ó<¸eÓDˆØ"€E‡K�K�ÑÜ””cœ4�iÑ  %Ó(Ð(ó    r-   ÚidsÚis_trainc                 ó¶  ‡ ‡	‡
‡‡— t        t        ‰ j                  d«      «      Š‰j                  d   }‰j                  d   }t	        |«      dk(  r)‰ j
                  j                  d|‰j                  ¬«      }nÇ‰ j
                  j                  |d¬«      }|j                  d   Š‰ j                  d   }‰ j
                  j                  ||«      |z  Š
‰ j
                  j                  ‰‰
«      }d Š	|rM‰ j                  j                  d«      }t        t        ‰ j
                  j                  |f|«      «      Š	‰	�|‰	z  }dt        d	t         fˆ	ˆ
ˆ ˆˆfd
„}||fS )Nr#   r   r   ©ÚdtypeÚuint64r   r!   Ú	d_vectorsr   c                 ó~  •— ‰�| ‰z  }  ‰j                   j                  ‰	j                  Ž }‰j                   j                  ‰j                  d¬«      }t        |j                  d   «      D ]"  }‰j                   j                  |||   | «       Œ$ ‰j                  d|«       ‰j                   j                  ‰«      }|S )NÚir4   r   r#   )	ÚopsÚalloc2fÚshapeÚ	as_contigÚTÚrangeÚscatter_addÚinc_gradÚalloc1i)
r7   ÚdEÚkeysTr9   ÚdXÚ	drop_maskÚkeysr-   ÚnNÚvectorss
        €€€€€r.   Úbackpropzforward.<locals>.backpropP   s§   ø€ ØÐ Ø˜Ñ"ˆIØˆU�Y‰Y×Ñ §¡Ð.ˆØ—	‘	×#Ñ# D§F¡F°#Ð#Ó6ˆÜ�u—{‘{ 1‘~Ó&ò 	;ˆAØ�I‰I×!Ñ! " e¨A¡h°	Õ:ð	;à�‰�s˜BÔØ�Y‰Y×Ñ˜rÓ"ˆØˆ	r0   )r
   r   Ú	get_paramr<   Úlenr:   r;   r5   r=   r(   ÚhashÚ
gather_addÚgetr   Úget_dropout_maskr,   r   )r-   r1   r2   r   r   Úoutputr   r   rJ   rF   rG   rH   rI   s   `        @@@@r.   r)   r)   ;   s1  ü€ ô ”8˜UŸ_™_¨SÓ1Ó2€GØ	�‰�qÑ	€BØ	�‰�qÑ	€BÜ
ˆ3ƒx�1‚}Ø Ÿ9™9×,Ñ,¨Q°¸'¿-¹-Ð,ÓH‰à�i‰i×!Ñ! #¨XÐ!Ó6ˆØ�Y‰Y�q‰\ˆØ—K‘K Ñ'ˆØ�y‰y�~‰~˜c 4Ó(¨2Ñ-ˆØ—‘×%Ñ% g¨tÓ4ˆØˆ	ÙØ',§{¡{§¡°~Ó'FˆGÜœX u§y¡y×'AÑ'AÀ2À%ÈÓ'QÓRˆIØÐ$Ø˜)Ñ#�ð	œDð 	¤V÷ 	ñ 	ð �8ÐÐr0   ÚXÚYc                 óŽ   —  | |j                   |j                  d«      |j                  d«      f«      }|j                  d|«       y )Nr   r   r#   )r:   Úget_dimÚ	set_param)r   r-   rR   rS   r#   s        r.   r%   r%   ^   s9   € ñ 	�E—I‘I §¡¨dÓ 3°U·]±]À4Ó5HÐIÓJ€AØ	‡O�O�C˜Õr0   )NN)"Útypingr   r   r   r   r   r   r	   r
   Úconfigr   Úinitializersr   r-   r   Útypesr   r   r   r   Úutilr   Úarray_getitemr   r   r   r,   ÚlayersÚintÚfloatr/   Úboolr)   r%   © r0   r.   ú<module>rb      sO  ðß M× MÓ Må Ý 'Ý ß 6Ó 6Ý Ý 'Ý áˆe˜5 ¨ Ñ0Ô1€Ø€ð €‡��Ó ð
 Ø Ø&*Ø#ò()Øð()àð()ð �3‰-ð	()ð
 �S‰Mð()ð ˜(Ñ#ð()ð �e‰_ð()ð ˆ3�ˆ9Ñò()ó !ð()ðV Ø�˜�Ñð Ø%+ð Ø7;ð à
ˆ4�ˆ>Ñó ðL Øñ	Øðà�˜�Ñðð �Ñðð ��~ð	ð
 
ôr0   