o
    i                     @   sf   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r1e  dS dS )    N)Path)
load_modelnumpy_helperonnx_pb
save_model
   c                 C   s   | j g}|rQ|d}|| |jD ]:}|jD ]4}|jtjjjkr0t	|j
tjs*J ||j
 |jtjjjkrK|jD ]}t	|tjsEJ || q;qq|sd S d S )Nr   )graphpopnode	attributetyper   ZAttributeProtoZAttributeTypeZGRAPH
isinstancegZ
GraphProtoappendZGRAPHSZgraphs)modelfuncZgraph_queuer   r
   attrr    r   [/home/kim/smarthome/.venv/lib/python3.10/site-packages/onnxruntime/tools/onnx_randomizer.pygraph_iterator   s    



r   c                 C   s`   | j D ]*}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rNt|jjt|j	jkrCt
d|jrNt|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@   

r6   __main__)r*   pathlibr   numpyr   Zonnxr   r   r   r   r   r   r    r6   __name__r   r   r   r   <module>   s   
%
