
    ^j=K             !       }   U d dl Z d dlZd dlZd dlZd dlZd dlmZmZ d dlm	Z	 d dl
mZ d dl mZmZ d dlmZmZ d dlmZmZ d dlZd dlZd dlmZ d dlmZ d dlmc mZ d dlmZm Z m!Z! d d	l"m#Z# d d
l$m%Z% d dlm&Z&m'Z'm(Z(m)Z)m*Z* d dl+m,Z,m-Z-m.Z.m/Z/ d dl0m1Z2 d dl3m4Z4 ejj                  jl                  Z6g Z7e8e9   e:d<   ejv                  jx                  jz                  Z= G d de      Z>	 	 ddedej~                  de@de@fdZA eeAej~                  j                  d      ZC eeAej~                  j                        ZD eeAej~                  j                  d      ZE eeAej~                  j                        ZGde!deHde!fdZI e#e=j                         e/d       eDd!e!d"e!fd#                     ZJ e#e=j                         e/d       eDd!e!d"e!fd$                     ZK e#e=j                         e/d       eDd!e!de!d%eMd&eMfd'                     ZL e#e=j                         e/d       eDd(e!d)eMd*eMd+eMd,e@d-e!fd.                     ZN e#e=j                  j                  g      d/        ZQ e#e=j                  jB                  g      d0e!fd1       ZR e#e=j                         e/       eDd2e!de!fd3                     ZS e#e=j                         e/d       eDd(e!d2e!fd4                     ZT e#e=j                         e/d       eDd(e!d2e!d5eMd6eMfd7                     ZU e#e=j                         e/       eDd2e!de!fd8                     ZV e#e=j                         e/       eDd(e!d2e!de!fd9                     ZW e#e=j                         e/d       d(e!d2e!d&eMfd:              ZX e#e=j                         e/d       eDd(e!d2e!d;eMd<e@fd=                     ZY e#e=j                         e/d       eDdd>e!d2e!d?e9fd@                     ZZ e#e=j                        eDd(e!dAe!fdB              Z[ e#e=j                         e/       eDd2e!de!fdC                     Z\ e#e=j                         e/d       eDd(e!d2e!de!fdD                     Z] e#e=j                        d2e!dEe!de!fdF       Z^ e#e=j                        d(e!d2e!dEe!de`e!e!f   fdG       Z_ e#e=j                         e/       eDd(e!d2e!dHe!dIeMdJeMdKe@d<e@de!fdL                     Za e#e=j                         e/d       eDd(e!d2e!dMe!de!fdN                     Zb e#e=j                         e/       d2e!dOe!de!fdP              ZcdQe!dReHfdSZddTej                  fdUZf e#e=j                         e/       eDe>j                  j                  fd2e!dVe!dReHde!fdW                     Zg e#e=j                         e/d       eDd(e!dAe!dVe!dReHfdX                     Zj e#e=j                        ddY       Zl e#e=j                         e/       eDe>j                  j                  dZfd2e!dVe!dReHd%eMfd[                     Zm e#e=j                  j                        eDd(e!d2e!dVe!dReHd%eMf
d\              Zn e#e=j                  j                        eDd(e!d2e!dVe!dReHd%eMd e!fd]              Zq e#e=j                  j                        eDd(e!d2e!dVe!dReHd^eMf
d_              Zr e#e=j                  j                        eDd(e!d2e!dVe!dReHd^eMd e!fd`              Ztd(e!d2e!dVe!dEe!dz  dReHdaeHdbe!de!fdcZu e#e=j                         e/d       eDd(e!d2e!deHde!fdd                     Zv e#e=j                         e/d       d(e!d2e!dVe!dEe!dz  dReHdaeHdbe!de!fde              Zw e#e=j                         e/d       d(e!d2e!dVe!dEe!dz  dReHdaeHdbe!de!fdf              Zx e#e=j                         e/       eDde>j                  j                  fd2e!dVe!dEe!dz  dReHde!f
dg                     Zy e#e=j                         e/d       eDde>j                  j                  fd(e!d2e!dVe!dEe!dz  dReHde!fdh                     Zz e#e=j                         e/       eDe>j                  j                  fdAe!dVe!dReHde!fdi                     Z{ e#e=j                         e/d       eDe>j                  j                  fd(e!d2e!dVe!dReHde!f
dj                     Z| e#e=j                         e/       ddAe!dOe!dkeMfdl              Z} e#e=j                         e/       dme!dne!de!fdo              Z~ e#e=j                         e/       d(e!dpe8eH   deHdqeHdreHdseHfdt              Z e#e=j                   jB                        	 	 	 	 dd2e!deHdqeHdz  dreHdz  dseHf
dv       Zde!deHdqeHdz  dreHdz  de`eHeHf   f
dwZ e#e=j                         e/       	 	 	 	 ddAe!dxe!deHdqeHdz  dreHdz  dseHfdy              Z e#e=j                         e/       d(e!dpe8eH   deHdzeHfd{              Z e#e=j
                         e/       d(e!dpe8eH   d|eHd}eHd~eHf
d              Zd(e!d e!dej                  fdZ e#e=j                         e/d       eCd(e!de!deHdej                  fd                     Z e#e=j                         e/       eCd(e!de!deHdej                  fd                     Zd Z e#e=j                         e/       dAe!de8eH   de8eH   de8eH   de8eH   de!fd              Z e#e=j                         e/       eDdAe!de8eH   de8eH   de8eH   de8eH   de8eH   de!fd                     Z e#e=j                         e/       d(e!de!d*eMfd              Z e#e=j                         e/       d>e!de8eH   deHdeHdseHde!fd              Z e#e=j                  j                        eD	 dd(e!d2e!deMdz  de!fd              Z e#e=j                        e=j                  j                  j!                  e6j"                        e=j                  j                  j!                  e6j$                        dAe!dkeMde@dz  fd                     Z e#e=j&                         e/dd      dAe!dkeMde@dz  fd              Z e#e=j(                         e/       de!deHde@fd              Zde!deHde!fdZ e#e=j,                         e/d      de!deHde@fd              Z e#e=j.                         e/       	 	 	 ddEe!de!deHde@de@de!fd              Z e#e=j0                         e/       d(e!de!deHdeHde@f
d              Zde8eH   fdZde8e!   deHdeHde8e!   fdZde8e!   fdZde8e!   deHfdZde8e!   deHdeHfdZ e#e=j<                  j                  e=j<                  j                  g      	 dde8e!   deHdeHde!dz  de!f
d       Z e#e=j>                  j                  e=j>                  j                  g      	 	 dd2e!de8eH   deHde8e!   dz  de8e!   dz  f
d       Z e#e=j@                  jB                        ddAe!deHdeHde`e!df   fd       Z e#e=jB                  j                        	 ddAe!de8eH   deHde`e!df   fd       Z e#e=jD                  jB                        dd2e!deHdeHde`e!df   fd       Ze=jF                  jH                  j!                  e6j"                        	 dd2e!de!deHde`e!df   fd       Z e#e=jL                  j                  e=jL                  j                  g       e/d      eDdd2e!de!de!d%eHd)eHf
d                     Z e#e=jL                  j                  e=jL                  jN                  g       e/d      	 	 dd2e!de!de!dej                  d%eHd)eHfd              Z e#e=jR                         e/       eD	 	 	 dd2e!de!de!d%eHd)eHde@fd                     ZeDdd2e!de!de!d%eHd)eHf
d       Z e#e=jV                         e/d      dd2e!de!de!d%eHd)eHf
d              Z e#e=jX                  j                        eDd(e!dAe!de!de!de!dz  deHdeHdeHdeHde8e@   de`e!dz  e!dz  e!dz  f   fdʄ              Z e#e=jX                  j                        d(e!dAe!de!de!de!dz  deHdeHdeHdeHde8e@   dejB                  dejB                  dejB                  de`e!dz  e!dz  e!dz  f   fd̄       Zde!dz  de!dz  fd̈́Z e#e=j^                  j                        de!dAe!de8eH   de!de!dEe!dz  de!dz  de8e@   de`e!dz  e!dz  e!dz  f   fdф       Z e#e=j^                  j                        de!dAe!de8eH   de!de!dEe!dz  de!dz  de8e@   dejB                  dejB                  dejB                  de`e!dz  e!dz  e!dz  f   fd҄       Z e#e=jb                  j                        dAe!de8eH   dEe!dz  deMdz  de`e!e!f   f
dӄ       Z e#e=jd                  j                        de!dAe!de8eH   de!dEe!dz  de8e@   de`e!dz  e!dz  f   fdԄ       ZdAe!dEe!dz  de!dz  de!dz  de!dz  dKe@deMdeMde@de`e!e!e!e!dz  e!dz  f   fdلZ e#e=jh                         e/ddd۫      dAe!dEe!dz  de!dz  de!dz  de!dz  dKe@deMdeMde`e!e!e!f   fd܄              Ze=jh                  j                  j!                  e6j$                        e=jh                  j                  j!                  e6j"                        dAe!dEe!dz  de!dz  de!dz  de!dz  dKe@deMdeMde`e!e!e!f   fd݄              Ze=jl                  j                  j!                  e6j"                        dde8e!   fdބ       Z e#e=jp                  j                        dAe!dEe!dz  de!dz  de!de!deMdeMde`e!e!e!f   fd߄       Z e#e=jr                  j                        dAe!dEe!dz  de!dz  de!de!dKe@deMdeMde`e!e!e!f   fd       Z e#e=jr                  jt                        dAe!dEe!dz  de!dz  dKe@deMdeMde`e!e!e!f   fd       Z e#e=jx                  j                        dAe!dEe!dz  de!dz  de!de!dKe@deMdeMde`e!e!e!e!e!f   fd       ZdAe!dEe!dz  de!dz  de!de!deMdKe@de!fdZ e#e=j|                  j                        dAe!dEe!dz  de!dz  de!de!deMdeMde`e!e!e!e!f   fd       Z e#e=j~                  j                        dAe!dEe!dz  de!dz  de!de!deMdeMde`e!e!e!e!e!e!f   fd       Z e#e=j                  j                        dAe!dEe!dz  de!dz  de!de!deMdeMde`e!e!e!e!f   fd       Z e#e=j                         e/dd      dd              Z e#e=j                         e/       dddddddde!e'z  dTej                  dz  dej                  dz  de@de@dej                  dz  fd              Z e#e=j                  e=j                  e=j                  g       e/       d               Ze=j                  j                  j!                  e6j$                         e#e=j                         e/dddd      dAe!dEe!de!dz  de!dz  de!dz  dKe@deMdeMfd                     Zd Z e#e=j                  j                        de!dAe!dEe!dz  de!dz  de!dz  de!dz  de!dz  de@deMde8e@   de!de`e!e!dz  e!dz  f   fd       Z e#e=j                  j                        de!dAe!dEe!dz  de!dz  de!dz  de!dz  de!dz  de@deMde8e@   de`e!e!dz  e!dz  f   fd       Z e#e=j                  j                        de!dAe!dEe!dz  de!dz  de!dz  de!dz  de!dz  de@deMde8e@   dejB                  dejB                  dejB                  de`e!e!dz  e!dz  f   fd       Z e#e=j                         e/ddd˫      dAe!d(e!dEe!de!dz  de!dz  de!dz  de!dz  deMfd              Z e#e=j                         e/ddd˫      dAe!d(e!dEe!de!dz  de!dz  de!dz  de!dz  deMde!fd              Z e#e=j                         e/       eDdAe!de`eHeHf   fd                     Zd2e!de8eH   de8eH   de8eH   de8eH   de@deHde`e!e!f   fdZ e#e=j                         e/dd      g d gdugdfd2e!de8eH   de8eH   de8eH   de8eH   de@de`e!e!f   fd               Z e#e=j                         e/dd      g d gdugdfd2e!de8eH   de8eH   de8eH   de8eH   de@de`e!e!f   fd              Z e#e=j                         e/dd      dAe!de`eHeHf   de`e!e!f   fd              Z e#e=j                         e/dd      dAe!de`eHeHeHf   de`e!e!f   fd              Zd2e)de)de8eH   deHfdZ e#e=j                         e/       d2e)de)de8eH   fd              Z e#e=j                         e/       dAe)de)de8eH   de8eH   de8eH   f
d              Z e#e=j                        dudde)deHdze)de)d)e'f
d	       Z e#e=j                         e/       dudde)deHdze)de)d)e'f
d
              Zdudde)deHdze)de)de@d)e'fdZ e#e=j                  j                        e=j                  j                  j!                  e6j"                        dd              Z e#e=j                        de)deHdze)de)fd       Z e#e=j                         e/       de)deHdze)de)fd              Zde)deHdze)de)de@f
dZ e#e=j                         e/ddM      eDd2e!de`e!e!f   fd                     Z e#e=j                         e/       	 	 	 dde!de@eHz  eMz  de@eHz  eMz  dej                  dz  fd              Z e#e=j                        dd       Zd Zd Z e#e=j                  j                         e#e=j                  j                         e#e=j                  j                        e=j                  j                  j!                  e6j"                        e=j                  j                  j!                  e6j$                        e=j                  j                  j!                  e6j"                        e=j                  j                  j!                  e6j$                        e=j                  j                  j!                  e6j"                        e=j                  j                  j!                  e6j$                        dAe!de8eH   dz  de8eM   dz  de!fd                                                               Z e#e=j                  j                         e#e=j                  j                         e#e=j                  j                        e=j                  j                  j!                  e6j"                        e=j                  j                  j!                  e6j$                        e=j                  j                  j!                  e6j"                        e=j                  j                  j!                  e6j$                        e=j                  j                  j!                  e6j"                        e=j                  j                  j!                  e6j$                        dAe!de8eH   dz  de8eM   dz  de!fd                                                               ZdÐdZ e#e=j                  j                  e=j                  j                  g      e=j                  j                  j!                  e6j"                        e=j                  j                  j!                  e6j$                         e/dd      	 ddAe!de8eH   deMdz  de!fd                            Z e#e=j                  j                  e=j                  j                  g      e=j                  j                  j!                  e6j"                        e=j                  j                  j!                  e6j$                         e/dd      	 ddAe!de8eH   deMdz  de!fd                             Z e#e=j                  j                  e=j                  j                  g      e=j                  j                  j!                  e6j"                        e=j                  j                  j!                  e6j$                         e/dd      	 	 ddAe!de8eH   d!eMdz  d"eMdz  de!f
d#                            Z e#e=j                  j                  e=j                  j                  g      e=j                  j                  j!                  e6j"                        e=j                  j                  j!                  e6j$                         e/dd      	 	 ddAe!de8eH   d!eMdz  d"eMdz  de!f
d$                            Z e#e=j                  j                  e=j                  j                  g      e=j                  j                  j!                  e6j"                        e=j                  j                  j!                  e6j$                         e/dd      	 	 	 ddAe!de8eH   d%eMdz  d!eMdz  d"eMdz  de!fd&                            Z e#e=j                  j                  e=j                  j                  g      e=j                  j                  j!                  e6j"                        e=j                  j                  j!                  e6j$                         e/dd      	 	 	 ddAe!de8eH   d%eMdz  d!eMdz  d"eMdz  de!fd'                            ZeD	 ddAe!de8eH   de8eMdz     d(e@de!f
d)       Zd* Zd+ Zd, Zd- Z	 dÐd.Zd/ Zd0 ZdÐd1ZdÐd2Zd3 Z e#e=j                  j                        e=j                  j                  j!                  e6j"                        e=j                  j                  j!                  e6j$                        d4                      Z  e#e=j                  j                        e=j                  j                  j!                  e6j"                        e=j                  j                  j!                  e6j$                        d5                      Z e#e=j                  j                        e=j                  j                  j!                  e6j"                        e=j                  j                  j!                  e6j$                        d6                      Z e#e=j                  j                        e=j                  j                  j!                  e6j"                        e=j                  j                  j!                  e6j$                        d7                      Zd8 ZdÐd9ZdÐd:Zd; Z	 e#e=j                  j                        e=j                  j                  j!                  e6j"                        e=j                  j                  j!                  e6j$                        d<                      Z e#e=j                  j                        e=j                  j                  j!                  e6j"                        e=j                  j                  j!                  e6j$                        d=                      Zd> Zd? Z e#e=j                  j                        e=j                  j                  j!                  e6j"                        e=j                  j                  j!                  e6j$                        d@                      Z e#e=j                  j                        e=j                  j                  j!                  e6j"                        e=j                  j                  j!                  e6j$                        dA                      Z e#e=j$                  j                        e=j$                  j                  j!                  e6j"                        e=j$                  j                  j!                  e6j$                        dB                      Z e#e=j(                  j                        e=j(                  j                  j!                  e6j"                        e=j(                  j                  j!                  e6j$                        dC                      Z e#e=j,                  j                        e=j,                  j                  j!                  e6j"                        e=j,                  j                  j!                  e6j$                        dD                      Z e#e=j0                  j                         e#e=j2                  j                        e=j4                  j                  j!                  e6j"                        e=j4                  j                  j!                  e6j$                        e=j0                  j                  j!                  e6j"                        e=j0                  j                  j!                  e6j$                        e=j2                  j                  j!                  e6j"                        e=j2                  j                  j!                  e6j$                        dE                                                         Z e#e=j4                  j                  e=j4                  j                  g       e/       	 ddAe!de8eH   dFe@d"eMdz  de!f
dG              Z e#e=j0                  j                  e=j0                  j                  g      e=j0                  j                  j!                  e6j$                         e/       	 	 ddAe!de8eH   dFe@d!eMdz  d"eMdz  de!fdH                     Z e#e=j2                  j                  e=j2                  j                  g       e/       	 	 	 ddAe!de8eH   dFe@d%eMdz  d!eMdz  d"eMdz  de!fdI              ZddJZdK Zdxee!   dLee!   dMe!de!fdNZdLe*de!fdOZeDdAe!de8eH   dFe@de8eMdz     de!f
dP       Z  e#e=jB                  j                        dQe!dRe!de@fdS       Z! e#e=jD                  e=jF                  g       e/       dT               Z" e#e=jH                  g      dU        Z$ e#e=jJ                  g      dÐdV       Z% e#e=jL                  g      dW        Z& e#e=jN                  g      dX        Z'd2e!dVe!dEe!dz  dReHdaeHde`e!e!f   fdYZ( e#e=jR                         e/ddb      d2e!dVe!dEe!dz  dReHdaeHde`e!e!f   fdZ              Z) e#e=jT                         e/ddb      d2e!dVe!dEe!dz  dReHdaeHde`e!e!f   fd[              Z*de!d\eMde!fd]Z+de!d\eMde!fd^Z,d_e!de*fd`Z-dae*dbe!de!fdcZ.dbee!   de!fddZ/deeHdFe@dTej                  dej                  fdfZ0dge!dheHdieHdFe@fdjZ1dge!dkeHdheHdieHdFe@f
dlZ2dge!de8eH   dFe@fdmZ3dge!de8eH   dFe@fdnZ4 e#e=jj                         e/       eDdge!de8eH   dFe@fdo                     Z5	 	 	 	 dƐdQe!dpe!dqeHdreHdFe@dse@de!fdtZ6 e#e=jn                         e/       eD	 	 	 dǐdQe!dpe!dqeHdreHdFe@de!fdu                     Z7 e#e=jp                         e/d      eDdv                      Z8 e#e=jr                         e/       dde>j                  j                  fdw              Z9dxejB                  dyejB                  dze@de@fd{Z:e=jv                  j                  j!                  e6j"                        e=jv                  j                  j!                  e6j"                         e/d|      dd}d~                     Z; e#e=jx                  j                  e=jx                  j                  g      e=jx                  j                  j!                  e6j$                         e/       eD	 	 ddAe!de`eHeHf   dFe@deMdz  deMdz  de!fd                            Z= e#e=jx                  j                        e=jx                  j                  j!                  e6j"                        e=jx                  j                  j!                  e6j$                         e/       eD	 ddQe!de`eHeHf   dz  dFe@de`eMeMf   dz  de!f
d                                   Z> e#e=j~                         e#e=j                         e#e=j                        eD e/       dQe!de`eHdf   de!fd                                   ZB e#e=j                         e#e=j                         e#e=j                        eD e/       dQe!de`eHdf   de!fd                                   ZFdQe!de`eHdf   deeHeHeHge!f   de!fdZG e#e=j                         e#e=j                         e#e=j                         e/d       d                             ZK e#e=j                         e/dd      dddd              ZL e#e=j                         e/       dddd              ZM e#e=j                  j                  e=j                  j                  g       e/       dej                  ddddre'dTej                  dz  dej                  dej                  dz  de@f
d              ZQ e#e=j                  j                  g      dej                  ddddqe'dre'dTej                  dz  dej                  dej                  dz  de@fd       ZS e#e%      d        ZT e#e=j                        e=j                  j                  j!                  e6j$                         e/       dudude>j                  j                  fdAe!dVe!dke'de'dEe!dz  dReHde!fd                     ZU e#e=j                        e=j                  j                  j!                  e6j$                         e/dd      dAe!dVe!dReHde`e!e!f   fd                     ZV e#e=j                  j                        	 	 ddddde!de!d0e!deMde@de!dz  d*eMdz  de`e!e!f   fd       ZXd ZY e#e=j                  g       e/d      eDdd                     ZZ e#e=j                         e/       d               Z[ e#e=j                        d        Z\ e#e=j                  j                  e=j                  j                  g      dddd2e!dTej                  dz  de!dz  de!fd       Z^ e#e=j                  j                  e=j                  j                  g      dd2e!deHdz  fd       Za e#ejx                  jz                  j                        dd       Zb e#e=j                         e/       dddd              Zc e#e=j                  j                        ddd2ejB                  dej                  dz  dejB                  fd       ZddddZeddddZf e#e=j                         e/       d               Zg e#e=j                        dd       Zh e#e=j                        d(e!d2e!de@de!fd       Zi e#e=j                  j                  e=j                  j                  g       e/       ddddddeHdTej                  dz  dej                  dz  dej                  dz  de@dz  de!fd              Zj e#e=j                  j                  e=j                  j                  g       e/       	 dddddddeHde@dTej                  dz  dej                  dz  dej                  dz  de@dz  de!fd              Zm eYe=j                  e=j                          eYe=j                  e=jL                          eYe=j                  e=jV                          eYe=j                  e=j                          eYe=j                  e=j                          eYe=j                  e=j                          eYe=j                  e=j                          eYe=j                  e=j                          eYe=j                  e=j                          eYe=j                  e=j                          eYe=j                  e=j                          eYe=j                  e=j                          eYe=j                   e=j                          eYe=j                  e=j                          eYe=j                  e=j
                          eYe=j                  e=j                          eYe=j                  e=j                          eYe=j                  e=j                          eYe=j                  e=j                          eYe=j                  e=j                          eYe=j                  e=j                           eYe=j"                  e=j$                          eYe=j&                  e=j(                          eYe=j*                  e=j,                          eYe=j.                  e=j0                          eYe=j2                  e=j                         e=j4                  j                  j!                  e6j"                        dd2e!deHde!fd       Zy(      N)CallableIterable)nullcontext)Enum)partialreduce)chainproduct)Anycast)	sym_floatsym_intTensorregister_decomposition	out_dtype)IntLike
NumberTypesuggest_memory_format
TensorLikeTensorSequenceType)_maybe_convert_to_dtype_maybe_resize_out_safe_copy_outout_wrapper)_pytree)tree_map__all__c                       e Zd ZdZdZdZy)	Reductionr         N)__name__
__module____qualname__NONEMEANSUM     g/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_decomp/decompositions.pyr!   r!   1   s    DD
Cr+   r!   Fftype_promotioncompute_dtype_onlyinclude_non_tensor_argsc                 N     t        j                          fd       }|S )Nc                  \  	 r t         t        j                  j                  fnt         f}t	        j
                  | i |D cg c]  }t        ||      r| }}t        j                  |di\  	fd}	fd} t        ||       i t        ||      }
r|S t        ||      S c c}w )Ntype_promotion_kindc                 J    t        | t              r| j                        S | S N
isinstancer   to)xcomputation_dtypes    r,   increase_precz0type_casts.<locals>.inner.<locals>.increase_precO   s"    !V$tt-..r+   c                 J    t        | t              r| j                        S | S r5   r6   )r9   result_dtypes    r,   decrease_precz0type_casts.<locals>.inner.<locals>.decrease_precU   s!    !V$ttL))r+   )
r   torchtypes_Numberpytreearg_tree_leavesr7   utilselementwise_dtypesr   )argskwargsallowed_typesr9   	flat_argsr;   r>   rr:   r=   r/   r-   r0   r.   s           @@r,   innerztype_casts.<locals>.inner@   s     .EVU[[(()6) 	
 ++T<V<
!]+ 
	 

 +0*B*B+
,:+
'<
		 xt,P0OPHM1--5
s   B))	functoolswraps)r-   r.   r/   r0   rK   s   ```` r,   
type_castsrN   :   s(     __Q. .@ Lr+   T)r.   r/   )r.   )r.   r0   r9   dimreturnc                 j    t        || j                         z
        D ]  }| j                  d      }  | S N)rangerO   	unsqueeze)r9   rO   _s      r,   _unsqueeze_to_dimrW   w   s2    3=! KKOHr+   
grad_inputout_gradyc                 4    | d||z  z
  j                         z  S Nr"   conj_physicalrY   rZ   s     r,   tanh_backwardr`   }   s      q1q5y//111r+   c                 4    | |d|z
  z  j                         z  S r\   r]   r_   s     r,   sigmoid_backwardrb      s      qAE{11333r+   beta	thresholdc                 t    ||z  j                         }t        j                  ||z  |kD  | | |z  |dz   z        S N      ?)expr?   where)rY   r9   rc   rd   zs        r,   softplus_backwardrk      s=     
