
    wih                    >    d dl mZ d dlmZ d dlZd dlmZmZ ddZdS )    )annotations)AnyN)
ModelProtoValueInfoProtomodelr   
input_dimsdict[str, list[Any]]output_dimsreturnc                   t                      dd} || j        j                    || j        j                    || j        j                   dfd}| j        j        D ]4}|j        }||         }t          |          D ]\  }}	 |||	||           5| j        j        D ]4}
|
j        }||         }t          |          D ]\  }}	 ||
|	||           5t          j        	                    |            | S )aM  This function updates the dimension sizes of the model's inputs and outputs to the values
    provided in input_dims and output_dims. if the dim value provided is negative, a unique dim_param
    will be set for that dimension.

    Example. if we have the following shape for inputs and outputs:

    * shape(input_1) = ('b', 3, 'w', 'h')
    * shape(input_2) = ('b', 4)
    * shape(output)  = ('b', 'd', 5)

    The parameters can be provided as:

    ::

        input_dims = {
            "input_1": ['b', 3, 'w', 'h'],
            "input_2": ['b', 4],
        }
        output_dims = {
            "output": ['b', -1, 5]
        }

    Putting it together:

    ::

        model = onnx.load('model.onnx')
        updated_model = update_inputs_outputs_dims(model, input_dims, output_dims)
        onnx.save(updated_model, 'model.onnx')
    dim_param_setset[str]value_infoslist[ValueInfoProto]r   Nonec                    |D ]L}|j         j        j        }|j        D ]1}|                    d          r|                     |j                   2Md S )N	dim_param)typetensor_typeshapedimHasFieldaddr   )r   r   infor   r   s        l/root/.openclaw/workspace/chatterbox_venv_py311/lib/python3.11/site-packages/onnx/tools/update_model_dims.pyinit_dim_param_setz6update_inputs_outputs_dims.<locals>.init_dim_param_set1   sk       	5 	5DI)/Ey 5 5<<,, 5!%%cm4445	5 	5    tensorr   r   r   jintnamestrc                   | j         j        j        j        |         }t	          |t
                    r|dk    rJ|                    d          r,|j        |k    r!t          d| d| d| d|j         d	          ||_        d S |dz   t          |          z   }|v rt          d	| d| d
          ||_
        d S t	          |t                    r	||_
        d S t          dt          |                     )Nr   	dim_valuez!Unable to set dimension value to z
 for axis z of z'. Contradicts existing dimension value ._z-Unable to generate unique dim_param for axis z,. Please manually provide a dim_param value.z@Only int or str is accepted as dimension value, incorrect type: )r   r   r   r   
isinstancer    r   r$   
ValueErrorr"   r   	TypeError)r   r   r   r!   	dim_protogenerated_dim_paramr   s         r   
update_dimz.update_inputs_outputs_dims.<locals>.update_dim>   sz   K+15a8	c3 	axx%%k22 y7Jc7Q7Q$ VC  V  V1  V  VRV  V  V  @I  @S  V  V  V   '*	###&*Sj3q66&9#&-77$ B  B  Bt  B  B  B   ':	###S!! 	"%I^SWX[S\S\^^  r   )r   r   r   r   r   r   )
r   r   r   r   r   r    r!   r"   r   r   )
setgraphinputoutput
value_infor!   	enumerateonnxcheckercheck_model)r   r   r
   r   r,   input_
input_nameinput_dim_arrr   r   r0   output_nameoutput_dim_arrr   s                @r   update_inputs_outputs_dimsr;      sh   F "eeM5 5 5 5 }ek&7888}ek&8999}ek&<===     . +# 3 3[
":... 	3 	3FAsJvsAz2222	3 +$ 4 4k$[1// 	4 	4FAsJvsA{3333	4 	LU###Lr   )r   r   r   r	   r
   r	   r   r   )	
__future__r   typingr   onnx.checkerr3   r   r   r;    r   r   <module>r@      ss    # " " " " "           + + + + + + + +V V V V V Vr   