U
    d>
                     @   s8   d Z ddlZddlm  mZ dd Zedkr4e  dS )zCExample of the Timer and Fuzzer APIs:

$ python -m examples.fuzzer
    Nc                  C   s.  t jdd tdD t jdddddgd	d d
D gdd} d}g }t| j|dD ]\}\}}}|d t|d d  }}|d t|d d  }	}
dtdd |j	D }d|
 dd|dd| rdn|dd|	 rdn|
ddg}t jd||d}||jdd d|
 i|d  _td!|d"  d#| dd$ tj  qVt  td%d&d&| j  d' d(d) }|j|d* d+d, d-d. d/d0 }t|d1 |d d2 D ]$}t||d3 d4d5|j  qtd6|d7  |d8d  D ]$}t||d3 d4d5|j  qd S )9Nc                 S   s$   g | ]}t jd | ddddqS )k   i @  Z
loguniform)nameminvalmaxvaldistribution)benchmark_utilsFuzzedParameter.0i r   I/tmp/pip-unpacked-wheel-ua33x9lu/torch/utils/benchmark/examples/fuzzer.py
<listcomp>   s   zmain.<locals>.<listcomp>   dg333333?g?)   r   )r   r   c              
   S   s"   g | ]}t j|d dddddqS ))Zk0Zk1Zk2r   g      ?i   i   )r   sizeZdim_parameterZprobability_contiguousZmin_elementsZmax_elements)r   ZFuzzedTensor)r   r   r   r   r   r      s   )xyr   )
parameterstensorsseed   )nr   orderr   z, c                 s   s   | ]}|d V  qdS )z>4Nr   r
   r   r   r   	<genexpr>/   s     zmain.<locals>.<genexpr> z>7z | z<16
contiguousz<12zx + y)Zstmtglobalsdescriptiong?)Zmin_run_timenumel   z / )endz"Average attemts per valid config: g      ?z.1fc                 S   s   | j | jd  S )Nr!   )Zmedianmetadata)mr   r   r   time_fnF   s    zmain.<locals>.time_fn)keyz{:>6}z                   zSize    Shapez             zX order        Y order
zP--------------------------------------------------------------------------------zBest:   g    eAz>4.1fz ns / element     
zWorst:i)r   ZFuzzerranger	   	enumerateZtakestrjointupleshaper!   Zis_contiguousTimerappendZblocked_autoranger&   printsysstdoutflushZrejection_ratesortformatr    )Z
add_fuzzerr   Zmeasurementsr   r   Ztensor_properties_r   Zx_orderr   Zy_orderr1   r    Ztimerr(   templater'   r   r   r   main   s\     "r<   __main__)__doc__r5   Ztorch.utils.benchmarkutilsZ	benchmarkr   r<   __name__r   r   r   r   <module>   s
   I