Ë
    g^(h¾} ã            -       ófp  — d dl Z d dlmZ d dlmZ d dlmZ d dlmZm	Z	m
Z
mZ d dlmZ d dlZd dlmZ d dlmZmZmZ d dlmZmZmZmZ d d	lmZ d d
lmZmZ d dlmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( d dl)m*Z*m+Z+m,Z,m-Z-m.Z. d dl/m0Z0m1Z1 d dl2m3Z4 d dl5m6Z7  e
d«      Z8 ed«      Z9ejt                  jv                  Z;ejx                  j{                  ddd«      Z> e?d«      \  Z@ZAZBdeee9e8f   gee9e8f   f   fd„ZCde#fd„ZDd„ ZEd„ ZF eCe;jŽ                  e;j�                  g«       e.«       dddej’                  ddfd„«       «       ZJ eCe;j–                  j˜                  e;j–                  jš                  g«       e.«       d„ «       «       ZN eCe;jž                  j˜                  e;jž                  jš                  g«       e.«       dd œd!„«       «       ZO eCe;j                   «       e.«       d"„ «       «       ZP eCe;j¢                  j˜                  e;j¢                  jš                  e;j¤                  j˜                  e;j¤                  jš                  g«       e.d#d$«      d%„ «       «       ZS eCe;j¨                  j˜                  e;j¨                  jš                  g«       e.«       d&„ «       «       ZTd'„ ZU�dd(ed)eVeW   d*eXfd+„ZY eCe;j´                  j˜                  e;j´                  jš                  g«       e.«       d,„ «       «       Z[dZ\d)eVeW   fd-„Z] eCe;j¼                  j˜                  e;j¼                  jš                  g«       e.«       d.„ «       «       Z_ eCe;jÀ                  jÂ                  «      dd/œd0„«       Zb eCe;jÀ                  j˜                  «      ejÆ                  dddd1œd2„«       Zd eCe;jÊ                  j˜                  e;jÊ                  jš                  g«       e.«       ejÆ                  dddd1œd3„«       «       Zf eCe;jÊ                  jÎ                  e;jÊ                  jÐ                  g«       e.«       ejÆ                  dddd1œd4„«       «       Zi eCe;jÔ                  j˜                  e;jÔ                  jš                  g«       e.«       ddddd1œd5„«       «       Zk eCe;jØ                  j˜                  e;jØ                  jš                  g«       e.«       d(ed)eVeW   d6eWd7eWfd8„«       «       Zm eCe;jÜ                  j˜                  «      �dd9„«       Zod:„ Zp eCe;jâ                  j˜                  «      d;„ «       Zr eCe;jæ                  «      	 	 	 �dd<ed=ed>ed?e	e   d@e	et   dAe	ejê                     fdB„«       Zv eCe;jî                  «      	 �ddCedDedEedAe	ejê                     fdF„«       Zx eCe;jò                  «      dGdGddHœd<edCedDedEedAe	ejê                     f
dI„«       Zz eCe;jö                  «      	 	 	 	 	 	 	 �ddJej(                  dKej(                  d?e	e   dLe	e   dAe	ejê                     dMeXdNeWdOeWdPeXfdQ„«       Z| eCe;jú                  j˜                  «      dRdSœd(ed)eWdTedUej(                  dVetdWeXdefdX„«       Z~ eCe;jþ                  j˜                  «      dRdSœd(ed)eWdTedUej(                  dVetdWeXdefdY„«       Z€ e.«        eCe;�j                  j˜                  «      dZ„ «       «       Z‚ eCe;�j                  j˜                  «      dddd ddd[œd\edVetd]e	e   d$e	e   d^e	e   d_eWd`eXdefda„«       Z„ eCe;�j
                  j˜                  e;�j
                  �j                  g«       e.«       db„ «       «       Z‡ eCe;�j
                  �j                  «      �ddc„«       Z‰ eCe;�j                  j˜                  e;�j                  �j                  g«       e.«       dd„ «       «       Z‹ eCe;�j                  �j                  «      �dde„«       ZŒ eCe;�j                  j˜                  «      df„ «       ZŽ eCe;�j                  jš                  «      dg„ «       Z� eCe;�j                   j˜                  «      dh„ «       Z‘ eCe;�j                   �j$                  «      di„ «       Z“ eCe;�j(                  j˜                  «      dj„ «       Z• eCe;�j,                  j˜                  «      ddddddkœdl„«       Z— eCe;�j0                  j˜                  «      �ddm„«       Z˜ eCe;�j2                  j˜                  «      �ddn„«       Zš eCe;�j6                  j˜                  «      �ddo„«       Z› eCe;�j8                  j˜                  «      dp„ «       Z� eCe;�j<                  �j$                  «      dq„ «       ZŸd(edretfds„Z d(edteduetfdv„Z¡	 �ddwedretdxeXfdy„Z¢�ddtedretdzetfd{„Z£dted|ed}eXdretfd~„Z¤	 �dd€etded<ed�etfd‚„Z¥dƒetfd„„Z¦ eCe;�jN                  j˜                  e;�jN                  �jP                  g«       e.d…d†«      �ddtedƒetdˆeXfd‰„«       «       Z© eCe;�jT                  j˜                  e;�jV                  jš                  g«       e.«       d<edefdŠ„«       «       Z¬ eCe;�jZ                  g«       e.d…d†«      d<efd‹„«       «       Z®dŒedefd�„Z¯ eCe;�j`                  «       e.«       d(edtedŽeXdefd�„«       «       Z° eCe;�jb                  «       e.«       �dd(edtedŽeXdefd�„«       «       Z± eCe;�jd                  «       e.«       �dd(edŽeXdefd‘„«       «       Z² eCe;�jf                  «       e.«       �dd(edŽeXdefd’„«       «       Z³ eCe;�jh                  j˜                  «      �ddtedŽeXd“eXfd”„«       Z´ eCe;�jj                  j˜                  e;�jj                  jš                  g«       e.«       d<ed•edefd–„«       «       Zµ eCe;�jl                  j˜                  «      �ddted“eXfd—„«       Z· eCe;�jp                  j˜                  e;�jp                  jš                  g«       e.d˜d™dš«      ddd›œd(edœeXd“eXde¹eeef   fd�„«       «       Zº eCe;�jv                  j˜                  e;�jv                  jš                  g«       e.«       ddžœd˜ed™ed|edœeXdef
dŸ„«       «       Z¼ eCe;�jz                  j˜                  e;�jz                  jš                  g«       e.d d‡d¡«      dRd¢œdted£eXde¹eeef   fd¤„«       «       Z¾ eCe;�j~                  j˜                  e;�j~                  jš                  g«       e.d¥d™dš«      dRdd¦œdted£eXd“eXde¹eeef   fd§„«       «       ZÀ eCe;�j‚                  j˜                  e;�j‚                  jš                  g«       e.«       dRdd¨œd¥ed™ed|ed}eXd©eXdefdª„«       «       ZÂ eCe;�j†                  «       e.d d‡d¡«      	 	 �dd¥ed™ed«eXd¬eXde¹eeef   f
d­„«       «       ZÄd®etde¹eXeXf   fd¯„ZÅ eCe;�jŒ                  j˜                  e;�jŒ                  jš                  g«       e.d°d±«      �ddted®etde¹eef   fd²„«       «       ZÇ eCe;�j�                  j˜                  e;�j�                  �j’                  g«       e.d³d´d¥d™«      dtede¹eeeef   fdµ„«       «       ZÈ eCe;�j”                  j˜                  «      	 	 	 �ddted¶eXd·eXd¸e	et   fd¹„«       ZËdºed»ede¹eVeW   eVeW   f   fd¼„ZÌdºed»edue	et   de¹eef   fd½„ZÍd<ed¾edeXfd¿„ZÎ eCe;�jž                  «      dRddddddÀœdted|ed}eXd“eXde	e   d¥e	e   d™e	e   dše	e   de¹eeeef   fdÁ„«       ZÏ eCe;�j                   j˜                  e;�j                   jš                  g«      dRdddÂœdted|edŽeXd}eXdÃeXdÄe	e   defdÅ„«       ZÑ eCe;�j¤                  «       e.dÆdÇdR¬È«      	 	 	 �dd(edtedŽeXdÉeXdÃeXde¹eef   fdÊ„«       «       ZÓ eCe;�j¨                  j˜                  «      dË„ «       ZÕ eCe;�j¬                  «       e.«       	 	 �dd<ed•ed¾ed}eXdÉeXdefdÌ„«       «       ZÖdÍ„ Z×dÎ„ ZØ eCe;�j²                  «       e.«       dÏ„ «       «       ZÚ eCe;�j¶                  «       e.«       dÐ„ «       «       ZÜdÑ„ ZÝ eCe;�j¼                  «       e.dÒ«      dÓ„ «       «       Zß eCe;�jÀ                  «       e.dÒ«      dÔ„ «       «       ZádÕ„ Zâ eCe;�jÆ                  «       e.«       dÖ„ «       «       Zä eCe;�jÊ                  «       e.«       d×„ «       «       Zæ eCe;�jÎ                  j˜                  e;�jÎ                  �jÐ                  e;�jÒ                  j˜                  e;�jÒ                  �jÐ                  g«       e.dÒ«      dØ„ «       «       ZêdÙ„ Zë eCe;�jØ                  «       e.«       dÚ„ «       «       Zí eCe;�jÜ                  «       e.«       dÛ„ «       «       Zï eCe;�jà                  j˜                  e;�jà                  �jÐ                  e;�jâ                  j˜                  e;�jâ                  �jÐ                  g«       e.dÒ«      dÜ„ «       «       Zò eCe;�jæ                  «       e.«       �dd(edÝeôdefdÞ„«       «       Zõ eCe;�jì                  «       e.«       dßed(edÝeôdàedef
dá„«       «       Z÷ eCe;�jð                  j˜                  e;�jð                  jš                  g«       e.«       dGdGdâœdã„«       «       Zù eCe;�jô                  j˜                  e;�jô                  jš                  g«       e.«       dd/œdä„«       «       Zû eCe;�jø                  �jè                  «      �d då„«       Zý eCe;�jô                  �jü                  «      �d dæ„«       Zÿ eCe;�j                   j˜                  e;�j                   jš                  g«       e.«       �ddç„«       «       �Z eCe;�j                  j˜                  «      	 	 �ddè„«       �Z eCe;�j                  «       e.«       dé„ «       «       �Zdê„ �Z�d!dë„�Z	 �ddìej(                  d=ej(                  díeeVeW   eWf   dîeeVeW   eWf   dïeeVeW   eWf   dðeXdñeWdòe	eeVeW   eWf      fdó„�Zdô„ �Z	 eCe;�j                  j˜                  «      dìej(                  d=ej(                  d?e	ej(                     dõe	ej(                     döe	ej(                     d÷eXdøeôdùeôfdú„«       �Z eCe;�j                  j˜                  «      dìej(                  d=ej(                  d?ej(                  díeVeW   dîeVeW   dïeVeW   dðeXdòeVeW   dñeWfdû„«       �Ze�j                  �j                  �r_ejx                  j{                  düdd«      �Z eCejt                  �j"                  �j$                  j˜                  «      dý„ «       �Z eCejt                  �j"                  �j(                  j˜                  «      dþ„ «       �Ze�j                  �j,                  rNejx                  j{                  dÿdd«      �Z eCejt                  �j0                  �j2                  «      �d „ «       �Zejx                  j{                  �ddd«      �Z eCejt                  �j8                  �j:                  j˜                  «      �d„ «       �Z eCejt                  �j8                  �j:                  �j>                  «      �d„ «       �Z  eCejt                  �j8                  �jB                  j˜                  «       eCejt                  �j8                  �jB                  �jD                  «      �d„ «       «       �Z# eCejt                  �j8                  �jB                  �j>                  «       eCejt                  �j8                  �jB                  �jH                  «      �d„ «       «       �Z% eCejt                  �j8                  �jL                  j˜                  «       eCejt                  �j8                  �jN                  j˜                  «      �d„ «       «       �Z(ejx                  j{                  �ddd«      �Z) eCejt                  �jT                  �jV                  «      	 	 	 	 �d"�d	„«       �Z, eCejt                  �jT                  �jZ                  «      �d
„ «       �Z.�d„ �Z/ eCe;�j`                  j˜                  «      	 	 	 	 	 �d#�d„«       �Z1�d„ �Z2 eCe;�jf                  j˜                  «      �d„ «       �Z4 eCe;�jj                  «       e.«       	 	 	 	 	 �d#�d„«       «       �Z6 eCe;�jn                  «       e.dÒ«      �d„ «       «       �Z8 eCe;�jr                  j˜                  «      �d„ «       �Z: eCe;�jv                  j˜                  «      �d„ «       �Z< eCe;�jz                  j˜                  «      �d„ «       �Z> eCe;�j~                  «       e.dÒ«      �d„ «       «       �Z@�dedzetf�d„�ZA eCe;�j„                  «       e.dÄd$«      �d„ «       «       �ZC eCe;�jˆ                  «       e.dÒ«      �d„ «       «       �ZE eCe;�jŒ                  «       e.dÄd$«      �d„ «       «       �ZG eCe;�j�                  «       e.dÒ«      �d„ «       «       �ZI eCe;�j”                  j(                  «      �d�d„«       �ZK eCe;�j˜                  j˜                  e;�j˜                  jš                  g«       e.«       �d„ «       «       �ZM eCe;�jœ                  j˜                  e;�jœ                  jš                  g«       e.«       d�dœ�deWf�d„«       «       �ZN eCejt                  jv                  �jž                  j˜                  ejt                  jv                  �jž                  jš                  g«       e.«       �d „ «       «       �ZO eCe;�j                   j(                  e;�j¢                  j(                  g«      �d!„ «       �ZR eCe;�j¦                  j˜                  g«      �d"„ «       �ZT eCe;�jª                  j˜                  e;�jª                  jš                  g«       e.«       dGdGdâœ�d#„«       «       �ZV eCe;�j®                  j˜                  e;�j°                  j˜                  g«      dd�d$œ�d%„«       �ZY eCe;�j´                  j˜                  g«      dd�d$œ�d&„«       �Z[ eCe;�j¸                  g«       e.«       �d'„ «       «       �Z] eCe;�j¼                  g«      �d(„ «       �Z_ eCe;�jÀ                  g«      �d)„ «       �Za eCe;�jÄ                  g«      �d*„ «       �Zc eCe;�jÈ                  g«      �d+„ «       �Ze�d,eW�d-eWdeWf�d.„�Zf�d/„ �Zg eCe;�jÐ                  g«      d?e	e   f�d0„«       �Zi eCe;�jÔ                  g«      �d1„ «       �Zk eCe;�jØ                  g«      �d2„ «       �Zm eCe;�jÜ                  j˜                  «      �d3„ «       �Zo eCe;�jà                  «       e.«       �d4„ «       «       �Zq eCe;�jä                  j˜                  «      	 	 	 	 	 	 �d$�d5„«       �Zs eCe;�jè                  j˜                  «      �d6„ «       �Zu�d�d7„�Zv eCe;�jî                  j˜                  e;�jî                  jš                  g«       e.«       �d%d�d8œ�d9„«       «       �Zx eCe;�jò                  j˜                  e;�jô                  j˜                  g«      �d:„ «       �Z{ eCe;�jò                  �j                  e;�jò                  �jø                  e;�jô                  �j                  e;�jô                  �jø                  e;�jú                  j˜                  e;�jú                  �jü                  g«       e.d#d$«      �d&�d;„«       «       �Z eCe;�j                   j˜                  «      �d<„ «       �Z� eCe;�j                  j˜                  «      �d=„ «       �Zƒ eCe;�j                  j˜                  «      �d>„ «       �Z… eCe;�j                  �j                  e;�j                  �j                  e;�j                  j(                  e;�j                  j(                  e;�j                  j˜                  e;�j                  j˜                  e;�j                  j˜                  g«      �d?„ «       �ZŒ eCe;�j                  �j                  e;�j                  �j                  e;�j                  j(                  e;�j                  j(                  g«      �d�d@„«       �Z� eCe;�j                   j˜                  e;�j                   �j"                  g«      �dA„ «       �Z’�dB„ �Z“ eCe;�j(                  j(                  e;�j(                  �j                  g«      �dC„ «       �Z• eCe;�j,                  j(                  e;�j,                  �j                  g«      �dD„ «       �Z— eCe;�j0                  j˜                  «      �dE„ «       �Z™ eCe;�j4                  j(                  e;�j4                  �j                  g«      �dF„ «       �Z› eCe;�j8                  j(                  e;�j8                  �j                  g«      �dG„ «       �Z� eCe;�j<                  j˜                  «      �dH„ «       �ZŸ eCe;�j@                  j(                  «       e.«       �ddef�dI„«       «       �Z¡ eCe;�jD                  g«       e.«       	 �d'�dJ„«       «       �Z£ eCe;�jH                  g«      	 �d'�dK„«       �Z¥ eCe;�jL                  g«      	 �d'�dL„«       �Z§ eCe;�jP                  j˜                  e;�jR                  j˜                  g«      �d�dM„«       �Zª eCe;�jV                  �j                  «      �dN„ «       �Z¬ eCe;�jZ                  j˜                  «      �dO„ «       �Z® eCe;�j^                  «      �dP„ «       �Z° eCe;�jb                  «       e.«       �dQ„ «       «       �Z² eCe;�jf                  «      �dR„ «       �Z´ eCe;�jj                  j˜                  «      �d�dS„«       �Z¶ eCe;�jn                  j˜                  «      �dT„ «       �Z¸�d�dU„�Z¹ eCe;�jt                  j˜                  «      �dV„ «       �Z»�dW„ �Z¼�dX„ �Z½�dY„ �Z¾�dZ„ �Z¿	 �dd<e�d[eW�d\eW�d]eW�d^eW�d_eW�d`eW�daeW�dbeW�dceW�ddeW�deeW�dfeW�dgeW�dheW�dieW�djeW�dkeW�dleW�dmeWd€et�dneXf,�do„�ZÀ�dp„ �ZÁd<e�de�d[eW�d\eW�d]eW�d^eW�d_eW�d`eW�daeW�dbeW�dceW�ddeW�dheW�dieW�djeW�dkeW�dleW�dmeWd€etf&�dq„�ZÂ�dr„ �ZÃ eCe;�jˆ                  j˜                  «      �ds„ «       �ZÅ eCe;�jŒ                  j˜                  «      	 	 	 	 �d"�dt„«       �ZÇ eCe;�j�                  j˜                  «      �du„ «       �ZÉ eCe;�j”                  «       e.dÄd$«      	 	 	 	 �d"�dv„«       «       �ZË eCe;�j˜                  «       e.dÒ«      �dw„ «       «       �ZÍd<e�dxef�dy„�ZÎ G �dz„ �d{e«      �ZÏd<e�dxe�d|eWf�d}„�ZÐ eCe;�j¢                  j˜                  «      �d~„ «       �ZÒ eCe;�j¦                  «       e.«       �d„ «       «       �ZÓ eCe;�j¨                  «       e.dÒ�d€«      �d�„ «       «       �ZÔ eCe;�jª                  j˜                  g«      �d‚„ «       �ZÕ eCe;�j¬                  j˜                  «      	 	 	 	 	 �d(�dƒ„«       �ZÖ eCe;�j®                  j®                  «      �d„„ «       �ZØ eCe;�j²                  j˜                  «      �d…„ «       �ZÚ eCe;�j¶                  j˜                  «      �d)�d†„«       �ZÜ�dd)eW�d‡eW�dˆeXf�d‰„�ZÝ�dŠ„ �ZÞ�d‹„ �Zß eCe;�jÀ                  j˜                  «      �d�dŒ„«       �Zá�d�d�„�Zâ�d�dŽ„�Zã�d�„ �Zä�d�d�„�Zå�d*�d‘„�Zæ eCe;�jÎ                  j˜                  «      �d’„ «       �Zè eCe;�jÒ                  «      �d“„ «       �Zê eCe;�jÖ                  �jØ                  e;�jÖ                  �jÚ                  e;�jÖ                  �jÜ                  e;�jÖ                  �jÞ                  g«       e.«       �d�d”„«       «       �Zð eCe;�jâ                  �jØ                  e;�jâ                  �jÚ                  e;�jâ                  �jÜ                  e;�jâ                  �jÞ                  g«      �d�d•„«       �Zò eCe;�jæ                  g«      	 	 	 	 �d+�d–e�d—e�d˜e�d™eô�dšeX�d›eX�dœe	eô   f�d�„«       �Zô eCe;�jê                  g«      	 	 	 	 �d+�d–e�d—e�d˜e�dže	e   �dŸeX�d™eô�dšeX�d›eX�dœe	eô   f�d „«       �Zö eCe;�jî                  g«      	 	 	 	 	 �d,�d–e�d—e�d˜e�dže	e   �d™eô�dšeX�d›eX�dœe	eô   f�d¡„«       �Zø eCe;�jò                  g«      	 �d�d¢e�d–e�d—e�d˜edÄe�d£e�d¤e�d¥e�d¦eW�d§eW�d™eô�dšeX�d¨e�d©e�dœe	eô   f�dª„«       �Zú eCe;�jö                  g«      	 	 	 	 �d-�d–e�d—e�d˜e�d™eô�dšeX�d«e	e   �dœe	eô   f�d¬„«       �Zü eCe;�jú                  g«      	 	 �d�d¢e�d–e�d—e�d˜edÄe�d£e�d™eô�dšeX�d«e	e   �dœe	eô   f�d­„«       �Zþ eCe;�jþ                  g«      	 	 	 �d.�d–e�d—e�d˜e�dže	e   �dŸeX�dšeX�dœe	eô   f�d®„«       �Z  eCe;�j                  g«      	 	 �d/�d¢e�d–e�d—e�d˜e�dže	e   dÄe�d£e�d¨e�d©e�d™eô�d¯eVeX   �dšeX�dœe	eô   f�d°„«       �Z eCe;�j                  g«      	 �d�d¢e�d–e�d—e�d˜edÄe�d£e�d¨e�d©e�dže�d¤e�d¥e�d¦eW�d§eW�d™eô�dšeX�dœe	eô   f �d±„«       �Z eCe;�j
                  g«      	 	 	 	 	 �d(�d–e�d—e�d˜e�d¤e	e   �d¥e	e   �d¦eW�d§eW�d™eô�dšeX�d›eX�dœe	eô   �d²e	eW   �d³e	eW   �d´e	e   �dµe	e   f�d¶„«       �Z eCe;�j                  g«      	 	 	 �d�d¢e�d–e�d—e�d˜edÄe�d£e�d¤e�d¥e�d¦eW�d§eW�d™eô�dšeX�d¨e�d©e�dœe	eô   �d²e	eW   �d³e	eW   f"�d·„«       �Z eCe;�j                  g«      	 	 	 	 	 �d0�d–e�d—e�d˜ed?e	e   �d¸e	e   �d¹e	e   �dºe	eW   �d»e	eW   �d™eô�d¼eW�dŸeX�dœe	eô   �d½e	e   �d¾e	e   �d¿e	eW   f�dÀ„«       �Z
 eCe;�j                  g«      	 	 	 �d*�d¢e�d–e�d—e�d˜ed?e	e   �d¸e	e   �d¹e	e   �dºe�j                  �d»e�j                  �d£e�d™eô�d¨e�d©e�d¼eW�dÁeX�dœe	eô   �dÂe	eW   �dÃeXf$�dÄ„«       �Z eCe;�j                  j˜                  g«      	 	 	 	 �d1d(ej(                  dEej(                  �dÅej(                  �dÆej(                  d?e	ej(                     �dÇe	ej(                     dAe	ejê                     �dÈeXf�dÉ„«       �Z eCe;�j                   �j"                  e;�j                   �j$                  g«       e.«       �d�dÊ„«       «       �Z eCe;�j(                  �j"                  «      �d�dË„«       �Z eCe;�j,                  j˜                  e;�j,                  jš                  g«       e.«       �ddd/œ�dÌ„«       «       �Z�dÍ„ �Z�dÎ„ �Z eCe;�j4                  j˜                  e;�j6                  j˜                  g«      �d�dÏ„«       �Z eCe;�j8                  j˜                  e;�j:                  j˜                  g«      �d�dÐ„«       �Z eCe;�j<                  j˜                  e;�j>                  j˜                  g«      	 	 �d�de�dÑeeeWe�j                  f      �dÒeeeWe�j                  f      �dÓe	eô   �dÔe	eô   f
�dÕ„«       �Z eCe;�j@                  j˜                  e;�jB                  j˜                  g«      �d�dÖ„«       �Z  eCe;�jD                  j˜                  e;�jD                  �jF                  e;�jD                  �jü                  e;�jD                  �jH                  g«      �d2�d×„«       �Z%�dØ„ �Z& eCe;�jN                  j˜                  «      	 	 �d�dÙ„«       �Z( eCe;�jR                  j˜                  «      �dÚ„ «       �Z) eCe;�jT                  j˜                  «      �dÛ„ «       �Z*�dÜ„ �Z+�dÝ„ �Z, eCe;�jZ                  j˜                  e;�j\                  j˜                  g«      �d%�dÞ„«       �Z/ eCe;�j`                  j˜                  «      �d3�dß„«       �Z0 eCe;�jb                  j˜                  «      �d4�dà„«       �Z2 eCe;�jf                  «       e.«       	 �d5�dá„«       «       �Z4 eCe;�jj                  j˜                  e;�jj                  �jü                  g«       e.d#d$«      �d&�dâ„«       «       �Z6e�jn                  �Z8�dã„ �Z9 eCe;�jt                  j˜                  «      �dä„ «       �Z: eCe;�jv                  j˜                  «      �då„ «       �Z; eCe;�jx                  j˜                  «      �dæ„ «       �Z= eCe;�j|                  j˜                  «      �dç„ «       �Z> eCe;�j~                  j(                  e;�j~                  �j€                  g«       e.«       dd�dèœ�dé„«       «       �ZA eCe;�j„                  g«       e.«       �d6�dê„«       «       �ZC eCe;�jˆ                  j˜                  e;�jŠ                  j˜                  g«      	 	 �d�dë„«       �ZF eCe;�jŽ                  j˜                  g«      	 	 �d�dì„«       �ZH eCe;�j’                  j˜                  «      �dí„ «       �ZI eCe;�j”                  j˜                  e;�j”                  jš                  g«       e.«       �d�dî„«       «       �ZJ eCejt                  jv                  �j–                  «      �dï„ «       �ZK eCejt                  jv                  �j˜                  «      �dð„ «       �ZL eCe;�jš                  «       e.«       dddd�dñœ�dò„«       «       �ZN�dó„ �ZO eCe;�j                   «      	 �d7�dô„«       �ZQ eCe;�j¤                  «      	 �d7�dõ„«       �ZS eCe;�j¨                  «      	 �d7�dö„«       �ZU eCe;�j¬                  «       e.«       dd�d÷œ�dø„«       «       �ZW eCe;�j°                  «       e.«       �dùeWd(edef�dú„«       «       �ZY eCe;�j´                  «      d(ef�dû„«       �Z[ eCe;�j¸                  «       e.dR¬È«      d(edef�dü„«       «       �Z\ eCe;�jº                  «       e.«       d(edef�dý„«       «       �Z] eCe;�j¼                  «       e.«       �dþed)eW�dÿeXdef�d „«       «       �Z_ eCe;�jÀ                  «       e.«       	 	 	 �d8d=ed$e�deW�deX�deXdef�d„«       «       �Z` eCe;�jÂ                  j˜                  «      	 �d9d#ed^eVe   �deVeW   �deôf�d„«       �Zb�d„ �Zc�d	„ �Zd �ece;�jÊ                  «        �ece;�jÌ                  «        �ece;�jÎ                  «        �ece;�jÐ                  «        �ece;�jÒ                  «        �ece;�jÔ                  «        �ece;�jÖ                  «        �ece;�jØ                  «        �ece;�jÚ                  «        �ede;�jÜ                  «        �ede;�jÞ                  «        �ede;�jà                  «        �ede;�jâ                  «        �ede;�jä                  «        �ede;�jæ                  «        �ede;�jè                  «        �ede;�jê                  «        �ede;�jì                  «        �ede;�jî                  «        �ede;�jð                  «        �ede;�jò                  «       �d
„ �Zz eCe;�jö                  «       e.«       �d„ «       «       �Z{ eCe;�jø                  «       e.«       dG�dœ�d„«       «       �Z| eCe;�jú                  «       e.«       dG�dœ�d„«       «       �Z} �eze;�jö                  «      �Z~ �eze;�jø                  «      �Z �eze;�jú                  «      �Z€d dl/Zd d�l�Zd d�l‚Z�d„ �Zƒ �eƒ«        y(:  é    N)ÚSequence)ÚEnum)Úwraps)ÚCallableÚOptionalÚTypeVarÚUnion)Ú	ParamSpec)ÚSymBoolÚSymFloatÚTensor)Ú_add_op_to_registryÚ_convert_out_paramsÚglobal_decomposition_tableÚ
meta_table)Ú
OpOverload)Ú_prim_elementwise_metaÚ$ELEMENTWISE_PRIM_TYPE_PROMOTION_KIND)
ÚBoolLikeÚcorresponding_complex_dtypeÚcorresponding_real_dtypeÚelementwise_dtypesÚELEMENTWISE_TYPE_PROMOTION_KINDÚ	FloatLikeÚIntLikeÚmake_contiguous_strides_forÚNumberÚ
TensorLike)Ú_maybe_convert_to_dtypeÚ_maybe_resize_outÚ_resize_output_checkÚ_safe_copy_outÚout_wrapper)Ú_broadcast_shapesÚ_maybe_broadcast)Ú_config)Ú_pytreeÚ_TÚ_PÚatenÚIMPLÚMetaé   Úreturnc                 ó   ‡ — ˆ fd„}|S )Nc                 óV   •‡ — t        ‰ «      Š ˆ fd„}t        j                  |‰«       ‰ S )Nc                 ó(   •— t        t        | ‰«       y ©N)r   r   )ÚopÚfns    €úW/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/_meta_registrations.pyÚregisterz0register_meta.<locals>.wrapper.<locals>.register9   s   ø€ Ü¤
¨B°Õ3ó    )r   ÚpytreeÚ	tree_map_)r4   r6   r3   s   ` €r5   Úwrapperzregister_meta.<locals>.wrapper6   s)   ù€ Ü  Ó$ˆô	4ô 	×Ñ˜ 2Ô&Øˆ	r7   © )r3   r:   s   ` r5   Úregister_metar<   5   s   ø€ ôð €Nr7   Útype_promotionc                 ó°   — t        j                  |d| iŽ\  }}|D �cg c]  }t        ||«      ‘Œ }}t        |Ž }t	        |dt
        j                  iŽS c c}w )NÚtype_promotion_kindr=   )Úutilsr   r   r%   r   r   ÚDEFAULT)r=   ÚargsÚ_Úresult_dtypeÚxs        r5   Úelementwise_metarF   B   ss   € ô
 ×.Ñ.Ø	ðà*ñ�O€A€|ð ?CÖC¸Ô# A |Õ4ÐC€DÐCô ˜TÐ"€Dô "Ø	ðÜB×JÑJñð ùò Ds   �Ac                 óÞ   — t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  i}|j                  | | «      S r2   )ÚtorchÚ	complex32ÚhalfÚcfloatÚfloatÚcdoubleÚdoubleÚget)ÚdtypeÚfrom_complexs     r5   ÚtoRealValueTyperR   V   sE   € ä�‰œŸ™Ü�‰”e—k‘kÜ�‰”u—|‘|ð€Lð
 ×Ñ˜E 5Ó)Ð)r7   c                 ól   ‡ ‡— t        t        ‰ g|¢­Ž «      Št        j                  ‰‰ k(  ˆˆ fd„«       y )Nc                  ó   •— d‰› d‰ › �S )Nzoutput with shape z# doesn't match the broadcast shape r;   )Úbroadcasted_shapeÚ
self_shapes   €€r5   ú<lambda>z)check_inplace_broadcast.<locals>.<lambda>c   s   ø€ Ð$ Z LÐ0SÐTeÐSfÐg€ r7   )Útupler$   rH   Ú_check)rV   Ú
args_shaperU   s   ` @r5   Úcheck_inplace_broadcastr[   _   s0   ù€ ÜÔ/°
ÐH¸ZÒHÓIÐÜ	‡L�LØ˜ZÑ'Ügõr7   Fc	                 ó<  ‡ ‡‡‡‡	— t        ‰ t        j                  «      r(t        j                  ‰ j	                  «       dk(  d„ «       t        ‰t        j                  «      r(t        j                  ‰j	                  «       dk(  d„ «       t        d„ ‰ ‰‰fD «       «      rZt        j                  t        j                  «       «      Š	‰€‰	ŠnFt        j                  t        j                  ‰«      ˆ	ˆfd„«       n‰xs t        j                  «       Št        ‰t        j                  «      sJ ‚t        j                  t        ‰t        «      ˆˆ ˆfd„«       t        ‰t        «      sJ ‚t        j                  ‰dk\  d„ «       t        j                  ‰f‰|d||¬	«      S )
Nr   c                   ó   — y©Nz:linspace only supports 0-dimensional start and end tensorsr;   r;   r7   r5   rW   z(meta_linspace_logspace.<locals>.<lambda>w   ó   � r7   c                   ó   — yr^   r;   r;   r7   r5   rW   z(meta_linspace_logspace.<locals>.<lambda>|   r_   r7   c              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wr2   )Ú
isinstanceÚcomplex)Ú.0Úargs     r5   ú	<genexpr>z)meta_linspace_logspace.<locals>.<genexpr>   s   è ø€ Ò
C¨Œ:�cœ7×#Ñ
Cùs   ‚c                  ó   •— d‰ › d‰› �S )Nzlinspace(): inferred dtype z& can't be safely cast to passed dtype r;   )Údefault_complex_dtyperP   s   €€r5   rW   z(meta_linspace_logspace.<locals>.<lambda>ˆ   s   ø€ Ð5Ð6KÐ5LÐLrÐsxÐryÐz€ r7   c                  óŽ   •— dt        ‰«      j                  › dt        ‰ «      j                  › dt        ‰«      j                  › d�S )Nz4received an invalid combination of arguments - got (ú, ú))ÚtypeÚ__name__)ÚendÚstartÚstepss   €€€r5   rW   z(meta_linspace_logspace.<locals>.<lambda>‘   sD   ø€ ð Ü€uƒ+×ÑÐ�rœ$˜s›)×,Ñ,Ð-¨R´°U³×0DÑ0DÐ/EÀQðH€ r7   c                   ó   — y)Nz$number of steps must be non-negativer;   r;   r7   r5   rW   z(meta_linspace_logspace.<locals>.<lambda>•   r_   r7   Úmeta)rP   ÚlayoutÚdeviceÚ
pin_memoryÚrequires_grad)rb   rH   r   rY   ÚdimÚanyr@   r   Úget_default_dtypeÚis_complex_dtyperP   Ú_check_typer   Úempty)
ro   rn   rp   ÚbaserP   rt   rs   ru   rv   rh   s
   ``` `    @r5   Úmeta_linspace_logspacer~   g   sL  ü€ ô �%œŸ™Ô&Ü�‰Ø�I‰I‹K˜1ÑÙPô	
ô �#”u—|‘|Ô$Ü�‰Ø�G‰G‹I˜‰NÙPô	
ô
 Ñ
C°°s¸EÐ/BÔ
CÔCÜ %× AÑ AÜ×#Ñ#Ó%ó!
Ðð ˆ=Ø)‰Eä�L‰LÜ×&Ñ& uÓ-Üzõð
 Ò2œ×0Ñ0Ó2ˆÜ�eœUŸ[™[Ô)Ð)Ð)ô 
×ÑÜ�5œ'Ó"õ	Hôô
 �eœWÔ%Ð%Ð%Ü	‡L�L�˜!‘ÑKÔLä�;‰;Ø	ˆØØØØØ#ôð r7   c                 ó  ‡— t        j                  ‰j                  t         j                  k(  ˆfd„«       t        j                  | j                  «       dk(  xr ‰j                  «       dk7   d„ «       | j                  ‰j                  «      S )Nc                  ó"   •— d‰ j                   › �S )Nz2take(): Expected a long tensor for index, but got ©rP   ©Úindexs   €r5   rW   zmeta_take.<locals>.<lambda>§   s   ø€ ÐDÀUÇ[Á[ÀMÐR€ r7   r   c                   ó   — y)Nz*take(): tried to take from an empty tensorr;   r;   r7   r5   rW   zmeta_take.<locals>.<lambda>¬   r_   r7   )rH   rY   rP   ÚlongÚ_check_indexÚnumelÚ	new_emptyÚshape)Úselfrƒ   s    `r5   Ú	meta_taker‹   ¡   sm   ø€ ô 
‡L�LØ�‰”u—z‘zÑ!ÛRôô
 
×ÑØ�Z‰Z‹\˜QÑÒ5 5§;¡;£=°AÑ#5Ð6Ù<ôð �>‰>˜%Ÿ+™+Ó&Ð&r7   éÿÿÿÿ©rw   c                óT  ‡ ‡‡— ‰ j                   }‰j                   }t        j                  ||k(  d„ «       t        j                  ‰ j                  ‰«      dk(  xr ‰j                  ‰«      dk(  ˆˆˆ fd„«       t	        ‰ j
                  ‰j
                  «      }‰ j                  |«      S )Nc                   ó   — y)Nz=linalg.cross: inputs must have the same number of dimensions.r;   r;   r7   r5   rW   zlinalg_cross.<locals>.<lambda>¸   r_   r7   r-   c                  óV   •— d‰ › d‰j                  ‰ «      › d‰j                  ‰ «      › �S )Nzlinalg.cross: inputs dimension z must have length 3. Got ú and ©Úsize)rw   ÚotherrŠ   s   €€€r5   rW   zlinalg_cross.<locals>.<lambda>¼   s6   ø€ Ø-¨c¨Uð 3Ø—9‘9˜S“>Ð" %¨¯
©
°3«Ð'8ð:ð r7   )ÚndimrH   rY   r“   r$   r‰   rˆ   )rŠ   r”   rw   Úx_dÚy_dÚ	out_shapes   ```   r5   Úlinalg_crossr™   ±   s‡   ú€ ð �)‰)€CØ
�*‰*€CÜ	‡L�LØˆs‰
ÙOôô 
‡L�LØ�	‰	�#‹˜!ÑÒ4 §
¡
¨3£°1Ñ 4õ	
ôô " $§*¡*¨e¯k©kÓ:€IØ�>‰>˜)Ó$Ð$r7   c                 ó|   — t        | d«       t        | d«       t        j                  | t        j                  ¬«      S )Nzlinalg.matrix_exp©Úmemory_format)ÚsquareCheckInputsÚcheckFloatingOrComplexrH   Ú
empty_likeÚcontiguous_format©rŠ   s    r5   Úlinalg_matrix_expr¢   Å   s3   € ô �dÐ/Ô0Ü˜4Ð!4Ô5Ü×Ñ˜D´×0GÑ0GÔHÐHr7   ÚvaluesÚindicesc                 óZ  — t        j                  | j                  | j                  | j                  ¬«      }t        j                  | j                  | j                  t         j
                  ¬«      }| j                  «       dk7  r%| j                  dk7  rt        || j                  «       ||fS )N©rt   rP   r   )	rH   r|   r‰   rt   rP   Úint64r‡   r•   Úmaybe_wrap_dim)rŠ   rw   r£   r¤   s       r5   Ú	cummaxminr©   Í   sp   € ô
 �[‰[˜Ÿ™¨D¯K©K¸t¿z¹zÔJ€FÜ�k‰k˜$Ÿ*™*¨T¯[©[ÄÇÁÔL€GØ‡z�zƒ|�qÒ˜TŸY™Y¨!š^ä�s˜DŸI™IÔ&Ø�7ˆ?Ðr7   c                 óx   — t        || j                  «       t        j                  | t        j                  ¬«      S ©Nr›   )r¨   r•   rH   rŸ   r    )rŠ   rw   s     r5   Úlogcumsumexpr¬   Ú   s+   € ô �3˜Ÿ	™	Ô"Ü×Ñ˜D´×0GÑ0GÔHÐHr7   c                óD  ‡— |j                   }t        |«      }||z
  }t        t        |«      «      }t        |«      D �	cg c]  }	d‘Œ }
}	|D ]  }d|
|<   Œ	 g g }}|D ]*  }|
|   s|j	                  |«       Œ|j	                  |«       Œ, ||z   }t        |«      }|j                  «       Š|d | }|j                  ˆfd„d¬«       |||d  z   }|j                  |«      }dgt        |j                  |d  «      z   }|j                  |«      }|j                  d«      }||d<   t        |«      }t        t        |«      «      D ]  }|||      ||dz   <   Œ | j                  |t        j                  ¬«       t        |«      D �	cg c]  }	d‘Œ }}	d}|dz
  }|dk\  r0|| j                  d«      z  |||   <   ||||      z  }|dz  }|dk\  rŒ0t        ||«      D ]  }| j                  d||z
  z   «      |||   <   Œ! | j                  ||| j                  «       «       | S c c}	w c c}	w )	NFTc                 ó   •— ‰|    S r2   r;   )rE   Úself_stridess    €r5   rW   z_exec_fft.<locals>.<lambda>ÿ   s   ø€ ˜<¨™?€ r7   ©ÚkeyÚreverserŒ   r   é   r›   )r•   ÚlenÚlistÚrangeÚappendÚstrideÚsortÚpermuter‰   Úreshaper“   Úresize_rH   r    Úas_strided_Ústorage_offset)ÚoutrŠ   Ú	out_sizesrw   Úforwardr•   Úsignal_ndimÚ
batch_dimsÚdim_permuterC   Úis_transformed_dimÚdÚleftÚrightÚ	batch_endÚtmpÚinputÚbatched_sizesÚ
batch_sizeÚbatched_out_sizesÚiÚout_stridesÚbatch_numelr¯   s                          @r5   Ú	_exec_fftrÒ   ç   sZ  ø€ Ø�9‰9€DÜ�c“(€KØ˜Ñ#€Jô ”u˜T“{Ó#€Kä).¨t«Ö5 Aš%Ð5ÐÐ5Øò %ˆØ $Ð˜1Òð%ð �bˆ%€DØò ˆØ! !Ò$Ø�K‰K˜�Nà�L‰L˜�Oð	ð
 ˜‘,€KÜ�D“	€Ià—;‘;“=€LØ
�j�yÐ
!€CØ‡H�HÓ*°D€HÔ9Ø˜ I JÐ/Ñ/€KØ�L‰L˜Ó%€Eð �Dœ4 §¡¨J¨KÐ 8Ó9Ñ9€MØ�M‰M˜-Ó(€Eà—‘˜A“€JØ!€M�!ÑÜ˜]Ó+ÐÜ”3�s“8‹_ò 5ˆØ#,¨S°©VÑ#4Ð˜!˜a™%Ò ð5à‡K�KÐ!´×1HÑ1H€KÔIô $ D›kÖ*˜’1Ð*€KÐ*Ø€KØ�Q‰€AØ
ˆqŠ&Ø&1°C·J±J¸q³MÑ&Aˆ�K ‘NÑ#Ø�y ¨Q¡Ñ0Ñ0ˆØ	ˆQ‰ˆð ˆq‹&ô �:˜tÓ$ò GˆØ&)§j¡j°°a¸*±nÑ1EÓ&Fˆ�K ‘NÒ#ðGà‡O�O�I˜{¨C×,>Ñ,>Ó,@ÔAà€JùòW 6ùò@ +s   ¿	HÆ 	HrŠ   rw   Úexclude_lastc                 ó˜   ‡— t        |«      }| j                  «       Š|d t        |«      t        |«      z
   j	                  ˆfd„¬«       |S )Nc                 ó   •— ‰|    S r2   r;   )rÏ   r¯   s    €r5   rW   z_sort_dims.<locals>.<lambda>!  s   ø€ �l 1‘o€ r7   )r±   )rµ   r¸   r´   Úintr¹   )rŠ   rw   rÓ   Úsorted_dimsr¯   s       @r5   Ú
_sort_dimsrØ     sL   ø€ Ü�s“)€KØ—;‘;“=€LØÐ6”#�kÓ"¤S¨Ó%6Ñ6Ð7×<Ñ<Û%ð =ô ð Ðr7   c                 ó
  — t        j                  | j                  j                  «       |s| j	                  «       S t        | |«      }| j                  | j                  «       «      }t        || | j                  «       ||¬«      S )N©rÁ   )	rH   rY   rP   Ú
is_complexÚclonerØ   rˆ   r“   rÒ   )rŠ   rw   ÚnormalizationrÁ   r×   r¿   s         r5   Úmeta_fft_c2crÞ   (  sb   € ô 
‡L�L�—‘×&Ñ&Ô'ÙØ�z‰z‹|Ðä˜T 3Ó'€KØ
�.‰.˜Ÿ™›Ó
%€CÜ�S˜$ §	¡	£¨[À'ÔJÐJr7   c                 óf   — t        | «      t        kD  st        | «      dk\  r| d   dk(  r	| d   dk(  ryy)Né   r   r³   FT)r´   Úcufft_max_ndimr�   s    r5   Úuse_optimized_cufft_pathrâ   7  s3   € Ü
ˆ3ƒx”.Ò ¤S¨£X°¢]°s¸1±vÀ²{ÀsÈ1ÁvÐQRÂ{Øàr7   c                 óú  ‡— t        j                  | j                  j                  «       t	        | j                  «       «      }t	        |«      }|d   }||   dz  dz   }t	        |«      }|||<   |r|||<   t        | «      dk(  �rl| j                  |t        j                  | j                  «      ¬«      }	| }
t        |«      rt        |	|
||d¬«       nàt        |«      dk(  r|n|}t        |	|
||gd¬«       t        |«      dkD  r0| j                  |t        j                  | j                  «      ¬«      }
|d d }|rx|
|	}
}	|
j                  «       Š|j                  ˆfd„d¬	«       t        t         t        |«      «      }|t        |«      |z
  d  }t        |	|
||d¬«       |d t        |«      |z
   }|rŒx|s:|	j                  |«      ||   k7  r#|
j#                  |t         j$                  ¬
«       |
}	|	S t        | «      dk(  rNt'        | |d¬«      }| j                  |t        j                  | j                  «      ¬«      }t        || ||d¬«      S | j                  |t        j                  | j                  «      ¬«      S )NrŒ   rà   r³   Úcudar�   TrÚ   c                 ó   •— ‰|    S r2   r;   )rÏ   Ústridess    €r5   rW   zmeta_fft_r2c.<locals>.<lambda>d  s   ø€  '¨!¡*€ r7   r°   r›   Úxpu)rÓ   )rH   rY   rP   Úis_floating_pointrµ   r“   Údevice_hintrˆ   r@   r   râ   rÒ   r´   r¸   r¹   Úminrá   r¼   r    rØ   )rŠ   rw   rÝ   ÚonesidedÚinput_sizesrÀ   Úlast_dimÚlast_dim_halfsizeÚonesided_sizesÚoutputÚworking_tensorÚtarget_sizesr×   Úmax_dimsÚ	last_dimsr¿   ræ   s                   @r5   Úmeta_fft_r2crõ   >  sx  ø€ ô 
‡L�L�—‘×-Ñ-Ô.Ü�t—y‘y“{Ó#€KÜ�[Ó!€IØ�2‰w€HØ# HÑ-°Ñ2°QÑ6ÐÜ˜+Ó&€NØ0€N�8ÑáØ/ˆ	�(Ñä�4Ó˜FÓ"à—‘ØœU×>Ñ>¸t¿z¹zÓJð  ó 
ˆð ˆÜ# CÔ(Ü�f˜n¨i¸ÀdÖKô ),¨C«°Aª™9¸>ˆLÜ�f˜n¨l¸X¸JÐPTÕUÜ�3‹x˜!Š|Ø!%§¡Ø¤U×%FÑ%FÀtÇzÁzÓ%Rð "0ó "�ð
 ˜c˜r˜(ˆKÙØ)7¸˜�Ø(×/Ñ/Ó1�Ø× Ñ Û,°dð !ô ô œ~¬s°;Ó/?Ó@�Ø'¬¨KÓ(8¸8Ñ(CÐ(EÐF�	ÜØ˜N¨N¸IÈtõð *Ð*G¬C°Ó,<¸xÑ,GÐH�ò ñ Ø�{‰{˜8Ó$¨	°(Ñ(;Ò;Ø×&Ñ& yÄ×@WÑ@WÐ&ÔXØ'�àˆä	�TÓ	˜eÒ	#Ü   s¸Ô>ˆØ�n‰nØœU×>Ñ>¸t¿z¹zÓJð ó 
ˆô ˜˜d I¨{ÀDÔIÐIà�~‰~ØœU×>Ñ>¸t¿z¹zÓJð ó 
ð 	
r7   )Ú	generatorc                óB   — t        |t        j                  | g«      «      S r2   )r    rH   ÚSize)Únrö   r¿   s      r5   Úmeta_randpermrú   €  s   € ä˜S¤%§*¡*¨a¨S£/Ó2Ð2r7   ©rP   rs   rt   ru   c                ó6   — t        j                  | ||||¬«      S ©Nrû   ©rH   r|   )rù   rP   rs   rt   ru   s        r5   Úmeta_randperm_defaultrÿ   …  s    € ô �;‰;Ø	�˜v¨fÀôð r7   c                óx   ‡ ‡— dŠt        j                  ‰ ‰kD  ˆ ˆfd„«       t        j                  |||||¬«      S )Nr   c                  ó   •— d‰› d‰ › �S ©Nz:random_ expects 'from' to be less than 'to', but got from=z >= to=r;   ©ÚhighÚlows   €€r5   rW   zmeta_randint.<locals>.<lambda>¡  ó   ø€ ÐLÈSÈEÐQXÐY]ÐX^Ð_€ r7   rû   ©rH   rY   r|   )r  r“   rP   rs   rt   ru   r  s   `     @r5   Úmeta_randintr  “  s>   ù€ ð €CÜ	‡L�LØˆs‰
Ü_ôô �;‰;Ø�E &°ÀJôð r7   c                ót   ‡ ‡— t        j                  ‰‰ kD  ˆˆ fd„«       t        j                  |||||¬«      S )Nc                  ó   •— d‰› d‰ › �S r  r;   r  s   €€r5   rW   z"meta_randint_low.<locals>.<lambda>¶  r  r7   rû   r  )r  r  r“   rP   rs   rt   ru   s   ``     r5   Úmeta_randint_lowr  ¨  s9   ù€ ô 
‡L�LØˆs‰
Ü_ôô �;‰;Ø�E &°ÀJôð r7   c                ó6   — t        j                  | ||||¬«      S rý   rþ   )r“   rP   rs   rt   ru   s        r5   Úmeta_rand_defaultr  ½  s    € ô �;‰;Ø�E &°ÀJôð r7   rÝ   Úlastdimc                 ó  — t        j                  | j                  j                  «       t	        | «      dk(  rÔt        | j                  «       «      }|||d   <   | j                  |t        | j                  «      ¬«      }t        |«      r.t        || j                  t         j                  ¬«      ||d¬«      S t        |«      dkD  rt        | |d d d|«      }n | j                  t         j                  ¬«      }t        ||||d   gd¬«      S | }t        |«      dkD  r|d d }t        | ||d¬«      }|dd  }t        |j                  «       «      }|||d   <   | j                  |t        | j                  «      ¬«      }	t        |	|||d¬«      S )	Nrä   rŒ   r�   r›   FrÚ   r³   r   )rH   rY   rP   rÛ   ré   rµ   r“   rˆ   rR   râ   rÒ   rÜ   r    r´   rÞ   )
rŠ   rw   rÝ   r  rÀ   rð   ÚtemprË   Úc2c_dimsr¿   s
             r5   Úmeta_fft_c2rr  Å  sk  € ô 
‡L�L�—‘×&Ñ&Ô'ä�4Ó˜FÒ"Ü˜Ÿ™›Ó%ˆ	Ø$ˆ	�#�b‘'Ñà—‘ 	´ÀÇÁÓ1L�ÓMˆä# CÔ(ÜØØ—
‘
¬×)@Ñ)@�
ÓAØØØôð ô �3‹x˜!Š|Ü# D¨#¨c¨r¨(°A°wÓ?‘à—z‘z´×0GÑ0G�zÓH�Ü˜V T¨9°s¸2±w°iÈÔOÐOð ˆÜˆs‹8�aŠ<Ø˜3˜B�xˆHÜ   x°ÈÔNˆEØ�b�c�(ˆCä˜Ÿ™›Ó&ˆ	Ø$ˆ	�#�b‘'ÑØ�n‰n˜Y¬o¸d¿j¹jÓ.IˆnÓJˆÜ˜˜e Y°¸UÔCÐCr7   c                 óJ  — ddl m}  || «      s#t        j                  | «      dk(  rt	        d«      ‚t        |t        «      ra|j                  | |«      }| j                  «       |j                  «       k7  r.t        j                  j                  || j                  «       «       | S )Nr   )Úfree_unbacked_symbolsr³   zQmore than one element of the written-to tensor refers to a single memory location)Ú%torch.fx.experimental.symbolic_shapesr  rH   Ú_debug_has_internal_overlapÚRuntimeErrorrb   r   Útor“   r*   Úexpand_copyÚdefault)rŠ   ÚsrcÚnon_blockingr  Úintermediates        r5   Ú
meta_copy_r  î  s‰   € õ Lñ " $Ô'¬E×,MÑ,MÈdÓ,SÐWXÒ,XäØ_ó
ð 	
ô �#”vÔØ—v‘v˜d LÓ1ˆØ�9‰9‹;˜,×+Ñ+Ó-Ò-Ü×Ñ×$Ñ$ \°4·9±9³;Ô?Ø€Kr7   c                 óö   — t        | j                  «       «      }t        | j                  «       «      }|| j                  «       k\  rdn
||   ||   z  }|j	                  |d«       |j	                  ||«       ||fS ©Nr³   )rµ   r“   r¸   rw   Úinsert)Útensorrw   Úresult_sizesÚresult_stridesÚ
new_strides        r5   ÚinferUnsqueezeGeometryr&    sq   € Ü˜Ÿ™›Ó&€LÜ˜&Ÿ-™-›/Ó*€NØ˜VŸZ™Z›\Ò)‘¨|¸CÑ/@À>ÐRUÑCVÑ/V€JØ×Ñ˜˜QÔØ×Ñ˜#˜zÔ*Ø˜Ð'Ð'r7   c                 ó‚   — t        || j                  «       dz   «      }t        | |«      \  }}| j                  ||«       | S r   )r¨   rw   r&  r½   )rŠ   rw   Úg_sizesÚ	g_stridess       r5   Úmeta_unsqueeze_r*    s>   € ä
˜˜dŸh™h›j¨1™nÓ
-€CÜ/°°cÓ:Ñ€GˆYØ×Ñ�W˜iÔ(Ø€Kr7   rË   ÚweightÚ_metaÚbiasÚ_activation_optÚ	out_dtypec                 ó8  — t        | j                  «      }|�*|j                  d«      |j                  d«      k(  sJ d«       ‚|j                  d«      | j                  d«      dz  k(  sJ ‚|j                  d«      |d<   t        | j                  «      dk(  sJ d«       ‚d| j                  d«      f}|�7| j                  t
        j                  k(  r|t
        j                  k(  sJ d«       ‚| j                  ||€| j                  n|¬«      j                  ||«      }|S )	Nr   zoutput size mismatchr³   rŒ   rà   z*we can only handle the squashed input caseú9out_dtype is only supported for i8i8->i32 linear operatorr�   )
rµ   r‰   r“   r´   rP   rH   Úint8Úint32rˆ   Ú
as_strided)	rË   r+  r,  r-  r.  r/  Úoutput_sizesÚtransposed_stridesrð   s	            r5   Úmeta_sparse_structured_linearr7    s  € ô ˜Ÿ™Ó$€LØÐØ�{‰{˜1‹~ §¡¨1£Ò-ÐEÐ/EÓEÐ-Ø�;‰;�q‹>˜UŸZ™Z¨›^¨aÑ/Ò/Ð/Ð/Ø—{‘{ 1“~€L�Ñô ˆu�{‰{Ó˜qÒ ÐNÐ"NÓNÐ Ø˜UŸZ™Z¨›]Ð+ÐàÐØ�{‰{œeŸj™jÒ(¨Y¼%¿+¹+Ò-Eð 	
ØGó	
ÐEð �_‰_ØØ&Ð.ˆe�kŠk°Ið ó ÷ �j�Ð1Ó2ð ð
 €Mr7   Úmat1Ú	mat1_metaÚmat2c                 óê  — t        | j                  «      dk(  sJ ‚t        |j                  «      dk(  sJ ‚t        |j                  «      dk(  sJ ‚| j                  d«      |j                  d«      dz  k(  sJ ‚| j                  d«      |j                  d«      g}|�7|j                  t        j
                  k(  r|t        j                  k(  sJ d«       ‚|j                  ||€|j                  n|¬«      }|S )Nrà   r³   r   r1  r�   ©r´   r‰   r“   rP   rH   r2  r3  rˆ   )r8  r9  r:  r/  r5  rð   s         r5   Úmeta_sparse_structured_mmr=  :  sâ   € ô ˆt�z‰z‹?˜aÒÐÐÜˆy�‰Ó 1Ò$Ð$Ð$Üˆt�z‰z‹?˜aÒÐÐØ�9‰9�Q‹<˜4Ÿ9™9 Q›<¨!Ñ+Ò+Ð+Ð+Ø—I‘I˜a“L $§)¡)¨A£,Ð/€LàÐØ�z‰zœUŸZ™ZÒ'¨I¼¿¹Ò,Dð 	
ØGó	
ÐDð �^‰^ØØ%Ð-ˆd�jŠj°9ð ó €Fð
 €Mr7   r³   )ÚalphaÚbetar/  c                ó|  — t        | j                  «      dk(  sJ d«       ‚t        |j                  «      dk(  sJ ‚t        |j                  «      dk(  sJ ‚t        |j                  «      dk(  sJ ‚| j                  d«      |j                  d«      k(  sJ d«       ‚|j                  d«      |j                  d«      dz  k(  sJ ‚|j                  d«      |j                  d«      g}|�7|j                  t        j
                  k(  r|t        j                  k(  sJ d«       ‚|j                  ||€|j                  n|¬«      }|S )Nr³   zEonly input broadcasted to columns of mat1 * mat2 product is supportedrà   r   r1  r�   r<  )	rË   r8  r9  r:  r>  r?  r/  r5  rð   s	            r5   Úmeta_sparse_structured_addmmrA  S  s/  € ô ˆu�{‰{Ó˜qÒ ð ØOóÐ ô ˆt�z‰z‹?˜aÒÐÐÜˆy�‰Ó 1Ò$Ð$Ð$Üˆt�z‰z‹?˜aÒÐÐØ�:‰:�a‹=˜DŸI™I a›LÒ(ð ØOóÐ(ð �9‰9�Q‹<˜4Ÿ9™9 Q›<¨!Ñ+Ò+Ð+Ð+Ø—I‘I˜a“L $§)¡)¨A£,Ð/€LàÐØ�z‰zœUŸZ™ZÒ'¨I¼¿¹Ò,Dð 	
ØGó	
ÐDð �^‰^ØØ%Ð-ˆd�jŠj°9ð ó €Fð
 €Mr7   Úcompressed_AÚdense_Br>  Útranspose_resultÚalg_idÚsplit_kÚsplit_k_one_kernelc	                 óL  — |j                   t        j                  t        j                  t        j                  t        j
                  t        j                  hv sJ d«       ‚| j                   |j                   k(  sJ d«       ‚t        |j                  «      dk(  sJ d«       ‚| j                   t        j
                  t        j                  fv }	|	rdnd}
|	r|j                  «       rJ d«       ‚|j                  d«      }|j                  d	«      }| j                  «       d
z  |
|z  z  }|�||j                  d«      k(  sJ ‚|�I|	r@|t        j                  t        j                  t        j                  t        j                  hv sJ d«       ‚|r||fn||f}|j                  ||¬«      S )Nz;_cslt_sparse_mm only supports fp16, bf16, int8, and fp8e4m3zinputs must have the same dtyperà   z'_cslt_sparse_mm only supports 2d inputsé
   é	   z.dense input must be transposed for 8bit dtypesr   r³   é   z\out_dtype is not supported for {compressed_A.dtype} x {dense_B.dtype} -> {out_dtype} matmul!r�   )rP   rH   Úfloat32Úfloat16Úbfloat16r2  Úfloat8_e4m3fnr´   r‰   Úis_contiguousr“   r‡   r3  rˆ   )rB  rC  r-  r>  r/  rD  rE  rF  rG  Úis_8bit_input_typeÚcompression_factorÚkrù   ÚmÚoutput_shapes                  r5   Úmeta__cslt_sparse_mmrV  v  sž  € ð �=‰=Ü�‰Ü�‰Ü�‰Ü�
‰
Ü×Ñðñ ð Eð EóEð ð ×Ñ §¡Ò.ÐQÐ0QÓQÐ.Üˆw�}‰}Ó Ò"ÐMÐ$MÓMÐ"à%×+Ñ+´·
±
¼E×<OÑ<OÐ/PÐPÐÙ1™°qÐáØ×(Ñ(Ô*ð 	
Ø<ó	
Ð*ð 	�‰�Q‹€AØ�‰�Q‹€AØ	×	Ñ	Ó	 Ñ	"Ð(:¸QÑ(>Ñ?€AØÐØ�D—I‘I˜a“LÒ Ð Ð àÐÙ! iÜ�M‰MÜ�N‰NÜ�K‰KÜ×Ñð	4
ñ '
ð 	
ð kó	
ð 
ñ .�A�q‘6°A°q°6€LØ×Ñ˜\°ÐÓ;Ð;r7   T)Úinclude_selfrƒ   ÚsourceÚreducerW  c                óL   — t        j                  | t         j                  ¬«      S r«   ©rH   rŸ   r    ©rŠ   rw   rƒ   rX  rY  rW  s         r5   Úmeta_index_reducer]  §  s   € ô ×Ñ˜D´×0GÑ0GÔHÐHr7   c                ó   — | S r2   r;   r\  s         r5   Úmeta_index_reduce_r_  ´  s	   € ð €Kr7   c                 ó¢   — t        | j                  «       «      }| j                  «       dkD  r|j                  «       ||<   | j	                  |«      S ©Nr   )rµ   r“   rw   r‡   rˆ   )rŠ   rw   rƒ   Úresult_sizes       r5   Úmeta_index_selectrc  Â  s@   € ô �t—y‘y“{Ó#€KØ‡x�xƒz�A‚~Ø Ÿ;™;›=ˆ�CÑØ�>‰>˜+Ó&Ð&r7   )Úlengthsr¤   ÚoffsetsÚaxisÚunsafeÚinitialÚdatard  re  rf  rg  c                óÄ   ‡ ‡— |�t        d«      ‚ˆˆ fd„}|� ||j                  «      S |�+|j                  d d |j                  d   dz
  fz   }	 ||	«      S t        d«      ‚)Nz?segment_reduce(): indices based reduction is not supported yet.c                 óŒ   •— t        j                  | ‰j                  ‰dz   d  z   ‰j                  dt         j                  ¬«      S )Nr³   rr   ©rP   rt   rœ   )rH   r|   r‰   rP   r    )Úlengths_shaperf  ri  s    €€r5   Úsegment_reduce_lengths_tensorz:meta_segment_reduce.<locals>.segment_reduce_lengths_tensorÜ  s>   ø€ Ü�{‰{Ø˜DŸJ™J t¨a¡x zÐ2Ñ2Ø—*‘*ØÜ×1Ñ1ô	
ð 	
r7   rŒ   r³   z<segment_reduce(): Either lengths or offsets must be defined.)ÚNotImplementedErrorr‰   r  )
ri  rY  rd  r¤   re  rf  rg  rh  rn  rm  s
   `    `    r5   Úmeta_segment_reducerp  Ë  s|   ù€ ð ÐÜ!ØMó
ð 	
õ
ð ÐÙ,¨W¯]©]Ó;Ð;ð ÐàŸ™ c rÐ*¨g¯m©m¸BÑ.?À!Ñ.CÐ-EÑEˆÙ,¨]Ó;Ð;Ü
ÐUÓ
VÐVr7   c                 ó$   — | j                  d«      S ©Nr;   ©rˆ   r¡   s    r5   Úmeta_maxrt  ï  ó   € ð �>‰>˜"ÓÐr7   c                 óÂ   — t        j                  | j                  |f«      }t        | ||«      }| j	                  |«      | j	                  |t
        j                  ¬«      fS ©Nr�   ©r@   Úreduction_dimsr‰   Ú_compute_reduction_shaperˆ   rH   r…   ©rŠ   rw   ÚkeepdimrU  s       r5   Úmeta_max_dimr}  õ  óR   € ä
×
Ñ
˜tŸz™z¨C¨6Ó
2€CÜ+¨D°#°wÓ?€Là�‰�|Ó$Ø�‰�|¬5¯:©:ˆÓ6ðð r7   c                 ó$   — | j                  d«      S rr  rs  r¡   s    r5   Úmeta_minr€  ÿ  ru  r7   c                 óÂ   — t        j                  | j                  |f«      }t        | ||«      }| j	                  |«      | j	                  |t
        j                  ¬«      fS rw  rx  r{  s       r5   Úmeta_min_dimr‚    r~  r7   c                 ó¸   — | j                  «       rt        | j                  «      }nt        | t        j
                  ¬«      \  }}t        j                  | |¬«      S ©N©r?   r�   )rÛ   r   rP   r   r   ÚINT_TO_FLOATrH   rŸ   )rŠ   rD   rC   s      r5   Ú
meta_angler‡    sI   € à‡�ÔÜ/°·
±
Ó;‰ä,ØÜ ?× LÑ Lô
‰ˆˆ<ô ×Ñ˜D¨Ô5Ð5r7   c                 ó¨   — t        j                  || j                  «       | j                  «       |j	                  t        j
                  | «      «      S r2   )rH   Ú_resize_output_r“   rt   Úcopy_Úangle)rŠ   r¿   s     r5   Úmeta_angle_outrŒ    s6   € ä	×Ñ˜#˜tŸy™y›{¨D¯K©KÔ8Ø�9‰9”U—[‘[ Ó&Ó'Ð'r7   c                  ó   — y r2   r;   )Úvals    r5   Úassert_asyncr�  !  ó   € à
r7   c                  ó   — y r2   r;   )rŽ  Ú
assert_msgs     r5   Úassert_async_metar“  &  r�  r7   c                  ó   — y r2   r;   )Úss    r5   Ú
print_metar–  +  r�  r7   ©rP   rs   rt   ru   rœ   c                 ó0   — t        j                  dd¬«      S )Nr   rr   ©rt   rþ   r—  s        r5   Úmake_dep_tokenrš  0  s   € ô �;‰;�q Ô(Ð(r7   c                 óh   — ddl m} t        | t        t        f«      rt        d«      ‚ || ||¬«       y )Nr   )Úconstrain_rangeú'Constraining SymFloat or Symbool is nyi©rê   Úmax)r  rœ  rb   r   r   Ú
ValueError)r“   rê   rŸ  rœ  s       r5   Úsym_constrain_ranger¡  <  s/   € õ Fä�$œ¤7Ð+Ô,ÜÐBÓCÐCÙ�D˜c sÖ+r7   c                 ó6   — t         j                  | ||¬«       |S ©Nrž  )r*   r¡  ©r“   rê   rŸ  Ú	dep_tokens       r5   Úfunctional_sym_constrain_ranger¦  F  s   € ä×Ñ˜T s°ÐÔ4ØÐr7   c                 ó(  — ddl m} |€|€t        j                  | «       y t	        | t
        t        f«      rt        d«      ‚t        | «      t        u r5|�t        j                  | |k\  «       |�t        j                  | |k  «       y  || ||¬«       y )Nr   )Ú_constrain_range_for_sizer�  rž  )r  r¨  rH   Ú_check_is_sizerb   r   r   r   rl   rÖ   rY   )r“   rê   rŸ  r¨  s       r5   Úsym_constrain_range_for_sizerª  L  s‚   € õ Pà
€{�s�{Ü×Ñ˜TÔ"Øä�$œ¤7Ð+Ô,ÜÐBÓCÐCÜˆDƒz”SÑØˆ?Ü�L‰L˜ ™Ô%Øˆ?Ü�L‰L˜ ™Ô%ØÙ˜d¨°Ö5r7   c                 ó6   — t         j                  | ||¬«       |S r£  )r*   rª  r¤  s       r5   Ú'functional_sym_constrain_range_for_sizer¬  `  s   € ä×%Ñ% d°¸Ð%Ô=ØÐr7   c                 ó   — |S r2   r;   )rŽ  r’  r¥  s      r5   Úfunctional_assert_async_metar®  f  s   € àÐr7   Úf_namec                 óà   — | j                  «       dk\  s
J |› d�«       ‚| j                  d«      | j                  d«      k(  s.J |› d| j                  d«      › d| j                  d«      › d�«       ‚y )Nrà   z3: The input tensor must have at least 2 dimensions.rŒ   éþÿÿÿz5: A must be batches of square matrices, but they are ú by ú	 matrices)rw   r“   )rŠ   r¯  s     r5   r�   r�   l  s}   € Ø�8‰8‹:˜Š?ð Øˆ(ÐEÐFóˆ?ð �9‰9�R‹=˜DŸI™I b›MÒ)ð Øˆ(ÐGÈÏ	É	ÐRTËÀÐVZÐ[_×[dÑ[dÐegÓ[hÐZiÐirÐsóÑ)r7   ÚAÚnamec                 óº  ‡ ‡‡— t        j                  ‰ j                  ‰j                  k(  ˆˆ fd„«       t        j                  ‰ j                  ‰j                  k(  ˆˆ fd„«       t        j                  ‰j	                  d«      ‰j	                  d«      k(  ˆfd„«       t        j                  ‰j	                  d«      ‰ j	                  d«      k(  ˆˆˆ fd„«       y )Nc                  ó>   •— d‰j                   › d‰ j                   › d�S )Nz:Expected b and A to be on the same device, but found b on z
 and A on ú	 instead.r™  ©r´  rŠ   s   €€r5   rW   z(linearSolveCheckInputs.<locals>.<lambda>{  s%   ø€ ØHØ�{‰{ˆm˜: a§h¡h Z¨yð:ð r7   c                  ó>   •— d‰j                   › d‰ j                   › d�S )Nz=Expected b and A to have the same dtype, but found b of type z and A of type r¸  r�   r¹  s   €€r5   rW   z(linearSolveCheckInputs.<locals>.<lambda>ƒ  s%   ø€ ØKØ�z‰zˆl˜/¨!¯'©'¨°)ð=ð r7   rŒ   r±  c                  óR   •— d‰ j                  d«      › d‰ j                  d«      › d�S )Nz3A must be batches of square matrices, but they are r±  r²  rŒ   r³  r’   ©r´  s   €r5   rW   z(linearSolveCheckInputs.<locals>.<lambda>‹  s0   ø€ ðØŸF™F 2›J˜< t¨A¯F©F°2«J¨<°yðBð r7   c                  óž   •— d‰› d‰ j                  d«      › d‰ j                  d«      › d‰j                  d«      › d‰j                  d«      › �
S )NzIncompatible matrix sizes for z: each A matrix is rŒ   r²  z but each b matrix is r±  r’   )r´  rµ  rŠ   s   €€€r5   rW   z(linearSolveCheckInputs.<locals>.<lambda>“  sR   ø€ Ø,¨T¨Fð 3ØŸ™ ›˜ D¨¯©°«¨Ø$ T§Y¡Y¨r£] O°4¸¿	¹	À"»°ðHð r7   )rH   rY   rt   rP   r“   )rŠ   r´  rµ  s   ```r5   ÚlinearSolveCheckInputsr¾  x  s�   ú€ Ü	‡L�LØ�‰�q—x‘xÑô	
ôô 
‡L�LØ�
‰
�a—g‘gÑô	
ôô 
‡L�LØ	�‰ˆr‹
�a—f‘f˜R“jÑ ó	
ôô 
‡L�LØ	�‰ˆr‹
�d—i‘i “mÑ#õ	
õr7   ÚtÚallow_low_precision_dtypesc                 óJ  ‡‡— | j                   Št        j                  | j                  «       xs | j	                  «       ˆˆfd„«       |sYt        j                  ‰t        j
                  t        j                  t        j                  t        j                  fv ˆˆfd„«       y y )Nc                  ó   •— ‰› d‰ › �S )Nz<: Expected a floating point or complex tensor as input. Got r;   ©rP   r¯  s   €€r5   rW   z(checkFloatingOrComplex.<locals>.<lambda>¤  s   ø€ �6�(ÐVÐW\ÐV]Ð^€ r7   c                  ó   •— ‰› d‰ › �S )Nz*: Low precision dtypes not supported. Got r;   rÃ  s   €€r5   rW   z(checkFloatingOrComplex.<locals>.<lambda>©  s   ø€ �v�hÐHÈÈÐP€ r7   )	rP   rH   rY   rè   rÛ   rL   rN   rK   rM   )r¿  r¯  rÀ  rP   s    ` @r5   rž   rž   œ  sn   ù€ ð
 �G‰G€EÜ	‡L�LØ	×ÑÓÒ/ §¡£Ü^ôñ &Ü�‰Ø”e—k‘k¤5§<¡<´·±¼u¿}¹}ÐMÐMÜPõ	
ð &r7   Úarg_namec                 ó^   ‡‡— t        j                  | j                  «       dk\  ˆˆfd„«       y )Nrà   c                  ó   •— ‰› d‰ › d�S )Nz: The input tensor z! must have at least 2 dimensions.r;   )rÅ  r¯  s   €€r5   rW   zcheckIsMatrix.<locals>.<lambda>±  s   ø€ �6�(Ð-¨h¨ZÐ7XÐY€ r7   )rH   rY   rw   )r´  r¯  rÅ  s    ``r5   ÚcheckIsMatrixrÈ  ®  s   ù€ Ü	‡L�LØ	�‰‹�1‰ÜYõr7   ÚBrÇ   c                 ó   ‡ ‡‡‡— t        ‰ ‰«       t        ‰‰«       t        j                  ‰r#‰ j	                  d«      ‰j	                  d«      k(  n"‰ j	                  d«      ‰j	                  d«      k(  ˆ ˆˆˆfd„«       y )Nr±  rŒ   c                  ó¬   •— ‰› d‰rdnd› d‰ j                  d«      › d‰ j                  d«      › d‰j                  d«      › d‰j                  d«      › d	�S )
Nz2: Incompatible shapes of A and B for the equation zAX = BzXA = Bz (r±  rE   rŒ   r‘   rk   r’   )r´  rÉ  r¯  rÇ   s   €€€€r5   rW   z#checkInputsSolver.<locals>.<lambda>º  s[   ø€ ØˆhÐHÙ‰x XÐ.Ø�—‘˜“�˜A˜aŸf™f R›j˜\¨¨q¯v©v°b«z¨l¸!¸A¿F¹FÀ2»J¸<ÀqðJð r7   )r�   rÈ  rH   rY   r“   )r´  rÉ  rÇ   r¯  s   ````r5   ÚcheckInputsSolverrÌ  µ  sY   û€ Ü�a˜Ô Ü�!�VÔÜ	‡L�LÙ$(ˆ�‰ˆr‹
�a—f‘f˜R“jÒ ¨a¯f©f°R«j¸A¿F¹FÀ2»JÑ.Fö	
õr7   ÚresultÚfn_nameÚresult_namec                 ór   ‡ ‡‡‡— t        j                  ‰j                  ‰j                  k(  ˆ ˆˆˆfd„«       y )Nc            	      óL   •— ‰ › d‰› d‰› d‰j                   › d‰j                   › �	S )Nz: Expected z5 and input tensors to be on the same device, but got z on z and input on r™  )rÎ  rË   rÍ  rÏ  s   €€€€r5   rW   z!checkSameDevice.<locals>.<lambda>Ê  s5   ø€ Øˆi�{ ; -Ð/dØˆm˜4 §¡˜¨n¸U¿\¹\¸NðLð r7   )rH   rY   rt   )rÎ  rÍ  rË   rÏ  s   ````r5   ÚcheckSameDevicerÒ  Â  s&   û€ ô 
‡L�LØ�‰˜Ÿ™Ñ%ö	
õr7   ÚUPLOc                 óŒ   ‡ — ‰ j                  «       }t        j                  t        ‰ «      dk(  xr |dk(  xs |dk(  ˆ fd„«       y )Nr³   ÚUÚLc                  ó   •— d‰ › �S )Nz1Expected UPLO argument to be 'L' or 'U', but got r;   )rÓ  s   €r5   rW   zcheckUplo.<locals>.<lambda>Õ  s   ø€ ÐCÀDÀ6ÐJ€ r7   )ÚupperrH   rY   r´   )rÓ  ÚUPLO_uppercases   ` r5   Ú	checkUplorÚ  Ñ  s<   ø€ Ø—Z‘Z“\€NÜ	‡L�LÜˆD‹	�Q‰ÒK˜N¨cÑ1ÒJ°^ÀsÑ5JÛJõr7   ÚeigenvaluesÚeigenvectorsrÖ  Ú	compute_vc                 óT  — t        | d«       t        |«       t        | j                  «      }|r/| j	                  |«      }|j                  |t        |d¬«      «       n| j	                  dg«      }|j                  «        | j	                  |t        | j                  «      ¬«      }||fS )Nzlinalg.eighF©Ú	row_majorr   r�   )
r�   rÚ  rµ   r‰   rˆ   r½   r   ÚpoprR   rP   )r´  rÓ  rÝ  r‰   ÚvecsÚvalss         r5   Úmeta__linalg_eighrä  Ù  s‰   € ô �a˜Ô'Üˆd„Oä�—‘‹M€EÙØ�{‰{˜5Ó!ˆØ×Ñ˜Ô ;¸EÈUÔ SÕTà�{‰{˜A˜3Óˆà	‡I�I„KØ�;‰;�u¤O°A·G±GÓ$<ˆ;Ó=€Dà�ˆ:Ðr7   c                 óî   — t        | d«       t        j                  | j                  «      r| j                  nt        j                  | j                  «      }| j                  | j                  d d |¬«      S )Nzlinalg.eigvalsrŒ   r�   ©r�   r@   rz   rP   r   rˆ   r‰   )rË   Úcomplex_dtypes     r5   Úmeta__linalg_eigvalsrè  ì  sc   € ô �eÐ-Ô.ô ×!Ñ! %§+¡+Ô.ð 	�Šä×.Ñ.¨u¯{©{Ó;ð ð
 �?‰?˜5Ÿ;™; s¨Ð+°=ˆ?ÓAÐAr7   c                 ó0  — t        | d«       t        j                  | j                  «      r| j                  nt        j                  | j                  «      }| j                  | j                  d d |¬«      }| j                  | j                  |¬«      }||fS )Nz
linalg.eigrŒ   r�   ræ  )rË   rç  r£   Úvectorss       r5   Úmeta_linalg_eigrë  ø  s�   € ô �e˜\Ô*ô ×!Ñ! %§+¡+Ô.ð 	�Šä×.Ñ.¨u¯{©{Ó;ð ð
 �_‰_˜UŸ[™[¨¨"Ð-°]ˆ_ÓC€FØ�o‰o˜eŸk™k°ˆoÓ?€GØ�7ˆ?Ðr7   r  c                 óv   — | j                   j                  t        j                  ¬«      j	                  dd«      S )Nr›   r±  rŒ   )ÚmTrÜ   rH   r    Ú	transpose)r  s    r5   ÚcloneBatchedColumnMajorrï    s*   € Ø�6‰6�<‰<¤e×&=Ñ&=ˆ<Ó>×HÑHÈÈRÓPÐPr7   rØ  c                 ó   — t        | «      S r2   )rï  )rŠ   r´  rØ  s      r5   Ú_cholesky_solve_helperrñ  
  s   € ô # 4Ó(Ð(r7   c                 óØ   ‡ ‡— t        j                  ‰ j                  dk\  ˆ fd„«       t        j                  ‰j                  dk\  ˆfd„«       t        ‰ ‰d«      \  }}t	        |||«      S )Nrà   c                  ó$   •— d‰ j                   › d�S )Nz-b should have at least 2 dimensions, but has ú dimensions instead©r•   r¡   s   €r5   rW   z cholesky_solve.<locals>.<lambda>  s   ø€ Ð?ÀÇ	Á	¸{ÐJ]Ð^€ r7   c                  ó$   •— d‰ j                   › d�S )Nz-u should have at least 2 dimensions, but has rô  rõ  r¼  s   €r5   rW   z cholesky_solve.<locals>.<lambda>  s   ø€ Ð?ÀÇÁ¸xÐGZÐ[€ r7   Úcholesky_solve)rH   rY   r•   Ú!_linalg_broadcast_batch_dims_namerñ  )rŠ   r´  rØ  Úself_broadcastedÚA_broadcasteds   ``   r5   r÷  r÷    sh   ù€ ô 
‡L�LØ�	‰	�Q‰Û^ôô 
‡L�LØ	�‰�!‰Û[ôô 'HØˆaÐ!ó'Ñ#Ð�mô "Ð"2°MÀ5ÓIÐIr7   c                 ó    — | j                  «       dk(  r%t        j                  | t        j                  ¬«      S t	        | d«       t        | «      S )Nr   r›   Úcholesky)r‡   rH   rŸ   Úlegacy_contiguous_formatr�   rï  ©rŠ   rØ  s     r5   rü  rü  !  s@   € ð ‡z�zƒ|�qÒÜ×Ñ ´E×4RÑ4RÔSÐSÜ�d˜JÔ'Ü" 4Ó(Ð(r7   c                 ó0   — t        | d«       t        | «      S )NÚcholesky_inverse)r�   rï  rþ  s     r5   r   r   *  s   € ô �dÐ.Ô/Ü" 4Ó(Ð(r7   Úcheck_errorsc                 ó  — t        | d«       t        | d«       | j                  }t        |«      }t	        |d«      }| j                  |«      }|j                  ||«       | j                  |d|dz
   t        j                  ¬«      }||fS )Nzlinalg.choleskyFr   rà   r�   )	r�   rž   r‰   r´   r   rˆ   r½   rH   r3  )r´  rØ  r  ÚA_shaper•   Ú	L_stridesrÖ  Úinfoss           r5   Úlinalg_cholesky_exr  2  s€   € ä�aÐ*Ô+Ü˜1Ð/Ô0à�g‰g€GÜˆw‹<€Dô ,¨G°UÓ;€IØ	�‰�GÓ€AØ‡M�M�'˜9Ô%ð �K‰K˜  D¨1¡HÐ-´U·[±[ˆKÓA€EØˆeˆ8€Or7   Útauc                 ó@  ‡ ‡‡— t        j                  ‰ j                  dk\  d„ «       t        j                  ‰ j                  d«      ‰ j                  d«      k\  d„ «       t        j                  ‰ j                  d«      ‰j                  d«      k\  d„ «       t        j                  ‰ j                  ‰j                  z
  dk(  ˆ ˆfd„«       ‰ j                  dkD  r:‰ j                  d d }‰j                  d d Št        j                  ‰|k(  ˆfd	„«       t        j                  ‰j
                  ‰ j
                  k(  ˆ ˆfd
„«       t        d‰‰ d«       t        j                  ‰ j                  t        ‰ j                  d¬«      ‰ j
                  ‰ j                  ¬«      S )Nrà   c                   ó   — y)NzHtorch.linalg.householder_product: input must have at least 2 dimensions.r;   r;   r7   r5   rW   z,linalg_householder_product.<locals>.<lambda>K  r_   r7   r±  rŒ   c                   ó   — y)Nzbtorch.linalg.householder_product: input.shape[-2] must be greater than or equal to input.shape[-1]r;   r;   r7   r5   rW   z,linalg_householder_product.<locals>.<lambda>O  r_   r7   c                   ó   — y)Nz`torch.linalg.householder_product: input.shape[-1] must be greater than or equal to tau.shape[-1]r;   r;   r7   r5   rW   z,linalg_householder_product.<locals>.<lambda>S  r_   r7   r³   c                  ó<   •— d‰j                   › d‰ j                   › �S )Nzptorch.linalg.householder_product: Expected tau to have one dimension less than input, but got tau.ndim equal to ú and input.ndim is equal to rõ  ©rË   r  s   €€r5   rW   z,linalg_householder_product.<locals>.<lambda>X  ó'   ø€ ð)Ø),¯©¨
Ð2NÈuÏzÉzÈlð\ð r7   c                  ó   •— d‰ › �S )Nzltorch.linalg.householder_product: Expected batch dimensions of tau to be equal to input.shape[:-2], but got r;   ©Úactual_batch_tau_shapes   €r5   rW   z,linalg_householder_product.<locals>.<lambda>b  ó   ø€ ð6Ø6LÐ5MðOð r7   c                  ó<   •— d‰j                   › d‰ j                   › �S )Nz,torch.linalg.householder_product: tau dtype z does not match input dtype r�   r  s   €€r5   rW   z,linalg_householder_product.<locals>.<lambda>j  s#   ø€ Ø:¸3¿9¹9¸+Ø*¨5¯;©;¨-ð9ð r7   z torch.linalg.householder_productr  Frß  ©r“   r¸   rP   rt   )
rH   rY   r•   r“   r‰   rP   rÒ  Úempty_stridedr   rt   )rË   r  Úexpected_batch_tau_shaper  s   `` @r5   Úlinalg_householder_productr  D  sK  ú€ ô
 
‡L�LØ�
‰
�a‰ÙZôô 
‡L�LØ�
‰
�2‹˜%Ÿ*™* R›.Ñ(Ùtôô 
‡L�LØ�
‰
�2‹˜#Ÿ(™( 2›,Ñ&Ùrôô
 
‡L�LØ�
‰
�S—X‘XÑ Ñ"ô	
ôð ‡z�z�A‚~Ø#(§;¡;¨s°Ð#3Ð Ø!$§¡¨3¨B ÐÜ�‰Ø"Ð&>Ñ>óô	
ô 
‡L�LØ�	‰	�U—[‘[Ñ ô	
ôô Ð6¸¸UÀEÔJä×ÑØ�[‰[Ü*¨5¯;©;À%ÔHØ�k‰kØ�|‰|ô	ð r7   c                 ó2  — t        | d«       t        | dd¬«       | j                  | j                  «      }|j	                  | j                  t        | j                  d¬«      «       | j                  | j                  d d t        j                  ¬«      }||fS )Nzlinalg.inv_exF)rÀ  rß  r±  r�   ©r�   rž   rˆ   r‰   r½   r   rH   r3  )r´  r  rÖ  r  s       r5   Úlinalg_inv_ex_metar  z  sq   € ä�a˜Ô)Ü˜1˜oÈ%ÕPà	�‰�A—G‘GÓ€AØ‡M�M�!—'‘'Ô6°q·w±wÈ%ÔPÔQà�K‰K˜Ÿ™  ˜¬E¯K©KˆKÓ8€EØˆeˆ8€Or7   ÚLDÚpivotsÚinfo)Ú	hermitianr  r  c                óŒ  — t        | d«       t        | d«       t        j                  | j                  t        | j                  d¬«      | j                  | j                  ¬«      }| j                  | j                  d d t        j                  ¬«      }| j                  | j                  d d t        j                  ¬«      }|||fS )Nztorch.linalg.ldl_factor_exFrß  r  rŒ   r�   r±  )
r�   rž   rH   r  r‰   r   rP   rt   rˆ   rÖ   )rŠ   r  r  r  r  r  s         r5   Úlinalg_ldl_factor_ex_metar!  †  sœ   € ô �dÐ8Ô9Ü˜4Ð!=Ô>Ü	×	Ñ	Ø�Z‰ZÜ*¨4¯:©:ÀÔGØ�j‰jØ�{‰{ô	
€Bð �^‰^˜DŸJ™J s¨˜O´5·9±9ˆ^Ó=€FØ�>‰>˜$Ÿ*™* S b˜/´·±ˆ>Ó;€DØˆv�tÐÐr7   )r  c                ód  ‡ ‡‡— t        ‰ d«       t        ‰ d«       t        ‰‰ d«       t        j                  ‰j
                  dk\  ˆfd„«       ‰ j                  d d }t        j                  |‰j                  k(  ˆfd„«       t        j                  t        j                  ‰j                  «      ˆfd„«       t        j                  ‰ j                  ‰j                  k(  ˆˆ fd„«       t        ‰‰ «      \  }}t        j                  |t        |d¬	«      ‰j                  ‰j                  ¬
«      S )Nztorch.linalg.ldl_solverà   c                  ó$   •— d‰ j                   › d�S )NzMtorch.linalg.ldl_solve: Expected B to have at least 2 dimensions, but it has rô  rõ  )rÉ  s   €r5   rW   z'linalg_ldl_solve_meta.<locals>.<lambda>©  ó   ø€ ðØŸ&™&˜Ð!4ð6ð r7   rŒ   c                  ó$   •— d‰ j                   › d�S )Nzjtorch.linalg.ldl_solve: Expected LD.shape[:-1] and pivots.shape to be the same, but got pivots with shape ú instead©r‰   ©r  s   €r5   rW   z'linalg_ldl_solve_meta.<locals>.<lambda>±  ó   ø€ ð)Ø)/¯©¨°hð@ð r7   c                  ó"   •— d‰ j                   › �S )Nz<torch.linalg.ldl_solve: Expected pivots to be integers. Got r�   r(  s   €r5   rW   z'linalg_ldl_solve_meta.<locals>.<lambda>¸  s   ø€ ÐNÈvÏ|É|ÈnÐ]€ r7   c                  ó<   •— d‰j                   › d‰ j                   › �S )Nz!torch.linalg.ldl_solve: LD dtype z does not match b dtype r�   )rÉ  r  s   €€r5   rW   z'linalg_ldl_solve_meta.<locals>.<lambda>¼  s"   ø€ Ð3°B·H±H°:Ð=UÐVW×V]ÑV]ÐU^Ð_€ r7   Frß  r  )r�   rž   r¾  rH   rY   r•   r‰   r@   Úis_integer_dtyperP   Ú_linalg_broadcast_batch_dimsr  r   rt   )r  r  rÉ  r  Úexpected_pivots_shapeÚB_broadcast_sizerC   s   ```    r5   Úlinalg_ldl_solve_metar0  ›  sú   ú€ ô �bÐ2Ô3Ü˜2Ð7Ô8Ü˜1˜bÐ":Ô;Ü	‡L�LØ	�‰�!‰ó	
ôð ŸH™H S b˜MÐÜ	‡L�LØ §¡Ñ-ó	
ôô 
‡L�LÜ×Ñ˜vŸ|™|Ó,Û]ôô 
‡L�LØ
�‰�A—G‘GÑÜ_ôô 7°q¸"Ó=ÑÐ�aÜ×ÑØÜ*Ð+;ÀuÔMØ�g‰gØ�x‰xô	ð r7   ÚPrÕ  )Úpivotr2  c                óh  ‡ — t        j                  ‰ j                  dk\  ˆ fd„«       t        ‰ j                  «      }|d   }|d   }t        ||«      }||d<   |r‰ j                  |«      }n‰ j                  dg«      }||d<   ‰ j                  |«      }||d<   ||d<   ‰ j                  |«      }|||fS )Nrà   c                  ó$   •— d‰ j                   › d�S )Nz@linalg.lu: Expected tensor with 2 or more dimensions. Got size: r&  r'  r¼  s   €r5   rW   z linalg_lu_meta.<locals>.<lambda>Ì  s   ø€ ÐRÐST×SZÑSZÐR[Ð[cÐd€ r7   r±  rŒ   r   )rH   rY   r•   rµ   r‰   rê   rˆ   )	r´  r2  ÚsizesrT  rù   rS  r1  rÖ  rÕ  s	   `        r5   Úlinalg_lu_metar6  Ç  s·   ø€ ô 
‡L�LØ	�‰�!‰Ûdôô
 �—‘‹M€EØˆb‰	€AØˆb‰	€AÜˆAˆq‹	€Aà€Eˆ"�IÙØ�K‰K˜Ó‰à�K‰K˜˜Óˆà€Eˆ"�IØ	�‰�EÓ€Aà€Eˆ"�IØ€Eˆ"�IØ	�‰�EÓ€AØˆa�ˆ7€Nr7   ÚLU)r2  r  c                óê  ‡ — t        j                  ‰ j                  dk\  ˆ fd„«       t        ‰ j                  «      }|d   }|d   }t        j
                  |t        |d¬«      ‰ j                  ‰ j                  ¬«      }|j                  «        t        ||«      |d<   ‰ j                  |t         j                  ¬«      }|j                  «        ‰ j                  |t         j                  ¬«      }|||fS )	Nrà   c                  ó$   •— d‰ j                   › d�S )NzFtorch.lu_factor: Expected tensor with 2 or more dimensions. Got size: r&  r'  r¼  s   €r5   rW   z*linalg_lu_factor_ex_meta.<locals>.<lambda>í  s   ø€ ÐXÐYZ×Y`ÑY`ÐXaÐaiÐj€ r7   r±  rŒ   Frß  r  r�   )rH   rY   r•   rµ   r‰   r  r   rP   rt   rá  rê   rˆ   rÖ   )	r´  r2  r  r5  rT  rù   r7  r  r  s	   `        r5   Úlinalg_lu_factor_ex_metar:  ã  sÉ   ø€ ô 
‡L�LØ	�‰�!‰Ûjôô
 �—‘‹M€EØˆb‰	€AØˆb‰	€Aä	×	Ñ	ØÜ*¨5¸EÔBØ�g‰gØ�x‰xô	
€Bð 
‡I�I„KÜ�A�q“	€Eˆ"�IØ�[‰[˜¤e§i¡iˆ[Ó0€Fð 
‡I�I„KØ�;‰;�u¤E§I¡Iˆ;Ó.€Dàˆv�tÐÐr7   )rÇ   Úadjointr;  c                óî  ‡ ‡‡— t        ‰ d«       t        j                  ‰ j                  ‰j                  k(  ˆˆ fd„«       t        j                  ‰j                  t        j                  k(  d„ «       t        ‰ d«       t        ‰ ‰|d«       t        j                  ‰ j                  d«      ‰j                  d«      k(  d„ «       t        j                  ‰ j                  d d ‰j                  k(  ˆfd„«       t        ‰‰ «      \  }}t        j                  |t        || ¬«      ‰j                  ‰j                  ¬	«      }|j                  «       d
k7  r"|s |j                  «       r|j                  «       }|S )Nztorch.linalg.lu_solvec                  ó>   •— d‰j                   › d‰ j                   › d�S )NzPlinalg.lu_solve: Expected LU and B to have the same dtype, but found LU of type ú and B of type r&  r�   )rÉ  r7  s   €€r5   rW   z&linalg_lu_solve_meta.<locals>.<lambda>  s(   ø€ ð$Ø$&§H¡H :¨_¸Q¿W¹W¸IÀXðOð r7   c                   ó   — y)NzElinalg.lu_solve: pivots should be a Tensor of scalar type torch.int32r;   r;   r7   r5   rW   z&linalg_lu_solve_meta.<locals>.<lambda>  r_   r7   zlinalg.lu_solverŒ   c                   ó   — y)NzYlinalg.lu_solve: Number of pivots per batch should be same as the dimension of the matrixr;   r;   r7   r5   rW   z&linalg_lu_solve_meta.<locals>.<lambda>$  r_   r7   c                  ó$   •— d‰ j                   › d�S )Nzclinalg.lu_solve: Expected LU.shape[:-1] and pivots.shape to be the same, but got pivots with shape r&  r'  r(  s   €r5   rW   z&linalg_lu_solve_meta.<locals>.<lambda>*  r)  r7   rß  r  r   )rž   rH   rY   rP   rÖ   r�   rÌ  r“   r‰   r-  r  r   rt   r‡   rÛ   Úconj)r7  r  rÉ  rÇ   r;  r/  rC   rÍ  s   ```     r5   Úlinalg_lu_solve_metarC    s.  ú€ ô ˜2Ð6Ô7Ü	‡L�LØ
�‰�A—G‘GÑô	
ôô 
‡L�LØ�‰œŸ	™	Ñ!ÙWôô �bÐ1Ô2Ü�b˜!˜TÐ#4Ô5Ü	‡L�LØ
�‰�‹�v—{‘{ 2“Ñ&Ùkôô 
‡L�LØ
�‰��"ˆ˜Ÿ™Ñ%ó	
ôô 7°q¸"Ó=ÑÐ�aä× Ñ ØÜ*Ð+;È4ÀxÔPØ�g‰gØ�x‰xô	€Fð ‡|�|ƒ~˜Ò¡4Ø×ÑÔØ—[‘[“]ˆFà€Mr7   Úunpack_dataÚunpack_pivotsc                 ó  ‡ — t        j                  ‰ j                  dk\  ˆ fd„«       |r2t        j                  |j                  t         j                  k(  d„ «       t        ‰ j                  «      }|d   }|d   }t        ||«      }||d<   |r‰ j                  |«      }n‰ j                  dg«      }|r2||d<   ‰ j                  |«      }	||d<   ||d<   ‰ j                  |«      }
n$‰ j                  dg«      }	‰ j                  dg«      }
||	|
fS )Nrà   c                  ó$   •— d‰ j                   › d�S )NzFtorch.lu_unpack: Expected tensor with 2 or more dimensions. Got size: r&  r'  )r7  s   €r5   rW   z lu_unpack_meta.<locals>.<lambda>J  s   ø€ ÐXÐY[×YaÑYaÐXbÐbjÐk€ r7   c                   ó   — 	 y)Nz´torch.lu_unpack: LU_pivots is expected to be a contiguous tensor of torch.int32 dtype.
Note: this function is intended to be used with the output produced by torch.linalg.lu_factorr;   r;   r7   r5   rW   z lu_unpack_meta.<locals>.<lambda>O  s   € ðpð r7   r±  rŒ   r   )	rH   rY   r•   rP   r3  rµ   r‰   rê   rˆ   )r7  r  rD  rE  r5  rT  rù   rS  r1  rÖ  rÕ  s   `          r5   Úlu_unpack_metarI  @  s   ø€ ô 
‡L�LØ
�‰�1‰Ûkôñ Ü�‰Ø�L‰LœEŸK™KÑ'ñô	
ô �—‘‹N€EØˆb‰	€AØˆb‰	€AÜˆAˆq‹	€AØ€Eˆ"�IÙØ�L‰L˜Ó‰à�L‰L˜!˜ÓˆÙØˆˆb‰	Ø�L‰L˜ÓˆØˆˆb‰	Øˆˆb‰	Ø�L‰L˜Ó‰à�L‰L˜!˜ÓˆØ�L‰L˜!˜ÓˆØˆa�ˆ7€Nr7   Úmodec                 óŒ   ‡ — ‰ dk(  rd}d}||fS ‰ dk(  rd}d}||fS ‰ dk(  rd}d}||fS t        j                  dˆ fd„«       fS )NÚreducedTÚcompleteFÚrc                  ó   •— d‰ › d�S )Nzqr received unrecognized mode 'z=' but expected one of 'reduced' (default), 'r', or 'complete'r;   )rJ  s   €r5   rW   z _parse_qr_mode.<locals>.<lambda>w  s   ø€ Ø1°$°ð 8Nð Oð r7   ©rH   rY   )rJ  Ú	compute_qrL  s   `  r5   Ú_parse_qr_moderR  j  s†   ø€ ØˆyÒØˆ	Øˆð �gÐÐð 
�Ò	Øˆ	Øˆð �gÐÐð 
�ŠØˆ	Øˆð �gÐÐô 	�‰Øóô	
ð �gÐÐr7   ÚQÚRc                 ó  — t        | d«       t        | d«       t        |«      \  }}| j                  d   }| j                  d   }t	        ||«      }|rMt        | j                  «      }|r|n||d<   | j                  |«      }|j                  |t        |d¬«      «       n| j                  dg«      }t        | j                  «      }	|s|s|n||	d<   | j                  |	«      }
|
j                  |	t        |	d¬«      «       ||
fS )Nz	linalg.qrr±  rŒ   Frß  r   )	rÈ  rž   rR  r‰   rê   rµ   rˆ   r½   r   )r´  rJ  rQ  Úreduced_moderT  rù   rS  ÚQ_shaperS  ÚR_shaperT  s              r5   Úlinalg_qr_metarY    sè   € ô �!�[Ô!Ü˜1˜kÔ*ä,¨TÓ2Ñ€Iˆ|à	�‰�‰€AØ	�‰�‰€AÜˆAˆq‹	€AáÜ�q—w‘w“-ˆÙ'‘a¨Qˆ�‰Ø�K‰K˜Ó ˆØ	�‰�gÔ:¸7ÈeÔTÕUà�K‰K˜˜Óˆô �1—7‘7‹m€GÙ#©9‘!¸!€GˆB�KØ	�‰�GÓ€AØ‡M�M�'Ô6°wÈ%ÔPÔQØˆaˆ4€Kr7   ÚsignÚ	logabsdetc                 óˆ  — t        | d«       t        | dd«       | j                  }| j                  |d d «      }| j                  |d d t	        | j
                  «      ¬«      }t        j                  |t        |d«      | j
                  | j                  ¬«      }| j                  |d d t        j                  ¬«      }||||fS )Nzlinalg.slogdetFr±  r�   r  rŒ   )r�   rž   r‰   rˆ   rR   rP   rH   r  r   rt   r3  )r´  r‰   rZ  r[  r7  r  s         r5   Ú_linalg_slogdetr]  ›  s²   € ô �aÐ)Ô*Ü˜1Ð.°Ô6Ø�G‰G€EØ�;‰;�u˜S˜b�zÓ"€DØ—‘˜E # 2˜J¬o¸a¿g¹gÓ.F�ÓG€IÜ	×	Ñ	ØÜ*¨5°%Ó8Ø�g‰gØ�x‰xô	
€Bð �[‰[˜˜s ˜¬5¯;©;ˆ[Ó7€FØ�˜B Ð&Ð&r7   Úfull_matricesÚ
compute_uvÚdriverc                 ób  — t        | d«       t        | d«       t        | j                  d d «      }| j                  d   }| j                  d   }t	        ||«      }|r�|||r|n|gz   }| j                  |«      }	|	j                  |t        |d¬«      «       ||r|n||gz   }
| j                  |
«      }t        | «      dk(  }|j                  |
t        |
|¬«      «       n$| j                  dg«      }	| j                  dg«      }| j                  ||gz   t        | j                  «      ¬«      }|	||fS )	Nz
linalg.svdr±  rŒ   Frß  rä   r   r�   )rÈ  rž   rµ   r‰   rê   rˆ   r½   r   ré   rR   rP   )r´  r^  r_  r`  rÃ   rT  rù   rS  ÚU_shaperÕ  ÚV_shapeÚVÚis_cudaÚSs                 r5   Ú_linalg_svd_metarg  ¯  s#  € ô �!�\Ô"Ü˜1˜lÔ+ä�a—g‘g˜c˜r�lÓ#€JØ	�‰�‰€AØ	�‰�‰€AÜˆAˆq‹	€AáØ ©¡1¸1Ð=Ñ=ˆØ�K‰K˜Ó ˆØ	�‰�gÔ:¸7ÈeÔTÔUà¡]¡¸¸1Ð=Ñ=ˆØ�K‰K˜Ó ˆô
 ˜a“. FÑ*ˆØ	�‰�gÔ:¸7ÈgÔVÕWð �K‰K˜˜ÓˆØ�K‰K˜˜Óˆð 	
�‰�J ! Ñ$¬O¸A¿G¹GÓ,DˆÓE€AØˆa�ˆ7€Nr7   Úarg1Úarg2c                 ó  — | j                   d d }|j                   d d }t        ||«      }t        |«      }|| j                  d«      | j                  d«      gz  }t        |«      }||j                  d«      |j                  d«      gz  }||fS )Nr±  rŒ   )r‰   r$   rµ   r“   )rh  ri  Úarg1_batch_sizesÚarg2_batch_sizesÚexpand_batch_portionÚarg1_expand_sizeÚarg2_expand_sizes          r5   r-  r-  Õ  s—   € ð
 —z‘z # 2�ÐØ—z‘z # 2�ÐÜ,Ð-=Ð?OÓPÐäÐ0Ó1ÐØ˜Ÿ™ 2›¨¯	©	°"«Ð6Ñ6ÐäÐ0Ó1ÐØ˜Ÿ™ 2›¨¯	©	°"«Ð6Ñ6ÐØÐ-Ð-Ð-r7   c                 óÎ   — |rt        | ||«       t        | |«      \  }}|| j                  k(  r| n| j                  |«      }||j                  k(  r|n|j                  |«      }||fS r2   )r¾  r-  r‰   Úexpand)rh  ri  rµ  rn  ro  Úarg1_broadcastedÚarg2_broadcasteds          r5   rø  rø  æ  sv   € ñ Ü˜t T¨4Ô0ä)EÀdÈDÓ)QÑ&ÐÐ&ð ! D§J¡JÒ.‰°D·K±KÐ@PÓ4Qð ð ! D§J¡JÒ.‰°D·K±KÐ@PÓ4Qð ð Ð-Ð-Ð-r7   r”   c                 ó    — | j                   d d }|j                  dk(  xs- | j                  dz
  |j                  k(  xr |j                   |k(  }|S )NrŒ   r³   )r‰   r•   )rË   r”   Úexpected_batched_rhs_shapeÚvector_cases       r5   Úlinalg_solve_is_vector_rhsrw  ú  sS   € Ø!&§¡¨S¨bÐ!1ÐØ—*‘* ‘/ò Ø�
‰
�Q‰˜%Ÿ*™*Ñ$ÒR¨¯©Ð8RÑ)Rð ð Ðr7   )rÇ   r  rÍ  r7  r  r  c                óÐ  ‡ ‡— t        ‰ d«       t        j                  ‰ j                  ‰j                  k(  ˆ ˆfd„«       t	        ‰ ‰«      }|r‰j                  d«      n‰}	t        ‰ |	|d«       t        |	‰ «      \  }
}t        j                  |xs | d„ «       |r|
d d n|
}t        j                  |t        || «      ‰j                  ‰j                  ¬«      }‰ j                  }t        j                  |t        |d«      ‰ j                  ‰ j                  ¬«      }‰ j                  |d d t        j                  ¬«      }‰ j                  |d d t        j                  ¬«      }||||f}||||f}t        d	„ |D «       «      rbt        ||«      D ]S  \  }}t!        ||j                  «       |j#                  |j                  |j%                  «       «       t'        ||d¬
«       ŒU |S )Nzlinalg.solvec                  ó>   •— d‰ j                   › d‰j                   › d�S )NzKlinalg.solve: Expected A and B to have the same dtype, but found A of type r>  r&  r�   )r´  rÉ  s   €€r5   rW   z"_linalg_solve_ex.<locals>.<lambda>  s%   ø€ ØYØ�w‰wˆi� q§w¡w i¨xð9ð r7   rŒ   c                   ó   — 	 y)Nz•linalg.solve: Vector broadcasting of the left hand side is not supported for left=False. In this case linalg.solve is equivalent to B / A.squeeze(-1)r;   r;   r7   r5   rW   z"_linalg_solve_ex.<locals>.<lambda>  s   € ðKð r7   r  Fr�   r±  c              3   ó$   K  — | ]  }|d u–— Œ
 y ­wr2   r;   ©rd   rE   s     r5   rf   z#_linalg_solve_ex.<locals>.<genexpr>3  s   è ø€ Ò
&˜Qˆ1�DŒ=Ñ
&ùs   ‚)Ú	copy_fromÚcopy_toÚexact_dtype)rž   rH   rY   rP   rw  Ú	unsqueezerÌ  r-  r  r   rt   r‰   rˆ   r3  ÚallÚzipr    r½   r¸   r"   )r´  rÉ  rÇ   r  rÍ  r7  r  r  rv  ÚB_ÚB_broad_shaperC   Úresult_shapeÚresult_r‰   ÚLU_Úpivots_Úinfo_r¿   ÚresrN  Úos   ``                    r5   Ú_linalg_solve_exrŒ    s¶  ù€ ô ˜1˜nÔ-Ü	‡L�LØ	�‰�1—7‘7Ñô	
ôô -¨Q°Ó2€KÙ'ˆ�‰�RŒ¨Q€BÜ�a˜˜T >Ô2Ü3°B¸Ó:Ñ€M�1Ü	‡L�LØÒ�K�ñ	
ôñ *5�=  "Ñ%¸-€LÜ×!Ñ!ØÜ*¨<¸T¸ÓBØ�g‰gØ�x‰xô	€Gð �G‰G€EÜ
×
Ñ
ØÜ*¨5°%Ó8Ø�g‰gØ�x‰xô	€Cð �k‰k˜%  ˜*¬E¯K©KˆkÓ8€GØ�K‰K˜˜c˜r˜
¬%¯+©+ˆKÓ6€EØ�2�v˜tÐ
$€CØ�C˜ %Ð
(€CÜ
Ñ
& #Ô
&Ô&Ü˜˜S“Mò 	F‰DˆAˆqä˜a §¡Ô)à�M‰M˜!Ÿ'™' 1§8¡8£:Ô.Ü Q°¸uÖEð	Fð €Jr7   )rÇ   Úunitriangularr¿   r�  r¿   c                óÌ  — |€| j                  dg«      }t        |t        «      sJ ‚t        | ||d«       t	        || d «      \  }}|j                  dd«      j                  «       xr |j                  «       }|rt        ||j                  «      }|S t        ||j                  «      r=|j                  |j                  dd«      j                  «       |j                  dd«       |S )Nr   zlinalg.solve_triangularr±  rŒ   )rˆ   rb   r   rÌ  rø  rî  rP  Úis_conjr    r‰   r!   r¼   Ú
transpose_)	r´  rÉ  rØ  rÇ   r�  r¿   rƒ  ÚA_Úavoid_copy_As	            r5   Úlinalg_solve_triangular_metar“  =  sÈ   € ð €{Ø�k‰k˜1˜#ÓˆÜ�cœ:Ô&Ð&Ð&Ü�a˜˜DÐ";Ô<Ü.¨q°!°TÓ:�F€BˆØ—<‘<  BÓ'×5Ñ5Ó7ÒH¸B¿J¹J»L€LÙÜ  R§X¡XÓ.ˆð €Jô    R§X¡XÔ.Ø�K‰K˜Ÿ™ R¨Ó,×2Ñ2Ô3Ø�N‰N˜2˜rÔ"Ø€Jr7   ÚXÚM)r  rî  c                 óø  ‡ ‡— t        j                  ‰ j                  dk\  ˆ fd„«       t        j                  ‰j                  dk\  ˆfd„«       t        ‰ ‰d«       ‰j                  t         j
                  k(  rƒt        ‰ ‰«      \  }}t        j                  |t        |d¬«      ‰ j                  ‰ j                  ¬«      }t        j                  |t        |d¬«      ‰j                  ‰j                  ¬«      }||fS ‰j                  t         j                  k(  s‰j                  t         j                  k(  r+t        j                  ‰ «      }‰ j                  dg«      }||fS t        j                  dd	„ «       fS )
Nrà   c                  ó$   •— d‰ j                   › d�S )NzMtorch.triangular_solve: Expected b to have at least 2 dimensions, but it has rô  rõ  r¡   s   €r5   rW   z'triangular_solve_meta.<locals>.<lambda>b  s   ø€ ðØŸ)™)˜Ð$7ð9ð r7   c                  ó$   •— d‰ j                   › d�S )NzMtorch.triangular_solve: Expected A to have at least 2 dimensions, but it has rô  rõ  r¼  s   €r5   rW   z'triangular_solve_meta.<locals>.<lambda>i  r$  r7   Útriangular_solveFrß  r  r   c                   ó   — y)Nz+triangular_solve: Got an unexpected layout.r;   r;   r7   r5   rW   z'triangular_solve_meta.<locals>.<lambda>ƒ  r_   r7   )rH   rY   r•   r¾  rs   Ústridedr-  r  r   rP   rt   Ú
sparse_csrÚ
sparse_bsrrŸ   rˆ   )	rŠ   r´  rØ  rî  r�  Úself_broadcast_sizeÚA_broadcast_sizeÚsolutionÚcloned_coefficients	   ``       r5   Útriangular_solve_metar¢  W  sL  ù€ ô 
‡L�LØ�	‰	�Q‰ó	
ôô 
‡L�LØ	�‰�!‰ó	
ôô ˜4 Ð$6Ô7à‡x�x”5—=‘=Ò Ü0LÈTÐSTÓ0UÑ-ÐÐ-Ü×&Ñ&Ø$Ü.Ð/BÈeÔTØ—*‘*Ø—;‘;ô	
ˆô #×0Ñ0Ø!Ü.Ð/?È5ÔQØ—'‘'Ø—8‘8ô	
Ðð Ð'Ð'Ð'ð 
�‰”U×%Ñ%Ò	%¨¯©´U×5EÑ5EÒ)EÜ×#Ñ# DÓ)ˆØ!Ÿ^™^¨Q¨CÓ0Ðð Ð'Ð'Ð'ô 	�‰�UÑQÔRØÐ'Ð'Ð'r7   c                 ól  — t        | d«       t        | d«       | j                  | j                  d d «      }| j                  | j                  «      }|j	                  | j                  t        | j                  d¬«      «       | j                  | j                  d d t        j                  ¬«      }|||fS )Nz
linalg.detr±  Frß  rŒ   r�   r  )r´  Údetr7  r  s       r5   Ú_linalg_det_metar¥  ˆ  sŠ   € ä�a˜Ô&Ü˜1˜lÔ+à
�+‰+�a—g‘g˜c˜r�lÓ
#€Cà	
�‰�Q—W‘WÓ	€BØ‡N�N�1—7‘7Ô7¸¿¹È5ÔQÔRà�[‰[˜Ÿ™  "˜¬U¯[©[ˆ[Ó9€FØ��Fˆ?Ðr7   c                 ó0  ‡ ‡‡‡‡‡— t        j                  ‰ j                  dk\  d„ «       t        j                  ‰j                  dk\  d„ «       |rdndŠt        j                  ‰j                  ‰   ‰j                  d   k\  ˆfd„«       t        j                  ‰j                  ‰   ‰ j                  d   k(  ˆfd„«       t        j                  ‰j                  d   ‰ j                  d   k  d„ «       t        j                  ‰ j                  ‰j                  z
  d	k(  ˆ ˆfd
„«       t        j                  ‰ j                  ‰j                  k(  ˆ ˆfd„«       ‰ j                  dkD  re‰ j                  d d }‰j                  d d Št        j                  ‰|k(  ˆfd„«       ‰j                  d d Št        j                  ‰|k(  ˆfd„«       t        j                  ‰j                  ‰ j                  k(  ˆ ˆfd„«       t        j                  ‰j                  ‰ j                  k(  ˆ ˆfd„«       t        d‰‰ d«       t        d‰‰ d«       t        j                  ‰j                  t        ‰j                  d¬«      ‰j                  ‰j                  ¬«      S )Nrà   c                   ó   — y)Nz3torch.ormqr: input must have at least 2 dimensions.r;   r;   r7   r5   rW   zormqr.<locals>.<lambda>   r_   r7   c                   ó   — y)Nz3torch.ormqr: other must have at least 2 dimensions.r;   r;   r7   r5   rW   zormqr.<locals>.<lambda>£  r_   r7   r±  rŒ   c                  ó   •— d‰ › d�S )Nútorch.ormqr: other.shape[z0] must be greater than or equal to tau.shape[-1]r;   ©Úleft_size_conditions   €r5   rW   zormqr.<locals>.<lambda>©  s   ø€ Ð+Ð,?Ð+@Ð@pÐq€ r7   c                  ó   •— d‰ › d�S )Nrª  z"] must be equal to input.shape[-2]r;   r«  s   €r5   rW   zormqr.<locals>.<lambda>­  s   ø€ Ð+Ð,?Ð+@Ð@bÐc€ r7   c                   ó   — y)NzHtorch.ormqr: tau.shape[-1] must be less than or equal to input.shape[-1]r;   r;   r7   r5   rW   zormqr.<locals>.<lambda>²  r_   r7   r³   c                  ó<   •— d‰j                   › d‰ j                   › �S )Nz[torch.ormqr: Expected tau to have one dimension less than input, but got tau.ndim equal to r  rõ  r  s   €€r5   rW   zormqr.<locals>.<lambda>·  r  r7   c                  ó<   •— d‰j                   › d‰ j                   › �S )Nzhtorch.ormqr: Expected other to have the same number of dimensions as input, but got other.ndim equal to r  rõ  ©rË   r”   s   €€r5   rW   zormqr.<locals>.<lambda>¾  s+   ø€ ð+Ø+0¯:©:¨,Ð6RÐSX×S]ÑS]ÐR^ð`ð r7   c                  ó   •— d‰ › �S )NzWtorch.ormqr: Expected batch dimensions of tau to be equal to input.shape[:-2], but got r;   r  s   €r5   rW   zormqr.<locals>.<lambda>É  r  r7   c                  ó   •— d‰ › �S )NzYtorch.ormqr: Expected batch dimensions of other to be equal to input.shape[:-2], but got r;   )Úactual_batch_other_shapes   €r5   rW   zormqr.<locals>.<lambda>Ò  s   ø€ ð6Ø6NÐ5OðQð r7   c                  ó<   •— d‰ j                   › d‰j                   › �S )NzPtorch.ormqr: Expected input and tau to have the same dtype, but input has dtype z and tau has dtype r�   r  s   €€r5   rW   zormqr.<locals>.<lambda>Ú  s'   ø€ ð#Ø#(§;¡; -Ð/BÀ3Ç9Á9À+ðOð r7   c                  ó<   •— d‰ j                   › d‰j                   › �S )NzRtorch.ormqr: Expected input and other to have the same dtype, but input has dtype z and other has dtype r�   r±  s   €€r5   rW   zormqr.<locals>.<lambda>á  s'   ø€ ð#Ø#(§;¡; -Ð/DÀUÇ[Á[ÀMðSð r7   ztorch.ormqrr  r”   Frß  r  )	rH   rY   r•   r‰   rP   rÒ  r  r   rt   )	rË   r  r”   rÇ   rî  Úexpected_batch_shaper´  r  r¬  s	   ```   @@@r5   Úormqrr¸  –  s  ý€ ô 
‡L�LØ�
‰
�a‰ÑVôô 
‡L�LØ�
‰
�a‰ÑVôñ !%™"¨"ÐÜ	‡L�LØ�‰Ð'Ñ(¨C¯I©I°b©MÑ9Ûqôô 
‡L�LØ�‰Ð'Ñ(¨E¯K©K¸©OÑ;Ûcôô
 
‡L�LØ�	‰	�"‰˜Ÿ™ R™Ñ(ÙZôô
 
‡L�LØ�
‰
�S—X‘XÑ Ñ"ô	
ôô 
‡L�LØ�
‰
�e—j‘jÑ ô	
ôð ‡z�z�A‚~Ø$Ÿ{™{¨3¨BÐ/ÐØ!$§¡¨3¨B ÐÜ�‰Ø"Ð&:Ñ:óô	
ð $)§;¡;¨s°Ð#3Ð Ü�‰Ø$Ð(<Ñ<óô	
ô 
‡L�LØ�	‰	�U—[‘[Ñ ô	
ôô 
‡L�LØ�‰�u—{‘{Ñ"ô	
ôô �M 3¨¨uÔ5Ü�M 5¨%°Ô9ä×ÑØ�[‰[Ü*¨5¯;©;À%ÔHØ�k‰kØ�|‰|ô	ð r7   c                ót  ‡ ‡‡— t        j                  t        ‰«      d‰z  k(  ˆˆfd„«       ‰ j                  }|‰dz   k(  }|}| }|r*t	        d|«      D ]  }|xr ‰ j                  |«      dk7  }Œ n)t	        d|«      D ]  }|xr ‰ j                  |«      dk7  }Œ t        j                  |xs |ˆˆ fd„«       y )Nrà   c                  ó,   •— dd‰ z  › dt        ‰«      › �S )Nzpadding size is expected to be rà   z, but got: ©r´   )rw   Úpaddings   €€r5   rW   z,_padding_check_valid_input.<locals>.<lambda>õ  s   ø€ Ð1°!°c±'°¸+ÄcÈ'ÃlÀ^ÐT€ r7   r³   r   c                  ó:   •— d‰ dz   › d‰ dz   › d‰j                   › �S )Nz	Expected r³   zD or rà   zcD (batch mode) tensor with possibly 0 batch size and other non-zero dimensions for input, but got: r'  )rw   rË   s   €€r5   rW   z,_padding_check_valid_input.<locals>.<lambda>
  s2   ø€ Ø˜˜a™�y  c¨A¡g Yð /AØAFÇÁÀðOð r7   )rH   rY   r´   r•   r¶   r“   )rË   r¼  rw   Ú	input_dimÚis_batch_modeÚvalid_batch_modeÚvalid_non_batch_moderÆ   s   ```     r5   Ú_padding_check_valid_inputrÂ  ò  sË   ú€ Ü	‡L�LÜˆG‹˜˜C™ÑÜTôð
 —
‘
€Ià #¨¡'Ñ*€Mà$ÐØ,Ð,Ðáä�q˜)Ó$ò 	GˆAØ/ÒF°E·J±J¸q³MÀQÑ4FÑñ	Gô �q˜)Ó$ò 	OˆAØ#7Ò#N¸E¿J¹JÀq»MÈQÑ<NÑ ð	Oô 
‡L�LØÒ0Ð0ô	
õr7   c                óÞ  ‡ ‡‡‡‡	‡
— d}dŠd}‰ j                   dk(  r‰ j                  d«      }‰dz  Š|dz  }t        ‰ |d¬«       |\  Š	Š
‰ j                  |«      }‰ j                  ‰«      Š‰‰	z   ‰
z   Š|r&t        j                  ‰	‰k  xr ‰
‰k  ˆˆ ˆ	ˆ
fd„«       t        j                  ‰dk\  ˆˆfd„«       ‰ j                   dk(  r‰ j                  |‰f«      S ‰ j                  ||‰f«      S )Nr   r³   r-   r�   c                  ó4   •— d‰› d‰› d‰ › d‰j                   › �S ©NzcArgument #4: Padding size should be less than the corresponding input dimension, but got: padding (rj   ú) at dimension ú
 of input r'  ©Údim_wrË   Úpad_lÚpad_rs   €€€€r5   rW   z_pad1d_common.<locals>.<lambda>&  ó2   ø€ ð%Ø%* G¨2¨e¨W°OÀEÀ7È*ÐUZ×U`ÑU`ÐTaðcð r7   c                  ó   •— d‰ › d‰› �S )Nz
input (W: z%) is too small. Calculated output W: r;   )Úinput_wÚoutput_ws   €€r5   rW   z_pad1d_common.<locals>.<lambda>.  s   ø€ �*˜W˜IÐ%JÈ8È*ÐU€ r7   rà   )r•   r“   rÂ  rH   rY   rˆ   )rË   r¼  Úis_reflectionÚ	dim_planeÚnbatchÚnplanerÉ  rÎ  rÏ  rÊ  rË  s   `     @@@@@r5   Ú_pad1d_commonrÔ    sî   ý€ Ø€IØ€EØ€Fà‡z�z�Q‚Ø—‘˜A“ˆØ�‰
ˆØ�Q‰ˆ	ä˜u g°1Õ5à�L€Eˆ5à�Z‰Z˜	Ó"€FØ�j‰j˜Ó€GØ˜‰ Ñ&€HáÜ�‰Ø�G‰OÒ/ ¨¡öô	
ô 
‡L�LØ�A‰ÜUôð
 ‡z�z�Q‚Ø�‰ ¨Ð1Ó2Ð2à�‰ ¨°Ð9Ó:Ð:r7   c                 ó   — t        | |d¬«      S ©NT©rÐ  ©rÔ  ©rË   r¼  s     r5   Úmeta_reflection_pad1drÚ  7  ó   € ô ˜ °tÔ<Ð<r7   c                 ó   — t        | |d¬«      S ©NFr×  rØ  rÙ  s     r5   Úmeta_replication_pad1drÞ  =  ó   € ô ˜ °uÔ=Ð=r7   c                ó   ‡ ‡‡‡‡‡— dŠ|s#t        j                  t        |«      dk(  d„ «       ‰j                  dk(  r‰dz  Š|\  ŠŠ‰j	                  ‰«      }|‰z   ‰z   Š|r&t        j                  ‰|k  xr ‰|k  ˆˆˆˆfd„«       t        j                  ‰‰ j	                  ‰«      k(  ˆˆ ˆfd„«       ‰j                  ‰j                  «      S )Nr³   rà   c                   ó   — y)Nz padding size is expected to be 2r;   r;   r7   r5   rW   z(_pad1d_backward_common.<locals>.<lambda>F  r_   r7   r-   c                  ó4   •— d‰› d‰› d‰ › d‰j                   › �S rÅ  r'  rÈ  s   €€€€r5   rW   z(_pad1d_backward_common.<locals>.<lambda>S  rÌ  r7   c                  ó2   •— d‰› d‰j                  ‰ «      › �S ©Nz(grad_output width unexpected. Expected: ú, Got: r’   ©rÉ  Úgrad_outputrÏ  s   €€€r5   rW   z(_pad1d_backward_common.<locals>.<lambda>[  ó"   ø€ Ð:¸8¸*ÀGÈK×L\ÑL\Ð]bÓLcÐKdÐe€ r7   ©rH   rY   r´   r•   r“   rˆ   r‰   )	rç  rË   r¼  rÐ  rÎ  rÉ  rÏ  rÊ  rË  s	   ``   @@@@r5   Ú_pad1d_backward_commonrê  C  s¹   ý€ Ø€EÙÜ�‰”S˜“\ QÑ&Ñ(RÔSà‡z�z�Q‚Ø�‰
ˆà�L€Eˆ5à�j‰j˜Ó€GØ˜‰ Ñ&€HáÜ�‰Ø�G‰OÒ/ ¨¡öô	
ô 
‡L�LØ�K×$Ñ$ UÓ+Ñ+Ýeôð
 �?‰?˜5Ÿ;™;Ó'Ð'r7   Ú
grad_inputc                 ó    — t        | ||d¬«      S rÖ  ©rê  ©rç  rË   r¼  s      r5   Úmeta_reflection_pad1d_backwardrï  a  s   € ô " +¨u°gÈTÔRÐRr7   c                 ó    — t        | ||d¬«      S rÝ  rí  rî  s      r5   Úmeta_replication_pad1d_backwardrñ  g  s   € ô " +¨u°gÈUÔSÐSr7   c                ó’  ‡ ‡‡‡	‡
‡‡‡‡‡‡— dŠdŠd}d}t        ‰ |d¬«       ‰ j                  }|dk(  r ‰ j                  d«      }‰dz  Š‰dz  Š|dz  }|\  ŠŠŠŠ‰ j                  |«      }‰ j                  ‰«      Š	‰ j                  ‰«      Š
‰	‰z   ‰z   Š‰
‰z   ‰z   Š|rLt        j                  ‰‰
k  xr ‰‰
k  ˆˆ ˆˆfd„«       t        j                  ‰‰	k  xr ‰‰	k  ˆˆ ˆˆfd„«       t        j                  ‰dk\  xs ‰dk\  ˆ	ˆ
ˆˆfd„«       ‰ j                  d	k(  r‰ j                  |‰‰f«      S ‰ j                  ||‰‰f«      S )
Nrà   r³   r   r�   é   c                  ó4   •— d‰› d‰› d‰ › d‰j                   › �S rÅ  r'  rÈ  s   €€€€r5   rW   z_pad2d_common.<locals>.<lambda>‡  rÌ  r7   c                  ó4   •— d‰› d‰› d‰ › d‰j                   › �S ©NzcArgument #6: Padding size should be less than the corresponding input dimension, but got: padding (rj   rÆ  rÇ  r'  ©Údim_hrË   Úpad_bÚpad_ts   €€€€r5   rW   z_pad2d_common.<locals>.<lambda>Ž  rÌ  r7   c                  ó    •— d‰ › d‰› d‰› d‰› �S )Nz
input (H: ú W: z%) is too small. Calculated output H: r;   )Úinput_hrÎ  Úoutput_hrÏ  s   €€€€r5   rW   z_pad2d_common.<locals>.<lambda>–  s*   ø€ Ø˜˜	  g Yð /$Ø$, :¨T°(°ð=ð r7   r-   ©rÂ  r•   r“   rH   rY   rˆ   )rË   r¼  rÐ  Ú
dim_slicesrÒ  r•   rÓ  rø  rÉ  rý  rÎ  rþ  rÏ  rù  rÊ  rË  rú  s   `      @@@@@@@@@@r5   Ú_pad2d_commonr  m  sU  ÿú€ Ø€EØ€EØ€JØ€Fä˜u g°1Õ5à�:‰:€DØˆq‚yØ—‘˜A“ˆØ�‰
ˆØ�‰
ˆØ�a‰ˆ
à!(Ñ€Eˆ5�%˜à�Z‰Z˜
Ó#€FØ�j‰j˜Ó€GØ�j‰j˜Ó€GØ˜‰ Ñ&€HØ˜‰ Ñ&€HáÜ�‰Ø�G‰OÒ/ ¨¡öô	
ô 	�‰Ø�G‰OÒ/ ¨¡öô	
ô 
‡L�LØ�A‰Ò&˜ Q™ö	
ôð ‡z�z�Q‚Ø�‰ ¨°(Ð;Ó<Ð<à�‰ ¨°¸(ÐCÓDÐDr7   c                 ó   — t        | |d¬«      S rÖ  ©r  rÙ  s     r5   Úmeta_reflection_pad2dr  ¢  rÛ  r7   c                 ó   — t        | |d¬«      S rÝ  r  rÙ  s     r5   Úmeta_replication_pad2dr  ¨  rß  r7   c                 ó   ‡ ‡‡‡‡— dŠdŠd}|j                   }|j                  «       dk(  r‰dz  Š‰dz  Š|dz  }|\  }}}}|‰   }	|‰   }
|	|z   |z   Š|
|z   |z   Št        j                  ‰‰ j	                  ‰«      k(  ˆˆ ˆfd„«       t        j                  ‰‰ j	                  ‰«      k(  ˆˆ ˆfd„«       |j                  |j                   «      S )Nrà   r³   r   ró  c                  ó2   •— d‰› d‰j                  ‰ «      › �S rä  r’   ræ  s   €€€r5   rW   z%meta_pad2d_backward.<locals>.<lambda>Ë  rè  r7   c                  ó2   •— d‰› d‰j                  ‰ «      › �S ©Nz)grad_output height unexpected. Expected: rå  r’   ©rø  rç  rþ  s   €€€r5   rW   z%meta_pad2d_backward.<locals>.<lambda>Ï  ó"   ø€ Ð;¸H¸:ÀWÈ[×M]ÑM]Ð^cÓMdÐLeÐf€ r7   )r‰   rw   rH   rY   r“   rˆ   )rç  rŠ   r¼  rÑ  rV   rÊ  rË  rú  rù  rý  rÎ  rø  rÉ  rþ  rÏ  s   `          @@@@r5   Úmeta_pad2d_backwardr  ®  sÞ   ü€ ð €EØ€EØ€Ià—‘€JØ‡x�xƒz�Q‚Ø�‰
ˆØ�‰
ˆØ�Q‰ˆ	à!(Ñ€Eˆ5�%˜à˜Ñ€GØ˜Ñ€GØ˜‰ Ñ&€HØ˜‰ Ñ&€Hä	‡L�LØ�K×$Ñ$ UÓ+Ñ+Ýeôô 
‡L�LØ�K×$Ñ$ UÓ+Ñ+Ýfôð �>‰>˜$Ÿ*™*Ó%Ð%r7   c          	      ó$  ‡ ‡‡‡	‡
‡‡‡‡‡‡‡‡‡‡‡— dŠ	dŠdŠd}t        ‰ |d¬«       ‰ j                  dk(  }|r%‰ j                  d«      }‰	dz  Š	‰dz  Š‰dz  Š|dz  }|\  ŠŠŠŠŠŠ‰ j                  |«      }‰ j                  ‰«      Š
‰ j                  ‰«      Š‰ j                  ‰	«      Š‰
‰z   ‰z   Š‰‰z   ‰z   Š‰‰z   ‰z   Š|rrt        j                  ‰‰k  xr ‰‰k  ˆ	ˆ ˆˆfd„«       t        j                  ‰‰k  xr ‰‰k  ˆˆ ˆˆfd„«       t        j                  ‰‰
k  xr ‰‰
k  ˆˆ ˆˆfd	„«       t        j                  ‰dk\  xs ‰dk\  xs ‰dk\  ˆ
ˆˆˆˆˆfd
„«       |r‰ j                  |‰‰‰f«      S ‰ j                  |‰‰‰f«      S )Nr-   rà   r³   r   r�   é   c                  ó4   •— d‰› d‰› d‰ › d‰j                   › �S rÅ  r'  rÈ  s   €€€€r5   rW   z_pad3d_common.<locals>.<lambda>ñ  rÌ  r7   c                  ó4   •— d‰› d‰› d‰ › d‰j                   › �S rö  r'  r÷  s   €€€€r5   rW   z_pad3d_common.<locals>.<lambda>ø  rÌ  r7   c                  ó4   •— d‰› d‰› d‰ › d‰j                   › �S )NzcArgument #8: Padding size should be less than the corresponding input dimension, but got: padding (rj   rÆ  rÇ  r'  )Údim_drË   Úpad_bkÚpad_fs   €€€€r5   rW   z_pad3d_common.<locals>.<lambda>ÿ  s2   ø€ ð%Ø%* G¨2¨f¨X°_ÀUÀGÈ:ÐV[×VaÑVaÐUbðdð r7   c                  ó,   •— d‰ › d‰› d‰› d‰› d‰› d‰› �S )Nz
input (D: ú H: rü  z%) is too small. Calculated output D: r;   )Úinput_drý  rÎ  Úoutput_drþ  rÏ  s   €€€€€€r5   rW   z_pad3d_common.<locals>.<lambda>  s7   ø€ Ø˜˜	  g Y¨d°7°)ð <$Ø$, :¨T°(°¸4À¸zðKð r7   rÿ  )rË   r¼  rÐ  rÑ  Ú
batch_moderÒ  rÓ  r  rø  rÉ  r  rý  rÎ  r  rþ  rÏ  rù  r  r  rÊ  rË  rú  s   `      @@@@@@@@@@@@@@@r5   Ú_pad3d_commonr  Ô  s¬  ÿÿ€ Ø€EØ€EØ€EØ€Iä˜u g°1Õ5à—‘˜q‘€JÙØ—‘˜A“ˆØ�‰
ˆØ�‰
ˆØ�‰
ˆØ�Q‰ˆ	à07Ñ-€Eˆ5�%˜  và�Z‰Z˜	Ó"€FØ�j‰j˜Ó€GØ�j‰j˜Ó€GØ�j‰j˜Ó€GØ˜‰ Ñ'€HØ˜‰ Ñ&€HØ˜‰ Ñ&€HáÜ�‰Ø�G‰OÒ/ ¨¡öô	
ô 	�‰Ø�G‰OÒ/ ¨¡öô	
ô 	�‰Ø�G‰OÒ0 ¨Ñ 0öô	
ô 
‡L�LØ�A‰Ò7˜ Q™Ò7¨(°a©-÷	
ð 	
ôñ Ø�‰ ¨°¸(ÀHÐMÓNÐNà�‰ ¨°(¸HÐEÓFÐFr7   c                 ó   — t        | |d¬«      S rÖ  ©r  rÙ  s     r5   Úmeta_reflection_pad3dr    rÛ  r7   c                 ó   — t        | |d¬«      S rÝ  r  rÙ  s     r5   Úmeta_replication_pad3dr     rß  r7   c                 óâ  ‡ ‡‡‡‡‡‡— t        j                  t        |«      dk(  d„ «       |j                  dkD  sJ ‚‰ j                  |j                  k(  sJ ‚dŠdŠdŠ|j                  dk(  r‰dz  Š‰dz  Š‰dz  Š|\  }}}}}}|j	                  ‰«      }	|j	                  ‰«      }
|j	                  ‰«      }|	|z   |z   Š|
|z   |z   Š||z   |z   Št        j                  ‰‰ j	                  ‰«      k(  ˆˆ ˆfd„«       t        j                  ‰‰ j	                  ‰«      k(  ˆˆ ˆfd„«       t        j                  ‰‰ j	                  ‰«      k(  ˆˆ ˆfd	„«       |j                  |j                  «      S )
Né   c                   ó   — y)Nz padding size is expected to be 6r;   r;   r7   r5   rW   z%meta_pad3d_backward.<locals>.<lambda>)  r_   r7   r-   rà   r³   r  c                  ó2   •— d‰› d‰j                  ‰ «      › �S rä  r’   ræ  s   €€€r5   rW   z%meta_pad3d_backward.<locals>.<lambda>A  rè  r7   c                  ó2   •— d‰› d‰j                  ‰ «      › �S r
  r’   r  s   €€€r5   rW   z%meta_pad3d_backward.<locals>.<lambda>E  r  r7   c                  ó2   •— d‰› d‰j                  ‰ «      › �S )Nz(grad_output depth unexpected. Expected: rå  r’   )r  rç  r  s   €€€r5   rW   z%meta_pad3d_backward.<locals>.<lambda>I  rè  r7   ré  )rç  rË   r¼  rÊ  rË  rú  rù  r  r  r  rý  rÎ  r  rø  rÉ  r  rþ  rÏ  s   `           @@@@@@r5   Úmeta_pad3d_backwardr'    s_  þ€ ô 
‡L�L”�W“ Ñ"Ñ$NÔOØ�:‰:˜Š>Ðˆ>Ø×Ñ˜uŸz™zÒ)Ð)Ð)à€EØ€EØ€Eà‡z�z�Q‚Ø�‰
ˆØ�‰
ˆØ�‰
ˆà07Ñ-€Eˆ5�%˜  và�j‰j˜Ó€GØ�j‰j˜Ó€GØ�j‰j˜Ó€GØ˜‰ Ñ'€HØ˜‰ Ñ&€HØ˜‰ Ñ&€Hä	‡L�LØ�K×$Ñ$ UÓ+Ñ+Ýeôô 
‡L�LØ�K×$Ñ$ UÓ+Ñ+Ýfôô 
‡L�LØ�K×$Ñ$ UÓ+Ñ+Ýeôð
 �?‰?˜5Ÿ;™;Ó'Ð'r7   Úpc                 óJ  — t        j                  | j                  «       d„ «       | j                  d«      }|dk  r0| j	                  dg«      j                  t         j                  ¬«      S | j	                  ||dz
  z  dz  f«      j                  t         j                  ¬«      S )Nc                   ó   — y)Nz(_pdist_forward requires contiguous inputr;   r;   r7   r5   rW   z%meta__pdist_forward.<locals>.<lambda>S  r_   r7   r   r³   r›   rà   )rH   rY   rP  r“   rˆ   r  rý  )rŠ   r(  rù   s      r5   Úmeta__pdist_forwardr+  O  s”   € ô 
‡L�LØ×ÑÓÑPôð 	�	‰	�!‹€AØˆA‚vØ�~‰~˜q˜cÓ"×%Ñ%´E×4RÑ4RÐ%ÓSÐSà�~‰~˜q A¨¡E™{¨aÑ/Ð1Ó2×5Ñ5Ü×8Ñ8ð 6ó 
ð 	
r7   ÚgradÚpdistc                 óà   — t        j                  |j                  «       d„ «       t        j                  |j                  «       d„ «       t        j                  |t         j                  ¬«      S )Nc                   ó   — y)Nz._pdist_backward requires self to be contiguousr;   r;   r7   r5   rW   z&meta__pdist_backward.<locals>.<lambda>b  r_   r7   c                   ó   — y)Nz/_pdist_backward requires pdist to be contiguousr;   r;   r7   r5   rW   z&meta__pdist_backward.<locals>.<lambda>e  r_   r7   r›   )rH   rY   rP  rŸ   rý  )r,  rŠ   r(  r-  s       r5   Úmeta__pdist_backwardr1  ^  sW   € ô 
‡L�LØ×ÑÓÑVôô 
‡L�LØ×ÑÓÑXôô ×Ñ˜D´×0NÑ0NÔOÐOr7   )r?  r>  c                ó¢  ‡ ‡‡‡	‡
‡— ‰j                  d«      }‰j                  d«      }‰j                  d«      }‰ j                  |||f«      Š t        j                  ‰j	                  «       dk(  d„ «       t        j                  ‰j	                  «       dk(  d„ «       t        j                  ‰ j
                  ‰j
                  cxk(  xr ‰j
                  k(  nc ˆˆˆ fd„«       ‰j                  }‰j                  Š	|d   Š
|d   Št        j                  ‰	d   ‰
k(  xr ‰	d   ‰k(  ˆ	ˆ
ˆfd„«       ‰ j                  ‰ j                  «       «      S )	Nr   r³   rà   r-   c                   ó   — y©Nzbatch1 must be a 3D tensorr;   r;   r7   r5   rW   zmeta_baddbmm.<locals>.<lambda>q  r_   r7   c                   ó   — y©Nzbatch2 must be a 3D tensorr;   r;   r7   r5   rW   zmeta_baddbmm.<locals>.<lambda>r  r_   r7   c                  óV   •— d‰j                   › d‰ j                   › d‰j                   › �S )Nz+Input dtypes must be the same, got: input: z
, batch1: z
, batch2: r�   )Úbatch1Úbatch2rŠ   s   €€€r5   rW   zmeta_baddbmm.<locals>.<lambda>u  s0   ø€ Ð=¸d¿j¹j¸\ÈÐTZ×T`ÑT`ÐSaÐakÐlr×lxÑlxÐkyÐz€ r7   c            	      ó.   •— d‰› d‰› d‰ d   › d‰ d   › d�	S ©Nz@Expected size for first two dimensions of batch2 tensor to be: [rj   z] but got: [r   r³   ú].r;   ©Úbatch2_sizesÚbsÚcontraction_sizes   €€€r5   rW   zmeta_baddbmm.<locals>.<lambda>}  s:   ø€ ðØˆt�2Ð&Ð' |°LÀ±OÐ3DÀBÀ|ÐTUÁÐFWÐWYð[ð r7   )r“   rq  rH   rY   rw   rP   r‰   rˆ   )rŠ   r8  r9  r?  r>  Údim1Údim2Údim3Úbatch1_sizesr>  r?  r@  s   ```      @@@r5   Úmeta_baddbmmrE  j  s  ý€ ð �;‰;�q‹>€DØ�;‰;�q‹>€DØ�;‰;�q‹>€DØ�;‰;˜˜d DÐ)Ó*€DÜ	‡L�L�—‘“ Ñ"Ñ$HÔIÜ	‡L�L�—‘“ Ñ"Ñ$HÔIÜ	‡L�LØ�
‰
�f—l‘lÖ2 f§l¡lÔ2Ýzôð —<‘<€LØ—<‘<€LØ	�a‰€BØ# A‘ÐÜ	‡L�LØ�Q‰˜2ÑÒE ,¨q¡/Ð5EÑ"Eõ	
ôð �>‰>˜$Ÿ)™)›+Ó&Ð&r7   c                óL   — t        j                  | t         j                  ¬«      S r«   r[  ©rŠ   rö   s     r5   Úmeta_bernoullirH  …  s   € ô ×Ñ˜D´×0GÑ0GÔHÐHr7   c                 ó   — | S r2   r;   ©rŠ   r(  rö   s      r5   Úmeta_bernoulli_rK  Œ  ó   € à€Kr7   c                 óL   — t        j                  | t         j                  ¬«      S r«   r[  rJ  s      r5   Úmeta_bernoulli_prN  ‘  s   € ô ×Ñ˜D´×0GÑ0GÔHÐHr7   c                 ó,   — t        j                  | «      S r2   ©rH   rŸ   rG  s     r5   Úmeta_poissonrQ  —  ó   € ô ×Ñ˜DÓ!Ð!r7   c                 óÊ   — t        j                  |
| j                  «       k  d„ «       t        j                  | t         j                  ¬«      }t        j                  | «      |fS )Nc                   ó   — y)NzJError in fused_moving_avg_obs_fake_quant_cpu: ch_axis must be < self.dim()r;   r;   r7   r5   rW   z6meta__fused_moving_avg_obs_fq_helper.<locals>.<lambda>¯  r_   r7   r�   )rH   rY   rw   rŸ   Úbool)rŠ   Úobserver_onÚfake_quant_onÚrunning_minÚrunning_maxÚscaleÚ
zero_pointÚaveraging_constÚ	quant_minÚ	quant_maxÚch_axisÚper_row_fake_quantÚsymmetric_quantÚmasks                 r5   Ú$meta__fused_moving_avg_obs_fq_helperrc  �  sO   € ô  
‡L�LØ�$—(‘(“*ÑÙ\ôô ×Ñ˜D¬¯
©
Ô3€DÜ×Ñ˜TÓ" DÐ)Ð)r7   c                 óH  ‡‡‡‡— t        j                  | j                  «       dk(  d„ «       t        j                  |j                  «       dk(  d„ «       | j                  \  ŠŠ|j                  \  ŠŠt        j                  ‰‰k(  ˆˆˆˆfd„«       | j	                  ‰‰«      S )Nrà   c                   ó   — y)Nza must be 2Dr;   r;   r7   r5   rW   zmeta_mm.<locals>.<lambda>¸  r_   r7   c                   ó   — y)Nzb must be 2Dr;   r;   r7   r5   rW   zmeta_mm.<locals>.<lambda>¹  r_   r7   c            	      ó"   •— d‰› d‰ › d‰› d‰› d�	S )Nz/a and b must have same reduction dim, but got [rj   z] X [r<  r;   )ÚM1ÚM2ÚNr1  s   €€€€r5   rW   zmeta_mm.<locals>.<lambda>¾  s(   ø€ ÐAÀ!ÀÀBÀrÀdÈ%ÐPRÈtÐSUÐVWÐUXÐXZÐ[€ r7   )rH   rY   rw   r‰   rˆ   )ÚaÚbrh  ri  rj  r1  s     @@@@r5   Úmeta_mmrm  µ  sz   û€ ô 
‡L�L�—‘“˜A‘Ñ5Ô6Ü	‡L�L�—‘“˜A‘Ñ5Ô6Ø�G‰G�E€A€rØ�G‰G�E€BˆÜ	‡L�LØ
ˆb‰Þ[ôð �;‰;�q˜!ÓÐr7   c                 óš   ‡ ‡— |r(t        ˆˆ fd„t        ‰ j                  «      D «       «      S t        j                  ‰ j
                  ‰«      S )Nc              3   óH   •K  — | ]  }|‰vr‰j                   |   nd –— Œ y­w)r³   Nr'  )rd   rÏ   ÚdimsrŠ   s     €€r5   rf   z+_compute_reduction_shape.<locals>.<genexpr>Å  s$   øè ø€ ÒU¸q a¨t¡m�T—Z‘Z ’]¸Ó:ÑUùs   ƒ")rX   r¶   r•   r@   Úcompute_reduction_output_shaper‰   )rŠ   rp  r|  s   `` r5   rz  rz  Ã  s7   ù€ ÙÜÔUÄEÈ$Ï)É)ÓDTÔUÓUÐUä×/Ñ/°·
±
¸DÓAÐAr7   c                 ó  — t        | t        j                  j                  «      r| j                  j
                  S t        | d«      rEt        | j                  d«      r/| j                  j
                  dk7  r| j                  j
                  S y)Nrt   rl   rr   rä   )rb   rH   Ú_subclassesÚ
FakeTensorÚfake_devicerl   Úhasattrrt   )r"  s    r5   ré   ré   Î  sg   € Ü�&œ%×+Ñ+×6Ñ6Ô7Ø×!Ñ!×&Ñ&Ð&ä�˜Ô!Ü�F—M‘M 6Ô*Ø�M‰M×Ñ &Ò(à�}‰}×!Ñ!Ð!àr7   Úinput_tensorr¸   r¼  ÚdilationÚis_transposedÚgroupsÚoutput_paddingc                 ó  ‡‡— dt         dt         dt         dt         dt         dt         fd„}dt         dt         dt         dt         dt         dt         dt         fd	„}	|j                  d
d  }
| j                  d
d  Š|r||j                  d   z  }n<|j                  d   }|j                  d   |z  | j                  d   k7  rt        d«      ‚| j                  d   |gŠt        |t        «      r|gt        ‰«      z  }n t        |«      dk(  r|d   gt        ‰«      z  }t        |t        «      r|gt        ‰«      z  }n t        |«      dk(  r|d   gt        ‰«      z  }t        |t        «      r|gt        ‰«      z  }n t        |«      dk(  r|d   gt        ‰«      z  }d }|rCt        |t        «      r|gt        ‰«      z  }n#t        |«      dk(  r|d   gt        ‰«      z  }n|}t        t        ‰«      «      D ]]  }|r/‰j                   |	‰|   ||   ||   |
|   ||   ||   «      «       Œ4‰j                   |‰|   ||   ||   |
|   ||   «      «       Œ_ t        j                  t        d„ ‰d
d  D «       «      ˆˆfd„«       ‰S )NÚlnr(  rÆ   rS  r•  r.   c                 ó6   — | d|z  z   ||dz
  z  z
  dz
  |z  dz   S )a�  
        Formula to apply to calculate the length of some dimension of the output

        See: https://pytorch.org/docs/stable/generated/torch.nn.Conv2d.html

        Args:
            ln: length of the dimension
            p: padding in that dim
            d: dilation in that dim
            k: kernel size in that dim
            s: stride in that dim
        Returns:
            The output length
        rà   r³   r;   )r}  r(  rÆ   rS  r•  s        r5   Ú_formulaz+calc_conv_nd_return_shape.<locals>._formulaå  s.   € ð �Q˜‘U‘
˜Q ! a¡%™[Ñ(¨1Ñ,°Ñ2°QÑ6Ð6r7   r3   c                 ó<   — | dz
  |z  d|z  z
  ||dz
  z  z   |z   dz   S )aü  
        Formula to apply to calculate the length of some dimension of the output
        if transposed convolution is used.
        See: https://pytorch.org/docs/stable/generated/torch.nn.ConvTranspose2d.html

        Args:
            ln: length of the dimension
            p: padding in that dim
            d: dilation in that dim
            k: kernel size in that dim
            s: stride in that dim
            op: output padding in that dim

        Returns:
            The output length
        r³   rà   r;   )r}  r(  rÆ   rS  r•  r3   s         r5   Ú_formula_transposedz6calc_conv_nd_return_shape.<locals>._formula_transposedö  s2   € ð" �Q‘˜!‰|˜a !™eÑ# a¨1¨q©5¡kÑ1°BÑ6¸Ñ:Ð:r7   rà   r³   r   zInvalid channel dimensionsc              3   ó&   K  — | ]	  }|d kD  –— Œ y­w©r   Nr;   r|  s     r5   rf   z,calc_conv_nd_return_shape.<locals>.<genexpr>=	  s   è ø€ Ò)�aˆA��EÑ)ùó   ‚c                  ó.   •— dt        ‰ «      › d‰dd  › d�S )NzGiven input size per channel: z&. Calculated output size per channel: rà   z. Output size is too small)rµ   )rp  Ú	ret_shapes   €€r5   rW   z+calc_conv_nd_return_shape.<locals>.<lambda>>	  s*   ø€ Ð0´°d³°ð =/Ø/8¸¸¨}¨oð >#ð$€ r7   )rÖ   r‰   r  rb   r   r´   r¶   r·   rH   rY   rx   )rw  r+  r¸   r¼  rx  ry  rz  r{  r  r�  Úkernel_sizeÚout_channelsÚoutput_padding_listrÏ   rp  r†  s                 @@r5   Úcalc_conv_nd_return_shaperŠ  Û  s­  ù€ ð7”Sð 7œSð 7¤Sð 7¬Sð 7´Sð 7¼Só 7ð";¤ð ;¬ð ;´ð ;¼ð ;Äð ;Ìð ;ÔQTó ;ð& —,‘,˜q˜rÐ"€KØ×Ñ˜a˜bÐ!€DÙØ §¡¨Q¡Ñ/‰à—|‘| A‘ˆØ�<‰<˜‰?˜VÑ# |×'9Ñ'9¸!Ñ'<Ò<ÜÐ;Ó<Ð<à×#Ñ# AÑ&¨Ð5€IÜ�&œ'Ô"Ø�œC ›IÑ%‰Ü	ˆV‹˜Ò	Ø˜‘)�œs 4›yÑ(ˆä�'œ7Ô#Ø�)œc $›iÑ'‰Ü	ˆW‹˜Ò	Ø˜1‘:�,¤ T£Ñ*ˆä�(œGÔ$Ø�:¤ D£	Ñ)‰Ü	ˆX‹˜!Ò	Ø˜Q‘K�=¤3 t£9Ñ,ˆà/3ÐÙÜ�n¤gÔ.Ø#1Ð"2´S¸³YÑ">ÑÜ�Ó  AÒ%Ø#1°!Ñ#4Ð"5¼¸D»	Ñ"AÑà"0Ðä”3�t“9Óò ˆáØ×ÑÙ#Ø˜‘GØ˜A‘JØ˜Q‘KØ ‘NØ˜1‘IØ'¨Ñ*óõ	ð ×ÑÙ˜˜a™ '¨!¡*¨h°q©k¸;Àq¹>È6ÐRSÉ9ÓUõðô" 
‡L�LÜÑ)˜9 Q R˜=Ô)Ó)ô	$ôð Ðr7   c                 ób   — t         j                  j                  | «      t         j                  k(  S r2   ©rH   Ú_prims_commonÚsuggest_memory_formatÚchannels_last©Útens    r5   Úis_channels_lastr’  F	  s$   € Ü×Ñ×4Ñ4°SÓ9¼U×=PÑ=PÑPÐPr7   Úrunning_meanÚrunning_varÚtrainingÚexponential_average_factorÚepsilonc                 ór  ‡ — ‰ j                   }|�|j                   n|j                   }	|�|j                   n|j                   }
ˆ fd„}‰ j                  |«      j                   |«       ¬«      }|r#‰ j                  |	«      }‰ j                  |
«      }n"‰ j                  d«      }‰ j                  d«      }|||fS )Nc                  óº   •— t        ‰ «      rt        j                  S ‰ j                  t        j                  ¬«      rt        j                  S t        j                  S r«   )r’  rH   r�  rP  r    )rw  s   €r5   Úpick_memory_formatz2meta_miopen_batch_norm.<locals>.pick_memory_format]	  sF   ø€ Ü˜LÔ)Ü×&Ñ&Ð&Ø×%Ñ%´E×4KÑ4KÐ%ÔLÜ×*Ñ*Ð*Ü×&Ñ&Ð&r7   r›   ©r   )r‰   rˆ   r  )rw  r+  r-  r“  r”  r•  r–  r—  r˜   Úsave_mean_shapeÚsave_var_shaperš  r¿   Ú	save_meanÚsave_vars   `              r5   Úmeta_miopen_batch_normr   J	  s·   ø€ ð ×"Ñ"€Ið -9Ð,D�l×(Ò(È&Ï,É,€OØ*5Ð*A�[×&Ò&ÀvÇ|Á|€Nô'ð ×
 Ñ
  Ó
+×
.Ñ
.Ñ=OÓ=QÐ
.Ó
R€CáØ ×*Ñ*¨?Ó;ˆ	Ø×)Ñ)¨.Ó9‰à ×*Ñ*¨4Ó0ˆ	Ø×)Ñ)¨$Ó/ˆà�	˜8Ð#Ð#r7   c	           
      óÌ   ‡ ‡— ˆ ˆfd„}	t        ‰ ‰||||||r|nd «      }
d}d}‰ j                  |«      dk(  rd|
|<   ‰ j                  |
«      }|j                   |	«       ¬«      }|S )Nc                  ód  •— t        ‰ «      dk(  r&t        ‰ «      st        ‰«      r+t        j                  S t        ‰ «      rt        j                  S ‰ j	                  t        j
                  ¬«      rt        j
                  S ‰ j	                  t        j                  ¬«      rt        j                  S y ©Nrä   r›   )ré   r’  rH   r�  rP  r    Úpreserve_format)rw  r+  s   €€r5   rš  z%meta_conv.<locals>.pick_memory_format|	  sŒ   ø€ Ü�|Ó$¨Ò.Ü Ô-Ô1AÀ&Ô1IÜ×*Ñ*Ð*ä Ô-Ü×*Ñ*Ð*Ø×%Ñ%´E×4KÑ4KÐ%ÔLÜ×*Ñ*Ð*Ø×'Ñ'´e×6KÑ6KÐ'ÔLÜ×(Ñ(Ð(ð Mr7   r³   r   r›   )rŠ  r“   rˆ   r  )rw  r+  r-  r¸   r¼  rx  ry  r{  rz  rš  Ú	shape_outÚinput_channels_dimÚoutput_channels_dimr¿   s   ``            r5   Ú	meta_convr¨  p	  s†   ù€ õ
)ô *ØØØØØØØÙ'‰¨Tó	€Ið ÐØÐØ×ÑÐ+Ó,°Ò1Ø)*ˆ	Ð%Ñ&à
×
 Ñ
  Ó
+€CØ
�&‰&Ñ1Ó3ˆ&Ó
4€CØ€Jr7   Úmkldnnc
           
      óÖ   — t        | ||||d|g «      }
| j                  |
«      }t        j                  }| j	                  «       dk(  rt        j
                  }|j                  |¬«      }|S )NFr  r›   )rŠ  rˆ   rH   r�  rw   Úchannels_last_3dr  )rw  r+  r-  r¼  r¸   rx  rz  ÚattrÚscalarsÚ	algorithmr¥  r¿   Úout_memory_formats                r5   Úmeta_mkldnn_convolution_defaultr°  ¢	  sp   € ô .Ø˜& &¨'°8¸UÀFÈBó
ˆ	ð ×$Ñ$ YÓ/ˆÜ!×/Ñ/ÐØ×ÑÓ Ò"Ü %× 6Ñ 6ÐØ�f‰fÐ#4ˆfÓ5ˆØˆ
r7   c                 ób   — | j                  g | j                  d d ¢|j                  d   ‘­«      S ©NrŒ   r   ©rˆ   r‰   )rw  r+  r-  r¬  r­  r®  s         r5   Úmeta_linear_pointwise_defaultr´  ¹	  s5   € ð ×%Ñ%Ð&Q¨×(:Ñ(:¸3¸BÐ(?Ð&QÀÇÁÈaÁÑ&QÓRÐRr7   Úmklc                 ób   — | j                  g | j                  d d ¢|j                  d   ‘­«      S r²  r³  )rw  Úpacked_weightÚorig_weightr-  rÍ   s        r5   Úmeta_mkl_linearr¹  Ä	  s:   € à×)Ñ)Ø@�,×$Ñ$ S bÐ)Ð@¨;×+<Ñ+<¸QÑ+?Ñ@óð r7   Úonednnc           
      ó  — t        | ||||	d|
d «      }|t        j                  t        j                  t        j                  t        j
                  fv sJ ‚| j                  ||¬«      }|j                  t        j                  ¬«      }|S )NFr�   r›   )	rŠ  rH   rL  rN  Úuint8r2  rˆ   r  r�  )rE   Úx_scaleÚx_zpÚwÚw_scaleÚw_zpr-  r¸   r¼  rx  rz  Úoutput_scaleÚoutput_zero_pointÚoutput_dtyper¬  r­  r®  r¥  r¿   s                      r5   Úmeta_qconv2d_pointwiserÅ  Î	  s|   € ô( .ØØØØØØØØó	
ˆ	ð ¤§¡¬u¯~©~¼u¿{¹{ÌEÏJÉJÐWÑWÐWÐWØ�k‰k˜)¨<ˆkÓ8ˆØ�f‰f¤5×#6Ñ#6ˆfÓ7ˆØˆ
r7   c                 ó   — |dk(  sJ ‚|S )NÚsumr;   )rE   r½  r¾  r¿  rÀ  rÁ  Úaccumr-  r¸   r¼  rx  rz  rÂ  rÃ  rÄ  Úaccum_scaleÚaccum_zero_pointÚbinary_op_namer>  Úunary_op_nameÚunary_op_argsÚunary_op_algorithms                         r5   Úmeta_qconv2d_pointwise_binaryrÏ  ñ	  s   € ð2  Ò&Ð&Ð&Øˆr7   c                 óþ   — t        | j                  «      }|j                  d   |d<   |	t        j                  t        j                  t        j
                  t        j                  fv sJ ‚| j                  ||	¬«      }|S )Nr³   rŒ   r�   )rµ   r‰   rH   rL  rN  r2  r¼  rˆ   )rE   r½  r¾  r¿  rÀ  rÁ  r-  rÂ  rÃ  rÄ  Úpost_op_nameÚpost_op_argsÚpost_op_algorithmrU  r¿   s                  r5   Úmeta_qlinear_pointwiserÔ  
  sa   € ô" ˜AŸG™G“}ˆàŸ7™7 1™:ˆ�RÑØ¤§¡¬u¯~©~¼u¿z¹zÌ5Ï;É;ÐWÑWÐWÐWØ�k‰k˜,¨lˆkÓ;ˆØˆ
r7   c                 ó  — |dk(  r|S t        | j                  «      }|j                  d   |d<   |
t        j                  t        j                  t        j
                  t        j                  fv sJ ‚| j                  ||
¬«      }|S )NrÇ  r³   rŒ   r�   )rµ   r‰   rH   rL  rN  r¼  r2  rˆ   )rE   r½  r¾  r¿  rÀ  rÁ  Úx_2r-  rÂ  rÃ  rÄ  Úx2_scaleÚx2_zprË  r>  rÌ  rÍ  rÎ  rU  r¿   s                       r5   Úmeta_qlinear_pointwise_binaryrÙ  %
  sn   € ð, ˜UÒ"ØˆJÜ˜AŸG™G“}ˆàŸ7™7 1™:ˆ�RÑØ¤§¡¬u¯~©~¼u¿{¹{ÌEÏJÉJÐWÑWÐWÐWØ�k‰k˜,¨lˆkÓ;ˆØˆ
r7   c                 óv   — t        | j                  «      }|j                  d   |d<   | j                  |«      }|S )Nr³   rŒ   )rµ   r‰   rˆ   )rE   r¿  r-  rU  r¿   s        r5   Úmeta_linear_dynamic_fp16rÛ  D
  s6   € ô ˜AŸG™G“}ˆàŸ7™7 1™:ˆ�RÑØ�k‰k˜,Ó'ˆØˆ
r7   Ú	quantized©r³   c                 ó.  — t        | |||||«      \  }}}| j                  «       dk(  r| j                  d«      nd}	t        j                  }
| j                  «       dk(  r|||g}n|	|||g}t        j
                  || j                  | j                  |
¬«      S ©Nró  éüÿÿÿr³   r-   rl  )Ú#max_pool2d_checks_and_compute_shaperw   r“   rH   r�  r|   rP   rt   ©rË   r‡  r¸   r¼  rx  Ú	ceil_modeÚnInputPlaneÚoutputHeightÚoutputWidthrÒ  rœ   r“   s               r5   Úmeta_quantized_max_pool2drç  U
  s�   € ô 0Ø�; ¨°¸9ó
ñ		
ØØØð $)§9¡9£;°!Ò#3�—‘˜B”¸ˆÜ×+Ñ+ˆØ�9‰9‹;˜!ÒØ ¨{Ð;‰Dà˜K¨°{ÐCˆDÜ�{‰{ØØ—+‘+Ø—<‘<Ø'ô	
ð 	
r7   c                 ó‚  — t        j                  | j                  «       dk(  d| j                  «       › d�«       t        j                  |j                  «       dk(  d|j                  «       › d�«       t        j                  | j                  t         j                  t         j
                  t         j                  fv d| j                  › �«       t        j                  |j                  t         j                  k(  d|j                  › �«       t        j                  |j                  t         j                  k(  d|j                  › �«       t        j                  |j                  | j                  k(  d|j                  › �«       | j                  | j                  d	«      |j                  d	«      | j                  ¬
«      S )Nrà   zx must be a 2D tensor, got ÚDzw must be a 2D tensor, got ú#expected x to be f32/f16/bf16, got úexpected w to be uint8, got z q_group_size must be int64, got z5q_scale_and_zeros must have the same dtype as x, got r   r�   )rH   rY   rw   rP   rL  rM  rN  r¼  r§   rˆ   r“   ©rE   r¿  Úq_group_sizeÚq_scale_and_zeross       r5   Úmeta_int4mm_packed_weight_cpurï  r
  s@  € ä�‰�Q—U‘U“W ‘\Ð%@ÀÇÁÃÀ	ÈÐ#KÔLÜ�‰�Q—U‘U“W ‘\Ð%@ÀÇÁÃÀ	ÈÐ#KÔLÜ�‰Ø�G‰GœŸ™¤u§}¡}´e·n±nÐEÐEØ1°!·'±'°Ð;ô	
ô 	�‰�Q—W‘W¤§¡Ñ+Ð/KÈAÏGÉGÈ9Ð-UÔVÜ�‰Ø×Ñ¤%§+¡+Ñ-Ø.¨|×/AÑ/AÐ.BÐCô	
ô 	�‰Ø×#Ñ# q§w¡wÑ.ØCÐDU×D[ÑD[ÐC\Ð]ô	
ð �{‰{˜1Ÿ6™6 !›9 a§f¡f¨Q£i°q·w±wˆ{Ó?Ð?r7   c                 óŽ   ‡ ‡‡‡— t        j                  ‰ j                  «       ‰k(  xr ‰ j                  ‰   ‰k(  ˆˆˆˆ fd„«       y )Nc                  ój   •— d‰ › d‰› d‰› d�d‰j                  «       › d‰› d‰j                  ‰   › �z   S )NzExpected a tensor of dimension z and tensor.size[z] == rj   zbut got : dimension z] = ©rw   r‰   )rw   Údim_sizer“   r"  s   €€€€r5   rW   z check_dim_size.<locals>.<lambda>Š
  sP   ø€ Ð1°#°Ð6GÈÀzÐQVÐW[ÐV\Ð\^Ð_Ø  §¡£ Ð.?À¸zÈÈfÏlÉlÐ[cÑNdÐMeÐ
fñg€ r7   )rH   rY   rw   r‰   )r"  rw   ró  r“   s   ````r5   Úcheck_dim_sizerô  ‡
  s6   û€ Ü	‡L�LØ�
‰
‹˜ÑÒ> §¡¨XÑ 6¸$Ñ >ö	gõr7   c                 óÖ  ‡ — d„ } |d|«      \  }}	t        j                  t        |«      dv d„ «       t        j                  ‰ j                  t         j                  t         j
                  t         j                  t         j                  fvˆ fd„«       t        |«      dk(  r||	}}
n%t        |«      dk(  r|d   |d   }}
n |d|«      \  }
} |d	|«      \  }}t        j                  |d u xs |dk7  d
„ «       ‰ j                  «       dk(  r‰ j                  d«      nd}‰ j                  d«      }‰ j                  d«      }‰ j                  d«      }t        ||||
d|«      }t        ||	||d|«      }t        j                  ‰ «      }t        ‰ ||	|
|||dd||||||«       ‰ j                  «       dk(  r|||g}n||||g}t        j                  |‰ j                  ‰ j                  |¬«      S )Nc                 óˆ   ‡ — t        j                  t        |«      dv ˆ fd„«       |d   }t        |«      dk(  r|n|d   }||fS )N©r³   rà   c                  ó   •— d‰ › d�S )Nzavg_pool2d: ú4 must either be a single int, or a tuple of two intsr;   ©rµ  s   €r5   rW   z1meta_avg_pool2d.<locals>.unpack.<locals>.<lambda>œ
  ó   ø€ �l 4 &Ð(\Ð]€ r7   r   r³   ©rH   rY   r´   ©rµ  rŽ  ÚHÚWs   `   r5   Úunpackzmeta_avg_pool2d.<locals>.unpack™
  óG   ø€ Ü�‰Ü�‹H˜ÐÛ]ô	
ð �‰FˆÜ�S“˜Q’‰A C¨¡FˆØ�!ˆtˆr7   r‡  ©r   r³   rà   c                   ó   — y©NzOavg_pool2d: stride must either be omitted, a single int, or a tuple of two intsr;   r;   r7   r5   rW   z!meta_avg_pool2d.<locals>.<lambda>¥
  r_   r7   c                  ó@   •— d‰ j                   j                  «       › d�S )Nz""avg_pool2d" not implemented for 'ú'©rP   Ú__str__©rË   s   €r5   rW   z!meta_avg_pool2d.<locals>.<lambda>©
  ó   ø€ Ð6°u·{±{×7JÑ7JÓ7LÐ6MÈQÐQ€ r7   r   r³   r¸   r¼  c                   ó   — y©Nzdivisor must be not zeror;   r;   r7   r5   rW   z!meta_avg_pool2d.<locals>.<lambda>¶
  r_   r7   ró  rà  éýÿÿÿr±  rŒ   r-   rl  )rH   rY   r´   rP   r¼  Úuint16Úuint32Úuint64rw   r“   Úpooling_output_shaper@   rŽ  Úpool2d_shape_checkr|   rt   )rË   r‡  r¸   r¼  rã  Úcount_include_padÚdivisor_overrider   ÚkHÚkWÚdHÚdWÚpadHÚpadWrÒ  rä  ÚinputHeightÚ
inputWidthrå  ræ  rœ   r“   s   `                     r5   Úmeta_avg_pool2dr  �
  sâ  ø€ òñ �M ;Ó/�F€BˆÜ	‡L�LÜˆF‹�yÐ Ùaôô 
‡L�LØ�‰œEŸK™K¬¯©´u·|±|ÄUÇ\Á\ÐRÐRÛQôô ˆ6ƒ{�aÒØ�RˆB‰Ü	ˆV‹˜Ò	Ø˜‘˜F 1™IˆB‰á˜ &Ó)‰ˆˆBá˜	 7Ó+�J€Dˆ$ä	‡L�LØ˜DÐ Ò9Ð$4¸Ñ$9Ù*ôð
  %Ÿy™y›{¨aÒ/ˆU�Z‰Z˜Œ^°Q€FØ—*‘*˜R“.€KØ—*‘*˜R“.€KØ—‘˜B“€Jä'¨°R¸¸rÀ1ÀiÓP€LÜ& z°2°t¸RÀÀIÓN€Kä×/Ñ/°Ó6€MÜØØ
Ø
Ø
Ø
ØØØ	Ø	ØØØØØØôð$ ‡y�yƒ{�aÒØ˜\¨;Ð7‰à˜ \°;Ð?ˆÜ�;‰;ØØ�k‰kØ�|‰|Ø#ô	ð r7   c                 óÀ   — t        | ||||||dd|	|
||||«       | j                  «       }|	}t        |||dz
  |«       t        |||dz
  |«       t        |||dz
  |«       y )Nr³   r-   rà   )r  rw   rô  )rË   Ú
gradOutputrÒ  r  r  r  r  r  r  rä  r  r  rå  ræ  Ú
mem_formatr•   ÚnOutputPlanes                    r5   Úavg_pool2d_backward_shape_checkr"  á
  s�   € ô" ØØ
Ø
Ø
Ø
ØØØ	Ø	ØØØØØØôð$ �9‰9‹;€DØ€Lä�:˜t T¨A¡X¨|Ô<Ü�:˜t T¨A¡X¨|Ô<Ü�:˜t T¨A¡X¨{Õ;r7   c                 óÐ  — t        j                  t        |«      dk(  xs t        |«      dk(  d„ «       |d   }t        |«      dk(  r|n|d   }	t        j                  t        |«      dk(  xs t        |«      dk(  xs t        |«      dk(  d„ «       t        |«      dk(  r|n|d   }
t        |«      dk(  r|	nt        |«      dk(  r|
n|d   }t        j                  t        |«      dk(  xs t        |«      dk(  d„ «       |d   }t        |«      dk(  r|n|d   }t        j                  |d u xs |dk7  d„ «       |j                  }|j	                  «       dk(  r|d	   nd}|d
   }|d   }|d   }t        ||||
d|«      }t        ||	||d|«      }t        j                  |«      }t        || |||	|
|||||||||«       t        j                  ||j                  |j                  |¬«      S )Nr³   rà   c                   ó   — y)NzKavg_pool2d: kernel_size must either be a single int, or a tuple of two intsr;   r;   r7   r5   rW   z*meta_avg_pool2d_backward.<locals>.<lambda>  r_   r7   r   c                   ó   — yr  r;   r;   r7   r5   rW   z*meta_avg_pool2d_backward.<locals>.<lambda>!  r_   r7   c                   ó   — y)NzGavg_pool2d: padding must either be a single int, or a tuple of two intsr;   r;   r7   r5   rW   z*meta_avg_pool2d_backward.<locals>.<lambda>'  r_   r7   c                   ó   — yr  r;   r;   r7   r5   rW   z*meta_avg_pool2d_backward.<locals>.<lambda>.  r_   r7   ró  rà  r  r±  rŒ   rl  )rH   rY   r´   r‰   rw   r  r@   rŽ  r"  r|   rP   rt   )ÚgradOutput_rË   r‡  r¸   r¼  rã  r  r  r  r  r  r  r  r  Ú
input_sizerÒ  rä  r  r  rå  ræ  r   s                         r5   Úmeta_avg_pool2d_backwardr*    s  € ô 
‡L�LÜˆKÓ˜AÑÒ6¤ [Ó!1°QÑ!6Ù]ôð 
�Q‰€BÜ�;Ó 1Ò$‰¨+°a©.€BÜ	‡L�LÜˆF‹�qÑÒ@œC ›K¨1Ñ,Ò@´°F³¸qÑ0@Ùaôô �6‹{˜aÒ‰ V¨A¡Y€BÜ�6‹{˜aÒ‰¬3¨v«;¸!Ò+;¡RÀÈÁ€BÜ	‡L�LÜˆG‹˜ÑÒ.œS ›\¨QÑ.ÙYôð �1‰:€DÜ�w“< 1Ò$‰4¨'°!©*€Dä	‡L�LØ˜DÐ Ò9Ð$4¸Ñ$9Ù*ôð
 —‘€JØ$Ÿy™y›{¨aÒ/ˆZ˜Š^°Q€FØ˜R‘.€KØ˜R‘.€KØ˜B‘€Jä'¨°R¸¸rÀ1ÀiÓP€LÜ& z°2°t¸RÀÀIÓN€Kä×,Ñ,¨UÓ3€Jä#ØØØØ
Ø
Ø
Ø
ØØØØØØØØôô$ �;‰;ØØ�k‰kØ�|‰|Ø ô	ð r7   c                 ó  ‡ — t        j                  t        |«      dv d„ «       |d   }t        |«      dk(  r|n|d   }t        |«      dk(  r|n|d   }	t        j                  | xs t        |«      dv d„ «       t        j                  ‰ j                  t         j                  t         j
                  t         j                  t         j                  fvˆ fd„«       |s|n|d   }
|s|nt        |«      dk(  r|
n|d   }|s|	nt        |«      dk(  r|
n|d   }t        j                  t        |«      dv d„ «       |d   }t        |«      dk(  r|n|d   }t        |«      dk(  r|n|d   }t        j                  ‰ j                  d	v d
„ «       t        j                  | xs |dk7  d„ «       ‰ j                  d«      }‰ j                  d«      }‰ j                  d«      }‰ j                  d«      }‰ j                  d«      }t        ||||
d|«      }t        ||||d|«      }t        ||	||d|«      }t        ‰ ||||	|
|||||ddd||||||dd¬«       ‰ j                  dk(  r‰ j                  ||||f«      S ‰ j                  |||||f«      S )N©r³   r-   c                   ó   — y©NzFavg_pool3d: kernel_size must be a single int, or a tuple of three intsr;   r;   r7   r5   rW   z!meta_avg_pool3d.<locals>.<lambda>c  r_   r7   r   r³   rà   c                   ó   — y©NzJavg_pool3d: stride must be omitted, a single int, or a tuple of three intsr;   r;   r7   r5   rW   z!meta_avg_pool3d.<locals>.<lambda>k  r_   r7   c                  ó@   •— d‰ j                   j                  «       › d�S )Nz""avg_pool3d" not implemented for 'r  r  r	  s   €r5   rW   z!meta_avg_pool3d.<locals>.<lambda>o  r
  r7   c                   ó   — y©NzBavg_pool3d: padding must be a single int, or a tuple of three intsr;   r;   r7   r5   rW   z!meta_avg_pool3d.<locals>.<lambda>w  r_   r7   ©ró  r  c                   ó   — y©Nz9non-empty 4D or 5D (batch mode) tensor expected for inputr;   r;   r7   r5   rW   z!meta_avg_pool3d.<locals>.<lambda>  r_   r7   c                   ó   — yr  r;   r;   r7   r5   rW   z!meta_avg_pool3d.<locals>.<lambda>„  r_   r7   rà  r  r±  rŒ   zavg_pool3d()T)Úcheck_input_sizeró  )rH   rY   r´   rP   r¼  r  r  r  r•   r“   r  Úpool3d_shape_checkrˆ   )rË   r‡  r¸   r¼  rã  r  r  ÚkTr  r  ÚdTr  r  ÚpadTr  r  rÒ  ÚnslicesÚitimeÚiheightÚiwidthÚotimeÚoheightÚowidths   `                       r5   Úmeta_avg_pool3drD  V  sŒ  ø€ ô 
‡L�LÜˆKÓ˜FÐ"ÙXôð 
�Q‰€BÜ�;Ó 1Ò$‰¨+°a©.€BÜ�;Ó 1Ò$‰¨+°a©.€Bä	‡L�LØˆ
Ò+”c˜&“k VÐ+Ù\ôô 
‡L�LØ�‰œEŸK™K¬¯©´u·|±|ÄUÇ\Á\ÐRÐRÛQôñ ‰˜v a™y€BÙ‰¤c¨&£k°QÒ&6¡¸FÀ1¹I€BÙ‰¤c¨&£k°QÒ&6¡¸FÀ1¹I€Bä	‡L�LÜˆG‹˜ÐÙTôð �1‰:€DÜ�w“< 1Ò$‰4¨'°!©*€DÜ�w“< 1Ò$‰4¨'°!©*€Dä	‡L�LØ�
‰
�fÐÙKôô
 
‡L�LØÐÒ5Ð 0°AÑ 5Ù*ôð
 �Z‰Z˜‹]€FØ�j‰j˜‹n€GØ�J‰J�r‹N€EØ�j‰j˜‹n€GØ�Z‰Z˜‹^€Fä  ¨¨D°"°a¸ÓC€EÜ" 7¨B°°b¸!¸YÓG€GÜ! &¨"¨d°B¸¸9ÓE€FäØØØ
Ø
Ø
Ø
Ø
Ø
ØØØØ	Ø	Ø	ØØØØØØØØõ-ð2 ‡z�z�Q‚Ø�‰ ¨°¸Ð@ÓAÐAà�‰ ¨°¸ÀÐHÓIÐIr7   c                 óæ  — t        j                  t        |«      dv d„ «       |d   }t        |«      dk(  r|n|d   }	t        |«      dk(  r|n|d   }
t        j                  | xs t        |«      dv d„ «       |s|n|d   }|s|	nt        |«      dk(  r|n|d   }|s|
nt        |«      dk(  r|n|d   }t        j                  t        |«      dv d„ «       |d   }t        |«      dk(  r|n|d   }t        |«      dk(  r|n|d   }t        j                  |j                  dv d	„ «       t        j                  | xs |dk7  d
„ «       |j	                  d«      }|j	                  d«      }|j	                  d«      }|j	                  d«      }t        ||||d|«      }t        ||	||d|«      }t        ||
||d|«      }t        || |||	|
||||||||||||d«       |j                  |j                  «      S )Nr,  c                   ó   — yr.  r;   r;   r7   r5   rW   z*meta_avg_pool3d_backward.<locals>.<lambda>¾  r_   r7   r   r³   rà   c                   ó   — yr0  r;   r;   r7   r5   rW   z*meta_avg_pool3d_backward.<locals>.<lambda>Æ  r_   r7   c                   ó   — yr3  r;   r;   r7   r5   rW   z*meta_avg_pool3d_backward.<locals>.<lambda>Î  r_   r7   r4  c                   ó   — yr6  r;   r;   r7   r5   rW   z*meta_avg_pool3d_backward.<locals>.<lambda>Ö  r_   r7   c                   ó   — yr  r;   r;   r7   r5   rW   z*meta_avg_pool3d_backward.<locals>.<lambda>Û  r_   r7   rà  r  r±  rŒ   zavg_pool3d_backward())	rH   rY   r´   r•   r“   r  Úavg_pool3d_backward_shape_checkrˆ   r‰   )rç  rË   r‡  r¸   r¼  rã  r  r  r:  r  r  r;  r  r  r<  r  r  r=  r>  r?  r@  Úotime_for_shape_checkÚoheight_for_shape_checkÚowidth_for_shape_checks                           r5   Úmeta_avg_pool3d_backwardrO  °  s  € ô 
‡L�LÜˆKÓ˜FÐ"ÙXôð 
�Q‰€BÜ�;Ó 1Ò$‰¨+°a©.€BÜ�;Ó 1Ò$‰¨+°a©.€Bä	‡L�LØˆ
Ò+”c˜&“k VÐ+Ù\ôñ ‰˜v a™y€BÙ‰¤c¨&£k°QÒ&6¡¸FÀ1¹I€BÙ‰¤c¨&£k°QÒ&6¡¸FÀ1¹I€Bä	‡L�LÜˆG‹˜ÐÙTôð �1‰:€DÜ�w“< 1Ò$‰4¨'°!©*€DÜ�w“< 1Ò$‰4¨'°!©*€Dä	‡L�LØ�
‰
�fÐÙKôô
 
‡L�LØÐÒ5Ð 0°AÑ 5Ù*ôð
 �j‰j˜‹n€GØ�J‰J�r‹N€EØ�j‰j˜‹n€GØ�Z‰Z˜‹^€Fä0°¸¸DÀ"ÀaÈÓSÐÜ2°7¸BÀÀbÈ!ÈYÓWÐÜ1°&¸"¸dÀBÈÈ9ÓUÐä#ØØØØ
Ø
Ø
Ø
Ø
Ø
ØØØØØØØØØØô'ð, �?‰?˜5Ÿ;™;Ó'Ð'r7   c                 ó,  ‡ — t        j                  ‰ j                  dk(  xs ‰ j                  dk(  ˆ fd„«       ‰ j                  d d t	        |«      z   }t        j                  ‰ «      }t        j                  |‰ j                  ‰ j                  |¬«      S )Nr-   ró  c                  ó"   •— d‰ j                   › �S )Nz"Expected 3D or 4D tensor, but got r'  r¡   s   €r5   rW   z*meta_adaptive_avg_pool2d.<locals>.<lambda>  ó   ø€ Ð4°T·Z±Z°LÐA€ r7   r±  rl  )
rH   rY   r•   r‰   rX   r@   rŽ  r|   rP   rt   )rŠ   Úoutput_sizerU  rœ   s   `   r5   Úmeta_adaptive_avg_pool2drT     s|   ø€ ä	‡L�LØ�	‰	�Q‰Ò(˜$Ÿ)™) q™.ÛAôð —:‘:˜c˜r�?¤U¨;Ó%7Ñ7€LÜ×/Ñ/°Ó5€Mô �;‰;ØØ�j‰jØ�{‰{Ø#ô	ð r7   c                 óÆ   ‡ — t        j                  ‰ j                  dk(  xs ‰ j                  dk(  ˆ fd„«       ‰ j                  ‰ j                  d d t        |«      z   «      S )Nró  r  c                  ó"   •— d‰ j                   › �S )Nz"Expected 4D or 5D tensor, but got r'  r¡   s   €r5   rW   z*meta_adaptive_avg_pool3d.<locals>.<lambda>  rR  r7   r  )rH   rY   r•   rˆ   r‰   rX   )rŠ   rS  s   ` r5   Úmeta_adaptive_avg_pool3drW    sO   ø€ ä	‡L�LØ�	‰	�Q‰Ò(˜$Ÿ)™) q™.ÛAôð �>‰>˜$Ÿ*™* S b˜/¬E°+Ó,>Ñ>Ó?Ð?r7   c                 óî  ‡ ‡‡— ‰ j                   }t        d|«      D ].  Št        j                  ‰ j	                  ‰«      dkD  ˆ ˆfd„«       Œ0 t        j                  |dk(  xs |dk(  ˆfd„«       t        j                  ‰j
                  ‰ j
                  k(  ˆ ˆfd„«       t        j                  }t        ‰«      rt        j                  }‰j                  ‰j                  «      j                  |¬«      S )	Nr³   r   c                  ó*   •— d‰ j                   › d‰› d�S )Nz{adaptive_avg_pool2d_backward(): Expected grad_output to have non-zero                       size for non-batch dimensions, ú with dimension ú being emptyr'  )Úgrad_outrÏ   s   €€r5   rW   z4meta__adaptive_avg_pool2d_backward.<locals>.<lambda>!  s&   ø€ ð 6Ø6>·n±nÐ5EÐEUÐVWÐUXÐXdðf€ r7   r-   ró  c                  ó"   •— d‰ j                   › �S )NzBadaptive_avg_pool2d_backward(): Expected 3D or 4D tensor, but got r'  r¡   s   €r5   rW   z4meta__adaptive_avg_pool2d_backward.<locals>.<lambda>&  s   ø€ ÐTÐUY×U_ÑU_ÐT`Ða€ r7   c                  ó<   •— d‰j                   › d‰ j                   › �S ©Núexpected dtype z! for `grad_output` but got dtype r�   )r\  rŠ   s   €€r5   rW   z4meta__adaptive_avg_pool2d_backward.<locals>.<lambda>*  s   ø€ �/ $§*¡* Ð-NÈxÏ~É~ÐN^Ð_€ r7   r›   )r•   r¶   rH   rY   r“   rP   r    r’  r�  rˆ   r‰   r  )r\  rŠ   r•   rœ   rÏ   s   ``  @r5   Ú"meta__adaptive_avg_pool2d_backwardra    sÇ   ú€ à�=‰=€DÜ�1�d‹^ò 
ˆÜ�‰Ø�M‰M˜!Ó˜qÑ ôfõ	
ð
ô 
‡L�LØ�‰	Ò�T˜Q‘YÛaôô 
‡L�LØ�
‰
�h—n‘nÑ$Ü_ôô ×+Ñ+€MÜ˜ÔÜ×+Ñ+ˆØ�>‰>˜$Ÿ*™*Ó%×(Ñ(°}Ð(ÓEÐEr7   c                 ód   — t        | d«       t        j                  |t        j                  ¬«      S )NÚadaptive_avg_pool3d_backwardr›   )Ú!_adaptive_pool_empty_output_checkrH   rŸ   rý  ©rç  rŠ   s     r5   Ú"meta__adaptive_avg_pool3d_backwardrf  2  s(   € ô & kÐ3QÔRÜ×Ñ˜D´×0NÑ0NÔOÐOr7   rç  c                 óž   ‡ ‡‡— ‰ j                   }t        d|«      D ]/  Št        j                  ‰ j	                  ‰«      dkD  ˆˆ ˆfd„«       Œ1 y )Nr³   r   c                  ó.   •— ‰ › d‰j                   › d‰› d�S )Nzc(): Expected grad_output to have non-zero size for non-batch dimensions, but grad_output has sizes rZ  r[  r'  )rÅ  rç  rÏ   s   €€€r5   rW   z3_adaptive_pool_empty_output_check.<locals>.<lambda>>  s/   ø€ Ø�*ð -Ø-8×->Ñ->Ð,?Ð?OÐPQÈsÐR^ð`ð r7   )r•   r¶   rH   rY   r“   )rç  rÅ  r•   rÏ   s   `` @r5   rd  rd  9  sG   ú€ Ø×Ñ€DÜ�1�d‹^ò 
ˆÜ�‰Ø×Ñ˜QÓ !Ñ#õõ	
ñ
r7   c                 ó  ‡ ‡— ‰ j                   }t        j                  |dv ˆ fd„«       t        d|«      D ].  Št        j                  ‰ j	                  ‰«      dkD  ˆˆ fd„«       Œ0 t        j                  t        |«      dk(  d„ «       d}d}d}‰ j                   dk(  r‰ j	                  d«      }|dz  }‰ j	                  |dz
  «      }|\  }}‰ j                   d	k(  r;|||f}‰ j                  |«      }	‰ j                  |t        j                  ¬
«      }
|	|
fS ||||f}t        j                  ‰ «      }‰ j                  |«      j                  |¬«      }	‰ j                  |t        j                  ¬
«      j                  |¬«      }
|	|
fS )N©r-   ró  c                  ó"   •— d‰ j                   › �S )Nz:adaptive_max_pool2d(): Expected 3D or 4D tensor, but got: r'  r	  s   €r5   rW   z*meta_adaptive_max_pool2d.<locals>.<lambda>K  ó   ø€ ÐLÈUÏ[É[ÈMÐZ€ r7   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 rZ  r[  r'  ©rÏ   rË   s   €€r5   rW   z*meta_adaptive_max_pool2d.<locals>.<lambda>P  ó%   ø€ ð'Ø',§{¡{ mÐ3CÀAÀ3ÀlðTð r7   rà   c                   ó   — y)NzCadaptive_max_pool2d(): internal error: output_size.size() must be 2r;   r;   r7   r5   rW   z*meta_adaptive_max_pool2d.<locals>.<lambda>X  r_   r7   ró  r-   r�   r›   )r•   rH   rY   r¶   r“   r´   rˆ   r§   r@   rŽ  r  )rË   rS  r•   ÚdimHÚsizeBÚsizeDÚosizeHÚosizeWr˜   r¿   r¤   rœ   rÏ   s   `           @r5   Úmeta_adaptive_max_pool2drv  E  s|  ù€ ð �:‰:€DÜ	‡L�LØ�ˆÛZôô �1�d‹^ò 
ˆÜ�‰Ø�J‰J�q‹M˜AÑôõ	
ð
ô 
‡L�LÜˆKÓ˜AÑÙUôð
 €DØ€EØ€Eà‡z�z�Q‚Ø—
‘
˜1“ˆØ�‰	ˆà�J‰J�t˜a‘xÓ €EØ �N€FˆFà‡z�z�Q‚Ø˜F FÐ+ˆ	Ø�o‰o˜iÓ(ˆØ—/‘/ )´5·;±;�/Ó?ˆØ�Gˆ|Ðà˜E 6¨6Ð2ˆ	Ü×3Ñ3°EÓ:ˆØ�o‰o˜iÓ(×+Ñ+¸-Ð+ÓHˆØ—/‘/ )´5·;±;�/Ó?×BÑBØ'ð Có 
ˆð �Gˆ|Ðr7   c                 óN  ‡ ‡— ‰ j                   }t        j                  |dv ˆ fd„«       t        ‰ d«       t        j                  ‰j                  ‰ j                  k(  ˆ ˆfd„«       t        j                  ‰«      }‰j                  ‰j                  «      j                  |¬«      S )Nrj  c                  ó"   •— d‰ j                   › �S )NzKadaptive_max_pooling2d_backward(): Expected 3D or 4D grad_output, but got: r'  ©rç  s   €r5   rW   z3meta_adaptive_max_pool2d_backward.<locals>.<lambda>{  s   ø€ Ð]Ð^i×^oÑ^oÐ]pÐq€ r7   Úadaptive_max_pool2d_backwardc                  ó<   •— d‰j                   › d‰ j                   › �S r_  r�   )rç  rË   s   €€r5   rW   z3meta_adaptive_max_pool2d_backward.<locals>.<lambda>‚  s!   ø€ �/ %§+¡+ Ð.OÐP[×PaÑPaÐObÐc€ r7   r›   )
r•   rH   rY   rd  rP   r@   rŽ  rˆ   r‰   r  )rç  rË   r¤   r•   rœ   s   ``   r5   Ú!meta_adaptive_max_pool2d_backwardr|  u  s‡   ù€ ð ×Ñ€DÜ	‡L�LØ�ˆÛqôô
 & kÐ3QÔRä	‡L�LØ�‰�{×(Ñ(Ñ(Ücôô
 ×/Ñ/°Ó6€MØ�?‰?˜5Ÿ;™;Ó'×*Ñ*¸Ð*ÓGÐGr7   c                 ó  ‡ ‡— ‰ j                   }t        j                  |dv ˆ fd„«       t        d|«      D ].  Št        j                  ‰ j	                  ‰«      dkD  ˆˆ fd„«       Œ0 t        j                  t        |«      dk(  d„ «       d}d}d}|dk(  r‰ j	                  d«      }|dz  }‰ j	                  |«      }|\  }}}|d	k(  r||||f}	n|||||f}	‰ j                  |	«      }
‰ j                  |	t        j                  ¬
«      }|
|fS )Nr4  c                  ó"   •— d‰ j                   › �S )Nz:adaptive_max_pool3d(): Expected 4D or 5D tensor, but got: r'  r	  s   €r5   rW   z*meta_adaptive_max_pool3d.<locals>.<lambda>�  rl  r7   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 rZ  r[  r'  rn  s   €€r5   rW   z*meta_adaptive_max_pool3d.<locals>.<lambda>”  ro  r7   r-   c                   ó   — y)NzCadaptive_max_pool3d(): internal error: output_size.size() must be 3r;   r;   r7   r5   rW   z*meta_adaptive_max_pool3d.<locals>.<lambda>œ  r_   r7   r  ró  r�   )r•   rH   rY   r¶   r“   r´   rˆ   r§   )rË   rS  r•   ÚdimDrr  rs  ÚosizeTrt  ru  r˜   r¿   r¤   rÏ   s   `           @r5   Úmeta_adaptive_max_pool3drƒ  ‰  s  ù€ ð �:‰:€DÜ	‡L�LØ�ˆÛZôô �1�d‹^ò 
ˆÜ�‰Ø�J‰J�q‹M˜AÑôõ	
ð
ô 
‡L�LÜˆKÓ˜AÑÙUôð
 €DØ€EØ€Eàˆq‚yØ—
‘
˜1“ˆØ�‰	ˆà�J‰J�tÓ€EØ(Ñ€FˆF�Fàˆq‚yØ˜F F¨FÐ3‰	à˜E 6¨6°6Ð:ˆ	à
�/‰/˜)Ó
$€CØ�o‰o˜i¬u¯{©{ˆoÓ;€Gà�ˆ<Ðr7   c                 óP   — t        | d«       |j                  |j                  «      S )NÚadaptive_max_pool3d_backward)rd  rˆ   r‰   )rç  rË   r¤   s      r5   Ú!meta_adaptive_max_pool3d_backwardr†  µ  s"   € ô & kÐ3QÔRØ�?‰?˜5Ÿ;™;Ó'Ð'r7   c                 ó>   — |€t        d«      ‚| j                  |«      S )Nz:cannot repeat_interleave a meta tensor without output_size)r  rˆ   )ÚrepeatsrS  s     r5   Úmeta_repeat_interleave_Tensorr‰  ¼  s%   € àÐÜÐWÓXÐXØ×Ñ˜[Ó)Ð)r7   c                 óî   — | j                   j                  sJ ‚|j                   j                  sJ ‚t        | j                  |j                  «      }| j	                  |t        | j                   «      ¬«      S rw  )rP   rè   r$   r‰   rˆ   r   )ÚrealÚimagr˜   s      r5   Úmeta_complexr�  Ã  s[   € ð �:‰:×'Ò'Ð'Ð'Ø�:‰:×'Ò'Ð'Ð'Ü! $§*¡*¨d¯j©jÓ9€IØ�>‰>˜)Ô+FÀtÇzÁzÓ+Rˆ>ÓSÐSr7   )Ú
fill_valuerŽ  c                ód   — | j                  || j                  «       ft        j                  ¬«      S rw  )rˆ   rw   rH   r…   )rŠ   r“   rŽ  s      r5   Únonzero_staticr�  Ì  s&   € ð �>‰>˜4 §¡£Ð,´E·J±Jˆ>Ó?Ð?r7   c                 ó
  — t        j                  t        j                  d„ «       t        j                  | j                  «       | j                  «       fd| j                  «       ft         j                  | j                  ¬«      S )Nc                   ó   — y)NaY  The register_meta function for torch.nonzero() raises unimplemented by default, as a correct data-independent implementation does not exist. This implementation returns a fake value, assuming all elements of the tensor are non-zero. To enable this registration, please set 'torch.fx.experimental._config.meta_nonzero_assume_all_nonzero' to True.r;   r;   r7   r5   rW   znonzero.<locals>.<lambda>×  r_   r7   r³   ©rP   rt   )	rH   Ú_check_not_implementedÚ
exp_configÚmeta_nonzero_assume_all_nonzeror  r‡   rw   r…   rt   r¡   s    r5   Únonzeror—  Ò  sf   € ô 
× Ñ Ü×2Ñ2ñ	Sôô ×ÑØ	�‰‹�t—x‘x“zÐ"Ø	
ˆD�J‰J‹LÐÜ�j‰jØ�{‰{ô	ð r7   c           
      óä  ‡ ‡‡‡‡‡‡‡‡— t        j                  t        ‰«      d„ «       g }t        ‰«      D �]€  \  ŠŠ‰��ft        j                  ‰j                  t         j
                  t         j                  t         j                  t         j                  fv d„ «       ‰j                  t         j                  t         j                  fv rÈ‰j                  «       }t        |«      Št        j                  ‰‰j                  z   ‰ j                  k  ˆ fd„«       t        ‰j                  «      D ]`  Št        j                  ‰j                  ‰   ‰ j                  ‰‰z      k(  ˆˆˆˆˆ fd„«       |j                  |j                  d‰«      «       Œb �Œ]|j                  ‰«       �Œp|j                  ‰«       �Œƒ |Št        j                  t        ‰«      ‰ j                  k  ˆˆ fd„«       dd lm} t%         |j&                  ‰Ž «      Št        ‰«      ‰ j                  k  r*‰j                  d «       t        ‰«      ‰ j                  k  rŒ*d}d}‰D ]  Š|dk(  r‰€Œd}Œ|dk(  r‰�Œd	}Œ‰€Œ n d
}|s‡g }g }t        ‰«      D ]*  \  ŠŠ‰€Œ	|j                  ‰«       |j                  ‰«       Œ, t        ‰«      D ]*  \  ŠŠ‰�Œ	|j                  ‰«       |j                  ‰«       Œ, ‰ j)                  |«      Š |Šg Šg Šg Št        ‰«      D ]\  \  }	Š‰€@‰r‰j                  ‰ j                  |	   «       Œ)‰j                  ‰ j                  |	   «       ŒHt%        ‰j                  «      ŠŒ^ ˆˆˆfd„}
‰ j+                  ‰‰z   ‰z   «      }ddlm}  |‰ j1                  «       dk(  «      r|S  |
‰ «      }t3        j4                  |«      }t%        |«      t%        t        t        |«      «      «      k7  r~t3        j6                  |j                  |«      }t3        j8                  |«      }t3        j6                  |t3        j:                  |«      «      }|j=                  |j?                  «       |«      }|S )Nc                   ó   — y)Nz#at least one index must be providedr;   r;   r7   r5   rW   z#meta_index_Tensor.<locals>.<lambda>ç  r_   r7   c                   ó   — y)Nz?tensors used as indices must be long, int, byte or bool tensorsr;   r;   r7   r5   rW   z#meta_index_Tensor.<locals>.<lambda>ï  r_   r7   c                  ó"   •— d‰ j                   › �S )Nú)too many indices for tensor of dimension rõ  r¡   s   €r5   rW   z#meta_index_Tensor.<locals>.<lambda>ö  s   ø€ ÐGÈÏ	É	À{ÐS€ r7   c            	      óN   •— d‰j                   › d‰ › d‰j                   › d‰‰z   › �S )NzThe shape of the mask z
 at index z0 does not match the shape of the indexed tensor r'  )rÏ   rƒ   ÚjrS  rŠ   s   €€€€€r5   rW   z#meta_index_Tensor.<locals>.<lambda>û  s<   ø€ Ð"8¸¿¹¸ÀZÐPQÈsð SJØJNÏ*É*ÈÐU_Ð`aÐdeÑ`eÐ_fð!h€ r7   r³   c                  ó<   •— d‰j                   › dt        ‰ «      › d�S )Nrœ  z (got rk   )r•   r´   )r¤   rŠ   s   €€r5   rW   z#meta_index_Tensor.<locals>.<lambda>  s!   ø€ Ð;¸D¿I¹I¸;ÀfÌSÐQXË\ÈNÐZ[Ð\€ r7   r   Frà   Tc                 óÞ   •— ‰‰z   ‰z   }t        | j                  «       «      }dgt        ‰«      z  |t        ‰«      t        | j                  «      t        ‰«      z
   | j	                  ||«      S )zI
        This follows restride_src in TensorAdvancedIndexing.cpp
        r   )rµ   r¸   r´   r‰   r4  )rŠ   r‰   ræ   Úafter_shapeÚbefore_shapeÚreplacement_shapes      €€€r5   Ú_restride_srcz(meta_index_Tensor.<locals>._restride_srcG  so   ø€ ð Ð0Ñ0°;Ñ>ˆÜ�t—{‘{“}Ó%ˆØKLÈ#ÔPSØóQ
ñ K
ˆ”�LÓ!¤C¨¯
©
£O´c¸+Ó6FÑ$FÐGð �‰˜u gÓ.Ð.r7   ©Úguard_size_oblivious) rH   rY   rU  Ú	enumeraterP   r…   rÖ   r2  r—  r´   r†   r•   r¶   r‰   r·   ÚselectÚtorch._refsÚ_refsrµ   r%   rº   rˆ   r  r¦  r‡   r@   Ú3compute_elementwise_output_logical_to_physical_permÚ
apply_permr   Úinvert_permr4  r“   )rŠ   r¤   rÍ  r—  ÚrefsÚstateÚhas_contiguous_subspacerp  Útransposed_indicesrw   r¤  r¿   r¦  Úrestrided_selfÚpermÚ
perm_shaper%  r¡  r¢  rÏ   rƒ   rž  rS  r£  s   ``               @@@@@@@r5   Úmeta_index_Tensorrµ  å  sÕ  ÿø€ ä	‡L�L”�g“Ñ MÔNð &(€FÜ˜gÓ&ó !‰ˆˆ5ØÑÜ�L‰LØ—‘¤§
¡
¬E¯I©I´u·z±zÄ5Ç:Á:ÐNÐNÙYôð �{‰{œuŸz™z¬5¯:©:Ð6Ñ6ØŸ-™-›/�Ü˜“K�Ü×"Ñ"Ø˜Ÿ
™
‘N d§i¡iÑ/ÛSôô ˜uŸz™zÓ*ò 8�AÜ×&Ñ&ØŸ™ A™¨$¯*©*°Q¸±UÑ*;Ñ;÷hôð
 —M‘M '§.¡.°°AÓ"6Õ7ò8ð —‘˜eÖ$à�M‰M˜%Ö ð/!ð0 €GÜ	‡L�LÜˆG‹˜Ÿ	™	Ñ!Ü\ôõ
 äÐ(�4×(Ñ(¨'Ð2Ó3€Gä
ˆg‹,˜Ÿ™Ò
"Ø�‰�tÔô ˆg‹,˜Ÿ™Ó
"ð €EØ#ÐØò 'ˆØ�AŠ:ØÑ Ø‘Ø�aŠZØ‰}Ø‘àÑ Ùð'ð #'Ðñ
 #ØˆØÐÜ! 'Ó*ò 	1‰HˆAˆuØÑ Ø—‘˜A”Ø"×)Ñ)¨%Õ0ð	1ô " 'Ó*ò 	1‰HˆAˆuØ‰}Ø—‘˜A”Ø"×)Ñ)¨%Õ0ð	1ð �|‰|˜DÓ!ˆØ$ˆð !€LØ€KØ#%ÐÜ Ó(ò 2‰
ˆˆUØˆ=Ù Ø×"Ñ" 4§:¡:¨c¡?Õ3à×#Ñ# D§J¡J¨s¡OÕ4ä $ U§[¡[Ó 1Ñð2ö	/ð �.‰.˜Ð(9Ñ9¸KÑGÓ
H€CÝJá˜DŸJ™J›L¨AÑ-Ô.àˆ
ñ
 # 4Ó(€NÜ×DÑDÀ^ÓT€Dô ˆDƒz”Tœ%¤ D£	Ó*Ó+Ò+Ü×%Ñ% c§i¡i°Ó6ˆ
Ü×6Ñ6°zÓBˆ
Ü×%Ñ% j´%×2CÑ2CÀDÓ2IÓJˆ
Ø�n‰n˜SŸX™X›Z¨Ó4ˆØ€Jr7   c                 óÔ   — d }d }d }|
d   r| j                  |j                  «       «      }|
d   r| j                  |j                  «       «      }|
d   r| j                  |«      }|||fS )Nr   r³   rà   ©rˆ   r“   )Úgrad_output_Úinput_Úweight_Úbias_sizes_optr¸   r¼  rx  Ú
transposedr{  rz  Úoutput_maskÚbackend_grad_inputÚbackend_grad_weightÚbackend_grad_biass                 r5   Úmeta_convolution_backwardrÁ  h  sy   € ð  ÐØÐØÐà�1‚~Ø)×3Ñ3°F·K±K³MÓBÐØ�1‚~Ø*×4Ñ4°W·\±\³^ÓDÐØ�1‚~Ø(×2Ñ2°>ÓBÐàÐ 3Ð5FÐGÐGr7   c                ó¸  ‡‡— ‰j                  d«      }‰j                  d«      }| j                  ||f«      } t        j                  ‰j	                  «       dk(  d„ «       t        j                  ‰j	                  «       dk(  d„ «       t        j                  ‰j                  d«      ‰j                  d«      k(  ˆˆfd„«       t        j                  ‰j                  d«      ‰j                  d«      k(  ˆˆfd„«       t        j                  | j                  d«      |k(  xr | j                  d«      |k(  d	„ «       | j                  | j                  «       «      S )
Nr³   rà   r-   c                   ó   — yr4  r;   r;   r7   r5   rW   zmeta_addbmm.<locals>.<lambda>Œ  r_   r7   c                   ó   — yr6  r;   r;   r7   r5   rW   zmeta_addbmm.<locals>.<lambda>�  r_   r7   r   c                  óP   •— d‰ j                  d«      › d‰j                  d«      › �S )Nz8batch1 and batch2 must have same number of batches, got r   r‘   r’   ©r8  r9  s   €€r5   rW   zmeta_addbmm.<locals>.<lambda>�  s.   ø€ ÐJÈ6Ï;É;ÐWXË>ÐJZÐZ_Ð`f×`kÑ`kÐlmÓ`nÐ_oÐp€ r7   c            
      óš   •— d‰ j                  d«      › d‰ j                  d«      › d‰j                  d«      › d‰j                  d«      › d�	S )Nz#Incompatible matrix sizes for bmm (r³   rE   rà   r‘   rk   r’   rÆ  s   €€r5   rW   zmeta_addbmm.<locals>.<lambda>”  sQ   ø€ Ø1°&·+±+¸a³.Ð1AÀÀ6Ç;Á;ÈqÃ>ÐBRð SØ—;‘;˜q“>Ð" ! F§K¡K°£NÐ#3°1ð6ð r7   c                   ó   — y)Nz.self tensor does not match matmul output shaper;   r;   r7   r5   rW   zmeta_addbmm.<locals>.<lambda>›  r_   r7   )r“   rq  rH   rY   rw   rˆ   )rŠ   r8  r9  r?  r>  rA  rB  s    ``    r5   Úmeta_addbmmrÉ  †  s  ù€ ð �;‰;�q‹>€DØ�;‰;�q‹>€DØ�;‰;˜˜d�|Ó$€DÜ	‡L�L�—‘“ Ñ"Ñ$HÔIÜ	‡L�L�—‘“ Ñ"Ñ$HÔIÜ	‡L�LØ�‰�A‹˜&Ÿ+™+ a›.Ñ(Üpôô 
‡L�LØ�‰�A‹˜&Ÿ+™+ a›.Ñ(ô	
ôô 
‡L�LØ�	‰	�!‹˜ÑÒ5 §¡¨1£°Ñ!5Ù@ôð �>‰>˜$Ÿ)™)›+Ó&Ð&r7   )Ú
grad_scaleÚ	found_infc       	         ón   ‡— | |||||fD ])  Št        j                  t        ‰t        «      ˆfd„«       Œ+ y )Nc                  ó    •— dt        ‰ «      › �S ©Nz'exponent must be a tensor list but got ©rl   ©Úls   €r5   rW   z#meta__fused_adam_.<locals>.<lambda>¶  ó   ø€ Ð=¼dÀ1»g¸YÐG€ r7   ©rH   rY   rb   rµ   )rŠ   ÚgradsÚexp_avgsÚexp_avg_sqsÚmax_exp_avg_sqsÚstate_stepsÚlrÚbeta1Úbeta2Úweight_decayÚepsÚamsgradÚmaximizerÊ  rË  rÑ  s                  @r5   Úmeta__fused_adam_rà     s:   ø€ ð& �E˜8 [°/À;ÐOò 
ˆÜ�‰Ü�qœ$ÓÛGõ	
ñ
r7   c       	         ó¼   ‡— | |||||fD ])  Št        j                  t        ‰t        «      ˆfd„«       Œ+ d„ } || «       ||«       ||«       ||«       ||«      fS )Nc                  ó    •— dt        ‰ «      › �S rÎ  rÏ  rÐ  s   €r5   rW   z"meta__fused_adam.<locals>.<lambda>Ð  rÒ  r7   c                 óR   — | D �cg c]  }t        j                  |«      ‘Œ c}S c c}w r2   rP  )Útensor_listr¿  s     r5   Úempty_like_listz)meta__fused_adam.<locals>.empty_like_listÓ  s!   € Ø-8Ö9¨”× Ñ  Õ#Ò9Ð9ùÒ9s   …$rÓ  )rŠ   rÔ  rÕ  rÖ  r×  rØ  rÙ  rÚ  rÛ  rÜ  rÝ  rÞ  rß  rÊ  rË  rå  rÑ  s                   @r5   Úmeta__fused_adamræ  º  ss   ø€ ð& �E˜8 [°/À;ÐOò 
ˆÜ�‰Ü�qœ$ÓÛGõ	
ð
ò:ñ 	˜ÓÙ˜ÓÙ˜Ó!Ù˜Ó$Ù˜Ó(ðð r7   c                 ój  ‡ ‡— t        j                  ‰ j                  «       dk(  d„ «       t        j                  ‰j                  «       dk(  d„ «       t        j                  ‰ j                  t         j                  u ˆ fd„«       t        j                  ‰j                  t         j                  u ˆfd„«       t        j                  ‰ j                  d«      ‰j                  d«      k(  ˆ ˆfd„«       ‰ j                  ‰ j                  d«      ‰j                  d«      ft         j                  ¬	«      S )
Nrà   c                   ó   — y)Nza must be a 2D tensorr;   r;   r7   r5   rW   zmeta__int_mm.<locals>.<lambda>â  r_   r7   c                   ó   — y)Nzb must be a 2D tensorr;   r;   r7   r5   rW   zmeta__int_mm.<locals>.<lambda>ã  r_   r7   c                  ó"   •— d‰ j                   › �S )Nzexpected self to be int8, got r�   )rk  s   €r5   rW   zmeta__int_mm.<locals>.<lambda>æ  ó   ø€ Ð0°·±°	Ð:€ r7   c                  ó"   •— d‰ j                   › �S )Nzexpected mat2 to be int8, got r�   )rl  s   €r5   rW   zmeta__int_mm.<locals>.<lambda>ê  rë  r7   r³   r   c            
      óš   •— d‰ j                  d«      › d‰ j                  d«      › d‰j                  d«      › d‰j                  d«      › d�	S )Nz'Incompatible matrix sizes for _int_mm (r   rE   r³   r‘   rk   r’   ©rk  rl  s   €€r5   rW   zmeta__int_mm.<locals>.<lambda>î  sM   ø€ Ø5°a·f±f¸Q³i°[ÀÀ!Ç&Á&ÈÃ)Àð MØ—6‘6˜!“9�+˜Q˜qŸv™v a›y˜k¨ð,ð r7   r�   )rH   rY   rw   rP   r2  r“   rˆ   r3  rî  s   ``r5   Úmeta__int_mmrï  ß  sÐ   ù€ ô 
‡L�L�—‘“˜A‘Ñ>Ô?Ü	‡L�L�—‘“˜A‘Ñ>Ô?Ü	‡L�LØ	�‰”5—:‘:ÐÛ:ôô 
‡L�LØ	�‰”5—:‘:ÐÛ:ôô 
‡L�LØ	�‰ˆq‹	�Q—V‘V˜A“YÑô	
ôð �;‰;˜Ÿ™˜q›	 1§6¡6¨!£9Ð-´U·[±[ˆ;ÓAÐAr7   c                 óf  ‡ — t        j                  ‰ j                  «       dk(  d„ «       t        j                  ‰ j                  t         j                  u ˆ fd„«       ‰ j                  d«      }‰ j                  d«      dz  }‰ j                  |dz  ||dz  z  d|dz  ft         j                  ¬	«      S )
Nrà   c                   ó   — y©Nzw must be a 2D tensorr;   r;   r7   r5   rW   z2meta__convert_weight_to_int4pack.<locals>.<lambda>ø  r_   r7   c                  ó"   •— d‰ j                   › �S ©Nrë  r�   ©r¿  s   €r5   rW   z2meta__convert_weight_to_int4pack.<locals>.<lambda>û  ó   ø€ Ð.¨q¯w©w¨iÐ8€ r7   r   r³   é   rK  é    r�   )rH   rY   rw   rP   r¼  r“   rˆ   r3  ©r¿  Úinner_k_tilesrù   rS  s   `   r5   Ú meta__convert_weight_to_int4packrû  ö  sž   ø€ ä	‡L�L�—‘“˜A‘Ñ>Ô?Ü	‡L�LØ	�‰”5—;‘;ÐÛ8ôð 	
�‰ˆq‹	€AØ	�‰ˆq‹	�A‰€AØ�;‰;à�‰FØ�- "Ñ$Ñ%ØØ˜QÑð		
ô �k‰kð ó ð r7   c                 óJ  ‡ — t        j                  ‰ j                  «       dk(  d„ «       t        j                  ‰ j                  t         j                  u ˆ fd„«       ‰ j                  d«      }‰ j                  d«      }‰ j                  ||dz  ft         j                  ¬«      S )Nrà   c                   ó   — yrò  r;   r;   r7   r5   rW   z:meta__convert_weight_to_int4pack_for_cpu.<locals>.<lambda>  r_   r7   c                  ó"   •— d‰ j                   › �S ©Nzexpected w to be int32, got r�   rõ  s   €r5   rW   z:meta__convert_weight_to_int4pack_for_cpu.<locals>.<lambda>  rö  r7   r   r³   r�   )rH   rY   rw   rP   r3  r“   rˆ   r¼  rù  s   `   r5   Ú(meta__convert_weight_to_int4pack_for_cpur   
  s   ø€ ä	‡L�L�—‘“˜A‘Ñ>Ô?Ü	‡L�LØ	�‰”5—;‘;ÐÛ8ôð 	
�‰ˆq‹	€AØ	�‰ˆq‹	€AØ�;‰;Ø	
ˆA�‰FˆÜ�k‰kð ó ð r7   c                 ó.  ‡ ‡— t        j                  ‰ j                  «       dk(  d„ «       t        j                  ‰j                  «       dk(  d„ «       t        j                  ‰ j                  t         j                  t         j
                  t         j                  fv ˆ fd„«       t        j                  ‰j                  t         j                  u ˆfd„«       ‰ j                  ‰ j                  d«      ‰j                  d«      dz  ‰ j                  ¬	«      S )
Nrà   c                   ó   — y©Nzx must be a 2D tensorr;   r;   r7   r5   rW   z*meta__weight_int4pack_mm.<locals>.<lambda>  r_   r7   ró  c                   ó   — y)Nzw must be a 4D tensorr;   r;   r7   r5   rW   z*meta__weight_int4pack_mm.<locals>.<lambda>  r_   r7   c                  ó"   •— d‰ j                   › �S ©Nrê  r�   ©rE   s   €r5   rW   z*meta__weight_int4pack_mm.<locals>.<lambda>  ó   ø€ Ð5°a·g±g°YÐ?€ r7   c                  ó"   •— d‰ j                   › �S rÿ  r�   rõ  s   €r5   rW   z*meta__weight_int4pack_mm.<locals>.<lambda>#  rö  r7   r   r÷  r�   )
rH   rY   rw   rP   rL  rM  rN  r3  rˆ   r“   rì  s   ``  r5   Úmeta__weight_int4pack_mmr
    s³   ù€ ä	‡L�L�—‘“˜A‘Ñ>Ô?Ü	‡L�L�—‘“˜A‘Ñ>Ô?Ü	‡L�LØ	�‰”E—M‘M¤5§=¡=´%·.±.ÐAÐAÛ?ôô 
‡L�LØ	�‰”5—;‘;ÐÛ8ôð �;‰;�q—v‘v˜a“y !§&¡&¨£)¨a¡-°q·w±wˆ;Ó?Ð?r7   c                 ó(  ‡ ‡— t        j                  ‰ j                  «       dk(  d„ «       t        j                  ‰j                  «       dk(  d„ «       t        j                  ‰ j                  t         j                  t         j
                  t         j                  fv ˆ fd„«       t        j                  ‰j                  t         j                  u ˆfd„«       ‰ j                  ‰ j                  d«      ‰j                  d«      ‰ j                  ¬«      S )Nrà   c                   ó   — yr  r;   r;   r7   r5   rW   z2meta__weight_int4pack_mm_for_cpu.<locals>.<lambda>*  r_   r7   c                   ó   — yrò  r;   r;   r7   r5   rW   z2meta__weight_int4pack_mm_for_cpu.<locals>.<lambda>+  r_   r7   c                  ó"   •— d‰ j                   › �S r  r�   r  s   €r5   rW   z2meta__weight_int4pack_mm_for_cpu.<locals>.<lambda>.  r  r7   c                  ó"   •— d‰ j                   › �S rô  r�   rõ  s   €r5   rW   z2meta__weight_int4pack_mm_for_cpu.<locals>.<lambda>2  rö  r7   r   r�   )
rH   rY   rw   rP   rL  rM  rN  r¼  rˆ   r“   rì  s   ``  r5   Ú meta__weight_int4pack_mm_for_cpur  (  s¯   ù€ ä	‡L�L�—‘“˜A‘Ñ>Ô?Ü	‡L�L�—‘“˜A‘Ñ>Ô?Ü	‡L�LØ	�‰”E—M‘M¤5§=¡=´%·.±.ÐAÐAÛ?ôô 
‡L�LØ	�‰”5—;‘;ÐÛ8ôð �;‰;�q—v‘v˜a“y !§&¡&¨£)°1·7±7ˆ;Ó;Ð;r7   rk  rl  c                 ó   — | |z   dz
  |z  |z  S r   r;   rî  s     r5   Úkai_roundupr  7  s   € Ø�‰U�Q‰Y˜1Ñ Ñ!Ð!r7   c                 ó  ‡	‡
‡‡‡‡‡‡‡‡‡— | dk(  ry||k(  r(d}d}d}dŠdŠdŠd„ Šˆˆˆˆfd„Šˆfd„} ||||||«      S |dz  d	k(  rC||z  d	k(  r:d}d}d}dŠdŠdŠdŠ	ˆ	ˆˆfd
„}ˆ	ˆ
ˆˆˆˆˆfd„Šd„ Š
ˆ	fd„Šˆ	fd„Š |||||||«      S y y y )Nró  r÷  rK  rà   c                 ó8   — t        ||z  d«      }t        | |«      S )Nró  ©r  )rS  ÚkrÚsrÚkr_sr_roundedup4s       r5   Úkai_k_roundedupz3get_kai_packed_weight_size.<locals>.kai_k_roundedupF  s#   € ô $/¨r°B©w¸Ó#:Ð Ü" 1Ð&6Ó7Ð7r7   c                 óX   •—  ‰| ||«      }|dz  dk(  sJ d«       ‚||dz  ‰z   ‰z   ‰z   z  S )Nrà   r   zk_internal must be evenr;   )	rS  Únrr  r  Ú
k_internalr  Úkai_num_bytes_biasÚkai_num_bytes_multiplier_rhsÚkai_num_bytes_sum_rhss	        €€€€r5   Ú9kai_get_rhs_packed_stride_rhs_pack_nxk_qsi4cxp_qsu4cxs1s0z]get_kai_packed_weight_size.<locals>.kai_get_rhs_packed_stride_rhs_pack_nxk_qsi4cxp_qsu4cxs1s0L  sY   ø€ ñ -¨Q°°BÓ7�
à" Q™¨1Ò,ÐGÐ.GÓGÐ,àØ 1‘_Ø2ñ3à+ñ,ð )ñ)ñð r7   c                 ó>   •— t        | |«      |z  }| ‰||||«      z  S r2   r  )rù   rS  r  r  r  Únum_rowsr   s         €r5   Ú7kai_get_rhs_packed_size_rhs_pack_nxk_qsi4cxp_qsu4cxs1s0z[get_kai_packed_weight_size.<locals>.kai_get_rhs_packed_size_rhs_pack_nxk_qsi4cxp_qsu4cxs1s0Z  s6   ø€ ô ' q¨"Ó-°Ñ3�ð ÙOØ˜2˜r 2óñðr7   rø  r   c                 ó|   •— ||z  dk(  sJ ‚|‰	z  dk(  sJ ‚|‰z  dk(  sJ ‚t        | |«      |z  }| ‰|||||«      z  S ra  r  )
rù   rS  r  r  r  Úblr"  Úkai_bl_multiple_ofÚ;kai_get_rhs_packed_stride_rhs_pack_nxk_qsi4c32p_qsu4c32s1s0Úkai_nr_multiple_ofs
          €€€r5   Ú9kai_get_rhs_packed_size_rhs_pack_nxk_qsi4c32p_qsu4c32s1s0z]get_kai_packed_weight_size.<locals>.kai_get_rhs_packed_size_rhs_pack_nxk_qsi4c32p_qsu4c32s1s0r  sp   ø€ ð ˜R™ A’~Ð%�~ØÐ/Ñ/°AÒ5Ð5Ð5ØÐ/Ñ/°AÒ5Ð5Ð5ä& q¨"Ó-°Ñ3�ð ÙQØ˜2˜r 2 róñðr7   c                 óŽ   •— ||z  dk(  sJ ‚|‰
z  dk(  sJ ‚|‰z  dk(  sJ ‚ ‰	«       } ‰| |«      } ‰||«      }|||z  ‰z   ‰z   z  S ra  r;   )rS  r  r  r  r%  Únum_bytes_multiplier_rhsÚnum_blocks_per_rowÚnum_bytes_per_blockr&  Ú#kai_get_bf16_datatype_size_in_bytesr(  Úkai_num_blocks_per_rowr  Úkai_num_bytes_per_blockr  s           €€€€€€€r5   r'  z_get_kai_packed_weight_size.<locals>.kai_get_rhs_packed_stride_rhs_pack_nxk_qsi4c32p_qsu4c32s1s0‚  s�   ø€ ð ˜R™ A’~Ð%�~ØÐ/Ñ/°AÒ5Ð5Ð5ØÐ/Ñ/°AÒ5Ð5Ð5ñ ,OÓ+PÐ(Ù%;¸A¸rÓ%BÐ"Ù&=ØÐ0ó'Ð#ð Ø(Ð+=Ñ=Ø+ñ,à(ñ)ñð r7   c                   ó   — y)Nrà   r;   r;   r7   r5   r.  zGget_kai_packed_weight_size.<locals>.kai_get_bf16_datatype_size_in_bytes˜  s   € Ør7   c                 ó6   •— |‰z  dk(  sJ ‚t        | |«      |z  S ra  r  )rS  r%  r&  s     €r5   r/  z:get_kai_packed_weight_size.<locals>.kai_num_blocks_per_row›  s)   ø€ ØÐ/Ñ/°AÒ5Ð5Ð5Ü" 1 bÓ)¨RÑ/Ð/r7   c                 ó(   •— | ‰z  dk(  sJ ‚| dz  |z   S )Nr   rà   r;   )r%  r+  r&  s     €r5   r0  z;get_kai_packed_weight_size.<locals>.kai_num_bytes_per_blockŸ  s'   ø€ ØÐ/Ñ/°AÒ5Ð5Ð5Ø˜a™Ð#;Ñ;Ð;r7   r;   )Ún_bitsrj  ÚKÚ	groupsizeÚkai_nrÚkai_krÚkai_srr#  r)  r&  r.  r'  r   r  r(  r/  r  r  r0  r  s            @@@@@@@@@@@r5   Úget_kai_packed_weight_sizer:  ;  sç   ÿú€ Ø�‚{Ø˜Š>àˆFØˆFØˆFØ$%Ð!Ø+,Ð(Ø!"Ðò8÷ô
ñ KØ�1�f˜f fóð ð ˜‰^˜qÒ  Q¨¡]°aÒ%7ØˆFØˆFØˆFØ$%Ð!Ø!"ÐØ!"ÐØ!#Ðö÷ ò ò,ô0ô<ñ MØ�1�f˜f f¨ióð ðu &8Ð ð[ r7   c                 óV  ‡ — t        j                  ‰ j                  t         j                  u ˆ fd„«       t         j                  j
                  j                  «       rŒ||k(  r|j                  t         j                  k(  s2||k  re|dz  dk(  r]||z  dk(  rU|j                  t         j                  k(  r8t        d|||«      }‰ j                  t        |«      t         j                  ¬«      S ‰ j                  «       |j                  «       z   }‰ j                  |t         j                  ¬«      S )Nc                  ó"   •— d‰ j                   › �S rô  r�   )Úweightss   €r5   rW   z2meta__dyn_quant_pack_4bit_weight.<locals>.<lambda>®  s   ø€ Ð.¨w¯}©}¨oÐ>€ r7   rø  r   ró  r�   )rH   rY   rP   r¼  ÚbackendsÚkleidiaiÚis_availablerL   rN  r:  rˆ   rÖ   r‡   )r=  Úscales_zerosr-  Ú
block_sizeÚin_featuresÚout_featuresÚpacked_weight_sizes   `      r5   Ú meta__dyn_quant_pack_4bit_weightrF  ¨  sõ   ø€ ô 
‡L�LØ�‰œŸ™Ð$Û>ôô ‡~�~×Ñ×+Ñ+Ô-Ø	�{Ò	" |×'9Ñ'9¼U¿[¹[Ò'Hà˜Ò$Ø˜R‘ 1Ò$Ø˜jÑ(¨AÒ-Ø×"Ñ"¤e§n¡nÒ4ô 8Øˆ|˜[¨*ó
Ðð × Ñ ¤Ð%7Ó!8ÄÇÁÐ ÓLÐLØ Ÿ™›¨<×+=Ñ+=Ó+?Ñ?ÐØ×ÑÐ/´u·{±{ÐÓCÐCr7   c                 ó  ‡ — t        j                  ‰ j                  «       dk(  d„ «       t        j                  ‰ j                  t         j                  fv ˆ fd„«       ‰ j                  d«      }‰ j                  ||‰ j                  ¬«      S )Nrà   c                   ó   — y)Nzinput must be a 2D tensorr;   r;   r7   r5   rW   z-meta__dyn_quant_matmul_4bit.<locals>.<lambda>É  r_   r7   c                  ó"   •— d‰ j                   › �S )Nzexpected input to be f32, got r�   )Úinps   €r5   rW   z-meta__dyn_quant_matmul_4bit.<locals>.<lambda>Ì  s   ø€ Ð0°·±°Ð<€ r7   r   r�   )rH   rY   rw   rP   rL  r“   rˆ   )rJ  Úpacked_weightsrB  rC  rD  r•  s   `     r5   Úmeta__dyn_quant_matmul_4bitrL  Á  sg   ø€ ô 
‡L�L�—‘“˜a‘Ñ!DÔEÜ	‡L�LØ�	‰	”e—m‘m�_Ð$Û<ôð 	�‰�‹€AØ�=‰=˜˜L°·	±	ˆ=Ó:Ð:r7   c                 ó(  ‡ ‡— t        j                  ‰ j                  «       dk(  d„ «       t        j                  ‰ j                  t         j                  t         j
                  t         j                  fv ˆ fd„«       t        j                  ‰j                  «       dk(  d„ «       t        j                  ‰j                  t         j                  u ˆfd„«       ‰ j                  ‰ j                  d«      ‰j                  d«      ‰ j                  ¬«      S )Nrà   c                   ó   — yr  r;   r;   r7   r5   rW   z*meta__weight_int8pack_mm.<locals>.<lambda>Ô  r_   r7   c                  ó"   •— d‰ j                   › �S r  r�   r  s   €r5   rW   z*meta__weight_int8pack_mm.<locals>.<lambda>×  r  r7   c                   ó   — yrò  r;   r;   r7   r5   rW   z*meta__weight_int8pack_mm.<locals>.<lambda>Ù  r_   r7   c                  ó"   •— d‰ j                   › �S )Nzexpected w to be int8, got r�   rõ  s   €r5   rW   z*meta__weight_int8pack_mm.<locals>.<lambda>Ü  s   ø€ Ð-¨a¯g©g¨YÐ7€ r7   r   r�   )
rH   rY   rw   rP   rL  rM  rN  r2  rˆ   r“   )rE   r¿  Úq_scaless   `` r5   Úmeta__weight_int8pack_mmrS  Ò  s¯   ù€ ä	‡L�L�—‘“˜A‘Ñ>Ô?Ü	‡L�LØ	�‰”E—M‘M¤5§=¡=´%·.±.ÐAÐAÛ?ôô 
‡L�L�—‘“˜A‘Ñ>Ô?Ü	‡L�LØ	�‰”5—:‘:ÐÛ7ôð �;‰;�q—v‘v˜a“y !§&¡&¨£)°1·7±7ˆ;Ó;Ð;r7   c                 óf  ‡ ‡‡— t        j                  ‰ j                  «       dk\  ˆ fd„«       t        j                  ‰j                  «       dk\  ˆfd„«       t        j                  ‰ j                  d«      ‰j                  d«      k(  ˆ ˆfd„«       t        j                  t	        j
                  ‰ j                  «      d„ «       t        j                  t	        j
                  ‰j                  «      d„ «       t        j                  |dk\  d	„ «       t        j                  ‰d
v ˆfd„«       ‰ j                  d«      }‰j                  d«      }‰ j                  d d }‰j                  d d }t        t        j                  ||«      «      }|j                  ||g«       ‰ j                  |«      S )Nrà   c                  ó,   •— d‰ j                  «       › d�S )Nz1cdist only supports at least 2D tensors, X1 got: ré  r�   )Úx1s   €r5   rW   z$meta_cdist_forward.<locals>.<lambda>å  ó   ø€ ÐCÀBÇFÁFÃHÀ:ÈQÐO€ r7   c                  ó,   •— d‰ j                  «       › d�S )Nz1cdist only supports at least 2D tensors, X2 got: ré  r�   )Úx2s   €r5   rW   z$meta_cdist_forward.<locals>.<lambda>é  rW  r7   rŒ   c                  óP   •— d‰ j                  d«      › d‰j                  d«      › �S )Nz4X1 and X2 must have the same number of columns. X1: rŒ   z X2: r’   )rV  rY  s   €€r5   rW   z$meta_cdist_forward.<locals>.<lambda>í  s,   ø€ ÐFÀrÇwÁwÈrÃ{ÀmÐSXÐY[×Y`ÑY`ÐacÓYdÐXeÐf€ r7   c                   ó   — y)Nz=cdist only supports floating-point dtypes, X1 got: {x1.dtype}r;   r;   r7   r5   rW   z$meta_cdist_forward.<locals>.<lambda>ñ  r_   r7   c                   ó   — y)Nz=cdist only supports floating-point dtypes, X2 got: {x2.dtype}r;   r;   r7   r5   rW   z$meta_cdist_forward.<locals>.<lambda>õ  r_   r7   r   c                   ó   — y)Nz)cdist only supports non-negative p valuesr;   r;   r7   r5   rW   z$meta_cdist_forward.<locals>.<lambda>÷  r_   r7   ©Nr³   rà   c                  ó   •— d‰ › �S )Nz%possible modes: None, 1, 2, but was: r;   )Úcompute_modes   €r5   rW   z$meta_cdist_forward.<locals>.<lambda>ú  s   ø€ Ð7¸°~ÐF€ r7   r±  )rH   rY   rw   r“   r@   Úis_float_dtyperP   r‰   rµ   Úbroadcast_shapesÚextendrˆ   )	rV  rY  r(  r`  Úr1Úr2Úbatch_tensor1Úbatch_tensor2rU  s	   `` `     r5   Úmeta_cdist_forwardrh  á  sJ  ú€ ä	‡L�LØ
�‰‹�A‰ÛOôô 
‡L�LØ
�‰‹�A‰ÛOôô 
‡L�LØ
�‰�‹�r—w‘w˜r“{Ñ"Üfôô 
‡L�LÜ×Ñ˜RŸX™XÓ&ÙOôô 
‡L�LÜ×Ñ˜RŸX™XÓ&ÙOôô 
‡L�L��a‘ÑLÔMÜ	‡L�LØ˜Ð$ÛFôð 
�‰�‹€BØ	�‰�‹€BØ—H‘H˜S˜b�M€MØ—H‘H˜S˜b�M€MÜœ×.Ñ.¨}¸mÓLÓM€LØ×Ñ˜˜R˜Ô!Ø�<‰<˜Ó%Ð%r7   c                 ó4  — |j                   d   }|j                   d   }|j                   d   }|j                   d d }|j                   d d }	t        t        j                  ||	«      «      }
|
j	                  «       }|j                  ||g«       t        j                  |
«      }|dk(  s|dk(  s
|dk(  s|dk(  rt        j                  |«      S |t        |j                   «      k7  r|j                  |«      }t        j                  |t        j                  ¬«      S )NrŒ   r±  r   r›   )r‰   rµ   rH   rb  Úcopyrc  ÚmathÚprodÚ
zeros_likerq  rŸ   r    )r,  rV  rY  r(  ÚcdistÚc1rd  re  rf  rg  rm  Útensor1_expand_sizeÚbatch_products                r5   Úmeta_cdist_backwardrr    sô   € ð 
�‰�"‰€BØ	�‰�"‰€BØ	�‰�"‰€BØ—H‘H˜S˜b�M€MØ—H‘H˜S˜b�M€MÜ¤× 6Ñ 6°}ÀmÓ TÓUÐØ.×3Ñ3Ó5ÐØ×Ñ  B˜xÔ(Ü—I‘IÐ2Ó3€MØ	ˆQ‚w�"˜’'˜R 1šW¨¸Ò(:Ü×Ñ Ó#Ð#Øœd 2§8¡8›nÒ,Ø�Y‰YÐ*Ó+ˆÜ×Ñ˜B¬e×.EÑ.EÔFÐFr7   c	                 ó  ‡ ‡‡‡‡‡— t        j                  ‰j                  t         j                  t         j                  fv ˆfd„«       t        j                  ‰j                  t         j                  t         j                  fv ˆfd„«       t        j                  t        j                  ‰ j                  «      ˆ fd„«       ‰j                  d«      }	|rt        j                  |	dk\  d„ «       |	dz  }	‰ j                  |	‰ j                  d«      «      }
‰�}t        j                  |t        k(  d„ «       t        j                  ‰j                  dk(  ˆfd„«       t        j                  ‰j                  «       ‰j                  «       k(  ˆˆfd	„«       ˆfd
„Šd„ Šˆˆfd„}t        ‰«      dk7  r|‰j                  ‰j                  d«      «      }‰j                  ‰j                  «       «      }|t        k(  r"‰j                  |	‰ j                  d«      «      }nè‰j                  d«      }nÖ |‰ ‰|
|«      }|t        t        fv s|s!‰j                  ‰j                  d«      «      }n‰j                  d«      }‰j                  |	«      }‰j                  d   }|t        k(  rA|rt        j                  |dk\  d„ «       |dz  }‰j                  |‰ j                  d   «      }n‰j                  |j                  «       «      }|
|||fS )Nc                  ó"   •— d‰ j                   › �S )Nz(expected indices to be long or int, got r�   )r¤   s   €r5   rW   z$meta_embedding_bag.<locals>.<lambda>*  ó   ø€ Ð:¸7¿=¹=¸/ÐJ€ r7   c                  ó"   •— d‰ j                   › �S )Nz(expected offsets to be long or int, got r�   )re  s   €r5   rW   z$meta_embedding_bag.<locals>.<lambda>.  ru  r7   c                  ó"   •— d‰ j                   › �S )Nz/expected weight to be floating point type, got r�   )r+  s   €r5   rW   z$meta_embedding_bag.<locals>.<lambda>2  s   ø€ ÐAÀ&Ç,Á,ÀÐP€ r7   r   r³   c                   ó   — y©Nz1include_last_offset: numBags should be at least 1r;   r;   r7   r5   rW   z$meta_embedding_bag.<locals>.<lambda>9  r_   r7   c                   ó   — y)Nz@embedding_bag: per_sample_weights only supported with mode='sum'r;   r;   r7   r5   rW   z$meta_embedding_bag.<locals>.<lambda>B  r_   r7   c                  ó$   •— d‰ j                   › d�S )Nz1expected per_sample_weights to be 1D tensor, got ré  rõ  )Úper_sample_weightss   €r5   rW   z$meta_embedding_bag.<locals>.<lambda>F  s   ø€ ÐGÐHZ×H_ÑH_ÐG`Ð`aÐb€ r7   c                  óN   •— d‰j                  «       › d‰ j                  «       › d�S )Nz%expected per_sample_weights.numel() (z$ to be the same as indices.numel() (rk   ©r‡   )r¤   r|  s   €€r5   rW   z$meta_embedding_bag.<locals>.<lambda>J  s4   ø€ Ø7Ð8J×8PÑ8PÓ8RÐ7Sð T6Ø6=·m±m³oÐ5FÀaðIð r7   c                 óD   •—  ‰| ||«      xr |j                  d«      dk(  S ©Nr   r³   ©r¸   )r  rZ  rð   Úpadding_idxÚis_fast_path_index_selects       €r5   Úis_fast_path_index_select_scalez;meta_embedding_bag.<locals>.is_fast_path_index_select_scaleP  s(   ø€ á% c¨6°;Ó?ÒXÀEÇLÁLÐQRÃOÐWXÑDXð	
r7   c                 óà   — | j                   t        j                  k(  xs | j                   t        j                  k(  xr1 | j	                  d«      dk(  xr |j	                  d«      dk(  xr |dk  S ©Nr³   r   )rP   rH   rL   rJ   r¸   )r  rð   r‚  s      r5   rƒ  z5meta_embedding_bag.<locals>.is_fast_path_index_selectU  sb   € à�Y‰Yœ%Ÿ+™+Ñ%Ò@¨¯©´e·j±jÑ)@ò  Ø—
‘
˜1“ Ñ"ò à—‘˜aÓ  AÑ%ò ð ˜a‘ð		
r7   c                 ó2   •— |� ‰| |||«      S  ‰| ||«      S r2   r;   )r  rZ  rð   r‚  rƒ  r„  s       €€r5   Úis_fast_pathz(meta_embedding_bag.<locals>.is_fast_path]  s)   ø€ ØÐÙ2°3¸¸vÀ{ÓSÐSá,¨S°&¸+ÓFÐFr7   Úcpuc                   ó   — yry  r;   r;   r7   r5   rW   z$meta_embedding_bag.<locals>.<lambda>w  r_   r7   )rH   rY   rP   r…   rÖ   r@   ra  r“   rˆ   ÚMODE_SUMr•   r‡   ré   ÚMODE_MAXÚ	MODE_MEANr‰   )r+  r¤   re  Úscale_grad_by_freqrJ  Úsparser|  Úinclude_last_offsetr‚  Únum_bagsrð   rˆ  Ú
offset2bagÚbag_sizeÚmax_indicesÚfast_path_sumÚnumBagsrƒ  r„  s   ```   `          @@r5   Úmeta_embedding_bagr—    s}  ý€ ô 
‡L�LØ�‰œ%Ÿ*™*¤e§i¡iÐ0Ð0ÛJôô 
‡L�LØ�‰œ%Ÿ*™*¤e§i¡iÐ0Ð0ÛJôô 
‡L�LÜ×Ñ˜VŸ\™\Ó*ÛPôð
 �|‰|˜A‹€HÙÜ�‰Ø˜‰MÙGô	
ð 	�A‰ˆà×Ñ˜h¨¯©°A«Ó7€FàÐ%Ü�‰Ø”HÑÙVô	
ô 	�‰Ø×#Ñ# qÑ(Ûbô	
ô 	�‰Ø×$Ñ$Ó&¨'¯-©-«/Ñ9ôô	
ô
ò

õGô �7Ó˜uÒ$Ø×&Ñ& w§|¡|°A£Ó7ˆ
Ø×$Ñ$ W§\¡\£^Ó4ˆØ”8ÒØ!×+Ñ+¨H°f·k±kÀ!³nÓE‰Kà!×+Ñ+¨AÓ.‰Ká$ VÐ-?ÀÈÓUˆØ”IœxÐ(Ñ(±Ø ×*Ñ*¨7¯<©<¸«?Ó;‰Jà ×*Ñ*¨1Ó-ˆJØ×$Ñ$ XÓ.ˆà—-‘- Ñ"ˆØ”8ÒÙ"Ü—‘Ø˜q‘LÙOôð ˜1‘�Ø!×+Ñ+¨G°V·\±\À!±_ÓE‰Kà!×+Ñ+¨H¯M©M«OÓ<ˆKØ�:˜x¨Ð4Ð4r7   c                 óŽ   — t        | ||g|¢­Ž \  }}}}t        |«      dk(  r|j                  |j                  «       «      }||||fS )Nr‰  )r—  ré   rˆ   r“   )r+  r¤   re  rB   rð   r’  r“  r”  s           r5   Úmeta_embedding_bag_forward_onlyr™  €  sX   € ä0BØ�˜ð1Ø#'ò1Ñ-€FˆJ˜ +ô �7Ó˜uÒ$Ø×$Ñ$ W§\¡\£^Ó4ˆØ�:˜x¨Ð4Ð4r7   c                 ó¶   — |r|S | j                   j                  s| j                   j                  r| j                   S |rt        j                  S | j                   S r2   )rP   rè   rÛ   rH   r…   )rË   rP   Úpromote_int_to_longs      r5   Ú_get_reduction_dtyperœ  Š  sD   € áØˆà‡{�{×$Ò$¨¯©×(>Ò(>Ø�{‰{ÐÙ	Ü�z‰zÐà�;‰;Ðr7   r�   c                óž   — t        | |d¬«      }t        j                  | j                  |«      }t	        | ||«      }| j                  ||¬«      S )NT)r›  r�   )rœ  r@   ry  r‰   rz  rˆ   )rË   rp  r|  rP   rÄ  rU  s         r5   Úmeta_nansumrž  —  sI   € ô (¨¨uÈ$ÔO€LÜ×Ñ §¡¨TÓ2€DÜ+¨E°4¸ÓA€LØ�?‰?˜<¨|ˆ?Ó<Ð<r7   c           	      ó¤   — t        j                  | j                  t        t	        | j                  «       «      «      «      }| j                  |«      S r2   )r@   rq  r‰   rX   r¶   rw   rˆ   )rË   rU  s     r5   Úmeta_medianr      s<   € ä×7Ñ7Ø�‰”Uœ5 §¡£Ó-Ó.ó€Lð �?‰?˜<Ó(Ð(r7   c                 ó  — t        | «      dk(  rt        j                  d«       t        j                  | j                  |f«      }t        | ||«      }| j                  |«      | j                  |t        j                  ¬«      fS )Nrä   zmedian CUDA with indices outputr�   )	ré   r@   Úalert_not_deterministicry  r‰   rz  rˆ   rH   r…   )rË   rw   r|  rU  s       r5   Úmeta_median_mode_dimr£  ¨  sp   € ô �5Ó˜VÒ#Ü×%Ñ%Ð&GÔHÜ
×
Ñ
˜uŸ{™{¨S¨FÓ
3€CÜ+¨E°3¸Ó@€Là�‰˜Ó%Ø�‰˜¬E¯J©JˆÓ7ðð r7   c                 ó   — | S r2   r;   r¡   s    r5   Úmeta_logical_not_r¥  ¾  rL  r7   c                 óR  — t        j                  t        |«      | j                  «       k\  d„ «       t        |«      | j                  «       z
  }d|z  t	        | j
                  «      z   }t        t        |«      «      D �cg c]  }||   ||   z  ‘Œ }}| j                  |«      S c c}w )Nc                   ó   — y)NzZNumber of dimensions of repeat dims can not be smaller than number of dimensions of tensorr;   r;   r7   r5   rW   zmeta_repeat.<locals>.<lambda>Ç  r_   r7   rÝ  )rH   rY   r´   rw   rX   r‰   r¶   rˆ   )rŠ   rˆ  Únum_new_dimensionsÚpadded_sizerÏ   Útarget_sizes         r5   Úmeta_repeatr«  Ã  s‘   € ä	‡L�LÜˆG‹˜Ÿ™›
Ñ"Ùlôô ˜W›¨¯©«
Ñ2ÐØÐ+Ñ+¬e°D·J±JÓ.?Ñ?€KÜ8=¼cÀ'»lÓ8KÖL°1�;˜q‘> G¨A¡JÓ.ÐL€KÐLØ�>‰>˜+Ó&Ð&ùò Ms   Á?B$c                 ó   — | S r2   r;   r¡   s    r5   Ú
meta_zero_r­  Ò  rL  r7   c                 óz   — t        |t        j                  «      r t        | j                  |j                  «       | S r2   )rb   rH   r   r[   r‰   ©rŠ   r”   s     r5   Úmeta_binop_inplacer°  ×  s)   € ô �%œŸ™Ô&Ü §
¡
¨E¯K©KÔ8Ø€Kr7   c                 óø   — d„ }d„ }d„ } || «      r ||«      rt        d«      ‚ || «      r ||«      st        d«      ‚t        |t        j                  «      r t	        | j
                  |j
                  «       | S )a*  
    Some checks for inplace ops.
    Checks for promotion rules for some dtypes.
    int.add/sub_(float) and bool.add/sub_(others) are rejected.
    Promoting in these in-place operations would require reallocating
    and copying over elements, hence not allowed.
    Checks for alpha param.
    c                 ó€   — t        | t        «      rt        j                  | j                  «      S t        | t
        «      S r2   )rb   r   r@   r,  rP   r   ©re   s    r5   Úis_integericz.meta_binop_inplace_alpha.<locals>.is_integericú  s.   € Ü�cœ:Ô&Ü×)Ñ)¨#¯)©)Ó4Ð4ä˜c¤7Ó+Ð+r7   c                 ó€   — t        | t        «      rt        j                  | j                  «      S t        | t
        «      S r2   )rb   r   r@   ra  rP   r   r³  s    r5   Ú
is_floaticz,meta_binop_inplace_alpha.<locals>.is_floatic   s.   € Ü�cœ:Ô&Ü×'Ñ'¨¯	©	Ó2Ð2ä˜c¤9Ó-Ð-r7   c                 ó€   — t        | t        «      rt        j                  | j                  «      S t        | t
        «      S r2   )rb   r   r@   Úis_boolean_dtyperP   r   r³  s    r5   Úis_booleanicz.meta_binop_inplace_alpha.<locals>.is_booleanic  s.   € Ü�cœ:Ô&Ü×)Ñ)¨#¯)©)Ó4Ð4ä˜c¤8Ó,Ð,r7   z]Promotion of int.add/sub_(float) in in-place ops are not possible due to element size change.z_Promotion of book.add/sub_(others) in in-place ops are not possible due to element size change.)r  rb   rH   r   r[   r‰   )rŠ   r”   r>  r´  r¶  r¹  s         r5   Úmeta_binop_inplace_alpharº  è  sz   € ò$,ò.ò-ñ �DÔ™j¨Ô/ÜØkó
ð 	
ñ
 �DÔ¡,¨uÔ"5ÜØmó
ð 	
ô �%œŸ™Ô&Ü §
¡
¨E¯K©KÔ8Ø€Kr7   c                 ó8   — t        | t        j                  ¬«      S ©N©r=   ©rF   r   rA   )rŠ   Úkwargss     r5   Ú
meta_roundrÀ    s   € äØÔ<×DÑDôð r7   c                 ól  ‡ ‡‡— t        j                  t        j                  ‰j                  «      ˆ ˆfd„«       t        ‰t         j                  «      r8t        j                  t        j                  ‰j                  «      ˆ ˆfd„«       y t        j                  t        ‰t        «      ˆ ˆfd„«       y )Nc                  ó&   •— ‰ › d‰j                   › �S )Nz7: Expected input tensor to have an integral dtype. Got r�   )rÎ  rŠ   s   €€r5   rW   z#shift_dtype_check.<locals>.<lambda>'  s   ø€ �7�)ÐRÐSW×S]ÑS]ÐR^Ð_€ r7   c                  ó&   •— ‰ › d‰j                   › �S )Nz6: Expected shift value to have an integral dtype. Got r�   ©rÎ  rŽ  s   €€r5   rW   z#shift_dtype_check.<locals>.<lambda>,  s   ø€ �w�iÐUÐVY×V_ÑV_ÐU`Ða€ r7   c                  ó   •— ‰ › d‰› �S )Nz): Expected shift value to be an int. Got r;   rÄ  s   €€r5   rW   z#shift_dtype_check.<locals>.<lambda>1  s   ø€ �w�iÐHÈÈÐN€ r7   )rH   rY   r@   r,  rP   rb   r   r   )rÎ  rŠ   rŽ  s   ```r5   Úshift_dtype_checkrÆ  $  sp   ú€ Ü	‡L�LÜ×Ñ˜tŸz™zÓ*Ü_ôô �#”u—|‘|Ô$Ü�‰Ü×"Ñ" 3§9¡9Ó-Üaõ	
ô
 	�‰Ü�sœGÓ$ÜNõ	
r7   c                 óT   — t        d| |«       t        | |t        j                  ¬«      S )NÚrshiftr½  ©rÆ  rF   r   rA   r¯  s     r5   Úmeta_rshiftsrÊ  5  ó)   € ä�h  eÔ,ÜØˆeÔ$C×$KÑ$Kôð r7   c                 óT   — t        d| |«       t        | |t        j                  ¬«      S )NÚlshiftr½  rÉ  r¯  s     r5   Úmeta_lshiftsrÎ  =  rË  r7   c                 ó8   — | j                  | j                  «      S r2   r³  r¡   s    r5   Ú	meta_zerorÐ  E  s   € à�>‰>˜$Ÿ*™*Ó%Ð%r7   c                 ó   — | S r2   r;   ©rŠ   rŽ  s     r5   Ú
meta_fill_rÓ  J  rL  r7   c                 ó,   — t        j                  | «      S r2   rP  rÒ  s     r5   Ú	meta_fillrÕ  O  ó   € ä×Ñ˜DÓ!Ð!r7   c                 ó   — | S r2   r;   r¡   s    r5   Ú
meta_relu_rØ  T  rL  r7   c                 ó:   — t        | |t        j                  ¬«      S r¼  r¾  )rŠ   r”   r>  s      r5   Úmeta__add_relurÚ  Y  s   € ô ØˆeÔ$C×$KÑ$Kôð r7   c                 ó,   — t        j                  | «      S r2   rP  ©rŠ   ÚnoiseÚlowerrØ  r•  rö   s         r5   Úmeta_rrelu_with_noiserß  a  s   € ô
 ×Ñ˜DÓ!Ð!r7   c                 óV   — t        j                  | «      t        j                  |«      fS r2   rP  rÜ  s         r5   Ú meta_rrelu_with_noise_functionalrá  i  s%   € ô ×Ñ˜DÓ!¤5×#3Ñ#3°EÓ#:Ð:Ð:r7   c                 ó   — | S r2   r;   )rŠ   rÞ  rØ  r•  rö   s        r5   Úmeta_rrelu_with_noise_rã  p  s	   € ð €Kr7   c                 ó,   — t        j                  | «      S r2   rP  ©rŠ   r¤   r£   Ú
accumulates       r5   Úmeta_index_putrç  w  rÖ  r7   c                 óF   — t        | j                  |j                  «       | S r2   ©r[   r‰   )rŠ   rb  Úvalues      r5   Úmeta_masked_fill_rë  |  s   € ä˜DŸJ™J¨¯
©
Ô3Ø€Kr7   c                 óŠ   — | j                  | j                  «       «      j                  t        j                  | «      ¬«      }|S r«   )rˆ   r“   r  r@   rŽ  )rŠ   rb  rZ  Úmasked_scales       r5   Úmeta__masked_scalerî  ‚  s<   € à—>‘> $§)¡)£+Ó.×1Ñ1Ü×1Ñ1°$Ó7ð 2ó €Lð Ðr7   c                 óî   ‡ ‡— t        j                  |j                  t         j                  t         j                  fv d„ «       t        j                  ‰ j                  ‰j                  k(  ˆ ˆfd„«       ‰ S )Nc                   ó   — y)NzMask must be bool or uint8r;   r;   r7   r5   rW   z&meta_masked_scatter_.<locals>.<lambda>�  r_   r7   c                  ó<   •— d‰ j                   › d‰j                   › �S )NzEmasked_scatter: expected self and source to have same dtypes but got r‘   r�   )rŠ   rX  s   €€r5   rW   z&meta_masked_scatter_.<locals>.<lambda>‘  s"   ø€ ð ØŸ*™*˜ U¨6¯<©<¨.ð:€ r7   )rH   rY   rP   rU  r¼  )rŠ   rb  rX  s   ` `r5   Úmeta_masked_scatter_rò  Š  sU   ù€ ä	‡L�LØ�
‰
”u—z‘z¤5§;¡;Ð/Ð/Ñ1Uôô 
‡L�LØ�
‰
�f—l‘lÑ"ô	:ôð
 €Kr7   c                 ó„   — t        | |«      \  } }t        j                  | t        j                  ¬«      }t	        |||«      S r«   )r%   rH   rŸ   r    rò  )rŠ   rb  rX  rð   s       r5   Úmeta_masked_scatterrô  —  s;   € ô " $¨Ó-�J€Dˆ$Ü×Ñ˜d´%×2IÑ2IÔJ€FÜ ¨¨fÓ5Ð5r7   c                 ó$   — | j                  |«      S r2   rs  )rŠ   rb  r5  s      r5   Úmeta_masked_scatter_backwardrö  Ÿ  s   € à�>‰>˜%Ó Ð r7   c                 ó   — | S r2   r;   rå  s       r5   Úmeta_index_put_rø  ¤  rL  r7   c                 ó8   — | j                  | j                  «      S r2   )Úviewr‰   r¡   s    r5   Ú
meta_aliasrû  ©  s   € à�9‰9�T—Z‘ZÓ Ð r7   c                 óH  ‡‡‡	‡
‡— t        j                  | j                  «       dk(  d„ «       t        j                  |j                  «       dk(  d„ «       | j                  «       }|j                  «       Š|d   Š	|d   Š
|d   }‰d   }‰	||fŠt        j                  ‰d   ‰	k(  xr ‰d   ‰
k(  ˆˆ	ˆ
fd„«       |j	                  ‰«      }|sU‰�St        j                  ‰j                  «       dk(  d„ «       t        j                  ‰j                  «       ‰k(  ˆˆfd	„«       |S )
Nr-   c                   ó   — yr4  r;   r;   r7   r5   rW   z)common_meta_baddbmm_bmm.<locals>.<lambda>¯  r_   r7   c                   ó   — yr6  r;   r;   r7   r5   rW   z)common_meta_baddbmm_bmm.<locals>.<lambda>°  r_   r7   r   rà   r³   c            	      ó.   •— d‰› d‰› d‰ d   › d‰ d   › d�	S r;  r;   r=  s   €€€r5   rW   z)common_meta_baddbmm_bmm.<locals>.<lambda>½  s5   ø€ ÐRÐSUÐRVØ
ÐÐ˜l¨<¸©?Ð*;¸2¸lÈ1¹oÐ=NÈbðR€ r7   c                   ó   — y)Nzself must be a 3D tensorr;   r;   r7   r5   rW   z)common_meta_baddbmm_bmm.<locals>.<lambda>Æ  r_   r7   c                  ó0   •— d‰ › d‰j                  «       › �S )Nz*Expected an input tensor shape with shape z but got shape: r’   )rS  Úself_baddbmms   €€r5   rW   z)common_meta_baddbmm_bmm.<locals>.<lambda>É  s!   ø€ Ð@ÀÀÐM]Ð^j×^oÑ^oÓ^qÐ]rÐs€ r7   )rH   rY   rw   r“   rˆ   )r8  r9  Úis_bmmr  rD  Úres_rowsÚres_colsrð   r>  r?  r@  rS  s      `    @@@@r5   Úcommon_meta_baddbmm_bmmr  ®  s	  ü€ Ü	‡L�L�—‘“ Ñ"Ñ$HÔIÜ	‡L�L�—‘“ Ñ"Ñ$HÔIà—;‘;“=€LØ—;‘;“=€Là	�a‰€BØ# A‘ÐØ˜A‰€HØ˜A‰€HØ�x Ð*€Kä	‡L�LØ�Q‰˜2ÑÒE ,¨q¡/Ð5EÑ"Eõ	Rôð ×Ñ˜kÓ*€Fá�lÐ.Ü�‰�\×%Ñ%Ó'¨1Ñ,Ñ.PÔQÜ�‰Ø×ÑÓ ;Ñ.Üsô	
ð
 €Mr7   c                 ó   — t        | |d«      S )NT)r  )rŠ   r:  s     r5   Úmeta_bmmr  Ï  s   € ä" 4¨¨tÓ4Ð4r7   c                 óh   — | |z  }| |z  }|dk7  r"t        |dk  «      t        |dk  «      k7  r|dz  }|S r€  )rU  )rE   ÚyÚqrN  s       r5   Údiv_rtnr  Ô  sB   € Ø	ˆQ‰€AØ	ˆA‰€Að 	ˆA‚v”4˜˜A™“;¤$ q¨1¡u£+Ò-Ø	ˆQ‰ˆØ€Hr7   c                 ó†   — t        | |z   |z   ||dz
  z  z
  dz
  |r|dz
  ndz   |«      dz   }|r|dz
  |z  | |z   k\  r|dz  }|S r†  )r  )Ú	inputSizeÚ
kernelSizerÊ  rË  r¸   rx  rã  Ú
outputSizes           r5   Úpooling_output_shape_pad_lrr  Þ  sŒ   € ô 	ØØñàñð ˜* q™.Ñ)ñ*ð ñ	ñ
 'ˆv˜Šz¨Añ/ð ó	
ð ñ		ð ñ Ø˜‰N˜fÑ$¨	°EÑ(9Ò9Ø˜!‰OˆJØÐr7   c           	      óê   ‡‡‡— t        j                  |dk7  d„ «       t        j                  ‰dk\  ˆfd„«       t        j                  ‰‰dz
  ‰z  dz   dz  k  ˆˆˆfd„«       t        | ‰‰‰|‰|«      S )Nr   c                   ó   — y)Nzstride should not be zeror;   r;   r7   r5   rW   z&pooling_output_shape.<locals>.<lambda>ú  r_   r7   c                  ó   •— d‰ › �S )Nz'pad must be non-negative, but got pad: r;   )Úpads   €r5   rW   z&pooling_output_shape.<locals>.<lambda>û  s   ø€ Ð%LÈSÈEÐ#R€ r7   r³   rà   c                  ó   •— d‰› d‰› d‰ › �S )NzApad should be at most half of effective kernel size, but got pad=z, kernel_size=z and dilation=r;   )rx  r  r  s   €€€r5   rW   z&pooling_output_shape.<locals>.<lambda>þ  s'   ø€ ØOÐPSÈuð UØ%˜, n°X°Jð@ð r7   )rH   rY   r  )r  r  r  r¸   rx  rã  s    `` ` r5   r  r  ù  ss   ú€ Ü	‡L�L�˜1‘ÑAÔBÜ	‡L�L�˜‘ÓRÔSÜ	‡L�LØ�˜a‘ 8Ñ+¨aÑ/°AÑ5Ñ5õ	
ôô 'Ø�:˜s C¨°¸9óð r7   c           	      ó>  ‡ ‡‡‡‡‡	‡
‡‡‡‡— ‰ j                  «       }‰	Št        j                  ‰dkD  xr ‰dkD  d„ «       t        j                  |dkD  xr |dkD  d„ «       t        j                  |dkD  xr |dkD  d„ «       ‰ j                  d«      dk7  xr ‰ j                  d«      dk7  }|t        j                  k(  r5t        j                  |dk(  xr |xr ‰ j                  d«      dk7  d	„ «       nWt        j                  |dk(  xr ‰ j                  d«      dk7  xr |xs |dk(  xr |xr ‰ j                  d«      dk7  ˆ fd
„«       t        j                  ‰dz  ‰k\  xr ‰dz  ‰k\  ˆˆˆˆfd„«       t        j                  ‰dk\  xr ‰dk\  ˆ
ˆˆ	ˆˆˆfd„«       y )Nr   c                   ó   — y)NzCkernel size should be greater than zero, but got kH: {kH}, kW: {kW}r;   r;   r7   r5   rW   z$pool2d_shape_check.<locals>.<lambda>  r_   r7   c                   ó   — y)Nz>stride should be greater than zero, but got dH: {dH}, dW: {dW}r;   r;   r7   r5   rW   z$pool2d_shape_check.<locals>.<lambda>"  r_   r7   c                   ó   — y)Nz\dilation should be greater than zero, but got dilationH: {dilationH}, dilationW: {dilationW}r;   r;   r7   r5   rW   z$pool2d_shape_check.<locals>.<lambda>&  r_   r7   r³   rà   ró  r-   c                   ó   — y)NzŽExpected 4D (batch mode) tensor expected for input with channels_last layout with optional 0 dim batch size for input, but got: {input.size()}r;   r;   r7   r5   rW   z$pool2d_shape_check.<locals>.<lambda>.  r_   r7   c                  ó*   •— d‰ j                  «       › �S )NzYExpected 3D or 4D (batch mode) tensor with optional 0 dim batch size for input, but got: r’   r	  s   €r5   rW   z$pool2d_shape_check.<locals>.<lambda>5  s   ø€ ÐoÐpu×pzÑpzÓp|Ðo}Ð~€ r7   c                  ó    •— d‰› d‰› d‰› d‰ › �S )NzKpad should be smaller than or equal to half of kernel size, but got padW = z	, padH = z, kW = z, kH = r;   )r  r  r  r  s   €€€€r5   rW   z$pool2d_shape_check.<locals>.<lambda>:  s&   ø€ ð Ø��y   g¨b¨T°¸¸ð>€ r7   c                  ó.   •— d‰› d‰ › d‰› d‰› d‰› d‰› d�S ©NzGiven input size: (rE   z). Calculated output size: (z). Output size is too smallr;   )r  r  rä  r!  rå  ræ  s   €€€€€€r5   rW   z$pool2d_shape_check.<locals>.<lambda>@  s:   ø€ Ð% k ]°!°K°=ÀÀ*Àð N$Ø$0 >°°<°.ÀÀ+Àð O#ð#€ r7   )rw   rH   rY   r“   r�  )rË   r  r  r  r  r  r  Ú	dilationHÚ	dilationWrä  r  r  rå  ræ  rœ   r•   Ú
valid_dimsr!  s   ```  ``  `````   @r5   r  r    sƒ  ÿú€ ð" �9‰9‹;€DØ€Lä	‡L�LØ
ˆQ‰Ò�2˜‘6ÙUôô 
‡L�LØ
ˆQ‰Ò�2˜‘6ÙPôô 
‡L�LØ�A‰Ò'˜) a™-Ùnôð
 —‘˜A“ !Ñ#Ò:¨¯
©
°1«¸Ñ(:€Jàœ×+Ñ+Ò+Ü�‰Ø�A‰IÒ;˜*Ò;¨¯©°A«¸!Ñ);ñQõ	
ô 	�‰Ø�Q‰YÒ<˜5Ÿ:™: a›=¨AÑ-Ò<°*ò AØ˜‘	Ò?˜jÒ?¨U¯Z©Z¸«]¸aÑ-?Û~ô	
ô 
‡L�LØ
ˆa‰�4‰Ò+˜B !™G t™Oö	>ôô 
‡L�LØ�qÑÒ.˜\¨QÑ.÷	#ð 	#õr7   r=  r:  r  r  r;  r  r  ÚpTÚpHÚpWÚ	dilationTr   r!  r>  r?  r@  rA  rB  rC  r8  c           
      óJ  ‡ ‡‡‡‡‡‡‡‡‡	‡
‡‡‡‡‡‡‡‡‡‡‡— ‰ j                   }t        j                  ‰dkD  xr ‰dkD  xr ‰dkD  ˆˆˆfd„«       t        j                  ‰dkD  xr ‰dkD  xr ‰dkD  ˆˆˆfd„«       t        j                  ‰dkD  xr ‰dkD  xr ‰dkD  ˆˆˆfd„«       t        j                  |dv ˆˆ fd„«       t        |«      D ]:  Š|dk(  r‰dk(  rŒt        j                  ‰ j	                  ‰«      dkD  ˆˆˆ fd„«       Œ< |r/t        j                  ‰‰k\  xr ‰‰k\  xr ‰‰k\  ˆˆˆˆˆˆfd	„«       t        j                  ‰d
z  ‰k\  xr ‰d
z  ‰
k\  xr ‰d
z  ‰	k\  ˆˆˆˆ	ˆˆ
fd„«       t        j                  ‰dk\  xr ‰dk\  xr ‰dk\  ˆˆˆˆˆˆˆfd„«       y )Nr   c                  ó   •— d‰› d‰ › d‰› �S )Nz5kernel size should be greater than zero, but got kT: z, kH: z, kW: r;   )r  r:  r  s   €€€r5   rW   z$pool3d_shape_check.<locals>.<lambda>b  s#   ø€ ðØ�$�f˜R˜D  r dð,ð r7   c                  ó   •— d‰› d‰ › d‰› �S )Nz0stride should be greater than zero, but got dT: z, dH: z, dW: r;   )r  r;  r  s   €€€r5   rW   z$pool3d_shape_check.<locals>.<lambda>i  s    ø€ Ø>¸r¸dÀ&ÈÈÈFÐSUÐRVÐWð r7   c                  ó   •— d‰› d‰ › d‰› �S )Nz9dilation should be greater than zero, but got dilationT: z, dilationH: z, dilationW: r;   )r   r&  r!  s   €€€r5   rW   z$pool3d_shape_check.<locals>.<lambda>o  s$   ø€ ðØ#˜ M°)°¸MÈ)ÈðVð r7   r4  c                  ó&   •— ‰ › d‰j                   › �S )Nz/: Expected 4D or 5D tensor for input, but got: r'  )rÎ  rË   s   €€r5   rW   z$pool3d_shape_check.<locals>.<lambda>w  s   ø€ �7�)ÐJÈ5Ï;É;È-ÐX€ r7   r  c                  óL   •— ‰ › d‰j                   › d‰j                  ‰«      › d�S )NzZ: Expected input's non-batch dimensions to have positive length, but input has a shape of z and non-batch dimension z has length zero!)r‰   r“   )rÎ  rÏ   rË   s   €€€r5   rW   z$pool3d_shape_check.<locals>.<lambda>€  s3   ø€ Ø�)ð -Ø-2¯[©[¨MØ+¨E¯J©J°q«M¨?Ð:KðMð r7   c                  ó.   •— d‰› d‰ › d‰› d‰› d‰› d‰› d�S )Nzinput image (T: r  rü  z ) smaller than kernel size (kT: ú kH: ú kW: rk   r;   )r?  r>  r@  r  r:  r  s   €€€€€€r5   rW   z$pool3d_shape_check.<locals>.<lambda>Š  s9   ø€ Ø" 5 '¨¨g¨Y°d¸6¸(ð C$Ø$& 4 u¨R¨D°°b°T¸ð<ð r7   rà   c                  ó,   •— d‰› d‰› d‰ › d‰› d‰› d‰› �S )NzHpad should be smaller than or equal to half of kernel size, but got kT: r/  r.  z padT: z padW: z padH: r;   )r  r:  r  r$  r#  r%  s   €€€€€€r5   rW   z$pool3d_shape_check.<locals>.<lambda>’  s6   ø€ ðØ�$�e˜B˜4˜u R D¨°¨t°7¸2¸$¸gÀbÀTðKð r7   r³   c                  ó:   •— d‰› d‰› d‰ › d‰› d‰› d‰› d‰› d‰› d�S r  r;   )r?  r>  r@  r=  rB  rA  rC  s   €€€€€€€r5   rW   z$pool3d_shape_check.<locals>.<lambda>š  sI   ø€ Ø! ' ¨!¨E¨7°!°G°9¸A¸f¸Xð F(Ø(/ y°°%°¸¸'¸À!ÀFÀ8ð L'ð(ð r7   )r•   rH   rY   r¶   r“   )rË   r=  r:  r  r  r;  r  r  r#  r$  r%  r&  r   r!  r>  r?  r@  rA  rB  rC  rÎ  r8  r•   rÏ   s   `````````````````````  @r5   r9  r9  F  s’  ÿÿý€ ð0 �:‰:€Dä	‡L�LØ
ˆQ‰Ò$�2˜‘6Ò$˜b 1™fõ	
ôô 
‡L�LØ
ˆQ‰Ò$�2˜‘6Ò$˜b 1™fõ	
ôô 
‡L�LØ�A‰Ò9˜) a™-Ò9¨I¸©Mõ	
ôô 
‡L�LØ�ˆÜXôô
 �4‹[ò 
ˆØ�1Š9˜˜ašàÜ�‰Ø�J‰J�q‹M˜AÑõõ	
ð	
ñ Ü�‰Ø�R‰KÒ:˜G r™MÒ:¨f¸©l÷ð ô	
ô 
‡L�LØ
ˆQ‰�"‰Ò6˜˜a™ 2™Ò6¨"¨q©&°B©,÷	
ð 	
ôô 
‡L�LØ�‰
Ò3�v ‘{Ò3 w°!¡|÷	
ñ 	
õr7   c                 ój  — | j                   }t        | |||||||	|
||||||||||||«       t        |||dz
  |«       t        |||dz
  |«       t        |||dz
  |«       t        |||dz
  |«       t        |||dz
  |«       t        |||dz
  |«       t        |||dz
  |«       t        |||dz
  |«       y )Nró  r-   rà   r³   ©r•   r9  rô  )rË   rç  r¤   r=  r:  r  r  r;  r  r  r#  r$  r%  r&  r   r!  r>  r?  r@  rA  rB  rC  rÎ  r•   s                           r5   Úmax_pool3d_backward_shape_checkr4  ¢  sæ   € ð2 �:‰:€DäØØØ
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
ØØØØØØØØØØô+ô0 �;  d¨Q¡h°Ô8Ü�;  d¨Q¡h°Ô6Ü�;  d¨Q¡h°Ô8Ü�;  d¨Q¡h°Ô7ä�7˜D $¨¡(¨GÔ4Ü�7˜D $¨¡(¨EÔ2Ü�7˜D $¨¡(¨GÔ4Ü�7˜D $¨¡(¨FÕ3r7   c                 óä   — | j                   }t        | ||||||||	|
|ddd|||||||d«       t        |||dz
  |«       t        |||dz
  |«       t        |||dz
  |«       t        |||dz
  |«       y )Nr³   Tró  r-   rà   r3  )rË   rç  r=  r:  r  r  r;  r  r  r#  r$  r%  r>  r?  r@  rA  rB  rC  rÎ  r•   s                       r5   rK  rK  à  s¡   € ð* �:‰:€DäØØØ
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø	Ø	Ø	ØØØØØØØØô-ô2 �;  d¨Q¡h°Ô8Ü�;  d¨Q¡h°Ô6Ü�;  d¨Q¡h°Ô8Ü�;  d¨Q¡h°Õ7r7   c                 óú  — d„ } |d|«      \  }}t        j                  t        |«      dv d„ «       t        |«      dk(  r||}
}	n |d|«      \  }	}
 |d|«      \  }} |d|«      \  }}| j                  d	«      }| j                  d
«      }| j                  d«      }t	        j
                  | «      }|t         j                  k(  r)t        j                  | j                  «       dk(  d„ «       nR|t         j                  k(  r(t        j                  | j                  «       dv d„ «       nt        j                  dd„ «       t        ||||	||«      }t        ||||
||«      }t        | |||	|
||||||||||«       |||fS )Nc                 óˆ   ‡ — t        j                  t        |«      dv ˆ fd„«       |d   }t        |«      dk(  r|n|d   }||fS )Nr÷  c                  ó   •— d‰ › d�S )Nzmax_pool2d: rù  r;   rú  s   €r5   rW   zEmax_pool2d_checks_and_compute_shape.<locals>.unpack.<locals>.<lambda>"  rû  r7   r   r³   rü  rý  s   `   r5   r   z3max_pool2d_checks_and_compute_shape.<locals>.unpack  r  r7   r‡  r  c                   ó   — y)NzOmax_pool2d: stride must either be omitted, a single int, or a tuple of two intsr;   r;   r7   r5   rW   z5max_pool2d_checks_and_compute_shape.<locals>.<lambda>,  r_   r7   r   r¸   r¼  rx  r  r±  rŒ   ró  c                   ó   — y)NzMnon-empty 4D (batch mode) tensor expected for input with channels_last layoutr;   r;   r7   r5   rW   z5max_pool2d_checks_and_compute_shape.<locals>.<lambda>=  r_   r7   rj  c                   ó   — y)Nz9non-empty 3D or 4D (batch mode) tensor expected for inputr;   r;   r7   r5   rW   z5max_pool2d_checks_and_compute_shape.<locals>.<lambda>B  r_   r7   Fc                   ó   — y)Nz?Unsupport memory format. Supports only ChannelsLast, Contiguousr;   r;   r7   r5   rW   z5max_pool2d_checks_and_compute_shape.<locals>.<lambda>G  r_   r7   )rH   rY   r´   r“   r@   rŽ  r�  rw   r    r  r  )rË   r‡  r¸   r¼  rx  rã  r   r  r  r  r  r  r  r   r!  rä  r  r  rœ   rå  ræ  s                        r5   rá  rá    s�  € òñ �M ;Ó/�F€Bˆä	‡L�LÜˆF‹�yÐ Ùaôô ˆ6ƒ{�aÒØ�RˆB‰á˜ &Ó)‰ˆˆBá˜	 7Ó+�J€Dˆ$Ù! *¨hÓ7Ñ€IˆyØ—*‘*˜R“.€KØ—*‘*˜R“.€KØ—‘˜B“€Jä×/Ñ/°Ó6€MØœ×+Ñ+Ò+Ü�‰Ø�I‰I‹K˜1ÑÙcõ	
ð 
œ%×1Ñ1Ò	1Ü�‰Ø�I‰I‹K˜6Ð!ÙOõ	
ô
 	�‰ØÙUô	
ô
 (¨°R¸¸rÀ9ÈiÓX€LÜ& z°2°t¸RÀÈIÓV€KäØØ
Ø
Ø
Ø
ØØØØØØØØØØôð$ ˜ kÐ1Ð1r7   c                 ó|  ‡ ‡‡‡‡‡— t        ‰|||||«      \  }ŠŠt        j                  ‰j                  ‰ j                  k(  ˆ ˆfd„«       |Š‰j                  Šˆˆˆˆfd„}	 |	‰ «        |	|«       t        j                  ‰«      }
t        j                  ‰j                  ‰j                  ‰j                  |
¬«      S )Nc                  ó<   •— d‰j                   › d‰ j                   › �S )NzExpected dtype z  for `gradOutput` but got dtype r�   re  s   €€r5   rW   z7meta_max_pool2d_with_indices_backward.<locals>.<lambda>w  s    ø€ �/ $§*¡* Ð-MÈk×N_ÑN_ÐM`Ða€ r7   c                 ól   •— t        | ‰‰dz
  ‰«       t        | ‰‰dz
  ‰«       t        | ‰‰dz
  ‰«       y )Nr-   rà   r³   )rô  )r¿  r!  r•   rå  ræ  s    €€€€r5   Ú_check_dim_sizez>meta_max_pool2d_with_indices_backward.<locals>._check_dim_size}  s9   ø€ Ü�q˜$  q¡¨,Ô7Ü�q˜$  q¡¨,Ô7Ü�q˜$  q¡¨+Õ6r7   rl  )
rá  rH   rY   rP   r•   r@   rŽ  r|   r‰   rt   )rç  rŠ   r‡  r¸   r¼  rx  rã  r¤   rä  r@  rœ   r!  r•   rå  ræ  s   ``         @@@@r5   Ú%meta_max_pool2d_with_indices_backwardrA  b  s«   ý€ ô 	,Øˆk˜6 7¨H°ió	ñ	ØØØô
 
‡L�LØ�
‰
�k×'Ñ'Ñ'Üaôð
 €LØ�9‰9€D÷7ñ
 �KÔ Ù�GÔä×/Ñ/°Ó5€MÜ�;‰;Ø�
‰
Ø�j‰jØ�{‰{Ø#ô	ð r7   c                 óš  — t        | |||||«      \  }}}| j                  «       dk(  r| j                  d«      nd}	t        j                  | «      }
| j                  «       dk(  r|||g}n|	|||g}t        j                  || j                  | j                  |
¬«      t        j                  |t
        j                  | j                  |
¬«      fS rß  )
rá  rw   r“   r@   rŽ  rH   r|   rP   rt   r§   râ  s               r5   Úmeta_max_pool2d_with_indicesrC  Ž  sÉ   € ô 	,Øˆ{˜F G¨X°yó	ñ	ØØØð
  %Ÿy™y›{¨aÒ/ˆU�Z‰Z˜Œ^°Q€FÜ×/Ñ/°Ó6€MØ‡y�yƒ{�aÒØ˜\¨;Ð7‰à˜ \°;Ð?ˆä�‰ØØ—+‘+Ø—<‘<Ø'ô		
ô 	�‰ØÜ—+‘+Ø—<‘<Ø'ô		
ðð r7   c           	      ó”  ‡ ‡‡‡
‡‡— t        j                  ‰ j                  dv ˆ fd„«       ‰ j                  }t        |dz
  |«      D ]?  Š
t        j                  ‰ j	                  ‰
«      dkD  d‰ j	                  «       › d‰
› d�«       ŒA t        j                  t        ‰«      dk(  d	„ «       t        j                  t        |«      dk(  d
„ «       ‰ j	                  d«      }‰ j	                  d«      Š‰ j	                  d«      Š|dk(  r‰ j	                  d«      }nd}t        j                  ‰ j                  ‰j                  k(  d„ «       t        j                  ‰j                  dk(  ˆfd„«       ‰j	                  d«      }‰j	                  d«      }‰j	                  d«      Š
t        j                  ||k\  d«       t        j                  ||k(  d„ «       t        j                  ‰
dk(  ˆ
fd„«       t        j                  |d   ‰d   z   dz
  ‰k  ˆˆfd„«       t        j                  |d   ‰d   z   dz
  ‰k  ˆˆfd„«       ‰ j                  «       dk(  r|||d   |d   g}	n||d   |d   g}	t        j                  |	‰ j                  ‰ j                  ¬«      t        j                  |	t         j                  ‰ j                  ¬«      fS )Nrj  c                  ó"   •— d‰ j                   › �S )Nz:fractional_max_pool2d: Expected 3D or 4D tensor, but got: rõ  r¡   s   €r5   rW   z,meta_fractional_max_pool2d.<locals>.<lambda>¹  s   ø€ ÐLÈTÏYÉYÈKÐX€ r7   r-   r   z^fractional_max_pool2d: Expected input to have non-zero  size for non-batch dimenions, but got rZ  z emptyrà   c                   ó   — y)NzNfractional_max_pool2d: kernel_size musteither be a single int or tuple of Intsr;   r;   r7   r5   rW   z,meta_fractional_max_pool2d.<locals>.<lambda>Ç  r_   r7   c                   ó   — y)NzOfractional_max_pool2d: output_size must either be a single int or tuple of Intsr;   r;   r7   r5   rW   z,meta_fractional_max_pool2d.<locals>.<lambda>Ì  r_   r7   r  r±  rŒ   ró  r³   c                   ó   — y)Nz6Expect _random_samples to have the same dtype as inputr;   r;   r7   r5   rW   z,meta_fractional_max_pool2d.<locals>.<lambda>Ú  r_   r7   c                  ó"   •— d‰ j                   › �S )Nz1Expect _random samples to have 3 dimensions got, rõ  )Úrandom_sampless   €r5   rW   z,meta_fractional_max_pool2d.<locals>.<lambda>Þ  s   ø€ ÐCÀN×DWÑDWÐCXÐY€ r7   z=Expect _random_samples.size(0) no less then input batch size.c                   ó   — y)Nz<Expect _random_samples.size(1) equals to input channel size.r;   r;   r7   r5   rW   z,meta_fractional_max_pool2d.<locals>.<lambda>ê  r_   r7   c                  ó   •— d‰ › d�S )Nz/Expect _random_samples.size(2) equals to 2 got ú.r;   )rÆ   s   €r5   rW   z,meta_fractional_max_pool2d.<locals>.<lambda>ì  s   ø€ Ð#RÐSTÐRUÐUVÐ!W€ r7   c                  ó   •— d‰d   › d‰ › �S )Nz%fractional_max_pool2d: kernel height r   z' is too large relative to input height r;   )Úinput_heightr‡  s   €€r5   rW   z,meta_fractional_max_pool2d.<locals>.<lambda>ð  s   ø€ Ð7¸ÀA¹Ð7GÐGnÐo{Ðn|Ð}€ r7   c                  ó   •— d‰d   › d‰ › �S )Nz$fractional_max_pool2d: kernel width r³   z& is too large relative to input width r;   )Úinput_widthr‡  s   €€r5   rW   z,meta_fractional_max_pool2d.<locals>.<lambda>ô  s   ø€ Ð6°{À1±~Ð6FÐFlÐmxÐlyÐz€ r7   r“  )rH   rY   r•   r¶   r“   r´   rP   rw   r|   rt   r§   )rŠ   r‡  rS  rJ  r•   Úinput_channelsÚinput_batchrù   Úcr“   rÆ   rO  rQ  s   `` `      @@@r5   Úmeta_fractional_max_pool2drU  µ  s�  ý€ ä	‡L�LØ�	‰	�VÐÛXôð �9‰9€Dä�4˜!‘8˜TÓ"ò 
ˆÜ�‰Ø�I‰I�a‹L˜1Ñð6Ø6:·i±i³k°]ÐBRÐSTÐRUÐU[ð]õ	
ð
ô 
‡L�LÜˆKÓ˜AÑñ	2ôô
 
‡L�LÜˆKÓ˜AÑñ	2ôð —Y‘Y˜r“]€NØ—9‘9˜R“=€LØ—)‘)˜B“-€KØˆq‚yØ—i‘i “l‰àˆä	‡L�LØ�
‰
�n×*Ñ*Ñ*ÙHôô 
‡L�LØ×Ñ˜qÑ ÛYôð
 	×Ñ˜AÓ€AØ×Ñ˜AÓ€AØ×Ñ˜AÓ€AÜ	‡L�LØ	ˆ[ÑØGôô 
‡L�LØ	ˆ^ÑÙNôô 
‡L�L��a‘ÓWÔXä	‡L�LØ�A‰˜ Q™Ñ'¨!Ñ+¨|Ñ;Ü}ôô 
‡L�LØ�A‰˜ Q™Ñ'¨!Ñ+¨{Ñ:Üzôð
 ‡x�xƒz�Q‚Ø˜^¨[¸©^¸[È¹^ÐL‰à ¨A¡°¸A±Ð?ˆô 	�‰ØØ—*‘*Ø—;‘;ô	
ô
 	�‰ØÜ—+‘+Ø—;‘;ô	
ðð r7   c                 ó|  — t        j                  t        |«      dv d„ «       |d   }t        |«      dk(  r|n|d   }t        |«      dk(  r|n|d   }t        j                  | xs t        |«      dv d„ «       |s|n|d   }	|s|nt        |«      dk(  r|	n|d   }
|s|nt        |«      dk(  r|	n|d   }t        j                  t        |«      dv d„ «       |d   }t        |«      dk(  r|n|d   }t        |«      dk(  r|n|d   }t        j                  t        |«      dv d„ «       |d   }t        |«      dk(  r|n|d   }t        |«      dk(  r|n|d   }t        j                  | j                  d	v d
„ «       | j                  dk(  r| j	                  d«      nd}| j	                  d«      }| j	                  d«      }| j	                  d«      }| j	                  d«      }t        ||||	||«      }t        ||||
||«      }t        ||||||«      }t        | |||||	|
|||||||||||||d«       | j                  dk(  xr& t        j                  | «      t         j                  k(  }| j                  dk(  rK| j                  d«      }|j                  «        xr  |j                  t         j                  ¬«      }||||f}n|||||f}| j                  |«      }| j                  |t         j                  ¬«      }|r@|j                  t         j                  ¬«      }|j                  t         j                  ¬«      }||fS )Nr,  c                   ó   — y©NzMmax_pool3d: kernel_size must either be a single int, or a tuple of three intsr;   r;   r7   r5   rW   z.meta_max_pool3d_with_indices.<locals>.<lambda>  r_   r7   r   r³   rà   c                   ó   — y©NzQmax_pool3d: stride must either be omitted, a single int, or a tuple of three intsr;   r;   r7   r5   rW   z.meta_max_pool3d_with_indices.<locals>.<lambda>  r_   r7   c                   ó   — y©NzImax_pool3d: padding must either be a single int, or a tuple of three intsr;   r;   r7   r5   rW   z.meta_max_pool3d_with_indices.<locals>.<lambda>&  r_   r7   c                   ó   — y©NzJmax_pool3d: dilation must be either a single int, or a tuple of three intsr;   r;   r7   r5   rW   z.meta_max_pool3d_with_indices.<locals>.<lambda>.  r_   r7   r4  c                   ó   — yr6  r;   r;   r7   r5   rW   z.meta_max_pool3d_with_indices.<locals>.<lambda>6  r_   r7   r  éûÿÿÿrà  r  r±  rŒ   zmax_pool3d_with_indices()ró  r›   r�   )rH   rY   r´   r•   r“   r  r9  r@   rŽ  r«  r€  rP  rˆ   r§   r  )rË   r‡  r¸   r¼  rx  rã  r:  r  r  r;  r  r  r#  r$  r%  r&  r   r!  rÒ  r=  r>  r?  r@  rA  rB  rC  r�  Úinput_channels_last_checkr˜   r¿   r¤   s                                  r5   Úmeta_max_pool3d_with_indicesrb  
  sJ  € ô 
‡L�LÜˆKÓ˜FÐ"Ù_ôð 
�Q‰€BÜ�;Ó 1Ò$‰¨+°a©.€BÜ�;Ó 1Ò$‰¨+°a©.€Bä	‡L�LØˆ
Ò+”c˜&“k VÐ+Ùcôñ ‰˜v a™y€BÙ‰¤c¨&£k°QÒ&6¡¸FÀ1¹I€BÙ‰¤c¨&£k°QÒ&6¡¸FÀ1¹I€Bä	‡L�LÜˆG‹˜ÐÙ[ôð 
�‰€BÜ�7‹|˜qÒ ‰ g¨a¡j€BÜ�7‹|˜qÒ ‰ g¨a¡j€Bä	‡L�LÜˆH‹˜ÐÙ\ôð ˜‘€IÜ  ›]¨aÒ/‘	°X¸a±[€IÜ  ›]¨aÒ/‘	°X¸a±[€Iä	‡L�LØ�
‰
�fÐÙKôð
  %Ÿz™z¨QšˆU�Z‰Z˜Œ^°A€FØ�j‰j˜‹n€GØ�J‰J�r‹N€EØ�j‰j˜‹n€GØ�Z‰Z˜‹^€Fä  ¨¨B°°I¸yÓI€EÜ" 7¨B°°B¸	À9ÓM€GÜ! &¨"¨b°"°iÀÓK€FäØØØ
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
ØØØØØØØØØØ#ô+ð2 	�
‰
�a‰ÒXœE×7Ñ7¸Ó>Ä%×BXÑBXÑXð ð ‡z�z�Q‚Ø$)§O¡O°AÓ$6Ð!à)×7Ñ7Ó9Ð9ò
à'×5Ñ5Ü×0Ñ0ð 6ó 
ð 	ð
 ˜e W¨fÐ5‰	à˜W e¨W°fÐ=ˆ	à
�/‰/˜)Ó
$€CØ�o‰o˜i¬u¯{©{ˆoÓ;€GáØ�f‰f¤5×#9Ñ#9ˆfÓ:ˆØ—*‘*¬5×+AÑ+A�*ÓBˆà�ˆ<Ðr7   c                 ó´  — t        j                  t        |«      dv d„ «       |d   }t        |«      dk(  r|n|d   }	t        |«      dk(  r|n|d   }
t        j                  | xs t        |«      dv d„ «       |s|n|d   }|s|	nt        |«      dk(  r|n|d   }|s|
nt        |«      dk(  r|n|d   }t        j                  t        |«      dv d„ «       |d   }t        |«      dk(  r|n|d   }t        |«      dk(  r|n|d   }t        j                  t        |«      dv d„ «       |d   }t        |«      dk(  r|n|d   }t        |«      dk(  r|n|d   }t        j                  |j                  d	v d
„ «       |j	                  d«      }|j	                  d«      }|j	                  d«      }|j	                  d«      }| j	                  d«      }| j	                  d«      }| j	                  d«      }t        || ||||	|
|||||||||||||||d«       |j                  dk(  xr& t        j                  |«      t         j                  k(  }|j                  dk(  rD|j                  d«      }|j                  «        xr  |j                  t         j                  ¬«      }|j                  |j                  «      }|r |j                  t         j                  ¬«      }|S )Nr,  c                   ó   — yrX  r;   r;   r7   r5   rW   z7meta_max_pool3d_with_indices_backward.<locals>.<lambda>�  r_   r7   r   r³   rà   c                   ó   — yrZ  r;   r;   r7   r5   rW   z7meta_max_pool3d_with_indices_backward.<locals>.<lambda>‰  r_   r7   c                   ó   — yr\  r;   r;   r7   r5   rW   z7meta_max_pool3d_with_indices_backward.<locals>.<lambda>‘  r_   r7   c                   ó   — yr^  r;   r;   r7   r5   rW   z7meta_max_pool3d_with_indices_backward.<locals>.<lambda>™  r_   r7   r4  c                   ó   — yr6  r;   r;   r7   r5   rW   z7meta_max_pool3d_with_indices_backward.<locals>.<lambda>¡  r_   r7   rà  r  r±  rŒ   z"max_pool3d_with_indices_backward()r  ró  r›   )rH   rY   r´   r•   r“   r4  r@   rŽ  r«  r€  rP  rˆ   r‰   r  )rç  rË   r‡  r¸   r¼  rx  rã  r¤   r:  r  r  r;  r  r  r#  r$  r%  r&  r   r!  r=  r>  r?  r@  rA  rB  rC  r�  ra  rë  s                                 r5   Ú%meta_max_pool3d_with_indices_backwardri  s  sá  € ô 
‡L�LÜˆKÓ˜FÐ"Ù_ôð 
�Q‰€BÜ�;Ó 1Ò$‰¨+°a©.€BÜ�;Ó 1Ò$‰¨+°a©.€Bä	‡L�LØˆ
Ò+”c˜&“k VÐ+Ùcôñ ‰˜v a™y€BÙ‰¤c¨&£k°QÒ&6¡¸FÀ1¹I€BÙ‰¤c¨&£k°QÒ&6¡¸FÀ1¹I€Bä	‡L�LÜˆG‹˜ÐÙ[ôð 
�‰€BÜ�7‹|˜qÒ ‰ g¨a¡j€BÜ�7‹|˜qÒ ‰ g¨a¡j€Bä	‡L�LÜˆH‹˜ÐÙ\ôð ˜‘€IÜ  ›]¨aÒ/‘	°X¸a±[€IÜ  ›]¨aÒ/‘	°X¸a±[€Iä	‡L�LØ�
‰
�fÐÙKôð
 �j‰j˜‹n€GØ�J‰J�r‹N€EØ�j‰j˜‹n€GØ�Z‰Z˜‹^€Fà×Ñ˜RÓ €EØ×Ñ˜rÓ"€GØ×Ñ˜bÓ!€Fä#ØØØØØ
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
ØØØØØØØØØØ,ô/ð6 	�
‰
�a‰ÒXœE×7Ñ7¸Ó>Ä%×BXÑBXÑXð ð ‡z�z�Q‚Ø$)§O¡O°AÓ$6Ð!à)×7Ñ7Ó9Ð9ò
à'×5Ñ5Ü×0Ñ0ð 6ó 
ð 	ð —‘ §¡Ó-€JáØ—]‘]´×1GÑ1G�]ÓHˆ
àÐr7   Úgridc                 óz  ‡ ‡‡— t        j                  ‰ j                  ‰j                  k(  ˆˆ fd„«       t        j                  ‰ j                  t         j                  k(  xr ‰j                  t         j                  k(  ˆˆ fd„«       t        j                  ‰ j
                  d   ‰j
                  d   k(  ˆˆ fd„«       t        j                  ‰j
                  d   ‰ j                  dz
  k(  ˆˆ fd„«       t        d‰ j                  «      D ],  Št        j                  ‰ j
                  ‰   dkD  ˆˆ fd„«       Œ. y )	Nc                  ó<   •— d‰j                   › d‰ j                   › �S )NzNgrid_sampler(): expected input and grid to be on same device, but input is on z and grid is on r™  ©rj  rË   s   €€r5   rW   z+check_grid_sampler_common.<locals>.<lambda>Ý  s'   ø€ ðØ—\‘\�NÐ"2°4·;±;°-ðAð r7   c                  ó<   •— d‰j                   › d‰ j                   › �S )NzTgrid_sampler(): expected input and grid to have torch.strided layout, but input has z and grid has )rs   rm  s   €€r5   rW   z+check_grid_sampler_common.<locals>.<lambda>ä  s&   ø€ ðØŸ™˜ n°T·[±[°MðCð r7   r   c                  ó<   •— d‰j                   › d‰ j                   › �S )NzZgrid_sampler(): expected grid and input to have same batch size, but got input with sizes ú and grid with sizes r'  rm  s   €€r5   rW   z+check_grid_sampler_common.<locals>.<lambda>ë  s'   ø€ ð Ø %§¡˜}Ð,AÀ$Ç*Á*ÀðOð r7   rŒ   rà   c                  óB   •— d‰j                   dz
  › d‰ j                  › �S )Nz+grid_sampler(): expected grid to have size rà   z, in last dimension, but got grid with sizes )r•   r‰   rm  s   €€r5   rW   z+check_grid_sampler_common.<locals>.<lambda>ò  s,   ø€ Ø9¸%¿*¹*Àq¹.Ð9Ið J2Ø26·*±*°ð?ð r7   c                  ó*   •— d‰j                   › d‰ › d�S )NzYgrid_sampler(): expected input to have non-empty spatial dimensions, but input has sizes rZ  r[  r'  rn  s   €€r5   rW   z+check_grid_sampler_common.<locals>.<lambda>û  ro  r7   )rH   rY   rt   rs   r›  r‰   r•   r¶   )rË   rj  rÏ   s   ``@r5   Úcheck_grid_sampler_commonrs  Ú  sì   ú€ Ü	‡L�LØ�‰˜Ÿ™Ñ#ô	
ôô 
‡L�LØ�‰œŸ™Ñ%ÒF¨$¯+©+¼¿¹Ñ*Fô	
ôô 
‡L�LØ�‰�A‰˜$Ÿ*™* Q™-Ñ'ô	
ôô 
‡L�LØ�
‰
�2‰˜%Ÿ*™* q™.Ñ(ô	
ôô �1�e—j‘jÓ!ò 
ˆÜ�‰Ø�K‰K˜‰N˜QÑôõ	
ñ
r7   c                   ó   — e Zd ZdZdZdZy)ÚGridSamplerInterpolationr   r³   rà   N)rm   Ú
__module__Ú__qualname__ÚBILINEARÚNEARESTÚBICUBICr;   r7   r5   ru  ru    s   „ Ø€HØ€GØ�Gr7   ru  Úinterpolation_modec                 ó  ‡ ‡— t        j                  ‰ j                  dk(  xr ‰ j                  ‰j                  k(  ˆˆ fd„«       t        j                  ‰ j                  dk(  xr |t        j                  j
                  k(   d„ «       y )Nr  c                  ó<   •— d‰j                   › d‰ j                   › �S )Nzdgrid_sampler(): expected 5D input and grid with same number of dimensions, but got input with sizes rp  r'  rm  s   €€r5   rW   z'check_grid_sampler_3d.<locals>.<lambda>  s&   ø€ ð4Ø49·K±K°=Ø# D§J¡J <ð1ð r7   c                   ó   — y)Nz<grid_sampler(): bicubic interpolation only supports 4D inputr;   r;   r7   r5   rW   z'check_grid_sampler_3d.<locals>.<lambda>  r_   r7   )rH   rY   r•   ru  rz  rê  )rË   rj  r{  s   `` r5   Úcheck_grid_sampler_3dr    sp   ù€ Ü	‡L�LØ�
‰
�a‰Ò3˜EŸJ™J¨$¯)©)Ñ3ô	
ôô 
‡L�Là�J‰J˜!‰Oò MØ"Ô&>×&FÑ&F×&LÑ&LÑLð	
ñ 	Oõr7   c                 ó²   — |d   }|r&t        j                  |t         j                  ¬«      }nd }t        j                  |t         j                  ¬«      }	||	fS ©Nr   r›   )rH   rm  r    rŸ   ©
rç  rË   rj  r{  Úpadding_modeÚalign_cornersr½  Úinput_requires_gradrë  Ú	grad_grids
             r5   Úgrid_sampler_2d_backward_metar‡    sQ   € ð & a™.ÐÙÜ×%Ñ% e¼5×;RÑ;RÔS‰
àˆ
Ü× Ñ  ´U×5LÑ5LÔM€IØ˜	Ð"Ð"r7   c                 óö   — t        | |«       t        | ||«       | j                  d   }| j                  d   }|j                  d   }|j                  d   }|j                  d   }	| j                  |||||	f«      S )Nr   r³   rà   r-   )rs  r  r‰   rˆ   )
rË   rj  r{  rƒ  r„  rj  ÚCÚout_DÚout_HÚout_Ws
             r5   Úgrid_sampler_3dr�  -  sv   € ô ˜e TÔ*Ü˜% Ð'9Ô:Ø�‰�A‰€AØ�‰�A‰€AØ�J‰J�q‰M€EØ�J‰J�q‰M€EØ�J‰J�q‰M€EØ�?‰?˜A˜q %¨°Ð6Ó7Ð7r7   r†  c                 óä   — t        ||«       t        |||«       |d   }|r&t        j                  |t        j                  ¬«      }nd }t        j
                  |t        j                  ¬«      }	||	fS r�  )rs  r  rH   rm  rý  rŸ   r‚  s
             r5   Úgrid_sampler_3d_backwardr�  @  sm   € ô ˜e TÔ*Ü˜% Ð'9Ô:Ø% a™.ÐÙÜ×%Ñ%Ø¤×!?Ñ!?ô
‰
ð ˆ
Ü× Ñ  ´U×5SÑ5SÔT€IØ�yÐ Ð r7   c                 ó�   — |j                  dd «      }|st        j                  |«      }||d<   t        j                  | g|¢­i |¤ŽS )NrP   )rO   r@   Ú	get_dtyperH   r|   )r“   rŽ  rB   r¿  rP   s        r5   Úfullr’  X  sE   € à�J‰J�w Ó%€EÙÜ—‘ 
Ó+ˆØ€Fˆ7�OÜ�;‰;�tÐ-˜dÒ- fÑ-Ð-r7   c                 óN  — |t         j                  k(  rÛt        j                  |d u d„ «       t        j                  d|€| j                  n|||€| j
                  n||¬«      }| j                  r>|j                  | j                  «       | j                  «       | j                  «       «       n/|j                  | j                  «       | j                  «       d«       |j                  d«       |S t        j                  j                  | |||||¬«      }|j!                  d«       |S )Nc                   ó   — y)Nz9memory format option is only supported by strided tensorsr;   r;   r7   r5   rW   zzeros_like.<locals>.<lambda>n  r_   r7   r   rû   Tr—  )rH   Ú
sparse_coorY   r|   rP   rt   Ú	is_sparseÚsparse_resize_and_clear_r“   Ú
sparse_dimÚ	dense_dimrw   Ú_coalesced_r*   rŸ   r  Úfill_)rŠ   rP   rs   rt   ru   rœ   rŠ  s          r5   rm  rm  b  sü   € ð ”×!Ñ!Ò!Ü�‰Ø˜TÐ!ÙOô	
ô
 �k‰kØØ % �$—*’*°5ØØ"( .�4—;’;°fØ!ô
ˆð �>Š>Ø×(Ñ(Ø—	‘	“˜TŸ_™_Ó.°·±Ó0@õð ×(Ñ(¨¯©«°d·h±h³jÀ!ÔDà�‰˜ÔØˆ
Ü
�/‰/×
!Ñ
!ØØØØØØ#ð "ó €Cð ‡I�Iˆa„LØ€Jr7   c                 óè  ‡ ‡‡— ddl m} ‰ j                  «       }t        j                  |dk7  d„ «       ‰dk\  r‰n‰|z   Š‰ j                  ‰«      }t        j                   |‰ |kD  «      xs  |‰|k\  «       ˆˆˆ fd„«       ‰dk\  r‰n‰|z   Št        ‰ j                  «       «      }t        ‰ j                  «       «      }‰ j                  «       ‰|‰   z  z   }|‰= |‰= ‰ j                  |||«      S )Nr   r¥  c                   ó   — y)Nz-select() cannot be applied to a 0-dim tensor.r;   r;   r7   r5   rW   zmeta_select.<locals>.<lambda>–  r_   r7   c                  ó6   •— d‰› d‰j                  «       › d‰ › �S )Nzselect(): index z! out of range for tensor of size z at dimension r’   ©rw   rƒ   rŠ   s   €€€r5   rW   zmeta_select.<locals>.<lambda>   s%   ø€ Ð" 5 'Ð)JØ�9‰9‹;ˆ-�~ c Uð,€ r7   )
r  r¦  rw   rH   r†   r“   rµ   r¸   r¾   r4  )	rŠ   rw   rƒ   r¦  r•   r“   Únew_sizer%  Únew_storage_offsets	   ```      r5   Úmeta_selectr¢  �  sñ   ú€ åJà�8‰8‹:€DÜ	×ÑØ�‰	Ù?ôð
 ˜’‰#˜s T™z€CØ�9‰9�S‹>€Dä	×Ñá  % ¨$¡Ó/ÒVÑ3GÈÐQUÉÓ3Vð	
õ	,ô	ð ˜a’Z‰E U¨T¡\€Eä�D—I‘I“KÓ €HÜ�d—k‘k“mÓ$€Jà×,Ñ,Ó.°¸ÀC¹Ñ1HÑHÐØ�ˆØ�3ˆà�?‰?˜8 ZÐ1CÓDÐDr7   c                 ó,   — t        j                  | «      S r2   ©r@   Úclone_preserve_strides)rŠ   r  rw   rƒ   s       r5   Úmeta_select_scatterr¦  °  ó   € ä×'Ñ'¨Ó-Ð-r7   c                 ó,   — t        j                  | «      S r2   r¤  )rŠ   r  rw   ro   rn   Ústeps         r5   Úmeta_slice_scatterrª  µ  r§  r7   Údim_post_exprÚwrap_scalarc                 óv   — |dk  r|sJ ‚d}| }|dz
  }| |k  s| |kD  rJ d| › d|› d|› d�«       ‚| dk  r| |z  } | S )Nr   r³   zdim z out of bounds (rj   rk   r;   )rw   r«  r¬  rê   rŸ  s        r5   r¨   r¨   »  sm   € Ø˜ÒÙÐˆ{ØˆØˆ.€CØ
˜!Ñ
€CØ�c’	˜S 3šYÐR¨4°¨uÐ4DÀSÀEÈÈCÈ5ÐPQÐ)RÓRÐ'Ø
ˆQ‚wØˆ}ÑˆØ€Jr7   c                 óJ   — | j                  «       dk(  rdS | j                  |   S r€  rò  )r¿  rw   s     r5   Úensure_nonempty_sizer¯  Ç  s!   € Ø—‘“˜1’ˆ1Ð. !§'¡'¨#¡,Ð.r7   c                 ó:  ‡ ‡‡‡— t        ‰ j                  «       d«      }t        ‰j                  «       d«      }t        j                  ||k(  d„ «       t	        |«      D ];  Š‰‰k7  sŒ	t        j                  t        ‰‰«      t        ‰ ‰«      k  ˆˆˆˆ fd„«       Œ= y )Nr³   c                   ó   — y)NzDIndex tensor must have the same number of dimensions as input tensorr;   r;   r7   r5   rW   z$gather_shape_check.<locals>.<lambda>Ñ  r_   r7   c                  óN   •— d‰› d‰j                   › �d‰j                   › d‰ › �z   S )Nz!Size does not match at dimension z expected index ú to be no larger than self ú apart from dimension r'  )rw   rÏ   rƒ   rŠ   s   €€€€r5   rW   z$gather_shape_check.<locals>.<lambda>×  s7   ø€ Ð;¸A¸3Ð>NÈuÏ{É{ÈmÐ\Ø/°·
±
¨|Ð;QÐRUÐQVÐWñX€ r7   )rŸ  rw   rH   rY   r¶   r¯  )rŠ   rw   rƒ   Ú	self_dimsÚ
index_dimsrÏ   s   ```  @r5   Úgather_shape_checkr·  Ì  s„   û€ Ü�D—H‘H“J Ó"€IÜ�U—Y‘Y“[ !Ó$€JÜ	‡L�LØ�ZÑÙVôô �9Óò ˆØ�‹8Ü�L‰LÜ$ U¨AÓ.Ô2FÀtÈQÓ2OÑOöXõñr7   c                 ó2  ‡— ddl m} t        || j                  «       «      } |‰j	                  «       dk(  «      }|sAt        j                  ‰j                  t
        j                  k(  ˆfd„«       t        | |‰«       | j                  ‰j                  «      S )Nr   r¥  c                  ó"   •— d‰ j                   › �S )Nz2gather(): Expected dtype int64 for index, but got r�   r‚   s   €r5   rW   zmeta_gather.<locals>.<lambda>å  s   ø€ ÐHÈÏÉÈÐV€ r7   )r  r¦  r¨   rw   r‡   rH   rY   rP   r…   r·  rˆ   r‰   )rŠ   rw   rƒ   Úsparse_gradr¦  Úwrapped_dimÚis_index_emptys     `    r5   Úmeta_gatherr½  Ü  sp   ø€ åJä   d§h¡h£jÓ1€KÙ)¨%¯+©+«-¸1Ñ*<Ó=€NÙÜ�‰Ø�K‰Kœ5Ÿ:™:Ñ%ÛVô	
ô 	˜4 ¨eÔ4Ø�>‰>˜%Ÿ+™+Ó&Ð&r7   c                 óº   — |r6| dk(  ry| dk(  ry| dk(  ry| dk(  ry| d	k(  ry
t        j                  dd„ «       y | dk(  ry| dk(  ryt        j                  dd„ «       y )NrÇ  Ú
REDUCE_ADDrl  ÚREDUCE_MULTIPLYÚmeanÚREDUCE_MEANÚamaxÚREDUCE_MAXIMUMÚaminÚREDUCE_MINIMUMFc                   ó   — y)Nz=reduce argument must be either sum, prod, mean, amax or amin.r;   r;   r7   r5   rW   z#get_operator_enum.<locals>.<lambda>ú  r_   r7   ÚaddÚmultiplyc                   ó   — y)Nz/reduce argument must be either add or multiply.r;   r;   r7   r5   rW   z#get_operator_enum.<locals>.<lambda>  r_   r7   rP  )Úreduce_Úuse_new_optionss     r5   Úget_operator_enumrÍ  ì  s{   € ÙØ�eÒØØ˜ÒØ$Ø˜ÒØ Ø˜ÒØ#Ø˜ÒØ#Ü�‰ØÙSô	
ð 	à�eÒØØ˜
Ò"Ø$Ü�‰�UÑUÔVØr7   c                 ó  ‡ — ddl m}  ||j                  «       dk7  «      r4t        j                  |j
                  t        j                  k(  ˆ fd„«       |�1t        j                  |j
                  |j
                  k(  ˆ fd„«       y y )Nr   r¥  c                  ó   •— ‰ › d�S )Nz"(): Expected dtype int64 for indexr;   ©Úmethod_names   €r5   rW   z,scatter_gather_dtype_check.<locals>.<lambda>  s   ø€ �{�mÐ#EÐF€ r7   c                  ó   •— ‰ › d�S )Nz0(): Expected self.dtype to be equal to src.dtyper;   rÐ  s   €r5   rW   z,scatter_gather_dtype_check.<locals>.<lambda>  s   ø€ �{�mÐ#SÐT€ r7   )r  r¦  r‡   rH   rY   rP   r…   )rÑ  rŠ   rƒ   Úsrc_optr¦  s   `    r5   Úscatter_gather_dtype_checkrÔ    sd   ø€ ÝJá˜EŸK™K›M¨QÑ.Ô/Ü�‰Ø�K‰Kœ5Ÿ:™:Ñ%ÛFô	
ð
 ÐÜ�‰Ø�J‰J˜'Ÿ-™-Ñ'ÛTõ	
ð r7   c                 ó   — t        | d«      S r   )rŸ  r�   s    r5   Úensure_nonempty_dimrÖ    s   € Üˆs�A‹;Ðr7   c                 óê  ‡ ‡‡‡— ddl m}  |‰j                  «       dk(  «      ry t        j                  t        ‰ j                  «       «      t        ‰j                  «       «      k(  d„ «       d}t        ‰ j                  «       «      }t        |«      D ]'  }t        ‰|«      }|‰k(  rŒ|t        ‰ |«      kD  sŒ%d} n |s1‰�/t        |«      D ]!  }t        ‰|«      }|t        ‰|«      kD  sŒd} n ‰�ft        j                  t        ‰ j                  «       «      t        ‰j                  «       «      k(  d„ «       t        j                  | ˆˆˆ ˆfd„«       y t        j                  | ˆˆˆ fd„«       y )	Nr   r¥  c                   ó   — y©NzCIndex tensor must have the same number of dimensions as self tensorr;   r;   r7   r5   rW   z%scatter_shape_check.<locals>.<lambda>#  r_   r7   FTc                   ó   — yrÙ  r;   r;   r7   r5   rW   z%scatter_shape_check.<locals>.<lambda>=  r_   r7   c                  ób   •— d‰j                   › d‰j                   › �d‰ › d‰j                   › �z   S )NúExpected index r³  r´  z and to be no larger than src r'  )rw   rƒ   rŠ   rÓ  s   €€€€r5   rW   z%scatter_shape_check.<locals>.<lambda>A  s8   ø€ �o e§k¡k ]Ð2MÈdÏjÉjÈ\ÐZØ& s eÐ+IÈ'Ï-É-ÈÐYñZ€ r7   c                  óH   •— d‰j                   › d‰j                   › �d‰ › �z   S )NrÜ  r³  r´  r'  rŸ  s   €€€r5   rW   z%scatter_shape_check.<locals>.<lambda>G  s,   ø€ �o e§k¡k ]Ð2MÈdÏjÉjÈ\ÐZØ& s eÐ,ñ-€ r7   )	r  r¦  r‡   rH   rY   rÖ  rw   r¶   r¯  )	rŠ   rw   rƒ   rÓ  r¦  Úis_wrong_shaperµ  rÆ   Úindex_d_sizes	   ````     r5   Úscatter_shape_checkrà    sP  û€ ÝJá˜EŸK™K›M¨QÑ.Ô/ØÜ	‡L�LÜ˜DŸH™H›JÓ'Ô+>¸u¿y¹y»{Ó+KÑKÙUôð
 €NÜ# D§H¡H£JÓ/€Iô �9Óò ˆÜ+¨E°1Ó5ˆØ�Š8ØØÔ.¨t°QÓ7Ó7Ø!ˆNÙðñ ˜gÐ1Ü�yÓ!ò 	ˆAÜ/°°qÓ9ˆLØÔ2°7¸AÓ>Ó>Ø!%�Ùð		ð ÐÜ�‰Ü §¡£
Ó+Ô/BÀ5Ç9Á9Ã;Ó/OÑOÙYô	
ô 	�‰ØÐöZõ	
ô 	�‰ØÐõ-õ	
r7   c                 óŽ   — t        || j                  «       «      }t        d| ||«       t        | |||«       |�t	        ||«       y y )NÚscatter)r¨   rw   rÔ  rà  rÍ  )rŠ   rw   rƒ   r  rË  rÌ  r»  s          r5   Úscatter_meta_implrã  M  sE   € Ü   d§h¡h£jÓ1€KÜ˜y¨$°°sÔ;Ü˜˜k¨5°#Ô6ØÐä˜' ?Õ3ð r7   c                 óV   — t        | |||d«       | j                  | j                  «      S ©NrÈ  ©rã  rˆ   r‰   ©rŠ   rw   rƒ   r  s       r5   Úmeta_scatter_addrè  V  s%   € ä�d˜C ¨¨UÔ3Ø�>‰>˜$Ÿ*™*Ó%Ð%r7   c                 ó$   — t        | |||d«       | S rå  ©rã  rç  s       r5   Úmeta_scatter_add_rë  \  s   € ä�d˜C ¨¨UÔ3Ø€Kr7   c                 ó’   — t        |t        j                  «      r|nd }t        | ||||«       | j	                  | j
                  «      S r2   )rb   rH   r   rã  rˆ   r‰   ©rŠ   rw   rƒ   Úsrc_or_valuerY  r  s         r5   Úmeta_scatterrï  b  s;   € ô % \´5·<±<Ô@‰,Àd€CÜ�d˜C ¨¨VÔ4Ø�>‰>˜$Ÿ*™*Ó%Ð%r7   c                 ó`   — t        |t        j                  «      r|nd }t        | ||||«       | S r2   )rb   rH   r   rã  rí  s         r5   Úmeta_scatter_rñ  q  s-   € ô % \´5·<±<Ô@‰,Àd€CÜ�d˜C ¨¨VÔ4Ø€Kr7   Úqueryr±   rê  Ú	dropout_pÚ	is_causalÚreturn_debug_maskrZ  c           	      óV  — | j                  d«      }| j                  d«      }| j                  d«      }	| j                  d«      }
|j                  d«      }| j                  dd«      }t        j                  |«      j                  dd«      }t        j                  |||	ft        j
                  | j                  ¬«      }|ra|
dkD  rdnd}t        j                  |	|z  «      }|dk  rd}n|dk  rd}t        j                  |||	|f| j                  | j                  ¬«      }n,t        j                  d| j                  | j                  ¬«      }t        j                  j                  rkt        j                  j                  «       rMt        j                  d	t        j                  d
¬«      }t        j                  d	t        j                  d
¬«      }nLt        j                  dt        j                  d
¬«      }t        j                  d	t        j                  d
¬«      }||d d |	||||f	S )Nr   r³   rà   r-   r“  é@   é€   é   r;   rr   )r“   rî  rH   rŸ   r|   rL   rt   rk  ÚceilrP   ÚversionÚhiprä   r@  r…   r  )rò  r±   rê  ró  rô  rõ  rZ  rÍ   Ú	num_headsÚmax_seqlen_batch_qÚhead_dimÚmax_seqlen_batch_kÚquery_tÚ	attentionÚ	logsumexpÚblocksize_cÚmax_seqlen_kÚ
debug_maskÚseedÚoffsets                       r5   Ú(meta__scaled_dot_product_flash_attentionr	    s½  € ð —‘˜A“€JØ—
‘
˜1“€IØŸ™ A›ÐØ�z‰z˜!‹}€HØŸ™ !›Ðà�o‰o˜a Ó#€GÜ× Ñ  Ó)×3Ñ3°A°qÓ9€IÜ—‘Ø	�YÐ 2Ð3Ü�k‰kØ�|‰|ô€Iñ Ø%¨š]‘c°ˆÜ—y‘yÐ!3°kÑ!AÓBˆØ Ò$Ø‰LØ 3Ò&ØˆLÜ—[‘[Ø˜Ð$6¸ÐEØ—+‘+Ø—<‘<ô
‰
ô —[‘[ ¨%¯+©+¸e¿l¹lÔKˆ
ô ‡}�}×ÒœUŸZ™Z×4Ñ4Ô6ä�{‰{˜2¤U§Z¡Z¸Ô?ˆÜ—‘˜R¤u§z¡z¸&ÔA‰ä�{‰{˜A¤e§l¡l¸6ÔBˆÜ—‘˜R¤u§|¡|¸FÔCˆð 	ØØØØØØØØð
ð 
r7   Ú	attn_biasÚcompute_log_sumexpc	           	      ó   — | j                  d«      }	| j                  d«      }
| j                  d«      }|j                  d«      }|j                  d«      }t        j                  |	|
||f| j                  | j                  ¬«      }t        j                  |	|
|ft        j
                  | j                  ¬«      }t        j                  dt        j                  d¬«      }t        j                  dt        j                  d¬«      }||d d ||||d f	S ©Nr   r³   rà   rŒ   r“  r;   rr   ©r“   rH   r|   rP   rt   rL   r…   )rò  r±   rê  r
  r  ró  rô  rõ  rZ  rÉ  rþ  ÚS_QÚS_KVÚD_VrŠ  Ú
logsum_expr  r  s                     r5   Ú(meta__scaled_dot_product_cudnn_attentionr  À  sâ   € ð 	�
‰
�1‹€AØ�
‰
�1‹€AØ
�*‰*�Q‹-€CØ�8‰8�A‹;€DØ
�*‰*�R‹.€Cä
�+‰+�q˜!˜S #Ð&¨e¯k©kÀ%Ç,Á,Ô
O€CÜ—‘Ø	
ˆAˆsˆÜ�k‰kØ�|‰|ô€Jô �;‰;�r¤§¡°FÔ;€DÜ�[‰[˜¤5§:¡:°fÔ=€Fð 	ØØØØØØØØð
ð 
r7   c           	      ó   — | j                  d«      }| j                  d«      }	| j                  d«      }
|j                  d«      }|j                  d«      }t        j                  ||	|
|f| j                  | j                  ¬«      }t        j                  ||	|
ft        j
                  | j                  ¬«      }t        j                  dt        j                  d¬«      }t        j                  dt        j                  d¬«      }||d d |
|||d f	S r  r  )rò  r±   rê  r
  ró  rô  rõ  rZ  rÉ  rþ  r  r  r  rŠ  r  r  r  s                    r5   Ú5meta__scaled_dot_product_fused_attention_overrideabler  ê  sâ   € ð 	�
‰
�1‹€AØ�
‰
�1‹€AØ
�*‰*�Q‹-€CØ�8‰8�A‹;€DØ
�*‰*�R‹.€Cä
�+‰+�q˜!˜S #Ð&¨e¯k©kÀ%Ç,Á,Ô
O€CÜ—‘Ø	
ˆAˆsˆÜ�k‰kØ�|‰|ô€Jô �;‰;�r¤§¡°FÔ;€DÜ�[‰[˜¤5§:¡:°fÔ=€Fð 	ØØØØØØØØð
ð 
r7   r\  r  Ú	cum_seq_qÚ	cum_seq_kÚmax_qÚmax_kÚphilox_seedÚphilox_offsetc                 óJ  — t        j                  |j                  dd«      «      j                  dd«      }t        j                  |j                  dd«      «      j                  dd«      }t        j                  |j                  dd«      «      j                  dd«      }|||fS r^  )rH   rŸ   rî  )r\  rò  r±   rê  r¿   r  r  r  r  r  ró  rô  r  r  rZ  Úgrad_qÚgrad_kÚgrad_vs                     r5   Ú'meta__scaled_dot_product_flash_backwardr     s‰   € ô, ×Ñ˜eŸo™o¨a°Ó3Ó4×>Ñ>¸qÀ!ÓD€FÜ×Ñ˜cŸm™m¨A¨qÓ1Ó2×<Ñ<¸QÀÓB€FÜ×Ñ˜eŸo™o¨a°Ó3Ó4×>Ñ>¸qÀ!ÓD€FØ�6˜6Ð!Ð!r7   Ú	attn_maskc                 ó   — | j                  d«      }| j                  d«      }| j                  d«      }	t        j                  | «      }
t        j                  ||	|ft        j                  | j
                  ¬«      j                  dd«      }|
|fS )Nr   r³   rà   r“  )r“   rH   rŸ   r|   rL   rt   rî  )rò  r±   rê  ró  rô  r!  rZ  rÍ   rý  rþ  r  r  s               r5   Ú0meta__scaled_dot_product_flash_attention_for_cpur#  /  sŠ   € ð —‘˜A“€JØ—
‘
˜1“€IØŸ™ A›Ðä× Ñ  Ó'€IÜ—‘àØØð	
ô
 �k‰kØ�|‰|ô÷ �i��1ƒoð ð 	Øðð r7   c
                 óÜ  — |j                  d«      }
|j                  d«      }|j                  d«      }|j                  d«      }|j                  d«      }t        j                  |
|||fd|j                  |j                  ¬«      }t        j                  |
|||fd|j                  |j                  ¬«      }t        j                  |
|||fd|j                  |j                  ¬«      }|||fS )Nr   r³   r-   rà   ©r   rà   r³   r-   r“  )r“   rH   Úempty_permutedrP   rt   )r\  rò  r±   rê  r¿   r  ró  rô  r!  rZ  rÍ   rý  rÿ  Úlen_qÚlen_kr  r  r  s                     r5   Ú9meta__scaled_dot_product_flash_attention_for_cpu_backwardr)  Q  sß   € ð& —‘˜A“€JØ—
‘
˜1“€IØ�z‰z˜!‹}€HØ�J‰J�q‹M€EØ�H‰H�Q‹K€Eä×!Ñ!Ø	�Y  xÐ0ØØ�k‰kØ�|‰|ô	€Fô ×!Ñ!Ø	�Y  xÐ0ØØ�i‰iØ�z‰zô	€Fô ×!Ñ!Ø	�Y  xÐ0ØØ�k‰kØ�|‰|ô	€Fð �6˜6Ð!Ð!r7   c                 ó@  — | j                  dd«      } |j                  dd«      }|j                  dd«      }| j                  d«      }| j                  d«      }	| j                  d«      }
|j                  d«      }t        j                  ||	|
|| j                  | j
                  ¬«      }t        j                  j                  r&t        j                  j                  «       r	 |r|	nd}n|rt        j                  |	dz  «      dz  nd}t        j                  ||
|ft        j                  | j
                  ¬«      }|j                  dd«      }t        j                  dt        j                  d	¬«      }t        j                  dt        j                  d	¬«      }||||fS )
Nr³   rà   r   r±  rŒ   r“  rø  r;   rr   )rî  r“   rH   r|   rP   rt   rû  rü  rä   r@  rk  rú  rL   r…   )rò  r±   rê  r
  r  ró  rô  rZ  rÉ  r•  rý  ÚKvrŠ  Úlogsumexp_dimr  r  r  s                    r5   Ú,meta__scaled_dot_product_efficient_attentionr-  €  sD  € ð �O‰O˜A˜qÓ!€EØ
�-‰-˜˜1Ó
€CØ�O‰O˜A˜qÓ!€Eà�
‰
�1‹€AØ�
‰
�1‹€AØ—
‘
˜2“€IØ	�‰�B‹€Bä
�+‰+�a˜˜I r°·±ÀUÇ\Á\Ô
R€Cä‡}�}×ÒœUŸZ™Z×4Ñ4Ô6ð	ñ 0™°Q‰á2DœŸ	™	 ! b¡&Ó)¨BÒ.È!ˆä—‘Ø	
ˆI�}Ð%Ü�k‰kØ�|‰|ô€Jð �-‰-˜˜1Ó
€Cô �;‰;�r¤§¡°FÔ;€DÜ�[‰[˜¤5§:¡:°fÔ=€Fà�
˜D &Ð(Ð(r7   Úgrad_input_maskc                 ó  — |j                  d«      }|j                  d«      }|j                  d«      }|j                  d«      }|j                  d«      }|j                  d«      }t        j                  ||||fd|j                  |j                  ¬«      }t        j                  ||||fd|j                  |j                  ¬«      }t        j                  ||||fd|j                  |j                  ¬«      }d }|�~|
d   ry|j                  d«      }|dz  dk(  r|n
|dz   |dz  z
  }t        |j                  «       «      }||d<   t        j                  ||j                  |j                  ¬«      }|d	d |…f   }||||fS )
Nr   r³   rà   r-   r%  r“  rŒ   rK  .)r“   rH   r&  rP   rt   rµ   r|   )r\  rò  r±   rê  r
  r¿   r  r  r  ró  r.  rô  rZ  rÍ   rý  r  rÿ  Ú
head_dim_vr  r  r  r  Ú	grad_biasÚlastDimÚlastDimAlignedÚ	new_sizess                             r5   Ú+meta__scaled_dot_product_efficient_backwardr5  ­  s{  € ð( —‘˜A“€JØ—
‘
˜1“€IØ�J‰J�q‹M€EØ�z‰z˜!‹}€HØ—‘˜A“€Jà�H‰H�Q‹K€Eä×!Ñ!Ø	�Y  xÐ0ØØ�k‰kØ�|‰|ô	€Fô ×!Ñ!Ø	�Y  xÐ0ØØ�i‰iØ�z‰zô	€Fô ×!Ñ!Ø	�Y  zÐ2ØØ�k‰kØ�|‰|ô	€Fð €IØÐ °Ò!3Ø—.‘. Ó$ˆØ$+¨b¡L°AÒ$5™¸7ÀR¹<È'ÐTVÉ,Ñ;VˆÜ˜Ÿ™Ó)Ó*ˆ	Ø&ˆ	�"‰Ü—K‘KØ˜YŸ_™_°Y×5EÑ5Eô
ˆ	ð ˜c 8 G 8˜mÑ,ˆ	à�6˜6 9Ð,Ð,r7   c                 óŠ   — t        j                  |«      }t        j                  |«      }t        j                  |«      }|||fS r2   rP  )r\  rò  r±   rê  r¿   r  r  r  r
  r  r  r  r  ró  rô  rZ  r  r  r  s                      r5   Ú'meta__scaled_dot_product_cudnn_backwardr7  é  sA   € ô. ×Ñ˜eÓ$€FÜ×Ñ˜cÓ"€FÜ×Ñ˜eÓ$€FØ�6˜6Ð!Ð!r7   Úwindow_size_leftÚwindow_size_rightÚ	seqused_kÚalibi_slopesc                 óÚ  — |€| j                  d«      n|j                  «       dz
  }|€| j                  d«      n|}|€|j                  d«      n|}| j                  d«      }| j                  d«      }t        j                  | «      }|€4t        j                  |||ft        j
                  | j                  ¬«      }nC| j                  d«      }t        j                  ||ft        j
                  | j                  ¬«      }|	ra|dkD  rdnd}t        j                  ||z  «      }|dk  rd}n|dk  rd}t        j                  ||||f| j                  | j                  ¬«      }n,t        j                  d| j                  | j                  ¬«      }d	\  }}t        j                  j                  rkt        j                  j                  «       rMt        j                  d
t        j                  d¬«      }t        j                  d
t        j                  d¬«      }nLt        j                  dt        j                  d¬«      }t        j                  d
t        j                  d¬«      }|||||fS )Nr   r³   r±  rŒ   r“  r÷  rø  rù  ©NNr;   rr   rà   )r“   r‡   rH   rŸ   r|   rL   rt   rk  rú  rP   rû  rü  rä   r@  r…   r  )rò  r±   rê  r  r  r  r  ró  rô  rõ  rZ  r8  r9  r:  r;  rÍ   rþ  r   rý  rÿ  r  r  Útotal_qr  r  r  r  r  s                               r5   Úmeta__flash_attention_forwardr?    sõ  € ð4 #,Ð"3�—‘˜A”¸¿¹Ó9JÈQÑ9N€JØ*3Ð*;˜Ÿ™ AœÀÐØ(1Ð(9˜Ÿ™ !œ¸uÐØ—
‘
˜2“€IØ�z‰z˜"‹~€Hô × Ñ  Ó'€IØÐÜ—K‘KØ˜Ð$6Ð7Ü—+‘+Ø—<‘<ô
‰	ð —*‘*˜Q“-ˆÜ—K‘KØ˜Ð ¬¯©¸E¿L¹Lô
ˆ	ñ Ø%¨š]‘c°ˆÜ—y‘yÐ!3°kÑ!AÓBˆØ Ò$Ø‰LØ 3Ò&ØˆLÜ—[‘[Ø˜Ð$6¸ÐEØ—+‘+Ø—<‘<ô
‰
ô —[‘[ ¨%¯+©+¸e¿l¹lÔKˆ
ð �L€Dˆ&Ü‡}�}×ÒœUŸZ™Z×4Ñ4Ô6ä�{‰{˜2¤U§Z¡Z¸Ô?ˆÜ—‘˜R¤u§z¡z¸&ÔA‰ä�{‰{˜A¤e§l¡l¸6ÔBˆÜ—‘˜R¤u§|¡|¸FÔCˆàØØØØðð r7   c                 óŠ   — t        j                  |«      }t        j                  |«      }t        j                  |«      }|||fS r2   rP  )r\  rò  r±   rê  r¿   r  r  r  r  r  ró  rô  r  r  rZ  r8  r9  Ú
grad_queryÚgrad_keyÚ
grad_values                       r5   Úmeta__flash_attention_backwardrD  V  sA   € ô0 ×!Ñ! %Ó(€JÜ×Ñ Ó$€HÜ×!Ñ! %Ó(€Jà�x Ð+Ð+r7   Úcu_seqlens_qÚcu_seqlens_kÚmax_seqlen_qr  Úcustom_mask_typeÚcausal_diagonalÚseqlen_kÚwindow_sizec                 ó¦  — | j                  d«      }| j                  d«      }|j                  d«      }| j                  d«      }|j                  d«      }t        j                  ||||| j                  | j                  ¬«      }|�|j                  d«      dz
  n|}|}|�|€J ‚|}|�|n|}|
rt        j                  |dz  «      dz  nd}t        j                  |||ft        j                  | j                  ¬«      }t        j                  dt        j                  d¬«      }t        j                  dt        j                  d¬«      }||||||fS )	Nr   r³   r±  rŒ   r“  rø  r;   rr   )	r“   rH   r|   rP   rt   rk  rú  rL   r…   )rò  r±   rê  r-  rE  rF  rG  r  ró  rH  r  rZ  rI  rJ  rK  rÉ  r•  rj  rý  r+  rŠ  Úlogsumexp_batch_dimÚactual_max_seqlen_qÚactual_max_seqlen_kr,  r  r  r  s                               r5   Ú!meta__efficient_attention_forwardrP  u  s9  € ð, 	�
‰
�1‹€AØ�
‰
�1‹€AØ�‰�‹€AØ—
‘
˜2“€IØ	�‰�B‹€Bä
�+‰+�a˜˜I r°·±ÀUÇ\Á\Ô
R€Cà7CÐ7O˜,×+Ñ+¨AÓ.°Ò2ÐVWÐØÐØÐØÐ'Ð'Ð'Ø*ÐØ*6Ð*B™,ÈÐá4FŒ�	‰	Ð%¨Ñ*Ó+¨bÒ0ÈAð ô —‘Ø	˜i¨Ð7Ü�k‰kØ�|‰|ô€Jô �;‰;�r¤§¡°FÔ;€DÜ�[‰[˜¤5§:¡:°fÔ=€Fà�
˜D &Ð*=Ð?RÐRÐRr7   Úbias_requires_gradÚnum_splits_keyÚshared_storage_dqdkdvc                 óÀ  — |rût        j                  |j                  d   |j                  d   k(  d„ «       t        j                  |j                  d   |j                  d   k(  d„ «       t        j                  g |j                  dd ¢d‘|j                  d   ‘|j                  d   ‘­|j                  |j
                  ¬«      }|j                  d	d«      }|j                  d	d«      }|j                  d	d
«      }n?t        j                  |«      }t        j                  |«      }t        j                  |«      }|�z|j                  d«      }|dz  dk(  r|n
|dz   |dz  z
  }t        |j                  «       «      }||d<   t        j                  ||j                  |j
                  ¬«      }|dd |…f   }n!t        j                  d|j
                  ¬«      }||||fS )Nr³   c                   ó   — y)Nz,seqlen must match for `shared_storage_dqdkdvr;   r;   r7   r5   rW   z4meta__efficient_attention_backward.<locals>.<lambda>Å  r_   r7   r-   c                   ó   — y)Nz3embedding dim must match for `shared_storage_dqdkdvr;   r;   r7   r5   rW   z4meta__efficient_attention_backward.<locals>.<lambda>É  r_   r7   r   r±  rŒ   r“  r  rà   rK  .r;   r™  )
rH   rY   r‰   r|   rP   rt   r¨  rŸ   r“   rµ   )r\  rò  r±   rê  r-  rE  rF  rG  r  r  ró  r  r  rH  rQ  rZ  rR  rS  ÚchunkrA  rB  rC  r2  r3  r4  r1  s                             r5   Ú"meta__efficient_attention_backwardrX  ©  s¤  € ñ2 Ü�‰Ø�K‰K˜‰N˜cŸi™i¨™lÑ*ÙBô	
ô 	�‰Ø�K‰K˜‰N˜cŸi™i¨™lÑ*ÙIô	
ô —‘ØEˆe�k‰k˜!˜BÐÐE ÐE E§K¡K°¡OÐE°U·[±[À±_ÑEØ—+‘+Ø—<‘<ô
ˆð
 —\‘\ " aÓ(ˆ
Ø—<‘<  AÓ&ˆØ—\‘\ " aÓ(‰
ä×%Ñ% eÓ,ˆ
Ü×#Ñ# CÓ(ˆÜ×%Ñ% eÓ,ˆ
àÐØ—)‘)˜B“-ˆØ$+¨b¡L°AÒ$5™¸7ÀR¹<È'ÐTVÉ,Ñ;VˆÜ˜Ÿ™›Ó%ˆ	Ø&ˆ	�"‰Ü—K‘K 	°·±ÀDÇKÁKÔPˆ	Ø˜c 8 G 8˜mÑ,‰	ä—K‘K ¨5¯<©<Ô8ˆ	à�x ¨YÐ6Ð6r7   Úscale_aÚscale_bÚscale_resultÚuse_fast_accumc                 ó   ‡ ‡‡‡‡‡— d„ }t        j                  ‰ j                  «       dk(  xr ‰j                  «       dk(  ˆˆ fd„«       t        j                   |‰ j                  «      xr  |‰j                  «      ˆˆ fd„«       t	        ‰ «      dk(  �rhd„ }	d„ }
d„ }t        j                   |	‰ j                  «       «      xs  |‰ «      ˆ fd	„«       t        j                   |
‰j                  «       «      xs  |‰«      ˆfd
„«       t        j                  ‰ j                  d«      dz  dk(  ˆ fd„«       t        j                  ‰j                  d«      dz  dk(  xr ‰j                  d«      dz  dk(  ˆfd„«       t        j                  ‰j                  t         j                  k(  xr ‰j                  t         j                  k(  d„ «       ‰ j                  \  Š}‰j                  d«      Š‰j                  «       dk(  r‰j                  «       dk(  rnät        j                  ‰j                  «       dk(  xr ‰j                  «       dk(  ˆˆfd„«       ‰j                  d«      ‰k(  rt‰j                  d«      dk(  r`‰j                  d«      dk(  rL‰j                  d«      ‰k(  r8t        j                  ‰j                  «       xr ‰j                  «       d„ «       nt        j                  dˆˆˆˆfd„«       |�|n‰ j                  }t        j                  ‰ j                  d«      ‰j                  d«      |‰ j                  ¬«      S )Nc                 ó‚   — | t         j                  t         j                  t         j                  t         j                  fv S r2   )rH   rO  Úfloat8_e5m2Úfloat8_e4m3fnuzÚfloat8_e5m2fnuzr�   s    r5   Úis_fp8_typez#meta_scaled_mm.<locals>.is_fp8_typeð  s8   € ØÜ×ÑÜ×ÑÜ×!Ñ!Ü×!Ñ!ð	
ð 
ð 	
r7   rà   c                  óL   •— d‰j                  «       › d‰ j                  «       › �S )Nz%Inputs must be 2D but got self.dim()=z and mat2.dim()=r�   ©r:  rŠ   s   €€r5   rW   z meta_scaled_mm.<locals>.<lambda>ú  s'   ø€ Ð7¸¿¹»
°|ÐCSÐTX×T\ÑT\ÓT^ÐS_Ð`€ r7   c                  ó<   •— d‰j                   › d‰ j                   › �S )Nz8Expected both inputs to be fp8 types but got self.dtype=z and mat2.dtype=r�   rd  s   €€r5   rW   z meta_scaled_mm.<locals>.<lambda>þ  s"   ø€ ÐJÈ4Ï:É:È,ÐVfÐgk×gqÑgqÐfrÐs€ r7   rä   c                 ó,   — | d   | d   kD  xr | d   dk(  S r€  r;   r�  s    r5   Úis_row_majorz$meta_scaled_mm.<locals>.is_row_major  s"   € Ø˜!‘9˜v a™yÑ(Ò;¨V°A©Y¸!©^Ð;r7   c                 ó&   — | d   dk(  xr | d   dkD  S r€  r;   r�  s    r5   Úis_col_majorz$meta_scaled_mm.<locals>.is_col_major  s   € Ø˜!‘9 ‘>Ò3 f¨Q¡i°!¡mÐ3r7   c                 óV   — | j                  d«      dk(  xs | j                  d«      dk(  S r€  r’   )Ú	tensor_2ds    r5   Úhas_zero_dimz$meta_scaled_mm.<locals>.has_zero_dim	  s)   € Ø—>‘> !Ó$¨Ñ)ÒC¨Y¯^©^¸AÓ->À!Ñ-CÐCr7   c                  ó*   •— d‰ j                  «       › �S )Nz#self must be row_major, got stride r�  r¡   s   €r5   rW   z meta_scaled_mm.<locals>.<lambda>  ó   ø€ Ð9¸$¿+¹+»-¸ÐI€ r7   c                  ó*   •— d‰ j                  «       › �S )Nz#mat2 must be col_major, got stride r�  ©r:  s   €r5   rW   z meta_scaled_mm.<locals>.<lambda>  rn  r7   r³   rK  r   c                  ó,   •— d‰ j                  d«      › �S )NzBExpected self.size(1) to be divisible by 16, but got self.size(1)=r³   r’   r¡   s   €r5   rW   z meta_scaled_mm.<locals>.<lambda>  s   ø€ ÐXÐY]×YbÑYbÐcdÓYeÐXfÐg€ r7   c                  ó"   •— d‰ j                   › �S )Nz>Expected both dimensions of mat2 to be divisble by 16 but got r'  rp  s   €r5   rW   z meta_scaled_mm.<locals>.<lambda>  s   ø€ ÐTÐUY×U_ÑU_ÐT`Ða€ r7   c                   ó   — y)Nz6Both scale_a and scale_b must be float (fp32) tensors.r;   r;   r7   r5   rW   z meta_scaled_mm.<locals>.<lambda>   r_   r7   c                  óL   •— d‰ j                  «       ›d‰j                  «       ›�S )NzLFor non-tensorwise scaling, scale tensors must be 2D, but got scale_a.dim()=z and scale_b.dim()=r�   )rY  rZ  s   €€r5   rW   z meta_scaled_mm.<locals>.<lambda>+  s,   ø€ ÐgÐY`×YdÑYdÓYfÐXhÐh|Ðnu×nyÑnyÓn{Ðm}Ð~€ r7   c                   ó   — y)Nz@Both scale_a and scale_b must be contiguous for rowwise scaling.r;   r;   r7   r5   rW   z meta_scaled_mm.<locals>.<lambda>7  r_   r7   Fc                  ó¦   •— d‰ › d‰› d‰j                  d«      › d‰j                  d«      › d‰j                  d«      › d‰j                  d«      › d�S )	Nz}Invalid scaling configuration. For tensorwise scaling, both scales should be scalar. For rowwise scaling, scale_a should be (z, 1), scale_b should be (1, z). Got scale_a.size()=(r   rj   r³   z) and scale_b.size()=(rk   r’   )rT  rù   rY  rZ  s   €€€€r5   rW   z meta_scaled_mm.<locals>.<lambda>=  sk   ø€ ðCàCDÀ#ÐEaÐbcÐadð e/Ø/6¯|©|¸A«Ð.?¸rÀ'Ç,Á,ÈqÃ/ÐARð S/Ø/6¯|©|¸A«Ð.?¸rÀ'Ç,Á,ÈqÃ/ÐARÐRSð	Uð r7   r“  )rH   rY   rw   rP   ré   r¸   r“   rL  r‰   r‡   rP  r|   rt   )rŠ   r:  rY  rZ  r-  r[  r/  r\  rb  rg  ri  rl  Ú_kÚ
_out_dtyperT  rù   s   ````          @@r5   Úmeta_scaled_mmry  å  sŽ  ý€ ò
ô 
‡L�LØ�‰‹
�a‰Ò+˜DŸH™H›J¨!™OÜ`ôô 
‡L�LÙ�D—J‘JÓÒ;¡K°·
±
Ó$;Üsôô
 �4Ó˜FÓ"ò	<ò	4ò	Dô 	�‰Ù˜Ÿ™›Ó'Ò=©<¸Ó+=ÛIô	
ô 	�‰Ù˜Ÿ™›Ó'Ò=©<¸Ó+=ÛIô	
ô 	�‰Ø�I‰I�a‹L˜2Ñ Ñ"Ûgô	
ô 	�‰Ø�I‰I�a‹L˜2Ñ Ñ"Ò= t§y¡y°£|°bÑ'8¸AÑ'=Ûaô	
ô 	�‰Ø�M‰MœUŸ]™]Ñ*ÒM¨w¯}©}ÄÇÁÑ/MÙLô	
ð —
‘
‰ˆˆ2Ø�I‰I�a‹LˆØ�=‰=‹?˜aÒ G§M¡M£O°qÒ$8àô �L‰LØ—‘“ Ñ"Ò9 w§{¡{£}¸Ñ'9Ü~ôð —‘˜Q“ 1Ò$Ø—L‘L “O qÒ(Ø—L‘L “O qÒ(Ø—L‘L “O qÒ(ô —‘Ø×)Ñ)Ó+ÒG°×0EÑ0EÓ0GÙ^õô —‘Øöô	ð (Ð3‘¸¿¹€JÜ�;‰;�t—y‘y “| T§Y¡Y¨q£\¸ÈDÏKÉKÔXÐXr7   c                 óZ   — t        | ||||d¬«       | j                  | j                  «      S ©NT)rÌ  ræ  ©rŠ   rw   rƒ   r  rY  rW  s         r5   Úmeta_scatter_reduce_twor}  J  s)   € ô �d˜C ¨¨VÀTÕJØ�>‰>˜$Ÿ*™*Ó%Ð%r7   c                 ó(   — t        | ||||d¬«       | S r{  rê  r|  s         r5   Úmeta_scatter_reduce__twor  Q  s   € ä�d˜C ¨¨VÀTÕJØ€Kr7   c                ót  ‡ — t        j                  d‰ j                  «       cxk  xr dk  nc ˆ fd„«       ‰ j                  «       dk(  r0t        j                  |t         j                  ‰ j
                  ¬«      S t        j                  ‰ j                  d«      |t         j                  ‰ j
                  ¬«      S )Nr   rà   c                  ó*   •— d‰ j                  «       › �S )Nz@The probabilty distributions dimensions must be 1 or 2, but got r�   r	  s   €r5   rW   z"meta_multinomial.<locals>.<lambda>\  s   ø€ ÐRÐSX×S\ÑS\ÓS^ÐR_Ð`€ r7   r³   r“  )rH   rY   rw   r|   r…   rt   r“   )rË   Únum_samplesÚreplacementrö   s   `   r5   Úmeta_multinomialr„  W  s|   ø€ ô 
‡L�LØ	ˆE�I‰I‹KÖ˜1ÔÛ`ôð ‡y�yƒ{�aÒÜ�{‰{˜;¬e¯j©jÀÇÁÔNÐNÜ�;‰;Ø�
‰
�1‹�{¬%¯*©*¸U¿\¹\ôð r7   c                 ó"   — d}| D ]  }||z  }Œ	 |S r   r;   )ÚvsrN  Úvs      r5   Úmultiply_integersrˆ  e  s$   € Ø	€AØò ˆØ	ˆQ‰‰ðà€Hr7   c                 óL  ‡ ‡‡‡— t        j                  t        ‰«      ‰k(  ˆˆfd„«       ‰dz   Št        j                  t        ‰ «      ‰k(  ˆˆ fd„«       t        j                  t        d„ ‰ dd  D «       «      xr t        d„ ‰D «       «      ˆ ˆfd„«       ‰ d d \  }}||g‰¢­S )Nc                  ó&   •— d‰ › dt        ‰«      › �S )Nz%It is expected output_size equals to ú, but got size r»  )Únum_spatial_dimsrS  s   €€r5   rW   z'upsample_common_check.<locals>.<lambda>o  s   ø€ Ð7Ð8HÐ7IÈÔY\Ð]hÓYiÐXjÐk€ r7   rà   c                  ó&   •— d‰ › dt        ‰«      › �S )Nz$It is expected input_size equals to r‹  r»  )Úexpected_input_dimsr)  s   €€r5   rW   z'upsample_common_check.<locals>.<lambda>t  s   ø€ Ð6Ð7JÐ6KÈ?Ô[^Ð_iÓ[jÐZkÐl€ r7   c              3   ó&   K  — | ]	  }|d kD  –— Œ y­wrƒ  r;   ©rd   r•  s     r5   rf   z(upsample_common_check.<locals>.<genexpr>x  s   è ø€ Ò*�aˆA��EÑ*ùr„  c              3   ó&   K  — | ]	  }|d kD  –— Œ y­wrƒ  r;   r�  s     r5   rf   z(upsample_common_check.<locals>.<genexpr>x  s   è ø€ Ò2N¸Q°1°qµ5Ñ2Nùr„  c                  ó   •— d‰ › d‰› �S )NzDInput and output sizes should be greater than 0, but got input size z and output size r;   )r)  rS  s   €€r5   rW   z'upsample_common_check.<locals>.<lambda>y  s   ø€ ð Ø �\Ð!2°;°-ðA€ r7   )rH   rY   r´   r�  )r)  rS  rŒ  rÒ  ÚchannelsrŽ  s   ```  @r5   Úupsample_common_checkr”  l  s£   û€ Ü	‡L�LÜˆKÓÐ,Ñ,Ükôð +¨QÑ.ÐÜ	‡L�LÜˆJ‹Ð.Ñ.Ülôô
 
‡L�LÜÑ*˜: a b˜>Ô*Ó*ÒN¬sÑ2NÀ+Ô2NÓ/Nô	Aôð " " 1�~Ñ€FˆHØ�HÐ+˜{Ñ+Ð+r7   c                 ó4  ‡ — t        j                  ‰ j                  «       dk7  xs t        ‰ j	                  «       dd  «      ˆ fd„«       t        ‰ j	                  «       |d¬«      }‰ j                  |«      j                  t        j                  ‰ «      ¬«      S )Nr   r³   c                  ó*   •— d‰ j                  «       › �S )Nz>Non-empty 3D data tensor expected but got a tensor with sizes r’   r	  s   €r5   rW   z$upsample_nearest1d.<locals>.<lambda>‡  ó   ø€ ÐPÐQV×Q[ÑQ[ÓQ]ÐP^Ð_€ r7   ©rŒ  r›   ©
rH   rY   r‡   rˆ  r“   r”  rˆ   r  r@   rŽ  )rË   rS  ÚscalesÚfull_output_sizes   `   r5   Úupsample_nearest1drœ  �  ó†   ø€ ô 
‡L�LØ�‰‹˜ÑÒAÔ/°·
±
³¸Q¸RÐ0@ÓAÛ_ôô -Ø�
‰
‹�k°AôÐð �?‰?Ð+Ó,×/Ñ/Ü×1Ñ1°%Ó8ð 0ó ð r7   c                 ó¾  ‡ — t        j                  ‰ j                  «       dk7  xs t        ‰ j	                  «       dd  «      ˆ fd„«       t        ‰ j	                  «       |d¬«      }‰ j                  |«      }t        j                  ‰ «      }‰ j                  \  }}}}‰ j                  j                  dk(  r|dk  rt         j                  }|j                  |¬«      }|S )	Nr   r³   c                  ó*   •— d‰ j                  «       › �S ©Nz>Non-empty 4D data tensor expected but got a tensor with sizes r’   r	  s   €r5   rW   z$upsample_nearest2d.<locals>.<lambda>—  r—  r7   rà   r˜  rä   ró  r›   )rH   rY   r‡   rˆ  r“   r”  rˆ   r@   rŽ  r‰   rt   rl   r    Ú
contiguous)	rË   rS  Úscales_hÚscales_wr›  rð   rœ   rC   Ú
n_channelss	   `        r5   Úupsample_nearest2dr¥  ‘  sÆ   ø€ ô 
‡L�LØ�‰‹˜ÑÒAÔ/°·
±
³¸Q¸RÐ0@ÓAÛ_ôô -Ø�
‰
‹�k°AôÐð �_‰_Ð-Ó.€Fô ×/Ñ/°Ó6€Mð  Ÿ+™+Ñ€A€z�1�aØ‡|�|×Ñ˜FÒ" z°A¢~Ü×/Ñ/ˆà×Ñ¨]ÐÓ;€Fà€Mr7   rS  r)  r¢  r£  c                 óX  ‡ ‡‡— t        ||d¬«      Št        j                  ‰ j                  dk(  ˆ fd„«       t	        d«      D ]2  Št        j                  ‰ j                  ‰«      ‰‰   k(  ˆˆ ˆfd„«       Œ4 ‰ j                  |«      j                  t        j                  ‰ «      ¬«      S )Nrà   r˜  ró  c                  ó"   •— d‰ j                   › �S ©NzFExpected grad_output to be a tensor of dimension 4 but got: dimension rõ  ry  s   €r5   rW   z-upsample_nearest2d_backward.<locals>.<lambda>½  ó   ø€ ÐXÐYd×YiÑYiÐXjÐk€ r7   c            
      óD   •— d‰› d‰ ‰   › d‰› d‰j                  ‰«      › �S )NzCExpected grad_output to have the same shape as output; output.size(ú) = z but got grad_output.size(r’   ©r›  rç  rÏ   s   €€€r5   rW   z-upsample_nearest2d_backward.<locals>.<lambda>Â  s>   ø€ ð Ø !˜s $Ð'7¸Ñ':Ð&;Ø,¨Q¨C¨t°K×4DÑ4DÀQÓ4GÐ3HðJð r7   r›   )
r”  rH   rY   r•   r¶   r“   rˆ   r  r@   rŽ  )rç  rS  r)  r¢  r£  r›  rÏ   s   `    @@r5   Úupsample_nearest2d_backwardr­  «  s¨   ú€ ô -Ø�K°!ôÐô 
‡L�LØ×Ñ˜AÑÛkôô �1‹Xò 
ˆÜ�‰Ø×Ñ˜QÓÐ#3°AÑ#6Ñ6õõ	
ð
ð × Ñ  Ó,×/Ñ/Ü×1Ñ1°+Ó>ð 0ó ð r7   c                 ó4  ‡ — t        j                  ‰ j                  «       dk7  xs t        ‰ j	                  «       dd  «      ˆ fd„«       t        ‰ j	                  «       |d¬«      }‰ j                  |«      j                  t        j                  ‰ «      ¬«      S )Nr   r³   c                  ó*   •— d‰ j                  «       › �S )Nz>Non-empty 5D data tensor expected but got a tensor with sizes r’   r	  s   €r5   rW   z$upsample_nearest3d.<locals>.<lambda>Ô  r—  r7   r-   r˜  r›   r™  )rË   rS  Úscales_dr¢  r£  r›  s   `     r5   Úupsample_nearest3dr±  Î  r�  r7   c                 óº  — t        j                  | «      t        j                  | t         j                  ¬«      }}|�œ|�št        |t        «      sJ ‚t        |t        «      sJ ‚|j
                  }|j                  «       }	t        ||«      }t        ||«      }|j                  ||	«       |j                  ||	«       t        ||¬«       t        ||¬«       ||fS ||fS )Nr�   )r}  r~  )
rH   rŸ   r§   rb   r   r‰   r¸   r    r½   r"   )
rŠ   Ústablerw   Ú
descendingr£   r¤   r‡  rÏ   r˜   Ú
out_strides
             r5   Ú	meta_sortr¶  Þ  sÉ   € ô ×Ñ˜DÓ!¤5×#3Ñ#3°DÄÇÁÔ#L€q€AØÐ˜gÐ1Ü˜&¤*Ô-Ð-Ð-Ü˜'¤:Ô.Ð.Ð.ð —G‘Gˆ	Ø—X‘X“Zˆ
Ü" 6¨9Ó5ˆÜ# G¨YÓ7ˆØ×Ñ˜9 jÔ1Ø×Ñ˜I zÔ2Ü ¨FÕ3Ü ¨GÕ4Ø�wˆÐØˆaˆ4€Kr7   c           	      ó  ‡ ‡‡‡‡‡‡‡— t        j                  ‰ j                  dk(  ˆ fd„«       t        j                  ‰ j                  ‰j                  k(  ˆˆ fd„«       ‰ j	                  d«      Š‰�‚t        j                  ‰j                  dk(  ˆfd„«       t        j                  ‰j                  «       ‰k(  ˆˆfd„«       t        j                  ‰j                  ‰j                  k(  ˆˆfd„«       t        j                  ‰j                  dk(  ˆfd„«       ‰ j	                  d	«      ‰z  ‰z  Št        j                  ‰j                  «       ‰k(  ˆˆˆˆ ˆfd
„«       t        j                  t        ˆ fd„‰‰‰‰fD «       «      d„ «       y )Nrà   c                  ó"   •— ‰ j                   › d�S ©Nz != 2rõ  )Úinput_gatess   €r5   rW   z%rnn_cell_checkSizes.<locals>.<lambda>  ó   ø€ °;×3CÑ3CÐ2DÀEÐ0J€ r7   c                  ó:   •— ‰j                   › d‰ j                   › �S ©Nú != r'  )Úhidden_gatesrº  s   €€r5   rW   z%rnn_cell_checkSizes.<locals>.<lambda>  s    ø€ �;×$Ñ$Ð% T¨,×*<Ñ*<Ð)=Ð>€ r7   r³   c                  ó"   •— ‰ j                   › d�S )Nz != 1rõ  )Ú
input_biass   €r5   rW   z%rnn_cell_checkSizes.<locals>.<lambda>  s   ø€ °j·o±oÐ5FÀeÐ3L€ r7   c                  ó.   •— ‰j                  «       › d‰ › �S r½  r~  )Ú
gates_sizerÁ  s   €€r5   rW   z%rnn_cell_checkSizes.<locals>.<lambda>  s   ø€ �z×'Ñ'Ó)Ð*¨$¨z¨lÐ;€ r7   c                  ó:   •— ‰j                   › d‰ j                   › �S r½  r'  )Úhidden_biasrÁ  s   €€r5   rW   z%rnn_cell_checkSizes.<locals>.<lambda>  s    ø€ �z×'Ñ'Ð(¨¨[×->Ñ->Ð,?Ð@€ r7   c                  ó"   •— ‰ j                   › d�S r¹  rõ  )Úprev_hiddens   €r5   rW   z%rnn_cell_checkSizes.<locals>.<lambda>  r»  r7   r   c            
      ó`   •— ‰j                  «       › d‰j                  d«      › d‰› d‰› d‰ › d�
S )Nr¾  r   z * z // z (aka rk   )r‡   r“   )Úexpected_prev_hidden_numelÚfactorrÃ  rº  rÇ  s   €€€€€r5   rW   z%rnn_cell_checkSizes.<locals>.<lambda>  sB   ø€ �;×$Ñ$Ó&Ð' t¨K×,<Ñ,<¸QÓ,?Ð+@ÀÀJÀ<ÈtÐTZÐS[Ð[aÐb|Ða}Ð}~Ð€ r7   c              3   óP   •K  — | ]  }|j                   ‰j                   k(  –— Œ y ­wr2   r™  )rd   rE   rº  s     €r5   rf   z&rnn_cell_checkSizes.<locals>.<genexpr>  s(   øè ø€ ò 
àð �H‰H˜×*Ñ*Õ*ñ
ùs   ƒ#&c                   ó   — y)Nz%expected all inputs to be same devicer;   r;   r7   r5   rW   z%rnn_cell_checkSizes.<locals>.<lambda>  r_   r7   )rH   rY   r•   r‰   r“   r‡   r�  )rº  r¿  rÁ  rÅ  rÊ  rÇ  rÉ  rÃ  s   ``````@@r5   Úrnn_cell_checkSizesrÍ  ù  s@  ÿ€ ô 
‡L�L�×!Ñ! QÑ&Ó(JÔKÜ	‡L�LØ×Ñ˜\×/Ñ/Ñ/Ü>ôð ×!Ñ! !Ó$€JØÐÜ�‰�Z—_‘_¨Ñ)Ó+LÔMÜ�‰Ø×ÑÓ *Ñ,Ü;ô	
ô 	�‰Ø×Ñ × 1Ñ 1Ñ1Ü@ô	
ô 
‡L�L�×!Ñ! QÑ&Ó(JÔKØ!,×!1Ñ!1°!Ó!4°zÑ!AÀVÑ!KÐÜ	‡L�LØ×ÑÓÐ9Ñ9ßôô 
‡L�LÜó 
à" J°¸[ÐIô
ó 	
ñ 	8õr7   c                 ó
  — t        | |||d|«       t        j                  | t        j                  ¬«      }t        j                  |t        j                  ¬«      }t        j                  |t        j                  ¬«      }|||fS )Nró  r›   )rÍ  rH   rŸ   r    )rº  r¿  ÚcxrÁ  rÅ  Ú	workspaceÚhyÚcys           r5   Ú_thnn_fused_lstm_cell_metarÓ     sk   € ô ˜ \°:¸{ÈAÈrÔRÜ× Ñ  ¼E×<SÑ<SÔT€IÜ	×	Ñ	˜"¬E×,CÑ,CÔ	D€BÜ	×	Ñ	˜"¬E×,CÑ,CÔ	D€BØ��IÐÐr7   c                 ób  — t        |«      dk7  }|r t        |«      }|d   }| j                  d   }nB|
r| j                  d   n| j                  d   }|
r| j                  d   n| j                  d   }d}|rdnd}|dk7  r|n|}|r|||z  g}n|
r||||z  gn||||z  g}| j                  |«      }|	|z  ||g}|€"t        j                  d| j
                  ¬«      }n|j                  |«      }|j                  |	|z  ||g«      }|rdnd}| j                  |t        j                  ¬«      }|||||fS )Nr   r³   rŒ   rà   r™  r�   )r´   r‰   rˆ   rH   r|   rt   r¼  )rË   r+  Úweight_stride0Ú
weight_bufÚhxrÏ  rJ  Úhidden_sizeÚ	proj_sizeÚ
num_layersÚbatch_firstÚdropoutÚtrainÚbidirectionalÚbatch_sizesÚdropout_stateÚis_input_packedÚ
seq_lengthÚ
mini_batchÚbatch_sizes_sumÚnum_directionsÚout_sizer˜   rð   Ú
cell_shaperÒ  rÑ  Úreserve_shapeÚreserves                                r5   Ú
_cudnn_rnnrê  /  sS  € ô& ˜+Ó&¨!Ñ+€OÙÜ˜Ó%ˆ
Ø  ‘^ˆ
ØŸ+™+ a™.‰á'2�U—[‘[ ’^¸¿¹ÀA¹ˆ
Ù'2�U—[‘[ ’^¸¿¹ÀA¹ˆ
Øˆá'‘Q¨Q€NØ%¨šN‰y°€HÙØ$ h°Ñ&?Ð@‰	ñ ð ˜ X°Ñ%>Ñ?à˜j¨(°^Ñ*CÐDð 	ð
 �_‰_˜YÓ'€Fà˜~Ñ-¨z¸;ÐG€JØ	€zÜ�[‰[˜ 5§<¡<Ô0‰à�\‰\˜*Ó%ˆà	�‰�z NÑ2°JÀÐIÓ	J€Bñ ‘A A€MØ�o‰o˜m´5·;±;ˆoÓ?€Gà�2�r˜7 JÐ.Ð.r7   c                 ó(  — |r| j                   d   n| j                   d   }|r| j                   d   n| j                   d   }|
}|r|||gn|||g}| j                  |«      }|€"t        j                  d| j                  ¬«      }n|j                  |j                   «      }|€"t        j                  d| j                  ¬«      }n|j                  |j                   «      }t        j                  d| j                  t        j
                  ¬«      }||||fS )Nr³   r   r™  r¦   )r‰   rˆ   rH   r|   rt   r¼  )rË   Úw0Úw1Úw2Úw3Úhx_Úcx_r²   rß  rJ  rØ  rÚ  Ú
has_biasesrÞ  rÛ  rÝ  râ  rã  Úoutput_chanelsr˜   rð   rÑ  rÒ  rÐ  s                           r5   Úmkldnn_rnn_layerrô  g  sê   € ñ& $/�—‘˜Q’°E·K±KÀ±N€JÙ#.�—‘˜Q’°E·K±KÀ±N€JØ €Nñ ð 
�Z Ñ0à˜* nÐ5ð ð
 �_‰_˜YÓ'€FØ
€{Ü�[‰[˜ 5§<¡<Ô0‰à�]‰]˜3Ÿ9™9Ó%ˆØ
€{Ü�[‰[˜ 5§<¡<Ô0‰à�]‰]˜3Ÿ9™9Ó%ˆÜ—‘˜A e§l¡l¼%¿+¹+ÔF€IØ�2�r˜9Ð$Ð$r7   c                 óÈ   ‡‡— | j                   dk(  r%t        j                  ‰dk(  xs ‰dk(  ˆˆfd„«       y t        j                  | j                  ‰«      dk7  ˆˆfd„«       y )Nr   rŒ   c                  ó   •— ‰› d‰ › �S )Nz4: Expected reduction dim -1 or 0 for scalar but got r;   ©rw   rÎ  s   €€r5   rW   z'zero_numel_check_dims.<locals>.<lambda>“  s   ø€ �w�iÐSÐTWÐSXÐY€ r7   c                  ó   •— ‰› d‰ › d�S )Nz: Expected reduction dim z to have non-zero size.r;   r÷  s   €€r5   rW   z'zero_numel_check_dims.<locals>.<lambda>˜  s   ø€ �w�iÐ8¸¸Ð=TÐU€ r7   )r•   rH   r†   r“   )rŠ   rw   rÎ  s    ``r5   Úzero_numel_check_dimsrù  �  sR   ù€ Ø‡y�y�A‚~Ü×ÑØ�1‰HÒ!˜˜r™	ÜYõ	
ô
 	×ÑØ�I‰I�c‹N˜aÑÜUõ	
r7   c                 ó®   ‡ — |�(t        ||j                  «       «      }t        ||‰ «       y t        j                  |j                  «       dk7  ˆ fd„«       y )Nr   c                  ó   •— ‰ › d�S )Nz@: Expected reduction dim to be specified for input.numel() == 0.r;   rú  s   €r5   rW   z%check_argmax_argmin.<locals>.<lambda>¤  s   ø€ �t�fÐ\Ð]€ r7   )r¨   rw   rù  rH   rY   r‡   )rµ  rŠ   rw   s   `  r5   Úcheck_argmax_argminrü  �  sC   ø€ Ø
€Ü˜S $§(¡(£*Ó-ˆÜ˜d C¨Õ.ä�‰Ø�J‰J‹L˜AÑÛ]õ	
r7   c                 óÂ   — t        d| |«       t        j                  | j                  |�|fnd «      }t	        | ||«      }| j                  |t        j                  ¬«      S )NÚargmaxr�   )rü  r@   ry  r‰   rz  rˆ   rH   r§   )rŠ   rw   r|  rp  r‰   s        r5   Úargmax_argmin_metarÿ  ¨  sQ   € ä˜ $¨Ô,Ü×Ñ §
¡
°c°o¨S©FÈ4ÓP€DÜ$ T¨4°Ó9€EØ�>‰>˜%¤u§{¡{ˆ>Ó3Ð3r7   c                 ó|   — |t         j                  k(  rt         j                  }t        j                  d||||¬«      S )Nr;   rû   )rH   Újaggedr›  r|   )r•  rP   rs   rt   ru   s        r5   Úscalar_tensorr  °  s5   € ð
 ”—‘ÒÜ—‘ˆÜ�;‰;Ø
�% ¨vÀ*ôð r7   c                 ó˜  — t        || j                  «       d¬«      }| j                  «       dk(  rdn| j                  |«      }t        j                  |«       t        j
                  ||k  d„ «       t        | j                  «      }t        |«      dkD  r|||<   | j                  |«      | j                  |t        j                  ¬«      fS )NT©r¬  r   r³   c                   ó   — y)Nzk not in range for dimensionr;   r;   r7   r5   rW   ztopk_meta.<locals>.<lambda>Â  r_   r7   r�   )r¨   rw   r“   rH   r©  rY   rµ   r‰   r´   rˆ   r§   )rŠ   rS  rw   ÚlargestÚsortedÚ	sliceSizeÚtopKSizes          r5   Ú	topk_metar
  ¼  sœ   € ô ˜˜dŸh™h›j°dÔ
;€CØ—X‘X“Z 1’_‘¨$¯)©)°C«.€IÜ	×Ñ˜ÔÜ	‡L�L��i‘Ñ!GÔHä�D—J‘JÓ€HÜ
ˆ8ƒ}�qÒØˆ�‰Ø�>‰>˜(Ó# T§^¡^°HÄEÇKÁK ^Ó%PÐPÐPr7   c                 óÆ   — |€	|€J d«       ‚|j                  «       }| j                  «       }	t        j                  ||	j                  |	j                  |	j
                  ¬«      S )Nz;segment_reduce(): Either lengths or offsets must be defined)rP   rt   rs   )r¡  rH   rŸ   rP   rt   rs   )
r,  rð   ri  rY  rd  re  rf  rh  Údata_contigÚgrad_contigs
             r5   Úmeta__segment_reduce_backwardr  Ê  sj   € ð
 Ð 'Ð"5ð ØEóÐ5ð —/‘/Ó#€KØ—/‘/Ó#€KÜ×ÑØØ×ÑØ×!Ñ!Ø×!Ñ!ô	ð r7   c                 óÖ  ‡— t        ‰| j                  «       d¬«      Š| j                  «       dkD  r| j                  ‰«      nd}t        j                  |dk\  xr ||k  ˆfd„«       t        | j                  d ‰ | j                  ‰dz   d  z   «      }|r%| j                  «       dkD  r|j                  ‰d«       | j                  |«      | j                  |t        j                  ¬«      fS )NTr  r   r³   c                  ó   •— d‰ › �S )Nz9kthvalue(): selected number k out of range for dimension r;   r�   s   €r5   rW   zkthvalue_meta.<locals>.<lambda>ã  s   ø€ ÐKÈCÈ5ÐQ€ r7   r�   )
r¨   rw   r“   rH   rY   rµ   r‰   r!  rˆ   r§   )rŠ   rS  rw   r|  ÚdimSizer‰   s     `   r5   Úkthvalue_metar  Ü  sÀ   ø€ ô ˜˜dŸh™h›j°dÔ
;€CØ $§¡£
¨Q¢ˆd�i‰i˜Œn°A€GÜ	‡L�LØ	ˆQ‰Ò�1˜‘<ÛQôô
 �—‘˜D˜SÐ! D§J¡J¨s°Q©w¨yÐ$9Ñ9Ó:€EÙ�4—8‘8“: ’>Ø�‰�S˜!ÔØ�>‰>˜%Ó  $§.¡.°¼e¿k¹k .Ó"JÐJÐJr7   c                 ó€  — | �| n|}t        j                  |j                  «       dk(  d„ «       |j                  «       }| �(t        j                  | j                  «       |k(  d„ «       |�(t        j                  |j                  «       |k(  d„ «       t        j                  |j                  «       |k(  d„ «       t        j                  |j                  «       |k(  d„ «       t        j                  |j                  «       dk(  d„ «       t        j                  |j	                  «       |d   |d	   z  d
z  k(  d„ «       y )Nrà   c                   ó   — y©NÚ r;   r;   r7   r5   rW   z(checkLSTMBackwardSizes.<locals>.<lambda>ò  r_   r7   c                   ó   — yr  r;   r;   r7   r5   rW   z(checkLSTMBackwardSizes.<locals>.<lambda>õ  r_   r7   c                   ó   — yr  r;   r;   r7   r5   rW   z(checkLSTMBackwardSizes.<locals>.<lambda>÷  r_   r7   c                   ó   — yr  r;   r;   r7   r5   rW   z(checkLSTMBackwardSizes.<locals>.<lambda>ø  r_   r7   c                   ó   — yr  r;   r;   r7   r5   rW   z(checkLSTMBackwardSizes.<locals>.<lambda>ù  r_   r7   c                   ó   — yr  r;   r;   r7   r5   rW   z(checkLSTMBackwardSizes.<locals>.<lambda>ú  r_   r7   r   r³   ró  c                   ó   — yr  r;   r;   r7   r5   rW   z(checkLSTMBackwardSizes.<locals>.<lambda>û  r_   r7   )rH   rY   rw   r“   r‡   )Úgrad_hyÚgrad_cyrÏ  rÒ  rÐ  Údefined_gradÚexp_sizes          r5   ÚcheckLSTMBackwardSizesr!  ð  sí   € Ø%Ð1‘7°w€LÜ	‡L�L�×!Ñ!Ó# qÑ(©*Ô5Ø× Ñ Ó"€HØÐÜ�‰�W—\‘\“^ xÑ/±Ô<ØÐÜ�‰�W—\‘\“^ xÑ/±Ô<Ü	‡L�L�—‘“˜hÑ&©
Ô3Ü	‡L�L�—‘“˜hÑ&©
Ô3Ü	‡L�L�—‘“ AÑ%¡zÔ2Ü	‡L�L�—‘Ó" h¨q¡k°H¸Q±KÑ&?À!Ñ&CÑCÁZÕPr7   c                 óÎ   — | €|€yt        | ||||«       t        j                  |t        ¬«      }t        j                  |t        ¬«      }|r|j	                  dd¬«      nd }|||fS )N©NNNr›   r   F)r|  )r!  rH   rŸ   Úlegacy_contiguous_memory_formatrÇ  )	r  r  rÏ  rÒ  rÐ  Úhas_biasÚ
grad_gatesÚgrad_cxr1  s	            r5   Ú#_thnn_fused_lstm_cell_backward_implr(  ÿ  sl   € à€˜7˜?ØÜ˜7 G¨R°°YÔ?Ü×!Ñ!ØÔ!@ô€Jô ×Ñ˜rÔ1PÔQ€GÙ4<�
—‘˜q¨%�Ô0À$€IØ�w 	Ð)Ð)r7   c                 ó  — d }d }d }|d   r|j                  | j                  «       «      }|d   s|d   rQ|j                  |j                  d«      | j                  d«      f«      }|j                  |j                  d«      «      }|||fS )Nr   r³   rà   rŒ   r·  )r¹  r¸  rº  r½  rë  Úgrad_weightr1  s          r5   Úlinear_backwardr+    sŒ   € à€JØ€KØ€IØ�1‚~Ø!×+Ñ+¨F¯K©K«MÓ:ˆ
Ø�1‚~˜ QšØ"×,Ñ,¨l×.?Ñ.?ÀÓ.CÀVÇ[Á[ÐQSÃ_Ð-UÓVˆØ ×*Ñ*¨<×+<Ñ+<¸RÓ+@ÓAˆ	Ø˜ YÐ/Ð/r7   c                 óœ  ‡ ‡— t        ‰ j                  «      dkD  r‰ j                  d   ||z  z  dk(  sJ d‰ j                  › d|› �«       ‚d„ Šˆˆ fd„}‰ j                  d   ||z  z  }‰ j                  d   |z  }‰ j                  d	   |z  }g ‰ j                  d d ¢|‘|‘|‘­}‰ j                  |«      }|j                   |«       ¬
«      }|S )Nrà   r  r   z'Invalid input shape for pixel_shuffle: z with upscale_factor = c                 ób   — t         j                  j                  | «      t         j                  k(  S r2   rŒ  r�  s    r5   r’  z,meta_pixel_shuffle.<locals>.is_channels_last"  s$   € Ü×"Ñ"×8Ñ8¸Ó=Ä×ATÑATÑTÐTr7   c                  ó2  •—  ‰ ‰«      r.t        ‰«      dk(  rt        j                  S t        j                  S ‰j	                  t        j                  ¬«      rt        j                  S ‰j	                  t        j
                  ¬«      rt        j
                  S y r£  )ré   rH   r    r�  rP  r¤  )r’  rŠ   s   €€r5   rš  z.meta_pixel_shuffle.<locals>.pick_memory_format%  s|   ø€ Ù˜DÔ!Ü˜4Ó  FÒ*Ü×.Ñ.Ð.ä×*Ñ*Ð*Ø×Ñ¬e×.EÑ.EÐÔFÜ×*Ñ*Ð*Ø×Ñ¬e×.CÑ.CÐÔDÜ×(Ñ(Ð(ð Er7   r±  rŒ   r›   )r´   r‰   rˆ   r  )	rŠ   Úupscale_factorrš  r‰  ÚHrÚWrr˜   r¿   r’  s	   `       @r5   Úmeta_pixel_shuffler2    sç   ù€ ô 	ˆD�J‰J‹˜!Ò §
¡
¨2¡°.À>Ñ2QÑ RÐVWÒ Wðð 2°$·*±*°Ð=TÐUcÐTdÐeóØWò
Uõ	)ð 	�
‰
�2‰˜>¨NÑ:Ñ;€AØ	�‰�B‰˜.Ñ	(€BØ	�‰�B‰˜.Ñ	(€BØ-�$—*‘*˜S˜b�/Ð- 1Ð- bÐ-¨"Ñ-€Ià
�.‰.˜Ó
#€CØ
�&‰&Ñ1Ó3ˆ&Ó
4€CØ€Jr7   c                 óX  — | j                  | j                  «      }|j                  |j                  «      }|j                  |j                  «      }|j                  |j                  «      }|j                  |j                  «      }|j                  |j                  «      }|||||||fS r2   r³  )rË   Úweight0Úweight1Úweight2Úweight3rð  Úcx_tmprð   Úhy_Úcy_Úgrad_output_r_optÚgrad_hy_r_optÚgrad_cy_r_optr²   rJ  rØ  rÚ  rò  rÝ  rÞ  rß  rÛ  rÐ  Údiff_xÚdiff_hxÚdiff_cxÚdiff_w1Údiff_w2Údiff_bs                                r5   Úmkldnn_rnn_layer_backwardrD  :  s�   € ð4 �_‰_˜UŸ[™[Ó)€FØ�m‰m˜CŸI™IÓ&€GØ×Ñ˜vŸ|™|Ó,€GØ×Ñ §¡Ó.€GØ×Ñ §¡Ó.€GØ×Ñ˜wŸ}™}Ó-€FØ�7˜G V¨V°W¸gÐEÐEr7   )Ú	out_int32rÈ   c                óŽ   — t        j                  | |rt         j                  nt         j                  t         j                  ¬«      S )N©rP   rœ   )rH   rŸ   r3  r§   r    )rŠ   Ú
boundariesrE  rÈ   s       r5   Úmeta_bucketizerI  ]  s2   € ô ×ÑØÙ&Œe�kŠk¬E¯K©KÜ×-Ñ-ôð r7   c                 ó0  ‡ ‡‡‡‡— dŠt        ‰ «      dk(  r't        j                  ‰ j                  «       ˆ fd„«       t        j                  t	        ‰t
        «      ˆˆfd„«       t        j                  ‰dkD  ˆˆfd„«       t        j                  t	        ‰t        «      ˆˆfd„«       t        j                  t	        ‰t        «      ˆˆfd„«       t        j                  ‰‰k\  d	„ «       t        j                  ‰‰ j                  ‰ j                  ¬
«      S )Nzhistc()r‰  c                  ó$   •— d‰ j                   › d�S )Nz%"histogram_cpu" not implemented for 'r  r�   r	  s   €r5   rW   zmeta_histc.<locals>.<lambda>n  s   ø€ Ð=¸e¿k¹k¸]È!ÐL€ r7   c                  ó$   •— ‰› dt        ‰ «      › �S )Nz#: argument 'bins' must be int, not rÏ  ©ÚbinsrÎ  s   €€r5   rW   zmeta_histc.<locals>.<lambda>r  s   ø€ �7�)Ð>¼tÀD»z¸lÐK€ r7   r   c                  ó   •— ‰› d‰ › �S )Nz: bins must be > 0, but got r;   rM  s   €€r5   rW   zmeta_histc.<locals>.<lambda>t  s   ø€  g YÐ.JÈ4È&Ð#Q€ r7   c                  ó$   •— ‰ › dt        ‰«      › �S )Nz%: argument 'min' must be Number, not rÏ  )rÎ  rê   s   €€r5   rW   zmeta_histc.<locals>.<lambda>w  ó   ø€ �7�)Ð@ÄÀcÃÀÐL€ r7   c                  ó$   •— ‰ › dt        ‰«      › �S )Nz%: argument 'max' must be Number, not rÏ  )rÎ  rŸ  s   €€r5   rW   zmeta_histc.<locals>.<lambda>{  rQ  r7   c                   ó   — y)Nz&{fn_name}: max must be larger than minr;   r;   r7   r5   rW   zmeta_histc.<locals>.<lambda>}  r_   r7   r¦   )
ré   rH   rY   rè   rb   r   r   r|   rt   rP   )rË   rN  rê   rŸ  rÎ  s   ````@r5   Ú
meta_histcrT  g  sÆ   ü€ ð €GÜ�5Ó˜UÒ"Ü�‰Ø×#Ñ#Ó%ÛLô	
ô 
‡L�LÜ�4œÓ!ÜKôô 
‡L�L�˜‘ÔQÔRÜ	‡L�LÜ�3œÓÜLôô 
‡L�LÜ�3œÓÜLôô 
‡L�L�˜‘ÑMÔNÜ�;‰;�t E§L¡L¸¿¹ÔDÐDr7   c                 óB  ‡ — t        ‰ j                  «       |d¬«      }t        j                  ‰ j	                  «       dk7  xs# t        d„ ‰ j                  «       dd  D «       «      ˆ fd„«       ‰ j                  |«      j                  t        j                  ‰ «      ¬«      S )Nrà   r˜  r   c              3   ó&   K  — | ]	  }|d kD  –— Œ y­wrƒ  r;   )rd   r“   s     r5   rf   z,meta_upsample_bimode2d_aa.<locals>.<genexpr>�  s   è ø€ Ò!H¨t $¨¥(Ñ!Hùr„  r³   c                  ó*   •— d‰ j                  «       › �S r   r’   r	  s   €r5   rW   z+meta_upsample_bimode2d_aa.<locals>.<lambda>�  r—  r7   r›   )
r”  r“   rH   rY   r‡   r�  rˆ   r  r@   rŽ  )rË   rS  r„  r¢  r£  r›  s   `     r5   Úmeta_upsample_bimode2d_aarX  �  s‹   ø€ ô -Ø�
‰
‹�k°AôÐô 
‡L�LØ�‰‹˜ÑÒHœcÑ!H°u·z±z³|ÀAÀBÐ7GÔ!HÓHÛ_ôð �?‰?Ð+Ó,×/Ñ/Ü×1Ñ1°%Ó8ð 0ó ð r7   c                 óT  ‡ ‡‡— t        ||d¬«      Št        j                  ‰ j                  dk(  ˆ fd„«       t	        d«      D ]0  Št        j                  ‰ j
                  ‰   ‰‰   k(  ˆˆ ˆfd„«       Œ2 ‰ j                  |«      j                  t        j                  ‰ «      ¬«      S )Nrà   r˜  ró  c                  ó"   •— d‰ j                   › �S r¨  rõ  ry  s   €r5   rW   z4meta_upsample_bimode2d_aa_backward.<locals>.<lambda>¥  r©  r7   c            
      óD   •— d‰› d‰ ‰   › d‰› d‰j                  ‰«      › �S )NzD
Expected grad_output to have the same shape as output; output.size(r«  z
but got grad_output_size(r’   r¬  s   €€€r5   rW   z4meta_upsample_bimode2d_aa_backward.<locals>.<lambda>ª  s@   ø€ ð DØDEÀ3ÀdÐK[Ð\]ÑK^ÐJ_ð `Ø˜˜D ×!1Ñ!1°!Ó!4Ð 5ð9€ r7   r›   )
r”  rH   rY   r•   r¶   r‰   rˆ   r  r@   rŽ  )rç  rS  r)  r„  r¢  r£  r›  rÏ   s   `     @@r5   Ú"meta_upsample_bimode2d_aa_backwardr\  —  s¨   ú€ ô -Ø�K°!ôÐô 
‡L�LØ×Ñ˜AÑÛkôô �1‹Xò 
ˆÜ�‰Ø×Ñ˜aÑ Ð$4°QÑ$7Ñ7õ9õ	
ð
ð × Ñ  Ó,×/Ñ/Ü×1Ñ1°+Ó>ð 0ó ð r7   c                 óP  — t        j                  |j                  «       dk(  d„ «       t        j                  |j                  «       dk(  d„ «       t        j                  |j                  j                  d„ «       t        j                  |j                  j                  d„ «       y )Nr³   c                   ó   — y)Nz%found_inf must be a 1-element tensor.r;   r;   r7   r5   rW   z<_amp_foreach_non_finite_check_and_unscale_.<locals>.<lambda>·  r_   r7   c                   ó   — y)Nz%inv_scale must be a 1-element tensor.r;   r;   r7   r5   rW   z<_amp_foreach_non_finite_check_and_unscale_.<locals>.<lambda>º  r_   r7   c                   ó   — y)Nz!found_inf must be a float tensor.r;   r;   r7   r5   rW   z<_amp_foreach_non_finite_check_and_unscale_.<locals>.<lambda>¾  r_   r7   c                   ó   — y)Nz!inv_scale must be a float tensor.r;   r;   r7   r5   rW   z<_amp_foreach_non_finite_check_and_unscale_.<locals>.<lambda>Â  r_   r7   )rH   rY   r‡   rP   rè   )rŠ   rË  Ú	inv_scales      r5   Ú*_amp_foreach_non_finite_check_and_unscale_rc  ´  s|   € ä	‡L�LØ�‰Ó˜QÑÑ Oôô 
‡L�LØ�‰Ó˜QÑÑ Oôô 
‡L�LØ�‰×)Ñ)Ù3ôô 
‡L�LØ�‰×)Ñ)Ù3õr7   c                 óV   — t        | j                  «       «      }| j                  |«      S r2   )rµ   r“   rˆ   )rŠ   ÚnanÚposinfÚneginfrb  s        r5   Ú
nan_to_numrh  Ç  s#   € ô �t—y‘y“{Ó#€KØ�>‰>˜+Ó&Ð&r7   c                 óæ  — | j                   t        j                  t        j                  t        j                  t        j
                  hvsJ d| j                   › d�«       ‚| j                  }t        ||«      }t        ||«      }||k(  r| S t        | j                  «       «      }t        | j                  «       «      }||   ||   c||<   ||<   ||   ||   c||<   ||<   | j                  ||«       | S )Nz>torch.transpose_: in-place transposition is not supported for z layout)rs   rH   rœ  Ú
sparse_cscr�  Ú
sparse_bscr•   r¨   rµ   r“   r¸   r½   )rŠ   Údim0rA  Úndimsr“   r¸   s         r5   r�  r�  Î  sö   € à�;‰;Ü×ÑÜ×ÑÜ×ÑÜ×Ñð	ñ ð ð IÈÏÉÈÐU\Ð]óð ð �I‰I€Eä˜$ Ó&€DÜ˜$ Ó&€Dàˆt‚|Øˆä�—	‘	“Ó€DÜ�$—+‘+“-Ó €Fà!'¨¡¨v°d©|Ð€Fˆ4�L�&˜‘,Ø! $™Z¨¨d©Ð€Dˆ�J��T‘
à×Ñ�T˜6Ô"Ø€Kr7   c                 ó  — | j                   }| j                  r8| j                  «       }| j                  «       }|dk  r|dk(  s,J d|› d|› d�«       ‚| j	                  «       dk  sJ d|› d�«       ‚t        | d|dk  rd«      S d«      S )	Nrà   r   zEt_ expects a tensor with <= 2 sparse and 0 dense dimensions, but got z sparse and z dense dimensionsz6t_ expects a tensor with <= 2 dimensions, but self is ré  r³   )r•   r–  r˜  r™  rw   r�  )rŠ   rm  r˜  r™  s       r5   Út_ro  ë  s£   € à�I‰I€Eà‡~‚~Ø—_‘_Ó&ˆ
Ø—N‘NÓ$ˆ	Ø˜QŠ 9°¢>ð 	
ðØ!�l ,¨y¨kÐ9JðLó	
Ð1ð
 �x‰x‹z˜QŠð 	
ØDÀUÀGÈ1ÐMó	
ˆô �d˜A E¨A¢I˜qÓ5Ð5°1Ó5Ð5r7   )rE  rÈ   ÚsideÚsorterc                ó\  ‡ ‡‡— t        j                  t        ‰ j                  «      dk  xs ‰ j                  d d ‰j                  d d k(  ˆˆ fd„«       t        j                  ‰d u xs ‰ j                  ‰j                  k(  ˆ ˆfd„«       t        j                  |dk7  xs | d«       |rt         j                  nt         j
                  }t        ‰t         j                  «      r&t        j                  ‰|t         j                  ¬«      S t        j                  d|‰ j                  ¬	«      S )
Nr³   rŒ   c                  ó`   •— dt        ‰j                  «      › dt        ‰ j                  «      › �S )Nz¯torch.searchsorted(): boundaries tensor should be 1 dimension or the first N-1 dimensions of boundaries tensor and input value tensor must match, but we got boundaries tensor z and input value tensor ©rµ   r‰   )rŠ   Úsorted_sequences   €€r5   rW   z#meta_searchsorted.<locals>.<lambda>  s8   ø€ ð3ä37¸×8MÑ8MÓ3NÐ2Oð P"Ü"& t§z¡zÓ"2Ð!3ð5ð r7   c                  ól   •— dt        ‰ j                  «      › d‰�t        ‰j                  «      › �S g › �S )Nz[torch.searchsorted(): boundary and sorter must have the same size, but got boundary tensor z and got sorter tensor rt  )ru  rq  s   €€r5   rW   z#meta_searchsorted.<locals>.<lambda>  sO   ø€ ð#Ü#'¨×(=Ñ(=Ó#>Ð"?Ð?VØ%+Ð%7Œt�F—L‘LÓ!Ð@ðBð ð >@Ð@ðBð r7   rÇ   zetorch.searchsorted(): side and right can't be set to opposites, got side of left while right was TruerG  r;   r“  )rH   rY   r´   r‰   r3  r§   rb   r   rŸ   r    r|   rt   )ru  rŠ   rE  rÈ   rp  rq  rP   s   ``   ` r5   Úmeta_searchsortedrw  þ  sø   ú€ ô 
‡L�LÜˆO×!Ñ!Ó" aÑ'ò 	9Ø× Ñ   "Ð%¨¯©°C°R¨Ñ8ô	
ô	ô 
‡L�LØ�$ˆÒ?˜/×/Ñ/°6·<±<Ñ?ô	
ôô 
‡L�LØ�‰Ò#˜e˜)ð	$ôñ %ŒE�KŠK¬%¯+©+€EÜ�$œŸ™Ô%Ü×ÑØ˜¬U×-DÑ-Dô
ð 	
ô �{‰{˜2 U°?×3IÑ3IÔJÐJr7   c                 ó–   ‡ — t        j                  ‰ t         j                  t         j                  t         j                  fvˆ fd„«       y )Nc                  ó   •— d‰ › �S )Nz/Unsupported input type encountered for isin(): r;   r�   s   €r5   rW   z3_check_for_unsupported_isin_dtype.<locals>.<lambda>3  s   ø€ ÐAÀ%ÀÐI€ r7   )rH   rY   rU  Ú
complex128Ú	complex64r�   s   `r5   Ú!_check_for_unsupported_isin_dtyper|  0  s/   ø€ Ü	‡L�LØ”e—j‘j¤%×"2Ñ"2´E·O±OÐDÐDÛIõr7   c                 ój   — |	rt         j                  | ||||||||
|«
      S t        | ||||||||
|«
      S r2   )r*   Ú_embedding_bag_sparse_backwardÚ!meta_embedding_bag_dense_backward)r,  r¤   re  r’  r“  Úmaximum_indicesÚnum_weightsrŽ  rJ  r�  r|  r‚  s               r5   Úmeta_embedding_bag_backwardr‚  7  se   € ñ Ü×2Ñ2ØØØØØØØØØØó
ð 	
ô 1ØØØØØØØØØØó
ð 	
r7   c
                 óN  ‡ — t        j                  ‰ j                  t         j                  t         j                  t         j
                  t         j                  fv ˆ fd„«       |t        k(  rt        j                  |d u«       ‰ j                  |‰ j                  d«      f«      }
|
S )Nc                  ó"   •— d‰ j                   › �S )Nz$Unsupported input type encountered: r�   )r,  s   €r5   rW   z3meta_embedding_bag_dense_backward.<locals>.<lambda>q  s   ø€ Ð6°t·z±z°lÐC€ r7   r³   )
rH   rY   rP   rM  rN  rL  Úfloat64rŒ  rˆ   r“   )r,  r¤   r’  r“  r€  r�  rŽ  rJ  r|  r‚  Úindex_grad_weights   `          r5   r  r  b  sv   ø€ ô 
‡L�LØ�
‰
”u—}‘}¤e§n¡n´e·m±mÄUÇ]Á]ÐSÐSÛCôð ŒxÒÜ�‰�_¨DÐ0Ô1ØŸ™¨°T·Y±Y¸q³\Ð'BÓCÐØÐr7   c                 óÚ  — | j                  d«      }t        j                  |t        k(  d«       t        j                  | j	                  «       dk(  «       t        j                  |j	                  «       dk(  «       |j                  d«      }t        j                  |j	                  «       dk(  «       t        j                  |j                  d«      |k(  «       | j                  |f«      }	|	S )Nr³   zHembedding_bag_backward: per_sample_weights only supported for mode='sum'rà   r   )r“   rH   rY   r‹  rw   rˆ   )
r,  r+  r¤   re  r’  rJ  r‚  Úembedding_featuresr‚  rð   s
             r5   Ú.meta_embedding_bag_per_sample_weights_backwardr‰  y  s«   € ð Ÿ™ 1›ÐÜ	‡L�LØ”ÑØRôô 
‡L�L�—‘“˜q‘Ô!Ü	‡L�L�—‘“ !Ñ#Ô$Ø—,‘,˜q“/€KÜ	‡L�L�—‘“ Ñ"Ô#Ü	‡L�L�—‘˜Q“Ð#5Ñ5Ô6Ø�^‰^˜[˜NÓ+€FØ€Mr7   )Úassume_uniqueÚinvertc                óÒ  — t        j                  t        | t        «      xs t        |t        «      d„ «       t        | t        «      s!t        j                  | |j
                  ¬«      } t        |t        «      s!t        j                  || j
                  ¬«      }t        | j                  «       t        |j                  «       t        j                  | t         j                  ¬«      S )Nc                   ó   — y)Nz<At least one of elements and test_elements must be a Tensor.r;   r;   r7   r5   rW   zmeta_isin.<locals>.<lambda>–  r_   r7   r™  r�   )
rH   rY   rb   r   r"  rt   r|  rP   rŸ   rU  )ÚelementsÚtest_elementsrŠ  r‹  s       r5   Ú	meta_isinr�  ‘  sš   € ô 
‡L�LÜ�8œVÓ$ÒI¬
°=Ä&Ó(IÙNôô �h¤Ô'Ü—<‘< °×1EÑ1EÔFˆä�m¤VÔ,ÜŸ™ ]¸8¿?¹?ÔKˆä% h§n¡nÔ5Ü% m×&9Ñ&9Ô:Ü×Ñ˜H¬E¯J©JÔ7Ð7r7   rù   c                 ó    — t        j                  | dk\  d„ «       t        |t        j                  ¬«      \  }}t        j
                  ||¬«      S )Nr   c                   ó   — y)Nz,polygamma(n, x) does not support negative n.r;   r;   r7   r5   rW   z meta_polygamma.<locals>.<lambda>¦  r_   r7   r…  r�   )rH   rY   r   r   r†  rŸ   )rù   rŠ   rC   rD   s       r5   Úmeta_polygammar“  £  sF   € ô 
‡L�L��a‘ÑOÔPÜ(ØÜ;×HÑHô�O€A€|ô ×Ñ˜D¨Ô5Ð5r7   c                 ó   — t        d«      ‚)Nz.Tensor.item() cannot be called on meta tensors)r  r¡   s    r5   Úmeta_local_scalar_denser•  ®  s   € ä
ÐGÓ
HÐHr7   c                 ó,   — t        j                  | «      S r2   rP  r¡   s    r5   Úsilur—  ³  rR  r7   c                 ól   — t        | t        j                  ¬«      \  }}t        j                  | |¬«      S r„  )r   r   r†  rH   rŸ   )rŠ   rC   rD   s      r5   Úsigmoidr™  ¹  s3   € ô )ØÜ;×HÑHô�O€A€|ô ×Ñ˜D¨Ô5Ð5r7   rE   Úhalf_to_floatc                 ó  — |r| j                   t        j                  k(  sJ ‚t        j                  | t        j
                  j                  ¬«      \  }}|s|n|}t        j                  | |t        j                  ¬«      }|S )Nr…  rG  )	rP   rH   rJ   r@   r   r   rA   rŸ   r    )rE   rw   rš  Úcomputation_dtyperD   rŠ  s         r5   Úsoftmaxr�  Ã  so   € ñ Ø�w‰wœ%Ÿ*™*Ò$Ð$Ð$Ü&+×&>Ñ&>Ø	œu×DÑD×LÑLô'Ñ#Ð�|ñ (5‘<Ð:K€LÜ
×
Ñ
˜1 LÄ×@WÑ@WÔ
X€CØ€Jr7   r‚  rŽ  r�  c                 ó  — | j                  «       dk(  sJ d«       ‚| j                  }|j                  }|j                  dk(  r|d   f}n$|j                  dk(  r|d   |d   f}n
g |¢|d   ‘­}| j                  }| j	                  ||¬«      S )Nrà   z'weight' must be 2-Dr   r³   r�   )rw   r‰   r•   rP   rˆ   )	r+  r¤   r‚  rŽ  r�  Úweight_shapeÚindices_shaper˜   r/  s	            r5   Ú	embeddingr¡  Ñ  s™   € ð �:‰:‹<˜1ÒÐ4Ð4Ó4ÐØ—<‘<€LØ—M‘M€Mà‡|�|�qÒØ&2°1¡oÐ%7‰	Ø	�‰˜Ò	Ø" 1Ñ% |°A¡Ð7‰	à5�mÐ5 \°!¡_Ñ5ˆ	à—‘€IØ×Ñ˜I¨YÐÓ7Ð7r7   Úmax_lengthsÚpadding_valuec                 óÀ   — t        |«      dk(  sJ ‚t        |«      dk(  sJ ‚|d   j                  d   dz
  }|d   }||g| j                  dd  ¢­}| j                  |«      S r†  )r´   r‰   rˆ   )r£   re  r¢  r£  rÉ  rf  rU  s          r5   Ú$meta__jagged_to_padded_dense_forwardr¥  é  sv   € ô ˆw‹<˜1ÒÐÐÜˆ{Ó˜qÒ Ð Ð à�‰
×Ñ˜Ñ˜aÑ€AØ�A‰€AØ�qÐ,˜6Ÿ<™<¨¨Ð+Ñ,€LØ×Ñ˜LÓ)Ð)r7   c                 óB   — t        | «      t        «       d„ «       «       }|S )Nc                 ó8   — t        | t        j                  ¬«      S r¼  ©rF   r   r†  r  s    r5   Ú_fz)_create_unary_float_meta_func.<locals>._fû  s   € ô  ØÔ=×JÑJô
ð 	
r7   ©r<   r#   ©Úfuncr©  s     r5   Ú_create_unary_float_meta_funcr­  ú  ó*   € Ü�4ÓÜƒ]ñ
ó ó ð
ð
 €Ir7   c                 óB   — t        | «      t        «       d„ «       «       }|S )Nc                 ó:   — t        | |t        j                  ¬«      S r¼  r¨  )rE   r
  s     r5   r©  z*_create_binary_float_meta_func.<locals>._f  s   € ô  ØˆqÔ!@×!MÑ!Mô
ð 	
r7   rª  r«  s     r5   Ú_create_binary_float_meta_funcr±    r®  r7   c                 ó˜   ‡ — t        ‰ «      ˆ fd„«       }‰ j                  › d�}||_         t        t        t        |«      «      |«      }|S )Nc                 ó`   •—  ‰| g|¢­i |¤Ž}t        | j                  |j                  «       | S r2   ré  )rŠ   rB   r¿  r¿   r4   s       €r5   Ú_fnz#_register_inplace_meta.<locals>._fn*  s.   ø€ á�Ð'˜Ò' Ñ'ˆÜ §
¡
¨C¯I©IÔ6Øˆr7   rC   )r   rm   r<   Úgetattrr*   )r4   r´  Úinplace_names   `  r5   Ú_register_inplace_metar·  )  sO   ø€ Ü
ˆ2ƒYóó ðð
 —k‘k�] !Ð$€LØ€C„LØ
4Œ-œ¤ lÓ3Ó
4°SÓ
9€Cà€Jr7   c                 óf  ‡ ‡‡— t        j                  ‰ j                  ‰j                  k(  ˆˆ fd„«       ‰ ‰g}t        ‰t        «      rQ‰j
                  dk7  r1t        j                  ‰ j                  ‰j                  k(  ˆ ˆfd„«       |j                  ‰«       t        |dt        j                  iŽS )Nc                  ó<   •— d‰j                   › d‰ j                   › �S )Nr`  z for `end`, but got dtype r�   )rn   ro   s   €€r5   rW   zlerp.<locals>.<lambda><  s   ø€ �/ %§+¡+ Ð.HÈÏÉÈÐT€ r7   r   c                  ó<   •— d‰ j                   › d‰j                   › �S )Nr`  z for `weight`, but got dtype r�   )ro   r+  s   €€r5   rW   zlerp.<locals>.<lambda>C  s!   ø€ ˜/¨%¯+©+¨Ð6SÐTZ×T`ÑT`ÐSaÐb€ r7   r=   )
rH   rY   rP   rb   r   r•   r·   rF   r   rA   )ro   rn   r+  rB   s   ``` r5   Úlerpr»  7  s�   ú€ ô 
‡L�LØ�‰�s—y‘yÑ ÜTôð �3ˆ<€DÜ�&œ*Ô%Ø�;‰;˜!ÒÜ�L‰LØ—‘˜vŸ|™|Ñ+Übôð 	�‰�FÔÜØ	ðÜ=×EÑEñð r7   )rê  c                ó<   — t        | ||t        j                  ¬«      S r¼  r¾  ©rË   Útensor1Útensor2rê  s       r5   ÚaddcmulrÀ  K  s!   € ô Øˆw˜Ô0O×0WÑ0Wôð r7   c                óè   — t        j                  t        j                  |j                  «      xr t        j                  |j                  «       d„ «       t        | ||t        j                  ¬«      S )Nc                   ó   — y)N)zFInteger division with addcdiv is no longer supported, and in a future zErelease addcdiv will perform a true division of tensor1 and tensor2. z4The historic addcdiv behavior can be implemented as zA(input + value * torch.trunc(tensor1 / tensor2)).to(input.dtype) zfor integer inputs and as z6(input + value * tensor1 / tensor2) for float inputs. z?The future addcdiv behavior is just the latter implementation: z4(input + value * tensor1 / tensor2), for all dtypes.r;   r;   r7   r5   rW   zaddcdiv.<locals>.<lambda>[  r_   r7   r½  )rH   rY   r@   r,  rP   rF   r   rA   r½  s       r5   ÚaddcdivrÃ  S  sb   € ô 
‡L�Lä×"Ñ" 7§=¡=Ó1ò 6Ü×&Ñ& w§}¡}Ó5ð	
ñ		
ôô  Øˆw˜Ô0O×0WÑ0Wôð r7   c                  ó°  — i } dD ]  }t         |   }|D ]  }|| vsŒ||   | |<   Œ Œ! | j                  «       D �]œ  \  }}t        |t        j                  j
                  «      rŒ,t        |t        «      sJ ‚ |j                  t        j                  j                  j                  «      |«       t        j                  j                  |j                  «       d«      r|t         d   v sŒ±t        |› d�«      ‚|j                  rŒÌ|j                  «       dv rŒßd|j                  «       v rt        j!                  ||«       �Œ	d|j                  «       v rt"        j!                  ||«       �Œ3d|j                  «       v rt$        j!                  ||«       �Œ]d	|j                  «       v rt&        j!                  ||«       �Œ‡t(        j!                  ||«       �ŒŸ y )
N)rr   Úpost_autogradÚpre_autogradÚCompositeImplicitAutogradrr   z« is a CompositeImplicitAutograd op, we shouldn't register meta function for it. Instead, we should let the decomposition run and write meta kernels for the base operators.>   úaten::cloneúaten::copy_úaten::rot90úaten::_to_copyúaten::empty_stridedúaten::constant_pad_ndúaten::as_strided_scatterzmkldnn::zmkl::zonednn::zquantized::)r   Úitemsrb   rH   Ú_opsÚHigherOrderOperatorr   Úpy_implÚ_CÚDispatchKeyr,   Ú%_dispatch_has_kernel_for_dispatch_keyrµ  r  Úis_viewÚ2_meta_lib_dont_use_me_use_register_meta_for_mkldnnÚimplÚ/_meta_lib_dont_use_me_use_register_meta_for_mklÚ2_meta_lib_dont_use_me_use_register_meta_for_onednnÚ5_meta_lib_dont_use_me_use_register_meta_for_quantizedÚ'_meta_lib_dont_use_me_use_register_meta)Úactivate_meta_tablerl   ÚregistryÚopoÚop_overloadr4   s         r5   Úactivate_metará  w  sÍ  € ØÐð :ò 9ˆÜ-¨dÑ3ˆàò 	9ˆCØÐ-Ò-Ø+3°C©=Ð# CÒ(ñ	9ð9ð /×4Ñ4Ó6ó 6N‰ˆ�Rô
 �k¤5§:¡:×#AÑ#AÔBØÜ˜+¤zÔ2Ð2Ð2à6ˆ×ÑœEŸH™H×0Ñ0×5Ñ5Ó6°rÔ:ä�8‰8×9Ñ9Ø×ÑÓÐ ;ô
ð Ô8¸Ñ@Ò@Ü"Ø"�mð $;ð ;óð ð
 × Ò ð à×ÑÓðñ	ð à˜[×-Ñ-Ó/Ñ/ÜB×GÑGÈÐUWÖXØ˜K×,Ñ,Ó.Ñ.Ü?×DÑDÀ[ÐRTÖUØ˜{×/Ñ/Ó1Ñ1ÜB×GÑGÈÐUWÖXØ +×"2Ñ"2Ó"4Ñ4ÜE×JÑJØ öô 8×<Ñ<¸[È"ÖMñm6Nr7   )Fr#  r2   )NNNFr   r³   Fr=  )Tr¼  )rÍ  )rÖ  T)FF)TT)rL  )FTN)TFF)TF)rà   )g      à?N)r.   Ústr)r;   r›  rÝ  F)r;   r›  FTN)Fr   FNFrŒ   )NF)rŒ   F)g      À?gUUUUUUÕ?FN)NNNNN)r   NNr³   )NNF)ç        FFN)Nrã  FFN)rã  FNN)rã  FN)FN)FNNNN)NNNF)NrŒ   FNN)NNNN)rŒ   TT)NNr   N)éd   r   r   )rŒ   )rŒ   FF)rã  („  rk  Úcollections.abcr   Úenumr   Ú	functoolsr   Útypingr   r   r   r	   Útyping_extensionsr
   rH   Útorch._prims_commonr�  r@   r   r   r   Útorch._decompr   r   r   r   Ú
torch._opsr   Útorch._primsr   r   r   r   r   r   r   r   r   r   r   r   Útorch._prims_common.wrappersr   r    r!   r"   r#   r©  r$   r%   Útorch.fx.experimentalr&   r•  Útorch.utilsr'   r8   r(   r)   Úopsr*   ÚlibraryÚLibraryrÜ  r¶   r‹  r�  rŒ  r<   rF   rR   r[   ÚlinspaceÚlogspacer›  r~   Útaker  r¿   r‹   r™   r¢   ÚcummaxÚcumminr©   r¬   rÒ   rµ   rÖ   rU  rØ   Ú_fft_c2crÞ   rá   râ   Ú_fft_r2crõ   ÚrandpermÚgenerator_outrú   r…   rÿ   Úrandintr  r  Úlow_outr  Úrandr  Ú_fft_c2rr  rŠ  r  r&  Ú
unsqueeze_r*  Ú_sparse_semi_structured_linearrâ  rP   r7  Ú_sparse_semi_structured_mmr=  Ú_sparse_semi_structured_addmmrA  Ú_cslt_sparse_mmrV  Úindex_reducer]  Úindex_reduce_r_  Úindex_selectrc  Úsegment_reducerp  rŸ  Ú	unary_outrt  rw   r}  rê   r€  r‚  r‹  r‡  rŒ  Ú_assert_asyncr�  Úmsgr“  Ú_printr–  Ú_make_dep_tokenrš  r¡  Ú_functional_sym_constrain_ranger¦  rª  Ú(_functional_sym_constrain_range_for_sizer¬  Ú_functional_assert_asyncr®  r�   r¾  rž   rÈ  rÌ  rÒ  rÚ  Ú_linalg_eighrÛ  rä  Ú_linalg_eigvalsÚlinalg_eigvalsrè  Ú
linalg_eigrë  rï  rñ  r÷  rü  r   r  r  Úlinalg_inv_exr  Úlinalg_ldl_factor_exrX   r!  Úlinalg_ldl_solver0  Ú	linalg_lur6  Úlinalg_lu_factor_exr:  Úlinalg_lu_solverC  Ú	lu_unpackrI  rR  Ú	linalg_qrrY  r]  rZ  Ú_linalg_svdrg  r-  rø  rw  rŒ  Úlinalg_solve_triangularr“  r™  r¢  Ú_linalg_detr¥  r¸  rÂ  rÔ  Úreflection_pad1drÚ  Úreplication_pad1drÞ  rê  Úreflection_pad1d_backwardrï  Úreplication_pad1d_backwardrñ  r  Úreflection_pad2dr  Úreplication_pad2dr  Úreflection_pad2d_backwardrë  Úreplication_pad2d_backwardr  r  Úreflection_pad3dr  Úreplication_pad3dr   Úreflection_pad3d_backwardÚreplication_pad3d_backwardr'  Ú_pdist_forwardrL   r+  Ú_pdist_backwardr1  ÚbaddbmmrE  Ú	bernoullirH  Ú
bernoulli_rK  r(  rN  ÚpoissonrQ  Ú_fused_moving_avg_obs_fq_helperrc  Úmmrm  rz  ré   rŠ  r’  Úmiopen_batch_normr   Úconvolutionr¨  rÓ  Ú_has_mkldnnr×  r©  Ú_convolution_pointwiser°  Ú_linear_pointwiser´  Úhas_mklrÙ  rµ  Ú_mkl_linearr¹  rÚ  rº  Úqconv2d_pointwiserÅ  ÚbinaryrÏ  Úqlinear_pointwiser"  rÔ  Úbinary_tensorrÙ  Úlinear_dynamic_fp16Úlinear_relu_dynamic_fp16rÛ  rÛ  rÜ  Ú
max_pool2drç  Úint4mm_packed_weight_cpurï  rô  Ú
avg_pool2dr  r"  Úavg_pool2d_backwardr*  Ú
avg_pool3drD  Úavg_pool3d_backwardrO  Ú_adaptive_avg_pool2drT  Ú_adaptive_avg_pool3drW  Ú_adaptive_avg_pool2d_backwardra  Ú_adaptive_avg_pool3d_backwardrf  rd  Úadaptive_max_pool2drv  rz  r|  Úadaptive_max_pool3drƒ  r…  r†  Úrepeat_interleaver‰  rc   r�  r�  r—  rƒ   Ú_unsafe_indexrµ  Úconvolution_backwardrÁ  ÚaddbmmrÉ  Ú_fused_adam_Ú_fused_adamw_rà  Ú_fused_adamræ  Ú_int_mmrï  Ú_convert_weight_to_int4packrû  Ú#_convert_weight_to_int4pack_for_cpur   Ú_weight_int4pack_mmr
  Ú_weight_int4pack_mm_for_cpur  r  r:  Ú_dyn_quant_pack_4bit_weightrF  Ú_dyn_quant_matmul_4bitrL  Ú_weight_int8pack_mmrS  Ú_cdist_forwardrh  Ú_cdist_backwardrr  Ú_embedding_bagr—  Ú_embedding_bag_forward_onlyr™  rœ  Únansumrž  ÚmedianÚ	nanmedianr   Ú
dim_valuesrJ  r£   r£  Úlogical_not_r¥  Úrepeatr«  Úzero_r­  Úmul_ÚScalarÚdiv_Úlogical_and_Úlogical_or_Úlogical_xor_r°  Úadd_Úsub_rº  ÚroundÚdecimalsrÀ  rÆ  Ú
__rshift__rÊ  Ú
__lshift__rÎ  ÚzerorÐ  r›  rÓ  ÚfillrÕ  Úrelu_rØ  Ú	_add_relurÚ  Úrrelu_with_noiserß  Úrrelu_with_noise_functionalrá  Úrrelu_with_noise_rã  Ú	index_putÚ_unsafe_index_putrç  Úmasked_fill_rë  Ú_masked_scalerî  Úmasked_scatter_rò  Úmasked_scatterrô  Úmasked_scatter_backwardrö  Ú
index_put_rø  Úaliasrû  r  Úbmmr  r  r  r  r  r9  r4  rK  rá  Ú max_pool2d_with_indices_backwardrA  Úmax_pool2d_with_indicesrC  Úfractional_max_pool2drU  Úmax_pool3d_with_indicesrb  Ú max_pool3d_with_indices_backwardri  rs  ru  r  Úgrid_sampler_2d_backwardr‡  r�  r�  r’  rm  r¨  r¢  Úselect_scatterr¦  Úslice_scatterrª  r¨   r¯  r·  Úgatherr½  rÍ  rÔ  rÖ  rà  rã  Úscatter_addrè  Úscatter_add_rë  râ  r  rê  rY  Úvalue_reducerï  Úscatter_rñ  Ú#_scaled_dot_product_flash_attentionr	  Ú#_scaled_dot_product_cudnn_attentionr  Ú0_scaled_dot_product_fused_attention_overrideabler  Ú,_scaled_dot_product_flash_attention_backwardr   Ú+_scaled_dot_product_flash_attention_for_cpur#  Ú4_scaled_dot_product_flash_attention_for_cpu_backwardr)  Ú'_scaled_dot_product_efficient_attentionr-  Ú0_scaled_dot_product_efficient_attention_backwardr5  Ú,_scaled_dot_product_cudnn_attention_backwardr7  Ú_flash_attention_forwardr?  Ú_flash_attention_backwardrD  Ú_efficient_attention_forwardrP  Ú_efficient_attention_backwardÚSymIntrX  Ú
_scaled_mmry  Úscatter_reduceÚtwoÚtwo_outr}  Úscatter_reduce_r  Úmultinomialr„  rˆ  r”  rœ  Ú_upsample_nearest_exact1dr¥  Ú_upsample_nearest_exact2dr­  Ú"_upsample_nearest_exact2d_backwardr±  Ú_upsample_nearest_exact3dr¹   r³  Úvalues_stabler¶  rÍ  Ú_thnn_fused_lstm_cellrÓ  rê  rô  rù  rü  rþ  Úargminrÿ  r  Útopkr
  Ú_segment_reduce_backwardr  Úkthvaluer  r    r$  r!  r(  r+  Úpixel_shuffler2  rD  Ú	bucketizeÚ
Tensor_outrI  ÚhistcrT  Ú_upsample_bilinear2d_aaÚ_upsample_bicubic2d_aarX  Ú _upsample_bilinear2d_aa_backwardr\  rc  rh  r�  ro  Úsearchsortedrw  r|  Ú_embedding_bag_backwardr‚  Ú_embedding_bag_dense_backwardr  Ú*_embedding_bag_per_sample_weights_backwardr‰  Úisinr�  Ú	polygammar“  Ú_local_scalar_denser•  r—  r™  Ú_softmaxr�  r¡  Ú_jagged_to_padded_dense_forwardr¥  r­  r±  Úspecial_airy_aiÚspecial_bessel_y0Úspecial_bessel_y1Úspecial_modified_bessel_i0Úspecial_modified_bessel_i1Úspecial_modified_bessel_k0Úspecial_modified_bessel_k1Ú!special_scaled_modified_bessel_k0Ú!special_scaled_modified_bessel_k1Úspecial_chebyshev_polynomial_tÚspecial_chebyshev_polynomial_uÚspecial_chebyshev_polynomial_vÚspecial_chebyshev_polynomial_wÚ&special_shifted_chebyshev_polynomial_tÚ&special_shifted_chebyshev_polynomial_uÚ&special_shifted_chebyshev_polynomial_vÚ&special_shifted_chebyshev_polynomial_wÚspecial_hermite_polynomial_hÚspecial_hermite_polynomial_heÚspecial_laguerre_polynomial_lÚspecial_legendre_polynomial_pr·  r»  rÀ  rÃ  Úlerp_Úaddcmul_Úaddcdiv_Útorch._refs.nn.functionalÚtorch._refs.specialrá  r;   r7   r5   ú<module>rÚ	     snD  ðã Ý $Ý Ý ß 5Ó 5Ý 'ã Ý #ß +Ñ +÷ó õ "ß U÷÷ ÷ ÷õ ÷ <Ý 7Ý )ñ ˆTƒ]€Ùˆtƒ_€à‡y�y‡~�~€à*/¯-©-×*?Ñ*?ÀÈÐPVÓ*WÐ 'Ù % a£Ñ €ˆ)�Xð
˜ 8¨B°¨FÑ#3Ð"4°h¸rÀ2¸vÑ6FÐ"FÑGó 
ðà3óò(*òñ �—‘˜tŸ}™}Ð-Ó.Ùƒð
 
Ø
ØØ�=‰=ØØò5ó ó /ð5ñp �—	‘	×!Ñ! 4§9¡9§=¡=Ð1Ó2Ùƒñ'ó ó 3ð'ñ �×!Ñ!×)Ñ)¨4×+<Ñ+<×+@Ñ+@ÐAÓBÙƒØ%'ó %ó ó Cð%ñ$ ˆt×%Ñ%Ó&ÙƒñIó ó 'ðIñ Ø	‡[�[×Ñ˜$Ÿ+™+Ÿ/™/¨4¯;©;×+>Ñ+>ÀÇÁÇÁÐPóñ ˆX�yÓ!ñó "óðñ �×!Ñ!×)Ñ)¨4×+<Ñ+<×+@Ñ+@ÐAÓBÙƒñIó ó CðIò3òl�Vð  $ s¡)ð ¸4ó ñ �—‘×%Ñ% t§}¡}×'8Ñ'8Ð9Ó:ÙƒñKó ó ;ðKð €ð $ s¡)ó ñ �—‘×%Ñ% t§}¡}×'8Ñ'8Ð9Ó:Ùƒñ=
ó ó ;ð=
ñ@ ˆt�}‰}×*Ñ*Ó+Ø"&ó 3ó ,ð3ñ ˆt�}‰}×$Ñ$Ó%ð �*‰*ØØØó
ó &ð
ñ �—‘×$Ñ$ d§l¡l×&6Ñ&6Ð7Ó8Ùƒð
 �*‰*ØØØóó ó 9ðñ& �—‘× Ñ  $§,¡,×"6Ñ"6Ð7Ó8Ùƒð �*‰*ØØØóó ó 9ðñ& �—	‘	×!Ñ! 4§9¡9§=¡=Ð1Ó2ÙƒØ%)°$¸tÐPTó ó ó 3ðñ �—‘×%Ñ% t§}¡}×'8Ñ'8Ð9Ó:Ùƒð$D�vð $D D¨¡Ið $D¸cð $DÈCò $Dó ó ;ð$DñN ˆt�z‰z×!Ñ!Ó"óó #ðò0(ñ ˆt�‰×&Ñ&Ó'ñó (ðñ ˆt×2Ñ2Ó3ð
 "Ø%)Ø'+òØðàðð ðð �6Ñ
ð	ð
 ˜c‘]ðð ˜Ÿ™Ñ$òó 4ðñB ˆt×.Ñ.Ó/ð
 (,ò	Ø
ðàðð ðð ˜Ÿ™Ñ$ò	ó 0ðñ0 ˆt×1Ñ1Ó2ð Ø	
Ø'+òØðà
ðð ðð ð	ð ˜Ÿ™Ñ$òó 3ðñD ˆt×#Ñ#Ó$ð "Ø"Ø'+Ø"ØØØ$ò-<Ø—,‘,ð-<à�\‰\ð-<ð �6Ñ
ð-<ð �FÑð	-<ð
 ˜Ÿ™Ñ$ð-<ð ð-<ð ð-<ð ð-<ð ò-<ó %ð-<ñ` ˆt× Ñ ×(Ñ(Ó)ð ò	IØ
ð	Ià	ð	Ið ð	Ið �L‰Lð		Ið
 ð	Ið ð	Ið ò	Ió *ð	Iñ ˆt×!Ñ!×)Ñ)Ó*ð ò	Ø
ð	à	ð	ð ð	ð �L‰Lð		ð
 ð	ð ð	ð ò	ó +ð	ñ ƒÙˆt× Ò ×(Ñ(Ó)ñ'ó *ó ð'ñ ˆt×"Ò"×*Ñ*Ó+ð
 !%Ø $Ø $ØØØò WØ
ð Wàð Wð �fÑð	 Wð
 �fÑð Wð �fÑð Wð ð Wð ð Wð ò Wó ,ð WñF �—’× Ñ  $§(¢(×"4Ò"4Ð5Ó6Ùƒñó ó 7ðñ ˆt�xŠx�|Š|Óóó ðñ �—’× Ñ  $§(¢(×"4Ò"4Ð5Ó6Ùƒñó ó 7ðñ ˆt�xŠx�|Š|Óóó ðñ ˆt�zŠz×!Ñ!Ó"ñ6ó #ð6ñ ˆt�zŠz�~‰~Óñ(ó ð(ñ
 ˆt×!Ò!×)Ñ)Ó*ñó +ðñ ˆt×!Ò!×%Ò%Ó&ñó 'ðñ ˆt�{Š{×"Ñ"Ó#ñó $ðñ ˆt×#Ò#×+Ñ+Ó,ð ØØØØó)ó -ð)ñ ˆt×'Ò'×/Ñ/Ó0ó,ó 1ð,ñ ˆt×3Ò3×;Ñ;Ó<óó =ðñ
 ˆt×0Ò0×8Ñ8Ó9ó6ó :ð6ñ& ˆt×<Ò<×DÑDÓEñó Fðñ
 ˆt×,Ò,×0Ò0Ó1ñó 2ðð
˜Fð ¨Có ð  ð  ¨Fð  ¸#ó  ðN (,ò
Øð
àð
ð !%ó
ò$�Vð  Sð °Có ð
˜ð 
 Fð 
°$ð 
Àó 
ð"  ò	Øðàðð ðð ó	ð�Có ñ �×!Ò!×)Ñ)¨4×+<Ò+<×+HÒ+HÐIÓJÙˆ]˜NÓ+ò˜ð  sð ¸Tò ó ,ó Kðñ" �×$Ò$×,Ñ,¨d×.AÒ.A×.EÑ.EÐFÓGÙƒðB ð B¨6ò Bó ó HðBñ �—’Ð Ó!Ùˆ]˜NÓ+ð	˜6ò 	ó ,ó "ð	ðQ ð Q¨Fó Qñ ˆt×*Ò*Ó+Ùƒð) ð )¨Fð )¸4ð )ÀFò )ó ó ,ð)ñ ˆt×"Ò"Ó#ÙƒòJ˜ð J Fð J°4ð JÀFò Jó ó $ðJñ ˆt�}Š}ÓÙƒò)�6ð ) $ð )°6ò )ó ó ð)ñ ˆt×$Ò$Ó%Ùƒò)˜6ð )¨$ð )¸6ò )ó ó &ð)ñ ˆt×&Ò&×.Ñ.Ó/ò˜&ð ¨ð ÀTò ó 0ðñ" Ø	×$Ò$×,Ñ,¨d×.MÒ.M×.QÑ.QÐRóñ ƒð. fð .°6ð .¸fò .ó óð.ñd ˆt×!Ò!×)Ñ)Ó*ò˜&ð °ò ó +ðñ �×)Ò)×1Ñ1°4×3LÒ3L×3PÑ3PÐQÓRÙˆT�8˜VÓ$ð Øò	Ø
ðð ðð ð	ð
 ˆ6�6˜6Ð!Ñ"òó %ó Sðñ& �×%Ò%×-Ñ-¨t×/DÒ/D×/HÑ/HÐIÓJÙƒð ò'Øð'àð'ð ð'ð
 ð'ð ò'ó ó Kð'ñT �—’×&Ñ&¨¯ª×(:Ñ(:Ð;Ó<ÙˆS�#�sÓØ/3ò �fð ¨ð ¸¸fÀfÈfÐ>TÑ8Uò ó ó =ðñ4 �×(Ò(×0Ñ0°$×2JÒ2J×2NÑ2NÐOÓPÙˆT�8˜VÓ$ð Øò	Øðð ðð ð	ð
 ˆ6�6˜6Ð!Ñ"òó %ó QðñD �×$Ò$×,Ñ,¨d×.BÒ.B×.FÑ.FÐGÓHÙƒð Øò4Øð4àð4ð ð4ð
 ð4ð ð4ð ò4ó ó Ið4ñn ˆt�~Š~ÓÙˆS�#�sÓð Øò	$Øð$àð$ð ð$ð ð	$ð
 ˆ6�6˜6Ð!Ñ"ò$ó ó ð$ðP˜ð   t¨T zÑ!2ó ñ* �—’×&Ñ&¨¯ª×(:Ñ(:Ð;Ó<ÙˆS�#Óò�fð  Cð ¸¸fÀf¸nÑ8Mò ó ó =ðñ4 �×$Ò$×,Ñ,¨d×.BÒ.B×.GÒ.GÐHÓIÙˆV�[ $¨Ó1ð'�vð ' %¨°¸ÀÐ(FÑ"Gò 'ó 2ó Jð'ñ$ ˆt×Ò×'Ñ'Ó(ð  ØØ ò	"Øð"àð"ð ð"ð �S‰Mò	"ó )ð"ðJ.Ø
ð.à
ð.ð ˆ4�‰9�d˜3‘iÐÑ ó.ð".Ø
ð.à
ð.ð �3‰-ð.ð ˆ6�6ˆ>Ñó	.ð( fð °Vð Àó ñ ˆt×$Ò$Ó%ð
 ØØ#ØØ#Ø!ò7Øð7àð7ð ð	7ð
 ð7ð �VÑð7ð 	�Ñð7ð �VÑð7ð �6Ñ
ð7ð ˆ6�6˜6 6Ð)Ñ*ò7ó &ð7ñt �×,Ò,×4Ñ4°d×6RÒ6R×6VÑ6VÐWÓXð ØØ òØðàðð ð	ð
 ðð ðð 
�&Ñ	ðð òó Yðñ2 ˆt×$Ò$Ó%ÙˆS�# 4Ô(ð ØØò+(Ø
ð+(àð+(ð ð+(ð ð	+(ð
 ð+(ð ˆ6�6ˆ>Ñò+(ó )ó &ð+(ñ^ ˆt×Ò×'Ñ'Ó(ñ
ó )ð
ñ ˆt�zŠzÓÙƒð
 ØòWØðWà	ðWð ðWð ð	Wð
 ðWð òWó ó ðWòtò>#;ñL ˆt×$Ò$Ó%Ùƒñ=ó ó &ð=ñ ˆt×%Ò%Ó&Ùƒñ>ó ó 'ð>ò(ñ< ˆt×-Ò-Ó.Ùˆ\ÓñSó ó /ðSñ ˆt×.Ò.Ó/Ùˆ\ÓñTó ó 0ðTò2Eñj ˆt×$Ò$Ó%Ùƒñ=ó ó &ð=ñ ˆt×%Ò%Ó&Ùƒñ>ó ó 'ð>ñ à×&Ò&×.Ñ.Ø×&Ò&×1Ò1Ø×'Ò'×/Ñ/Ø×'Ò'×2Ò2ð	óñ ˆ\Óñ&ó óð&ò:<Gñ~ ˆt×$Ò$Ó%Ùƒñ=ó ó &ð=ñ ˆt×%Ò%Ó&Ùƒñ>ó ó 'ð>ñ à×&Ò&×.Ñ.Ø×&Ò&×1Ò1Ø×'Ò'×/Ñ/Ø×'Ò'×2Ò2ð	óñ ˆ\Óñ$(ó óð$(ñN ˆt×"Ò"Ó#Ùƒò

˜fð 

¨ð 

°vò 

ó ó $ð

ñ ˆt×#Ò#Ó$ÙƒðP˜vð P¨Vð P¸ð PÀfð PÐQWò Pó ó %ðPñ �—’×$Ñ$ d§l¢l×&6Ñ&6Ð7Ó8ÙƒØ/0¸ó 'ó ó 9ð'ñ2 �—’×&Ñ&¨¯ª×(:Ñ(:Ð;Ó<ÙƒØ&*ó Ió ó =ðIñ
 ˆt�Š×$Ò$Ó%óó &ðñ ˆt�~Š~×ÒÓ óIó !ðIñ
 �—’×$Ñ$ d§l¢l×&6Ñ&6Ð7Ó8Ùƒó"ó ó 9ñ"ñ ˆt×3Ò3×;Ñ;Ó<ð Øó*ó =ñ*ñ. ˆt�wŠwÓÙƒñ	ó ó ñ	óBõ
ð* 7;òhØ—,‘,ðhà�L‰Lðhð �$�s‘)˜S�.Ñ!ðhð �4˜‘9˜c�>Ñ"ð	hð
 �D˜‘I˜s�NÑ#ðhð ðhð ðhð ˜U 4¨¡9¨c >Ñ2Ñ3ôhóVQñ ˆt×%Ò%×-Ñ-Ó.ð"$Ø—,‘,ð"$à�L‰Lð"$ð �5—<‘<Ñ
 ð"$ð ˜5Ÿ<™<Ñ(ð	"$ð
 ˜%Ÿ,™,Ñ'ð"$ð ð"$ð !&ð"$ð ò"$ó /ñ"$ñJ ˆt×Ò×'Ñ'Ó(ð)Ø—,‘,ð)à�L‰Lð)ð �,‰,ð)ð �‰Ið	)ð
 �#‰Yð)ð �3‰ið)ð ð)ð ˜‘Ið)ð ò)ó )ñ)ðX 	‡8‚8×ÔØ9>¿¹×9NÑ9NØ�&˜&ó:Ñ6ñ �5—9‘9×#Ò#×:Ò:×BÑBÓCñó Dññ, �5—9‘9×#Ò#×5Ò5×=Ñ=Ó>ñSó ?ñSð
 ‡x‚x×ÓØ:?¿-¹-×:OÑ:OØ�6˜6ó;
Ñ7ñ 
�u—y‘y—}’}×0Ò0Ó	1ò	ó 
2ñ	ð
 :?¿¹×9NÑ9NÙ�&˜&ó:Ñ6ñ �5—9‘9×#Ò#×5Ò5×=Ñ=Ó>ò ó ?ñ ñD �5—9‘9×#Ò#×5Ò5×<Ò<Ó=òó >ññ6 �5—9‘9×#Ò#×5Ò5×=Ñ=Ó>Ù�5—9‘9×#Ò#×5Ò5×<Ò<Ó=òó >ó ?ññ, �5—9‘9×#Ò#×5Ò5×<Ò<Ó=Ù�5—9‘9×#Ò#×5Ò5×CÒCÓDòó Eó >ññ: �5—9‘9×#Ò#×7Ò7×?Ñ?Ó@Ù�5—9‘9×#Ò#×<Ò<×DÑDÓEò	ó Fó Añ	ð =B¿M¹M×<QÑ<QÙ�V˜Vó=Ñ9ñ �5—9‘9×&Ò&×1Ò1Ó2ð ØØØô
ó 3ñ
ñ8 �5—9‘9×&Ò&×?Ò?Ó@ò@ó Añ@ô(ñ ˆt�Š×&Ñ&Ó'ð ØØØØôMó (ñMôb(<ñX ˆt×'Ò'×/Ñ/Ó0òEó 1ñEñP ˆt�ŠÓÙƒð ØØØØôUJó ó  ñUJñp ˆt×'Ò'Ó(Ùˆ\ÓòK(ó ó )ñK(ñ\ ˆt×(Ò(×0Ñ0Ó1òó 2ññ" ˆt×(Ò(×0Ñ0Ó1ò@ó 2ñ@ñ ˆt×1Ò1×9Ñ9Ó:òFó ;ñFñ, ˆt×1Ò1Ó2Ùˆ\ÓòPó ó 3ñPñ
	
°6ð 	
ÀSõ 	
ñ ˆt×'Ò'Ó(ÙˆU�IÓò+ó ó )ñ+ñ\ ˆt×0Ò0Ó1Ùˆ\ÓòHó ó 2ñHñ$ ˆt×'Ò'Ó(ÙˆU�IÓò'ó ó )ñ'ñT ˆt×0Ò0Ó1Ùˆ\Óò(ó ó 2ñ(ñ
 ˆt×%Ò%×,Ñ,Ó-ô*ó .ñ*ñ �—’×$Ñ$ d§l¢l×&6Ñ&6Ð7Ó8ÙƒòTó ó 9ñTñ �×#Ò#×+Ñ+¨T×-@Ò-@×-DÑ-DÐEÓFÙƒØ46ô @¨có @ó ó Gñ@ñ �—	‘	—‘×&Ò&×.Ñ.°·	±	·±×0FÒ0F×0JÑ0JÐKÓLÙƒòó ó Mññ" �—
’
×!Ñ! 4×#5Ò#5×#<Ñ#<Ð=Ó>òó ?ññD �×)Ò)×1Ñ1Ð2Ó3òHó 4ñHñ: �—’×#Ñ# T§[¢[§_¡_Ð5Ó6ÙƒØ./°qô 'ó ó 7ñ'ñ0 �×!Ò!×)Ñ)¨4×+=Ò+=×+EÑ+EÐFÓGð  Øõ!
ó Hñ
ñ2 �× Ò ×(Ñ(Ð)Ó*ð  Øõ!!ó +ñ!ñH �—’ˆ~ÓÙƒòBó ó ñBñ* �×0Ò0Ð1Ó2òó 3ññ& �×8Ò8Ð9Ó:òó ;ññ �×(Ò(Ð)Ó*ò@ó +ñ@ñ �×0Ò0Ð1Ó2ò<ó 3ñ<ñ"�3ñ "˜3ð " 3õ "ôjñZ �×0Ò0Ð1Ó2ðDØ!)¨&Ñ!1óDó 3ñDñ0 �×+Ò+Ð,Ó-ò;ó .ñ;ñ  �×(Ò(Ð)Ó*ò<ó +ñ<ñ ˆt×"Ò"×*Ñ*Ó+ò &ó ,ñ &ñF ˆt×#Ò#Ó$ÙƒòGó ó %ñGñ* ˆt×"Ò"×*Ñ*Ó+ð
 Ø	
ØØØØô`5ó ,ñ`5ñF ˆt×/Ò/×7Ñ7Ó8ò5ó 9ñ5ö
ñ �—’×#Ñ# T§[¢[§_¡_Ð5Ó6Ùƒñ=¸$õ =ó ó 7ñ=ñ �—’×#Ñ# T§^¢^×%;Ñ%;Ð<Ó=ò)ó >ñ)ñ à�Š�ŠØ�Š×ÒØ�Š×ÒØ�Š×!Ò!Ø�	Š	×ÑØ�	Š	×Òðó	ñ ˆX�yÓ!ôó "ó	ññ ˆt× Ò ×(Ñ(Ó)òó *ññ ˆt�{Š{×"Ñ"Ó#ò'ó $ñ'ñ ˆt�zŠz×!Ñ!Ó"òó #ññ à�	Š	×ÒØ�	Š	×ÒØ�	Š	×ÑØ�	Š	×ÑØ×Ò×!Ñ!Ø×Ò× Ñ Ø×Ò×!Ñ!ðó
òó
ññ à�	Š	×ÒØ�	Š	×ÒØ�	Š	×ÑØ�	Š	×Ñð	óô*óñ*ñZ �—
’
×"Ñ" D§J¢J×$7Ò$7Ð8Ó9òó :ñô
ñ" �—’×&Ñ&¨¯ª×(>Ò(>Ð?Ó@òó Aññ �—’×&Ñ&¨¯ª×(>Ò(>Ð?Ó@òó Aññ ˆt�yŠy× Ñ Ó!ò&ó "ñ&ñ �—
’
×!Ñ! 4§:¢:×#4Ò#4Ð5Ó6òó 7ññ �—	’	× Ñ  $§)¢)×"2Ò"2Ð3Ó4ò"ó 5ñ"ñ ˆt�zŠz×!Ñ!Ó"òó #ññ ˆt�~Š~×$Ñ$Ó%Ùƒò¨Fó ó ó &ññ �×%Ò%Ð&Ó'ÙƒàRVô"ó ó (ñ"ñ �×0Ò0Ð1Ó2àRVô;ó 3ñ;ñ �×&Ò&Ð'Ó(àKOôó )ññ �—’×&Ñ&¨×(>Ò(>×(FÑ(FÐGÓHô"ó Iñ"ñ ˆt× Ò ×'Ò'Ó(òó )ññ
 ˆt×!Ò!×)Ñ)Ó*òó +ññ ˆt×#Ò#Ó$ò	ó %ñ	ñ ˆt×"Ò"Ó#Ùƒò6ó ó $ñ6ñ ˆt×+Ò+Ó,ò!ó -ñ!ñ ˆt�Š×&Ñ&Ó'ôó (ññ ˆt�zŠz×!Ñ!Ó"ò!ó #ñ!öñB ˆt�xŠx×ÑÓ ò5ó !ñ5ôôô6ô;ðh #ò-YØñYàñYð 	ñYð 	ñ	Yð
 	ñYð 	ñYð 	ñYð 	ñYð 	ñYð 	ñYð 	ñYð ñYð ñYð ñYð ñYð  ñ!Yð" ñ#Yð$ ñ%Yð& ñ'Yð( ð)Yð* ñ+Yð, õ-Yôx;4ð|38Øñ38àñ38ð ñ38ð 	ñ	38ð
 	ñ38ð 	ñ38ð 	ñ38ð 	ñ38ð 	ñ38ð 	ñ38ð 	ñ38ð 	ñ38ð ñ38ð ñ38ð ñ38ð  ñ!38ð" ñ#38ð$ ð%38ð& õ'38ôlI2ñX ˆt×4Ò4×<Ñ<Ó=ò(ó >ñ(ñV ˆt×+Ò+×3Ñ3Ó4ð ØØØô#ó 5ñ#ñL ˆt×)Ò)×1Ñ1Ó2òQó 3ñQñh ˆt×+Ò+Ó,ÙˆU�IÓð ØØØôdó ó -ñdñN ˆt×4Ò4Ó5Ùˆ\Óòbó ó 6ñbðJ%
 Vñ %
°6õ %
öP˜tõ ð ñ ¨vñ È3õ ñ$ ˆt×,Ò,×4Ñ4Ó5ò#ó 6ñ#ñ$ ˆt×#Ò#Ó$Ùƒò8ó ó %ñ8ñ" ˆt×,Ò,Ó-Ùˆ\™;Ó'ò!ó (ó .ñ!ñ, �—	’	×!Ñ!Ð"Ó#ò.ó $ñ.ñ ˆt�Š×&Ñ&Ó'ð ØØØØô)ó (ñ)ñX ˆt�{Š{�‰ÓòEó  ñEñ@ ˆt×"Ò"×*Ñ*Ó+ò.ó ,ñ.ñ ˆt×!Ò!×)Ñ)Ó*ô.ó +ñ.ò
	˜ñ 	¨Cñ 	¸dõ 	ô/ô
ñ  ˆt�{Š{×"Ñ"Ó#ô'ó $ñ'öö6
ô ö
-
öb4ñ ˆt×Ò×'Ñ'Ó(ò&ó )ñ&ñ
 ˆt× Ò Ó!òó "ññ
 à�Š×ÒØ�Š×ÒØ�Š×ÒØ�Š×!Ò!ð	óñ ƒô&ó óñ&ñ à�Š×ÒØ�Š×ÒØ�Š×ÒØ�Š×"Ò"ð	óôóññ �×8Ò8Ð9Ó:ð
 ØØ#Ø!ó=Øñ=à	ñ=ð ñ=ð ñ	=ð
 ñ=ð ñ=ð �E‰?ó=ó ;ñ=ñ@ �×8Ò8Ð9Ó:ð ØØ#Ø!ó&Øñ&à	ñ&ð ñ&ð ˜Ññ	&ð
 ñ&ð ñ&ð ñ&ð ñ&ð �E‰?ó&ó ;ñ&ñR �×EÒEÐFÓGð
 #'ØØØ#Ø!ó%Øñ%à	ñ%ð ñ%ð ˜Ññ	%ð
 ñ%ð ñ%ð ñ%ð �E‰?ó%ó Hñ%ñP à×9Ò9ðóð( "ó"Øñ"àñ"ð 
ñ"ð ð	"ð
 
ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð �E‰?ó"óñ
"ñ. à×8Ò8ðóð ØØ"&Ø!óØñà	ñð ñð ñ	ð
 ñð ˜Ññð �E‰?óóñ
ñ: à×AÒAðóð #'Ø!ó'"Øñ'"àñ'"ð 
ñ'"ð ð	'"ð
 
ñ'"ð ñ'"ð ñ'"ð ñ'"ð ˜Ññ'"ð �E‰?ó'"óñ
'"ñT �×<Ò<Ð=Ó>ð ØØ!ó))Øñ))à	ñ))ð ñ))ð ˜Ññ	))ð
 ñ))ð ñ))ð �E‰?ó))ó ?ñ))ñX à×=Ò=ðóð" Ø!ó4-Øñ4-àñ4-ð 
ñ4-ð ñ	4-ð
 ˜Ñð4-ð 
ñ4-ð ñ4-ð ñ4-ð ñ4-ð ñ4-ð ˜$‘Zñ4-ð ñ4-ð �E‰?ó4-óñ
4-ñn à×9Ò9ðóð* "ó!"Øñ"àñ"ð 
ñ"ð ð	"ð
 
ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð  �E‰?ó!"óñ
"ñ0 à×%Ò%ðóð  "Ø&*Ø'+Ø"&Ø%)óHØñHà	ñHð ñHð ˜Ññ	Hð
 ˜ÑñHð ñHð ñHð ñHð ñHð ñHð �E‰?ñHð ˜s‘mñHð   ‘}ñHð ˜ÑñHð ˜6Ñ"óHóñ
HñV à×&Ò&ðóð( "Ø&*Ø'+ó#,Øñ,àñ,ð 
ñ,ð ð	,ð
 
ñ,ð ñ,ð ñ,ð ñ,ð ñ,ð ñ,ð ñ,ð ñ,ð ñ,ð ñ,ð �E‰?ñ,ð  ˜s‘mñ!,ð"   ‘}ó#,óñ
,ñ4 à×)Ò)ðóð   %Ø!Ø(,Ø!%Ø!%ó,SØñ,Sà	ñ,Sð ð,Sð �6Ñ
ñ	,Sð
 ˜6Ñ"ñ,Sð ˜6Ñ"ñ,Sð ˜3‘-ñ,Sð ˜3‘-ñ,Sð ñ,Sð ñ,Sð ñ,Sð �E‰?ñ,Sð ˜fÑ%ñ,Sð �vÑñ,Sð ˜#‘ó,Sóñ
,Sñ^ à×*Ò*ðóð* "Ø$(Ø"'ó%47Øñ47àñ47ð 
ñ47ð ð	47ð
 �6Ñ
ñ47ð ˜6Ñ"ñ47ð ˜6Ñ"ñ47ð —,’,ñ47ð —,’,ñ47ð ñ47ð ñ47ð ñ47ð ñ47ð ñ47ð ñ47ð  �E‰?ñ!47ð" ˜S‘Mñ#47ð$  ó%47óñ
47ñn �—’×'Ñ'Ð(Ó)ð $(Ø+/Ø'+Ø òaYØ
�,‰,ðaYà
�,‰,ñaYð �\‰\ñaYð �\‰\ð	aYð
 �5—<‘<Ñ
 ñaYð ˜5Ÿ<™<Ñ(ðaYð ˜Ÿ™Ñ$ñaYð óaYó *ñaYñH �×#Ò#×'Ò'¨×)<Ò)<×)DÒ)DÐEÓFÙƒô&ó ó Gñ&ñ
 ˆt×#Ò#×'Ò'Ó(ôó )ññ
 �× Ò ×(Ñ(¨$×*:Ò*:×*>Ñ*>Ð?Ó@Ùƒñ	Èô 	ó ó Añ	ôô,ñ* Ø	×Ò×$Ñ$ d×&DÒ&D×&LÑ&LÐMóô
óñ
ñ Ø	×Ò×$Ñ$ d×&DÒ&D×&LÑ&LÐMóôóññ. à×(Ò(×0Ñ0Ø×/Ò/×7Ñ7ðóð !%Ø $óØñà˜%  U§\¢\Ð 1Ñ2Ñ3ñð ˜˜s E§L¢LÐ0Ñ1Ñ2ñð �u‰oñ	ð
 �u‰oóóññ: Ø	×Ò×$Ñ$ d×&DÒ&D×&LÑ&LÐMóô
óñ
ñ à�	Š	×ÑØ�	Š	×ÒØ�	Š	×ÒØ�	Š	×Òð	óôóñô&$ñN ˆt×)Ò)×1Ñ1Ó2ð
 Øôó 3ññ ˆt�Š×&Ñ&Ó'ò4/ó (ñ4/ñn ˆt×$Ò$×,Ñ,Ó-ò$%ó .ñ$%ôN

ô
ñ �—’×#Ñ# T§[¢[×%8Ñ%8Ð9Ó:ô4ó ;ñ4ñ ˆt×!Ò!×)Ñ)Ó*ôó +ññ ˆt�yŠy× Ñ Ó!ô
Qó "ñ
Qñ ˆt×,Ò,Ó-ÙƒàLPôó ó .ññ  �—’×%Ñ% t§}¢}×';Ò';Ð<Ó=ÙˆX�yÓ!ôKó "ó >ñKð #(×"9Ò"9Ñ ôQñ ˆt×7Ò7×?Ñ?Ó@ò	*ó Añ	*ñ ˆt×#Ò#×+Ñ+Ó,ò	0ó -ñ	0ñ ˆt×!Ò!×)Ñ)Ó*òó +ññ> ˆt×-Ò-×5Ñ5Ó6òFó 7ñFñD �—’×%Ñ% t§~¢~×'@Ò'@ÐAÓBÙƒØ27¸uõ ó ó Cññ �—
’
ˆ|ÓÙƒôEó ó ñEñ0 Ø	×!Ò!×)Ñ)¨4×+FÒ+F×+NÑ+NÐOóð Øôóññ& �×5Ò5×=Ñ=Ð>Ó?ð Øôó @ññ8 ˆt×>Ò>×FÑFÓGòó Hññ$ �—’×'Ñ'¨¯ª×)<Ñ)<Ð=Ó>Ùƒô'ó ó ?ñ'ñ
 ˆu�y‰y�~‰~×(Ò(Ó)òó *ññ8 ˆu�y‰y�~‰~× Ò Ó!ò6ó "ñ6ñ$ ˆt× Ò Ó!Ùƒð
 Ø
Ø	Øõ-Kó ó "ñ-Kô`ñ ˆt×+Ò+Ó,ð ô'
ó -ñ'
ñT ˆt×1Ò1Ó2ð ôó 3ññ, ˆt×>Ò>Ó?ð ôó @ññ. ˆt�yŠyÓÙƒØ8=Àeõ 8ó ó ñ8ñ  ˆt�~Š~ÓÙƒñ6�cð 6 ð 6¨Fó 6ó ó ñ6ñ ˆt×'Ò'Ó(ðI &ó Ió )ñIñ ˆt�yŠyÓÙ˜Ôð"ˆvð "˜&ó "ó ó ñ"ñ ˆt�|Š|ÓÙƒð6�&ð 6˜Vó 6ó ó ñ6ñ ˆt�}Š}ÓÙƒñ	ˆvð 	˜Cñ 	°ð 	¸ó 	ó ó ñ	ñ ˆt�~Š~ÓÙƒð Ø$Øò8Øð8àñ8ð ñ8ð ñ	8ð
 ð8ð ó8ó ó ñ8ñ, ˆt×3Ò3×;Ñ;Ó<ð
 ò	*Øð*à�&‰\ñ*ð �c‘ñ*ð ó	*ó =ñ*ô ôò ˜d×2Ò2Ô 3Ú ˜d×4Ò4Ô 5Ú ˜d×4Ò4Ô 5Ú ˜d×=Ò=Ô >Ú ˜d×=Ò=Ô >Ú ˜d×=Ò=Ô >Ú ˜d×=Ò=Ô >Ú ˜d×DÒDÔ EÚ ˜d×DÒDÔ Eò ˜t×BÒBÔ CÚ ˜t×BÒBÔ CÚ ˜t×BÒBÔ CÚ ˜t×BÒBÔ CÚ ˜t×JÒJÔ KÚ ˜t×JÒJÔ KÚ ˜t×JÒJÔ KÚ ˜t×JÒJÔ KÚ ˜t×@Ò@Ô AÚ ˜t×AÒAÔ BÚ ˜t×AÒAÔ BÚ ˜t×AÒAÔ Bôñ ˆt�yŠyÓÙƒòó ó ññ$ ˆt�|Š|ÓÙƒØ./õ ó ó ññ ˆt�|Š|ÓÙƒØ./õ ó ó ñò, 	˜tŸyšyÓ)�Ú! $§,¢,Ó/�Ú! $§,¢,Ó/�ó
 Ü  Ü ôBNòJ …r7   