
    ȅi             !       v   % S SK r S SKrS SKrS SKrS SKrS SKJrJr  S SKJ	r	  S SK
Jr  S SK JrJr  S SKJrJr  S SKJrJrJrJr  S SKrS SKrS SKJr  S SKJr  S SKJs  Jr   S SKJ!r!J"r"J#r#  S S	K$J%r%  S S
K&J'r'  S SKJ(r(J)r)J*r*J+r+J,r,  S SK-J.r.J/r/J0r0J1r1  S SK2J3r4  S SK5J6r6  \Rn                  Rp                  r8/ r9\:\;   \<S'   \Rz                  R|                  R~                  r? " S S\5      r@  GSS\S\R                  S\BS\B4S jjrC\" \C\R                  R                  SS9rE\" \C\R                  R                  S9rF\" \C\R                  R                  SS9rG\" \C\R                  R                  S9rIS\#S\JS\#4S jrK\%" \?R                  5      \1" S 5      \FS!\#S"\#4S# j5       5       5       rL\%" \?R                  5      \1" S 5      \FS!\#S"\#4S$ j5       5       5       rM\%" \?R                  5      \1" S 5      \FS!\#S\#S%\OS&\O4S' j5       5       5       rN\%" \?R                  5      \1" S 5      \FS(\#S)\OS*\OS+\OS,\BS-\#4S. j5       5       5       rP\%" \?R                  R                  /5      S/ 5       rS\%" \?R                  RF                  /5      S0\#4S1 j5       rT\%" \?R                  5      \1" 5       \FS2\#S\#4S3 j5       5       5       rU\%" \?R                  5      \1" S 5      \FS(\#S2\#4S4 j5       5       5       rV\%" \?R                  5      \1" S 5      S(\#S2\#S5\OS6\O4S7 j5       5       rW\%" \?R                  5      \1" 5       \FS2\#S\#4S8 j5       5       5       rX\%" \?R                  5      \1" 5       \FS(\#S2\#S\#4S9 j5       5       5       rY\%" \?R                  5      \1" S 5      S(\#S2\#S&\O4S: j5       5       rZ\%" \?R                  5      \1" S 5      \FS(\#S2\#S;\OS<\B4S= j5       5       5       r[\%" \?R                  5      \1" S 5      \FGSS>\#S2\#S?\;4S@ jj5       5       5       r\\%" \?R                  5      \FS(\#SA\#4SB j5       5       r]\%" \?R                  5      \1" 5       \FS2\#S\#4SC j5       5       5       r^\%" \?R                  5      \1" S 5      \FS(\#S2\#S\#4SD j5       5       5       r_\%" \?R                  5      S2\#SE\#S\#4SF j5       r`\%" \?R                  5      S(\#S2\#SE\#S\b\#\#4   4SG j5       ra\%" \?R                  5      \1" 5       \FS(\#S2\#SH\#SI\OSJ\OSK\BS<\BS\#4SL j5       5       5       rc\%" \?R                  5      \1" S 5      \FS(\#S2\#SM\#S\#4SN j5       5       5       rd\%" \?R                  5      \1" 5       S2\#SO\#S\#4SP j5       5       reSQ\#SR\J4SS jrfST\R                  4SU jrh\%" \?R                  5      \1" 5       \F\@R                  R                  4S2\#SV\#SR\JS\#4SW jj5       5       5       ri\%" \?R                  5      \1" S 5      \FS(\#SA\#SV\#SR\J4SX j5       5       5       rl\%" \?R                  5      GSSY j5       rn\%" \?R                  5      \1" 5       \F\@R                  R                  SZ4S2\#SV\#SR\JS%\O4S[ jj5       5       5       ro\%" \?R                  R                  5      \FS(\#S2\#SV\#SR\JS%\O4
S\ j5       5       rp\%" \?R                  R                  5      \FS(\#S2\#SV\#SR\JS%\OS \#4S] j5       5       rs\%" \?R                  R                  5      \FS(\#S2\#SV\#SR\JS^\O4
S_ j5       5       rt\%" \?R                  R                  5      \FS(\#S2\#SV\#SR\JS^\OS \#4S` j5       5       rvS(\#S2\#SV\#SE\\#   SR\JSa\JSb\#S\#4Sc jrw\%" \?R                  5      \1" S 5      \FS(\#S2\#S\JS\#4Sd j5       5       5       rx\%" \?R                  5      \1" S 5      S(\#S2\#SV\#SE\\#   SR\JSa\JSb\#S\#4Se j5       5       ry\%" \?R                  5      \1" S 5      S(\#S2\#SV\#SE\\#   SR\JSa\JSb\#S\#4Sf j5       5       rz\%" \?R                  5      \1" 5       \FS\@R                  R                  4S2\#SV\#SE\\#   SR\JS\#4
Sg jj5       5       5       r{\%" \?R                  5      \1" S 5      \FS\@R                  R                  4S(\#S2\#SV\#SE\\#   SR\JS\#4Sh jj5       5       5       r|\%" \?R                  5      \1" 5       \F\@R                  R                  4SA\#SV\#SR\JS\#4Si jj5       5       5       r}\%" \?R                  5      \1" S 5      \F\@R                  R                  4S(\#S2\#SV\#SR\JS\#4
Sj jj5       5       5       r~\%" \?R                  5      \1" 5       GSSA\#SO\#Sk\O4Sl jj5       5       r\%" \?GR                   5      \1" 5       Sm\#Sn\#S\#4So j5       5       r\%" \?GR                  5      \1" 5       S(\#Sp\:\J   S\JSq\JSr\JSs\J4St j5       5       r\%" \?GR                  RF                  5          GSS2\#S\JSq\\J   Sr\\J   Ss\J4
Sv jj5       rS\#S\JSq\\J   Sr\\J   S\b\J\J4   4
Sw jr\%" \?GR
                  5      \1" 5           GSSA\#Sx\#S\JSq\\J   Sr\\J   Ss\J4Sy jj5       5       r\%" \?GR                  5      \1" 5       S(\#Sp\:\J   S\JSz\J4S{ j5       5       r\%" \?GR                  5      \1" 5       S(\#Sp\:\J   S|\JS}\JS~\J4
S j5       5       rS(\#S \#S\R                  4S jr\%" \?GR                  5      \1" S 5      \ES(\#S\#S\JS\R                  4S j5       5       5       r\%" \?GR                  5      \1" 5       \ES(\#S\#S\JS\R                  4S j5       5       5       rS r\%" \?GR                  5      \1" 5       SA\#S\:\J   S\:\J   S\:\J   S\:\J   S\#4S j5       5       r\%" \?GR                  5      \1" 5       \FSA\#S\:\J   S\:\J   S\:\J   S\:\J   S\:\J   S\#4S j5       5       5       r\%" \?GR                  5      \1" 5       S(\#S\#S*\O4S j5       5       r\%" \?GR                  5      \1" 5       S>\#S\:\J   S\JS\JSs\JS\#4S j5       5       r\%" \?GR                   R                  5      \F GSS(\#S2\#S\\O   S\#4S jj5       5       r\%" \?GR"                  5      \?GR"                  R                  GR%                  \8GR&                  5      \?GR"                  R                  GR%                  \8GR(                  5      SA\#Sk\OS\\B   4S j5       5       5       r\%" \?GR*                  5      \1" SS5      SA\#Sk\OS\\B   4S j5       5       r\%" \?GR,                  5      \1" 5       S\#S\JS\B4S j5       5       r\%" \?GR.                  5      \1" SS9S\#S\JS\B4S j5       5       r\%" \?GR0                  5      \1" 5          GSSE\#S\#S\JS\BS\BS\#4S jj5       5       r\%" \?GR2                  5      \1" 5       S(\#S\#S\JS\JS\B4
S j5       5       rS\:\J   4S jrS\:\#   S\JS\JS\:\#   4S jrS\:\#   4S jrS\:\#   S\J4S jrS\:\#   S\JS\J4S jr\%" \?GR>                  R                  \?GR>                  R                  /5       GSS\:\#   S\JS\JS\\#   S\#4
S jj5       r\%" \?GR@                  R                  \?GR@                  R                  /5        GSS2\#S\:\J   S\JS\\:\#      S\\:\#      4
S jj5       r\%" \?GRB                  RF                  5      GSSA\#S\JS\JS\b\#S4   4S jj5       r\%" \?GRD                  R                  5       GSSA\#S\:\J   S\JS\b\#S4   4S jj5       r\%" \?GRF                  RF                  5      GSS2\#S\JS\JS\b\#S4   4S jj5       r\?GRH                  GRJ                  GR%                  \8GR&                  5       GSS2\#S\#S\JS\b\#S4   4S jj5       r\%" \?GRN                  5      \1" SS9\FGSS2\#S\#S\#S%\JS)\J4
S jj5       5       5       r\%" \?GRP                  5      \1" 5       \F   GSS2\#S\#S\#S%\JS)\JS\B4S jj5       5       5       r\%" \?GRR                  5      \1" SS9\FGSS2\#S\#S\#S%\JS)\J4
S jj5       5       5       r\%" \?GRT                  R                  5      \FS(\#SA\#S\#S\#S\\#   S\JS\JS\JS\JS\:\B   S\b\\#   \\#   \\#   4   4S j5       5       r\%" \?GRT                  R                  5      S(\#SA\#S\#S\#S\\#   S\JS\JS\JS\JS\:\B   S\RF                  S\RF                  S\RF                  S\b\\#   \\#   \\#   4   4S j5       rS\\#   S\\#   4S jr\%" \?GRZ                  R                  5      S\#SA\#S\:\J   S\#S\#SE\\#   S\\#   S\:\B   S\b\\#   \\#   \\#   4   4S j5       r\%" \?GRZ                  R                  5      S\#SA\#S\:\J   S\#S\#SE\\#   S\\#   S\:\B   S\RF                  S\RF                  S\RF                  S\b\\#   \\#   \\#   4   4S j5       r\%" \?GR^                  R                  5      SA\#S\:\J   SE\\#   S\\O   S\b\#\#4   4
S j5       r\%" \?GR`                  R                  5      S\#SA\#S\:\J   S\#SE\\#   S\:\B   S\b\\#   \\#   4   4S j5       rSA\#SE\\#   S\\#   S\\#   S\\#   SK\BS\OS\OS\BS\b\#\#\#\\#   \\#   4   4S jr\%" \?GRd                  5      \1" SSS5      SA\#SE\\#   S\\#   S\\#   S\\#   SK\BS\OS\OS\b\#\#\#4   4S j5       5       r\?GRd                  R                  GR%                  \8GR(                  5      \?GRd                  R                  GR%                  \8GR&                  5      SA\#SE\\#   S\\#   S\\#   S\\#   SK\BS\OS\OS\b\#\#\#4   4S j5       5       r\?GRh                  R                  GR%                  \8GR&                  5      GSS\:\#   4S jj5       r\%" \?GRl                  R                  5      SA\#SE\\#   S\\#   S\#S\#S\OS\OS\b\#\#\#4   4S j5       r\%" \?GRn                  R                  5      SA\#SE\\#   S\\#   S\#S\#SK\BS\OS\OS\b\#\#\#4   4S j5       r\%" \?GRn                  GRp                  5      SA\#SE\\#   S\\#   SK\BS\OS\OS\b\#\#\#4   4S j5       r\%" \?GRt                  R                  5      SA\#SE\\#   S\\#   S\#S\#SK\BS\OS\OS\b\#\#\#\#\#4   4S j5       rSA\#SE\\#   S\\#   S\#S\#S\OSK\BS\#4S jr\%" \?GRx                  R                  5      SA\#SE\\#   S\\#   S\#S\#S\OS\OS\b\#\#\#\#4   4S j5       r\%" \?GRz                  R                  5      SA\#SE\\#   S\\#   S\#S\#S\OS\OS\b\#\#\#\#\#\#4   4S j5       r\%" \?GR|                  R                  5      SA\#SE\\#   S\\#   S\#S\#S\OS\OS\b\#\#\#\#4   4S j5       r\%" \?GR~                  5      \1" SS5      \FGSS j5       5       5       r\%" \?GR                  5      \1" 5       SSSSSSS.S\\#\)4   ST\\R                     S\\GR                     S\BS\BS\\GR                     4S jj5       5       r\%" \?GR                  \?GR                  \?GR                  /5      \1" 5       S 5       5       r\?GR                  R                  GR%                  \8GR(                  5      \%" \?GR                  5      \1" SSSS5      SA\#SE\#S\\#   S\\#   S\\#   SK\BS\OS\O4S j5       5       5       rS r\%" \?GR                  R                  5      S\#SA\#SE\\#   S\\#   S\\#   S\\#   S\\#   S\BS\OS\:\B   S\#S\b\#\\#   \\#   4   4S j5       r\%" \?GR                  R                  5      S\#SA\#SE\\#   S\\#   S\\#   S\\#   S\\#   S\BS\OS\:\B   S\b\#\\#   \\#   4   4S j5       r\%" \?GR                  R                  5      S\#SA\#SE\\#   S\\#   S\\#   S\\#   S\\#   S\BS\OS\:\B   S\RF                  S\RF                  S\RF                  S\b\#\\#   \\#   4   4S j5       r\%" \?GR                  5      \1" SSS5      SA\#S(\#SE\#S\\#   S\\#   S\\#   S\\#   S\O4S j5       5       r\%" \?GR                  5      \1" SSS5      SA\#S(\#SE\#S\\#   S\\#   S\\#   S\\#   S\OS\#4S j5       5       r\%" \?GR                  5      \1" 5       \FSA\#S\b\J\J4   4S j5       5       5       rS2\+S\+S\:\J   S\J4S jr\%" \?GR                  5      \1" 5       S2\+S\+S\:\J   4S j5       5       r\%" \?GR                  5      \1" 5       SA\+S\+S\:\J   S\:\J   S\:\J   4
S j5       5       r\%" \?GR                  5      SuS.S\+S\JSz\+S\+S)\)4
S jj5       r\%" \?GR                  5      \1" 5       SuS.S\+S\JSz\+S\+S)\)4
S jj5       5       rSuS.S\+S\JSz\+S\+GS \BS)\)4GS jjr\%" \?GR                  R                  5      \?GR                  R                  GR%                  \8GR&                  5      GSGS j5       5       r\%" \?GR                  5      S\+S\JSz\+S\+4GS j5       r\%" \?GR                  5      \1" 5       S\+S\JSz\+S\+4GS j5       5       rS\+S\JSz\+S\+GS \B4
GS jr\%" \?GR                  5      \1" SSM5      \FS2\#S\b\#\#4   4GS j5       5       5       r\%" \?GR                  5      \1" 5          GSS\#GS\\B\J\O4   GS\\B\J\O4   GS	\\GR                     4GS
 jj5       5       r\%" \?GR                  5      GSGS j5       rGS rGS r\%" \?GR                  GR                  5      \%" \?GR                  GR                  5      \%" \?GR                  GR                  5      \?GR                  GR                  GR%                  \8GR&                  5      \?GR                  GR                  GR%                  \8GR(                  5      \?GR                  GR                  GR%                  \8GR&                  5      \?GR                  GR                  GR%                  \8GR(                  5      \?GR                  GR                  GR%                  \8GR&                  5      \?GR                  GR                  GR%                  \8GR(                  5      SA\#S\\:\J      GS\\:\O      S\#4GS j5       5       5       5       5       5       5       5       5       r\%" \?GR                  GR                  5      \%" \?GR                  GR                  5      \%" \?GR                  GR                  5      \?GR                  GR                  GR%                  \8GR&                  5      \?GR                  GR                  GR%                  \8GR(                  5      \?GR                  GR                  GR%                  \8GR&                  5      \?GR                  GR                  GR%                  \8GR(                  5      \?GR                  GR                  GR%                  \8GR&                  5      \?GR                  GR                  GR%                  \8GR(                  5      SA\#S\\:\J      GS\\:\O      S\#4GS j5       5       5       5       5       5       5       5       5       rGSGS jr\%" \?GR                  R                  \?GR                  R                  /5      \?GR                  R                  GR%                  \8GR&                  5      \?GR                  R                  GR%                  \8GR(                  5      \1" SSGS9 GSSA\#S\:\J   GS\\O   S\#4GS jj5       5       5       5       r\%" \?GR                  R                  \?GR                  R                  /5      \?GR                  R                  GR%                  \8GR&                  5      \?GR                  R                  GR%                  \8GR(                  5      \1" SSGS9 GSSA\#S\:\J   GS\\O   S\#4GS jj5       5       5       5       r\%" \?GR                  R                  \?GR                  R                  /5      \?GR                  R                  GR%                  \8GR&                  5      \?GR                  R                  GR%                  \8GR(                  5      \1" SSGS9  GSSA\#S\:\J   GS\\O   GS\\O   S\#4
GS jj5       5       5       5       r\%" \?GR                  R                  \?GR                  R                  /5      \?GR                  R                  GR%                  \8GR&                  5      \?GR                  R                  GR%                  \8GR(                  5      \1" SSGS9  GSSA\#S\:\J   GS\\O   GS\\O   S\#4
GS jj5       5       5       5       r\%" \?GR                  R                  \?GR                  R                  /5      \?GR                  R                  GR%                  \8GR&                  5      \?GR                  R                  GR%                  \8GR(                  5      \1" SSGS9   GSSA\#S\:\J   GS\\O   GS\\O   GS\\O   S\#4GS jj5       5       5       5       r\%" \?GR                  R                  \?GR                  R                  /5      \?GR                  R                  GR%                  \8GR&                  5      \?GR                  R                  GR%                  \8GR(                  5      \1" SSGS9   GSSA\#S\:\J   GS\\O   GS\\O   GS\\O   S\#4GS jj5       5       5       5       r\F GSSA\#S\:\J   GS\:\\O      GS\BS\#4
GS jj5       rGS rGS  rGS! rGS" r GSGS# jrGS$ rGS% rGSGS& jrGSGS' jrGS( r\%" \?GR                  GR                  5      \?GR                  GR                  GR%                  \8GR&                  5      \?GR                  GR                  GR%                  \8GR(                  5      GS) 5       5       5       r\%" \?GR                  GR                  5      \?GR                  GR                  GR%                  \8GR&                  5      \?GR                  GR                  GR%                  \8GR(                  5      GS* 5       5       5       r\%" \?GR                  GR                  5      \?GR                  GR                  GR%                  \8GR&                  5      \?GR                  GR                  GR%                  \8GR(                  5      GS+ 5       5       5       r\%" \?GR                  GR                  5      \?GR                  GR                  GR%                  \8GR&                  5      \?GR                  GR                  GR%                  \8GR(                  5      GS, 5       5       5       rGS- rGSGS. jGr GSGS/ jGrGS0 Gr\%" \?GR                  GR                  5      \?GR                  GR                  GR%                  \8GR&                  5      \?GR                  GR                  GR%                  \8GR(                  5      GS1 5       5       5       Gr\%" \?GR                  GR                  5      \?GR                  GR                  GR%                  \8GR&                  5      \?GR                  GR                  GR%                  \8GR(                  5      GS2 5       5       5       GrGS3 GrGS4 Gr\%" \?GR                  GR                  5      \?GR                  GR                  GR%                  \8GR&                  5      \?GR                  GR                  GR%                  \8GR(                  5      GS5 5       5       5       Gr	\%" \?GR                  GR                  5      \?GR                  GR                  GR%                  \8GR&                  5      \?GR                  GR                  GR%                  \8GR(                  5      GS6 5       5       5       Gr
\%" \?GR                  GR                  5      \?GR                  GR                  GR%                  \8GR&                  5      \?GR                  GR                  GR%                  \8GR(                  5      GS7 5       5       5       Gr\%" \?GR                  GR                  5      \?GR                  GR                  GR%                  \8GR&                  5      \?GR                  GR                  GR%                  \8GR(                  5      GS8 5       5       5       Gr\%" \?GR                  GR                  5      \%" \?GR                   GR                  5      \?GR"                  GR                  GR%                  \8GR&                  5      \?GR"                  GR                  GR%                  \8GR(                  5      \?GR                  GR                  GR%                  \8GR&                  5      \?GR                  GR                  GR%                  \8GR(                  5      \?GR                   GR                  GR%                  \8GR&                  5      \?GR                   GR                  GR%                  \8GR(                  5      GS9 5       5       5       5       5       5       5       5       Gr\%" \?GR"                  R                  \?GR"                  R                  /5      \1" 5        GSSA\#S\:\J   GS:\BGS\\O   S\#4
GS; jj5       5       Gr\%" \?GR                  R                  \?GR                  R                  /5      \?GR                  R                  GR%                  \8GR(                  5      \1" 5         GSSA\#S\:\J   GS:\BGS\\O   GS\\O   S\#4GS< jj5       5       5       Gr\%" \?GR                   R                  \?GR                   R                  /5      \1" 5          GSSA\#S\:\J   GS:\BGS\\O   GS\\O   GS\\O   S\#4GS= jj5       5       GrGSGS> jGrGS? GrSx\\#   GS@\\#   GSA\#S\#4GSB jGrGS@\,S\#4GSC jGr\FSA\#S\:\J   GS:\BGS\:\\O      S\#4
GSD j5       Gr\%" \?GR0                  R                  5      GSE\#GSF\#S\B4GSG j5       Gr\%" \?GR2                  \?GR4                  /5      \1" 5       GSH 5       5       Gr\%" \?GR6                  /5      GSI 5       Gr\%" \?GR8                  /5      GSGSJ j5       Gr\%" \?GR:                  /5      GSK 5       Gr\%" \?GR<                  /5      GSL 5       GrS2\#SV\#SE\\#   SR\JSa\JS\b\#\#4   4GSM jGr\%" \?GR@                  5      \1" SSb5      S2\#SV\#SE\\#   SR\JSa\JS\b\#\#4   4GSN j5       5       Gr \%" \?GRB                  5      \1" SSb5      S2\#SV\#SE\\#   SR\JSa\JS\b\#\#4   4GSO j5       5       Gr!S\#GSP\OS\#4GSQ jGr"S\#GSP\OS\#4GSR jGr#GSS\#S\,4GST jGr$GSU\,GSV\#S\#4GSW jGr%GSV\\#   S\#4GSX jGr&GSY\JGS:\BST\R                  S\GR                  4GSZ jGr'GS[\#GS\\JGS]\JGS:\B4GS^ jGr(GS[\#GS_\JGS\\JGS]\JGS:\B4
GS` jGr)GS[\#S\:\J   GS:\B4GSa jGr*GS[\#S\:\J   GS:\B4GSb jGr+\%" \?GRX                  5      \1" 5       \FGS[\#S\:\J   GS:\B4GSc j5       5       5       Gr,    GSGSE\#GSd\#GSe\JGSf\JGS:\BGSg\BS\#4GSh jjGr-\%" \?GR\                  5      \1" 5       \F   GSGSE\#GSd\#GSe\JGSf\JGS:\BS\#4GSi jj5       5       5       Gr.\%" \?GR^                  5      \1" SS9\FGSj 5       5       5       Gr/\%" \?GR`                  5      \1" 5       SS\@R                  R                  4GSk j5       5       Gr0GSl\RF                  GSm\RF                  GSn\BS\B4GSo jGr1\?GRd                  R                  GR%                  \8GR&                  5      \?GRd                  R                  GR%                  \8GR&                  5      \1" SGSp9SGSq.GSr j5       5       5       Gr2\%" \?GRf                  R                  \?GRf                  R                  /5      \?GRf                  R                  GR%                  \8GR(                  5      \1" 5       \F  GSSA\#S\b\J\J4   GS:\BGSs\\O   GSt\\O   S\#4GSu jj5       5       5       5       Gr4\%" \?GRf                  GR                  5      \?GRf                  GR                  GR%                  \8GR&                  5      \?GRf                  GR                  GR%                  \8GR(                  5      \1" 5       \F GSGSE\#S\\b\J\J4      GS:\BGS\\b\O\O4      S\#4
GSv jj5       5       5       5       5       Gr5\%" \?GRl                  5      \%" \?GRn                  5      \%" \?GRp                  5      \F\1" 5       GSE\#S\b\JS4   S\#4GSw j5       5       5       5       5       Gr9\%" \?GRt                  5      \%" \?GRv                  5      \%" \?GRx                  5      \F\1" 5       GSE\#S\b\JS4   S\#4GSx j5       5       5       5       5       Gr=GSE\#S\b\JS4   GSy\\J\J\J/\#4   S\#4GSz jGr>\%" \?GR~                  5      \%" \?GR                  5      \%" \?GR                  5      \1" S 5      GS{ 5       5       5       5       GrB\%" \?GR                  5      \1" GS|GS}5      SSGS~.GS j5       5       GrC\%" \?GR                  5      \1" 5       GSSGS.GS jj5       5       GrD\%" \?GR                  R                  \?GR                  R                  /5      \1" 5       S\GR                  SSGS.Sr\)ST\\R                     GS\GR                  S\\GR                     S\B4
GS jj5       5       GrH\%" \?GR                  GR                  /5      S\GR                  SSGS.Sq\)Sr\)ST\\R                     GS\GR                  S\\GR                     S\B4GS jj5       GrJ\%" \'5      GS 5       GrK\%" \?GR                  5      \?GR                  R                  GR%                  \8GR(                  5      \1" 5       SuSuS\@R                  R                  4SA\#SV\#Sk\)GS\)SE\\#   SR\JS\#4GS jj5       5       5       GrL\%" \?GR                  5      \?GR                  R                  GR%                  \8GR(                  5      \1" SGS5      SA\#SV\#SR\JS\b\#\#4   4GS j5       5       5       GrM\%" \?GR                  R                  5        GSSSGS.GS\#GS\#S0\#GS\OGS\BGS\\#   S*\\O   S\b\#\#4   4GS jjj5       GrOGS GrP\%" \?GR                  /5      \1" SS9\FGSGS j5       5       5       GrQ\%" \?GR                  5      \1" 5       GS 5       5       GrR\%" \?GR                  5      GS 5       GrS\%" \?GR                  R                  \?GR                  R                  /5      SSGS.S2\#ST\\R                     S\\#   S\#4GS jj5       GrU\%" \?GR                  R                  \?GR                  GR                  /5      GSS2\#S\\J   4GS jj5       GrX\%" \R|                  R~                  GR                  5      GSGS j5       GrY\%" \?GR                  5      \1" 5       SSGS.GS j5       5       GrZ\%" \?GR                  R                  5      SGS.S2\RF                  GS	\\GR                     S\RF                  4GS jj5       Gr[SGS.GS jGr\SSGS.GS jGr]\%" \?GR                  5      \1" 5       GS 5       5       Gr^\%" \?GR                  5      GSGS j5       Gr_G\P" \?GR                  \?GR                  5        G\P" \?GR                  \?GRN                  5        G\P" \?GR                  \?GRR                  5        G\P" \?GR                  \?GR                  5        G\P" \?GR                  \?R                  5        G\P" \?GR                  \?GR                  5        G\P" \?GR                  \?R                  5        G\P" \?GR                  \?GR                  5        G\P" \?GR                  \?R                  5        G\P" \?GR                  \?GR                  5        G\P" \?GR                  \?GR                  5        G\P" \?GR                  \?GR                  5        G\P" \?GR                  \?GR                  5        G\P" \?GR                  \?GR                  5        G\P" \?GR                  \?GR                  5        G\P" \?GR                  \?GR                  5        G\P" \?GR                  \?R                  5        G\P" \?GR                  \?GR                  5        G\P" \?GR                  \?GR                  5        G\P" \?GR                  \?GR                   5        G\P" \?GR                  \?GR                  5        G\P" \?GR                  \?GR                  5        G\P" \?GR
                  \?GR                  5        G\P" \?GR                  \?GR                  5        G\P" \?GR                  \?GR                  5        G\P" \?GR                  \?R                  5        g(      N)CallableIterable)nullcontext)Enum)partialreduce)chainproduct)AnycastOptionalUnion)	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                        \ rS rSrSrSrSrSrg)	Reduction1   r          N)__name__
__module____qualname____firstlineno__NONEMEANSUM__static_attributes__r&       V/home/james-whalen/.local/lib/python3.13/site-packages/torch/_decomp/decompositions.pyr"   r"   1   s    DD
Cr/   r"   Fftype_promotioncompute_dtype_onlyinclude_non_tensor_argsc                 R   ^ ^^^ [         R                  " T 5      UU UU4S j5       nU$ )Nc                    >^^	 T(       a   [         [        R                  R                  4O[         4n[        R
                  " U 0 UD6 Vs/ s H  n[        X25      (       d  M  UPM     nn[        R                  " UST06u  mm	U4S jnU	4S jnT" [        XP5      0 [        XQ5      D6nT
(       a  U$ [        Xg5      $ s  snf )Ntype_promotion_kindc                 T   > [        U [        5      (       a  U R                  T5      $ U $ N
isinstancer   to)xcomputation_dtypes    r0   increase_prec0type_casts.<locals>.inner.<locals>.increase_precO   s%    !V$$tt-..r/   c                 T   > [        U [        5      (       a  U R                  T5      $ U $ r9   r:   )r=   result_dtypes    r0   decrease_prec0type_casts.<locals>.inner.<locals>.decrease_precU   s$    !V$$ttL))r/   )
r   torchtypes_Numberpytreearg_tree_leavesr;   utilselementwise_dtypesr   )argskwargsallowed_typesr=   	flat_argsr?   rC   rr>   rB   r3   r1   r4   r2   s           @@r0   innertype_casts.<locals>.inner@   s     .EVU[[(()6) 	
 ++T<V<
<!+ < 	 

 +0*B*B+
,:+
'<
		 x,P0OPHM--5
s   
B="B=)	functoolswraps)r1   r2   r3   r4   rQ   s   ```` r0   
type_castsrU   :   s(     __Q. .@ Lr/   T)r2   r3   )r2   )r2   r4   r=   dimreturnc                 l    [        XR                  5       -
  5       H  nU R                  S5      n M     U $ N)rangerV   	unsqueeze)r=   rV   _s      r0   _unsqueeze_to_dimr^   w   s+    3=!KKO "Hr/   
grad_inputout_gradyc                 2    U SX-  -
  R                  5       -  $ Nr$   conj_physicalr`   ra   s     r0   tanh_backwardrg   }   s     q15y//111r/   c                 2    XSU-
  -  R                  5       -  $ rc   rd   rf   s     r0   sigmoid_backwardri      s     AE{11333r/   beta	thresholdc                 p    X-  R                  5       n[        R                  " X-  U:  X U-  US-   -  5      $ N      ?)exprE   where)r`   r=   rj   rk   zs        r0   softplus_backwardrr      s7     
A;;I-xAS9QRRr/   grad_outputalphascaleinput_scale	is_resultself_or_resultc                     X-  nUnUnU(       a$  [         R                  " US:*  X-  XV-   -  X-  5      $ [         R                  " US:*  X-  U-  [         R                  " XX-  5      -  X-  5      $ Nr   )rE   rp   ro   )	rs   rt   ru   rv   rw   rx   negcoefposcoef
negiptcoefs	            r0   elu_backwardr~      s     mGGJ{{a$(@A!
 	
 {{a$w.>;V1WW!
 	
r/   c                 .    [         R                  " X5      $ r9   )rE   	full_likeselfvalues     r0   fill_scalarr      s    ??4''r/   r   c                    ^ [         R                  " TR                  5       S:H  U4S j5        [        R	                  U T5      $ )Nr   c                  ,   > ST R                  5        S3$ )Nz@fill only supports 0-dimension value tensor but got tensor with z dimensionsrV   )r   s   r0   <lambda>fill_tensor.<locals>.<lambda>   s    RSXS\S\S^R__jkr/   )rE   _checkrV   atencopyr   s    `r0   fill_tensorr      s3    	LL		qk 99T5!!r/   r   c                 ^    [         R                  " [         R                  " U S-   SS9SS9S-  $ N   r   min   maxrE   clampr   s    r0   hardsigmoidr      s)     ;;u{{4!83;a??r/   c                 J    [         R                  " US:  US:  -  U S-  S5      $ )Ng      g      @gUUUUUU?        rE   rp   rs   r   s     r0   hardsigmoid_backwardr      s0     ;;	$y! r/   min_valmax_valc                 @    [         R                  " X:*  X:  -  SU 5      $ )Nr   r   )rs   r   r   r   s       r0   hardtanh_backwardr      s     
 ;;DO<c;OOr/   c                 d    U [         R                  " [         R                  " U S-   SS9SS9-  S-  $ r   r   r   s    r0   	hardswishr      s.     %++ekk$(:BBQFFr/   c           
      z    [         R                  " US:*  S[         R                  " US:  XS-  S-   -  U 5      5      $ )Nr   r         ?r   r   s     r0   hardswish_backwardr      s?     ;;
D1HkQh#-=>L r/   c                 6    [         R                  " X:*  SU 5      $ rz   r   )rs   r   rk   s      r0   threshold_backwardr      s     ;;t(![99r/   negative_slopeself_is_resultc                 <    [         R                  " US:  X U-  5      $ rz   r   )rs   r   r   r   s       r0   leaky_relu_backwardr      s     ;;taxN.JKKr/   gradapproximatec                    SnSnSnUS:X  ab  X5-  S-  nSnX-  nX-  n	XaXy-  -   -  n
[         R                  " U
5      nSU-  nSU-   nSU-  nSX-  -
  nUSSU-  U-  -   -  nX-  U-  nXU-   -  $ UnXT-  S-  nSS[         R                  " UU-  5      -   -  nU[         R                  " X-  S	-  5      -  nU UUU-  -   -  $ )
Ng;f?g;f?gmBP?tanhr   gHm?r$   r   g      )rE   r   erfro   )r   r   r   M_SQRT2	M_SQRT1_2
M_2_SQRTPIkBetakKappax_sqx_cuberQ   
tanh_innerleftrightleft_derivativetanh_derivativeinner_derivativeright_derivativekAlphacdfpdfs                        r0   gelu_backwardr      s    %G&I'Jf$s*{/0ZZ&
TzJ+j55 AF
T(9$9:14DD)99::&,Q4&=112eiid 233sTCZ'((r/   inputc                     [         R                  " [        R                  " U5      5      n[         R                  " U5      nX-  SX"-  -
  -  nXU-   -  $ rc   )rE   r   Fsoftplussigmoid)rs   r   input_tanh_softplusinput_sigmoidouts        r0   mish_backwardr     sN      **QZZ%67MM%(M

1':'P#P
QC344r/   c                 4    U [         R                  " U 5      -  $ r9   )rE   r   r   s    r0   silur   "  s     %--%%%r/   c                 \    SS[         R                  " U* 5      -   -  nX-  SUSU-
  -  -   -  $ rc   )rE   ro   )rs   r   r   s      r0   silu_backwardr   )  s:     1uyy$''(G AG(<$<==r/   weightc                 <    [         R                  " U S:  XU -  5      $ rz   r   )r   r   s     r0   _prelu_kernelr   1  s    ;;tax}55r/   c                 |    [         R                  " US:  XU -  5      n[         R                  " US:  SX-  5      nX44$ )Nr   r   r   )rs   r   r   
input_gradweight_grads        r0   _prelu_kernel_backwardr   6  s?     TAX{[4HIJ++dQhT-?@K$$r/   noiseloweruppertrainingc                 |    U(       a  XC-
  S:  a  U R                  U5      $ X4-   S-  n[        R                  XXv5      $ )Ngư>r%   )mulr   r   )rs   r   r   r   r   r   r   r   s           r0   rrelu_with_noise_backwardr   A  sC     EMD(u%%-1,''~
 	
r/   bufferc                     US:  n[         R                  " USS5      n[         R                  " USS5      n[         R                  " [         R                  " U5      * 5      nXXVSU-   -  -  -
  -  $ )Nr   r$   rZ   )rE   rp   ro   abs)rs   r   r   in_negative	max_derivsignrq   s          r0   log_sigmoid_backwardr   V  sc     (KKA.I;;{Ar*D		599T?"#Ad1q5k&::;;r/   otherc                 "   [         R                  " U R                  5      (       d%  [         R                  " U R                  5      (       a  [        R
                  OU R                  nU R                  SSUS9nU [        R                  " X15      -  $ )Nr&          @dtype)rJ   is_integer_dtyper   is_boolean_dtyperE   float32new_fullpow)r   r   	two_dtype
two_tensors       r0   ldexpr   c  sl    
 !!$**--1G1G

1S1S 	ZZ 
 r3i8J%))J...r/   loss	reductionc                     U[         R                  R                  :X  a  [        R                  " U 5      $ U[         R
                  R                  :X  a  [        R                  " U 5      $ U $ r9   )r"   r,   r   rE   meanr-   sum)r   r   s     r0   apply_loss_reductionr   o  sH    INN(((zz$	imm))	)yyr/   r   c                     U [         R                  :X  a  [         R                  $ U [         R                  :X  a  [         R                  $ U [         R
                  :X  a  [         R                  $ g r9   )rE   	complex32float16	complex64r   
complex128float64r   s    r0   to_real_dtyper  x  sK    }}	%//	!}}	%""	"}} 
#r/   targetc                 &    X-
  S-  n[        X25      $ )Nr%   )r   )r   r  r   r   s       r0   mse_lossr    s     MaD00r/   c                 |    U[         R                  R                  :X  a  SUR                  5       -  OSnXAU-
  -  U -  $ )Nr   )r"   r,   r   numel)rs   r   r  r   norms        r0   mse_loss_backwardr    s9     #,y~~/C/C"C3D6>"[00r/   c                     [         R                  " XUS9nU R                  [        S5      5      n[         R                  " XASS9n[         R
                  " U5      n[         R                  " XVU5      $ )N)rV   r   z-infTrV   keepdim)rE   softmaxeqfloatall
zeros_likerp   )r   rV   r   r   maskedmasked_rowszeross          r0   safe_softmaxr    sU    
--U
3CWWU6]#F))FT:KS!E;;{3//r/   rn   c                     X-
  R                  5       n[        R                  " XC:  SUS-  -  U-  USU-  -
  5      n[        XB5      $ )Nr   r%   )r   rE   rp   r   )r   r  r   rj   r   s        r0   smooth_l1_lossr    sI     M D;;t{C$'MD$8$t:KLD00r/   c                    U[         R                  R                  :X  a  SUR                  5       -  OSnX-
  n[        R
                  " U5      nXP-  n[        R                  " Xt:  X-  U-  U[        R                  " U5      -  5      $ rm   )r"   r,   r   r  rE   r   rp   r   )	rs   r   r  r   rj   r  r=   abs_x	norm_grads	            r0   smooth_l1_loss_backwardr    ss    
 "+inn.B.B!B3DAIIaLE"I;;EJJqM! r/   c                 Z    [        XX#U5      n[        XVR                  5        [        XeSS9$ NT	copy_fromcopy_toexact_dtype)r  r   shaper   )rs   r   r  r   rj   r_   results          r0   smooth_l1_loss_backward_outr#    s+     %[4PFj,,/FDQQr/   deltac           
          U[         R                  R                  :X  a  SUR                  5       -  OSnX-
  n[        R
                  " Xd* :  U* U -  U-  [        R
                  " Xd:  XP-  U-  XV-  U -  5      5      $ rm   )r"   r,   r   r  rE   rp   )rs   r   r  r   r$  r  r=   s          r0   huber_loss_backwardr&    sv    
 "+inn.B.B!B3DA;;	F
	e#AIt1E948k;QR r/   c                 Z    [        XX#U5      n[        XVR                  5        [        XeSS9$ r  )r&  r   r!  r   )rs   r   r  r   r$  r_   r"  s          r0   huber_loss_backward_outr(    s+     !FuMFj,,/FDQQr/   ignore_indextotal_weightc                    UR                  5       S:  a  SOSnU[        R                  R                  :X  a  X-  n UR	                  U5      n[
        R                  " X%:g  US5      n[
        R                  " U5      n	[
        R                  " XUS5      n	U	R                  5       U R                  5       s=:  a  S:  a  O  OU R	                  U5      n UbO  [        UR                  5       5       V
s/ s H  n
SPM     nn
UR                  S   X'   UR                  U5      nX-  n [
        R                  " X%:g  U S5      n X-  $ s  sn
f )Nr%   r   r$   g      )rV   r"   r,   r   r\   rE   rp   r  scatterr[   r!  reshape)rs   r   r  r   r   r)  r*  channel_dimsafe_targetr_   r]   	new_shapes               r0   _nll_loss_backwardr1    s    xxzA~!1KINN(((!0k*F++f4fa@K!!$'JzTJJ~~+//+/a/!++K8 %dhhj 12 11Q 1	2!'a		*!*++f4k1EK## 3s   /Ec                    UR                  5       S::  a  [        S5      e[        R                  " UR                  5       U5      nUR	                  U5      nUS-  S:w  a  [        SU SU 35      eUS-  nUR                  USU5      nUR                  X5U5      n[        R                  " U5      nSU-
  U-  U-  U -  n	X-  n[        R                  " X/US9$ )Nr   z*glu does not support 0-dimensional tensorsr%   z.Halving dimension must be even, but dimension z	 is size rn   r   )	rV   AssertionErrorrJ   canonicalize_dimsizenarrowrE   r   cat)
rs   r   rV   wrap_dimnIn	inputSize	firstHalf
secondHalfgradInputFirstHalfgradInputSecondHalfs
             r0   glu_backwardr?    s     xxzQIJJ%%dhhj#6H
))H
C
Qw!|<XJiPSuU
 	
 qIHa3IX)<Jz2	!	!%77)CkQ  ,999(>HMMr/   c           	         SUR                  5       s=::  a  S::  d  O  [        SUR                  5        S35      eUR                  5       S:  a  [        SUR                  5        S35      eUR                  5       S:H  =(       a    UR                  5       S:H  nU(       dF  UR                  S   UR                  S   :X  d&  [        SUR                   SUR                   S	35      eUR                  5       S:w  a*  [        S
UR                   SUR                  5        S35      eUb,  UR                  5       UR                  S   :w  a  [        S5      eU[        R
                  R                  :X  a  UR                  5       S:X  aq  U R                  5       S:X  a   U R                  S   UR                  S   :X  d<  [        SUR                  S    SU R                  5        SU R                  S    35      eO@U R                  5       S::  a  U R                  5       S:X  d  [        SU R                   35      e[        XX#XEU5      $ )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)rZ   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: )rV   r3  r!  r  r"   r+   r   r1  )rs   r   r  r   r   r)  r*  no_batch_dims           r0   nll_loss_backwardrI  '  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 !Q&;+<+<+>!+C I+J[J[I\]  69L r/   c           	      d   UR                  5       S:w  a  [        SUR                  5        35      eUR                  5       S:w  a  [        SUR                  5        35      eUR                  S   UR                  S   :X  a@  UR                  S   UR                  S   :X  a   UR                  S   UR                  S   :X  d%  [        SUR                   S	UR                   35      eUR                  5       S:w  a*  [        S
UR                   SUR                  5        S35      e[	        XX#XEU5      $ )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$   rD  rE  rG  z ( z, elements))rV   r3  r!  r  r1  )rs   r   r  r   r   r)  r*  s          r0   nll_loss2d_backwardrL  Z  s5    xxzQabfbjbjblamn
 	
 zz|qcdjdndndpcqr
 	

 	

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

 69L r/   c           	      (   US-
  [         R                  " [         R                  " U * 5      U R                  SS5      5      -  U[         R                  " [         R                  " U 5      U R                  SS5      5      -  -
  nUb  XB-  n[        XC5      $ )Nr$   r&   i)rE   maximumlog1pr   logr   )r   r  r   r   r   s        r0   binary_cross_entropyrQ    s~     QJ%--TEDMM"d3 uyyb$0GHHID }00r/   c                     SnXU-
  -  [         R                  " USU-
  -  US9-  nUb  Xc-  nU[        R                  R                  :X  a  XaR                  5       -  nU$ )Ng-q=r$   r   )rE   r   r"   r,   r   r  )rs   r   r  r   r   EPSILONr"  s          r0   binary_cross_entropy_backwardrT    sa     G6M*U[[T9JPW-XXFINN(((**,&Mr/   c                 t    [         R                  " [         R                  " U * U-  5      5      n[        X25      $ r9   )rE   rO  ro   r   )r   r  r   r   s       r0   soft_margin_lossrV    s,     ;;uyy%&12D00r/   c                     X -  [         R                  " X!-  5      S-
  -  nU[        R                  R                  :X  a  XAR                  5       -  nU$ rc   )rE   r   r"   r,   r   r  )rs   r   r  r   r_   s        r0   soft_margin_loss_backwardrX    sG     %v})E)IJJINN(((**,.
r/   pc                 .    [         R                  X-
  US9$ )N)rY  )r   r  )r   r   rY  s      r0   distr[    s     99U]a9((r/   x1x2c                    U R                  S5      R                  SS5      n[        R                  " U[        R                  S9nUR                  S5      R                  SS5      n[        R                  " U[        R                  S9n[        R
                  " U R                  S5      X#/S5      n[        R
                  " XU/S5      nUR                  UR                  5      nUR                  S5      R                  5       $ )Nr%   rZ   Tmemory_formatr   )r   r   rE   	ones_likecontiguous_formatr7  r   matmulmT	clamp_minsqrt)	r\  r]  x1_normx1_padx2_normx2_padx1_x2_r"  s	            r0   _euclidean_distrn    s     ffQimmB%G__WE4K4KLFffQimmB%G__WE4K4KLF
))RVVBZ12
6C
))R)2
.CZZFA##%%r/   input_sizesstartendstepc                 T    U R                  U5      n[        R                  " X`X#XE5      $ r9   )	new_zerosrE   slice_scatter)rs   ro  rV   rp  rq  rr  r_   s          r0   slice_backwardrv    s)     &&{3JzCNNr/   r$   c                    SSK Jn  U R                  5       nUS:X  a  [        S5      e[        R
                  " U R                  5       U5      n[        U R                  5       5      n[        U R                  5       5      nUS::  a  [        S5      eUb  UOSn	Ub  UO[        R                  n
U	S:  a  XU   -  n	U
S:  a  XU   -  n
U	S:  a  Sn	OXU   :  a  Xq   n	U" U
[        R                  :H  5      (       a  Xq   n
OX:  a  U	n
OXU   :  a  Xq   n
U R                  5       XU   -  -   nX-
  nX-   S-
  U-  Xq'   X==   U-  ss'   U R                  (       a  [        S5      eU R                  XxU5      $ )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_shapesry  rV   RuntimeErrorrJ   r4  listr5  stridesysmaxsizestorage_offsetis_quantizedNotImplementedError
as_strided)r   rV   rp  rq  rr  ry  ndimsizesstrides	start_valend_valr  lens                r0   slice_forwardr    sr    L88:DqyIJJ

 
 S
1CE4;;=!Gqy899*I_c#++G1}3Z	{:1}		3Z	J	W344*			:	*((*Y-EEN

C*q.T)EJLDL!J
 	
 u~>>r/   c                 n   ^ U R                   U   mS[        4U4S jjnU" USTS5      nU" X2TT5      nX#4$ )zb
Normalize start and end such that both are in the range
[0, x.get_size()[dim]] and start <= end.
rW   c                 N   > U c  U$ U S:  a  U T-   n [        [        X5      U5      $ rz   r   r   )valr   r   defaultdim_sizes       r0   
clamp_wrap(_normalize_start_end.<locals>.clamp_wrap(  s.    ;N7.C3s?E**r/   r   )r!  int)r=   rV   rp  rq  r  r  s        @r0   _normalize_start_endr    sF     wws|H+# + ua1-E
S8
4C:r/   srcc           	      h   [         R                  " U R                  U5      nU R                  U   n[	        XX45      u  p4[        U R                  5      nXC-
  US-
  -   U-  Xr'   UR                  U5      nUS:X  a  XF:X  a  US:X  a  UR                  5       $ S /U R                  5       -  n[        R                  " X`R                  S9n	X-
  U-  X'   [        R                  " X`R                  [        R                  S9n
US:w  a  [        R                  " XU:  5      n
XF:w  a  [        R                  " XU:  5      n
US:w  a  [        R                  " XU-
  U-  S:H  5      n
S/U R                  5       -  nSX'   U
R                  U5      n
[         R#                  U
[         R%                  XUS5      U 5      $ )Nr$   r   devicer  r   rZ   )rJ   r4  r  r!  r  r|  expandclonerV   rE   aranger  onesboollogical_andviewr   rp   _unsafe_masked_index)r   r  rV   rp  rq  rr  r  src_sizeindicesidxmask
mask_shapes               r0   ru  ru  6  sr    
 
 S
1C{{3H%e%=JEEKK H[D1H-$6HM
**X
Czco$!)yy{'+fuyy{&:G
,,x
5CKD(GL::h||5::FDz  e|4
  Sy1qy  et';q'@Auyy{"JJO99Z D::dD55c!LeTTr/   indexc                 R    U R                  U5      n[        R                  " X@X#5      $ r9   )rt  rE   select_scatter)rs   ro  rV   r  r_   s        r0   select_backwardr  _  s'     &&{3J
DDr/   offsetdim1dim2c                 T    U R                  U5      n[        R                  " XPX#U5      $ r9   )rt  rE   diagonal_scatter)rs   ro  r  r  r  r_   s         r0   diagonal_backwardr  f  s)    
 &&{3J!!*6NNr/   input_dtypec                 H    U R                   U:w  a  UR                  U5      nU$ r9   )r   r<   )rs   r_   r  s      r0   _cast_grad_to_input_dtyper  o  s&     K']];/
r/   outputc                 r    X-  nXA[         R                  " XBSS9-  -
  n[        XU5      R                  5       $ NTr
  )rE   r   r  
contiguous)rs   r  rV   r  new_grad_outputr_   s         r0   _softmax_backward_datar  w  sC     "*O EII$- $ J %[kJUUWWr/   c                 x    U [         R                  " U5      [         R                  " XSS9-  -
  n[        XU5      $ r  )rE   ro   r   r  )rs   r  rV   r  r_   s        r0   _log_softmax_backward_datar    s=     uyy0599d4   J %[kJJr/   c                     XS-  -   X!S-
  -  -
  n[        [        R                  [        R                  US9nU" SXd5      R	                  S5      nU" SX-  U5      R	                  S5      n	X-   $ )z/Utility function to implement im2col and col2imr%   r$   r   r  r   rZ   )r   rE   r  int64r\   )
input_dkernel_d
dilation_d	padding_dstride_dr  blocks_d	arange_kwblocks_d_indiceskernel_grids
             r0    _im2col_col2im_indices_along_dimr    su     Q&!|)DDHEKKGI !H7AA!D Ax4jAKKBOK ))r/   kernel_sizedilationpaddingr}  c           
      
  ^^^^^^ [         R                  " [        T5      S:H  S 5        [         R                  " [        T5      S:H  S 5        [         R                  " [        T5      S:H  S 5        [         R                  " [        T5      S:H  S 5        SS jnU" TS5        U" TS5        U" TS	S
S9  U" TS5        U R                  m[        T5      n[         R                  " US;   =(       a    [	        S TSS   5       5      U4S j5        [        S [        TSS  TTTT5       5       5      m[         R                  " [	        S T 5       5      UUUUUU4S j5        US:H  nU(       d  U R                  S5      n U R                  u  ppTu  pTu  pTu  nnTu  nn[        U
UUXU R                  5      n[        UUUXU R                  5      n[        R                  " XXU45      nUR                  S5      R                  S5      nUS S 2S S 2UU4   nUR                  SSSSSS5      nUR                  S5      nUR                  S5      nUR                  XU-  U-  UU-  5      nU(       d  UR                  S5      nU$ )Nr%   c                      g)Nz"im2col(): only 2D kernel supportedr&   r&   r/   r0   r   im2col.<locals>.<lambda>  s    0Tr/   c                      g)Nz$im2col(): only 2D dilation supportedr&   r&   r/   r0   r   r    s    -Sr/   c                      g)Nz#im2col(): only 2D padding supportedr&   r&   r/   r0   r   r    s    ,Qr/   c                      g)Nz"im2col(): only 2D stride supportedr&   r&   r/   r0   r   r    s    +Or/   c                    ^ ^ U(       a  [        S T  5       5      O[        S T  5       5      n[        R                  " UU U4S j5        g )Nc              3   *   #    U  H	  oS :  v   M     g7fr   Nr&   .0rY  s     r0   	<genexpr>1im2col.<locals>.check_positive.<locals>.<genexpr>       (%Qq5%   c              3   *   #    U  H	  oS :  v   M     g7fr  r&   r  s     r0   r  r         ;REqFEr  c                     > T ST  3$ Nz& should be greater than zero, but got r&   param
param_names   r0   r   0im2col.<locals>.check_positive.<locals>.<lambda>      ZL(NugVr/   r  rE   r   r  r  strictconds   ``  r0   check_positiveim2col.<locals>.check_positive  4    ,2s(%((;RE;R8RV	
r/   r  r  r  Fr  r}  r   rK  c              3   *   #    U  H	  oS :g  v   M     g7fr  r&   r  ds     r0   r  im2col.<locals>.<genexpr>       :z!Avzr  r   c                      > S[        T 5       3$ )NzmExpected 3D or 4D (batch mode) tensor for input with possible 0 batch size and non-zero dimensions, but got: tupler!  s   r0   r   r         --25\N<r/   c              3   \   #    U  H"  u  pp4nS USU-  -   X4S -
  -  -
  S -
  U-  -   v   M$     g7f)r$   r%   Nr&   )r  r   paddilkersts         r0   r  r    sD      '
"Cc 	
S1s7]S!G_,q0R77'
s   *,ra  c              3   *   #    U  H	  oS :  v   M     g7fr  r&   )r  cs     r0   r  r    s     ';aE;r  c                  F   > S[        TSS  5       ST ST  ST ST ST S3$ )	Nz!Given an input with spatial size ra  , 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!  r}  s   r0   r   r    sJ    3E%*4E3F G"m;xj 9)9VH -]D	Fr/   rK  r   rZ   r$   r      T)rE   r   r  r!  r  r  zipr\   r  r  r   r  permuter5  r-  squeeze)r   r  r  r  r}  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    ````                     @@r0   im2colr    sl    
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{{,IGH"I%J
$Hh9:yELL ::yELL 55I) 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                   ^^^^^^!^" [         R                  " [        T5      S:H  S 5        [         R                  " [        T5      S:H  S 5        [         R                  " [        T5      S:H  S 5        [         R                  " [        T5      S:H  S 5        [         R                  " [        T5      S:H  S 5        SS jnU" TS	5        U" TS
5        U" TSSS9  U" TS5        U" TS5        U R                  m"[        T"5      n[         R                  " US;   =(       a    [	        S T"SS   5       5      U"4S j5        TS   TS   -  n[         R                  " T"S   U-  S:H  UU"4S j5        [        TTTTT5       V	V
VVVs/ s H   u  ppnSU	SU
-  -   XS-
  -  -
  S-
  U-  -   PM"     nnnn
n	nUS   US   -  m![         R                  " T"S   T!:H  U!UUUUU"U4S j5        [         R                  " T!S:  U!UUUUU"U4S j5        US:H  nU(       d  U R                  S5      n U R                  m"Tu  nnTu  nnTu  nnTu  nnTu  nnU R                  T"S   T"S   U-  /T-   U-   5      n U R                  SSSSSS5      n [        UUUUUU R                  5      n[        US5      n[        UUUUUU R                  5      n[        TT5       VVs/ s H  u  nnUSU-  -   PM     nnnU R                  T"S   T"S   [        T5      -  /U-   5      nS S UU4n [        R                  UU U SS9n[         R"                  " UU* U* U* U* 45      nU(       d  UR%                  S5      nU$ s  snnnn
n	f s  snnf )Nr%   c                      g)Nzonly 2D output_size supportedr&   r&   r/   r0   r   col2im.<locals>.<lambda>  s    0Or/   c                      g)Nzonly 2D kernel supportedr&   r&   r/   r0   r   r    s    0Jr/   c                      g)Nzonly 2D dilation supportedr&   r&   r/   r0   r   r    s    -Ir/   c                      g)Nzonly 2D padding supportedr&   r&   r/   r0   r   r    s    ,Gr/   c                      g)Nzonly 2D stride supportedr&   r&   r/   r0   r   r  	  s    +Er/   Tc                    ^ ^ U(       a  [        S T  5       5      O[        S T  5       5      n[        R                  " UU U4S j5        g )Nc              3   *   #    U  H	  oS :  v   M     g7fr  r&   r  s     r0   r  1col2im.<locals>.check_positive.<locals>.<genexpr>  r  r  c              3   *   #    U  H	  oS :  v   M     g7fr  r&   r  s     r0   r  r$    r  r  c                     > T ST  3$ r  r&   r  s   r0   r   0col2im.<locals>.check_positive.<locals>.<lambda>  r  r/   r  r  s   ``  r0   r  col2im.<locals>.check_positive  r  r/   r  r  r  Fr  r}  r  )r%   r   c              3   *   #    U  H	  oS :g  v   M     g7fr  r&   r  s     r0   r  col2im.<locals>.<genexpr>  r  r  ra  c                      > S[        T 5       3$ )NzmExpected 2D or 3D (batch mode) tensor for input with possible 0 batch size and non-zero dimensions, but got: r  r  s   r0   r   r    r  r/   r   r$   c                     > STS    ST  3$ )Nz|Expected size of input's first non-batch dimension to be divisible by the product of kernel_size, but got input.shape[-2] = ra  z and kernel_size=r&   )r  r!  s   r0   r   r  !  s!     ==B2YK H"m%r/   rZ   c                  :   > ST ST ST ST ST ST  STS    S	3$ 
NzGiven output_size=r  r   r  r  z , expected input.size(-1) to be 	 but got rZ   .r&   Lr  r  r  r  r!  r}  s   r0   r   r  .  D    $[M} M:Zy	& B))*9U2YKqBr/   c                  :   > ST ST ST ST ST ST  STS    S	3$ r.  r&   r1  s   r0   r   r  4  r3  r/   r   rK  r  
accumulater  )rE   r   r  r!  r  r  r\   r-  r  r  r  r^   rt  prodr   _unsafe_index_putr   r  r  )#r   r  r  r  r  r}  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orY  output_padded_sizer  r  r2  r!  s#    `````                           @@r0   col2imrA    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'
'
"Cc 	
S1s7]S!G_,q0R77'
   	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J0I1!a!e)0IJ__	q58tK0014FFF {K
0C##FC4#HFUU6YJ
YJ
KLF"MkV Ks   'M$M-r  c                 t    XR                  U 5      U-  -  R                  [        R                  " U 5      S9nU$ Nr_  )type_asr  rJ   r   )rs   r  ru   rP   s       r0   native_dropout_backwardrE  ]  s@     
[1E9	:AA11+> 	B 	A Hr/   
input_size	dimensionr5  c                    [        U5      S:X  a  [        R                  " U S5      $ [        R                  " [        U5      U5      n[        R
                  " X   U R                  [        R                  S9nUR                  SX45      R                  5       nU R                  SUS-   5      R                  XUS-   5      n U R                  U5      nSU-  U4-   n[        R                  XxU SS9R                  5       $ )Nr   r  rZ   r$   r9   Tr5  )r  rE   squeeze_copyrJ   r4  r  r  int32unfoldflattenmovedimrt  r   r8  r  )	r   rF  rG  r5  rr  rV   r  r_   r  s	            r0   unfold_backwardrN  l  s    
 :!!!$**

 
 Z)
<C
,,zt{{%++
NC
**Q
#
+
+
-C<<C!G$,,S':D 
+JcMSF"E!!*Td!KVVXXr/   epsc           
      0   Ub@  UnSU-
  n[         R                  " [         R                  " X:  X:*  5      XSU-
  -  -  S5      $ [         R                  " [         R                  " US:  US:*  5      XSU-
  -  -  UR                  S[	        S5      5      5      $ )Nrn   r   r&   nan)rE   rp   r  r   r  )rs   r   rO  lohis        r0   logit_backwardrT    s    
 2X{{dj$*53:./
 	
 {{dck43;73:./MM"eEl+
 	
r/   trainc                 n    U(       a  US:w  a  [         R                  XU5      S   $ U R                  5       $ rz   )r   native_dropoutr  )r   rY  rU  s      r0   dropoutrX    s1     a""5U3A66{{}r/   out0out1c                    U(       a  US:w  a  US:X  a9  [         R                  " U 5      [         R                  " U [         R                  S94$ U R                  R                  (       d  [        S5      e[         R                  " U 5      U:  nX0-  [        SSU-
  -  5      -  nXC4$ U [         R                  " U [         R                  S94$ )Nr   r$   r   z?result type Float can't be cast to the desired output type Longrn   )	rE   r  r  r   is_floating_pointr{  	rand_liker  rb  )r   rY  rU  	bool_maskress        r0   rW  rW    s     a6$$U+U-=-=e5::-VWW{{,,Q  OOE*Q.	%sQw"88uuEJJ?@@r/   half_to_floatc                 R   SSK Jn  U R                  5       n U(       a7  U R                  [        R
                  :w  a  [        SU R                   S35      e[        R                  " U [        R                  R                  S9u  pEU R                  U5      n U" U R                  5       S:H  5      (       a  [        R                  " U 5      nO-[        R                  " XSS9n[        R                  " X-
  5      nU[        R                  " XaSS9-  nU(       d  UR                  U5      nU$ Nr   guard_or_falsez%half_to_float is True but x.dtype is z, expected torch.halfr7   T)r  )rz  rd  r  r   rE   halfr3  rJ   rK   ELEMENTWISE_TYPE_PROMOTION_KINDDEFAULTr<   r  ro   amaxr   )	r=   rV   r`  rd  r>   rB   unnormalizedx_maxr"  s	            r0   _softmaxrl    s     E 	
A77ejj  7y@UV  ',&>&>	uDDLL'# 	
Aaggi1n%%yy|

140yy+EIIlFFF<(Mr/   )r   c                 V   SSK Jn  U R                  5       n U(       a7  U R                  [        R
                  :w  a  [        SU R                   S35      e[        R                  " U [        R                  R                  S9u  pEU R                  U5      n U" U R                  5       S:H  5      (       a  U nO[        R                  " XSS9nX-
  n[        R                  " [        R                  " [        R                   " U5      USS95      nXh-
  n	U(       d  U	R                  U5      n	U	$ rb  )rz  rd  r  r   rE   rf  r3  rJ   rK   rg  rh  r<   r  ri  rP  r   ro   )
r=   rV   r`  rd  r>   rB   shiftedrk  shifted_logsumexpr"  s
             r0   _log_softmaxrp    s     E 	
A77ejj  7y@UV  ',&>&>	uDDLL'# 	
Aaggi1n%%

140)		%))EIIg,>T"RS(F<(Mr/   r  padding_idxscale_grad_by_freqsparsec                     U R                  5       S:w  a  [        SU R                  5        S35      eUR                  S::  a5  U R                  SU5      nUR                  S:X  a  UR	                  S5      nU$ X   $ )Nr%   z'weight' must be 2-D, got z-Dr$   r   )rV   r3  r  index_selectr  )r   r  rq  rr  rs  r   s         r0   	embeddingrv    sq     zz|q9&**,rJKK||q!!!W-<<1++a.C
r/   num_weightsc                 d   [         R                  " U [         R                  R                  S9u  pVU R	                  U5      n [        U[        R                  5      nU(       aU  UR                  U45      n[        R                  " U5      n[        R                  Xq/USS9nXq   n	X	R                  S5      -  n [        X:H  U R                  5      n
U R                  U
S5      nU R                  U4U R                   UR                  S  -   5      n[        R                  X/USS9R	                  U5      $ )Nre  Tr5  rZ   r   )rJ   rK   rg  rh  r<   r   rE   longrt  rb  r   r8  r\   r^   r  masked_fillr!  )rs   r  rw  rq  rr  r>   rB   countsr  grad_weights_scaler  r   grad_weights                r0   embedding_dense_backwardr~    s    ',&>&>)N)N)V)V'# ..!23K%guzz:G""K>2w'''	4D'Q#_!$@$@$DDW3[5E5EFD""4+D''	**7<<>::K !!+y$4!PSS r/   c                 $    SnU  H  nX-  nM	     U$ rc   r&   )r=   rP   is      r0   r7  r7    s    	A	 Hr/   tensors
num_chunksc                 Z   / nU  H  nUR                  5       nXQ   U-   S-
  U-  U-  nXeU   :w  a9  S/S-  UR                  U-
  S-
  -  SXeU   -
  /-   n[        R                  XGS5      nUS U [        R
                  " US/5      -   nUR                  UR                  U5      5        M     U$ )Nr$   r   r%   rZ   )r5  r  r   constant_pad_ndrE   Sizeappendr-  )	r  rV   r  padded_tensorstensortensor_sizepad_along_dimr  	view_sizes	            r0   
_pad_chunkr  $  s    
 Nkkm$)J6:zIJV,,#'V[[3.23C 007 C ))&q9F%

J3C(DD	fnnY78  r/   c                 X    U S   R                   nU  H  nUR                   U:w  d  M    g   g)Nr   FTr  )r  r  r  s      r0   have_same_ndimsr  9  s-    1:??D;;$  r/   c                     U S   R                  5       S U nU  H/  n[        R                  " UR                  5       S U U:H  S 5        M1     g )Nr   c                      g)NzG_chunk_cat expects same sizes of 0,...,dim-1 dimensions for all tensorsr&   r&   r/   r0   r   +leading_dimension_matches.<locals>.<lambda>F  s    ]r/   )r5  rE   r   )r  rV   leading_dim_sizesr  s       r0   leading_dimension_matchesr  A  sI    
)$3/KKM$3#44]	
 r/   c                    [         R                  " US:  S 5        [         R                  " [        U 5      S:  S 5        U S   R                  nU S   R                  nU  Hv  n[         R                  " UR                  5       S:  S 5        [         R                  " UR                  U:H  S 5        [         R                  " UR                  U:H  S 5        Mx     [        U 5      (       a)  [        R                  " U S   R                  5       U5      nOH[         R                  " US:  S 5        U  H'  n[         R                  " XR                  :  S	 5        M)     [        X5        U$ )
Nr$   c                      g)Nz&_chunk_cat expects positive num_chunksr&   r&   r/   r0   r   ._preprocess_chunk_cat_inputs.<locals>.<lambda>O  s    *Rr/   r   c                      g)Nz0_chunk_cat expects a non-empty input tensor listr&   r&   r/   r0   r   r  Q  s    "Tr/   c                      g)Nz#_chunk_cat expects non-empty tensorr&   r&   r/   r0   r   r  V  s    1Vr/   c                      g)Nz8_chunk_cat expects all input tensors with the same dtyper&   r&   r/   r0   r   r  Y      Nr/   c                      g)Nz8_chunk_cat expects all inputs tensors on the same devicer&   r&   r/   r0   r   r  ]  r  r/   c                      g)NzK_chunk_cat expects non-negative dim when input tensors have different ndimsr&   r&   r/   r0   r   r  d  s    ar/   c                      g)Nz3_chunk_cat expects dim < ndim for all input tensorsr&   r&   r/   r0   r   r  i      Mr/   )rE   r   r  r   r  r  r  rJ   r4  rV   r  r  )r  rV   r  expected_dtypeexpected_devicer  s         r0   _preprocess_chunk_cat_inputsr  J  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kk!M 
 g+Jr/   r   c                     [        XU5      n[        XU5      nUc  [        R                  " XAS-   5      $ [        R                  " XAS-   US9  U$ )Nr$   )r   )r  r  rE   r7  )r  rV   r  r   r  s        r0   
_chunk_catr  o  sK     'wZ
@Cj9N
{yyq11		.'s3
r/   split_sizesc                     [         R                  XUS9nUc-  U Vs/ s H  oUR                  [        R                  S9PM!     sn$ [        X45       H$  u  pg[        XgR                  5        [        XvSS9  M&     g s  snf )Nr   r_  Tr  )	r   split_with_sizesr  rE   rc  r  r   r!  r   )r   r  rV   r   splitssr  splits           r0   split_with_sizes_copyr    st     ""4#">F
{HNO1e&=&=>OO -MFfkk2UM .  Ps   &A9
split_size.c                 B    [         R                  R                  XU5      $ r9   )r   r  r   )r   r  rV   s      r0   unsafe_splitr    s    ::U44r/   c                 B    [         R                  R                  XU5      $ r9   )r   r  r  )r   r  rV   s      r0   unsafe_split_with_sizesr    s       ((SAAr/   c                 0   U R                   nX2   nUS:X  a&  US:w  a  [        SU S35      eU R                  5       4$ XA-   S-
  U-  nSSKJn  U" U5      n[        U5       Vs/ s H  oqPM     nnXU-  U-
  -
  US'   [        R                  " XU5      $ s  snf )Nr   z split_size is 0 but dim_size is z, expected 0r$   )	guard_intrZ   )r!  r3  detachrz  r  r[   rE   r  )	r   r  rV   ro  r  chunksr  r  r  s	            r0   r  r    s    **KHQq= 28*LI  #a'J6F @vF',V}5}!:}K5 $7($BCKO;;t#.. 6s   "Btensor_indices_or_sectionsc                 D  ^	 UR                   R                  S:w  a  [        SUR                    35      eUR                  [        R
                  :w  a  [        SUR                   35      eUR                  5       m	[        R                  " T	S:H  =(       d    T	S:H  U	4S j5        T	S:X  aW  UR                  5       n[        U[        5      (       d!  [        S[        U5      R                   35      eU R                  X25      $ [        n[        R                  R                  5       =n(       a  UR                   =n(       a  UR"                  nU" 5          U Vs/ s H  owR                  5       PM     nnS S S 5        U R                  WU5      $ s  snf ! , (       d  f       N%= f)Ncpuz/tensor_indices_or_sections must be on CPU, got z.tensor_indices_or_sections must be int64, got r$   r   c                     > ST  S3$ )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   r0   r   Atensor_split_tensor_indices_or_sections_py_impl.<locals>.<lambda>  s     <<E;eMr/   z%Expected sections to be IntLike, got )r  typer3  r   rE   r  rV   r   itemr;   r   r'   tensor_splitr   _guardsdetect_fake_mode	shape_envignore_fresh_unbacked_symbols)
r   r  rV   sectionsctx	fake_moder  r  r  r  s
            @r0   /tensor_split_tensor_indices_or_sections_py_implr    sx    "((--6=>X>_>_=`a
 	
 "''5;;6<=W=]=]<^_
 	
 +..0I	LLQ()q.	M
 A~-224(G,, 7X8O8O7PQ    //7799I9",,,I,99C
 U)CD)CAvvx)CGD    #.. E Us   FF0FF
Fmat1mat2c                     U R                  5       (       d+  U R                  5       (       d  [        U5      n[        U5      nU[        R                  " X5      -  nUS:X  a  U$ XSU -  -   $ rz   )r\  
is_complexr  rE   mm)r   r  r  rj   rt   r   s         r0   addmmr    s_     !!##DOO,=,=4yE

%((4&
&Cqy
 r/   use_geluc                     [        XX#U5      nU(       a:  U R                  (       a  [        R                  USS9$ [        R                  U5      $ [        R	                  U5      $ )Nr   )r   )r  is_cudar   gelurelu)r   r  r  rj   rt   r  r   s          r0   _addmm_activationr    sK     D
.C<<99Sf95599S>!99S>r/   vecc                    U R                  5       (       d+  U R                  5       (       d  [        U5      n[        U5      nU[        R                  " X5      -  nUS:X  a  U$ UR                  5       S:X  a  X0-  $ XSU -  -   $ rz   )r\  r  r  rE   mvr  )r   r  r  rj   rt   r   s         r0   addmvr    ss     !!##DOO,=,=4yE

%((4%
%Cqy

yy{a{r/   r   rstdgammaNCHxWgroupoutput_maskc
           	      \  ^^^^^^ [         R                  " XTUSS9  [         R                  " XSS9  [         R                  " TUSS9  [        R                  " UR                  5       TT-  T-  :H  UUU4S j5        [        R                  " TR                  TT4:H  UUU4S j5        [        R                  " TS L =(       d    TR                  5       T:H  UU4S j5        TT-  n
[        R                  " TU
T-  :H  UU4S j5        [        R                  " X5      R                  TTT5      R                  S/S9nU R                  TTT5      R                  S/S9nS nS nS nU	S	   (       Ga/  S
TU
-  -  nTb  [        R                  " UTR                  S	5      5      R                  TTU
5      R                  S5      n[        R                  " UTR                  S	5      5      R                  TTU
5      R                  S5      n[        R                  " UR                  S5      TR                  STU
5      5      nOUR                  TTU
5      R                  S5      nUR                  TTU
5      R                  S5      n[        R                  " UR                  S5      [        R                  " STU
4UR                  S95      nUT-  U-
  U-  U-  U-  U-  nU* T-  UU-  U-  -
  nUR                  S5      n[        US5      n[        US5      n[        R                  " U R                  TTU
T5      U5      [        R                  " UR                  TTU
T5      U5      -   U-   nUR                  UR                  5      R                  UR                   5      nU	S   (       ah  UR                  TTU
5      UR                  TTU
5      TR                  S5      -  -
  UR                  S5      -  R                  S	/S9R                  T5      nU	S   (       a  UR                  S	/S9nXU4$ )NF)allow_cpu_scalar_tensorsc                     > STT -  T-   S3$ )NzExpect input to have z	 elementsr&   )r  r  r  s   r0   r   ,native_group_norm_backward.<locals>.<lambda>6  s    'A}I>r/   c                  .   > ST  ST STR                    3$ )NzExpect mean to have shape (, z
, but got r  )r  r  r   s   r0   r   r  :  s    -aS5'DJJ<Pr/   c                  >   > ST  STb  TR                  5        3$ S 3$ )NzExpect gamma to have z elements but got rZ   )r  )r  r  s   r0   r   r  >  s)    's*<eN_U[[]<hieg<hir/   c                     > ST  ST 3$ )NzExpect number of channels z, to be evenly-divisible by number of groups r&   )r  r  s   r0   r   r  D  s    ,QC/[\a[bcr/   r%   r   r   rn   rZ   r$   r  rK  )rJ   check_same_devicecheck_same_shaperE   r   r  r!  r   r  r   r\   r-  r  r  r^   r<   r   )rs   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     ` `````             r0   native_group_norm_backwardr  !  s    
D$ 
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f%%r/   out2c
                    [        XX#XEXgX5
      nXU4n[        U5       H0  u  nnUc  M  [        X   UR                  5        [	        UX   SS9  M2     U$ r  )r  	enumerater   r!  r   )rs   r   r   r  r  r  r  r  r  r  rY  rZ  r  r"  r_   r  rP   s                    r0   native_group_norm_backward_outr  z  sc    " (D!%F d#J&!1=jmQWW5Q
4P "
 r/   c                 .    U b  U R                  U5      $ U $ r9   r<   )r=   r   s     r0   _maybe_castr    s    }ttE{Hr/   grad_outnormalized_shapebiasc                   ^" UR                   nUR                  5       n	[        R                  " UR                  5      m"U"4S jXXV4 5       u  ppU
c  [        S5      eU	[        U5      -
  nXS  nUS U n/ n/ n[        U	5       H-  nUU:  a  UR                  U5        M  UR                  U5        M/     [        U5      n[        U5      nSSK
Jn  U" US:H  5      (       d  U" US:H  5      (       a[  US   (       a  UR                  U5      OS US   (       a  UR                  XS  5      OS US   (       a  UR                  XS  5      4$ S 4$ [        X;R                  5       5      n[        XKR                  5       5      nUc  [        S5      eX-
  U-  nUb  X-  nOU
nUU-  n[        R                  " UUS5      n[        R                   " UU5      n[        R                  " UUS5      n[        R                   " UU5      nUU-
  U-
  nS nS n S n!US   (       a  UU-  U-  nUS   (       a3  Ub0  [        U5      S:  a  [        R                  " U
U-  US	5      n OU
U-  n US   (       a;  Ub8  [        U5      S:  a  [        R                  " U
US	5      n!OU
R#                  5       n![%        UUR                  5      [%        U Ub  UR                  OS 5      [%        U!Ub  UR                  5      4$ S 5      4$ )
Nc              3   j   >#    U  H(  nUb  UR                  T[        R                  S9OUv   M*     g 7frC  )r<   rE   rc  r  r=   r>   s     r0   r  -native_layer_norm_backward.<locals>.<genexpr>  s?      9 1A = 	
e.E.EF	 1s   03 grad_out_cast should not be Noner   rx  r$   r%   zinput_cast should not be NoneTF)r!  rV   rJ   get_computation_dtyper   r3  r  r[   r  r7  rz  ry  rt  r^   rE   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  Mry  x_hat
grad_x_hatabr  r  r  rQ   r  d_weightr  r>   s#                                     @r0   native_layer_norm_backwardr    s    ++KJ33EKK@9 60	95M{ ?@@,--DU#JUd#J#%#%:9$$Q'$$Q'	  	ZAZAKQ!V$$(=a1f(E(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          
          [        XX#XEXg5      nXU
4n[        U5       H/  u  pUc  M
  [        X   UR                  5        [	        XU   SS9  M1     U$ r  )r  r  r   r!  r   )r  r   r  r   r  r   r  r  rY  rZ  r  r"  r_   r  rP   s                  r0   native_layer_norm_backward_outr    s`     ()tF d#J&!=jmQWW5Q14P "
 r/   c           	      `   / n[        [        U5      5       H(  nUR                  U R                  5       U-
  S-
  5        M*     [        R
                  " U R                  5      nU R                  U5      nUc  U[        R                  [        R                  4;   a/  [        R                  " [        R                  5      R                  nO1[        R                  " [        R                  5      R                  nOUn[        R                  " [        R                  R                   R"                  R%                  [        R&                  " US5      R)                  USS9U5      5      n	UR+                  U	5      n
Ub  U
R+                  U5      n
U R,                  =(       d    US L=(       a    UR,                  n[        R.                  " U 5      nU[        R0                  [        R2                  4;   nU(       d'  U(       d   U
R5                  5       n
U	R5                  5       n	U
R7                  U 5      nX4$ )Nr$   r%   Tr
  )r[   r  r  rV   rJ   r  r   r<   rE   r   r   finforO  r   rsqrtopsr   addScalarr   r   r   	is_nestedr   channels_lastchannels_last_3dr  rD  )r   r  r   rO  dims_to_reducer  r>   upcasted_inputeps_valrqrst_inputupcasted_resultr  r`  is_channels_lastr"  s                  r0   _fused_rms_normr&    s    !#N3'()eiikAo12 * 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                 x   UR                   nUR                  5       n[        R                  " UR                  5      nU R                  U[        R                  S9n	UR                  U[        R                  S9n
Ub  UR                  U[        R                  S9OS nU	c  [        S5      eU[        U5      -
  nXlS  nUS U n/ n/ n[        U5       H-  nUU:  a  UR                  U5        M  UR                  U5        M/     [        U5      n[        U5      nSSKJn  U" US:H  5      (       d  U" US:H  5      (       a=  US   (       a  UR                  U5      OS US   (       a  UR                  XlS  5      4$ S 4$ [!        X:R                  5       5      nUb  X-  nOU	nS nS nX-  nUS   (       a'  [        R"                  " UU-  USS9nUUU-  U-  -
  U-  nUS   (       a0  Ub-  U	U-  n[        U5      S:  a  [        R"                  " UUSS9nOUn[%        UUR                  5      [%        UUR                  5      4$ )	Nr_  r  r   rc  r$   Tr
  F)r!  rV   rJ   r  r   r<   rE   rc  r3  r  r[   r  r7  rz  rd  rt  r^   r   r  )r  r   r  r  r   r  r  r  r>   r  r  r  r	  r
  r  r  r  r  r  r  rd  r  r  r  r  sum_vald_weight_full_shapes                              r0   _fused_rms_norm_backwardr*  F  sX    ++KJ33EKK@KK)@)@   M +5;R;RSJ  			#53J3J	K 
 ?@@,--DU#JUd#J#%#%:9$$Q'$$Q'	  	ZAZADa1fQ!7!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	                 @   S/[        [        SU R                  5       5      5      -   n	[        R                  " U R
                  5      n
UnUnU(       Ga'  [        R                  " U R
                  5      n
U R                  U
S9n[        R                  " XSSS9u  p[        R                  " X-   5      nX-
  U-  n[        R                  " X5      n[        R                  " UU	5      nUb&  UU-  SU-
  U-  -   nU(       d  UR                  U5        Ubg  U R                  5       U R                  S   -  n[        R                  " X5      nUUUS-
  -  -  nUU-  SU-
  U-  -   nU(       d  UR                  U5        OUb  Uc  [        S5      eUR                  U
SS9nUnUR                  U
SS9nUnUnS[        R                  " XG-   5      -  nU R                   R"                  S	:w  a  UnUnO"U R%                  S
5      nU R%                  S
5      n['        XR                  5       S-
  5      n['        UU R                  5       S-
  5      nX-
  U-  nUb1  UR)                  5       n['        XR                  5       S-
  5      nUU-  nUb1  UR)                  5       n['        X R                  5       S-
  5      nUU-   nU R                   R"                  S	:X  a2  UR                  U R
                  S9nUR                  U R
                  S9nUR                  U R
                  S9UUUU4$ )Nr   r%   r   T)rV   
correctionr  r$   z:running_mean and running_var must not be None in eval mode)r   r   r  r   )r|  r[   rV   rJ   r  r   r<   rE   var_meanr  r  copy_r  r!  r3  rg  r  r  rt  r^   rL  )r   r   r  r+  r,  r   r-  rO  r.  reduction_dimsr>   new_running_meannew_running_var	input_acc
biased_varr   r  r  	save_mean	save_rstdnsqueezed_varunbiased_varinvstds                           r0   native_batch_norm_helperr?    s    S4a 566N33EKK@#!O!77DHH#4H5	 >>a

 {{:+,,$&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!234<<%$II-I-I yy{Q7"6599;?;,&(!"699;?;&||~ yy{Q7$||E!LLu{{L3	LLu{{L3				$ r/   r9  save_invstdc                 2    [        XX#XEXgS5	      u  pn
  nXU
4$ NFr?  r   r   r  r+  r,  r   r-  rO  r  r9  r:  r]   s               r0   native_batch_normrE    s1     *Bt;(QV*&Fy!Q i''r/   c           
          Uc  Uc  [         R                  XX%Xg5      $ Uc  [        S5      eUc  [        S5      eU(       a  [         R                  XX#XEXg5      $ [         R                  XX#XFU5      $ )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_legitr{  $_native_batch_norm_legit_no_training)r   r   r  r+  r,  r   r-  rO  s           r0   native_batch_norm_decompositionrI    s      3,,48
 	
 <
 	
 <
 	
 ,,4{h
 	
 884{c
 	
r/   c                 |   U R                  U5      nX1-   S-
  U-  nUS:X  ac  US:X  a]  [        U5       Vs/ s H  oTPM     nnXDU-  U-
  -
  XaS-
  '   [        R                  R                  R
                  R                  XU5      $ [        R                  R                  R                  R                  XU5      $ s  snf Nr$   r   )	r5  r[   rE   r  r   r  r  r  r   )r  r  rV   r  r  r]   r  s          r0   unsafe_chunk_py_implrL  (  s    {{3H#a'F2JQ8q=+0=9=az=9",V0Ch0N"OQJyy~~55==fSVWW99>>&&--f#FF :s   B9c           
      N    [         R                  R                  U UUUUSUU5      $ rB  )r   rG  r  )r   r   r  r+  r,  r-  rO  s          r0   rH  rH  4  s5     ((00	 	r/   c                 2    [        XX#XEXgS5	      u  pn
  nXU
4$ rB  rC  rD  s               r0   rG  rG  J  s1     *Bt;(QV*&Fy!Q i''r/   c                 6    [        XUS S X4US5	      u  pgn  n	XgU4$ rB  rC  )
r   r   r  r   r-  rO  r  r9  r:  r]   s
             r0   !_native_batch_norm_legit_no_statsrP  [  s4     *BtT4S%*&Fy!Q i''r/   c                 n    [        XX#XEXgS5	      u  nn	n
nnUc  [        S5      eUc  [        S5      eXXU4$ )NT#new_running_mean should not be None"new_running_var should not be None)r?  r3  )r   r   r  r+  r,  r   r-  rO  r  r9  r:  r5  r6  s                r0   #_native_batch_norm_legit_functionalrT  j  s_    " 	!t;(QU	 BCCABBi?JJr/   c           	      L   [         R                  R                  XX#USU5      nSnU[         R                  R                  R                  :X  a  [         R                  R                  X5      n[         R                  " U[         R                  U R                  U R                  S9$ )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  )
rE   _C_select_batch_norm_backend_BatchNormBackendCudnn(_get_cudnn_batch_norm_reserve_space_sizeemptyuint8rV  r  )	r   r   r  r+  r,  rO  r   backendreserve_sizes	            r0   _get_batch_norm_reserve_tensorr`    s      hh11t;cG L%((,,222xxHH
 ;;EKKU\\ r/   c                 R    [        U UUUUSUUS5	      u  pxn	  n
[        XX#XFSS9nXxX4$ )NTFr   r?  r`  r   r   r  r+  r,  r-  rO  r  r9  r:  r]   reserves               r0   _batch_norm_with_updaterf    sU     *B
*&Fy!Q -t;dG i00r/   c                     [        XX#USXVS5	      u  nnn	n
n[        XX#XFSS9nU
c  [        S5      eUc  [        S5      eXxXX4$ )NTrb  rR  rS  )r?  r`  r3  )r   r   r  r+  r,  r-  rO  r  r9  r:  new_rmnew_rvre  s                r0   "_batch_norm_with_update_functionalrj    ss      	!t;hT	 -t;dG ~BCC~ABBy6BBr/   c                 R    [        U UUUUSUUS5	      u  pxn	  n
[        XX#XFSS9nXxX4$ )NFrb  rc  rd  s               r0   _batch_norm_no_updaterl    sU     *B
*&Fy!Q -t;eG i00r/   c                     Ub  [        SU 35      e[        R                  " U 5      U:  R                  [        R                  S9nUR                  U 5      U -  SU-  -  nXC4$ )Nz=generator must be None for _fused_dropout decomposition, got r   rn   )r3  rE   r]  r<   r]  rD  )r   rY  	generatorr  r_  s        r0   _fused_dropout_decompositionro    sl     KI;W
 	
 OOE"Q&***=D
,,u

%q
1C;r/   )r   rV  r  
pin_memorynon_blockingr`  r  rp  rq  r`  c                ^   U(       a"  U[         R                  :w  a  [        SU 35      eU(       a  [        S5      e[        U [         R                  [
        [        [        [        45      (       d!  [        S[        U 5      R                   35      eUc7  Uc4  Uc1  [        U [         R                  5      (       a  U R                  5       $ U $ Sn[        U [         R                  5      (       a  U nO[         R                  " U 5      nUbc  X8R                  :w  aT  Ub1  UR                  S:X  a!  [         R                  R                  X5      nSn[         R                  R!                  XU5      nUb(  U(       d!  [         R                  R                  X5      nSnUb  [         R                  " XS9$ U$ )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_  )rE   stridedr3  r;   r   r  r  r  complexr  r'   r  scalar_tensorr  _primsconvert_element_type
device_put)	r=   r   rV  r  rp  rq  r`  dtype_convertedx_tensors	            r0   _to_copyr{  	  sY    &EMM)I&RSSH
 	
 a%,,UD'BCC?Q@P@P?QRSS~%-M,Aa&&779HO!U\\""&&q)f7!5||88IH"O<<**8\J<<44XE {{8AAOr/   c                 ,    [         R                  U 5      $ r9   )r   alias)r=   s    r0   nop_decompositionr~  5	  s     ::a=r/   out3exponential_average_factorepsilonc           
         [         R                  U UUUUUUU5      u  pn
U(       a   XXR                  S[        R                  S94$ UUR                  S5      UR                  S5      U R                  S[        R                  S94$ )Nr1  r   )r   rE  rt  rE   r]  )r   r   r  r+  r,  r   r  r  r  r  r  s              r0   cudnn_batch_normr  =	  s     $$"	GA! aU[[ABB	EKK0	 r/   c                     [        U5       HB  u  p#US:X  d  M  X R                  :  a  U R                  U   U:X  a  M1  U R                  U5      n MD     U $ rc   )r  r  r!  r\   )r=   broadcast_maskr	  r  s       r0   _broadcast_batch_norm_backwardr  _	  sF    /
19dVVm0ED!A 0 Hr/   re  c                 *    [        U UUUUUUUUU	5
      $ r9   )native_batch_norm_backward)r  r   r   r+  r,  r9  r@  rU  rO  r  re  s              r0   batch_norm_backwardr  f	  s/     & r/   c
                 `  ^& UR                   n
Ub  UR                   nOU
n[        R                  " UR                   5      m&U&4S jU UUUUUU4 5       u  nnnnnnnUR                  nUR	                  5       nUS:  a  [        SU 35      eSn[        [        U5      5      UU   -  nUnUnU(       a  Ub  Uc  [        S5      eO,Ub  Uc  [        S5      eUn[        R                  " UU-   5      nS/U-  nUU   UU'   / n[        U5       H  nUU:w  d  M  UR                  U5        M     [        UU5      nSU-  n[        R                  " UU5      n[        R                  " XU-
  -  U5      n[        UU-  U5      n[        [        R                  " UU-  UU-  5      U5      n Uc  [        UU5      S-  n!O[        UU-  U5      n!U(       a  UU-
  U -  n"UU"-
  U-
  U!-  n#OUU!-  n#U	S   (       a  UU-  n$OS n$U	S   (       a  Un%OS n%U#R                  U
5      [!        U$U5      [!        U%U5      4$ )Nc              3   P   >#    U  H  nUb  UR                  T5      OUv   M     g 7fr9   r  r  s     r0   r  -native_batch_norm_backward.<locals>.<genexpr>	  s/      	
A $%=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 modern   )r   rJ   r  r!  rV   r3  r7  r|  rE   r  r[   r  r  r   r   r<   r  )'r  r   r   r+  r,  r9  r@  rU  rO  r  r  weight_dtyper  r  r  running_mean_castrunning_var_castsave_mean_castsave_invstd_castr  
input_rankr	  num_featuresr   r>  r  reduction_axesr  r  grad_output_sumdot_p	grad_mean
proj_scale
grad_scaleprojr_   r}  	grad_biasr>   s'                                         @r0   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IImD'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
                    [        U UUUUUUUUU	5
      nXU4n[        U5       H0  u  nnUc  M  [        X   UR                  5        [	        UX   SS9  M2     U$ r  )r  r  r   r!  r   )r  r   r   r+  r,  r9  r@  rU  rO  r  rY  rZ  r  r"  r_   r  rP   s                    r0   native_batch_norm_backward_outr  	  sv    " (F d#J&!1=jmQWW5Q
4P "
 r/   save_varc                 B    [         R                  UU UUUUUSU/ SQ5
      $ NT)TTTr   r  )r   rs   r   r+  r,  r9  r  r  s           r0   miopen_batch_norm_backwardr  
  s5     ** r/   reserveSpacec	                 B    [         R                  UU UUUUUSU/ SQ5
      $ r  r  )	r   rs   r   r+  r,  r9  r  r  r  s	            r0   cudnn_batch_norm_backwardr  0
  s5     ** r/   c                   ^^^^^ U R                   mU R                  m[        T5      m[        R                  " TS;   U4S j5        U R                  SS   H!  n[        R                  " US:g  U4S j5        M#     TS   US   -  S:X  aw  TS   US   -  S:X  ah  [        S [        TSS  U5       5       5      n[        S [        TSS  X5       5       5      n[        R                  R                  R                  XU5      $ S	 mS
 mUUU4S jnU" TS   US   5      u  pgpU" TS   US   5      u  ppU S[        US5      U
4   nU	(       d  U(       d  [        R                  " USS9$ S nU" XXSS9u  pU" XXSS9u  pS n[        [        UR                  S   5      [        UR                  S   5      5       H$  u  nnUc  USUS S 2U4   nM  UUSUS S 2U4   -   nM&     UX{-  -  $ )Nr  c                     > ST  3$ )Nz9adaptive_avg_pool2d(): Expected 3D or 4D tensor, but got r&   r  s   r0   r   %adaptive_avg_pool2d.<locals>.<lambda>U
  s    KD6Rr/   ra  r   c                  "   > S[        T 5       S3$ )Nzjadaptive_avg_pool2d(): Expected input to have non-zero size for non-batch dimensions, but input has shape r0  r  r  s   r0   r   r  Z
  s     99>uaIr/   rZ   c              3   .   #    U  H  u  pX-  v   M     g 7fr9   r&   )r  r  r?  s      r0   r  &adaptive_avg_pool2d.<locals>.<genexpr>`
  s     G*F$!qv*F   c              3   <   #    U  H  u  po1US -
  U-  -
  v   M     g7fr$   Nr&   )r  r  r?  r  s       r0   r  r  a
  s"      
+OaQ!O+Os   c                 2    [         R                  " X-  USS9$ )Ntruncrounding_moderE   divr  r  r  s      r0   start_index(adaptive_avg_pool2d.<locals>.start_indexf
  s    yy99r/   c                 F    [         R                  " U S-   U-  U-   S-
  USS9$ )Nr$   r  r  r  r  s      r0   	end_index&adaptive_avg_pool2d.<locals>.end_indexi
  s&    yy!a%1q1,awGGr/   c                    > [         R                  " UT[         R                  S9nT" X!U 5      nX-  S-   nX-  nUS:H  =(       d    X-  S:H  (       + nU(       a  US-  nOUS:X  a  US-  n[         R                  " UT[         R                  S9nUR                  S5      U-   nU(       aQ  [         R                  " U S-
  UR
                  UR                  S9n	[         R                  " X5      nT" X!U 5      n
X-
  nOUnXXv4$ )Nr  r$   r   rZ   r  )rE   r  r  r\   ru  r   r  minimum)in_sizeout_sizeorangei0	maxlengthin_size_modadaptive	range_maxr  maxvali1lengthr  r  r  s               r0   compute_idx(adaptive_avg_pool2d.<locals>.compute_idxl
  s    hvU[[I73 '!+	(#q(GH,Ba,GHNIANILL6M	ll2* ((!399SZZF --,C 6W5BWFFI//r/   .rK  )r   rZ   r   c                     [        U[        5      (       a  X4$ US:  a  [        SU 35      eX!R                  S5      :  nUS:X  a  [	        US5      n[
        R                  " XS5      n [	        X* 5      nX4$ )Nr   z)dim should be negative when masking, got rZ   ra  rK  r   )r;   r   r3  r\   r^   rE   rz  )valsr  r  r  rV   r  s         r0   
maybe_mask'adaptive_avg_pool2d.<locals>.maybe_mask
  s    fg&&< ax$'PQTPU%VWW 0 0 44Dby(q1$$T5D&vt4F<r/   )r  rV   r   )r  r!  r  rE   r   r  r  nnr.  
avg_pool2dr^   r   r
   r[   )r   r  r  r}  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                      @@@@@r0   adaptive_avg_pool2dr  K
  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""--eVDD:H0@ /:%)[QS_.U+DK.9%)[QS_.U+DK'a0$67Djzz$H--    bND  bND
 Cdjjn-uTZZ^/DE1;sAq!|$CS!Q\**C	 F
 (%&&r/   c                    [         R                  " SU S35        [        [        R                  U R
                  S U*  5      n[        [        R                  U5      nS/U R                  -  nU R
                  S U*  US U* & U[        R                  X@R                  S9R                  U5      U-  -   R                  S5      nU R                  [        U R
                  S U*  5      [        U5      -   5      n[        R                  UR                  S5      U/U R                  S5      SS9R                  UR
                  5      $ )Nmax_unpoolingd_forward_outr$   r  rZ   Fr5  )rJ   alert_not_deterministicr   operatorr   r!  r  r   r  r  r  r-  rt  r|  r8  )	r   r  r  rV   nchwindices_nc_shapeindices_flatr  s	            r0   _max_unpoolndr  
  s    
!!M#m"DE	djj3$/	0B	k	*BsTYY"jj3$/Usd$++b+5::;KLrQQgbk  ^^DEcT!23d;6GGHF!!r\NDLL,< " 
d6<<r/   c                 ,  ^ ^^^ [         R                  " TR                  [         R                  :H  U4S j5        [         R                  " [	        T5      S:H  U4S j5        [         R                  " T R
                  S;   U 4S j5        [         R                  " T R                  TR                  :H  UU 4S j5        [        ST R
                  5       H1  m[         R                  " T R                  T5      S:  UU 4S	 j5        M3     [        T TTS5      $ )
Nc                  "   > ST R                    3$ )Nz2elements in indices should be type int64 but got: r   )r  s   r0   r   max_unpool2d.<locals>.<lambda>
  s    DW]]OTr/   r%   c                  "   > S[        T 5       S3$ )NzMThere should be exactly two elements (height, width) in output_size, but got 
 elements.r  r  s   r0   r   r  
      ;'(
4r/   r  c                  $   > ST R                    S3$ )NzLInput to max_unpooling2d should be a 3d or 4d Tensor, but got a tensor with  dimensions.r  r   s   r0   r   r  
  s    %%)YYK|=r/   c                  <   > STR                    ST R                    3$ NzBExpected shape of indices to be same as that of the input tensor (z%) but got indices tensor with shape: r  )r  r   s   r0   r   r  
  s'    PQUQ[Q[P\ ]229--Br/   r$   r   c                  *   > STR                    ST  S3$ )NzZmax_unpooling2d(): Expected input to have non-zero size for non-batch dimensions, but got  with dimension  being empty.r  )r  r   s   r0   r   r  
  s     ::,&6qcHr/   )
rE   r   r   r  r  r  r!  r[   r5  r  )r   r  r  r  s   ```@r0   max_unpool2dr  
  s     
LL$T 
LLKA	
 
LL		V	
 
LL

gmm#	
 1dii IIaL1	
 ! wQ77r/   c                 D  ^ ^^^^^ [         R                  " TR                  [         R                  :H  S 5        [         R                  " T R                  S;   U 4S j5        [         R                  " [        T5      S:H  U4S j5        [         R                  " [        T5      S:H  U4S j5        [         R                  " [        T5      S:H  U4S j5        [         R                  " T R                  TR                  :H  UU 4S j5        [        S	T R                  5       H1  m[         R                  " T R                  T5      S
:  UU 4S j5        M3     [         R                  " TS
   S
:  =(       a    TS	   S
:  =(       a    TS   S
:  U4S j5        [        T TTS5      $ )Nc                      g)Nz(elements in indices should be type int64r&   r&   r/   r0   r   max_unpool3d.<locals>.<lambda>  s    .Xr/   rK  r  c                  $   > ST R                    S3$ )NzLInput to max_unpooling3d should be a 4d or 5d Tensor, but got a tensor with r  r  r   s   r0   r   r  
  s    ^_d_i_i^jjvwr/   r   c                  "   > S[        T 5       S3$ )NzVThere should be exactly three elements (depth, height, width) in output_size, but got r  r  r  s   r0   r   r    r  r/   c                  "   > S[        T 5       S3$ )NzRThere should be exactly three elements (depth, height, width) in stride, but got: r  r  r}  s   r0   r   r    s    dehioepdqq{|r/   c                  "   > S[        T 5       S3$ )NzSThere should be exactly three elements (depth, height, width) in padding, but got: r  r  )r  s   r0   r   r    s    efijqfress}~r/   c                  <   > STR                    ST R                    3$ r  r  )r  r   s   r0   r   r    s'    PQVQ\Q\P] ^229--Br/   r$   r   c                  *   > STR                    ST  S3$ )NzZmax_unpooling3d(): Expected input to have non-zero size for non-batch dimensions, but got r  r  r  )r  r   s   r0   r   r  &  s      ;;-'7s-Ir/   r%   c                     > ST  3$ )Nz5strides should be greater than zero, but got stride: r&   r  s   r0   r   r  /  s    GxPr/   )
rE   r   r   r  r  r  r!  r[   r5  r  )r   r  r  r}  r  r  s   `````@r0   max_unpool3dr  
  s?    
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/   )rt   r  c          	          [        XX#SUS9$ )NTinplacert   
_index_addr=   rV   r  r  rt   s        r0   
index_add_r
  5  s     aeTGGr/   c          	          [        XX#SUS9$ )NFr  r  r	  s        r0   	index_addr  A  s     aeU%HHr/   r  c                x  ^^^^^^ [         R                  " U R                  T5      m[        R                  " TR                  S:*  U4S j5        TR                  S:X  a  TR                  S5      OSmUR                  S:  a  UR                  T5      OSm[        R                  " TT:H  UUU4S j5        TS:w  an  [         R                  " U R                  5      m[        R                  " T[        L =(       d     [         R                  " [        T5      T5      UU4S j5        UT-  nU R                  S:H  nU(       a  U R                  S5      OU nST-  T4-   nU(       a  [        R                  O[        R                  n	U	" XxUSS9n
U(       a  U $ U(       a  U
R                  S5      $ U
R!                  5       $ )	Nr$   c                  $   > ST R                    S3$ Nz(Index should have dimension 1 or 0 (got rF  r  r  s   r0   r   _index_add.<locals>.<lambda>Z      :5::,aHr/   r   c                     > ST ST ST < 3$ )NzNumber of indices (z') should be equal to tensor.size(dim) (z), for dim=r&   )rV   
index_sizer  s   r0   r   r  `  s    %j\1XYdXeeqmplrsr/   c                  (   > S[        T 5       ST S3$ )Nzalpha argument of type z cannot be safely cast to type !)r  )rt   python_types   r0   r   r  g  s    -d5k]:YZeYffghr/   r9   Tr5  )rJ   canonicalize_dimsr  rE   r   r5  dtype_to_typer   r  is_weakly_lesser_typer  r\   r   
index_put_	index_putr  r  )r=   rV   r  r  r  rt   zero_dimr\  r  r  r   r  r  r  s    ``  `     @@@r0   r  r  N  sK    
!
!!&&#
.C	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
BV
5C!)s{{1~?s~~/??r/   c           
      
   [         R                  " [        U 5      S:  S 5        [        U 5      nU S   R                  5       nUSS  n[	        S U  5       5      nU(       a  X64nOXc4nXu-   nU S   R                  Xr5      nS[        U5      -  n	[        U5       Hf  n
X
   n[        R                  XSXkR                  S5      -
  4-   U5      nU(       a  [        R                  XSU
S9nMQ  [        R                  XSU
S9nMh     U$ )Nr   c                      g)Nz#received an empty list of sequencesr&   r&   r/   r0   r   pad_sequence.<locals>.<lambda>y  s    -Rr/   r$   c              3   B   #    U  H  oR                  S 5      v   M     g7fr  r5  )r  r=   s     r0   r  pad_sequence.<locals>.<genexpr>}  s     /Y&&))Ys   )r   r   rV   r  )
rE   r   r  r5  r   r   r[   r   r  r  )	sequencesbatch_firstpadding_valuesequences_sizemax_sizetrailing_dimsmax_lenout_dimsr   dim_paddingsr  currseqrows                r0   pad_sequencer0  v  s
    
LLY!#%RS^N|  "HQRLM/Y//G",,'H
A,


8CC..L>",""Q,,q/(A$BBM
 %%cAQ%?C%%cAQ%?C # Jr/   c                     [        XX#SS9$ )NTr  _index_copyr=   rV   r  r  s       r0   index_copy_r6    s    qud;;r/   c                     [        XX#SS9$ )NFr2  r3  r5  s       r0   
index_copyr8    s     que<<r/   c                  ^ [         R                  " U R                  U5      n[        R                  " TR                  S:*  U4S j5        U R                  S:H  nU(       a  U R                  S5      OU nTR                  S:X  a  TR                  S5      OTmSU-  T4-   nU(       a  [        R                  O[        R                  nU" XgU5      n	U(       a  U $ U(       a  U	R                  S5      $ U	R                  5       $ )Nr$   c                  $   > ST R                    S3$ r  r  r  s   r0   r   _index_copy.<locals>.<lambda>  r  r/   r   r9   )rJ   r  r  rE   r   r\   r   r  r  r  r  )
r=   rV   r  r  r  r  r\  r  r  r   s
     `       r0   r4  r4    s     
!
!!&&#
.C	LL

aH
 vv{H#QB"'**/EOOAuE
C-5(
"C#*I
BV
$C!)s{{1~?s~~/??r/   c                 F   [         R                  " U R                  S5      U 5      n[         R                  " [         R                  " U 5      * 5      nU R
                  (       d  U R                  (       a  U R                  S5      nOUnU[         R                  " U5      -
  U4$ )Nr&   r1  )rE   r  rt  ro   r   r  is_xpurO  )r   r   rq   r   s       r0   log_sigmoid_forwardr>    sn     --r*D
1C		599T?"#A||t{{%Q''r/   lowhighrn  c           	          [         R                  " U R                  [        U5      [        U5      U R                  U R
                  US9$ )N)r?  r@  r   r  rn  )prims_uniform_helperr!  r   r   r  )r=   r?  r@  rn  s       r0   uniformrD    s=       	cNt_ggxx r/   c                 8    U R                  [        XX#5      5      $ r9   )r3  rD  )r   r?  r@  rn  s       r0   uniform_rF    s    ::gd9::r/   c                 2   [        U 5      S-
  nUb@  [        R                  " US L S 5        [        R                  " [        U5      U:H  S 5        U$ Ub  [        R                  " US L S 5        [        R                  " [        U5      U:H  S 5        / n[        U5       HZ  u  pE[	        U5      U:X  a$  UR                  XS-      [	        U5      -  5        M8  UR                  [        XS-      U-  5      5        M\     U$ [        R                  " SS 5        g )Nr%   c                      gNz9Must specify exactly one of output_size and scale_factorsr&   r&   r/   r0   r   .upsample_compute_output_size.<locals>.<lambda>      Or/   c                      gN r&   r&   r/   r0   r   rJ    s    Rr/   c                      grI  r&   r&   r/   r0   r   rJ    rK  r/   c                      grM  r&   r&   r/   r0   r   rJ    s    rr/   Fc                      grI  r&   r&   r/   r0   r   rJ    s    Rr/   )r  rE   r   r  r  r  r   )rF  r  scale_factorsspatial_dimensionsr  r  s         r0   upsample_compute_output_sizerT    s    Z1,T!O	
 	S%);;ZH 4O	
 	S'+==zJm,DA1v{"":!e#4s1v#=>""7:!e+<q+@#AB	 -
 	LLRr/   c                     U c  g X   $ r9   r&   )scalesr  s     r0   get_scale_valuerW    s    ~;r/   rR  c                 ~    [        U R                  5       X5      nU(       a  UOS /[        U5      -  n[        XU5      $ r9   rT  r5  r  _upsample_nearestr   r  rR  osizerV  s        r0   _upsample_nearest_vecr]    s<     ){RE&TFSZ,?  U622r/   c                 |    [        U R                  5       X5      nU(       a  UOS /[        U5      -  n[        XUSS9$ NTexactrY  r[  s        r0   _upsample_nearest_exact_vecrb    s>     ){RE&TFSZ,?  U6>>r/   c                    / n[        U5      nU(       a  SOSn[        U5       H  nX   nU R                  U* U-      n	X'   b	  XX'   -  -  OX-  n
[        R                  " U[        R
                  U R                  S9nX-   U
-  R                  [        R                  5      n[        US-
  U-
  5       H  nUR                  S5      nM     UR                  U5        M     U$ )Nr   r   r  r$   rZ   )r  r[   r!  rE   r  r   r  r<   r  r\   r  )r   r  rV  ra  r  num_spatial_dimsr  r  r\  isizeru   output_indicesinput_indicesr]   s                 r0   !_compute_upsample_nearest_indicesrh  #  s     G;'SsF#$ --12/5y/D*+%-e5==V(1U:>>u{{K'!+a/0A)33B7M 1}%+ %, Nr/   )preserve_memory_formatr   rV  c                     [        XU/5      $ r9   rZ  r   r  rV  s      r0   upsample_nearest1drm  C  s     U&::r/   c                     [        XU/SS9$ r_  rk  rl  s      r0   upsample_nearest_exact1dro  O  s     U&FFr/   scales_hscales_wc                     [        XX#/5      $ r9   rk  r   r  rp  rq  s       r0   upsample_nearest2drt  ]  s     U(1EFFr/   c                     [        XX#/SS9$ r_  rk  rs  s       r0   _upsample_nearest_exact2drv  j  s     U(1ETRRr/   scales_dc                     [        XX#U/5      $ r9   rk  r   r  rw  rp  rq  s        r0   upsample_nearest3drz  y  s     U(h1OPPr/   c                     [        XX#U/SS9$ r_  rk  ry  s        r0   _upsample_nearest_exact3dr|    s     X:$ r/   ra  c                 :   [        XX#S9nS S /U-   n[        R                  X5      nUR                  S:X  ad  [        R
                  " U 5      nU R                  S   nU R                  R                  S:X  a  US:  a  [        R                  nUR                  US9nU$ )Nr`  rK  r$   cudar_  )rh  r   _unsafe_indexr  rJ   r   r!  r  r  rE   rc  r  )	r   r  rV  ra  spatial_indicesr  r"  r`  
n_channelss	            r0   rZ  rZ    s     8FO Tl_,G/F{{a33E: [[^
<<&:>!33M"""?Mr/   c           	         U(       a
  U(       a  SnOU(       a  SnOU(       a  SnOSn[        U 5      U-  S:w  a  [        S[        U 5       SU 35      e[        S[        U 5      U5       Vs/ s H  n[        XXC-    5      PM     sn$ s  snf )Nr  rK  r   r%   r   zlen(params)=z  is not divisible by group_size=)r  r3  r[   r  )params
has_biaseshas_projections
group_sizer  s        r0   gather_paramsr    s    o
	
	


6{Z1$3v;-'G
|T
 	
 49CK3T3Taf()3T  s   ,Bc                 x    U(       a%  U SU-     USU-     pTU SU-  S-      USU-  S-      pvOX   X   pTSu  pgXEXg4$ )Nr%   r$   NNr&   )r  hiddensr  bidirectional
cur_params
cur_hiddenbidir_paramsbidir_hiddens           r0   params_hiddensr    s[    !'AAJ%+AEAI%6A	8Jl!'GJJ%/"<==r/   c                     X::  a  [        SU SU S35      eUR                  U R                  SX!U-
  5      5        U R                  SSU5      $ )Nlast_batch_size (z) must be > batch_size (rF  r   )r3  r  r6  )r  last_batch_size
batch_sizer  s       r0   update_hidden_for_packedr    s_    $00HTUV
 	
 NN:$$Q
j4PQRQ:..r/   c           	          X:X  a  U $ X:  a  [        SU SU S35      e[        R                  " U UR                  SXU-
  5      45      $ )Nr  z) must be < batch_size (rF  r   )r3  rE   concatr6  )r  r  r  
inp_hiddens       r0    update_hidden_for_packed_reverser    sh     $$00HTUV
 	
 <<a2NO	
 r/   c           	         US   nUS   nU(       a  US   OS n	U(       a  US   OS n
/ n/ nU(       a  US   OUS   nUR                  SSU5      n[        R                  " U [        U5      5      nU(       a  US S S2   nU HX  n U R                  S   nUU:X  a  O"U(       a  [        XUU5      nO[        XUU5      nU" XXyX5      nUnUR                  U5        MZ     U(       a  UR                  5         O!UR                  U5        UR                  5         [        R                  " US5      nU(       d  [        R                  " US5      OUnUU4$ )Nr   r$   r%   r   rZ   )
r6  rE   r  r|  r!  r  r  r  reverser7  )inphiddenr  r  	hidden_fnbatch_sizesr  	ih_weight	hh_weightih_biashh_biasstep_outputr  r  r  	split_inpr  r   
hidden_outs                      r0   one_layer_rnn_datar    sC    q	Iq	I%fQi4G%fQi4GK"$G)0k"ok!nOq!_5JCk!23IddO	IIaLa9QJ 2QJ s	IW
:&# & z"
))K
#C.57A&:J
?r/   c                    ^  U 4S jnU$ )Nc                 D   > T" [         R                  " XU5      U -   5      $ r9   r   linearr  r  r  r  r  r  nonlinearitys         r0   rQ   rnn_cell.<locals>.inner  s    AHHZGDqHIIr/   r&   r  rQ   s   ` r0   rnn_cellr    s    J Lr/   c                    ^  U 4S jnU$ )Nc                 r   > [         R                  " XU5      n T" [         R                  " XU5      U -   5      $ r9   r  r  s         r0   rQ   rnn_cell_data.<locals>.inner"  s.    HHQ7+AHHZGDqHIIr/   r&   r  s   ` r0   rnn_cell_datar  !  s    J Lr/   c           	         US   nUS   nU(       a  US   OS nU(       a  US   OS n	[         R                  " XU5      n
U(       a  U
R                  S5      OU
n
UR                  S5      n/ nU
 H  nU" XXhXy5      nUR	                  U5        M      U(       a  UR                  5         [        R                  " US5      nXR                  S5      4$ )Nr   r$   r%   r   )	r   r  flipr\   r  r  rE   r7  r  )r  r  r  r  r  r  r  r  r  r  precomputed_inputr  r  r  r   s                  r0   one_layer_rnnr  )  s    q	Iq	I%fQi4G%fQi4G95<)..q1BS!!!$JKqi)U
:&  
))K
#C""1%%%r/   c                    US   nUS   nU(       a  US   nUS   nOH[         R                  " UR                  5       5      n[         R                  " UR                  5       5      nUS   R                  S5      n	US   R                  S5      n
/ nSnU	R                  S5      nSnSnSnSnU R	                  5       n U	R	                  5       n	U
R	                  5       n
[         R
                  R                  R                  R                  U UUUUU	U
UUUUUUUUU5      nUS   US   US   nnnUUR                  S5      UR                  S5      44$ )Nr   r$   r%   r   F)
rE   r  r5  r\   r  r  r   mkldnn_rnn_layerr  r  )r  r  r  r  r  w0w1w2w3hxcxr  modehidden_size
num_layersr  r&  rU  outputsra   hycys                         r0   mkldnn_one_layer_lstmr  ?  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
           	      (   U(       a  U R                  SS5      OU n / n
[        U5       H  n[        X!X5      u  ppU(       a
  XKS-
  :  a  UOSnU	" XX5      u  nnU
R                  U5        U(       a  U	" XXSS9u  nnU
R                  U5        U(       a+  [        R
                  " UW/UR                  5       S-
  5      n OUn US:w  d  M  U(       d  M  XS-
  :  d  M  [        R                  " XSS9n M     U(       a  U R                  SS5      OU n X
4$ )Nr   r$   r   T)r  )rU  )	transposer[   r  r  rE   r7  rV   rX  )r   r  r  r  r  rX  rU  r  r&  layer_fnfinal_hiddensr  r  r  r  r  fwd_inp
fwd_hiddenbwd_inp
bwd_hiddens                       r0   _rnn_helperr  q  s    &1EOOAq!eEM:=KA>
:
 $
U(:'&u*QZ("*\t#GZ   ,IIw0'++-!2CDEEa<EEaq.&8MM%=E) , &1EOOAq!eEr/   c	                     UR                  S5      n	[        X#S5      n[        U U	UUUUUUU[        [        [        [        R                  5      S95
      u  pU
[        R                  " US5      4$ Nr   Fr  )	unbindr  r  r   r  r  rE   r   stackr   r  r  r  r  rX  rU  r  r&  r  r   r  s               r0   rnn_tanh_inputr    p     YYq\F6u5F$%**)=>C M1---r/   c	                     UR                  S5      n	[        X#S5      n[        U U	UUUUUUU[        [        [        [        R                  5      S95
      u  pU
[        R                  " US5      4$ r  )	r  r  r  r   r  r  rE   r  r  r  s               r0   rnn_relu_inputr    r  r/   c	                     UR                  S5      n	[        X4S5      n[        U U	UUUUUUS[        [        U[        [        R                  5      S95
      u  pU
[        R                  " US5      4$ Nr   Fr  r  )	r  r  r  r   r  r  rE   r  r  datar  r  r  r  r  rX  rU  r  r  r   r  s               r0   rnn_relu_datar    w     YYq\F6u5F$##EJJ/	
C  M1---r/   c	                     UR                  S5      n	[        X4S5      n[        U U	UUUUUUS[        [        U[        [        R                  5      S95
      u  pU
[        R                  " US5      4$ r  )	r  r  r  r   r  r  rE   r   r  r  s               r0   rnn_tanh_datar    r  r/   c                 f   [         R                  " XU5      U -   nUR                  SU5      nUS   R                  5       n	US   R                  5       n
US   R	                  5       nUS   R                  5       nX-  X-  -   nXR	                  5       -  nUc  UO[         R                  " XS 5      nX4$ )NrK  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                  r0   	lstm_cellr    s    HHRG,s2EKK9-MA&&(G"**,Ka %%'IQ'')H		W0	1B	GGI	B ahhrd&CB6Mr/   c                 J   US   nUS   nU(       a  US   OS nU(       a  US   OS n[        U5      S:X  a  US   O[        U5      S:X  a  US   OS n	US   R                  S5      n
US   R                  S5      n[        R                  " XU5      nU(       a  UR	                  S5      OUn/ nU H"  n [        X
XXSS9u  pUR                  U
5        M$     U(       a  UR                  5         [        R                  " US5      nXR                  S5      UR                  S5      44$ )Nr   r$   r%   r   r  rK  r  )r  r\   r   r  r  r  r  r  rE   r7  r  )r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   s                  r0   one_layer_lstmr  ,  s   q	Iq	I%fQi4G%fQi4G[A%q	Fq8H6!9d  
		Q	B			Q	B95<)..q1BSK 3B7QRS2 ! 
))K
#CA

1...r/   c                    US   nUS   nU(       a  US   OS nU(       a  US   OS n	[        U5      S:X  a  US   O[        U5      S:X  a  US   OS n
/ n/ nU(       a  US   OUS   n[        R                  " U [        U5      5      nU(       a  US S S2   nUS   nUS   nUR	                  SSU5      UR	                  SSU5      nnU GH  n U R
                  S   n[        R                  " XU5      n UU:  aa  UR                  UR	                  SUUU-
  5      UR	                  SUUU-
  5      45        UR	                  SSU5      UR	                  SSU5      nnUU:  aZ  [        R                  " UUR	                  SUUU-
  5      4S5      n[        R                  " UUR	                  SUUU-
  5      4S5      n[        U UUXyU
SS9u  nnUnUR                  U5        GM     U(       a  UR                  5         UU4nO\UR                  UU45        UR                  5         [        U6 u  nn[        R                  " US5      [        R                  " US5      4n[        R                  " US5      nUU4$ )	Nr   r$   r%   r   r  rK  rZ   r  )r  rE   r  r|  r6  r!  r   r  r  r  r  r  r  r7  )r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  orig_hxorig_cxr  r  r  r  hidden0hidden1r   s                           r0   one_layer_lstm_datar  G  sp   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hhsw/ 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	IQRSB23 6 "X
Bx =YYw*EIIgq,AA

))K
#C
?r/   c                 <    S nU" XU5      (       a  [         $ [        $ )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                    [         R                  R                  5       (       d  gU /[        U5      -   [        [        R
                  " U5      5      -   nU Vs1 s H  oDR                  iM     nn[        U5      S:w  a  gUR                  5       nU[         R                  " S5      :w  a  gU Vs1 s H  oDR                  iM     nnU H)  nU[         R                  [         R                  4;  d  M)    g   U R                  (       a  gUS   R                  S5      US   R                  S5      :g  n	U	(       a  ggs  snf s  snf )NFr$   r  r   r%   T)rE   rW  _get_mkldnn_enabledr|  r	   from_iterabler  r  popr   r  bfloat16requires_gradr5  )
r   r  r  r  tdevicesr  dtypesr   r  s
             r0   
use_mkldnn2select_one_layer_lstm_function.<locals>.use_mkldnn  s    xx++--'DH$tE,?,?,G'HH%,-W88W-w<1U\\%((#*+7a''7+EU[[%..99  Q%**Q-2a5::a=8) . ,s   D8.D=)r  r  )r   r  r  r  s       r0   select_one_layer_lstm_functionr    s"    : %V$$$$r/   c	                    [        U5      S:w  a  [        S[        U5       35      e[        X#US   R                  S5      US   R                  S5      :g  5      n[	        [        US   US   5      5      n	[        XU5      n
[        U U	UUUUUUUU
5
      u  p[	        [        U6 5      nU[        R                  " US   S5      [        R                  " US   S5      4$ )Nr%   $lstm expects two hidden states, got r   r$   )
r  r3  r  r5  r|  r  r  r  rE   r  )r   r  r  r  r  rX  rU  r  r&  r  r  r   r  s                r0   	lstm_implr    s     2w!|CCG9MNN6r!uzz!}1

1/MNF#beRU#$F-e@H$C m,-MM!,a0%++mA>NPQ2RRRr/   c	                    [        U5      S:w  a  [        S[        U5       35      e[        X4US   R                  S5      US   R                  S5      :g  5      n[	        [        US   US   5      5      n	[        U U	UUUUUUS[        [        US95
      u  p[	        [        U6 5      nU
[        R                  " US   S5      [        R                  " US   S5      4$ )Nr%   r  r   r$   F)r  )r  r3  r  r5  r|  r  r  r   r  rE   r  r  s               r0   lstm_data_implr
    s     2w!|CCG9MNN6r!uzz!}1

1/MNF#beRU#$F$#=C m,-MM!,a0%++mA>NPQ2RRRr/   c                 $   U R                  SS5      n[        R                  " XU5      R                  SS5      nUS   US   -   R                  5       nUS   US   -   R                  5       n	US   US   U-  -   R	                  5       n
X-
  U	-  U
-   $ )Nr   r$   r%   r   )r  r   r  r   r   r  r  r  r  r  r  chunked_igateschunked_hgates
reset_gate
input_gatenew_gates              r0   gru_cellr    s    YYq!_NXXjW=CCAqIN #nQ&77@@BJ #nQ&77@@BJq!^A%6%CDJJLH!Z/(::r/   c                 N   [         R                  " XU5      R                  SS5      n[         R                  " XU5      R                  SS5      nUS   US   -   R                  5       nUS   US   -   R                  5       n	US   US   U-  -   R	                  5       n
X-
  U	-  U
-   $ )Nr   r$   r   r%   r  r  s              r0   gru_cell_datar    s    XXcg6<<QBNXXjW=CCAqIN #nQ&77@@BJ #nQ&77@@BJq!^A%6%CDJJLH!Z/(::r/   c	                     [        X4S5      n[        U UR                  S5      UUUUUUS[        [        U[
        S95
      u  pU	[        R                  " U
S5      4$ )NFr   r  )r  r  r  r   r  r  rE   r  )r  r  r  r  r  r  rX  rU  r  r   r  s              r0   gru_impl_datar    se     6u5F$
		!"}UC M1---r/   c	                     [        X#S5      n[        U UR                  S5      UUUUUUU[        [        [
        S95
      u  pU	[        R                  " U
S5      4$ )NFr   r  )r  r  r  r   r  r  rE   r  )r   r  r  r  r  rX  rU  r  r&  r   r  s              r0   gru_implr  .  sb     6u5F$
		!2C M1---r/   c                     [        U R                  5       X5      n[        US5      n[        US5      n[        R                  R
                  R                  XX%U5      $ Nr   r$   )rT  r5  rW  rE   r  r   _upsample_bilinear2d_aar   r  align_cornersrR  r\  scale_hscale_ws          r0   upsample_bilinear2d_aa_vecr   L  sP     ){REmQ/GmQ/G99>>11mg r/   c                     [        U R                  5       X5      n[        US5      n[        US5      n[        R                  R
                  R                  XX%U5      $ r  )rT  r5  rW  rE   r  r   _upsample_bicubic2d_aar  s          r0   upsample_bicubic2d_aa_vecr#  X  sP     ){REmQ/GmQ/G99>>00mg r/   c                 ~    [        U R                  5       X5      nU(       a  UOS /[        U5      -  n[        XX%5      $ r9   )rT  r5  r  _upsample_linear)r   r  r  rR  r\  rV  s         r0   _upsample_linear_vecr&  d  s7     ){RE+]$#e*1DFE-@@r/   r  c                     [        XX#/5      $ r9   r%  )r   r  r  rq  s       r0   upsample_linear1dr)  r  s     EzJJr/   c                     [        XX#U/5      $ r9   r(  )r   r  r  rp  rq  s        r0   upsample_bilinear2dr+  }  s     E(?STTr/   c                     [        XX#XE/5      $ r9   r(  )r   r  r  rw  rp  rq  s         r0   upsample_trilinear3dr-    s     Mh+I r/   c                 Z    U(       a  US:  a  U S-
  US-
  -  $ S$ Ub  US:  a  SU-  $ X-  $ )Nr$   rn   r   r&   )r  r  r  ru   s       r0   _compute_scaler/    s@    5=\#(S.1HqH#/EAIsU{U7CUUr/   c                 ,    U(       a  X-  $ XS-   -  S-
  $ Nr   r&   )ru   	dst_indexr  s      r0   _compute_source_indexr3    s       C(3..r/   weightsweights_precisionc                     [        S [        X5       5       5      SUS-
  -  -   nX2-	  n[        R                  " USS5      R	                  [        R
                  5      $ )Nc              3      #    U  HF  u  pUR                  [        R                  5      UR                  [        R                  5      -  v   MH     g 7fr9   )r<   rE   rJ  )r  r  r  s      r0   r  %_sum_tensors_uint8.<locals>.<genexpr>  s5      :K$!U[[ADD--:Ks   AAr$   r      )_sum_tensorsr  rE   r   r<   r]  )r  r4  r5  r  s       r0   _sum_tensors_uint8r;    s_      :=c:K 	
 1$	%'F (F;;vq#&))%++66r/   c                     [         R                  " U 5      R                  5       nSn[         R                  " X!R                  S9nSUSUS-   -  -  -   nUS:  nX%R                  5       -
  $ )N   r  r   r$   i   )rE   r  r   r  r  r   )r4  
max_weightmax_weight_precision
precisionsvaluesr  s         r0   _compute_weight_precisionrB    se    W%))+J2;L;LMJ:zA~!677FgD((*,,r/   c                 p  ^ ^^ T R                   S   nT R                   SS  n[        U5      n[        R                  " T [        R                  R
                  S9u  nmUUU 4S jn[        [        XQU5      5       V	V
VVs/ s H  u  n	u  pnU" XX6S-
  U	-
  5      PM     nnn
n	n[        [        U6 5      u  pn/ n[        SS//U-  6  Hh  nS S /[        U5       Vs/ s H  nUU   S:X  a  UU   OUU   PM     sn-   n[        R                  T U5      n[        UT5      nUR                  U5        Mj     [        [        U5      5       Hs  n	X   X   -
  R!                  SS5      R#                  T5      n[        US S S2   USS S2   5       VVs/ s H#  u  nnU[$        R&                  " UU-
  U5      -   PM%     nnnMu     [        U5      S:w  a  [)        S[        U5       35      eUS   n[        R*                  " T 5      nT R,                  R.                  S	:X  a  US
:  a  [$        R0                  n[3        U[$        R4                  5      (       d!  [)        S[/        U5      R6                   35      eUR9                  US9nT R;                  5       (       d  UR=                  5       nU$ s  snnn
n	f s  snf s  snnf )Nr$   r%   re  c                 `  > [        XT	U5      n[        R                  " UTR                  S9R	                  T
S9n[        XET	5      R                  SS9nUR                  " UR                  S   /S/U-  Q76 nUR	                  [        R                  5      nUS-   R                  U S-
  S9nXgU4$ )Nr  r   r   r   r   r$   r   )
r/  rE   r  r  r<   r3  r   r-  r!  r  )inp_sizer  rV  nsqueezescale_factorr  x_f32r=   xp1r  r   r   s            r0   
get_values$_upsample_linear.<locals>.get_values  s    %h-P LL%,,7:::G%l}EKKPSKTekk!n@sh/?@HHU[[!1umm1m-}r/   r   r   rn   z+Expected vs to have exactly 1 element, got r~     z$Expected result to be a Tensor, got r_  )r!  r  rJ   rK   rg  INT_TO_FLOATr  r  r|  r
   r[   r   r  r   r  reversedr   r<   rE   r   r3  r   r  r  rc  r;   r   r'   r  r\  round)r   r  r  rV  r  	inp_sizesn_dimsr]   rJ  r  rE  r  rA  xs_f32xsxp1svsr  kr  vxscalev1v2r"  r`  r   s   ` `                       @r0   r%  r%    s    QJABI^F''!AANNHAu
 09	/0
0
+A+F 	8vzA~>0
   CL)F	B1vh'(TluV}U}!qtqybed1g=}UUuc*#Au-
		!	 ) eFm$)be#**3477> b1gr!$Q$x0
 1B 27F++0 	 
 % 2w!|J3r7)TUUUF //6M ||F"zB//fell++24<3H3H2IJ
 	
 ];F""$$MY V
s   ?J%
J-*J2r  r  c                 4    U R                   UR                   :H  $ r9   r  )r  r  s     r0   is_same_sizer\    s    77aggr/   c                 ,    [         R                  X5      $ r9   )r   r  )r=   r!  rL   s      r0   _reshape_aliasr^    s     99Qr/   c                 ,    [         R                  X5      $ r9   )r   r  )r=   r  s     r0   r  r    s    ::a!!r/   c                 .    [         R                  XX#5      $ r9   )r   r  )r=   r  r   r6  s       r0   r8  r8    s    >>!e88r/   c                    U HK  nUc  M  [         R                  " UR                  [         R                  [         R                  4;   S 5        MM     [         R                  " UR                  [         R
                  :H  S 5        SSKJn  U" U R                  5       S:H  5      (       a;  [         R                  R                  X5      nU R                  UR                  U5      $ [        [        U5      5       H0  nX'   nUc  M  UR                  SU R!                  U5      S-
  S9X''   M2     ["        R%                  X5      R'                  U) U5      $ )Nc                      gNz3tensors used as indices must be long or int tensorsr&   r&   r/   r0   r   &_unsafe_masked_index.<locals>.<lambda>'  r  r/   c                      gNz*tensors used as masks must be bool tensorsr&   r&   r/   r0   r   rd  ,      <r/   r   rc  r$   r  )rE   r   r   ry  r  r  rz  rd  r  _meta_registrationsmeta_index_Tensorr   r!  r[   r  r   r5  r   r  rz  )r=   r  r  fillr  rd  meta_resultr  s           r0   r  r  !  s   LL

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

ejj <
 Eaggi1n%%//AA!Mzz+++T223w< 
q	A>GJ !
 a)55teTBBr/   c                 R   U HK  nUc  M  [         R                  " UR                  [         R                  [         R                  4;   S 5        MM     [         R                  " UR                  [         R
                  :H  S 5        U R                  5       S:X  a  U R                  5       $ [        [        U5      5       H@  nX%   nUc  M  UR                  U R                  U5      * U R                  U5      S-
  S9X%'   MB     UR                  U) S5      n[        R                  XUSS9$ )Nc                      grc  r&   r&   r/   r0   r   5_unsafe_masked_index_put_accumulate.<locals>.<lambda>C  r  r/   c                      grf  r&   r&   r/   r0   r   rn  H  rg  r/   r   r$   r  Tr5  )rE   r   r   ry  r  r  r  r  r[   r  r   r5  rz  r   r8  )r=   r  r  rA  r  r  masked_values          r0   #_unsafe_masked_index_put_accumulaterq  =  s    LL

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

ejj <
 	wwyA~wwy3w< 
!&&)QGGJ !
 %%teQ/L!!!lt!LLr/   c                    U R                  5       nSnUS:  a  SnUb5  US:  a)  S/U-  nUR                  S   Xv'   UR                  U5      nOUnX-  n [        R                  " X:g  US5      n	U	R                  U5      n
[        R                  " XU
5      R                  U5      * n[        R                  " X:g  US5      nU[        R                  R                  :X  a  US:  a  U R                  SS5      nX4$ Ubl  WR                  U R                  5      n[        R                  " XU
5      R                  U5      n[        R                  " X:g  US5      nUR                  5       nO!X:g  R                  5       R                  U 5      nU[        R                  R                  :X  a  UR                  5       nX4$ U[        R                   R                  :X  a  UR                  5       U-  nX4$ )Nr$   r%   r   r&   r   )rV   r!  r  rE   rp   r\   gatherr  r"   r+   r   r   r  r   r<   r-   r,   )r   r  r   r   r)  rQ  r.  r!  wr/  safe_target_r"  r*  wsums                 r0   _nll_loss_forwardrw  W  s    XXZFKzA:E "(aEE"AAx++f4fa@K((5L ll4l;CCKPPF[[/;FINN(((VaZ}}R-##HHTZZ ||AL9AA+N{{614;xxz.33588>IMM'''  
inn**	*,r/   c                    U R                  5       S:  a  U R                  5       S::  d  [        SU R                  5        S35      eUR                  5       S:  a  [        SUR                  5        S35      eU R                  5       S:H  =(       a    UR                  5       S:H  nU(       dF  U R                  S   UR                  S   :X  d&  [        SU R                   SUR                   S	35      eU R                  S
   nUbC  UR                  5       S:X  a  UR                  5       U:X  d  [        SU SUR                   35      e[	        XX#U5      $ )Nr   r%   rA  rB  r$   rC  rD  rE  rF  rZ   z/weight tensor should be defined either for all z7 classes or no classes but got weight tensor of shape: )rV   r3  r!  r  rw  )r   r  r   r   r)  rH  	n_classess          r0   nll_loss_forwardrz    s5    HHJNtxxzQDTXXZLPQRSSzz|aOPVPZPZP\~]^_
 	
 88:?8vzz|q'8LTZZ]fll1o=(Jv||nAN
 	
 

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

 T6lKKr/   c                     [        XX#U5      $ r9   )rw  )r   r  r   r   r)  s        r0   nll_loss2d_forwardr|    s     T6lKKr/   Ac                 0    US-   U -  US-   -
  U -  U -  S-   $ )Nr%   r   r$   r&   r=   r}  s     r0   _upsample_cubic_convolution1r    s(    UaK1q5!Q&*Q..r/   c                 :    X-  SU-  -
  U -  SU-  -   U -  SU-  -
  $ )Nr     rK  r&   r  s     r0   _upsample_cubic_convolution2r    s.    UQU]a!a%'1,q1u44r/   r   c                    SnU R                   [        R                   " S5      :X  a  [        R                  " U SU -
  /SS9n[        R                  " U S-   SU -
  /SS9n[        X15      n[	        X!5      n[        R
                  " USS9u  pg[        R
                  " USS9u  pXhX4$ [        U S-   U5      [	        X5      [	        SU -
  U5      [        SU -
  U5      4$ )Ng      r  rn   r   r   r   )r  rE   r  r  r  r  )
r   r}  tt1tt2w03w12r  r  r  r  s
             r0    _upsample_get_cubic_coefficientsr    s    Axx5<<&&kk1cAg,A.kk1s7C!G,!4*32*32cq)cq)r~ )S!4(.(q!4(q!4	
 	
r/   coeffstsc                 N    [        U5      n[        S [        X5       5       5      $ )Nc              3   .   #    U  H  u  pX-  v   M     g 7fr9   r&   r  r  r  s      r0   r  +_upsample_cubic_interp1d.<locals>.<genexpr>  s     E0DHR0Dr  )r  r:  r  )r  r  coeffs2s      r0   _upsample_cubic_interp1dr    s"    .r2GEF0DEEEr/   c                 6    [        [        R                  U 5      $ r9   )r   rE   r  )r  s    r0   r:  r:    s    %))R  r/   	num_stepsc                     U S::  a  [         R                  " SX2S9$ U(       d  U S-
  U -  OSn[         R                  " U* X@X2S9$ )Nr$   r   r  )stepsr  r   )rE   r  linspace)r  r  r   r  r  s        r0   _linspace_from_neg_oner    sC     A~||Af::-:)a-9	$A>>1"aMMr/   thetahrt  c                    U R                   nU R                  n[        X#XE5      R                  SUS5      n[        XXE5      R                  USS5      n[        R
                  " SXES9n[        R                  R                  R                  USSSS9n[        R                  R                  R                  USSSS9n[        R                  R                  R                  US	SSS9nXg-   U-   $ )
Nr$   )r$   r$   r$   r  )r   r%   constantr   r  r  r   r$   r$   )r%   r   	r   r  r  r  rE   r  r  r.  r  )	r  r  rt  r  r   r  grid_xgrid_ygrid_ones	            r0   _make_base_grid_4dr    s    KKE\\F $AeDII!QPQRF#AeDII!QPQRFzz)5@H XX  $$VjPQ$RFXX  $$VjPQ$RFxx""&&xV*TU&VH?X%%r/   r  c                 t   U R                   nU R                  n[        X4XV5      R                  SSUS5      n[        X$XV5      R                  SUSS5      n[        XXV5      R                  USSS5      n	[        R
                  " SXVS9n
[        R                  R                  R                  USSSS9n[        R                  R                  R                  USSSS9n[        R                  R                  R                  U	S	SSS9n	[        R                  R                  R                  U
S
SSS9n
Xx-   U	-   U
-   $ )Nr$   )r$   r$   r$   r$   r  )r   r   r  r   r  )r$   r%   )r%   r$   )r   r   r  )r  r  r  rt  r  r   r  r  r  grid_zr  s              r0   _make_base_grid_5dr    s%   KKE\\F#AeDII!QPQSTUF#AeDII!QPQSTUF#AeDII!QPQSTUFzz,eCH XX  $$VjPQ$RFXX  $$VjPQ$RFXX  $$VjPQ$RFxx""&&xV*TU&VH?V#h..r/   c                     Uu  p4pV[        XXbS9nUR                  SSS5      U R                  R                  S5      -  R	                  S5      nUR                  X5US5      $ )Nr  rZ   r   r$   ra  r%   )r  r  re  r\   r   )	r  r5  r  r;  r]   r  rt  	base_gridgrids	            r0   _affine_grid_generator_4dr    s]    JA!"5QLI NN2q!$uxx'9'9!'<<AA"ED99Q1a  r/   c                     Uu  p4pVn[        XXgUS9nUR                  SSS5      U R                  R                  S5      -  R	                  S5      n	U	R                  X5XgS5      $ )Nr  rZ   rK  r$   ra  r   )r  r  re  r\   r   )
r  r5  r  r;  r]   r  r  rt  r  r  s
             r0   _affine_grid_generator_5dr    sa    MA!"5QOI NN2q!$uxx'9'9!'<<AA"ED99Q1##r/   c                     [         R                  " [        U5      S;   S 5        [        U5      S:X  a
  [        XUS9$ [	        XUS9$ )Nr  c                      g)NzCaffine_grid_generator needs 4d (spatial) or 5d (volumetric) inputs.r&   r&   r/   r0   r   'affine_grid_generator.<locals>.<lambda>(  s    Ur/   rK  r  )rE   r   r  r  r  )r  r5  r  s      r0   affine_grid_generatorr  "  sF     
LLD	VU 4yA~(MRR(MRRr/   r  interpolation_modepadding_mode_expand_gridc           	        ^ ^^^^^^^^^^ ^!^"^#^$^%^&^'^(^)^*^+^,^- [         R                  " TS;   U4S j5        [         R                  " TS;   U4S j5        S[        S[        S[        4U4S jjm-S[        S[        S	[        S[        4S
 jm+S[        S[        S[        4UUU+4S jjm S[        S[        S[        4U U-4S jjnT R                  u  mmm$m%UR                  u  nm)m*nUS:w  a  [        SU 35      eT(       a(  UR                  TST)T*U5      R                  TTT)T*S5      nS[        S[        S[        4U$U%4S jjm&[         R                  " TT R                  S9R                  TSSS5      m[         R                  " TT R                  S9R                  STSS5      mS[        S[        S[        S[        4UUUU&U)U*4S jjmS[        S[        S[        4UUU U4S jjm"US   n	US   n
TS:X  a  U" U	T%5      nU" U
T$5      nUR                  5       UR                  5       sm'm(T'S-   T(pT'T(S-   nnUUnnUU-
  UU-
  -  nX-
  UU-
  -  nX-
  X-
  -  nUT'-
  UT(-
  -  n[        U"4S jT'T(U4XU4UUU4UUU44 5       5      $ TS:X  a<  U" U	T%5      nU" U
T$5      nUR                  5       nUR                  5       nT"" UUS5      $ T-" U	T%5      nT-" U
T$5      nUR                  5       m'UR                  5       m(UT'-
  m,UT(-
  nT(       d"  T,R                  S5      m,UR                  S5      nS[        S[        S[        4U U"U$U%4S jjm#S[        S[        4U#U'U(U,4S jjm![        U!4S  j[!        S!5       5       5      n[#        UU5      $ )"N)r   r$   r%   c                     > ST  3$ )NzInvalid interpolation mode r&   )r  s   r0   r   "_grid_sampler_2d.<locals>.<lambda>A  s    -.@-ABr/   c                     > ST  3$ )NzInvalid padding mode r&   )r  s   r0   r   r  D  s    -B<.+Qr/   coordsr5  rW   c                 J   > T(       a  US-  S-
  OUS-  nUS-  S-
  nX-  U-   $ r1  r&   )r  r5  r   ofsr  s       r0   unnormalize%_grid_sampler_2d.<locals>.unnormalizeG  s6     %2tczCs
Sj3|c!!r/   	twice_low
twice_highc                 D   X:X  a  [         R                  " U 5      $ US-  nX!-
  S-  nX-
  R                  5       n[         R                  " XT5      nXT-  R	                  5       R                  [         R                  S9n[         R                  " US-  S:H  Xc-   XC-   U-
  5      $ )Nr%   r   r$   r   )rE   r  r   fmodfloorr<   int8rp   )r  r  r  
coords_mincoords_spancoords2extraflipss           r0   reflect_coordinates-_grid_sampler_2d.<locals>.reflect_coordinatesR  s    "##F++]
!-2&++-

70&--/222D{{AINE.0H50P
 	
r/   c                    > TS:X  a  U $ TS:X  a  [         R                  " U SUS-
  5      $ T(       a  T" U SSUS-
  -  5      nOT" U SSU-  S-
  5      n[         R                  " USUS-
  5      $ )Nr   r$   r%   rZ   r   )r  r5  coords_reflectedr  r  r  s      r0   compute_coordinates-_grid_sampler_2d.<locals>.compute_coordinates^  sx    1MQ;;vq$(33#6vq!tax.#Q #6vr1t8a<#P ;;/D1H==r/   c                 $   > T" X5      nT" X!5      $ r9   r&   )r  r5  	coords_unr  r  s      r0   compute_source_index._grid_sampler_2d.<locals>.compute_source_indexj  s    -	"933r/   r%   z4grid last dimension must be 2 (for x,y coords), got r$   rS  ysc                    > [         R                  " SU :*  [         R                  " U T:  [         R                  " SU:*  UT:  5      5      5      $ rz   rE   r  )rS  r  iHiWs     r0   in_bounds_cond(_grid_sampler_2d.<locals>.in_bounds_cond}  sF      GU&&rBw0A0A!r'2PR70ST
 	
r/   r  wsc                    >^^ T" X5      mT(       a  TOSm[        UUUU	U
4S jU R                  [        R                  S9UR                  [        R                  S9U4 5       5      $ )Nr$   c              3   x   >#    U  H/  n[         R                  " TUS 5      R                  TTTT5      v   M1     g7fr  )rE   rp   r  )r  r   r  r  r  oHoWs     r0   r  1_grid_sampler_2d.<locals>.clip.<locals>.<genexpr>  s9      
M KKa#((Ar266Ms   7:r   )r  r<   rE   r  )rS  r  r  r  r  r  r  r  r  r  r  s      @@r0   clip_grid_sampler_2d.<locals>.clip  s\    b%
 A1 
 
ee%++e.EKK0H"M
 
 	
r/   ixiyc                 2   > T	" XU5      u  p4nTTTXC4   U-  $ r9   r&   )
r  r  rt  idx_xidx_yw_C_idxN_idxr  r  s
         r0   get_summand%_grid_sampler_2d.<locals>.get_summand  s*    ?bu+,r11r/   ).r   ).r$   r   c              3   <   >#    U  H  u  pnT" XU5      v   M     g 7fr9   r&   )r  r  r  rt  r  s       r0   r  #_grid_sampler_2d.<locals>.<genexpr>  s*      
  "" s   c                 :   > T" U T5      nT" UT5      nT" X#S5      $ rc   r&   )r  r  r=   ra   r  r  r  r  s       r0   get_value_bounded+_grid_sampler_2d.<locals>.get_value_bounded  s(    #B+A#B+AqQ''r/   r  c                    > TU S-
  -   nT" TS-
  U5      T" TU5      T" TS-   U5      T" TS-   U5      4n[        UT5      $ )Nr$   r%   )r  )r  iy_ofscsr  ix_nwiy_nwtxs      r0   	get_coeff#_grid_sampler_2d.<locals>.get_coeff  s[    cAg&F!%!)V4!%0!%!)V4!%!)V4	B ,B33r/   c              3   4   >#    U  H  nT" U5      v   M     g 7fr9   r&   )r  r  r  s     r0   r  r    s     :#y~~   rK  )rE   r   r   r  r!  r3  r  r  r  r  r   r  r:  rO  r\   r  r[   r  ).r  r  r  r  r  r  r  r]   twor=   ra   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  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  s.   ` ````                     @@@@@@@@@@@@@@@@@@@r0   _grid_sampler_2dr  0  s    
LLi'B 
LL	!#Q"F "# "& "

F 

s 

 

PV 


>F 
># 
>& 
> 
>4V 43 46 4 4 77LAq"bZZNAr2s
axB3%H
 	
  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*
urz*
rz*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                     [        U UUUUS9$ )N)r  r  r  r  )r  )r  r  r  r  r  s        r0   grid_sampler_2dr
    s      	-!# r/   c                 2  ^ ^ [         R                  " T R                  5       S:H  =(       a    TR                  5       S:H  U U4S j5        [         R                  " T R                  S5      TR                  S5      :H  U U4S j5        T T-  R	                  SS9$ )Nr%   r$   c                  L   > ST R                  5        STR                  5        3$ )Nzmatrix @ vector expected, got r  r   r   r  s   r0   r   mv.<locals>.<lambda>  s    0BswwykJr/   r   c                  v   > ST R                  S5       ST R                  S5       STR                  S5       S3$ )Nzsize mismatch, got input (r   r=   r$   z), vec (rF  r"  r  s   r0   r   r    s:    ,TYYq\N!DIIaL>RURZRZ[\R]Q^^_`r/   r   )rE   r   rV   r5  r   r  s   ``r0   r  r    ss     
LL
a*CGGINJ 
LL		!#` 3J""r/   c                     Ub.  US-
  U-  S-   nSU-
  U -  U[         R                  " U 5      -  -
  nOSU-
  U -  [         R                  " U 5      -
  nUb  Xb-  n[        Xd5      $ rc   )r   
logsigmoidr   )r   r  r   
pos_weightr   
log_weightr   s          r0    binary_cross_entropy_with_logitsr    sr    
  1n.2
F
d"j1<<3E&EFF
d"Q\\$%77}00r/   tensor1tensor2is_outc                    ^	 U R                   UR                   :  a  X4OX4u  p4SSKJm	  UR                   S:  a  UR                   S::  d  gUR                  (       a  U(       d  gU R                   S:X  a  gT	" UR	                  5       S:H  5      (       a  gUR
                  nUR                  5       nS/n[        USS  5       H  nUR                  XS   -  5        M     [        U	4S	 j[        U[        [        U5      5      U5       5       5      $ )
Nr   rc  r   r%   FTr$   rZ   c              3   b   >#    U  H$  u  pnT" US :H  5      =(       d
    T" X:H  5      v   M&     g7fr  r&   )r  r   r   r5  rd  s       r0   r  should_fold.<locals>.<genexpr>$  s9      "
D 	tqy!B^DM%BB"
s   ,/)r  rz  rd  r  r  r!  r}  rN  r  r  r  r|  )
r  r  r  t1t2t1_shape	t1_strideexpected_strider5  rd  s
            @r0   should_foldr     s     $+<<7<<#?ggEWFBDGGqLRWW\	||qbhhjAo&&xxH		I cO!"&tb&99: ' !$tH_56"
  r/   )pass_is_out)r  c                <
   SSK JnJn  U R                  5       nUR                  5       nUS:X  d  US:X  a  [	        SU SU 35      eUS:X  a  US:X  a  [
        R                  " X5      $ US:X  a  US:X  a  [
        R                  " X5      $ US:X  aG  US:X  aA  [
        R                  " [
        R                  " [
        R                  " U S5      U5      S5      $ US:X  a  US:X  a  [
        R                  " X5      $ [        XU5      (       GaV  Xe:  nU(       a  UR                  OU nU(       d  UOUS:X  a  U R                  5       OU n	UR                  n
[        U
S S 5      n[!        ["        R$                  U5      nU	R                  5       S:H  nU(       a  UR'                  U	R                  S   5        UR)                  XS   5      nU(       a\  [
        R*                  R,                  R/                  UR                  U	5      U5      nU(       a  UR                  R1                  5       $ U$ [
        R*                  R,                  R/                  UR                  U	5      U5      $ US:  Ga  US:  Ga  US:  a  U R3                  S5      OSnU R3                  S5      nU R                  S S nUS:  a  UR3                  S5      OUR3                  S5      nUS:  a  UR3                  S5      OSn/ n[5        US-
  5       H#  nUR'                  UR3                  U5      5        M%     US	:X  a  US	:X  a  U" US   US   :g  5      (       a}  U" US   S:H  5      (       a,  U R6                  (       a  [9        U R                  S5      U5      $ U" US   S:H  5      (       a+  UR6                  (       a  [9        XR                  S5      5      $ [        [
        R:                  " UU5      5      nUUU/-   n[=        U5      nU R?                  U5      R)                  UUU5      nUS:H  nU(       a7  UU/-   nUR?                  U5      R)                  UU5      R                  S5      nO)UUU/-   nUR?                  U5      R)                  UUU5      nUnUS:  a  UR'                  U5        US:  a  UR'                  U5        U(       a/  URA                  U5      R                  S5      RC                  U5      $ URA                  U5      RC                  U5      $ [
        RD                  " S
S 5        g )Nr   )rd  guard_or_truez9matmul does not support 0-dimensional tensors, got dims: z and r$   r%   rZ   ra  r   Fc                      g)Nz/both arguments to matmul need to be at least 1Dr&   r&   r/   r0   r   matmul.<locals>.<lambda>  s    $Ur/   )#rz  rd  r#  rV   r3  rE   dotr  r  r  r\   r   re  r   r!  r|  r   r  r   r  r-  r  r   _unsafe_viewr  r5  r[   r  rd  broadcast_shapesr7  r  bmmr  r   )r  r  r  rd  r#  dim_tensor1dim_tensor2r  r  r  sizes_1output_shapefolded_dim1t2_is_matrix	t1_foldedr  r;  m1batch_tensor1m2rY  batch_tensor2r  expand_batch_portiontensor1_expand_sizeexpand_batch_producttensor1_expanded
vector_rhstensor2_expand_sizetensor2_expandeds                                 r0   rd  rd  ,  s    T++-K++-Ka;!+G}TYZeYfg
 	
 aK1,yy**		kQ.xx))		kQ.}}UXXeoogq&A7KQOO		kQ.xx))	Wv	.	.  -	$WZZ'$G+:J799;PW 	 ((GCRL)X\\<8 vvx1}, JJ{BK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'A  a1 ( 1q mA.-2BBCCmA.!3449N9Ngooa0'::mA.!3449N9Ng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                 \  ^ ^^^^^^^ T R                   u    nmm[        TUS   X#5      n[        TUS   X$5      n[        R                  " T [        R                  R
                  S9u  pX[        R                  " US   T R                  S9R                  US9n	[        R                  " US   T R                  S9R                  US9n
[        XzU5      n[        XiU5      nUR                  S5      nUR                  5       nUR                  5       nX-
  R                  SS5      nX-
  R                  SS5      nUR                  [        R                  5      nUR                  [        R                  5      nUS-
  XS-   US	-   4nUS-
  XS-   US	-   4m[        U5      m[        U5      nS
u  mnT R                   [        R"                  :X  a  [%        T5      m[%        U5      nT Vs/ s HB  nUST-  -  [        R&                  " U5      S-  -   R                  [        R(                  5      PMD     snmU Vs/ s HB  nUSU-  -  [        R&                  " U5      S-  -   R                  [        R(                  5      PMD     nnUUU 4S jmU UUUU4S jm[+        U4S jU 5       5      nT R                   [        R"                  :X  a  Uc  [-        S5      e[/        UUU5      nO[1        S [3        UU5       5       5      n[        R4                  " T 5      nUR7                  US9nU$ s  snf s  snf )Nr   r$   re  r  r   rZ   r   rn   r%   r  r   c                    > [         R                  " U STS-
  5      n[         R                  " USTS-
  5      n[        R                  TS S X#/5      nU$ r  )rE   r   r   r  )r  rS  y_idxx_idxrW  in_hin_wr   s        r0   load_bounded0upsample_bicubic2d_default.<locals>.load_bounded  sM    B4!8,B4!8,utT5&@Ar/   c                    >^  [        UU 4S jT 5       5      nTR                  [        R                  :X  a  Tc  [	        S5      e[        UTT5      $ [        S [        UT5       5       5      $ )Nc              3   6   >#    U  H  nT" TU5      v   M     g 7fr9   r&   )r  x_ofsrB  ra   s     r0   r  Cupsample_bicubic2d_default.<locals>.get_x_interp.<locals>.<genexpr>  s     B'l1e,,'s   z4weights_precision_x must not be None for uint8 inputc              3   .   #    U  H  u  pX-  v   M     g 7fr9   r&   r  s      r0   r  rG    s     J4IBG4Ir  )r  r   rE   r]  r3  r;  r:  r  )ra   src_xr   ixs_ofsrB  weights_precision_x	weights_xs   ` r0   get_x_interp0upsample_bicubic2d_default.<locals>.get_x_interp  sc    B'BB;;%++%"*$J  &eY8KLLJCy4IJJJr/   c              3   4   >#    U  H  nT" U5      v   M     g 7fr9   r&   )r  y_ofsrM  s     r0   r  -upsample_bicubic2d_default.<locals>.<genexpr>  s     ;7%,u%%7r  z4weights_precision_y must not be None for uint8 inputc              3   .   #    U  H  u  pX-  v   M     g 7fr9   r&   r  s      r0   r  rQ    s     L6K(2bg6Kr  r_  )r!  r/  rJ   rK   rg  rM  rE   r  r  r<   r3  r\   r  r   r  r  r   r]  rB  r   int16r  r3  r;  r:  r  r   r  )r   r  r  r  r  r]   h_scale_factorw_scale_factorr   r  r  x_floaty_floatr=   ra   yscalerX  iys_ofs	weights_yweights_precision_yrt  src_yr"  r`  rM  r@  rA  rJ  rB  rK  rL  s   `                       @@@@@@@r0   upsample_bicubic2d_defaultr]    s    {{Aq$ $D+a.-QN#D+a.-QN''5#H#H#U#UHA 	[^ELL9<<5<IA[^ELL9<<5<IA#N}EG#N}EG#GAA k  c*Fk  c*F	U[[A	U[[A1uaQA&G1uaQ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   %A	L$5A	L)c                 @   [         R                  " [        U5      [        U5      -   S:H  S 5        UcR  Uc  [        S5      e[	        [
        [        [        4   [        S [        U R                  SS  U5       5       5      5      nU(       a  UOSu  pE[        XX$U5      $ )Nr$   c                      g)Nz:Must specify exactly one of output_size and scale_factors.r&   r&   r/   r0   r   (upsample_bicubic2d_vec.<locals>.<lambda>  s    Lr/   z7scale_factors must not be None when output_size is Nonec              3   T   #    U  H  u  p[        [        U5      U-  5      v   M      g 7fr9   )r   r   )r  rt  ru   s      r0   r  )upsample_bicubic2d_vec.<locals>.<genexpr>  s*       ?HA 	!u,-- ?s   &(r%   r  )
rE   r   r  r3  r   r  r  r  r!  r]  )r  r  r  rR  r  r  s         r0   upsample_bicubic2d_vecrc    s     
LL[D//14L   I  #s(O  #AGGABK ? 
 )6}<G%amgVVr/   c                 *   ^  U 4S jn[        T UU5      $ )Nc                    > [         R                  " U * X-   TR                  S9nUS-
  US-
  UR                  5       -
  R                  5       -
  $ )Nr  r$   )rE   r  r  r   r   middler   dim_idxr  s       r0   r  _reflection_pad.<locals>.idx+  sD    ,,ufnQXXFzVaZ'++-7<<>>>r/   _reflection_or_replication_padr  r  r  s   `  r0   _reflection_padrm  %  s     ? *	 r/   c                 *   ^  U 4S jn[        T UU5      $ )Nc                    > [         R                  " U * X-   TR                  S9n[         R                  " USUS-
  5      $ )Nr  r   r$   )rE   r  r  r   rf  s       r0   r  _replication_pad.<locals>.idx<  s4    ,,ufnQXXF{{7Avz22r/   rj  rl  s   `  r0   _replication_padrq  6  s     3 *	 r/   idx_fnc                 r  ^ [        U5      S-  m[        R                  " U R                  5       TS-   TS-   4;   U4S j5        U R                  T* S  nU R                  5       T-
  n[        T5       Vs/ s H  oQSTS-
  U-
  -     PM     nn[        T5       Vs/ s H  oQSTS-
  U-
  -  S-      PM     nnU n[        T5       HA  nS /UR                  5       -  n	U" Xe   X5   Xu   5      XU-   '   [        R                  X5      nMC     [        R                  " U5      n
UR                  U
S9nU$ s  snf s  snf )Nr%   r$   c                  (   > ST  ST S-    ST S-    S3$ )Nreflection_padzd requires r$   zD or r%   zD inputr&   r   s   r0   r   0_reflection_or_replication_pad.<locals>.<lambda>O  s"    .[q	sQwiwOr/   r_  )r  rE   r   rV   r!  r[   r   r  rJ   r   r  )r  r  rr  	inp_shapenc_dimr  padding_leftpadding_rightr"  r  r`  rV   s              @r0   rk  rk  G  s7   
 g,!
C	LL	C!GS1W%%O IUUWs]F8=c
C
1Aq1-.
LC=B3ZHZQ#'A+.23ZMHF3Z&**,. ),@PQJ##F0  //7M];FM DHs   4D/D4c           
      2  ^ ^^^ [        U5      S-  mUR                  T* S   Vs/ s H  o3S-
  PM	     nn[        T5       Vs/ s H  oRSTS-
  U-
  -     PM     nn[        T5       Vs/ s H  oRSTS-
  U-
  -  S-      PM     nn/ n[        UR                  5       Ha  nS/UR                  -  n	SX'   UR	                  [
        R                  " UR                  U   UR                  S9R                  U	5      5        Mc     US T*  mUT* S  n
S m[        T5       Vs/ s H  oZU   Xe   -   PM     nn[        T5       Vs/ s H  oVU   X   -
  PM     nn[        T5       Vs/ s H  nSXE   -  Xe   -   X   -
  PM     nn[        T5       Vs/ s H  o[U   SXE   Xe   -   Xu   -   4PM     nn[        R                  " [        R                  [        T5       Vs/ s H  nT" X   5      PM     sn5      n[        R                  T UTU-   S5      nUUU U4S jn[        R                  " [        T5       Vs/ s H  n/ S	QPM	     sn6  H  nU[!        S/T-  5      :X  a  M  / n/ n[        T5       Hn  nUU   S:X  a	  X   nX   nO7UU   S:X  a  X   nX   SXe   4nO UU   S:X  a  X   nX   XE   Xu   -
  XE   S-
  4nUR	                  W5        UR	                  W5        Mp     U" UUU5      nM     U$ s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf )
Nr%   r$   rZ   r  c                 B    U u  pn[         R                  " X:  X:*  5      $ r9   r  )index_ranger  lbubs       r0   index_range_condition7_reflection_pad_backward.<locals>.index_range_conditionx  s"    	r  !'22r/   r   r   c           	      J  > [        T	5       H4  nX#   S   X#   S   :  n[        U[        5      (       d  M)  U(       d  M2  U s  $    [        R                  " [
        R                  U Vs/ s H  nT" U5      PM     sn5      n[
        R                  T
UTU-   S5      nX-   $ s  snf )Nr%   r$   r   )r[   r;   r  rS   r   r   r  r  )r   r   index_rangesr  upper_less_than_lowerr}  r  gr  rV   rs   r  s           r0   r6  ,_reflection_pad_backward.<locals>.accumulate  s     sA$0OA$69K$K!/66;P;P 
 COP<K";/<P
 %%k4S#Fx Qs   (B 
)rZ   r   r$   )r  r!  r[   r  r  rE   r  r  r  rS   r   r   r  r  	itertoolsr
   r  )rs   r=   r  r  dhwr  ry  rz  r  
view_shapexyzcenterleft_reflectright_reflectrange_cr  r   r6  r]   areaoutsr  r   r}  r  rV   r  s   `                       @@@r0   _reflection_pad_backwardr  c  s1   
 g,!
C''3$%.
).Qq5.C
)8=c
C
1Aq1-.
LC=B3ZHZQ#'A+.23ZMHG166]S166\

u||AGGAJqxx@EEjQR 
 	#A
3$%.C3 16c
;
1!f|&
F;6;CjAjOcf,jLADI#JOJqQZ,/1CF:JMO
 NSSVZMWAsv/-2BBCZ   eCjQj0<jQD $$[$F
CHD  !!c
#C
1J
#CD5!s##sAAw!|i%jaB"o"vq,/:aA#&"vsv0@'@#&1*MKK,  $l3- E0 Kc *CH2 <AO R& $Ds5   K,K1(K6K;>L  L
L
L
1Lr   r   r
  c                \    [         R                  " XUS9n[         R                  " XUS9nX44$ )Nr
  )rE   aminri  )r   rV   r  r  ri  s        r0   aminmaxr    s,     ::dW5D::dW5D:r/   r   c                    [         R                  [        R                  " [        R                  " U 5      SU 5      XUS9$ )Nr   r   )r   r   rE   rp   isnan)r   rV   r  r   s       r0   nansumr    s0     88EKKD 11d;SQV8WWr/   r   rV  r  rp  rV  c          
      D    [         R                  R                  SU SXX4S9$ )Nr   r$   r  r   r  
start_step)rq  r   rV  r  rp  s        r0   arange_defaultr    s+     ;;!!	3f "  r/   c          
      B    [         R                  R                  XSX#XES9$ )Nr$   r  r  )rp  rq  r   rV  r  rp  s         r0   arange_startr    s)     ;;!!AU& "  r/   c                      SSK Jn  U" U 0 UD6$ )Nr   )out_dtype_dense)!torch._higher_order_ops.out_dtyper  )rL   rM   r  s      r0   out_dtype_decompr    s    AD+F++r/   marginc                   ^ ^^^	^
 [         R                  " T 5      m [         R                  " T5      mT R                  S   m
T R                  S   m	[         R                  " US:H  =(       d    US:H  S 5        [         R                  " T R
                  S:H  =(       a    T	S:g  U 4S j5        [         R                  " TR
                  S:H  =(       a    TR                  5       T
:H  U
U4S j5        TbY  [         R                  " T5      m[         R                  " TR
                  S:H  =(       a    TR                  5       T	:H  U	U4S j5        TR                  S5      m[         R                  " T STS9nX6-
  T -   nUR                  S5      nUS:X  a  UOXw-  nTb  UTT   -  n[         R                  " T	T R                  S	9n[         R                  " UT:g  US5      nU[        R                  R                  :X  a  UR!                  5       $ U[        R"                  R                  :X  a   UR%                  5       UR                  S   -  $ UR!                  SS
9$ )Nr   r$   r%   c                      g)Nz only p == 1 and p == 2 supportedr&   r&   r/   r0   r   #multi_margin_loss.<locals>.<lambda>  s    +Mr/   c                  "   > ST R                    3$ NzMExpected non-empty vector or matrix with optional 0-dim batch size, but got: r  r  s   r0   r   r    s    _`e`k`k_lmr/   c                  (   > ST  STR                    3$ )Nz#inconsistent target size, expected r/  r  )nframer  s   r0   r   r  	  s    5fXYv||nUr/   c                  (   > ST  STR                    3$ )Nz#inconsistent weight size, expected r/  r  )rV   r   s   r0   r   r    s    9#i~Vr/   r$  r  r   )rE   
atleast_2d
atleast_1dr!  r   r  r  r\   rs  rf  r  r  rp   r"   r,   r   r   r-   r   )r   r  rY  r  r   r   urq   r  rV   r  s   ``  `    @@r0   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Av
,,s5<<
0CC6M1a(AINN(((vvx	imm))	)uuw##vv!v}r/   	is_targetc                   ^^ U R                   mUR                   m[        R                  " U 5      n [        R                  " U5      nU R                   S   n[        R                  " [	        T5      S:*  =(       a    US:g  U4S j5        [        R                  " [	        T5      S:*  =(       a    TT:H  UU4S j5        [        R
                  " X1R                  S9nUS:H  n[        R                  " [        R                  " XTU5      SSS	9nXF:  n[        R                  " XqS5      n[        R                  " U SUS
9n	[        R                  " XqS5      n
[        R                  " XJR                  SS9:H  SS9nSU	R                  R                  SS9-
  U -   nUR                  S5      nX-  n[        R                  " USU5      nU[        R                  R                   :X  a  UR#                  SS9R%                  5       nO>U[        R&                  R                   :X  a  UR#                  5       nOUR#                  SS9nUR)                  U R*                  5      R-                  T5      nX4$ )Nr$   r%   r   c                     > ST  3$ r  r&   )orig_input_shapes   r0   r   0multilabel_margin_loss_forward.<locals>.<lambda>1  s    _`p_qrr/   c                     > ST ST  3$ )Nzinconsistent target size: z for input of size: r&   )r  orig_target_shapes   r0   r   r  5  s    ,->,??STdSefr/   r  rZ   Tr
  r$  r   rn   )r   rZ   )r!  rE   r  r   r  r  r  r  rp   rs  anyr\   Trf  r"   r,   r   r   r   r-   r<   r   r-  )r   r  r   rV   r  is_endend_idxtarget_masktidx0r  tidx1r  rq   r  r  s                @@r0   multilabel_margin_loss_forwardr  "  s    {{U#Ef%F
++a.C	LL"/saxr 
LL!#M(9=M(Mf
 ,,s==
1Cr\FjjV#6BMG-KKKQ/EU%0AKKR0E		#R!88a@Iaccmmm##e+A	AA	AIq!$AINN(((EEgE##%	imm))	)EEGEEgEU[[)112CDI<r/   )	attn_maskru   querykey	dropout_p	is_causalr  c                6  ^ ^^^ [         R                  " [         R                  " T 5      U 4S j5        [         R                  " T R                  5       S:H  =(       a-    TR                  5       S:H  =(       a    TR                  5       S:H  UU U4S j5        [         R                  " TS:H  U4S j5        [         R                  " T R                  S   TR                  S   :H  =(       a    TR                  S   TR                  S   :H  S 5        [
        R                  R                  T TTUTUS UT R                  S5      TR                  S5      :g  S	9	u  pxUR                  S
SSS5      R                  [         R                  S9R                  SS
SS5      nXx4$ )Nc                  "   > ST R                    3$ )Nz-query must be FP32, FP64, BF16, FP16 but got r   )r  s   r0   r   <scaled_dot_product_flash_attention_for_cpu.<locals>.<lambda>n  s    ?}Mr/   rK  c                  n   > STR                  5        ST R                  5        STR                  5        3$ )Nz,q, k, v must be a 4 dimensional tensor, got r  r   )r  r  r   s   r0   r   r  r  s1    >uyy{m2cggi[XZ[`[d[d[fZghr/   r   c                     > ST  3$ )Nz&dropout probability must be zero, got r&   )r  s   r0   r   r  u  s    $J9+"Vr/   r   c                      g)Nz&q, k, v should have the same head sizer&   r&   r/   r0   r   r  y  s    8r/   r$   )r  r  r  dropout_maskru   
enable_gqar%   r   r_  )rE   r   r\  rV   r!  r   "_scaled_dot_product_attention_mathr  r5  r  r  rc  )	r  r  r   r  r  r  ru   r  attns	   ````     r0   *scaled_dot_product_flash_attention_for_cpur  a  sR    
LL&M 
LL		q@SWWY!^@		q0@h 
LLSV 
LLA%++a.(KSYYq\U[[^-K8
 ::BB::a=CHHQK/ C 
LFF 	q!Q"	%"9"9	:	Aq!	 
 <r/   c                 0   ^ [        U 5      U4S j5       nU$ )Nc                  <   > T" U 0 UD6nU S   R                  U5      $ rz   )r3  )rL   rM   r   outplace_ops      r0   
inplace_op$register_inplace.<locals>.inplace_op  s%    4*6*Aw}}S!!r/   r   )aten_opr  r  s    ` r0   register_inplacer    s"    G$" %" r/   c                 j   U R                  5       (       d+  U R                  5       (       d  [        U5      n[        U5      n[        R                  " X5      n[        U[        R                  5      (       a  US:w  a  XT-  nUS:X  a  U$ [        U[        R                  5      (       a  US:w  a  X-  n X-   $ rK  )r\  r  r  rE   r)  r;   numbersNumber)r   batch1batch2rj   rt   r"  s         r0   baddbmmr    s     !!##DOO,=,=4yE
YYv&FeW^^,,
qydGNN++tqy{=r/   c                 ,    [         R                  " XSS9$ )Nr  r  r  )r   r   s     r0   floor_divider    s     99T88r/   c                 b    [         R                  " [        R                  U R                  S5      $ rc   )rS   r   r  r   r!  )r   s    r0   	sym_numelr    s    HLL!''155r/   r   r   c                    Uc  [         R                  R                  U / US9$ [         R                  R                  U / XS9$ )Nr   r  )r   r   dim_IntListIntList_out)r   r   r   s      r0   sum_defaultr    sA     {xx##D"E#::xx##D"E#CCr/   c           	      
   [        U [        R                  5      (       d  U $ Uc@  [        R                  R                  U [        [        U R                  5       5      5      5      $ [        R                  R                  X/5      $ r9   )	r;   rE   r   r   r  dimsr|  r[   rV   )r   rV   s     r0   squeeze_defaultr    s]     dELL))
{||  tE$((*,='>??||  u--r/   c                 .  ^ [        U4S j[        [        U R                  5      5       5       5      nUR                  [
        R                  :X  a  [
        R                  OS nU R                  SUSUS9nXUR                  UR                  5      -  -  U4$ )Nc              3   6   >#    U  H  oT:w  d  M
  Uv   M     g 7fr9   r&   )r  r  rV   s     r0   r  )_weight_norm_interface.<locals>.<genexpr>  s     @ 31CxQQ 3s   		r%   T)r  r   )
r  r[   r  r!  r   rE   r  r  r  r<   )rW  r  rV   keep_dim
norm_dtyper  s     `   r0   _weight_norm_interfacer    sr     @c!''l 3@@H !5>> 9tJ66!Xt:6>DDGGAGG$$%t++r/   assume_uniqueinvertc                   [        U [        R                  5      (       d  [        R                  " XR                  S9n [        U[        R                  5      (       d3  U(       a  [        R
                  " X5      $ [        R                  " X5      $ UR                  5       S[        U R                  5       S5      -  :  a
  [        XUS9$ [        XX#S9$ )Nr  g      $@g(\?r  r  )r;   rE   r   ru  r  ner  r  r   isin_defaultisin_sorting)elementstest_elementsr  r  s       r0   isinr    s     h--&&x8L8LMmU\\2288H4488H44tc(..*:E&BBBHFCC=
 	
r/   )rn  c                :   Uc=  [         R                  " U R                  5       [         R                  U R                  S9nO=[         R                  " U R                  5       U[         R                  U R                  S9nX :  R                  U R                  5      nU$ )Nr  )rn  r   r  )rE   randr5  r   r  r<   r   )r   rn  raw_prY  s       r0   	bernoullir    so     

499;emmDKKP

IIK--;;	
 
$**%AHr/   r  c                L   U R                  5       S:X  a#  [        R                  " U [        R                  S9$ U R                  SUR
                  -  -   nU R                  U5      n[        [        SUR
                  * S-
  S5      5      nXA:H  R                  US9nU(       a  U) $ U$ )Nr   r   )r$   rZ   r$   r   )
r  rE   
empty_liker  r!  r  r  r  r[   r  )r  r  r  expanded_elem_shaper=   rV   r_  s          r0   r  r    s    ~~1

;;"..4-2D2D+DD)*A
b=---126
7C
"
"s
"
+CC4"s"r/   c                   U R                  5       nUR                  5       nU(       a  [        R                  " XE/5      n[        R                  " USS9u  pxUSS  US S :H  n	[        R                  " U	SS/S5      n	U(       a  U	R                  5       n	[        R                  " U	5      n
U
R                  SX5      n
U
SU R                  5        R                  U R                  5      $ [        R                  " U5      u  p[        R                  " X5      n[        R                  " XR                  5       :  US5      nX   U:H  nU(       a  UR                  5       OUnUR                  U R                  5      $ )NT)stabler$   rZ   r   F)rL  rE   r7  sortr  logical_notr  r8  r  r-  r!  searchsortedrp   )r  r  r  r  elements_flattest_elements_flatall_elementssorted_elementssorted_orderduplicate_maskr  sorted_test_elementsr]   r  test_idxcmps                   r0   r  r    s>   $$&M&..0 yy-!DE(-

<(M%(,0DD..~1vuM+779N/q,?A()11(..AA"'**-?"@  !5E;;s%?%?%AA3J",=#)coos{{8>>**r/   c                 ,    U R                  S5      nX!   $ rY   )r-  )r   r  	flatteneds      r0   taker  <  s     R Ir/   c                     Uc  [         R                  nU[         R                  :X  a  [        U5      n[        R                  XR                  US9$ rC  )rE   rc  preserve_formatr   r   resizer!  )r   r   r`  s      r0   	resize_asr  C  sB    //----e4;;t[[;FFr/   )FF)noner9   )r%   )r   NNr$   )rZ   FFr  r1  r  )r$   r$   F)Fr   )r   rn   N)r   r$   N)Fr  )NNN)r   r   FT)r   r   FrB  )r   F(  rS   r  r  r  r~  collections.abcr   r   
contextlibr   enumr   r   r   r	   r
   typingr   r   r   r   rE   torch._meta_registrationstorch._primsrv  rB  torch._prims_common_prims_commonrJ   torch.nn.functionalr  r.  r   r   r   r   torch._decompr   r  r   r   r   r   r   r   torch._prims_common.wrappersr   r   r   r   torch.utilsr   rH   torch.utils._pytreer   rW  DispatchKeyr    r|  str__annotations___opsr  r   r"   rg  r  rU   rh  compute_only_pw_cast_for_opmathpw_cast_for_opmath"pw_cast_for_opmath_non_tensor_argsrM  pw_cast_for_int_to_realr  r^   rg   ri   rr   r  r~   rj  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  _safe_softmaxr  r  r  r  r_   r#  r&  r   r(  r1  r?  rI  rL  rQ  rT  rV  rX  r[  rn  rv  slicer  r  ru  r  r  r  r  r  r  r  rA  rE  rN  rT  rX  py_implCompositeImplicitAutogradAutogradrW  rl  rp  rv  r~  r7  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r&  r*  r?  rE  rI  unsafe_chunkrL  rH  rG  no_statsrP  rT  r`  rf  rj  rl  _fused_dropoutro  r{  r  r`  r  lift
lift_freshr~  r  r  r  r  r  r  r  _adaptive_avg_pool2dr  r  r  r  r
  r  r  r0  r6  r8  r4  r>  rD  	GeneratorrF  rT  rW  rm  r  rt  rz  r]  _upsample_nearest_exact1drv  r|  rb  rh  ro  rZ  r  r  r  r  r  r  r  r  r  r  rnn_tanhr   r  rnn_relur  r  r  r  r  r  r  r  lstmr  r
  r  r  grur  r  r  r   r"  r#  r+  r-  r)  r&  r/  r3  r;  rB  r%  r\  r^  r'  r  r8  r  rq  rw  rz  r|  r  r  r  r  r:  r  r  r  r  r  r  r  r
  r  r  r   rd  upsample_bicubic2dr]  rc  reflection_pad1dreflection_pad2dreflection_pad3drm  replication_pad1dreplication_pad2dreplication_pad3drq  rk  reflection_pad1d_backwardreflection_pad2d_backwardreflection_pad3d_backwardr  r  r  r  rs  rV  r  rp  r  r  r  r  +_scaled_dot_product_flash_attention_for_cpur  r  r  r  r  r   r  r  rV   r  r  r  r  r  r  r  r  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_rO  scatter_r,  scatter_add_scatter_addscatter_reduce_scatter_reducesilu_r&   r/   r0   <module>rm     sN       
 . "  % $ - -     #   , , 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$$
$ $ V	$
 $ $ $ $@ ))*\Nf NF N N N   +N( ../\..
. . V	.
 . . . .  0.b 001\$$
$ $ V	$
 $ $ $ $  2$N 112  $^^))	1
11 V1 	1
 1   31& ::;\
  $^^))
  V	
     <  --. ^^))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? C=	3?
 
#3? 3? +3?l (4<SM
38_. **+ $U$U	$U 
$U C=	$U
 
#$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
 ,,-Y
Y"3iY47Y?BYJMYY  .Y" ++334>B

%
,4UO

  5
& %kCCDk2236 e HTN  4 E & ++,VVA& AU A8D> A  -A & S    '4 ))*F  T   +6 ' $  	
    (( 556  	
   7:DI &\	  
&\	*T&\ 
tF| 
# 
"&\"	" "J 00$//2E2EFG
 !	&\	  
&		
  H  	'')C)C)G)GH "&	
c 
 
$v,		
 d6l  ))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 / +/( --55)) //
// &// 
// 63;	////f 

# f F # #    $" ../
 

  	
     0" 

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

 &! 
  
  
 
 
 666!" 
 O > 
F "";#H#HIG4< G JG AAIIJV 6
 	
   
 666!" K* 55==>((V( 6
( 	(
 ( ( ( 
( 666!"( ?(  55>>?((V( 6
( 	(
 ( 
( 666!"( @( @@HHIKKVK 6
K 	K
 K K K 
K 6666612K JK4V 6
 	
  
  : 44<<=11V1 6
1 	1
 1 1 
1 6666)*1 >14 ??GGHCCVC 6
C 	C
 C C 
C 6666669:C IC8 22::;11V1 6
1 	1
 1 1 
1 6666)*1 <14 ++,VV   - & $(%)37+VZ + EKK +
 U\\"+ + + E//0+  '+b diiAB  C &&{';';<--.VVVV, 6
 6"	
 &!  !&  - / => 00889 V 6"	
 &!  &!  
 d  68F#Xf%556 :6 77??@iii Vi 6"	i
 &!i i &!i i 
i di 68F#Xf%556i AiZ 77;;<""" V" 6"	"
 &!" " &!" " 
" d" ,," ,," ,," 68F#Xf%556" ="J 778VVV$  6"	
 &!  v  % 90 667VVV$  6"	
 &!  v   % 82 112d'v d'E#s(O d'   3d'N
)8<S	HK0 ))**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$ %@%@	%@ %@ 	%@ %@ %@P ))112"";#H#HI J 32 (()<: <C <
 <J < *< (=* =3 =z =: =  )=@@@$.@8B@PT@, 001Xx (f (vv~)> (  ! 2( % $'$'+/		tS%	  c5 
! (	  &  &; ';
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$s)$	3 DK(	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	?	?$s)$	? DK(	? 		? B S B S B S < < <	?@ 0088$:Q:Q:U:UVW  (()N)NO  (()=)=>Dd; #;;c; UO; 	; < ? P X; 	##++T-K-K-O-OP ''//0U0UV''//0D0DEDd; #GGcG UOG 	G < F WG 0088$:Q:Q:U:UVW  (()N)NO  (()=)=>Dd; !% $	GGcG uoG uo	G
 G < ? P XG 	##++T-K-K-O-OP ''//0U0UV''//0D0DEDd; !% $	SScS uoS uo	S
 S < F WS 0088$:Q:Q:U:UVW  (()N)NO  (()=)=>Dd; !% $ $QQcQ uoQ uo	Q
 uoQ Q < ? P XQ 	##++T-K-K-O-OP ''//0U0UV''//0D0DEDd; !% $ $		c	 uo	 uo		
 uo	 	 < 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 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 uo	K
 K  VK 	%%t'?'?'C'CD !!))+*>*>?
 !% $UUcU U uo	U
 uoU U  @
U 	&&(A(A(E(EF 
 !% $ $

c
 
 uo	

 uo
 uo
 
 
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  V3  	3 
 3  66>3 l --.X~&L
LL VL 	L
 L 66>L ' /L> //0X~&L
LL V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  f4f4
f4 f4 	f4
 f4 f4 f4R ,,-  
  	
     .   	#   !	# ==>$)..: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 e_	T
 e_T T   ? XTn //334$$[%J%JK$$[%9%9:
 48	WW%S/*W W E%,/0	W
 W   ; L 5
W4 --.--.--.	v 	c3h 	F 	   / / /
	 ../../../	 	sCx 	V 	   0 0 0
	38_ c3_f,- 	8 667667667\T  8 8 8Tn %UEu   & $X4 X  %X ,,dkkoo>? $( ==%)
	
 EKK 
 LL	

 U\\"
 
  @
 **+,
 $( ==%)	 EKK 	
 LL U\\"  - 	", #, ../''(<(<= #^^))))) ) 	)
 V) ) )  > 0)X ;;<$$,,44[5I5IJX{#--- - 66>	- $ K =-x HHPPQ
 A #'!AA	A A 	A
 A A E?A 66>A RAH '   ( ))*9  +9 '6 (6 ))488<<89 $( 		D
	D EKK 	D 
&			D
 	D :	D --t||/?/?@A.& .x} . B. 		==>, ?, 		"38 
  #
$ ../ ,0
,, ( \\	 0$ 5: # # <A + +: 		"  #
 'G (G 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 'r/   