§
    3�Åjè  ã                  ó>   — 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        ¦  «         Œ2ŒMd S )NÚ	dim_param)ÚtypeÚtensor_typeÚshapeÚdimÚHasFieldÚaddr   )r   r   Úinfor   r   s        úMC:\Projects\Historical\venv\Lib\site-packages\onnx/tools/update_model_dims.pyÚinit_dim_param_setz6update_inputs_outputs_dims.<locals>.init_dim_param_set1   sk   € ð  ð 	5ð 	5ˆDØ”IÔ)Ô/ˆEØ”yð 5ð 5�Ø—<’< Ñ,Ô,ð 5Ø!×%Ò% c¤mÑ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Ô5°aÔ8ˆ	Ý�c�3ÑÔð 	Ø�aŠxˆxØ×%Ò% kÑ2Ô2ð °yÔ7JÈcÒ7QÐ7QÝ$ð V¸Cð  Vð  VÈ1ð  Vð  VÐRVð  Vð  Vð  @Iô  @Sð  Vð  Vð  Vñô ð ð '*�	Ô#Ð#Ð#à&*¨S¡jµ3°q±6´6Ñ&9Ð#Ø&¨-Ð7Ð7Ý$ð BÈð  Bð  BÈtð  Bð  Bð  Bñô ð ð ':�	Ô#Ð#Ð#Ý˜�SÑ!Ô!ð 	Ø"%ˆIÔÐÐåØ^ÕSWÐX[Ñ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 "™eœe€Mð5ð 5ð 5ð 5ð Ð�} e¤kÔ&7Ñ8Ô8Ð8ØÐ�} e¤kÔ&8Ñ9Ô9Ð9ØÐ�} e¤kÔ&<Ñ=Ô=Ð=ðð ð ð ð ð ð. ”+Ô#ð 3ð 3ˆØ”[ˆ
Ø" :Ô.ˆÝ Ñ.Ô.ð 	3ð 	3‰FˆAˆsØˆJ�v˜s A zÑ2Ô2Ð2Ð2ð	3ð ”+Ô$ð 4ð 4ˆØ”kˆØ$ [Ô1ˆÝ Ñ/Ô/ð 	4ð 	4‰FˆAˆsØˆJ�v˜s A {Ñ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   