§
    Ë²Åj  ã                   ó|  — d Z ddlZddlmZmZ ddlZddlmZ ddlmZm	Z	m
Z
 ddlmZmZ g d¢Z ej        ej        d¬	¦  «        Z ed
¦  «         e
j        dddddd¦  «        dej        dej        dee         dej        dej        dedefd„¦   «         ¦   «         Z ed¦  «        dej        fd„¦   «         Zd„ Z ed¦  «         e
j        dddddddd¦  «        	 	 	 	 	 	 d(dej        dej        ded ee         d!ee         d"eej                 d#ed$ee         d%ee         d&ej        fd'„¦   «         ¦   «         ZdS ))a‘  This file exports ONNX ops for opset 17.

Note [ONNX Operators that are added/updated in opset 17]

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
https://github.com/onnx/onnx/blob/main/docs/Changelog.md#version-17-of-the-default-onnx-operator-set
New operators:
    BlackmanWindow
    DFT
    HammingWindow
    HannWindow
    LayerNormalization
    MelWeightMatrix
    STFT
    SequenceMap
é    N)ÚOptionalÚSequence)Ú_C)Ú_type_utilsÚerrorsÚsymbolic_helper)Ú	jit_utilsÚregistration)Ú
layer_normÚstftÚquantized_layer_normé   )Úopsetzaten::layer_normÚvÚisÚfÚnoneÚgÚinputÚnormalized_shapeÚweightÚbiasÚepsÚcudnn_enablec                 óâ  — t          |¦  «         }t          j                             |t          j        j        ¦  «        }|                     ¦   «         }	t          j        |¦  «        r-t          j	        ||	¬¦  «        }
|  
                    d|
¬¦  «        }t          j        |¦  «        r-t          j        ||	¬¦  «        }|  
                    d|¬¦  «        }|  
                    d|||||¬¦  «        S )N©ÚdtypeÚConstant©Úvalue_tÚLayerNormalization)Ú	epsilon_fÚaxis_i)Úlenr   ÚJitScalarTypeÚ
from_valueÚFLOATr   r   Ú_is_noneÚtorchÚonesÚopÚzeros)r   r   r   r   r   r   r   ÚaxisÚscalar_typer   Úweight_valueÚ
bias_values               úLC:\Projects\Historical\venv\Lib\site-packages\torch/onnx/symbolic_opset17.pyr   r   %   sò   € õ Ð Ñ!Ô!Ð!€DÝÔ+×6Ò6Ø�{Ô(Ô.ñô €Kð ×ÒÑÔ€EÝÔ Ñ'Ô'ð 8Ý”zÐ"2¸%Ð@Ñ@Ô@ˆØ—’�j¨,�Ñ7Ô7ˆÝÔ Ñ%Ô%ð 4Ý”[Ð!1¸Ð?Ñ?Ô?ˆ
Ø�tŠt�J¨
ˆtÑ3Ô3ˆØ�4Š4ØØØØØØð ñ ô ð ó    zquantized::layer_normc           	      óŽ   — t          j        | |¦  «        \  }}}}t          | |||||d¦  «        }	t          j        | |	||¦  «        S )NF)r   Údequantize_helperr   Úquantize_helper)
r   Úxr   r   r   r   Úop_scaleÚop_zero_pointÚ_Úoutputs
             r1   r   r   I   sO   € õ !Ô2°1°aÑ8Ô8�J€A€qˆ!ˆQå˜˜1Ð.°¸¸cÀ5ÑIÔI€FåÔ*¨1¨f°hÀÑNÔNÐNr2   c                 ó*   — | |z
  dz  }| |z
  |z
  }||fS )zuHelper function to compute the sizes of the edges (left and right)
    of a given window centered within an FFT size.é   © )Ún_fftÚwindow_sizeÚleftÚrights       r1   Ú_compute_edge_sizesrB   [   s+   € ð �KÑ AÑ%€DØ�D‰L˜;Ñ&€EØ�ˆ;Ðr2   z
aten::stftÚiÚbFTr>   Ú
hop_lengthÚ
win_lengthÚwindowÚ
normalizedÚonesidedÚreturn_complexÚreturnc	                 óê  — |rt          j        d|¬¦  «        ‚|�|n|dz  }	|                      dt          j        |	t          j        ¬¦  «        ¬¦  «        }
|                      dt          j        |t          j        ¬¦  «        ¬¦  «        }|}t          j        |¦  «        }|dk    rL|                      d	||                      dt          j        d
gt          j        ¬¦  «        ¬¦  «        ¦  «        }n"|�|dk    rt          j        d|› d�|¬¦  «        ‚t          j        |d
¬¦  «        }|� |r|n|}||k    sJ d|› d�f¦   «         ‚||k     rt          ||¦  «        \  }}|                      dt          j
        |¦  «        ¬¦  «        }|                      dt          j
        |¦  «        ¬¦  «        }|                      d|||d
