o
    idW                     @   s   d Z ddlZddlmZ ddlmZ ddlmZ ddlZddl	Z	ddl
mZ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mZmZmZmZmZmZmZmZmZm Z m!Z!m"Z" d	dl#m$Z$ d	dl%m&Z&m'Z'm(Z(m)Z) eeeeeeeee e!ei eee"edZ*e)+e,Z-dZ.i ddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/Z/g d0Z0d1d2 Z1d3d4 Z2d5d6 Z3d7d8 Z4d9d: Z5d;d< Z6eG d=d> d>Z7d?d@ Z8dMdBdCZ9dDdE Z:dFdG Z;dHdI Z<g dJZ=dKdL Z>dS )Nz'Configuration base class and utilities.    N)	dataclass)Path)Any)is_offline_mode
model_info)OfflineModeIsEnabled)HFValidationError   )__version__),MODEL_FOR_AUDIO_CLASSIFICATION_MAPPING_NAMES!MODEL_FOR_CAUSAL_LM_MAPPING_NAMESMODEL_FOR_CTC_MAPPING_NAMES,MODEL_FOR_IMAGE_CLASSIFICATION_MAPPING_NAMES*MODEL_FOR_IMAGE_SEGMENTATION_MAPPING_NAMES*MODEL_FOR_IMAGE_TEXT_TO_TEXT_MAPPING_NAMES!MODEL_FOR_MASKED_LM_MAPPING_NAMES(MODEL_FOR_OBJECT_DETECTION_MAPPING_NAMES*MODEL_FOR_QUESTION_ANSWERING_MAPPING_NAMES,MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING_NAMES/MODEL_FOR_SEQUENCE_CLASSIFICATION_MAPPING_NAMES(MODEL_FOR_SPEECH_SEQ_2_SEQ_MAPPING_NAMES0MODEL_FOR_TABLE_QUESTION_ANSWERING_MAPPING_NAMES,MODEL_FOR_TOKEN_CLASSIFICATION_MAPPING_NAMES6MODEL_FOR_ZERO_SHOT_IMAGE_CLASSIFICATION_MAPPING_NAMES)ParallelMode)is_datasets_availableis_tokenizers_availableis_torch_availablelogging)text-generationimage-classificationimage-segmentation	fill-maskobject-detectionquestion-answeringtext2text-generationtext-classificationtable-question-answeringtoken-classificationaudio-classificationautomatic-speech-recognitionzzero-shot-image-classificationzimage-text-to-textz
<!-- This model card has been generated automatically according to the information the Trainer had access to. You
should probably proofread and complete it, then remove this comment. -->
r"   zMasked Language Modelingr    zImage Classificationr!   zImage Segmentationzmultiple-choicezMultiple Choicer#   zObject Detectionr$   zQuestion AnsweringsummarizationSummarizationr'   zTable Question Answeringr&   zText Classificationr   zCausal Language Modelingr%   z&Sequence-to-sequence Language Modelingr(   zToken ClassificationtranslationTranslationzzero-shot-classificationzZero Shot Classificationr*   zAutomatic Speech Recognitionr)   zAudio Classification)accuracybleuf1matthews_correlationpearsonr	precisionrecallrouge	sacrebleu	spearmanrwerc                 C   s    | d u rg S t | tr| gS | S N)
isinstancestr)obj r>   X/sda-disk/www/egybert/egybert_env/lib/python3.10/site-packages/transformers/modelcard.py_listifys   s
   