TA;;DI-xAS9QRRr+   grad_outputalphascaleinput_scale	is_resultself_or_resultc                     ||z  }|}|}|r&t        j                  |dk  | |z  ||z   z  | |z        S t        j                  |dk  | |z  |z  t        j                  ||z        z  | |z        S Nr   )r?   ri   rh   )	rl   rm   rn   ro   rp   rq   negcoefposcoef
negiptcoefs	            r,   elu_backwardrw      s     emGGJ{{a*$(@A'!
 	
 {{a*$w.>J;V1WW'!
 	
r+   c                 .    t        j                  | |      S r5   )r?   	full_likeselfvalues     r,   fill_scalarr}      s    ??4''r+   r|   c                     t        j                  j                         dk(  fd       t        j	                  |       S )Nr   c                  ,    d j                          dS )Nz@fill only supports 0-dimension value tensor but got tensor with z dimensionsrO   r|   s   r,   <lambda>zfill_tensor.<locals>.<lambda>   s    RSXS\S\S^R__jk r+   )r?   _checkrO   atencopyrz   s    `r,   fill_tensorr      s3    	LL		qk 99T5!!r+   r{   c                 f    t        j                  t        j                  | dz   d      d      dz  S N   r   min   maxr?   clampr{   s    r,   hardsigmoidr      s)     ;;u{{4!83;a??r+   c                 H    t        j                  |dkD  |dk  z  | dz  d      S )Ng      g      @gUUUUUU?        r?   ri   rl   r{   s     r,   hardsigmoid_backwardr      s0     ;;	$y! r+   min_valmax_valc                 B    t        j                  ||k  ||k\  z  d|       S )Nr   r   )rl   r{   r   r   s       r,   hardtanh_backwardr      s$     ;;DGO<c;OOr+   c                 l    | t        j                  t        j                  | dz   d      d      z  dz  S r   r   r   s    r,   	hardswishr      s.     %++ekk$(:BBQFFr+   c           
      x    t        j                  |dk  dt        j                  |dk  | |dz  dz   z  |             S )Nr   r         ?r   r   s     r,   hardswish_backwardr      sA     ;;
D1HkdQh#-=>L r+   c                 6    t        j                  ||k  d|       S rs   r   )rl   r{   rd   s      r,   threshold_backwardr      s     ;;ty(![99r+   negative_slopeself_is_resultc                 <    t        j                  |dkD  | | |z        S rs   r   )rl   r{   r   r   s       r,   leaky_relu_backwardr      s      ;;taxkN.JKKr+   gradapproximatec                    d}d}d}|dk(  ri||z  dz  }d}||z  }||z  }	||||	z  z   z  }
t        j                  |
      }d|z  }d|z   }d|z  }d||z  z
  }|dd|z  |z  z   z  }||z  |z  }| ||z   z  S |}||z  dz  }ddt        j                  ||z        z   z  }|t        j                  ||z  d	z        z  }| |||z  z   z  S )
Ng;f?g;f?gmBP?tanhr   gHm?r"   r         )r?   r   erfrh   )r   r{   r   M_SQRT2	M_SQRT1_2
M_2_SQRTPIkBetakKappax_sqx_cuberK   
tanh_innerleftrightleft_derivativetanh_derivativeinner_derivativeright_derivativekAlphacdfpdfs                        r,   gelu_backwardr      s'    %G&I'Jf*$s*d{/0ZZ&
TzJ+j:55 AF
T(9$9:/14DD)99::Y&,Q4&=112eiitd 233sTCZ'((r+   inputc                     t        j                  t        j                  |            }t        j                  |      }||z  d||z  z
  z  }| ||z   z  S r\   )r?   r   Fsoftplussigmoid)rl   r   input_tanh_softplusinput_sigmoidouts        r,   mish_backwardr     sV      **QZZ%67MM%(M
-
1':=P'P#P
QC-344r+   c                 2    | t        j                  |       z  S r5   r?   r   r   s    r,   silur   '  s     %--%%%r+   c                 N    t        j                  |      }| |z  d|d|z
  z  z   z  S r\   r   )rl   r{   r   s      r,   silu_backwardr   .  s0     mmD!G AG(<$<==r+   weightc                 <    t        j                  | dkD  | || z        S rs   r   )r{   r   s     r,   _prelu_kernelr   6  s    ;;taxv}55r+   c                 ~    t        j                  |dkD  | || z        }t        j                  |dkD  d|| z        }||fS )Nr   r   r   )rl   r{   r   
input_gradweight_grads        r,   _prelu_kernel_backwardr   ;  sE     TAX{F[4HIJ++dQhTK-?@K$$r+   noiseloweruppertrainingc                 h    |r| j                  |      S ||z   dz  }t        j                  | |||      S Nr#   )mulr   r   )rl   r{   r   r   r   r   r   r   s           r,   rrelu_with_noise_backwardr   F  s@     u%%%-1,''~~
 	
r+   bufferc                    |dk  }t        j                  |dd      }t        j                  |dd      }|j                         dkD  r|n(t        j                  t        j                  |             }| |||d|z   z  z  z
  z  S )Nr   r"   rS   )r?   ri   numelrh   abs)rl   r{   r   in_negative	max_derivsignrj   s          r,   log_sigmoid_backwardr   [  sx     (KKA.I;;{Ar*D ,,.1$%))UYYt_4D*EA)da1q5k&::;;r+   otherc                    t        j                  | j                        st        j                  | j                        rt        j
                  n| j                  }| j                  dd|      }| t	        j                  ||      z  S )Nr*          @dtype)rD   is_integer_dtyper   is_boolean_dtyper?   float32new_fullpow)r{   r   	two_dtype
two_tensors       r,   ldexpr   h  sh    
 !!$**-1G1G

1S 	ZZ 
 r3i8J%))J...r+   loss	reductionc                     |t         j                  j                  k(  rt        j                  |       S |t         j
                  j                  k(  rt        j                  |       S | S r5   )r!   r(   r|   r?   meanr)   sum)r   r   s     r,   apply_loss_reductionr   t  sH    INN(((zz$	imm))	)yyr+   r   c                     | t         j                  k(  rt         j                  S | t         j                  k(  rt         j                  S | t         j
                  k(  rt         j                  S y r5   )r?   	complex32float16	complex64r   
complex128float64r   s    r,   to_real_dtyper   }  sK    }}	%//	!}}	%""	"}} 
#r+   targetc                 *    | |z
  dz  }t        ||      S r   )r   )r{   r   r   r   s       r,   mse_lossr    s     6MaDi00r+   c                 |    |t         j                  j                  k(  rd|j                         z  nd}|||z
  z  | z  S )Nr   )r!   r(   r|   r   )rl   r   r   r   norms        r,   mse_loss_backwardr    s;     #,y~~/C/C"C3D56>"[00r+   c                     t        j                  | ||      }| j                  t        d            }t        j                  ||d      }t        j
                  |      }t        j                  |||      S )N)rO   r   -infTrO   keepdim)r?   softmaxeqfloatall
zeros_likeri   )r{   rO   r   r   maskedmasked_rowszeross          r,   safe_softmaxr    s[    
--#U
3CWWU6]#F))FT:KS!E;;{E3//r+   rg   c                     | |z
  j                         }t        j                  ||k  d|dz  z  |z  |d|z  z
        }t        ||      S )Nr   r#   )r   r?   ri   r   )r{   r   r   rc   r   s        r,   smooth_l1_lossr    sO     6M D;;td{C$'MD$8$t:KLDi00r+   c                    |t         j                  j                  k(  rd|j                         z  nd}||z
  }t	        j
                  |      }|| z  }t	        j                  ||k  ||z  |z  |t	        j                  |      z        S rf   )r!   r(   r|   r   r?   r   ri   r   )	rl   r{   r   r   rc   r  r9   abs_x	norm_grads	            r,   smooth_l1_loss_backwardr    s{    
 "+inn.B.B!B3DvAIIaLE{"I;;AEJJqM! r+   c                 h    t        | ||||      }t        ||j                         t        ||d      S NT	copy_fromcopy_toexact_dtype)r  r   shaper   )rl   r{   r   r   rc   rX   results          r,   smooth_l1_loss_backward_outr     s3     %[$	4PFj&,,/FJDQQr+   deltac           
          |t         j                  j                  k(  rd|j                         z  nd}||z
  }t	        j
                  || k  | | z  |z  t	        j
                  ||kD  || z  |z  ||z  | z              S rf   )r!   r(   r|   r   r?   ri   )rl   r{   r   r   r!  r  r9   s          r,   huber_loss_backwardr#    s    
 "+inn.B.B!B3DvA;;	UF
	e#AItk1E94!8k;QR r+   c                 h    t        | ||||      }t        ||j                         t        ||d      S r  )r#  r   r  r   )rl   r{   r   r   r!  rX   r  s          r,   huber_loss_backward_outr%    s3     !dFIuMFj&,,/FJDQQr+   ignore_indextotal_weightc                    |j                         dk  rdnd}|t        j                  j                  k(  r| |z  } |j                         dk(  r|j                         dkD  r|d   }|j	                  |      }t        j                  ||k7  |d      }t        j                  |      }	t        j                  |	||d      }	|	j                         | j                         cxkD  rdkD  rn n| j	                  |      } |Nt        |j                               D 
cg c]  }
d }}
|j                  d   ||<   |j                  |      }| |z  } t        j                  ||k7  | d      } |	| z  S c c}
w )Nr#   r   r"   g      )rO   r!   r(   r|   rU   r?   ri   r  scatterrT   r  reshape)rl   r{   r   r   r   r&  r'  channel_dimsafe_targetrX   rV   	new_shapes               r,   _nll_loss_backwardr.    sC    xxzA~!1KINN(((!L0
 xxzQ6::<!+k*F++f4fa@K!!$'Jz;TJJ~~+//+/a/!++K8 %dhhj 121Q2	2!'a	+	*!F*++f4k1EK## 3s   	E'c                    |j                         dk  rt        d      t        j                  |j                         |      }|j	                  |      }|dz  dk7  rt        d| d|       |dz  }|j                  |d|      }|j                  |||      }t        j                  |      }d|z
  |z  |z  | z  }	|| z  }t        j                  ||	g|      S )Nr   z*glu does not support 0-dimensional tensorsr#   z.Halving dimension must be even, but dimension z	 is size rg   r   )	rO   AssertionErrorrD   canonicalize_dimsizenarrowr?   r   cat)
rl   r{   rO   wrap_dimnIn	inputSize	firstHalf
secondHalfgradInputFirstHalfgradInputSecondHalfs
             r,   glu_backwardr<    s     xxzQIJJ%%dhhj#6H
))H
C
Qw!|<XJiPSuU
 	
 qIHa3IXy)<Jz2	!	!%77)CkQ  ,k999(*=>HMMr+   c           	      ^   d|j                         cxk  rdk  sn t        d|j                          d      |j                         dkD  rt        d|j                          d      |j                         dk(  xr |j                         dk(  }|sE|j                  d   |j                  d   k(  s&t        d|j                   d|j                   d	      |j                         dk7  r*t        d
|j                   d|j                          d      |+|j                         |j                  d   k7  rt        d      |t        j
                  j                  k(  r|j                         dk(  rn| j                         dk(  r| j                  d   |j                  d   k(  szt        d|j                  d    d| j                          d| j                  d          | j                         dk  r| j                         dk(  st        d| j                         t        | ||||||      S )Nr   r#   %input tensor should be 1D or 2D, got Dr"   A0D or 1D target tensor expected, multi-target not supported, got size mismatch (got input: 
, target: ):expected total_weight to be a single element tensor, got: z (z
 elements)rS   z<weight tensor should be defined either for all or no classesz7Expected a tensor of dimension 1 and tensor.size[0] == z but got: dimension z and tensor.size[0] == z7Expected a single element grad_output tensor, but got: )rO   r0  r  r   r!   r'   r|   r.  )rl   r{   r   r   r   r&  r'  no_batch_dims           r,   nll_loss_backwardrF  2  s+     q DTXXZLPQRSSzz|aOPVPZPZP\~]^_
 	
 88:?8vzz|q'8LTZZ]fll1o=(Jv||nAN
 	
 q H!!""\%7%7%9$:*F
 	

 flln

2>J
 	
 INN(((TXXZ1_!Q&;+<+<Q+?4::a=+P I$**UV- Y""-//"3!44KKL]L]^_L`Kac 
 !Q&;+<+<+>!+C I+J[J[I\]  T669lL r+   c           	      ^   |j                         dk7  rt        d|j                                |j                         dk7  rt        d|j                                |j                  d   |j                  d   k(  r>|j                  d   |j                  d   k(  r|j                  d   |j                  d   k(  s%t        d|j                   d	|j                         |j                         dk7  r*t        d
|j                   d|j                          d      t	        | ||||||      S )N   zSonly batches of spatial inputs supported (4D tensors), but got input of dimension: r   zUonly batches of spatial targets supported (3D tensors) but got targets of dimension: r   r#   r"   rA  rB  rD  z ( z, elements))rO   r0  r  r   r.  )rl   r{   r   r   r   r&  r'  s          r,   nll_loss2d_backwardrI  e  s;    xxzQabfbjbjblamn
 	
 zz|qcdjdndndpcqr
 	

 	

1a(JJqMV\\!_,JJqMV\\!_,(Jv||nM
 	
 q  &&'s<+=+=+?*@M
 	

 T669lL r+   c           	      "   |dz
  t        j                  t        j                  |        | j                  dd            z  |t        j                  t        j                  |       | j                  dd            z  z
  }|||z  }t        ||      S )Nr"   r*   i)r?   maximumlog1pr   logr   )r{   r   r   r   r   s        r,   binary_cross_entropyrN    s     QJ%--TEDMM"d3 uyyb$0GHHID f}i00r+   c                     d}| ||z
  z  t        j                  |d|z
  z  |      z  }|||z  }|t        j                  j                  k(  r||j                         z  }|S )Ng-q=r"   r   )r?   r   r!   r(   r|   r   )rl   r{   r   r   r   EPSILONr  s          r,   binary_cross_entropy_backwardrQ    sg     GD6M*U[[T9JPW-XXF&INN((($**,&Mr+   c                 r    t        j                  t        j                  |  |z              }t        ||      S r5   )r?   rL  rh   r   )r   r   r   r   s       r,   soft_margin_lossrS    s.     ;;uyy%&12Di00r+   c                     || z  t        j                  ||z        dz
  z  }|t        j                  j                  k(  r||j                         z  }|S r\   )r?   r   r!   r(   r|   r   )rl   r{   r   r   rX   s        r,   soft_margin_loss_backwardrU    sM     +%v})E)IJJINN((($**,.
r+   pc                 6    t         j                  | |z
  |      S )N)rV  )r   r  )r   r   rV  s      r,   distrX    s     99UU]a9((r+   x1x2c                    | j                  d      j                  dd      }t        j                  |t        j                        }|j                  d      j                  dd      }t        j                  |t        j                        }t        j
                  | j                  d      ||gd      }t        j
                  |||gd      }|j                  |j                        }|j                  d      j                         S )Nr#   rS   Tmemory_formatr   )r   r   r?   	ones_likecontiguous_formatr4  r   matmulmT	clamp_minsqrt)	rY  rZ  x1_normx1_padx2_normx2_padx1_x2_r  s	            r,   _euclidean_distrk    s     ffQimmB%G__WE4K4KLFffQimmB%G__WE4K4KLF
))RVVBZ&12
6C
))R)2
.CZZFA##%%r+   input_sizesstartendstepc                 X    | j                  |      }t        j                  || ||||      S r5   )	new_zerosr?   slice_scatter)rl   rl  rO   rm  rn  ro  rX   s          r,   slice_backwardrs    s/     &&{3Jz;UCNNr+   r"   c                    ddl m} | j                         }|dk(  rt        d      t	        j
                  | j                         |      }t        | j                               }t        | j                               }|dk  rt        d      ||nd}	||nt        j                  }
|	dk  r|	||   z  }	|
dk  r|
||   z  }
|	dk  rd}	n|	||   kD  r||   }	 ||
t        j                  k(        r||   }
n|
|	k  r|	}
n|
||   kD  r||   }
| j                         |	||   z  z   }|
|	z
  }||z   dz
  |z  ||<   ||xx   |z  cc<   | j                  rt        d      | j                  |||      S )Nr   statically_known_truez,slice() cannot be applied to a 0-dim tensor.zslice step must be positiver"   z<Slice decomposition for quantized tensors aren't implemented)%torch.fx.experimental.symbolic_shapesrv  rO   RuntimeErrorrD   r1  listr2  stridesysmaxsizestorage_offsetis_quantizedNotImplementedError
as_strided)r{   rO   rm  rn  ro  rv  ndimsizesstrides	start_valend_valr}  lens                r,   slice_forwardr    s    L88:DqyIJJ

 
 S
1CE4;;=!Gqy899*I_c#++G1}U3Z	{5:1}		U3Z	#J	W34*	9		5:	*((*Y-EEN
I
C*q.T)E#JCLDL!J
 	
 ug~>>r+   c                 n    | j                   |   dt        ffd} ||dd      } |||      }||fS )zn
    Normalize start and end such that both are in the range
    [0, x.get_size()[dim]] and start <= end.
    rP   c                 L    | |S | dk  r| z   } t        t        | |      |      S rs   r   r   )valr   r   defaultdim_sizes       r,   
clamp_wrapz(_normalize_start_end.<locals>.clamp_wrap3  s0    ;N7.C3sE?E**r+   r   )r  int)r9   rO   rm  rn  r  r  s        @r,   _normalize_start_endr  *  sJ     wws|H+# + ua1-E
S%8
4C#:r+   srcc           	      |   t        j                  | j                  |      }| j                  |   }t	        | |||      \  }}t        | j                        }||z
  |dz
  z   |z  ||<   |j                  |      }|dk(  r||k(  r|dk(  r|j                         S d g| j                         z  }t        j                  || j                        }	|	|z
  |z  ||<   t        j                  || j                  t        j                        }
|dk7  rt        j                  |
|	|k\        }
||k7  rt        j                  |
|	|k        }
|dk7  rt        j                  |
|	|z
  |z  dk(        }
dg| j                         z  }d||<   |
j                  |      }
t         j#                  |
t         j%                  ||
|d      |       S )Nr"   r   devicer  r   rS   )rD   r1  r  r  r  ry  expandclonerO   r?   aranger  onesboollogical_andviewr   ri   _unsafe_masked_index)r   r  rO   rm  rn  ro  r  src_sizeindicesidxmask
mask_shapes               r,   rr  rr  A  s    
 
 S
1C{{3H%eS%=JE3EKK H5[D1H-$6HSM
**X
CzcXo$!)yy{$(6EIIK#7G
,,x
5C%KD(GCL::hu||5::FDz  se|4
h  sSy1qy  et';q'@Auyy{"JJsO99Z D::dD55c4!LeTTr+   indexc                 T    | j                  |      }t        j                  || ||      S r5   )rq  r?   select_scatter)rl   rl  rO   r  rX   s        r,   select_backwardr  j  s+     &&{3J
KeDDr+   offsetdim1dim2c                 V    | j                  |      }t        j                  || |||      S r5   )rq  r?   diagonal_scatter)rl   rl  r  r  r  rX   s         r,   diagonal_backwardr  q  s-    
 &&{3J!!*k64NNr+   input_dtypec                 F    | j                   |k7  r|j                  |      }|S r5   )r   r8   )rl   rX   r  s      r,   _cast_grad_to_input_dtyper  z  s&     K']];/
r+   outputc                 ~    | |z  }||t        j                  ||d      z  z
  }t        | ||      j                         S NTr  )r?   r   r  
contiguous)rl   r  rO   r  new_grad_outputrX   s         r,   _softmax_backward_datar    sK     "F*O 6EIIS$- $ J %[*kJUUWWr+   c                 ~    | t        j                  |      t        j                  | |d      z  z
  }t        | ||      S r  )r?   rh   r   r  )rl   r  rO   r  rX   s        r,   _log_softmax_backward_datar    sA     uyy0599d4   J %[*kJJr+   c                     | |dz  z   ||dz
  z  z
  }t        t        j                  t        j                  |      } |d||      j	                  d      } |d||z  |      j	                  d      }	||	z   S )z/Utility function to implement im2col and col2imr#   r"   r   r  r   rS   )r   r?   r  int64rU   )
input_dkernel_d
dilation_d	padding_dstride_dr  blocks_d	arange_kwblocks_d_indiceskernel_grids
             r,    _im2col_col2im_indices_along_dimr    s     Q&x!|)DDHEKKGI !Hh7AA!D Ax*4jAKKBOK k))r+   kernel_sizedilationpaddingrz  c           
         t        j                  t              dk(  d        t        j                  t              dk(  d        t        j                  t              dk(  d        t        j                  t              dk(  d        dd} |d        |d        |d	d
        |d       | j                  t              }t        j                  |dv xr t	        d dd  D              fd       t        d t        dd        D              t        j                  t	        d D              fd       |dk(  }|s| j                  d      } | j                  \  }}	}
}\  }}\  }}\  }}\  }}t        |
||||| j                        }t        |||||| j                        }t        j                  | ||||f      }|j                  d      j                  d      }|d d d d ||f   }|j                  dddddd      }|j                  d      }|j                  d      }|j                  ||	|z  |z  ||z        }|s|j                  d      }|S )Nr#   c                       y)Nz"im2col(): only 2D kernel supportedr*   r*   r+   r,   r   zim2col.<locals>.<lambda>      r+   c                       y)Nz$im2col(): only 2D dilation supportedr*   r*   r+   r,   r   zim2col.<locals>.<lambda>  r  r+   c                       y)Nz#im2col(): only 2D padding supportedr*   r*   r+   r,   r   zim2col.<locals>.<lambda>  r  r+   c                       y)Nz"im2col(): only 2D stride supportedr*   r*   r+   r,   r   zim2col.<locals>.<lambda>  r  r+   c                      |rt        d  D              nt        d  D              }t        j                  | fd       y )Nc              3   &   K   | ]	  }|d kD    ywr   Nr*   .0rV  s     r,   	<genexpr>z1im2col.<locals>.check_positive.<locals>.<genexpr>       (Q1q5(   c              3   &   K   | ]	  }|d k\    ywr  r*   r  s     r,   r  z1im2col.<locals>.check_positive.<locals>.<genexpr>       ;RqAF;Rr  c                       d  S Nz& should be greater than zero, but got r*   param
param_names   r,   r   z0im2col.<locals>.check_positive.<locals>.<lambda>      ZL(NugV r+   r  r?   r   r  r  strictconds   ``  r,   check_positivezim2col.<locals>.check_positive  4    ,2s(%((;RE;R8RV	
r+   r  r  r  Fr  rz  r   rH  c              3   &   K   | ]	  }|d k7    ywr  r*   r  ds     r,   r  zim2col.<locals>.<genexpr>       :!qAv:r  r   c                       dt                S )NzmExpected 3D or 4D (batch mode) tensor for input with possible 0 batch size and non-zero dimensions, but got: tupler  s   r,   r   zim2col.<locals>.<lambda>       --25\N< r+   c              3   \   K   | ]$  \  }}}}}d |d|z  z   ||d z
  z  z
  d z
  |z  z    & yw)r"   r#   Nr*   )r  r   paddilkersts         r,   r  zim2col.<locals>.<genexpr>  sF      "Cc3 	
S1s7]SC!G_,q0R77s   *,r^  c              3   &   K   | ]	  }|d kD    ywr  r*   )r  cs     r,   r  zim2col.<locals>.<genexpr>  s     'aAE'r  c                  F    dt        dd         d d  d d d dS )	Nz!Given an input with spatial size r^  , kernel_size=, dilation=
, padding=	, stride=z9, the calculated shape of the array of sliding blocks is z*, but its components must be at least one.r  )r  r  output_sizer  r  rz  s   r,   r   zim2col.<locals>.<lambda>  sL    3E%*4E3F G"m;xj 9)9VH -]D	F r+   rH  r   rS   r"   r      T)r?   r   r  r  r  r  ziprU   r  r  r   r  permuter2  r*  squeeze)r   r  r  r  rz  r  r  batched_input	batch_dimr+  input_hinput_wstride_hstride_w	padding_h	padding_w
dilation_h
dilation_wkernel_hkernel_wblocks_row_indicesblocks_col_indicespadded_inputr  num_blocks_rownum_blocks_colr  r  s    ````                     @@r,   im2colr    s~    
LL[!Q&(TU	LLX!#%ST	LLW"$QR	LLV!#OP
 ;.8Z(8Yu568$KKEu:D	LL:3:uRSz::	<
  &)"#J;'
 K 
LL';''	F 	F AIM"/4{{,I{GWHh"Iy%J
$Hh9:y(ELL ::y(ELL 55Iy) LML+55b9CCBG!Q 24FFGF^^Aq!Q1-F',,Q/N',,Q/N^^;)H4n~6UF "Mr+   r  c                   !" t        j                  t              dk(  d        t        j                  t              dk(  d        t        j                  t              dk(  d        t        j                  t              dk(  d        t        j                  t              dk(  d        dd} |d	        |d
        |dd        |d        |d       | j                  "t        "      }t        j                  |dv xr t	        d "dd  D              "fd       d   d   z  }t        j                  "d   |z  dk(  "fd       t              D 	
cg c]"  \  }	}
}}}d|	d|
z  z   ||dz
  z  z
  dz
  |z  z   $ }}}}
}	}|d   |d   z  !t        j                  "d   !k(  !"fd       t        j                  !dkD  !"fd       |dk(  }|s| j                  d      } | j                  "\  }}\  }}\  }}\  }}\  }}| j                  "d   "d   |z  gz   |z         } | j                  dddddd      } t        |||||| j                        }t        |d      }t        |||||| j                        }t              D cg c]  \  }}|d|z  z    }}}| j                  "d   "d   t              z  g|z         }d d ||f} t        j                  || | d      }t!        j"                  || | | | f      }|s|j%                  d      }|S c c}}}}
}	w c c}}w )Nr#   c                       y)Nzonly 2D output_size supportedr*   r*   r+   r,   r   zcol2im.<locals>.<lambda>  r  r+   c                       y)Nzonly 2D kernel supportedr*   r*   r+   r,   r   zcol2im.<locals>.<lambda>  r  r+   c                       y)Nzonly 2D dilation supportedr*   r*   r+   r,   r   zcol2im.<locals>.<lambda>  r  r+   c                       y)Nzonly 2D padding supportedr*   r*   r+   r,   r   zcol2im.<locals>.<lambda>  r  r+   c                       y)Nzonly 2D stride supportedr*   r*   r+   r,   r   zcol2im.<locals>.<lambda>  r  r+   Tc                      |rt        d  D              nt        d  D              }t        j                  | fd       y )Nc              3   &   K   | ]	  }|d kD    ywr  r*   r  s     r,   r  z1col2im.<locals>.check_positive.<locals>.<genexpr>  r  r  c              3   &   K   | ]	  }|d k\    ywr  r*   r  s     r,   r  z1col2im.<locals>.check_positive.<locals>.<genexpr>  r  r  c                       d  S r  r*   r  s   r,   r   z0col2im.<locals>.check_positive.<locals>.<lambda>  r  r+   r  r  s   ``  r,   r  zcol2im.<locals>.check_positive  r  r+   r  r  r  Fr  rz  r  )r#   r   c              3   &   K   | ]	  }|d k7    ywr  r*   r  s     r,   r  zcol2im.<locals>.<genexpr>%  r  r  r^  c                       dt                S )NzmExpected 2D or 3D (batch mode) tensor for input with possible 0 batch size and non-zero dimensions, but got: r  r  s   r,   r   zcol2im.<locals>.<lambda>&  r  r+   r   r"   c                      dd    d  S )Nz|Expected size of input's first non-batch dimension to be divisible by the product of kernel_size, but got input.shape[-2] = r^  z and kernel_size=r*   )r  r  s   r,   r   zcol2im.<locals>.<lambda>,  s#     ==B2YK H"m% r+   rS   c                  :    d d d d d d  dd    d	S 
NzGiven output_size=r  r  r  r  z , expected input.size(-1) to be 	 but got rS   .r*   Lr  r  r  r  r  rz  s   r,   r   zcol2im.<locals>.<lambda>9  F    $[M} M:Zy	& B))*9U2YKqB r+   c                  :    d d d d d d  dd    d	S r!  r*   r$  s   r,   r   zcol2im.<locals>.<lambda>?  r&  r+   r   rH  r  
accumulater  )r?   r   r  r  r  r  rU   r*  r  r  r  rW   rq  prodr   _unsafe_index_putr   r  r   )#r   r  r  r  r  rz  r  r  prod_kernel_sizer   r  r  r  r  colr  out_hout_wr  r  r  r  r	  r
  r  r  indices_rowindices_colorV  output_padded_sizer  r  r%  r  s#    `````                           @@r,   col2imr4    s    
