Ë
    ›¾jg.  ã                   óØ  — U d dl Z d dlmZ d dl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mZ eeef   Zeeee   ef   Zeeee   ef   Zdd	d
dœZeeeeeef   f   ed<   dddded   ed   d	dœZeeeeeef   f   ed<    ej6                  d«      ed   fed   ed   ed   ed    e	eed   «      ed   d	dœdedededededededefd„«       Z ej6                  d«      ed   fed   ed   ed   ed   ed    e	eed   «      d	dœdedededededededefd „«       Z ej6                  d!«      ed   ed    e	eed   «      d	d"œdededededef
d#„«       Z G d$„ d%e«      Z g d&¢Z!y)'é    N)Údefaultdict)ÚDictÚListÚOptionalÚTupleÚUnionÚcasté   )Úget_array_ops)Úregistry)ÚFloatsXdÚ	Generatorç        Tç      ð?)ÚL2ÚL2_is_weight_decayÚ	grad_clipÚSGD_DEFAULTSgü©ñÒMbP?gÍÌÌÌÌÌì?g+‡ÙÎ÷ï?g:Œ0âŽyE>r   r   )Ú
learn_rateÚbeta1Úbeta2Úepsr   r   r   ÚADAM_DEFAULTSzRAdam.v1r   r   r   r   r   )r   r   r   r   r   r   Úuse_averagesr   c                ó*   — t        | |||||||d¬«	      S )NT)r   r   r   r   r   r   r   Ú	use_radam©Ú	Optimizer)r   r   r   r   r   r   r   r   s           úZ/home/spazio/kingdom_calls/work5/transenv/lib/python3.12/site-packages/thinc/optimizers.pyÚRAdamr       s,   € ô ØØØØØØ-ØØ!Øô
ð 
ó    zAdam.v1)r   r   r   r   r   r   r   c                ó*   — t        | |||||||d¬«	      S )NF)r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   s           r   ÚAdamr#   8   s,   € ô ØØØØØØØ-Ø!Øô
ð 
r!   zSGD.v1)r   r   r   r   c          	      ó&   — t        | |||dd|¬«      S )Nr   )r   r   r   r   r   r   r   )r   r   r   r   r   s        r   ÚSGDr%   Q   s&   € ô ØØØØ-ØØØ!ôð r!   c                   ó¢  — e Zd ZU dZeeef   ed<   eeef   ed<   eeeef      ed<   ee	e
f   ed<   eeef   ed<   eeef   ed<   eed<   eed	<   eed
<   eed<   eed<   eed<   eed<   eed<   eeee         ed<   g d¢Zed   ed   ed   ed   ed   ddddœd	ededededededededefd„Zd„ Zd„ Zddœdeee	f   deded efd!„Zd"„ Zd#„ Zy$)%r   z”Do various flavours of stochastic gradient descent, with first and
    second order momentum. Currently support 'vanilla' SGD, Adam, and RAdam.
    Úmom1Úmom2ÚaveragesÚ	schedulesÚ	nr_updateÚ	last_seenr   r   Úb1Úb2r   r   r   r   Ú_radam_buffer)r'   r(   r)   r*   r+   r,   r   r   r-   r.   r   r   r   r   r/   r   r   TF)r   r   r   r   r   r   r   r   r   c                óÞ  — i | _         i | _        |ri | _        nd| _        i | _        t	        t
        «      | _        t	        t
        «      | _        | j                  d|«       | j                  d|«       | j                  d|«       | j                  d|«       | j                  d|«       | j                  d|«       || _	        |	| _
        t        d«      D �
