o
    \h                     @   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   AttributeProtoAttributeTypeGRAPH
isinstanceg
GraphProtoappendGRAPHSgraphs)modelfuncgraph_queuer   r
   attrr    r   d/home/air/segue/gemini/backup/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)initializerr   to_arrayr   SIZE_THRESHOLDnprandomuniformminmaxshapeastypedtype
from_arraynameCopyFrom)r   i_tensorarrayrandom_arrayo_tensorr   r   r   randomize_graph_initializer%   s   


$
r0   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)r2   actionr3   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)load_external_data)save_as_external_dataall_tensors_to_one_filelocation)argparseArgumentParseradd_argumentstr
parse_argsuse_external_data_formatr   mparentoRuntimeErrorr:   r*   mkdirr   r   r0   r   )parserargs	data_path
onnx_modelr   r   r   main/   s@   

rK   __main__)r<   pathlibr   numpyr!   onnxr   r   r   r   r    r   r0   rK   __name__r   r   r   r   <module>   s   
%