r@   c                 C   sF   |d u r| S t |tr|g}dd |D }t|dkr| S || |< | S )Nc                 S   s   g | ]}|d ur|qS r:   r>   .0vr>   r>   r?   
<listcomp>   s    z*_insert_values_as_list.<locals>.<listcomp>r   )r;   r<   len)metadatanamevaluesr>   r>   r?   _insert_values_as_list|   s   
rI   c                 C   s\   | d u ri S i }| D ]!}|  ddtv r!|||  dd< q
|  dkr+||d< q
|S )N _rouge1r6   )lowerreplaceMETRIC_TAGS)eval_resultsresultkeyr>   r>   r?   #infer_metric_tags_from_eval_results   s   rS   c                 C   s   |d u r| S || |< | S r:   r>   )rF   rG   valuer>   r>   r?   _insert_value   s   rU   c                 C   s(   t  sdS ddlm}m} t| ||fS )NFr   )DatasetIterableDataset)r   datasetsrV   rW   r;   )datasetrV   rW   r>   r>   r?   is_hf_dataset   s   rZ   c                 C   s<   g }|   D ]}t|ttfr|t|7 }q|| q|S r:   )rH   r;   tuplelistappend)mappingrQ   rC   r>   r>   r?   _get_mapping_values   s   r_   c                   @   st  e Zd ZU eed< dZeee B dB ed< dZedB ed< dZeee B dB ed< dZ	edB ed< dZ
eee B dB ed< dZeee B dB ed< dZeee B dB ed	< dZeee B dB ed
< dZeeef dB ed< dZeeef dB ed< dZee dB ed< dZeeef dB ed< dZedB ed< dd Zdd Zdd Zdd Ze										dddZdS )TrainingSummary
model_nameNlanguagelicensetagsfinetuned_fromtasksrY   dataset_tagsdataset_argsdataset_metadatarP   
eval_lineshyperparameterstrainersourcec              
   C   s   | j d u r=t s?| jd urAt| jdkrCzt| j}|jD ]}|dr+|dd  | _ qW d S  tjt	t
fy<   Y d S w d S d S d S d S )Nr   zlicense:   )rc   r   re   rE   r   rd   
startswithhttpx	HTTPErrorr   r   )selfinfotagr>   r>   r?   __post_init__   s$   




zTrainingSummary.__post_init__c                    s  d| j i}t| j}t| j}t| j}t| j}t|t|k r.|d gt|t|   }tt|| tt||}tt||}dd t| j	D }	g |d< t|	dkr`t dkr`|gS t|	dkrjd d i}	t dkrtd d i  fdd|	D }
|
D ]s\}}i }|d ur|	| |d|d	< |d ur|
|i } | |d||d
< || d ur|| |d
 d< t|dkrg |d< | D ]\}}|d ||| j| d qd	|v rd
|v rd|v r|d | qtd|  q|gS )NrG   c                 S   s   i | ]}|t v r|t | qS r>   )TASK_TAG_TO_NAME_MAPPING)rB   taskr>   r>   r?   
<dictcomp>   s    z6TrainingSummary.create_model_index.<locals>.<dictcomp>resultsr   c                    s   g | ]} D ]}||fqqS r>   r>   )rB   task_tagds_tagdataset_mappingr>   r?   rD      s    z6TrainingSummary.create_model_index.<locals>.<listcomp>)rG   typerw   rY   argsmetrics)rG   r~   rT   zLDropping the following result as it does not have all the necessary fields:
)ra   r@   rY   rg   rh   ri   rE   dictziprf   getitemsr]   rP   loggerrs   )rr   metric_mappingmodel_indexdataset_namesrg   rh   ri   dataset_arg_mappingdataset_metadata_mappingtask_mappingall_possibilitiesrz   r{   rQ   rF   
metric_tagmetric_namer>   r|   r?   create_model_index   s^   




	z"TrainingSummary.create_model_indexc                 C   s   t | j}i }t|dd}t|d| j}t|d| j}| jd ur4t| jtr4t	| jdkr4t|d| j}t|d| j
}t|d| j}t|d	t| }| ||d
< |S )Nlibrary_nametransformersrb   rc   r   
base_modelrd   rX   r   zmodel-index)rS   rP   rU   rI   rb   rc   re   r;   r<   rE   rd   rg   r\   keysr   )rr   r   rF   r>   r>   r?   create_metadata  s   
$zTrainingSummary.create_metadatac                 C   s  d}t j|  dd}t|dkrd| d}| jdkr |t7 }|d| j d7 }| jd u r3|d	7 }n|d
| j d| j d7 }| jd u sRt	| jt
rWt| jdkrW|d7 }nEt	| jtrg|d| j d7 }n5t	| jtt
frt| jdkr|d| jd  d7 }n|ddd | jd d D d| jd  d 7 }| jd ur|d7 }|ddd | j D 7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }| jd ur|d7 }|dd d | j D 7 }|d7 }n|d!7 }| jd ur|d"7 }|t| j7 }|d7 }|d#7 }|d$t d7 }| jdkr%t r%dd l}|d%|j d7 }t r6dd l}|d&|j d7 }t rGdd l}|d'|j d7 }|S )(N F)	sort_keysr   z---
rl   z
# z