cg c]  }
g d	¢‘Œ c}
| _        yc c}
w )
al  
        Initialize an optimizer.

        learn_rate (float): The initial learning rate.
        L2 (float): The L2 regularization term.
        beta1 (float): First-order momentum.
        beta2 (float): Second-order momentum.
        eps (float): Epsilon term for Adam etc.
        grad_clip (float): Gradient clipping.
        use_averages (bool): Whether to track moving averages of the parameters.
        use_radam (bool): Whether to use the RAdam optimizer.
        L2_is_weight_decay (bool): Whether to interpret the L2 parameter as a
            weight decay term, in the style of the AdamW optimizer.
        Nr   r   r-   r.   r   r   é
   )NNN)r'   r(   r)   r*   r   Úintr+   r,   Ú_set_attr_or_scheduler   r   Úranger/   )Úselfr   r   r   r   r   r   r   r   r   Ú_s              r   Ú__init__zOptimizer.__init__Ž   sÌ   € ð6 ˆŒ	ØˆŒ	ÙØˆD�Mà ˆDŒMØˆŒÜ$¤SÓ)ˆŒÜ$¤SÓ)ˆŒØ×"Ñ" ;°	Ô:Ø×"Ñ" <°Ô<Ø×"Ñ" 4¨Ô/Ø×"Ñ" 4¨Ô/Ø×"Ñ" 5¨#Ô.Ø×"Ñ" 4¨Ô,Ø"ˆŒØ"4ˆÔÜ:?À»)ÖD°QÔ0ÒDˆÕùÒDs   ÃC*c                 óD  — t        |t        t        t        f«      rt	        | ||«       y t        |t
        «      rt        |«      }|| j                  |<   	 t	        | |t        |«      «       y # t        t        f$ r$}d|› dt        |«      › d|› �}t        |«      ‚d }~ww xY w)NzInvalid schedule for 'z' (z)
)Ú
isinstanceÚfloatÚboolr2   ÚsetattrÚlistÚiterr*   ÚnextÚStopIterationÚ	TypeErrorÚtypeÚ
ValueError)r5   ÚnameÚvalueÚeÚerrs        r   r3   zOptimizer._set_attr_or_schedule¼   s�   € Ü�eœe¤T¬3Ð/Ô0Ü�D˜$ Õ&ä˜%¤Ô&Ü˜U›�Ø#(ˆD�N‰N˜4Ñ ð&Ü˜˜d¤D¨£KÕ0øÜ!¤9Ð-ò &Ø.¨t¨f°C¼¸U»°}ÀCÈÀsÐK�Ü  “oÐ%ûð&ús   ÁA, Á,BÁ;BÂBc                 ó°   — | j                   j                  «       D ]  \  }}	 t        |«      }t        | ||«       Œ  y # t        $ r t	        | |«      }Y Œ'w xY w)N)r*   Úitemsr?   r@   Úgetattrr<   )r5   ÚkeyÚschedulerE   s       r   Ústep_scheduleszOptimizer.step_schedulesÉ   s[   € Ø!Ÿ^™^×1Ñ1Ó3ò 	&‰MˆC�ð+Ü˜X›�ô �D˜#˜uÕ%ñ	&øô !ò +Ü  cÓ*’ð+ús   ¢=½AÁAr   )Úlr_scalerK   ÚweightsÚgradientrN   c                ó–  — t        |«      dk  r||fS t        |«      }| j                  |xx   dz  cc<   | j                  |   }| j                  dk7  r| j                  s|| j                  |z  z  }| j
                  r|j                  || j
                  «      }| j                  r| j                  ||||||«      \  }}nb| j                  dkD  r)| j                  dkD  r| j                  ||||||«      \  }}n*| j                  dkD  rt        ‚||| j                  z  |z  z  }|dz  }| j                  dk7  r.| j                  r"||| j                  z  | j                  z  |z  z  }| j                  �X|| j                  vr*|j                  |j                   d¬«      | j                  |<   |j#                  | j                  |   ||«       ||fS )z•Call the optimizer with weights and a gradient. The key is the
        identifier for the parameter, usually the node ID and parameter name.
        r
   r   r   Úfloat32)Údtype)Úlenr   r+   r   r   r   Úclip_gradientr   Ú_radamr-   r.   Ú_adamÚNotImplementedErrorr   r)   ÚallocÚshapeÚupdate_averages)r5   rK   rO   rP   rN   ÚopsÚnr_upds          r   Ú__call__zOptimizer.__call__Ñ   s«  € ô ˆx‹=˜1ÒØ˜HÐ$Ð$Ü˜GÓ$ˆØ�‰�sÓ˜qÑ ÓØ—‘ Ñ$ˆØ�7‰7�aŠ< × 7Ò 7Ø˜Ÿ™ 'Ñ)Ñ)ˆHØ�>Š>Ø×(Ñ(¨°4·>±>ÓBˆHØ�>Š>Ø $§¡Ø�W˜h¨°#°vó!ÑˆG‘Xð �W‰W�sŠ]˜tŸw™w¨š}Ø $§
¡
Ø�W˜h¨°#°vó!ÑˆG‘Xð �W‰W�sŠ]Ü%Ð%à�x $§/¡/Ñ1°HÑ<Ñ<ˆGØ�A‰ˆØ�7‰7�aŠ<˜D×3Ò3Ø�x $§/¡/Ñ1°D·G±GÑ;¸gÑEÑEˆGØ�=‰=Ð$Ø˜$Ÿ-™-Ñ'Ø%(§Y¡Y¨w¯}©}ÀI YÓ%N�—‘˜cÑ"Ø×Ñ §¡¨cÑ 2°G¸VÔDØ˜Ð Ð r!   c                 ó˜  — || j                   vr(|j                  |j                  «      | j                   |<   || j                  vr(|j                  |j                  «      | j                  |<   |j	                  ||j                  «      }|j	                  ||j                  «      }| j
                  |   | j                   |   | j                  |   dœ}	| j                  | j                  | j                  g| j                  d| j                  dœ}
