U
    9%e                     @   sp   d dl mZmZ d dlmZ ddlmZmZmZm	Z	 ddl
mZ e rNd dlZeeZeG dd	 d	eZdS )
    )	dataclassfield)Tuple   )cached_propertyis_tf_availableloggingrequires_backends   )BenchmarkArgumentsNc                       s  e Zd ZU dddddddgZ fdd	Zed
ddidZeed< edddidZ	e
ed< edddidZeed< edddidZeed< eed dddZeed dddZeedddZed dd!d"Zed#d$ Zee
dd%d&Zeedd'd(Z  ZS ))TensorFlowBenchmarkArgumentsZno_inferenceZno_cudaZno_tpuZno_speedZ	no_memoryZno_env_printZno_multi_processc                    s   | j D ]L}||kr|dd }|| ||< t| d| d| d||   q|d| j| _|d| j| _|d| j| _|d	| j| _t j	f | dS )
z
        This __init__ is there for legacy code. When removing deprecated args completely, the class can simply be
        deleted
           Nz! is depreciated. Please use --no-z or =tpu_name
device_idx
eager_modeuse_xla)
deprecated_argspoploggerwarningr   r   r   r   super__init__)selfkwargsZdeprecated_argZpositive_arg	__class__ g/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/transformers/benchmark/benchmark_args_tf.pyr   +   s    
z%TensorFlowBenchmarkArguments.__init__NhelpzName of TPU)defaultmetadatar   r   z&CPU / GPU device index. Defaults to 0.r   Fz Benchmark models in eager model.r   z]Benchmark models using XLA JIT compilation. Note that `eager_model` has to be set to `False`.r   1tf.distribute.cluster_resolver.TPUClusterResolver)returnc                 C   s\   t | dg d }| jrXz(| jr0tjj| j}ntjj }W n tk
rV   d }Y nX |S Ntf)r	   tpur   r%   
distributeZcluster_resolverZTPUClusterResolver
ValueError)r   r&   r   r   r   
_setup_tpuN   s    
z'TensorFlowBenchmarkArguments._setup_tpu)tf.distribute.Strategyr"   c                 C   s   t | dg | jr@tj| j tjj| j tj	
| j}nX| jrttj| j| j d tj	jd| j d}n$tjg d tj	jd| j d}|S )Nr%   GPUz/gpu:)Zdevicez/cpu:)r	   is_tpur%   configZexperimental_connect_to_clusterr)   r&   ZexperimentalZinitialize_tpu_systemr'   ZTPUStrategyis_gpuZset_visible_devicesgpu_listr   ZOneDeviceStrategy)r   strategyr   r   r   _setup_strategy\   s    z,TensorFlowBenchmarkArguments._setup_strategyc                 C   s   t | dg | jd k	S r$   )r	   r)   r   r   r   r   r,   p   s    z#TensorFlowBenchmarkArguments.is_tpur*   c                 C   s   t | dg | jS r$   )r	   r1   r2   r   r   r   r0   u   s    z%TensorFlowBenchmarkArguments.strategyc                 C   s   t | dg tjdS )Nr%   r+   )r	   r%   r-   Zlist_physical_devicesr2   r   r   r   r/   z   s    z%TensorFlowBenchmarkArguments.gpu_listc                 C   s    t | dg | jrt| jS dS )Nr%   r   )r	   cudalenr/   r2   r   r   r   n_gpu   s    
z"TensorFlowBenchmarkArguments.n_gpuc                 C   s
   | j dkS )Nr   )r5   r2   r   r   r   r.      s    z#TensorFlowBenchmarkArguments.is_gpu)__name__
__module____qualname__r   r   r   r   str__annotations__r   intr   boolr   r   r   r)   r1   propertyr,   r0   r/   r5   r.   __classcell__r   r   r   r   r      sL   

 
r   )dataclassesr   r   typingr   utilsr   r   r   r	   Zbenchmark_args_utilsr   Z
tensorflowr%   Z
get_loggerr6   r   r   r   r   r   r   <module>   s   
