o
    hV                     @   sd   d dl mZ d dlZd dlZd dlZd dlmZ d dlZedZ	G dd deZ
G dd dZdS )	    )EnumN)UnpicklingErrorstanzac                   @   s   e Zd ZdZdZdS )	ModelType      N)__name__
__module____qualname__LSTMENSEMBLE r   r   b/var/www/html/env_mimamsha/lib/python3.10/site-packages/stanza/models/constituency/base_trainer.pyr      s    r   c                   @   sr   e Zd ZdddZddd	Zd
d Zdd Zedd Zedd Z	edd Z
dd Zdd ZedddZdS )BaseTrainerNr           Fc	           	      C   s4   || _ || _|| _|| _|| _|| _|| _|| _d S Nmodel	optimizer	schedulerepochs_trainedbatches_trainedbest_f1
best_epochfirst_optimizer)	selfr   r   r   r   r   r   r   r   r   r   r   __init__   s   
zBaseTrainer.__init__Tc                 C   s   | j  }|| j| j| j| j| jj| jd}| 	 |d< |r1| j
d ur1| j
 |d< | j |d< tj||dd td| d S )N)paramsr   r   r   r   
model_typer   	bert_loraoptimizer_state_dictscheduler_state_dictF)_use_new_zipfile_serializationzModel saved to %s)r   
get_paramsr   r   r   r   r   namer   get_peft_paramsr   
state_dictr   torchsaveloggerinfo)r   filenamesave_optimizerr   
checkpointr   r   r   r(      s   
	zBaseTrainer.savec                 C      | j   d S r   )r   	log_normsr   r   r   r   r/   /      zBaseTrainer.log_normsc                 C   r.   r   )r   
log_shapesr0   r   r   r   r2   2   r1   zBaseTrainer.log_shapesc                 C      | j jS r   )r   transitionsr0   r   r   r   r4   5      zBaseTrainer.transitionsc                 C   r3   r   )r   root_labelsr0   r   r   r   r6   9   r5   zBaseTrainer.root_labelsc                 C   s   t | j jS r   )nextr   
parametersdevicer0   r   r   r   r9   =   s   zBaseTrainer.devicec                 C   
   | j  S r   )r   trainr0   r   r   r   r;   A      
zBaseTrainer.trainc                 C   r:   r   )r   evalr0   r   r   r   r=   D   r<   zBaseTrainer.evalc              
   C   s  ddl m} ddlm} tj| sG|dddu r!td	| tjtj
|d | r8tj
|d | } ntd	| tj
|d | z0ztj| dd	 d
d}W n! tyu } ztj| dd	 dd}td W Y d}~nd}~ww W n ty   td|   w td|  |d }	d|vrtj|d< t|d trt|d  |d< |d tjkr|}
n|d tjkr|}
ntd|d  |
|	|dd|||}|d }|dd}|d }|d }d|vr|	d d o||	d d d k }||d< |d }|r|
|||| }|
||||}nd}d}|d tjkrCtd |j D ]}td||j|  q)|||||||||d S |d tjkrW|||||||||d!S td|d  )"z?
        Load back a model and possibly its optimizer.
        r   )EnsembleTrainer)Trainersave_dirNz4Cannot find model in {} and args['save_dir'] is Nonez Cannot find model in {} or in {}c                 S      | S r   r   storagelocr   r   r   <lambda>^       z"BaseTrainer.load.<locals>.<lambda>T)weights_onlyc                 S   rA   r   r   rB   r   r   r   rE   `   rF   Fa-  The saved constituency parser has an old format using Enum, set, unsanitized Transitions, etc.  This version of Stanza can support reading both the new and the old formats.  Future versions will only allow loading with weights_only=True.  Please resave the constituency parser using this version ASAP.zCannot load model from %szLoaded model from %sr   r   zUnexpected model type: %sr   r   r   r   r   r   config
multistageepochsr   z-- MODEL CONFIG --z
  --%s: %sr   )ensembler   r   r   r   r   r   r   )#stanza.models.constituency.ensembler>   "stanza.models.constituency.trainerr?   ospathexistsgetFileNotFoundErrorformatjoinr'   loadr   warningswarnBaseExceptionr)   	exceptiondebugr   r   
isinstancestrr   
ValueErrormodel_from_paramsload_optimizerload_schedulerargskeys)r+   ra   r_   foundation_cache	peft_namer>   r?   r-   er   clazzr   r   r   r   r   build_simple_adadeltar   r   r   kr   r   r   rU   I   sl   
 	
zBaseTrainer.load)NNr   r   r   r   F)T)NFNN)r   r	   r
   r   r(   r/   r2   propertyr4   r6   r9   r;   r=   staticmethodrU   r   r   r   r   r      s    




r   )enumr   loggingrN   r'   pickler   rV   	getLoggerr)   r   r   r   r   r   r   <module>   s    