¬¦  «        }t          j        |¦  «        rÄ|r„||k    rt          j        d|› d|› d�|¬¦  «        ‚t          ||¦  «        \  }}t          j        t          j
        |¦  «        t          j        |¦  «        t          j
        |¦  «        f¦  «        }nt          j        |¦  «        }|j        d
         |k    sJ ‚|                      d|¬¦  «        }|                      d|t          j                             |¦  «                             ¦   «         ¬¦  «        }|                      d||
|||�|rdnd
¬¦  «        }|                      d|g d¢¬¦  «        }|dk    rK|                      d||                      dt          j        d
gt          j        ¬¦  «        ¬¦  «        ¦  «        }|rxt          j        t          j        ||                     ¦   «                              ¦   «         ¬¦  «        ¦  «        }|                      d||                      d|¬¦  «        ¦  «        }|S )a®  Associates `torch.stft` with the `STFT` ONNX operator.
    Note that torch.stft calls _VF.stft, without centering or padding options.
    Hence, this function does not contain these two arguments.
    See torch.stft source code for more info.

    Args:
        g: Graph to write the ONNX representation into
        input: Input tensor for the transformation
        n_fft: FFT size
        hop_length: Size of the hop. Defaults to `floot(n_fft // 4)`
        win_length: Size of the analysis window. Defaults to `n_fft`
        window: Analysis window. Defaults to a window of all ones
        normalized: Whether to return a normalized STFT
        onesided: Whether to return only half (+1) of the results, given the
            symmetry of the STFT
        return_complex: Whether to return the complex value (Note: Must be
            `False` or `None`)

    Returns:
        op: Operator for torch.stft associated with STFT (ONNX)
    z-STFT does not currently support complex types)ÚmsgÚvalueNé   r   r   r   é   Ú	Unsqueezer   r<   zcSTFT can only take inputs of 1 [signal] or 2 [batch, signal] dimensions. Current rank of signal is z, please reduce it.)ÚdimzuAnalysis window size must equal `win_length` or `n_fft`. Please, set `win_length` or `n_fft` to match `window` size (ú)ÚConcat)r#   zWThe analysis window can't be longer than the size of the FFT. Please set `win_length` (z) to `n_fft` (z
) or less.ÚCast)Úto_iÚSTFT)Ú
onesided_iÚ	Transpose)r   r<   rP   é   )Úperm_iÚSqueezeÚDiv)r   ÚSymbolicValueErrorr+   r)   ÚtensorÚint64r   Ú_get_tensor_rankÚ_get_tensor_dim_sizerB   r,   r(   Úhstackr*   Úshaper   r%   r&   Ú	onnx_typeÚsqrtÚtyper   )r   r   r>   rE   rF   rG   rH   rI   rJ   Úframe_step_valueÚframe_step_constÚframe_length_constÚsignalÚsignal_rankÚn_winÚwin_length_defaultr@   rA   Úleft_winÚ	right_winÚtorch_windowÚresultÚ	sqrt_nffts                          r1   r   r   c   sl  € ðF ð 
ÝÔ'Ø?Àuð
ñ 
ô 
ð 	
ð
 &0Ð%;�z�zÀÈ!ÁÐØ—t’tØ�EœLÐ)9ÅÄÐMÑMÔMð ñ ô Ðð ŸšØ�EœL¨µe´kÐBÑBÔBð ñ ô Ðð
 €FÝ!Ô2°6Ñ:Ô:€KØ�aÒÐà—’ØØØ�DŠD�¥U¤\°1°#½U¼[Ð%IÑ%IÔ%IˆDÑJÔJñ