LL[!Q&(OP	LL[!Q&(JK	LLX!#%IJ	LLW"$GH	LLV!#EF
 ;.8Z(7Ie468$;.KKEu:D	LL:3:uRSz::	<
 #1~A6	LLb	$$)	% '*(K'
 "Cc3 	
S1s7]SC!G_,q0R77C  	AQA	LLb	Q	B 	B 
LL	A	B 	B AIM"KKELE5Hh"Iy%J
$Hh MM58U1X1A%AB[PSVVWEMM!Q1a+E2xY%,,K $K3K2xY%,,K 14K0IJ1!a!e)JJ__	q58tK0014FFF {K
0C##FC4#HFUU6YJ
YJ
KLF"MkV Ks   6'M9Mr  c                 z    | |j                  |       |z  z  j                  t        j                  |             }|S Nr\  )type_asr  rD   r   )rl   r  rn   rJ   s       r,   native_dropout_backwardr8  h  sB     
[1E9	:AA11+> 	B 	A Hr+   
input_size	dimensionr2  c                     t        j                  dkD  fd       t              dk(  rt        j                   d      S t	        j
                  t              |       j                        dt        f fd}k\  r |       S ddlm	 dt        f fd} |       r |       S fd}fd}d	t        d
t        t           dt        ffd}	   }
 j                        }t        t                    D ]  } ||
|z
  z   dz
  z  d      } |||      }t        j                   | j"                  t         j$                        }|z  |z   } j'                  d|      j)                  d|      }t              }||<    |	||      }t*        j-                  ||       j/                         S )Nr   c                      d  dS )Nzstep is z but must be > 0r*   )ro  s   r,   r   z!unfold_backward.<locals>.<lambda>|  s    8D69I)J r+   rP   c                  \   t        j                     j                  t         j                        } | j	                  d      j                         } j                  ddz         j                  dz         }dz  | fz   }t        j                  ||d      j                         S )Nr  r   rS   r"   r5   Tr(  )
r?   r  r  int32unfoldflattenmovedimr   r+  r  )	r  sourcer  rO   r   rX   r9  r2  ro  s	      r,   _vectorized_index_putz.unfold_backward.<locals>._vectorized_index_put  s    ll:c?4;;ekkRjjD$'//1b#'*223a@#&%%v$ & 

*,	r+   ru  c                  
   j                         t              dz   k7  ry j                  d      k(        sy   z
  z  dz   }  j                        | k(        syt        fdt	              D              S )Nr"   FrS   c              3   f   K   | ](  \  }}|k(  xs  j                  |      |k(         * y wr5   r2  )r  
source_dimr  rO   r   rv  s      r,   r  zDunfold_backward.<locals>._is_canonical_grad_shape.<locals>.<genexpr>  sF      
 %
H # H$TYYz%:h%FGH
s   .1)rO   r  r2  r  	enumerate)n_foldsrO   r   r9  r2  rv  ro  s    r,   _is_canonical_grad_shapez1unfold_backward.<locals>._is_canonical_grad_shape  s    88:Z1,,$TYYr]d%:;c?T)d2Q6$TYYs^w%>? 
 )2*(=
 
 	
r+   c                 d     | |k        r| S  || k        r|S t        j                  | |      S r5   )r?   sym_minabrv  s     r,   _sym_min_if_neededz+unfold_backward.<locals>._sym_min_if_needed  6     a(H a(H}}Q""r+   c                 d     | |k\        r| S  || k\        r|S t        j                  | |      S r5   )r?   sym_maxrM  s     r,   _sym_max_if_neededz+unfold_backward.<locals>._sym_max_if_needed  rQ  r+   rB  target_shapec                    t        |      }| j                         }||kD  r| j                  |      S ||z
  }dg|z  }t        |      D ]s  }|k(  rn||z   }|dk  s||k\  r| j                  |      c S  	||   dk(        r| j                  |   ||<   Mt        j                  | j                  |   dk(  d        u | j                  |      j                  |      S )Nr"   r   c                       y)Nz=unfold_backward grad shape is not broadcastable to input_sizer*   r*   r+   r,   r   z:unfold_backward.<locals>._reshape_source.<locals>.<lambda>  r  r+   )r  rO   r  rT   r  r?   r   r*  )
rB  rU  r  source_ndim
dim_offset
view_shaperG  
target_dimrO   rv  s
           r,   _reshape_sourcez(unfold_backward.<locals>._reshape_source  s    < jjl==..K'
S4Z
, 	J *c 1zJ7NJA~t!3}}\22$Z
%;q%@A)/j)A
:&
 LL,1$	  ~~j)00>>r+   r"   r  rS   )r?   _check_valuer  squeeze_copyrD   r1  rq  r   rw  rv  r  ry  r  r2  reversedrT   r  r  r>  selectr3  r   	index_addr  )r   r9  r:  r2  ro  rC  rJ  rP  rT  r\  input_dim_sizegrad_dim_sizer  max_valid_len	valid_lenr  rB  source_shaperO   rX   rv  s   `` ``             @@@r,   unfold_backwardrg  w  s   
 
tax!JK
:!!!$**

 
 Z)
<C
+J6   t|$&&K
d 
 
   !$&&##? ?d3i ?F ?4  _NIIcNM 5;' B*f$t+a/D8!
 '}mD	ll9T[[LDj6!R(//Q	BJ'%S 6^^JS&A
B   ""r+   epsc           
      .   |A|}d|z
  }t        j                  t        j                  ||k\  ||k        | |d|z
  z  z  d      S t        j                  t        j                  |dk\  |dk        | |d|z
  z  z  |j                  dt	        d                  S )Nrg   r   r*   nan)r?   ri   r  r   r  )rl   r{   rh  lohis        r,   logit_backwardrm    s    
 2X{{dbj$"*543:./
 	
 {{dck43;743:./MM"eEl+
 	
r+   trainc                 d    |r|dk7  rt         j                  | ||      d   S | j                         S rs   )r   native_dropoutr  )r   rV  rn  s      r,   dropoutrq    s3     a""5!U3A66{{}r+   out0out1c                    |r|dk7  r|dk(  r:t        j                  |       t        j                  | t         j                        fS | j                  j                  st        d      t        j                  |       |kD  }|| z  t        dd|z
  z        z  }||fS | t        j                  | t         j                        fS )Nr   r"   r   z?result type Float can't be cast to the desired output type Longrg   )	r?   r  r  r   is_floating_pointrx  	rand_liker  r_  )r   rV  rn  	bool_maskress        r,   rp  rp    s     a6$$U+U-=-=e5::-VWW{{,,Q  OOE*Q.	%%sQw"88YuuEJJ?@@r+   half_to_floatc                    | j                         } |r6| j                  t        j                  k7  rt	        d| j                   d      t        j                  | t
        j                  j                        \  }}| j                  |      } t        | |      }t        j                  | |z
        }|t        j                  ||d      z  }|s|j                  |      }|S Nz%half_to_float is True but x.dtype is z, expected torch.halfr3   Tr  )r  r   r?   halfr0  rD   rE   ELEMENTWISE_TYPE_PROMOTION_KINDDEFAULTr8   _softmax_unbacked_safe_amaxrh   r   )r9   rO   ry  r:   r=   x_maxunnormalizedr  s           r,   _softmaxr    s    
 	
A77ejj  7y@UV  ',&>&>	uDDLL'#| 	
A'3/E99QY'LEIIlCFFF<(Mr+   c           	         ddl m} | j                  dk(  rt        j                  | |d      S t        j                  | j                  |      } || j                  |   dkD        rt        j                  | |d      S t        | j                        }d||<   t        j                  | | j                  |t        d            f|      } t        j                  | |d      S )Nr   guard_or_falseTr}  r"   r  r   )rw  r  r  r?   amaxrD   r1  r  ry  r4  r   r  )r9   rO   r  canonical_dim	pad_shapes        r,   r  r  &  s    Dvv{zz!S$//**16637Maggm,q01zz!S$// QWWI Im		1ajjE&M:;EA::ad++r+   )r  c                    | j                         } |r6| j                  t        j                  k7  rt	        d| j                   d      t        j                  | t
        j                  j                        \  }}| j                  |      } t        | |      }| |z
  }t        j                  t        j                  t        j                  |      |d            }||z
  }|s|j                  |      }|S r{  )r  r   r?   r~  r0  rD   rE   r  r  r8   r  rM  r   rh   )	r9   rO   ry  r:   r=   r  shiftedshifted_logsumexpr  s	            r,   _log_softmaxr  :  s    
 	
A77ejj  7y@UV  ',&>&>	uDDLL'#| 	
A'3/E%iG		%))EIIg,>T"RS((F<(Mr+   r  padding_idxscale_grad_by_freqsparsec                     | j                         dk7  rt        d| j                          d      |j                  dk  r4| j                  d|      }|j                  dk(  r|j	                  d      }|S | |   S )Nr#   z'weight' must be 2-D, got z-Dr"   r   )rO   r0  r  index_selectr   )r   r  r  r  r  r   s         r,   	embeddingr  R  ss     zz|q9&**,rJKK||q!!!W-<<1++a.C
gr+   num_weightsc                    t        j                  | t         j                  j                        \  }}| j	                  |      } t        |t        j                        }|dk\  ||k  z  }|rm|j                  |f      }t        j                  |      }	t        j                  |||g|	      }t        j                  |||gd      }
| |
j                  d      z  } t        |||k7  z  | j                        }| j                  |f| j                   |j                  d  z         }t        j                  |||g|       j	                  |      S )Nr|  r   r"   rS   )rD   rE   r  r  r8   r   r?   longrq  r_  r   #_unsafe_masked_index_put_accumulater  rU   rW   r  r  )rl   r  r  r  r  r:   r=   valid_indicescountsr  grad_weights_scaler  grad_weights                r,   embedding_dense_backwardr  h  sD    ',&>&>)N)N)V)V'#| ..!23K%guzz:G\g&;<M""K>2w'99MG9d
 "66MG9a
 "$6$@$@$DD]g.DE{GWGWXD''	**7<<>::K 33TG9kbr+   c                 "    d}| D ]  }||z  }	 |S r\   r*   )r9   rJ   is      r,   r*  r*    s$    	A 	QHr+   tensors
num_chunksc                 Z   g }| D ]  }|j                         }||   |z   dz
  |z  |z  }|||   k7  r;dgdz  |j                  |z
  dz
  z  d|||   z
  gz   }t        j                  ||d      }|d | t	        j
                  |dg      z   }|j                  |j                  |              |S )Nr"   r   r#   rS   )r2  r  r   constant_pad_ndr?   Sizeappendr*  )	r  rO   r  padded_tensorstensortensor_sizepad_along_dimr  	view_sizes	            r,   
_pad_chunkr    s    
 N 9kkm$S)J6:zIJVK,,#'V[[3.23C 007 C ))&#q9F%

J3C(DD	fnnY789 r+   c                 R    | d   j                   }| D ]  }|j                   |k7  s y y)Nr   FTr  )r  r  r  s      r,   have_same_ndimsr    s2    1:??D ;;$ r+   c                     | d   j                         d | }| D ]-  }t        j                  |j                         d | |k(  d        / y )Nr   c                       y)NzG_chunk_cat expects same sizes of 0,...,dim-1 dimensions for all tensorsr*   r*   r+   r,   r   z+leading_dimension_matches.<locals>.<lambda>  r  r+   )r2  r?   r   )r  rO   leading_dim_sizesr  s       r,   leading_dimension_matchesr    sN    
)$3/ 
KKM$3#44]	

r+   c                    t        j                  |dk\  d        t        j                  t        |       dkD  d        | d   j                  }| d   j                  }| D ]r  }t        j                  |j                         dkD  d        t        j                  |j                  |k(  d        t        j                  |j                  |k(  d        t t        |       r(t        j                  | d   j                         |      }nEt        j                  |dk\  d        | D ]&  }t        j                  ||j                  k  d	        ( t        | |       |S )
Nr"   c                       y)Nz&_chunk_cat expects positive num_chunksr*   r*   r+   r,   r   z._preprocess_chunk_cat_inputs.<locals>.<lambda>  r  r+   r   c                       y)Nz0_chunk_cat expects a non-empty input tensor listr*   r*   r+   r,   r   z._preprocess_chunk_cat_inputs.<locals>.<lambda>  r  r+   c                       y)Nz#_chunk_cat expects non-empty tensorr*   r*   r+   r,   r   z._preprocess_chunk_cat_inputs.<locals>.<lambda>  r  r+   c                       y)Nz8_chunk_cat expects all input tensors with the same dtyper*   r*   r+   r,   r   z._preprocess_chunk_cat_inputs.<locals>.<lambda>  r  r+   c                       y)Nz8_chunk_cat expects all inputs tensors on the same devicer*   r*   r+   r,   r   z._preprocess_chunk_cat_inputs.<locals>.<lambda>  r  r+   c                       y)NzK_chunk_cat expects non-negative dim when input tensors have different ndimsr*   r*   r+   r,   r   z._preprocess_chunk_cat_inputs.<locals>.<lambda>  r  r+   c                       y)Nz3_chunk_cat expects dim < ndim for all input tensorsr*   r*   r+   r,   r   z._preprocess_chunk_cat_inputs.<locals>.<lambda>  r  r+   )r?   r   r  r   r  r   r  rD   r1  rO   r  r  )r  rO   r  expected_dtypeexpected_devicer  s         r,   _preprocess_chunk_cat_inputsr    s-   
 
LLq"RS	LLGqT QZ%%Naj''O 	
V\\^a')VWLLN*N	
 	MM_,N	
	
 w$$WQZ^^%5s;1Ha	
  	FLLfkk!M	
 gs+Jr+   r   c                     t        | ||      }t        | ||      }|t        j                  ||dz         S t        j                  ||dz   |       |S )Nr"   )r   )r  r  r?   r4  )r  rO   r  r   r  s        r,   
_chunk_catr    sS     'wZ
@Cj9N
{yyq11		.#'s3
r+   split_sizesc                    t         j                  | ||      }|.|D cg c]"  }|j                  t        j                        $ c}S t        ||      D ])  \  }}t        ||j                         t        ||d       + y c c}w )Nr   r\  Tr  )	r   split_with_sizesr  r?   r`  r  r   r  r   )r{   r  rO   r   splitssr  splits           r,   split_with_sizes_copyr    s     ""4#">F
{HNO1e&=&=>OO f- 	NMFEfekk2UFM	N  Ps   'B
split_size.c                 D    t         j                  j                  | ||      S r5   )r   r  r   )r   r  rO   s      r,   unsafe_splitr    s    ::UJ44r+   c                 D    t         j                  j                  | ||      S r5   )r   r  r  )r   r  rO   s      r,   unsafe_split_with_sizesr    s       ((SAAr+   c                 z   | j                   }||   t        j                  dk\  fd       dk(  r| j                         fS t        j                  dkD  fd       z   dz
  z  }ddlm}  ||      }t        |      D cg c]  } }}|z  z
  z
  |d<   t        j                  | ||      S c c}w )Nr   c                      d  S )Nz=split expects split_size be non-negative, but got split_size=r*   )r  s   r,   r   zsplit.<locals>.<lambda>  s    OPZ|\ r+   c                      d  S )NzKsplit_size can only be 0 if dimension size is 0, but got dimension size of r*   )r  s   r,   r   zsplit.<locals>.<lambda>  s     %%-J0 r+   r"   )	guard_intrS   )r  r?   r   detachrw  r  rT   r  )	r{   r  rO   rl  chunksr  r  r  r  s	    `      @r,   r  r    s    **K3H	LLa\ 1}	LLQ	0
 #a'J6F @vF',V}5!:5K5 J$7($BCKO;;t[#.. 6s   	B8tensor_indices_or_sectionsc                   	 |j                   j                  dk7  rt        d|j                          |j                  t        j
                  k7  rt        d|j                         |j                         	t	        j                  	dk(  xs 	dk(  	fd       	dk(  rS|j                         }t        |t              s!t        dt        |      j                         | j                  ||      S t        }t        j                  j                         x}r|j                   x}r|j"                  } |       5  |D cg c]  }|j                          }}d d d        | j                  |      S c c}w # 1 sw Y    xY w)Ncpuz/tensor_indices_or_sections must be on CPU, got z.tensor_indices_or_sections must be int64, got r"   r   c                      d  dS )Nz{tensor_split expected tensor_indices_or_sections to be a zero-dimensional or one-dimensional tensor, but got a tensor with z dimsr*   )	split_dims   r,   r   zAtensor_split_tensor_indices_or_sections_py_impl.<locals>.<lambda>:  s     <<E;eM r+   z%Expected sections to be IntLike, got )r  typer0  r   r?   r  rO   r   itemr7   r   r$   tensor_splitr   _guardsdetect_fake_mode	shape_envignore_fresh_unbacked_symbols)
r{   r  rO   sectionsctx	fake_moder  r  r  r  s
            @r,   /tensor_split_tensor_indices_or_sections_py_implr  '  s    "((--6=>X>_>_=`a
 	
 "''5;;6<=W=]=]<^_
 	
 +..0I	LLQ()q.	M
 A~-224(G, 7X8O8O7PQ    3//7799I9",,,I,99C
 U 	E)CDAqvvxDGD	E   #.. E	E 	Es   :E7?E2E72E77F mat1mat2c                     | j                         s&| j                         st        |      }t        |      }|t        j                  ||      z  }|dk(  r|S ||| z  z   S rs   )ru  
is_complexr  r?   mm)r{   r  r  rc   rm   r   s         r,   addmmr  ]  s]     !!#DOO,=4yE

%((4&
&Cqy
 r+   r   c                 t    |t        j                  |||      z  }|dk(  r|S ||| j                  |      z  z   S )Nr   r   )r?   r  r8   )r{   r  r  r   rc   rm   r   s          r,   addmm_dtyper  q  s@     %((4;
;Cqy
	****r+   use_geluc                     t        | ||||      }|r8| j                  rt        j                  |d      S t        j                  |      S t        j	                  |      S )Nr   )r   )r  is_cudar   gelurelu)r{   r  r  rc   rm   r  r   s          r,   _addmm_activationr    sO     dD$
.C<<99Sf95599S>!99S>r+   vecc                     | j                         s&| j                         st        |      }t        |      }|t        j                  ||      z  }|dk(  r|S |j                         dk(  r|| z  S ||| z  z   S rs   )ru  r  r  r?   mvr   )r{   r  r  rc   rm   r   s         r,   _addmv_implr    sq    !!#DOO,=4yE

%((4%
%Cqy

yy{ad{r+   c                      t        j                   j                  j                  k(  xr j                  j                  k(   fd       t         ||      S )Nc                  V    dj                    d j                    dj                    S )Nz6addmv input tensors must have the same dtype, but got , z, and r   )r  r{   r  s   r,   r   zaddmv.<locals>.<lambda>  s1    HTVW[WaWaVbbhilirirhst r+   )r?   r   r   r  )r{   r  r  rc   rm   s   ```  r,   addmvr    sK     
LL

djj <TZZ399%<t tT3e44r+   r   rstdgammaNCHxWgroupoutput_maskc
           	      D   t        j                  | ||d       t        j                  || d       t        j                  |d       t        j                  |j                         z  z  k(  fd       t        j                  j                  fk(  fd       t        j                  d u xs j                         k(  fd       z  }
t        j                  |
z  k(  fd       t        j                  | |      j                        j                  dg      }| j                        j                  dg      }d }d }d }|	d	   r*d
|
z  z  }t        j                  |j                  d	            j                  |
      j                  d      }t        j                  |j                  d	            j                  |
      j                  d      }t        j                  |j                  d      j                  d|
            }n|j                  |
      j                  d      }|j                  |
      j                  d      }t        j                  |j                  d      t        j                  d|
f|j                              }|z  |z
  |z  |z  |z  |z  }| z  ||z  |z  z
  }|j                  d      }t        |d      }t        |d      }t        j                  | j                  |
      |      t        j                  |j                  |
      |      z   |z   }|j                  |j                        j                  |j                         }|	d   rk|j                  |
      |j                  |
      j                  d      z  z
  |j                  d      z  j                  d	g      j                        }|	d   r|j                  d	g      }|||fS )NF)allow_cpu_scalar_tensorsc                      d z  z   dS )NzExpect input to have z	 elementsr*   )r  r  r  s   r,   r   z,native_group_norm_backward.<locals>.<lambda>  s    'A}I> r+   c                  .    d  d dj                    S )NzExpect mean to have shape (r  z
, but got r  )r  r  r   s   r,   r   z,native_group_norm_backward.<locals>.<lambda>  s    -aS5'DJJ<P r+   c                  <    d  dj                          S d S )NzExpect gamma to have z elements but got rS   )r   )r  r  s   r,   r   z,native_group_norm_backward.<locals>.<lambda>  s-    's*<eN_U[[]<hi eg<hi r+   c                      d  d S )NzExpect number of channels z, to be evenly-divisible by number of groups r*   )r  r  s   r,   r   z,native_group_norm_backward.<locals>.<lambda>  s    ,QC/[\a[bc r+   r#   r   r   rg   rS   r"   r  rH  )rD   check_same_devicecheck_same_shaper?   r   r   r  r   r  r   rU   r*  r  r  rW   r8   r   )rl   r   r   r  r  r  r  r  r  r  cpgdsdbd_inputd_gammad_biasr  ds_valdb_valc1c2c3s     ` `````             r,   native_group_norm_backwardr    s    
UD$ 
5+N	4F	LLQ$> 
LL

q%j P 
LL+!+i
 u*C	LL	S5[c 
;	&	+	+Aq#	6	:	:s	:	CB			!Q	$	(	(aS	(	1B!G!G F1~39YYr5??1#56>>q%MQQRSTFYYr5??1#56>>q%MQQRSTFr"a,B
 ZZ5#.2215FZZ5#.2215Fr"

Auc?4;;?B tmf$,t3d:Q>S4Z&4-!++\\"r1%r1%IIk))!UC=rBiiaS92>? 	
 //%++.11%++>1~ E3'"''!UC*@4>>RTCU*UU..$% SaSS\WQZ 	 1~QCWf%%r+   out2c
                    t        | |||||||||	
      }|
||f}t        |      D ]2  \  }}|	t        ||   |j                         t	        |||   d       4 |S r  )r  rH  r   r  r   )rl   r   r   r  r  r  r  r  r  r  rr  rs  r  r  rX   r  rJ   s                    r,   native_group_norm_backward_outr    sz    " (UD$q!S%F d#J&! Q1=jmQWW5Q
14PQ
 r+   c                 ,    | | j                  |      S | S r5   r8   )r9   r   s     r,   _maybe_castr  "  s    }ttE{Hr+   grad_outnormalized_shapebiasc                 ~  " |j                   }|j                         }	t        j                  |j                        ""fd| |||fD        \  }
}}}|
t        d      |	t        |      z
  }||d  }|d | }g }g }t        |	      D ]*  }||k\  r|j                  |       |j                  |       , t        |      }t        |      }ddl
m}  ||dk(        s ||dk(        rN|d   r|j                  |      nd |d   r|j                  ||d        nd |d   r|j                  ||d        fS d fS t        ||j                               }t        ||j                               }|t        d      ||z
  |z  }||
|z  }n|
}||z  }t        j                  ||d      }t        j                   ||      }t        j                  ||d      }t        j                   ||      }||z
  |z
  }d }d } d }!|d   r||z  |z  }|d   r0|.t        |      dkD  rt        j                  |
|z  |d	      } n|
|z  } |d   r8|6t        |      dkD  rt        j                  |
|d	      }!n|
j#                         }!t%        ||j                        t%        | ||j                  nd       t%        |!||j                        fS d       fS )
Nc              3   h   K   | ])  }|!|j                  t        j                        n| + y wr6  )r8   r?   r`  r  r9   r:   s     r,   r  z-native_layer_norm_backward.<locals>.<genexpr>7  s>      9  = 	
e.E.EF	9s   /2 grad_out_cast should not be Noner   ru  r"   r#   zinput_cast should not be NoneTF)r  rO   rD   get_computation_dtyper   r0  r  rT   r  r*  rw  rv  rq  rW   r?   r   r   r  r  )#r  r   r  r   r  r   r  r  input_shape
input_ndimgrad_out_cast
input_castweight_cast	bias_castaxis
inner_dims
outer_dimsinner_dim_indicesouter_dim_indicesr  r  Mrv  x_hat
grad_x_hatrN  rO  r  r  r  rK   r
  d_weightr  r:   s#                                     @r,   native_layer_norm_backwardr0  )  s    ++KJ33EKK@9 E640	95M:{I ?@@,--DTU#JUd#J#%#%: (9$$Q'$$Q'	( 	ZAZAKQ!V$(=a1f(E,7NEOOK(3>q>EOOK./t3>q>EOOK./
 	
 HL
 	

 T:>>#34DT:>>#34D<==$$&E"[0
"
QA		*/6A	:u	%B	2($	/B	5"	BEBJE!G"H F1~!8u$1~+1 !A%yy!68I5QH$u,H1~)/ !A%YY}.?GF"((*F 	GU[[)Hf.@flldKF$*:DJJE  AEE r+   c          
          t        | |||||||      }||	|
f}t        |      D ]2  \  }}|	t        ||   |j                         t	        |||   d       4 |S r  )r0  rH  r   r  r   )r  r   r  r   r  r   r  r  rr  rs  r  r  rX   r  rJ   s                  r,   native_layer_norm_backward_outr2    sw     (%)4vt[F d#J&! Q1=jmQWW5Q
14PQ
 r+   c                 &   g }t        t        |            D ]'  }|j                  | j                         |z
  dz
         ) t	        j
                  | j                        }| j                  |      }|~|t        j                  t        j                  fv r.t        j                  t        j                        j                  }n0t        j                  t        j                        j                  }n|}t        j                  t        j                  j                   j"                  j%                  t        j&                  |d      j)                  |d      |            }	|j+                  |	      }
