U
    T?h                     @   sb   d dl Z d dlmZ d dlZd dlmZmZmZm	Z	 dZ
dd Zdd Zd	d
 Zedkr^e  dS )    N)Path)
load_modelnumpy_helperonnx_pb
save_model
   c                 C   s   | j g}|r|d}|| |jD ]t}|jD ]h}|jtjjjkr`t	|j
tjsTt||j
 |jtjjjkr.|jD ]}t	|tjst|| qvq.q$qd S )Nr   )graphpopnode	attributetyper   ZAttributeProtoZAttributeTypeZGRAPH
isinstancegZ
GraphProtoAssertionErrorappendZGRAPHSZgraphs)modelfuncZgraph_queuer   r
   attrr    r   S/var/www/html/venv/lib/python3.8/site-packages/onnxruntime/tools/onnx_randomizer.pygraph_iterator   s    



r   c                 C   s`   | j D ]T}t|}|jtkrtjj| |	 |j
d|j}t||j}|| qd S )N)size)Zinitializerr   Zto_arrayr   SIZE_THRESHOLDnprandomuniformminmaxshapeZastypeZdtypeZ
from_arraynameZCopyFrom)r   Zi_tensorarrayZrandom_arrayZo_tensorr   r   r   randomize_graph_initializer%   s    


$r!   c                  C   s   t jdd} | jdtddd | jdtddd | jd	d
ddd | jdd
ddd |  }d }|jrt|jjt|j	jkrt
d|jrt|j	jd }t|j	jjddd t|j|jd}t|t t||j	|j|j|d d S )Nz&Randomize the weights of an ONNX model)descriptionz-mTzinput onnx model path)r   requiredhelpz-ozoutput onnx model pathz--use_external_data_formatF
store_truez%Store or Save in external data format)r#   actionr$   z--all_tensors_to_one_filezSave all tensors to one filezNPlease specify output directory with different parent path to input directory.z.data)parentsexist_ok)Zload_external_data)Zsave_as_external_dataall_tensors_to_one_filelocation)argparseArgumentParseradd_argumentstr
parse_argsZuse_external_data_formatr   mparentoRuntimeErrorr)   r   mkdirr   r   r!   r   )parserargsZ	data_pathZ
onnx_modelr   r   r   main/   s@    
r7   __main__)r+   pathlibr   numpyr   Zonnxr   r   r   r   r   r   r!   r7   __name__r   r   r   r   <module>	   s   
%