z'This model was trained from scratch on z'This model is a fine-tuned version of [z](https://huggingface.co/z) on zan unknown dataset.the z	 dataset.r	   z, c                 S   s   g | ]}d | qS )r   r>   )rB   dsr>   r>   r?   rD   <  s    z1TrainingSummary.to_model_card.<locals>.<listcomp>z	 and the z
 datasets.z:
It achieves the following results on the evaluation set:

c                 S   s$   g | ]\}}d | dt | qS z- z: _maybe_roundrB   rG   rT   r>   r>   r?   rD   A  s   $ z/
## Model description

More information needed
z9
## Intended uses & limitations

More information needed
z:
## Training and evaluation data

More information needed
z
## Training procedure
z
### Training hyperparameters
z:
The following hyperparameters were used during training:
c                 S   s    g | ]\}}d | d| qS r   r>   r   r>   r>   r?   rD   L  s     z
More information needed
z
### Training results

z
### Framework versions

z- Transformers z
- Pytorch z- Datasets z- Tokenizers )yamldumpr   rE   rm   AUTOGENERATED_TRAINER_COMMENTra   re   rY   r;   r\   r<   r[   joinrP   r   rk   rj   make_markdown_tabler
   r   torchr   rX   r   
tokenizers)rr   
model_cardrF   r   rX   r   r>   r>   r?   to_model_card  sn   


$
.


zTrainingSummary.to_model_cardc                 C   s  |j d ur|j n|j}t|r?|d u s|d u s|	d u r?|j}|dvr?|	d u r0|jt|jdg}	|d u r7|g}|d u r?|jg}|
d u rI|d urI|}
|d u rbt|jj	drbt
j|jj	jsb|jj	j}|d u r||jjj}t D ]\}}|t|v r{|}qo|d u rt|jjj}t|dkr|}|d u rdg}nt|tr|dkr|dg}n	d|vr|d t|jj\}}}t|}| |||||||
|||	|||dS )N)csvjsonpandasparquettext)configsplit_name_or_pathr   generated_from_trainer)rb   rc   rd   ra   re   rf   rY   rg   rh   ri   rP   rj   rk   )eval_datasettrain_datasetrZ   builder_nameconfig_namer<   r   hasattrmodelr   ospathisdirr   	__class____name__TASK_MAPPINGr   r_   r   r   
output_dirrG   rE   r;   r]   parse_log_historystatelog_history$extract_hyperparameters_from_trainer)clsrl   rb   rc   rd   ra   re   rf   rg   ri   rY   rh   one_datasetdefault_tagmodel_class_namerw   r^   rK   rj   rP   rk   r>   r>   r?   from_trainerh  sf    



zTrainingSummary.from_trainer)
NNNNNNNNNN)r   
__module____qualname__r<   __annotations__rb   r\   rc   rd   re   rf   rY   rg   rh   ri   r   r   rP   floatrj   rk   rm   ru   r   r   r   classmethodr   r>   r>   r>   r?   r`      s>   
 ?Jr`   c                 C   sB  d}|t | k rd| | vr|d7 }|t | k rd| | vs|t | krM|d8 }|dkr@d| | vr@|d8 }|dkr@d| | vs2|dkrKdd| | fS dS | | }g }d}t|D ]r}d| | v rg| | d }d| | v r| |  }|d	d}|d
d}|dd}	|dd}|dd}|dd}|||	d}
| D ]$\}}|dkr||
d< q|d}ddd |dd D }||
|< q||
 qYt | d }|dkrd| | vr|d8 }|dkrd| | vs|dkri }| |  D ]\}}|d}|dvrddd |dD }|||< q|||fS ||dfS )zd
    Parse the `log_history` of a Trainer to get the intermediate and final evaluation results.
    r   train_runtimer	   	eval_lossN)NNNzNo logloss