||
j+                  |      }
| j,                  xs |d uxr |j,                  }t	        j.                  |       }|t        j0                  t        j2                  fv }|s"|s |
j5                         }
|	j5                         }	|
j7                  |       }||	fS )Nr"   r#   Tr  )rT   r  r  rO   rD   r   r   r8   r?   r   r   finforh  r   rsqrtopsr   addScalarr   r   r   	is_nestedr   channels_lastchannels_last_3dr  r7  )r   r  r   rh  dims_to_reducer  r:   upcasted_inputeps_valrqrst_inputupcasted_resultr9  r]  is_channels_lastr  s                  r,   _fused_rms_normrB    s    !#N3'() 3eiikAo123 33EKK@XX/0N { @@kk%--044Gkk%--044G++ 			!!IIna(--.$-OQX	
K %((5O)--f5 LF$$6$K6;K;KI//6M$) 
 -)446!,,. $$U+F;r+   c                 L   |j                   }|j                         }t        j                  |j                        }| j                  |t        j                        }	|j                  |t        j                        }
|!|j                  |t        j                        nd }|	t        d      |t        |      z
  }||d  }|d | }g }g }t        |      D ]*  }||k\  r|j                  |       |j                  |       , t        |      }t        |      }ddlm}  ||dk(        s ||dk(        r4|d   r|j                  |      nd |d   r|j                  ||d        fS d fS t!        ||
j                               }||	|z  }n|	}d }d }|
|z  }|d   r)t        j"                  ||z  |d      }|||z  |z  z
  |z  }|d   r0|.|	|z  }t        |      dkD  rt        j"                  ||d      }n|}t%        ||j                        t%        ||j                        fS )	Nr\  r  r   r  r"   Tr  F)r  rO   rD   r   r   r8   r?   r`  r0  r  rT   r  r*  rw  r  rq  rW   r   r  )r  r   r  r  r   r  r!  r"  r:   r#  r$  r%  r'  r(  r)  r*  r+  r  r  r,  r  r.  r
  r/  r-  sum_vald_weight_full_shapes                              r,   _fused_rms_norm_backwardrF    sa    ++KJ33EKK@KK)@)@   M +5;R;RSJ  			#53J3J	K 
 ?@@,--DTU#JUd#J#%#%: (9$$Q'$$Q'	( 	ZAZADa1fQ!7,7NEOOK(3>q>EOOK./
 	
GK
 	

 T:>>#34D"[0
"
!G"HE1~))EJ.4EtTg 55=1~+1+e3 !A%yy#):EH +H 	GU[[)Hekk* r+   running_meanrunning_varmomentum
functionalc	                 D   dgt        t        d| j                                     z   }	t        j                  | j
                        }
|}|}|r"t        j                  | j
                        }
| j                  |
      }t        j                  ||	dd      \  }}t        j                  ||z         }| |z
  |z  }t        j                  ||	      }t        j                  ||	      }|!||z  d|z
  |z  z   }|s|j                  |       |;| j                         | j                  d   z  }t        j                  ||	      }|||dz
  z  z  }||z  d|z
  |z  z   }|s|j                  |       n||t        d      |j                  |
d      }|}|j                  |
d      }|}|}dt        j                  ||z         z  }| j                   j"                  d	k7  r|}|}n"| j%                  d
      }| j%                  d
      }t'        || j                         dz
        }t'        || j                         dz
        }| |z
  |z  }|2|j)                         }t'        || j                         dz
        }||z  }|2|j)                         }t'        || j                         dz
        }||z   }| j                   j"                  d	k(  r8|j                  | j
                        }|j                  | j
                        }|j                  | j
                        ||||fS )Nr   r#   r   T)rO   
correctionr  r"   z:running_mean and running_var must not be None in eval mode)r   r   r  r   )ry  rT   rO   rD   r   r   r8   r?   var_meanr5  r   copy_r   r  r0  rd  r  r  rq  rW   r@  )r   r   r  rG  rH  r   rI  rh  rJ  reduction_dimsr:   new_running_meannew_running_var	input_acc
biased_varr   r  r  	save_mean	save_rstdnsqueezed_varunbiased_varinvstds                           r,   native_batch_norm_helperr[    s    S4a 566N33EKK@#!O!77DHH#4H5	 >>>a

D {{:+,$,$&MM$7	MM$7	#')3q8||6SS""#34"A.A !==^DL'1A;7L&5X8TTO!!/2;#6 L  $->TJ'!nn+<4nH%ejjs!234<<%$II-I-I uyy{Q7"6599;?;$,&(!"6599;?;&||~ uyy{Q7$||E!LLu{{L3	LLu{{L3				$ r+   rU  save_invstdc                 >    t        | |||||||d	      \  }}	}
}}||	|
fS NFr[  r   r   r  rG  rH  r   rI  rh  r  rU  rV  rV   s               r,   native_batch_normra  r  s=     *Bvt\;(CQV*&FIy!Q 9i''r+   c           
          ||t         j                  | |||||      S |t        d      |t        d      |rt         j                  | |||||||      S t         j                  | ||||||      S )Nz`running_mean is None, but running_var is provided. They should both be None or both be provided.z`running_var is None, but running_mean is provided. They should both be None or both be provided.)r   _native_batch_norm_legitrx  $_native_batch_norm_legit_no_training)r   r   r  rG  rH  r   rI  rh  s           r,   native_batch_norm_decompositionre    s      3,,648S
 	
 <
 	
 <
 	
 ,,64{HhPS
 	
 8864{Hc
 	
r+   c                 ~   | j                  |      }||z   dz
  |z  }|dk(  rc|dk(  r^t        |      D cg c]  }| }}|||z  |z
  z
  ||dz
  <   t        j                  j                  j
                  j                  | ||      S t        j                  j                  j                  j                  | ||      S c c}w Nr"   r   )	r2  rT   r?   r6  r   r  r  r  r   )r  r  rO   r  r  rV   r  s          r,   unsafe_chunk_py_implrh    s    {{3HV#a'F2JQ8q=+0=9az99",
V0Ch0N"OFQJyy~~55==fkSVWW99>>&&--fj#FF :s   	B:c           
      N    t         j                  j                  | ||||d||      S r^  )r   rc  r  )r   r   r  rG  rH  rI  rh  s          r,   rd  rd    s5     ((00	 	r+   c                 >    t        | |||||||d	      \  }}	}
}}||	|
fS r^  r_  r`  s               r,   rc  rc    s=     *Bvt\;(CQV*&FIy!Q 9i''r+   c                 >    t        | ||d d |||d	      \  }}}}	}	|||fS r^  r_  )
r   r   r  r   rI  rh  r  rU  rV  rV   s
             r,   !_native_batch_norm_legit_no_statsrl    s<     *BvtT48S%*&FIy!Q 9i''r+   c                 v    t        | |||||||d	      \  }}	}
}}|t        d      |t        d      ||	|
||fS )NT#new_running_mean should not be None"new_running_var should not be None)r[  r0  )r   r   r  rG  rH  r   rI  rh  r  rU  rV  rQ  rR  s                r,   #_native_batch_norm_legit_functionalrp    sl    " 	!vt\;(CQU	 BCCABB9i)9?JJr+   c           	      T   t         j                  j                  | ||||d|      }d}|t         j                  j                  j                  k(  r t         j                  j                  | |      }t        j                  |t         j                  | j                  | j                        S )a  
    Return a reserve tensor for batch norm, used only by cudnn to pass forward state to the
    backward pass. This is needed for `_batch_norm_with_update` and `_batch_norm_no_update`,
    which support a variety of backends including cudnn. We create this tensor here to get
    the correct shape in the traced graph if we detect that will call the cudnn kernel,
    and rely on DCE to avoid materializing this tensor.
    Tr   )r   layoutr  )
r?   _C_select_batch_norm_backend_BatchNormBackendCudnn(_get_cudnn_batch_norm_reserve_space_sizeemptyuint8rr  r  )	r   r   r  rG  rH  rh  r   backendreserve_sizes	            r,   _get_batch_norm_reserve_tensorr|  	  s      hh11vt\;cG L%((,,222xxHH8
 ;;EKKU\\ r+   c                 d    t        | ||||d||d	      \  }}}	}
}
t        | |||||d      }|||	|fS )NTFr   r[  r|  r   r   r  rG  rH  rI  rh  r  rU  rV  rV   reserves               r,   _batch_norm_with_updater  -	  sa     *B
*&FIy!Q -vt\;dG 9i00r+   c                     t        | ||||d||d	      \  }}}	}
}t        | |||||d      }|
t        d      |t        d      |||	||
|fS )NTr~  rn  ro  )r[  r|  r0  )r   r   r  rG  rH  rI  rh  r  rU  rV  new_rmnew_rvr  s                r,   "_batch_norm_with_update_functionalr  H	  s      	!vt\;hT	 -vt\;dG ~BCC~ABBIy'66BBr+   c                 d    t        | ||||d||d	      \  }}}	}
}
t        | |||||d      }|||	|fS )NFr~  r  r  s               r,   _batch_norm_no_updater  e	  sa     *B
*&FIy!Q -vt\;eG 9i00r+   c                    |t        d|       t        j                  | t        j                  j                        \  }}| j                  |      }t        j                  |      |k  j                  t        j                        }t        j                  d|| j                        |z  }|j                  |      |z  |z  }|j                  |      |fS )Nz=generator must be None for _fused_dropout decomposition, got r|  r   rg   r  )r0  rD   rE   r  r  r8   r?   rv  ry  scalar_tensorr  )	r   rV  	generatorr:   r=   rS  r  rn   rx  s	            r,   _fused_dropout_decompositionr  	  s     KI;W
 	
 ',&>&>5#H#H#P#P'#| *+IOOI&*..U[[.AD+<U\\RUVVE
''#
$y
05
8CFF< $''r+   )r   rr  r  
pin_memorynon_blockingr]  r  r  r  r]  c                   |r!|t         j                  k7  rt        d|       |rt        d      t        | t         j                  t
        t        t        t        f      s!t        dt        |       j                         |0|.|,t        | t         j                        r| j                         S | S d}t        | t         j                        r| }nt        j                  |       }|||j                  k7  r|ed}	|j                  dk(  rd}	n-|j                  t         j                  k(  rddlm}
  |
|      sd}	|	r"t         j$                  j'                  ||      }d}t         j$                  j)                  |||      }|$|s"t         j$                  j'                  ||      }d}|t        j                  ||	      S |S )
Nz*layout must be None or torch.strided, got z:pin_memory=True is not supported in _to_copy decompositionz x must be Tensor or scalar, got Fr  Tr   )device_supports_fp64r\  )r?   stridedr0  r7   r   r  r  r  complexr  r$   r  r  r  r   r   torch._inductor.utilsr  _primsconvert_element_type
device_put)r9   r   rr  r  r  r  r]  dtype_convertedx_tensorconvert_before_transferr  s              r,   _to_copyr  	  s    &EMM)I&RSSH
 	
 a%,,UD'BC?Q@P@P?QRSS~%-M,Aa&779HO!U\\"&&q)f7 &+#{{e# +/'5==0
 G+F3.2+& <<<<XuM"&<<**8V\J<<44XuE {{8=AAOr+   c                 ,    t         j                  |       S r5   )r   alias)r9   s    r,   nop_decompositionr  	  s     ::a=r+   out3exponential_average_factorepsilonc           
         t         j                  | |||||||      \  }}	}
|r%||	|
| j                  dt        j                        fS ||j                  d      |j                  d      | j                  dt        j                        fS )NrM  r   )r   ra  rq  r?   ry  )r   r   r  rG  rH  r   r  r  rN  rO  r  s              r,   cudnn_batch_normr  	  s     $$"	GAq! 1aU[[ABB	EKK0	 r+   c                     t        |      D ]>  \  }}|dk(  s|| j                  k  r| j                  |   |k(  r.| j                  |      } @ | S r\   )rH  r  r  rU   )r9   broadcast_maskr'  r  s       r,   _broadcast_batch_norm_backwardr  
  sO    / "
d19dQVVm0ED!A" Hr+   r  c                 *    t        | |||||||||	
      S r5   )native_batch_norm_backward)r  r   r   rG  rH  rU  r\  rn  rh  r  r  s              r,   batch_norm_backwardr  
  s/     & r+   c
                   & |j                   }
||j                   }n|
}t        j                  |j                         &&fd| ||||||fD        \  }}}}}}}|j                  }|j	                         }|dk  rt        d|       d}t        t        |            ||   z  }|}|}|r||4t        d      ||t        d      |}t        j                  ||z         }dg|z  }||   ||<   g }t        |      D ]  }||k7  s	|j                  |        t        ||      }d|z  }t        j                  ||      }t        j                  |||z
  z  |      }t        ||z  |      }t        t        j                  ||z  ||z        |      } |t        ||      dz  }!nt        ||z  |      }!|r||z
  | z  }"||"z
  |z
  |!z  }#n||!z  }#|	d   r||z  }$nd }$|	d   r|}%nd }%|#j                  |
      t!        |$|      t!        |%|      fS )Nc              3   H   K   | ]  }||j                        n|  y wr5   r  r  s     r,   r  z-native_batch_norm_backward.<locals>.<genexpr>B
  s,      	 $%=a7	s   "r#   z*rank of the input must be at least 2, got r"   z1mean and invstd must not be None in training modezDrunning_mean_cast and running_var_cast must not be None in eval moderg   )r   rD   r   r  rO   r0  r*  ry  r?   r5  rT   r  r  r   r   r8   r  )'r  r   r   rG  rH  rU  r\  rn  rh  r  r  weight_dtyper#  r$  r%  running_mean_castrunning_var_castsave_mean_castsave_invstd_castr!  
input_rankr'  num_featuresr   rZ  r  reduction_axesr  r  grad_output_sumdot_p	grad_mean
proj_scale
grad_scaleprojrX   r  	grad_biasr:   s'                                         @r,   r  r  '
  s    ++K||"33EKK@	 
	 ++KJA~I*VWWD[)*[->>LDF<6> !TUU $(8(@ V  !-34!"j 0N&t,N4 "N: %9!!!$% *$?DDii~>OIImzD'89>JE./E~VI/		%$,0J
 3FNKcQ
3[ .

 T!Z/$t+y8JF
"Z/
1~fn1~#		 	k"K.I|, r+   c
                    t        | |||||||||	
      }|
||f}t        |      D ]2  \  }}|	t        ||   |j                         t	        |||   d       4 |S r  )r  rH  r   r  r   )r  r   r   rG  rH  rU  r\  rn  rh  r  rr  rs  r  r  rX   r  rJ   s                    r,   native_batch_norm_backward_outr  
  s    " (F d#J&! Q1=jmQWW5Q
14PQ
 r+   save_varc                 B    t         j                  || |||||d|g d
      S NT)TTTr   r  )r   rl   r   rG  rH  rU  r  r  s           r,   miopen_batch_norm_backwardr  
  s5     ** r+   reserveSpacec	                 B    t         j                  || |||||d|g d
      S r  r  )	r   rl   r   rG  rH  rU  r  r  r  s	            r,   cudnn_batch_norm_backwardr  
  s5     ** r+   c                    | j                   | j                  t              t        j                  dv fd       | j                  dd  D ]  }t        j                  |dk7  fd         d   |d   z  dk(  rxd   |d   z  dk(  rjt        d t        dd  |      D              }t        d t        dd  ||      D              }t        j                  j                  j                  | ||      S d	 d
 fd} |d   |d         \  }}}}	 |d   |d         \  }
}}}| dt        |d      |
f   }|	s|st        j                  |d      S d } |||||	d      \  }} |||||d      \  }}d }t        t        |j                  d         t        |j                  d               D ]!  \  }}||d|d d |f   }||d|d d |f   z   }# |||z  z  S )Nr  c                      d  S )Nz9adaptive_avg_pool2d(): Expected 3D or 4D tensor, but got r*   r  s   r,   r   z%adaptive_avg_pool2d.<locals>.<lambda>
  s    KD6R r+   r^  r   c                  "    dt                dS )Nzjadaptive_avg_pool2d(): Expected input to have non-zero size for non-batch dimensions, but input has shape r#  r  r  s   r,   r   z%adaptive_avg_pool2d.<locals>.<lambda>
  s     99>uaI r+   rS   c              3   ,   K   | ]  \  }}||z    y wr5   r*   )r  r  r2  s      r,   r  z&adaptive_avg_pool2d.<locals>.<genexpr>  s     G$!QqAvG   c              3   :   K   | ]  \  }}}||d z
  |z  z
    ywr"   Nr*   )r  r  r2  r  s       r,   r  z&adaptive_avg_pool2d.<locals>.<genexpr>  s'      
 '1aAQ!O
s   c                 8    t        j                  | |z  |d      S )Ntruncrounding_moder?   divrN  rO  r  s      r,   start_indexz(adaptive_avg_pool2d.<locals>.start_index  s    yyQ99r+   c                 J    t        j                  | dz   |z  |z   dz
  |d      S )Nr"   r  r  r  r  s      r,   	end_indexz&adaptive_avg_pool2d.<locals>.end_index  s&    yy!a%1q1,awGGr+   c                    t        j                  |t         j                        } |||       }| |z  dz   }| |z  }|dk(  xs ||z  dk(   }|r|dz  }n
|dk(  r|dz  }t        j                  |t         j                        }|j                  d      |z   }|rUt        j                  | dz
  |j
                  |j                        }	t        j                  ||	      } |||       }
|
|z
  }n|}||||fS )Nr  r"   r   rS   r  )r?   r  r  rU   r  r   r  minimum)in_sizeout_sizeorangei0	maxlengthin_size_modadaptive	range_maxr  maxvali1lengthr  r  r  s               r,   compute_idxz(adaptive_avg_pool2d.<locals>.compute_idx  s   hvU[[I73 x'!+	(#q(GH{,Ba,GHNIANILL6M	ll2* ((!399SZZF --V,C 68W5B"WFFFIx//r+   .rH  )r   rS   r   c                     t        |t              r| |fS |dk\  rt        d|       ||j                  d      k\  }|dk(  rt	        |d      }t        j                  | |d      } t	        ||       }| |fS )Nr   z)dim should be negative when masking, got rS   r^  rH  r   )r7   r   r0  rU   rW   r?   masked_fill)valsr  r  r  rO   r  s         r,   
maybe_maskz'adaptive_avg_pool2d.<locals>.maybe_mask9  s    fg&< ax$'PQTPU%VWW 0 0 44Dby(q1$$T45D&vt4F<r+   )r  rO   r   )r  r  r  r?   r   r  r  nnrJ  
avg_pool2drW   r   r
   rT   )r   r  r  rz  kernelr  idxhlength_hrange_max_h
adaptive_hidxwlength_wrange_max_w
adaptive_wr  r  retr  jr  r  r  r  r  s                      @@@@@r,   adaptive_avg_pool2dr  
  s.   
 \\FKKEu:D	LLR [[ 
FI	

 Ry;r?"a'E"IB,G1,LG#eBCj+*FGG 
+.uRSz;+O
 
 xx""--eVVDD:H0@ /:%)[QS_.U+D(K.9%)[QS_.U+D(K'a0$67Djzz$H--    hjbND(  hjbND(
 Cdjjn-uTZZ^/DE +1;sAq!|$CS!Q\**C	+
 (X%&&r+   	ceil_moden_dimc                 
    ddt         t           t        z  dt         t           d z  dt         t           ffd} ||      } |||      }	 ||      }
 ||      }t        j                   j                  dz   dz   fv  fd        j                  dz   k(  }|s j                  d	       t         j                   d        } j                  }t              D cg c]5  }t        j                  j                  ||   ||   |
|   |	|   ||   |      7 }} j                  }d
}|t        j                  u rd}n|j                  rt        d      }nt        j                  |      }|j                   dk  r  j#                  t        j$                         n.|j                   dk  r j#                  t        j&                         |j                   dk  rt        |j(                  dz
        nt        |j(                        }d}g }t+        t                    D ][  }|
|   }||   dz
  |	|   z  ||   dz
  ||   z  z   dz   }t-        d	|||   d|
|   z  z   z
        |
|   z   }|j/                  ||g       ] t1        j2                   ||      }g }t              D ]  }t        j4                  ||   |t        j&                        j                  d      |	|   z  t        j4                  ||   |t        j&                        j                  d	      ||   z  z   }dgdz  z  }||   |d|z  <   ||   |d|z  dz   <   |j7                  |j9                  |              |t:        g|   }d}t        t        |            }|t              D cg c]
  }|d|z  z    c}z  }|t              D cg c]  }|d|z  z   dz    c}z  }|j=                  |      }t        |j                  d |z          }  |j8                  g | d }|j-                  d      \  }!}"g }#|"}$t              D ]9  }d}%t        |dz         D ]
  }&|%||&   z  }% |#j7                  |$|%z         |$|%z  }$; g }'t              D ]w  }dg|z   z  }||   |||z   <   t        j4                  ||   |t        j&                        j9                  |      }(|'j7                  |(|	|   z  |#|   ||   z  z   |
|   z
         y |'d	   })t        d      D ]  }|)||   z  |'|   z   }) |r|!j#                  |      }!|s"|!j?                  d	      }!|)j?                  d	      })|!|)fS c c}w c c}w c c}w )Nr  r  rP   c                     t        | t        t        f      s| gz  S | st        j                  |d ud        |S t        |       dk(  r| z  S t        |       S )Nc                       y)Nzdefault must be providedr*   r*   r+   r,   r   z<_max_pool_nd_with_indices.<locals>._expand.<locals>.<lambda>g  r  r+   r"   )r7   ry  r  r?   r   r  )r  r  r  s     r,   _expandz*_max_pool_nd_with_indices.<locals>._expandc  sV    #e}-55= LL,.PQN!#h!msU{:c:r+   )r  r"   r#   c                  <    d dz    d dz    dj                    dS )Nz	Expected r"   D or r#   zD input, got r?  r  )r  r{   s   r,   r   z+_max_pool_nd_with_indices.<locals>.<lambda>r  s(    )EAI;eEAI;mDII;aP r+   r   Fr   r      @   Tr   r  rS   r   r5   ) ry  r  r?   r   r  rU   r  r  rT   _meta_registrationspooling_output_shaper   r  ru  r  iinfobitsr8   r>  r  r   r_  r   extendr   r  r  r  r*  Ellipsisr  r   )*r{   r  rz  r  r  r  r  r  ksr  padi
is_batchedrl  r  r  output_sizesr   promoted
fill_valueinfopad_argsr   neededr   r9   idx_tensorsr  r  windowsn_batchperm	out_shapevalueslocal_argmax
kernel_pos	remainingdivisorddorig_coordsout_posflat_indicess*   `     `                                   r,   _max_pool_nd_with_indicesr  Z  s   ;T#Y_ ;tCy4/? ;4PS9 ; 
	B		$B		B		B	LL		eai++P
 eai'J~~a tzz5&'*+K[[F u	  	!!66NBqE2a5"Q%A		
L  JJEH


		 	 6]
{{5!99r>775;;'DYY^775;;'D,0IINU488a<(dhh
 HeEl# '!uq/A%A."Q%!)r!u1DDqHAvQ!be)!;<=1Eu&	'
 	
dHJ/A
 K5\ 	/LLau{{KUUVWXell2a5u{{CMMaPSUVWSXXY 	
 q5y!#Aa!ea5a!eai3;;u-.	/ (K()G GgDeEl3Wq1u_33D%,7QWq1u_q 77Dood#G W]]#4Wu_56Igoo-y-"-G";;2;.FL JI5\ (Au% 	Br"vG	)w./'	( K5\ Lw')!_gk,,OF%++

'%. 	 	7RU?Z]RU-BBRUJKL q>L1e_ F#k!n4{1~EF 5!"#++A.<Cr 47s   ":UU9U c           	      &    t        | |||||d      S )Nr#   r  r  r{   r  rz  r  r  r  s         r,   max_pool2d_with_indicesr"          %k67Hiq r+   c           	      &    t        | |||||d      S )Nr   r  r   r!  s         r,   max_pool3d_with_indicesr%    r#  r+   c                    
  j                   t        j                  dv fd       t        d      D ].  
t        j                   j	                  
      dkD  
 fd       0  j
                  d   } j
                  d   }|\  }}|dk(  s|dk(  rOt         j
                  d d       ||gz   } j                  |       j                  |t        j                        fS |dk(  re|dk(  r`t        j                   d	d
      }t        j                   j                  d      d      j                  d      j                  d      }||fS ||z  dk(  r(||z  dk(  r ||z  ||z  g}	t        j                   |	      S t        S )Nr  c                      d  dS )Nz9adaptive_max_pool2d(): Expected 3D or 4D tensor, but got r?  r*   r  s   r,   r   z%adaptive_max_pool2d.<locals>.<lambda>      KD6QRS r+   r"   r   c                  *    dj                    d  dS )Nzjadaptive_max_pool2d(): Expected input to have non-zero size for non-batch dimensions, but input has sizes  with dimension  being emptyr  r  r   s   r,   r   z%adaptive_max_pool2d.<locals>.<lambda>  %    '',{{m3CA3lT r+   r^  rS   r   )r^  rS   Tr  r   )r  r?   r   rT   r2  r  ry  	new_emptyr  r  argmaxr@  rU   r   r"  NotImplemented)r   r  h_inw_inh_outw_outoutput_shaper  r  r  r  r  s   `         @@r,   adaptive_max_pool2dr6    sy    ::D	LLS 1d^ 
JJqMA	

 ;;r?D;;r?DLE5 zUaZEKK,->OOL)OOLO<
 	
 zeqjEx>,,u}}R0b9CCBGQQRTUw e|qTE\Q.u}dem4++E;?? r+   c                 t     j                   t        j                  dv fd       t        d      D ].  t        j                   j	                        dkD   fd       0  j
                  d   } j
                  d   } j
                  d   }|\  }}}|dk(  s
|dk(  s|dk(  rPt         j
                  d d       |||gz   } j                  |       j                  |t        j                  	      fS |dk(  ry|dk(  rt|dk(  rot        j                   d
d      }	t        j                   j                  d      d      j                  d      j                  d      j                  d      }
|	|
fS ||z  dk(  r4||z  dk(  r,||z  dk(  r$||z  ||z  ||z  g}t        j                   |      S t        S )NrH  r  c                      d  dS )Nz9adaptive_max_pool3d(): Expected 4D or 5D tensor, but got r?  r*   r  s   r,   r   z%adaptive_max_pool3d.<locals>.<lambda>8  r(  r+   r"   r   c                  *    dj                    d  dS )Nzjadaptive_max_pool3d(): Expected input to have non-zero size for non-batch dimensions, but input has sizes r*  r+  r  r,  s   r,   r   z%adaptive_max_pool3d.<locals>.<lambda>=  r-  r+   r   r^  rS   r   )r   r^  rS   Tr  r   )r  r?   r   rT   r2  r  ry  r.  r  r  r/  r@  rU   r   r%  r0  )r   r  d_inr1  r2  d_outr3  r4  r5  r  r  r  r  r  s   `           @@r,   adaptive_max_pool3dr=  /  s    ::D	LLS 1d^ 
JJqMA	

 ;;r?D;;r?D;;r?D%E5% zUaZ5A:EKK,-u0EEOOL)OOLO<
 	
 zeqjUaZE|TBLLr*3Yr]Yr]Yr]	 	 w e|qTE\Q.4%<13Du}demTU]C++E;?? r+   c                 D   t        j                  d d       t        |      D ]$  \  }}t        j                  |dk\  ||ffd	       & t        | j                  d         t        |      z   }t        d |D              r| j                  |      S t        t        j                  | j                  d         }t        t        j                  |      }dg| j                  z  }	| j                  d   |	d   |t        j                  || j                        j!                  |	      |z  z   j#                  d      }
