
     Ti2                    t   % S r SSKJr  SSKrSSKrSSKrSSKJrJrJ	r	  SSK
Jr  SSKJs  Jr  SSKJs  Jr  SSKJr  \R(                  " \5      rSrSrS"S jrS#S	 jr " S
 S\5      r\R:                   " S S5      5       r\R>                  r \	\\RB                     \RB                  S4   r"\\RF                  \ /\"4   r$S$S jr% " S S5      r&\&" 5       r'S\(S'   \'RR                  r)S%S jr*S&S'S jjr+S&S(S jjr,\)" SSSS9S)S j5       r-\)" SSSS9S)S j5       r.\)" SSSS9S)S j5       r/ " S S 5      r0S*S! jr1g)+6Convert the model to the specified ONNX opset version.    )annotationsN)CallableSequenceUnion)ir      c                    U R                   R                  S5      nU R                   R                  S5      nUb  Ub  X:w  a  [        SU SU S35      eU=(       d    U$ )z1Get the ONNX opset version imported by the model. ai.onnxz$Model imports multiple onnx opsets: z and .)opset_importsget
ValueError)modelmodel_version1model_version2s      n/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/onnxscript/version_converter/_version_converter.py_get_onnx_opset_versionr      sn    ((,,R0N((,,Y7N!n&@+6~6FeNK[[\]  +^+    c                Z    SU R                   ;   a  U R                   S	 XR                   S'   g)z=Set the ONNX opset version imported by the model or function.r   r   N)r   )model_or_functionversions     r   _set_onnx_opset_versionr   %   s-    %333++I6*1##B'r   c                      \ rS rSrSrSrg)VersionConverterError,   zIRaised when an node's version cannot be upgraded/downgraded successfully. N)__name__
__module____qualname____firstlineno____doc____static_attributes__r   r   r   r   r   ,   s    Sr   r   c                  .    \ rS rSr% SrS\S'   S\S'   Srg)	Replacement0   z&A replacement for a node in the graph.zSequence[ir.Value]new_outputszSequence[ir.Node]	new_nodesr   N)r    r!   r"   r#   r$   __annotations__r%   r   r   r   r'   r'   0   s    0##  r   r'   c                    SU R                   R                  ;   a  U R                   R                  S   nOg[        Us=:*  =(       a    Us=:*  =(       a	    [        :*  $ s  $ )z@Check if the target version is supported by the current version.r   T)graphr   SUPPORTED_MIN_ONNX_OPSETSUPPORTED_MAX_ONNX_OPSET)r   target_versioncurrent_versions      r   version_supportedr2   @   sa    	U[[&&&++33B7 	$ 	$	$ 	$ $	$	$r   c                  Z    \ rS rSrSrS r S         S	S jjr S
     SS jjrSrg)AdapterRegistryN   z6A class that maintains a registry of adapters for ops.c                    0 U l         g Nop_adapters)selfs    r   __init__AdapterRegistry.__init__Q   s
    NPr   c                H    U R                   R                  XX445      nUb  U$ g r7   )r9   r   )r:   domainopnameoriginal_versionup_conversionadapter_funcs         r   lookup_adaptersAdapterRegistry.lookup_adaptersT   s/     ''++V=M,]^#r   Nc                (   ^ ^^^^ SUUUU U4S jjnU$ )zrRegister an adapter based on the domain, operator type, node version and whether to upgrade/downgrade node versionc                n   >^  [         R                  " T 5      U 4S j5       nT TR                  TTTT4'   U$ )Nc                    > T" U 0 UD6$ r7   r   )argskwargsfunctions     r   wrapped_functionEAdapterRegistry.register.<locals>.decorator.<locals>.wrapped_functionf   s    000r   )	functoolswrapsr9   )rJ   rK   r>   node_versionr?   r:   rA   s   ` r   	decorator+AdapterRegistry.register.<locals>.decoratore   sA    __X&1 '1 OWDfflMJK##r   )rJ   AdapterFunctionreturnrR   r   )r:   r?   r>   rO   rA   rP   s   ````` r   registerAdapterRegistry.register`   s    
	$ 	$ r   r8   T)
r>   strr?   rW   r@   intrA   boolrS   zAdapterFunction | None)r   NT)r?   rW   r>   rW   rS   z,Callable[[AdapterFunction], AdapterFunction])	r    r!   r"   r#   r$   r;   rC   rT   r%   r   r   r   r4   r4   N   sn    @Q #

 
 	

 
 
 
 OS#&	5 r   r4   registryc                T    U[        U R                  5      :  a  U R                  U   $ g r7   )leninputs)nodeindexs     r   