total_flosepochstepeval_runtimeeval_samples_per_secondeval_steps_per_second)zTraining LossEpochStepzValidation LossrK   rJ   c                 S      g | ]}|  qS r>   
capitalizerB   partr>   r>   r?   rD         z%parse_log_history.<locals>.<listcomp>eval_)runtimesamples_per_secondsteps_per_secondr   r   c                 S   r   r>   r   r   r>   r>   r?   rD     r   )	rE   rangecopypopr   r   r   r]   removeprefix)r   idx	train_loglinestraining_lossir   rK   r   r   rH   krC   splitsrG   rP   rR   rT   camel_cased_keyr>   r>   r?   r     sb   








r      c                 C   sR   t | tr%tt| ddkr%tt| dd |kr%| d| dS t| S )N.r	   f)r;   r   rE   r<   r   )rC   decimalsr>   r>   r?   r     s   :r   c                 C   s"   dd t | |D }d|d S )Nc                 S   s.   g | ]\}}d | d|t | d   qS )z| rJ   r	   )rE   )rB   rC   wr>   r>   r?   rD     s   . z'_regular_table_line.<locals>.<listcomp>r   |
)r   r   )rH   
col_widthsvalues_with_spacer>   r>   r?   _regular_table_line  s   r   c                 C   s   dd | D }d |d S )Nc                 S   s   g | ]
}d d|  d qS )z|:-:r>   )rB   r   r>   r>   r?   rD     s    z&_second_table_line.<locals>.<listcomp>r   r   )r   )r   rH   r>   r>   r?   _second_table_line  s   r   c                 C   s   | du s
t | dkrdS dd | d D }| D ]}| D ]\}}|| t t|k r3t t|||< qqtt| d  t| }|tt| 7 }| D ]}|tdd | D t| 7 }qP|S )zC
    Create a nice Markdown table from the results in `lines`.
    Nr   r   c                 S   s   i | ]	}|t t|qS r>   )rE   r<   )rB   rR   r>   r>   r?   rx   	      z'make_markdown_table.<locals>.<dictcomp>c                 S   s   g | ]}t |qS r>   r   rA   r>   r>   r?   rD     r   z'make_markdown_table.<locals>.<listcomp>)rE   r   r   r   r\   r   rH   r   )r   r   linerR   rT   tabler>   r>   r?   r     s   &r   )learning_ratetrain_batch_sizeeval_batch_sizeseedc              
      s   fddt D } jjtjtjfvr# jjtjkrdn jjj|d<  jjdkr/ jj|d<  jj	dkr; jj	|d<  jj
 jj  jj	 }||d krQ||d	<  jj jj }||d
 krc||d<  jjr jj} jjrs jjnd}d| v rd| d jj d jj d jj d| 
|d< n
d| d| |d<  jjj|d<  jjdkr jj|d<  jjdkr jj|d< n jj|d<  jjrd|d<  jjdkrو jj|d< |S )Nc                    s   i | ]	}|t  j|qS r>   )getattrr   )rB   r   rl   r>   r?   rx     r   z8extract_hyperparameters_from_trainer.<locals>.<dictcomp>z	multi-GPUdistributed_typer	   num_devicesgradient_accumulation_stepsr   total_train_batch_sizer   total_eval_batch_sizez!No additional optimizer argumentsadamzUse z with betas=(,z) and epsilon=z and optimizer_args=	optimizerz and the args are:
lr_scheduler_typeg        lr_scheduler_warmup_stepsr   training_steps
num_epochsz
Native AMPmixed_precision_traininglabel_smoothing_factor)_TRAINING_ARGS_KEYSr   parallel_moder   NOT_PARALLELNOT_DISTRIBUTEDDISTRIBUTEDrT   
world_sizer  r   r   optim
optim_argsrM   
adam_beta1
adam_beta2adam_epsilonr
  warmup_steps	max_stepsnum_train_epochsfp16r  )rl   rk   r  r  optimizer_nameoptimizer_argsr>   r  r?   r     sJ   r   )r   )?__doc__r   dataclassesr   pathlibr   typingr   rp   r   huggingface_hubr   r   huggingface_hub.errorsr   huggingface_hub.utilsr   r   r
   models.auto.modeling_autor   r   r   r   r   r   r   r   r   r   r   r   r   r   r   training_argsr   utilsr   r   r   r   r   
get_loggerr   r   r   rv   rO   r@   rI   rS   rU   rZ   r_   r`   r   r   r   r   r   r  r   r>   r>   r>   r?   <module>   s   D	

	
		
  

<