Ë
    ›¾jè  ã            
       ó  — 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
mZ ddlmZ eZeZ ej                   d«      dd	eed
f   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eef   dee   dee   ddfd„Zy)é    )ÚCallableÚOptionalÚTupleÚcasté   )Úregistry)ÚModel)ÚFloats1dÚFloats2d)Ú	get_widthzMultiSoftmax.v1NÚnOs.ÚnIÚreturnc           
      óV   — t        dt        t        t        | «      |dœd| idddœ¬«      S )aB  Neural network layer that predicts several multi-class attributes at once.
    For instance, we might predict one class with 6 variables, and another with 5.
    We predict the 11 neurons required for this, and then softmax them such
    that columns 0-6 make a probability distribution and columns 6-11 make another.
    Úmultisoftmax)ÚnOr   r   N)ÚWÚb)ÚinitÚdimsÚattrsÚparams)r	   Úforwardr   Úsum)r   r   s     úc/home/spazio/kingdom_calls/work5/transenv/lib/python3.12/site-packages/thinc/layers/multisoftmax.pyÚMultiSoftmaxr      s5   € ô ØÜÜÜ˜“H BÑ'Ø�cˆlØ Ñ%ôð ó    ÚmodelÚXÚis_trainc                 ó†  ‡ ‡‡	— ‰ j                   d   }t        t        ‰ j                  d«      «      Š	t        t        ‰ j                  d«      «      }dt
        dt        fˆ	ˆˆ fd„}‰ j                  j                  ‰‰	d¬«      }||z  }d	}|D ]0  }‰ j                  j                  |d d …|||z   …f   d¬
«       ||z  }Œ2 ||fS )Nr   r   r   ÚdYr   c                 óÜ   •— ‰j                  d‰j                  j                  | ‰d¬«      «       ‰j                  d| j                  d¬«      «       ‰j                  j                  | ‰«      S )Nr   T)Útrans1r   r   )Úaxis)Úinc_gradÚopsÚgemmr   )r"   r   r   r   s    €€€r   Úbackpropzforward.<locals>.backprop"   sQ   ø€ Ø�‰�s˜EŸI™IŸN™N¨2¨q¸˜NÓ>Ô?Ø�‰�s˜BŸF™F¨˜F›NÔ+Ø�y‰y�~‰~˜b !Ó$Ð$r   T)Útrans2r   )Úinplace)
r   r   r   Ú	get_paramr
   ÚOutTÚInTr'   r(   Úsoftmax)
r   r   r    r   r   r)   ÚYÚiÚout_sizer   s
   ``       @r   r   r      sÄ   ú€ Ø
�+‰+�eÑ
€CÜŒX�u—‘ sÓ+Ó,€AÜŒX�u—‘ sÓ+Ó,€Að%”Tð %œc÷ %ð
 	�	‰	�‰�q˜! DˆÓ)€AØˆ�F€AØ	€AØò ˆØ�	‰	×Ñ˜!šA˜q 1 x¡<Ð/Ð/Ñ0¸$ÐÔ?Ø	ˆX‰‰ðð ˆhˆ;Ðr   r0   c                 ó0  — |�| j                  dt        |«      «       | j                  d«      }| j                  d«      }| j                  d| j                  j                  ||«      «       | j                  d| j                  j                  |«      «       y )Nr   r   r   r   )Úset_dimr   Úget_dimÚ	set_paramr'   Úalloc2fÚalloc1f)r   r   r0   r   r   s        r   r   r   0   ss   € ð 	€}Ø�‰�dœI a›LÔ)Ø	�‰�tÓ	€BØ	�‰�tÓ	€BØ	‡O�O�C˜Ÿ™×*Ñ*¨2¨rÓ2Ô3Ø	‡O�O�C˜Ÿ™×*Ñ*¨2Ó.Õ/r   )N)NN)Útypingr   r   r   r   Úconfigr   r   r	   Útypesr
   r   Úutilr   r.   r-   ÚlayersÚintr   Úboolr   r   © r   r   ú<module>rA      sÛ   ðß 2Ó 2å Ý ß &Ý à€Ø€ð €‡�Ð"Ó#ñ�e˜C ˜H‘oð ¨8°C©=ð ÀEÈ#ÈtÈ)ÑDTò ó $ðð �5˜˜d˜Ñ#ð ¨ð °tð ÀÀdÈHÀnÑ@Uó ð( KOñ0Ø��d�Ñð0Ø (¨¡ð0Ø9AÀ$¹ð0à	ô0r   