Ë
    b›¾j&  ã                   ó¼  — d dl Z d dlZd dlmZ d dlmZ d dlmZmZm	Z	m
Z
mZ d dl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 dd
lmZ ddlmZ ddlmZm Z m!Z! ddl"m#Z# 	 	 	 	 	 d(dedede
e   de
e$   de$de%de%fd„Z&deeee#f      de	e   fd„Z'	 d)dedede
e$   de%de$f
d„Z(dedee   dedede)f
d„Z*d „ Z+d!„ Z, G d"„ d#«      Z-	 d*d$ee)e$f   d%e$d&e$de.fd'„Z/y)+é    N)ÚCounter)ÚPath)ÚCallableÚIterableÚListÚOptionalÚUnion)ÚConfigÚModelÚ	OptimizerÚfix_random_seedÚset_dropout_rateÚset_gpu_allocator)ÚConfigValidationError)ÚPrinteré   )ÚErrors)ÚConfigSchemaPretrain)ÚDoc)Údot_to_objectÚload_model_from_configÚregistryé   )ÚExampleÚconfigÚ
output_dirÚresume_pathÚepoch_resumeÚuse_gpuÚsilentÚ	skip_lastc                 óz  ‡‡‡‡— t        |¬«      }| d   d   �t        | d   d   «       | d   d   }|dk\  r|rt        |«       d | d   d<   t        | «      }	|	j                  j                  «       }
t        j                  |
d   t        ¬	«      }t        |
|d
   «      }t        j                  d
|i«      d
   }|d   }t        |	|«      Š|d   Š|�t        ‰|||¬«      }nd}‰j                  d   }t        d¬«      Š|d   r|j                  d|› d|d   › d�«       n|j                  d|› �«       dddœ} |j                  d i |¤Ž d!ˆˆˆˆfd„	}	 t!        ||d   «      D ]±  }t#         | ||	«      «      «      D ]b  \  }}t%        |«      }t'        ‰|‰|«      }‰j)                  |||«      }|r |j                  |fi |¤Ž |d   sŒM||d   z  dk(  sŒY ||d¬«       Œd |d   r||d   z  dk(  s||d   dz
  k(  r ||«       n ||«       d‰_        Œ³ 	 |s ||d   d¬«       y y # |s ||d   d¬«       w w xY w)"N©Úno_printÚtrainingÚseedÚgpu_allocatorr   Ú
initializeÚinit_tok2vecÚpretraining)ÚschemaÚcorpusÚbatcherÚ	optimizer)r    Úlossi'  )Ú	frequencyÚn_save_epochz/Pre-training tok2vec layer - starting at epoch z - saving every z epoch)é   é
   r3   é   é   )Úrr6   r6   r6   r6   )ÚwidthsÚalignsc                 ó*  •— |rdnd}‰j                  ‰j                  «      5  |r‰	dz  }n‰	d| › |› d�z  }|j                  d«      5 }|j                  ‰j	                  d«      j                  «       «       d d d «       ‰