| j                  |      }t        j%                  |j#                  d      |
g| j#                  d      d	
      j!                  |j                        S )Nmax_unpoolingd_forward_outr   c                     d d|  d| S )Nr?  zSd(): output_size must contain non-negative spatial dimensions, but got output_size[z]=r*   )r  r2  rO   s     r,   r   z_max_unpoolnd.<locals>.<lambda>t  s%    u %;;<#RvG r+   c              3   &   K   | ]	  }|d k(    ywr  r*   )r  r  s     r,   r  z _max_unpoolnd.<locals>.<genexpr>z  s     
(a16
(r  r"   r  rS   Fr(  )rD   alert_not_deterministicrH  r?   r   ry  r  anyrq  r   operatorr   r  r   r  r  r  r*  r+  )r{   r  r  rO   r  r2  r5  nchwindices_nc_shapeindices_flatr  s      `        r,   _max_unpoolndrJ  g  su    
!!M#m"DE[) 
4AIT 	

 

5SD)*T+->>L

(<
((~~l++	djj3$/	0B	k	*BsTYY"jj3$/Usd$++b+5::;KLrQQgbk  ^^L)F!!r\NDLL,< " 
d6<<r+   c                     t        j                  j                  t         j                  k(  fd       t        j                  t	              dk(  fd       t        j                   j
                  dv  fd       t        j                   j                  j                  k(   fd       t        d j
                        D ].  t        j                   j                        dkD   fd	       0 t         d      S )
Nc                  "    d j                    S )Nz2elements in indices should be type int64 but got: r   )r  s   r,   r   zmax_unpool2d.<locals>.<lambda>  s    DW]]OT r+   r#   c                  "    dt                dS )NzMThere should be exactly two elements (height, width) in output_size, but got 
 elements.r  r  s   r,   r   zmax_unpool2d.<locals>.<lambda>      ;'(
4 r+   r  c                  $    d j                    dS )NzLInput to max_unpooling2d should be a 3d or 4d Tensor, but got a tensor with  dimensions.r  r   s   r,   r   zmax_unpool2d.<locals>.<lambda>  s    %%)YYK|= r+   c                  <    dj                    d j                    S NzBExpected shape of indices to be same as that of the input tensor (z%) but got indices tensor with shape: r  )r  r{   s   r,   r   zmax_unpool2d.<locals>.<lambda>  s,    PQUQ[Q[P\ ]229--B r+   r"   r   c                  *    dj                    d  dS )NzZmax_unpooling2d(): Expected input to have non-zero size for non-batch dimensions, but got r*   being empty.r  )r  r{   s   r,   r   zmax_unpool2d.<locals>.<lambda>  s%    ::,&6qcH r+   )
r?   r   r   r  r  r  r  rT   r2  rJ  )r{   r  r  r  s   ```@r,   max_unpool2drX    s     
LL$T 
LLKA	
 
LL		V	
 
LL

gmm#	
 1dii  
IIaL1	

 wQ77r+   c                     t        j                  j                  t         j                  k(  d        t        j                   j                  dv  fd       t        j                  t              dk(  fd       t        j                  t              dk(  fd       t        j                  t              dk(  fd       t        j                   j                  j                  k(   fd       t        d	 j                        D ].  t        j                   j                        d
kD   fd       0 t        j                  d
   d
kD  xr d	   d
kD  xr d   d
kD  fd       t         d      S )Nc                       y)Nz(elements in indices should be type int64r*   r*   r+   r,   r   zmax_unpool3d.<locals>.<lambda>  r  r+   r8  c                  $    d j                    dS )NzLInput to max_unpooling3d should be a 4d or 5d Tensor, but got a tensor with rS  r  r   s   r,   r   zmax_unpool3d.<locals>.<lambda>  s    ^_d_i_i^jjvw r+   r   c                  "    dt                dS )NzVThere should be exactly three elements (depth, height, width) in output_size, but got rN  rO  rP  s   r,   r   zmax_unpool3d.<locals>.<lambda>  rQ  r+   c                  "    dt                dS )NzRThere should be exactly three elements (depth, height, width) in stride, but got: rN  rO  rz  s   r,   r   zmax_unpool3d.<locals>.<lambda>  s    dehioepdqq{| r+   c                  "    dt                dS )NzSThere should be exactly three elements (depth, height, width) in padding, but got: rN  rO  )r  s   r,   r   zmax_unpool3d.<locals>.<lambda>  s    efijqfress}~ r+   c                  <    dj                    d j                    S rU  r  )r  r   s   r,   r   zmax_unpool3d.<locals>.<lambda>  s,    PQVQ\Q\P] ^229--B r+   r"   r   c                  *    dj                    d  dS )NzZmax_unpooling3d(): Expected input to have non-zero size for non-batch dimensions, but got r*  rW  r  r,  s   r,   r   zmax_unpool3d.<locals>.<lambda>  s%     ;;-'7s-I r+   r#   c                      d  S )Nz5strides should be greater than zero, but got stride: r*   r_  s   r,   r   zmax_unpool3d.<locals>.<lambda>  s    GxP r+   )
r?   r   r   r  r  r  r  rT   r2  rJ  )r   r  r  rz  r  r  s   `````@r,   max_unpool3drd    sD    
LL$&X 
LL

fw 
LLKA	
 
LLFq| 
LLG~ 
LLw}}$	
 1ejj! 
JJqMA	

 
LLq	A9&)a-9F1IMP
 a88r+   )rm   r  c                $    t        | |||d|      S )NTinplacerm   
_index_addr9   rO   r  r  rm   s        r,   
index_add_rk    s     aeVTGGr+   c                $    t        | |||d|      S )NFrf  rh  rj  s        r,   ra  ra    s     aeVU%HHr+   rg  c                    t        j                   j                        t        j                   j
                  j
                  k(  xr  j
                  j
                  k(   fd       t        j                  j                  dk  fd       j                  dk(  rj                  d      ndj                  dkD  rj                        ndt        j                  k(  fd       dk7  ret        j                   j                        t        j                  t        u xs t        j                  t                    fd       z   j                  dk(  }|r j                  d      n }dz  fz   }|rt        j                  nt        j                  }	 |	||d	      }
|r S |r|
j!                  d      S |
j#                         S )
Nc                  V    dj                    d j                    dj                    S )NzVindex_add(): self, index and source expected to be in the same device, but got (self) 
, (index) , and (source) r  r  r  r9   s   r,   r   z_index_add.<locals>.<lambda>  4    hhZz%,, @"MM?, r+   r"   c                  $    d j                    dS Nz(Index should have dimension 1 or 0 (got rC  r  r  s   r,   r   z_index_add.<locals>.<lambda>      :5::,aH r+   r   c                      d d d S )NzNumber of indices (z') should be equal to tensor.size(dim) (z), for dim=r*   )rO   
index_sizer  s   r,   r   z_index_add.<locals>.<lambda>%  s!    %j\1XYdXeeqmplrs r+   c                  (    dt                d dS )Nzalpha argument of type z cannot be safely cast to type !)r  )rm   python_types   r,   r   z_index_add.<locals>.<lambda>,  s    -d5k]:YZeYffgh r+   r5   Tr(  )rD   canonicalize_dimsr  r?   r   r  r2  dtype_to_typer   r  is_weakly_lesser_typer  rU   r   
index_put_	index_putr   r  )r9   rO   r  r  rg  rm   zero_dimrY  r  r  r   rx  r{  r  s   ```` `     @@@r,   ri  ri    s    
!
!!&&#
.C	LL	ELL >QXX%>	
 
LL

aH #(**/AqJ&,kkAo&++c"1K	LLz!s z))!''24 E**4;Dh	

 %vv{H#QB
C-5(
"C#*I
BV
5C!)s{{1~?s~~/??r+   c                    t        j                  t        |       dkD  d        t        j                  dk(  xs dk(  fd       t        |       }| d   j                         }|dd  }t	        d | D              }|r||f}n||f}||z   }| d   j                  ||      }	dt        |      z  }
t        |      D ]  }| |   j                  |	j                  	      }||j                  d      z
  }dk(  rt        j                  ||
d|fz   |      }nt        j                  ||
|dfz   |      }|rt        j                  |	|d|
      }	t        j                  |	|d|
      }	 |	S )Nr   c                       y)Nz#received an empty list of sequencesr*   r*   r+   r,   r   zpad_sequence.<locals>.<lambda>>  r  r+   r   r   c                      d  dS )Nz:Expected padding_side to be one of left or right, but got r#  r*   )padding_sides   r,   r   zpad_sequence.<locals>.<lambda>A  s    L\NZ[\ r+   r"   c              3   >   K   | ]  }|j                  d         ywr  rF  )r  r9   s     r,   r  zpad_sequence.<locals>.<genexpr>F  s     /!&&)/s   )r   r   r   rO   r  )r?   r   r  r2  r   r   rT   r8   r   r   r  r  )	sequencesbatch_firstpadding_valuer  sequences_sizemax_sizetrailing_dimsmax_lenout_dimsr   dim_paddingsr  currseq
pad_amountrows      `           r,   pad_sequencer  ;  s    
LLY!#%RS	LL9,'"9\ ^N|  "HQRLM/Y//G"G,^,-'H
A,

-
8CC..L>" @A,//		/2w||A.
7"&&J7C &&Q7C %%c3AQ%?C%%c3AQ%?C@ Jr+   c                 "    t        | |||d      S )NTrg  _index_copyr9   rO   r  r  s       r,   index_copy_r  `  s    q#ufd;;r+   c                 "    t        | |||d      S )NFr  r  r  s       r,   
index_copyr  e  s     q#ufe<<r+   c                    ddl m} t        j                   j                        t        j                   j                  j                  k(  xr  j                  j                  k(   fd       t        j                  j                  dk  fd       j                         j                  dk(  rt        j                  dk(  fd       n@ j                  dk7  r1t        j                  j                   j                  k(   fd        j                  dkD  r" j                  d   j                  dz   d  z   ndj                  dkD  r"j                  d  j                  dz   d  z   ndt        j                   |      fd	       j                  dk7  r-t        j                  j                        k(  fd
        j                  dk(  }|r j                  d      n }j                  dk(  rj                  d      ndz  fz   }|rt        j                  nt        j                  }	 |	||      }
|r S |r|
j                  d      S |
j!                         S )Nr   )sym_eqc                  V    dj                    d j                    dj                    S )NzWindex_copy(): self, index and source expected to be in the same device, but got (self) ro  rp  r  rq  s   r,   r   z_index_copy.<locals>.<lambda>s  rr  r+   r"   c                  $    d j                    dS rt  r  ru  s   r,   r   z_index_copy.<locals>.<lambda>{  rv  r+   c                      d  dS )NzIindex_copy_(): When source is scalar, index should have one element (got rC  r*   )num_indicess   r,   r   z_index_copy.<locals>.<lambda>  s    $$/=3 r+   c                  >    d j                    dj                    dS )Nztindex_copy_(): When source and destination are not scalars, their dimensionality must match. Source dimensionality (z), destination dimensionality (rC  r  )r  r9   s   r,   r   z_index_copy.<locals>.<lambda>  s)    KK= ?xqJ r+   r*   c                      d d  d dS )Nz_index_copy_(): Source/destination tensor must have same slice shapes. Destination slice shape: z at dimension z and source slice shape: z at dimension 0.r*   )rO   tensor_sliced_shapex_sliced_shapes   r,   r   z_index_copy.<locals>.<lambda>  s.    ((6'7~cU K'':&;;KM r+   c                  4    d dj                          dS )Nz"index_copy_(): Number of indices (z') should be equal to source.size(dim) (rC  rF  )rO   r  r  s   r,   r   z_index_copy.<locals>.<lambda>  s,    4[M B..4kk#.>-?qB r+   r5   )rw  r  rD   r|  r  r?   r   r  r   r  r2  rU   r   r  r  r   r  )r9   rO   r  r  rg  r  r  rY  r  r  r   r  r  r  s   ````       @@@r,   r  r  k  s    =

!
!!&&#
.C	LL	ELL >QXX%>	
 
LL

aH ++-K{{a1	
 
1KK166!	
 <=66A:QWWTc]QWWS1WY%772N8>aTcV\\#')44R  
LL~23	
 {{a6;;s++	
 vv{H#QB"'**/EOOAuE
C-5(
"C#*I
BV
$C!)s{{1~?s~~/??r+   c                 *   t        j                  | j                  d      |       }t        j                  t        j                  |              }| j
                  s| j                  r| j                  d      }n|}|t        j                  |      z
  |fS )Nr*   rM  )r?   r  rq  rh   r   r  is_xpurL  )r{   r   rj   r   s       r,   log_sigmoid_forwardr    sn     --r*D
1C		599T?"#A||t{{%Q''r+   lowhighr  c           	          t        j                  | j                  | j                         t	        |      t	        |      | j
                  | j                  |      S )N)rz  r  r  r   r  r  )prims_uniform_helperr  rz  r   r   r  )r9   r  r  r  s       r,   uniformr    sF       	xxzcNt_ggxx r+   c                 <    | j                  t        | |||            S r5   )rO  r  )r{   r  r  r  s       r,   uniform_r    s    ::gdCy9::r+   c                 "   t        |       dz
  }|>t        j                  |d u d        t        j                  t        |      |k(  d        |S |t        j                  |d u d        t        j                  t        |      |k(  d        g }t        |      D ]Z  \  }}t	        |      |k(  r$|j                  | |dz      t	        |      z         8|j                  t        | |dz      |z               \ |S t        j                  dd        y )Nr#   c                       yNz9Must specify exactly one of output_size and scale_factorsr*   r*   r+   r,   r   z.upsample_compute_output_size.<locals>.<lambda>  r  r+   c                       yN r*   r*   r+   r,   r   z.upsample_compute_output_size.<locals>.<lambda>  r  r+   c                       yr  r*   r*   r+   r,   r   z.upsample_compute_output_size.<locals>.<lambda>  r  r+   c                       yr  r*   r*   r+   r,   r   z.upsample_compute_output_size.<locals>.<lambda>  r  r+   Fc                       yr  r*   r*   r+   r,   r   z.upsample_compute_output_size.<locals>.<lambda>  r  r+   )r  r?   r   rH  r  r  r   )r9  r  scale_factorsspatial_dimensionsr  r  s         r,   upsample_compute_output_sizer    s   Z1,T!O	
 	S%);;ZH 4O	
 	S'+==zJm, 	CDAq1v{"":a!e#4s1v#=>""7:a!e+<q+@#AB		C
 	LLRr+   c                     | y | |   S r5   r*   )scalesr  s     r,   get_scale_valuer    s    ~#;r+   r  c                 x    t        | j                         ||      }|r|nd gt        |      z  }t        | ||      S r5   r  r2  r  _upsample_nearestr   r  r  osizer  s        r,   _upsample_nearest_vecr    s@     ){MRE&TFSZ,?  UE622r+   c                 |    t        | j                         ||      }|r|nd gt        |      z  }t        | ||d      S NTexactr  r  s        r,   _upsample_nearest_exact_vecr    sB     ){MRE&TFSZ,?  UE6>>r+   c                    g }t        |      }|rdnd}t        |      D ]  }||   }| j                  | |z      }	||   ||   dkD  r|	|	||   z  z  n|	|z  }
t        j                  |t        j
                  | j                        }||z   |
z  j                  t        j                        }t        |dz
  |z
        D ]  }|j                  d      } |j                  |        |S )Nr   r   r   r  r"   rS   )r  rT   r  r?   r  r   r  r8   r  rU   r  )r   r  r  r  r  num_spatial_dimsr  r  r  isizern   output_indicesinput_indicesrV   s                 r,   !_compute_upsample_nearest_indicesr  $  s    G;'SsF#$ & A--12
 ay$Q UVAY&' 	 e5==V(61U:>>u{{K'!+a/0 	8A)33B7M	8}%7&8 Nr+   )preserve_memory_formatr  r  c                     t        | ||g      S r5   r  r   r  r  s      r,   upsample_nearest1dr  J  s     UK&::r+   c                 "    t        | ||gd      S r  r  r  s      r,   upsample_nearest_exact1dr  V  s     UK&FFr+   scales_hscales_wc                      t        | |||g      S r5   r  r   r  r  r  s       r,   upsample_nearest2dr  d  s     UK(H1EFFr+   c                 $    t        | |||gd      S r  r  r  s       r,   _upsample_nearest_exact2dr  q  s     UK(H1ETRRr+   scales_dc                 "    t        | ||||g      S r5   r  r   r  r  r  r  s        r,   upsample_nearest3dr    s     UK(Hh1OPPr+   c                 &    t        | ||||gd      S r  r  r  s        r,   _upsample_nearest_exact3dr    s!     {Xx:$ r+   r  c                 `   t        | |||      }d d g|z   }t        j                  | |      }|j                  dv rst	        j
                  |       }| j                  d   }|j                  dk(  r.| j                  j                  dk(  r|dk  rt        j                  }|j                  |      }|S )Nr  r8  r"   rH  cudar\  )r  r   _unsafe_indexr  rD   r   r  r  r  r?   r`  r  )	r   r  r  r  spatial_indicesr  r  r]  