_get_inputr`   u   s%    s4;;{{5!!r   c                    XR                   ;   aS  U R                   U   n[        U[        R                  5      (       d  g UR                  n[        U[
        5      (       a  U$ g U$ r7   )
attributes
isinstancer   AttrvaluerX   r^   namedefaultattrattr_vals        r   _get_int_attributerk   {   S    t$$((::h$$O Nr   c                    XR                   ;   aS  U R                   U   n[        U[        R                  5      (       d  g UR                  n[        U[
        5      (       a  U$ g U$ r7   )rb   rc   r   rd   re   rW   rf   s        r   _get_str_attributern      rl   r   DFT   T)rO   rA   c                
   U R                   S   n[        U R                   5      S:  a  U R                   S   OS n[        U SS5      n[        U SS5      n[        U SS 5      nUb   UR                  US9nUR	                  X#XtUS9$ g )Nr      inverseonesidedaxis)	value_int)rs   rt   )r]   r\   rk   Constantro   )r^   opinput
dft_lengthrs   rt   ru   
axis_values           r   	dft_19_20r|      s    KKNE#&t{{#3a#7QTJ y!4G!$
A6HdFD1D[[4[0
vvexvXXr   
GridSamplec                    U R                   S   nU R                   S   n[        U SS5      n[        U SS5      n[        U SS5      nUS:X  a  UR                  X#USUS	9$ US
:X  a  UR                  X#USUS	9$ g )Nr   rr   align_cornersmodelinearpadding_modezerosbilinear)r   r   r   bicubiccubic)r]   rk   rn   r}   )r^   rx   xgridr   r   r   s          r   gridsample_19_20r      s    AA;;q>D&t_a@MdFH5D%dNGDLz}}=xl  
 	
 
	}}=w\  
 	
 r   GroupNormalization   c                \   [        U S5      n[        U S5      n[        U S5      nUb  Ub  Uc  [        SU  35      eUR                  nUc  [        SU 35      eUS   n[        U[        5      (       d  g UR                  nUR                  nUb  Uc  g [        US   [        5      (       a  [        US   [        5      (       d  g [        U SS 5      n	U	c  [        S5      eX:w  a  XS   :X  a  XS   :X  a  UR                  SS/S	9n
UR                  S/S	9n[	        Xi-  5      nUR                  SU/S	9nUR                  X:5      nUR                  X5      nUR                  X5      nUR                  XJ5      nUR                  UU5      nUR                  UU5      nUR                  UUUU	S
9$ g )Nr   rr      zMissing input for zMissing required shape for 
num_groupsz&Missing required attribute: num_groups)
value_ints)r   )
r`   r   shaperc   rX   rk   rw   ReshapeExpandr   )r^   rx   r   scalebiasx_shapenum_channelsscale_shape
bias_shaper   reshape_1_sizesreshape_2_sizesc_divexpand_sizesscale_reshape_1scale_expandscale_reshape_2bias_reshape_1bias_expandbias_reshape_2s                       r   groupnormalization_20_21r      s   4AtQEdADyEMT\#&8$?@@ggG#&A!$EFF1:LlC((++KJj0k!nc***Z]C2P2P#D,=J#$LMM"a.(Q-'++"a+9++"+6L-.{{q%j{9 **U<yy?**\C D:ii=KA$$QT^$__r   c                      \ rS rSrSS jr S       SS jjrSS jrSS jr S         SS jjrSS jr	SS jr
S	rg
)_VersionConverter   c                V    Xl         [        R                  " [        5       5      U l        g r7   )_target_versionmetadata_mergerMetadataMergerdict_default_metadata_merger)r:   r0   s     r   r;   _VersionConverter.__init__   s%    - ** 	%r   c                   UR                   S:X  d   e[        R                  UR                   UR                  X#5      nUc  g [	        5       nU" X5      nUb7  [        U[        R                  5      (       a  U/n[        XeR                  5      $ g )Nr   )
r>   rZ   rC   op_typeRewriterContextrc   r   Valuer'   nodes)r:   r^   from_versionrA   adaptercontextoutputs          r   process_node_VersionConverter.process_node   s     {{b   **KK|
 ?!#'&"((++ v}}55r   c                    [         R                  SUR                  UR                  UR                  5        [
        R                  " X1U/UR                  UR                  UR                  5        g )NzReplacing node: %s::%s %s)
loggerdebugr>   r   rg   ir_conveniencereplace_nodes_and_valuesr*   outputsr)   )r:   r^   replacementroots       r   replace_node_VersionConverter.replace_node
  sL    0$++t||TYYW// 5 5t||[E\E\	
r   c                b   UR                  5       (       a  g UR                  [        R                  R                  :X  a   U R                  UR                  5       5        g UR                  [        R                  R                  :X  a)  UR                  5        H  nU R                  U5        M     g g r7   )	is_reftyper   AttributeTypeGRAPHvisit_graph_or_functionas_graphGRAPHS	as_graphs)r:   ri   r-   s      r   visit_attribute!_VersionConverter.visit_attribute  sx    ;;==99((...((9YY"**111),,U3 * 2r   c                h   U(       a  US-   nOUS-
  nU R                  XU5      nUc9  UR                  R                  5        H  nU R                  U5        M     XQl        g UR
                   H	  nXXl        M     U R                  R                  U/UR
                  5        U R                  XU5        g )Nrr   )	r   rb   valuesr   r   r*   r   copy_merged_metadatar   )	r:   r^   r   r   rA   
to_versionr   ri   new_nodes	            r   
visit_node_VersionConverter.visit_node  s     %)J%)J''MJ..0$$T* 1%L'11#-  2 ))>>v{G\G\]d6r   c           	        U H  nUR                   S:w  a  M  UR                  =(       d    U R                  nUc  [        SU S35      eU R                  U:  a&  [        SU R                   SUR                   S35      e[        X0R                  5       H  n U R                  X!USS9  M     M     g ! [         a,  n[        R                  S	UR                  U5         S nAMO  S nAff = f)
Nr   zNode z has no version.zTarget opset: z less than node version: z6, downstream version conversion not currently handled.T)rA   z<Skipping version conversion for node %s due to exception: %s)
r>   r   _default_onnx_opsetr   r   ranger   r   warningr   )r:   graph_or_functionr^   rO   r   es         r   r   )_VersionConverter.visit_graph_or_function2  s    %D{{b <<C4+C+CL#+eD69I,JKK
 ##l2+$T%9%9$::STXT`T`Sa bK K  !&l4H4H IOOD\Y]O^ !J &$ - NNV s   B22
C(<!C##C(c                   [        U5      U l        U R                  UR                  5        UR                  R                  5        H)  nU R                  U5        [        X R                  5        M+     [        XR                  5        g r7   )r   r   r   r-   	functionsr   r   r   )r:   r   rJ   s      r   visit_model_VersionConverter.visit_modelL  sd    #:5#A $$U[[1..0H((2#H.B.BC 1 	 ';';<r   )r   r   r   N)r0   rX   rV   )r^   ir.Noder   rX   rA   rY   rS   zReplacement | None)r^   r   r   ir.Graph | ir.FunctionrS   None)ri   zir.AttrrS   r   )
r^   r   r   r   r   rX   rA   rY   rS   r   )r   r   rS   r   )r   ir.ModelrS   r   )r    r!   r"   r#   r;   r   r   r   r   r   r   r%   r   r   r   r   r      s    
 GK+.?C	"
