o
    Lεi<                     @   s8   d dl Z d dlZd dlmZ eddZG dd dZdS )    N)
namedtuple
LabelScorez#match model ref precision recall f1c                   @   sh   e Zd Zdd Zdd Zedd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd ZdS )TrainLogParserc                 C   s@   d | _ d| _d | _d | _d | _d | _g | _d | _g | _g | _	d S )N)
statefeatgen_percentfeatgen_num_featuresfeatgen_secondstraining_secondsstoring_seconds
iterationslast_iterationlogevents)self r   I/home/ubuntu/.local/lib/python3.10/site-packages/pycrfsuite/_logparser.py__init__	   s   
zTrainLogParser.__init__c                 C   s   | j | | jd u r!d| _| | | jddt| j f dS t| d| j |}|d urM| jd d t| j }}|dv rD|d8 }| j|||f |S )	NSTARTINGstartr   handle_   )preparedoptimization_end   )r   appendr   handle_STARTINGr   lengetattr)r   lineeventr   endr   r   r   feed   s   

zTrainLogParser.feedc                 C   s$   | j d \}}}d| j|| S )Nr    )r   joinr   )r   r!   r   r"   r   r   r   last_log&   s   zTrainLogParser.last_logc                 C   s   | dr
d| _d S d S )NzFeature generationFEATGEN)
startswithr   r   r    r   r   r   r   +   s   

zTrainLogParser.handle_STARTINGc                 C   sf   |dv r|  j d7  _ dS td|}|rt|d| _d S | |d ur1| || _d| _dS d S )Nz0123456789.10r   featgen_progresszNumber of features: (\d+)r   AFTER_FEATGENfeatgen_end)	r   rematchintgroupr   _secondsr	   r   r   r    mr   r   r   handle_FEATGEN/   s   zTrainLogParser.handle_FEATGENc                 C   s8   |  |d urd| _| | dS d|v rd| _dS d S )N	ITERATIONr   zterminated with errorAFTER_ITERATIONprepare_error)_iteration_headr   handle_ITERATIONr)   r   r   r   handle_AFTER_FEATGEN>   s   
z#TrainLogParser.handle_AFTER_FEATGENc                    s>    d ur  i d_jj n	 dkr!d_dS  fdd}|ddt |d	d
t |ddt |ddt |ddt |ddt |ddt td }|rxt|	djd< t|	djd< t|	djd< td }|rt
t|	dt|	d}|jd< t|jd< td }|rt
t|	dt|	d}|jd < t|jd!< td" }|rtd+i t|	dt|	dt|	d#t|	d$t|	d%t|	d&d'jd( |	d< td) }|rtd+i d*d*d*d d d d'jd( |	d< d S d S ),N)numscores
r6   	iterationc                    s,   t | }|r||dj| < d S d S )Nr   )r-   r.   r0   r   )keypatterntypr3   r    r   r   r   add_reS   s   z/TrainLogParser.handle_ITERATION.<locals>.add_relosszLoss: (\d+\.\d+)feature_normzFeature norm: (\d+\.\d+)
error_normzError norm: (\d+\.\d+)active_featureszActive features: (\d+)linesearch_trialszLine search trials: (\d+)linesearch_stepzLine search step: (\d+\.\d+)timez/Seconds required for this iteration: (\d+\.\d+)zHMacro-average precision, recall, F1: \((\d\.\d+), (\d\.\d+), (\d\.\d+)\)r   avg_precisionr   
avg_recall   avg_f1zItem accuracy: (\d+) / (\d+)item_accuracyitem_accuracy_floatz Instance accuracy: (\d+) / (\d+)instance_accuracyinstance_accuracy_floatzF\s{4}(.+): \((\d+), (\d+), (\d+)\) \((\d\.\d+), (\d\.\d+), (\d\.\d+)\)            )r.   modelref	precisionrecallf1r<   z.\s{4}(.+): \(0, 0, 0\) \(\*{6}, \*{6}, \*{6}\)r   r   )r8   r   r   r   r   floatr/   r-   r.   r0   	fractionsFractionr   )r   r    rC   r3   accr   rB   r   r9   H   sx    
 
zTrainLogParser.handle_ITERATIONc                 C   sV   |  |d urd| _| |S td|}|rt|d| _|dr)d| _dS d S )Nr5   z/Total seconds required for training: (\d+\.\d+)r   zStoring the modelSTORINGr   )	r8   r   r9   r-   r.   r\   r0   r
   r(   r2   r   r   r   handle_AFTER_ITERATION   s   

z%TrainLogParser.handle_AFTER_ITERATIONc                 C   s*   |dkrdS |  |r|  || _d S d S )Nr=   r"   )r1   r   r)   r   r   r   handle_STORING   s
   
zTrainLogParser.handle_STORINGc                 C   "   t d|}|rt|dS d S )Nz(\*{5} (?:Iteration|Epoch) #(\d+) \*{5}\nr   )r-   r.   r/   r0   r2   r   r   r   r8         zTrainLogParser._iteration_headc                 C   rc   )NzSeconds required: (\d+\.\d+)r   )r-   r.   r\   r0   r2   r   r   r   r1      rd   zTrainLogParser._secondsN)__name__
__module____qualname__r   r#   propertyr&   r   r4   r:   r9   ra   rb   r8   r1   r   r   r   r   r      s    

Jr   )r-   r]   collectionsr   r   r   r   r   r   r   <module>   s
    