ô 
ˆˆð
 
Ð	 ¨a¢ ÝÔ'ðJØ)4ðJð Jð Jàð
ñ 
ô 
ð 	
õ Ô0°¸QÐ?Ñ?Ô?€EØÐØ+5Ð@˜Z˜Z¸5ÐØÐ*Ò*Ð*Ð*ðTØKPðTð Tð Tð-
Ñ*Ô*Ð*ð �5Š=ˆ=Ý-¨e°UÑ;Ô;‰KˆD�%Ø—t’t˜Jµ´¸DÑ0AÔ0A�tÑBÔBˆHØŸš˜Zµ´¸UÑ1CÔ1C˜ÑDÔDˆIØ—T’T˜( H¨f°iÈ�TÑJÔJˆFõ Ô Ñ'Ô'ð 8Øð 	-Ø˜EÒ!Ð!ÝÔ/ð\Ø0:ð\ð \ØJOð\ð \ð \àðñ ô ð õ .¨e°ZÑ@Ô@‰KˆD�%Ý œ<Ý”˜TÑ"Ô"¥E¤J¨zÑ$:Ô$:½E¼KÈÑ<NÔ<NÐOñô ˆLˆLõ
 !œ: eÑ,Ô,ˆLØÔ! !Ô$¨Ò-Ð-Ð-Ð-Ø—’�j¨,�Ñ7Ô7ˆØ�TŠTØ��[Ô6×AÒAÀ&ÑIÔI×SÒSÑUÔUð ñ ô €Fð
 �TŠTØØØØØØ Ð(¨HÐ(�1�1¸!ð ñ ô €Fð �TŠT�+˜v¨l¨l¨lˆTÑ;Ô;€Fð �aÒÐØ—’ØØØ�DŠD�¥U¤\°1°#½U¼[Ð%IÑ%IÔ%IˆDÑJÔJñ
ô 
ˆð ð JÝ”J�uœ|¨E¸¿º¹¼×9LÒ9LÑ9NÔ9NÐOÑOÔOÑPÔPˆ	Ø—’�e˜V Q§T¢T¨*¸i TÑ%HÔ%HÑIÔIˆà€Mr2   )NNNFTF)Ú__doc__Ú	functoolsÚtypingr   r   r)   r   Ú
torch.onnxr   r   r   Útorch.onnx._internalr	   r
   Ú__all__ÚpartialÚonnx_symbolicÚ_onnx_symbolicÚ
parse_argsÚGraphContextÚValueÚintÚfloatÚboolr   r   rB   r   r=   r2   r1   ú<module>rƒ      sš  ððð ð" Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %à €€€Ø Ð Ð Ð Ð Ð Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8ð 9Ð
8Ð
8€à"�Ô" <Ô#=ÀRÐHÑHÔH€ð €Ð"Ñ#Ô#Ø€Ô˜C  s¨C°°fÑ=Ô=ðØÔðàŒ8ðð ˜s”mðð ŒHð	ð
 Œ(ðð 
ðð ðð ð ñ >Ô=ñ $Ô#ððD €Ð'Ñ(Ô(ðOØÔðOð Oð Oñ )Ô(ðOð"ð ð ð €�ÑÔØ€Ô˜C  c¨3°°S¸#¸sÑCÔCð
 !%Ø $Ø!%ØØ#Ø%*ðBð BØÔðBàŒ8ðBð ðBð ˜”ð	Bð
 ˜”ðBð �R”XÔðBð ðBð �tŒnðBð ˜T”NðBð „XðBð Bð Bñ DÔCñ ÔðBð Bð Br2   