4 #77 %7 	7
 7 
704=r   r   c           	         U[         :  d
  U[        :  a  [        SU S[         S[          S35      e[        US9nUR	                  U 5        g)r   zTarget opset version z$ is not supported. Supported range: z to r   )r0   N)r/   r.   r   r   r   )r   r0   version_converters      r   convert_versionr   U  s`    1111#N#3 4  89>V=WWXZ
 	
 *H!!%(r   )r   r   rS   
int | None)r   zir.Model | ir.Functionr   rX   rS   r   )r   r   r0   rX   rS   rY   )r^   r   r_   rX   rS   zir.Value | Noner7   )r^   r   rg   rW   rh   r   rS   r   )r^   r   rg   rW   rh   
str | NonerS   r   )r^   r   )r   r   r0   rX   rS   r   )2r$   
__future__r   dataclassesrM   loggingtypingr   r   r   onnx_ir.convenienceconveniencer   onnxscript.ir._taper   _tape onnxscript.utils.metadata_mergerutilsr   
onnxscript	getLoggerr    r   r/   r.   r   r   RuntimeErrorr   	dataclassr'   Builderr   r   ReturnValueNoderR   r2   r4   rZ   r+   rT   r`   rk   rn   r|   r   r   r   r   r   r   r   <module>r      si   = "    , , , # # : : 			8	$   	,2TL T ! ! ! --HRXX&$67BGG_5{BC D ,-/ -& 
%b5	 6	 
,Rt< =( 

RtD- E-`c= c=L
)r   