n_channelss	            r,   r  r    s     8{F%O Tl_,Gw/F{{f33E: [[^
;;! 1 1V ;
Q!33M"""?Mr+   c           	          |r|rd}n|rd}n|rd}nd}t        |       |z  dk7  rt        dt        |        d|       t        dt        |       |      D cg c]  }t        | |||z           c}S c c}w )Nr  rH  r   r#   r   zlen(params)=z  is not divisible by group_size=)r  r0  rT   r  )params
has_biaseshas_projections
group_sizer  s        r,   gather_paramsr    s    o
	
	


6{Z1$3v;-'G
|T
 	
 49CK3T./fQZ()  s   A2c                 ~    |r'| d|z     |d|z     }}| d|z  dz      |d|z  dz      }}n| |   ||   }}d\  }}||||fS )Nr#   r"   NNr*   )r  hiddensr  bidirectional
cur_params
cur_hiddenbidir_paramsbidir_hiddens           r,   params_hiddensr    sk    !'AAJ
%+AEAI%6A	8Jl!'GAJJ
%/"lz<==r+   c                     ||k  rt        d| d| d      |j                  | j                  d|||z
               | j                  dd|      S )Nlast_batch_size (z) must be > batch_size (rC  r   )r0  r  r3  )r  last_batch_size
batch_sizer  s       r,   update_hidden_for_packedr    sc    *$00HTUV
 	
 NN:$$Q
Oj4PQRQ:..r+   c           	          ||k(  r| S ||k\  rt        d| d| d      t        j                  | |j                  d|||z
        f      S )Nr  z) must be < batch_size (rC  r   )r0  r?   concatr3  )r  r  r  
inp_hiddens       r,    update_hidden_for_packed_reverser    sn     *$*$00HTUV
 	
 <<a*2NO	
 r+   c           	      X   |d   }|d   }|r|d   nd }	|r|d   nd }
g }g }|r|d   n|d   }|j                  dd|      }t        j                  | t        |            }|r|d d d   }|D ]V  } | j                  d   }||k(  rn|rt        ||||      }nt        ||||      } || |||	||
      }|}|j                  |       X |r|j                          n!|j                  |       |j                          t        j                  |d      }|st        j                  |d      n|}||fS )Nr   r"   r#   r   rS   )
r3  r?   r  ry  r  r  r  r  reverser4  )inphiddenr  r  	hidden_fnbatch_sizesr  	ih_weight	hh_weightih_biashh_biasstep_outputr  r  r  	split_inpr  r   
hidden_outs                      r,   one_layer_rnn_datar    sR    q	Iq	I%fQi4G%fQi4GK"$G)0k"ok!nOq!_5JCk!23IddO	 'IIaLa9OQJ 2OQJ sJ	7IwW
:&#'& z"
))K
#C.57A&:J
?r+   c                       fd}|S )Nc                 D     t        j                  |||      | z         S r5   r   linearr  r  r
  r  r  r  nonlinearitys         r,   rK   zrnn_cell.<locals>.inner"  s     AHHZGDqHIIr+   r*   r  rK   s   ` r,   rnn_cellr  !  s    J Lr+   c                       fd}|S )Nc                 r    t        j                  | ||      }  t        j                  |||      | z         S r5   r  r  s         r,   rK   zrnn_cell_data.<locals>.inner)  s2    HHQ	7+AHHZGDqHIIr+   r*   r  s   ` r,   rnn_cell_datar  (  s    J Lr+   c           	      x   |d   }|d   }|r|d   nd }|r|d   nd }	t        j                  | ||      }
|r|
j                  d      n|
}
|j                  d      }g }|
D ]   } |||||||	      }|j	                  |       " |r|j                          t        j                  |d      }||j                  d      fS )Nr   r"   r#   r   )	r   r  fliprU   r  r  r?   r4  r   )r  r  r  r  r  r  r
  r  r  r  precomputed_inputr  r  r  r   s                  r,   one_layer_rnnr   0  s    q	Iq	I%fQi4G%fQi4Gi95<)..q1BS!!!$JK 'q*i)WU
:&' 
))K
#C
""1%%%r+   c                    |d   }|d   }|r|d   }|d   }nFt        j                  |j                               }t        j                  |j                               }|d   j                  d      }	|d   j                  d      }
g }d}|	j                  d      }d}d}d}d}| j	                         } |	j	                         }	|
j	                         }
t         j
                  j                  j                  j                  | |||||	|
|||||||||      }|d   |d   |d   }}}||j                  d      |j                  d      ffS )Nr   r"   r#   r   F)
r?   r  r2  rU   r  r6  r   mkldnn_rnn_layerr  r   )r  r  r  r  r  w0w1w2w3hxcxr	  modehidden_size
num_layersr  r  rn  outputsrZ   hycys                         r,   mkldnn_one_layer_lstmr/  F  sS   	B	BAYAY[[#[[#			Q	B			Q	BKD''!*KJ MKE ..
C	B	Biinn--55





!G$ 
GAJ
2rArzz!}bjjm,,,r+   c
                    |r| j                  dd      n| } g }
t        |      D ]  }t        ||||      \  }}}}|r
||dz
  k  r|nd} |	| |||      \  }}|
j                  |       |r! |	| |||d      \  }}|
j                  |       |r*t	        j
                  |g|j                         dz
        } n|} |dk7  s|s||dz
  k  st	        j                  | |d      }  |r| j                  dd      n| } | |
fS )Nr   r"   r   T)r  )rn  )	transposerT   r  r  r?   r4  rO   rq  )r   r  r  r  r+  rq  rn  r  r  layer_fnfinal_hiddensr  r  r  r  r  fwd_inp
fwd_hiddenbwd_inp
bwd_hiddens                       r,   _rnn_helperr8  x  s"    &1EOOAq!eEM: >=KFA}>
:
Jl $
QU(:'&uj*jQZ("*|\:t#GZ   ,IIw0'++-!2CDEEa<Ea*q.&8MM%=E)>, &1EOOAq!eE-r+   c	                     |j                  d      }	t        ||d      }t        | |	|||||||t        t        t        t        j                              
      \  }
}|
t        j                  |d      fS Nr   Fr  )	unbindr  r8  r   r   r  r?   r   stackr   r'  r  r  r+  rq  rn  r  r  r  r   r3  s               r,   rnn_tanh_inputr?    t     YYq\F6:u5F$%**)=>C M1---r+   c	                     |j                  d      }	t        ||d      }t        | |	|||||||t        t        t        t        j                              
      \  }
}|
t        j                  |d      fS r:  )	r<  r  r8  r   r   r  r?   r  r=  r>  s               r,   rnn_relu_inputrB    r@  r+   c	                     |j                  d      }	t        ||d      }t        | |	||||||dt        t        |t        t        j                              
      \  }
}|
t        j                  |d      fS Nr   Fr	  r  )	r<  r  r8  r   r  r  r?   r  r=  datar	  r'  r  r  r+  rq  rn  r  r  r   r3  s               r,   rnn_relu_datarH    {     YYq\F6:u5F$##EJJ/	
C  M1---r+   c	                     |j                  d      }	t        ||d      }t        | |	||||||dt        t        |t        t        j                              
      \  }
}|
t        j                  |d      fS rD  )	r<  r  r8  r   r  r  r?   r   r=  rF  s               r,   rnn_tanh_datarK    rI  r+   c                 l   t        j                  |||      | z   }|j                  d|      }|d   j                         }	|d   j                         }
|d   j	                         }|d   j                         }|
|z  |	|z  z   }||j	                         z  }||nt        j                  ||d       }||fS )NrH  r   r"   r#   r   r   r  chunkr   r   )r  r'  r(  r  r  	hr_weight	chunk_dimgateschunked_gatesin_gateforget_gate	cell_gateout_gater.  r-  s                  r,   	lstm_cellrW  %  s    HHRG,s2EKK9-MA&&(G"**,Ka %%'IQ'')H	r	Wy0	1B	BGGI	B ahhr9d&CBr6Mr+   c           
      (   |d   }|d   }|r|d   nd }|r|d   nd }t        |      dk(  r|d   nt        |      dk(  r|d   nd }	|d   j                  d      }
|d   j                  d      }t        j                  | ||      }|r|j	                  d      n|}g }|D ](  } t        | |
||||	d      \  }
}|j                  |
       * |r|j                          t        j                  |d      }||
j                  d      |j                  d      ffS )Nr   r"   r#   r   r  rH  rP  )r  rU   r   r  r  rW  r  r  r?   r4  r   )r  r  r  r  r  r
  r  r  r  rO  r'  r(  r  r  r   s                  r,   one_layer_lstmrZ  3  s*   q	Iq	I%fQi4G%fQi4G[A%q	Fq8H6!9d  
		Q	B			Q	Bi95<)..q1BSK  3B	7IQRSB2 
))K
#CA

1...r+   c           
         |d   }|d   }|r|d   nd }|r|d   nd }	t        |      dk(  r|d   nt        |      dk(  r|d   nd }
g }g }|r|d   n|d   }t        j                  | t        |            }|r|d d d   }|d   }|d   }|j	                  dd|      |j	                  dd|      }}|D ]  } | j
                  d   }t        j                  | ||      } ||k  ra|j                  |j	                  d|||z
        |j	                  d|||z
        f       |j	                  dd|      |j	                  dd|      }}||kD  rXt        j                  ||j	                  d|||z
        fd      }t        j                  ||j	                  d|||z
        fd      }t        | ||||	|
d      \  }}|}|j                  |        |r|j                          ||f}nZ|j                  ||f       |j                          t        | \  }}t        j                  |d      t        j                  |d      f}t        j                  |d      }||fS )	Nr   r"   r#   r   r  rH  rS   rY  )r  r?   r  ry  r3  r  r   r  r  r  rW  r  r  r4  )r  r  r  r  r	  r  r
  r  r  r  rO  r  r  r  r  orig_hxorig_cxr'  r(  r  r  hidden0hidden1r   s                           r,   one_layer_lstm_datar`  N  sy   q	Iq	I%fQi4G%fQi4G[A%q	Fq8H6!9d  KG)0k"ok!nOCk!23IddO	QiGQiGq!_-q!_- 	B
  IIaLhhsIw/ NNIIaOa$78IIaOa$78 YYq!Q'1a);B W^^AO8KLMqB W^^AO8KLMqB 3B	7IQRSB236 "X
Bx =YYw*EIIgq,AA

))K
#C
?r+   c                 4    d } || ||      rt         S t        S )a*  Check whether we could use decompose lstm with mkldnn_rnn_layer.
    All the below conditions need to be met:
        * ``torch._C._get_mkldnn_enabled()`` returns ``True``.
        * All the input args are on CPU.
        * The dtypes of args are either torch.float or torch.bfloat16.
        * Inference.
        * ``has_projections`` returns ``False``.

    Args:
        * input: the input sequence to LSTM
        * hx: a tuple of the input hidden state and cell state ``(h_0, c_0)`` to LSTM
        * params: the weight and bias tensors of LSTM
    c                 N   t         j                  j                         sy| gt        |      z   t        t	        j
                  |            z   }|D ch c]  }|j                   }}t        |      dk7  ry|j                         }|t        j                  d      k7  ry|D ch c]  }|j                   }}|D ]&  }|t         j                  t         j                  fvs& y | j                  ry|d   j                  d      |d   j                  d      k7  }	|	ryyc c}w c c}w )NFr"   r  r   r#   T)r?   rs  _get_mkldnn_enabledry  r	   from_iterabler  r  popr   r  bfloat16requires_gradr2  )
r   r'  r  r  tdevicesr  dtypesr   r  s
             r,   
use_mkldnnz2select_one_layer_lstm_function.<locals>.use_mkldnn  s    xx++-'DH$tE,?,?,G'HH%,-188--w<1U\\%((#*+a!''++ 	EU[[%..99	 Q%**Q-2a5::a=8) . ,s   D#D")r/  rZ  )r   r'  r  rk  s       r,   select_one_layer_lstm_functionrl    s!    : %V$$$r+   c	                    t        |      dk7  rt        dt        |             t        |||d   j                  d      |d   j                  d      k7        }t	        t        |d   |d               }	t        | ||      }
t        | |	||||||||

      \  }}t	        t        |       }|t        j                  |d   d      t        j                  |d   d      fS )Nr#   $lstm expects two hidden states, got r   r"   )
r  r0  r  r2  ry  r  rl  r8  r?   r=  )r   r'  r  r  r+  rq  rn  r  r  r  r2  r   r3  s                r,   	lstm_implro    s     2w!|CCG9MNN6:r!uzz!}1

1/MNF#beRU#$F-eR@H$C m,-MM!,a0%++mA>NPQ2RRRr+   c	                    t        |      dk7  rt        dt        |             t        |||d   j                  d      |d   j                  d      k7        }t	        t        |d   |d               }	t        | |	||||||dt        t        |      
      \  }
}t	        t        |       }|
t        j                  |d   d      t        j                  |d   d      fS )Nr#   rn  r   r"   F)r	  )r  r0  r  r2  ry  r  r8  r   r`  r?   r=  rF  s               r,   lstm_data_implrq    s     2w!|CCG9MNN6:r!uzz!}1

1/MNF#beRU#$F$#=C m,-MM!,a0%++mA>NPQ2RRRr+   c                 &   | j                  dd      }t        j                  |||      j                  dd      }|d   |d   z   j                         }|d   |d   z   j                         }	|d   |d   |z  z   j	                         }
||
z
  |	z  |
z   S )Nr   r"   r#   r   )rN  r   r  r   r   r  r  r
  r  r  r  chunked_igateschunked_hgates
reset_gate
input_gatenew_gates              r,   gru_cellry    s    YYq!_NXXj)W=CCAqIN #nQ&77@@BJ #nQ&77@@BJq!^A%6%CDJJLH!Z/(::r+   c                 P   t        j                  | ||      j                  dd      }t        j                  |||      j                  dd      }|d   |d   z   j                         }|d   |d   z   j                         }	|d   |d   |z  z   j	                         }
||
z
  |	z  |
z   S )Nr   r"   r   r#   rM  rs  s              r,   gru_cell_datar{    s    XXc9g6<<QBNXXj)W=CCAqIN #nQ&77@@BJ #nQ&77@@BJq!^A%6%CDJJLH!Z/(::r+   c	                     t        ||d      }t        | |j                  d      ||||||dt        t        |t
              
      \  }	}
|	t        j                  |
d      fS )NFr   rE  )r  r8  r<  r   r  r{  r?   r=  )rG  r	  r'  r  r  r+  rq  rn  r  r   r3  s              r,   gru_impl_datar}    si     6:u5F$
		!"}UC M1---r+   c	                     t        ||d      }t        | |j                  d      |||||||t        t        t
              
      \  }	}
|	t        j                  |
d      fS )NFr   r;  )r  r8  r<  r   r   ry  r?   r=  )r   r'  r  r  r+  rq  rn  r  r  r   r3  s              r,   gru_implr  5  sf     6:u5F$
		!2C M1---r+   c                     t        | j                         ||      }t        |d      }t        |d      }t        j                  j
                  j                  | ||||      S Nr   r"   )r  r2  r  r?   r6  r   _upsample_bilinear2d_aar   r  align_cornersr  r  scale_hscale_ws          r,   upsample_bilinear2d_aa_vecr  S  sV     ){MREmQ/GmQ/G99>>11umWg r+   c                     t        | j                         ||      }t        |d      }t        |d      }t        j                  j
                  j                  | ||||      S r  )r  r2  r  r?   r6  r   _upsample_bicubic2d_aar  s          r,   upsample_bicubic2d_aa_vecr  _  V     ){MREmQ/GmQ/G99>>00umWg r+   c                     t        | j                         ||      }t        |d      }t        |d      }t        j                  j
                  j                  | ||||      S r  )r  r2  r  r?   r6  r   _upsample_lanczos2d_aar  s          r,   upsample_lanczos2d_aa_vecr  k  r  r+   c                 z    t        | j                         ||      }|r|nd gt        |      z  }t        | |||      S r5   )r  r2  r  _upsample_linear)r   r  r  r  r  r  s         r,   _upsample_linear_vecr  w  s=     ){MRE+]$#e*1DFE5-@@r+   r  c                      t        | |||g      S r5   r  )r   r  r  r  s       r,   upsample_linear1dr    s     E;zJJr+   c                 "    t        | ||||g      S r5   r  )r   r  r  r  r  s        r,   upsample_bilinear2dr    s     E;(?STTr+   c                 $    t        | |||||g      S r5   r  )r   r  r  r  r  r  s         r,   upsample_trilinear3dr    s!     {MHh+I r+   c                 L    |r|dkD  r| dz
  |dz
  z  S dS |
|dkD  rd|z  S | |z  S )Nr"   rg   r   r*   )r  r  r  rn   s       r,   _compute_scaler    sB    5=\#(S.1HqH#/EAIsU{U7XCUUr+   c                 &    |r| |z  S | |dz   z  dz
  S Nr   r*   )rn   	dst_indexr  s      r,   _compute_source_indexr    s$    y  	C(3..r+   weightsweights_precisionc                     t        d t        | |      D              d|dz
  z  z   }||z	  }t        j                  |dd      j	                  t        j
                        S )Nc              3      K   | ]F  \  }}|j                  t        j                        |j                  t        j                        z   H y wr5   )r8   r?   r>  )r  r  r  s      r,   r  z%_sum_tensors_uint8.<locals>.<genexpr>  s8      26!QU[[ADD--s   AAr"   r      )_sum_tensorsr  r?   r   r8   ry  )r  r  r  r  s       r,   _sum_tensors_uint8r    sd      :=c7:K 	
 1$	%'F ((F;;vq#&))%++66r+   c                     t        j                  |       j                         }d}t        j                  ||j                        }d|d|dz   z  z  z   }|dk\  }||j                         z
  S )N   r  r   r"   i   )r?   r=  r   r  r  r   )r  
max_weightmax_weight_precision
precisionsr  r  s         r,   _compute_weight_precisionr    si    W%))+J2:;L;LMJ:zA~!677FgD$((*,,r+   c                 L     j                   d   } j                   dd  }t        |      }t        j                   t        j                  j
                        \  } fd}t        t        |||            D 	
cg c]  \  }	\  }
}} ||
|||dz
  |	z
         }}}
}	}t        t        |       \  }}}g }t        ddgg|z   D ]c  }d d gt        |      D cg c]  }||   dk(  r||   n||    c}z   }t        j                   |      }t        |      }|j                  |       e t        t        |            D ]p  }	||	   ||	   z
  j!                  dd      j#                        }t        |d d d   |dd d         D cg c]!  \  }}|t%        j&                  ||z
  |      z   # }}}r t        |      dk7  rt)        dt        |             |d   }t        j*                         } j,                  j.                  d	k(  r|d
k  rt$        j0                  }t3        |t$        j4                        s!t)        dt/        |      j6                         |j9                  |      } j;                         s|j=                         }|S c c}}}
}	w c c}w c c}}w )Nr"   r#   r|  c                 |   t        | |	|      }t        j                  |j                        j	                  
      }t        ||	      j                  d      } |j                  |j                  d   gdg|z   }|j	                  t        j                        }|dz   j                  | dz
        }|||fS )Nr  r   r   r   r   r"   r   )
r  r?   r  r  r8   r  r   r*  r  r  )inp_sizer  r  nsqueezescale_factorr  x_f32r9   xp1r  r   r   s            r,   
get_valuesz$_upsample_linear.<locals>.get_values  s    %h-P LL%,,7:::G%lA}EKKPSKTekk!n@sh/?@HHU[[!1umm1m-a}r+   r   r   rg   z+Expected vs to have exactly 1 element, got r     z$Expected result to be a Tensor, got r\  )r  r  rD   rE   r  INT_TO_FLOATrH  r  ry  r
   rT   r   r  r   r  r_  r   r8   r?   r   r0  r   r  r  r`  r7   r   r$   r  ru  round)r   r  r  r  r  	inp_sizesn_dimsrV   r  r  r  r  r  xs_f32xsxp1svsrN  kr  vxscalev1v2r  r]  r   s   ` `                       @r,   r  r    s    QJABI^F''!AANNHAu
 09	;/0
 +A+(F 	8XvvzA~>F  CL)FB	B1vh'( TluV}U!qtqybed1g=UUuc*#Au-
		!	 eFm$ 
)be#**3477> b1gr!$Q$x0
 B 27F++
 

 2w!|J3r7)TUUUF //6M ||F"zB//fell+24<3H3H2IJ
 	
 ];F""$MY V
s   J
J&J rN  rO  c                 4    | j                   |j                   k(  S r5   r  )rN  rO  s     r,   is_same_sizer    s    77aggr+   c                 .    t         j                  | |      S r5   )r   r  )r9   r  rF   s      r,   _reshape_aliasr  $  s     99Qr+   c                 .    t         j                  | |      S r5   )r   r  )r9   r  s     r,   r  r  *  s    ::a!!r+   c                 2    t         j                  | |||      S r5   )r   r  )r9   r  r|   r)  s       r,   r+  r+  /  s    >>!WeZ88r+   c                    |D ]F  }|t        j                  |j                  t         j                  t         j                  fv d        H t        j                  |j                  t         j
                  k(  d        ddlm}  || j                         dk(        r<t         j                  j                  | |      }| j                  |j                  |      S t        t        |            D ]2  }||   }||j                  d| j!                  |      dz
        ||<   4 t"        j%                  | |      j'                  | |      S )Nc                       yNz3tensors used as indices must be long or int tensorsr*   r*   r+   r,   r   z&_unsafe_masked_index.<locals>.<lambda>:  r  r+   c                       yNz*tensors used as masks must be bool tensorsr*   r*   r+   r,   r   z&_unsafe_masked_index.<locals>.<lambda>?  r  r+   r   r  r"   r  )r?   r   r   r  r  r  rw  r  r   r  meta_index_Tensorr   r  rT   r  r   r2  r   r  r  )r9   r  r  fillr  r  meta_resultr  s           r,   r  r  4  s    LL

EII66M 
LL

ejj <
 Eaggi1n%//AA!WMzz+++T223w<  ?
q	A>GAJ?
 a)55teTBBr+   c                 L   |D ]F  }|t        j                  |j                  t         j                  t         j                  fv d        H t        j                  |j                  t         j
                  k(  d        | j                         dk(  r| j                         S t        t        |            D ]B  }||   }||j                  | j                  |       | j                  |      dz
        ||<   D |j                  | d      }t        j                  | ||d      S )Nc                       yr  r*   r*   r+   r,   r   z5_unsafe_masked_index_put_accumulate.<locals>.<lambda>V  r  r+   c                       yr  r*   r*   r+   r,   r   z5_unsafe_masked_index_put_accumulate.<locals>.<lambda>[  r  r+   r   r"   r  Tr(  )r?   r   r   r  r  r  r   r  rT   r  r   r2  r  r   r+  )r9   r  r  r  r  r  masked_values          r,   r  r  P  s     LL

EII66M 
LL

ejj <
 	wwyA~wwy3w<  H
!&&)QGGAJH
 %%teQ/L!!!Wlt!LLr+   c                    | j                         }d}|dk  rd}|6|dkD  r*dg|z  }|j                  d   ||<   |j                  |      }n|}| |z  } t        j                  ||k7  |d      }	|	j                  |      }
t        j                  | ||
      j                  |       }t        j                  ||k7  |d      }|t        j                  j                  k(  r|dkD  r| j                  dd      }||fS |lj                  | j                        }t        j                  |||
      j                  |      }t        j                  ||k7  |d      }|j                         }n"||k7  j                         j                  |       }|t        j                  j                  k(  r|j                         }||fS |t        j                   j                  k(  r|j                         |z  }||fS )Nr"   r#   r   r*   r   )rO   r  r  r?   ri   rU   gatherr   r!   r'   r|   r   r  r   r8   r)   r(   )r{   r   r   r   r&  r  r+  r  wr,  safe_target_r  r'  wsums                 r,   _nll_loss_forwardr  j  s    XXZFKzA:E "(aE+E"AAax++f4fa@K((5L ll4l;CCKPPF[[</;FINN(((VaZ}}R-|##HHTZZ ||A{L9AA+N{{6\14;xxz,.33588>IMM''' < 
inn**	*,<r+   c                 p     j                         dkD  r j                         dk  st        d j                          d      j                         dkD  rt        dj                          d       j                         dk(  xr j                         dk(  }|s7t        j                   j                  d   j                  d   k(   fd        j                  d   }|A|j                         dk(  r|j                         |k(  st        d	| d
|j                         t         |||      S )Nr   r#   r>  r?  r"   r@  c                  >    d j                    dj                    dS )NrA  rB  rC  r  )r{   r   s   r,   r   z"nll_loss_forward.<locals>.<lambda>  s     0Jv||nTUV r+   rS   z/weight tensor should be defined either for all z7 classes or no classes but got weight tensor of shape: )rO   r0  r?   r   r  r   r  )r{   r   r   r   r&  rE  	n_classess   ``     r,   nll_loss_forwardr    s#    HHJNtxxzQDTXXZLPQRSSzz|aOPVPZPZP\~]^_
 	
 88:?8vzz|q'8LJJqMV\\!_,V	

 

2I6::<1#499T=i[ I//5||n>
 	

 T669lKKr+   c                      t        | ||||      S r5   )r  )r{   r   r   r   r&  s        r,   nll_loss2d_forwardr    s     T669lKKr+   Ac                 0    |dz   | z  |dz   z
  | z  | z  dz   S )Nr#   r   r"   r*   r9   r  s     r,   _upsample_cubic_convolution1r    s(    UaK1q5!Q&*Q..r+   c                 <    || z  d|z  z
  | z  d|z  z   | z  d|z  z
  S )Nr     rH  r*   r  s     r,   _upsample_cubic_convolution2r    s0    UQU]a!a%'1,q1u44r+   rh  c                    d}| j                   t        j                   d      k(  rt        j                  | d| z
  gd      }t        j                  | dz   d| z
  gd      }t        ||      }t	        ||      }t        j
                  |d      \  }}t        j
                  |d      \  }}	|||	|fS t        | dz   |      t	        | |      t	        d| z
  |      t        d| z
  |      fS )Ng      r  rg   r   r   r   )r  r?   r=  r  r  r<  )
rh  r  tt1tt2w03w12r#  r&  r$  r%  s
             r,    _upsample_get_cubic_coefficientsr    s    Axx5<<&&kk1cAg,A.kk1s7C!G,!4*32*32cq)Bcq)B2r2~ )S!4(A.(q!4(q!4	
 	
r+   coeffstsc                 P    t        |      }t        d t        | |      D              S )Nc              3   ,   K   | ]  \  }}||z    y wr5   r*   r  r  r  s      r,   r  z+_upsample_cubic_interp1d.<locals>.<genexpr>  s     EHRREr  )r  r  r  )r  r  coeffs2s      r,   _upsample_cubic_interp1dr    s$    .r2GEFG0DEEEr+   c                 6    t        t        j                  |       S r5   )r   r?   r7  )r  s    r,   r  r    s    %))R  r+   	num_stepsc                     | dk  rt        j                  d||      S |s| dz
  | z  nd}t        j                  | || ||      S )Nr"   r   r  )stepsr  r   )r?   r  linspace)r  r  r   r  rN  s        r,   _linspace_from_neg_oner    sI     A~||AfE::-:)a-9	$A>>1"ayuMMr+   thetahr  c                    | j                   }| j                  }t        ||||      j                  d|d      }t        ||||      j                  |dd      }t	        j
                  d||      }t        j                  j                  j                  |ddd      }t        j                  j                  j                  |ddd      }t        j                  j                  j                  |d	dd      }||z   |z   S )
Nr"   )r"   r"   r"   r  )r   r#   constantr   r  r)  r|   r"   r"   )r#   r   	r   r  r  r  r?   r  r  rJ  r  )	r  r  r  r  r   r  grid_xgrid_ygrid_ones	            r,   _make_base_grid_4dr     s    KKE\\F $A}eVDII!QPQRF#A}eVDII!QPQRFzz)5@H XX  $$VjPQ$RFXX  $$VjPQ$RFxx""&&xV*TU&VHF?X%%r+   r  c                    | j                   }| j                  }t        ||||      j                  dd|d      }t        ||||      j                  d|dd      }t        ||||      j                  |ddd      }	t	        j
                  d||      }
t        j                  j                  j                  |ddd      }t        j                  j                  j                  |ddd      }t        j                  j                  j                  |	d	dd      }	t        j                  j                  j                  |
d
dd      }
||z   |	z   |
z   S )Nr"   )r"   r"   r"   r"   r  )r   r   r  r   r  )r"   r#   )r#   r"   )r   r   r   )r  r  r  r  r  r   r  r  r  grid_zr  s              r,   _make_base_grid_5dr    s5   KKE\\F#A}eVDII!QPQSTUF#A}eVDII!QPQSTUF#A}eVDII!QPQSTUFzz,eFCH XX  $$VjPQ$RFXX  $$VjPQ$RFXX  $$VjPQ$RFxx""&&xV*TU&VHF?V#h..r+   c                     |\  }}}}t        | |||      }|j                  ddd      | j                  j                  d      z  j	                  d      }|j                  |||d      S )Nr  rS   r   r"   r^  r#   )r  r  rb  rU   r   )	r  r2  r  rW  rV   r  r  	base_gridgrids	            r,   _affine_grid_generator_4dr  "  sg    JAq!Q"5!QmLI NN2q!$uxx'9'9!'<<AA"ED99Q1a  r+   c                     |\  }}}}}t        | ||||      }|j                  ddd      | j                  j                  d      z  j	                  d      }	|	j                  ||||d      S )Nr	  rS   rH  r"   r^  r   )r  r  rb  rU   r   )
r  r2  r  rW  rV   r  r  r  r
  r  s
             r,   _affine_grid_generator_5dr  ,  sm    MAq!Q"5!QOI NN2q!$uxx'9'9!'<<AA"ED99Q1a##r+   c                     t        j                  t        |      dv d        t        |      dk(  rt        | ||      S t	        | ||      S )Nr8  c                       y)NzCaffine_grid_generator needs 4d (spatial) or 5d (volumetric) inputs.r*   r*   r+   r,   r   z'affine_grid_generator.<locals>.<lambda><  r  r+   rH  r	  )r?   r   r  r  r  )r  r2  r  s      r,   affine_grid_generatorr  6  sJ     
LLD	VU 4yA~(MRR(MRRr+   r  interpolation_modepadding_mode_expand_gridc           	          !"#$%&'()*+,-./012 t        j                  dv fd       t        j                  dv fd       dt        dt        dt        ffd2dt        dt        d	t        dt        fd
0dt        dt        dt        f0fd$dt        dt        dt        f$2fd} j                  \  !()|j                  \  }./}|dk7  rt        d|       ddlm}	m}
 t        j                  t         j                        j                  } j                  j                  dv xr  |	 |
(|k  )|k              }|rt         j                  nt         j                  +r(|j                  !d./|      j!                  !./d      }dt        dt        dt        f()fd*t        j"                  ! j                        j                  !ddd      "t        j"                   j                        j                  ddd       dt        dt        dt        dt$        f!*+./fd#dt        dt        dt        f " #fd&|d   }|d   }dk(  r ||)      } ||(      }|j'                         |j'                         c,-,dz   -}},-dz   }}||}}||z
  ||z
  z  }||z
  ||z
  z  }||z
  ||z
  z  }|,z
  |-z
  z  }t)        &fd,-|f|||f|||f|||ffD              S dk(  r< ||)      } ||(      }|j+                         }|j+                         } &||d      S  2|)      } 2|(      }|j'                         ,|j'                         -|,z
  1|-z
  }s"1j-                  d      1|j-                  d      }dt        dt        dt        f$&()fd'd t        dt        f',-1fd!%t/        %fd"t1        d#      D              }t3        ||      S )$N)r   r"   r#   c                      d  S )NzInvalid interpolation mode r*   )r  s   r,   r   z"_grid_sampler_2d.<locals>.<lambda>U  s    -.@-AB r+   c                      d  S )NzInvalid padding mode r*   )r  s   r,   r   z"_grid_sampler_2d.<locals>.<lambda>X  s    -B<.+Q r+   coordsr2  rP   c                 B    r|dz  dz
  n|dz  }|dz  dz
  }| |z  |z   S r  r*   )r  r2  r   ofsr  s       r,   unnormalizez%_grid_sampler_2d.<locals>.unnormalize[  s8     %2tczCs
Sj3|c!!r+   	twice_low
twice_highc                 P   ||k(  rt        j                  |       S |dz  }||z
  dz  }| |z
  j                         }t        j                  ||      }||z  j	                         j                  t         j                        }t        j                  |dz  dk(  ||z   ||z   |z
        S )Nr#   r   r"   r   )r?   r  r   fmodfloorr8   int8ri   )r  r  r  
coords_mincoords_spancoords2extraflipss           r,   reflect_coordinatesz-_grid_sampler_2d.<locals>.reflect_coordinatesf  s    
"##F++]
!I-2J&++-

7K0;&--/222D{{AINEJ.j0H50P
 	
r+   c                     dk(  r| S dk(  rt        j                  | d|dz
        S r | dd|dz
  z        }n | dd|z  dz
        }t        j                  |d|dz
        S )Nr   r"   r#   rS   r   )r  r2  coords_reflectedr  r  r'  s      r,   compute_coordinatesz-_grid_sampler_2d.<locals>.compute_coordinatesr  sx    1MQ;;vq$(33#6vq!tax.#Q #6vr1t8a<#P ;;/D1H==r+   c                 (     | |      } ||      S r5   r*   )r  r2  	coords_unr*  r  s      r,   compute_source_indexz._grid_sampler_2d.<locals>.compute_source_index~  s    -	"9d33r+   r#   z4grid last dimension must be 2 (for x,y coords), got r   )r  sym_and)r  xpur"   r  ysc                     t        j                  d| k  t        j                  | k  t        j                  d|k  |k                    S rs   r?   r  )r  r0  iHiWs     r,   in_bounds_condz(_grid_sampler_2d.<locals>.in_bounds_cond  sF      GU&&rBw0A0A!r'2PR70ST
 	
r+   r  wsc                      | |      rndt        
fd| j                  	      |j                  	      |fD              S )Nr"   c              3   p   K   | ]-  }t        j                  |d       j                         / ywr  )r?   ri   r  )r  rh  r  r  r  oHoWs     r,   r  z1_grid_sampler_2d.<locals>.clip.<locals>.<genexpr>  s7      
 KKa#((Ar26
s   36r   )r  r8   )r  r0  r6  r  r  r  r  r  r5  index_dtyper9  r:  s      @@r,   clipz_grid_sampler_2d.<locals>.clip  sQ    b"%
 A1 
ee+e.K0H"M
 
 	
r+   ixiyc                 8     	| ||      \  }}}||f   |z  S r5   r*   )
r=  r>  r  idx_xidx_yw_C_idxN_idxrN  r<  s
         r,   get_summandz%_grid_sampler_2d.<locals>.get_summand  s0    B?ubue+,r11r+   ).r   ).r"   c              3   :   K   | ]  \  }}} |||        y wr5   r*   )r  r=  r>  r  rE  s       r,   r  z#_grid_sampler_2d.<locals>.<genexpr>  s(      
R B"
s   c                 <     |       } |      } ||d      S r\   r*   )r=  r>  r9   rZ   r*  rE  r3  r4  s       r,   get_value_boundedz+_grid_sampler_2d.<locals>.get_value_bounded  s*    #B+A#B+Aq!Q''r+   r  c                     | dz
  z   } dz
  |       |       dz   |       dz   |      f}t        |      S )Nr"   r#   )r  )r  iy_ofscsrH  ix_nwiy_nwtxs      r,   	get_coeffz#_grid_sampler_2d.<locals>.get_coeff  s[    cAg&F!%!)V4!%0!%!)V4!%!)V4	B ,B33r+   c              3   .   K   | ]  } |        y wr5   r*   )r  r  rO  s     r,   r  z#_grid_sampler_2d.<locals>.<genexpr>  s     :#y~:   rH  )r?   r   r   r  r  r0  rw  r  r.  r  r>  r   r  r  r  r  r  r  r   r   r  r  rU   r  rT   r  )3rN  r  r  r  r  r  r-  rV   twor  r.  	int32_maxuse_32bit_indicesr9   rZ   r=  r>  ix_neiy_neix_swiy_swix_seiy_sew_nww_new_sww_se
ix_nearest
iy_nearesttyr  r  rC  r  rD  r<  r*  rO  rE  rH  r3  r4  r5  r;  rL  rM  r9  r:  r'  rN  r  s3   ` ````                         @@@@@@@@@@@@@@@@@@@@r,   _grid_sampler_2drb  D  s"    
LLi'B 
LL	!#Q"F "# "& "

F 

s 

 

PV 


>F 
># 
>& 
>4V 43 46 4 77LAq"bZZNAr2s
axB3%H
 	
 NEKK(,,I 8 ^iy1> "3%++K yyAr2s+221aRC
6 
v 
& 

 LL188,11!Q1=ELL188,11!Q1=E

 

V 

 

4F 

 

2 2F 2& 2 2
 	VAVAQ!!R(!!R(xxz288:uqy%ueaiueu
urz*U
urz*
rEz*U
rEz* 
 t$t$t$t$	 
 
 	
 
q	 !!R(!!R(XXZ
XXZ
:z155BB

%Z%ZaBaB	(& 	(f 	( 	( 	(
	43 	46 	4 	4 :q::'33r+   c                 "    t        | ||||      S )N)r  r  r  r  )rb  )rN  r  r  r  r  s        r,   grid_sampler_2drd    s      	-!# r+   c                 &    t        j                   j                         dk(  xr j                         dk(   fd       t        j                   j                  d      j                  d      k(   fd        z  j	                  d      S )Nr#   r"   c                  L    d j                          dj                          S )Nzmatrix @ vector expected, got r  r   r{   r  s   r,   r   zmv.<locals>.<lambda>  s!    0BswwykJ r+   r   c                  v    d j                  d       d j                  d       dj                  d       dS )Nzsize mismatch, got input (r   r9   r"   z), vec (rC  rF  rg  s   r,   r   zmv.<locals>.<lambda>  s<    ,TYYq\N!DIIaL>RURZRZ[\R]Q^^_` r+   r   )r?   r   rO   r2  r   rg  s   ``r,   r  r  
  ss     
LL
a*CGGINJ 
LL		!#` 3J""r+   c                     |-|dz
  |z  dz   }d|z
  | z  |t        j                  |       z  z
  }nd|z
  | z  t        j                  |       z
  }|||z  }|j                  |j                        }t	        ||      S r\   )r   
logsigmoidr8   r   r   )r{   r   r   
pos_weightr   
log_weightr   s          r,    binary_cross_entropy_with_logitsrm    s    
  1n.2
F
d"j1<<3E&EFF
d"Q\\$%77f} 776<< Di00r+   tensor1tensor2is_outc                   	 | j                   |j                   k\  r| |fn|| f\  }}ddlm	 |j                   dk\  r|j                   dk  sy|j                  r|sy| j                   dk(  ry 	t	        |      dk(        ry|j
                  }|j                         }dg}t        |dd        D ]  }|j                  ||d   z          t        	fd	t        |t        t        |            |      D              S )
Nr   r  r   r#   FTr"   rS   c              3   V   K   | ]   \  }}} |d k(        xs  ||k(         " ywr  r*   )r  r   r   r2  r  s       r,   r  zshould_fold.<locals>.<genexpr>E  s9      D% 	tqy!B^DEM%BBs   &))r  rw  r  rg  	sym_numelr  rz  r_  r  r  r  ry  )
rn  ro  rp  t1t2t1_shape	t1_strideexpected_strider2  r  s
            @r,   should_foldry  -  s     $+<<7<<#?gwgwEWFBDGGqLRWW\	||qimq()xxH		I cO!"& ;tob&99:; !$tH_56"
  r+   )pass_is_out)rp  c                	   ddl m}m} | j                         }|j                         }|dk(  s|dk(  rt	        d| d|       |dk(  r|dk(  rt        j                  | |      S |dk(  r|dk(  rt        j                  | |      S |dk(  rC|dk(  r>t        j                  t        j                  t        j                  | d      |      d      S |dk(  r|dk(  rt        j                  | |      S t        | ||      r>||kD  }|r|j                  n| }|s|n|dk(  r| j                         n| }	|j                  }
t        |
d d       }t!        t"        j$                  |      }|	j                         dk(  }|r|j'                  |	j                  d          |j)                  ||
d         }|rWt
        j*                  j,                  j/                  |j                  |	      |      }|r|j                  j1                         S |S t
        j*                  j,                  j/                  |j                  |	      |      S |dk\  rp|dk\  rj|dkD  r| j3                  d      nd}| j3                  d      }| j                  d d }|dkD  r|j3                  d      n|j3                  d      }|dkD  r|j3                  d      nd}g }t5        |dz
        D ]"  }|j'                  |j3                  |             $ |d	k(  r|d	k(  r{ ||d   |d   k7        rj ||d   dk(        r'| j6                  rt9        | j                  d      |      S  ||d   dk(        r'|j6                  rt9        | |j                  d            S t        t        j:                  ||            }|||gz   }t=        |      }| j?                  |      j)                  |||      }|dk(  }|r7||gz   }|j?                  |      j)                  ||      j                  d      }n)|||gz   }|j?                  |      j)                  |||      }|}|dkD  r|j'                  |       |dkD  r|j'                  |       |r/|jA                  |      j                  d      jC                  |      S |jA                  |      jC                  |      S t        jD                  d
d        y )Nr   )r  guard_or_truez9matmul does not support 0-dimensional tensors, got dims: z and r"   r#   rS   r^  r   Fc                       y)Nz/both arguments to matmul need to be at least 1Dr*   r*   r+   r,   r   zmatmul.<locals>.<lambda>  r  r+   )#rw  r  r|  rO   r0  r?   dotr  r   r  rU   ry  rb  rh  r  ry  r   rE  r   r  r*  r6  r   _unsafe_viewr  r2  rT   rg  ra  broadcast_shapesr*  r  bmmr  r   )rn  ro  rp  r  r|  dim_tensor1dim_tensor2r1  rt  ru  sizes_1r5  folded_dim1t2_is_matrix	t1_foldedr  rW  m1batch_tensor1m2rV  batch_tensor2r  expand_batch_portiontensor1_expand_sizeexpand_batch_producttensor1_expanded
vector_rhstensor2_expand_sizetensor2_expandeds                                 r,   ra  ra  M  s    T++-K++-Ka;!+G}TYZeYfg
 	
 aK1,yy'**		kQ.xx))		kQ.}}UXXeoogq&A7KQOO		kQ.xx))	Wgv	.  +-	$WZZ'$G+:J799;PW 	 ((GCRL)X\\<8 vvx1}, JJ{GBK8	 YY^^00b1A<PF-6699'')BFB99>>..y||B/?NN		kQ. !,aGLLQ\\"cr*!,qW\\"gll26F +aGLLQ#%{Q' 	2A  a1	2 1q mA.-2BBCmA.!349N9Ngooa0'::mA.!349N9Ngwq'9::  $""=-@ 
 3aW<#$89 #>>*=>FF !R
 !A%
"6""=23-r21  #7"a"@&~~.ABJJ$b!  ,?"?"#''(89AA"EJJ<XX#''(89>>|LLUUVr+   r  r  c                 n     j                   \  }}t        |d   ||      }t        |d   ||      }t        j                   t        j                  j
                        \  }}t        j                  |d    j                        j                  |      }	t        j                  |d    j                        j                  |      }
t        ||
|      }t        ||	|      }|j                  d      }|j                         }|j                         }||z
  j                  dd      }||z
  j                  dd      }|j                  t        j                        }|j                  t        j                        }|dz
  ||dz   |d	z   f}|dz
  ||dz   |d	z   ft        |      t        |      }d
\  } j                   t        j"                  k(  rt%              t%        |      }D cg c]@  }|dz  z  t        j&                  |      dz  z   j                  t        j(                        B c}|D cg c]@  }|d|z  z  t        j&                  |      dz  z   j                  t        j(                        B }} fd fdt+        fd|D              } j                   t        j"                  k(  r|t-        d      t/        |||      }nt1        d t3        ||      D              }t        j4                         }|j7                  |      }|S c c}w c c}w )Nr   r"   r|  r  r   rS   r   rg   r#   r  r   c                     t        j                  | ddz
        }t        j                  |ddz
        }t        j                  d d ||g      }|S r  )r?   r   r   r  )r0  r  y_idxx_idxr  in_hin_wr   s        r,   load_boundedz0upsample_bicubic2d_default.<locals>.load_bounded	  sO    B4!8,B4!8,utT5%&@Ar+   c                      t         fdD              }j                  t        j                  k(  rt	        d      t        |      S t        d t        |      D              S )Nc              3   0   K   | ]  } |        y wr5   r*   )r  x_ofsr  rZ   s     r,   r  zCupsample_bicubic2d_default.<locals>.get_x_interp.<locals>.<genexpr>  s     Bl1e,Bs   z4weights_precision_x must not be None for uint8 inputc              3   ,   K   | ]  \  }}||z    y wr5   r*   r  s      r,   r  zCupsample_bicubic2d_default.<locals>.get_x_interp.<locals>.<genexpr>  s     JRBGJr  )r  r   r?   ry  r0  r  r  r  )rZ   src_xr   ixs_ofsr  weights_precision_x	weights_xs   ` r,   get_x_interpz0upsample_bicubic2d_default.<locals>.get_x_interp  sc    B'BB;;%++%"*$J  &eY8KLLJCy4IJJJr+   c              3   .   K   | ]  } |        y wr5   r*   )r  y_ofsr  s     r,   r  z-upsample_bicubic2d_default.<locals>.<genexpr>  s     ;%,u%;rQ  z4weights_precision_y must not be None for uint8 inputc              3   ,   K   | ]  \  }}||z    y wr5   r*   r  s      r,   r  z-upsample_bicubic2d_default.<locals>.<genexpr>  s     L(2rb2gLr  r\  )r  r  rD   rE   r  r  r?   r  r  r8   r  rU   r   r   r  r  r   ry  r  r   int16r  r0  r  r  r  r   r  )r   r  r  r  r  rV   h_scale_factorw_scale_factorr   r  r  x_floaty_floatr9   rZ   yscaler  iys_ofs	weights_yweights_precision_yr  src_yr  r]  r  r  r  r  r  r  r  s   `                       @@@@@@@r,   upsample_bicubic2d_defaultr    s    {{Aq$ $D+a.-QN#D+a.-QN''5#H#H#U#UHAu 	[^ELL9<<5<IA[^ELL9<<5<IA#NA}EG#NA}EG#GAA k  c*Fk  c*F	U[[A	U[[A1uaQA&G1uaQA&G08I08I/9,,{{ekk!7	B7	B 
 !**+ejjmc.AAEEekkR
	 
 !**+ejjmc.AAEEekkR
	 

K K ;7;;E{{ekk!& !WXX#E96IJLc%6KLL //6M];FMI

s   9AL-AL2c                 6   t        j                  t        |      t        |      z   dk(  d        |Q|t        d      t	        t
        t        t        f   t        d t        | j                  dd  |      D                    }|r|nd\  }}t        | ||||      S )Nr"   c                       y)Nz:Must specify exactly one of output_size and scale_factors.r*   r*   r+   r,   r   z(upsample_bicubic2d_vec.<locals>.<lambda>4  r  r+   z7scale_factors must not be None when output_size is Nonec              3   P   K   | ]  \  }}t        t        |      |z           y wr5   )r   r   )r  r  rn   s      r,   r  z)upsample_bicubic2d_vec.<locals>.<genexpr>=  s*      Au 	!u,-s   $&r#   r  )
r?   r   r  r0  r   r  r  r  r  r  )rN  r  r  r  r  r  s         r,   upsample_bicubic2d_vecr  '  s     
LL[D//14L   I  #s(O  #AGGABK ? 
 )6}<GW%amWgVVr+   c                 (      fd}t         ||      S )Nc                     t        j                  |  ||z   j                        }|dz
  |dz
  |j                         z
  j                         z
  S )Nr  r"   )r?   r  r  r   r   middler   dim_idxrN  s       r,   r  z_reflection_pad.<locals>.idxL  sF    ,,ufunQXXFzVaZ'++-7<<>>>r+   _reflection_or_replication_padrN  r  r  s   `  r,   _reflection_padr  F  s     ? *	 r+   c                 (      fd}t         ||      S )Nc                     t        j                  |  ||z   j                        }t        j                  |d|dz
        S )Nr  r   r"   )r?   r  r  r   r  s       r,   r  z_replication_pad.<locals>.idx]  s6    ,,ufunQXXF{{7Avz22r+   r  r  s   `  r,   _replication_padr  W  s     3 *	 r+   idx_fnc                    t        |      dz  t        j                  | j                         dz   dz   fv fd       | j                   d  }| j                         z
  }t              D cg c]  }|ddz
  |z
  z      }}t              D cg c]  }|ddz
  |z
  z  dz       }}| }t              D ]E  }d g|j                         z  }	 |||   ||   ||         |	||z   <   t        j                  ||	      }G | j                  j                  dv rt        j                  }
nt        j                  |       }
|j                  |
      }|S c c}w c c}w )Nr#   r"   c                  (    d  d dz    d dz    dS )Nreflection_padzd requires r"   r  r#   zD inputr*   r   s   r,   r   z0_reflection_or_replication_pad.<locals>.<lambda>p  s$    .[q	sQwiwO r+   )r  mpsr/  r\  )r  r?   r   rO   r  rT   r   r  r  r  r`  rD   r   r  )rN  r  r  	inp_shapenc_dimr  padding_leftpadding_rightr  r  r]  rO   s              @r,   r  r  h  sd   
 g,!
C	LL	C!GS1W%%O IUUWs]F8=c
C1GAq1-.CLC=B3ZHWQ#'A+.23HMHF3Z 1&**,. a)A,a@PQAJ##FC01 	xx}}..//33A6];FM1 DHs   1EEc           
          t        |      dz  |j                   d  D cg c]  }|dz
  	 }}t              D cg c]  }|ddz
  |z
  z      }}t              D cg c]  }|ddz
  |z
  z  dz       }}g }t        |j                        D ]c  }dg|j                  z  }	d|	|<   |j	                  t        j                  |j                  |   |j                        j                  |	             e |d   | d  }
d t              D cg c]  }|
|   ||   z    }}t              D cg c]  }||   |
|   z
   }}t              D cg c]  }d||   z  ||   z   |
|   z
   }}t              D cg c]  }||   d||   ||   z   ||   z   f }}t        j                  t        j                  t              D cg c]  } ||          c}      }t        j                   ||z   d      } fd}t        j                  t              D cg c]  }g d	 c} D ]  }|t!        dgz        k(  rg }g }t              D ]t  }||   dk(  r||   }||   }n=||   dk(  r||   }|
|   d||   f}n$||   dk(  r||   }|
|   ||   ||   z
  ||   dz
  f}|j	                         |j	                         v  ||||      } |S c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w )
Nr#   r"   rS   r  c                 F    | \  }}}t        j                  ||k\  ||k        S r5   r2  )index_ranger  lbubs       r,   index_range_conditionz7_reflection_pad_backward.<locals>.index_range_condition  s(    	2r  b!r'22r+   r   r   c           	      .   t        	      D ]*  }||   d   ||   d   k  }t        |t              s%|s(| c S  t        j                  t
        j                  |D cg c]
  } |       c}      }t
        j                  
||z   d      }| |z   S c c}w )Nr#   r"   r   )rT   r7   r  rL   r   r   r  r  )r   r   index_rangesr  upper_less_than_lowerr  r  grO  rO   rl   r  s           r,   r)  z,_reflection_pad_backward.<locals>.accumulate  s     s 	A$0OA$6a9K$K!/6;P	
 COPK";/P
 %%k4S#Fax Qs   B
)rS   r   r"   )r  r  rT   r  r  r?   r  r  r  rL   r   r   r  r  	itertoolsr
   r  )rl   r9   r  r  dhwr  r  r  r  rZ  xyzcenterleft_reflectright_reflectrange_cr  r   r)  rV   areaoutsr  r   r  rO  rO   r  s   `                       @@@r,   _reflection_pad_backwardr    s`   
 g,!
C''3$%.
)Q1q5
)C
)8=c
C1GAq1-.CLC=B3ZHWQ#'A+.23HMHG166] SS166\

1u||AGGAJqxx@EEjQRS
 	#A
3$%.C3 16c
;1c!f|A&;F;6;CjALOc!f,ALADI#JOqQQZ,q/1CF:OMO
 NSSVZHIAs1vQ/-2BBCG  eCjQ0<QD $$[$F
CHD !!c
#C1J#CD 45!s##s 	-AAw!|Qi%ajaB"1o"1vq,q/:aA#A&"1vs1va0@'@#a&1*MKK,	- $l3-40 Kc *CH2 <AO R& $Ds5   K K$$K)K.8K3K8K=L
&Lr   r   r  c                j    t        j                  | ||      }t        j                  | ||      }||fS )Nr  )r?   aminr  )r{   rO   r  r  r  s        r,   aminmaxr    s2     ::dW5D::dW5D:r+   r   c                    t         j                  t        j                  t        j                  |       d|       |||      S )Nr   r   )r   r   r?   ri   isnan)r{   rO   r  r   s       r,   nansumr    s2     88EKKD 11d;S'QV8WWr+   r   rr  r  r  rr  c          	      N    t         j                  j                  d| d||||      S )Nr   r"   r  r   r  
start_step)rn  r   rr  r  r  s        r,   arange_defaultr    s/     ;;!!	3vf "  r+   c          	      N    t         j                  j                  | |d||||      S )Nr"   r  r  )rm  rn  r   rr  r  r  s         r,   arange_startr  
  s/     ;;!!sAU6&Z "  r+   c                      ddl m}  || i |S )Nr   )out_dtype_dense)!torch._higher_order_ops.out_dtyper  )rF   rG   r  s      r,   out_dtype_decompr    s    AD+F++r+   marginc                 t   	
 t        j                          t        j                         j                  d   
 j                  d   	t        j                  |dk(  xs |dk(  d        t        j                   j
                  dk(  xr 	dk7   fd       t        j                  j
                  dk(  xr j                         
k(  
fd       Qt        j                        t        j                  j
                  dk(  xr j                         	k(  	fd       j                  d      t        j                   d      }||z
   z   }|j                  d      }|dk(  r|n||z  }|   z  }t        j                  	 j                  	      }t        j                  |k7  |d      }|t        j                  j                  k(  r|j!                         S |t        j"                  j                  k(  r |j%                         |j                  d   z  S |j!                  d
      S )Nr   r"   r#   c                       y)Nz only p == 1 and p == 2 supportedr*   r*   r+   r,   r   z#multi_margin_loss.<locals>.<lambda>/  r  r+   c                  "    d j                    S NzMExpected non-empty vector or matrix with optional 0-dim batch size, but got: r  r\  s   r,   r   z#multi_margin_loss.<locals>.<lambda>2  s    _`e`k`k_lm r+   c                  (    d  dj                    S )Nz#inconsistent target size, expected r"  r  )nframer   s   r,   r   z#multi_margin_loss.<locals>.<lambda>6  s    5fXYv||nU r+   c                  (    d  dj                    S )Nz#inconsistent weight size, expected r"  r  )rO   r   s   r,   r   z#multi_margin_loss.<locals>.<lambda><  s    9#i~V r+   r  r  r   )r?   
atleast_2d
atleast_1dr  r   r  r   rU   r  rc  r  r  ri   r!   r(   r|   r   r)   r   )r   r   rV  r  r   r   urj   r  rO   r  s   ``  `    @@r,   multi_margin_lossr     s    U#Ef%F[[^F
++a.C	LLa!16#MN	LL

a$C1Hm 
LLq5V\\^v5U !!&)KK163!6V	
 a FU0A
UA	AA!VQAv
,,s5<<
0CC6M1a(AINN(((vvx	imm))	)uuw##vv!v}r+   	is_targetc                    | j                   |j                   t        j                  |       } t        j                  |      }| j                   d   }t        j                  t	              dk  xr |dk7  fd       t        j                  t	              dk  xr k(  fd       t        j
                  ||j                        }|dk(  }t        j                  t        j                  |||      dd	      }||k  }t        j                  ||d      }t        j                  | d|
      }	t        j                  ||d      }
t        j                  ||
j                  d      k(  d      }d|	j                  j                  d      z
  | z   }|j                  d      }||z  }t        j                  |d|      }|t        j                  j                   k(  r!|j#                  d      j%                         }n@|t        j&                  j                   k(  r|j#                         }n|j#                  d      }|j)                  | j*                        j-                        }||fS )Nr"   r#   r   c                      d  S r  r*   )orig_input_shapes   r,   r   z0multilabel_margin_loss_forward.<locals>.<lambda>^  s    _`p_qr r+   c                      d d  S )Nzinconsistent target size: z for input of size: r*   )r  orig_target_shapes   r,   r   z0multilabel_margin_loss_forward.<locals>.<lambda>b  s    ,->,??STdSef r+   r  rS   Tr  r  r   rg   )r   rS   )r  r?   r  r   r  r  r  r  ri   r  rD  rU   Trc  r!   r(   r|   r   r   r)   r8   r   r*  )r   r   r   rO   r  is_endend_idxtarget_masktidx0r  tidx1r  rj   r  r   s                @@r,   multilabel_margin_loss_forwardr  O  s    {{U#Ef%F
++a.C	LL"/saxr 
LL!#M(9=M(Mf
 ,,s6==
1Cr\FjjVS#6BMG-KKKVQ/EU%0AKKVR0E		#R!88a@Iaccmmm##e+A	AA	CAIq!$AINN(((EEgE##%	imm))	)EEGEEgEU[[)112CDIi<r+   )	attn_maskrn   querykey	dropout_p	is_causalr  c                    t        j                  t        j                          fd       t        j                   j                         dk(  xr( j                         dk(  xr j                         dk(   fd       t        j                  dk(  fd       t        j                   j                  d   j                  d   k(  xr j                  d   j                  d   k(  d        t
        j                  j                   ||d | j                  d      j                  d      k7  		      \  }}|j                  d
ddd      j                  t         j                        j                  dd
dd      }||fS )Nc                  "    d j                    S )Nz-query must be FP32, FP64, BF16, FP16 but got r   )r	  s   r,   r   z<scaled_dot_product_flash_attention_for_cpu.<locals>.<lambda>  s    ?}M r+   rH  c                  n    dj                          d j                          dj                          S )Nz,q, k, v must be a 4 dimensional tensor, got r  r   )r
  r	  r|   s   r,   r   z<scaled_dot_product_flash_attention_for_cpu.<locals>.<lambda>  s3    >uyy{m2cggi[XZ[`[d[d[fZgh r+   r   c                      d  S )Nz&dropout probability must be zero, got r*   )r  s   r,   r   z<scaled_dot_product_flash_attention_for_cpu.<locals>.<lambda>  s    $J9+"V r+   r   c                       y)Nz&q, k, v should have the same head sizer*   r*   r+   r,   r   z<scaled_dot_product_flash_attention_for_cpu.<locals>.<lambda>  r  r+   r"   )r  r  r  dropout_maskrn   
enable_gqar#   r   r\  )r?   r   ru  rO   r  r   "_scaled_dot_product_attention_mathr  r2  r  r  r`  )	r	  r
  r|   r  r  r  rn   r  attns	   ````     r,   *scaled_dot_product_flash_attention_for_cpur    sV    
LL&M 
LL		q@SWWY!^@		q0@h 
LLSV 
LLA%++a.(KSYYq\U[[^-K8
 ::BB::a=CHHQK/ C 
LFDF 	q!Q"	%"9"9	:	Aq!	 
 4<r+   c                 .    t        |       fd       }|S )Nc                  <     | i |}| d   j                  |      S rs   )rO  )rF   rG   r   outplace_ops      r,   
inplace_opz$register_inplace.<locals>.inplace_op  s%    4*6*Aw}}S!!r+   r   )aten_opr  r  s    ` r,   register_inplacer    s"    G$" %" r+   c                 B   | j                         s&| j                         st        |      }t        |      }t        j                  ||      }t        |t        j                        r|dk7  r||z  }|dk(  r|S t        |t        j                        r|dk7  r| |z  } | |z   S rg  )ru  r  r  r?   r  r7   numbersNumber)r{   batch1batch2rc   rm   r  s         r,   baddbmmr"    s     !!#DOO,=4yE
YYvv&FeW^^,
%qydGNN+tqyd{&=r+   c                 2    t        j                  | |d      S )Nr   r  r  )r{   r   s     r,   floor_divider$    s     99T588r+   c                 `    t        j                  t        j                  | j                  d      S r\   )rL   r   rE  r   r  )rh  s    r,   rs  rs    s    HLL!''155r+   r   r   c                    |"t         j                  j                  | g |      S t         j                  j                  | g ||      S )Nr   r&  )r   r   dim_IntListIntList_out)r{   r   r   s      r,   sum_defaultr*    sC     {xx##D"E#::xx##D"Es#CCr+   c           	          t        | t        j                        s| S |@t        j                  j                  | t        t        | j                                           S t        j                  j                  | |g      S r5   )	r7   r?   r   r   r   dimsry  rT   rO   )r{   rO   s     r,   squeeze_defaultr-    s\     dELL)
{||  tE$((*,='>??||  u--r+   c                 2   t        fdt        t        | j                              D              }|j                  t
        j                  k(  rt
        j                  nd }| j                  d|d|      }| ||j                  |j                        z  z  |fS )Nc              3   .   K   | ]  }|k7  s	|  y wr5   r*   )r  r  rO   s     r,   r  z)_weight_norm_interface.<locals>.<genexpr>  s     @1qCxQ@s   
r#   T)r  r   )
r  rT   r  r  r   r?   rf  r  r  r8   )r  r  rO   keep_dim
norm_dtyper  s     `   r,   _weight_norm_interfacer2    st     @c!''l 3@@H !5>> 9tJ66!Xt:6>DDGGAGG$$%t++r+   assume_uniqueinvertc                   t        | t        j                        s!t        j                  | |j                        } t        |t        j                        s.|rt        j
                  | |      S t        j                  | |      S ddlm}  ||j                         dt        | j                         d      z  k        rt        | ||      S t        | |||      S )Nr  r   r  g      $@g(\?r5  r3  )r7   r?   r   r  r  ner
  rw  r  r   r   isin_defaultisin_sorting)elementstest_elementsr4  r5  r  s        r,   isinr=    s     h-&&x8L8LMmU\\288Hm4488Hm44Dm))+dS9I55Q.QQRHmFCCm=
 	
r+   )r  c                B   |?t        j                  | j                         t         j                  | j                        }n?t        j                  | j                         |t         j                  | j                        }|| k  j                  | j                        }|S )Nr  )r  r   r  )r?   randr2  r   r  r8   r   )r{   r  raw_prV  s       r,   	bernoullirA  1  sq     

499;emmDKKP

IIK--;;	
 
$**%AHr+   r7  c                   | j                         dk(  r%t        j                  | t        j                        S |j                  dk(  r| |k(  }|r| S |S | j
                  d|j                  z  z   }| j                  |      }t        t        d|j                   dz
  d            }||k(  j                  |      }|r| S |S )Nr   r   r"   rS   r"   r   )
r   r?   
empty_liker  r  r  r  r  rT   rD  )r;  r<  r5  rx  expanded_elem_shaper9   rO   s          r,   r9  r9  D  s    ~~1

;;Q-'t&3&"..4-2D2D+DD)*A
b=---126
7C
"
"s
"
+CC4"s"r+   c                   | j                         }|j                         }|rt        j                  ||g      }t        j                  |d      \  }}|dd  |d d k(  }	t        j                  |	ddgd      }	|r|	j                         }	t        j                  |	      }
|
j                  d||	      }
|
d| j                          j                  | j                        S t        j                  |      \  }}t        j                  ||      }t        j                  ||j                         k  |d      }||   |k(  }|r|j                         n|}|j                  | j                        S )NT)stabler"   rS   r   F)r@  r?   r4  sortr  logical_notrD  r  r   r*  r  searchsortedri   )r;  r<  r4  r5  elements_flattest_elements_flatall_elementssorted_elementssorted_orderduplicate_maskr  sorted_test_elementsrV   r  test_idxcmps                   r,   r:  r:  Q  sN   $$&M&..0 yy-1C!DE(-

<(M%(,0DD..~1vuM+779N/q,?A()11(..AA"'**-?"@a  !5}E;;s%9%?%?%AA3J"8,=#)coos{{8>>**r+   c                 .    | j                  d      }||   S rR   )r*  )r{   r  	flatteneds      r,   takerV  n  s     R IUr+   c                     |t         j                  }|t         j                  k(  rt        |      }t        j                  | |j                  |      S r6  )r?   r`  preserve_formatr   r   resizer  )r{   r   r]  s      r,   	resize_asrZ  u  sD    //----e4;;tU[[;FFr+   c                 |   t        j                         rt        S | j                  rt        S | j                  j
                  dk(  rt        S |j                  d      }|j                  d      }	| j                  d      }
| j                  d      }|j                         dk(  }|s3|j                  d      }| j                  d      } |j                  d      }|j                  d      }|j                  d      }| j                  t         j                  t         j                  fv }|rt         j                  n| j                  }t        j                  ||z  ||	z  || j                        }| j                  ||z  |
|z        }|j                  ||z  |
|z        }|r|j                  t         j                        }|j!                  d||      }|j                  ||||	      }|r|j                  | j                        }t#        j$                  |      }|j'                  |      }|s|j)                  d      }|S )	u  
    Decomposition of max_pool2d_with_indices_backward using scatter_add.

    This replaces the native implementation with a high-level decomposition
    that uses scatter_add for gradient accumulation. The scatter-based approach
    provides automatic optimization opportunities for Inductor and handles all
    pooling configurations without requiring specialized fallback paths.

    Algorithm:
        For each output gradient position, use the corresponding index from the
        forward pass to scatter the gradient to the input position. When multiple
        output positions select the same input position as max, scatter_add
        automatically accumulates their gradients.

    Complexity: O(B * C * H_out * W_out)
        Independent of kernel size, unlike traditional O(B * C * H_in * W_in * K²)
        approaches that iterate over input positions and kernel windows.

    Known Limitations:
        - FP16/BF16: Uses FP32 accumulation internally to preserve precision when
          many gradients accumulate to the same position (overlapping pooling windows).
          This adds slight overhead but ensures numerical stability.
        - Deterministic mode: Falls back to native implementation to ensure
          consistent results across runs

    Args:
        grad_output: Gradient w.r.t. pooling output [B, C, H_out, W_out]
        self: Original input tensor (for shape) [B, C, H_in, W_in]
        kernel_size: Pooling kernel size
        stride: Pooling stride
        padding: Pooling padding
        dilation: Pooling dilation
        ceil_mode: Whether to use ceil for output size calculation
        indices: Indices from forward pass (per-channel linear positions)

    Returns:
        Gradient w.r.t. input [B, C, H_in, W_in]
    r  r^  rS   rH  r   r"   r  r\  )r?   $are_deterministic_algorithms_enabledr0  r  r  r  r2  rO   rU   r   r   rf  r   r  r*  r8   scatter_addrD   r   r  r   )rl   r{   r  rz  r  r  r  r  	in_heightin_width
out_height	out_widthr  r  channelsuse_fp32_accumaccum_dtypegrad_input_flatgrad_output_flatrI  rX   r]  s                         r,    max_pool2d_with_indices_backwardrg  ~  s   d 113 %' 		"Iyy}H!!"%J  $I qJ~~a !++A.##A&1Jyy|H
 !&&5==%..*IIN#1%--{7H7HK kkXH!!	O #**XzI5 ??:#8*y:PQL +..u}}= &11!\CSTO !((Xy(SJ ]];#4#45
 //5M&&]&CJ ''*
r+   window_lengthc                L    t         j                  j                  | d||||      S )a  hann_window(window_length, *, dtype=None, layout=None, device=None, pin_memory=False) -> Tensor

    Returns a Hann window of size :attr:`window_length` with ``periodic=True``.

    Equivalent to :func:`torch.hann_window` with ``periodic=True``.

    Args:
        window_length (int): the size of returned window.

    Keyword args:
        dtype (:class:`torch.dtype`, optional): desired dtype. Default: global default.
        layout (:class:`torch.layout`, optional): desired layout. Default: ``torch.strided``.
        device (:class:`torch.device`, optional): desired device. Default: current device.
        pin_memory (bool, optional): if ``True``, pins the returned tensor. Default: ``False``.
    Tr  )r   hann_windowperiodic)rh  r   rr  r  r  s        r,   rj  rj    s4    2 $$ %  r+   rk  c                   ||nt        j                         }| dk(  rt        j                  d||||      S | dk(  rt        j                  d||||      S t	        j
                  |      }|r| dz   n| }t        j                  |||||      }|dt         j                  z  |dz
  z  z  }t        j                  |      }|dz  dz   }|r|j                  dd|       n|}	|	j                  |      S )	a@  hann_window(window_length, periodic=True, *, dtype=None, layout=None, device=None, pin_memory=False) -> Tensor

    Returns a Hann window of size :attr:`window_length`.

    .. math::
        w[n] = 0.5 - 0.5 \cos\!\left(\frac{2\pi n}{N-1}\right)

    where :math:`N` is ``window_length + 1`` when ``periodic=True`` (for spectral analysis),
    or ``window_length`` when ``periodic=False`` (symmetric window).

    Low-precision dtypes (``bfloat16``, ``float16``) are computed in ``float32`` then cast.

    Args:
        window_length (int): the size of returned window.
        periodic (bool, optional): if ``True``, returns a periodic window for use with STFT.
            Default: ``True``.

    Keyword args:
        dtype (:class:`torch.dtype`, optional): desired dtype. Default: global default.
        layout (:class:`torch.layout`, optional): desired layout. Default: ``torch.strided``.
        device (:class:`torch.device`, optional): desired device. Default: current device.
        pin_memory (bool, optional): if ``True``, pins the returned tensor. Default: ``False``.
    r   rM  r  r"   rC  r   r   r   )r?   get_default_dtyperx  r  rD   r   r  picosr3  r8   )
rh  rk  r   rr  r  r  compute_dtyperW  rh  windows
             r,   hann_window_periodicrr    s    D &EE,C,C,EE{{fV

 	
 zzfV

 	
 //6M%=A		A 	
S588^q1u%&A		!A	D3A.6QXXaM*AF99Ur+   num_classesc                    |dk(  r*t        | j                         j                               dz   }t        j                  j                  t        j                  | dk\        d       t        j                  j                  t        j                  | |k        d       | j                  d      t        j                  || j                  | j                        k(  j                  t        j                        S )NrS   r"   r   z+one_hot: Class values must be non-negative.z7one_hot: Class values must be smaller than num_classes.r  )r  r   r  r   _assert_asyncmsgr?   r  rU   r  r   r  r8   r  )r{   rs  s     r,   one_hotrw  r  s    b$((*//+,q0		$!)5 			$$%A
 	r<<4::dkkJ	Kbor+   )FF)noner5   )r#   )r   NNr"   )rS   FFr  rM  r  )r"   r"   F)Fr   r   )r   rg   N)r   r"   N)Fr  )NNN)r   r   FT)r   r   Fr^  )r   Fr  )rS   (  rL   r  r  rE  r{  collections.abcr   r   
contextlibr   enumr   r   r   r	   r
   typingr   r   r?   torch._meta_registrationstorch._primsr  r  torch._prims_common_prims_commonrD   torch.nn.functionalr  rJ  r   r   r   r   torch._decompr   r  r   r   r   r   r   r   torch._prims_common.wrappersr   r   r   r   torch.utilsr   rB   torch.utils._pytreer   rs  DispatchKeyr   ry  str__annotations___opsr6  r   r!   r  r  rN   r  compute_only_pw_cast_for_opmathpw_cast_for_opmath"pw_cast_for_opmath_non_tensor_argsr  pw_cast_for_int_to_realr  rW   r`   rb   rk   r  rw   r  r8  r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r   r   r   r  r(   r|   r  _safe_softmaxr  r  r  r  rX   r   r#  r   r%  r.  r<  rF  rI  rN  rQ  rS  rU  rX  rk  rs  slicer  r  rr  r  r  r  r  r  r  r  r4  r8  rg  rm  rq  py_implCompositeImplicitAutogradAutogradrp  r  r  r  r  r  r*  r  r  r  r  r  r  r  r  r  r  r  r  r  	dtype_outr  r  r  r  r  r  r  r0  r2  rB  rF  r[  ra  re  unsafe_chunkrh  rd  rc  no_statsrl  rp  r|  r  r  r  _fused_dropoutr  r  r  r]  r  lift
lift_freshr  r  r  r  r  r  r  r  _adaptive_avg_pool2dr  r  r"  r%  r6  r=  rJ  rX  rd  rk  ra  ri  r  r  r  r  r  r  	Generatorr  r  r  r  r  r  r  r  _upsample_nearest_exact1dr  r  r  r  r  r  r  r  r  r  r  r  r  r   r/  r8  rnn_tanhr   r?  rnn_relurB  rG  rH  rK  rW  rZ  r`  rl  lstmro  rq  ry  r{  grur}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r+  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rb  rd  r  rm  ry  ra  upsample_bicubic2dr  r  reflection_pad1dreflection_pad2dreflection_pad3dr  replication_pad1dreplication_pad2dreplication_pad3dr  r  reflection_pad1d_backwardreflection_pad2d_backwardreflection_pad3d_backwardr  r  r  r  r  rr  r  rm  r  r  r  r  +_scaled_dot_product_flash_attention_for_cpur  r  r"  r$  rs  r   r*  r   rO   r-  r2  r=  rA  r9  r:  rV  rZ  rg  rj  rk  periodic_outrr  addbmm_addbmmaddmm_addmv_baddbmm_fill_gelu_r  
hardswish_	hardtanh_hardtanhhardsigmoid___iand____and____ilshift__
__lshift__r  r  index_reduce_index_reduce__ior____or____irshift__
__rshift____ixor____xor__ldexp_leaky_relu_
leaky_relulogit_logitrelu_r  renorm_renormround_r  scatter_r)  scatter_add_r]  scatter_reduce_scatter_reducesilu_rw  r*   r+   r,   <module>r     sS       
 . "  % $      #   , , 0 7   * ( hh"" c zz~~   %$)	''99' ' "	'T #*88@@# 
 uDDLL  &-88@@ & "
 "uDDQQ  c f  **+\2F 2v 2   ,2 --.\4v 4& 4   /4 ../\S S6 S S5 S   0S
 ))*\


 
 	

 
 
   +
2 ))*+( ,( ))*+"V " ," (()@f @ @   *@ 112\f F    3 ../\PP%P05P@EP   0P 'GF Gv G   (G //0F & V    1 //0\:F :& :U :  1: 001\LL%L7<LNRL   2L **+\) )f )3 )   ,)< **+5v 5f 5  ,5 		"&v && &   #& **+\>v >V > >   ,>
 **+6 6 66 6 ,6 334%%
% % 66>	% 5% 667



 
 	

 
 
 
 
   8
$ 112\<f <F <F <v <   3< 

#/ /v /& /  $/v #   &3<>>3G3G1
1 1-011   '1 ../\11 &1061CF1   01 **+0 ,0 ++, ^^))		1
	1	1 	1 		1   -	1 44<<=%/5BEMR  > 44??@
R
R

R 
R 	
R
 
R 
R  A
R 00889		%	/5	BE	NS	  :	 00445
R
R

R 
R 	
R
 
R 
R  6
R#$#$
#$ #$ TM	#$
 #$ #$ #$ #$L ))*\Nf NF N N N   +N( ../\..
. . TM	.
 . . . .  0.b 001\$$
$ $ TM	$
 $ $ $ $  2$N 112 !^^))	1
11 TM1 	1
 1   31& ::;\
 !^^))
  TM	
     <  --. ^^))111 1 	1   /1 667\
 ^^))			
	 	 		
 	   8	 		") )v )% )  #) ,,-& &F &v &  .& ++,	O	Oc	O 
	O 		O
 
	O 	O  -	O 

))* 3?
3? 
3? :	3?
 
t3? 3? +3?l #d
14t
38_. **+ $U$U	$U 
$U :	$U
 
t$U $U  ,$UN ,,-E Ed3i Ec ERU E  .E
 ../OO&*3iO9<ODGOORO  0O%+:?++ 334\ XX!'X.1X@EX !  5X 778 KK!'K.1K@EK !  9K*& $MMcM 3iM #Y	M
 IM M  %M` $]]c] c] 3i	]
 #Y] I] ]   %]@ 445
 
v 
e 
  6
 ,,-c#
c#"3ic#47c#?Bc#JMc#c#  .c#L ++334;?

%
,1DL

  5
& %kCCDk2236 e D4K  4 E & ++,VVA& AU A4$; A  -A & S    '*,6 , , ,( ))*F  T   +, ' $  	
    (( 556  	
   7BDI &\	  
&\	*T&\ 
tF| 
# 
"&\"	" "J 00$//2E2EFG
 	&\	  
$	
  H  	'')C)C)G)GH #	
c 
 
f		
 
&\D  ))0015 5C 5c 5%PSBT 5 25 44<<=67BB $S	B03B
63;B >B 

))*/ /C /c /%:L / +/2 --55)) //
// &// 
// 63;	////f ++TZZ^^<= f F # #    >" ))4::+?+?@A +
+
+ + {{	+
 + +  B+ ../
 

  	
     0" 	f 	F 	 	s 	s 	 	 

#5 5f 56 5 5 5  $5 77??@S&S&S& S& 	S&
 D=S& S& S& 
S& S& dS& 6D=&4-$67S&  AS&n 77;;<  	
 D=   
  d ,, ,, ,, 6D=&4-$67 =86D= FTM  77??@QQQ 3iQ 	Q
 Q TMQ 4-Q dQ 6D=&4-$67Q AQj 77;;< 3i 	
  TM 4- d ,, ,, ,, 6D=&4-$67 =4 ,,445333i3 TM3 
	3
 66>3 63l 55==>HHH 3iH 	H
 TMH dH 6D=&4-'(H ?HVRRTMR 4-R 4-	R
 $R R R 
R R 6666D=&4-?@Rj ../UK/((TM( 4-( 4-	(
 $( ( ( 
( 666!"( 0 0(4 ''(<(<=''(M(MN 
 
TM 
 4- 
 4-	 

 $ 
  
  
 
 
 666!" 
 O > 
F "";#H#HIG4< G JG AAIIJTM 4- 	
   
 666!" K* 55==>((TM( 4-( 	(
 ( ( ( 
( 666!"( ?(  55>>?((TM( 4-( 	(
 ( 
( 666!"( @( @@HHIKKTMK 4-K 	K
 K K K 
K 6666612K JK4TM 4- 	
  
  : 44<<=11TM1 4-1 	1
 1 1 
1 6666)*1 >14 ??GGHCCTMC 4-C 	C
 C C 
C 6666669:C IC8 22::;11TM1 4-1 	1
 1 1 
1 6666)*1 <14 ++,VV(  -( & !%"&04A
A ;;A
 LL4A A A &&-A  'AN diiAB  C &&{';';<--.VVVV, 4- 4-	
 $  !&  - / => 00889 TM 4-	
 $ } $  
 d  66D=&4-/0 :6 77??@iii TMi 4-	i
 $i }i $i i 
i di 66D=&4-/0i AiZ 77;;<""" TM" 4-	"
 $" }" $" " 
" d" ,," ,," ,," 66D=&4-/0" ="J 778VVV$  4-	
 $ } tm  % 90 667VVV$  4-	
 $ } tm   % 82 112d'v d'E#s(O d'   3d'NC 
C cC  IC  #Y	C 
 3iC  C  C  66>C L 445UI #


c
 I
 #Y	

 3i
 
 66>
  6
 445UI #


c
 I
 #Y	

 3i
 
 66>
  6
 001UI,,sCx, 66>,  2,^ 001UI33sC}%3 66>3  23l 
 ) 8<S	 HK F ))**8