d}|	d   |	d   }}|
d   \  }}||z  }|d|z
  |d	z  z  z  }||z  }|d|z
  |z  z  }|	d
xx   dz  cc<   |
d   t        |	d
   dz  «         }|	d
   |d   k(  r|d   |d	   }}n”|	d
   |d<   ||	d
   z  }d	d|z
  z  dz
  }|d	|	d
   z  |z  d|z
  z  z
  }||d<   |dk\  rCt        j                  d|z
  |dz
  z  |dz
  z  |d	z
  z  |z  |z  |d	z
  z  «      d||	d
   z  z
  z  }n|rdd||	d
   z  z
  z  }nd}||d	<   |dk\  rN|
d   dk7  r||
d    |
d   z  |z  z  }|j                  j                  |«      |
d   z   }|| |
d   z  ||z  z  z  }n.|dkD  r)|
d   dk7  r||
d    |
d   z  |z  z  }|| |
d   z  |z  z  }|j                  ||j                   «      |j                  ||j                   «      fS )N)ÚstepÚexp_avgÚ
exp_avg_sqr   )ÚlrÚbetasr   Úweight_decayÚbufferTra   rb   rd   r
   é   r`   rf   r1   r   é   é   r   éÿÿÿÿre   rc   r   )r'   Úalloc1fÚsizer(   Ú	reshape1fr+   r   r-   r.   r   r/   r2   ÚmathÚsqrtÚxpÚ	reshape_frZ   )r5   r\   rO   ÚgradrN   rK   r]   Ú
weights_1DÚgradient_1DÚstateÚgroupÚdegenerated_to_sgdra   rb   r   r   ÚbufferedÚN_smaÚ	step_sizeÚbeta2_tÚ	N_sma_maxÚdenoms                         r   rV   zOptimizer._radamú   sr  € Ø�d—i‘iÑØ Ÿ[™[¨¯©Ó6ˆD�I‰I�c‰NØ�d—i‘iÑØ Ÿ[™[¨¯©Ó6ˆD�I‰I�c‰Nà—]‘] 7¨G¯L©LÓ9ˆ
Ø—m‘m D¨$¯)©)Ó4ˆð
 —N‘N 3Ñ'Ø—y‘y ‘~ØŸ)™) C™.ñ
ˆð —/‘/Ø—g‘g˜tŸw™wÐ'Ø—8‘8ØØ×(Ñ(ñ
ˆð "Ðà# IÑ.°°lÑ0C�ˆØ˜W‘~‰ˆˆuð 	�eÑˆ
Ø�q˜5‘y [°!¡^Ñ4Ñ4ˆ
à�5ÑˆØ�A˜‘I Ñ,Ñ,ˆàˆf‹˜Ñ‹Ø˜‘?¤3 u¨V¡}°rÑ'9Ó#:Ñ;ˆØ�‰=˜H Q™KÒ'Ø'¨™{¨H°Q©K�9‰Eà ™-ˆH�Q‰KØ˜u V™}Ñ,ˆGØ˜Q ™Y™¨!Ñ+ˆIØ  E¨&¡MÑ 1°GÑ ;¸qÀ7¹{Ñ KÑKˆEØˆH�Q‰Kð ˜ŠzÜ ŸI™IØ˜‘[Ø˜q‘yñ"à  1‘}ñ&ð ˜q‘yñ"ð ñ	ð
  ñ ð ! 1‘}ñ&óð ˜ %¨¡-Ñ/Ñ/ñ1‘	ñ $Ø 1 u°°f±Ñ'=Ñ#=Ñ>‘	à�	Ø#ˆH�Q‰Kð �AŠ:Ø�^Ñ$¨Ò)Ø˜u ^Ñ4Ð4°u¸T±{ÑBÀZÑOÑO�
Ø—F‘F—K‘K 
Ó+¨e°E©lÑ:ˆEØ˜9˜* u¨T¡{Ñ2°gÀ±oÑFÑF‰JØ˜Š]Ø�^Ñ$¨Ò)Ø˜u ^Ñ4Ð4°u¸T±{ÑBÀZÑOÑO�
Ø˜9˜* u¨T¡{Ñ2°WÑ<Ñ<ˆJà�M‰M˜* g§m¡mÓ4Ø�M‰M˜+ t§z¡zÓ2ð
ð 	
r!   c                 ó  — |j                  ||j                  «      }|j                  ||j                  «      }|| j                  vr(|j                  |j                  «      | j                  |<   || j                  vr(|j                  |j                  «      | j                  |<   | j                  |   }	| j                  |   }
| j
                  }| j                  }d||z  z
  }d||z  z
  }| j                  |dz  z  |z  }| j                  }|j                  |||	|
|||||z  «      \  }}}	}
|	| j                  |<   |
| j                  |<   |j                  ||j                  «      |j                  ||j                  «      fS )Nr   g      à?)rm   rl   r'   rk   r(   r-   r.   r   r   Úadamrq   rZ   )r5   r\   rO   rP   rN   rK   r]   rs   rt   r'   r(   r-   r.   Úfix1Úfix2rc   r   s                    r   rW   zOptimizer._adamH  sT  € Ø—]‘] 7¨G¯L©LÓ9ˆ
Ø—m‘m H¨h¯m©mÓ<ˆØ�d—i‘iÑØ Ÿ[™[¨¯©Ó6ˆD�I‰I�c‰NØ�d—i‘iÑØ Ÿ[™[¨¯©Ó6ˆD�I‰I�c‰NØ�y‰y˜‰~ˆØ�y‰y˜‰~ˆØ�W‰WˆØ�W‰WˆØ�b˜&‘jÑ!ˆØ�b˜&‘jÑ!ˆØ�_‰_˜t S™yÑ(¨4Ñ/ˆØ�h‰hˆà.1¯h©hØ˜ T¨4°°R¸¸bÀ8¹mó/
Ñ+ˆ
�K  tð ˆ�	‰	�#‰Øˆ�	‰	�#‰à�M‰M˜* g§m¡mÓ4Ø�M‰M˜+ x§~¡~Ó6ð
ð 	
r!   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚKeyTr   Ú__annotations__r   Ústrr   r2   r:   r;   r   Ú	__slots__r   Ú
FloatOrSeqr7   r3   rM   r   r^   rV   rW   © r!   r   r   r   e   s—  … ñð ˆt�Xˆ~Ñ
ÓØ
ˆt�Xˆ~Ñ
ÓØ�t˜D (˜NÑ+Ñ,Ó,Ø�C˜�NÑ#Ó#Ø�D˜#�I‰ÓØ�D˜#�I‰ÓØÓØÓØƒIØƒIØ	ƒJØƒIØƒOØÓØ˜˜X hÑ/Ñ0Ñ1Ó1ò€Ið, ' tÑ,Ø)¨'Ñ2Ø)¨'Ñ2Ø'¨Ñ.Ø -¨kÑ :Ø!ØØ#'ò,Eàð,Eð ð	,Eð
 ð,Eð ð,Eð ð,Eð ð,Eð ð,Eð ð,Eð !ó,Eò\&ò&ð ò'!à�3˜�8‰_ð'!ð ð'!ð ð	'!ð ó'!òRL
ó\
r!   r   )r#   r    r%   r   r   r   )"rn   Úcollectionsr   Útypingr   r   r   r   r   r	   Úbackendsr   Úconfigr   Útypesr   r   r2   rˆ   r†   r:   rŠ   ÚIntOrSeqr   r;   r‡   r   Ú
optimizersr    r#   r%   Úobjectr   Ú__all__r‹   r!   r   ú<module>r•      sÄ  ðÜ Ý #ß ;× ;å #Ý ß &àˆS�#ˆX�€Ø�5˜$˜u™+ yÐ0Ñ1€
Ø��d˜3‘i Ð*Ñ+€ð ØØñ4€ˆd�3˜˜e T¨3Ð.Ñ/Ð/Ñ0ó ð ØØØØ
�tÑ
Ø˜kÑ*Øñ5€ˆt�C˜˜u d¨CÐ/Ñ0Ð0Ñ1ó ð €×Ñ�ZÓ à*¨<Ñ8ðð & gÑ.Ø% gÑ.Ø# EÑ*Ø" 4Ñ(Ù# D¨-Ð8LÑ*MÓNØ)¨+Ñ6ØòØðð ðð ð	ð
 
ðð 	ðð ðð ðð òó !ðð0 €×Ñ�YÓà*¨<Ñ8ðð # 4Ñ(Ø% gÑ.Ø% gÑ.Ø# EÑ*Ø)¨+Ñ6Ù# D¨-Ð8LÑ*MÓNØòØðð 	ðð ð	ð
 ðð 
ðð ðð ðð òó  ðð0 €×Ñ�XÓð " $Ñ'Ø(¨Ñ5Ù# D¨,Ð7KÑ*LÓMØòØðð 	ðð ð	ð
 ðð òó ðô&{
�ô {
ò| Q�r!   