
    
Ngg              	           d dl mZmZmZmZ d dlZd dlmZmZ dedee	ee         f         dee	ee         f         defdZ
dS )	    )AnyDictListSetN)
ModelProtoValueInfoProtomodel
input_dimsoutput_dimsreturnc           
         t                      dt          t                   dt          t                   ddfd} || j        j                    || j        j                    || j        j                   dt          dt          dt          d	t          ddf
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value_infosr   Nc                     |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        X/var/www/html/ai-engine/env/lib/python3.11/site-packages/onnx/tools/update_model_dims.pyinit_dim_param_setz6update_inputs_outputs_dims.<locals>.init_dim_param_set0   sk       	5 	5DI)/Ey 5 5<<,, 5!%%cm4445	5 	5    tensorr   jnamec                    | 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   
isinstanceintr   r    
ValueErrorstrr   )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   )setr   r&   r   r   graphinputoutput
value_infor   r$   r   	enumerateonnxcheckercheck_model)r	   r
   r   r   r)   input_
input_nameinput_dim_arrr   r   r-   output_nameoutput_dim_arrr   s                @r   update_inputs_outputs_dimsr8      s   F "eeM53x5.2>.B5	5 5 5 5 }ek&7888}ek&8999}ek&<===>   3 4      . +# 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   )typingr   r   r   r   onnx.checkerr0   r   r   r&   r8    r   r   <module>r<      s   
 ( ' ' ' ' ' ' ' ' ' ' '     + + + + + + + +VVS$s)^$V c49n%V 	V V V V V Vr   