*8*8 c*8  +*8Z ))*494949 c49 I	49
 #Y49  +49n ( HH	H H 	H H )H ' II	I I 	I I  (I$ -@-@	-@ -@ 	-@ -@ -@` ))112"";#H#HI  J 3 F (()<: <C <
 <J < *< (=* =3 =z =: =  )=C@C@C@$.C@8BC@PTC@N 001Xx (f (vv~)> (  ! 2( % ""(,		e	 *u
 %	  &" &; ';
8 //334//334//334$$[%J%JK$$[%9%9:$$[%J%JK$$[%9%9:$$[%J%JK$$[%9%9:	3	3cT!	3 ;%	3 		3 ; L ; L ; L 5 5 5	3 66::;66::;66::;##++K,Q,QR##++K,@,@A##++K,Q,QR##++K,@,@A##++K,Q,QR##++K,@,@A	?	?cT!	? ;%	? 		? B S B S B S < < <	?#L 0088$:Q:Q:U:UVW  (()N)NO  (()=)=>Dd;  ;;c; DL; 	; < ? P X; 	##++T-K-K-O-OP ''//0U0UV''//0D0DEDd;  GGcG DLG 	G < F WG 0088$:Q:Q:U:UVW  (()N)NO  (()=)=>Dd; "!	GGcG dlG dl	G
 G < ? P XG 	##++T-K-K-O-OP ''//0U0UV''//0D0DEDd; "!	SScS dlS dl	S
 S < F WS 0088$:Q:Q:U:UVW  (()N)NO  (()=)=>Dd; "!!QQcQ dlQ dl	Q
 dlQ Q < ? P XQ 	##++T-K-K-O-OP ''//0U0UV''//0D0DEDd; "!!		c	 dl	 dl		
 dl	 	 < F W	 
 	c  	
  4&>/$ FK+\&,/-d& R ++,[BBC[112. 3 D -.8 ++,[BBC[112. 3 D -.8 **+KAABK001. 2 C ,.@ **+KAABK001. 2 C ,.@/6=@/d 		(>>?--.S / @ )S@ 		'==>,,-S . ? (S>;; &{<<={++,. - > '.6 '==>,,-. . ? (.6 44889!!))+*O*OP!!))+*>*>? @ Q : 33778  (()N)NO  (()=)=> ? P 9 33778  (()N)NO  (()=)=> ? P 9 0044511556##K$I$IJ##K$8$89%%k&K&KL%%k&:&:;&&{'L'LM&&{';';<A = N < M : K 7 6A //779O9O9S9STU
 "	KKcK K dl	K
 K  VK 	%%t'?'?'C'CD !!))+*>*>?
 "!UUcU U dl	U
 dlU U  @
U 	&&(A(A(E(EF 
 "!!

c
 
 dl	

 dl
 dl
 
 
V/7	&	7$,V$47IO77-'9 -f - IIcI I 	I
 I IZ ))112F v $  3 ,,d.?.?@A  B ++,-" ." //019 29 2234C 5C6 AABCM DM23 
3 3  TM3  	3 
 3  66>3 l --.X~&L
LL TML 	L
 L 66>L ' /L@ //0X~&L
LL TML 	L
 L 66>L ' 1L/F /u / /5F 5u 5 5
 
3E 
(F%7 FV F F!Xf% !& !NN#'N05NEJ\\N&f & & &T &"/f / / / /T /"!V !49 !T !$V $49 $T $ 223S StCy S S   4S  p4p4
p4 p4 	p4
 p4 p4 p4f ,,-  
  	
     .   	#   !	# ==>$)..:N:N1  ?1$  d t @ [BBC>>?', yW  @ DyWx 0088$:Q:Q:U:UVW  (()=)=>
 ! TTsCxT T T\	T
 T\T T   ? XTn //334$$[%J%JK$$[%9%9:
 15	WWsCx4'W W &-	W
 W   ; L 5
W4 --.--.--.	v 	c3h 	F 	   / / /
	 ../../../	 	sCx 	V 	   0 0 0
	%%38_% c3_f,-% 	%P 667667667\T  8 8 8Tn %UEu   & $X4 X  %X ,,dkkoo>? !% =="&
	
 ;;
 LL	

 LL4
 
  @
 **+,
 !% =="&	 ;;	
 LL LL4  - 	", #, ../''(<(<=  ^^))))) ) 	)
 TM) ) )  > 0)X ;;<$$,,44[5I5IJX{#--- - 66>	- $ K =-x HHPPQ
 A  $AA	A A 	A
 A }A 4<A 66>A RAH '   ( ))*9  +9 '6 (6 ))488<<89 !%		D
	D ;;	D 
$		D
 	D :	D --t||/?/?@A.& .sTz . B. 		==>, ?, 		"38 
  #
( ../ )-
,, % \\	 0$ 5: 
# <A +: 		"  #
 'G (G ==>vv
v v v ?vr ))1143C3C3G3GHI !%"&"&" ;; LL4	
 LL4 t   JB ))22D4D4D4Q4QRS 6 !%"&"&"666 ;;	6
 LL46 LL46 t6 6  T6r t{{ + djj ) djj )  - TYY ' TYY ' $.. 1  / ""D$4$4 5  - !!4?? 3 $.. 1 ##T%6%6 7 t{{ + !!4?? 3  - djj ) !!4?? 3 djj ) TYY ' t{{ + djj )  - ""D$4$4 5 %%t':': ; TYY ' kCCD& s F  Er+   