Ë
    ÃÓ^j=K ã            !       ó}  — U d dl Z d dlZd dlZd dlZd dlZd dlmZmZ d dlm	Z	 d dl
mZ d dl mZmZ d dlmZmZ d dlmZmZ d dlZd dlZd dlmZ d dlmZ d dlmc mZ d dlmZm Z m!Z! d d	l"m#Z# d d
l$m%Z% d dlm&Z&m'Z'm(Z(m)Z)m*Z* d dl+m,Z,m-Z-m.Z.m/Z/ d dl0m1Z2 d dl3m4Z4 ejj                  jl                  Z6g Z7e8e9   e:d<   ejv                  jx                  jz                  Z= G d„ de«      Z>	 	 �d¶dedej~                  de@de@fd„ZA eeAej~                  j„                  d¬«      ZC eeAej~                  j„                  ¬«      ZD eeAej~                  j„                  d¬«      ZE eeAej~                  jŒ                  ¬«      ZGde!deHde!fd„ZI e#e=j”                  «       e/d «      eDd!e!d"e!fd#„«       «       «       ZJ e#e=j–                  «       e/d «      eDd!e!d"e!fd$„«       «       «       ZK e#e=j˜                  «       e/d «      eDd!e!de!d%eMd&eMfd'„«       «       «       ZL e#e=jœ                  «       e/d «      eDd(e!d)eMd*eMd+eMd,e@d-e!fd.„«       «       «       ZN e#e=jž                  j                   g«      d/„ «       ZQ e#e=jž                  jB                  g«      d0e!fd1„«       ZR e#e=j¦                  «       e/«       eDd2e!de!fd3„«       «       «       ZS e#e=j¨                  «       e/d «      eDd(e!d2e!fd4„«       «       «       ZT e#e=jª                  «       e/d «      eDd(e!d2e!d5eMd6eMfd7„«       «       «       ZU e#e=j¬                  «       e/«       eDd2e!de!fd8„«       «       «       ZV e#e=j®                  «       e/«       eDd(e!d2e!de!fd9„«       «       «       ZW e#e=j°                  «       e/d «      d(e!d2e!d&eMfd:„«       «       ZX e#e=j²                  «       e/d «      eDd(e!d2e!d;eMd<e@fd=„«       «       «       ZY e#e=j´                  «       e/d «      eD�d·d>e!d2e!d?e9fd@„«       «       «       ZZ e#e=j¶                  «      eDd(e!dAe!fdB„«       «       Z[ e#e=j¸                  «       e/«       eDd2e!de!fdC„«       «       «       Z\ e#e=jº                  «       e/d «      eDd(e!d2e!de!fdD„«       «       «       Z] e#e=j¼                  «      d2e!dEe!de!fdF„«       Z^ e#e=j¾                  «      d(e!d2e!dEe!de`e!e!f   fdG„«       Z_ e#e=jÂ                  «       e/«       eDd(e!d2e!dHe!dIeMdJeMdKe@d<e@de!fdL„«       «       «       Za e#e=jÄ                  «       e/d «      eDd(e!d2e!dMe!de!fdN„«       «       «       Zb e#e=jÆ                  «       e/«       d2e!dOe!de!fdP„«       «       ZcdQe!dReHfdS„ZddTejÊ                  fdU„Zf e#e=jÎ                  «       e/«       eDe>jÐ                  jÒ                  fd2e!dVe!dReHde!fdW„«       «       «       Zg e#e=jÔ                  «       e/d «      eDd(e!dAe!dVe!dReHfdX„«       «       «       Zj e#e=jÖ                  «      �d¸dY„«       Zl e#e=jÚ                  «       e/«       eDe>jÐ                  jÒ                  dZfd2e!dVe!dReHd%eMfd[„«       «       «       Zm e#e=jÜ                  jÞ                  «      eDd(e!d2e!dVe!dReHd%eMf
d\„«       «       Zn e#e=jÜ                  jà                  «      eDd(e!d2e!dVe!dReHd%eMd e!fd]„«       «       Zq e#e=jä                  jÞ                  «      eDd(e!d2e!dVe!dReHd^eMf
d_„«       «       Zr e#e=jä                  jæ                  «      eDd(e!d2e!dVe!dReHd^eMd e!fd`„«       «       Ztd(e!d2e!dVe!dEe!dz  dReHdaeHdbe!de!fdc„Zu e#e=jì                  «       e/d «      eDd(e!d2e!deHde!fdd„«       «       «       Zv e#e=jî                  «       e/d «      d(e!d2e!dVe!dEe!dz  dReHdaeHdbe!de!fde„«       «       Zw e#e=jð                  «       e/d «      d(e!d2e!dVe!dEe!dz  dReHdaeHdbe!de!fdf„«       «       Zx e#e=jò                  «       e/«       eDde>jÐ                  jÒ                  fd2e!dVe!dEe!dz  dReHde!f
dg„«       «       «       Zy e#e=jô                  «       e/d «      eDde>jÐ                  jÒ                  fd(e!d2e!dVe!dEe!dz  dReHde!fdh„«       «       «       Zz e#e=jö                  «       e/«       eDe>jÐ                  jÒ                  fdAe!dVe!dReHde!fdi„«       «       «       Z{ e#e=jø                  «       e/d «      eDe>jÐ                  jÒ                  fd(e!d2e!dVe!dReHde!f
dj„«       «       «       Z| e#e=jú                  «       e/«       �d¹dAe!dOe!dkeMfdl„«       «       Z} e#e=jü                  «       e/«       dme!dne!de!fdo„«       «       Z~ e#e=jþ                  «       e/«       d(e!dpe8eH   deHdqeHdreHdseHfdt„«       «       Z e#e=�j                   jB                  «      	 	 	 	 �dºd2e!deHdqeHdz  dreHdz  dseHf
dv„«       Z�de!deHdqeHdz  dreHdz  de`eHeHf   f
dw„Z‚ e#e=�j                  «       e/«       	 	 	 	 �dºdAe!dxe!deHdqeHdz  dreHdz  dseHfdy„«       «       Zƒ e#e=�j                  «       e/«       d(e!dpe8eH   deHdzeHfd{„«       «       Z„ e#e=�j
                  «       e/«       d(e!dpe8eH   d|eHd}eHd~eHf
d„«       «       Z…d(e!d e!d€ejÊ                  fd�„Z† e#e=�j                  «       e/d «      eCd(e!d‚e!deHd€ejÊ                  fdƒ„«       «       «       Z‡ e#e=�j                  «       e/«       eCd(e!d‚e!deHd€ejÊ                  fd„„«       «       «       Zˆd…„ Z‰ e#e=�j                  «       e/«       dAe!d†e8eH   d‡e8eH   dˆe8eH   d‰e8eH   de!fdŠ„«       «       ZŠ e#e=�j                  «       e/«       eDdAe!d‹e8eH   d†e8eH   d‡e8eH   dˆe8eH   d‰e8eH   de!fdŒ„«       «       «       Z‹ e#e=�j                  «       e/«       d(e!d�e!d*eMfdŽ„«       «       ZŒ e#e=�j                  «       e/«       d>e!d�e8eH   d�eHd‘eHdseHde!fd’„«       «       Z� e#e=�j                  jÞ                  «      eD	 �d¸d(e!d2e!d“eMdz  de!fd”„«       «       ZŽ e#e=�j                  «      e=�j                  jÞ                  �j!                  e6�j"                  «      e=�j                  jÞ                  �j!                  e6�j$                  «      dAe!dkeMd•e@dz  fd–„«       «       «       Z� e#e=�j&                  «       e/d—d˜«      dAe!dkeMd•e@dz  fd™„«       «       Z“ e#e=�j(                  «       e/«       de!deHdše@fd›„«       «       Z”de!deHde!fdœ„Z• e#e=�j,                  «       e/d¬�«      de!deHdše@fdž„«       «       Z– e#e=�j.                  «       e/«       	 	 	 �d»dEe!dŸe!d eHd¡e@d¢e@de!fd£„«       «       Z— e#e=�j0                  «       e/«       d(e!dŸe!d¤eHd eHd¡e@f
d¥„«       «       Z˜de8eH   fd¦„Z™d§e8e!   deHd¨eHde8e!   fd©„Zšd§e8e!   fdª„Z›d§e8e!   deHfd«„Zœd§e8e!   deHd¨eHfd¬„Z� e#e=�j<                  jÞ                  e=�j<                  jæ                  g«      	 �d¸d§e8e!   deHd¨eHd­e!dz  de!f
d®„«       Zž e#e=�j>                  jÞ                  e=�j>                  jæ                  g«      	 	 �d¼d2e!d¯e8eH   deHd­e8e!   dz  de8e!   dz  f
d°„«       ZŸ e#e=�j@                  jB                  «      �d½dAe!d±eHdeHde`e!d²f   fd³„«       Z  e#e=�jB                  jÞ                  «      	 �d½dAe!d¯e8eH   deHde`e!d²f   fd´„«       Z¡ e#e=�jD                  jB                  «      �d½d2e!d±eHdeHde`e!d²f   fdµ„«       Z¢e=�jF                  �jH                  �j!                  e6�j"                  «      	 �d½d2e!d¶e!deHde`e!d²f   fd·„«       Z¥ e#e=�jL                  jÞ                  e=�jL                  jæ                  g«       e/d¬�«      eD�d¾d2e!d¸e!d¹e!d%eHd)eHf
dº„«       «       «       Z¦ e#e=�jL                  jÊ                  e=�jL                  �jN                  g«       e/d¬�«      	 	 �d¾d2e!d¸e!d¹e!d»ejÊ                  d%eHd)eHfd¼„«       «       Z¨ e#e=�jR                  «       e/«       eD	 	 	 �d¿d2e!d¸e!d¹e!d%eHd)eHd½e@fd¾„«       «       «       Z©eD�d¾d2e!d¸e!d¿e!d%eHd)eHf
dÀ„«       Zª e#e=�jV                  «       e/d¬�«      �d¾d2e!d¸e!d¿e!d%eHd)eHf
dÁ„«       «       Z« e#e=�jX                  jÞ                  «      eDd(e!dAe!dÂe!dÃe!dÄe!dz  dÅeHdÆeHdÇeHdÈeHdÉe8e@   de`e!dz  e!dz  e!dz  f   fdÊ„«       «       Z¬ e#e=�jX                  jæ                  «      d(e!dAe!dÂe!dÃe!dÄe!dz  dÅeHdÆeHdÇeHdÈeHdÉe8e@   d—ejB                  d˜ejB                  dËejB                  de`e!dz  e!dz  e!dz  f   fdÌ„«       Z­de!dz  de!dz  fdÍ„Z® e#e=�j^                  jÞ                  «      dÎe!dAe!dÏe8eH   dÂe!dÃe!dEe!dz  dÐe!dz  dÉe8e@   de`e!dz  e!dz  e!dz  f   fdÑ„«       Z¯ e#e=�j^                  jæ                  «      dÎe!dAe!dÏe8eH   dÂe!dÃe!dEe!dz  dÐe!dz  dÉe8e@   d—ejB                  d˜ejB                  dËejB                  de`e!dz  e!dz  e!dz  f   fdÒ„«       Z° e#e=�jb                  jÞ                  «      dAe!dÏe8eH   dEe!dz  d“eMdz  de`e!e!f   f
dÓ„«       Z± e#e=�jd                  jÞ                  «      dÎe!dAe!dÏe8eH   dÃe!dEe!dz  dÉe8e@   de`e!dz  e!dz  f   fdÔ„«       Z²dAe!dEe!dz  dÐe!dz  dÕe!dz  dÖe!dz  dKe@d×eMd“eMdØe@de`e!e!e!e!dz  e!dz  f   fdÙ„Z³ e#e=�jh                  «       e/d­dÚdÛ«      dAe!dEe!dz  dÐe!dz  dÕe!dz  dÖe!dz  dKe@d×eMd“eMde`e!e!e!f   fdÜ„«       «       Z´e=�jh                  jÞ                  �j!                  e6�j$                  «      e=�jh                  jÞ                  �j!                  e6�j"                  «      dAe!dEe!dz  dÐe!dz  dÕe!dz  dÖe!dz  dKe@d×eMd“eMde`e!e!e!f   fdÝ„«       «       Zµe=�jl                  jÞ                  �j!                  e6�j"                  «      �d½de8e!   fdÞ„«       Z· e#e=�jp                  jÞ                  «      dAe!dEe!dz  dÐe!dz  dÕe!dÖe!d×eMd“eMde`e!e!e!f   fdß„«       Z¸ e#e=�jr                  jÞ                  «      dAe!dEe!dz  dÐe!dz  dÕe!dÖe!dKe@d×eMd“eMde`e!e!e!f   fdà„«       Z¹ e#e=�jr                  �jt                  «      dAe!dEe!dz  dÐe!dz  dKe@d×eMd“eMde`e!e!e!f   fdá„«       Z» e#e=�jx                  jÞ                  «      dAe!dEe!dz  dÐe!dz  dÕe!dÖe!dKe@d×eMd“eMde`e!e!e!e!e!f   fdâ„«       Z¼dAe!dEe!dz  dÐe!dz  dÕe!dÖe!d“eMdKe@de!fdã„Z½ e#e=�j|                  jÞ                  «      dAe!dEe!dz  dÐe!dz  dÕe!dÖe!d×eMd“eMde`e!e!e!e!f   fdä„«       Z¾ e#e=�j~                  jÞ                  «      dAe!dEe!dz  dÐe!dz  dÕe!dÖe!d×eMd“eMde`e!e!e!e!e!e!f   fdå„«       Z¿ e#e=�j€                  jÞ                  «      dAe!dEe!dz  dÐe!dz  dÕe!dÖe!d×eMd“eMde`e!e!e!e!f   fdæ„«       ZÀ e#e=�j‚                  «       e/d—d˜«      �d¸dç„«       «       ZÂ e#e=�j†                  «       e/«       dddddddèœde!e'z  dTejÊ                  dz  dée�jˆ                  dz  dêe@dëe@dìe�jŠ                  dz  fdí„«       «       ZÃ e#e=�jŒ                  e=�jŽ                  e=�j�                  g«       e/«       dî„ «       «       ZÉe=�j”                  jÞ                  �j!                  e6�j$                  «       e#e=�j”                  «       e/d—d˜dËdï«      dAe!dEe!dÐe!dz  dÕe!dz  dÖe!dz  dKe@dðeMdñeMfdò„«       «       «       ZÊdó„ ZË e#e=�j˜                  jÞ                  «      dÎe!dAe!dEe!dz  dÕe!dz  dÖe!dz  dÚe!dz  dÛe!dz  d•e@d“eMdÉe8e@   dôe!de`e!e!dz  e!dz  f   fdõ„«       ZÌ e#e=�jš                  jÞ                  «      dÎe!dAe!dEe!dz  dÕe!dz  dÖe!dz  dÚe!dz  dÛe!dz  d•e@d“eMdÉe8e@   de`e!e!dz  e!dz  f   fdö„«       ZÍ e#e=�jš                  jæ                  «      dÎe!dAe!dEe!dz  dÕe!dz  dÖe!dz  dÚe!dz  dÛe!dz  d•e@d“eMdÉe8e@   d—ejB                  d˜ejB                  dËejB                  de`e!e!dz  e!dz  f   fd÷„«       ZÎ e#e=�jž                  «       e/d—d˜dË«      dAe!d(e!dEe!dÕe!dz  dÖe!dz  dÚe!dz  døe!dz  dñeMfdù„«       «       ZÏ e#e=�j                   «       e/d—d˜dË«      dAe!d(e!dEe!dÕe!dz  dÖe!dz  dÚe!dz  døe!dz  dñeMdúe!fdû„«       «       ZÐ e#e=�j¢                  «       e/«       eDdAe!d‹e`eHeHf   fdü„«       «       «       ZÒd2e!d†e8eH   d‰e8eH   dˆe8eH   d‡e8eH   dýe@dþeHde`e!e!f   fdÿ„ZÓ e#e=�j¨                  «       e/d­dŸ«      g d gdugdfd2e!d†e8eH   d‰e8eH   dˆe8eH   d‡e8eH   dýe@de`e!e!f   f�d „«       «       ZÔ e#e=�jª                  «       e/d­dŸ«      g d gdugdfd2e!d†e8eH   d‰e8eH   dˆe8eH   d‡e8eH   dýe@de`e!e!f   f�d„«       «       ZÕ e#e=�j¬                  «       e/d­dŸ«      dAe!d‹e`eHeHf   de`e!e!f   f�d„«       «       ZÖ e#e=�j®                  «       e/d­dŸ«      dAe!d‹e`eHeHeHf   de`e!e!f   f�d„«       «       Z×d2e)dŸe)d‹e8eH   deHf�d„ZØ e#e=�j²                  «       e/«       d2e)dŸe)d‹e8eH   f�d„«       «       ZÙ e#e=�j´                  «       e/«       dAe)dŸe)d‹e8eH   d‰e8eH   dˆe8eH   f
�d„«       «       ZÚ e#e=�j¶                  «      du�dœde)deHdze)�de)d)e'f
�d	„«       ZÛ e#e=�j¸                  «       e/«       du�dœde)deHdze)�de)d)e'f
�d
„«       «       ZÜdu�dœde)deHdze)�de)�de@d)e'f�d„ZÝ e#e=�j¼                  jÞ                  «      e=�j¼                  jÞ                  �j!                  e6�j"                  «      �dÀ�d„«       «       ZÞ e#e=�j¾                  «      de)deHdze)�de)f�d„«       Zß e#e=�jÀ                  «       e/«       de)deHdze)�de)f�d„«       «       Zàde)deHdze)�de)�de@f
�d„Zá e#e=�jÄ                  «       e/d‚dM«      eDd2e!de`e!e!f   f�d„«       «       «       Zâ e#e=�jÆ                  «       e/«       	 	 	 �dÁde!�de@eHz  eMz  �de@eHz  eMz  �de�jÈ                  dz  f�d„«       «       Zã e#e=�jÊ                  «      �dÂ�d„«       Zå�d„ Zæ�d„ Zç e#e=�jÐ                  �jÒ                  «       e#e=�jÔ                  �jÒ                  «       e#e=�jÖ                  �jÒ                  «      e=�jÐ                  �jÒ                  �j!                  e6�j"                  «      e=�jÐ                  �jÒ                  �j!                  e6�j$                  «      e=�jÔ                  �jÒ                  �j!                  e6�j"                  «      e=�jÔ                  �jÒ                  �j!                  e6�j$                  «      e=�jÖ                  �jÒ                  �j!                  e6�j"                  «      e=�jÖ                  �jÒ                  �j!                  e6�j$                  «      dAe!d‹e8eH   dz  �de8eM   dz  de!f�d„«       «       «       «       «       «       «       «       «       Zì e#e=�jÚ                  �jÒ                  «       e#e=�jÜ                  �jÒ                  «       e#e=�jÞ                  �jÒ                  «      e=�jÚ                  �jÒ                  �j!                  e6�j"                  «      e=�jÚ                  �jÒ                  �j!                  e6�j$                  «      e=�jÜ                  �jÒ                  �j!                  e6�j"                  «      e=�jÜ                  �jÒ                  �j!                  e6�j$                  «      e=�jÞ                  �jÒ                  �j!                  e6�j"                  «      e=�jÞ                  �jÒ                  �j!                  e6�j$                  «      dAe!d‹e8eH   dz  �de8eM   dz  de!f�d„«       «       «       «       «       «       «       «       «       Zð�dÃ�d„Zñ e#e=�jÐ                  jÞ                  e=�jÐ                  jæ                  g«      e=�jÐ                  jÞ                  �j!                  e6�j"                  «      e=�jÐ                  jÞ                  �j!                  e6�j$                  «       e/dd�¬«      	 �d¸dAe!d‹e8eH   �deMdz  de!f�d„«       «       «       «       Zè e#e=�jÚ                  jÞ                  e=�jÚ                  jæ                  g«      e=�jÚ                  jÞ                  �j!                  e6�j"                  «      e=�jÚ                  jÞ                  �j!                  e6�j$                  «       e/dd�¬«      	 �d¸dAe!d‹e8eH   �deMdz  de!f�d „«       «       «       «       Zò e#e=�jÔ                  jÞ                  e=�jÔ                  jæ                  g«      e=�jÔ                  jÞ                  �j!                  e6�j"                  «      e=�jÔ                  jÞ                  �j!                  e6�j$                  «       e/dd�¬«      	 	 �dÄdAe!d‹e8eH   �d!eMdz  �d"eMdz  de!f
�d#„«       «       «       «       Zê e#e=�jÜ                  jÞ                  e=�jÜ                  jæ                  g«      e=�jÜ                  jÞ                  �j!                  e6�j"                  «      e=�jÜ                  jÞ                  �j!                  e6�j$                  «       e/dd�¬«      	 	 �dÄdAe!d‹e8eH   �d!eMdz  �d"eMdz  de!f
�d$„«       «       «       «       Zî e#e=�jÖ                  jÞ                  e=�jÖ                  jæ                  g«      e=�jÖ                  jÞ                  �j!                  e6�j"                  «      e=�jÖ                  jÞ                  �j!                  e6�j$                  «       e/dd�¬«      	 	 	 �dÅdAe!d‹e8eH   �d%eMdz  �d!eMdz  �d"eMdz  de!f�d&„«       «       «       «       Zë e#e=�jÞ                  jÞ                  e=�jÞ                  jæ                  g«      e=�jÞ                  jÞ                  �j!                  e6�j"                  «      e=�jÞ                  jÞ                  �j!                  e6�j$                  «       e/dd�¬«      	 	 	 �dÅdAe!d‹e8eH   �d%eMdz  �d!eMdz  �d"eMdz  de!f�d'„«       «       «       «       ZïeD	 �dÃdAe!d‹e8eH   �de8eMdz     �d(e@de!f
�d)„«       Zó�d*„ Zô�d+„ Zõ�d,„ Zö�d-„ Z÷	 �dÃ�d.„Zø�d/„ Zù�d0„ Zú�dÃ�d1„Zû�dÃ�d2„Zü�d3„ Zý e#e=�jü                  �jþ                  «      e=�jü                  �jþ                  �j!                  e6�j"                  «      e=�jü                  �jþ                  �j!                  e6�j$                  «      �d4„ «       «       «       �Z  e#e=�j                  �jþ                  «      e=�j                  �jþ                  �j!                  e6�j"                  «      e=�j                  �jþ                  �j!                  e6�j$                  «      �d5„ «       «       «       �Z e#e=�j                  �j                  «      e=�j                  �j                  �j!                  e6�j"                  «      e=�j                  �j                  �j!                  e6�j$                  «      �d6„ «       «       «       �Z e#e=�jü                  �j                  «      e=�jü                  �j                  �j!                  e6�j"                  «      e=�jü                  �j                  �j!                  e6�j$                  «      �d7„ «       «       «       �Z�d8„ �Z�dÃ�d9„�Z�dÃ�d:„�Z�d;„ �Z	 e#e=�j                  �jþ                  «      e=�j                  �jþ                  �j!                  e6�j"                  «      e=�j                  �jþ                  �j!                  e6�j$                  «      �d<„ «       «       «       �Z e#e=�j                  �j                  «      e=�j                  �j                  �j!                  e6�j"                  «      e=�j                  �j                  �j!                  e6�j$                  «      �d=„ «       «       «       �Z�d>„ �Z�d?„ �Z e#e=�j                  �j                  «      e=�j                  �j                  �j!                  e6�j"                  «      e=�j                  �j                  �j!                  e6�j$                  «      �d@„ «       «       «       �Z e#e=�j                  �jþ                  «      e=�j                  �jþ                  �j!                  e6�j"                  «      e=�j                  �jþ                  �j!                  e6�j$                  «      �dA„ «       «       «       �Z e#e=�j$                  �jÒ                  «      e=�j$                  �jÒ                  �j!                  e6�j"                  «      e=�j$                  �jÒ                  �j!                  e6�j$                  «      �dB„ «       «       «       �Z e#e=�j(                  �jÒ                  «      e=�j(                  �jÒ                  �j!                  e6�j"                  «      e=�j(                  �jÒ                  �j!                  e6�j$                  «      �dC„ «       «       «       �Z e#e=�j,                  �jÒ                  «      e=�j,                  �jÒ                  �j!                  e6�j"                  «      e=�j,                  �jÒ                  �j!                  e6�j$                  «      �dD„ «       «       «       �Z e#e=�j0                  �jÒ                  «       e#e=�j2                  �jÒ                  «      e=�j4                  �jÒ                  �j!                  e6�j"                  «      e=�j4                  �jÒ                  �j!                  e6�j$                  «      e=�j0                  �jÒ                  �j!                  e6�j"                  «      e=�j0                  �jÒ                  �j!                  e6�j$                  «      e=�j2                  �jÒ                  �j!                  e6�j"                  «      e=�j2                  �jÒ                  �j!                  e6�j$                  «      �dE„ «       «       «       «       «       «       «       «       �Z e#e=�j4                  jÞ                  e=�j4                  jæ                  g«       e/«       	 �d¸dAe!d‹e8eH   �dFe@�d"eMdz  de!f
�dG„«       «       �Z e#e=�j0                  jÞ                  e=�j0                  jæ                  g«      e=�j0                  jÞ                  �j!                  e6�j$                  «       e/«       	 	 �dÄdAe!d‹e8eH   �dFe@�d!eMdz  �d"eMdz  de!f�dH„«       «       «       �Z e#e=�j2                  jÞ                  e=�j2                  jæ                  g«       e/«       	 	 	 �dÅdAe!d‹e8eH   �dFe@�d%eMdz  �d!eMdz  �d"eMdz  de!f�dI„«       «       �Z�d¸�dJ„�Z�dK„ �Zdxee!   �dLee!   �dMe!de!f�dN„�Z�dLe*de!f�dO„�ZeDdAe!d‹e8eH   �dFe@�de8eMdz     de!f
�dP„«       �Z  e#e=�jB                  jÞ                  «      �dQe!�dRe!de@f�dS„«       �Z! e#e=�jD                  e=�jF                  g«       e/«       �dT„ «       «       �Z" e#e=�jH                  g«      �dU„ «       �Z$ e#e=�jJ                  g«      �dÃ�dV„«       �Z% e#e=�jL                  g«      �dW„ «       �Z& e#e=�jN                  g«      �dX„ «       �Z'd2e!dVe!dEe!dz  dReHdaeHde`e!e!f   f�dY„�Z( e#e=�jR                  «       e/d‚db«      d2e!dVe!dEe!dz  dReHdaeHde`e!e!f   f�dZ„«       «       �Z) e#e=�jT                  «       e/d‚db«      d2e!dVe!dEe!dz  dReHdaeHde`e!e!f   f�d[„«       «       �Z*de!�d\eMde!f�d]„�Z+de!�d\eMde!f�d^„�Z,�d_e!de*f�d`„�Z-�dae*�dbe!de!f�dc„�Z.�dbee!   de!f�dd„�Z/�deeH�dFe@dTejÊ                  dée�jˆ                  f�df„�Z0�dge!�dheH�dieH�dFe@f�dj„�Z1�dge!�dkeH�dheH�dieH�dFe@f
�dl„�Z2�dge!d‘e8eH   �dFe@f�dm„�Z3�dge!d‘e8eH   �dFe@f�dn„�Z4 e#e=�jj                  «       e/«       eD�dge!d‘e8eH   �dFe@f�do„«       «       «       �Z5	 	 	 	 �dÆ�dQe!�dpe!�dqeH�dreH�dFe@�dse@de!f�dt„�Z6 e#e=�jn                  «       e/«       eD	 	 	 �dÇ�dQe!�dpe!�dqeH�dreH�dFe@de!f�du„«       «       «       �Z7 e#e=�jp                  «       e/d¬�«      eD�dv„ «       «       «       �Z8 e#e=�jr                  «       e/«       dde>jÐ                  jÒ                  f�dw„«       «       �Z9�dxejB                  �dyejB                  �dze@de@f�d{„�Z:e=�jv                  jÞ                  �j!                  e6�j"                  «      e=�jv                  jæ                  �j!                  e6�j"                  «       e/d�¬|«      d�d}œ�d~„«       «       «       �Z; e#e=�jx                  jÞ                  e=�jx                  jæ                  g«      e=�jx                  jÞ                  �j!                  e6�j$                  «       e/«       eD	 	 �dÄdAe!d‹e`eHeHf   �dFe@�deMdz  �d€eMdz  de!f�d�„«       «       «       «       �Z= e#e=�jx                  �jÒ                  «      e=�jx                  �jÒ                  �j!                  e6�j"                  «      e=�jx                  �jÒ                  �j!                  e6�j$                  «       e/«       eD	 �d¸�dQe!d‹e`eHeHf   dz  �dFe@�de`eMeMf   dz  de!f
�d‚„«       «       «       «       «       �Z> e#e=�j~                  «       e#e=�j€                  «       e#e=�j‚                  «      eD e/«       �dQe!dˆe`eHd²f   de!f�dƒ„«       «       «       «       «       �ZB e#e=�j†                  «       e#e=�jˆ                  «       e#e=�jŠ                  «      eD e/«       �dQe!dˆe`eHd²f   de!f�d„„«       «       «       «       «       �ZF�dQe!dˆe`eHd²f   �d…eeHeHeHge!f   de!f�d†„�ZG e#e=�j�                  «       e#e=�j’                  «       e#e=�j”                  «       e/d «      �d‡„ «       «       «       «       �ZK e#e=�j˜                  «       e/�dˆ�d‰«      dd�dŠœ�d‹„«       «       �ZL e#e=�jš                  «       e/«       �dÈd�dŒœ�d�„«       «       �ZM e#e=�jœ                  jÞ                  e=�jœ                  jæ                  g«       e/«       de�jž                  dd�dŽœdre'dTejÊ                  dz  �d�e�j                   dée�jˆ                  dz  dêe@f
�d�„«       «       �ZQ e#e=�jœ                  �j¤                  g«      de�jž                  dd�dŽœdqe'dre'dTejÊ                  dz  �d�e�j                   dée�jˆ                  dz  dêe@f�d‘„«       �ZS e#e%«      �d’„ «       �ZT e#e=�jª                  «      e=�jª                  jÞ                  �j!                  e6�j$                  «       e/«       dudude>jÐ                  jÒ                  fdAe!dVe!dke'�d“e'dEe!dz  dReHde!f�d”„«       «       «       �ZU e#e=�j¬                  «      e=�j¬                  jÞ                  �j!                  e6�j$                  «       e/d‚�d•«      dAe!dVe!dReHde`e!e!f   f�d–„«       «       «       �ZV e#e=�j®                  jÞ                  «      	 	 �dÉdd�d—œ�d˜e!�d™e!d0e!�dšeM�d›e@�dœe!dz  d*eMdz  de`e!e!f   f�d�„«       �ZX�dž„ �ZY e#e=�j´                  g«       e/d¬�«      eD�d¾�dŸ„«       «       «       �ZZ e#e=�j¶                  «       e/«       �d „ «       «       �Z[ e#e=�j¸                  «      �d¡„ «       �Z\ e#e=�jº                  jÞ                  e=�jº                  jæ                  g«      dd�d¢œd2e!dTejÊ                  dz  d­e!dz  de!f�d£„«       �Z^ e#e=�j¾                  jÞ                  e=�j¾                  �jÀ                  g«      �d¸d2e!deHdz  f�d¤„«       �Za e#ejx                  jz                  �jÄ                  «      �d½�d¥„«       �Zb e#e=�jÆ                  «       e/«       dd�d¦œ�d§„«       «       �Zc e#e=�jÈ                  jÞ                  «      d�d¨œd2ejB                  �de�jÈ                  dz  dejB                  f�d©„«       �Zdd�dªœ�d«„�Zedd�d¦œ�d¬„�Zf e#e=�jÎ                  «       e/«       �d­„ «       «       �Zg e#e=�jÐ                  «      �d¸�d®„«       �Zh e#e=�jÒ                  «      d(e!d2e!dýe@dŸe!f�d¯„«       �Zi e#e=�jÔ                  jÞ                  e=�jÔ                  jæ                  g«       e/«       dddd�dŽœ�d°eHdTejÊ                  dz  �d�e�j                   dz  dée�jˆ                  dz  dêe@dz  de!f�d±„«       «       �Zj e#e=�jÔ                  �jÖ                  e=�jÔ                  �jØ                  g«       e/«       	 �dÊdddd�dŽœ�d°eH�d²e@dTejÊ                  dz  �d�e�j                   dz  dée�jˆ                  dz  dêe@dz  de!f�d³„«       «       �Zm �eYe=�jÜ                  e=�jÞ                  «        �eYe=�jà                  e=�jL                  «        �eYe=�jâ                  e=�jV                  «        �eYe=�jä                  e=�j´                  «        �eYe=�jæ                  e=jž                  «        �eYe=�jè                  e=�jê                  «        �eYe=�jì                  e=j¬                  «        �eYe=�jî                  e=�jð                  «        �eYe=�jò                  e=j¦                  «        �eYe=�jô                  e=�jö                  «        �eYe=�jø                  e=�jú                  «        �eYe=�jü                  e=�jþ                  «        �eYe=�j                   e=�j                  «        �eYe=�j                  e=�j                  «        �eYe=�j                  e=�j
                  «        �eYe=�j                  e=�j                  «        �eYe=�j                  e=jÆ                  «        �eYe=�j                  e=�j                  «        �eYe=�j                  e=�j                  «        �eYe=�j                  e=�j                  «        �eYe=�j                  e=�j                   «        �eYe=�j"                  e=�j$                  «        �eYe=�j&                  e=�j(                  «        �eYe=�j*                  e=�j,                  «        �eYe=�j.                  e=�j0                  «        �eYe=�j2                  e=j¸                  «       e=�j4                  jÞ                  �j!                  e6�j"                  «      �dËd2e!�d´eHde!f�dµ„«       �Zšy(Ì  é    N)ÚCallableÚIterable)Únullcontext)ÚEnum)ÚpartialÚreduce)ÚchainÚproduct)ÚAnyÚcast)Ú	sym_floatÚsym_intÚTensor©Úregister_decomposition©Ú	out_dtype)ÚIntLikeÚ
NumberTypeÚsuggest_memory_formatÚ
TensorLikeÚTensorSequenceType)Ú_maybe_convert_to_dtypeÚ_maybe_resize_outÚ_safe_copy_outÚout_wrapper)Ú_pytree)Útree_mapÚ__all__c                   ó   — e Zd ZdZdZdZy)Ú	Reductionr   é   é   N)Ú__name__Ú
__module__Ú__qualname__ÚNONEÚMEANÚSUM© ó    úg/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_decomp/decompositions.pyr!   r!   1   s   „ Ø€DØ€DØ
�Cr+   r!   FÚfÚtype_promotionÚcompute_dtype_onlyÚinclude_non_tensor_argsc                 óN   ‡ ‡‡‡— t        j                  ‰ «      ˆˆ ˆˆfd„«       }|S )Nc                  ó\  •‡‡	— ‰r t         t        j                  j                  fnt         f}t	        j
                  | i |¤ŽD �cg c]  }t        ||«      r|‘Œ }}t        j                  |d‰iŽ\  ŠŠ	ˆfd„}ˆ	fd„} ‰t        || «      i t        ||«      ¤Ž}‰
r|S t        ||«      S c c}w )NÚtype_promotion_kindc                 óJ   •— t        | t        «      r| j                  ‰«      S | S ©N©Ú
isinstancer   Úto)ÚxÚcomputation_dtypes    €r,   Úincrease_precz0type_casts.<locals>.inner.<locals>.increase_precO   s"   ø€ Ü˜!œVÔ$Ø—t‘tÐ-Ó.Ð.à�r+   c                 óJ   •— t        | t        «      r| j                  ‰«      S | S r5   r6   )r9   Úresult_dtypes    €r,   Údecrease_precz0type_casts.<locals>.inner.<locals>.decrease_precU   s!   ø€ Ü˜!œVÔ$Ø—t‘t˜LÓ)Ð)à�r+   )
r   ÚtorchÚtypesÚ_NumberÚpytreeÚarg_tree_leavesr7   ÚutilsÚelementwise_dtypesr   )ÚargsÚkwargsÚallowed_typesr9   Ú	flat_argsr;   r>   Úrr:   r=   r/   r-   r0   r.   s           @@€€€€r,   Úinnerztype_casts.<locals>.inner@   sÂ   ú€ ñ .EŒV”U—[‘[×(Ñ(Ñ)Ì6È)ð 	ô
 ×+Ñ+¨TÐ<°VÑ<ö
àÜ˜!˜]Ô+ò ð
ˆ	ð 
ô
 +0×*BÑ*BØð+
Ø,:ñ+
Ñ'Ð˜<ô
	ô	ñ Œx˜ tÓ,ÐP´¸ÈÓ0OÑPˆÙØˆHä˜M¨1Ó-Ð-ùò5
s   ÁB))Ú	functoolsÚwraps)r-   r.   r/   r0   rK   s   ```` r,   Ú
type_castsrN   :   s(   û€ ô ‡_�_�QÓö.ó ð.ð@ €Lr+   T)r.   r/   )r.   )r.   r0   r9   ÚdimÚreturnc                 ój   — t        || j                  «       z
  «      D ]  }| j                  d«      } Œ | S ©Néÿÿÿÿ)ÚrangerO   Ú	unsqueeze)r9   rO   Ú_s      r,   Ú_unsqueeze_to_dimrW   w   s2   € Ü�3˜Ÿ™›‘=Ó!ò ˆØ�K‰K˜‹O‰ðà€Hr+   Ú
grad_inputÚout_gradÚyc                 ó4   — | d||z  z
  j                  «       z  S ©Nr"   ©Úconj_physical©rY   rZ   s     r,   Útanh_backwardr`   }   s    € ð �q˜1˜q™5‘y×/Ñ/Ó1Ñ1Ð1r+   c                 ó4   — | |d|z
  z  j                  «       z  S r\   r]   r_   s     r,   Úsigmoid_backwardrb   „   s    € ð �q˜A ™E‘{×1Ñ1Ó3Ñ3Ð3r+   ÚbetaÚ	thresholdc                 ót   — ||z  j                  «       }t        j                  ||z  |kD  | | |z  |dz   z  «      S ©Nç      ð?)Úexpr?   Úwhere)rY   r9   rc   rd   Úzs        r,   Úsoftplus_backwardrk   ‹   s=   € ð 
ˆT‰�‰Ó€AÜ�;‰;˜˜D™ IÑ-¨x¸ÀA¹ÈÈSÉÑ9QÓRÐRr+   Úgrad_outputÚalphaÚscaleÚinput_scaleÚ	is_resultÚself_or_resultc                 óÜ   — ||z  }|}|}|r&t        j                  |dk  | |z  ||z   z  | |z  «      S t        j                  |dk  | |z  |z  t        j                  ||z  «      z  | |z  «      S ©Nr   )r?   ri   rh   )	rl   rm   rn   ro   rp   rq   ÚnegcoefÚposcoefÚ
negiptcoefs	            r,   Úelu_backwardrw   “   s�   € ð �e‰m€GØ€GØ€JÙÜ�{‰{Ø˜aÑØ˜*Ñ$¨¸Ñ(@ÑAØ˜'Ñ!ó
ð 	
ô �{‰{Ø˜aÑØ˜*Ñ$ wÑ.´·±¸>ÈJÑ;VÓ1WÑWØ˜'Ñ!ó
ð 	
r+   c                 ó.   — t        j                  | |«      S r5   )r?   Ú	full_like©ÚselfÚvalues     r,   Úfill_scalarr}   ¯   s   € ä�?‰?˜4 Ó'Ð'r+   r|   c                 ó„   ‡— t        j                  ‰j                  «       dk(  ˆfd„«       t        j	                  | ‰«      S )Nr   c                  ó,   •— d‰ j                  «       › d�S )Nz@fill only supports 0-dimension value tensor but got tensor with z dimensions©rO   ©r|   s   €r,   ú<lambda>zfill_tensor.<locals>.<lambda>¸   s   ø€ ÐRÐSX×S\ÑS\ÓS^ÐR_Ð_jÐk€ r+   )r?   Ú_checkrO   ÚatenÚcopyrz   s    `r,   Úfill_tensorr†   ´   s3   ø€ ä	‡L�LØ�	‰	‹�qÑÛkôô �9‰9�T˜5Ó!Ð!r+   r{   c                 óf   — t        j                  t        j                  | dz   d¬«      d¬«      dz  S ©Né   r   ©Úminé   ©Úmax©r?   Úclamp©r{   s    r,   Úhardsigmoidr’   ½   s)   € ô �;‰;”u—{‘{ 4¨!¡8°Ô3¸Ô;¸aÑ?Ð?r+   c                 óH   — t        j                  |dkD  |dk  z  | dz  d«      S )Ng      Àg      @gUUUUUUÅ?ç        ©r?   ri   ©rl   r{   s     r,   Úhardsigmoid_backwardr—   Ä   s0   € ô �;‰;Ø	�‰˜ ™Ñ$Ø�yÑ!Øóð r+   Úmin_valÚmax_valc                 óB   — t        j                  ||k  ||k\  z  d| «      S )Nr”   r•   )rl   r{   r˜   r™   s       r,   Úhardtanh_backwardr›   Ï   s$   € ô �;‰;˜ ™¨D°G©OÑ<¸cÀ;ÓOÐOr+   c                 ól   — | t        j                  t        j                  | dz   d¬«      d¬«      z  dz  S rˆ   r�   r‘   s    r,   Ú	hardswishr�   Ü   s.   € ð ”%—+‘+œeŸk™k¨$°©(¸Ô:ÀÔBÑBÀQÑFÐFr+   c           
      óx   — t        j                  |dk  dt        j                  |dk  | |dz  dz   z  | «      «      S )Néýÿÿÿr”   r‰   ç      à?r•   r–   s     r,   Úhardswish_backwardr¡   ã   sA   € ô �;‰;Ø�‰
ØÜ�‰�D˜1‘H˜k¨d°Q©h¸#Ñ-=Ñ>ÀÓLóð r+   c                 ó6   — t        j                  ||k  d| «      S rs   r•   )rl   r{   rd   s      r,   Úthreshold_backwardr£   î   s   € ô �;‰;�t˜yÑ(¨!¨[Ó9Ð9r+   Únegative_slopeÚself_is_resultc                 ó<   — t        j                  |dkD  | | |z  «      S rs   r•   )rl   r{   r¤   r¥   s       r,   Úleaky_relu_backwardr§   ô   s    € ô �;‰;�t˜a‘x ¨k¸NÑ.JÓKÐKr+   ÚgradÚapproximatec                 óŒ  — d}d}d}|dk(  ri||z  dz  }d}||z  }||z  }	||||	z  z   z  }
t        j                  |
«      }d|z  }d|z   }d|z  }d||z  z
  }|dd|z  |z  z   z  }||z  |z  }| ||z   z  S |}||z  dz  }ddt        j                  ||z  «      z   z  }|t        j                  ||z  d	z  «      z  }| |||z  z   z  S )
NgÍ;fž ö?gÍ;fž æ?gm›BP×ò?Útanhr    g÷Hmâä¦?r"   r‰   ç      à¿)r?   r«   Úerfrh   )r¨   r{   r©   ÚM_SQRT2Ú	M_SQRT1_2Ú
M_2_SQRTPIÚkBetaÚkKappaÚx_sqÚx_cuberK   Ú
tanh_innerÚleftÚrightÚleft_derivativeÚtanh_derivativeÚinner_derivativeÚright_derivativeÚkAlphaÚcdfÚpdfs                        r,   Úgelu_backwardr¿   ý   s'  € ð %€GØ&€IØ'€JØ�fÒØ˜*Ñ$ sÑ*ˆØˆØ�d‰{ˆØ˜‘ˆØ˜ ¨¡Ñ/Ñ0ˆÜ—Z‘Z Ó&ˆ
à�T‰zˆØ�J‘ˆà ™+ˆà˜j¨:Ñ5Ñ5ˆØ  A¨¨F©
°TÑ(9Ñ$9Ñ:ÐØ /Ñ1Ð4DÑDÐà�Ð)9Ñ9Ñ:Ð:àˆØ˜YÑ&¨Ñ,ˆØ�QœŸ™ 4¨&¡=Ó1Ñ1Ñ2ˆØ”e—i‘i  t¡¨dÑ 2Ó3Ñ3ˆØ�s˜T C™ZÑ'Ñ(Ð(r+   Úinputc                 ó¨   — t        j                  t        j                  |«      «      }t        j                  |«      }||z  d||z  z
  z  }| ||z   z  S r\   )r?   r«   ÚFÚsoftplusÚsigmoid)rl   rÀ   Úinput_tanh_softplusÚinput_sigmoidÚouts        r,   Úmish_backwardrÈ     sV   € ô  Ÿ*™*¤Q§Z¡Z°Ó%6Ó7ÐÜ—M‘M %Ó(€MØ
�-Ñ
 1Ð':Ð=PÑ'PÑ#PÑ
Q€CØÐ-°Ñ3Ñ4Ð4r+   c                 ó2   — | t        j                  | «      z  S r5   ©r?   rÄ   r‘   s    r,   ÚsilurË   '  s   € ð ”%—-‘- Ó%Ñ%Ð%r+   c                 óN   — t        j                  |«      }| |z  d|d|z
  z  z   z  S r\   rÊ   )rl   r{   rÄ   s      r,   Úsilu_backwardrÍ   .  s0   € ô �m‰m˜DÓ!€GØ˜Ñ  A¨°°G±Ñ(<Ñ$<Ñ=Ð=r+   Úweightc                 ó<   — t        j                  | dkD  | || z  «      S rs   r•   )r{   rÎ   s     r,   Ú_prelu_kernelrÐ   6  s   € ä�;‰;�t˜a‘x  v°¡}Ó5Ð5r+   c                 ó~   — t        j                  |dkD  | || z  «      }t        j                  |dkD  d|| z  «      }||fS )Nr   r”   r•   )rl   r{   rÎ   Ú
input_gradÚweight_grads        r,   Ú_prelu_kernel_backwardrÔ   ;  sE   € ô —‘˜T A™X {°F¸[Ñ4HÓI€JÜ—+‘+˜d Q™h¨¨T°KÑ-?Ó@€KØ˜Ð$Ð$r+   ÚnoiseÚlowerÚupperÚtrainingc                 óh   — |r| j                  |«      S ||z   dz  }t        j                  | |||«      S ©Nr#   )Úmulr„   r§   )rl   r{   rÕ   rÖ   r×   rØ   r¥   r¤   s           r,   Úrrelu_with_noise_backwardrÜ   F  s@   € ñ Ø�‰˜uÓ%Ð%à %™-¨1Ñ,ˆÜ×'Ñ'Ø˜˜~¨~ó
ð 	
r+   Úbufferc                 ó  — |dk  }t        j                  |dd«      }t        j                  |dd«      }|j                  «       dkD  r|n(t        j                  t        j                  |«       «      }| |||d|z   z  z  z
  z  S )Nr   r"   rS   )r?   ri   Únumelrh   Úabs)rl   r{   rÝ   Úin_negativeÚ	max_derivÚsignrj   s          r,   Úlog_sigmoid_backwardrä   [  sx   € ð ˜‘(€KÜ—‘˜K¨¨AÓ.€IÜ�;‰;�{ A rÓ*€Dð —,‘,“. 1Ò$‰¬%¯)©)´U·Y±Y¸t³_Ð4DÓ*E€AØ˜) d¨a°1°q±5©kÑ&:Ñ:Ñ;Ð;r+   Úotherc                 ó  — t        j                  | j                  «      st        j                  | j                  «      rt        j
                  n| j                  }| j                  dd|¬«      }| t	        j                  ||«      z  S )Nr*   ç       @©Údtype)rD   Úis_integer_dtyperé   Úis_boolean_dtyper?   Úfloat32Únew_fullÚpow)r{   rå   Ú	two_dtypeÚ
two_tensors       r,   Úldexprñ   h  sh   € ô
 ×!Ñ! $§*¡*Ô-´×1GÑ1GÈÏ
É
Ô1Sô 	�Šà�Z‰Zð ð
 —‘˜r 3¨i�Ó8€JØ”%—)‘)˜J¨Ó.Ñ.Ð.r+   ÚlossÚ	reductionc                 óÎ   — |t         j                  j                  k(  rt        j                  | «      S |t         j
                  j                  k(  rt        j                  | «      S | S r5   )r!   r(   r|   r?   Úmeanr)   Úsum)rò   ró   s     r,   Úapply_loss_reductionr÷   t  sH   € Ø”I—N‘N×(Ñ(Ò(Ü�z‰z˜$ÓÐØ	”i—m‘m×)Ñ)Ò	)Ü�y‰y˜‹Ðàˆr+   ré   c                 óÖ   — | t         j                  k(  rt         j                  S | t         j                  k(  rt         j                  S | t         j
                  k(  rt         j                  S y r5   )r?   Ú	complex32Úfloat16Ú	complex64rì   Ú
complex128Úfloat64rè   s    r,   Úto_real_dtyperþ   }  sK   € Ø”—‘ÒÜ�}‰}ÐØ	”%—/‘/Ò	!Ü�}‰}ÐØ	”%×"Ñ"Ò	"Ü�}‰}Ðð 
#r+   Útargetc                 ó*   — | |z
  dz  }t        ||«      S rÚ   )r÷   )r{   rÿ   ró   rò   s       r,   Úmse_lossr  Œ  s   € ð �6‰M˜aÑ€DÜ  iÓ0Ð0r+   c                 ó|   — |t         j                  j                  k(  rd|j                  «       z  nd}|||z
  z  | z  S )Nrç   )r!   r(   r|   rß   )rl   rÀ   rÿ   ró   Únorms        r,   Úmse_loss_backwardr  –  s;   € ð #,¬y¯~©~×/CÑ/CÒ"Cˆ3�—‘“ÒÈ€DØ�5˜6‘>Ñ" [Ñ0Ð0r+   c                 óî   — t        j                  | ||¬«      }| j                  t        d«      «      }t        j                  ||d¬«      }t        j
                  |«      }t        j                  |||«      S )N)rO   ré   ú-infT©rO   Úkeepdim)r?   ÚsoftmaxÚeqÚfloatÚallÚ
zeros_likeri   )r{   rO   ré   rÇ   ÚmaskedÚmasked_rowsÚzeross          r,   Úsafe_softmaxr     s[   € ä
�-‰-˜ #¨UÔ
3€CØ�W‰W”U˜6“]Ó#€FÜ—)‘)˜F¨°TÔ:€KÜ×Ñ˜SÓ!€EÜ�;‰;�{ E¨3Ó/Ð/r+   rg   c                 ó’   — | |z
  j                  «       }t        j                  ||k  d|dz  z  |z  |d|z  z
  «      }t        ||«      S )Nr    r#   )rà   r?   ri   r÷   )r{   rÿ   ró   rc   rò   s        r,   Úsmooth_l1_lossr  ©  sO   € ð �6‰M×ÑÓ €Dä�;‰;�t˜d‘{ C¨$°©'¡M°DÑ$8¸$ÀÀtÁÑ:KÓL€DÜ  iÓ0Ð0r+   c                 ó  — |t         j                  j                  k(  rd|j                  «       z  nd}||z
  }t	        j
                  |«      }|| z  }t	        j                  ||k  ||z  |z  |t	        j                  |«      z  «      S rf   )r!   r(   r|   rß   r?   rà   ri   rã   )	rl   r{   rÿ   ró   rc   r  r9   Úabs_xÚ	norm_grads	            r,   Úsmooth_l1_loss_backwardr  ¸  s{   € ð
 "+¬i¯n©n×.BÑ.BÒ!Bˆ3�—‘“ÒÈ€DØˆv‰€AÜ�I‰I�a‹L€EØ�{Ñ"€IÜ�;‰;Ø�‰Ø�A‰˜ÑØ”E—J‘J˜q“MÑ!óð r+   c                 óh   — t        | ||||«      }t        ||j                  «       t        ||d¬«      S ©NT©Ú	copy_fromÚcopy_toÚexact_dtype)r  r   Úshaper   )rl   r{   rÿ   ró   rc   rX   Úresults          r,   Úsmooth_l1_loss_backward_outr   È  s3   € ô % [°$¸À	È4ÓP€FÜ�j &§,¡,Ô/Ü F°JÈDÔQÐQr+   Údeltac           
      óü   — |t         j                  j                  k(  rd|j                  «       z  nd}||z
  }t	        j
                  || k  | | z  |z  t	        j
                  ||kD  || z  |z  ||z  | z  «      «      S rf   )r!   r(   r|   rß   r?   ri   )rl   r{   rÿ   ró   r!  r  r9   s          r,   Úhuber_loss_backwardr#  ×  s€   € ð
 "+¬i¯n©n×.BÑ.BÒ!Bˆ3�—‘“ÒÈ€DØˆv‰€AÜ�;‰;Ø	ˆUˆF‰
Ø	ˆ�Ñ˜eÑ#Ü�‰�A˜‘I˜t kÑ1°EÑ9¸4À!¹8ÀkÑ;QÓRóð r+   c                 óh   — t        | ||||«      }t        ||j                  «       t        ||d¬«      S r  )r#  r   r  r   )rl   r{   rÿ   ró   r!  rX   r  s          r,   Úhuber_loss_backward_outr%  æ  s3   € ô ! ¨d°F¸IÀuÓM€FÜ�j &§,¡,Ô/Ü F°JÈDÔQÐQr+   Úignore_indexÚtotal_weightc                 óØ  — |j                  «       dk  rdnd}|t        j                  j                  k(  r| |z  } |j                  «       dk(  r|j                  «       dkD  r|d   }|j	                  |«      }t        j                  ||k7  |d«      }t        j                  |«      }	t        j                  |	||d«      }	|	j                  «       | j                  «       cxkD  rdkD  rn n| j	                  |«      } |�Nt        |j                  «       «      D �
cg c]  }
d‘Œ }}
|j                  d   ||<   |j                  |«      }| |z  } t        j                  ||k7  | d«      } |	| z  S c c}
w )Nr#   r   r"   g      ð¿)rO   r!   r(   r|   rU   r?   ri   r  ÚscatterrT   r  Úreshape)rl   r{   rÿ   rÎ   ró   r&  r'  Úchannel_dimÚsafe_targetrX   rV   Ú	new_shapes               r,   Ú_nll_loss_backwardr.  õ  sC  € ð —x‘x“z A’~‘!¨1€KØ”I—N‘N×(Ñ(Ò(Ø! LÑ0ˆð
 ‡x�xƒz�Q‚˜6Ÿ:™:›<¨!Ò+Ø˜‘ˆà×Ñ˜kÓ*€FÜ—+‘+˜f¨Ñ4°f¸aÓ@€KÜ×!Ñ! $Ó'€JÜ—‘˜z¨;¸ÀTÓJ€Jà‡~�~Ó˜+Ÿ/™/Ó+Ô/¨aÕ/Ø!×+Ñ+¨KÓ8ˆàÐÜ % d§h¡h£jÓ 1Ö2˜1’QÐ2ˆ	Ð2Ø!'§¡¨a¡ˆ	�+ÑØ—‘ 	Ó*ˆØ! FÑ*ˆä—+‘+˜f¨Ñ4°kÀ1ÓE€Kà˜Ñ#Ð#ùò 3s   Ä	E'c                 ó²  — |j                  «       dk  rt        d«      ‚t        j                  |j                  «       |«      }|j	                  |«      }|dz  dk7  rt        d|› d|› �«      ‚|dz  }|j                  |d|«      }|j                  |||«      }t        j                  |«      }d|z
  |z  |z  | z  }	|| z  }t        j                  ||	g|¬«      S )Nr   z*glu does not support 0-dimensional tensorsr#   z.Halving dimension must be even, but dimension z	 is size rg   r€   )	rO   ÚAssertionErrorrD   Úcanonicalize_dimÚsizeÚnarrowr?   rÄ   Úcat)
rl   r{   rO   Úwrap_dimÚnInÚ	inputSizeÚ	firstHalfÚ
secondHalfÚgradInputFirstHalfÚgradInputSecondHalfs
             r,   Úglu_backwardr<    sí   € ð ‡x�xƒz�Q‚ÜÐIÓJÐJÜ×%Ñ% d§h¡h£j°#Ó6€HØ
�)‰)�HÓ
€CØ
ˆQ�w�!‚|ÜØ<¸X¸JÀiÐPSÈuÐUó
ð 	
ð �q‘€IØ—‘˜H a¨Ó3€IØ—‘˜X y°)Ó<€JÜŸ™ zÓ2Ðà	Ð!Ñ	!Ð%7Ñ7¸)ÑCÀkÑQð ð ,¨kÑ9ÐÜ�9‰9Ð(Ð*=Ð>ÀHÔMÐMr+   c           	      ó^  — d|j                  «       cxk  rdk  sn t        d|j                  «       › d�«      ‚|j                  «       dkD  rt        d|j                  «       › d�«      ‚|j                  «       dk(  xr |j                  «       dk(  }|sE|j                  d   |j                  d   k(  s&t        d|j                  › d|j                  › d	�«      ‚|j                  «       dk7  r*t        d
|j                  › d|j                  «       › d�«      ‚|�+|j                  «       |j                  d   k7  rt        d«      ‚|t        j
                  j                  k(  r�|j                  «       dk(  rn| j                  «       dk(  r| j                  d   |j                  d   k(  szt        d|j                  d   › d| j                  «       › d| j                  d   › �«      ‚| j                  «       dk  r| j                  «       dk(  st        d| j                  › �«      ‚t        | ||||||«      S )Nr   r#   ú%input tensor should be 1D or 2D, got ÚDr"   úA0D or 1D target tensor expected, multi-target not supported, got úsize mismatch (got input: ú
, target: ú)ú:expected total_weight to be a single element tensor, got: z (z
 elements)rS   z<weight tensor should be defined either for all or no classesz7Expected a tensor of dimension 1 and tensor.size[0] == z but got: dimension z and tensor.size[0] == z7Expected a single element grad_output tensor, but got: )rO   r0  r  rß   r!   r'   r|   r.  )rl   r{   rÿ   rÎ   ró   r&  r'  Úno_batch_dims           r,   Únll_loss_backwardrF  2  s+  € ð �—‘“Ô ˜qÔ ÜÐDÀTÇXÁXÃZÀLÐPQÐRÓSÐSØ‡z�zƒ|�aÒÜØOÐPV×PZÑPZÓP\È~Ð]^Ð_ó
ð 	
ð —8‘8“: ‘?Ò8 v§z¡z£|°qÑ'8€LÙ˜TŸZ™Z¨™]¨f¯l©l¸1©oÒ=ÜØ(¨¯©¨°J¸v¿|¹|¸nÈAÐNó
ð 	
ð ×ÑÓ˜qÒ ÜØHØ×!Ñ!Ð" " \×%7Ñ%7Ó%9Ð$:¸*ðFó
ð 	
ð
 Ð˜fŸl™l›n°·
±
¸2±Ò>ÜØJó
ð 	
ð ”I—N‘N×(Ñ(Ò(¨T¯X©X«Z¸1ª_Ø—‘Ó! QÒ&¨;×+<Ñ+<¸QÑ+?À4Ç:Á:ÈaÁ=Ò+PÜ ØIÈ$Ï*É*ÐUVÉ-Èð Y"Ø"-§/¡/Ó"3Ð!4Ð4KÈK×L]ÑL]Ð^_ÑL`ÐKaðcóð ð
 —‘Ó! QÒ&¨;×+<Ñ+<Ó+>À!Ò+CÜ ØIÈ+×J[ÑJ[ÐI\Ð]óð ô Ø�T˜6 6¨9°lÀLóð r+   c           	      ó^  — |j                  «       dk7  rt        d|j                  «       › �«      ‚|j                  «       dk7  rt        d|j                  «       › �«      ‚|j                  d   |j                  d   k(  r>|j                  d   |j                  d   k(  r|j                  d   |j                  d   k(  s%t        d|j                  › d	|j                  › �«      ‚|j                  «       dk7  r*t        d
|j                  › d|j                  «       › d�«      ‚t	        | ||||||«      S )Né   zSonly batches of spatial inputs supported (4D tensors), but got input of dimension: r‰   zUonly batches of spatial targets supported (3D tensors) but got targets of dimension: r   r#   r"   rA  rB  rD  z ( z, elements))rO   r0  r  rß   r.  )rl   r{   rÿ   rÎ   ró   r&  r'  s          r,   Únll_loss2d_backwardrI  e  s;  € ð ‡x�xƒz�Q‚ÜØaÐbf×bjÑbjÓblÐamÐnó
ð 	
ð ‡z�zƒ|�qÒÜØcÐdj×dnÑdnÓdpÐcqÐró
ð 	
ð
 	�
‰
�1‰˜Ÿ™ a™Ò(Ø�J‰J�q‰M˜VŸ\™\¨!™_Ò,Ø�J‰J�q‰M˜VŸ\™\¨!™_Ò,äØ(¨¯©¨°J¸v¿|¹|¸nÐMó
ð 	
ð ×ÑÓ˜qÒ ÜðØ ×&Ñ&Ð' s¨<×+=Ñ+=Ó+?Ð*@ÀðMó
ð 	
ô
 Ø�T˜6 6¨9°lÀLóð r+   c           	      ó"  — |dz
  t        j                  t        j                  |  «      | j                  dd«      «      z  |t        j                  t        j                  | «      | j                  dd«      «      z  z
  }|�||z  }t        ||«      S )Nr"   r*   iœÿÿÿ)r?   ÚmaximumÚlog1prí   Úlogr÷   )r{   rÿ   rÎ   ró   rò   s        r,   Úbinary_cross_entropyrN  Ž  s‚   € ð �Q‰Jœ%Ÿ-™-Ü�‰�T�EÓ˜DŸM™M¨"¨dÓ3óñ à”—‘œuŸy™y¨›°·±¸bÀ$Ó0GÓHÑHñI€Dð ÐØ�f‰}ˆÜ  iÓ0Ð0r+   c                 óÄ   — d}| ||z
  z  t        j                  |d|z
  z  |¬«      z  }|�||z  }|t        j                  j                  k(  r||j                  «       z  }|S )Ngê-�™—q=r"   rŠ   )r?   r�   r!   r(   r|   rß   )rl   r{   rÿ   rÎ   ró   ÚEPSILONr  s          r,   Úbinary_cross_entropy_backwardrQ  ¤  sg   € ð €GØ˜D 6™MÑ*¬U¯[©[¸ÀÀTÁÑ9JÐPWÔ-XÑX€FØÐØ˜&‘ˆØ”I—N‘N×(Ñ(Ò(Ø˜$Ÿ*™*›,Ñ&ˆØ€Mr+   c                 ór   — t        j                  t        j                  |  |z  «      «      }t        ||«      S r5   )r?   rL  rh   r÷   )rÀ   rÿ   ró   rò   s       r,   Úsoft_margin_lossrS  ·  s.   € ô �;‰;”u—y‘y % ¨&¡Ó1Ó2€DÜ  iÓ0Ð0r+   c                 ó¨   — || z  t        j                  ||z  «      dz
  z  }|t        j                  j                  k(  r||j                  «       z  }|S r\   )r?   rÄ   r!   r(   r|   rß   )rl   r{   rÿ   ró   rX   s        r,   Úsoft_margin_loss_backwardrU  Ã  sM   € ð ˜+Ñ%¬¯©°vÀ±}Ó)EÈÑ)IÑJ€JØ”I—N‘N×(Ñ(Ò(Ø $§*¡*£,Ñ.ˆ
ØÐr+   Úpc                 ó6   — t         j                  | |z
  |¬«      S )N)rV  )r„   r  )rÀ   rå   rV  s      r,   ÚdistrX  Ò  s   € ô �9‰9�U˜U‘] aˆ9Ó(Ð(r+   Úx1Úx2c                 ó  — | j                  d«      j                  dd«      }t        j                  |t        j                  ¬«      }|j                  d«      j                  dd«      }t        j                  |t        j                  ¬«      }t        j
                  | j                  d«      ||gd«      }t        j
                  |||gd«      }|j                  |j                  «      }|j                  d«      j                  «       S )Nr#   rS   T©Úmemory_formatéþÿÿÿr   )rî   rö   r?   Ú	ones_likeÚcontiguous_formatr4  rÛ   ÚmatmulÚmTÚ	clamp_minÚsqrt)	rY  rZ  Úx1_normÚx1_padÚx2_normÚx2_padÚx1_Úx2_r  s	            r,   Ú_euclidean_distrk  Ø  sÂ   € ð �f‰f�Q‹i�m‰m˜B Ó%€GÜ�_‰_˜W´E×4KÑ4KÔL€FØ�f‰f�Q‹i�m‰m˜B Ó%€GÜ�_‰_˜W´E×4KÑ4KÔL€FÜ
�)‰)�R—V‘V˜B“Z ¨&Ð1°2Ó
6€CÜ
�)‰)�R˜ Ð)¨2Ó
.€CØ�Z‰Z˜Ÿ™Ó€FØ×Ñ˜AÓ×#Ñ#Ó%Ð%r+   Úinput_sizesÚstartÚendÚstepc                 óX   — | j                  |«      }t        j                  || ||||«      S r5   )Ú	new_zerosr?   Úslice_scatter)rl   rl  rO   rm  rn  ro  rX   s          r,   Úslice_backwardrs  å  s/   € ð ×&Ñ& {Ó3€JÜ×Ñ˜z¨;¸¸UÀCÈÓNÐNr+   r"   c                 óÚ  — ddl m} | j                  «       }|dk(  rt        d«      ‚t	        j
                  | j                  «       |«      }t        | j                  «       «      }t        | j                  «       «      }|dk  rt        d«      ‚|�|nd}	|�|nt        j                  }
|	dk  r|	||   z  }	|
dk  r|
||   z  }
|	dk  rd}	n|	||   kD  r||   }	 ||
t        j                  k(  «      r||   }
n|
|	k  r|	}
n|
||   kD  r||   }
| j                  «       |	||   z  z   }|
|	z
  }||z   dz
  |z  ||<   ||xx   |z  cc<   | j                  rt        d«      ‚| j                  |||«      S )Nr   ©Ústatically_known_truez,slice() cannot be applied to a 0-dim tensor.zslice step must be positiver"   z<Slice decomposition for quantized tensors aren't implemented)Ú%torch.fx.experimental.symbolic_shapesrv  rO   ÚRuntimeErrorrD   r1  Úlistr2  ÚstrideÚsysÚmaxsizeÚstorage_offsetÚis_quantizedÚNotImplementedErrorÚ
as_strided)r{   rO   rm  rn  ro  rv  ÚndimÚsizesÚstridesÚ	start_valÚend_valr}  Úlens                r,   Úslice_forwardr‡  ó  s‹  € õ Là�8‰8‹:€DØˆq‚yÜÐIÓJÐJÜ
×
 Ñ
  §¡£¨SÓ
1€CÜ�—‘“Ó€EÜ�4—;‘;“=Ó!€Gàˆq‚yÜÐ8Ó9Ð9àÐ*‘°€IØ�_‰c¬#¯+©+€Gà�1‚}Ø�U˜3‘ZÑˆ	à�‚{Ø�5˜‘:Ñˆà�1‚}Ø‰	Ø	�U˜3‘ZÒ	Ø˜#‘Jˆ	á˜W¬¯©Ñ3Ô4Ø˜‘*‰Ø	�9Ò	Ø‰Ø	�5˜‘:Ò	Ø˜‘*ˆà×(Ñ(Ó*¨Y¸À¹Ñ-EÑE€NØ
�IÑ
€CØ˜‘*˜q‘. TÑ)€Eˆ#�JØˆCƒL�DÑƒLà×ÒÜ!ØJó
ð 	
ð �‰˜u g¨~Ó>Ð>r+   c                 ón   ‡— | j                   |   Šdt        fˆfd„} ||d‰d«      } |||‰‰«      }||fS )zn
    Normalize start and end such that both are in the range
    [0, x.get_size()[dim]] and start <= end.
    rP   c                 óL   •— | €|S | dk  r| ‰z   } t        t        | |«      |«      S rs   ©r‹   rŽ   )ÚvalrÖ   r×   ÚdefaultÚdim_sizes       €r,   Ú
clamp_wrapz(_normalize_start_end.<locals>.clamp_wrap3  s0   ø€ Øˆ;ØˆNØ�Š7Ø˜‘.ˆCÜ”3�s˜E“? EÓ*Ð*r+   r   )r  Úint)r9   rO   rm  rn  rŽ  r�  s        @r,   Ú_normalize_start_endr�  *  sJ   ø€ ð �w‰w�s‰|€Hð+´#õ +ñ �u˜a ¨1Ó-€EÙ
�S˜% ¨8Ó
4€CØ�#ˆ:Ðr+   Úsrcc           	      ó|  — t        j                  | j                  |«      }| j                  |   }t	        | |||«      \  }}t        | j                  «      }||z
  |dz
  z   |z  ||<   |j                  |«      }|dk(  r||k(  r|dk(  r|j                  «       S d g| j                  «       z  }t        j                  || j                  ¬«      }	|	|z
  |z  ||<   t        j                  || j                  t        j                  ¬«      }
|dk7  rt        j                  |
|	|k\  «      }
||k7  rt        j                  |
|	|k  «      }
|dk7  rt        j                  |
|	|z
  |z  dk(  «      }
dg| j                  «       z  }d||<   |
j                  |«      }
t         j#                  |
t         j%                  ||
|d«      | «      S )Nr"   r   ©Údevice©r”  ré   rS   )rD   r1  r�  r  r�  ry  ÚexpandÚclonerO   r?   Úaranger”  ÚonesÚboolÚlogical_andÚviewr„   ri   Ú_unsafe_masked_index)rÀ   r‘  rO   rm  rn  ro  r�  Úsrc_sizeÚindicesÚidxÚmaskÚ
mask_shapes               r,   rr  rr  A  s’  € ô ×
 Ñ
  §¡¨SÓ
1€CØ�{‰{˜3Ñ€HÜ% e¨S°%¸Ó=�J€Eˆ3ä�E—K‘KÓ €HØ˜5‘[ D¨1¡HÑ-°$Ñ6€HˆS�MØ
�*‰*�XÓ
€Cà�‚z�c˜X’o¨$°!ª)Ø�y‰y‹{Ðà$( 6¨E¯I©I«KÑ#7€GÜ
�,‰,�x¨¯©Ô
5€CØ˜%‘K DÑ(€GˆC�Lä�:‰:�h u§|¡|¼5¿:¹:ÔF€DØ�‚zÜ× Ñ   s¨e¡|Ó4ˆà
ˆh‚Ü× Ñ   s¨S¡yÓ1ˆàˆq‚yÜ× Ñ  ¨¨e©°tÑ';¸qÑ'@ÓAˆà��u—y‘y“{Ñ"€JØ€Jˆs�OØ�9‰9�ZÓ €DÜ�:‰:�dœD×5Ñ5°c¸4ÀÈ!ÓLÈeÓTÐTr+   Úindexc                 óT   — | j                  |«      }t        j                  || ||«      S r5   )rq  r?   Úselect_scatter)rl   rl  rO   r£  rX   s        r,   Úselect_backwardr¦  j  s+   € ð ×&Ñ& {Ó3€JÜ×Ñ 
¨K¸¸eÓDÐDr+   ÚoffsetÚdim1Údim2c                 óV   — | j                  |«      }t        j                  || |||«      S r5   )rq  r?   Údiagonal_scatter)rl   rl  r§  r¨  r©  rX   s         r,   Údiagonal_backwardr¬  q  s-   € ð
 ×&Ñ& {Ó3€JÜ×!Ñ! *¨k¸6À4ÈÓNÐNr+   Úinput_dtypec                 óF   — | j                   |k7  r|j                  |«      }|S r5   )ré   r8   )rl   rX   r­  s      r,   Ú_cast_grad_to_input_dtyper¯  z  s&   € ð ×Ñ˜KÒ'Ø—]‘] ;Ó/ˆ
ØÐr+   Úoutputc                 ó~   — | |z  }||t        j                  ||d¬«      z  z
  }t        | ||«      j                  «       S ©NTr  )r?   rö   r¯  Ú
contiguous)rl   r°  rO   r­  Únew_grad_outputrX   s         r,   Ú_softmax_backward_datarµ  ‚  sK   € ð " FÑ*€OØ  6¬E¯I©IØ˜S¨$ô-ñ $ñ €Jô % [°*¸kÓJ×UÑUÓWÐWr+   c                 ó~   — | t        j                  |«      t        j                  | |d¬«      z  z
  }t        | ||«      S r²  )r?   rh   rö   r¯  )rl   r°  rO   r­  rX   s        r,   Ú_log_softmax_backward_datar·  ”  sA   € ð œuŸy™y¨Ó0´5·9±9Ø˜ dô4ñ  ñ €Jô % [°*¸kÓJÐJr+   c                 óì   — | |dz  z   ||dz
  z  z
  }t        t        j                  t        j                  |¬«      } |d||«      j	                  d«      } |d||z  |«      j	                  d«      }	||	z   S )z/Utility function to implement im2col and col2imr#   r"   ©ré   r”  r   rS   )r   r?   r˜  Úint64rU   )
Úinput_dÚkernel_dÚ
dilation_dÚ	padding_dÚstride_dr”  Úblocks_dÚ	arange_kwÚblocks_d_indicesÚkernel_grids
             r,   Ú _im2col_col2im_indices_along_dimrÄ     s   € ð ˜ Q™Ñ&¨°xÀ!±|Ñ)DÑD€HäœŸ™¬E¯K©KÀÔG€Iñ !  H¨hÓ7×AÑAÀ!ÓDÐñ ˜A˜x¨*Ñ4°jÓA×KÑKÈBÓO€Kð ˜kÑ)Ð)r+   Úkernel_sizeÚdilationÚpaddingrz  c           
      óî  ‡‡‡‡‡‡— t        j                  t        ‰«      dk(  d„ «       t        j                  t        ‰«      dk(  d„ «       t        j                  t        ‰«      dk(  d„ «       t        j                  t        ‰«      dk(  d„ «       dd„} |‰d«        |‰d«        |‰d	d
¬«        |‰d«       | j                  Št        ‰«      }t        j                  |dv xr t	        d„ ‰dd  D «       «      ˆfd„«       t        d„ t        ‰dd  ‰‰‰‰«      D «       «      Št        j                  t	        d„ ‰D «       «      ˆˆˆˆˆˆfd„«       |dk(  }|s| j                  d«      } | j                  \  }}	}
}‰\  }}‰\  }}‰\  }}‰\  }}t        |
||||| j                  «      }t        |||||| j                  «      }t        j                  | ||||f«      }|j                  d«      j                  d«      }|d d …d d …||f   }|j                  dddddd«      }|j                  d«      }|j                  d«      }|j                  ||	|z  |z  ||z  «      }|s|j                  d«      }|S )Nr#   c                   ó   — y)Nz"im2col(): only 2D kernel supportedr*   r*   r+   r,   r‚   zim2col.<locals>.<lambda>¼  ó   � r+   c                   ó   — y)Nz$im2col(): only 2D dilation supportedr*   r*   r+   r,   r‚   zim2col.<locals>.<lambda>½  rÊ  r+   c                   ó   — y)Nz#im2col(): only 2D padding supportedr*   r*   r+   r,   r‚   zim2col.<locals>.<lambda>¾  rÊ  r+   c                   ó   — y)Nz"im2col(): only 2D stride supportedr*   r*   r+   r,   r‚   zim2col.<locals>.<lambda>¿  rÊ  r+   c                 óˆ   ‡ ‡— |rt        d„ ‰ D «       «      nt        d„ ‰ D «       «      }t        j                  |ˆ ˆfd„«       y )Nc              3   ó&   K  — | ]	  }|d kD  –— Œ y­w©r   Nr*   ©Ú.0rV  s     r,   ú	<genexpr>z1im2col.<locals>.check_positive.<locals>.<genexpr>Â  ó   è ø€ Ò(˜Q�1�q•5Ñ(ùó   ‚c              3   ó&   K  — | ]	  }|d k\  –— Œ y­wrÐ  r*   rÑ  s     r,   rÓ  z1im2col.<locals>.check_positive.<locals>.<genexpr>Â  ó   è ø€ Ò;RÀq¸AÀ½FÑ;RùrÕ  c                  ó   •— ‰› d‰ › �S ©Nz& should be greater than zero, but got r*   ©ÚparamÚ
param_names   €€r,   r‚   z0im2col.<locals>.check_positive.<locals>.<lambda>Ä  ó   ø€ ˜Z˜LÐ(NÈuÈgÐV€ r+   ©r  r?   rƒ   ©rÛ  rÜ  ÚstrictÚconds   ``  r,   Úcheck_positivezim2col.<locals>.check_positiveÁ  ó4   ù€ Ù,2ŒsÑ( %Ô(Ô(¼Ñ;RÈEÔ;RÓ8RˆÜ�‰ØÔVõ	
r+   rÅ  rÆ  rÇ  F©rà  rz  ©r‰   rH  c              3   ó&   K  — | ]	  }|d k7  –— Œ y­wrÐ  r*   ©rÒ  Úds     r,   rÓ  zim2col.<locals>.<genexpr>Ï  ó   è ø€ Ò:¨!˜q A�vÑ:ùrÕ  rŸ   c                  ó    •— dt        ‰ «      › �S )NzmExpected 3D or 4D (batch mode) tensor for input with possible 0 batch size and non-zero dimensions, but got: ©Útuple©r  s   €r,   r‚   zim2col.<locals>.<lambda>Ð  ó   ø€ ð -Ü-2°5«\¨Nð<€ r+   c              3   ó\   K  — | ]$  \  }}}}}d |d|z  z   ||d z
  z  z
  d z
  |z  z   –— Œ& y­w)r"   r#   Nr*   )rÒ  rÇ   ÚpadÚdilÚkerÚsts         r,   rÓ  zim2col.<locals>.<genexpr>Ó  sF   è ø€ ò á"ˆC��c˜3 ð 	
ˆS�1�s‘7‰]˜S C¨!¡G™_Ñ,¨qÑ0°RÑ7Õ7ñùs   ‚*,r^  c              3   ó&   K  — | ]	  }|d kD  –— Œ y­wrÐ  r*   )rÒ  Úcs     r,   rÓ  zim2col.<locals>.<genexpr>Ú  s   è ø€ Ò'�aˆA��EÑ'ùrÕ  c                  óF   •— dt        ‰dd  «      › d‰› d‰ › d‰› d‰› d‰› d�S )	Nz!Given an input with spatial size r^  ú, kernel_size=ú, dilation=ú
, padding=ú	, stride=z9, the calculated shape of the array of sliding blocks is z*, but its components must be at least one.rë  )rÆ  rÅ  Úoutput_sizerÇ  r  rz  s   €€€€€€r,   r‚   zim2col.<locals>.<lambda>Û  sL   ø€ Ð3´E¸%ÀÀ¸*Ó4EÐ3Fð GØ"�m ;¨x¨jð 9Ø�)˜9 V Hð -àˆ]ÐDð	F€ r+   rH  r   rS   r"   r‰   é   ©T)r?   rƒ   r†  r  r  rì  ÚziprU   rÄ  r”  rÂ   rð  Úpermuter2  r*  Úsqueeze)rÀ   rÅ  rÆ  rÇ  rz  râ  r�  Úbatched_inputÚ	batch_dimr+  Úinput_hÚinput_wÚstride_hÚstride_wÚ	padding_hÚ	padding_wÚ
dilation_hÚ
dilation_wÚkernel_hÚkernel_wÚblocks_row_indicesÚblocks_col_indicesÚpadded_inputr°  Únum_blocks_rowÚnum_blocks_colrû  r  s    ````                     @@r,   Úim2colr  ³  s~  ý€ ô 
‡L�L”�[Ó! QÑ&Ñ(TÔUÜ	‡L�L”�X“ !Ñ#Ñ%SÔTÜ	‡L�L”�W“ Ñ"Ñ$QÔRÜ	‡L�L”�V“ Ñ!Ñ#OÔPó
ñ �; Ô.Ù�8˜ZÔ(Ù�8˜Y¨uÕ5Ù�6˜8Ô$à�K‰K€EÜˆu‹:€DÜ	‡L�LØ�ˆÒ:œ3Ñ:¨u°R°S¨zÔ:Ó:ó	<ôô
 ñ ä&)Ø�"�#ˆJ˜ ¨;¸ó'
ôó €Kô 
‡L�LÜÑ'˜;Ô'Ó'÷	Fð 	Fôð ˜A‘I€MÙØ—‘ Ó"ˆà/4¯{©{Ñ,€Iˆ{˜G WàÑ€HˆhØ"Ñ€IˆyØ%Ñ€J�
Ø$Ñ€Hˆhä9Ø�˜: y°(¸E¿L¹LóÐô :Ø�˜: y°(¸E¿L¹LóÐô —5‘5˜ ¨I°yÀ)Ð LÓM€Là+×5Ñ5°bÓ9×CÑCÀBÓGÐØš!šQÐ 2Ð4FÐFÑG€FØ�^‰^˜A˜q ! Q¨¨1Ó-€FØ'×,Ñ,¨QÓ/€NØ'×,Ñ,¨QÓ/€NØ�^‰^Ø�; Ñ)¨HÑ4°nÀ~Ñ6Uó€Fñ Ø—‘ Ó"ˆØ€Mr+   rû  c                 ó®  ‡‡‡‡‡‡!‡"— t        j                  t        ‰«      dk(  d„ «       t        j                  t        ‰«      dk(  d„ «       t        j                  t        ‰«      dk(  d„ «       t        j                  t        ‰«      dk(  d„ «       t        j                  t        ‰«      dk(  d„ «       dd„} |‰d	«        |‰d
«        |‰dd¬«        |‰d«        |‰d«       | j                  Š"t        ‰"«      }t        j                  |dv xr t	        d„ ‰"dd  D «       «      ˆ"fd„«       ‰d   ‰d   z  }t        j                  ‰"d   |z  dk(  ˆˆ"fd„«       t        ‰‰‰‰‰«      D �	�
���cg c]"  \  }	}
}}}d|	d|
z  z   ||dz
  z  z
  dz
  |z  z   ‘Œ$ }}}}
}	}|d   |d   z  Š!t        j                  ‰"d   ‰!k(  ˆ!ˆˆˆˆˆ"ˆfd„«       t        j                  ‰!dkD  ˆ!ˆˆˆˆˆ"ˆfd„«       |dk(  }|s| j                  d«      } | j                  Š"‰\  }}‰\  }}‰\  }}‰\  }}‰\  }}| j                  ‰"d   ‰"d   |z  g‰z   |z   «      } | j                  dddddd«      } t        |||||| j                  «      }t        |d«      }t        |||||| j                  «      }t        ‰‰«      D ��cg c]  \  }}|d|z  z   ‘Œ }}}| j                  ‰"d   ‰"d   t        ‰«      z  g|z   «      }d d ||f} t        j                  || | d¬«      }t!        j"                  || | | | f«      }|s|j%                  d«      }|S c c}}}}
}	w c c}}w )Nr#   c                   ó   — y)Nzonly 2D output_size supportedr*   r*   r+   r,   r‚   zcol2im.<locals>.<lambda>  rÊ  r+   c                   ó   — y)Nzonly 2D kernel supportedr*   r*   r+   r,   r‚   zcol2im.<locals>.<lambda>  rÊ  r+   c                   ó   — y)Nzonly 2D dilation supportedr*   r*   r+   r,   r‚   zcol2im.<locals>.<lambda>  rÊ  r+   c                   ó   — y)Nzonly 2D padding supportedr*   r*   r+   r,   r‚   zcol2im.<locals>.<lambda>  rÊ  r+   c                   ó   — y)Nzonly 2D stride supportedr*   r*   r+   r,   r‚   zcol2im.<locals>.<lambda>  rÊ  r+   Tc                 óˆ   ‡ ‡— |rt        d„ ‰ D «       «      nt        d„ ‰ D «       «      }t        j                  |ˆ ˆfd„«       y )Nc              3   ó&   K  — | ]	  }|d kD  –— Œ y­wrÐ  r*   rÑ  s     r,   rÓ  z1col2im.<locals>.check_positive.<locals>.<genexpr>  rÔ  rÕ  c              3   ó&   K  — | ]	  }|d k\  –— Œ y­wrÐ  r*   rÑ  s     r,   rÓ  z1col2im.<locals>.check_positive.<locals>.<genexpr>  r×  rÕ  c                  ó   •— ‰› d‰ › �S rÙ  r*   rÚ  s   €€r,   r‚   z0col2im.<locals>.check_positive.<locals>.<lambda>  rÝ  r+   rÞ  rß  s   ``  r,   râ  zcol2im.<locals>.check_positive  rã  r+   rÅ  rÆ  rÇ  Frä  rz  rû  )r#   r‰   c              3   ó&   K  — | ]	  }|d k7  –— Œ y­wrÐ  r*   rç  s     r,   rÓ  zcol2im.<locals>.<genexpr>%  ré  rÕ  r^  c                  ó    •— dt        ‰ «      › �S )NzmExpected 2D or 3D (batch mode) tensor for input with possible 0 batch size and non-zero dimensions, but got: rë  rí  s   €r,   r‚   zcol2im.<locals>.<lambda>&  rî  r+   r   r"   c                  ó   •— d‰d   › d‰ › �S )Nz|Expected size of input's first non-batch dimension to be divisible by the product of kernel_size, but got input.shape[-2] = r^  z and kernel_size=r*   )rÅ  r  s   €€r,   r‚   zcol2im.<locals>.<lambda>,  s#   ø€ ð =Ø=BÀ2¹Y¸Kð HØ"�mð%€ r+   rS   c                  ó:   •— d‰› d‰› d‰› d‰› d‰› d‰ › d‰d   › d	�S ©
NzGiven output_size=r÷  rø  rù  rú  z , expected input.size(-1) to be ú	 but got rS   ú.r*   ©ÚLrÆ  rÅ  rû  rÇ  r  rz  s   €€€€€€€r,   r‚   zcol2im.<locals>.<lambda>9  óF   ø€ Ð$ [ M°À¸}ð MØ�:˜Z¨ y°	¸&¸ð B)Ø)*¨¨9°U¸2±Y°K¸qðB€ r+   c                  ó:   •— d‰› d‰› d‰› d‰› d‰› d‰ › d‰d   › d	�S r!  r*   r$  s   €€€€€€€r,   r‚   zcol2im.<locals>.<lambda>?  r&  r+   r‰   rH  rü  ©Ú
accumulaterý  )r?   rƒ   r†  r  r  rþ  rU   r*  rÿ  rÄ  r”  rW   rq  Úprodr„   Ú_unsafe_index_putrÂ   rð  r   )#rÀ   rû  rÅ  rÆ  rÇ  rz  râ  r�  Úprod_kernel_sizerÇ   rð  rñ  rò  ró  Úcolr  Úout_hÚout_wr  r  r  r  r	  r
  r  r  Úindices_rowÚindices_colÚorV  Úoutput_padded_sizer°  r   r%  r  s#    `````                           @@r,   Úcol2imr4    s�  þ€ ô 
‡L�L”�[Ó! QÑ&Ñ(OÔPÜ	‡L�L”�[Ó! QÑ&Ñ(JÔKÜ	‡L�L”�X“ !Ñ#Ñ%IÔJÜ	‡L�L”�W“ Ñ"Ñ$GÔHÜ	‡L�L”�V“ Ñ!Ñ#EÔFó
ñ �; Ô.Ù�8˜ZÔ(Ù�7˜I¨eÕ4Ù�6˜8Ô$Ù�; Ô.à�K‰K€EÜˆu‹:€DÜ	‡L�LØ�ˆÒ:œ3Ñ:¨u°R°S¨zÔ:Ó:ó	<ôð
 # 1‘~¨°A©Ñ6ÐÜ	‡L�LØˆb‰	Ð$Ñ$¨Ñ)ô	%ôô '*Ø˜ (¨K¸ó'
÷ò á"ˆC��c˜3 ð 	
ˆS�1�s‘7‰]˜S C¨!¡G™_Ñ,¨qÑ0°RÑ7Ó7ð€Cô ð 	ˆA‰��Q‘‰€AÜ	‡L�LØˆb‰	�Q‰÷	Bñ 	Bôô 
‡L�LØ	ˆA‰÷	Bñ 	Bôð ˜A‘I€MÙØ—‘ Ó"ˆà�K‰K€Eà�L€Eˆ5ØÑ€HˆhØ"Ñ€IˆyØ%Ñ€J�
Ø$Ñ€Hˆhð �M‰M˜5 ™8 U¨1¡XÐ1AÑ%AÐBÀ[ÑPÐSVÑVÓW€EØ�M‰M˜!˜Q  1 a¨Ó+€Eä2Øˆx˜ Y°¸%¿,¹,ó€Kô $ K°Ó3€KÜ2Øˆx˜ Y°¸%¿,¹,ó€Kô 14°KÀÓ0I×J©¨¨1˜!˜a !™e›)ÐJÐÑJØ�_‰_Ø	ˆq‰�5˜‘8œt KÓ0Ñ0Ð1Ð4FÑFó€Fð ��{ KÐ
0€CÜ×#Ñ# F¨C°À4Ð#ÓH€FÜ�U‰U�6˜Y˜J¨¨
°Y°JÀÀ
ÐKÓL€FáØ—‘ Ó"ˆØ€MùökùóV Ks   Å6'MÊ9Mr¡  c                 óz   — | |j                  | «      |z  z  j                  t        j                  | «      ¬«      }|S ©Nr\  )Útype_asr—  rD   r   )rl   r¡  rn   rJ   s       r,   Únative_dropout_backwardr8  h  sB   € ð 
˜Ÿ™ [Ó1°EÑ9Ñ	:×AÑAÜ×1Ñ1°+Ó>ð 	Bó 	€Að €Hr+   Ú
input_sizeÚ	dimensionr2  c                 óš  ‡ ‡‡‡‡‡‡— t        j                  ‰dkD  ˆfd„«       t        ‰«      dk(  rt        j                  ‰ d«      S t	        j
                  t        ‰«      |«      Š‰ j                  ‰«      Šdt        fˆˆ ˆˆˆˆfd„}‰‰k\  r |«       S ddlm	Š dt        fˆˆ ˆˆˆˆfd„} |«       r |«       S ˆfd„}ˆfd„}d	t        d
t        t           dt        fˆˆfd„}	‰‰   }
‰ j                  ‰«      }t        t        ‰«      «      D ]¬  } ||
|z
  ‰z   dz
  ‰z  d«      } |||«      }t        j                   |‰ j"                  t         j$                  ¬«      }|‰z  |z   }‰ j'                  d|«      j)                  ‰d|«      }t        ‰«      }||‰<    |	||«      }t*        j-                  ‰‰||«      ŠŒ® ‰j/                  «       S )Nr   c                  ó   •— d‰ › d�S )Nzstep is z but must be > 0r*   )ro  s   €r,   r‚   z!unfold_backward.<locals>.<lambda>|  s   ø€ ¨8°D°6Ð9IÐ)J€ r+   rP   c                  ó\  •— t        j                  ‰‰   ‰j                  t         j                  ¬«      } | j	                  d‰‰«      j                  «       } ‰j                  d‰dz   «      j                  ‰‰dz   «      }d‰z  | fz   }t        j                  ‰||d¬«      j                  «       S )Nr•  r   rS   r"   r5   Tr(  )
r?   r˜  r”  Úint32ÚunfoldÚflattenÚmovedimr„   r+  r³  )	r   Úsourcer£  rO   r¨   rX   r9  r2  ro  s	      €€€€€€r,   Ú_vectorized_index_putz.unfold_backward.<locals>._vectorized_index_put‚  s™   ø€ Ü�l‰l˜: c™?°4·;±;ÄeÇkÁkÔRˆØ�j‰j˜˜D $Ó'×/Ñ/Ó1ˆØ—‘˜b #¨¡'Ó*×2Ñ2°3¸¸a¹Ó@ˆØ˜#‘  Ñ&ˆÜ×%Ñ%Ø˜˜v°$ð &ó 
ç
‰*‹,ð	r+   ru  c                  ó
  •— ‰j                  «       t        ‰«      dz   k7  ry ‰‰j                  d«      ‰k(  «      sy‰‰   ‰z
  ‰z  dz   }  ‰‰j                  ‰«      | k(  «      syt        ˆˆˆfd„t	        ‰«      D «       «      S )Nr"   FrS   c              3   óf   •K  — | ](  \  }}|‰k(  xs  ‰‰j                  |«      |k(  «      –— Œ* y ­wr5   ©r2  )rÒ  Ú
source_dimr�  rO   r¨   rv  s      €€€r,   rÓ  zDunfold_backward.<locals>._is_canonical_grad_shape.<locals>.<genexpr>š  sF   øè ø€ ò 
ñ %�
˜Hð ˜#Ñò HÙ$ T§Y¡Y¨zÓ%:¸hÑ%FÓGóHñ
ùs   ƒ.1)rO   r†  r2  r  Ú	enumerate)Ún_foldsrO   r¨   r9  r2  rv  ro  s    €€€€€€r,   Ú_is_canonical_grad_shapez1unfold_backward.<locals>._is_canonical_grad_shape�  s†   ø€ Ø�8‰8‹:œ˜Z›¨1Ñ,Ò,ØÙ$ T§Y¡Y¨r£]°dÑ%:Ô;Øà˜c‘? TÑ)¨dÑ2°QÑ6ˆÙ$ T§Y¡Y¨s£^°wÑ%>Ô?Øäõ 
ô )2°*Ó(=ô
ó 
ð 	
r+   c                 ód   •—  ‰| |k  «      r| S  ‰|| k  «      r|S t        j                  | |«      S r5   )r?   Úsym_min©ÚaÚbrv  s     €r,   Ú_sym_min_if_neededz+unfold_backward.<locals>._sym_min_if_needed£  ó6   ø€ Ù   a¡Ô(ØˆHÙ   a¡Ô(ØˆHÜ�}‰}˜Q Ó"Ð"r+   c                 ód   •—  ‰| |k\  «      r| S  ‰|| k\  «      r|S t        j                  | |«      S r5   )r?   Úsym_maxrM  s     €r,   Ú_sym_max_if_neededz+unfold_backward.<locals>._sym_max_if_neededª  rQ  r+   rB  Útarget_shapec                 ó¾  •— t        |«      }| j                  «       }||kD  r| j                  |«      S ||z
  }dg|z  }t        |«      D ]s  }|‰k(  r‰n||z   }|dk  s||k\  r| j                  |«      c S  ‰	||   dk(  «      r| j                  |   ||<   ŒMt        j                  | j                  |   dk(  d„ «       Œu | j                  |«      j                  |«      S )Nr"   r   c                   ó   — y)Nz=unfold_backward grad shape is not broadcastable to input_sizer*   r*   r+   r,   r‚   z:unfold_backward.<locals>._reshape_source.<locals>.<lambda>Å  rÊ  r+   )r†  rO   r–  rT   r  r?   rƒ   r*  )
rB  rU  r�  Úsource_ndimÚ
dim_offsetÚ
view_shaperG  Ú
target_dimrO   rv  s
           €€r,   Ú_reshape_sourcez(unfold_backward.<locals>._reshape_source±  sí   ø€ Ü�<Ó ˆØ—j‘j“lˆØ˜ÒØ—=‘= Ó.Ð.à˜KÑ'ˆ
Ø�S˜4‘Zˆ
Ü Ó,ò 	ˆJØ *¨cÒ 1™°zÀJÑ7NˆJØ˜AŠ~ ¨tÒ!3Ø—}‘} \Ó2Ò2Ù$ Z°
Ñ%;¸qÑ%@ÔAØ)/¯©°jÑ)A�
˜:Ò&ô
 —‘Ø—L‘L Ñ,°Ñ1ñ$õð	ð  �~‰~˜jÓ)×0Ñ0°Ó>Ð>r+   r"   r•  rS   )r?   Ú_check_valuer†  Úsqueeze_copyrD   r1  rq  r   rw  rv  rš  ry  r�  r2  ÚreversedrT   r˜  r”  r>  Úselectr3  r„   Ú	index_addr³  )r¨   r9  r:  r2  ro  rC  rJ  rP  rT  r\  Úinput_dim_sizeÚgrad_dim_sizer§  Úmax_valid_lenÚ	valid_lenr   rB  Úsource_shaperO   rX   rv  s   `` ``             @@@r,   Úunfold_backwardrg  w  s¾  þ€ ô
 
×Ñ�t˜a‘xÓ!JÔKÜ
ˆ:ƒ˜!ÒÜ×!Ñ! $¨Ó*Ð*Ü
×
 Ñ
 ¤ Z£°)Ó
<€CØ—‘ 
Ó+€Jð¤6÷ ò ð ˆt‚|Ù$Ó&Ð&åKð
¤d÷ 
ò 
ñ   Ô!Ù$Ó&Ð&ô#ô#ð?¤ð ?´d¼3±ið ?ÄFö ?ð4   ‘_€NØ—I‘I˜c“N€Mô œ5 ›;Ó'ò BˆÙ*Ø˜fÑ$ tÑ+¨aÑ/°DÑ8¸!ó
ˆñ ' }°mÓDˆ	Ü�l‰l˜9¨T¯[©[ÄÇÁÔLˆØ�D‰j˜6Ñ!ˆØ—‘˜R Ó(×/Ñ/°°Q¸	ÓBˆÜ˜JÓ'ˆØ%ˆ�SÑÙ  ¨Ó6ˆÜ—^‘^ J°°S¸&ÓA‰
ðBð × Ñ Ó"Ð"r+   Úepsc           
      ó.  — |�A|}d|z
  }t        j                  t        j                  ||k\  ||k  «      | |d|z
  z  z  d«      S t        j                  t        j                  |dk\  |dk  «      | |d|z
  z  z  |j                  dt	        d«      «      «      S )Nrg   r”   r*   Únan)r?   ri   r›  rí   r  )rl   r{   rh  ÚloÚhis        r,   Úlogit_backwardrm  ß  s¢   € ð
 €ØˆØ�2‰XˆÜ�{‰{Ü×Ñ˜d b™j¨$°"©*Ó5Ø˜4 3¨¡:Ñ.Ñ/Øó
ð 	
ô �{‰{Ü×Ñ˜d c™k¨4°3©;Ó7Ø˜4 3¨¡:Ñ.Ñ/Ø�M‰M˜"œe E›lÓ+ó
ð 	
r+   Útrainc                 ód   — |r|dk7  rt         j                  | ||«      d   S | j                  «       S rs   )r„   Únative_dropoutr—  )rÀ   rV  rn  s      r,   Údropoutrq  ô  s3   € ñ ��a’Ü×"Ñ" 5¨!¨UÓ3°AÑ6Ð6à�{‰{‹}Ðr+   Úout0Úout1c                 ó„  — |r˜|dk7  r“|dk(  r:t        j                  | «      t        j                  | t         j                  ¬«      fS | j                  j                  st        d«      ‚t        j                  | «      |kD  }|| z  t        dd|z
  z  «      z  }||fS | t        j                  | t         j                  ¬«      fS )Nr   r"   rè   z?result type Float can't be cast to the desired output type Longrg   )	r?   r  rš  ré   Úis_floating_pointrx  Ú	rand_liker  r_  )rÀ   rV  rn  Ú	bool_maskÚress        r,   rp  rp  þ  s®   € ñ ��a’Ø�Š6Ü×$Ñ$ UÓ+¬U×-=Ñ-=¸eÌ5Ï:É:Ô-VÐWÐWØ�{‰{×,Ò,ÜØQóð ô —O‘O EÓ*¨QÑ.ˆ	Ø˜%Ñ¤%¨¨s°Q©w©Ó"8Ñ8ˆØ�YÐÐà”u—‘ u´E·J±JÔ?Ð@Ð@r+   Úhalf_to_floatc                 óÀ  — | j                  «       } |r6| j                  t        j                  k7  rt	        d| j                  › d�«      ‚t        j                  | t
        j                  j                  ¬«      \  }}| j                  |«      } t        | |«      }t        j                  | |z
  «      }|t        j                  ||d¬«      z  }|s|j                  |«      }|S ©Nz%half_to_float is True but x.dtype is z, expected torch.half©r3   T©r  )r³  ré   r?   Úhalfr0  rD   rE   ÚELEMENTWISE_TYPE_PROMOTION_KINDÚDEFAULTr8   Ú_softmax_unbacked_safe_amaxrh   rö   )r9   rO   ry  r:   r=   Úx_maxÚunnormalizedr  s           r,   Ú_softmaxr„    sÅ   € ð
 	
�‰‹€AÙØ�7‰7”e—j‘jÒ Ü Ø7¸¿¹°yÐ@UÐVóð ô ',×&>Ñ&>Ø	œu×DÑD×LÑLô'Ñ#Ð�|ð 	
�‰ÐÓ€AÜ'¨¨3Ó/€EÜ—9‘9˜Q ™YÓ'€LØœEŸI™I l°CÀÔFÑF€FÙØ—‘˜<Ó(ˆØ€Mr+   c           	      óÄ  — ddl m} | j                  dk(  rt        j                  | |d¬«      S t        j                  | j                  |«      } || j                  |   dkD  «      rt        j                  | |d¬«      S t        | j                  «      }d||<   t        j                  | | j                  |t        d«      «      f|¬«      } t        j                  | |d¬«      S )Nr   ©Úguard_or_falseTr}  r"   r  r€   )rw  r‡  r�  r?   ÚamaxrD   r1  r  ry  r4  rí   r  )r9   rO   r‡  Úcanonical_dimÚ	pad_shapes        r,   r�  r�  &  s²   € ÝDà‡v�v�‚{Ü�z‰z˜!˜S¨$Ô/Ð/ä×*Ñ*¨1¯6©6°3Ó7€MÙ�a—g‘g˜mÑ,¨qÑ0Ô1Ü�z‰z˜!˜S¨$Ô/Ð/ô �Q—W‘W“€IØ €IˆmÑÜ�	‰	�1�a—j‘j ¬E°&«MÓ:Ð;ÀÔE€AÜ�:‰:�a˜ dÔ+Ð+r+   )r  c                 óê  — | j                  «       } |r6| j                  t        j                  k7  rt	        d| j                  › d�«      ‚t        j                  | t
        j                  j                  ¬«      \  }}| j                  |«      } t        | |«      }| |z
  }t        j                  t        j                  t        j                  |«      |d¬«      «      }||z
  }|s|j                  |«      }|S r{  )r³  ré   r?   r~  r0  rD   rE   r  r€  r8   r�  rM  rö   rh   )	r9   rO   ry  r:   r=   r‚  ÚshiftedÚshifted_logsumexpr  s	            r,   Ú_log_softmaxrŽ  :  sÕ   € ð
 	
�‰‹€AÙØ�7‰7”e—j‘jÒ Ü Ø7¸¿¹°yÐ@UÐVóð ô ',×&>Ñ&>Ø	œu×DÑD×LÑLô'Ñ#Ð�|ð 	
�‰ÐÓ€AÜ'¨¨3Ó/€EØ�%‰i€GÜŸ	™	¤%§)¡)¬E¯I©I°gÓ,>ÀÈTÔ"RÓSÐØÐ(Ñ(€FÙØ—‘˜<Ó(ˆØ€Mr+   rŸ  Úpadding_idxÚscale_grad_by_freqÚsparsec                 óò   — | j                  «       dk7  rt        d| j                  «       › d�«      ‚|j                  dk  r4| j                  d|«      }|j                  dk(  r|j	                  d«      }|S | |   S )Nr#   z'weight' must be 2-D, got z-Dr"   r   )rO   r0  r�  Úindex_selectr   )rÎ   rŸ  r�  r�  r‘  rÇ   s         r,   Ú	embeddingr”  R  ss   € ð ‡z�zƒ|�qÒÜÐ9¸&¿*¹*»,¸ÀrÐJÓKÐKà‡|�|�qÒà×!Ñ! ! WÓ-ˆØ�<‰<˜1ÒØ—+‘+˜a“.ˆCØˆ
à�g‰Ðr+   Únum_weightsc                 ó�  — t        j                  | t         j                  j                  ¬«      \  }}| j	                  |«      } t        |t        j                  «      }|dk\  ||k  z  }|rm|j                  |f«      }t        j                  |«      }	t        j                  |||g|	«      }t        j                  |||gd«      }
| |
j                  d«      z  } t        |||k7  z  | j                  «      }| j                  |f| j                   |j                  d  z   «      }t        j                  |||g| «      j	                  |«      S )Nr|  r   r"   rS   )rD   rE   r  r€  r8   r   r?   Úlongrq  r_  r„   Ú#_unsafe_masked_index_put_accumulater�  rU   rW   r�  r  )rl   rŸ  r•  r�  r�  r:   r=   Úvalid_indicesÚcountsr™  Úgrad_weights_scaler¡  Úgrad_weights                r,   Úembedding_dense_backwardr�  h  sD  € ô ',×&>Ñ&>Ø¬×)NÑ)N×)VÑ)Vô'Ñ#Ð�|ð —.‘.Ð!2Ó3€KÜ% g¬u¯z©zÓ:€GØ ‘\ g°Ñ&;Ñ<€MÙØ×"Ñ" K >Ó2ˆÜ�‰˜wÓ'ˆÜ×9Ñ9Ø�M G 9¨dó
ˆô "×6Ñ6Ø�M G 9¨aó
Ðð "Ð$6×$@Ñ$@ÀÓ$DÑDˆä˜]¨g¸Ñ.DÑEÀ{×GWÑGWÓX€DØ×'Ñ'Ø	ˆ˜×*Ñ*¨7¯<©<¨>Ð:Ñ:ó€Kô ×3Ñ3Ø�T˜G˜9 kóç�bˆÓðr+   c                 ó"   — d}| D ]  }||z  }Œ	 |S r\   r*   )r9   rJ   Úis      r,   r*  r*  ‹  s$   € Ø	€AØò ˆØ	ˆQ‰‰ðà€Hr+   ÚtensorsÚ
num_chunksc                 óZ  — g }| D ]£  }|j                  «       }||   |z   dz
  |z  |z  }|||   k7  r;dgdz  |j                  |z
  dz
  z  d|||   z
  gz   }t        j                  ||d«      }|d | t	        j
                  |dg«      z   }|j                  |j                  |«      «       Œ¥ |S )Nr"   r   r#   rS   )r2  r�  r„   Úconstant_pad_ndr?   ÚSizeÚappendr*  )	r   rO   r¡  Úpadded_tensorsÚtensorÚtensor_sizeÚpad_along_dimrð  Ú	view_sizes	            r,   Ú
_pad_chunkr«  ’  sÚ   € ð
 €NØò 9ˆØ—k‘k“mˆØ$ SÑ)¨JÑ6¸Ñ:¸zÑIÈJÑVˆØ˜K¨Ñ,Ò,à�#˜‘'˜VŸ[™[¨3Ñ.°Ñ2Ñ3ØØ ¨CÑ 0Ñ0ð7ñ ˆCô ×)Ñ)¨&°#°qÓ9ˆFØ  Ð%¬¯
©
°JÀÐ3CÓ(DÑDˆ	Ø×Ñ˜fŸn™n¨YÓ7Õ8ð9ð Ðr+   c                 óR   — | d   j                   }| D ]  }|j                   |k7  sŒ y y)Nr   FT©r�  )r   r�  r§  s      r,   Úhave_same_ndimsr®  §  s2   € Ø�1‰:�?‰?€DØò ˆØ�;‰;˜$ÓÙðð r+   c                 ó”   — | d   j                  «       d | }| D ]-  }t        j                  |j                  «       d | |k(  d„ «       Œ/ y )Nr   c                   ó   — y)NzG_chunk_cat expects same sizes of 0,...,dim-1 dimensions for all tensorsr*   r*   r+   r,   r‚   z+leading_dimension_matches.<locals>.<lambda>´  rÊ  r+   )r2  r?   rƒ   )r   rO   Úleading_dim_sizesr§  s       r,   Úleading_dimension_matchesr²  ¯  sN   € Ø ™
Ÿ™Ó)¨$¨3Ð/ÐØò 
ˆÜ�‰Ø�K‰K‹M˜$˜3ÐÐ#4Ñ4Ù]õ	
ñ
r+   c                 ó²  — t        j                  |dk\  d„ «       t        j                  t        | «      dkD  d„ «       | d   j                  }| d   j                  }| D ]r  }t        j                  |j                  «       dkD  d„ «       t        j                  |j                  |k(  d„ «       t        j                  |j                  |k(  d„ «       Œt t        | «      r(t        j                  | d   j                  «       |«      }nEt        j                  |dk\  d„ «       | D ]&  }t        j                  ||j                  k  d	„ «       Œ( t        | |«       |S )
Nr"   c                   ó   — y)Nz&_chunk_cat expects positive num_chunksr*   r*   r+   r,   r‚   z._preprocess_chunk_cat_inputs.<locals>.<lambda>½  rÊ  r+   r   c                   ó   — y)Nz0_chunk_cat expects a non-empty input tensor listr*   r*   r+   r,   r‚   z._preprocess_chunk_cat_inputs.<locals>.<lambda>¿  rÊ  r+   c                   ó   — y)Nz#_chunk_cat expects non-empty tensorr*   r*   r+   r,   r‚   z._preprocess_chunk_cat_inputs.<locals>.<lambda>Ä  rÊ  r+   c                   ó   — y)Nz8_chunk_cat expects all input tensors with the same dtyper*   r*   r+   r,   r‚   z._preprocess_chunk_cat_inputs.<locals>.<lambda>Ç  rÊ  r+   c                   ó   — y)Nz8_chunk_cat expects all inputs tensors on the same devicer*   r*   r+   r,   r‚   z._preprocess_chunk_cat_inputs.<locals>.<lambda>Ë  rÊ  r+   c                   ó   — y)NzK_chunk_cat expects non-negative dim when input tensors have different ndimsr*   r*   r+   r,   r‚   z._preprocess_chunk_cat_inputs.<locals>.<lambda>Ò  rÊ  r+   c                   ó   — y)Nz3_chunk_cat expects dim < ndim for all input tensorsr*   r*   r+   r,   r‚   z._preprocess_chunk_cat_inputs.<locals>.<lambda>×  rÊ  r+   )r?   rƒ   r†  ré   r”  rß   r®  rD   r1  rO   r�  r²  )r   rO   r¡  Úexpected_dtypeÚexpected_devicer§  s         r,   Ú_preprocess_chunk_cat_inputsr½  ¸  s-  € ô
 
‡L�L�˜q‘Ñ"RÔSÜ	‡L�LÜˆG‹�qÑÑTôð ˜Q‘Z×%Ñ%€NØ˜a‘j×'Ñ'€OØò 	
ˆÜ�‰�V—\‘\“^ aÑ'Ñ)VÔWÜ�‰Ø�L‰L˜NÑ*ÙNô	
ô 	�‰Ø�M‰M˜_Ñ,ÙNõ	
ð	
ô �wÔÜ×$Ñ$ W¨Q¡Z§^¡^Ó%5°sÓ;‰ä�‰Ø�1‰HÙaô	
ð ò 	ˆFÜ�L‰LØ�f—k‘kÑ!ÙMõð	ô
 ˜g sÔ+Ø€Jr+   rÇ   c                 ó¦   — t        | ||«      }t        | ||«      }|€t        j                  ||dz   «      S t        j                  ||dz   |¬«       |S )Nr"   )rÇ   )r½  r«  r?   r4  )r   rO   r¡  rÇ   r¦  s        r,   Ú
_chunk_catr¿  Ý  sS   € ô ' w°°ZÓ
@€CÜ ¨¨jÓ9€NØ
€{Ü�y‰y˜¨¨q©Ó1Ð1ä�	‰	�. #¨¡'¨sÕ3Øˆ
r+   Úsplit_sizesc                 ó  — t         j                  | ||¬«      }|€.|D �cg c]"  }|j                  t        j                  ¬«      ‘Œ$ c}S t        ||«      D ])  \  }}t        ||j                  «       t        ||d¬«       Œ+ y c c}w )Nr€   r\  Tr  )	r„   Úsplit_with_sizesr—  r?   r`  rþ  r   r  r   )r{   rÀ  rO   rÇ   ÚsplitsÚsr°  Úsplits           r,   Úsplit_with_sizes_copyrÆ  î  sƒ   € ô ×"Ñ" 4¨¸#Ð"Ó>€FØ
€{ØHNÖOÀ1�—‘¤e×&=Ñ&=�Õ>ÒOÐOä   fÓ-ò 	N‰MˆF�EÜ˜f e§k¡kÔ2Ü U°FÈÖMð	Nð ùò Ps   Ÿ'BÚ
split_size.c                 óD   — t         j                  j                  | ||«      S r5   )r„   rÅ  r   )rÀ   rÇ  rO   s      r,   Úunsafe_splitrÉ    s   € ä�:‰:×Ñ˜U J°Ó4Ð4r+   c                 óD   — t         j                  j                  | ||«      S r5   )r„   rÂ  rŒ  )rÀ   rÀ  rO   s      r,   Úunsafe_split_with_sizesrË    s   € ô × Ñ ×(Ñ(¨°¸SÓAÐAr+   c                 óz  ‡‡— | j                   }||   Št        j                  ‰dk\  ˆfd„«       ‰dk(  r| j                  «       fS t        j                  ‰dkD  ˆfd„«       ‰‰z   dz
  ‰z  }ddlm}  ||«      }t        |«      D �cg c]  }‰‘Œ }}‰‰|z  ‰z
  z
  |d<   t        j                  | ||«      S c c}w )Nr   c                  ó   •— d‰ › �S )Nz=split expects split_size be non-negative, but got split_size=r*   )rÇ  s   €r,   r‚   zsplit.<locals>.<lambda>  s   ø€ ÐOÐPZÈ|Ð\€ r+   c                  ó   •— d‰ › �S )NzKsplit_size can only be 0 if dimension size is 0, but got dimension size of r*   )r�  s   €r,   r‚   zsplit.<locals>.<lambda>  s   ø€ ð %Ø%- Jð0€ r+   r"   )Ú	guard_intrS   )r  r?   rƒ   Údetachrw  rÏ  rT   rÅ  )	r{   rÇ  rO   rl  ÚchunksrÏ  rŸ  rÀ  r�  s	    `      @r,   rÅ  rÅ    sÉ   ù€ à—*‘*€KØ˜3Ñ€HÜ	‡L�LØ�a‰Û\ôð �1‚}Ø—‘“ÐÐÜ	‡L�LØ�Q‰ó	0ôð
 ˜Ñ# aÑ'¨JÑ6€Fõ @á�vÓ€FÜ',¨V£}Ö5 !’:Ð5€KÐ5Ø  J°Ñ$7¸(Ñ$BÑC€K��OÜ�;‰;�t˜[¨#Ó.Ð.ùò 6s   Â	B8Útensor_indices_or_sectionsc                 ó  ‡	— |j                   j                  dk7  rt        d|j                   › �«      ‚|j                  t        j
                  k7  rt        d|j                  › �«      ‚|j                  «       Š	t	        j                  ‰	dk(  xs ‰	dk(  ˆ	fd„«       ‰	dk(  rS|j                  «       }t        |t        «      s!t        dt        |«      j                  › �«      ‚| j                  ||«      S t        }t        j                  j                  «       x}r|j                   x}r|j"                  } |«       5  |D �cg c]  }|j                  «       ‘Œ }}d d d «       | j                  |«      S c c}w # 1 sw Y   Œ xY w)NÚcpuz/tensor_indices_or_sections must be on CPU, got z.tensor_indices_or_sections must be int64, got r"   r   c                  ó   •— d‰ › d�S )Nz{tensor_split expected tensor_indices_or_sections to be a zero-dimensional or one-dimensional tensor, but got a tensor with z dimsr*   )Ú	split_dims   €r,   r‚   zAtensor_split_tensor_indices_or_sections_py_impl.<locals>.<lambda>:  s   ø€ ð <Ø<E¸;ÀeðM€ r+   z%Expected sections to be IntLike, got )r”  Útyper0  ré   r?   rº  rO   rƒ   Úitemr7   r   r$   Útensor_splitr   Ú_guardsÚdetect_fake_modeÚ	shape_envÚignore_fresh_unbacked_symbols)
r{   rÒ  rO   ÚsectionsÚctxÚ	fake_moderÜ  rŸ  rŸ  rÖ  s
            @r,   Ú/tensor_split_tensor_indices_or_sections_py_implrá  '  s‚  ø€ ð "×(Ñ(×-Ñ-°Ò6ÜØ=Ð>X×>_Ñ>_Ð=`Ðaó
ð 	
ð "×'Ñ'¬5¯;©;Ò6ÜØ<Ð=W×=]Ñ=]Ð<^Ð_ó
ð 	
ð +×.Ñ.Ó0€IÜ	‡L�LØ�Q‰Ò(˜) q™.ó	Môð
 �A‚~Ø-×2Ñ2Ó4ˆÜ˜(¤GÔ,Ü Ø7¼¸X»×8OÑ8OÐ7PÐQóð ð × Ñ  ¨3Ó/Ð/äˆÜŸ™×7Ñ7Ó9Ð9ˆIÐ9Ø"×,Ñ,Ð,ˆIÐ,à×9Ñ9ˆCñ
 ‹Uñ 	EØ)CÖD A�q—v‘v•xÐDˆGÐD÷	Eð × Ñ  ¨#Ó.Ð.ùò E÷	Eð 	Eús   Ä:E7Ä?E2ÅE7Å2E7Å7F Úmat1Úmat2c                 ó¾   — | j                  «       s&| j                  «       st        |«      }t        |«      }|t        j                  ||«      z  }|dk(  r|S ||| z  z   S rs   )ru  Ú
is_complexr�  r?   Úmm)r{   râ  rã  rc   rm   rÇ   s         r,   Úaddmmrç  ]  s]   € ð ×!Ñ!Ô#¨D¯O©OÔ,=Ü�4‹yˆÜ�E“
ˆØ
”%—(‘(˜4 Ó&Ñ
&€CØˆq‚yØˆ
ð �˜‘ÑÐr+   r   c                 ót   — |t        j                  |||¬«      z  }|dk(  r|S ||| j                  |«      z  z   S )Nr   r   )r?   ræ  r8   )r{   râ  rã  r   rc   rm   rÇ   s          r,   Úaddmm_dtyperé  q  s@   € ð ”%—(‘(˜4 °Ô;Ñ
;€CØˆq‚yØˆ
Ø�˜Ÿ™ 	Ó*Ñ*Ñ*Ð*r+   Úuse_geluc                 ó¾   — t        | ||||«      }|r8| j                  rt        j                  |d¬«      S t        j                  |«      S t        j	                  |«      S )Nr«   )r©   )rç  Úis_cudar„   ÚgeluÚrelu)r{   râ  rã  rc   rm   rê  rÇ   s          r,   Ú_addmm_activationrï  �  sO   € ô ��d˜D $¨Ó
.€CÙØ�<Š<Ü—9‘9˜S¨f�9Ó5Ð5ä—9‘9˜S“>Ð!Ü�9‰9�S‹>Ðr+   Úvecc                 óî   — | j                  «       s&| j                  «       st        |«      }t        |«      }|t        j                  ||«      z  }|dk(  r|S |j                  «       dk(  r|| z  S ||| z  z   S rs   )ru  rå  r�  r?   Úmvrß   )r{   râ  rð  rc   rm   rÇ   s         r,   Ú_addmv_implró  •  sq   € à×!Ñ!Ô#¨D¯O©OÔ,=Ü�4‹yˆÜ�E“
ˆØ
”%—(‘(˜4 Ó%Ñ
%€CØˆq‚yØˆ
Ø
‡y�yƒ{�aÒØ�d‰{ÐØ�˜‘ÑÐr+   c                 óÀ   ‡ ‡‡— t        j                  ‰ j                  ‰j                  k(  xr ‰j                  ‰j                  k(  ˆˆ ˆfd„«       t        ‰ ‰‰||«      S )Nc                  óV   •— d‰j                   › d‰ j                   › d‰j                   › �S )Nz6addmv input tensors must have the same dtype, but got ú, z, and rè   )râ  r{   rð  s   €€€r,   r‚   zaddmv.<locals>.<lambda>§  s1   ø€ ÐHÈÏÉÈÐTVÐW[×WaÑWaÐVbÐbhÐil×irÑirÐhsÐt€ r+   )r?   rƒ   ré   ró  )r{   râ  rð  rc   rm   s   ```  r,   Úaddmvr÷  ¢  sK   ú€ ô 
‡L�LØ�
‰
�d—j‘jÑ Ò< T§Z¡Z°3·9±9Ñ%<Ýtôô �t˜T 3¨¨eÓ4Ð4r+   rõ   ÚrstdÚgammaÚNÚCÚHxWÚgroupÚoutput_maskc
           	      óD  ‡‡‡‡‡‡— t        j                  | |‰|d¬«       t        j                  || d¬«       t        j                  ‰|d¬«       t        j                  |j                  «       ‰‰z  ‰z  k(  ˆˆˆfd„«       t        j                  ‰j                  ‰‰fk(  ˆˆˆfd„«       t        j                  ‰d u xs ‰j                  «       ‰k(  ˆˆfd„«       ‰‰z  }
t        j                  ‰|
‰z  k(  ˆˆfd„«       t        j                  | |«      j                  ‰‰‰«      j                  dg¬«      }| j                  ‰‰‰«      j                  dg¬«      }d }d }d }|	d	   �r*d
‰|
z  z  }‰�Át        j                  |‰j                  d	«      «      j                  ‰‰|
«      j                  d«      }t        j                  |‰j                  d	«      «      j                  ‰‰|
«      j                  d«      }t        j                  |j                  d«      ‰j                  d‰|
«      «      }n‹|j                  ‰‰|
«      j                  d«      }|j                  ‰‰|
«      j                  d«      }t        j                  |j                  d«      t        j                  d‰|
f|j                  ¬«      «      }|‰z  |z
  |z  |z  |z  |z  }| ‰z  ||z  |z  z
  }|j                  d«      }t        |d«      }t        |d«      }t        j                  | j                  ‰‰|
‰«      |«      t        j                  |j                  ‰‰|
‰«      |«      z   |z   }|j                  |j                  «      j                  |j                   «      }|	d   rk|j                  ‰‰|
«      |j                  ‰‰|
«      ‰j                  d«      z  z
  |j                  d«      z  j                  d	g¬«      j                  ‰«      }|	d   r|j                  d	g¬«      }|||fS )NF)Úallow_cpu_scalar_tensorsc                  ó   •— d‰‰ z  ‰z  › d�S )NzExpect input to have z	 elementsr*   )rû  rü  rú  s   €€€r,   r‚   z,native_group_norm_backward.<locals>.<lambda>Á  s   ø€ Ð'¨¨A©°© }°IÐ>€ r+   c                  ó.   •— d‰ › d‰› d‰j                   › �S )NzExpect mean to have shape (rö  z
, but got rí  )rú  rý  rõ   s   €€€r,   r‚   z,native_group_norm_backward.<locals>.<lambda>Å  s   ø€ Ð-¨a¨S°°5°'¸ÀDÇJÁJÀ<ÐP€ r+   c                  ó<   •— d‰ › d‰�‰j                  «       › �S d› �S )NzExpect gamma to have z elements but got rS   )rß   )rû  rù  s   €€r,   r‚   z,native_group_norm_backward.<locals>.<lambda>É  s-   ø€ Ð'¨ sÐ*<ÈeÐN_¸U¿[¹[»]Ð<hÐi€ ÐegÐ<hÐi€ r+   c                  ó   •— d‰ › d‰› �S )NzExpect number of channels z, to be evenly-divisible by number of groups r*   )rû  rý  s   €€r,   r‚   z,native_group_norm_backward.<locals>.<lambda>Ï  s   ø€ Ð,¨Q¨CÐ/[Ð\aÐ[bÐc€ r+   r#   r€   r   rg   rS   r"   r“  rH  )rD   Úcheck_same_deviceÚcheck_same_shaper?   rƒ   rß   r  rÛ   rœ  rö   rU   r*  r™  r”  rW   r8   ré   )rl   rÀ   rõ   rø  rù  rú  rû  rü  rý  rþ  ÚcpgÚdsÚdbÚd_inputÚd_gammaÚd_biasrÄ  Úds_valÚdb_valÚc1Úc2Úc3s     ` `````             r,   Únative_group_norm_backwardr  ¬  sº  ý€ ô 
×ÑØ�U˜D $Àõô 
×Ñ˜5 +ÈÕNÜ	×Ñ˜4 ÀÕFÜ	‡L�LØ�‰‹˜˜Q™ ™Ñ$Ý>ôô 
‡L�LØ�
‰
�q˜%�jÑ ÝPôô 
‡L�LØ�ˆÒ+˜Ÿ™›¨!Ñ+Üiôð
 ˆu‰*€CÜ	‡L�LØ	ˆS�5‰[ÑÜcôô 
�‰�; Ó	&×	+Ñ	+¨A¨q°#Ó	6×	:Ñ	:À¸sÐ	:Ó	C€BØ	×	Ñ	˜!˜Q Ó	$×	(Ñ	(¨a¨SÐ	(Ó	1€Bà!€GØ!€GØ €FØ�1ƒ~Ø�3˜‘9ÑˆØÐÜ—Y‘Y˜r 5§?¡?°1Ó#5Ó6×>Ñ>¸qÀ%ÈÓM×QÑQÐRSÓTˆFÜ—Y‘Y˜r 5§?¡?°1Ó#5Ó6×>Ñ>¸qÀ%ÈÓM×QÑQÐRSÓTˆFÜ—‘Ø—‘˜rÓ"Ø—‘˜a ¨Ó,ó‰Bð
 —Z‘Z  5¨#Ó.×2Ñ2°1Ó5ˆFØ—Z‘Z  5¨#Ó.×2Ñ2°1Ó5ˆFÜ—‘Ø—‘˜rÓ"Ü—
‘
˜A˜u c˜?°4·;±;Ô?óˆBð �t‰m˜fÑ$¨Ñ,¨tÑ3°dÑ:¸QÑ>ˆØˆS�4‰Z˜& 4™-¨!Ñ+Ñ+ˆà�\‰\˜"ÓˆÜ˜r 1Ó%ˆÜ˜r 1Ó%ˆä�I‰I�k×)Ñ)¨!¨U°C¸Ó=¸rÓBÜ�i‰i˜Ÿ™ a¨°°SÓ9¸2Ó>ñ?àñð 	ð
 —/‘/ %§+¡+Ó.×1Ñ1°%·+±+Ó>ˆØ�1‚~ð —‘˜˜E 3Ó'¨"¯'©'°!°U¸CÓ*@À4Ç>Á>ÐRTÓCUÑ*UÑUØ—.‘. Ó$ñ%÷ ‰S�a�SˆS‹\ß‰W�Q‹Zð 	ð �1‚~Ø—‘˜Q˜C�“ˆà�W˜fÐ%Ð%r+   Úout2c
                ó¸   — t        | |||||||||	«
      }|
||f}t        |«      D ]2  \  }}|€Œ	t        ||   |j                  «       t	        |||   d¬«       Œ4 |S r  )r  rH  r   r  r   )rl   rÀ   rõ   rø  rù  rú  rû  rü  rý  rþ  rr  rs  r  r  rX   rŸ  rJ   s                    r,   Únative_group_norm_backward_outr    sz   € ô" (Ø�U˜D $¨¨q°!°S¸%Àó€Fð ˜˜dÐ#€JÜ˜&Ó!ò Q‰ˆˆ1Ø‰=Ü˜j¨™m¨Q¯W©WÔ5Ü Q°
¸1±È4ÖPðQð
 Ðr+   c                 ó,   — | �| j                  |«      S | S r5   ©r8   )r9   ré   s     r,   Ú_maybe_castr  "  s   € Ø€}Ø�t‰t�E‹{ÐØ€Hr+   Úgrad_outÚnormalized_shapeÚbiasc                 ó~  ‡"— |j                   }|j                  «       }	t        j                  |j                  «      Š"ˆ"fd„| |||fD «       \  }
}}}|
€t        d«      ‚|	t        |«      z
  }||d  }|d | }g }g }t        |	«      D ]*  }||k\  r|j                  |«       Œ|j                  |«       Œ, t        |«      }t        |«      }ddl
m}  ||dk(  «      s ||dk(  «      rN|d   r|j                  |«      nd |d   r|j                  ||d  «      nd |d   r|j                  ||d  «      fS d fS t        ||j                  «       «      }t        ||j                  «       «      }|€t        d«      ‚||z
  |z  }|�|
|z  }n|
}||z  }t        j                  ||d«      }t        j                   ||«      }t        j                  ||d«      }t        j                   ||«      }||z
  |z
  }d }d } d }!|d   r||z  |z  }|d   r0|�.t        |«      dkD  rt        j                  |
|z  |d	«      } n|
|z  } |d   r8|�6t        |«      dkD  rt        j                  |
|d	«      }!n|
j#                  «       }!t%        ||j                  «      t%        | |�|j                  nd «      t%        |!|�|j                  «      fS d «      fS )
Nc              3   óh   •K  — | ])  }|�!|j                  ‰t        j                  ¬«      n|–— Œ+ y ­wr6  )r8   r?   r`  ©rÒ  r9   r:   s     €r,   rÓ  z-native_layer_norm_backward.<locals>.<genexpr>7  s>   øè ø€ ò 9ð ð ˆ=ð 	
�‰Ð¬e×.EÑ.EˆÔFàó	ñ9ùs   ƒ/2ú grad_out_cast should not be Noner   ru  r"   r#   zinput_cast should not be NoneTF)r  rO   rD   Úget_computation_dtyperé   r0  r†  rT   r¥  r*  rw  rv  rq  rW   r?   rö   rÛ   r—  r  )#r  rÀ   r  rõ   rø  rÎ   r  rþ  Úinput_shapeÚ
input_ndimÚgrad_out_castÚ
input_castÚweight_castÚ	bias_castÚaxisÚ
inner_dimsÚ
outer_dimsÚinner_dim_indicesÚouter_dim_indicesrŸ  rú  ÚMrv  Úx_hatÚ
grad_x_hatrN  rO  r  r  r  rK   r
  Úd_weightr  r:   s#                                     @r,   Únative_layer_norm_backwardr0  )  s  ø€ ð —+‘+€KØ—‘“€JÜ×3Ñ3°E·K±KÓ@Ðó9ð ˜E 6¨4Ð0ô	9Ñ5€M�:˜{¨Ið ÐÜÐ?Ó@Ð@àœÐ,Ó-Ñ-€DØ˜T˜UÐ#€JØ˜U˜dÐ#€JØ#%ÐØ#%ÐÜ�:Óò (ˆØ�Š9Ø×$Ñ$ QÕ'à×$Ñ$ QÕ'ð	(ô 	ˆZÓ€AÜˆZÓ€AÝKá˜Q !™VÔ$Ñ(=¸aÀ1¹fÔ(Eà,7¸ªNˆE�O‰O˜KÔ(ÀØ3>¸q²>ˆE�O‰O˜K¨¨Ð.Ô/ÀtØ3>¸q²>ˆE�O‰O˜K¨¨Ð.Ó/ð
ð 	
ð HLð
ð 	
ô
 ˜T :§>¡>Ó#3Ó4€DÜ˜T :§>¡>Ó#3Ó4€DØÐÜÐ<Ó=Ð=Ø˜$Ñ $Ñ&€EØÐØ" [Ñ0‰
à"ˆ
Ø�Q‰€AÜ�	‰	�*Ð/°Ó6€AÜ	�‰�:˜uÓ	%€BÜ	�‰�2Ð(¨$Ó	/€BÜ	�‰�5˜"Ó	€Bà�‰E�B‰J€EØ!€GØ"€HØ €FØ�1‚~Ø˜!‘8˜uÑ$ˆà�1‚~˜+Ð1ÜÐ Ó! AÒ%Ü—y‘y °Ñ!6Ð8IÈ5ÓQ‰Hà$ uÑ,ˆHà�1‚~˜)Ð/ÜÐ Ó! AÒ%Ü—Y‘Y˜}Ð.?ÀÓG‰Fà"×(Ñ(Ó*ˆFô 	�G˜UŸ[™[Ó)Ü�H¨fÐ.@˜fŸlšlÀdÓKÜ�F¨$Ð*:˜DŸJ™JÓEðð ð AEÓEðð r+   c          
      ó´   — t        | |||||||«      }||	|
f}t        |«      D ]2  \  }}|€Œ	t        ||   |j                  «       t	        |||   d¬«       Œ4 |S r  )r0  rH  r   r  r   )r  rÀ   r  rõ   rø  rÎ   r  rþ  rr  rs  r  r  rX   rŸ  rJ   s                  r,   Únative_layer_norm_backward_outr2    sw   € ô (Ø�%Ð)¨4°°v¸tÀ[ó€Fð ˜˜dÐ#€JÜ˜&Ó!ò Q‰ˆˆ1Ø‰=Ü˜j¨™m¨Q¯W©WÔ5Ü Q°
¸1±È4ÖPðQð
 Ðr+   c                 ó&  — g }t        t        |«      «      D ]'  }|j                  | j                  «       |z
  dz
  «       Œ) t	        j
                  | j                  «      }| j                  |«      }|€~|t        j                  t        j                  fv r.t        j                  t        j                  «      j                  }n0t        j                  t        j                  «      j                  }n|}t        j                  t        j                  j                   j"                  j%                  t        j&                  |d«      j)                  |d¬«      |«      «      }	|j+                  |	«      }
|�|
j+                  |«      }
| j,                  xs |d uxr |j,                  }t	        j.                  | «      }|t        j0                  t        j2                  fv }|s"|s |
j5                  «       }
|	j5                  «       }	|
j7                  | «      }||	fS )Nr"   r#   Tr  )rT   r†  r¥  rO   rD   r   ré   r8   r?   rì   rû   Úfinforh  rý   ÚrsqrtÚopsr„   ÚaddÚScalarrî   rõ   rÛ   Ú	is_nestedr   Úchannels_lastÚchannels_last_3dr³  r7  )rÀ   r  rÎ   rh  Údims_to_reducerŸ  r:   Úupcasted_inputÚeps_valÚrqrst_inputÚupcasted_resultr9  r]  Úis_channels_lastr  s                  r,   Ú_fused_rms_normrB  š  s¿  € ð !#€NÜ”3Ð'Ó(Ó)ò 3ˆØ×Ñ˜eŸi™i›k¨A™o°Ñ1Õ2ð3ô ×3Ñ3°E·K±KÓ@ÐØ—X‘XÐ/Ó0€Nð €{Ø¤§¡´·±Ð @Ñ@Ü—k‘k¤%§-¡-Ó0×4Ñ4‰Gä—k‘k¤%§-¡-Ó0×4Ñ4‰Gàˆä—+‘+ô 	�	‰	�‰×Ñ×!Ñ!Ü�I‰I�n aÓ(×-Ñ-°.È$Ð-ÓOÐQXó	
ó€Kð %×(Ñ(¨Ó5€OàÐØ)×-Ñ-¨fÓ5ˆð —‘ÒL F°$Ð$6Ò$K¸6×;KÑ;K€IÜ×/Ñ/°Ó6€MØ$Ü×ÑÜ×Ñð)ð Ðñ
 Ñ-Ø)×4Ñ4Ó6ˆØ!×,Ñ,Ó.ˆð ×$Ñ$ UÓ+€Fà�;ÐÐr+   c                 óL  — |j                   }|j                  «       }t        j                  |j                  «      }| j                  |t        j                  ¬«      }	|j                  |t        j                  ¬«      }
|�!|j                  |t        j                  ¬«      nd }|	€t        d«      ‚|t        |«      z
  }||d  }|d | }g }g }t        |«      D ]*  }||k\  r|j                  |«       Œ|j                  |«       Œ, t        |«      }t        |«      }ddlm}  ||dk(  «      s ||dk(  «      r4|d   r|j                  |«      nd |d   r|j                  ||d  «      fS d fS t!        ||
j                  «       «      }|�|	|z  }n|	}d }d }|
|z  }|d   r)t        j"                  ||z  |d¬«      }|||z  |z  z
  |z  }|d   r0|�.|	|z  }t        |«      dkD  rt        j"                  ||d¬«      }n|}t%        ||j                  «      t%        ||j                  «      fS )	Nr\  r  r   r†  r"   Tr  F)r  rO   rD   r   ré   r8   r?   r`  r0  r†  rT   r¥  r*  rw  r‡  rq  rW   rö   r  )r  rÀ   r  rø  rÎ   rþ  r!  r"  r:   r#  r$  r%  r'  r(  r)  r*  r+  rŸ  rú  r,  r‡  r.  r
  r/  r-  Úsum_valÚd_weight_full_shapes                              r,   Ú_fused_rms_norm_backwardrF  Ñ  sa  € ð —+‘+€KØ—‘“€JÜ×3Ñ3°E·K±KÓ@Ðà—K‘KØ¬×)@Ñ)@ð  ó €Mð —‘Ð+¼5×;RÑ;R�ÓS€Jð Ðð 	�	‰	Ð#´5×3JÑ3Jˆ	ÔKàð ð
 ÐÜÐ?Ó@Ð@àœÐ,Ó-Ñ-€DØ˜T˜UÐ#€JØ˜U˜dÐ#€JØ#%ÐØ#%ÐÜ�:Óò (ˆØ�Š9Ø×$Ñ$ QÕ'à×$Ñ$ QÕ'ð	(ô 	ˆZÓ€AÜˆZÓ€AÝDá�a˜1‘fÔ¡°°Q±Ô!7à,7¸ªNˆE�O‰O˜KÔ(ÀØ3>¸q²>ˆE�O‰O˜K¨¨Ð.Ó/ð
ð 	
àGKð
ð 	
ô
 ˜T :§>¡>Ó#3Ó4€DØÐØ" [Ñ0‰
à"ˆ
à!€GØ"€Hà˜Ñ€Eà�1‚~Ü—)‘)˜E JÑ.Ð4EÈtÔTˆØ ¨¡¨gÑ 5Ñ5¸Ñ=ˆà�1‚~˜+Ð1Ø+¨eÑ3ÐÜÐ Ó! AÒ%Ü—y‘yØ#Ð):ÀEô‰Hð +ˆHô 	�G˜UŸ[™[Ó)Ü�H˜eŸk™kÓ*ðð r+   Úrunning_meanÚrunning_varÚmomentumÚ
functionalc	                 óD  — dgt        t        d| j                  «       «      «      z   }	t        j                  | j
                  «      }
|}|}|�r"t        j                  | j
                  «      }
| j                  |
¬«      }t        j                  ||	dd¬«      \  }}t        j                  ||z   «      }| |z
  |z  }t        j                  ||	«      }t        j                  ||	«      }|�!||z  d|z
  |z  z   }|s|j                  |«       |��;| j                  «       | j                  d   z  }t        j                  ||	«      }|||dz
  z  z  }||z  d|z
  |z  z   }|sê|j                  |«       nØ|�|€t        d«      ‚|j                  |
d¬«      }|}|j                  |
d¬«      }|}|}dt        j                  ||z   «      z  }| j                   j"                  d	k7  r|}|}n"| j%                  d
«      }| j%                  d
«      }t'        || j                  «       dz
  «      }t'        || j                  «       dz
  «      }| |z
  |z  }|�2|j)                  «       }t'        || j                  «       dz
  «      }||z  }|�2|j)                  «       }t'        || j                  «       dz
  «      }||z   }| j                   j"                  d	k(  r8|j                  | j
                  ¬«      }|j                  | j
                  ¬«      }|j                  | j
                  ¬«      ||||fS )Nr   r#   rè   T)rO   Ú
correctionr  r"   z:running_mean and running_var must not be None in eval mode)ré   r…   rÔ  ©r   )ry  rT   rO   rD   r   ré   r8   r?   Úvar_meanr5  r   Úcopy_rß   r  r0  rd  r”  r×  rq  rW   r@  )rÀ   rÎ   r  rG  rH  rØ   rI  rh  rJ  Úreduction_dimsr:   Únew_running_meanÚnew_running_varÚ	input_accÚ
biased_varrõ   rø  r°  Ú	save_meanÚ	save_rstdÚnÚsqueezed_varÚunbiased_varÚinvstds                           r,   Únative_batch_norm_helperr[    s  € ð �Sœ4¤ a¨¯©«Ó 5Ó6Ñ6€NÜ×3Ñ3°E·K±KÓ@ÐØ#ÐØ!€OÚÜ!×7Ñ7¸¿¹ÓDÐØ—H‘HÐ#4�HÓ5ˆ	Ü Ÿ>™>Ø˜>°aÀô
Ñˆ
�Dô �{‰{˜:¨Ñ+Ó,ˆà˜$‘, $Ñ&ˆä—M‘M $¨Ó7ˆ	Ü—M‘M $¨Ó7ˆ	ØÐ#Ø'¨)Ñ3°q¸8±|À|Ñ6SÑSÐÙØ×"Ñ"Ð#3Ô4ØÑ"Ø—‘“ §¡¨A¡Ñ.ˆAô !Ÿ=™=¨°^ÓDˆLØ'¨1°°A±©;Ñ7ˆLØ&¨Ñ5¸¸X¹ÈÑ8TÑTˆOÙØ×!Ñ! /Õ2àÐ ;Ð#6Ü ØLóð ð $—‘Ð->ÀT�ÓJˆØ'ÐØ!—n‘nÐ+<À4�nÓHˆØ%ˆØˆØ”e—j‘j ¨sÑ!2Ó3Ñ4ˆà�<‰<×Ñ Ò%Ø$ˆIØ‰IàŸ™¨Ó-ˆIØŸ™¨Ó-ˆIÜ   u§y¡y£{°Q¡Ó7ˆÜ" 6¨5¯9©9«;¸©?Ó;ˆØ˜$‘, &Ñ(ˆàÐØ—‘Ó!ˆÜ" 6¨5¯9©9«;¸©?Ó;ˆØ˜&‘ˆàÐØ�|‰|‹~ˆÜ   u§y¡y£{°Q¡Ó7ˆØ˜$‘ˆà‡|�|×Ñ˜EÒ!Ø—L‘L u§{¡{�LÓ3ˆ	Ø—L‘L u§{¡{�LÓ3ˆ	à�	‰	˜Ÿ™ˆ	Ó$ØØØØðð r+   rU  Úsave_invstdc                 ó>   — t        | |||||||d«	      \  }}	}
}}||	|
fS ©NF©r[  ©rÀ   rÎ   r  rG  rH  rØ   rI  rh  r°  rU  rV  rV   s               r,   Únative_batch_normra  r  s=   € ô *BØˆv�t˜\¨;¸À(ÈCÐQVó*Ñ&€FˆI�y ! Qð �9˜iÐ'Ð'r+   c           
      óä   — |€|€t         j                  | |||||«      S |€t        d«      ‚|€t        d«      ‚|rt         j                  | |||||||«      S t         j                  | ||||||«      S )Nz`running_mean is None, but running_var is provided. They should both be None or both be provided.z`running_var is None, but running_mean is provided. They should both be None or both be provided.)r„   Ú_native_batch_norm_legitrx  Ú$_native_batch_norm_legit_no_training)rÀ   rÎ   r  rG  rH  rØ   rI  rh  s           r,   Únative_batch_norm_decompositionre  Ž  s±   € ð Ð Ð 3Ü×,Ñ,Ø�6˜4 ¨8°Só
ð 	
ð ÐÜð<ó
ð 	
ð ÐÜð<ó
ð 	
ñ ä×,Ñ,Ø�6˜4 ¨{¸HÀhÐPSó
ð 	
ô ×8Ñ8Ø�6˜4 ¨{¸HÀcó
ð 	
r+   c                 ó~  — | j                  |«      }||z   dz
  |z  }|dk(  rc|dk(  r^t        |«      D �cg c]  }|‘Œ }}|||z  |z
  z
  ||dz
  <   t        j                  j                  j
                  j                  | ||«      S t        j                  j                  j                  j                  | ||«      S c c}w ©Nr"   r   )	r2  rT   r?   r6  r„   rË  rŒ  rÉ  r   )r§  rÑ  rO   r�  rÇ  rV   rÀ  s          r,   Úunsafe_chunk_py_implrh  ³  s±   € à�{‰{˜3Ó€HØ˜VÑ# aÑ'¨FÑ2€Jà�Q‚˜8 qš=Ü+0°«=Ö9 a’zÐ9ˆÐ9Ø",°
¸VÑ0CÀhÑ0NÑ"Oˆ�F˜Q‘JÑÜ�y‰y�~‰~×5Ñ5×=Ñ=¸fÀkÐSVÓWÐWÜ�9‰9�>‰>×&Ñ&×-Ñ-¨f°jÀ#ÓFÐFùò :s   ´	B:c           
      óN   — t         j                  j                  | ||||d||«      S r^  )r„   rc  rŒ  )rÀ   rÎ   r  rG  rH  rI  rh  s          r,   rd  rd  ¿  s5   € ô ×(Ñ(×0Ñ0ØØØØØØØØó	ð 	r+   c                 ó>   — t        | |||||||d«	      \  }}	}
}}||	|
fS r^  r_  r`  s               r,   rc  rc  Õ  s=   € ô *BØˆv�t˜\¨;¸À(ÈCÐQVó*Ñ&€FˆI�y ! Qð �9˜iÐ'Ð'r+   c                 ó>   — t        | ||d d |||d«	      \  }}}}	}	|||fS r^  r_  )
rÀ   rÎ   r  rØ   rI  rh  r°  rU  rV  rV   s
             r,   Ú!_native_batch_norm_legit_no_statsrl  æ  s<   € ô *BØˆv�t˜T 4¨°8¸SÀ%ó*Ñ&€FˆI�y ! Qð �9˜iÐ'Ð'r+   c                 óv   — t        | |||||||d«	      \  }}	}
}}|€t        d«      ‚|€t        d«      ‚||	|
||fS )NTú#new_running_mean should not be Noneú"new_running_var should not be None)r[  r0  )rÀ   rÎ   r  rG  rH  rØ   rI  rh  r°  rU  rV  rQ  rR  s                r,   Ú#_native_batch_norm_legit_functionalrp  õ  sl   € ô" 	!Øˆv�t˜\¨;¸À(ÈCÐQUó	ñØØØØØð ÐÜÐBÓCÐCØÐÜÐAÓBÐBØ�9˜iÐ)9¸?ÐJÐJr+   c           	      óT  — t         j                  j                  | ||||d|«      }d}|t         j                  j                  j                  k(  r t         j                  j                  | |«      }t        j                  |t         j                  | j                  | j                  ¬«      S )a©  
    Return a reserve tensor for batch norm, used only by cudnn to pass forward state to the
    backward pass. This is needed for `_batch_norm_with_update` and `_batch_norm_no_update`,
    which support a variety of backends including cudnn. We create this tensor here to get
    the correct shape in the traced graph if we detect that will call the cudnn kernel,
    and rely on DCE to avoid materializing this tensor.
    Tr   )ré   Úlayoutr”  )
r?   Ú_CÚ_select_batch_norm_backendÚ_BatchNormBackendÚCudnnÚ(_get_cudnn_batch_norm_reserve_space_sizeÚemptyÚuint8rr  r”  )	rÀ   rÎ   r  rG  rH  rh  rØ   ÚbackendÚreserve_sizes	            r,   Ú_get_batch_norm_reserve_tensorr|  	  s‡   € ô  �h‰h×1Ñ1Øˆv�t˜\¨;¸¸có€Gð €LØ”%—(‘(×,Ñ,×2Ñ2Ò2Ü—x‘x×HÑHØ�8ó
ˆô �;‰;ØœEŸK™K°·±ÀUÇ\Á\ôð r+   c                 ód   — t        | ||||d||d«	      \  }}}	}
}
t        | |||||d¬«      }|||	|fS )NTF©rØ   ©r[  r|  ©rÀ   rÎ   r  rG  rH  rI  rh  r°  rU  rV  rV   Úreserves               r,   Ú_batch_norm_with_updater‚  -	  sa   € ô *BØØØØØØØØØó
*Ñ&€FˆI�y ! Qô -Øˆv�t˜\¨;¸Àdô€Gð �9˜i¨Ð0Ð0r+   c                 óœ   — t        | ||||d||d«	      \  }}}	}
}t        | |||||d¬«      }|
€t        d«      ‚|€t        d«      ‚|||	||
|fS )NTr~  rn  ro  )r[  r|  r0  )rÀ   rÎ   r  rG  rH  rI  rh  r°  rU  rV  Únew_rmÚnew_rvr�  s                r,   Ú"_batch_norm_with_update_functionalr†  H	  s…   € ô  	!Øˆv�t˜\¨;¸¸hÈÈTó	ñØØØØØô -Øˆv�t˜\¨;¸Àdô€Gð €~ÜÐBÓCÐCØ€~ÜÐAÓBÐBØ�I˜y¨'°6¸6ÐBÐBr+   c                 ód   — t        | ||||d||d«	      \  }}}	}
}
t        | |||||d¬«      }|||	|fS )NFr~  r  r€  s               r,   Ú_batch_norm_no_updaterˆ  e	  sa   € ô *BØØØØØØØØØó
*Ñ&€FˆI�y ! Qô -Øˆv�t˜\¨;¸Àeô€Gð �9˜i¨Ð0Ð0r+   c                 ó²  — |�t        d|› �«      ‚t        j                  | t        j                  j                  ¬«      \  }}| j                  |«      }t        j                  |«      |k  j                  t        j                  ¬«      }t        j                  d|| j                  ¬«      |z  }|j                  |«      |z  |z  }|j                  |«      |fS )Nz=generator must be None for _fused_dropout decomposition, got r|  rè   rg   r¹  )r0  rD   rE   r  r€  r8   r?   rv  ry  Úscalar_tensorr”  )	rÀ   rV  Ú	generatorr:   r=   rS  r¡  rn   rx  s	            r,   Ú_fused_dropout_decompositionrŒ  €	  sÌ   € ð ÐÜØKÈIÈ;ÐWó
ð 	
ô ',×&>Ñ&>Ø¤5×#HÑ#H×#PÑ#Pô'Ñ#Ð�|ð —‘Ð*Ó+€IÜ�O‰O˜IÓ&¨Ñ*×.Ñ.´U·[±[Ð.ÓA€DÜ×Ñ Ð+<ÀUÇ\Á\ÔRÐUVÑV€EØ
�'‰'Ð#Ó
$ yÑ
0°5Ñ
8€CØ�F‰F�<Ó  $Ð'Ð'r+   )ré   rr  r”  Ú
pin_memoryÚnon_blockingr]  r”  r�  rŽ  r]  c                ó‚  — |r!|t         j                  k7  rt        d|› �«      ‚|rt        d«      ‚t        | t         j                  t
        t        t        t        f«      s!t        dt        | «      j                  › �«      ‚|€0|€.|€,t        | t         j                  «      r| j                  «       S | S d}t        | t         j                  «      r| }nt        j                  | «      }|�—||j                  k7  rˆ|�ed}	|j                  dk(  rd}	n-|j                  t         j                  k(  rddlm}
  |
|«      sd}	|	r"t         j$                  j'                  ||«      }d}t         j$                  j)                  |||«      }|�$|s"t         j$                  j'                  ||«      }d}|�t        j                  ||¬	«      S |S )
Nz*layout must be None or torch.strided, got z:pin_memory=True is not supported in _to_copy decompositionz x must be Tensor or scalar, got FrÔ  Tr   )Údevice_supports_fp64r\  )r?   Ústridedr0  r7   r   r�  r  rš  Úcomplexr×  r$   r—  rŠ  r”  ré   rý   Útorch._inductor.utilsr�  Ú_primsÚconvert_element_typeÚ
device_put)r9   ré   rr  r”  r�  rŽ  r]  Údtype_convertedÚx_tensorÚconvert_before_transferr�  s              r,   Ú_to_copyrš  ‘	  s’  € ñ �&œEŸM™MÒ)ÜÐIÈ&ÈÐRÓSÐSÙÜØHó
ð 	
ô �aœ%Ÿ,™,¬¬U´D¼'ÐBÔCÜÐ?ÄÀQÃ×@PÑ@PÐ?QÐRÓSÐSØ€~˜%˜-¨MÐ,AÜ�aœŸ™Ô&Ø—7‘7“9ÐàˆHØ€Oä�!”U—\‘\Ô"Ø‰ä×&Ñ& qÓ)ˆàÐ˜f¨¯©Ò7ð ÐØ&+Ð#Ø�{‰{˜eÒ#ð +/Ñ'Ø—‘¤5§=¡=Ò0õ
 Gá+¨FÔ3Ø.2Ð+á&Ü Ÿ<™<×<Ñ<¸XÀuÓM�Ø"&�Ü—<‘<×*Ñ*¨8°V¸\ÓJˆàÐ¡Ü—<‘<×4Ñ4°X¸uÓEˆØˆàÐ Ü�{‰{˜8°=ÔAÐAØ€Or+   c                 ó,   — t         j                  | «      S r5   )r„   Úalias)r9   s    r,   Únop_decompositionr�  Ú	  s   € ô �:‰:�a‹=Ðr+   Úout3Úexponential_average_factorÚepsilonc           
      ó  — t         j                  | |||||||«      \  }}	}
|r%||	|
| j                  dt        j                  ¬«      fS ||j                  d«      |j                  d«      | j                  dt        j                  ¬«      fS )NrM  rè   )r„   ra  rq  r?   ry  )rÀ   rÎ   r  rG  rH  rØ   rŸ  r   rN  rO  rõ  s              r,   Úcudnn_batch_normr¢  â	  s”   € ô ×$Ñ$ØØØØØØØ"Øó	�G€A€qˆ!ñ Ø�1�a˜Ÿ™¨´U·[±[˜ÓAÐBÐBà	Ø×Ñ˜ÓØ×Ñ˜ÓØ�‰˜¤E§K¡KˆÓ0ð	ð r+   c                 óž   — t        |«      D ]>  \  }}|dk(  sŒ|| j                  k  r| j                  |   |k(  rŒ.| j                  |«      } Œ@ | S r\   )rH  r�  r  rU   )r9   Úbroadcast_maskr'  r¡  s       r,   Ú_broadcast_batch_norm_backwardr¥  
  sO   € Ü Ó/ò "‰
ˆˆdØ�1‹9˜d Q§V¡Všm°·±¸±ÀÓ0EØ—‘˜DÓ!‰Að"ð €Hr+   r�  c                 ó*   — t        | |||||||||	«
      S r5   )Únative_batch_norm_backward)r  rÀ   rÎ   rG  rH  rU  r\  rn  rh  rþ  r�  s              r,   Úbatch_norm_backwardr¨  
  s/   € ô &ØØØØØØØØØØóð r+   c
                 ó  ‡&— |j                   }
|�|j                   }n|
}t        j                  |j                   «      Š&ˆ&fd„| ||||||fD «       \  }}}}}}}|j                  }|j	                  «       }|dk  rt        d|› �«      ‚d}t        t        |«      «      ||   z  }|}|}|r|�|€4t        d«      ‚|�|€t        d«      ‚|}t        j                  ||z   «      }dg|z  }||   ||<   g }t        |«      D ]  }||k7  sŒ	|j                  |«       Œ t        ||«      }d|z  }t        j                  ||«      }t        j                  |||z
  z  |«      }t        ||z  |«      }t        t        j                  ||z  ||z  «      |«      } |€t        ||«      dz  }!nt        ||z  |«      }!|r||z
  | z  }"||"z
  |z
  |!z  }#n||!z  }#|	d   r||z  }$nd }$|	d   r|}%nd }%|#j                  |
«      t!        |$|«      t!        |%|«      fS )Nc              3   óH   •K  — | ]  }|�|j                  ‰«      n|–— Œ y ­wr5   r  r  s     €r,   rÓ  z-native_batch_norm_backward.<locals>.<genexpr>B
  s,   øè ø€ ò 	àð $% =ˆ�‰ÐÔ°aÓ7ñ	ùs   ƒ"r#   z*rank of the input must be at least 2, got r"   z1mean and invstd must not be None in training modezDrunning_mean_cast and running_var_cast must not be None in eval moderg   )ré   rD   r   r  rO   r0  r*  ry  r?   r5  rT   r¥  r¥  rö   rÛ   r8   r  )'r  rÀ   rÎ   rG  rH  rU  r\  rn  rh  rþ  r­  Úweight_dtyper#  r$  r%  Úrunning_mean_castÚrunning_var_castÚsave_mean_castÚsave_invstd_castr!  Ú
input_rankr'  Únum_featuresrõ   rZ  r¤  Úreduction_axesrŸ  r  Úgrad_output_sumÚdot_pÚ	grad_meanÚ
proj_scaleÚ
grad_scaleÚprojrX   rœ  Ú	grad_biasr:   s'                                         @r,   r§  r§  '
  s�  ø€ ð —+‘+€KØÐØ—|‘|‰à"ˆÜ×3Ñ3°E·K±KÓ@Ðó	ð ØØØØØØð
ô	ñØØØØØØØð —+‘+€KØ—‘“€JØ�A‚~ÜÐIÈ*ÈÐVÓWÐWà€DÜœ˜[Ó)Ó*¨[¸Ñ->Ñ>€LØ€DØ€FÙØˆ<˜6˜>Ü Ð!TÓUÐUð Ð$Ð(8Ð(@Ü ØVóð ð !ˆÜ—‘Ð-°Ñ3Ó4ˆà!"  jÑ 0€NØ& tÑ,€N�4Ñà "€NÜ�:Óò %ˆØ�‹9Ø×!Ñ! !Õ$ð%ô *¨$°Ó?€DØ�Ñ€DÜ—i‘i ¨~Ó>€OÜ�I‰I�m z°DÑ'8Ñ9¸>ÓJ€Eä.¨ÀÑ/EÀ~ÓV€IÜ/Ü�	‰	�%˜$‘, ¨¡Ó0Øó€Jð
 ÐÜ3°F¸NÓKÈcÑQ‰
ä3Ø�[Ñ  .ó
ˆ
ñ Ø˜TÑ! ZÑ/ˆØ$ tÑ+¨yÑ8¸JÑF‰
à" ZÑ/ˆ
à�1‚~Ø˜f‘n‰àˆà�1‚~Ø#‰	àˆ	ð 	�‰�kÓ"Ü�K Ó.Ü�I˜|Ó,ðð r+   c
                ó¸   — t        | |||||||||	«
      }|
||f}t        |«      D ]2  \  }}|€Œ	t        ||   |j                  «       t	        |||   d¬«       Œ4 |S r  )r§  rH  r   r  r   )r  rÀ   rÎ   rG  rH  rU  r\  rn  rh  rþ  rr  rs  r  r  rX   rŸ  rJ   s                    r,   Únative_batch_norm_backward_outr»  •
  sƒ   € ô" (ØØØØØØØØØØó€Fð ˜˜dÐ#€JÜ˜&Ó!ò Q‰ˆˆ1Ø‰=Ü˜j¨™m¨Q¯W©WÔ5Ü Q°
¸1±È4ÖPðQð
 Ðr+   Úsave_varc                 óB   — t         j                  || |||||d|g d¢«
      S ©NT)TTT©r„   r§  )rÀ   rl   rÎ   rG  rH  rU  r¼  r   s           r,   Úmiopen_batch_norm_backwardrÀ  »
  s5   € ô ×*Ñ*ØØØØØØØØØÚóð r+   ÚreserveSpacec	                 óB   — t         j                  || |||||d|g d¢«
      S r¾  r¿  )	rÀ   rl   rÎ   rG  rH  rU  r¼  r   rÁ  s	            r,   Úcudnn_batch_norm_backwardrÃ  Õ
  s5   € ô ×*Ñ*ØØØØØØØØØÚóð r+   c                 óÊ  ‡‡‡‡‡— | j                   Š| j                  Št        ‰«      Št        j                  ‰dv ˆfd„«       | j                  dd  D ]  }t        j                  |dk7  ˆfd„«       Œ  ‰d   |d   z  dk(  rx‰d   |d   z  dk(  rjt        d„ t        ‰dd  |«      D «       «      }t        d„ t        ‰dd  ||«      D «       «      }t        j                  j                  j                  | ||«      S d	„ Šd
„ Šˆˆˆfd„} |‰d   |d   «      \  }}}}	 |‰d   |d   «      \  }
}}}| dt        |d«      |
f   }|	s|st        j                  |d¬«      S d„ } |||||	d¬«      \  }} |||||d¬«      \  }}d }t        t        |j                  d   «      t        |j                  d   «      «      D ]!  \  }}|€|d|d d …|f   }Œ||d|d d …|f   z   }Œ# |||z  z  S )Nrå  c                  ó   •— d‰ › �S )Nz9adaptive_avg_pool2d(): Expected 3D or 4D tensor, but got r*   r­  s   €r,   r‚   z%adaptive_avg_pool2d.<locals>.<lambda>ú
  s   ø€ ÐKÈDÈ6ÐR€ r+   r^  r   c                  ó"   •— dt        ‰ «      › d�S )Nzjadaptive_avg_pool2d(): Expected input to have non-zero size for non-batch dimensions, but input has shape r#  rë  rí  s   €r,   r‚   z%adaptive_avg_pool2d.<locals>.<lambda>ÿ
  s   ø€ ð 9Ü9>¸u»¸ÀaðI€ r+   rS   c              3   ó,   K  — | ]  \  }}||z  –— Œ y ­wr5   r*   )rÒ  rŸ  r2  s      r,   rÓ  z&adaptive_avg_pool2d.<locals>.<genexpr>  s   è ø€ ÒG¡$ ! Q�q˜A•vÑGùó   ‚c              3   ó:   K  — | ]  \  }}}||d z
  |z  z
  –— Œ y­w©r"   Nr*   )rÒ  rŸ  r2  rÄ  s       r,   rÓ  z&adaptive_avg_pool2d.<locals>.<genexpr>  s'   è ø€ ò 
Ù '  1 aˆA��Q‘˜!‘�Oñ
ùs   ‚c                 ó8   — t        j                  | |z  |d¬«      S )NÚtrunc©Úrounding_mode©r?   Údiv©rN  rO  rõ  s      r,   Ústart_indexz(adaptive_avg_pool2d.<locals>.start_index  s   € Ü�y‰y˜˜Q™ °Ô9Ð9r+   c                 óJ   — t        j                  | dz   |z  |z   dz
  |d¬«      S )Nr"   rÌ  rÍ  rÏ  rÑ  s      r,   Ú	end_indexz&adaptive_avg_pool2d.<locals>.end_index  s&   € Ü�y‰y˜!˜a™% 1™ q™¨1Ñ,¨a¸wÔGÐGr+   c                 óô  •— t        j                  |‰t         j                  ¬«      } ‰||| «      }| |z  dz   }| |z  }|dk(  xs ||z  dk(   }|r|dz  }n
|dk(  r|dz  }t        j                  |‰t         j                  ¬«      }|j                  d«      |z   }|rUt        j                  | dz
  |j
                  |j                  ¬«      }	t        j                  ||	«      } ‰||| «      }
|
|z
  }n|}||||fS )Nr•  r"   r   rS   r¹  )r?   r˜  rº  rU   rŠ  ré   r”  Úminimum)Úin_sizeÚout_sizeÚorangeÚi0Ú	maxlengthÚin_size_modÚadaptiveÚ	range_maxr   ÚmaxvalÚi1Úlengthr”  rÔ  rÒ  s               €€€r,   Úcompute_idxz(adaptive_avg_pool2d.<locals>.compute_idx  s  ø€ Ü—‘˜h¨v¼U¿[¹[ÔIˆÙ˜ ¨7Ó3ˆð ˜xÑ'¨!Ñ+ˆ	Ø Ñ(ˆà# qÑ(ÒG¨H°{Ñ,BÀaÑ,GÐHˆÙØ˜‰N‰IØ˜AÒØ˜‰NˆIä—L‘L °6ÄÇÁÔMˆ	Ø�l‰l˜2Ó Ñ*ˆÙô ×(Ñ(Ø˜!‘ 3§9¡9°S·Z±ZôˆFô —-‘-  VÓ,ˆCñ ˜6 8¨WÓ5ˆBØ˜"‘W‰FàˆFØ�F˜I xÐ/Ð/r+   .rH  )rŸ   rS   r€   c                 óê   — t        |t        «      r| |fS |dk\  rt        d|› �«      ‚||j                  d«      k\  }|dk(  rt	        |d«      }t        j                  | |d«      } t	        || «      }| |fS )Nr   z)dim should be negative when masking, got rS   r^  rH  r”   )r7   r   r0  rU   rW   r?   Úmasked_fill)Úvalsrá  rÞ  rÝ  rO   r¡  s         r,   Ú
maybe_maskz'adaptive_avg_pool2d.<locals>.maybe_mask9  sˆ   € Ü�fœgÔ&Ø˜�<Ðð �aŠxÜ$Ð'PÐQTÐPUÐ%VÓWÐWà × 0Ñ 0°Ó 4Ñ4ˆDØ�bŠyÜ(¨¨qÓ1�Ü×$Ñ$ T¨4°Ó5ˆDä& v°¨tÓ4ˆFØ˜�<Ðr+   )rÝ  rO   rŸ   )r”  r  r†  r?   rƒ   rì  rþ  ÚnnrJ  Ú
avg_pool2drW   rõ   r
   rT   )rÀ   rû  rè  rz  Úkernelrâ  ÚidxhÚlength_hÚrange_max_hÚ
adaptive_hÚidxwÚlength_wÚrange_max_wÚ
adaptive_wrå  ræ  ÚretrŸ  Újr”  rÔ  r�  r  rÒ  s                      @@@@@r,   Úadaptive_avg_pool2drô  ð
  s.  ü€ ð
 �\‰\€FØ�K‰K€EÜˆu‹:€DÜ	‡L�LØ�ˆÛRôð �[‰[˜˜Ðò 
ˆÜ�‰Ø�‰FóIõ	
ð
ð ˆR�y�;˜r‘?Ñ" aÒ'¨E°"©I¸ÀB¹Ñ,GÈ1Ò,LÜÑG¬#¨e°B°C¨j¸+Ó*FÔGÓGˆÜñ 
Ü+.¨u°R°S¨z¸;ÈÓ+Oô
ó 
ˆô �x‰x×"Ñ"×-Ñ-¨e°V¸VÓDÐDò:òHö0ñ@ /:¸%À¹)À[ÐQSÁ_Ó.UÑ+€Dˆ(�K Ù.9¸%À¹)À[ÐQSÁ_Ó.UÑ+€Dˆ(�K à�Ô'¨¨aÓ0°$Ð6Ñ7€Dá™jÜ�z‰z˜$ HÔ-Ð-ò ñ   Øˆh˜¨j¸bô�N€Dˆ(ñ  Øˆh˜¨j¸bô�N€Dˆ(ð
 €CÜœ˜dŸj™j¨™nÓ-¬u°T·Z±ZÀ±^Ó/DÓEò +‰ˆˆ1Øˆ;Ø�s˜Ašq !�|Ñ$‰Cà˜˜S !¢Q¨˜\Ñ*Ñ*‰Cð	+ð
 �(˜XÑ%Ñ&Ð&r+   Ú	ceil_modeÚn_dimc                 óÊ
  ‡ ‡— ddt         t           t        z  dt         t           d z  dt         t           fˆfd„} ||«      } |||¬«      }	 ||«      }
 ||«      }t        j                  ‰ j                  ‰dz   ‰dz   fv ˆˆ fd„«       ‰ j                  ‰dz   k(  }|s‰ j                  d	«      Š t        ‰ j                  ‰ d  «      }‰ j                  }t        ‰«      D �cg c]5  }t        j                  j                  ||   ||   |
|   |	|   ||   |«      ‘Œ7 }}‰ j                  }d
}|t        j                  u rd}nÈ|j                  rt        d«      }n°t        j                  |«      }|j                   dk  r ‰ j#                  t        j$                  «      Š n.|j                   dk  r‰ j#                  t        j&                  «      Š |j                   dk  rt        |j(                  dz
  «      nt        |j(                  «      }d}g }t+        t        ‰«      «      D ][  }|
|   }||   dz
  |	|   z  ||   dz
  ||   z  z   dz   }t-        d	|||   d|
|   z  z   z
  «      |
|   z   }|j/                  ||g«       Œ] t1        j2                  ‰ ||¬«      }g }t        ‰«      D ]Á  }t        j4                  ||   |t        j&                  ¬«      j                  d«      |	|   z  t        j4                  ||   |t        j&                  ¬«      j                  d	«      ||   z  z   }dgd‰z  z  }||   |d|z  <   ||   |d|z  dz   <   |j7                  |j9                  |«      «       ŒÃ |t:        g|¢­   }d}t        t        |«      «      }|t        ‰«      D �cg c]
  }|d|z  z   ‘Œ c}z  }|t        ‰«      D �cg c]  }|d|z  z   dz   ‘Œ c}z  }|j=                  |«      }t        |j                  d |‰z    «      }  |j8                  g | ¢d‘­Ž }|j-                  d¬«      \  }!}"g }#|"}$t        ‰«      D ]9  }d}%t        |dz   ‰«      D ]
  }&|%||&   z  }%Œ |#j7                  |$|%z  «       |$|%z  }$Œ; g }'t        ‰«      D ]w  }dg|‰z   z  }||   |||z   <   t        j4                  ||   |t        j&                  ¬«      j9                  |«      }(|'j7                  |(|	|   z  |#|   ||   z  z   |
|   z
  «       Œy |'d	   })t        d‰«      D ]  }|)||   z  |'|   z   })Œ |r|!j#                  |«      }!|s"|!j?                  d	«      }!|)j?                  d	«      })|!|)fS c c}w c c}w c c}w )Nr‹  rŒ  rP   c                 ó²   •— t        | t        t        f«      s| g‰z  S | st        j                  |d ud„ «       |S t        | «      dk(  r| ‰z  S t        | «      S )Nc                   ó   — y)Nzdefault must be providedr*   r*   r+   r,   r‚   z<_max_pool_nd_with_indices.<locals>._expand.<locals>.<lambda>g  rÊ  r+   r"   )r7   ry  rì  r?   rƒ   r†  )r‹  rŒ  rö  s     €r,   Ú_expandz*_max_pool_nd_with_indices.<locals>._expandc  sV   ø€ Ü˜#¤¤e˜}Ô-Ø�5˜5‘=Ð ÙÜ�L‰L˜¨Ð,Ñ.PÔQØˆNÜ! #›h¨!šmˆs�U‰{Ð:´°c³Ð:r+   )rŒ  r"   r#   c                  ó<   •— d‰ dz   › d‰ dz   › d‰j                   › d�S )Nz	Expected r"   úD or r#   zD input, got r?  r­  )rö  r{   s   €€r,   r‚   z+_max_pool_nd_with_indices.<locals>.<lambda>r  s(   ø€ �)˜E A™I˜; e¨E°A©I¨;°mÀDÇIÁIÀ;ÈaÐP€ r+   r   Fr”   r  é    é@   Tr�   r•  rS   r€   r5   ) ry  r�  r?   rƒ   r�  rU   r  r”  rT   Ú_meta_registrationsÚpooling_output_shaperé   rš  ru  r  ÚiinfoÚbitsr8   r>  rº  r‹   r_  rŽ   ÚextendrÂ   rð  r˜  r¥  r*  ÚEllipsisrÿ  r   )*r{   rÅ  rz  rÇ  rÆ  rõ  rö  rú  Úksró  ÚpaÚdiÚ
is_batchedrl  r”  rè  Úoutput_sizesré   ÚpromotedÚ
fill_valueÚinfoÚpad_argsr¶   Úneededr·   r9   Úidx_tensorsr   r  ÚwindowsÚn_batchÚpermÚ	out_shapeÚvaluesÚlocal_argmaxÚ
kernel_posÚ	remainingÚdivisorÚddÚorig_coordsÚout_posÚflat_indicess*   `     `                                   r,   Ú_max_pool_nd_with_indicesr  Z  s—  ù€ ñ;”Tœ#‘Y¤‘_ð ;¬t´C©y¸4Ñ/?ð ;Ì4ÔPSÉ9õ ;ñ 
�Ó	€BÙ	� Ô	$€BÙ	�Ó	€BÙ	�Ó	€Bä	‡L�LØ�	‰	�e˜a‘i ¨¡Ð+Ð+ÜPôð
 —‘˜e a™iÑ'€JÙØ�~‰~˜aÓ ˆä�t—z‘z 5 & 'Ð*Ó+€KØ�[‰[€Fô �u“ö	ð ô 	×!Ñ!×6Ñ6Ø˜‰N˜B˜q™E 2 a¡5¨"¨Q©%°°A±¸	õ	
ð€Lð ð �J‰J€EØ€HØ”—
‘
ÑØ‰
Ø	×	 Ò	 Ü˜6“]‰
ä�{‰{˜5Ó!ˆØ�9‰9�rŠ>Ø—7‘7œ5Ÿ;™;Ó'‰DØ�Y‰Y˜Š^Ø—7‘7œ5Ÿ;™;Ó'ˆDØ,0¯I©I¸ªN”U˜4Ÿ8™8 a™<Ô(ÄÀdÇhÁhÃˆ
Øˆð €HÜ”e˜E“lÓ#ò 'ˆØ�!‰uˆØ˜q‘/ AÑ%¨¨A©Ñ.°"°Q±%¸!±)¸rÀ!¹uÑ1DÑDÀqÑHˆÜ�A�v ¨Q¡°!°b¸±e±)Ñ!;Ñ<Ó=ÀÀ1ÁÑEˆØ�‰˜˜u˜Õ&ð	'ô
 	
�‰ˆd�H JÔ/€Að
 €KÜ�5‹\ò 	/ˆä�L‰L˜ a™°¼u¿{¹{ÔK×UÑUÐVWÓXØ�‰eñä�l‰l˜2˜a™5¨´u·{±{ÔC×MÑMÈaÓPÐSUÐVWÑSXÑXñYð 	ð
 ��q˜5‘yÑ!ˆØ# A‘ˆˆa�!‰e‰Ø˜a™5ˆˆa�!‰e�a‰iÑØ×Ñ˜3Ÿ;™; uÓ-Õ.ð	/ð ”Ð(˜KÑ(Ñ)€Gð €GÜ”�g“Ó€DØ¤e¨E£lÖ3 ˆW�q˜1‘u‹_Ò3Ñ3€DØ¬%°«,Ö7 QˆW�q˜1‘u‰_˜qÓ Ò7Ñ7€DØ�o‰o˜dÓ#€Gô �W—]‘]Ð#4 W¨u¡_Ð5Ó6€IØˆg�o‰oÐ-˜yÐ-¨"Ò-€GØ"Ÿ;™;¨2˜;Ó.Ñ€FˆLð €JØ€IÜ�5‹\ò (ˆØˆÜ˜˜A™˜uÓ%ò 	ˆBØ�r˜"‘vÑ‰Gð	à×Ñ˜) wÑ.Ô/Ø Ñ'‰	ð(ð €KÜ�5‹\ò LˆØ��w ‘Ñ'ˆØ)¨!™_ˆˆg˜‰kÑÜ—,‘,Ø˜‰O F´%·+±+ô
ç
‰'�%‹.ð 	ð 	×Ñ˜7 R¨¡U™?¨Z¸©]¸RÀ¹UÑ-BÑBÀRÈÁUÑJÕKðLð ˜q‘>€LÜ�1�e‹_ò FˆØ# k°!¡nÑ4°{À1±~ÑE‰ðFñ Ø—‘˜5Ó!ˆáØ—‘ Ó"ˆØ#×+Ñ+¨AÓ.ˆà�<ÐÐùòCùòr 4ùÚ7s   Ã":UÎUÎ9U c           	      ó&   — t        | |||||d¬«      S )Nr#   ©rö  ©r  ©r{   rÅ  rz  rÇ  rÆ  rõ  s         r,   Úmax_pool2d_with_indicesr"  à  ó    € ô %Øˆk˜6 7¨H°iÀqôð r+   c           	      ó&   — t        | |||||d¬«      S )Nr‰   r  r   r!  s         r,   Úmax_pool3d_with_indicesr%  ï  r#  r+   c                 ó  ‡ ‡
‡— ‰ j                   Št        j                  ‰dv ˆfd„«       t        d‰«      D ].  Š
t        j                  ‰ j	                  ‰
«      dkD  ˆ
ˆ fd„«       Œ0 ‰ j
                  d   }‰ j
                  d   }|\  }}|dk(  s|dk(  rOt        ‰ j
                  d d «      ||gz   }‰ j                  |«      ‰ j                  |t        j                  ¬«      fS |dk(  re|dk(  r`t        j                  ‰ d	d
¬«      }t        j                  ‰ j                  d«      d¬«      j                  d«      j                  d«      }||fS ||z  dk(  r(||z  dk(  r ||z  ||z  g}	t        j                  ‰ |	«      S t        S )Nrå  c                  ó   •— d‰ › d�S )Nz9adaptive_max_pool2d(): Expected 3D or 4D tensor, but got r?  r*   r­  s   €r,   r‚   z%adaptive_max_pool2d.<locals>.<lambda>  ó   ø€ ÐKÈDÈ6ÐQRÐS€ r+   r"   r   c                  ó*   •— d‰j                   › d‰ › d�S )Nzjadaptive_max_pool2d(): Expected input to have non-zero size for non-batch dimensions, but input has sizes ú with dimension ú being emptyrí  ©rŸ  rÀ   s   €€r,   r‚   z%adaptive_max_pool2d.<locals>.<lambda>  ó%   ø€ ð'Ø',§{¡{ mÐ3CÀAÀ3ÀlðTð r+   r^  rS   rè   )r^  rS   Tr  r€   )r�  r?   rƒ   rT   r2  r  ry  Ú	new_emptyrº  rˆ  Úargmaxr@  rU   r„   r"  ÚNotImplemented)rÀ   rû  Úh_inÚw_inÚh_outÚw_outÚoutput_shaper  rŸ  rÅ  rŸ  r�  s   `         @@r,   Úadaptive_max_pool2dr6  þ  sy  ú€ ð �:‰:€DÜ	‡L�LØ�ˆÛSôô �1�d‹^ò 
ˆÜ�‰Ø�J‰J�q‹M˜AÑôõ	
ð
ð �;‰;�r‰?€DØ�;‰;�r‰?€DØ�L€Eˆ5ð �‚z�U˜a’ZÜ˜EŸK™K¨¨Ð,Ó-°¸°Ñ>ˆà�O‰O˜LÓ)Ø�O‰O˜L´·±ˆOÓ<ð
ð 	
ð �‚z�e˜q’jÜ—‘˜E x¸Ô>ˆÜ—,‘,˜uŸ}™}¨RÓ0°bÔ9×CÑCÀBÓG×QÑQÐRTÓUˆØ�wˆÐð ˆe�|�qÒ˜T E™\¨QÒ.Ø˜u‘} d¨e¡mÐ4ˆÜ×+Ñ+¨E°;Ó?Ð?ô Ðr+   c                 ót  ‡ ‡‡— ‰ j                   Št        j                  ‰dv ˆfd„«       t        d‰«      D ].  Št        j                  ‰ j	                  ‰«      dkD  ˆˆ fd„«       Œ0 ‰ j
                  d   }‰ j
                  d   }‰ j
                  d   }|\  }}}|dk(  s
|dk(  s|dk(  rPt        ‰ j
                  d d «      |||gz   }‰ j                  |«      ‰ j                  |t        j                  ¬	«      fS |dk(  ry|dk(  rt|dk(  rot        j                  ‰ d
d¬«      }	t        j                  ‰ j                  d«      d¬«      j                  d«      j                  d«      j                  d«      }
|	|
fS ||z  dk(  r4||z  dk(  r,||z  dk(  r$||z  ||z  ||z  g}t        j                  ‰ |«      S t        S )N©rH  rü  c                  ó   •— d‰ › d�S )Nz9adaptive_max_pool3d(): Expected 4D or 5D tensor, but got r?  r*   r­  s   €r,   r‚   z%adaptive_max_pool3d.<locals>.<lambda>8  r(  r+   r"   r   c                  ó*   •— d‰j                   › d‰ › d�S )Nzjadaptive_max_pool3d(): Expected input to have non-zero size for non-batch dimensions, but input has sizes r*  r+  rí  r,  s   €€r,   r‚   z%adaptive_max_pool3d.<locals>.<lambda>=  r-  r+   rŸ   r^  rS   rè   )rŸ   r^  rS   Tr  r€   )r�  r?   rƒ   rT   r2  r  ry  r.  rº  rˆ  r/  r@  rU   r„   r%  r0  )rÀ   rû  Úd_inr1  r2  Úd_outr3  r4  r5  r  rŸ  rÅ  rŸ  r�  s   `           @@r,   Úadaptive_max_pool3dr=  /  s²  ú€ ð �:‰:€DÜ	‡L�LØ�ˆÛSôô �1�d‹^ò 
ˆÜ�‰Ø�J‰J�q‹M˜AÑôõ	
ð
ð �;‰;�r‰?€DØ�;‰;�r‰?€DØ�;‰;�r‰?€DØ%Ñ€Eˆ5�%ð �‚z�U˜a’Z 5¨A¢:Ü˜EŸK™K¨¨Ð,Ó-°¸¸uÐ0EÑEˆà�O‰O˜LÓ)Ø�O‰O˜L´·±ˆOÓ<ð
ð 	
ð �‚z�e˜q’j U¨a¢ZÜ—‘˜E |¸TÔBˆä�L‰L˜Ÿ™ rÓ*°Ô3ß‰Y�r‹]ß‰Y�r‹]ß‰Y�r‹]ð	 	ð �wˆÐð ˆe�|�qÒ˜T E™\¨QÒ.°4¸%±<À1Ò3DØ˜u‘} d¨e¡m°T¸U±]ÐCˆÜ×+Ñ+¨E°;Ó?Ð?ô Ðr+   c                 óD  ‡— t        j                  d‰› d�«       t        |«      D ]$  \  }}t        j                  |dk\  ||fˆfd„	«       Œ& t        | j                  d ‰  «      t        |«      z   }t        d„ |D «       «      r| j                  |«      S t        t        j                  | j                  d ‰  «      }t        t        j                  |«      }dg| j                  z  }	| j                  d ‰  |	d ‰  |t        j                  || j                  ¬«      j!                  |	«      |z  z   j#                  d«      }
| j                  |«      }t        j%                  |j#                  d«      |
g| j#                  d«      d	¬
«      j!                  |j                  «      S )NÚmax_unpoolingÚd_forward_outr   c                 ó   •— d‰› d| › d|› �S )Nr?  zSd(): output_size must contain non-negative spatial dimensions, but got output_size[z]=r*   )rŸ  r2  rO   s     €r,   r‚   z_max_unpoolnd.<locals>.<lambda>t  s%   ø€ Ø ˜uð %;Ø;<¸#¸RÀ¸vðGð r+   c              3   ó&   K  — | ]	  }|d k(  –— Œ y­wrÐ  r*   )rÒ  rÄ  s     r,   rÓ  z _max_unpoolnd.<locals>.<genexpr>z  s   è ø€ Ò
(�aˆ1��6Ñ
(ùrÕ  r"   r“  rS   Fr(  )rD   Úalert_not_deterministicrH  r?   rƒ   ry  r  Úanyrq  r   ÚoperatorrÛ   r�  r„   r˜  r”  rœ  r*  r+  )r{   rŸ  rû  rO   rŸ  r2  r5  ÚncÚhwÚindices_nc_shapeÚindices_flatr°  s      `        r,   Ú_max_unpoolndrJ  g  su  ø€ ô 
×!Ñ! M°#°°mÐ"DÔEÜ˜[Ó)ò 
‰ˆˆ4Ü�‰Ø�A‰IØ˜Tô õ	
ð
ô ˜Ÿ
™
 5 S DÐ)Ó*¬T°+Ó->Ñ>€LÜ
Ñ
(˜<Ô
(Ô(Ø�~‰~˜lÓ+Ð+Ü	”—‘˜dŸj™j¨¨3¨$Ð/Ó	0€BÜ	”—‘˜kÓ	*€BØ�s˜TŸY™Y‘ÐØ"Ÿj™j¨¨3¨$Ð/Ð�U�s�dÐà”$—+‘+˜b¨¯©�+Ó5×:Ñ:Ð;KÓLÈrÑQÑQß�gˆbƒkð ð �^‰^˜LÓ)€FÜ×!Ñ!Ø�‰�rÓ˜\˜N¨D¯L©L¸Ó,<Èð "ó ç
�dˆ6�<‰<Óðr+   c                 ó  ‡ ‡‡‡— t        j                  ‰j                  t         j                  k(  ˆfd„«       t        j                  t	        ‰«      dk(  ˆfd„«       t        j                  ‰ j
                  dv ˆ fd„«       t        j                  ‰ j                  ‰j                  k(  ˆˆ fd„«       t        d‰ j
                  «      D ].  Št        j                  ‰ j                  ‰«      dkD  ˆˆ fd	„«       Œ0 t        ‰ ‰‰d«      S )
Nc                  ó"   •— d‰ j                   › �S )Nz2elements in indices should be type int64 but got: rè   )rŸ  s   €r,   r‚   zmax_unpool2d.<locals>.<lambda>“  s   ø€ ÐDÀWÇ]Á]ÀOÐT€ r+   r#   c                  ó"   •— dt        ‰ «      › d�S )NzMThere should be exactly two elements (height, width) in output_size, but got ú
 elements.©r†  ©rû  s   €r,   r‚   zmax_unpool2d.<locals>.<lambda>—  ó   ø€ ðÜ˜;Ó'Ð(¨
ð4ð r+   rå  c                  ó$   •— d‰ j                   › d�S )NzLInput to max_unpooling2d should be a 3d or 4d Tensor, but got a tensor with ú dimensions.r­  r‘   s   €r,   r‚   zmax_unpool2d.<locals>.<lambda>Ÿ  s   ø€ ð%Ø%)§Y¡Y K¨|ð=ð r+   c                  ó<   •— d‰j                   › d‰ j                   › �S ©NzBExpected shape of indices to be same as that of the input tensor (z%) but got indices tensor with shape: rí  )rŸ  r{   s   €€r,   r‚   zmax_unpool2d.<locals>.<lambda>¦  s,   ø€ ØPÐQU×Q[ÑQ[ÐP\ð ]2Ø29·-±-°ðBð r+   r"   r   c                  ó*   •— d‰j                   › d‰ › d�S )NzZmax_unpooling2d(): Expected input to have non-zero size for non-batch dimensions, but got r*  ú being empty.rí  )rŸ  r{   s   €€r,   r‚   zmax_unpool2d.<locals>.<lambda>¯  s%   ø€ ðàŸ:™:˜,Ð&6°q°c¸ðHð r+   )
r?   rƒ   ré   rº  r†  r�  r  rT   r2  rJ  )r{   rŸ  rû  rŸ  s   ```@r,   Úmax_unpool2drX  Š  sÖ   û€ ô 
‡L�LØ�‰œŸ™Ñ$ÛTôô 
‡L�LÜˆKÓ˜AÑó	
ôô 
‡L�LØ�	‰	�VÐó	
ôô 
‡L�LØ�
‰
�g—m‘mÑ#ô	
ôô �1�d—i‘iÓ ò 
ˆÜ�‰Ø�I‰I�a‹L˜1Ñôõ	
ð
ô ˜˜w¨°QÓ7Ð7r+   c                 ó  ‡ ‡‡‡‡‡— t        j                  ‰j                  t         j                  k(  d„ «       t        j                  ‰ j                  dv ˆ fd„«       t        j                  t        ‰«      dk(  ˆfd„«       t        j                  t        ‰«      dk(  ˆfd„«       t        j                  t        ‰«      dk(  ˆfd„«       t        j                  ‰ j                  ‰j                  k(  ˆˆ fd„«       t        d	‰ j                  «      D ].  Št        j                  ‰ j                  ‰«      d
kD  ˆˆ fd„«       Œ0 t        j                  ‰d
   d
kD  xr ‰d	   d
kD  xr ‰d   d
kD  ˆfd„«       t        ‰ ‰‰d«      S )Nc                   ó   — y)Nz(elements in indices should be type int64r*   r*   r+   r,   r‚   zmax_unpool3d.<locals>.<lambda>Ã  rÊ  r+   r8  c                  ó$   •— d‰ j                   › d�S )NzLInput to max_unpooling3d should be a 4d or 5d Tensor, but got a tensor with rS  r­  ©rÀ   s   €r,   r‚   zmax_unpool3d.<locals>.<lambda>Ç  s   ø€ Ð^Ð_d×_iÑ_iÐ^jÐjvÐw€ r+   r‰   c                  ó"   •— dt        ‰ «      › d�S )NzVThere should be exactly three elements (depth, height, width) in output_size, but got rN  rO  rP  s   €r,   r‚   zmax_unpool3d.<locals>.<lambda>Ë  rQ  r+   c                  ó"   •— dt        ‰ «      › d�S )NzRThere should be exactly three elements (depth, height, width) in stride, but got: rN  rO  ©rz  s   €r,   r‚   zmax_unpool3d.<locals>.<lambda>Ò  s   ø€ ÐdÔehÐioÓepÐdqÐq{Ð|€ r+   c                  ó"   •— dt        ‰ «      › d�S )NzSThere should be exactly three elements (depth, height, width) in padding, but got: rN  rO  )rÇ  s   €r,   r‚   zmax_unpool3d.<locals>.<lambda>Ö  s   ø€ ÐeÔfiÐjqÓfrÐesÐs}Ð~€ r+   c                  ó<   •— d‰j                   › d‰ j                   › �S rU  rí  )rŸ  rÀ   s   €€r,   r‚   zmax_unpool3d.<locals>.<lambda>Ú  s,   ø€ ØPÐQV×Q\ÑQ\ÐP]ð ^2Ø29·-±-°ðBð r+   r"   r   c                  ó*   •— d‰j                   › d‰ › d�S )NzZmax_unpooling3d(): Expected input to have non-zero size for non-batch dimensions, but got r*  rW  rí  r,  s   €€r,   r‚   zmax_unpool3d.<locals>.<lambda>ã  s%   ø€ ðà Ÿ;™;˜-Ð'7¸°s¸-ðIð r+   r#   c                  ó   •— d‰ › �S )Nz5strides should be greater than zero, but got stride: r*   r_  s   €r,   r‚   zmax_unpool3d.<locals>.<lambda>ì  s   ø€ ÐGÈÀxÐP€ r+   )
r?   rƒ   ré   rº  r�  r†  r  rT   r2  rJ  )rÀ   rŸ  rû  rz  rÇ  rŸ  s   `````@r,   Úmax_unpool3drd  ¹  sD  ý€ ô 
‡L�LØ�‰œŸ™Ñ$Ñ&Xôô 
‡L�LØ�
‰
�fÐÛwôô 
‡L�LÜˆKÓ˜AÑó	
ôô 
‡L�LÜˆF‹�qÑÛ|ôô 
‡L�LÜˆG‹˜ÑÛ~ôô 
‡L�LØ�‰�w—}‘}Ñ$ô	
ôô �1�e—j‘jÓ!ò 
ˆÜ�‰Ø�J‰J�q‹M˜AÑôõ	
ð
ô 
‡L�LØˆq‰	�A‰Ò9˜& ™) a™-Ò9¨F°1©I¸©MÛPôô
 ˜ ¨°aÓ8Ð8r+   )rm   r§  c                ó$   — t        | |||d|¬«      S )NT©Úinplacerm   ©Ú
_index_add©r9   rO   r£  r§  rm   s        r,   Ú
index_add_rk  ò  s   € ô �a˜˜e V°TÀÔGÐGr+   c                ó$   — t        | |||d|¬«      S )NFrf  rh  rj  s        r,   ra  ra  þ  s   € ô �a˜˜e V°UÀ%ÔHÐHr+   rg  c                óÔ  ‡ ‡‡‡‡‡‡‡— t        j                  ‰ j                  ‰«      Št        j                  ‰ j
                  ‰j
                  k(  xr ‰ j
                  ‰j
                  k(  ˆˆˆ fd„«       t        j                  ‰j                  dk  ˆfd„«       ‰j                  dk(  r‰j                  d«      ndŠ‰j                  dkD  r‰j                  ‰«      ndŠt        j                  ‰‰k(  ˆˆˆfd„«       ‰dk7  ret        j                  ‰ j                  «      Št        j                  ‰t        u xs t        j                  t        ‰«      ‰«      ˆˆfd„«       ‰‰z  Š‰ j                  dk(  }|r‰ j                  d«      n‰ }d‰z  ‰fz   }|rt        j                  nt        j                  }	 |	||‰d¬	«      }
|r‰ S |r|
j!                  d«      S |
j#                  «       S )
Nc                  óV   •— d‰j                   › d‰ j                   › d‰j                   › �S )NzVindex_add(): self, index and source expected to be in the same device, but got (self) ú
, (index) ú, and (source) r“  ©r£  r§  r9   s   €€€r,   r‚   z_index_add.<locals>.<lambda>  ó4   ø€ ðØŸh™h˜Z z°%·,±,°ð @Ø"ŸM™M˜?ð,ð r+   r"   c                  ó$   •— d‰ j                   › d�S ©Nz(Index should have dimension 1 or 0 (got rC  r­  ©r£  s   €r,   r‚   z_index_add.<locals>.<lambda>  ó   ø€ Ð:¸5¿:¹:¸,ÀaÐH€ r+   r   c                  ó   •— d‰› d‰› d‰ ›�S )NzNumber of indices (z') should be equal to tensor.size(dim) (z), for dim=r*   )rO   Ú
index_sizer¨  s   €€€r,   r‚   z_index_add.<locals>.<lambda>%  s!   ø€ Ð% j \Ð1XÐYdÐXeÐeqÐmpÐlrÐs€ r+   c                  ó(   •— dt        ‰ «      › d‰› d�S )Nzalpha argument of type z cannot be safely cast to type ú!)r×  )rm   Úpython_types   €€r,   r‚   z_index_add.<locals>.<lambda>,  s   ø€ Ð-¬d°5«k¨]Ð:YÐZeÐYfÐfgÐh€ r+   r5   Tr(  )rD   Úcanonicalize_dimsr�  r?   rƒ   r”  r2  Údtype_to_typeré   rš  Úis_weakly_lesser_typer×  rU   r„   Ú
index_put_Ú	index_putr   r³  )r9   rO   r£  r§  rg  rm   Úzero_dimrY  r   r€  rÇ   rx  r{  r¨  s   ```` `     @@@r,   ri  ri    s‚  ÿ€ ô ×
!Ñ
! !§&¡&¨#Ó
.€CÜ	‡L�LØ	�‰�E—L‘LÑ Ò> Q§X¡X°·±Ñ%>õ	
ôô 
‡L�LØ�
‰
�a‰ÛHôð #(§*¡*°¢/�—‘˜A”°q€JØ&,§k¡k°A¢o�&—+‘+˜cÔ"¸1€KÜ	‡L�LØ�zÑ!Ýsôð �‚zÜ×)Ñ)¨!¯'©'Ó2ˆÜ�‰Øœ4Ðò EÜ×*Ñ*¬4°«;¸ÓDÜhô	
ð
 ˜%‘ˆà�v‰v˜‰{€HÙ#ˆ�‰�QŒ¨€BØ
�C‰-˜5˜(Ñ
"€CÙ#*”—’´·±€IÙ
�B˜˜V°Ô
5€CÙØˆá!)ˆs�{‰{˜1‹~Ð?¨s¯~©~Ó/?Ð?r+   c                 óÐ  ‡— t        j                  t        | «      dkD  d„ «       t        j                  ‰dk(  xs ‰dk(  ˆfd„«       t        | «      }| d   j                  «       }|dd  }t	        d„ | D «       «      }|r||f}n||f}||z   }| d   j                  ||«      }	dt        |«      z  }
t        |«      D ]¨  }| |   j                  |	j                  ¬	«      }||j                  d«      z
  }‰dk(  rt        j                  ||
d|fz   |«      }nt        j                  ||
|dfz   |«      }|rt        j                  |	|d|¬
«      }	Œ�t        j                  |	|d|¬
«      }	Œª |	S )Nr   c                   ó   — y)Nz#received an empty list of sequencesr*   r*   r+   r,   r‚   zpad_sequence.<locals>.<lambda>>  rÊ  r+   r¶   r·   c                  ó   •— d‰ › d�S )Nz:Expected padding_side to be one of left or right, but got r#  r*   )Úpadding_sides   €r,   r‚   zpad_sequence.<locals>.<lambda>A  s   ø€ ÐLÈ\ÈNÐZ[Ð\€ r+   r"   c              3   ó>   K  — | ]  }|j                  d «      –— Œ y­wrÐ  rF  )rÒ  r9   s     r,   rÓ  zpad_sequence.<locals>.<genexpr>F  s   è ø€ Ò/ �!—&‘&˜—)Ñ/ùs   ‚)r   r   rè   ©rO   r£  )r?   rƒ   r†  r2  rŽ   rí   rT   r8   ré   r„   r£  r¥  )Ú	sequencesÚbatch_firstÚpadding_valuer…  Úsequences_sizeÚmax_sizeÚtrailing_dimsÚmax_lenÚout_dimsrÇ   Údim_paddingsrŸ  ÚcurrseqÚ
pad_amountÚrows      `           r,   Úpad_sequencer”  ;  s„  ø€ ô 
‡L�L”�Y“ !Ñ#Ñ%RÔSÜ	‡L�LØ˜ÑÒ9 ,°'Ñ"9Û\ôô ˜“^€NØ˜‰|× Ñ Ó"€HØ˜Q˜R�L€MÜÑ/ YÔ/Ó/€GÙØ" GÐ,‰à˜^Ð,ˆØ˜-Ñ'€HØ
�A‰,×
Ñ
 ¨-Ó
8€CØœC Ó.Ñ.€LÜ�>Ó"ò @ˆØ˜A‘,—/‘/¨¯	©	�/Ó2ˆØ˜wŸ|™|¨A›Ñ.ˆ
Ø˜7Ò"Ü×&Ñ&Ø˜¨¨J¨Ñ7¸ó‰Cô ×&Ñ&Ø˜¨°Q¨Ñ7¸óˆCñ Ü×%Ñ% c¨3°A¸QÐ%Ó?‰Cä×%Ñ% c¨3°A¸QÐ%Ó?‰Cð@ð €Jr+   c                 ó"   — t        | |||d¬«      S )NT©rg  ©Ú_index_copy©r9   rO   r£  r§  s       r,   Úindex_copy_rš  `  s   € ä�q˜#˜u f°dÔ;Ð;r+   c                 ó"   — t        | |||d¬«      S )NFr–  r—  r™  s       r,   Ú
index_copyrœ  e  s   € ô �q˜#˜u f°eÔ<Ð<r+   c                ó  ‡ ‡‡‡‡‡‡— ddl m} t        j                  ‰ j                  ‰«      Št        j                  ‰ j                  ‰j                  k(  xr ‰ j                  ‰j                  k(  ˆˆˆ fd„«       t        j                  ‰j                  dk  ˆfd„«       ‰j                  «       Š‰j                  dk(  rt        j                  ‰dk(  ˆfd„«       n@‰ j                  dk7  r1t        j                  ‰j                  ‰ j                  k(  ˆˆ fd„«       ‰ j                  dkD  r"‰ j                  d ‰ ‰ j                  ‰dz   d  z   ndŠ‰j                  dkD  r"‰j                  d ‰ ‰j                  ‰dz   d  z   ndŠt        j                   |‰‰«      ˆˆˆfd	„«       ‰j                  dk7  r-t        j                  ‰‰j                  ‰«      k(  ˆˆˆfd
„«       ‰ j                  dk(  }|r‰ j                  d«      n‰ }‰j                  dk(  r‰j                  d«      n‰Šd‰z  ‰fz   }|rt        j                  nt        j                  }	 |	||‰«      }
|r‰ S |r|
j                  d«      S |
j!                  «       S )Nr   )Úsym_eqc                  óV   •— d‰j                   › d‰ j                   › d‰j                   › �S )NzWindex_copy(): self, index and source expected to be in the same device, but got (self) ro  rp  r“  rq  s   €€€r,   r‚   z_index_copy.<locals>.<lambda>s  rr  r+   r"   c                  ó$   •— d‰ j                   › d�S rt  r­  ru  s   €r,   r‚   z_index_copy.<locals>.<lambda>{  rv  r+   c                  ó   •— d‰ › d�S )NzIindex_copy_(): When source is scalar, index should have one element (got rC  r*   )Únum_indicess   €r,   r‚   z_index_copy.<locals>.<lambda>�  s   ø€ ð$Ø$/ =°ð3ð r+   c                  ó>   •— d‰ j                   › d‰j                   › d�S )Nztindex_copy_(): When source and destination are not scalars, their dimensionality must match. Source dimensionality (z), destination dimensionality (rC  r­  )r§  r9   s   €€r,   r‚   z_index_copy.<locals>.<lambda>‰  s)   ø€ ðà—K‘K�=Ð ?ÀÇÁ¸xÀqðJð r+   r*   c                  ó   •— d‰› d‰ › d‰› d�S )Nz_index_copy_(): Source/destination tensor must have same slice shapes. Destination slice shape: z at dimension z and source slice shape: z at dimension 0.r*   )rO   Útensor_sliced_shapeÚx_sliced_shapes   €€€r,   r‚   z_index_copy.<locals>.<lambda>–  s.   ø€ ð(Ø(6Ð'7°~ÀcÀUð K'Ø':Ð&;Ð;KðMð r+   c                  ó4   •— d‰› d‰j                  ‰ «      › d�S )Nz"index_copy_(): Number of indices (z') should be equal to source.size(dim) (rC  rF  )rO   r¢  r§  s   €€€r,   r‚   z_index_copy.<locals>.<lambda>Ÿ  s,   ø€ Ø4°[°Mð B.Ø.4¯k©k¸#Ó.>Ð-?¸qðBð r+   r5   )rw  rž  rD   r|  r�  r?   rƒ   r”  rß   r  r2  rU   r„   r  r€  r   r³  )r9   rO   r£  r§  rg  rž  r�  rY  r   r€  rÇ   r¢  r¥  r¦  s   ````       @@@r,   r˜  r˜  k  s  þ€ õ =ä
×
!Ñ
! !§&¡&¨#Ó
.€CÜ	‡L�LØ	�‰�E—L‘LÑ Ò> Q§X¡X°·±Ñ%>õ	
ôô 
‡L�LØ�
‰
�a‰ÛHôð —+‘+“-€KØ‡{�{�aÒÜ�‰Ø˜1Ñóõ	
ð 
�‰�1ŠÜ�‰Ø�K‰K˜1Ÿ6™6Ñ!ôô	
ð <=¿6¹6ÀAº:�Q—W‘W˜T˜c�] Q§W¡W¨S°1©W¨YÐ%7Ò7È2€Nà8>¿¹Àaºˆ�‰�T�cÐ˜VŸ\™\¨#°©'¨)Ð4Ò4ÈRð ô 
‡L�LÙˆ~Ð2Ó3õ	
ôð ‡{�{�aÒÜ�‰Ø˜6Ÿ;™; sÓ+Ñ+õô	
ð �v‰v˜‰{€HÙ#ˆ�‰�QŒ¨€BØ"'§*¡*°¢/ˆE�O‰O˜AÔ°u€EØ
�C‰-˜5˜(Ñ
"€CÙ#*”—’´·±€IÙ
�B˜˜VÓ
$€CÙØˆá!)ˆs�{‰{˜1‹~Ð?¨s¯~©~Ó/?Ð?r+   c                 ó*  — t        j                  | j                  d«      | «      }t        j                  t        j                  | «       «      }| j
                  s| j                  r| j                  d«      }n|}|t        j                  |«      z
  |fS )Nr*   rM  )r?   rÖ  rq  rh   rà   rì  Úis_xpurL  )r{   r‹   rj   rÝ   s       r,   Úlog_sigmoid_forwardrª  ²  sn   € ô �-‰-˜Ÿ™ rÓ*¨DÓ
1€CÜ�	‰	”5—9‘9˜T“?Ð"Ó#€AØ‡|‚|�t—{’{Ø—‘ Ó%‰àˆØ”—‘˜Q“Ñ Ð'Ð'r+   ÚlowÚhighr‹  c           	      ó¶   — t        j                  | j                  | j                  «       t	        |«      t	        |«      | j
                  | j                  |¬«      S )N)rz  r«  r¬  ré   r”  r‹  )ÚprimsÚ_uniform_helperr  rz  r   ré   r”  )r9   r«  r¬  r‹  s       r,   Úuniformr°  ¿  sF   € ô × Ñ Ø	�‰Ø�x‰x‹zÜ�c‹NÜ�t‹_Ø�g‰gØ�x‰xØôð r+   c                 ó<   — | j                  t        | |||«      «      S r5   )rO  r°  )r{   r«  r¬  r‹  s       r,   Úuniform_r²  Ò  s   € à�:‰:”g˜d C¨¨yÓ9Ó:Ð:r+   c                 ó"  — t        | «      dz
  }|�>t        j                  |d u d„ «       t        j                  t        |«      |k(  d„ «       |S |�¨t        j                  |d u d„ «       t        j                  t        |«      |k(  d„ «       g }t        |«      D ]Z  \  }}t	        |«      |k(  r$|j                  | |dz      t	        |«      z  «       Œ8|j                  t        | |dz      |z  «      «       Œ\ |S t        j                  dd„ «       y )Nr#   c                   ó   — y©Nz9Must specify exactly one of output_size and scale_factorsr*   r*   r+   r,   r‚   z.upsample_compute_output_size.<locals>.<lambda>Ý  rÊ  r+   c                   ó   — y©NÚ r*   r*   r+   r,   r‚   z.upsample_compute_output_size.<locals>.<lambda>ß  rÊ  r+   c                   ó   — yrµ  r*   r*   r+   r,   r‚   z.upsample_compute_output_size.<locals>.<lambda>å  rÊ  r+   c                   ó   — yr·  r*   r*   r+   r,   r‚   z.upsample_compute_output_size.<locals>.<lambda>ç  rÊ  r+   Fc                   ó   — yrµ  r*   r*   r+   r,   r‚   z.upsample_compute_output_size.<locals>.<lambda>ð  rÊ  r+   )r†  r?   rƒ   rH  r�  r¥  r   )r9  rû  Úscale_factorsÚspatial_dimensionsrŸ  rÄ  s         r,   Úupsample_compute_output_sizer¾  Ø  s  € Ü˜Z›¨1Ñ,ÐØÐÜ�‰Ø˜TÐ!ÙOô	
ô 	�‰”S˜Ó%Ð);Ñ;¹ZÔHØÐØÐ ä�‰Ø˜4ÐÙOô	
ô 	�‰”S˜Ó'Ð+=Ñ=¹zÔJØˆÜ˜mÓ,ò 	C‰DˆAˆqÜ�1‹v˜Š{Ø×"Ñ" :¨a°!©eÑ#4´s¸1³vÑ#=Õ>à×"Ñ"¤7¨:°a¸!±eÑ+<¸qÑ+@Ó#AÕBð		Cð
 ÐÜ	‡L�LØÑRõr+   c                 ó   — | €y | |   S r5   r*   )Úscalesr   s     r,   Úget_scale_valuerÁ  ô  s   € Ø€~ØØ�#‰;Ðr+   r¼  c                 óx   — t        | j                  «       ||«      }|r|nd gt        |«      z  }t        | ||«      S r5   ©r¾  r2  r†  Ú_upsample_nearest©rÀ   rû  r¼  ÚosizerÀ  s        r,   Ú_upsample_nearest_vecrÇ  ú  s@   € ô )¨¯©«°{ÀMÓR€Eá&‰¨T¨F´S¸³ZÑ,?ð ô ˜U E¨6Ó2Ð2r+   c                 ó|   — t        | j                  «       ||«      }|r|nd gt        |«      z  }t        | ||d¬«      S ©NT©ÚexactrÃ  rÅ  s        r,   Ú_upsample_nearest_exact_vecrÌ    sB   € ô )¨¯©«°{ÀMÓR€Eá&‰¨T¨F´S¸³ZÑ,?ð ô ˜U E¨6¸Ô>Ð>r+   c                 óÐ  — g }t        |«      }|rdnd}t        |«      D ]Ä  }||   }| j                  | |z      }	||   �||   dkD  r|	|	||   z  z  n|	|z  }
t        j                  |t        j
                  | j                  ¬«      }||z   |
z  j                  t        j                  «      }t        |dz
  |z
  «      D ]  }|j                  d«      }Œ |j                  |«       ŒÆ |S )Nr    r”   r   r¹  r"   rS   )r†  rT   r  r?   r˜  rì   r”  r8   rº  rU   r¥  )rÀ   rû  rÀ  rË  rŸ  Únum_spatial_dimsr§  rè  rÆ  Úisizern   Úoutput_indicesÚinput_indicesrV   s                 r,   Ú!_compute_upsample_nearest_indicesrÒ  $  s  € ð €GÜ˜;Ó'ÐÙ‰S˜s€FäÐ#Ó$ò &ˆð ˜A‘ˆØ—‘Ð-Ð-°Ñ1Ñ2ˆð
 �a‰yÐ$¨°©°Qªð �U˜V A™YÑ&Ò'à˜‘ð 	ô Ÿ™ e´5·=±=ÈÏÉÔVˆØ(¨6Ñ1°UÑ:×>Ñ>¼u¿{¹{ÓKˆÜÐ'¨!Ñ+¨aÑ/Ó0ò 	8ˆAØ)×3Ñ3°BÓ7‰Mð	8à�‰�}Õ%ð7&ð8 €Nr+   )Úpreserve_memory_formatr  rÀ  c                 ó   — t        | ||g«      S r5   ©rÄ  ©rÀ   rû  rÀ  s      r,   Úupsample_nearest1dr×  J  s   € ô ˜U K°&°Ó:Ð:r+   c                 ó"   — t        | ||gd¬«      S rÉ  rÕ  rÖ  s      r,   Úupsample_nearest_exact1drÙ  V  s   € ô ˜U K°&°ÀÔFÐFr+   Úscales_hÚscales_wc                 ó    — t        | |||g«      S r5   rÕ  ©rÀ   rû  rÚ  rÛ  s       r,   Úupsample_nearest2drÞ  d  s   € ô ˜U K°(¸HÐ1EÓFÐFr+   c                 ó$   — t        | |||gd¬«      S rÉ  rÕ  rÝ  s       r,   Ú_upsample_nearest_exact2drà  q  s   € ô ˜U K°(¸HÐ1EÈTÔRÐRr+   Úscales_dc                 ó"   — t        | ||||g«      S r5   rÕ  ©rÀ   rû  rá  rÚ  rÛ  s        r,   Úupsample_nearest3drä  €  s   € ô ˜U K°(¸HÀhÐ1OÓPÐPr+   c                 ó&   — t        | ||||gd¬«      S rÉ  rÕ  rã  s        r,   Ú_upsample_nearest_exact3dræ  Ž  s!   € ô Øˆ{˜X x°Ð:À$ôð r+   rË  c                 ó`  — t        | |||¬«      }d d g|z   }t        j                  | |«      }|j                  dv rst	        j
                  | «      }| j                  d   }|j                  dk(  r.| j                  j                  dk(  r|dk  rt        j                  }|j                  |¬«      }|S )NrÊ  r8  r"   rH  Úcudar\  )rÒ  r„   Ú_unsafe_indexr�  rD   r   r  r”  r×  r?   r`  r³  )	rÀ   rû  rÀ  rË  Úspatial_indicesrŸ  r  r]  Ú
n_channelss	            r,   rÄ  rÄ     sª   € ô 8Øˆ{˜F¨%ô€Oð �Tˆl˜_Ñ,€GÜ×Ñ  wÓ/€Fà‡{�{�fÑä×3Ñ3°EÓ:ˆð —[‘[ ‘^ˆ
Ø�;‰;˜!Ò §¡× 1Ñ 1°VÒ ;À
ÈQÂÜ!×3Ñ3ˆMà×"Ñ"°Ð"Ó?ˆØ€Mr+   c           	      óî   — |r|rd}n|rd}n|rd}nd}t        | «      |z  dk7  rt        dt        | «      › d|› �«      ‚t        dt        | «      |«      D �cg c]  }t        | |||z    «      ‘Œ c}S c c}w )Nrü  rH  r‰   r#   r   zlen(params)=z  is not divisible by group_size=)r†  r0  rT   rì  )ÚparamsÚ
has_biasesÚhas_projectionsÚ
group_sizerŸ  s        r,   Úgather_paramsrñ  »  s�   € Ù‘oØ‰
Ù	Ø‰
Ù	Ø‰
àˆ
ä
ˆ6ƒ{�ZÑ 1Ò$ÜØœ3˜v›;˜-Ð'GÈ
À|ÐTó
ð 	
ô 49¸¼CÀ»KÈÓ3TöØ./Œˆf�Q˜˜Z™Ð(Õ)òð ùò s   ÁA2c                 ó~   — |r'| d|z     |d|z     }}| d|z  dz      |d|z  dz      }}n| |   ||   }}d\  }}||||fS )Nr#   r"   ©NNr*   )rí  ÚhiddensrŸ  ÚbidirectionalÚ
cur_paramsÚ
cur_hiddenÚbidir_paramsÚbidir_hiddens           r,   Úparams_hiddensrú  Î  sk   € ÙØ!'¨¨A©¡°¸¸A¹±�Jˆ
Ø%+¨A°©E°A©IÑ%6¸ÀÀAÁÈÁ	Ñ8J�l‰à!'¨¡¨G°A©J�Jˆ
Ø%/Ñ"ˆ�là�z <°Ð=Ð=r+   c                 ó    — ||k  rt        d|› d|› d�«      ‚|j                  | j                  d|||z
  «      «       | j                  dd|«      S )Núlast_batch_size (z) must be > batch_size (rC  r   )r0  r¥  r3  )r÷  Úlast_batch_sizeÚ
batch_sizerô  s       r,   Úupdate_hidden_for_packedrÿ  Ù  sc   € Ø˜*Ò$ÜØ Ð0Ð0HÈÈÐTUÐVó
ð 	
ð ‡N�N�:×$Ñ$ Q¨
°OÀjÑ4PÓQÔRØ×Ñ˜Q  :Ó.Ð.r+   c           	      ó”   — ||k(  r| S ||k\  rt        d|› d|› d�«      ‚t        j                  | |j                  d|||z
  «      f«      S )Nrü  z) must be < batch_size (rC  r   )r0  r?   Úconcatr3  )r÷  rý  rþ  Ú
inp_hiddens       r,   Ú update_hidden_for_packed_reverser  â  sn   € ð ˜*Ò$ØÐØ˜*Ò$ÜØ Ð0Ð0HÈÈÐTUÐVó
ð 	
ô �<‰<àØ×Ñ˜a °*¸Ñ2NÓOð	
óð r+   c           	      óX  — |d   }|d   }|r|d   nd }	|r|d   nd }
g }g }|r|d   n|d   }|j                  dd|«      }t        j                  | t        |«      «      }|r|d d d…   }|D ]V  } | j                  d   }||k(  rn|rt        ||||«      }nt        ||||«      } || |||	||
«      }|}|j                  |«       ŒX |r|j                  «        n!|j                  |«       |j                  «        t        j                  |d«      }|st        j                  |d«      n|}||fS )Nr   r"   r#   r‰   rS   )
r3  r?   rÅ  ry  r  r  rÿ  r¥  Úreverser4  )ÚinpÚhiddenrí  rî  Ú	hidden_fnÚbatch_sizesr  Ú	ih_weightÚ	hh_weightÚih_biasÚhh_biasÚstep_outputrô  rý  r÷  Ú	split_inprŸ  rÇ   Ú
hidden_outs                      r,   Úone_layer_rnn_datar  ó  sR  € ð �q‘	€IØ�q‘	€IÙ%ˆf�QŠi¨4€GÙ%ˆf�QŠi¨4€Gà€KØ"$€Gá)0�k "’o°kÀ!±n€OØ—‘˜q ! _Ó5€JÜ—‘˜C¤ kÓ!2Ó3€IÙØ™d ˜d‘Oˆ	Øò 'ˆØ�I‰I�a‰Lˆà˜aÒØáÜ9Ø˜O¨Q°ó‰Jô 2Ø˜O¨Q°óˆJñ ˜s J°	¸7ÀIÈwÓWˆ
ØˆØ×Ñ˜:Õ&ð#'ñ& Ø×ÑÕà�‰�zÔ"Ø�‰Ôä
�)‰)�K Ó
#€CÙ.5”—‘˜7 AÔ&¸:€JØ�
ˆ?Ðr+   c                 ó   ‡ — ˆ fd„}|S )Nc                 óD   •—  ‰t        j                  |||«      | z   «      S r5   ©rÂ   Úlinear©rŸ  r÷  r
  r  r  r  Únonlinearitys         €r,   rK   zrnn_cell.<locals>.inner"  s    ø€ ÙœAŸH™H Z°¸GÓDÀqÑHÓIÐIr+   r*   ©r  rK   s   ` r,   Úrnn_cellr  !  s   ø€ ôJð €Lr+   c                 ó   ‡ — ˆ fd„}|S )Nc                 ór   •— t        j                  | ||«      }  ‰t        j                  |||«      | z   «      S r5   r  r  s         €r,   rK   zrnn_cell_data.<locals>.inner)  s2   ø€ Ü�H‰H�Q˜	 7Ó+ˆÙœAŸH™H Z°¸GÓDÀqÑHÓIÐIr+   r*   r  s   ` r,   Úrnn_cell_datar  (  s   ø€ ôJð €Lr+   c           	      óx  — |d   }|d   }|r|d   nd }|r|d   nd }	t        j                  | ||«      }
|r|
j                  d«      n|
}
|j                  d«      }g }|
D ]   } |||||||	«      }|j	                  |«       Œ" |r|j                  «        t        j                  |d«      }||j                  d«      fS )Nr   r"   r#   r‰   )	rÂ   r  ÚfliprU   r¥  r  r?   r4  r   )r  r  rí  rî  r  r  r
  r  r  r  Úprecomputed_inputr÷  r  rŸ  rÇ   s                  r,   Úone_layer_rnnr   0  sÕ   € Ø�q‘	€IØ�q‘	€IÙ%ˆf�QŠi¨4€GÙ%ˆf�QŠi¨4€GäŸ™  i°Ó9ÐÙ5<Ð)×.Ñ.¨qÔ1ÐBSÐØ×!Ñ! !Ó$€JØ€KØò 'ˆÙ˜q *¨i¸À)ÈWÓUˆ
Ø×Ñ˜:Õ&ð'ñ Ø×ÑÔä
�)‰)�K Ó
#€Cà�
×"Ñ" 1Ó%Ð%Ð%r+   c                 ó�  — |d   }|d   }|r|d   }|d   }nFt        j                  |j                  «       «      }t        j                  |j                  «       «      }|d   j                  d«      }	|d   j                  d«      }
g }d}|	j                  d«      }d}d}d}d}| j	                  «       } |	j	                  «       }	|
j	                  «       }
t         j
                  j                  j                  j                  | |||||	|
|||||||||«      }|d   |d   |d   }}}||j                  d«      |j                  d«      ffS )Nr   r"   r#   r‰   F)
r?   r  r2  rU   r³  r6  r„   Úmkldnn_rnn_layerrŒ  r   )r  r  rí  rî  r  Úw0Úw1Úw2Úw3ÚhxÚcxr	  ÚmodeÚhidden_sizeÚ
num_layersrõ  r‰  rn  ÚoutputsrZ   ÚhyÚcys                         r,   Úmkldnn_one_layer_lstmr/  F  sS  € Ø	�‰€BØ	�‰€BÙØ�A‰YˆØ�A‰Y‰ä�[‰[˜Ÿ™›Ó#ˆÜ�[‰[˜Ÿ™›Ó#ˆà	�‰×	Ñ	˜QÓ	€BØ	�‰×	Ñ	˜QÓ	€Bà€KØ€DØ—'‘'˜!“*€KØ€Jð €MØ€Kà€Eð �.‰.Ó
€CØ	�‰‹€BØ	�‰‹€BÜ�i‰i�n‰n×-Ñ-×5Ñ5ØØ
Ø
Ø
Ø
Ø
Ø
ØØØØØØØØØó!€Gð$ ˜‘
˜G A™J¨°©
ˆ2€r€AØˆr�z‰z˜!‹}˜bŸj™j¨›mÐ,Ð,Ð,r+   c
                 óü  — |r| j                  dd«      n| } g }
t        |«      D ]½  }t        ||||«      \  }}}}|r
||dz
  k  r|nd} |	| |||«      \  }}|
j                  |«       |r! |	| |||d¬«      \  }}|
j                  |«       |r*t	        j
                  |g|j                  «       dz
  «      } n|} |dk7  sŒš|sŒ�||dz
  k  sŒ¦t	        j                  | |d¬«      } Œ¿ |r| j                  dd«      n| } | |
fS )Nr   r"   r”   T)r  )rn  )Ú	transposerT   rú  r¥  r?   r4  rO   rq  )rÀ   r  rí  rî  r+  rq  rn  rõ  r‰  Úlayer_fnÚfinal_hiddensrŸ  rö  r÷  rø  rù  Úfwd_inpÚ
fwd_hiddenÚbwd_inpÚ
bwd_hiddens                       r,   Ú_rnn_helperr8  x  s"  € ñ &1ˆE�O‰O˜A˜qÔ!°e€EØ€Mä�:Óò >ˆÜ=KØ�F˜A˜}ó>
Ñ:ˆ
�J ¨lñ $¨
°Q¸±UÒ(:‘'ÀˆÙ& u¨j¸*ÀjÓQÑˆ�Ø×Ñ˜ZÔ(áÙ"*Ø�| \°:Àtô#ÑˆG�Zð × Ñ  Ô,áÜ—I‘I˜w¨Ð0°'·+±+³-À!Ñ2CÓD‰EàˆEà�a‹<šE a¨*°q©.Ó&8Ü—M‘M %¨¸Ô=‰Eð)>ñ, &1ˆE�O‰O˜A˜qÔ!°e€EØ�-ÐÐr+   c	                 óè   — |j                  d«      }	t        ||d«      }t        | |	|||||||t        t        t        t        j                  «      ¬«      «
      \  }
}|
t        j                  |d«      fS ©Nr   F©r  )	Úunbindrñ  r8  r   r   r  r?   r«   Ústack©rÀ   r'  rí  rî  r+  rq  rn  rõ  r‰  r  rÇ   r3  s               r,   Úrnn_tanh_inputr?  ¡  ót   € ð �Y‰Y�q‹\€FÜ˜6 :¨uÓ5€FÜ$ØØØØØØØØØÜ”¬´%·*±*Ó)=Ô>óÑ€Cˆð ”—‘˜M¨1Ó-Ð-Ð-r+   c	                 óè   — |j                  d«      }	t        ||d«      }t        | |	|||||||t        t        t        t        j                  «      ¬«      «
      \  }
}|
t        j                  |d«      fS r:  )	r<  rñ  r8  r   r   r  r?   rî  r=  r>  s               r,   Úrnn_relu_inputrB  À  r@  r+   c	                 óê   — |j                  d«      }	t        ||d«      }t        | |	||||||dt        t        |t        t        j                  «      ¬«      «
      \  }
}|
t        j                  |d«      fS ©Nr   F©r	  r  )	r<  rñ  r8  r   r  r  r?   rî  r=  ©Údatar	  r'  rí  rî  r+  rq  rn  rõ  r  rÇ   r3  s               r,   Úrnn_relu_datarH  ß  ó{   € ð �Y‰Y�q‹\€FÜ˜6 :¨uÓ5€FÜ$ØØØØØØØØØÜÜØ#Ü#¤E§J¡JÓ/ô	
óÑ€Cˆð  ”—‘˜M¨1Ó-Ð-Ð-r+   c	                 óê   — |j                  d«      }	t        ||d«      }t        | |	||||||dt        t        |t        t        j                  «      ¬«      «
      \  }
}|
t        j                  |d«      fS rD  )	r<  rñ  r8  r   r  r  r?   r«   r=  rF  s               r,   Úrnn_tanh_datarK    rI  r+   c                 ól  — t        j                  |||«      | z   }|j                  d|«      }|d   j                  «       }	|d   j                  «       }
|d   j	                  «       }|d   j                  «       }|
|z  |	|z  z   }||j	                  «       z  }|€|nt        j                  ||d «      }||fS )NrH  r   r"   r#   r‰   ©rÂ   r  ÚchunkrÄ   r«   )r  r'  r(  r  r  Ú	hr_weightÚ	chunk_dimÚgatesÚchunked_gatesÚin_gateÚforget_gateÚ	cell_gateÚout_gater.  r-  s                  r,   Ú	lstm_cellrW  %  s»   € Ü�H‰H�R˜ GÓ,¨sÑ2€EØ—K‘K  9Ó-€MØ˜AÑ×&Ñ&Ó(€GØ Ñ"×*Ñ*Ó,€KØ˜aÑ ×%Ñ%Ó'€IØ˜QÑ×'Ñ'Ó)€HØ	�rÑ	˜W yÑ0Ñ	1€BØ	�B—G‘G“IÑ	€BØÐ ‰¤a§h¡h¨r°9¸dÓ&C€Bàˆrˆ6€Mr+   c           
      ó(  — |d   }|d   }|r|d   nd }|r|d   nd }t        |«      dk(  r|d   nt        |«      dk(  r|d   nd }	|d   j                  d«      }
|d   j                  d«      }t        j                  | ||«      }|r|j	                  d«      n|}g }|D ](  } t        | |
||||	d¬«      \  }
}|j                  |
«       Œ* |r|j                  «        t        j                  |d«      }||
j                  d«      |j                  d«      ffS )Nr   r"   r#   r‰   rü  rH  ©rP  )r†  rU   rÂ   r  r  rW  r¥  r  r?   r4  r   )r  r  rí  rî  r  r
  r  r  r  rO  r'  r(  r  r  rÇ   s                  r,   Úone_layer_lstmrZ  3  s*  € Ø�q‘	€IØ�q‘	€IÙ%ˆf�QŠi¨4€GÙ%ˆf�QŠi¨4€Gä˜“[ AÒ%ˆˆqŠ	¼¸F»ÀqÒ8H¨6°!ª9Èdð ð 
�‰×	Ñ	˜QÓ	€BØ	�‰×	Ñ	˜QÓ	€BäŸ™  i°Ó9ÐÙ5<Ð)×.Ñ.¨qÔ1ÐBSÐØ€KØ ò ˆÜ˜3  B¨	°7¸IÐQRÔS‰ˆˆBØ×Ñ˜2Õðñ Ø×ÑÔä
�)‰)�K Ó
#€Cà�—‘˜A“ §
¡
¨1£Ð.Ð.Ð.r+   c           
      ó¦  — |d   }|d   }|r|d   nd }|r|d   nd }	t        |«      dk(  r|d   nt        |«      dk(  r|d   nd }
g }g }|r|d   n|d   }t        j                  | t        |«      «      }|r|d d d…   }|d   }|d   }|j	                  dd|«      |j	                  dd|«      }}|D �]  } | j
                  d   }t        j                  | ||«      } ||k  ra|j                  |j	                  d|||z
  «      |j	                  d|||z
  «      f«       |j	                  dd|«      |j	                  dd|«      }}||kD  rXt        j                  ||j	                  d|||z
  «      fd«      }t        j                  ||j	                  d|||z
  «      fd«      }t        | ||||	|
d¬«      \  }}|}|j                  |«       �Œ |r|j                  «        ||f}nZ|j                  ||f«       |j                  «        t        |Ž \  }}t        j                  |d«      t        j                  |d«      f}t        j                  |d«      }||fS )	Nr   r"   r#   r‰   rü  rH  rS   rY  )r†  r?   rÅ  ry  r3  r  rÂ   r  r¥  r  rW  r  rþ  r4  )r  r  rí  rî  r	  r  r
  r  r  r  rO  r  rô  rý  r  Úorig_hxÚorig_cxr'  r(  rŸ  r  Úhidden0Úhidden1rÇ   s                           r,   Úone_layer_lstm_datar`  N  sy  € Ø�q‘	€IØ�q‘	€IÙ%ˆf�QŠi¨4€GÙ%ˆf�QŠi¨4€Gä˜“[ AÒ%ˆˆqŠ	¼¸F»ÀqÒ8H¨6°!ª9Èdð ð €KØ€Gá)0�k "’o°kÀ!±n€OÜ—‘˜C¤ kÓ!2Ó3€IÙØ™d ˜d‘Oˆ	à�Q‰i€GØ�Q‰i€Gà�‰�q˜!˜_Ó-Ø�‰�q˜!˜_Ó-ð 	€Bð
 ó ˆØ�I‰I�a‰LˆÜ�h‰h�s˜I wÓ/ˆð ˆÒØ�N‰Nà—I‘I˜a  O°aÑ$7Ó8Ø—I‘I˜a  O°aÑ$7Ó8ðôð —Y‘Y˜q ! QÓ'¨¯©°1°a¸Ó);�ˆBð ˆÒÜ—‘Ø�W—^‘^ A ¸¸OÑ8KÓLÐMÈqóˆBô —‘Ø�W—^‘^ A ¸¸OÑ8KÓLÐMÈqóˆBô ˜3  B¨	°7¸IÐQRÔS‰ˆˆBØˆØ×Ñ˜2Öð3ñ6 Ø×ÑÔØ˜"�X‰
à�‰˜˜B�xÔ Ø�‰ÔÜ ˜=Ñˆ�Ü—Y‘Y˜w¨Ó*¬E¯I©I°g¸qÓ,AÐAˆ
ä
�)‰)�K Ó
#€CØ�
ˆ?Ðr+   c                 ó4   — d„ } || ||«      rt         S t        S )a*  Check whether we could use decompose lstm with mkldnn_rnn_layer.
    All the below conditions need to be met:
        * ``torch._C._get_mkldnn_enabled()`` returns ``True``.
        * All the input args are on CPU.
        * The dtypes of args are either torch.float or torch.bfloat16.
        * Inference.
        * ``has_projections`` returns ``False``.

    Args:
        * input: the input sequence to LSTM
        * hx: a tuple of the input hidden state and cell state ``(h_0, c_0)`` to LSTM
        * params: the weight and bias tensors of LSTM
    c                 óN  — t         j                  j                  «       sy| gt        |«      z   t        t	        j
                  |«      «      z   }|D �ch c]  }|j                  ’Œ }}t        |«      dk7  ry|j                  «       }|t        j                  d«      k7  ry|D �ch c]  }|j                  ’Œ }}|D ]&  }|t         j                  t         j                  fvsŒ& y | j                  ry|d   j                  d«      |d   j                  d«      k7  }	|	ryyc c}w c c}w )NFr"   rÔ  r   r#   T)r?   rs  Ú_get_mkldnn_enabledry  r	   Úfrom_iterabler”  r†  Úpopré   r  Úbfloat16Úrequires_gradr2  )
rÀ   r'  rí  r   ÚtÚdevicesr”  Údtypesré   rï  s
             r,   Ú
use_mkldnnz2select_one_layer_lstm_function.<locals>.use_mkldnn�  s   € Ü�x‰x×+Ñ+Ô-Øà�'œD ›HÑ$¤t¬E×,?Ñ,?ÀÓ,GÓ'HÑHˆØ%,Ö- �1—8“8Ð-ˆÐ-Üˆw‹<˜1ÒØà—‘“ˆØ”U—\‘\ %Ó(Ò(Øà#*Ö+˜a�!—'“'Ð+ˆÐ+Øò 	ˆEØœUŸ[™[¬%¯.©.Ð9Ò9Ùð	ð ×ÒØà˜Q™%Ÿ*™* Q›-¨2¨a©5¯:©:°a«=Ñ8ˆÙØàùò) .ùò ,s   ÁDÂ#D")r/  rZ  )rÀ   r'  rí  rk  s       r,   Úselect_one_layer_lstm_functionrl  Ž  s!   € òñ: �%˜˜VÔ$Ü$Ð$äÐr+   c	                 óº  — t        |«      dk7  rt        dt        |«      › �«      ‚t        |||d   j                  d«      |d   j                  d«      k7  «      }t	        t        |d   |d   «      «      }	t        | ||«      }
t        | |	||||||||
«
      \  }}t	        t        |Ž «      }|t        j                  |d   d«      t        j                  |d   d«      fS )Nr#   ú$lstm expects two hidden states, got r   r"   )
r†  r0  rñ  r2  ry  rþ  rl  r8  r?   r=  )rÀ   r'  rí  rî  r+  rq  rn  rõ  r‰  r  r2  rÇ   r3  s                r,   Ú	lstm_implro  À  sä   € ô ˆ2ƒw�!‚|ÜÐCÄCÈÃGÀ9ÐMÓNÐNÜ˜6 :¨r°!©u¯z©z¸!«}ÀÀ1ÁÇ
Á
È1ÃÑ/MÓN€FÜ”#�b˜‘e˜R ™UÓ#Ó$€FÜ-¨e°R¸Ó@€HÜ$ØØØØØØØØØØóÑ€Cˆô œ˜mÐ,Ó-€MØ”—‘˜M¨!Ñ,¨aÓ0´%·+±+¸mÈAÑ>NÐPQÓ2RÐRÐRr+   c	                 ó¾  — t        |«      dk7  rt        dt        |«      › �«      ‚t        |||d   j                  d«      |d   j                  d«      k7  «      }t	        t        |d   |d   «      «      }	t        | |	||||||dt        t        |¬«      «
      \  }
}t	        t        |Ž «      }|
t        j                  |d   d«      t        j                  |d   d«      fS )Nr#   rn  r   r"   F)r	  )r†  r0  rñ  r2  ry  rþ  r8  r   r`  r?   r=  rF  s               r,   Úlstm_data_implrq  ã  sÞ   € ô ˆ2ƒw�!‚|ÜÐCÄCÈÃGÀ9ÐMÓNÐNÜ˜6 :¨r°!©u¯z©z¸!«}ÀÀ1ÁÇ
Á
È1ÃÑ/MÓN€FÜ”#�b˜‘e˜R ™UÓ#Ó$€FÜ$ØØØØØØØØØÜÔ#°Ô=óÑ€Cˆô œ˜mÐ,Ó-€MØ”—‘˜M¨!Ñ,¨aÓ0´%·+±+¸mÈAÑ>NÐPQÓ2RÐRÐRr+   c                 ó&  — | j                  dd«      }t        j                  |||«      j                  dd«      }|d   |d   z   j                  «       }|d   |d   z   j                  «       }	|d   |d   |z  z   j	                  «       }
||
z
  |	z  |
z   S )Nr‰   r"   r#   r   )rN  rÂ   r  rÄ   r«   ©r  r÷  r
  r  r  r  Úchunked_igatesÚchunked_hgatesÚ
reset_gateÚ
input_gateÚnew_gates              r,   Úgru_cellry    s¡   € Ø—Y‘Y˜q !“_€NÜ—X‘X˜j¨)°WÓ=×CÑCÀAÀqÓI€NØ  Ñ# n°QÑ&7Ñ7×@Ñ@ÓB€JØ  Ñ# n°QÑ&7Ñ7×@Ñ@ÓB€JØ˜qÑ! ^°AÑ%6¸Ñ%CÑD×JÑJÓL€HØ˜Ñ! ZÑ/°(Ñ:Ð:r+   c                 óP  — t        j                  | ||«      j                  dd«      }t        j                  |||«      j                  dd«      }|d   |d   z   j                  «       }|d   |d   z   j                  «       }	|d   |d   |z  z   j	                  «       }
||
z
  |	z  |
z   S )Nr‰   r"   r   r#   rM  rs  s              r,   Úgru_cell_datar{    s±   € Ü—X‘X˜c 9¨gÓ6×<Ñ<¸QÀÓB€NÜ—X‘X˜j¨)°WÓ=×CÑCÀAÀqÓI€NØ  Ñ# n°QÑ&7Ñ7×@Ñ@ÓB€JØ  Ñ# n°QÑ&7Ñ7×@Ñ@ÓB€JØ˜qÑ! ^°AÑ%6¸Ñ%CÑD×JÑJÓL€HØ˜Ñ! ZÑ/°(Ñ:Ð:r+   c	                 óÀ   — t        ||d«      }t        | |j                  d«      ||||||dt        t        |t
        ¬«      «
      \  }	}
|	t        j                  |
d«      fS )NFr   rE  )rñ  r8  r<  r   r  r{  r?   r=  )rG  r	  r'  rí  rî  r+  rq  rn  rõ  rÇ   r3  s              r,   Úgru_impl_datar}    si   € ô ˜6 :¨uÓ5€FÜ$ØØ
�	‰	�!‹ØØØØØØØÜÔ"°Ä}ÔUóÑ€Cˆð ”—‘˜M¨1Ó-Ð-Ð-r+   c	                 ó¾   — t        ||d«      }t        | |j                  d«      |||||||t        t        t
        ¬«      «
      \  }	}
|	t        j                  |
d«      fS )NFr   r;  )rñ  r8  r<  r   r   ry  r?   r=  )rÀ   r'  rí  rî  r+  rq  rn  rõ  r‰  rÇ   r3  s              r,   Úgru_implr  5  sf   € ô ˜6 :¨uÓ5€FÜ$ØØ
�	‰	�!‹ØØØØØØØÜ”¬Ô2óÑ€Cˆð ”—‘˜M¨1Ó-Ð-Ð-r+   c                 óÂ   — t        | j                  «       ||«      }t        |d«      }t        |d«      }t        j                  j
                  j                  | ||||«      S ©Nr   r"   )r¾  r2  rÁ  r?   r6  r„   Ú_upsample_bilinear2d_aa©rÀ   rû  Úalign_cornersr¼  rÆ  Úscale_hÚscale_ws          r,   Úupsample_bilinear2d_aa_vecr‡  S  sV   € ô )¨¯©«°{ÀMÓR€EÜ˜m¨QÓ/€GÜ˜m¨QÓ/€GÜ�9‰9�>‰>×1Ñ1Øˆu�m W¨góð r+   c                 óÂ   — t        | j                  «       ||«      }t        |d«      }t        |d«      }t        j                  j
                  j                  | ||||«      S r�  )r¾  r2  rÁ  r?   r6  r„   Ú_upsample_bicubic2d_aarƒ  s          r,   Úupsample_bicubic2d_aa_vecrŠ  _  óV   € ô )¨¯©«°{ÀMÓR€EÜ˜m¨QÓ/€GÜ˜m¨QÓ/€GÜ�9‰9�>‰>×0Ñ0Øˆu�m W¨góð r+   c                 óÂ   — t        | j                  «       ||«      }t        |d«      }t        |d«      }t        j                  j
                  j                  | ||||«      S r�  )r¾  r2  rÁ  r?   r6  r„   Ú_upsample_lanczos2d_aarƒ  s          r,   Úupsample_lanczos2d_aa_vecrŽ  k  r‹  r+   c                 óz   — t        | j                  «       ||«      }|r|nd gt        |«      z  }t        | |||«      S r5   )r¾  r2  r†  Ú_upsample_linear)rÀ   rû  r„  r¼  rÆ  rÀ  s         r,   Ú_upsample_linear_vecr‘  w  s=   € ô )¨¯©«°{ÀMÓR€EÙ+‰]°$°¼#¸e»*Ñ1D€FÜ˜E 5¨-¸Ó@Ð@r+   r„  c                 ó    — t        | |||g«      S r5   ©r�  )rÀ   rû  r„  rÛ  s       r,   Úupsample_linear1dr”  …  s   € ô ˜E ;°À¸zÓJÐJr+   c                 ó"   — t        | ||||g«      S r5   r“  )rÀ   rû  r„  rÚ  rÛ  s        r,   Úupsample_bilinear2dr–  �  s   € ô ˜E ;°ÀÈ(Ð?SÓTÐTr+   c                 ó$   — t        | |||||g«      S r5   r“  )rÀ   rû  r„  rá  rÚ  rÛ  s         r,   Úupsample_trilinear3dr˜  Ÿ  s!   € ô Øˆ{˜M¨H°hÀÐ+Ióð r+   c                 óL   — |r|dkD  r| dz
  |dz
  z  S dS |�
|dkD  rd|z  S | |z  S )Nr"   rg   r   r*   )r×  rØ  r„  rn   s       r,   Ú_compute_scalerš  °  sB   € ÙØ5=À²\�˜#‘ (¨S¡.Ñ1ÐHÀqÐHà#Ð/°E¸A²Iˆs�U‰{ÐUÀ7ÈXÑCUÐUr+   c                 ó&   — |r| |z  S | |dz   z  dz
  S ©Nr    r*   )rn   Ú	dst_indexr„  s      r,   Ú_compute_source_indexrž  ·  s$   € ÙØ�yÑ Ð à˜	 C™Ñ(¨3Ñ.Ð.r+   ÚweightsÚweights_precisionc                 ó¾   — t        d„ t        | |«      D «       «      d|dz
  z  z   }||z	  }t        j                  |dd«      j	                  t        j
                  «      S )Nc              3   ó    K  — | ]F  \  }}|j                  t        j                  «      |j                  t        j                  «      z  –— ŒH y ­wr5   )r8   r?   r>  )rÒ  rÄ  rõ  s      r,   rÓ  z%_sum_tensors_uint8.<locals>.<genexpr>Á  s8   è ø€ ò Ù26°!°Qˆ�‰ŒU�[‰[Ó˜AŸD™D¤§¡Ó-Õ-ñùs   ‚AAr"   r   éÿ   )Ú_sum_tensorsrþ  r?   r�   r8   ry  )r‘  rŸ  r   r°  s       r,   Ú_sum_tensors_uint8r¥  ¾  sd   € ô ñ Ü:=¸cÀ7Ó:Kôó à	
Ð  1Ñ$Ñ	%ñ'€Fð Ð(Ñ(€FÜ�;‰;�v˜q #Ó&×)Ñ)¬%¯+©+Ó6Ð6r+   c                 óÚ   — t        j                  | «      j                  «       }d}t        j                  ||j                  ¬«      }d|d|dz   z  z  z   }|dk\  }||j                  «       z
  S )Né   r“  r    r"   i €  )r?   r=  rŽ   r˜  r”  rö   )rŸ  Ú
max_weightÚmax_weight_precisionÚ
precisionsr  r¡  s         r,   Ú_compute_weight_precisionr«  È  si   € Ü—‘˜WÓ%×)Ñ)Ó+€JØÐÜ—‘Ð2¸:×;LÑ;LÔM€JØ�:  z°A¡~Ñ!6Ñ7Ñ7€FØ�gÑ€DØ $§(¡(£*Ñ,Ð,r+   c                 óL  ‡ ‡‡— ‰ j                   d   }‰ j                   dd  }t        |«      }t        j                  ‰ t        j                  j
                  ¬«      \  }Šˆˆˆ fd„}t        t        |||«      «      D �	�
��cg c]  \  }	\  }
}} ||
|||dz
  |	z
  «      ‘Œ }}}
}	}t        t        |Ž «      \  }}}g }t        ddgg|z  Ž D ]c  }d d gt        |«      D �cg c]  }||   dk(  r||   n||   ‘Œ c}z   }t        j                  ‰ |«      }t        |‰«      }|j                  |«       Œe t        t        |«      «      D ]p  }	||	   ||	   z
  j!                  dd«      j#                  ‰«      }t        |d d d…   |dd d…   «      D ��cg c]!  \  }}|t%        j&                  ||z
  |«      z   ‘Œ# }}}Œr t        |«      dk7  rt)        dt        |«      › �«      ‚|d   }t        j*                  ‰ «      }‰ j,                  j.                  d	k(  r|d
k  rt$        j0                  }t3        |t$        j4                  «      s!t)        dt/        |«      j6                  › �«      ‚|j9                  |¬«      }‰ j;                  «       s|j=                  «       }|S c c}}}
}	w c c}w c c}}w )Nr"   r#   r|  c                 ó|  •— t        | |‰	|«      }t        j                  |‰j                  ¬«      j	                  ‰
¬«      }t        ||‰	«      j                  d¬«      } |j                  |j                  d   gdg|z  ¢­Ž }|j	                  t        j                  «      }|dz   j                  | dz
  ¬«      }|||fS )Nr“  rè   r”   rŠ   r   r"   r�   )
rš  r?   r˜  r”  r8   rž  r�   r*  r  rº  )Úinp_sizerØ  rÀ  ÚnsqueezeÚscale_factorrŸ  Úx_f32r9   Úxp1r„  ré   rÀ   s            €€€r,   Ú
get_valuesz$_upsample_linear.<locals>.get_valuesâ  s®   ø€ ä% h°¸-ÈÓPˆô �L‰L˜¨%¯,©,Ô7×:Ñ:ÀÐ:ÓGˆä% l°A°}ÓE×KÑKÐPSÐKÓTˆØ�—‘˜eŸk™k¨!™nÐ@°¨s°hÑ/?Ò@ˆØ�H‰H”U—[‘[Ó!ˆØ�1‰u�m‰m ¨1¡ˆmÓ-ˆØ�a˜ˆ}Ðr+   r   r”   rg   z+Expected vs to have exactly 1 element, got rè  é   z$Expected result to be a Tensor, got r\  )r  r†  rD   rE   r  ÚINT_TO_FLOATrH  rþ  ry  r
   rT   r„   ré  r   r¥  r_  r�   r8   r?   rÛ   r0  r   r”  r×  r`  r7   r   r$   r³  ru  Úround)rÀ   rû  r„  rÀ  rë  Ú	inp_sizesÚn_dimsrV   r³  rŸ  r®  rØ  r  Úxs_f32ÚxsÚxp1sÚvsrN  Úkr   ÚvÚxscaleÚv1Úv2r  r]  ré   s   ` `                       @r,   r�  r�  Ñ  s¬  ú€ ð —‘˜Q‘€JØ—‘˜A˜B�€IÜ�‹^€Fä×'Ñ'ØÜ!×AÑA×NÑNô�H€A€uö
ô 09Ü�	˜;¨Ó/ó0
÷ñ á+ˆAÑ+�˜( Fñ 	�8˜X v¨v¸©z¸A©~Õ>ð€Fó ô œC ˜LÓ)Ñ€FˆB�à	€BÜ˜˜1�v�h Ñ'Ð(ò ˆØ�TˆlÄuÈVÃ}ÖUÀ! q¨¡t¨q¢y˜b še°d¸1±gÑ=ÒUÑUˆÜ×Ñ˜u cÓ*ˆÜ# A uÓ-ˆØ
�	‰	�!�ð	ô ”e˜F“mÓ$ò 
ˆØ˜‘)˜b ™eÑ#×*Ñ*¨3°Ó4×7Ñ7¸Ó>ˆô ˜b¡ 1 ™g r¨!¨$¨Q¨$¡xÓ0÷
ñ ��Bð ”—‘˜2 ™7 FÓ+Ó+ð
ˆò 
ð
ô ˆ2ƒw�!‚|ÜÐJÌ3ÈrË7È)ÐTÓUÐUØ�‰U€Fô ×/Ñ/°Ó6€Mð ‡|�|×Ñ˜FÒ" z°B¢Ü×/Ñ/ˆä�fœeŸl™lÔ+ÜØ2´4¸³<×3HÑ3HÐ2IÐJó
ð 	
ð ×Ñ¨]ÐÓ;€Fà×"Ñ"Ô$Ø—‘“ˆà€MùõYùò Vùó
s   ÂJ
ÃJÆ&J rN  rO  c                 ó4   — | j                   |j                   k(  S r5   rí  )rN  rO  s     r,   Úis_same_sizerÃ    s   € à�7‰7�a—g‘gÑÐr+   c                 ó.   — t         j                  | |«      S r5   )r„   rœ  )r9   r  rF   s      r,   Ú_reshape_aliasrÅ  $  s   € ô �9‰9�Q˜ÓÐr+   c                 ó.   — t         j                  | |«      S r5   )r„   r£  )r9   rŸ  s     r,   ré  ré  *  s   € ä�:‰:�a˜Ó!Ð!r+   c                 ó2   — t         j                  | |||«      S r5   )r„   r€  )r9   rŸ  r|   r)  s       r,   r+  r+  /  s   € ä�>‰>˜!˜W e¨ZÓ8Ð8r+   c                 ó’  — |D ]F  }|€Œt        j                  |j                  t         j                  t         j                  fv d„ «       ŒH t        j                  |j                  t         j
                  k(  d„ «       ddlm}  || j                  «       dk(  «      r<t         j                  j                  | |«      }| j                  |j                  |«      S t        t        |«      «      D ]2  }||   }|€Œ|j                  d| j!                  |«      dz
  ¬«      ||<   Œ4 t"        j%                  | |«      j'                  | |«      S )Nc                   ó   — y©Nz3tensors used as indices must be long or int tensorsr*   r*   r+   r,   r‚   z&_unsafe_masked_index.<locals>.<lambda>:  rÊ  r+   c                   ó   — y©Nz*tensors used as masks must be bool tensorsr*   r*   r+   r,   r‚   z&_unsafe_masked_index.<locals>.<lambda>?  rÊ  r+   r   r†  r"   rŠ  )r?   rƒ   ré   r—  r�  rš  rw  r‡  rß   rÿ  Úmeta_index_Tensorrí   r  rT   r†  r�   r2  r„   ré  rä  )r9   r¡  rŸ  Úfillr£  r‡  Úmeta_resultrŸ  s           r,   r�  r�  4  s  € àò ˆØÑÜ�L‰LØ—‘¤§
¡
¬E¯I©IÐ6Ð6ÙMõðô 
‡L�LØ�
‰
”e—j‘jÑ Ù<ôõ
 Eá�a—g‘g“i 1‘nÔ%Ü×/Ñ/×AÑAÀ!ÀWÓMˆØ�z‰z˜+×+Ñ+¨TÓ2Ð2ä”3�w“<Ó ò ?ˆØ˜‘
ˆØÑØŸ™¨°·±°q³	¸A±˜Ó>ˆG�AŠJð?ô
 ×Ñ˜a Ó)×5Ñ5°t°e¸TÓBÐBr+   c                 óL  — |D ]F  }|€Œt        j                  |j                  t         j                  t         j                  fv d„ «       ŒH t        j                  |j                  t         j
                  k(  d„ «       | j                  «       dk(  r| j                  «       S t        t        |«      «      D ]B  }||   }|€Œ|j                  | j                  |«       | j                  |«      dz
  ¬«      ||<   ŒD |j                  | d«      }t        j                  | ||d¬«      S )Nc                   ó   — yrÊ  r*   r*   r+   r,   r‚   z5_unsafe_masked_index_put_accumulate.<locals>.<lambda>V  rÊ  r+   c                   ó   — yrÌ  r*   r*   r+   r,   r‚   z5_unsafe_masked_index_put_accumulate.<locals>.<lambda>[  rÊ  r+   r   r"   rŠ  Tr(  )r?   rƒ   ré   r—  r�  rš  rß   r—  rT   r†  r�   r2  rä  r„   r+  )r9   r¡  rŸ  r  r£  rŸ  Úmasked_values          r,   r˜  r˜  P  s   € àò ˆØÑÜ�L‰LØ—‘¤§
¡
¬E¯I©IÐ6Ð6ÙMõðô 
‡L�LØ�
‰
”e—j‘jÑ Ù<ôð
 	‡w�wƒy�A‚~Ø�w‰w‹yÐä”3�w“<Ó ò HˆØ˜‘
ˆØÑØŸ™¨!¯&©&°«)¨¸¿¹À»ÀQ¹˜ÓGˆG�AŠJðHð
 ×%Ñ% t e¨QÓ/€LÜ×!Ñ! ! W¨lÀtÐ!ÓLÐLr+   c                 óÖ  — | j                  «       }d}|dk  rd}|�6|dkD  r*dg|z  }|j                  d   ||<   |j                  |«      }n|}| |z  } t        j                  ||k7  |d«      }	|	j                  |«      }
t        j                  | ||
«      j                  |«       }t        j                  ||k7  |d«      }|t        j                  j                  k(  r|dkD  r| j                  dd«      }||fS |�lj                  | j                  «      }t        j                  |||
«      j                  |«      }t        j                  ||k7  |d«      }|j                  «       }n"||k7  j                  «       j                  | «      }|t        j                  j                  k(  r|j                  «       }||fS |t        j                   j                  k(  r|j                  «       |z  }||fS )Nr"   r#   r   r*   r”   )rO   r  rœ  r?   ri   rU   Úgatherr   r!   r'   r|   rí   r–  rö   r8   r)   r(   )r{   rÿ   rÎ   ró   r&  r¸  r+  r  Úwr,  Úsafe_target_r  r'  Úwsums                 r,   Ú_nll_loss_forwardrÙ  j  sÐ  € ð �X‰X‹Z€FØ€KØ�‚zØˆàÐØ�AŠ:àðàñˆEð "(§¡¨a¡ˆE�+ÑØ—‘˜EÓ"‰AàˆAØ�a‰xˆÜ—+‘+˜f¨Ñ4°f¸aÓ@€KØ×(Ñ(¨Ó5€Lô �l‰l˜4 ¨lÓ;×CÑCÀKÓPÐP€Fä�[‰[˜ <Ñ/°¸Ó;€Fà”I—N‘N×(Ñ(Ò(¨V°aªZØ—}‘} R¨Ó-ˆØ�|Ð#Ð#àÐà�H‰H�T—Z‘ZÓ ˆÜ�|‰|˜A˜{¨LÓ9×AÑAÀ+ÓNˆÜ�{‰{˜6 \Ñ1°4¸Ó;ˆØ—x‘x“z‰à ,Ñ.×3Ñ3Ó5×8Ñ8¸Ó>ˆà”I—M‘M×'Ñ'Ò'Ø—‘“ˆð �<ÐÐð 
”i—n‘n×*Ñ*Ò	*Ø—‘“ Ñ,ˆà�<ÐÐr+   c                 óp  ‡ ‡— ‰ j                  «       dkD  r‰ j                  «       dk  st        d‰ j                  «       › d�«      ‚‰j                  «       dkD  rt        d‰j                  «       › d�«      ‚‰ j                  «       dk(  xr ‰j                  «       dk(  }|s7t        j                  ‰ j                  d   ‰j                  d   k(  ˆ ˆfd„«       ‰ j                  d   }|�A|j                  «       dk(  r|j                  «       |k(  st        d	|› d
|j                  › �«      ‚t        ‰ ‰|||«      S )Nr   r#   r>  r?  r"   r@  c                  ó>   •— d‰ j                   › d‰j                   › d�S )NrA  rB  rC  rí  )r{   rÿ   s   €€r,   r‚   z"nll_loss_forward.<locals>.<lambda>´  s    ø€ Ð0°·±°¸JÀvÇ|Á|ÀnÐTUÐV€ r+   rS   z/weight tensor should be defined either for all z7 classes or no classes but got weight tensor of shape: )rO   r0  r?   rƒ   r  rß   rÙ  )r{   rÿ   rÎ   ró   r&  rE  Ú	n_classess   ``     r,   Únll_loss_forwardrÝ     s#  ù€ ð �H‰H‹J˜ŠN˜tŸx™x›z¨QšÜÐDÀTÇXÁXÃZÀLÐPQÐRÓSÐSØ‡z�zƒ|�aÒÜØOÐPV×PZÑPZÓP\È~Ð]^Ð_ó
ð 	
ð —8‘8“: ‘?Ò8 v§z¡z£|°qÑ'8€LÙÜ�‰Ø�J‰J�q‰M˜VŸ\™\¨!™_Ñ,ÜVô	
ð
 —
‘
˜2‘€IàÐ 6§:¡:£<°1Ò#4¸¿¹»È9Ò9TÜØ=¸i¸[ð I/Ø/5¯|©|¨nð>ó
ð 	
ô
 ˜T 6¨6°9¸lÓKÐKr+   c                 ó    — t        | ||||«      S r5   )rÙ  )r{   rÿ   rÎ   ró   r&  s        r,   Únll_loss2d_forwardrß  Â  s   € ô ˜T 6¨6°9¸lÓKÐKr+   ÚAc                 ó0   — |dz   | z  |dz   z
  | z  | z  dz   S )Nr#   r‰   r"   r*   ©r9   rà  s     r,   Ú_upsample_cubic_convolution1rã  Ð  s(   € Ø�‰U�a‰K˜1˜q™5Ñ! QÑ&¨Ñ*¨QÑ.Ð.r+   c                 ó<   — || z  d|z  z
  | z  d|z  z   | z  d|z  z
  S )Nrü  é   rH  r*   râ  s     r,   Ú_upsample_cubic_convolution2ræ  Ô  s0   € Ø�‰U�Q˜‘U‰]˜aÑ ! a¡%Ñ'¨1Ñ,¨q°1©uÑ4Ð4r+   rh  c                 óÒ  — d}| j                   t        j                   d«      k(  r�t        j                  | d| z
  gd¬«      }t        j                  | dz   d| z
  gd¬«      }t        ||«      }t	        ||«      }t        j
                  |d¬«      \  }}t        j
                  |d¬«      \  }}	|||	|fS t        | dz   |«      t	        | |«      t	        d| z
  |«      t        d| z
  |«      fS )Ng      è¿rÔ  rg   r   r€   rç   )r”  r?   r=  ræ  rã  r<  )
rh  rà  Útt1Útt2Úw03Úw12r#  r&  r$  r%  s
             r,   Ú _upsample_get_cubic_coefficientsrì  Ø  sß   € Ø€Aà‡x�x”5—<‘< Ó&Ò&Ü�k‰k˜1˜c A™g˜,¨AÔ.ˆÜ�k‰k˜1˜s™7 C¨!¡GÐ,°!Ô4ˆÜ*¨3°Ó2ˆÜ*¨3°Ó2ˆÜ—‘˜c qÔ)‰ˆˆBÜ—‘˜c qÔ)‰ˆˆBØ�2�r˜2ˆ~Ðô )¨¨S©°!Ó4Ü(¨¨AÓ.Ü(¨¨q©°!Ó4Ü(¨¨q©°!Ó4ð	
ð 	
r+   ÚcoeffsÚtsc                 óP   — t        |«      }t        d„ t        | |«      D «       «      S )Nc              3   ó,   K  — | ]  \  }}||z  –— Œ y ­wr5   r*   ©rÒ  r  r  s      r,   rÓ  z+_upsample_cubic_interp1d.<locals>.<genexpr>î  s   è ø€ ÒE¡H R¨˜˜R�ÑEùrÈ  )rì  r¤  rþ  )rí  rî  Úcoeffs2s      r,   Ú_upsample_cubic_interp1dró  ì  s$   € Ü.¨rÓ2€GÜÑE´°F¸GÓ0DÔEÓEÐEr+   c                 ó6   — t        t        j                  | «      S r5   )r   r?   r7  )rî  s    r,   r¤  r¤  ò  s   € Ü”%—)‘)˜RÓ Ð r+   Ú	num_stepsc                 óŠ   — | dk  rt        j                  d||¬«      S |s| dz
  | z  nd}t        j                  | || ||¬«      S )Nr"   r   r•  )Ústepsr”  ré   )r?   r§  Úlinspace)rõ  r„  ré   r”  rN  s        r,   Ú_linspace_from_neg_onerù  ö  sI   € ð �A‚~Ü�|‰|˜A f°EÔ:Ð:á-:ˆ)�a‰-˜9Ò	$À€AÜ�>‰>˜1˜"˜a y¸ÀuÔMÐMr+   ÚthetaÚhrÖ  c                 óü  — | j                   }| j                  }t        ||||«      j                  d|d«      }t        ||||«      j                  |dd«      }t	        j
                  d||¬«      }t        j                  j                  j                  |ddd¬«      }t        j                  j                  j                  |ddd¬«      }t        j                  j                  j                  |d	dd¬«      }||z   |z   S )
Nr"   )r"   r"   r"   r¹  )r   r#   Úconstantr   ©rð  r)  r|   ©r"   r"   )r#   r   ©	ré   r”  rù  rœ  r?   r™  rç  rJ  rð  )	rú  rû  rÖ  r„  ré   r”  Úgrid_xÚgrid_yÚgrid_ones	            r,   Ú_make_base_grid_4dr     så   € Ø�K‰K€EØ�\‰\€Fô $ A }°e¸VÓD×IÑIÈ!ÈQÐPQÓR€FÜ# A }°e¸VÓD×IÑIÈ!ÈQÐPQÓR€FÜ�z‰z˜)¨5¸Ô@€Hô �X‰X× Ñ ×$Ñ$ V°¸jÐPQÐ$ÓR€FÜ�X‰X× Ñ ×$Ñ$ V°¸jÐPQÐ$ÓR€FÜ�x‰x×"Ñ"×&Ñ& x°VÀ*ÐTUÐ&ÓV€HØ�F‰?˜XÑ%Ð%r+   rè  c                 ó   — | j                   }| j                  }t        ||||«      j                  dd|d«      }t        ||||«      j                  d|dd«      }t        ||||«      j                  |ddd«      }	t	        j
                  d||¬«      }
t        j                  j                  j                  |ddd¬«      }t        j                  j                  j                  |ddd¬«      }t        j                  j                  j                  |	d	dd¬«      }	t        j                  j                  j                  |
d
dd¬«      }
||z   |	z   |
z   S )Nr"   )r"   r"   r"   r"   r¹  )r   r‰   rý  r   rþ  )r"   r#   )r#   r"   )r‰   r   r   )rú  rè  rû  rÖ  r„  ré   r”  r  r  Úgrid_zr  s              r,   Ú_make_base_grid_5dr    s5  € Ø�K‰K€EØ�\‰\€Fä# A }°e¸VÓD×IÑIÈ!ÈQÐPQÐSTÓU€FÜ# A }°e¸VÓD×IÑIÈ!ÈQÐPQÐSTÓU€FÜ# A }°e¸VÓD×IÑIÈ!ÈQÐPQÐSTÓU€FÜ�z‰z˜,¨e¸FÔC€Hô �X‰X× Ñ ×$Ñ$ V°¸jÐPQÐ$ÓR€FÜ�X‰X× Ñ ×$Ñ$ V°¸jÐPQÐ$ÓR€FÜ�X‰X× Ñ ×$Ñ$ V°¸jÐPQÐ$ÓR€FÜ�x‰x×"Ñ"×&Ñ& x°VÀ*ÐTUÐ&ÓV€HØ�F‰?˜VÑ# hÑ.Ð.r+   c                 óÒ   — |\  }}}}t        | |||¬«      }|j                  ddd«      | j                  j                  d«      z  j	                  d«      }|j                  |||d«      S )N©r„  rS   r‰   r"   r^  r#   )r  rœ  rb  rU   rö   )	rú  r2  r„  rW  rV   rû  rÖ  Ú	base_gridÚgrids	            r,   Ú_affine_grid_generator_4dr  "  sg   € Ø�J€A€qˆ!ˆQÜ" 5¨!¨Q¸mÔL€Ið �N‰N˜2˜q !Ó$ u§x¡x×'9Ñ'9¸!Ó'<Ñ<×AÑAÀ"ÓE€DØ�9‰9�Q˜˜1˜aÓ Ð r+   c                 óØ   — |\  }}}}}t        | ||||¬«      }|j                  ddd«      | j                  j                  d«      z  j	                  d«      }	|	j                  ||||d«      S )Nr	  rS   rH  r"   r^  r‰   )r  rœ  rb  rU   rö   )
rú  r2  r„  rW  rV   rè  rû  rÖ  r
  r  s
             r,   Ú_affine_grid_generator_5dr  ,  sm   € Ø�M€A€qˆ!ˆQ�Ü" 5¨!¨Q°ÀÔO€Ið �N‰N˜2˜q !Ó$ u§x¡x×'9Ñ'9¸!Ó'<Ñ<×AÑAÀ"ÓE€DØ�9‰9�Q˜˜1˜a Ó#Ð#r+   c                 óš   — t        j                  t        |«      dv d„ «       t        |«      dk(  rt        | ||¬«      S t	        | ||¬«      S )Nr8  c                   ó   — y)NzCaffine_grid_generator needs 4d (spatial) or 5d (volumetric) inputs.r*   r*   r+   r,   r‚   z'affine_grid_generator.<locals>.<lambda><  rÊ  r+   rH  r	  )r?   rƒ   r†  r  r  )rú  r2  r„  s      r,   Úaffine_grid_generatorr  6  sJ   € ô 
‡L�LÜˆD‹	�VÐÙUôô ˆ4ƒy�A‚~Ü(¨°ÀMÔRÐRä(¨°ÀMÔRÐRr+   r  Úinterpolation_modeÚpadding_modeÚ_expand_gridc           	      óð  ‡ ‡‡‡‡‡‡ ‡!‡"‡#‡$‡%‡&‡'‡(‡)‡*‡+‡,‡-‡.‡/‡0‡1‡2— t        j                  ‰dv ˆfd„«       t        j                  ‰dv ˆfd„«       dt        dt        dt        fˆfd„Š2dt        dt        d	t        dt        fd
„Š0dt        dt        dt        fˆˆˆ0fd„Š$dt        dt        dt        fˆ$ˆ2fd„}‰ j                  \  Š!ŠŠ(Š)|j                  \  }Š.Š/}|dk7  rt        d|› �«      ‚ddlm}	m}
 t        j                  t         j                  «      j                  }‰ j                  j                  dv xr  |	 |
‰(|k  ‰)|k  «      «      }|rt         j                  nt         j                  Š+‰r(|j                  ‰!d‰.‰/|«      j!                  ‰!‰‰.‰/d«      }dt        dt        dt        fˆ(ˆ)fd„Š*t        j"                  ‰!‰ j                  ¬«      j                  ‰!ddd«      Š"t        j"                  ‰‰ j                  ¬«      j                  d‰dd«      Š dt        dt        dt        dt$        fˆˆ!ˆˆ*ˆ+ˆ.ˆ/fd„Š#dt        dt        dt        fˆ ˆ"ˆ ˆ#fd„Š&|d   }|d   }‰dk(  r• ||‰)«      } ||‰(«      }|j'                  «       |j'                  «       cŠ,Š-‰,dz   ‰-}}‰,‰-dz   }}||}}||z
  ||z
  z  }||z
  ||z
  z  }||z
  ||z
  z  }|‰,z
  |‰-z
  z  }t)        ˆ&fd„‰,‰-|f|||f|||f|||ffD «       «      S ‰dk(  r< ||‰)«      } ||‰(«      }|j+                  «       }|j+                  «       } ‰&||d«      S  ‰2|‰)«      } ‰2|‰(«      }|j'                  «       Š,|j'                  «       Š-|‰,z
  Š1|‰-z
  }‰s"‰1j-                  d«      Š1|j-                  d«      }dt        dt        dt        fˆ$ˆ&ˆ(ˆ)fd„Š'd t        dt        fˆ'ˆ,ˆ-ˆ1fd!„Š%t/        ˆ%fd"„t1        d#«      D «       «      }t3        ||«      S )$N)r   r"   r#   c                  ó   •— d‰ › �S )NzInvalid interpolation mode r*   )r  s   €r,   r‚   z"_grid_sampler_2d.<locals>.<lambda>U  s   ø€ Ð-Ð.@Ð-AÐB€ r+   c                  ó   •— d‰ › �S )NzInvalid padding mode r*   )r  s   €r,   r‚   z"_grid_sampler_2d.<locals>.<lambda>X  s   ø€ Ð-BÀ<À.Ð+Q€ r+   Úcoordsr2  rP   c                 óB   •— ‰r|dz  dz
  n|dz  }|dz  dz
  }| |z  |z   S rœ  r*   )r  r2  rÛ   Úofsr„  s       €r,   Úunnormalizez%_grid_sampler_2d.<locals>.unnormalize[  s8   ø€ ñ %2ˆt�c‰z˜CÒ¸¸s¹
ˆØ�S‰j˜3ÑˆØ˜‰|˜cÑ!Ð!r+   Ú	twice_lowÚ
twice_highc                 óP  — ||k(  rt        j                  | «      S |dz  }||z
  dz  }| |z
  j                  «       }t        j                  ||«      }||z  j	                  «       j                  t         j                  ¬«      }t        j                  |dz  dk(  ||z   ||z   |z
  «      S )Nr#   rè   r"   r   )r?   r  rà   ÚfmodÚfloorr8   Úint8ri   )r  r  r  Ú
coords_minÚcoords_spanÚcoords2ÚextraÚflipss           r,   Úreflect_coordinatesz-_grid_sampler_2d.<locals>.reflect_coordinatesf  sª   € Ø˜
Ò"Ü×#Ñ# FÓ+Ð+Ø ‘]ˆ
Ø! IÑ-°Ñ2ˆØ˜JÑ&×+Ñ+Ó-ˆÜ—
‘
˜7 KÓ0ˆØ˜;Ñ&×-Ñ-Ó/×2Ñ2¼¿¹Ð2ÓDˆÜ�{‰{Ø�A‰I˜‰N˜E JÑ.°¸jÑ0HÈ5Ñ0Pó
ð 	
r+   c                 óÊ   •— ‰dk(  r| S ‰dk(  rt        j                  | d|dz
  «      S ‰r ‰| dd|dz
  z  «      }n ‰| dd|z  dz
  «      }t        j                  |d|dz
  «      S )Nr   r"   r#   rS   r�   )r  r2  Úcoords_reflectedr„  r  r'  s      €€€r,   Úcompute_coordinatesz-_grid_sampler_2d.<locals>.compute_coordinatesr  sx   ø€ Ø˜1ÒØˆMØ˜QÒÜ—;‘;˜v q¨$°©(Ó3Ð3áÙ#6°v¸qÀ!ÀtÈaÁxÁ.Ó#QÑ á#6°v¸rÀ1ÀtÁ8ÈaÁ<Ó#PÐ Ü—;‘;Ð/°°D¸1±HÓ=Ð=r+   c                 ó(   •—  ‰| |«      } ‰||«      S r5   r*   )r  r2  Ú	coords_unr*  r  s      €€r,   Úcompute_source_indexz._grid_sampler_2d.<locals>.compute_source_index~  s   ø€ Ù ¨Ó-ˆ	Ù" 9¨dÓ3Ð3r+   r#   z4grid last dimension must be 2 (for x,y coords), got r   )r‡  Úsym_and)rè  Úxpur"   rº  Úysc                 ó˜   •— t        j                  d| k  t        j                  | ‰k  t        j                  d|k  |‰k  «      «      «      S rs   ©r?   r›  )rº  r0  ÚiHÚiWs     €€r,   Úin_bounds_condz(_grid_sampler_2d.<locals>.in_bounds_cond›  sF   ø€ Ü× Ñ Ø�‰G”U×&Ñ& r¨B¡w´×0AÑ0AÀ!ÀrÁ'È2ÐPRÉ7Ó0SÓTó
ð 	
r+   r“  Úwsc                 óœ   •‡‡—  ‰| |«      Š‰r‰ndŠt        ˆˆˆˆ
ˆfd„| j                  ‰	¬«      |j                  ‰	¬«      |fD «       «      S )Nr"   c              3   óp   •K  — | ]-  }t        j                  ‰|d «      j                  ‰‰‰‰«      –— Œ/ y­wrÐ  )r?   ri   rœ  )rÒ  rh  rú  rõ  rá  ÚoHÚoWs     €€€€€r,   rÓ  z1_grid_sampler_2d.<locals>.clip.<locals>.<genexpr>ª  s7   øè ø€ ò 
àô �K‰K˜˜a Ó#×(Ñ(¨¨A¨r°2×6ñ
ùs   ƒ36rè   )rì  r8   )rº  r0  r6  rõ  rá  rû  rú  r  r5  Úindex_dtyper9  r:  s      @@€€€€€€€r,   Úclipz_grid_sampler_2d.<locals>.clip£  sQ   ú€ Ù˜b "Ó%ˆñ
 ‰A 1ˆÜ÷ 
à—e‘e +�eÓ.°·±¸K°Ó0HÈ"ÐMô
ó 
ð 	
r+   ÚixÚiyc                 ó8   •—  ‰	| ||«      \  }}}‰‰‰||f   |z  S r5   r*   )
r=  r>  rÖ  Úidx_xÚidx_yÚw_ÚC_idxÚN_idxrN  r<  s
         €€€€r,   Úget_summandz%_grid_sampler_2d.<locals>.get_summand¯  s0   ø€ á  B¨›?Ñˆˆu�bØ�˜˜u eÐ+Ñ,¨rÑ1Ð1r+   ).r   ).r"   c              3   ó:   •K  — | ]  \  }}} ‰|||«      –— Œ y ­wr5   r*   )rÒ  r=  r>  rÖ  rE  s       €r,   rÓ  z#_grid_sampler_2d.<locals>.<genexpr>Å  s(   øè ø€ ò 
á��R˜ñ ˜˜B ×"ñ
ùs   ƒc                 ó<   •—  ‰| ‰«      } ‰|‰«      } ‰||d«      S r\   r*   )r=  r>  r9   rZ   r*  rE  r3  r4  s       €€€€r,   Úget_value_boundedz+_grid_sampler_2d.<locals>.get_value_boundedä  s*   ø€ Ù# B¨Ó+ˆAÙ# B¨Ó+ˆAÙ˜q ! QÓ'Ð'r+   r  c                 ó‚   •— ‰| dz
  z   } ‰‰dz
  |«       ‰‰|«       ‰‰dz   |«       ‰‰dz   |«      f}t        |‰«      S )Nr"   r#   )ró  )r  Úiy_ofsÚcsrH  Úix_nwÚiy_nwÚtxs      €€€€r,   Ú	get_coeffz#_grid_sampler_2d.<locals>.get_coeffé  s[   ø€ Ø˜c A™gÑ&ˆFá! %¨!¡)¨VÓ4Ù! %¨Ó0Ù! %¨!¡)¨VÓ4Ù! %¨!¡)¨VÓ4ð	ˆBô ,¨B°Ó3Ð3r+   c              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­wr5   r*   )rÒ  r  rO  s     €r,   rÓ  z#_grid_sampler_2d.<locals>.<genexpr>ó  s   øè ø€ Ò:¨#‘y —~Ñ:ùó   ƒrH  )r?   rƒ   r   r�  r  r0  rw  r‡  r.  r  r>  rŽ   r”  r×  rº  rœ  r–  r˜  r   r   r¤  r¶  rU   rì  rT   ró  )3rN  r  r  r  r„  r  r-  rV   Útwor‡  r.  Ú	int32_maxÚuse_32bit_indicesr9   rZ   r=  r>  Úix_neÚiy_neÚix_swÚiy_swÚix_seÚiy_seÚw_nwÚw_neÚw_swÚw_seÚ
ix_nearestÚ
iy_nearestÚtyrí  rû  rC  rú  rD  r<  r*  rO  rE  rH  r3  r4  r5  r;  rL  rM  r9  r:  r'  rN  r  s3   ` ````                         @@@@@@@@@@@@@@@@@@@@r,   Ú_grid_sampler_2drb  D  s"  ÿÿÿø€ ô 
‡L�LØ˜iÐ'ÛBôô 
‡L�LØ˜	Ð!Ó#Qôð"œFð "¬#ð "´&õ "ð

¤Fð 

´sð 

Ìð 

ÔPVó 

ð
>¤Fð 
>´#ð 
>¼&÷ 
>ð4¤Vð 4´3ð 4¼6ö 4ð —7‘7�L€A€qˆ"ˆbØ—Z‘Z�N€A€rˆ2ˆsØ
ˆa‚xÜØBÀ3À%ÐHó
ð 	
÷ Nä—‘œEŸK™KÓ(×,Ñ,€Ið Ÿ™Ÿ™¨Ð8ò ¹^Ù��i‘  y¡Ó1ó>Ðñ "3”%—+’+¼¿¹€Káð �y‰y˜˜A˜r 2 sÓ+×2Ñ2°1°a¸¸RÀÓCˆð
œ6ð 
¤vð 
´&ö 
ô
 �L‰L˜ 1§8¡8Ô,×1Ñ1°!°Q¸¸1Ó=€EÜ�L‰L˜ 1§8¡8Ô,×1Ñ1°!°Q¸¸1Ó=€Eð

”ð 

œVð 

¬ð 

Ô4F÷ 

ó 

ð2œð 2¤Fð 2´&÷ 2ð 2ð
 	ˆV‰€AØˆV‰€Aà˜QÒÙ! ! RÓ(ˆÙ! ! RÓ(ˆà—x‘x“z 2§8¡8£:ˆˆˆuØ˜q‘y %ˆuˆØ˜e a™iˆuˆØ˜eˆuˆà˜‘
˜u r™zÑ*ˆØ�U‘
˜u r™zÑ*ˆØ˜‘
˜r E™zÑ*ˆØ�U‘
˜r E™zÑ*ˆäó 
ð ˜˜tÐ$Ø˜˜tÐ$Ø˜˜tÐ$Ø˜˜tÐ$ð	 ô
ó 
ð 	
ð 
˜qÒ	 Ù! ! RÓ(ˆÙ! ! RÓ(ˆà—X‘X“Zˆ
Ø—X‘X“Zˆ
á˜: z°1Ó5Ð5á˜˜BÓˆÙ˜˜BÓˆà—‘“
ˆØ—‘“
ˆà�%‰ZˆØ�%‰ZˆáØ—‘˜a“ˆBØ—‘˜a“ˆBð	(¤&ð 	(¬fð 	(¼÷ 	(ð 	(ð
	4œ3ð 	4¤6÷ 	4ð 	4ô Ó:´°q³Ô:Ó:ˆÜ'¨°Ó3Ð3r+   c                 ó"   — t        | ||||¬«      S )N)r  r  r  r„  )rb  )rN  r  r  r  r„  s        r,   Úgrid_sampler_2drd  ÷  s    € ô Ø	ØØ-Ø!Ø#ôð r+   c                 ó&  ‡ ‡— t        j                  ‰ j                  «       dk(  xr ‰j                  «       dk(  ˆ ˆfd„«       t        j                  ‰ j                  d«      ‰j                  d«      k(  ˆ ˆfd„«       ‰ ‰z  j	                  d¬«      S )Nr#   r"   c                  óL   •— d‰ j                  «       › d‰j                  «       › �S )Nzmatrix @ vector expected, got rö  r€   ©r{   rð  s   €€r,   r‚   zmv.<locals>.<lambda>  s!   ø€ Ð0°·±³°¸B¸s¿w¹w»y¸kÐJ€ r+   r   c                  óv   •— d‰ j                  d«      › d‰ j                  d«      › d‰j                  d«      › d�S )Nzsize mismatch, got input (r   r9   r"   z), vec (rC  rF  rg  s   €€r,   r‚   zmv.<locals>.<lambda>  s<   ø€ Ð,¨T¯Y©Y°q«\¨N¸!¸D¿I¹IÀa»L¸>ÈÐRU×RZÑRZÐ[\ÓR]ÐQ^Ð^_Ð`€ r+   r€   )r?   rƒ   rO   r2  rö   rg  s   ``r,   rò  rò  
  ss   ù€ ô 
‡L�LØ�‰‹
�a‰Ò*˜CŸG™G›I¨™NÜJôô 
‡L�LØ�	‰	�!‹˜Ÿ™ ›Ñ#Ü`ôð �3‰J×Ñ ÐÓ"Ð"r+   c                 óø   — |�-|dz
  |z  dz   }d|z
  | z  |t        j                  | «      z  z
  }nd|z
  | z  t        j                  | «      z
  }|�||z  }|j                  |j                  «      }t	        ||«      S r\   )rÂ   Ú
logsigmoidr8   ré   r÷   )r{   rÿ   rÎ   Ú
pos_weightró   Ú
log_weightrò   s          r,   Ú binary_cross_entropy_with_logitsrm    sŠ   € ð
 ÐØ  1‘n¨Ñ.°Ñ2ˆ
Ø�F‘
˜dÑ" j´1·<±<ÀÓ3EÑ&EÑF‰à�F‘
˜dÑ"¤Q§\¡\°$Ó%7Ñ7ˆàÐØ�f‰}ˆð �7‰7�6—<‘<Ó €DÜ  iÓ0Ð0r+   Útensor1Útensor2Úis_outc                 óò  ‡	— | j                   |j                   k\  r| |fn|| f\  }}ddlmŠ	 |j                   dk\  r|j                   dk  sy|j                  r|sy| j                   dk(  ry ‰	t	        |«      dk(  «      ry|j
                  }|j                  «       }dg}t        |dd  «      D ]  }|j                  ||d   z  «       Œ t        ˆ	fd	„t        |t        t        |«      «      |«      D «       «      S )
Nr   r†  r‰   r#   FTr"   rS   c              3   óV   •K  — | ]   \  }}} ‰|d k(  «      xs  ‰||k(  «      –— Œ" y­wrÊ  r*   )rÒ  r¶   r·   r2  r‡  s       €r,   rÓ  zshould_fold.<locals>.<genexpr>E  s9   øè ø€ ò áˆD�%˜ñ 	�t˜q‘yÓ!ÒB¡^°D¸E±MÓ%BÓBñùs   ƒ&))r�  rw  r‡  rg  Ú	sym_numelr  rz  r_  r¥  r  rþ  ry  )
rn  ro  rp  Út1Út2Út1_shapeÚ	t1_strideÚexpected_strider2  r‡  s
            @r,   Úshould_foldry  -  sô   ø€ ð $+§<¡<°7·<±<Ò#?ˆg�wÑÀgÈwÐEW�F€BˆåDà�G‰G�qŠL˜RŸW™W¨š\ØØ	×Ò¡ØØ‡|�|�qÒØÙ”i “m qÑ(Ô)Øà�x‰x€HØ—	‘	“€Ið �c€OÜ˜ ! "˜Ó&ò ;ˆØ×Ñ˜t o°bÑ&9Ñ9Õ:ð;äó ä!$Ø”tœH _Ó5Ó6¸ó"
ôó ð r+   )Úpass_is_out)rp  c                óŒ	  — ddl m}m} | j                  «       }|j                  «       }|dk(  s|dk(  rt	        d|› d|› �«      ‚|dk(  r|dk(  rt        j                  | |«      S |dk(  r|dk(  rt        j                  | |«      S |dk(  rC|dk(  r>t        j                  t        j                  t        j                  | d«      |«      d«      S |dk(  r|dk(  rt        j                  | |«      S t        | ||«      �r>||kD  }|r|j                  n| }|s|n|dk(  r| j                  «       n| }	|j                  }
t        |
d d «      }t!        t"        j$                  |«      }|	j                  «       dk(  }|r|j'                  |	j                  d   «       |j)                  ||
d   «      }|rWt
        j*                  j,                  j/                  |j                  |	«      |«      }|r|j                  j1                  «       S |S t
        j*                  j,                  j/                  |j                  |	«      |«      S |dk\  �rp|dk\  �rj|dkD  r| j3                  d«      nd}| j3                  d«      }| j                  d d }|dkD  r|j3                  d«      n|j3                  d«      }|dkD  r|j3                  d«      nd}g }t5        |dz
  «      D ]"  }|j'                  |j3                  |«      «       Œ$ |d	k(  r€|d	k(  r{ ||d   |d   k7  «      rj ||d   dk(  «      r'| j6                  rt9        | j                  d«      |«      S  ||d   dk(  «      r'|j6                  rt9        | |j                  d«      «      S t        t        j:                  ||«      «      }|||gz   }t=        |«      }| j?                  |«      j)                  |||«      }|dk(  }|r7||gz   }|j?                  |«      j)                  ||«      j                  d«      }n)|||gz   }|j?                  |«      j)                  |||«      }|}|dkD  r|j'                  |«       |dkD  r|j'                  |«       |r/|jA                  |«      j                  d«      jC                  |«      S |jA                  |«      jC                  |«      S t        jD                  d
d„ «       y )Nr   )r‡  Úguard_or_truez9matmul does not support 0-dimensional tensors, got dims: z and r"   r#   rS   r^  r‰   Fc                   ó   — y)Nz/both arguments to matmul need to be at least 1Dr*   r*   r+   r,   r‚   zmatmul.<locals>.<lambda>É  rÊ  r+   )#rw  r‡  r|  rO   r0  r?   Údotrò  r   ræ  rU   ry  rb  rh  r  ry  r   rE  rÛ   r¥  r*  r6  r„   Ú_unsafe_viewr³  r2  rT   rg  ra  Úbroadcast_shapesr*  r–  Úbmmrœ  rƒ   )rn  ro  rp  r‡  r|  Údim_tensor1Údim_tensor2r1  rt  ru  Úsizes_1r5  Úfolded_dim1Út2_is_matrixÚ	t1_foldedr°  rW  Úm1Úbatch_tensor1Úm2rV  Úbatch_tensor2rŸ  Úexpand_batch_portionÚtensor1_expand_sizeÚexpand_batch_productÚtensor1_expandedÚ
vector_rhsÚtensor2_expand_sizeÚtensor2_expandeds                                 r,   ra  ra  M  sŠ  € ÷ Tà—+‘+“-€KØ—+‘+“-€KØ�aÒ˜;¨!Ò+ÜØGÈÀ}ÐTYÐZeÐYfÐgó
ð 	
ð �aÒ˜K¨1Ò,Ü�y‰y˜ 'Ó*Ð*Ø	˜Ò	˜k¨QÒ.Ü�x‰x˜ Ó)Ð)Ø	˜Ò	˜k¨QÒ.Ü�}‰}œUŸX™X¤e§o¡o°g¸qÓ&AÀ7ÓKÈQÓOÐOØ	˜Ò	˜k¨QÒ.Ü�x‰x˜ Ó)Ð)Ü	�W˜g vÕ	.ð   +Ñ-ˆ	Ù$ˆW�ZŠZ¨'ˆá$‰G¸+ÈÒ:J¨7¯9©9¬;ÐPWð 	ð —(‘(ˆÜ˜G C R˜LÓ)ˆÜœXŸ\™\¨<Ó8ˆð —v‘v“x 1‘}ˆÙØ×Ñ §¡¨¡Ô,ð —J‘J˜{¨G°B©KÓ8ˆ	Ùô —Y‘Y—^‘^×0Ñ0°·±¸bÓ1AÀ<ÓPˆFÙ-6�6—9‘9×'Ñ'Ó)ÐB¸FÐBä—9‘9—>‘>×.Ñ.¨y¯|©|¸BÓ/?ÀÓNÐNà	˜Ó	˜k¨QÓ.ð !,¨a¢ˆG�L‰L˜Ô°QˆØ�\‰\˜"ÓˆØŸ™ c rÐ*ˆØ!,¨q¢ˆW�\‰\˜"Ô°g·l±lÀ2Ó6FˆØ +¨a¢ˆG�L‰L˜Ô°Qˆà#%ˆä�{ Q‘Ó'ò 	2ˆAØ× Ñ  §¡¨a£Õ1ð	2ð ˜1ÒØ˜qÒ Ù˜m¨AÑ.°-ÀÑ2BÑBÔCá˜m¨AÑ.°!Ñ3Ô4¸×9NÒ9NÜ˜gŸo™o¨aÓ0°'Ó:Ð:Ù˜m¨AÑ.°!Ñ3Ô4¸×9NÒ9NÜ˜g w§¡°qÓ'9Ó:Ð:ô  $Ü×"Ñ" =°-Ó@ó 
Ðð 3°a¸°WÑ<Ðä#Ð$8Ó9Ðð #Ÿ>™>Ð*=Ó>×FÑFØ  ! Ró
Ðð ! AÑ%ˆ
ÙØ"6¸"¸Ñ"=Ðà—‘Ð2Ó3ß‘Ð-¨rÓ2ß‘˜1“ñ ð #7¸"¸a¸Ñ"@ÐØ&Ÿ~™~Ð.AÓB×JÑJØ$ b¨!ó Ðð ,ˆØ˜Š?Ø×Ñ Ô"à˜Š?Ø×Ñ Ô"áØ#×'Ñ'Ð(8Ó9×AÑAÀ"ÓE×JÑJÈ<ÓXÐXà#×'Ñ'Ð(8Ó9×>Ñ>¸|ÓLÐLä�‰�UÑUÕVr+   r…  r†  c                 ón  ‡ ‡‡‡‡‡‡‡— ‰ j                   \  }}ŠŠt        ‰|d   ||«      }t        ‰|d   ||«      }t        j                  ‰ t        j                  j
                  ¬«      \  }}t        j                  |d   ‰ j                  ¬«      j                  |¬«      }	t        j                  |d   ‰ j                  ¬«      j                  |¬«      }
t        ||
|«      }t        ||	|«      }|j                  d«      }|j                  «       }|j                  «       }||z
  j                  dd«      }||z
  j                  dd«      }|j                  t        j                  «      }|j                  t        j                  «      }|dz
  ||dz   |d	z   f}|dz
  ||dz   |d	z   fŠt        |«      Št        |«      }d
\  Š}‰ j                   t        j"                  k(  r­t%        ‰«      Št%        |«      }‰D �cg c]@  }|d‰z  z  t        j&                  |«      dz  z   j                  t        j(                  «      ‘ŒB c}Š|D �cg c]@  }|d|z  z  t        j&                  |«      dz  z   j                  t        j(                  «      ‘ŒB }}ˆˆˆ fd„Šˆ ˆˆˆˆfd„Št+        ˆfd„|D «       «      }‰ j                   t        j"                  k(  r|€t-        d«      ‚t/        |||«      }nt1        d„ t3        ||«      D «       «      }t        j4                  ‰ «      }|j7                  |¬«      }|S c c}w c c}w )Nr   r"   r|  r“  rè   rS   r”   rg   r#   ró  r    c                 ó¤   •— t        j                  | d‰dz
  «      }t        j                  |d‰dz
  «      }t        j                  ‰d d ||g«      }|S r�  )r?   r�   r„   ré  )r0  rº  Úy_idxÚx_idxr¾  Úin_hÚin_wrÀ   s        €€€r,   Úload_boundedz0upsample_bicubic2d_default.<locals>.load_bounded	  sO   ø€ Ü—‘˜B  4¨!¡8Ó,ˆÜ—‘˜B  4¨!¡8Ó,ˆÜ×Ñ˜u t¨T°5¸%Ð&@ÓAˆØˆr+   c                 óÖ   •‡ — t        ˆˆ fd„‰D «       «      }‰j                  t        j                  k(  r‰€t	        d«      ‚t        |‰‰«      S t        d„ t        |‰«      D «       «      S )Nc              3   ó0   •K  — | ]  } ‰‰|«      –— Œ y ­wr5   r*   )rÒ  Úx_ofsr™  rZ   s     €€r,   rÓ  zCupsample_bicubic2d_default.<locals>.get_x_interp.<locals>.<genexpr>  s   øè ø€ ÒB°‘l 1 e×,ÑBùs   ƒz4weights_precision_x must not be None for uint8 inputc              3   ó,   K  — | ]  \  }}||z  –— Œ y ­wr5   r*   rñ  s      r,   rÓ  zCupsample_bicubic2d_default.<locals>.get_x_interp.<locals>.<genexpr>  s   è ø€ ÒJ©¨¨R˜B �GÑJùrÈ  )rì  ré   r?   ry  r0  r¥  r¤  rþ  )rZ   Úsrc_xrÀ   Úixs_ofsr™  Úweights_precision_xÚ	weights_xs   ` €€€€€r,   Úget_x_interpz0upsample_bicubic2d_default.<locals>.get_x_interp  sc   ù€ ÜÔB¸'ÔBÓBˆØ�;‰;œ%Ÿ+™+Ò%Ø"Ð*Ü$ØJóð ô & e¨YÐ8KÓLÐLÜÑJ´C¸¸yÓ4IÔJÓJÐJr+   c              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­wr5   r*   )rÒ  Úy_ofsr¢  s     €r,   rÓ  z-upsample_bicubic2d_default.<locals>.<genexpr>  s   øè ø€ Ò;¨%‘,˜u×%Ñ;ùrQ  z4weights_precision_y must not be None for uint8 inputc              3   ó,   K  — | ]  \  }}||z  –— Œ y ­wr5   r*   rñ  s      r,   rÓ  z-upsample_bicubic2d_default.<locals>.<genexpr>  s   è ø€ ÒL©(¨2¨r˜b 2�gÑLùrÈ  r\  )r  rš  rD   rE   r  rµ  r?   r˜  r”  r8   rž  rU   r   r�   rº  rì  ré   ry  r«  rã   Úint16rì  r0  r¥  r¤  rþ  r   r³  )rÀ   rû  r„  r…  r†  rV   Úh_scale_factorÚw_scale_factorré   rŸ  ró  Úx_floatÚy_floatr9   rZ   Úyscaler¿  Úiys_ofsÚ	weights_yÚweights_precision_yrÖ  Úsrc_yr  r]  r¢  r—  r˜  rŸ  r™  r   r¡  s   `                       @@@@@@@r,   Úupsample_bicubic2d_defaultr°  Ì  só  ÿ€ ð —{‘{Ñ€A€qˆ$�ô $ D¨+°a©.¸-ÈÓQ€NÜ# D¨+°a©.¸-ÈÓQ€Nä×'Ñ'Ø¤5×#HÑ#H×#UÑ#Uô�H€A€uô 	�‰�[ ‘^¨E¯L©LÔ9×<Ñ<À5Ð<ÓI€AÜ�‰�[ ‘^¨E¯L©LÔ9×<Ñ<À5Ð<ÓI€Aä# N°A°}ÓE€GÜ# N°A°}ÓE€GØ×Ñ Ó#€Gà�‰‹€AØ�‰‹€Að ˜‰k× Ñ   cÓ*€FØ˜‰k× Ñ   cÓ*€FØ	�‰ŒU�[‰[Ó€AØ	�‰ŒU�[‰[Ó€Aà�1‰u�a˜˜Q™  A¡Ð&€GØ�1‰u�a˜˜Q™  A¡Ð&€Gä0°Ó8€IÜ0°Ó8€Ià/9Ñ,ÐÐ,Ø‡{�{”e—k‘kÒ!Ü7¸	ÓBÐÜ7¸	ÓBÐð ö
àð �!Ð*Ñ*Ñ+¬e¯j©j¸«m¸cÑ.AÑA×EÑEÄeÇkÁkÕRò
ˆ	ð ö
àð �!Ð*Ñ*Ñ+¬e¯j©j¸«m¸cÑ.AÑA×EÑEÄeÇkÁkÕRð
ˆ	ð 
ö
÷Kð Kô Ó;°7Ô;Ó;€EØ‡{�{”e—k‘kÒ!ØÐ&Ü Ð!WÓXÐXÜ# E¨9Ð6IÓJ‰äÑL´c¸%ÀÓ6KÔLÓLˆô ×/Ñ/°Ó6€MØ×Ñ¨]ÐÓ;€FØ€MùòI
ùò
s   Ç9AL-ÉAL2c                 ó6  — t        j                  t        |«      t        |«      z   dk(  d„ «       |€Q|€t        d«      ‚t	        t
        t        t        f   t        d„ t        | j                  dd  |«      D «       «      «      }|r|nd\  }}t        | ||||«      S )Nr"   c                   ó   — y)Nz:Must specify exactly one of output_size and scale_factors.r*   r*   r+   r,   r‚   z(upsample_bicubic2d_vec.<locals>.<lambda>4  rÊ  r+   z7scale_factors must not be None when output_size is Nonec              3   óP   K  — | ]  \  }}t        t        |«      |z  «      –— Œ  y ­wr5   )r   r   )rÒ  rÖ  rn   s      r,   rÓ  z)upsample_bicubic2d_vec.<locals>.<genexpr>=  s*   è ø€ ò á�A�uô œ	 !› uÑ,×-ñùs   ‚$&r#   ró  )
r?   rƒ   rš  r0  r   rì  r�  rþ  r  r°  )rN  rû  r„  r¼  r…  r†  s         r,   Úupsample_bicubic2d_vecr´  '  s¨   € ô 
‡L�LÜˆ[ÓœD Ó/Ñ/°1Ñ4ÙLôð ÐØÐ Ü ØIóð ô Ü”#”s�(‰OÜñ ä # A§G¡G¨A¨B K°Ó ?ôó ó
ˆñ )6‘}¸<Ñ€GˆWÜ% a¨°mÀWÈgÓVÐVr+   c                 ó(   ‡ — ˆ fd„}t        ‰ ||«      S )Nc                 ó¤   •— t        j                  |  ||z   ‰j                  ¬«      }|dz
  |dz
  |j                  «       z
  j                  «       z
  S )Nr“  r"   )r?   r˜  r”  rà   ©r¶   Úmiddler·   Údim_idxrN  s       €r,   r   z_reflection_pad.<locals>.idxL  sF   ø€ Ü—,‘, ˜u f¨u¡n¸Q¿X¹XÔFˆØ˜‰z˜V a™Z¨'¯+©+«-Ñ7×<Ñ<Ó>Ñ>Ð>r+   ©Ú_reflection_or_replication_pad©rN  rÇ  r   s   `  r,   Ú_reflection_padr½  F  s    ø€ ô?ô *Ø	ØØóð r+   c                 ó(   ‡ — ˆ fd„}t        ‰ ||«      S )Nc                 ó„   •— t        j                  |  ||z   ‰j                  ¬«      }t        j                  |d|dz
  «      S )Nr“  r   r"   )r?   r˜  r”  r�   r·  s       €r,   r   z_replication_pad.<locals>.idx]  s6   ø€ Ü—,‘, ˜u f¨u¡n¸Q¿X¹XÔFˆÜ�{‰{˜7 A v°¡zÓ2Ð2r+   rº  r¼  s   `  r,   Ú_replication_padrÀ  W  s    ø€ ô3ô *Ø	ØØóð r+   Úidx_fnc                 óÀ  ‡— t        |«      dz  Št        j                  | j                  «       ‰dz   ‰dz   fv ˆfd„«       | j                  ‰ d  }| j                  «       ‰z
  }t        ‰«      D �cg c]  }|d‰dz
  |z
  z     ‘Œ }}t        ‰«      D �cg c]  }|d‰dz
  |z
  z  dz      ‘Œ }}| }t        ‰«      D ]E  }d g|j                  «       z  }	 |||   ||   ||   «      |	||z   <   t        j                  ||	«      }ŒG | j                  j                  dv rt        j                  }
nt        j                  | «      }
|j                  |
¬«      }|S c c}w c c}w )Nr#   r"   c                  ó(   •— d‰ › d‰ dz   › d‰ dz   › d�S )NÚreflection_padzd requires r"   rü  r#   zD inputr*   r€   s   €r,   r‚   z0_reflection_or_replication_pad.<locals>.<lambda>p  s$   ø€ �.   [°°q±°	¸¸sÀQ¹w¸iÀwÐO€ r+   )rè  Úmpsr/  r\  )r†  r?   rƒ   rO   r  rT   r„   ré  r”  r×  r`  rD   r   r³  )rN  rÇ  rÁ  Ú	inp_shapeÚnc_dimrŸ  Úpadding_leftÚpadding_rightr  r   r]  rO   s              @r,   r»  r»  h  sd  ø€ ô
 ˆg‹,˜!Ñ
€CÜ	‡L�LØ	�‰‹�C˜!‘G˜S 1™WÐ%Ð%ÛOôð —‘˜˜˜�€IØ�U‰U‹W�s‰]€Fä8=¸c»
ÖC°1�G˜A  q¡¨1¡Ñ-Ó.ÐC€LÐCÜ=BÀ3»ZÖH¸�W˜Q #¨¡'¨A¡+Ñ.°Ñ2Ó3ÐH€MÐHà€FÜ�3‹Zò 1ˆØ˜ &§*¡*£,Ñ.ˆÙ  ¨a¡°)¸A±,ÀÈaÑ@PÓQˆˆA�‰J‰Ü×#Ñ# F¨CÓ0‰ð1ð 	‡x�x‡}�}Ð.Ñ.Ü×/Ñ/‰ä×3Ñ3°AÓ6ˆØ×Ñ¨]ÐÓ;€FØ€Mùò1 DùÚHs   Á1EÂEc           
      ó  ‡ ‡‡‡— t        |«      dz  Š|j                  ‰ d  D �cg c]  }|dz
  ‘Œ	 }}t        ‰«      D �cg c]  }|d‰dz
  |z
  z     ‘Œ }}t        ‰«      D �cg c]  }|d‰dz
  |z
  z  dz      ‘Œ }}g }t        |j                  «      D ]c  }dg|j                  z  }	d|	|<   |j	                  t        j                  |j                  |   |j                  ¬«      j                  |	«      «       Œe |d ‰  Š|‰ d  }
d„ Št        ‰«      D �cg c]  }|
|   ||   z   ‘Œ }}t        ‰«      D �cg c]  }||   |
|   z
  ‘Œ }}t        ‰«      D �cg c]  }d||   z  ||   z   |
|   z
  ‘Œ }}t        ‰«      D �cg c]  }||   d||   ||   z   ||   z   f‘Œ }}t        j                  t        j                  t        ‰«      D �cg c]  } ‰||   «      ‘Œ c}«      }t        j                  ‰ |‰|z   d«      }ˆˆˆ ˆfd„}t        j                  t        ‰«      D �cg c]  }g d	¢‘Œ c}Ž D ]¥  }|t!        dg‰z  «      k(  rŒg }g }t        ‰«      D ]t  }||   dk(  r||   }||   }n=||   dk(  r||   }|
|   d||   f}n$||   dk(  r||   }|
|   ||   ||   z
  ||   dz
  f}|j	                  «       |j	                  «       Œv  ||||«      }Œ§ |S c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w )
Nr#   r"   rS   r“  c                 óF   — | \  }}}t        j                  ||k\  ||k  «      S r5   r2  )Úindex_rangerŸ  ÚlbÚubs       r,   Úindex_range_conditionz7_reflection_pad_backward.<locals>.index_range_condition¥  s(   € Ø‰	ˆˆ2ˆrÜ× Ñ   b¡¨!¨r©'Ó2Ð2r+   r   r”   c           	      ó.  •— t        ‰	«      D ]*  }||   d   ||   d   k  }t        |t        «      sŒ%|sŒ(| c S  t        j                  t
        j                  |D �cg c]
  } ‰|«      ‘Œ c}«      }t
        j                  ‰
|‰|z   d«      }| |z   S c c}w )Nr#   r"   r”   )rT   r7   rš  rL   r   r„   r›  r�  )r¨   rÇ   Úindex_rangesrŸ  Úupper_less_than_lowerrÌ  rá  ÚgrO  rO   rl   rÏ  s           €€€€r,   r)  z,_reflection_pad_backward.<locals>.accumulateÁ  s¢   ø€ ô �s“ò 	ˆAØ$0°¡O°AÑ$6¸Àa¹ÈÑ9KÑ$KÐ!ÜÐ/´Õ6Ò;PØ’ð	ô
 ×ÑÜ×ÑØCOÖP°KÑ" ;Õ/ÒPó
ˆô ×%Ñ% k°4¸¸S¹À#ÓFˆØ�a‰xˆùò Qs   ÁB
)rS   r   r"   )r†  r  rT   r�  r¥  r?   r˜  r”  rœ  rL   r   r„   r›  r�  Ú	itertoolsr
   rì  )rl   r9   rÇ  rû  ÚdhwrŸ  rÈ  rÉ  rŸ  rZ  ÚxyzÚcenterÚleft_reflectÚright_reflectÚrange_crá  r¨   r)  rV   ÚareaÚoutsrÑ  rÇ   rÌ  rO  rO   rÏ  s   `                       @@@r,   Ú_reflection_pad_backwardrÝ  �  s`  û€ ô
 ˆg‹,˜!Ñ
€CàŸ'™' 3 $ %˜.Ö
)�Qˆ1ˆq‹5Ð
)€CÐ
)ä8=¸c»
ÖC°1�G˜A  q¡¨1¡Ñ-Ó.ÐC€LÐCÜ=BÀ3»ZÖH¸�W˜Q #¨¡'¨A¡+Ñ.°Ñ2Ó3ÐH€MÐHà€GÜ�1—6‘6‹]ò SˆØ�S˜1Ÿ6™6‘\ˆ
Øˆ
�1‰Ø�‰”u—|‘| A§G¡G¨A¡J°q·x±xÔ@×EÑEÀjÓQÕRðSð
 	��#�ˆ€AØ
�3�$�%ˆ.€Cò3ô 16°c³
Ö;¨1ˆc�!‰f�| A‘Ó&Ð;€FÐ;Ü6;¸C³jÖA°�L ‘O c¨!¡fÓ,ÐA€LÐAÜDIÈ#ÃJÖO¸q�Q˜˜Q™‘Z ,¨q¡/Ñ1°C¸±FÓ:ÐO€MÐOô
 NSÐSVËZöØHIˆ�‰�A�s˜1‘v ¨Q¡Ñ/°-ÀÑ2BÑBÒCð€Gð ô ×ÑÜ×ÑÄeÈCÃjÖQÀÑ0°¸±Õ<ÒQó€Dô ×$Ñ$ [°$¸¸F¹
ÀCÓH€D÷ô ×!Ñ!¼¸c»
Ö#C°1¤JÒ#CÐDò 4ˆØ”5˜!˜˜s™Ó#Ò#ààˆØˆä�s“ò 	-ˆAØ�A‰w˜!Š|Ø˜Q‘i�Ø% a™j‘Ø�a‘˜B’Ø" 1‘o�Ø" 1™v q¨,°q©/Ð:‘Ø�a‘˜A’Ø# AÑ&�Ø" 1™v s¨1¡v°¸aÑ0@Ñ'@À#ÀaÁ&È1Á*ÐM�à�K‰K˜ÔØ×Ñ Õ,ð	-ñ ˜$  lÓ3‰ð-4ð0 €Kùòc *ùâCùÚHùò2 <ùÚAùÚOùòùò Rùò& $Ds5   ¥KÁ K$Á$K)ÄK.Ä8K3ÅK8ÆK=ÇL
È&Lr‹   rŽ   r  c                ój   — t        j                  | ||¬«      }t        j                  | ||¬«      }||fS )Nr  )r?   Úaminrˆ  )r{   rO   r  rß  rˆ  s        r,   Úaminmaxrà  ë  s2   € ô �:‰:�d ¨WÔ5€Dä�:‰:�d ¨WÔ5€DØ�ˆ:Ðr+   rè   c                ó„   — t         j                  t        j                  t        j                  | «      d| «      |||¬«      S )Nr   rè   )r„   rö   r?   ri   Úisnan)r{   rO   r  ré   s       r,   Únansumrã  õ  s2   € ô �8‰8”E—K‘K¤§¡¨DÓ 1°1°dÓ;¸SÀ'ÐQVˆ8ÓWÐWr+   ©ré   rr  r”  r�  rr  c          	      óN   — t         j                  j                  d| d||||¬«      S )Nr   r"   rä  ©r„   r˜  Ú
start_step)rn  ré   rr  r”  r�  s        r,   Úarange_defaultrè  û  s/   € ô �;‰;×!Ñ!Ø	ˆ3�˜ v°fÈð "ó ð r+   c          	      óN   — t         j                  j                  | |d||||¬«      S )Nr"   rä  ræ  )rm  rn  ré   rr  r”  r�  s         r,   Úarange_startrê  
  s/   € ô �;‰;×!Ñ!Øˆs�A˜U¨6¸&ÈZð "ó ð r+   c                  ó   — ddl m}  || i |¤ŽS )Nr   )Úout_dtype_dense)Ú!torch._higher_order_ops.out_dtyperì  )rF   rG   rì  s      r,   Úout_dtype_decomprî    s   € åAá˜DÐ+ FÑ+Ð+r+   Úmarginc                 ót  ‡ ‡‡‡	‡
— t        j                  ‰ «      Š t        j                  ‰«      Š‰ j                  d   Š
‰ j                  d   Š	t        j                  |dk(  xs |dk(  d„ «       t        j                  ‰ j
                  dk(  xr ‰	dk7  ˆ fd„«       t        j                  ‰j
                  dk(  xr ‰j                  «       ‰
k(  ˆ
ˆfd„«       ‰�Qt        j                  ‰«      Št        j                  ‰j
                  dk(  xr ‰j                  «       ‰	k(  ˆ	ˆfd„«       ‰j                  d«      Št        j                  ‰ d‰¬«      }||z
  ‰ z   }|j                  d«      }|dk(  r|n||z  }‰�|‰‰   z  }t        j                  ‰	‰ j                  ¬	«      }t        j                  |‰k7  |d«      }|t        j                  j                  k(  r|j!                  «       S |t        j"                  j                  k(  r |j%                  «       |j                  d   z  S |j!                  d¬
«      S )Nr   r"   r#   c                   ó   — y)Nz only p == 1 and p == 2 supportedr*   r*   r+   r,   r‚   z#multi_margin_loss.<locals>.<lambda>/  rÊ  r+   c                  ó"   •— d‰ j                   › �S ©NzMExpected non-empty vector or matrix with optional 0-dim batch size, but got: rí  r\  s   €r,   r‚   z#multi_margin_loss.<locals>.<lambda>2  s   ø€ Ð_Ð`e×`kÑ`kÐ_lÐm€ r+   c                  ó(   •— d‰ › d‰j                   › �S )Nz#inconsistent target size, expected r"  rí  )Únframerÿ   s   €€r,   r‚   z#multi_margin_loss.<locals>.<lambda>6  s   ø€ Ð5°f°X¸YÀvÇ|Á|ÀnÐU€ r+   c                  ó(   •— d‰ › d‰j                   › �S )Nz#inconsistent weight size, expected r"  rí  )rO   rÎ   s   €€r,   r‚   z#multi_margin_loss.<locals>.<lambda><  s   ø€ Ð9¸#¸¸iÈÏÉÀ~ÐV€ r+   r‡  r“  r€   )r?   Ú
atleast_2dÚ
atleast_1dr  rƒ   r�  rß   rU   rÕ  rc  r˜  r”  ri   r!   r(   r|   rõ   r)   rö   )rÀ   rÿ   rV  rï  rÎ   ró   Úurj   r   rO   rõ  s   ``  `    @@r,   Úmulti_margin_lossrú     sÔ  ü€ ô ×Ñ˜UÓ#€EÜ×Ñ˜fÓ%€FØ�[‰[˜‰^€FØ
�+‰+�a‰.€CÜ	‡L�L��a‘Ò!˜1 ™6Ñ#MÔNÜ	‡L�LØ�
‰
�a‰Ò$˜C 1™HÛmôô 
‡L�LØ�‰�qÑÒ5˜VŸ\™\›^¨vÑ5ÜUôð ÐÜ×!Ñ! &Ó)ˆÜ�‰Ø�K‰K˜1ÑÒ6 §¡£°3Ñ!6ÜVô	
ð ×Ñ˜aÓ €FÜ�‰�U ¨Ô0€AØ�‰
�UÑ€AØ	�‰�A‹€AØ�!ŠV‰˜˜Q™€AØÐØ��v‘ÑˆÜ
�,‰,�s 5§<¡<Ô
0€CÜ�‰�C˜6‘M 1 aÓ(€AØ”I—N‘N×(Ñ(Ò(Ø�v‰v‹xˆØ	”i—m‘m×)Ñ)Ò	)Ø�u‰u‹w˜Ÿ™ ™Ñ#Ð#à�v‰v˜!ˆv‹}Ðr+   Ú	is_targetc                 óà  ‡‡— | j                   Š|j                   Št        j                  | «      } t        j                  |«      }| j                   d   }t        j                  t	        ‰«      dk  xr |dk7  ˆfd„«       t        j                  t	        ‰«      dk  xr ‰‰k(  ˆˆfd„«       t        j
                  ||j                  ¬«      }|dk(  }t        j                  t        j                  |||«      dd¬	«      }||k  }t        j                  ||d«      }t        j                  | d|¬
«      }	t        j                  ||d«      }
t        j                  ||
j                  d¬«      k(  d¬«      }d|	j                  j                  d¬«      z
  | z   }|j                  d«      }||z  }t        j                  |d|«      }|t        j                  j                   k(  r!|j#                  d¬«      j%                  «       }n@|t        j&                  j                   k(  r|j#                  «       }n|j#                  d¬«      }|j)                  | j*                  «      j-                  ‰«      }||fS )Nr"   r#   r   c                  ó   •— d‰ › �S ró  r*   )Úorig_input_shapes   €r,   r‚   z0multilabel_margin_loss_forward.<locals>.<lambda>^  s   ø€ Ð_Ð`pÐ_qÐr€ r+   c                  ó   •— d‰› d‰ › �S )Nzinconsistent target size: z for input of size: r*   )rþ  Úorig_target_shapes   €€r,   r‚   z0multilabel_margin_loss_forward.<locals>.<lambda>b  s   ø€ Ð,Ð->Ð,?Ð?SÐTdÐSeÐf€ r+   r“  rS   Tr  r‡  r€   rg   )r   rS   )r  r?   r÷  rƒ   r†  r˜  r”  rß  ri   rÕ  rD  rU   ÚTrc  r!   r(   r|   rö   rõ   r)   r8   ré   r*  )rÀ   rÿ   ró   rO   r   Úis_endÚend_idxÚtarget_maskÚtidx0rù  Útidx1rû  rj   rþ  r   s                @@r,   Úmultilabel_margin_loss_forwardr  O  sú  ù€ ð —{‘{ÐØŸ™ÐÜ×Ñ˜UÓ#€EÜ×Ñ˜fÓ%€FØ
�+‰+�a‰.€CÜ	‡L�LÜÐÓ Ñ"Ò/ s¨a¡xÛrôô 
‡L�LÜÐÓ !Ñ#ÒMÐ(9Ð=MÑ(MÜfôô
 �,‰,�s 6§=¡=Ô
1€CØ�r‰\€FÜ�j‰jœŸ™ V¨S°#Ó6¸BÈÔM€Gà˜‘-€Kä�K‰K˜ V¨QÓ/€EÜ�‰�U ¨%Ô0€Aä�K‰K˜ V¨RÓ0€EÜ—	‘	˜# §¡°R Ó!8Ñ8¸aÔ@€Iàˆa�c‰c�m‰m ˆmÓ#Ñ# eÑ+€AØ	�‰�A‹€AØ	ˆC‰€Aä�‰�I˜q !Ó$€Aà”I—N‘N×(Ñ(Ò(Ø�E‰E�gˆEÓ×#Ñ#Ó%‰Ø	”i—m‘m×)Ñ)Ò	)Ø�E‰E‹G‰à�E‰E�gˆEÓˆà—‘˜UŸ[™[Ó)×1Ñ1Ð2CÓD€IØˆiˆ<Ðr+   )Ú	attn_maskrn   ÚqueryÚkeyÚ	dropout_pÚ	is_causalr  c                ó  ‡ ‡‡‡— t        j                  t        j                  ‰ «      ˆ fd„«       t        j                  ‰ j                  «       dk(  xr( ‰j                  «       dk(  xr ‰j                  «       dk(  ˆˆ ˆfd„«       t        j                  ‰dk(  ˆfd„«       t        j                  ‰ j                  d   ‰j                  d   k(  xr ‰j                  d   ‰j                  d   k(  d„ «       t
        j                  j                  ‰ ‰‰|‰|d |‰ j                  d«      ‰j                  d«      k7  ¬	«	      \  }}|j                  d
ddd«      j                  t         j                  ¬«      j                  dd
dd«      }||fS )Nc                  ó"   •— d‰ j                   › �S )Nz-query must be FP32, FP64, BF16, FP16 but got rè   )r	  s   €r,   r‚   z<scaled_dot_product_flash_attention_for_cpu.<locals>.<lambda>›  s   ø€ Ð?ÀÇÁ¸}ÐM€ r+   rH  c                  ón   •— d‰j                  «       › d‰ j                  «       › d‰j                  «       › �S )Nz,q, k, v must be a 4 dimensional tensor, got rö  r€   )r
  r	  r|   s   €€€r,   r‚   z<scaled_dot_product_flash_attention_for_cpu.<locals>.<lambda>Ÿ  s3   ø€ Ð>¸u¿y¹y»{¸mÈ2ÈcÏgÉgËiÈ[ÐXZÐ[`×[dÑ[dÓ[fÐZgÐh€ r+   r”   c                  ó   •— d‰ › �S )Nz&dropout probability must be zero, got r*   )r  s   €r,   r‚   z<scaled_dot_product_flash_attention_for_cpu.<locals>.<lambda>¢  s   ø€ Ð$JÈ9È+Ð"V€ r+   r‰   c                   ó   — y)Nz&q, k, v should have the same head sizer*   r*   r+   r,   r‚   z<scaled_dot_product_flash_attention_for_cpu.<locals>.<lambda>¦  rÊ  r+   r"   )r  r  r  Údropout_maskrn   Ú
enable_gqar#   r   r\  )r?   rƒ   ru  rO   r  r„   Ú"_scaled_dot_product_attention_mathrŒ  r2  rÿ  r³  r`  )	r	  r
  r|   r  r  r  rn   r°  Úattns	   ````     r,   Ú*scaled_dot_product_flash_attention_for_cpur  Ž  sV  û€ ô 
‡L�LÜ×Ñ Ó&ÛMôô 
‡L�LØ�	‰	‹�qÑÒ@˜SŸW™W›Y¨!™^Ò@°·	±	³¸qÑ0@Ýhôô 
‡L�LØ�SÑÓVôô 
‡L�LØ�‰�A‰˜%Ÿ+™+ a™.Ñ(ÒK¨S¯Y©Y°q©\¸U¿[¹[È¹^Ñ-KÙ8ôô
 ×:Ñ:×BÑBØØØØØØØØØ—:‘:˜a“= C§H¡H¨Q£KÑ/ð Có 
�L€FˆDðF 	�‰�q˜!˜Q Ó"ß	‰¤%×"9Ñ"9ˆÓ	:ß	‰��A�q˜!Ó	ð ð
 �4ˆ<Ðr+   c                 ó.   ‡— t        | «      ˆfd„«       }|S )Nc                  ó<   •—  ‰| i |¤Ž}| d   j                  |«      S rs   )rO  )rF   rG   rÇ   Úoutplace_ops      €r,   Ú
inplace_opz$register_inplace.<locals>.inplace_opÔ  s%   ø€ á˜4Ð* 6Ñ*ˆØ�A‰w�}‰}˜SÓ!Ð!r+   r   )Úaten_opr  r  s    ` r,   Úregister_inplacer  Ó  s"   ø€ Ü˜GÓ$ó"ó %ð"ð Ðr+   c                 óB  — | j                  «       s&| j                  «       st        |«      }t        |«      }t        j                  ||«      }t        |t        j                  «      r|dk7  r||z  }|dk(  r|S t        |t        j                  «      r|dk7  r| |z  } | |z   S rg  )ru  rå  r�  r?   r�  r7   ÚnumbersÚNumber)r{   Úbatch1Úbatch2rc   rm   r  s         r,   Úbaddbmmr"  Ü  s‹   € ð ×!Ñ!Ô#¨D¯O©OÔ,=Ü�4‹yˆÜ�E“
ˆÜ�Y‰Y�v˜vÓ&€FÜ�eœWŸ^™^Ô,°¸²
Ø˜%‘ˆØˆq‚yØˆÜ�dœGŸN™NÔ+¨t°qªyØ�d‰{ˆØ�&‰=Ðr+   c                 ó2   — t        j                  | |d¬«      S )Nr   rÍ  rÏ  )r{   rå   s     r,   Úfloor_divider$  í  s   € ô �9‰9�T˜5°Ô8Ð8r+   c                 ó`   — t        j                  t        j                  | j                  d«      S r\   )rL   r   rE  rÛ   r  )rh  s    r,   rs  rs  ó  s   € ä×ÑœHŸL™L¨!¯'©'°1Ó5Ð5r+   ©ré   rÇ   c                ó�   — |€"t         j                  j                  | g |¬«      S t         j                  j                  | g ||¬«      S )Nrè   r&  )r„   rö   Údim_IntListÚIntList_out)r{   ré   rÇ   s      r,   Úsum_defaultr*  ø  sC   € ð €{Ü�x‰x×#Ñ# D¨"°EÐ#Ó:Ð:ä�x‰x×#Ñ# D¨"°E¸sÐ#ÓCÐCr+   c           	      ó   — t        | t        j                  «      s| S |€@t        j                  j                  | t        t        | j                  «       «      «      «      S t        j                  j                  | |g«      S r5   )	r7   r?   r   r„   r   Údimsry  rT   rO   )r{   rO   s     r,   Úsqueeze_defaultr-    s\   € ô �dœEŸL™LÔ)Øˆà
€{Ü�|‰|× Ñ  ¤t¬E°$·(±(³*Ó,=Ó'>Ó?Ð?ä�|‰|× Ñ  ¨ uÓ-Ð-r+   c                 ó2  ‡— t        ˆfd„t        t        | j                  «      «      D «       «      }|j                  t
        j                  k(  rt
        j                  nd }| j                  d|d|¬«      }| ||j                  |j                  «      z  z  |fS )Nc              3   ó.   •K  — | ]  }|‰k7  sŒ	|–— Œ y ­wr5   r*   )rÒ  rŸ  rO   s     €r,   rÓ  z)_weight_norm_interface.<locals>.<genexpr>  s   øè ø€ Ò@˜1°q¸C³x”QÑ@ùs   ƒ
Žr#   T)r  ré   )
rì  rT   r†  r  ré   r?   rf  r  r  r8   )r¾  rÓ  rO   Úkeep_dimÚ
norm_dtyper  s     `   r,   Ú_weight_norm_interfacer2    st   ø€ ô Ó@¤¤c¨!¯'©'£lÓ 3Ô@Ó@€Hà !§¡¬5¯>©>Ò 9”—’¸t€JØ�6‰6�!�X t°:ˆ6Ó>€DØ��D—G‘G˜AŸG™GÓ$Ñ$Ñ% tÐ+Ð+r+   ©Úassume_uniqueÚinvertc                ó¶  — t        | t        j                  «      s!t        j                  | |j                  ¬«      } t        |t        j                  «      s.|rt        j
                  | |«      S t        j                  | |«      S ddlm}  ||j                  «       dt        | j                  «       d«      z  k  «      rt        | ||¬«      S t        | |||¬«      S )Nr“  r   r†  g      $@g�Âõ(\�Â?©r5  r3  )r7   r?   r   rŠ  r”  Úner
  rw  r‡  rß   rî   Úisin_defaultÚisin_sorting)ÚelementsÚtest_elementsr4  r5  r‡  s        r,   Úisinr=    s®   € ô �h¤§¡Ô-Ü×&Ñ& x¸×8LÑ8LÔMˆÜ�m¤U§\¡\Ô2ÙÜ—8‘8˜H mÓ4Ð4ä—8‘8˜H mÓ4Ð4åDá�m×)Ñ)Ó+¨d´S¸¿¹Ó9IÈ5Ó5QÑ.QÑQÔRÜ˜H m¸FÔCÐCäØ�m°=Èô
ð 	
r+   )r‹  c                óB  — |€?t        j                  | j                  «       t         j                  | j                  ¬«      }n?t        j                  | j                  «       |t         j                  | j                  ¬«      }|| k  j                  | j                  «      }|S )Nr¹  )r‹  ré   r”  )r?   Úrandr2  rì   r”  r8   ré   )r{   r‹  Úraw_prV  s       r,   Ú	bernoullirA  1  sq   € ð ÐÜ—
‘
˜4Ÿ9™9›;¬e¯m©mÀDÇKÁKÔP‰ä—
‘
Ø�I‰I‹KØÜ—-‘-Ø—;‘;ô	
ˆð 
�‰×Ñ˜$Ÿ*™*Ó%€AØ€Hr+   r7  c                ó‚  — | j                  «       dk(  r%t        j                  | t        j                  ¬«      S |j                  dk(  r| |k(  }|r| S |S | j
                  d|j                  z  z   }| j                  |«      }t        t        d|j                   dz
  d«      «      }||k(  j                  |¬«      }|r| S |S )Nr   rè   ©r"   rS   r"   r€   )
rß   r?   Ú
empty_likerš  r�  r  rœ  rì  rT   rD  )r;  r<  r5  rx  Úexpanded_elem_shaper9   rO   s          r,   r9  r9  D  sÀ   € Ø‡~�~Ó˜1ÒÜ×Ñ ´·
±
Ô;Ð;Ø×Ñ˜QÒØ˜-Ñ'ˆÙ�ˆtÐ& 3Ð&Ø"Ÿ.™.¨4°-×2DÑ2DÑ+DÑDÐØ�‰Ð)Ó*€AÜ
”�b˜=×-Ñ-Ð-°Ñ1°2Ó6Ó
7€CØ�Ñ×
"Ñ
" sÐ
"Ó
+€CÙˆCˆ4Ð"˜sÐ"r+   c                óÖ  — | j                  «       }|j                  «       }|r»t        j                  ||g«      }t        j                  |d¬«      \  }}|dd  |d d k(  }	t        j                  |	ddgd«      }	|r|	j                  «       }	t        j                  |	«      }
|
j                  d||	«      }
|
d| j                  «        j                  | j                  «      S t        j                  |«      \  }}t        j                  ||«      }t        j                  ||j                  «       k  |d«      }||   |k(  }|r|j                  «       n|}|j                  | j                  «      S )NT)Ústabler"   rS   r   F)r@  r?   r4  Úsortr£  Úlogical_notrD  rœ  rß   r*  r  Úsearchsortedri   )r;  r<  r4  r5  Úelements_flatÚtest_elements_flatÚall_elementsÚsorted_elementsÚsorted_orderÚduplicate_maskr¡  Úsorted_test_elementsrV   r   Útest_idxÚcmps                   r,   r:  r:  Q  sN  € Ø×$Ñ$Ó&€MØ&×.Ñ.Ó0ÐÙô —y‘y -Ð1CÐ!DÓEˆÜ(-¯
©
°<ÈÔ(MÑ%ˆ˜à(¨¨Ð,°ÀÀÐ0DÑDˆÜ×.Ñ.¨~ÀÀ1¸vÀuÓMˆáØ+×7Ñ7Ó9ˆNä×Ñ Ó/ˆØ�‰˜q ,°Ó?ˆà�A˜Ÿ™Ó(Ð)×1Ñ1°(·.±.ÓAÐAä"'§*¡*Ð-?Ó"@ÑÐ˜aÜ× Ñ Ð!5°}ÓEˆÜ—;‘;˜sÐ%9×%?Ñ%?Ó%AÑAÀ3ÈÓJˆØ" 8Ñ,°Ñ=ˆÙ#)ˆc�o‰oÔ¨sˆØ�{‰{˜8Ÿ>™>Ó*Ð*r+   c                 ó.   — | j                  d«      }||   S rR   )r*  )r{   r£  Ú	flatteneds      r,   ÚtakerV  n  s   € ð —‘˜RÓ €IØ�UÑÐr+   c                 ó¦   — |€t         j                  }|t         j                  k(  rt        |«      }t        j                  | |j                  |¬«      S r6  )r?   r`  Úpreserve_formatr   r„   Úresizer  )r{   rå   r]  s      r,   Ú	resize_asrZ  u  sD   € àÐÜ×/Ñ/ˆØœ×-Ñ-Ò-Ü-¨eÓ4ˆÜ�;‰;�t˜UŸ[™[¸ˆ;ÓFÐFr+   c                 ó|  — t        j                  «       rt        S | j                  rt        S | j                  j
                  dk(  rt        S |j                  d«      }|j                  d«      }	| j                  d«      }
| j                  d«      }|j                  «       dk(  }|s3|j                  d«      }| j                  d«      } |j                  d«      }|j                  d«      }|j                  d«      }| j                  t         j                  t         j                  fv }|rt         j                  n| j                  }t        j                  ||z  ||	z  || j                  ¬«      }| j                  ||z  |
|z  «      }|j                  ||z  |
|z  «      }|r|j                  t         j                  «      }|j!                  d||«      }|j                  ||||	«      }|r|j                  | j                  «      }t#        j$                  |«      }|j'                  |¬«      }|s|j)                  d«      }|S )	uæ  
    Decomposition of max_pool2d_with_indices_backward using scatter_add.

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

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

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

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

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

    Returns:
        Gradient w.r.t. input [B, C, H_in, W_in]
    rÅ  r^  rS   rH  r   r"   r¹  r\  )r?   Ú$are_deterministic_algorithms_enabledr0  r©  r”  r×  r2  rO   rU   ré   rú   rf  rì   r  r*  r8   Úscatter_addrD   r   r³  r   )rl   r{   rÅ  rz  rÇ  rÆ  rõ  rŸ  Ú	in_heightÚin_widthÚ
out_heightÚ	out_widthr  rþ  ÚchannelsÚuse_fp32_accumÚaccum_dtypeÚgrad_input_flatÚgrad_output_flatrI  rX   r]  s                         r,   Ú max_pool2d_with_indices_backwardrg  ~  s  € ôd ×1Ñ1Ô3ÜÐà×ÒÜÐð ×Ñ×Ñ %Ò'ÜÐð —	‘	˜"“€IØ�y‰y˜‹}€HØ×!Ñ! "Ó%€JØ× Ñ  Ó$€Ið —‘“˜q‘€JÙØ�~‰~˜aÓ ˆØ!×+Ñ+¨AÓ.ˆØ×#Ñ# AÓ&ˆà—‘˜1“€JØ�y‰y˜‹|€Hð
 !×&Ñ&¬5¯=©=¼%¿.¹.Ð*IÐI€NÙ#1”%—-’-°{×7HÑ7H€Kô —k‘kØ�XÑØ�HÑØØ×!Ñ!ô	€Oð #×*Ñ*Ø�XÑ˜z¨IÑ5óÐð —?‘? :°Ñ#8¸*ÀyÑ:PÓQ€Lñ Ø+×.Ñ.¬u¯}©}Ó=Ðð &×1Ñ1°!°\ÐCSÓT€Oð !×(Ñ(¨°X¸yÈ(ÓS€Jñ Ø—]‘] ;×#4Ñ#4Ó5ˆ
ô ×/Ñ/°Ó5€MØ×&Ñ&°]Ð&ÓC€Jñ Ø×'Ñ'¨Ó*ˆ
àÐr+   Úwindow_lengthc                óL   — t         j                  j                  | d||||¬«      S )aÃ  hann_window(window_length, *, dtype=None, layout=None, device=None, pin_memory=False) -> Tensor

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

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

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

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

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

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

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

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

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

    Keyword args:
        dtype (:class:`torch.dtype`, optional): desired dtype. Default: global default.
        layout (:class:`torch.layout`, optional): desired layout. Default: ``torch.strided``.
        device (:class:`torch.device`, optional): desired device. Default: current device.
        pin_memory (bool, optional): if ``True``, pins the returned tensor. Default: ``False``.
    r   rM  rä  r"   rC  rç   r¬   r    )r?   Úget_default_dtyperx  r™  rD   r   r˜  ÚpiÚcosr3  r8   )
rh  rk  ré   rr  r”  r�  Úcompute_dtyperW  rh  Úwindows
             r,   Úhann_window_periodicrr    sý   € ðD Ð&‰E¬E×,CÑ,CÓ,E€EØ˜ÒÜ�{‰{Ø˜ f°VÈ
ô
ð 	
ð ˜ÒÜ�z‰zØ˜ f°VÈ
ô
ð 	
ô ×/Ñ/°Ó6€MÙ%ˆ˜Ò¨=€AÜ�‰Ø	ØØØØô	€Að 	
ˆS”5—8‘8‰^˜q 1™uÑ%Ñ&€AÜ�	‰	�!‹€AØ	ˆD‰�3‰€AÙ.6ˆQ�X‰X�a˜˜MÔ*¸A€FØ�9‰9�UÓÐr+   Únum_classesc                 óî  — |dk(  r*t        | j                  «       j                  «       «      dz   }t        j                  j                  t        j                  | dk\  «      d«       t        j                  j                  t        j                  | |k  «      d«       | j                  d«      t        j                  || j                  | j                  ¬«      k(  j                  t        j                  «      S )NrS   r"   r   z+one_hot: Class values must be non-negative.z7one_hot: Class values must be smaller than num_classes.r¹  )r�  rŽ   rØ  r„   Ú_assert_asyncÚmsgr?   r  rU   r˜  ré   r”  r8   rº  )r{   rs  s     r,   Úone_hotrw  r  sµ   € à�bÒÜ˜$Ÿ(™(›*Ÿ/™/Ó+Ó,¨qÑ0ˆä×Ñ×ÑÜ�	‰	�$˜!‘)ÓØ5ôô 	×Ñ×ÑÜ�	‰	�$˜Ñ$Ó%ØAôð
 	�‰�rÓÜ�<‰<˜¨4¯:©:¸d¿k¹kÔJñ	Kç�bŒ�‰ƒoðr+   )FF)Únoner5   )r#   )r   NNr"   )rS   FFrÐ  rM  rÿ  )r"   r"   F)Fr”   r·   )r”   rg   N)r   r"   N)Fró  )NNN)r   r   FT)r   r   Fr^  )r”   Frý  )rS   (›  rL   rÔ  r  rE  r{  Úcollections.abcr   r   Ú
contextlibr   Úenumr   r   r   r	   r
   Útypingr   r   r?   Útorch._meta_registrationsÚtorch._primsr”  r®  Útorch._prims_commonÚ_prims_commonrD   Útorch.nn.functionalrç  rJ  rÂ   r   r   r   Útorch._decompr   rí  r   r   r   r   r   r   Útorch._prims_common.wrappersr   r   r   r   Útorch.utilsr   rB   Útorch.utils._pytreer   rs  ÚDispatchKeyr   ry  ÚstrÚ__annotations__Ú_opsr6  r„   r!   r  rš  rN   r€  Úcompute_only_pw_cast_for_opmathÚpw_cast_for_opmathÚ"pw_cast_for_opmath_non_tensor_argsrµ  Úpw_cast_for_int_to_realr�  rW   r`   rb   rk   r  rw   rÎ  r8  r}   r†   r’   r—   r›   r�   r¡   r£   r§   r¿   rÈ   rË   rÍ   rÐ   rÔ   rì  rÜ   rä   rñ   r÷   ré   rþ   r  r(   r|   r  Ú_safe_softmaxr  r  r  rŒ  rX   r   r#  rÇ   r%  r.  r<  rF  rI  rN  rQ  rS  rU  rX  rk  rs  Úslicer‡  r�  rr  r¦  r¬  r¯  rµ  r·  rÄ  r  r4  r8  rg  rm  rq  Úpy_implÚCompositeImplicitAutogradÚAutogradrp  r„  r�  rŽ  r”  r�  r*  r«  r®  r²  r½  r¿  rÆ  rÉ  rË  rÅ  rÙ  rÒ  rá  rç  Ú	dtype_outré  rï  ró  r÷  r  r  r  r0  r2  rB  rF  r[  ra  re  Úunsafe_chunkrh  rd  rc  Úno_statsrl  rp  r|  r‚  r†  rˆ  Ú_fused_dropoutrŒ  rš  r”  r]  rÐ  ÚliftÚ
lift_freshr�  r¢  r¥  r¨  r§  r»  rÀ  rÃ  Ú_adaptive_avg_pool2drô  r  r"  r%  r6  r=  rJ  rX  rd  rk  ra  ri  r”  rš  rœ  r˜  rª  r°  Ú	Generatorr²  r¾  rÁ  r×  rð  rÞ  rä  rÇ  Ú_upsample_nearest_exact1drà  ræ  rÌ  rÒ  rÙ  rÄ  rñ  rú  rÿ  r  r  r  r  r   r/  r8  Úrnn_tanhrÀ   r?  Úrnn_relurB  rG  rH  rK  rW  rZ  r`  rl  Úlstmro  rq  ry  r{  Úgrur}  r  r‚  r‡  r‰  rŠ  r�  rŽ  r–  r˜  r”  r‘  rš  rž  r¥  r«  r�  rÃ  rÅ  r  ré  r+  r�  r˜  rÙ  rÝ  rß  rã  ræ  rì  ró  r¤  rù  r  r  r  r  r  rb  rd  rò  rm  ry  ra  Úupsample_bicubic2dr°  r´  Úreflection_pad1dÚreflection_pad2dÚreflection_pad3dr½  Úreplication_pad1dÚreplication_pad2dÚreplication_pad3drÀ  r»  Úreflection_pad1d_backwardÚreflection_pad2d_backwardÚreflection_pad3d_backwardrÝ  rà  rã  r˜  r‘  rr  rè  rm  rê  rî  rú  r  Ú+_scaled_dot_product_flash_attention_for_cpur  r  r"  r$  rs  rö   r*  r   rO   r-  r2  r=  rA  r9  r:  rV  rZ  rg  rj  rk  Úperiodic_outrr  Úaddbmm_ÚaddbmmÚaddmm_Úaddmv_Úbaddbmm_Úfill_Úgelu_rí  Ú
hardswish_Ú	hardtanh_ÚhardtanhÚhardsigmoid_Ú__iand__Ú__and__Ú__ilshift__Ú
__lshift__r  r€  Úindex_reduce_Úindex_reduceÚ__ior__Ú__or__Ú__irshift__Ú
__rshift__Ú__ixor__Ú__xor__Úldexp_Úleaky_relu_Ú
leaky_reluÚlogit_ÚlogitÚrelu_rî  Úrenorm_ÚrenormÚround_r¶  Úscatter_r)  Úscatter_add_r]  Úscatter_reduce_Úscatter_reduceÚsilu_rw  r*   r+   r,   ú<module>rÑ     sÔS  ðô Û Û Û Û 
ß .Ý "Ý ß %ß $ß ã Û  Ý Ý #ß Ð ß ,Ñ ,Ý 0Ý 7÷õ ÷ó õ *Ý (ð �h‰h×"Ñ"€ð €ˆˆc‰Ó à‡z�z‡~�~×Ñ€ô�ô ð  %Ø$)ò	'Øð'à×9Ñ9ð'ð ð'ð "ó	'ñT #*ØØ×8Ñ8×@Ñ@Øô#Ð ñ
 Ø˜u×DÑD×LÑLôÐ ñ &-ØØ×8Ñ8×@Ñ@Ø ô&Ð "ñ
 "Ø˜u×DÑD×QÑQôÐ ð˜ð  cð ¨fó ñ ˜×*Ñ*Ó+Ùˆ\ÓØð2˜Fð 2 vò 2ó ó ó ,ð2ñ ˜×-Ñ-Ó.Ùˆ\ÓØð4˜vð 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ò )ó ó ó ,ð)ñ< ˜×*Ñ*Ó+Øð5˜vð 5¨fò 5ó ó ,ð5ñ ˜Ÿ	™	Ó"ÙƒØð&ˆvð &˜&ò &ó ó ó #ð&ñ ˜×*Ñ*Ó+Ùˆ\ÓØð>˜vð >¨Vð >¸ò >ó ó ó ,ð>ñ
 ˜×*Ñ*Ó+ð6˜ð 6¨ð 6°6ò 6ó ,ð6ñ ˜×3Ñ3Ó4ð%Øð%à
ð%ð ð%ð ˆ6�6ˆ>Ñò	%ó 5ð%ñ ˜×6Ñ6Ó7ÙƒØð
Øð
à
ð
ð ð
ð ð	
ð
 ð
ð ð
ð ð
ð ò
ó ó ó 8ð
ñ$ ˜×1Ñ1Ó2Ùˆ\ÓØð< fð <°Fð <ÀFð <Èvò <ó ó ó 3ð<ñ ˜Ÿ
™
Ó#Ùƒð/�ð /˜vð /¨&ò /ó ó $ð/ð˜vð °#ó ð˜Ÿ™ó ñ ˜Ÿ™Ó&ÙƒØà3<·>±>×3GÑ3Gñ1Ø
ð1Ø ð1Ø-0ð1àò1ó ó ó 'ð1ñ ˜×.Ñ.Ó/Ùˆ\ÓØð1Øð1Ø &ð1Ø06ð1ØCFò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ð#$Øð#$à
ð#$ð ð#$ð �T‰Mð	#$ð
 ð#$ð ð#$ð ð#$ð ó#$ñL ˜×)Ñ)Ó*Ùˆ\ÓØðN˜fð N¨Fð N¸ð NÀò Nó ó ó +ðNñ( ˜×.Ñ.Ó/Ùˆ\Óð.Øð.à
ð.ð ð.ð �T‰Mð	.ð
 ð.ð ð.ð ð.ð ò.ó ó 0ð.ñb ˜×0Ñ0Ó1Ùˆ\Óð$Øð$à
ð$ð ð$ð �T‰Mð	$ð
 ð$ð ð$ð ð$ð ò$ó ó 2ð$ñN ˜×1Ñ1Ó2ÙƒØð !Ø—^‘^×)Ñ)ñ	1Ø
ð1àð1ð �T‰Mð1ð ð	1ð
 ò1ó ó ó 3ð1ñ& ˜×:Ñ:Ó;Ùˆ\ÓØð
 !Ø—^‘^×)Ñ)ñØðà
ðð ðð �T‰Mð	ð
 ðð òó ó ó <ðñ  ˜×-Ñ-Ó.ÙƒØð —^‘^×)Ñ)ñ1Øð1àð1ð ð1ð ò	1ó ó ó /ð1ñ ˜×6Ñ6Ó7Ùˆ\ÓØð
 —^‘^×)Ñ)ñ		Øð	à
ð	ð ð	ð ð		ð
 ò	ó ó ó 8ð	ñ ˜Ÿ	™	Ó"Ùƒò)�ð )˜vð )¨%ò )ó ó #ð)ñ ˜×,Ñ,Ó-Ùƒð&˜ð & Fð &¨vò &ó ó .ð&ñ ˜×+Ñ+Ó,Ùƒð	OØð	Oà�c‘ð	Oð 
ð	Oð ð		Oð
 
ð	Oð ò	Oó ó -ð	Oñ ˜Ÿ
š
×)Ñ)Ó*ð ØØØò3?à
ð3?ð 
ð3?ð �‰:ð	3?ð
 
ˆt‰ð3?ð ò3?ó +ð3?ðlØðØðØ # d¡
ðØ14°t±ðà
ˆ3�ˆ8�_óñ. ˜×*Ò*Ó+Ùƒð ØØØò$UØð$Uà	ð$Uð 
ð$Uð �‰:ð	$Uð
 
ˆt‰ð$Uð ò$Uó ó ,ð$UñN ˜×,Ò,Ó-ÙƒðE ð E°d¸3±ið EÀcð EÐRUò Eó ó .ðEñ
 ˜×.Ò.Ó/ÙƒðOØðOØ&*¨3¡ið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ð �3‰iðMð �#‰Yð	Mð
 �‰IðMð òMó ó %ðMñ` ˜ŸšÓ$ÙƒØð]Øð]à�c‘ð]ð �c‘ð]ð �3‰ið	]ð
 �#‰Yð]ð �‰Ið]ð ò]ó ó ó %ð]ñ@ ˜×4Ò4Ó5Ùƒð
¨ð 
°vð 
Àeò 
ó ó 6ð
ñ ˜×,Ò,Ó-Ùƒðc#Ø
ðc#Ø" 3™iðc#Ø47ðc#Ø?Bðc#ØJMðc#àòc#ó ó .ðc#ñL ˜×+Ò+×3Ñ3Ó4Øà;?ò
Øð
Ø%ð
Ø,1°D©Lð
àò
ó ó 5ð
ñ& ˜ŸšÓ%Ø‡‚×Ñ×Ò˜k×CÒCÓDØ‡‚×Ñ×Ò˜k×2Ò2Ó3ð�6ð ˜eð ¨D°4©Kò ó 4ó Eó &ðñ ˜×+Ò+Ó,ÙˆV�VÓðA˜&ð A Uð A°4¸$±;ò Aó ó -ðAñ ˜ŸšÓ&Ùƒð�ð ˜Sð °ò ó ó 'ðð*, 6ð ,°ð ,¸ó ,ñ( ˜×)Ò)Ó*Ù˜Ôð�Fð  ð °Tò ó ó +ðñ, ˜ŸšÓ'Ùƒð Ø$ØòØðàðð ðð ð	ð
 ðð òó ó (ðñ( ˜×5Ò5Ó6ÙƒðØðàðð ðð ð	ð
 òó ó 7ððBˆD�‰Ió ðØ�&‰\ðà	ðð ðð 
ˆ&�\ó	ð*˜T &™\ó ð
 t¨F¡|ð 
¸#ó 
ð"Ø�&‰\ð"à	ð"ð ó"ñJ ˜Ÿš×0Ñ0°$·/²/×2EÑ2EÐFÓGð
 ò	Ø�&‰\ðà	ðð ðð 
�$‰ð	ð
 òó Hðñ  Ø	×Ò×'Ñ'¨×)CÒ)C×)GÑ)GÐHóð Ø#ò	Ø
ðà�c‘ðð 
ðð 
ˆf‰˜Ñ	ð	ð
 
ˆ&�\�DÑòóðñ  ˜×)Ò)×0Ñ0Ó1ò5˜ð 5¨Cð 5°cð 5À%ÈÐPSÈÑBTò 5ó 2ð5ñ ˜×4Ò4×<Ñ<Ó=à67òBØðBØ $ S¡	ðBØ03ðBà
ˆ6�3ˆ;ÑòBó >ðBñ ˜Ÿ
š
×)Ñ)Ó*ò/�ð / Cð /¨cð /¸%ÀÈÀÑ:Lò /ó +ð/ð2 ×Ò×-Ò-×5Ò5Ø×)Ò)óð ò//Ø
ð//à &ð//ð 
ð//ð ˆ6�3ˆ;Ñò	//óð//ñf ˜Ÿš×+Ñ+¨T¯ZªZ¯^©^Ð<Ó=Ù˜ÔØò�ð ˜fð ¨Fð ¸#ð È#ò ó ó ó >ðñ" ˜Ÿš×)Ñ)¨4¯:ª:×+?Ò+?Ð@ÓAÙ˜Ôð Øò+Ø
ð+à
ð+ð ð+ð �{‰{ð	+ð
 ð+ð ò+ó ó Bð+ñ ˜×.Ò.Ó/ÙƒØð
 ØØòØ
ðà
ðð ðð ð	ð
 ðð òó ó ó 0ðð" ò	�fð 	 Fð 	°ð 	¸sð 	Èsò 	ó ð	ñ ˜Ÿ
š
Ó#Ù˜Ôò5�ð 5˜fð 5¨6ð 5¸ð 5Èò 5ó ó $ð5ñ ˜×7Ò7×?Ñ?Ó@ØðS&ØðS&àðS&ð ðS&ð ð	S&ð
 �D‰=ðS&ð ðS&ð ðS&ð 
ðS&ð ðS&ð �d‘ðS&ð ˆ6�D‰=˜& 4™-¨°$©Ð6Ñ7òS&ó ó AðS&ñn ˜×7Ò7×;Ñ;Ó<ðØðàðð ðð ð	ð
 �D‰=ðð ðð ðð 
ðð ðð �d‘ðð �,‰,ðð �,‰,ðð �,‰,ðð ˆ6�D‰=˜& 4™-¨°$©Ð6Ñ7òó =ðð8�6˜D‘=ð ¨F°T©Mó ñ ˜×7Ò7×?Ñ?Ó@ðQØðQàðQð ˜3‘iðQð ð	Qð
 ðQð �T‰MðQð �4‰-ðQð �d‘ðQð ˆ6�D‰=˜& 4™-¨°$©Ð6Ñ7òQó AðQñj ˜×7Ò7×;Ñ;Ó<ðØðàðð ˜3‘iðð ð	ð
 ðð �T‰Mðð �4‰-ðð �d‘ðð �,‰,ðð �,‰,ðð �,‰,ðð ˆ6�D‰=˜& 4™-¨°$©Ð6Ñ7òó =ðñ4 ˜×,Ò,×4Ñ4Ó5ð3Øð3à˜3‘ið3ð �T‰Mð3ð 
�‰ð	3ð
 ˆ6�6ˆ>Ñò3ó 6ð3ñl ˜×5Ò5×=Ñ=Ó>ðHØðHàðHð ˜3‘iðHð ð	Hð
 �T‰MðHð �d‘ðHð ˆ6�D‰=˜& 4™-Ð'Ñ(òHó ?ðHðVRØðRà�T‰MðRð �4‰-ðRð ˜4‘-ð	Rð
 ˜$‘ðRð ðRð ðRð 
ðRð ðRð ˆ6�6˜6 6¨D¡=°&¸4±-Ð?Ñ@óRñj ˜×.Ò.Ó/ÙˆU�K Ó/ð(Øð(à�T‰Mð(ð �4‰-ð(ð ˜4‘-ð	(ð
 ˜$‘ð(ð ð(ð ð(ð 
ð(ð ˆ6�6˜6Ð!Ñ"ò(ó 0ó 0ð(ð4 ×Ò×Ñ×'Ò'¨×(<Ò(<Ó=Ø×Ò×Ñ×'Ò'¨×(MÒ(MÓNð 
Øð 
à�T‰Mð 
ð �4‰-ð 
ð ˜4‘-ð	 
ð
 ˜$‘ð 
ð ð 
ð ð 
ð 
ð 
ð ˆ6�6˜6Ð!Ñ"ò 
ó Oó >ð 
ðF ×Ò×Ñ×"Ò" ;×#HÒ#HÓIòG°4¸±<ò Gó JðGñ ˜×AÒA×IÑIÓJðØðà�T‰Mðð �4‰-ðð ð	ð
 ðð ðð 
ðð ˆ6�6˜6Ð!Ñ"òó Kðñ* ˜×5Ò5×=Ñ=Ó>ð(Øð(à�T‰Mð(ð �4‰-ð(ð ð	(ð
 ð(ð ð(ð ð(ð 
ð(ð ˆ6�6˜6Ð!Ñ"ò(ó ?ð(ñ  ˜×5Ò5×>Ò>Ó?ð(Øð(à�T‰Mð(ð �4‰-ð(ð ð	(ð
 ð(ð 
ð(ð ˆ6�6˜6Ð!Ñ"ò(ó @ð(ñ ˜×@Ò@×HÑHÓIðKØðKà�T‰MðKð �4‰-ðKð ð	Kð
 ðKð ðKð ðKð 
ðKð ˆ6�6˜6 6¨6Ð1Ñ2òKó JðKð4Øðà�T‰Mðð �4‰-ðð ð	ð
 ðð 
ðð ðð óñ: ˜×4Ò4×<Ñ<Ó=ð1Øð1à�T‰Mð1ð �4‰-ð1ð ð	1ð
 ð1ð ð1ð 
ð1ð ˆ6�6˜6 6Ð)Ñ*ò1ó >ð1ñ4 ˜×?Ò?×GÑGÓHðCØðCà�T‰MðCð �4‰-ðCð ð	Cð
 ðCð ðCð 
ðCð ˆ6�6˜6 6¨6°6Ð9Ñ:òCó IðCñ8 ˜×2Ò2×:Ñ:Ó;ð1Øð1à�T‰Mð1ð �4‰-ð1ð ð	1ð
 ð1ð ð1ð 
ð1ð ˆ6�6˜6 6Ð)Ñ*ò1ó <ð1ñ4 ˜×+Ò+Ó,ÙˆV�VÓó(ó ó -ð(ñ ˜ŸšÓ&Ùƒð !%ØØ"&ØØØ04òAØ�
ÑðAð �;‰;˜ÑðAð
 �LŠL˜4ÑðAð ðAð ðAð ×&Ò&¨Ñ-òAó ó 'ðAñN ˜Ÿš d§i¢i°·²ÐAÓBÙƒñó ó Cðð ×Ò×Ñ×&Ò& {×';Ò';Ó<Ù˜×-Ò-Ó.ÙˆV�V˜V VÓ,ðØðàðð �4‰-ðð ˜4‘-ð	ð
 ˜$‘ðð ðð !&ðð òó -ó /ó =ðò>ñ ˜×0Ò0×8Ñ8Ó9ðØðàðð �T‰Mðð ˜4‘-ð	ð
 ˜$‘ðð ˜‰}ðð ˜$‘ðð ðð 
ðð �d‘ðð ðð ˆ6�6˜D‘= &¨4¡-Ð/Ñ0òó :ðñ6 ˜×7Ò7×?Ñ?Ó@ðiØðiàðið �T‰Mðið ˜4‘-ð	ið
 ˜$‘ðið ˜‰}ðið ˜$‘ðið ðið 
ðið �d‘ðið ˆ6�6˜D‘= &¨4¡-Ð/Ñ0òió AðiñZ ˜×7Ò7×;Ñ;Ó<ð"Øð"àð"ð �T‰Mð"ð ˜4‘-ð	"ð
 ˜$‘ð"ð ˜‰}ð"ð ˜$‘ð"ð ð"ð 
ð"ð �d‘ð"ð �,‰,ð"ð �,‰,ð"ð �,‰,ð"ð ˆ6�6˜D‘= &¨4¡-Ð/Ñ0ò"ó =ð"ñJ ˜×7Ò7Ó8ÙˆV�V˜VÓ$ðØðàðð ðð ˜4‘-ð	ð
 ˜$‘ðð ˜‰}ðð �t‰mðð òó %ó 9ðñ0 ˜×6Ò6Ó7ÙˆV�V˜VÓ$ðØðàðð ðð ˜4‘-ð	ð
 ˜$‘ðð ˜‰}ðð �t‰mðð ðð òó %ó 8ðñ2 ˜×1Ò1Ó2ÙƒØðd'˜vð d'°E¸#¸s¸(±Oò d'ó ó ó 3ðd'ðNC Ø
ðC à�c‘ðC ð �‰IðC ð �#‰Yð	C ð
 �3‰iðC ð ðC ð ðC ð ˆ6�6ˆ>ÑóC ñL ˜×4Ò4Ó5ÙˆU�IÓð Ø˜Ø˜#Øñ
Ø
ð
à�c‘ð
ð �‰Ið
ð �#‰Yð	
ð
 �3‰ið
ð ð
ð ˆ6�6ˆ>Ñó
ó ó 6ð
ñ ˜×4Ò4Ó5ÙˆU�IÓð Ø˜Ø˜#Øñ
Ø
ð
à�c‘ð
ð �‰Ið
ð �#‰Yð	
ð
 �3‰ið
ð ð
ð ˆ6�6ˆ>Ñó
ó ó 6ð
ñ ˜×0Ò0Ó1ÙˆU�IÓð,Øð,à�s˜C�x‘ð,ð ˆ6�6ˆ>Ñó,ó ó 2ð,ñ^ ˜×0Ò0Ó1ÙˆU�IÓð3Øð3à�s˜C �}Ñ%ð3ð ˆ6�6ˆ>Ñó3ó ó 2ð3ðl Ø
ð Ø)ð Ø8<¸S¹	ð ØHKô ñF ˜×)Ò)Ó*Ùƒð*8Ø
ð*8àð*8ð �c‘ó*8ó ó +ð*8ñZ ˜×)Ò)Ó*Ùƒð49Øð49àð49ð �c‘ð49ð �‰Ið	49ð
 �#‰Yó49ó ó +ð49ñn ˜ŸšÓ(ð óHØðHà	ðHð ñHð ð	Hð óHó )ðHñ ˜ŸšÓ'Ùƒð óIØðIà	ðIð ñIð ð	Ið óIó ó (ðIð$ ó-@Øð-@à	ð-@ð ñ-@ð ñ	-@ð ð-@ð ô-@ñ` ˜×)Ò)×1Ñ1Ó2Ø×Ò×Ñ×"Ò" ;×#HÒ#HÓIô ó Jó 3ð ñF ˜×(Ò(Ó)ð<�:ð < Cð <°
ñ <ÀJó <ó *ð<ñ ˜ŸšÓ(Ùƒð=�*ð = 3ð =¨zñ =À:ó =ó ó )ð=ðC@ØðC@ØðC@Ø$.ñC@Ø8BñC@ØPTôC@ñN ˜×0Ò0Ó1ÙˆX�xÓ Øð(˜fð (¨¨v°v¨~Ñ)>ó (ó ó !ó 2ð(ñ ˜ŸšÓ%Ùƒð "Ø"Ø(,ò	Øñà	�‰�eÑ	ñð �‰*�uÑ
ñð �Š Ñ%ó	ó ó &ðñ" ˜ŸšÓ&ô;ó 'ð;ó
ó8ñ ˜×/Ò/×3Ò3Ó4Ù˜×/Ò/×3Ò3Ó4Ù˜×/Ò/×3Ò3Ó4Ø×Ò×Ò×$Ò$ [×%JÒ%JÓKØ×Ò×Ò×$Ò$ [×%9Ò%9Ó:Ø×Ò×Ò×$Ò$ [×%JÒ%JÓKØ×Ò×Ò×$Ò$ [×%9Ò%9Ó:Ø×Ò×Ò×$Ò$ [×%JÒ%JÓKØ×Ò×Ò×$Ò$ [×%9Ò%9Ó:ð	3Øð	3à�c‘˜TÑ!ñ	3ð ˜‘; Ñ%ð	3ð ó		3ó ;ó Ló ;ó Ló ;ó Ló 5ó 5ó 5ð	3ñ ˜×6Ò6×:Ò:Ó;Ù˜×6Ò6×:Ò:Ó;Ù˜×6Ò6×:Ò:Ó;Ø×Ò×#Ò#×+Ò+¨K×,QÒ,QÓRØ×Ò×#Ò#×+Ò+¨K×,@Ò,@ÓAØ×Ò×#Ò#×+Ò+¨K×,QÒ,QÓRØ×Ò×#Ò#×+Ò+¨K×,@Ò,@ÓAØ×Ò×#Ò#×+Ò+¨K×,QÒ,QÓRØ×Ò×#Ò#×+Ò+¨K×,@Ò,@ÓAð	?Øð	?à�c‘˜TÑ!ñ	?ð ˜‘; Ñ%ð	?ð ó		?ó Bó Só Bó Só Bó Só <ó <ó <ð	?õ#ñL ˜×0Ò0×8Ñ8¸$×:QÒ:Q×:UÑ:UÐVÓWØ×Ò× Ñ ×(Ò(¨×)NÒ)NÓOØ×Ò× Ñ ×(Ò(¨×)=Ò)=Ó>Ù D°dÕ;ð  ò;Øð;à�c‘ñ;ð �D‰Lð;ð ó	;ó <ó ?ó Pó Xð;ñ Ø	×#Ò#×+Ñ+¨T×-KÒ-K×-OÑ-OÐPóð ×Ò×'Ñ'×/Ò/°×0UÒ0UÓVØ×Ò×'Ñ'×/Ò/°×0DÒ0DÓEÙ D°dÕ;ð  òGØðGà�c‘ñGð �D‰LðGð ó	Gó <ó Fó WóðGñ ˜×0Ò0×8Ñ8¸$×:QÒ:Q×:UÑ:UÐVÓWØ×Ò× Ñ ×(Ò(¨×)NÒ)NÓOØ×Ò× Ñ ×(Ò(¨×)=Ò)=Ó>Ù D°dÕ;ð "Ø!ò	GØðGà�c‘ñGð �d‰lñGð �d‰lð	Gð
 óGó <ó ?ó Pó XðGñ Ø	×#Ò#×+Ñ+¨T×-KÒ-K×-OÑ-OÐPóð ×Ò×'Ñ'×/Ò/°×0UÒ0UÓVØ×Ò×'Ñ'×/Ò/°×0DÒ0DÓEÙ D°dÕ;ð "Ø!ò	SØðSà�c‘ñSð �d‰lñSð �d‰lð	Sð
 óSó <ó Fó WóðSñ ˜×0Ò0×8Ñ8¸$×:QÒ:Q×:UÑ:UÐVÓWØ×Ò× Ñ ×(Ò(¨×)NÒ)NÓOØ×Ò× Ñ ×(Ò(¨×)=Ò)=Ó>Ù D°dÕ;ð "Ø!Ø!òQØðQà�c‘ñQð �d‰lñQð �d‰lñ	Qð
 �d‰lðQð óQó <ó ?ó Pó XðQñ Ø	×#Ò#×+Ñ+¨T×-KÒ-K×-OÑ-OÐPóð ×Ò×'Ñ'×/Ò/°×0UÒ0UÓVØ×Ò×'Ñ'×/Ò/°×0DÒ0DÓEÙ D°dÕ;ð "Ø!Ø!ò	Øð	à�c‘ñ	ð �d‰lñ	ð �d‰lñ		ð
 �d‰lð	ð ó	ó <ó Fó Wóð	ð ð
 ò	Øðà�c‘ñð �˜‘Ññð ð	ð
 óó ðó4ó&>ó/óð$ FKõ+ó\óõ&õ,/-ód& ñR ˜Ÿš×+Ò+Ó,Ø‡‚×Ò×Ò˜[×BÒBÓCØ‡‚×Ò×Ò˜[×1Ò1Ó2ò.ó 3ó Dó -ñ.ñ8 ˜Ÿš×+Ò+Ó,Ø‡‚×Ò×Ò˜[×BÒBÓCØ‡‚×Ò×Ò˜[×1Ò1Ó2ò.ó 3ó Dó -ñ.ñ8 ˜Ÿš×*Ò*Ó+Ø‡‚×Ò×Ò˜K×AÒAÓBØ‡‚×Ò×Ò˜K×0Ò0Ó1ò.ó 2ó Có ,ñ.ñ@ ˜Ÿš×*Ò*Ó+Ø‡‚×Ò×Ò˜K×AÒAÓBØ‡‚×Ò×Ò˜K×0Ò0Ó1ò.ó 2ó Có ,ñ.ô@ö/ö6=ô@/ñd ˜Ÿ	š	ŸšÓ(Ø‡‚‡‚×Ò˜×>Ò>Ó?Ø‡‚‡‚×Ò˜×-Ò-Ó.òSó /ó @ó )ñSñ@ ˜Ÿ	š	ŸšÓ'Ø‡‚‡‚×Ò˜×=Ò=Ó>Ø‡‚‡‚×Ò˜×,Ò,Ó-òSó .ó ?ó (ñSô>;ô;ñ ˜ŸšŸšÓ&Ø‡‚‡‚×Ò�{×<Ò<Ó=Ø‡‚‡‚×Ò�{×+Ò+Ó,ò.ó -ó >ó 'ñ.ñ6 ˜ŸšŸšÓ'Ø‡‚‡‚×Ò˜×=Ò=Ó>Ø‡‚‡‚×Ò˜×,Ò,Ó-ò.ó .ó ?ó (ñ.ñ6 ˜×4Ò4×8Ò8Ó9Ø×Ò×!Ò!×)Ò)¨+×*OÒ*OÓPØ×Ò×!Ò!×)Ò)¨+×*>Ò*>Ó?òó @ó Qó :ññ ˜×3Ò3×7Ò7Ó8Ø×Ò× Ò ×(Ò(¨×)NÒ)NÓOØ×Ò× Ò ×(Ò(¨×)=Ò)=Ó>òó ?ó Pó 9ññ ˜×3Ò3×7Ò7Ó8Ø×Ò× Ò ×(Ò(¨×)NÒ)NÓOØ×Ò× Ò ×(Ò(¨×)=Ò)=Ó>òó ?ó Pó 9ññ ˜×0Ò0×4Ò4Ó5Ù˜×1Ò1×5Ò5Ó6Ø×Ò×Ò×#Ò# K×$IÒ$IÓJØ×Ò×Ò×#Ò# K×$8Ò$8Ó9Ø×Ò×Ò×%Ò% k×&KÒ&KÓLØ×Ò×Ò×%Ò% k×&:Ò&:Ó;Ø×Ò×Ò×&Ò& {×'LÒ'LÓMØ×Ò×Ò×&Ò& {×';Ò';Ó<òAó =ó Nó <ó Mó :ó Kó 7ó 6ñAñ ˜×/Ò/×7Ñ7¸×9OÒ9O×9SÑ9SÐTÓUÙƒð
 "ò	KØðKà�c‘ñKð ñKð �d‰lð	Kð
 óKó ó VñKñ Ø	×Ò×%Ñ% t×'?Ò'?×'CÑ'CÐDóð ×Ò×!Ñ!×)Ò)¨+×*>Ò*>Ó?Ùƒð
 "Ø!òUØðUà�c‘ñUð ñUð �d‰lñ	Uð
 �d‰lðUð óUó ó @óñ
Uñ Ø	×Ò×&Ñ&¨×(AÒ(A×(EÑ(EÐFóñ ƒð
 "Ø!Ø!ò
Øð
à�c‘ñ
ð ñ
ð �d‰lñ	
ð
 �d‰lñ
ð �d‰lð
ð ó
ó óñ
öVô/ð7Ø	�&Ñ	ñ7Ø$,¨VÑ$4ñ7ØIOð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 ð �T‰Mð3 ð ð	3 ð
 ð3 ð ˆ6�6ˆ>Ñõ3 ñl ˜×-Ò-Ó.ÙˆX�~Ó&ðLØ
ðLàðLð �T‰MðLð ð	Lð
 ðLð ˆ6�6ˆ>ÑóLó 'ó /ñLñ@ ˜×/Ò/Ó0ÙˆX�~Ó&ðLØ
ðLàðLð �T‰MðLð ð	Lð
 ðLð ˆ6�6ˆ>ÑóLó 'ó 1ñLð/ Fñ /¨uð /¸õ /ð5 Fñ 5¨uð 5¸õ 5ñ
¨ð 
Ð3Eõ 
ñ(FÐ%7ñ F¸Vð FÈõ Fñ!�X˜fÑ%ð !¨&õ !ñNØñNØ#'ðNØ05·±ðNØEJÇ\Â\õNñ&˜fñ &¨ñ &°ñ &ÀTõ &ñ"/˜fñ /¨ñ /°ñ /¸ñ /ÈTõ /ñ"! Vð !°4¸±9ñ !ÈTõ !ñ$ Vð $°4¸±9ñ $ÈTõ $ñ ˜×2Ò2Ó3ÙƒØñS ð S¨t°C©yñ SÈó Só ó ó 4ñSð  ØØØóp4Øñp4à
ñp4ð ñp4ð ñ	p4ð
 ñp4ð ðp4ð õp4ñf ˜×,Ò,Ó-ÙƒØð  ØØóØñà
ñð ñð ñ	ð
 ðð óó ó ó .ññ  ˜ŸšÓ Ù˜ÔØò	#ó ó ó !ñ	#ñ ˜×=Ò=Ó>Ùƒà¨$¸)¿.¹.×: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à�s˜C�x‘ñTð ñTð �T‰\ñ	Tð
 �T‰\ðTð óTó ó ó ?ó XñTñn ˜×/Ò/×3Ò3Ó4Ø×Ò×Ò×$Ò$ [×%JÒ%JÓKØ×Ò×Ò×$Ò$ [×%9Ò%9Ó:ÙƒØð
 15ó	WØðWà�s˜C�x‘ 4Ñ'ñWð ñWð ˜ ˜Ñ&¨Ñ-ð	Wð
 óWó ó ó ;ó Ló 5ñ
Wñ4 ˜×-Ò-Ó.Ù˜×-Ò-Ó.Ù˜×-Ò-Ó.ØÙƒñ	�vð 	¨¨c°3¨h©ð 	¸Fó 	ó ó ó /ó /ó /ñ
	ñ ˜×.Ò.Ó/Ù˜×.Ò.Ó/Ù˜×.Ò.Ó/ØÙƒñ	˜ð 	¨¨s°C¨x©ð 	¸Vó 	ó ó ó 0ó 0ó 0ñ
	ñ%Øð%à�3˜�8‰_ñ%ð �c˜3 �_ fÐ,Ñ-ð%ð õ	%ñP ˜×6Ò6Ó7Ù˜×6Ò6Ó7Ù˜×6Ò6Ó7Ùˆ\ÓòTó ó 8ó 8ó 8ñTñn ˜ŸšÓ%Ù‰U‘EÓØ uõ ó ó &ññ ˜ŸšÓ$ÙƒñX°4õ Xó ó %ñXñ ˜Ÿš×,Ñ,¨d¯kªk¯o©oÐ>Ó?Ùƒð !%Ø Ÿ=š=Ø"&Øó
Ø	ð
ð �;‰;˜Ññ
ð �LŠLð	
ð
 �LŠL˜4Ñð
ð ó
ó ó @ñ
ñ ˜Ÿš×*Ò*Ð+Ó,ð
 !%Ø Ÿ=š=Ø"&ØóØðà	ðð �;‰;˜Ññ	ð
 �LŠLðð �LŠL˜4Ñðð óó -ññ ˜	Ó"ò,ó #ñ,ñ ˜×.Ò.Ó/Ø×Ò×Ñ×'Ò'¨×(<Ò(<Ó=Ùƒð ØØ Ø—^‘^×)Ñ)ñ)Øð)àð)ð ñ)ð ð	)ð
 �T‰Mð)ð ð)ð ó)ó ó >ó 0ñ)ñX ˜×;Ò;Ó<Ø×$Ò$×,Ñ,×4Ò4°[×5IÒ5IÓJÙˆX‘{Ó#ð-Øð-àð-ð ð-ð ˆ6�6ˆ>Ñó	-ó $ó Kó =ñ-ñx ˜×HÒH×PÑPÓQð
 ØñAð  $ØôAØñAà	ðAð ñAð ñ	Að
 ñAð ˜‰}ðAð �4‰<ðAð ˆ6�6ˆ>ÑóAó RñAôHñ ˜Ÿš˜Ó'Ù˜ÔØôó ó ó (ññ ˜×)Ò)Ó*Ùƒò9ó ó +ñ9ñ ˜ŸšÓ'ò6ó (ñ6ñ ˜Ÿš×)Ñ)¨4¯8ª8¯<©<Ð8Ó9ð !%Øó		DØ
ð	Dð �;‰;˜Ñð	Dð 
�$‰ð		Dð
 ó	Dó :ñ	Dñ ˜Ÿš×-Ñ-¨t¯|ª|×/?Ò/?Ð@ÓAò.˜&ð . s¨T¡zó .ó Bñ.ñ ˜Ÿ	™	Ÿ™×=Ò=Ó>ô,ó ?ñ,ñ ˜Ÿ	š	Ó"ÙƒØ38Àõ 
ó ó #ñ
ñ( ˜Ÿš×.Ñ.Ó/ð )-óØ
�,‰,ñð �Š Ñ%ðð ‡\�\ó	ó 0ñð$ 5:÷ 
#ð <AÈ÷ +ñ: ˜Ÿ	š	Ó"Ùƒòó ó #ññ
 ˜ŸšÓ'ôGó (ñGñ ˜×=Ò=Ó>ðvØðvà
ðvð ðvð óvó ?ñvñr ˜×)Ò)×1Ñ1°4×3CÒ3C×3GÑ3GÐHÓIÙƒð !%Ø"&Ø"&Ø"ôØðð �;‰;˜Ññð �LŠL˜4Ñð	ð
 �LŠL˜4Ñðð �t‘ðð óó ó JññB ˜×)Ò)×2Ò2°D×4DÒ4D×4QÒ4QÐRÓSÙƒð ñ6ð !%Ø"&Ø"&Ø"ô6Øñ6àð6ð �;‰;˜Ññ	6ð
 �LŠL˜4Ñð6ð �LŠL˜4Ñð6ð �t‘ð6ð ó6ó ó Tñ6òr �—’˜tŸ{š{Ô +Ú �—’˜dŸjšjÔ )Ú �—’˜dŸjšjÔ )Ú �—’ §¢Ô -Ú �—’˜TŸY™YÔ 'Ú �—’˜TŸYšYÔ 'Ú �—’ $§.¡.Ô 1Ú �—’ §¢Ô /Ú �×"Ò" D×$4Ñ$4Ô 5Ú �—’ §¢Ô -Ú �×!Ò! 4§?¢?Ô 3Ú �—’ $§.¢.Ô 1Ú �×#Ò# T×%6Ò%6Ô 7Ú �—’˜tŸ{š{Ô +Ú �×!Ò! 4§?¢?Ô 3Ú �—’ §¢Ô -Ú �—’˜dŸj™jÔ )Ú �×!Ò! 4§?¢?Ô 3Ú �—’˜dŸjšjÔ )Ú �—’˜TŸYšYÔ 'Ú �—’˜tŸ{š{Ô +Ú �—’˜dŸjšjÔ )Ú �—’ §¢Ô -Ú �×"Ò" D×$4Ò$4Ô 5Ú �×%Ò% t×':Ò':Ô ;Ú �—’˜TŸY™YÔ 'ð ‡‚×Ñ×Ò˜k×CÒCÓDò�&ñ  sð °Fó ó Eòr+   