U
    T?h+                     @   s   d dl Z d dlZd dlmZ d dlZG dd dZG dd deZG dd deZG d	d
 d
eZ	G dd deZ
G dd deZG dd dZdS )    N)Optionalc                   @   s   e Zd Zdd Zdd ZdS )
BaseObjectc                 C   s
   i | _ d S N)
customizedself r   R/var/www/html/venv/lib/python3.8/site-packages/onnxruntime/transformers/metrics.py__init__   s    zBaseObject.__init__c                 C   s\   | j  }|dd  || j | D ]\}}t|tr*| ||< q*dd | D S )Nr   c                 S   s   i | ]\}}|r||qS r   r   ).0kvr   r   r	   
<dictcomp>   s       z&BaseObject.to_dict.<locals>.<dictcomp>)	__dict__copypopupdater   items
isinstancer   to_dict)r   default_valuesr   r   r   r   r	   r      s    

zBaseObject.to_dictN)__name__
__module____qualname__r
   r   r   r   r   r	   r      s   r   c                       s:   e Zd Zdee ee ee ee d fddZ  ZS )	ModelInfoNF)	full_nameis_huggingfaceis_text_generation
short_namec                    s,   t    || _|| _|| _|| _g | _d S r   )superr
   r   r   r   r   Zinput_shape)r   r   r   r   r   	__class__r   r	   r
      s    
zModelInfo.__init__)NFFN)r   r   r   r   strboolr
   __classcell__r   r   r    r	   r      s       r   c                       s4   e Zd Zdee ee ee d fddZ  ZS )BackendOptionsFN)enable_profilingexecution_provideruse_io_bindingc                    s    t    || _|| _|| _d S r   )r   r
   r&   r'   r(   )r   r&   r'   r(   r    r   r	   r
   /   s    
zBackendOptions.__init__)FNF)r   r   r   r   r#   r"   r
   r$   r   r   r    r	   r%   .   s      r%   c                       sF   e Zd Zd	ee ee ee ee ee ee d fddZ  ZS )
Configonnxruntime   r   fp32
   )backend
batch_size
seq_length	precisionwarmup_runsmeasured_runsc                    sB   t    || _|| _|| _|| _|| _|| _t | _	t
 | _d S r   )r   r
   r.   r/   r0   r1   r2   r3   r   
model_infor%   Zbackend_options)r   r.   r/   r0   r1   r2   r3   r    r   r	   r
   <   s    	
zConfig.__init__)r*   r+   r   r,   r+   r-   )r   r   r   r   r"   intr
   r$   r   r   r    r	   r)   ;   s         r)   c                       s@   e Zd Zdee ee ee ee ee d fddZ  ZS )MetadataN)devicepackage_namepackage_versionplatformpython_versionc                    s,   t    || _|| _|| _|| _|| _d S r   )r   r
   r7   r8   r9   r:   r;   )r   r7   r8   r9   r:   r;   r    r   r	   r
   Q   s    
zMetadata.__init__)NNNNN)r   r   r   r   r"   r
   r$   r   r   r    r	   r6   P   s        r6   c                       s4   e Zd Zdee ee ee d fddZ  ZS )Metrics        )latency_ms_meanthroughput_qpsmax_memory_usage_GBc                    s    t    || _|| _|| _d S r   )r   r
   r>   r?   r@   )r   r>   r?   r@   r    r   r	   r
   b   s    
zMetrics.__init__)r=   r=   r=   )r   r   r   r   floatr
   r$   r   r   r    r	   r<   a   s      r<   c                   @   s   e Zd Zdeeeeeeee ee ee ee d
ddZeddd	Zedd
dZ	e
eeddddZe
eeddddZdS )BenchmarkRecordr+   r-   N)

model_namer1   r.   r7   r8   r9   r/   r2   r3   trigger_datec                 C   s|   t  | _t | _t | _|
p*tj d| _	|| jj
_|| j_|| j_|| j_|| j_|	| j_|| j_|| j_|| j_d S )Nz%Y-%m-%d %H:%M:%S)r)   configr<   metricsr6   metadatadatetimenowstrftimerD   r4   r   r1   r.   r/   r2   r3   r7   r8   r9   )r   rC   r1   r.   r7   r8   r9   r/   r2   r3   rD   r   r   r	   r
   o   s    
zBenchmarkRecord.__init__)returnc                 C   s"   | j  | j | j | jdS )N)rE   rG   rF   rD   )rE   r   rG   rF   rD   r   r   r   r	   r      s
    zBenchmarkRecord.to_dictc                 C   s   t j|  tdS )N)default)jsondumpsr   r"   r   r   r   r	   to_json   s    zBenchmarkRecord.to_json)	file_namerecordsrK   c                 C   sB   |d kst |dkrd S dd |D }t|}|j|dd d S )Nr   c                 S   s   g | ]}|  qS r   r   r   recordr   r   r	   
<listcomp>   s     z/BenchmarkRecord.save_as_csv.<locals>.<listcomp>F)index)lenpdZjson_normalizeZto_csv)clsrP   rQ   rdsdfr   r   r	   save_as_csv   s
    
zBenchmarkRecord.save_as_csvc              	   C   sR   |d kst |dkrd S dd |D }t|d}tj||dtd W 5 Q R X d S )Nr   c                 S   s   g | ]}|  qS r   rR   rS   r   r   r	   rU      s     z0BenchmarkRecord.save_as_json.<locals>.<listcomp>w   )indentrL   )rW   openrM   dumpr"   )rY   rP   rQ   rZ   fr   r   r	   save_as_json   s
    zBenchmarkRecord.save_as_json)r+   r+   r-   N)r   r   r   r"   r   r5   r
   dictr   rO   classmethodlistr\   rc   r   r   r   r	   rB   n   s,   	    rB   )rH   rM   typingr   ZpandasrX   r   r   r%   r)   r6   r<   rB   r   r   r   r	   <module>   s   