j                  ‰
j                  ‰
j                  | dœ}‰	d	z  j                  d
«      5 }|j                  t        j                  |«      dz   «       d d d «       d d d «       y # 1 sw Y   Œ{xY w# 1 sw Y   ŒxY w# 1 sw Y   y xY w)Nz.tempÚ zmodel-last.binÚmodelz.binÚwbÚtok2vec)Únr_wordr/   Ú
epoch_lossÚepochz	log.jsonlÚaú
)Ú
use_paramsÚaveragesÚopenÚwriteÚget_refÚto_bytesr>   r/   r?   ÚsrslyÚ
json_dumps)r@   Úis_tempÚis_lastÚis_temp_strÚ	save_pathÚfile_Úlogr;   r.   r   Útrackers          €€€€úa/home/spazio/kingdom_calls/work5/transenv/lib/python3.12/site-packages/spacy/training/pretrain.pyÚ_save_modelzpretrain.<locals>._save_modelF   s  ø€ Ù!(‘g¨bˆØ×Ñ˜i×0Ñ0Ó1ñ 	:ÙØ&¨>Ñ:‘	à&¨5°°¸°}ÀDÐ)IÑI�	Ø×!Ñ! $Ó'ð A¨5Ø—‘˜EŸM™M¨)Ó4×=Ñ=Ó?Ô@÷Að #Ÿ?™?ØŸ™Ø%×0Ñ0Øñ	ˆCð ˜{Ñ*×0Ñ0°Ó5ð :¸Ø—‘œE×,Ñ,¨SÓ1°DÑ8Ô9÷:÷	:ð 	:÷
Að Aú÷:ð :ú÷	:ð 	:ús<   £%D	Á/C1Á7AD	Â8(C=Ã D	Ã1C:	Ã6D	Ã=D	ÄD	Ä	DÚ
max_epochsÚn_save_everyT)rK   r   ç        )rL   ))ú#z# Wordsz
Total LossÚLosszw/s)FF)r   r   r   r   r   Úinterpolater   Úresolver   r   Úcreate_pretraining_modelÚ_resume_modelÚattrsÚProgressTrackerÚdividerÚrowÚrangeÚ	enumerateÚensure_docsÚmake_updateÚupdater?   )r   r   r   r   r   r    r!   ÚmsgÚ	allocatorÚnlpÚ_configÚPr,   r-   Ú	objectiveÚrow_settingsrS   r@   Úbatch_idÚbatchÚdocsr/   Úprogressr;   r.   rQ   s    `                     @@@rR   Úpretrainrq      s–  û€ ô ˜6Ô
"€CØˆjÑ˜&Ñ!Ð-Ü˜˜zÑ*¨6Ñ2Ô3Ø�zÑ" ?Ñ3€IØ�!‚|™	Ü˜)Ô$à+/€Fˆ<Ñ˜Ñ(Ü
  Ó
(€CØ�j‰j×$Ñ$Ó&€GÜ×Ñ˜ Ñ/Ô8LÔM€AÜ˜7 A h¡KÓ0€FÜ×Ñ˜x¨Ð0Ó1°(Ñ;€FØ�	‰l€GÜ$ S¨!Ó,€EØ�+‘€IàÐÜ$ U¨K¸ÈfÔU‰ð ˆà—‘˜FÑ#€Iä¨Ô.€GØˆÒØ�‰Ø=¸l¸^ÐK[Ð\]Ð^lÑ\mÐ[nÐntÐuõ	
ð 	�‰ÐEÀlÀ^ÐTÔUØ/Ð;TÑU€LØ€C‡G�GÑJ¸\ÒJ÷:ð :ð(7Ü˜<¨¨<©Ó9ò 	%ˆEÜ#,©W±V¸C³[Ó-AÓ#Bò 5‘�˜%Ü" 5Ó)�Ü" 5¨$°	¸9ÓE�Ø"Ÿ>™>¨%°°tÓ<�ÙØ�C—G‘G˜HÑ5¨Ò5Ø�^Ó$¨(°Q°~Ñ5FÑ*FÈ!Ó*KÙ ¨tÖ4ð5ð �Ò Ø˜1˜^Ñ,Ñ,°Ò1°U¸aÀ¹oÐPQÑ>QÒ5QÙ Õ&á˜EÔ"Ø!$ˆGÕñ	%ñ" Ù˜˜,™°Ö6ð ø‰yÙ˜˜,™°Ö6ð ús   ÅA5H( Ç	H( ÇAH( È(H:Úexamples_or_docsÚreturnc                 ó’   — g }| D ]?  }t        |t        «      r|j                  |«       Œ%|j                  |j                  «       ŒA |S ©N)Ú
isinstancer   ÚappendÚ	reference)rr   ro   Ú	eg_or_docs      rR   rc   rc   p   sE   € Ø€DØ%ò -ˆ	Ü�i¤Ô%Ø�K‰K˜	Õ"à�K‰K˜	×+Ñ+Õ,ð	-ð
 €Kó    r;   c                 óÚ  — t        |¬«      }|j                  d|› �«       |j                  d«      5 }|j                  «       }| j	                  d«      j                  |«       d d d «       |€^t        j                  dt        |«      «      }|r$t        |j                  d«      dd  d d «      d	z   }nt        t        j                  «      ‚|j                  d
|› �«       |S # 1 sw Y   ŒxY w)Nr#   zResume training tok2vec from: Úrbr=   zmodel\d+\.binr   é   éüÿÿÿr   zResuming from epoch: )r   ÚinforE   ÚreadrG   Ú
from_bytesÚreÚsearchÚstrÚintÚgroupÚ
ValueErrorr   ÚE1020)r;   r   r   r    rf   rO   Úweights_dataÚ
model_names           rR   r\   r\   z   sÝ   € ô ˜6Ô
"€CØ‡H�HÐ-¨k¨]Ð;Ô<Ø	×	Ñ	˜$Ó	ð : 5Ø—z‘z“|ˆØ�‰�iÓ ×+Ñ+¨LÔ9÷:ð Ðä—Y‘YÐ/´°[Ó1AÓBˆ
Ùä˜z×/Ñ/°Ó2°1°2Ð6°s¸Ð;Ó<¸qÑ@‰Lô œVŸ\™\Ó*Ð*à‡H�HÐ$ \ NÐ3Ô4ØÐ÷:ð :ús   ²1C!Ã!C*ro   r.   Úobjective_funcc                 ó    — | j                  |«      \  }} || j                  ||«      \  }} ||«       | j                  |«       t        |«      S )z¸Perform an update over a single batch of documents.

    docs (iterable): A batch of `Doc` objects.
    optimizer (callable): An optimizer.
    RETURNS loss: A float for the loss.
    )Úbegin_updateÚopsÚfinish_updateÚfloat)r;   ro   r.   r‹   ÚpredictionsÚbackpropr/   Ú	gradientss           rR   rd   rd   ‘   sQ   € ð "×.Ñ.¨tÓ4Ñ€K�Ù$ U§Y¡Y°°kÓB�O€Dˆ)ÙˆYÔØ	×Ñ˜	Ô"ô �‹;Ðrz   c                 ó†  — | j                  g ¬«      5  | j                  «        ddd«       t        | |«      }t        |«      j                  dk(  r8|j
                  dk7  r|j
                  nd}| j                  |«      j                  }	 |j                  | j                  d«      g¬«       |d   } || j                  |«      }|j                  | j                  d«      g¬«       t        ||d   «       |S # 1 sw Y   ŒÓxY w# t        $ r5 |d   }|d	   }t        t        j                  j                  ||¬
«      «      ‚w xY w)aË  Define a network for the pretraining. We simply add an output layer onto
    the tok2vec input model. The tok2vec input model needs to be a model that
    takes a batch of Doc objects (as a list), and returns a list of arrays.
    Each array in the output needs to have one row per token in the doc.
    The actual tok2vec layer is stored as a reference, and only this bit will be
    serialized to file and read back in when calling the 'train' command.
    )ÚenableNÚTok2VecListenerÚ*r=   zGive it a doc to infer shapes)ÚXÚ	componentÚlayer)r™   rš   rk   Údropout)Úselect_pipesr(   Úget_tok2vec_refÚtypeÚ__name__Úupstream_nameÚget_piper;   Úmake_docr‡   r   ÚE874ÚformatÚvocabr   )rh   Úpretrain_configr=   Úoriginal_tok2vecr™   rš   Úcreate_functionr;   s           rR   r[   r[   ¤   s>  € ð 
×	Ñ	 Ð	Ó	$ñ Ø�‰Ô÷ä˜c ?Ó3€GäˆGƒ}×ÑÐ!2Ò2à%,×%:Ñ%:¸cÒ%AˆG×!Ò!Àyð 	ð —,‘,Ð/Ó0×6Ñ6ˆðOØ×Ñ˜cŸl™lÐ+JÓKÐLÐÔMð & kÑ2€OÙ˜CŸI™I wÓ/€EØ	×Ñ˜Ÿ™Ð%DÓEÐFÐÔGÜ�U˜O¨IÑ6Ô7Ø€L÷)ð ûô ò OØ# KÑ0ˆ	Ø Ñ(ˆÜœŸ™×+Ñ+°iÀuÐ+ÓMÓNÐNðOús   “C6Â	"D Ã6C?Ä>E c                 óÊ   — |d   }|€'d}d}ddg|dœg}t        | j                  d   ||¬«      ‚| j                  |«      j                  }|d   r|j	                  |d   «      }|S )Nr™   zpTo use pretrained tok2vec weights, [pretraining.component] needs to specify the component that should load them.zcomponent can't be nullr*   )Úlocrf   )r   ÚerrorsÚdescrš   )r   r   r¡   r;   rG   )rh   r¦   Útok2vec_componentr¬   Úerrr«   rš   s          rR   r�   r�   Ã   s‹   € Ø'¨Ñ4ÐØÐ ðDð 	ð (ˆØ(¨+Ð6¸sÑCÐDˆÜ#Ø—:‘:˜mÑ,°VÀ$ô
ð 	
ð �L‰LÐ*Ó+×1Ñ1€EØ�wÒØ—‘˜o¨gÑ6Ó7ˆØ€Lrz   c                   ó   — e Zd Zdd„Zd„ Zy)r^   c                 ó¨   — d| _         d| _        d| _        t        «       | _        || _        t        j                  «       | _        d| _        d| _	        y )NrV   r   )
r/   Ú	prev_lossr>   r   Úwords_per_epochr0   ÚtimeÚ	last_timeÚlast_updater?   )Úselfr0   s     rR   Ú__init__zProgressTracker.__init__Ö   sD   € ØˆŒ	ØˆŒØˆŒÜ&›yˆÔØ"ˆŒÜŸ™›ˆŒØˆÔØˆ�rz   c                 óž  — | xj                   |z  c_         | xj                  |z  c_        t        d„ |D «       «      }| j                  |xx   |z  cc<   | xj                  |z  c_        | j                  | j
                  z
  }|| j                  k\  r½|t        j                  «       | j                  z
  z  }| j                  | _        t        j                  «       | _        | j                   | j                  z
  }|| j                  t        | j                   d¬«      t        |d¬«      t        |«      f}t        | j                   «      | _	        |S y )Nc              3   ó2   K  — | ]  }t        |«      –— Œ y ­wru   )Úlen)Ú.0Údocs     rR   ú	<genexpr>z)ProgressTracker.update.<locals>.<genexpr>ã   s   è ø€ Ò6¨#œS ŸXÑ6ùs   ‚r3   )Úwidthr4   )r/   r?   Úsumr²   r>   rµ   r0   r³   r´   r±   Ú_smart_roundr…   r�   )	r¶   r@   r/   ro   Úwords_in_batchÚwords_since_updateÚwpsÚloss_per_wordÚstatuss	            rR   re   zProgressTracker.updateà   s  € Ø�	Š	�TÑ�	Ø�Š˜4Ñ�ÜÑ6°Ô6Ó6ˆØ×Ñ˜UÓ# ~Ñ5Ó#Ø�Š˜Ñ&�Ø!Ÿ\™\¨D×,<Ñ,<Ñ<ÐØ §¡Ò/Ø$¬¯	©	«°d·n±nÑ(DÑEˆCØ#Ÿ|™|ˆDÔÜ!ŸY™Y›[ˆDŒNØ ŸI™I¨¯©Ñ6ˆMàØ—‘Ü˜TŸY™Y¨bÔ1Ü˜]°!Ô4Ü�C“ðˆFô # 4§9¡9Ó-ˆDŒNØˆMàrz   N)i@B )rŸ   Ú
__module__Ú__qualname__r·   re   © rz   rR   r^   r^   Õ   s   „ óórz   r^   Úfigurer¾   Úmax_decimalc                 óÂ   — t        t        t        | «      «      «      }||dz   z
  }|dk  rt        t        | «      «      S t        ||«      }dt        |«      z   dz   }|| z  S )z=Round large numbers as integers, smaller numbers as decimals.r   z%.Úf)rº   r„   r…   Úmin)rÉ   r¾   rÊ   Ún_digitsÚ	n_decimalÚ
format_strs         rR   rÀ   rÀ   ù   se   € ô ”3”s˜6“{Ó#Ó$€HØ˜ A™Ñ&€IØ�A‚~Ü”3�v“;ÓÐä˜	 ;Ó/ˆ	ØœC 	›NÑ*¨SÑ0ˆ
Ø˜FÑ"Ð"rz   )NNéÿÿÿÿTF)T)r3   r5   )0r‚   r³   Úcollectionsr   Úpathlibr   Útypingr   r   r   r   r	   rI   Ú	thinc.apir
   r   r   r   r   r   Úthinc.configr   Úwasabir   r«   r   Úschemasr   Útokensr   Úutilr   r   r   Úexampler   r…   Úboolrq   rc   r\   r�   rd   r[   r�   r^   r„   rÀ   rÈ   rz   rR   ú<module>rÝ      s  ðÛ 	Û Ý Ý ß <Õ <ã ÷÷ õ /Ý å Ý *Ý ß BÑ BÝ ð #'Ø"&ØØØñS7ØðS7àðS7ð ˜$‘ðS7ð ˜3‘-ð	S7ð
 ðS7ð ðS7ð óS7ðl (¨5°°g°Ñ+>Ñ"?ð ÀDÈÁIó ð RVñØðØ#ðØ3;¸C±=ðØJNðàóð.ØðØ  ™ðØ2;ðØMUðà
óò&ò>÷$!ñ !ðJ DEñ#Ø�%˜�*Ñð#Ø&)ð#Ø=@ð#àô#rz   