Ë
    P/æj ã            -       ó^e  — d dl Z d dlmZ d dlmZmZmZmZmZ d dl	Z	d dl
mZ d dl	mZmZmZ d dlmZmZ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! d d	l"m#Z#m$Z$m%Z%m&Z&m'Z' d d
l(m)Z)m*Z* d dl+m,Z- e	j\                  j^                  Z/e	j`                  jc                  ddd«      Z2d„ Z3defd„Z4d„ Z5d„ Z6 e3e/jn                  e/jp                  g«       e'«       ddde	jr                  ddfd„«       «       Z: e3e/jv                  jx                  e/jv                  jz                  g«       e'«       d„ «       «       Z> e3e/j~                  jx                  e/j~                  jz                  g«       e'«       ddœd„«       «       Z? e3e/j€                  «       e'«       d„ «       «       Z@ e3e/j‚                  jx                  e/j‚                  jz                  e/j„                  jx                  e/j„                  jz                  g«       e'dd«      d„ «       «       ZC e3e/jˆ                  jx                  e/jˆ                  jz                  g«       e'«       d„ «       «       ZDd„ ZE e3e/jŒ                  jx                  e/jŒ                  jz                  g«       e'«       d „ «       «       ZG e3e/j�                  jx                  e/j�                  jz                  g«       e'«       d!„ «       «       ZI e3e/j”                  j–                  «      dd"œd#„«       ZL e3e/j”                  jx                  «      e	jš                  dddd$œd%„«       ZN e3e/jž                  jx                  e/jž                  jz                  g«       e'«       e	jš                  dddd$œd&„«       «       ZP e3e/jž                  j¢                  e/jž                  j¤                  g«       e'«       e	jš                  dddd$œd'„«       «       ZS e3e/j¨                  jx                  e/j¨                  jz                  g«       e'«       ddddd$œd(„«       «       ZU e3e/j¬                  jx                  e/j¬                  jz                  g«       e'«       d)„ «       «       ZW e3e/j°                  jx                  «      �dßd*„«       ZYd+„ ZZ e3e/j¶                  jx                  «      d,„ «       Z\ e3e/jº                  «      	 	 	 �dàd-ed.ed/ed0ee   d1ee^   d2ee	j¾                     fd3„«       Z` e3e/jÂ                  «      	 �dád4ed5ed6ed2ee	j¾                     fd7„«       Zb e3e/jÆ                  «      d8d8dd9œd-ed4ed5ed6ed2ee	j¾                     f
d:„«       Zd e3e/jÊ                  «      	 	 	 	 �dâd;e	j                  d<e	j                  d0ee   d=ee   d2ee	j¾                     d>effd?„«       Zg e3e/jÐ                  jx                  «      d@dAœdBedCeidDedEe	j                  dFe^dGefdHefdI„«       Zj e3e/jÖ                  jx                  «      d@dAœdBedCeidDedEe	j                  dFe^dGefdHefdJ„«       Zl e'«        e3e/jÚ                  jx                  «      dK„ «       «       Zn e3e/jÞ                  jx                  «      dddd dddLœdMedFe^dNee   dee   dOee   dPeidQefdHefdR„«       Zp e3e/jâ                  jx                  e/jâ                  jä                  g«       e'«       dS„ «       «       Zs e3e/jâ                  jè                  «      �dßdT„«       Zu e3e/jì                  jx                  e/jì                  jä                  g«       e'«       dU„ «       «       Zw e3e/jì                  jè                  «      �dßdV„«       Zx e3e/jò                  jx                  «      dW„ «       Zz e3e/jò                  jz                  «      dX„ «       Z{ e3e/jø                  jx                  «      dY„ «       Z} e3e/jø                  jü                  «      dZ„ «       Z e3e/�j                   jx                  «      d[„ «       Z� e3e/�j                  jx                  «      dddddd\œd]„«       Zƒ e3e/�j                  jx                  «      �dãd^„«       Z„ e3e/�j
                  jx                  «      �dàd_„«       Z† e3e/�j                  jx                  «      �dãd`„«       Z‡ e3e/�j                  jx                  «      da„ «       Z‰ e3e/�j                  jü                  «      db„ «       Z‹dBedce^fdd„ZŒdBedeedfe^fdg„Z�	 �dädhedce^dieffdj„ZŽ�dådeedce^dke^fdl„Z�deedmednefdce^fdo„Z�	 �dædqe^dped-edre^fds„Z‘dte^fdu„Z’ e3e/�j&                  jx                  e/�j&                  �j(                  g«       e'dvdw«      �dçdeedte^dyeffdz„«       «       Z• e3e/�j,                  jx                  e/�j.                  jz                  g«       e'«       d-edHefd{„«       «       Z˜ e3e/�j2                  g«       e'dvdw«      d-efd|„«       «       Zšd}edHefd~„Z› e3e/�j8                  «       e'«       dBedeedefdHefd€„«       «       Zœ e3e/�j:                  «       e'«       �dßdBedeedefdHefd�„«       «       Z� e3e/�j<                  «       e'«       �dßdBedefdHefd‚„«       «       Zž e3e/�j>                  «       e'«       �dßdBedefdHefdƒ„«       «       ZŸ e3e/�j@                  jx                  «      �dèdeedefd„effd…„«       Z  e3e/�jB                  jx                  e/�jB                  jz                  g«       e'«       d-ed†edHefd‡„«       «       Z¡ e3e/�jD                  jx                  «      �dßdeed„effdˆ„«       Z£ e3e/�jH                  jx                  e/�jH                  jz                  g«       e'd‰dŠd‹«      dddŒœdBed�efd„efdHeeeef   fdŽ„«       «       Z¥ e3e/�jL                  jx                  e/�jL                  jz                  g«       e'«       dd�œd‰edŠedmed�efdHef
d�„«       «       Z§ e3e/�jP                  jx                  e/�jP                  jz                  g«       e'd‘dxd’«      d@d“œdeed”efdHeeeef   fd•„«       «       Z© e3e/�jT                  jx                  e/�jT                  jz                  g«       e'd–dŠd‹«      d@dd—œdeed”efd„efdHeeeef   fd˜„«       «       Z« e3e/�jX                  jx                  e/�jX                  jz                  g«       e'«       d@dd™œd–edŠedmednefdšefdHefd›„«       «       Z­ e3e/�j\                  «       e'd‘dxd’«      	 	 �déd–edŠedœefd�efdHeeeef   f
dž„«       «       Z¯dŸe^dHeefeff   fd „Z° e3e/�jb                  jx                  e/�jb                  jz                  g«       e'd¡d¢«      �dêdeedŸe^dHeeef   fd£„«       «       Z² e3e/�jf                  jx                  e/�jf                  �jh                  g«       e'd¤d¥d–dŠ«      deedHeeeeef   fd¦„«       «       Z³ e3e/�jj                  jx                  «      	 	 	 �dëdeed§efd¨efd©ee^   fdª„«       Z¶d«ed¬edHeeei   eei   f   fd­„Z·d«ed¬edfee^   dHeeef   fd®„Z¸d-ed¯edHeffd°„Z¹ e3e/�jt                  «      d@dddddd±œdeedmednefd„efdpee   d–ee   dŠee   d‹ee   dHeeeeef   fd²„«       Zº e3e/�jv                  jx                  e/�jv                  jz                  g«      d@ddd³œdeedmedefdnefd´efdµee   dHefd¶„«       Z¼ e3e/�jz                  «       e'd·d¸«      	 	 	 �dìdBedeedefd¹efd´efdHeeef   fdº„«       «       Z¾ e3e/�j~                  jx                  «      d»„ «       ZÀ e3e/�j‚                  «       e'«       	 	 �díd-ed†ed¯ednefd¹efdHefd¼„«       «       ZÁd½„ ZÂd¾„ ZÃ e3e/�jˆ                  «       e'«       d¿„ «       «       ZÅ e3e/�jŒ                  «       e'«       dÀ„ «       «       ZÇdÁ„ ZÈ e3e/�j’                  «       e'dÂ«      dÃ„ «       «       ZÊ e3e/�j–                  «       e'dÂ«      dÄ„ «       «       ZÌdÅ„ ZÍ e3e/�jœ                  «       e'«       dÆ„ «       «       ZÏ e3e/�j                   «       e'«       dÇ„ «       «       ZÑ e3e/�j¤                  jx                  e/�j¤                  �j¦                  e/�j¨                  jx                  e/�j¨                  �j¦                  g«       e'dÂ«      dÈ„ «       «       ZÕdÉ„ ZÖ e3e/�j®                  «       e'«       dÊ„ «       «       ZØ e3e/�j²                  «       e'«       dË„ «       «       ZÚ e3e/�j¶                  jx                  e/�j¶                  �j¦                  e/�j¸                  jx                  e/�j¸                  �j¦                  g«       e'dÂ«      dÌ„ «       «       ZÝ e3e/�j¼                  «       e'«       �dîdBedÍeßdHefdÎ„«       «       Zà e3e/�jÂ                  «       e'«       dÏedBedÍeßdÐedHef
dÑ„«       «       Zâ e3e/�jÆ                  jx                  e/�jÆ                  jz                  g«       e'«       d8d8dÒœdÓ„«       «       Zä e3e/�jÊ                  jx                  e/�jÊ                  jz                  g«       e'«       dd"œdÔ„«       «       Zæ e3e/�jÎ                  �j¾                  «      �dïdÕ„«       Zè e3e/�jÊ                  �jÒ                  «      �dïdÖ„«       Zê e3e/�jÖ                  jx                  e/�jÖ                  jz                  g«       e'«       �dád×„«       «       Zì e3e/�jÚ                  jx                  «      	 	 �dèdØ„«       Zî e3e/�jÞ                  «       e'«       dÙ„ «       «       ZðdÚ„ Zñ�dðdÛ„Zò	 �dádÜe	j                  d.e	j                  dÝeeei   eif   dÞeeei   eif   dßeeei   eif   dàefdáeidâeeeei   eif      fdã„Zódä„ Zô e3e/�jê                  jx                  «      dÜe	j                  d.e	j                  d0e	j                  dÝeei   dÞeei   dßeei   dàefdâeei   dáeifdå„«       Zöe	�jî                  �jð                  �re	j`                  jc                  dædd«      Zù e3e	j\                  �jô                  �jö                  jx                  «      dç„ «       Zü e3e	j\                  �jô                  �jú                  jx                  «      dè„ «       Zþe	�jî                  �jþ                  rMe	j`                  jc                  dédd«      �Z  e3e	j\                  �j                  �j                  «      dê„ «       �Ze	j`                  jc                  dëdd«      �Z e3e	j\                  �j
                  �j                  jx                  «      dì„ «       �Z e3e	j\                  �j
                  �j                  jx                  «       e3e	j\                  �j
                  �j                  �j                  «      dí„ «       «       �Z
e	j`                  jc                  dîdd«      �Z e3e	j\                  �j                  �j                  «      	 	 	 	 �dñdð„«       �Zdñ„ �Z e3e/�j                   jx                  «      	 	 	 	 	 �dòdò„«       �Zdó„ �Z e3e/�j&                  jx                  «      dô„ «       �Z e3e/�j*                  «       e'«       	 	 	 	 	 �dòdõ„«       «       �Z e3e/�j.                  «       e'dÂ«      dö„ «       «       �Z e3e/�j2                  jx                  «      d÷„ «       �Z e3e/�j6                  jx                  «      dø„ «       �Z e3e/�j:                  jx                  «      dù„ «       �Z e3e/�j>                  «       e'dÂ«      dú„ «       «       �Z dûedke^fdü„�Z! e3e/�jD                  «       e'dµd«      dý„ «       «       �Z# e3e/�jH                  «       e'dÂ«      dþ„ «       «       �Z% e3e/�jL                  «       e'dµd«      dÿ„ «       «       �Z' e3e/�jP                  «       e'dÂ«      �d „ «       «       �Z) e3e/�jT                  j                  «      �dá�d„«       �Z+ e3e/�jX                  jx                  e/�jX                  jz                  g«       e'«       �d„ «       «       �Z- e3e/�j\                  jx                  e/�j\                  jz                  g«       e'«       d�dœ�dei�deif�d„«       «       �Z. e3e/�j^                  j                  e/�j`                  j                  g«      �d„ «       �Z1 e3e/�jd                  jx                  g«      �d„ «       �Z3 e3e/�jh                  jx                  e/�jh                  jz                  g«       e'«       d8d8dÒœ�d	„«       «       �Z5 e3e/�jl                  jx                  e/�jn                  jx                  g«      dd�d
œ�d„«       �Z8 e3e/�jr                  jx                  g«      dd�d
œ�d„«       �Z: e3e/�jv                  g«       e'«       �d„ «       «       �Z< e3e/�jz                  g«      �d„ «       �Z> e3e/�j~                  g«      �d„ «       �Z@ e3e/�j‚                  g«      �d„ «       �ZB e3e/�j†                  jx                  «      �d„ «       �ZD e3e/�jŠ                  «       e'«       �d„ «       «       �ZF e3e/�jŽ                  jx                  «      	 	 	 	 	 	 �dó�d„«       �ZH e3e/�j’                  jx                  «      �d„ «       �ZJ�dä�d„�ZK e3e/�j˜                  jx                  e/�j˜                  jz                  g«       e'«       �dôd�dœ�d„«       «       �ZM e3e/�jœ                  jx                  e/�jž                  jx                  g«      �d„ «       �ZP e3e/�jœ                  jè                  e/�jœ                  �j¢                  e/�jž                  jè                  e/�jž                  �j¢                  e/�j¤                  jx                  e/�j¤                  �j¦                  g«       e'dd«      �dõ�d„«       «       �ZT e3e/�jª                  jx                  «      �d„ «       �ZV e3e/�j®                  jx                  «      �d„ «       �ZX e3e/�j²                  jx                  «      �d„ «       �ZZ e3e/�j¶                  �j¸                  e/�jº                  �j¸                  e/�j¶                  j                  e/�jº                  j                  e/�j¼                  jx                  e/�j¾                  jx                  e/�jÀ                  jx                  g«      �d„ «       �Za e3e/�jÄ                  �j¸                  e/�jÆ                  �j¸                  e/�jÄ                  j                  e/�jÆ                  j                  g«      dï�d„«       �Zd e3e/�jÊ                  jx                  e/�jÊ                  �jÌ                  g«      �d„ «       �Zg�d „ �Zh e3e/�jÒ                  j                  e/�jÒ                  �j¸                  g«      �d!„ «       �Zj e3e/�jÖ                  j                  e/�jÖ                  �j¸                  g«      �d"„ «       �Zl e3e/�jÚ                  jx                  «      �d#„ «       �Zn e3e/�jÞ                  j                  e/�jÞ                  �j¸                  g«      �d$„ «       �Zp e3e/�jâ                  j                  e/�jâ                  �j¸                  g«      �d%„ «       �Zr e3e/�jæ                  jx                  «      �d&„ «       �Zt e3e/�jê                  jx                  e/�jì                  jx                  g«      �dß�d'„«       �Zw e3e/�jð                  �j¸                  «      �d(„ «       �Zy e3e/�jô                  jx                  «      �d)„ «       �Z{ e3e/�jø                  «      �d*„ «       �Z} e3e/�jü                  «       e'«       �d+„ «       «       �Z e3e/�j                   «      �d,„ «       �Z� e3e/�j                  jx                  «      �dß�d-„«       �Zƒ e3e/�j                  jx                  «      �d.„ «       �Z…�dá�d/„�Z† e3e/�j                  jx                  «      �d0„ «       �Zˆ�d1„ �Z‰�d2„ �ZŠ�d3„ �Z‹�d4„ �ZŒ	 �dßd-e�d5ei�d6ei�d7ei�d8ei�d9ei�d:ei�d;ei�d<ei�d=ei�d>ei�d?ei�d@ei�dAei�dBei�dCei�dDei�dEei�dFei�dGeidqe^�dHeff,�dI„�Z��dJ„ �ZŽd-edûe�d5ei�d6ei�d7ei�d8ei�d9ei�d:ei�d;ei�d<ei�d=ei�d>ei�dBei�dCei�dDei�dEei�dFei�dGeidqe^f&�dK„�Z��dL„ �Z� e3e/�j"                  jx                  «      �dM„ «       �Z’ e3e/�j&                  jx                  «      	 	 	 	 �dñ�dN„«       �Z” e3e/�j*                  jx                  «      �dO„ «       �Z– e3e/�j.                  «       e'«       �dP„ «       «       �Z˜�dQ„ �Z™ e3e/�j4                  «       e'«       �dR„ «       «       �Z› e3e/�j8                  «       e'dµd«      	 	 	 	 �dñ�dS„«       «       �Z� e3e/�j<                  «       e'dÂ«      �dT„ «       «       �ZŸd-e�dUef�dV„�Z  G �dW„ �dXe«      �Z¡d-e�dUe�dYeif�dZ„�Z¢ e3e/�jF                  jx                  «      �d[„ «       �Z¤ e3e/�jJ                  «       e'«       �d\„ «       «       �Z¥ e3e/�jL                  «       e'dÂ�d]«      �d^„ «       «       �Z¦ e3e/�jN                  jx                  g«      �d_„ «       �Z§ e3e/�jP                  jx                  «      	 	 	 	 	 �dö�d`„«       �Z¨ e3e/�jR                  jÒ                  «      �da„ «       �Zª e3e/�jV                  jx                  «      �db„ «       �Z¬ e3e/�jZ                  jx                  «      �d÷�dc„«       �Z®�dädCei�ddei�deeff�df„�Z¯�dg„ �Z°�dh„ �Z± e3e/�jd                  jx                  «      �dß�di„«       �Z³�dß�dj„�Z´�dá�dk„�Zµ�dl„ �Z¶�dá�dm„�Z·�dø�dn„�Z¸ e3e/�jr                  jx                  «      �do„ «       �Zº e3e/�jv                  «      �dp„ «       �Z¼ e3e/�jz                  �j|                  e/�jz                  �j~                  e/�jz                  �j€                  e/�jz                  �j‚                  g«       e'«       �dá�dq„«       «       �ZÂ e3e/�j†                  �j|                  e/�j†                  �j~                  e/�j†                  �j€                  e/�j†                  �j‚                  g«      �dá�dr„«       �ZÄ e3e/�jŠ                  g«      	 	 	 	 �dù�dse�dte�due�dveß�dwef�dxef�dyeeß   f�dz„«       �ZÆ e3e/�jŽ                  g«      	 	 	 	 �dù�dse�dte�due�d{ee   �d|ef�dveß�dwef�dxef�dyeeß   f�d}„«       �ZÈ e3e/�j’                  g«      	 �dá�d~e�dse�dte�duedµe�de�d€e�d�e�d‚ei�dƒei�dveß�dwef�d„e�d…e�dyeeß   f�d†„«       �ZÊ e3e/�j–                  g«      	 	 	 	 �dú�dse�dte�due�dveß�dwef�d‡ee   �dyeeß   f�dˆ„«       �ZÌ e3e/�jš                  g«      	 	 �dã�d~e�dse�dte�duedµe�de�dveß�dwef�d‡ee   �dyeeß   f�d‰„«       �ZÎ e3e/�jž                  g«      	 	 	 �dû�dse�dte�due�d{ee   �d|ef�dwef�dyeeß   f�dŠ„«       �ZÐ e3e/�j¢                  g«      	 	 �dü�d~e�dse�dte�due�d{ee   dµe�de�d„e�d…e�dveß�d‹eef   �dwef�dyeeß   f�dŒ„«       �ZÒ e3e/�j¦                  g«      	 �dá�d~e�dse�dte�duedµe�de�d„e�d…e�d{e�d€e�d�e�d‚ei�dƒei�dveß�dwef�dyeeß   f �d�„«       �ZÔ e3e/�jª                  g«      	 	 	 	 	 �dö�dse�dte�due�d€ee   �d�ee   �d‚ei�dƒei�dveß�dwef�dxef�dyeeß   �dŽeei   �d�eei   �d�ee   �d‘ee   f�d’„«       �ZÖ e3e/�j®                  g«      	 	 	 �dà�d~e�dse�dte�duedµe�de�d€e�d�e�d‚ei�dƒei�dveß�dwef�d„e�d…e�dyeeß   �dŽeei   �d�eei   f"�d“„«       �ZØ e3e/�j²                  g«      	 	 	 	 	 �dý�dse�dte�dued0ee   �d”ee   �d•ee   �d–eei   �d—eei   �dveß�d˜ei�d|ef�dyeeß   �d™ee   �dšee   �d›eei   f�dœ„«       �ZÚ e3e/�j¶                  g«      	 	 	 �dø�d~e�dse�dte�dued0ee   �d”ee   �d•ee   �d–e	�j¸                  �d—e	�j¸                  �de�dveß�d„e�d…e�d˜ei�d�ef�dyeeß   �džeei   �dŸeff$�d „«       �ZÝ e3e/�j¼                  jx                  g«      	 	 	 	 �dâdBe	j                  d6e	j                  �d¡e	j                  �d¢e	j                  d0ee	j                     �d£ee	j                     d2ee	j¾                     �d¤eff�d¥„«       �Zß e3e/�jÀ                  �jÂ                  e/�jÀ                  �jÄ                  g«       e'«       �dä�d¦„«       «       �Zã e3e/�jÈ                  �jÂ                  «      �dä�d§„«       �Zå e3e/�jÌ                  jx                  e/�jÌ                  jz                  g«       e'«       �dßdd"œ�d¨„«       «       �Zç�d©„ �Zè�dª„ �Zé e3e/�jÔ                  jx                  e/�jÖ                  jx                  g«      �dá�d«„«       �Zê e3e/�jØ                  jx                  e/�jÚ                  jx                  g«      �dã�d¬„«       �Zì e3e/�jÜ                  jx                  e/�jÞ                  jx                  g«      	 	 �dãdûe�d­eeeie	�j¸                  f      �d®eeeie	�j¸                  f      �d¯eeß   �d°eeß   f
�d±„«       �Zî e3e/�jà                  jx                  e/�jâ                  jx                  g«      �dà�d²„«       �Zð e3e/�jä                  jx                  e/�jä                  �jæ                  e/�jä                  �j¦                  e/�jä                  �jè                  g«      �dþ�d³„«       �Zõ�d´„ �Zö e3e/�jî                  jx                  «      	 	 �dã�dµ„«       �Zø e3e/�jò                  jx                  «      �d¶„ «       �Zù e3e/�jô                  jx                  «      �d·„ «       �Zú�d¸„ �Zû�d¹„ �Zü e3e/�jú                  jx                  e/�jü                  jx                  g«      �dô�dº„«       �Zÿ e3e/�j                   jx                  «      �dÿ�d»„«       �Z  e3e/�j                  jx                  «      �d �d¼„«       �Z e3e/�j                  jx                  e/�j                  �j¦                  g«       e'dd«      �dõ�d½„«       «       �Ze	�j
                  �Z�d¾„ �Z e3e/�j                  jx                  «      �d¿„ «       �Z e3e/�j                  jx                  «      �dÀ„ «       �Z	 e3e/�j                  jx                  «      �dÁ„ «       �Z e3e/�j                  jx                  «      �dÂ„ «       �Z e3e/�j                  j                  e/�j                  �j                  g«       e'«       dd�dÃœ�dÄ„«       «       �Z e3e/�j                   g«       e'«       �d�dÅ„«       «       �Z e3e/�j$                  jx                  e/�j&                  jx                  g«      	 	 �dã�dÆ„«       �Z e3e/�j*                  jx                  «      �dÇ„ «       �Z e3e/�j,                  jx                  e/�j,                  jz                  g«       e'«       �dà�dÈ„«       «       �Z e3e	j\                  j^                  �j.                  «      �dÉ„ «       �Z e3e	j\                  j^                  �j0                  «      �dÊ„ «       �Z e3e/�j2                  «       e'«       dddd�dËœ�dÌ„«       «       �Z�dÍ„ �Z e3e/�j8                  «      	 �d�dÎ„«       �Z e3e/�j<                  «      	 �d�dÏ„«       �Z e3e/�j@                  «      	 �d�dÐ„«       �Z! e3e/�jD                  «       e'«       dd�dÑœ�dÒ„«       «       �Z# e3e/�jH                  «       e'«       �dÓeidBedHef�dÔ„«       «       �Z% e3e/�jL                  «      dBef�dÕ„«       �Z' e3e/�jP                  jx                  «      	 �ddedOee   �dÖeei   �d×eßf�dØ„«       �Z) e3e/�jT                  jx                  «      	 �dá�dÙedOee   �dÚeei   f�dÛ„«       �Z+�dÜ„ �Z,�dÝ„ �Z- �e,e/�j\                  «        �e,e/�j^                  «        �e,e/�j`                  «        �e,e/�jb                  «        �e,e/�jd                  «        �e,e/�jf                  «        �e,e/�jh                  «        �e,e/�jj                  «        �e,e/�jl                  «        �e-e/�jn                  «        �e-e/�jp                  «        �e-e/�jr                  «        �e-e/�jt                  «        �e-e/�jv                  «        �e-e/�jx                  «        �e-e/�jz                  «        �e-e/�j|                  «        �e-e/�j~                  «        �e-e/�j€                  «        �e-e/�j‚                  «        �e-e/�j„                  «       d dl(Z	d d�lCZ	d d�lDZ	�dÞ„ �ZE �eE«        y(  é    N)ÚEnum)ÚListÚOptionalÚSequenceÚTupleÚUnion)ÚSymBoolÚSymFloatÚTensor)Ú_add_op_to_registryÚ_convert_out_paramsÚglobal_decomposition_tableÚ
meta_table)Ú
OpOverload)Ú_prim_elementwise_metaÚ$ELEMENTWISE_PRIM_TYPE_PROMOTION_KIND)Úcorresponding_complex_dtypeÚcorresponding_real_dtypeÚelementwise_dtypesÚELEMENTWISE_TYPE_PROMOTION_KINDÚ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)Ú_pytreeÚatenÚIMPLÚMetac                 ó   ‡ — ˆ fd„}|S )Nc                 óV   •‡ — t        ‰ «      Š ˆ fd„}t        j                  |‰«       ‰ S )Nc                 ó(   •— t        t        | ‰«       y ©N)r   r   )ÚopÚfns    €ú\/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/torch/_meta_registrations.pyÚregisterz0register_meta.<locals>.wrapper.<locals>.register0   s   ø€ Ü¤
¨B°Õ3ó    )r   ÚpytreeÚ	tree_map_)r+   r-   r*   s   ` €r,   Úwrapperzregister_meta.<locals>.wrapper-   s)   ù€ Ü  Ó$ˆô	4ô 	×Ñ˜ 2Ô&Øˆ	r.   © )r*   r1   s   ` r,   Úregister_metar3   ,   s   ø€ ôð €Nr.   Útype_promotionc                 ó°   — t        j                  |d| iŽ\  }}|D �cg c]  }t        ||«      ‘Œ }}t        |Ž }t	        |dt
        j                  iŽS c c}w )NÚtype_promotion_kindr4   )Úutilsr   r   r!   r   r   ÚDEFAULT)r4   ÚargsÚ_Úresult_dtypeÚxs        r,   Úelementwise_metar=   9   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 r)   )ÚtorchÚ	complex32ÚhalfÚcfloatÚfloatÚcdoubleÚdoubleÚget)ÚdtypeÚfrom_complexs     r,   ÚtoRealValueTyperI   M   sE   € ä�‰œŸ™Ü�‰”e—k‘kÜ�‰”u—|‘|ð€Lð
 ×Ñ˜E 5Ó)Ð)r.   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 r2   )Úbroadcasted_shapeÚ
self_shapes   €€r,   ú<lambda>z)check_inplace_broadcast.<locals>.<lambda>Z   s   ø€ Ð$ Z LÐ0SÐTeÐSfÐg€ r.   )Útupler    r?   Ú_check)rM   Ú
args_shaperL   s   ` @r,   Úcheck_inplace_broadcastrR   V   s0   ù€ ÜÔ/°
ÐH¸ZÒHÓIÐÜ	‡L�LØ˜ZÑ'Ügõr.   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 tensorsr2   r2   r.   r,   rN   z(meta_linspace_logspace.<locals>.<lambda>n   ó   � r.   c                   ó   — yrU   r2   r2   r.   r,   rN   z(meta_linspace_logspace.<locals>.<lambda>s   rV   r.   c              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wr)   )Ú
isinstanceÚcomplex)Ú.0Úargs     r,   ú	<genexpr>z)meta_linspace_logspace.<locals>.<genexpr>v   s   è ø€ Ò
C¨Œ:�cœ7×#Ñ
Cùs   ‚c                  ó   •— d‰ › d‰› �S )Nzlinspace(): inferred dtype z& can't be safely cast to passed dtype r2   )Údefault_complex_dtyperG   s   €€r,   rN   z(meta_linspace_logspace.<locals>.<lambda>   s   ø€ Ð5Ð6KÐ5LÐLrÐsxÐryÐz€ r.   c                  óŽ   •— dt        ‰«      j                  › dt        ‰ «      j                  › dt        ‰«      j                  › d�S )Nz4received an invalid combination of arguments - got (ú, ú))ÚtypeÚ__name__)ÚendÚstartÚstepss   €€€r,   rN   z(meta_linspace_logspace.<locals>.<lambda>ˆ   sD   ø€ ð Ü€uƒ+×ÑÐ�rœ$˜s›)×,Ñ,Ð-¨R´°U³×0DÑ0DÐ/EÀQðH€ r.   c                   ó   — y)Nz$number of steps must be non-negativer2   r2   r.   r,   rN   z(meta_linspace_logspace.<locals>.<lambda>Œ   rV   r.   Úmeta)rG   ÚlayoutÚdeviceÚ
pin_memoryÚrequires_grad)rY   r?   r   rP   ÚdimÚanyr7   r   Úget_default_dtypeÚis_complex_dtyperG   Ú_check_typer   Úempty)
rf   re   rg   ÚbaserG   rk   rj   rl   rm   r_   s
   ``` `    @r,   Úmeta_linspace_logspaceru   ^   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ä�;‰;Ø	ˆØØØØØ#ôð r.   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 ©rG   ©Úindexs   €r,   rN   zmeta_take.<locals>.<lambda>ž   s   ø€ ÐDÀUÇ[Á[ÀMÐR€ r.   r   c                   ó   — y)Nz*take(): tried to take from an empty tensorr2   r2   r.   r,   rN   zmeta_take.<locals>.<lambda>£   rV   r.   )r?   rP   rG   ÚlongÚ_check_indexÚnumelÚ	new_emptyÚshape)Úselfrz   s    `r,   Ú	meta_taker‚   ˜   sm   ø€ ô 
‡L�LØ�‰”u—z‘zÑ!ÛRôô
 
×ÑØ�Z‰Z‹\˜QÑÒ5 5§;¡;£=°AÑ#5Ð6Ù<ôð �>‰>˜%Ÿ+™+Ó&Ð&r.   éÿÿÿÿ©rn   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.r2   r2   r.   r,   rN   zlinalg_cross.<locals>.<lambda>¯   rV   r.   é   c                  óV   •— d‰ › d‰j                  ‰ «      › d‰j                  ‰ «      › �S )Nzlinalg.cross: inputs dimension z must have length 3. Got ú and ©Úsize)rn   Úotherr�   s   €€€r,   rN   zlinalg_cross.<locals>.<lambda>³   s6   ø€ Ø-¨c¨Uð 3Ø—9‘9˜S“>Ð" %¨¯
©
°3«Ð'8ð:ð r.   )Úndimr?   rP   r‹   r    r€   r   )r�   rŒ   rn   Úx_dÚy_dÚ	out_shapes   ```   r,   Úlinalg_crossr‘   ¨   s‡   ú€ ð �)‰)€CØ
�*‰*€CÜ	‡L�LØˆs‰
ÙOôô 
‡L�LØ�	‰	�#‹˜!ÑÒ4 §
¡
¨3£°1Ñ 4õ	
ôô " $§*¡*¨e¯k©kÓ:€IØ�>‰>˜)Ó$Ð$r.   c                 ó|   — t        | d«       t        | d«       t        j                  | t        j                  ¬«      S )Nzlinalg.matrix_exp©Úmemory_format)ÚsquareCheckInputsÚcheckFloatingOrComplexr?   Ú
empty_likeÚcontiguous_format©r�   s    r,   Úlinalg_matrix_exprš   ¼   s3   € ô �dÐ/Ô0Ü˜4Ð!4Ô5Ü×Ñ˜D´×0GÑ0GÔHÐHr.   Ú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©rk   rG   r   )	r?   rs   r€   rk   rG   Úint64r~   r�   Úmaybe_wrap_dim)r�   rn   r›   rœ   s       r,   Ú	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ˆ?Ðr.   c                 ót   — t        || j                  «       t        j                  | «      j	                  «       S r)   )r    r�   r?   r—   Ú
contiguous)r�   rn   s     r,   Úlogcumsumexpr¤   Ñ   s,   € ô �3˜Ÿ	™	Ô"Ü×Ñ˜DÓ!×,Ñ,Ó.Ð.r.   c                 ó  ‡— |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        |«      «      D ]  }|||      ||dz   <   Œ | 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 r)   r2   ©r<   Úself_stridess    €r,   rN   z_exec_fft.<locals>.<lambda>ò   s   ø€ ˜<¨™?€ r.   ©ÚkeyÚreverserƒ   r   é   )r�   ÚlenÚlistÚrangeÚappendÚstrideÚsortÚpermuter€   Úreshaper‹   Ú
as_stridedÚstorage_offset)Úoutr�   Ú	out_sizesrn   Úforwardr�   Úsignal_ndimÚ
batch_dimsÚdim_permuter:   Úis_transformed_dimÚdÚleftÚrightÚ	batch_endÚtmpÚinputÚbatched_sizesÚ
batch_sizeÚbatched_out_sizesÚiÚout_stridesÚbatch_numelr¨   s                          @r,   Ú	_exec_fftrÊ   Ú   sK  ø€ Ø�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à
�+‰+Ð'Ó
(€Cô $ 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à�>‰>˜) [°#×2DÑ2DÓ2FÓGÐGùòS 6ùò@ +s   ¿	G=Å'	Hc                 óî   ‡— | j                   j                  sJ ‚| j                  }| j                  |«      }|s|S |d d  }| j	                  «       Š|j                  ˆfd„d¬«       t        || |||«      }|S )Nc                 ó   •— ‰|    S r)   r2   r§   s    €r,   rN   zmeta_fft_c2c.<locals>.<lambda>  s   ø€  <°¡?€ r.   Tr©   )rG   Ú
is_complexr€   r   r±   r²   rÊ   )r�   rn   Únormalizationr¹   r¸   ÚoutputÚsorted_dimsr¨   s          @r,   Úmeta_fft_c2crÑ     sv   ø€ ð �:‰:× Ò Ð Ð à—
‘
€IØ�^‰^˜IÓ&€FáØˆà‘a�&€KØ—;‘;“=€LØ×ÑÓ2¸DÐÔAÜ�v˜t Y°¸WÓE€Fà€Mr.   c                 óò   — | j                   j                  sJ ‚t        | j                  «       «      }|r|d   }||   dz  dz   }|||<   | j	                  |t        j                  | j                   «      ¬«      S )Nrƒ   é   r¬   rx   )rG   Úis_floating_pointr®   r‹   r   r7   r   )r�   rn   rÎ   ÚonesidedÚoutput_sizesÚlast_dimÚlast_dim_halfsizes          r,   Úmeta_fft_r2crÙ   #  s|   € ð �:‰:×'Ò'Ð'Ð'Ü˜Ÿ	™	›Ó$€LáØ�r‘7ˆØ)¨(Ñ3°qÑ8¸AÑ=ÐØ!2ˆ�XÑà�>‰>ØœE×=Ñ=¸d¿j¹jÓIð ó ð r.   )Ú	generatorc                óB   — t        |t        j                  | g«      «      S r)   )r   r?   ÚSize)ÚnrÚ   r·   s      r,   Úmeta_randpermrÞ   3  s   € ä˜S¤%§*¡*¨a¨S£/Ó2Ð2r.   ©rG   rj   rk   rl   c                ó6   — t        j                  | ||||¬«      S ©Nrß   ©r?   rs   )rÝ   rG   rj   rk   rl   s        r,   Úmeta_randperm_defaultrã   8  s    € ô �;‰;Ø	�˜v¨fÀôð r.   c                ó6   — t        j                  |||||¬«      S rá   râ   )Úhighr‹   rG   rj   rk   rl   s         r,   Úmeta_randintræ   F  s    € ô �;‰;Ø�E &°ÀJôð r.   c                ó6   — t        j                  |||||¬«      S rá   râ   )Úlowrå   r‹   rG   rj   rk   rl   s          r,   Úmeta_randint_lowré   V  s    € ô �;‰;Ø�E &°ÀJôð r.   c                ó6   — t        j                  | ||||¬«      S rá   râ   )r‹   rG   rj   rk   rl   s        r,   Úmeta_rand_defaultrë   g  s    € ô �;‰;Ø�E &°ÀJôð r.   c                 óÀ   — | j                   j                  sJ ‚t        | j                  «       «      }|||d   <   | j	                  |t        | j                   «      ¬«      S )Nrƒ   rx   )rG   rÍ   r®   r‹   r   rI   )r�   rn   rÎ   ÚlastdimrÖ   s        r,   Úmeta_fft_c2rrî   o  sQ   € ð �:‰:× Ò Ð Ð Ü˜Ÿ	™	›Ó$€LØ#€L��R‘ÑØ�>‰>˜,¬o¸d¿j¹jÓ.Iˆ>ÓJÐJr.   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ð   r?   Ú_debug_has_internal_overlapÚRuntimeErrorrY   r   Útor‹   r#   Úexpand_copyÚdefault)r�   ÚsrcÚnon_blockingrð   Úintermediates        r,   Ú
meta_copy_rú   x  s‰   € õ Lñ " $Ô'¬E×,MÑ,MÈdÓ,SÐWXÒ,XäØ_ó
ð 	
ô �#”vÔØ—v‘v˜d LÓ1ˆØ�9‰9‹;˜,×+Ñ+Ó-Ò-Ü×Ñ×$Ñ$ \°4·9±9³;Ô?Ø€Kr.   c                 óö   — t        | j                  «       «      }t        | j                  «       «      }|| j                  «       k\  rdn
||   ||   z  }|j	                  |d«       |j	                  ||«       ||fS ©Nr¬   )r®   r‹   r±   rn   Úinsert)Útensorrn   Úresult_sizesÚresult_stridesÚ
new_strides        r,   ÚinferUnsqueezeGeometryr  ‘  sq   € Ü˜Ÿ™›Ó&€LÜ˜&Ÿ-™-›/Ó*€NØ˜VŸZ™Z›\Ò)‘¨|¸CÑ/@À>ÐRUÑCVÑ/V€JØ×Ñ˜˜QÔØ×Ñ˜#˜zÔ*Ø˜Ð'Ð'r.   c                 ó‚   — t        || j                  «       dz   «      }t        | |«      \  }}| j                  ||«       | S rü   )r    rn   r  Úas_strided_)r�   rn   Úg_sizesÚ	g_stridess       r,   Úmeta_unsqueeze_r  š  s>   € ä
˜˜dŸh™h›j¨1™nÓ
-€CÜ/°°cÓ:Ñ€GˆYØ×Ñ�W˜iÔ(Ø€Kr.   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 operatorrx   )
r®   r€   r‹   r­   rG   r?   Úint8Úint32r   rµ   )	rÃ   r  r	  r
  r  r  rÖ   Útransposed_stridesrÏ   s	            r,   Úmeta_sparse_structured_linearr  ¢  s  € ô ˜Ÿ™Ó$€LØÐØ�{‰{˜1‹~ §¡¨1£Ò-ÐEÐ/EÓEÐ-Ø�;‰;�q‹>˜UŸZ™Z¨›^¨aÑ/Ò/Ð/Ð/Ø—{‘{ 1“~€L�Ñô ˆu�{‰{Ó˜qÒ ÐNÐ"NÓNÐ Ø˜UŸZ™Z¨›]Ð+ÐàÐà�K‰Kœ5Ÿ:™:Ò%¨)´u·{±{Ò*Bð	GàFó	GØBà�_‰_ØØ&Ð.ˆe�kŠk°Ið ó ÷ �j�Ð1Ó2ð ð
 €Mr.   Ú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   r  rx   ©r­   r€   r‹   rG   r?   r  r  r   )r  r  r  r  rÖ   rÏ   s         r,   Ú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àÐà�J‰Jœ%Ÿ*™*Ò$¨´e·k±kÒ)Að	GàFó	GØAà�^‰^ØØ%Ð-ˆd�jŠj°9ð ó €Fð
 €Mr.   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   r  rx   r  )	rÃ   r  r  r  r  r  r  rÖ   rÏ   s	            r,   Úmeta_sparse_structured_addmmr  Ý  s9  € ô 	ˆE�K‰KÓ˜AÒðOàNóOØäˆt�z‰z‹?˜aÒÐÐÜˆy�‰Ó 1Ò$Ð$Ð$Üˆt�z‰z‹?˜aÒÐÐØ�:‰:�a‹=˜DŸI™IØ	óò ð OàNóOð ð �9‰9�Q‹<˜4Ÿ9™9 Q›<¨!Ñ+Ò+Ð+Ð+Ø—I‘I˜a“L $§)¡)¨A£,Ð/€LàÐà�J‰Jœ%Ÿ*™*Ò$¨´e·k±kÒ)Að	GàFó	GØAà�^‰^ØØ%Ð-ˆd�jŠj°9ð ó €Fð
 €Mr.   Úcompressed_AÚdense_Br  Útranspose_resultc                 óÄ  — |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
                  k(  }|rdnd}|j                  d«      }|j                  d«      }	| j                  «       d	z  ||z  z  }
|�|
|j                  d«      k(  sJ ‚|�:|r1|t        j                  t        j                  t        j                  hv sJ d
«       ‚|r|	|
fn|
|	f}|j                  ||¬«      }|S )Nz2_cslt_sparse_mm only supports fp16, bf16, and int8zinputs must have the same dtyperÓ   z'_cslt_sparse_mm only supports 2d inputsé
   é	   r   r¬   é   z?out_dtype is only supported for i8i8->fp16, bf16, or i32 matmulrx   )rG   r?   Úfloat32Úfloat16Úbfloat16r  r­   r€   r‹   r~   r  r   )r  r  r
  r  r  r  Úis_int8_input_typeÚcompression_factorÚkrÝ   ÚmÚoutput_shapeÚresults                r,   Úmeta__cslt_sparse_mmr-     sc  € ð �=‰=Ü�‰Ü�‰Ü�‰Ü�
‰
ð	ñ ð <ð
 <ó<ð ð ×Ñ §¡Ò.ÐQÐ0QÓQÐ.Üˆw�}‰}Ó Ò"ÐMÐ$MÓMÐ"à%×+Ñ+¬u¯z©zÑ9ÐÙ1™°qÐØ�‰�Q‹€AØ�‰�Q‹€AØ	×	Ñ	Ó	 Ñ	"Ð(:¸QÑ(>Ñ?€AØÐØ�D—I‘I˜a“LÒ Ð Ð àÐÙ! iÜ�M‰MÜ�N‰NÜ�K‰Kð4
ñ '
ð 	Mð Mó		Mð 
ñ
 .�A�q‘6°A°q°6€LØ×Ñ˜|°9ÐÓ=€FØ€Mr.   T)Úinclude_selfr�   rn   rz   ÚsourceÚreducer.  Úreturnc                óL   — t        j                  | t         j                  ¬«      S ©Nr“   )r?   r—   r˜   ©r�   rn   rz   r/  r0  r.  s         r,   Úmeta_index_reducer5  %  s   € ô ×Ñ˜D´×0GÑ0GÔHÐHr.   c                ó   — | S r)   r2   r4  s         r,   Úmeta_index_reduce_r7  2  s	   € ð €Kr.   c                 ó¢   — t        | j                  «       «      }| j                  «       dkD  r|j                  «       ||<   | j	                  |«      S )Nr   )r®   r‹   rn   r~   r   )r�   rn   rz   Úresult_sizes       r,   Úmeta_index_selectr:  @  s@   € ô �t—y‘y“{Ó#€KØ‡x�xƒz�A‚~Ø Ÿ;™;›=ˆ�CÑØ�>‰>˜+Ó&Ð&r.   )Úlengthsrœ   ÚoffsetsÚaxisÚunsafeÚinitialÚdatar;  r<  r=  r>  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¬   ri   ©rG   rk   r”   )r?   rs   r€   rG   r˜   )Úlengths_shaper=  r@  s    €€r,   Úsegment_reduce_lengths_tensorz:meta_segment_reduce.<locals>.segment_reduce_lengths_tensorZ  s>   ø€ Ü�{‰{Ø˜DŸJ™J t¨a¡x zÐ2Ñ2Ø—*‘*ØÜ×1Ñ1ô	
ð 	
r.   rƒ   r¬   z<segment_reduce(): Either lengths or offsets must be defined.)ÚNotImplementedErrorr€   ró   )
r@  r0  r;  rœ   r<  r=  r>  r?  rE  rD  s
   `    `    r,   Úmeta_segment_reducerG  I  s|   ù€ ð ÐÜ!ØMó
ð 	
õ
ð ÐÙ,¨W¯]©]Ó;Ð;ð ÐàŸ™ c rÐ*¨g¯m©m¸BÑ.?À!Ñ.CÐ-EÑEˆÙ,¨]Ó;Ð;Ü
ÐUÓ
VÐVr.   c                 ó$   — | j                  d«      S ©Nr2   ©r   r™   s    r,   Úmeta_maxrK  m  ó   € ð �>‰>˜"ÓÐr.   c                 óÂ   — t        j                  | j                  |f«      }t        | ||«      }| j	                  |«      | j	                  |t
        j                  ¬«      fS ©Nrx   ©r7   Úreduction_dimsr€   Ú_compute_reduction_shaper   r?   r|   ©r�   rn   Úkeepdimr+  s       r,   Úmeta_max_dimrT  s  óR   € ä
×
Ñ
˜tŸz™z¨C¨6Ó
2€CÜ+¨D°#°wÓ?€Là�‰�|Ó$Ø�‰�|¬5¯:©:ˆÓ6ðð r.   c                 ó$   — | j                  d«      S rI  rJ  r™   s    r,   Úmeta_minrW  }  rL  r.   c                 óÂ   — t        j                  | j                  |f«      }t        | ||«      }| j	                  |«      | j	                  |t
        j                  ¬«      fS rN  rO  rR  s       r,   Úmeta_min_dimrY  ƒ  rU  r.   c                 ó¸   — | j                  «       rt        | j                  «      }nt        | t        j
                  ¬«      \  }}t        j                  | |¬«      S )N©r6   rx   )rÍ   r   rG   r   r   ÚINT_TO_FLOATr?   r—   )r�   r;   r:   s      r,   Ú
meta_angler]  �  sI   € à‡�ÔÜ/°·
±
Ó;‰ä,ØÜ ?× LÑ Lô
‰ˆˆ<ô ×Ñ˜D¨Ô5Ð5r.   c                 ó¨   — t        j                  || j                  «       | j                  «       |j	                  t        j
                  | «      «      S r)   )r?   Ú_resize_output_r‹   rk   Úcopy_Úangle)r�   r·   s     r,   Úmeta_angle_outrb  ™  s6   € ä	×Ñ˜#˜tŸy™y›{¨D¯K©KÔ8Ø�9‰9”U—[‘[ Ó&Ó'Ð'r.   c                  ó   — y r)   r2   )Úvals    r,   Úassert_asyncre  Ÿ  ó   € à
r.   c                  ó   — y r)   r2   )rd  Ú
assert_msgs     r,   Úassert_async_metari  ¤  rf  r.   c                  ó   — y r)   r2   )Úss    r,   Ú
print_metarl  ©  rf  r.   ©rG   rj   rk   rl   r”   c                 ó0   — t        j                  dd¬«      S )Nr   ri   ©rk   râ   rm  s        r,   Úmake_dep_tokenrp  ®  s   € ô �;‰;�q Ô(Ð(r.   c                 óh   — ddl m} t        | t        t        f«      rt        d«      ‚ || ||¬«       y )Nr   )Úconstrain_rangeú'Constraining SymFloat or Symbool is nyi©ÚminÚmax)rñ   rr  rY   r
   r	   Ú
ValueError)r‹   ru  rv  rr  s       r,   Úsym_constrain_rangerx  º  s/   € õ Fä�$œ¤7Ð+Ô,ÜÐBÓCÐCÙ�D˜c sÖ+r.   c                 ó6   — t         j                  | ||¬«       |S ©Nrt  )r#   rx  ©r‹   ru  rv  Ú	dep_tokens       r,   Úfunctional_sym_constrain_ranger}  Ä  s   € ä×Ñ˜T s°ÐÔ4ØÐr.   c                 óh   — ddl m} t        | t        t        f«      rt        d«      ‚ || ||¬«       y )Nr   )Ú_constrain_range_for_sizers  rt  )rñ   r  rY   r
   r	   rw  )r‹   ru  rv  r  s       r,   Úsym_constrain_range_for_sizer€  Ê  s/   € õ Pä�$œ¤7Ð+Ô,ÜÐBÓCÐCÙ˜d¨°Ö5r.   c                 ó6   — t         j                  | ||¬«       |S rz  )r#   r€  r{  s       r,   Ú'functional_sym_constrain_range_for_sizer‚  Ô  s   € ä×%Ñ% d°¸Ð%Ô=ØÐr.   c                 ó   — |S r)   r2   )rd  rh  r|  s      r,   Úfunctional_assert_async_metar„  Ú  s   € àÐr.   Ú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)rn   r‹   )r�   r…  s     r,   r•   r•   à  s‚   € à�‰‹
�aŠðFà
ˆÐDÐEóFØð 	�	‰	�"‹˜Ÿ™ 2›Ò&ðsà
ˆÐFÀtÇyÁyÐQSÃ}ÀoÐUYÐZ^×ZcÑZcÐdfÓZgÐYhÐhqÐrósÙ&r.   Ú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.ro  ©rŠ  r�   s   €€r,   rN   z(linearSolveCheckInputs.<locals>.<lambda>ï  s%   ø€ ØHØ�{‰{ˆm˜: a§h¡h Z¨yð:ð r.   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Ž  rx   r�  s   €€r,   rN   z(linearSolveCheckInputs.<locals>.<lambda>÷  s%   ø€ ØKØ�z‰zˆl˜/¨!¯'©'¨°)ð=ð r.   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   €r,   rN   z(linearSolveCheckInputs.<locals>.<lambda>ÿ  s0   ø€ ðØŸF™F 2›J˜< t¨A¯F©F°2«J¨<°yðBð r.   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   €€€r,   rN   z(linearSolveCheckInputs.<locals>.<lambda>  sR   ø€ Ø,¨T¨Fð 3ØŸ™ ›˜ D¨¯©°«¨Ø$ T§Y¡Y¨r£] O°4¸¿	¹	À"»°ðHð r.   )r?   rP   rk   rG   r‹   )r�   rŠ  r‹  s   ```r,   ÚlinearSolveCheckInputsr”  ì  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Ñ#õ	
õr.   Ú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 r2   ©rG   r…  s   €€r,   rN   z(checkFloatingOrComplex.<locals>.<lambda>  s   ø€ �6�(ÐVÐW\ÐV]Ð^€ r.   c                  ó   •— ‰› d‰ › �S )Nz*: Low precision dtypes not supported. Got r2   r™  s   €€r,   rN   z(checkFloatingOrComplex.<locals>.<lambda>  s   ø€ �v�hÐHÈÈÐP€ r.   )	rG   r?   rP   rÔ   rÍ   rC   rE   rB   rD   )r•  r…  r–  rG   s    ` @r,   r–   r–     sn   ù€ ð
 �G‰G€EÜ	‡L�LØ	×ÑÓÒ/ §¡£Ü^ôñ &Ü�‰Ø”e—k‘k¤5§<¡<´·±¼u¿}¹}ÐMÐMÜPõ	
ð &r.   Ú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.r2   )r›  r…  s   €€r,   rN   zcheckIsMatrix.<locals>.<lambda>%  s   ø€ �6�(Ð-¨h¨ZÐ7XÐY€ r.   )r?   rP   rn   )rŠ  r…  r›  s    ``r,   ÚcheckIsMatrixrž  "  s   ù€ Ü	‡L�LØ	�‰‹�1‰ÜYõr.   Ú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‡  r<   rƒ   r‰   rb   rŠ   )rŠ  rŸ  r…  r¿   s   €€€€r,   rN   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ð r.   )r•   rž  r?   rP   r‹   )rŠ  rŸ  r¿   r…  s   ````r,   ÚcheckInputsSolverr¢  )  sY   û€ Ü�a˜Ô Ü�!�VÔÜ	‡L�LÙ$(ˆ�‰ˆr‹
�a—f‘f˜R“jÒ ¨a¯f©f°R«j¸A¿F¹FÀ2»JÑ.Fö	
õr.   r,  Ú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 ro  )r£  rÃ   r,  r¤  s   €€€€r,   rN   z!checkSameDevice.<locals>.<lambda>>  s5   ø€ Øˆi�{ ; -Ð/dØˆm˜4 §¡˜¨n¸U¿\¹\¸NðLð r.   )r?   rP   rk   )r£  r,  rÃ   r¤  s   ````r,   ÚcheckSameDevicer§  6  s&   û€ ô 
‡L�LØ�‰˜Ÿ™Ñ%ö	
õr.   Ú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 r2   )r¨  s   €r,   rN   zcheckUplo.<locals>.<lambda>I  s   ø€ ÐCÀDÀ6ÐJ€ r.   )Úupperr?   rP   r­   )r¨  ÚUPLO_uppercases   ` r,   Ú	checkUplor¯  E  s<   ø€ Ø—Z‘Z“\€NÜ	‡L�LÜˆD‹	�Q‰ÒK˜N¨cÑ1ÒJ°^ÀsÑ5JÛJõr.   Ú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   rx   )
r•   r¯  r®   r€   r   r  r   ÚpoprI   rG   )rŠ  r¨  r²  r€   ÚvecsÚvalss         r,   Úmeta__linalg_eighr¹  M  s‰   € ô �a˜Ô'Üˆd„Oä�—‘‹M€EÙØ�{‰{˜5Ó!ˆØ×Ñ˜Ô ;¸EÈUÔ SÕTà�{‰{˜A˜3Óˆà	‡I�I„KØ�;‰;�u¤O°A·G±GÓ$<ˆ;Ó=€Dà�ˆ:Ðr.   c                 óî   — t        | d«       t        j                  | j                  «      r| j                  nt        j                  | j                  «      }| j                  | j                  d d |¬«      S )Nzlinalg.eigvalsrƒ   rx   ©r•   r7   rq   rG   r   r   r€   )rÃ   Úcomplex_dtypes     r,   Úmeta__linalg_eigvalsr½  `  sc   € ô �eÐ-Ô.ô ×!Ñ! %§+¡+Ô.ð 	�Šä×.Ñ.¨u¯{©{Ó;ð ð
 �?‰?˜5Ÿ;™; s¨Ð+°=ˆ?ÓAÐAr.   c                 ó0  — t        | d«       t        j                  | j                  «      r| j                  nt        j                  | j                  «      }| j                  | j                  d d |¬«      }| j                  | j                  |¬«      }||fS )Nz
linalg.eigrƒ   rx   r»  )rÃ   r¼  r›   Úvectorss       r,   Úmeta_linalg_eigrÀ  l  s�   € ô �e˜\Ô*ô ×!Ñ! %§+¡+Ô.ð 	�Šä×.Ñ.¨u¯{©{Ó;ð ð
 �_‰_˜UŸ[™[¨¨"Ð-°]ˆ_ÓC€FØ�o‰o˜eŸk™k°ˆoÓ?€GØ�7ˆ?Ðr.   r÷   c                 óv   — | j                   j                  t        j                  ¬«      j	                  dd«      S )Nr“   r‡  rƒ   )ÚmTÚcloner?   r˜   Ú	transpose)r÷   s    r,   ÚcloneBatchedColumnMajorrÅ  z  s*   € Ø�6‰6�<‰<¤e×&=Ñ&=ˆ<Ó>×HÑHÈÈRÓPÐPr.   r­  c                 ó   — t        | «      S r)   )rÅ  )r�   rŠ  r­  s      r,   Ú_cholesky_solve_helperrÇ  ~  s   € ô # 4Ó(Ð(r.   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   €r,   rN   z cholesky_solve.<locals>.<lambda>‰  s   ø€ Ð?ÀÇ	Á	¸{ÐJ]Ð^€ r.   c                  ó$   •— d‰ j                   › d�S )Nz-u should have at least 2 dimensions, but has rÊ  rË  r’  s   €r,   rN   z cholesky_solve.<locals>.<lambda>�  s   ø€ Ð?ÀÇÁ¸xÐGZÐ[€ r.   Úcholesky_solve)r?   rP   r�   Ú!_linalg_broadcast_batch_dims_namerÇ  )r�   rŠ  r­  Úself_broadcastedÚA_broadcasteds   ``   r,   rÍ  rÍ  „  sh   ù€ ô 
‡L�LØ�	‰	�Q‰Û^ôô 
‡L�LØ	�‰�!‰Û[ôô 'HØˆaÐ!ó'Ñ#Ð�mô "Ð"2°MÀ5ÓIÐIr.   c                 ó    — | j                  «       dk(  r%t        j                  | t        j                  ¬«      S t	        | d«       t        | «      S )Nr   r“   Úcholesky)r~   r?   r—   Úlegacy_contiguous_formatr•   rÅ  ©r�   r­  s     r,   rÒ  rÒ  •  s@   € ð ‡z�zƒ|�qÒÜ×Ñ ´E×4RÑ4RÔSÐSÜ�d˜JÔ'Ü" 4Ó(Ð(r.   c                 ó0   — t        | d«       t        | «      S )NÚcholesky_inverse)r•   rÅ  rÔ  s     r,   rÖ  rÖ  ž  s   € ô �dÐ.Ô/Ü" 4Ó(Ð(r.   Úcheck_errorsc                 ó  — t        | d«       t        | d«       | j                  }t        |«      }t	        |d«      }| j                  |«      }|j                  ||«       | j                  |d|dz
   t        j                  ¬«      }||fS )Nzlinalg.choleskyFr   rÓ   rx   )	r•   r–   r€   r­   r   r   r  r?   r  )rŠ  r­  r×  ÚA_shaper�   Ú	L_stridesr«  Úinfoss           r,   Úlinalg_cholesky_exrÜ  ¦  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€Or.   Ú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.r2   r2   r.   r,   rN   z,linalg_householder_product.<locals>.<lambda>¿  rV   r.   r‡  rƒ   c                   ó   — y)Nzbtorch.linalg.householder_product: input.shape[-2] must be greater than or equal to input.shape[-1]r2   r2   r.   r,   rN   z,linalg_householder_product.<locals>.<lambda>Ã  rV   r.   c                   ó   — y)Nz`torch.linalg.householder_product: input.shape[-1] must be greater than or equal to tau.shape[-1]r2   r2   r.   r,   rN   z,linalg_householder_product.<locals>.<lambda>Ç  rV   r.   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   €€r,   rN   z,linalg_householder_product.<locals>.<lambda>Ì  ó'   ø€ ð)Ø),¯©¨
Ð2NÈuÏzÉzÈlð\ð r.   c                  ó   •— d‰ › �S )Nzltorch.linalg.householder_product: Expected batch dimensions of tau to be equal to input.shape[:-2], but got r2   ©Úactual_batch_tau_shapes   €r,   rN   z,linalg_householder_product.<locals>.<lambda>Ö  ó   ø€ ð6Ø6LÐ5MðOð r.   c                  ó<   •— d‰j                   › d‰ j                   › �S )Nz,torch.linalg.householder_product: tau dtype z does not match input dtype rx   rä  s   €€r,   rN   z,linalg_householder_product.<locals>.<lambda>Þ  s#   ø€ Ø:¸3¿9¹9¸+Ø*¨5¯;©;¨-ð9ð r.   z torch.linalg.householder_productrÝ  Fr´  ©r‹   r±   rG   rk   )
r?   rP   r�   r‹   r€   rG   r§  Úempty_stridedr   rk   )rÃ   rÝ  Úexpected_batch_tau_shaperè  s   `` @r,   Úlinalg_householder_productrî  ¸  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Ø�|‰|ô	ð r.   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‡  rx   ©r•   r–   r   r€   r  r   r?   r  )rŠ  r×  r«  rÛ  s       r,   Úlinalg_inv_ex_metarñ  î  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€Or.   Ú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ƒ   rx   r‡  )
r•   r–   r?   rì  r€   r   rG   rk   r   Úint)r�   rõ  r×  rò  ró  rô  s         r,   Ú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ÐÐr.   )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   €r,   rN   z'linalg_ldl_solve_meta.<locals>.<lambda>  ó   ø€ ðØŸ&™&˜Ð!4ð6ð r.   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   €r,   rN   z'linalg_ldl_solve_meta.<locals>.<lambda>%  ó   ø€ ð)Ø)/¯©¨°hð@ð r.   c                  ó"   •— d‰ j                   › �S )Nz<torch.linalg.ldl_solve: Expected pivots to be integers. Got rx   rÿ  s   €r,   rN   z'linalg_ldl_solve_meta.<locals>.<lambda>,  s   ø€ ÐNÈvÏ|É|ÈnÐ]€ r.   c                  ó<   •— d‰j                   › d‰ j                   › �S )Nz!torch.linalg.ldl_solve: LD dtype z does not match b dtype rx   )rŸ  rò  s   €€r,   rN   z'linalg_ldl_solve_meta.<locals>.<lambda>0  s"   ø€ Ð3°B·H±H°:Ð=UÐVW×V]ÑV]ÐU^Ð_€ r.   Fr´  rë  )r•   r–   r”  r?   rP   r�   r€   r7   Úis_integer_dtyperG   Ú_linalg_broadcast_batch_dimsrì  r   rk   )rò  ró  rŸ  rõ  Úexpected_pivots_shapeÚB_broadcast_sizer:   s   ```    r,   Úlinalg_ldl_solve_metar    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ô	ð r.   ÚPrª  )Úpivotr	  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   €r,   rN   z linalg_lu_meta.<locals>.<lambda>@  s   ø€ ÐRÐST×SZÑSZÐR[Ð[cÐd€ r.   r‡  rƒ   r   )r?   rP   r�   r®   r€   ru  r   )	rŠ  r	  Úsizesr*  rÝ   r)  r  r«  rª  s	   `        r,   Úlinalg_lu_metar  ;  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€Nr.   ÚLU)r	  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   €r,   rN   z*linalg_lu_factor_ex_meta.<locals>.<lambda>a  s   ø€ ÐXÐYZ×Y`ÑY`ÐXaÐaiÐj€ r.   r‡  rƒ   Fr´  rë  rx   )r?   rP   r�   r®   r€   rì  r   rG   rk   r¶  ru  r   r÷  )	rŠ  r	  r×  r  r*  rÝ   r  ró  rô  s	   `        r,   Úlinalg_lu_factor_ex_metar  W  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ÐÐr.   )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ý  rx   )rŸ  r  s   €€r,   rN   z&linalg_lu_solve_meta.<locals>.<lambda>‰  s(   ø€ ð$Ø$&§H¡H :¨_¸Q¿W¹W¸IÀXðOð r.   c                   ó   — y)NzElinalg.lu_solve: pivots should be a Tensor of scalar type torch.int32r2   r2   r.   r,   rN   z&linalg_lu_solve_meta.<locals>.<lambda>�  rV   r.   zlinalg.lu_solverƒ   c                   ó   — y)NzYlinalg.lu_solve: Number of pivots per batch should be same as the dimension of the matrixr2   r2   r.   r,   rN   z&linalg_lu_solve_meta.<locals>.<lambda>˜  rV   r.   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   €r,   rN   z&linalg_lu_solve_meta.<locals>.<lambda>ž  r   r.   r´  rë  r   )r–   r?   rP   rG   r÷  r•   r¢  r‹   r€   r  rì  r   rk   r~   rÍ   Úconj)r  ró  rŸ  r¿   r  r  r:   r,  s   ```     r,   Úlinalg_lu_solve_metar  {  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à€Mr.   Ú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þ  )r  s   €r,   rN   z lu_unpack_meta.<locals>.<lambda>¾  s   ø€ ÐXÐY[×YaÑYaÐXbÐbjÐk€ r.   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_factorr2   r2   r.   r,   rN   z lu_unpack_meta.<locals>.<lambda>Ã  s   € ðpð r.   r‡  rƒ   r   )	r?   rP   r�   rG   r  r®   r€   ru  r   )r  ró  r  r  r  r*  rÝ   r)  r  r«  rª  s   `          r,   Úlu_unpack_metar   ´  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€Nr.   Ú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'r2   )r!  s   €r,   rN   z _parse_qr_mode.<locals>.<lambda>ë  s   ø€ Ø1°$°ð 8Nð Oð r.   ©r?   rP   )r!  Ú	compute_qr#  s   `  r,   Ú_parse_qr_moder)  Þ  s†   ø€ ØˆyÒØˆ	Øˆð �gÐÐð 
�Ò	Øˆ	Øˆð �gÐÐð 
�ŠØˆ	Øˆð �gÐÐô 	�‰Øóô	
ð �gÐÐr.   Ú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–   r)  r€   ru  r®   r   r  r   )rŠ  r!  r(  Úreduced_moder*  rÝ   r)  ÚQ_shaper*  ÚR_shaper+  s              r,   Úlinalg_qr_metar0  ó  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€Kr.   Ú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‡  rx   rë  rƒ   )r•   r–   r€   r   rI   rG   r?   rì  r   rk   r  )rŠ  r€   r1  r2  r  ró  s         r,   Ú_linalg_slogdetr4    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 Ð&Ð&r.   Ú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´  Úcudar   rx   )rž  r–   r®   r€   ru  r   r  r   Údevice_hintrI   rG   )rŠ  r5  r6  r7  r»   r*  rÝ   r)  ÚU_shaperª  ÚV_shapeÚVÚis_cudaÚSs                 r,   Ú_linalg_svd_metar@  #  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€Nr.   Ú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‹   )rA  rB  Úarg1_batch_sizesÚarg2_batch_sizesÚexpand_batch_portionÚarg1_expand_sizeÚarg2_expand_sizes          r,   r  r  I  s—   € ð
 —z‘z # 2�ÐØ—z‘z # 2�ÐÜ,Ð-=Ð?OÓPÐäÐ0Ó1ÐØ˜Ÿ™ 2›¨¯	©	°"«Ð6Ñ6ÐäÐ0Ó1ÐØ˜Ÿ™ 2›¨¯	©	°"«Ð6Ñ6ÐØÐ-Ð-Ð-r.   c                 óÎ   — |rt        | ||«       t        | |«      \  }}|| j                  k(  r| n| j                  |«      }||j                  k(  r|n|j                  |«      }||fS r)   )r”  r  r€   Úexpand)rA  rB  r‹  rG  rH  Úarg1_broadcastedÚarg2_broadcasteds          r,   rÎ  rÎ  Z  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ð ð Ð-Ð-Ð-r.   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       r,   Úlinalg_solve_is_vector_rhsrP  n  sS   € Ø!&§¡¨S¨bÐ!1ÐØ—*‘* ‘/ò Ø�
‰
�Q‰˜%Ÿ*™*Ñ$ÒR¨¯©Ð8RÑ)Rð ð Ðr.   )r¿   r×  r,  r  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                  }‰ 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ý  rx   )rŠ  rŸ  s   €€r,   rN   z"_linalg_solve_ex.<locals>.<lambda>…  s%   ø€ ØYØ�w‰wˆi� q§w¡w i¨xð9ð r.   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)r2   r2   r.   r,   rN   z"_linalg_solve_ex.<locals>.<lambda>�  s   € ðKð r.   rë  Frx   r‡  c              3   ó$   K  — | ]  }|d u–— Œ
 y ­wr)   r2   )r[   r<   s     r,   r]   z#_linalg_solve_ex.<locals>.<genexpr>¨  s   è ø€ Ò
&˜Qˆ1�DŒ=Ñ
&ùs   ‚)Ú	copy_fromÚcopy_toÚexact_dtype)r–   r?   rP   rG   rP  Ú	unsqueezer¢  r  rì  r   rk   r€   r�   r   r  ÚallÚzipr   r  r±   r   )rŠ  rŸ  r¿   r×  r,  r  ró  rô  rO  ÚB_ÚB_broad_shaper:   Úresult_shapeÚresult_r€   r�   ÚLU_Úpivots_Úinfo_r·   Úresr%  Úos   ``                     r,   Ú_linalg_solve_exrd  v  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Ø�6‰6€DÜ
×
Ñ
ØÜ*¨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ð €Jr.   )r¿   Úunitriangularr·   re  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   rY   r   r¢  rÎ  rÄ  Úis_contiguousÚis_conjr   r€   r   Úresize_Ú
transpose_)	rŠ  rŸ  r­  r¿   re  r·   r[  ÚA_Úavoid_copy_As	            r,   Úlinalg_solve_triangular_metarm  ²  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Ô"Ø€Jr.   ÚsolutionÚcloned_coefficientrÄ  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   €r,   rN   z'triangular_solve_meta.<locals>.<lambda>×  s   ø€ ðØŸ)™)˜Ð$7ð9ð r.   c                  ó$   •— d‰ j                   › d�S )NzMtorch.triangular_solve: Expected A to have at least 2 dimensions, but it has rÊ  rË  r’  s   €r,   rN   z'triangular_solve_meta.<locals>.<lambda>Þ  rû  r.   Útriangular_solveFr´  rë  r   c                   ó   — y)Nz+triangular_solve: Got an unexpected layout.r2   r2   r.   r,   rN   z'triangular_solve_meta.<locals>.<lambda>ø  rV   r.   )r?   rP   r�   r”  rj   Ústridedr  rì  r   rG   rk   Ú
sparse_csrÚ
sparse_bsrr—   r   )	r�   rŠ  r­  rÄ  re  Úself_broadcast_sizeÚA_broadcast_sizern  ro  s	   ``       r,   Útriangular_solve_metarz  Ì  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ØÐ'Ð'Ð'r.   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ƒ   rx   rð  )rŠ  Údetr  ró  s       r,   Ú_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ˆ?Ðr.   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.r2   r2   r.   r,   rN   zormqr.<locals>.<lambda>  rV   r.   c                   ó   — y)Nz3torch.ormqr: other must have at least 2 dimensions.r2   r2   r.   r,   rN   zormqr.<locals>.<lambda>  rV   r.   r‡  rƒ   c                  ó   •— d‰ › d�S )Nútorch.ormqr: other.shape[z0] must be greater than or equal to tau.shape[-1]r2   ©Úleft_size_conditions   €r,   rN   zormqr.<locals>.<lambda>  s   ø€ Ð+Ð,?Ð+@Ð@pÐq€ r.   c                  ó   •— d‰ › d�S )Nr‚  z"] must be equal to input.shape[-2]r2   rƒ  s   €r,   rN   zormqr.<locals>.<lambda>"  s   ø€ Ð+Ð,?Ð+@Ð@bÐc€ r.   c                   ó   — y)NzHtorch.ormqr: tau.shape[-1] must be less than or equal to input.shape[-1]r2   r2   r.   r,   rN   zormqr.<locals>.<lambda>'  rV   r.   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   €€r,   rN   zormqr.<locals>.<lambda>,  rå  r.   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   €€r,   rN   zormqr.<locals>.<lambda>3  s+   ø€ ð+Ø+0¯:©:¨,Ð6RÐSX×S]ÑS]ÐR^ð`ð r.   c                  ó   •— d‰ › �S )NzWtorch.ormqr: Expected batch dimensions of tau to be equal to input.shape[:-2], but got r2   rç  s   €r,   rN   zormqr.<locals>.<lambda>>  ré  r.   c                  ó   •— d‰ › �S )NzYtorch.ormqr: Expected batch dimensions of other to be equal to input.shape[:-2], but got r2   )Úactual_batch_other_shapes   €r,   rN   zormqr.<locals>.<lambda>G  s   ø€ ð6Ø6NÐ5OðQð r.   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 rx   rä  s   €€r,   rN   zormqr.<locals>.<lambda>O  s'   ø€ ð#Ø#(§;¡; -Ð/BÀ3Ç9Á9À+ðOð r.   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 rx   r‰  s   €€r,   rN   zormqr.<locals>.<lambda>V  s'   ø€ ð#Ø#(§;¡; -Ð/DÀUÇ[Á[ÀMðSð r.   ztorch.ormqrrÝ  rŒ   Fr´  rë  )	r?   rP   r�   r€   rG   r§  rì  r   rk   )	rÃ   rÝ  rŒ   r¿   rÄ  Úexpected_batch_shaperŒ  rè  r„  s	   ```   @@@r,   Ú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Ø�|‰|ô	ð r.   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­   )rn   Úpaddings   €€r,   rN   z,_padding_check_valid_input.<locals>.<lambda>j  s   ø€ Ð1°!°c±'°¸+ÄcÈ'ÃlÀ^ÐT€ r.   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þ  )rn   rÃ   s   €€r,   rN   z,_padding_check_valid_input.<locals>.<lambda>  s2   ø€ Ø˜˜a™�y  c¨A¡g Yð /AØAFÇÁÀðOð r.   )r?   rP   r­   r�   r¯   r‹   )rÃ   r”  rn   Ú	input_dimÚis_batch_modeÚvalid_batch_modeÚvalid_non_batch_moder¾   s   ```     r,   Ú_padding_check_valid_inputrš  g  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ô	
õr.   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 (ra   ú) at dimension ú
 of input rþ  ©Údim_wrÃ   Úpad_lÚpad_rs   €€€€r,   rN   z_pad1d_common.<locals>.<lambda>›  ó2   ø€ ð%Ø%* G¨2¨e¨W°OÀEÀ7È*ÐUZ×U`ÑU`ÐTaðcð r.   c                  ó   •— d‰ › d‰› �S )Nz
input (W: z%) is too small. Calculated output W: r2   )Úinput_wÚoutput_ws   €€r,   rN   z_pad1d_common.<locals>.<lambda>£  s   ø€ �*˜W˜IÐ%JÈ8È*ÐU€ r.   rÓ   )r�   r‹   rš  r?   rP   r   )rÃ   r”  Úis_reflectionÚ	dim_planeÚnbatchÚnplaner¡  r¦  r§  r¢  r£  s   `     @@@@@r,   Ú_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Ó:Ð:r.   c                 ó   — t        | |d¬«      S ©NT©r¨  ©r¬  ©rÃ   r”  s     r,   Úmeta_reflection_pad1dr²  ¬  ó   € ô ˜ °tÔ<Ð<r.   c                 ó   — t        | |d¬«      S ©NFr¯  r°  r±  s     r,   Úmeta_replication_pad1dr¶  ²  ó   € ô ˜ °uÔ=Ð=r.   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 2r2   r2   r.   r,   rN   z(_pad1d_backward_common.<locals>.<lambda>»  rV   r.   r‡   c                  ó4   •— d‰› d‰› d‰ › d‰j                   › �S r�  rþ  r   s   €€€€r,   rN   z(_pad1d_backward_common.<locals>.<lambda>È  r¤  r.   c                  ó2   •— d‰› d‰j                  ‰ «      › �S ©Nz(grad_output width unexpected. Expected: ú, Got: rŠ   ©r¡  Úgrad_outputr§  s   €€€r,   rN   z(_pad1d_backward_common.<locals>.<lambda>Ð  ó"   ø€ Ð:¸8¸*ÀGÈK×L\ÑL\Ð]bÓLcÐKdÐe€ r.   ©r?   rP   r­   r�   r‹   r   r€   )	r¿  rÃ   r”  r¨  r¦  r¡  r§  r¢  r£  s	   ``   @@@@r,   Ú_pad1d_backward_commonrÂ  ¸  s¹   ý€ Ø€EÙÜ�‰”S˜“\ QÑ&Ñ(RÔSà‡z�z�Q‚Ø�‰
ˆà�L€Eˆ5à�j‰j˜Ó€GØ˜‰ Ñ&€HáÜ�‰Ø�G‰OÒ/ ¨¡öô	
ô 
‡L�LØ�K×$Ñ$ UÓ+Ñ+Ýeôð
 �?‰?˜5Ÿ;™;Ó'Ð'r.   Ú
grad_inputc                 ó    — t        | ||d¬«      S r®  ©rÂ  ©r¿  rÃ   r”  s      r,   Úmeta_reflection_pad1d_backwardrÇ  Ö  s   € ô " +¨u°gÈTÔRÐRr.   c                 ó    — t        | ||d¬«      S rµ  rÅ  rÆ  s      r,   Úmeta_replication_pad1d_backwardrÉ  Ü  s   € ô " +¨u°gÈUÔSÐSr.   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   €€€€r,   rN   z_pad2d_common.<locals>.<lambda>ü  r¤  r.   c                  ó4   •— d‰› d‰› d‰ › d‰j                   › �S ©NzcArgument #6: Padding size should be less than the corresponding input dimension, but got: padding (ra   rž  rŸ  rþ  ©Údim_hrÃ   Úpad_bÚpad_ts   €€€€r,   rN   z_pad2d_common.<locals>.<lambda>  r¤  r.   c                  ó    •— d‰ › d‰› d‰› d‰› �S )Nz
input (H: ú W: z%) is too small. Calculated output H: r2   )Úinput_hr¦  Úoutput_hr§  s   €€€€r,   rN   z_pad2d_common.<locals>.<lambda>  s*   ø€ Ø˜˜	  g Yð /$Ø$, :¨T°(°ð=ð r.   r‡   ©rš  r�   r‹   r?   rP   r   )rÃ   r”  r¨  Ú
dim_slicesrª  r�   r«  rÐ  r¡  rÕ  r¦  rÖ  r§  rÑ  r¢  r£  rÒ  s   `      @@@@@@@@@@r,   Ú_pad2d_commonrÙ  â  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ÐDr.   c                 ó   — t        | |d¬«      S r®  ©rÙ  r±  s     r,   Úmeta_reflection_pad2drÜ    r³  r.   c                 ó   — t        | |d¬«      S rµ  rÛ  r±  s     r,   Úmeta_replication_pad2drÞ    r·  r.   c                 ó¸  ‡ ‡‡‡‡— dŠdŠd}d}|j                   }|j                  «       dk(  r|d   }‰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   €€€r,   rN   z%meta_pad2d_backward.<locals>.<lambda>C  rÀ  r.   c                  ó2   •— d‰› d‰j                  ‰ «      › �S ©Nz)grad_output height unexpected. Expected: r½  rŠ   ©rÐ  r¿  rÖ  s   €€€r,   rN   z%meta_pad2d_backward.<locals>.<lambda>G  ó"   ø€ Ð;¸H¸:ÀWÈ[×M]ÑM]Ð^cÓMdÐLeÐf€ r.   )r€   rn   r?   rP   r‹   r   )r¿  r�   r”  r©  rª  rM   r¢  r£  rÒ  rÑ  r«  rÕ  r¦  rÐ  r¡  rÖ  r§  s   `            @@@@r,   Úmeta_pad2d_backwardrå  #  sö   ü€ ð €EØ€EØ€IØ€Fà—‘€JØ‡x�xƒz�Q‚Ø˜A‘ˆØ�‰
ˆØ�‰
ˆØ�Q‰ˆ	à!(Ñ€Eˆ5�%˜à˜	Ñ"€FØ˜Ñ€GØ˜Ñ€GØ˜‰ Ñ&€HØ˜‰ Ñ&€Hä	‡L�LØ�K×$Ñ$ UÓ+Ñ+Ýeôô 
‡L�LØ�K×$Ñ$ UÓ+Ñ+Ýfôð �>‰>˜$Ÿ*™*Ó%Ð%r.   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   €€€€r,   rN   z_pad3d_common.<locals>.<lambda>i  r¤  r.   c                  ó4   •— d‰› d‰› d‰ › d‰j                   › �S rÎ  rþ  rÏ  s   €€€€r,   rN   z_pad3d_common.<locals>.<lambda>p  r¤  r.   c                  ó4   •— d‰› d‰› d‰ › d‰j                   › �S )NzcArgument #8: Padding size should be less than the corresponding input dimension, but got: padding (ra   rž  rŸ  rþ  )Údim_drÃ   Úpad_bkÚpad_fs   €€€€r,   rN   z_pad3d_common.<locals>.<lambda>w  s2   ø€ ð%Ø%* G¨2¨f¨X°_ÀUÀGÈ:ÐV[×VaÑVaÐUbðdð r.   c                  ó,   •— d‰ › d‰› d‰› d‰› d‰› d‰› �S )Nz
input (D: ú H: rÔ  z%) is too small. Calculated output D: r2   )Úinput_drÕ  r¦  Úoutput_drÖ  r§  s   €€€€€€r,   rN   z_pad3d_common.<locals>.<lambda>  s7   ø€ Ø˜˜	  g Y¨d°7°)ð <$Ø$, :¨T°(°¸4À¸zðKð r.   r×  )rÃ   r”  r¨  r©  Ú
batch_moderª  r«  rë  rÐ  r¡  rð  rÕ  r¦  rñ  rÖ  r§  rÑ  rì  rí  r¢  r£  rÒ  s   `      @@@@@@@@@@@@@@@r,   Ú_pad3d_commonró  L  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ÐFr.   c                 ó   — t        | |d¬«      S r®  ©ró  r±  s     r,   Úmeta_reflection_pad3drö  ‹  r³  r.   c                 ó   — t        | |d¬«      S rµ  rõ  r±  s     r,   Úmeta_replication_pad3drø  ‘  r·  r.   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 6r2   r2   r.   r,   rN   z%meta_pad3d_backward.<locals>.<lambda>¡  rV   r.   r‡   rÓ   r¬   rç  c                  ó2   •— d‰› d‰j                  ‰ «      › �S r¼  rŠ   r¾  s   €€€r,   rN   z%meta_pad3d_backward.<locals>.<lambda>¹  rÀ  r.   c                  ó2   •— d‰› d‰j                  ‰ «      › �S râ  rŠ   rã  s   €€€r,   rN   z%meta_pad3d_backward.<locals>.<lambda>½  rä  r.   c                  ó2   •— d‰› d‰j                  ‰ «      › �S )Nz(grad_output depth unexpected. Expected: r½  rŠ   )rë  r¿  rñ  s   €€€r,   rN   z%meta_pad3d_backward.<locals>.<lambda>Á  rÀ  r.   rÁ  )r¿  rÃ   r”  r¢  r£  rÒ  rÑ  rí  rì  rð  rÕ  r¦  rë  rÐ  r¡  rñ  rÖ  r§  s   `           @@@@@@r,   Ú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Ÿ;™;Ó'Ð'r.   Ú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 inputr2   r2   r.   r,   rN   z%meta__pdist_forward.<locals>.<lambda>Ë  rV   r.   r   r¬   r“   rÓ   )r?   rP   rg  r‹   r   rô   rÓ  )r�   r   rÝ   s      r,   Úmeta__pdist_forwardr  Ç  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ó 
ð 	
r.   ÚgradÚpdistc                 óà   — t        j                  |j                  «       d„ «       t        j                  |j                  «       d„ «       t        j                  |t         j                  ¬«      S )Nc                   ó   — y)Nz._pdist_backward requires self to be contiguousr2   r2   r.   r,   rN   z&meta__pdist_backward.<locals>.<lambda>Ú  rV   r.   c                   ó   — y)Nz/_pdist_backward requires pdist to be contiguousr2   r2   r.   r,   rN   z&meta__pdist_backward.<locals>.<lambda>Ý  rV   r.   r“   )r?   rP   rg  r—   rÓ  )r  r�   r   r  s       r,   Úmeta__pdist_backwardr	  Ö  sW   € ô 
‡L�LØ×ÑÓÑVôô 
‡L�LØ×ÑÓÑXôô ×Ñ˜D´×0NÑ0NÔOÐOr.   )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 tensorr2   r2   r.   r,   rN   zmeta_baddbmm.<locals>.<lambda>é  rV   r.   c                   ó   — y©Nzbatch2 must be a 3D tensorr2   r2   r.   r,   rN   zmeta_baddbmm.<locals>.<lambda>ê  rV   r.   c                  óV   •— d‰j                   › d‰ j                   › d‰j                   › �S )Nz+Input dtypes must be the same, got: input: z
, batch1: z
, batch2: rx   )Úbatch1Úbatch2r�   s   €€€r,   rN   zmeta_baddbmm.<locals>.<lambda>í  s0   ø€ Ð=¸d¿j¹j¸\ÈÐTZ×T`ÑT`ÐSaÐakÐlr×lxÑlxÐkyÐz€ r.   c            	      ó.   •— d‰› d‰› d‰ d   › d‰ d   › d�	S ©Nz@Expected size for first two dimensions of batch2 tensor to be: [ra   z] but got: [r   r¬   ú].r2   ©Úbatch2_sizesÚbsÚcontraction_sizes   €€€r,   rN   zmeta_baddbmm.<locals>.<lambda>õ  s:   ø€ ðØˆt�2Ð&Ð' |°LÀ±OÐ3DÀBÀ|ÐTUÁÐFWÐWYð[ð r.   )r‹   rJ  r?   rP   rn   rG   r€   r   )r�   r  r  r  r  Údim1Údim2Údim3Úbatch1_sizesr  r  r  s   ```      @@@r,   Úmeta_baddbmmr  â  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õ	
ôð �>‰>˜$Ÿ)™)›+Ó&Ð&r.   c                óH   — t        j                  | «      j                  «       S r)   ©r?   r—   r£   ©r�   rÚ   s     r,   Úmeta_bernoullir!  ý  s   € ô ×Ñ˜DÓ!×,Ñ,Ó.Ð.r.   c                 ó   — | S r)   r2   ©r�   r   rÚ   s      r,   Úmeta_bernoulli_r$    ó   € à€Kr.   c                 óH   — t        j                  | «      j                  «       S r)   r  r#  s      r,   Úmeta_bernoulli_pr'  	  s   € ô ×Ñ˜DÓ!×,Ñ,Ó.Ð.r.   c                 ó,   — t        j                  | «      S r)   ©r?   r—   r   s     r,   Úmeta_poissonr*    s   € ô ×Ñ˜DÓ!Ð!r.   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()r2   r2   r.   r,   rN   z6meta__fused_moving_avg_obs_fq_helper.<locals>.<lambda>'  rV   r.   rx   )r?   rP   rn   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                 r,   Ú$meta__fused_moving_avg_obs_fq_helperr;    sO   € ô  
‡L�LØ�$—(‘(“*ÑÙ\ôô ×Ñ˜D¬¯
©
Ô3€DÜ×Ñ˜TÓ" DÐ)Ð)r.   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 2Dr2   r2   r.   r,   rN   zmeta_mm.<locals>.<lambda>0  rV   r.   c                   ó   — y)Nzb must be 2Dr2   r2   r.   r,   rN   zmeta_mm.<locals>.<lambda>1  rV   r.   c            	      ó"   •— d‰› d‰ › d‰› d‰› d�	S )Nz/a and b must have same reduction dim, but got [ra   z] X [r  r2   )ÚM1ÚM2ÚNr  s   €€€€r,   rN   zmeta_mm.<locals>.<lambda>6  s(   ø€ ÐAÀ!ÀÀBÀrÀdÈ%ÐPRÈtÐSUÐVWÐUXÐXZÐ[€ r.   )r?   rP   rn   r€   r   )ÚaÚbr@  rA  rB  r  s     @@@@r,   Úmeta_mmrE  -  sz   û€ ô 
‡L�L�—‘“˜A‘Ñ5Ô6Ü	‡L�L�—‘“˜A‘Ñ5Ô6Ø�G‰G�E€A€rØ�G‰G�E€BˆÜ	‡L�LØ
ˆb‰Þ[ôð �;‰;�q˜!ÓÐr.   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þ  )r[   rÇ   Údimsr�   s     €€r,   r]   z+_compute_reduction_shape.<locals>.<genexpr>=  s$   øè ø€ ÒU¸q a¨t¡m�T—Z‘Z ’]¸Ó:ÑUùs   ƒ")rO   r¯   r�   r7   Úcompute_reduction_output_shaper€   )r�   rH  rS  s   `` r,   rQ  rQ  ;  s7   ù€ ÙÜÔUÄEÈ$Ï)É)ÓDTÔUÓUÐUä×/Ñ/°·
±
¸DÓAÐAr.   c                 óx   — t        | t        j                  j                  «      r| j                  j
                  S y)Nr9  )rY   r?   Ú_subclassesÚ
FakeTensorÚfake_devicerc   )rþ   s    r,   r:  r:  F  s-   € Ü�&œ%×+Ñ+×6Ñ6Ô7Ø×!Ñ!×&Ñ&Ð&àr.   Ú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                   |||   ||   ||   |
|   ||   «      «       Œ_ |S )NÚlnr   r¾   r)  rk  r1  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¬   r2   )rT  r   r¾   r)  rk  s        r,   Ú_formulaz+calc_conv_nd_return_shape.<locals>._formulaW  s.   € ð �Q˜‘U‘
˜Q ! a¡%™[Ñ(¨1Ñ,°Ñ2°QÑ6Ð6r.   r*   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Ó   r2   )rT  r   r¾   r)  rk  r*   s         r,   Ú_formula_transposedz6calc_conv_nd_return_shape.<locals>._formula_transposedh  s2   € ð" �Q‘˜!‰|˜a !™eÑ# a¨1¨q©5¡kÑ1°BÑ6¸Ñ:Ð:r.   rÓ   r¬   r   zInvalid channel dimensions)r÷  r€   ró   rY   r   r­   r¯   r°   )rN  r  r±   r”  rO  rP  rQ  rR  rV  rX  Úkernel_sizerH  Úout_channelsÚ	ret_shapeÚoutput_padding_listrÇ   s                   r,   Úcalc_conv_nd_return_shaper]  M  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õðð$ Ðr.   c                 ób   — t         j                  j                  | «      t         j                  k(  S r)   ©r?   Ú_prims_commonÚsuggest_memory_formatÚchannels_last©Útens    r,   Úis_channels_lastre  ²  s$   € Ü×Ñ×4Ñ4°SÓ9¼U×=PÑ=PÑPÐPr.   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 ©Nr9  r“   )r:  re  r?   rb  rg  r˜   Úpreserve_format)rN  r  s   €€r,   Úpick_memory_formatz%meta_conv.<locals>.pick_memory_formatÂ  sŒ   ø€ Ü�|Ó$¨Ò.Ü Ô-Ô1AÀ&Ô1IÜ×*Ñ*Ð*ä Ô-Ü×*Ñ*Ð*Ø×%Ñ%´E×4KÑ4KÐ%ÔLÜ×*Ñ*Ð*Ø×'Ñ'´e×6KÑ6KÐ'ÔLÜ×(Ñ(Ð(ð Mr.   r¬   r   r“   )r]  r‹   r   rô   )rN  r  r
  r±   r”  rO  rP  rR  rQ  rj  Ú	shape_outÚinput_channels_dimÚoutput_channels_dimr·   s   ``            r,   Ú	meta_convrn  ¶  s†   ù€ õ
)ô *ØØØØØØØÙ'‰¨Tó	€Ið ÐØÐØ×ÑÐ+Ó,°Ò1Ø)*ˆ	Ð%Ñ&à
×
 Ñ
  Ó
+€CØ
�&‰&Ñ1Ó3ˆ&Ó
4€CØ€Jr.   Úmkldnnc
           
      óÖ   — t        | ||||d|g «      }
| j                  |
«      }t        j                  }| j	                  «       dk(  rt        j
                  }|j                  |¬«      }|S )NFrç  r“   )r]  r   r?   rb  rn   Úchannels_last_3drô   )rN  r  r
  r”  r±   rO  rQ  ÚattrÚscalarsÚ	algorithmrk  r·   Úout_memory_formats                r,   Úmeta_mkldnn_convolution_defaultrv  è  sp   € ô .Ø˜& &¨'°8¸UÀFÈBó
ˆ	ð ×$Ñ$ YÓ/ˆÜ!×/Ñ/ÐØ×ÑÓ Ò"Ü %× 6Ñ 6ÐØ�f‰fÐ#4ˆfÓ5ˆØˆ
r.   c                 ób   — | j                  g | j                  d d ¢|j                  d   ‘­«      S ©Nrƒ   r   ©r   r€   )rN  r  r
  rr  rs  rt  s         r,   Úmeta_linear_pointwise_defaultrz  ÿ  s5   € ð ×%Ñ%Ð&Q¨×(:Ñ(:¸3¸BÐ(?Ð&QÀÇÁÈaÁÑ&QÓRÐRr.   Úmklc                 ób   — | j                  g | j                  d d ¢|j                  d   ‘­«      S rx  ry  )rN  Úpacked_weightÚorig_weightr
  rÅ   s        r,   Úmeta_mkl_linearr  
	  s:   € à×)Ñ)Ø@�,×$Ñ$ S bÐ)Ð@¨;×+<Ñ+<¸QÑ+?Ñ@óð r.   Úonednnc           
      óØ   — t        | ||||	d|
d «      }|t        j                  t        j                  fv sJ ‚| j	                  ||¬«      }|j                  t        j                  ¬«      }|S )NFrx   r“   )r]  r?   r$  r&  r   rô   rb  )r<   Úx_scaleÚx_zpÚwÚw_scaleÚw_zpr
  r±   r”  rO  rQ  Úoutput_scaleÚoutput_zero_pointÚoutput_dtyperr  rs  rt  rk  r·   s                      r,   Úmeta_qconv2d_pointwiserŠ  	  sp   € ô( .ØØØØØØØØó	
ˆ	ð ¤§¡¬u¯~©~Ð>Ñ>Ð>Ð>Ø�k‰k˜)¨<ˆkÓ8ˆØ�f‰f¤5×#6Ñ#6ˆfÓ7ˆØˆ
r.   c                 óÂ   — t        | j                  «      }|j                  d   |d<   |	t        j                  t        j                  fv sJ ‚| j                  ||	¬«      }|S )Nr¬   rƒ   rx   )r®   r€   r?   r$  r&  r   )r<   r‚  rƒ  r„  r…  r†  r
  r‡  rˆ  r‰  Úpost_op_nameÚpost_op_argsÚpost_op_algorithmr+  r·   s                  r,   Úmeta_qlinear_pointwiser�  7	  sU   € ô" ˜AŸG™G“}ˆàŸ7™7 1™:ˆ�RÑØ¤§¡¬u¯~©~Ð>Ñ>Ð>Ð>Ø�k‰k˜,¨lˆkÓ;ˆØˆ
r.   Ú	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‡   rC  )Ú#max_pool2d_checks_and_compute_shapern   r‹   r?   rb  rs   rG   rk   ©rÃ   rY  r±   r”  rO  Ú	ceil_modeÚnInputPlaneÚoutputHeightÚoutputWidthrª  r”   r‹   s               r,   Úmeta_quantized_max_pool2dr›  S	  s�   € ô 0Ø�; ¨°¸9ó
ñ		
ØØØð $)§9¡9£;°!Ò#3�—‘˜B”¸ˆÜ×+Ñ+ˆØ�9‰9‹;˜!ÒØ ¨{Ð;‰Dà˜K¨°{ÐCˆDÜ�{‰{ØØ—+‘+Ø—<‘<Ø'ô	
ð 	
r.   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] == ra   zbut got : dimension z] = ©rn   r€   )rn   Údim_sizer‹   rþ   s   €€€€r,   rN   z check_dim_size.<locals>.<lambda>u	  sP   ø€ Ð1°#°Ð6GÈÀzÐQVÐW[ÐV\Ð\^Ð_Ø  §¡£ Ð.?À¸zÈÈfÏlÉlÐ[cÑNdÐMeÐ
fñg€ r.   )r?   rP   rn   r€   )rþ   rn   rŸ  r‹   s   ````r,   Úcheck_dim_sizer   r	  s6   û€ Ü	‡L�LØ�
‰
‹˜ÑÒ> §¡¨XÑ 6¸$Ñ >ö	gõr.   c                 ó  — d„ } |d|«      \  }}	t        j                  t        |«      dv 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 intsr2   ©r‹  s   €r,   rN   z1meta_avg_pool2d.<locals>.unpack.<locals>.<lambda>‡	  ó   ø€ �l 4 &Ð(\Ð]€ r.   r   r¬   ©r?   rP   r­   ©r‹  rd  ÚHÚWs   `   r,   Úunpackzmeta_avg_pool2d.<locals>.unpack„	  óG   ø€ Ü�‰Ü�‹H˜ÐÛ]ô	
ð �‰FˆÜ�S“˜Q’‰A C¨¡FˆØ�!ˆtˆr.   rY  ©r   r¬   rÓ   c                   ó   — y©NzOavg_pool2d: stride must either be omitted, a single int, or a tuple of two intsr2   r2   r.   r,   rN   z!meta_avg_pool2d.<locals>.<lambda>�	  rV   r.   r   r¬   r±   r”  c                   ó   — y©Nzdivisor must be not zeror2   r2   r.   r,   rN   z!meta_avg_pool2d.<locals>.<lambda>�	  rV   r.   rË  r”  éýÿÿÿr‡  rƒ   r‡   rC  )r?   rP   r­   rn   r‹   Úpooling_output_shaper7   ra  Úpool2d_shape_checkrs   rG   rk   )rÃ   rY  r±   r”  r—  Úcount_include_padÚdivisor_overrider¬  ÚkHÚkWÚdHÚdWÚpadHÚpadWrª  r˜  ÚinputHeightÚ
inputWidthr™  rš  r”   r‹   s                         r,   Úmeta_avg_pool2drÀ  z	  s«  € òñ �M ;Ó/�F€BˆÜ	‡L�LÜˆF‹�yÐ Ùaôô ˆ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Ø�|‰|Ø#ô	ð r.   c                 óÀ   — t        | ||||||dd|	|
||||«       | j                  «       }|	}t        |||dz
  |«       t        |||dz
  |«       t        |||dz
  |«       y )Nr¬   r‡   rÓ   )rµ  rn   r   )rÃ   Ú
gradOutputrª  r¸  r¹  rº  r»  r¼  r½  r˜  r¾  r¿  r™  rš  Ú
mem_formatr�   ÚnOutputPlanes                    r,   Úavg_pool2d_backward_shape_checkrÅ  È	  s�   € ô" ØØ
Ø
Ø
Ø
ØØØ	Ø	ØØØØØØôð$ �9‰9‹;€DØ€Lä�:˜t T¨A¡X¨|Ô<Ü�:˜t T¨A¡X¨|Ô<Ü�:˜t T¨A¡X¨{Õ;r.   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 intsr2   r2   r.   r,   rN   z*meta_avg_pool2d_backward.<locals>.<lambda>
  rV   r.   r   c                   ó   — yr°  r2   r2   r.   r,   rN   z*meta_avg_pool2d_backward.<locals>.<lambda>
  rV   r.   c                   ó   — y)NzGavg_pool2d: padding must either be a single int, or a tuple of two intsr2   r2   r.   r,   rN   z*meta_avg_pool2d_backward.<locals>.<lambda>
  rV   r.   c                   ó   — yr²  r2   r2   r.   r,   rN   z*meta_avg_pool2d_backward.<locals>.<lambda>
  rV   r.   rË  r”  r³  r‡  rƒ   rC  )r?   rP   r­   r€   rn   r´  r7   ra  rÅ  rs   rG   rk   )ÚgradOutput_rÃ   rY  r±   r”  r—  r¶  r·  r¸  r¹  rº  r»  r¼  r½  Ú
input_sizerª  r˜  r¾  r¿  r™  rš  rÃ  s                         r,   Ú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Ø�|‰|Ø ô	ð r.   c                 óN  — 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«      }| 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 intsr2   r2   r.   r,   rN   z!meta_avg_pool3d.<locals>.<lambda>J
  rV   r.   r   r¬   rÓ   c                   ó   — y©NzJavg_pool3d: stride must be omitted, a single int, or a tuple of three intsr2   r2   r.   r,   rN   z!meta_avg_pool3d.<locals>.<lambda>R
  rV   r.   c                   ó   — y©NzBavg_pool3d: padding must be a single int, or a tuple of three intsr2   r2   r.   r,   rN   z!meta_avg_pool3d.<locals>.<lambda>Z
  rV   r.   ©rË  rç  c                   ó   — y©Nz9non-empty 4D or 5D (batch mode) tensor expected for inputr2   r2   r.   r,   rN   z!meta_avg_pool3d.<locals>.<lambda>b
  rV   r.   c                   ó   — yr²  r2   r2   r.   r,   rN   z!meta_avg_pool3d.<locals>.<lambda>g
  rV   r.   r”  r³  r‡  rƒ   zavg_pool3d()T)Úcheck_input_sizerË  )r?   rP   r­   r�   r‹   r´  Úpool3d_shape_checkr   )rÃ   rY  r±   r”  r—  r¶  r·  ÚkTr¸  r¹  ÚdTrº  r»  ÚpadTr¼  r½  rª  ÚnslicesÚitimeÚiheightÚiwidthÚotimeÚoheightÚowidths                           r,   Úmeta_avg_pool3dræ  =
  sU  € ô 
‡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Ù*ôð
 �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ÐIr.   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Ñ  r2   r2   r.   r,   rN   z*meta_avg_pool3d_backward.<locals>.<lambda>¡
  rV   r.   r   r¬   rÓ   c                   ó   — yrÓ  r2   r2   r.   r,   rN   z*meta_avg_pool3d_backward.<locals>.<lambda>©
  rV   r.   c                   ó   — yrÕ  r2   r2   r.   r,   rN   z*meta_avg_pool3d_backward.<locals>.<lambda>±
  rV   r.   rÖ  c                   ó   — yrØ  r2   r2   r.   r,   rN   z*meta_avg_pool3d_backward.<locals>.<lambda>¹
  rV   r.   c                   ó   — yr²  r2   r2   r.   r,   rN   z*meta_avg_pool3d_backward.<locals>.<lambda>¾
  rV   r.   r”  r³  r‡  rƒ   zavg_pool3d_backward())	r?   rP   r­   r�   r‹   r´  Úavg_pool3d_backward_shape_checkr   r€   )r¿  rÃ   rY  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                           r,   Úmeta_avg_pool3d_backwardrñ  “
  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Ÿ;™;Ó'Ð'r.   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   €r,   rN   z*meta_adaptive_avg_pool2d.<locals>.<lambda>ç
  ó   ø€ Ð4°T·Z±Z°LÐA€ r.   r‡  rC  )
r?   rP   r�   r€   rO   r7   ra  rs   rG   rk   )r�   Úoutput_sizer+  r”   s   `   r,   Úmeta_adaptive_avg_pool2drö  ã
  s|   ø€ ä	‡L�LØ�	‰	�Q‰Ò(˜$Ÿ)™) q™.ÛAôð —:‘:˜c˜r�?¤U¨;Ó%7Ñ7€LÜ×/Ñ/°Ó5€Mô �;‰;ØØ�j‰jØ�{‰{Ø#ô	ð r.   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   €r,   rN   z*meta_adaptive_avg_pool3d.<locals>.<lambda>ù
  rô  r.   r³  )r?   rP   r�   r   r€   rO   )r�   rõ  s   ` r,   Úmeta_adaptive_avg_pool3drù  õ
  sO   ø€ ä	‡L�LØ�	‰	�Q‰Ò(˜$Ÿ)™) q™.ÛAôð �>‰>˜$Ÿ*™* S b˜/¬E°+Ó,>Ñ>Ó?Ð?r.   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   €€r,   rN   z4meta__adaptive_avg_pool2d_backward.<locals>.<lambda>  s&   ø€ ð 6Ø6>·n±nÐ5EÐEUÐVWÐUXÐXdðf€ r.   r‡   rË  c                  ó"   •— d‰ j                   › �S )NzBadaptive_avg_pool2d_backward(): Expected 3D or 4D tensor, but got rþ  r™   s   €r,   rN   z4meta__adaptive_avg_pool2d_backward.<locals>.<lambda>	  s   ø€ ÐTÐUY×U_ÑU_ÐT`Ða€ r.   c                  ó<   •— d‰j                   › d‰ j                   › �S ©Nzexpected dtype z! for `grad_output` but got dtype rx   )rþ  r�   s   €€r,   rN   z4meta__adaptive_avg_pool2d_backward.<locals>.<lambda>  s   ø€ �/ $§*¡* Ð-NÈxÏ~É~ÐN^Ð_€ r.   r“   )r�   r¯   r?   rP   r‹   rG   r˜   re  rb  r   r€   rô   )rþ  r�   r�   r”   rÇ   s   ``  @r,   Ú"meta__adaptive_avg_pool2d_backwardr  þ
  sÇ   ú€ à�=‰=€DÜ�1�d‹^ò 
ˆÜ�‰Ø�M‰M˜!Ó˜qÑ ôfõ	
ð
ô 
‡L�LØ�‰	Ò�T˜Q‘YÛaôô 
‡L�LØ�
‰
�h—n‘nÑ$Ü_ôô ×+Ñ+€MÜ˜ÔÜ×+Ñ+ˆØ�>‰>˜$Ÿ*™*Ó%×(Ñ(°}Ð(ÓEÐEr.   c                 ód   — t        | d«       t        j                  |t        j                  ¬«      S )NÚadaptive_avg_pool3d_backwardr“   )Ú!_adaptive_pool_empty_output_checkr?   r—   rÓ  ©r¿  r�   s     r,   Ú"meta__adaptive_avg_pool3d_backwardr    s(   € ô & kÐ3QÔRÜ×Ñ˜D´×0NÑ0NÔOÐOr.   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 rü  rý  rþ  )r›  r¿  rÇ   s   €€€r,   rN   z3_adaptive_pool_empty_output_check.<locals>.<lambda>!  s/   ø€ Ø�*ð -Ø-8×->Ñ->Ð,?Ð?OÐPQÈsÐR^ð`ð r.   )r�   r¯   r?   rP   r‹   )r¿  r›  r�   rÇ   s   `` @r,   r  r    sG   ú€ Ø×Ñ€DÜ�1�d‹^ò 
ˆÜ�‰Ø×Ñ˜QÓ !Ñ#õõ	
ñ
r.   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   €r,   rN   z*meta_adaptive_max_pool2d.<locals>.<lambda>.  ó   ø€ ÐLÈUÏ[É[ÈMÐZ€ r.   r¬   r   c                  ó*   •— d‰j                   › d‰ › d�S )Nzjadaptive_max_pool2d(): Expected input to have non-zero size for non-batch dimensions, but input has sizes rü  rý  rþ  ©rÇ   rÃ   s   €€r,   rN   z*meta_adaptive_max_pool2d.<locals>.<lambda>3  ó%   ø€ ð'Ø',§{¡{ mÐ3CÀAÀ3ÀlðTð r.   rÓ   c                   ó   — y)NzCadaptive_max_pool2d(): internal error: output_size.size() must be 2r2   r2   r.   r,   rN   z*meta_adaptive_max_pool2d.<locals>.<lambda>;  rV   r.   rË  r‡   rx   r“   )r�   r?   rP   r¯   r‹   r­   r   rŸ   r7   ra  rô   )rÃ   rõ  r�   ÚdimHÚsizeBÚsizeDÚosizeHÚosizeWr�   r·   rœ   r”   rÇ   s   `           @r,   Úmeta_adaptive_max_pool2dr  (  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ˆ|Ðr.   c                 óN  ‡ ‡— ‰ j                   }t        j                  |dv ˆ fd„«       t        ‰ d«       t        j                  ‰j                  ‰ j                  k(  ˆ ˆfd„«       t        j                  ‰«      }‰j                  ‰j                  «      j                  |¬«      S )Nr  c                  ó"   •— d‰ j                   › �S )NzKadaptive_max_pooling2d_backward(): Expected 3D or 4D grad_output, but got: rþ  ©r¿  s   €r,   rN   z3meta_adaptive_max_pool2d_backward.<locals>.<lambda>^  s   ø€ Ð]Ð^i×^oÑ^oÐ]pÐq€ r.   Úadaptive_max_pool2d_backwardc                  ó<   •— d‰j                   › d‰ j                   › �S r  rx   )r¿  rÃ   s   €€r,   rN   z3meta_adaptive_max_pool2d_backward.<locals>.<lambda>e  s!   ø€ �/ %§+¡+ Ð.OÐP[×PaÑPaÐObÐc€ r.   r“   )
r�   r?   rP   r  rG   r7   ra  r   r€   rô   )r¿  rÃ   rœ   r�   r”   s   ``   r,   Ú!meta_adaptive_max_pool2d_backwardr  X  s‡   ù€ ð ×Ñ€DÜ	‡L�LØ�ˆÛqôô
 & kÐ3QÔRä	‡L�LØ�‰�{×(Ñ(Ñ(Ücôô
 ×/Ñ/°Ó6€MØ�?‰?˜5Ÿ;™;Ó'×*Ñ*¸Ð*ÓGÐGr.   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 )NrÖ  c                  ó"   •— d‰ j                   › �S )Nz:adaptive_max_pool3d(): Expected 4D or 5D tensor, but got: rþ  r  s   €r,   rN   z*meta_adaptive_max_pool3d.<locals>.<lambda>r  r  r.   r¬   r   c                  ó*   •— d‰j                   › d‰ › d�S )Nzjadaptive_max_pool3d(): Expected input to have non-zero size for non-batch dimensions, but input has sizes rü  rý  rþ  r  s   €€r,   rN   z*meta_adaptive_max_pool3d.<locals>.<lambda>w  r  r.   r‡   c                   ó   — y)NzCadaptive_max_pool3d(): internal error: output_size.size() must be 3r2   r2   r.   r,   rN   z*meta_adaptive_max_pool3d.<locals>.<lambda>  rV   r.   rç  rË  rx   )r�   r?   rP   r¯   r‹   r­   r   rŸ   )rÃ   rõ  r�   ÚdimDr  r  ÚosizeTr  r  r�   r·   rœ   rÇ   s   `           @r,   Úmeta_adaptive_max_pool3dr%  l  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à�ˆ<Ðr.   c                 óP   — t        | d«       |j                  |j                  «      S )NÚadaptive_max_pool3d_backward)r  r   r€   )r¿  rÃ   rœ   s      r,   Ú!meta_adaptive_max_pool3d_backwardr(  ˜  s"   € ô & kÐ3QÔRØ�?‰?˜5Ÿ;™;Ó'Ð'r.   c                 ó>   — |€t        d«      ‚| j                  |«      S )Nz:cannot repeat_interleave a meta tensor without output_size)ró   r   )Úrepeatsrõ  s     r,   Úmeta_repeat_interleave_Tensorr+  Ÿ  s%   € àÐÜÐWÓXÐXØ×Ñ˜[Ó)Ð)r.   c                 óî   — | j                   j                  sJ ‚|j                   j                  sJ ‚t        | j                  |j                  «      }| j	                  |t        | j                   «      ¬«      S rN  )rG   rÔ   r    r€   r   r   )ÚrealÚimagr�   s      r,   Úmeta_complexr/  ¦  s[   € ð �:‰:×'Ò'Ð'Ð'Ø�:‰:×'Ò'Ð'Ð'Ü! $§*¡*¨d¯j©jÓ9€IØ�>‰>˜)Ô+FÀtÇzÁzÓ+Rˆ>ÓSÐSr.   )Ú
fill_valuer‹   r0  c                ód   — | j                  || j                  «       ft        j                  ¬«      S rN  )r   rn   r?   r|   )r�   r‹   r0  s      r,   Únonzero_staticr2  ¯  s&   € ð �>‰>˜4 §¡£Ð,´E·J±Jˆ>Ó?Ð?r.   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                  «      }Œ^ ‰ j+                  |	|z   |
z   «      S )Nc                   ó   — y)Nz#at least one index must be providedr2   r2   r.   r,   rN   z#meta_index_Tensor.<locals>.<lambda>·  rV   r.   c                   ó   — y)Nz?tensors used as indices must be long, int, byte or bool tensorsr2   r2   r.   r,   rN   z#meta_index_Tensor.<locals>.<lambda>¿  rV   r.   c                  ó"   •— d‰ j                   › �S )Nú)too many indices for tensor of dimension rË  r™   s   €r,   rN   z#meta_index_Tensor.<locals>.<lambda>Æ  s   ø€ ÐGÈÏ	É	À{ÐS€ r.   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Ç   rz   Újr)  r�   s   €€€€€r,   rN   z#meta_index_Tensor.<locals>.<lambda>Ë  s<   ø€ Ð"8¸¿¹¸ÀZÐPQÈsð SJØJNÏ*É*ÈÐU_Ð`aÐdeÑ`eÐ_fð!h€ r.   r¬   c                  ó<   •— d‰j                   › dt        ‰ «      › d�S )Nr7  z (got rb   )r�   r­   ©rœ   r�   s   €€r,   rN   z#meta_index_Tensor.<locals>.<lambda>Ö  s!   ø€ Ð;¸D¿I¹I¸;ÀfÌSÐQXË\ÈNÐZ[Ð\€ r.   r   FrÓ   T)r?   rP   r-  Ú	enumeraterG   r|   r÷  r  Únonzeror­   r}   r�   r¯   r€   r°   ÚselectÚtorch._refsÚ_refsr®   r!   r³   r   )r�   rœ   r,  r=  ÚrefsÚstateÚhas_contiguous_subspacerH  Útransposed_indicesÚbefore_shapeÚafter_shapeÚreplacement_shapern   rÇ   rz   r9  r)  s   ``           @@@@r,   Úmeta_index_TensorrH  µ  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ð �>‰>˜,Ð):Ñ:¸[ÑHÓIÐIr.   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”  rO  Ú
transposedrR  rQ  Úoutput_maskÚbackend_grad_inputÚbackend_grad_weightÚbackend_grad_biass                 r,   Úmeta_convolution_backwardrT    sy   € ð  ÐØÐØÐà�1‚~Ø)×3Ñ3°F·K±K³MÓBÐØ�1‚~Ø*×4Ñ4°W·\±\³^ÓDÐØ�1‚~Ø(×2Ñ2°>ÓBÐàÐ 3Ð5FÐGÐGr.   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r  r2   r2   r.   r,   rN   zmeta_addbmm.<locals>.<lambda>=  rV   r.   c                   ó   — yr  r2   r2   r.   r,   rN   zmeta_addbmm.<locals>.<lambda>>  rV   r.   r   c                  óP   •— d‰ j                  d«      › d‰j                  d«      › �S )Nz8batch1 and batch2 must have same number of batches, got r   r‰   rŠ   ©r  r  s   €€r,   rN   zmeta_addbmm.<locals>.<lambda>A  s.   ø€ ÐJÈ6Ï;É;ÐWXË>ÐJZÐZ_Ð`f×`kÑ`kÐlmÓ`nÐ_oÐp€ r.   c            
      óš   •— d‰ j                  d«      › d‰ j                  d«      › d‰j                  d«      › d‰j                  d«      › d�	S )Nz#Incompatible matrix sizes for bmm (r¬   r<   rÓ   r‰   rb   rŠ   rY  s   €€r,   rN   zmeta_addbmm.<locals>.<lambda>E  sQ   ø€ Ø1°&·+±+¸a³.Ð1AÀÀ6Ç;Á;ÈqÃ>ÐBRð SØ—;‘;˜q“>Ð" ! F§K¡K°£NÐ#3°1ð6ð r.   c                   ó   — y)Nz.self tensor does not match matmul output shaper2   r2   r.   r,   rN   zmeta_addbmm.<locals>.<lambda>L  rV   r.   )r‹   rJ  r?   rP   rn   r   )r�   r  r  r  r  r  r  s    ``    r,   Úmeta_addbmmr\  7  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Ù@ôð �>‰>˜$Ÿ)™)›+Ó&Ð&r.   )Ú
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 ©rc   ©Úls   €r,   rN   z#meta__fused_adam_.<locals>.<lambda>g  ó   ø€ Ð=¼dÀ1»g¸YÐG€ r.   ©r?   rP   rY   r   )r�   ÚgradsÚexp_avgsÚexp_avg_sqsÚmax_exp_avg_sqsÚstate_stepsÚlrÚbeta1Úbeta2Úweight_decayÚepsÚamsgradÚmaximizer]  r^  rd  s                  @r,   Úmeta__fused_adam_rs  Q  s:   ø€ ð& �E˜8 [°/À;ÐOò 
ˆÜ�‰Ü�qœ$ÓÛGõ	
ñ
r.   c       	         ó¼   ‡— | |||||fD ])  Št        j                  t        ‰t        «      ˆfd„«       Œ+ d„ } || «       ||«       ||«       ||«       ||«      fS )Nc                  ó    •— dt        ‰ «      › �S ra  rb  rc  s   €r,   rN   z"meta__fused_adam.<locals>.<lambda>�  re  r.   c                 óR   — | D �cg c]  }t        j                  |«      ‘Œ c}S c c}w r)   r)  )Útensor_listr•  s     r,   Úempty_like_listz)meta__fused_adam.<locals>.empty_like_list„  s!   € Ø-8Ö9¨”× Ñ  Õ#Ò9Ð9ùÒ9s   …$rf  )r�   rg  rh  ri  rj  rk  rl  rm  rn  ro  rp  rq  rr  r]  r^  rx  rd  s                   @r,   Úmeta__fused_adamry  k  ss   ø€ ð& �E˜8 [°/À;ÐOò 
ˆÜ�‰Ü�qœ$ÓÛGõ	
ð
ò:ñ 	˜ÓÙ˜ÓÙ˜Ó!Ù˜Ó$Ù˜Ó(ðð r.   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 tensorr2   r2   r.   r,   rN   zmeta__int_mm.<locals>.<lambda>“  rV   r.   c                   ó   — y)Nzb must be a 2D tensorr2   r2   r.   r,   rN   zmeta__int_mm.<locals>.<lambda>”  rV   r.   c                  ó"   •— d‰ j                   › �S )Nzexpected self to be int8, got rx   )rC  s   €r,   rN   zmeta__int_mm.<locals>.<lambda>—  ó   ø€ Ð0°·±°	Ð:€ r.   c                  ó"   •— d‰ j                   › �S )Nzexpected mat2 to be int8, got rx   )rD  s   €r,   rN   zmeta__int_mm.<locals>.<lambda>›  r~  r.   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   r<   r¬   r‰   rb   rŠ   ©rC  rD  s   €€r,   rN   zmeta__int_mm.<locals>.<lambda>Ÿ  sM   ø€ Ø5°a·f±f¸Q³i°[ÀÀ!Ç&Á&ÈÃ)Àð MØ—6‘6˜!“9�+˜Q˜qŸv™v a›y˜k¨ð,ð r.   rx   )r?   rP   rn   rG   r  r‹   r   r  r�  s   ``r,   Ú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ÐAr.   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 tensorr2   r2   r.   r,   rN   z2meta__convert_weight_to_int4pack.<locals>.<lambda>©  rV   r.   c                  ó"   •— d‰ j                   › �S )Nzexpected w to be uint8, got rx   ©r„  s   €r,   rN   z2meta__convert_weight_to_int4pack.<locals>.<lambda>¬  ó   ø€ Ð.¨q¯w©w¨iÐ8€ r.   r   r¬   é   r#  é    rx   )r?   rP   rn   rG   Úuint8r‹   r   r  )r„  Úinner_k_tilesrÝ   r)  s   `   r,   Ú meta__convert_weight_to_int4packr�  §  sž   ø€ ä	‡L�L�—‘“˜A‘Ñ>Ô?Ü	‡L�LØ	�‰”5—;‘;ÐÛ8ôð 	
�‰ˆq‹	€AØ	�‰ˆq‹	�A‰€AØ�;‰;à�‰FØ�- "Ñ$Ñ%ØØ˜QÑð		
ô �k‰kð ó ð r.   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 tensorr2   r2   r.   r,   rN   z*meta__weight_int4pack_mm.<locals>.<lambda>½  rV   r.   rË  c                   ó   — y)Nzw must be a 4D tensorr2   r2   r.   r,   rN   z*meta__weight_int4pack_mm.<locals>.<lambda>¾  rV   r.   c                  ó"   •— d‰ j                   › �S ©Nz#expected x to be f32/f16/bf16, got rx   ©r<   s   €r,   rN   z*meta__weight_int4pack_mm.<locals>.<lambda>Á  ó   ø€ Ð5°a·g±g°YÐ?€ r.   c                  ó"   •— d‰ j                   › �S )Nzexpected w to be int32, got rx   r‡  s   €r,   rN   z*meta__weight_int4pack_mm.<locals>.<lambda>Å  rˆ  r.   r   r‰  rx   )
r?   rP   rn   rG   r$  r%  r&  r  r   r‹   )r<   r„  Úq_group_sizeÚq_scale_and_zeross   ``  r,   Ú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ˆ;Ó?Ð?r.   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�  r2   r2   r.   r,   rN   z*meta__weight_int8pack_mm.<locals>.<lambda>Ì  rV   r.   c                  ó"   •— d‰ j                   › �S r“  rx   r”  s   €r,   rN   z*meta__weight_int8pack_mm.<locals>.<lambda>Ï  r•  r.   c                   ó   — yr…  r2   r2   r.   r,   rN   z*meta__weight_int8pack_mm.<locals>.<lambda>Ñ  rV   r.   c                  ó"   •— d‰ j                   › �S )Nzexpected w to be int8, got rx   r‡  s   €r,   rN   z*meta__weight_int8pack_mm.<locals>.<lambda>Ô  s   ø€ Ð-¨a¯g©g¨YÐ7€ r.   r   rx   )
r?   rP   rn   rG   r$  r%  r&  r  r   r‹   )r<   r„  Úq_scaless   `` r,   Úmeta__weight_int8pack_mmr   Ê  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ˆ;Ó;Ð;r.   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: ÚDr„   )Úx1s   €r,   rN   z$meta_cdist_forward.<locals>.<lambda>Ý  ó   ø€ ÐCÀBÇFÁFÃHÀ:ÈQÐO€ r.   c                  ó,   •— d‰ j                  «       › d�S )Nz1cdist only supports at least 2D tensors, X2 got: r£  r„   )Úx2s   €r,   rN   z$meta_cdist_forward.<locals>.<lambda>á  r¥  r.   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Š   )r¤  r§  s   €€r,   rN   z$meta_cdist_forward.<locals>.<lambda>å  s,   ø€ ÐFÀrÇwÁwÈrÃ{ÀmÐSXÐY[×Y`ÑY`ÐacÓYdÐXeÐf€ r.   c                   ó   — y)Nz=cdist only supports floating-point dtypes, X1 got: {x1.dtype}r2   r2   r.   r,   rN   z$meta_cdist_forward.<locals>.<lambda>é  rV   r.   c                   ó   — y)Nz=cdist only supports floating-point dtypes, X2 got: {x2.dtype}r2   r2   r.   r,   rN   z$meta_cdist_forward.<locals>.<lambda>í  rV   r.   r   c                   ó   — y)Nz)cdist only supports non-negative p valuesr2   r2   r.   r,   rN   z$meta_cdist_forward.<locals>.<lambda>ï  rV   r.   ©Nr¬   rÓ   c                  ó   •— d‰ › �S )Nz%possible modes: None, 1, 2, but was: r2   )Úcompute_modes   €r,   rN   z$meta_cdist_forward.<locals>.<lambda>ò  s   ø€ Ð7¸°~ÐF€ r.   r‡  )r?   rP   rn   r‹   r7   Úis_float_dtyperG   r€   r®   Úbroadcast_shapesÚextendr   )	r¤  r§  r   r®  Úr1Úr2Úbatch_tensor1Úbatch_tensor2r+  s	   `` `     r,   Úmeta_cdist_forwardr¶  Ù  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˜Ô!Ø�<‰<˜Ó%Ð%r.   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®   r?   r°  Úcopyr±  ÚmathÚprodÚ
zeros_likerJ  r—   r˜   )r  r¤  r§  r   ÚcdistÚc1r²  r³  r´  rµ  rF  Útensor1_expand_sizeÚbatch_products                r,   Úmeta_cdist_backwardrÀ  ý  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ÐFr.   c	                 ój  ‡ ‡‡‡‡‡— 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        d«      \  }}}‰�ªt        j                  ||k(  d„ «       t        j                  ‰j                  ‰ j                  k(  ˆˆ fd	„«       t        j                  ‰j                  dk(  ˆfd
„«       t        j                  ‰j                  «       ‰j                  «       k(  ˆˆfd„«       ˆfd„Šd„ Šˆˆfd„}t        ‰«      dk7  rx‰j                  ‰j                  d«      «      }‰j                  ‰j                  «       «      }||k(  r"‰j                  |	‰ j                  d«      «      }nÜ‰j                  d«      }nÊ |‰ ‰|
|«      }|||fv s|s!‰j                  ‰j                  d«      «      }n‰j                  d«      }‰j                  |	«      }‰j                  d   }||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 rx   ©rœ   s   €r,   rN   z$meta_embedding_bag.<locals>.<lambda>"  ó   ø€ Ð:¸7¿=¹=¸/ÐJ€ r.   c                  ó"   •— d‰ j                   › �S )Nz(expected offsets to be long or int, got rx   )r<  s   €r,   rN   z$meta_embedding_bag.<locals>.<lambda>&  rÄ  r.   c                  ó"   •— d‰ j                   › �S )Nz/expected weight to be floating point type, got rx   )r  s   €r,   rN   z$meta_embedding_bag.<locals>.<lambda>*  s   ø€ ÐAÀ&Ç,Á,ÀÐP€ r.   r   r¬   c                   ó   — y©Nz1include_last_offset: numBags should be at least 1r2   r2   r.   r,   rN   z$meta_embedding_bag.<locals>.<lambda>1  rV   r.   r‡   c                   ó   — y)Nz@embedding_bag: per_sample_weights only supported with mode='sum'r2   r2   r.   r,   rN   z$meta_embedding_bag.<locals>.<lambda>;  rV   r.   c                  ó>   •— d‰j                   › d‰ j                   › d�S )Nzexpected weight (z) and per_sample_weights (z) to have same dtyperx   )Úper_sample_weightsr  s   €€r,   rN   z$meta_embedding_bag.<locals>.<lambda>?  s%   ø€ Ð'¨¯© ~Ð5OÐPb×PhÑPhÐOiÐi}Ð~€ r.   c                  ó$   •— d‰ j                   › d�S )Nz1expected per_sample_weights to be 1D tensor, got r£  rË  )rË  s   €r,   rN   z$meta_embedding_bag.<locals>.<lambda>C  s   ø€ ÐGÐHZ×H_ÑH_ÐG`Ð`aÐb€ r.   c                  óN   •— d‰j                  «       › d‰ j                  «       › d�S )Nz%expected per_sample_weights.numel() (z$ to be the same as indices.numel() (rb   ©r~   )rœ   rË  s   €€r,   rN   z$meta_embedding_bag.<locals>.<lambda>G  s4   ø€ Ø7Ð8J×8PÑ8PÓ8RÐ7Sð T6Ø6=·m±m³oÐ5FÀaðIð r.   c                 óD   •—  ‰| ||«      xr |j                  d«      dk(  S ©Nr   r¬   ©r±   )r÷   r2  rÏ   Úpadding_idxÚis_fast_path_index_selects       €r,   Úis_fast_path_index_select_scalez;meta_embedding_bag.<locals>.is_fast_path_index_select_scaleM  s(   ø€ á% c¨6°;Ó?ÒXÀEÇLÁLÐQRÃOÐWXÑDXð	
r.   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   )rG   r?   rC   rA   r±   )r÷   rÏ   rÒ  s      r,   rÓ  z5meta_embedding_bag.<locals>.is_fast_path_index_selectR  sb   € à�Y‰Yœ%Ÿ+™+Ñ%Ò@¨¯©´e·j±jÑ)@ò  Ø—
‘
˜1“ Ñ"ò à—‘˜aÓ  AÑ%ò ð ˜a‘ð		
r.   c                 ó2   •— |� ‰| |||«      S  ‰| ||«      S r)   r2   )r÷   r2  rÏ   rÒ  rÓ  rÔ  s       €€r,   Úis_fast_pathz(meta_embedding_bag.<locals>.is_fast_pathZ  s)   ø€ ØÐÙ2°3¸¸vÀ{ÓSÐSá,¨S°&¸+ÓFÐFr.   Úcpuc                   ó   — yrÈ  r2   r2   r.   r,   rN   z$meta_embedding_bag.<locals>.<lambda>t  rV   r.   )r?   rP   rG   r|   r÷  r7   r¯  r‹   r   r¯   r�   r~   r:  r€   )r  rœ   r<  Úscale_grad_by_freqr!  ÚsparserË  Úinclude_last_offsetrÒ  Únum_bagsrÏ   ÚMODE_SUMÚ	MODE_MEANÚMODE_MAXrØ  Ú
offset2bagÚbag_sizeÚmax_indicesÚfast_path_sumÚnumBagsrÓ  rÔ  s   ```   `             @@r,   Ú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Ñ!€Hˆi˜àÐ%Ü�‰Ø�HÑÙVô	
ô 	�‰Ø×$Ñ$¨¯©Ñ4Ü~ô	
ô 	�‰Ø×#Ñ# 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Ð4r.   c                 óŽ   — t        | ||g|¢­Ž \  }}}}t        |«      dk(  r|j                  |j                  «       «      }||||fS )NrÙ  )rç  r:  r   r‹   )r  rœ   r<  r9   rÏ   râ  rã  rä  s           r,   Úmeta_embedding_bag_forward_onlyré  }  sX   € ä0BØ�˜ð1Ø#'ò1Ñ-€FˆJ˜ +ô �7Ó˜uÒ$Ø×$Ñ$ W§\¡\£^Ó4ˆØ�:˜x¨Ð4Ð4r.   c                 ó¶   — |r|S | j                   j                  s| j                   j                  r| j                   S |rt        j                  S | j                   S r)   )rG   rÔ   rÍ   r?   r|   )rÃ   rG   Úpromote_int_to_longs      r,   Ú_get_reduction_dtyperì  ‡  sD   € áØˆà‡{�{×$Ò$¨¯©×(>Ò(>Ø�{‰{ÐÙ	Ü�z‰zÐà�;‰;Ðr.   rx   c                óž   — t        | |d¬«      }t        j                  | j                  |«      }t	        | ||«      }| j                  ||¬«      S )NT)rë  rx   )rì  r7   rP  r€   rQ  r   )rÃ   rH  rS  rG   r‰  r+  s         r,   Úmeta_nansumrî  ”  sI   € ô (¨¨uÈ$ÔO€LÜ×Ñ §¡¨TÓ2€DÜ+¨E°4¸ÓA€LØ�?‰?˜<¨|ˆ?Ó<Ð<r.   c           	      ó¤   — t        j                  | j                  t        t	        | j                  «       «      «      «      }| j                  |«      S r)   )r7   rI  r€   rO   r¯   rn   r   )rÃ   r+  s     r,   Úmeta_medianrð  �  s<   € ä×7Ñ7Ø�‰”Uœ5 §¡£Ó-Ó.ó€Lð �?‰?˜<Ó(Ð(r.   c                 ó  — t        | «      dk(  rt        j                  d«       t        j                  | j                  |f«      }t        | ||«      }| j                  |«      | j                  |t        j                  ¬«      fS )Nr9  zmedian CUDA with indices outputrx   )	r:  r7   Úalert_not_deterministicrP  r€   rQ  r   r?   r|   )rÃ   rn   rS  r+  s       r,   Úmeta_median_mode_dimró  ¥  sp   € ô �5Ó˜VÒ#Ü×%Ñ%Ð&GÔHÜ
×
Ñ
˜uŸ{™{¨S¨FÓ
3€CÜ+¨E°3¸Ó@€Là�‰˜Ó%Ø�‰˜¬E¯J©JˆÓ7ðð r.   c                 ó   — | S r)   r2   r™   s    r,   Úmeta_logical_not_rõ  »  r%  r.   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 tensorr2   r2   r.   r,   rN   zmeta_repeat.<locals>.<lambda>Ä  rV   r.   r‘  )r?   rP   r­   rn   rO   r€   r¯   r   )r�   r*  Únum_new_dimensionsÚpadded_sizerÇ   Útarget_sizes         r,   Ú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 r)   r2   r™   s    r,   Ú
meta_zero_rý  Ï  r%  r.   c                 óz   — t        |t        j                  «      r t        | j                  |j                  «       | S r)   ©rY   r?   r   rR   r€   ©r�   rŒ   s     r,   Úmeta_binop_inplacer  Ô  s)   € ô �%œŸ™Ô&Ü §
¡
¨E¯K©KÔ8Ø€Kr.   c                 óz   — t        |t        j                  «      r t        | j                  |j                  «       | S r)   rÿ  )r�   rŒ   r  s      r,   Úmeta_binop_inplace_alphar  å  s)   € ô �%œŸ™Ô&Ü §
¡
¨E¯K©KÔ8Ø€Kr.   c                 ó8   — t        | t        j                  ¬«      S ©N©r4   )r=   r   r8   )r�   Úkwargss     r,   Ú
meta_roundr  ó  s   € äØÔ<×DÑDôð r.   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 rx   )r£  r�   s   €€r,   rN   z#shift_dtype_check.<locals>.<lambda>ý  s   ø€ �7�)ÐRÐSW×S]ÑS]ÐR^Ð_€ r.   c                  ó&   •— ‰ › d‰j                   › �S )Nz6: Expected shift value to have an integral dtype. Got rx   ©r£  rd  s   €€r,   rN   z#shift_dtype_check.<locals>.<lambda>  s   ø€ �w�iÐUÐVY×V_ÑV_ÐU`Ða€ r.   c                  ó   •— ‰ › d‰› �S )Nz): Expected shift value to be an int. Got r2   r  s   €€r,   rN   z#shift_dtype_check.<locals>.<lambda>  s   ø€ �w�iÐHÈÈÐN€ r.   )r?   rP   r7   r  rG   rY   r   r   )r£  r�   rd  s   ```r,   Úshift_dtype_checkr  ú  sp   ú€ Ü	‡L�LÜ×Ñ˜tŸz™zÓ*Ü_ôô �#”u—|‘|Ô$Ü�‰Ü×"Ñ" 3§9¡9Ó-Üaõ	
ô
 	�‰Ü�sœGÓ$ÜNõ	
r.   c                 óT   — t        d| |«       t        | |t        j                  ¬«      S )NÚrshiftr  ©r  r=   r   r8   r   s     r,   Úmeta_rshiftsr    ó)   € ä�h  eÔ,ÜØˆeÔ$C×$KÑ$Kôð r.   c                 óT   — t        d| |«       t        | |t        j                  ¬«      S )NÚlshiftr  r  r   s     r,   Úmeta_lshiftsr    r  r.   c                 ó8   — | j                  | j                  «      S r)   ry  r™   s    r,   Ú	meta_zeror    s   € à�>‰>˜$Ÿ*™*Ó%Ð%r.   c                 ó   — | S r)   r2   ©r�   rd  s     r,   Ú
meta_fill_r     r%  r.   c                 ó,   — t        j                  | «      S r)   r)  r  s     r,   Ú	meta_fillr  %  ó   € ä×Ñ˜DÓ!Ð!r.   c                 ó   — | S r)   r2   r™   s    r,   Ú
meta_relu_r   *  r%  r.   c                 ó,   — t        j                  | «      S r)   r)  ©r�   rœ   r›   Ú
accumulates       r,   Úmeta_index_putr$  /  r  r.   c                 óF   — t        | j                  |j                  «       | S r)   )rR   r€   )r�   r:  Úvalues      r,   Úmeta_masked_fill_r'  4  s   € ä˜DŸJ™J¨¯
©
Ô3Ø€Kr.   c                 óŠ   — | j                  | j                  «       «      j                  t        j                  | «      ¬«      }|S r3  )r   r‹   rô   r7   ra  )r�   r:  r2  Úmasked_scales       r,   Úmeta__masked_scaler*  :  s<   € à—>‘> $§)¡)£+Ó.×1Ñ1Ü×1Ñ1°$Ó7ð 2ó €Lð Ðr.   c                 óä   — t        j                  |j                  t         j                  t         j                  fv d„ «       t        j                  | j                  |j                  k(  d„ «       | S )Nc                   ó   — y)NzMask must be bool or uint8r2   r2   r.   r,   rN   z&meta_masked_scatter_.<locals>.<lambda>E  rV   r.   c                   ó   — y)Nzdmasked_scatter: expected self and source to have same dtypes but got {self.dtype} and {source.dtype}r2   r2   r.   r,   rN   z&meta_masked_scatter_.<locals>.<lambda>I  rV   r.   )r?   rP   rG   r-  r‹  )r�   r:  r/  s      r,   Úmeta_masked_scatter_r.  B  sT   € ä	‡L�LØ�
‰
”u—z‘z¤5§;¡;Ð/Ð/Ñ1Uôô 
‡L�LØ�
‰
�f—l‘lÑ"ñ	9ôð
 €Kr.   c                 ó„   — t        | |«      \  } }t        j                  | t        j                  ¬«      }t	        |||«      S r3  )r!   r?   r—   r˜   r.  )r�   r:  r/  rÏ   s       r,   Úmeta_masked_scatterr0  O  s;   € ô " $¨Ó-�J€Dˆ$Ü×Ñ˜d´%×2IÑ2IÔJ€FÜ ¨¨fÓ5Ð5r.   c                 ó$   — | j                  |«      S r)   rJ  )r�   r:  r  s      r,   Úmeta_masked_scatter_backwardr2  W  s   € à�>‰>˜%Ó Ð r.   c                 ó   — | S r)   r2   r"  s       r,   Úmeta_index_put_r4  \  r%  r.   c                 ó8   — | j                  | j                  «      S r)   )Úviewr€   r™   s    r,   Ú
meta_aliasr7  a  s   € à�9‰9�T—Z‘ZÓ Ð r.   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r  r2   r2   r.   r,   rN   z)common_meta_baddbmm_bmm.<locals>.<lambda>g  rV   r.   c                   ó   — yr  r2   r2   r.   r,   rN   z)common_meta_baddbmm_bmm.<locals>.<lambda>h  rV   r.   r   rÓ   r¬   c            	      ó.   •— d‰› d‰› d‰ d   › d‰ d   › d�	S r  r2   r  s   €€€r,   rN   z)common_meta_baddbmm_bmm.<locals>.<lambda>u  s5   ø€ ÐRÐSUÐRVØ
ÐÐ˜l¨<¸©?Ð*;¸2¸lÈ1¹oÐ=NÈbðR€ r.   c                   ó   — y)Nzself must be a 3D tensorr2   r2   r.   r,   rN   z)common_meta_baddbmm_bmm.<locals>.<lambda>~  rV   r.   c                  ó0   •— d‰ › d‰j                  «       › �S )Nz*Expected an input tensor shape with shape z but got shape: rŠ   )rõ  Úself_baddbmms   €€r,   rN   z)common_meta_baddbmm_bmm.<locals>.<lambda>�  s!   ø€ Ð@ÀÀÐM]Ð^j×^oÑ^oÓ^qÐ]rÐs€ r.   )r?   rP   rn   r‹   r   )r  r  Úis_bmmr>  r  Úres_rowsÚres_colsrÏ   r  r  r  rõ  s      `    @@@@r,   Úcommon_meta_baddbmm_bmmrB  f  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ô	
ð
 €Mr.   c                 ó   — t        | |d«      S )NT)rB  )r�   r  s     r,   Úmeta_bmmrD  ‡  s   € ä" 4¨¨tÓ4Ð4r.   c                 óh   — | |z  }| |z  }|dk7  r"t        |dk  «      t        |dk  «      k7  r|dz  }|S rÐ  )r-  )r<   ÚyÚqr%  s       r,   Údiv_rtnrH  Œ  sB   € Ø	ˆQ‰€AØ	ˆA‰€Að 	ˆA‚v”4˜˜A™“;¤$ q¨1¡u£+Ò-Ø	ˆQ‰ˆØ€Hr.   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Ö  )rH  )Ú	inputSizeÚ
kernelSizer¢  r£  r±   rO  r—  Ú
outputSizes           r,   Úpooling_output_shape_pad_lrrM  –  sŒ   € ô 	ØØñàñð ˜* q™.Ñ)ñ*ð ñ	ñ
 'ˆv˜Šz¨Añ/ð ó	
ð ñ		ð ñ Ø˜‰N˜fÑ$¨	°EÑ(9Ò9Ø˜!‰OˆJØÐr.   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 zeror2   r2   r.   r,   rN   z&pooling_output_shape.<locals>.<lambda>²  rV   r.   c                  ó   •— d‰ › �S )Nz'pad must be non-negative, but got pad: r2   )Úpads   €r,   rN   z&pooling_output_shape.<locals>.<lambda>³  s   ø€ Ð%LÈSÈEÐ#R€ r.   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=r2   )rO  rK  rQ  s   €€€r,   rN   z&pooling_output_shape.<locals>.<lambda>¶  s'   ø€ ØOÐPSÈuð UØ%˜, n°X°Jð@ð r.   )r?   rP   rM  )rJ  rK  rQ  r±   rO  r—  s    `` ` r,   r´  r´  ±  ss   ú€ Ü	‡L�L�˜1‘ÑAÔBÜ	‡L�L�˜‘ÓRÔSÜ	‡L�LØ�˜a‘ 8Ñ+¨aÑ/°AÑ5Ñ5õ	
ôô 'Ø�:˜s C¨°¸9óð r.   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}r2   r2   r.   r,   rN   z$pool2d_shape_check.<locals>.<lambda>Ö  rV   r.   c                   ó   — y)Nz>stride should be greater than zero, but got dH: {dH}, dW: {dW}r2   r2   r.   r,   rN   z$pool2d_shape_check.<locals>.<lambda>Ú  rV   r.   c                   ó   — y)Nz\dilation should be greater than zero, but got dilationH: {dilationH}, dilationW: {dilationW}r2   r2   r.   r,   rN   z$pool2d_shape_check.<locals>.<lambda>Þ  rV   r.   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()}r2   r2   r.   r,   rN   z$pool2d_shape_check.<locals>.<lambda>æ  rV   r.   c                  ó*   •— d‰ j                  «       › �S )NzYExpected 3D or 4D (batch mode) tensor with optional 0 dim batch size for input, but got: rŠ   r  s   €r,   rN   z$pool2d_shape_check.<locals>.<lambda>í  s   ø€ ÐoÐpu×pzÑpzÓp|Ðo}Ð~€ r.   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 = r2   )r¸  r¹  r¼  r½  s   €€€€r,   rN   z$pool2d_shape_check.<locals>.<lambda>ò  s&   ø€ ð Ø��y   g¨b¨T°¸¸ð>€ r.   c                  ó.   •— d‰› d‰ › d‰› d‰› d‰› d‰› d�S ©NzGiven input size: (r<   z). Calculated output size: (z). Output size is too smallr2   )r¾  r¿  r˜  rÄ  r™  rš  s   €€€€€€r,   rN   z$pool2d_shape_check.<locals>.<lambda>ø  s:   ø€ Ð% k ]°!°K°=ÀÀ*Àð N$Ø$0 >°°<°.ÀÀ+Àð O#ð#€ r.   )rn   r?   rP   r‹   rb  )rÃ   r¸  r¹  rº  r»  r¼  r½  Ú	dilationHÚ	dilationWr˜  r¾  r¿  r™  rš  r”   r�   Ú
valid_dimsrÄ  s   ```  ``  `````   @r,   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Ñ.÷	#ð 	#õr.   rß  rÜ  r¸  r¹  rÝ  rº  r»  ÚpTÚpHÚpWÚ	dilationTr\  r]  rà  rá  râ  rã  rä  rå  rÚ  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: r2   )r¸  rÜ  r¹  s   €€€r,   rN   z$pool3d_shape_check.<locals>.<lambda>  ó#   ø€ ðØ�$�f˜R˜D  r dð,ð r.   c                  ó   •— d‰› d‰ › d‰› �S )Nz0stride should be greater than zero, but got dT: z, dH: z, dW: r2   )rº  rÝ  r»  s   €€€r,   rN   z$pool3d_shape_check.<locals>.<lambda>!  re  r.   c                  ó   •— d‰› d‰ › d‰› �S )Nz9dilation should be greater than zero, but got dilationT: z, dilationH: z, dilationW: r2   )r\  rb  r]  s   €€€r,   rN   z$pool3d_shape_check.<locals>.<lambda>(  s$   ø€ ðØ#˜ M°)°¸MÈ)ÈðVð r.   rÖ  c                  ó&   •— ‰ › d‰j                   › �S )Nz/: Expected 4D or 5D tensor for input, but got: rþ  )r£  rÃ   s   €€r,   rN   z$pool3d_shape_check.<locals>.<lambda>0  s   ø€ �7�)ÐJÈ5Ï;É;È-ÐX€ r.   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   €€€r,   rN   z$pool3d_shape_check.<locals>.<lambda>9  s3   ø€ Ø�)ð -Ø-2¯[©[¨MØ+¨E¯J©J°q«M¨?Ð:KðMð r.   c                  ó.   •— d‰› d‰ › d‰› d‰› d‰› d‰› d�S )Nzinput image (T: rï  rÔ  z ) smaller than kernel size (kT: ú kH: ú kW: rb   r2   )rá  rà  râ  r¸  rÜ  r¹  s   €€€€€€r,   rN   z$pool3d_shape_check.<locals>.<lambda>C  s9   ø€ Ø" 5 '¨¨g¨Y°d¸6¸(ð C$Ø$& 4 u¨R¨D°°b°T¸ð<ð r.   rÓ   c                  ó,   •— d‰› d‰› d‰ › d‰› d‰› d‰› �S )NzHpad should be smaller than or equal to half of kernel size, but got kT: rm  rl  z padT: z padW: z padH: r2   )r¸  rÜ  r¹  r`  r_  ra  s   €€€€€€r,   rN   z$pool3d_shape_check.<locals>.<lambda>K  s6   ø€ ðØ�$�e˜B˜4˜u R D¨°¨t°7¸2¸$¸gÀbÀTðKð r.   r¬   c                  ó:   •— d‰› d‰› d‰ › d‰› d‰› d‰› d‰› d‰› d�S r[  r2   )rá  rà  râ  rß  rä  rã  rå  s   €€€€€€€r,   rN   z$pool3d_shape_check.<locals>.<lambda>S  sI   ø€ Ø! ' ¨!¨E¨7°!°G°9¸A¸f¸Xð F(Ø(/ y°°%°¸¸'¸À!ÀFÀ8ð L'ð(ð r.   )r�   r?   rP   r¯   r‹   )rÃ   rß  rÜ  r¸  r¹  rÝ  rº  r»  r_  r`  ra  rb  r\  r]  rà  rá  râ  rã  rä  rå  r£  rÚ  r�   rÇ   s   `````````````````````  @r,   rÛ  rÛ  þ  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°!¡|÷	
ñ 	
õr.   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�   rÛ  r   )rÃ   r¿  rœ   rß  rÜ  r¸  r¹  rÝ  rº  r»  r_  r`  ra  rb  r\  r]  rà  rá  râ  rã  rä  rå  r£  r�   s                           r,   Úmax_pool3d_backward_shape_checkrr  [  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Õ3r.   c                 óä   — | j                   }t        | ||||||||	|
|ddd|||||||d«       t        |||dz
  |«       t        |||dz
  |«       t        |||dz
  |«       t        |||dz
  |«       y )Nr¬   TrË  r‡   rÓ   rq  )rÃ   r¿  rß  rÜ  r¸  r¹  rÝ  rº  r»  r_  r`  ra  rà  rá  râ  rã  rä  rå  r£  r�   s                       r,   rí  rí  ™  s¡   € ð* �:‰:€DäØØØ
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø	Ø	Ø	ØØØØØØØØô-ô2 �;  d¨Q¡h°Ô8Ü�;  d¨Q¡h°Ô6Ü�;  d¨Q¡h°Ô8Ü�;  d¨Q¡h°Õ7r.   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¥  r2   r¦  s   €r,   rN   zEmax_pool2d_checks_and_compute_shape.<locals>.unpack.<locals>.<lambda>Û  r§  r.   r   r¬   r¨  r©  s   `   r,   r¬  z3max_pool2d_checks_and_compute_shape.<locals>.unpackØ  r­  r.   rY  r®  c                   ó   — y)NzOmax_pool2d: stride must either be omitted, a single int, or a tuple of two intsr2   r2   r.   r,   rN   z5max_pool2d_checks_and_compute_shape.<locals>.<lambda>å  rV   r.   r   r±   r”  rO  r³  r‡  rƒ   rË  c                   ó   — y)NzMnon-empty 4D (batch mode) tensor expected for input with channels_last layoutr2   r2   r.   r,   rN   z5max_pool2d_checks_and_compute_shape.<locals>.<lambda>ö  rV   r.   r  c                   ó   — y)Nz9non-empty 3D or 4D (batch mode) tensor expected for inputr2   r2   r.   r,   rN   z5max_pool2d_checks_and_compute_shape.<locals>.<lambda>û  rV   r.   Fc                   ó   — y)Nz?Unsupport memory format. Supports only ChannelsLast, Contiguousr2   r2   r.   r,   rN   z5max_pool2d_checks_and_compute_shape.<locals>.<lambda>   rV   r.   )r?   rP   r­   r‹   r7   ra  rb  rn   r˜   r´  rµ  )rÃ   rY  r±   r”  rO  r—  r¬  r¸  r¹  rº  r»  r¼  r½  r\  r]  r˜  r¾  r¿  r”   r™  rš  s                        r,   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Ð1r.   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 rx   r  s   €€r,   rN   z7meta_max_pool2d_with_indices_backward.<locals>.<lambda>0  s    ø€ �/ $§*¡* Ð-MÈk×N_ÑN_ÐM`Ða€ r.   c                 ól   •— t        | ‰‰dz
  ‰«       t        | ‰‰dz
  ‰«       t        | ‰‰dz
  ‰«       y )Nr‡   rÓ   r¬   )r   )r•  rÄ  r�   r™  rš  s    €€€€r,   Ú_check_dim_sizez>meta_max_pool2d_with_indices_backward.<locals>._check_dim_size6  s9   ø€ Ü�q˜$  q¡¨,Ô7Ü�q˜$  q¡¨,Ô7Ü�q˜$  q¡¨+Õ6r.   rC  )
r•  r?   rP   rG   r�   r7   ra  rs   r€   rk   )r¿  r�   rY  r±   r”  rO  r—  rœ   r˜  r~  r”   rÄ  r�   r™  rš  s   ``         @@@@r,   Ú%meta_max_pool2d_with_indices_backwardr    s«   ý€ ô 	,Øˆk˜6 7¨H°ió	ñ	ØØØô
 
‡L�LØ�
‰
�k×'Ñ'Ñ'Üaôð
 €LØ�9‰9€D÷7ñ
 �KÔ Ù�GÔä×/Ñ/°Ó5€MÜ�;‰;Ø�
‰
Ø�j‰jØ�{‰{Ø#ô	ð r.   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•  rn   r‹   r7   ra  r?   rs   rG   rk   rŸ   r–  s               r,   Úmeta_max_pool2d_with_indicesr�  G  sÉ   € ô 	,Øˆ{˜F G¨X°yó	ñ	ØØØð
  %Ÿy™y›{¨aÒ/ˆU�Z‰Z˜Œ^°Q€FÜ×/Ñ/°Ó6€MØ‡y�yƒ{�aÒØ˜\¨;Ð7‰à˜ \°;Ð?ˆä�‰ØØ—+‘+Ø—<‘<Ø'ô		
ô 	�‰ØÜ—+‘+Ø—<‘<Ø'ô		
ðð r.   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 )Nr  c                  ó"   •— d‰ j                   › �S )Nz:fractional_max_pool2d: Expected 3D or 4D tensor, but got: rË  r™   s   €r,   rN   z,meta_fractional_max_pool2d.<locals>.<lambda>r  s   ø€ ÐLÈTÏYÉYÈKÐX€ r.   r‡   r   z^fractional_max_pool2d: Expected input to have non-zero  size for non-batch dimenions, but got rü  z emptyrÓ   c                   ó   — y)NzNfractional_max_pool2d: kernel_size musteither be a single int or tuple of Intsr2   r2   r.   r,   rN   z,meta_fractional_max_pool2d.<locals>.<lambda>€  rV   r.   c                   ó   — y)NzOfractional_max_pool2d: output_size must either be a single int or tuple of Intsr2   r2   r.   r,   rN   z,meta_fractional_max_pool2d.<locals>.<lambda>…  rV   r.   r³  r‡  rƒ   rË  r¬   c                   ó   — y)Nz6Expect _random_samples to have the same dtype as inputr2   r2   r.   r,   rN   z,meta_fractional_max_pool2d.<locals>.<lambda>“  rV   r.   c                  ó"   •— d‰ j                   › �S )Nz1Expect _random samples to have 3 dimensions got, rË  )Úrandom_sampless   €r,   rN   z,meta_fractional_max_pool2d.<locals>.<lambda>—  s   ø€ ÐCÀN×DWÑDWÐCXÐY€ r.   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.r2   r2   r.   r,   rN   z,meta_fractional_max_pool2d.<locals>.<lambda>£  rV   r.   c                  ó   •— d‰ › d�S )Nz/Expect _random_samples.size(2) equals to 2 got ú.r2   )r¾   s   €r,   rN   z,meta_fractional_max_pool2d.<locals>.<lambda>¥  s   ø€ Ð#RÐSTÐRUÐUVÐ!W€ r.   c                  ó   •— d‰d   › d‰ › �S )Nz%fractional_max_pool2d: kernel height r   z' is too large relative to input height r2   )Úinput_heightrY  s   €€r,   rN   z,meta_fractional_max_pool2d.<locals>.<lambda>©  s   ø€ Ð7¸ÀA¹Ð7GÐGnÐo{Ðn|Ð}€ r.   c                  ó   •— d‰d   › d‰ › �S )Nz$fractional_max_pool2d: kernel width r¬   z& is too large relative to input width r2   )Úinput_widthrY  s   €€r,   rN   z,meta_fractional_max_pool2d.<locals>.<lambda>­  s   ø€ Ð6°{À1±~Ð6FÐFlÐmxÐlyÐz€ r.   ©rG   rk   )r?   rP   r�   r¯   r‹   r­   rG   rn   rs   rk   rŸ   )r�   rY  rõ  rˆ  r�   Úinput_channelsÚinput_batchrÝ   Úcr‹   r¾   r�  r�  s   `` `      @@@r,   Úmeta_fractional_max_pool2dr”  n  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±Ð?ˆô 	�‰ØØ—*‘*Ø—;‘;ô	
ô
 	�‰ØÜ—+‘+Ø—;‘;ô	
ðð r.   c                 ó(  ‡ ‡‡‡— t        j                  d«       t        j                  ‰j                  t        j
                  k(  ˆfd„«       t        j                  t        ‰«      dk(  ˆfd„«       ‰\  }}t        j                  ‰ j                  dv ˆ fd„«       t        j                  ‰ j                  ‰j                  k(  ˆˆ fd„«       t        d‰ j                  «      D ].  Št        j                  ‰ j                  ‰«      d	kD  ˆˆ fd
„«       Œ0 ‰ j                  «       Š ‰ j                  dk(  r'‰ j                  d	«      }‰ j                  |||f«      }|S ‰ j                  d	«      }‰ j                  d«      }‰ j                  ||||f«      }|S )NÚmax_unpooling2d_forward_outc                  ó"   •— d‰ j                   › �S )Nz2elements in indices should be type int64 but got: rx   rÃ  s   €r,   rN   z#meta_max_unpool2d.<locals>.<lambda>Ê  s   ø€ ÐDÀWÇ]Á]ÀOÐT€ r.   rÓ   c                  ó"   •— dt        ‰ «      › d�S )NzMThere should be exactly two elements (height, width) in output_size, but got ú
 elements.r“  ©rõ  s   €r,   rN   z#meta_max_unpool2d.<locals>.<lambda>Î  ó   ø€ ðÜ˜;Ó'Ð(¨
ð4ð r.   r  c                  ó$   •— d‰ j                   › d�S )NzLInput to max_unpooling2d should be a 3d or 4d Tensor, but got a tensor with ú dimensions.rË  r™   s   €r,   rN   z#meta_max_unpool2d.<locals>.<lambda>Ø  s   ø€ ð%Ø%)§Y¡Y K¨|ð=ð r.   c                  ó<   •— d‰j                   › d‰ j                   › �S ©NzBExpected shape of indices to be same as that of the input tensor (z%) but got indices tensor with shape: rþ  r;  s   €€r,   rN   z#meta_max_unpool2d.<locals>.<lambda>ß  s,   ø€ ØPÐQU×Q[ÑQ[ÐP\ð ]2Ø29·-±-°ðBð r.   r¬   r   c                  ó*   •— d‰j                   › d‰ › d�S )NzZmax_unpooling2d(): Expected input to have non-zero size for non-batch dimensions, but got rü  ú being empty.rþ  )rÇ   r�   s   €€r,   rN   z#meta_max_unpool2d.<locals>.<lambda>è  s%   ø€ ðàŸ:™:˜,Ð&6°q°c¸ðHð r.   r‡   )r7   rò  r?   rP   rG   rŸ   r­   r�   r€   r¯   r‹   r£   r   )	r�   rœ   rõ  rä  rå  Ú	nchannelsr,  rª  rÇ   s	   ```     @r,   Úmeta_max_unpool2dr£  Ã  sU  û€ ô 
×!Ñ!Ð"?Ô@ä	‡L�LØ�‰œŸ™Ñ$ÛTôô 
‡L�LÜˆKÓ˜AÑó	
ôð "�O€GˆVä	‡L�LØ�	‰	�VÐó	
ôô 
‡L�LØ�
‰
�g—m‘mÑ#ô	
ôô �1�d—i‘iÓ ò 
ˆÜ�‰Ø�I‰I�a‹L˜1Ñôõ	
ð
ð �?‰?Ó€Dà‡y�y�A‚~Ø—I‘I˜a“Lˆ	Ø—‘ ¨G°VÐ <Ó=ˆð €Mð	 —‘˜1“ˆØ—I‘I˜a“Lˆ	Ø—‘ ¨°G¸VÐ DÓEˆà€Mr.   c                 óö  ‡ ‡‡‡‡‡‡— t        j                  ‰j                  t         j                  k(  d„ «       t        j                  ‰ j                  dv ˆ fd„«       t        j                  t        ‰«      dk(  ˆfd„«       t        j                  t        ‰«      dk(  ˆfd„«       t        j                  t        ‰«      dk(  ˆfd„«       t        j                  ‰ j                  ‰j                  k(  ˆˆ fd„«       t        d	‰ j                  «      D ]/  Št        j                  ‰ j                  ‰«      d
kD  ˆˆˆ fd„«       Œ1 t        j                  ‰d
   d
kD  xr ‰d	   d
kD  xr ‰d   d
kD  ˆfd„«       y )Nc                   ó   — y)Nz(elements in indices should be type int64r2   r2   r.   r,   rN   z._max_unpooling3d_shape_check.<locals>.<lambda>þ  rV   r.   rÖ  c                  ó$   •— d‰ j                   › d�S )NzLInput to max_unpooling3d should be a 4d or 5d Tensor, but got a tensor with r�  rË  r  s   €r,   rN   z._max_unpooling3d_shape_check.<locals>.<lambda>  s   ø€ Ð^Ð_d×_iÑ_iÐ^jÐjvÐw€ r.   r‡   c                  ó"   •— dt        ‰ «      › d�S )NzVThere should be exactly three elements (depth, height, width) in output_size, but got r™  r“  rš  s   €r,   rN   z._max_unpooling3d_shape_check.<locals>.<lambda>  r›  r.   c                  ó"   •— dt        ‰ «      › d�S )NzRThere should be exactly three elements (depth, height, width) in stride, but got: r™  r“  rÑ  s   €r,   rN   z._max_unpooling3d_shape_check.<locals>.<lambda>  s   ø€ ÐdÔehÐioÓepÐdqÐq{Ð|€ r.   c                  ó"   •— dt        ‰ «      › d�S )NzSThere should be exactly three elements (depth, height, width) in padding, but got: r™  r“  )r”  s   €r,   rN   z._max_unpooling3d_shape_check.<locals>.<lambda>  s   ø€ ÐeÔfiÐjqÓfrÐesÐs}Ð~€ r.   c                  ó<   •— d‰j                   › d‰ j                   › �S rŸ  rþ  )rœ   rÃ   s   €€r,   rN   z._max_unpooling3d_shape_check.<locals>.<lambda>  s,   ø€ ØPÐQV×Q\ÑQ\ÐP]ð ^2Ø29·-±-°ðBð r.   r¬   r   c                  ó.   •— ‰ › d‰j                   › d‰› d�S )NzI: Expected input to have non-zero size for non-batch dimensions, but got rü  r¡  rþ  rj  s   €€€r,   rN   z._max_unpooling3d_shape_check.<locals>.<lambda>  s*   ø€ Ø�)ð à Ÿ;™;˜-Ð'7¸°s¸-ðIð r.   rÓ   c                  ó   •— d‰ › �S )Nz5strides should be greater than zero, but got stride: r2   rÑ  s   €r,   rN   z._max_unpooling3d_shape_check.<locals>.<lambda>'  s   ø€ ÐGÈÀxÐP€ r.   )	r?   rP   rG   rŸ   r�   r­   r€   r¯   r‹   )rÃ   rœ   rõ  r±   r”  r£  rÇ   s   ``````@r,   Ú_max_unpooling3d_shape_checkr­  ü  s/  þ€ Ü	‡L�LØ�‰œŸ™Ñ$Ñ&Xôô 
‡L�LØ�
‰
�fÐÛwôô 
‡L�LÜˆKÓ˜AÑó	
ôô 
‡L�LÜˆF‹�qÑÛ|ôô 
‡L�LÜˆG‹˜ÑÛ~ôô 
‡L�LØ�‰�w—}‘}Ñ$ô	
ôô �1�e—j‘jÓ!ò 
ˆÜ�‰Ø�J‰J�q‹M˜AÑõõ	
ð
ô 
‡L�LØˆq‰	�A‰Ò9˜& ™) a™-Ò9¨F°1©I¸©MÛPõr.   c                 óZ  — t        j                  d«       t        | ||||d«       | j                  «       } |\  }}}| j                  dk(  r(| j                  d«      }| j                  ||||f«      }	|	S | j                  d«      }
| j                  d«      }| j                  |
||||f«      }	|	S )NÚmax_unpooling3d_forward_outzmax_unpooling3d()rË  r   r¬   )r7   rò  r­  r£   r�   r‹   r   )r�   rœ   rõ  r±   r”  Úodepthrä  rå  r¢  r,  rª  s              r,   Úmeta_max_unpool3dr±  +  s³   € ô 
×!Ñ!Ð"?Ô@ä Øˆg�{ F¨GÐ5Hôð �?‰?Ó€Dà)Ñ€FˆG�Và‡y�y�A‚~Ø—I‘I˜a“Lˆ	Ø—‘ ¨F°G¸VÐ DÓEˆð €Mð	 —‘˜1“ˆØ—I‘I˜a“Lˆ	Ø—‘ ¨°F¸GÀVÐ LÓMˆà€Mr.   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 intsr2   r2   r.   r,   rN   z.meta_max_pool3d_with_indices.<locals>.<lambda>O  rV   r.   r   r¬   rÓ   c                   ó   — y©NzQmax_pool3d: stride must either be omitted, a single int, or a tuple of three intsr2   r2   r.   r,   rN   z.meta_max_pool3d_with_indices.<locals>.<lambda>W  rV   r.   c                   ó   — y©NzImax_pool3d: padding must either be a single int, or a tuple of three intsr2   r2   r.   r,   rN   z.meta_max_pool3d_with_indices.<locals>.<lambda>_  rV   r.   c                   ó   — y©NzJmax_pool3d: dilation must be either a single int, or a tuple of three intsr2   r2   r.   r,   rN   z.meta_max_pool3d_with_indices.<locals>.<lambda>g  rV   r.   rÖ  c                   ó   — yrØ  r2   r2   r.   r,   rN   z.meta_max_pool3d_with_indices.<locals>.<lambda>o  rV   r.   rç  éûÿÿÿr”  r³  r‡  rƒ   zmax_pool3d_with_indices()rË  r“   rx   )r?   rP   r­   r�   r‹   r´  rÛ  r7   ra  rq  rX  rg  r   rŸ   rô   )rÃ   rY  r±   r”  rO  r—  rÜ  r¸  r¹  rÝ  rº  r»  r_  r`  ra  rb  r\  r]  rª  rß  rà  rá  râ  rã  rä  rå  rb  Úinput_channels_last_checkr�   r·   rœ   s                                  r,   Úmeta_max_pool3d_with_indicesr¾  C  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ˆà�ˆ<Ðr.   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r´  r2   r2   r.   r,   rN   z7meta_max_pool3d_with_indices_backward.<locals>.<lambda>º  rV   r.   r   r¬   rÓ   c                   ó   — yr¶  r2   r2   r.   r,   rN   z7meta_max_pool3d_with_indices_backward.<locals>.<lambda>Â  rV   r.   c                   ó   — yr¸  r2   r2   r.   r,   rN   z7meta_max_pool3d_with_indices_backward.<locals>.<lambda>Ê  rV   r.   c                   ó   — yrº  r2   r2   r.   r,   rN   z7meta_max_pool3d_with_indices_backward.<locals>.<lambda>Ò  rV   r.   rÖ  c                   ó   — yrØ  r2   r2   r.   r,   rN   z7meta_max_pool3d_with_indices_backward.<locals>.<lambda>Ú  rV   r.   r”  r³  r‡  rƒ   z"max_pool3d_with_indices_backward()rç  rË  r“   )r?   rP   r­   r�   r‹   rr  r7   ra  rq  rX  rg  r   r€   rô   )r¿  rÃ   rY  r±   r”  rO  r—  rœ   rÜ  r¸  r¹  rÝ  rº  r»  r_  r`  ra  rb  r\  r]  rß  rà  rá  râ  rã  rä  rå  rb  r½  rÃ  s                                 r,   Ú%meta_max_pool3d_with_indices_backwardrÅ  ¬  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ˆ
àÐr.   Ú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 ro  ©rÆ  rÃ   s   €€r,   rN   z+check_grid_sampler_common.<locals>.<lambda>  s'   ø€ ðØ—\‘\�NÐ"2°4·;±;°-ðAð r.   c                  ó<   •— d‰j                   › d‰ j                   › �S )NzTgrid_sampler(): expected input and grid to have torch.strided layout, but input has z and grid has )rj   rÉ  s   €€r,   rN   z+check_grid_sampler_common.<locals>.<lambda>  s&   ø€ ðØŸ™˜ n°T·[±[°MðCð r.   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þ  rÉ  s   €€r,   rN   z+check_grid_sampler_common.<locals>.<lambda>$  s'   ø€ ð Ø %§¡˜}Ð,AÀ$Ç*Á*ÀðOð r.   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€   rÉ  s   €€r,   rN   z+check_grid_sampler_common.<locals>.<lambda>+  s,   ø€ Ø9¸%¿*¹*Àq¹.Ð9Ið J2Ø26·*±*°ð?ð r.   c                  ó*   •— d‰j                   › d‰ › d�S )NzYgrid_sampler(): expected input to have non-empty spatial dimensions, but input has sizes rü  rý  rþ  r  s   €€r,   rN   z+check_grid_sampler_common.<locals>.<lambda>4  r  r.   )r?   rP   rk   rj   ru  r€   r�   r¯   )rÃ   rÆ  rÇ   s   ``@r,   Úcheck_grid_sampler_commonrÏ    sì   ú€ Ü	‡L�LØ�‰˜Ÿ™Ñ#ô	
ôô 
‡L�LØ�‰œŸ™Ñ%ÒF¨$¯+©+¼¿¹Ñ*Fô	
ôô 
‡L�LØ�‰�A‰˜$Ÿ*™* Q™-Ñ'ô	
ôô 
‡L�LØ�
‰
�2‰˜%Ÿ*™* q™.Ñ(ô	
ôô �1�e—j‘jÓ!ò 
ˆÜ�‰Ø�K‰K˜‰N˜QÑôõ	
ñ
r.   c                   ó   — e Zd ZdZdZdZy)ÚGridSamplerInterpolationr   r¬   rÓ   N)rd   Ú
__module__Ú__qualname__ÚBILINEARÚNEARESTÚBICUBICr2   r.   r,   rÑ  rÑ  ;  s   „ Ø€HØ€GØ�Gr.   rÑ  Ú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 rÌ  rþ  rÉ  s   €€r,   rN   z'check_grid_sampler_3d.<locals>.<lambda>D  s&   ø€ ð4Ø49·K±K°=Ø# D§J¡J <ð1ð r.   c                   ó   — y)Nz<grid_sampler(): bicubic interpolation only supports 4D inputr2   r2   r.   r,   rN   z'check_grid_sampler_3d.<locals>.<lambda>O  rV   r.   )r?   rP   r�   rÑ  rÖ  r&  )rÃ   rÆ  r×  s   `` r,   Úcheck_grid_sampler_3drÛ  A  sp   ù€ Ü	‡L�LØ�
‰
�a‰Ò3˜EŸJ™J¨$¯)©)Ñ3ô	
ôô 
‡L�Là�J‰J˜!‰Oò MØ"Ô&>×&FÑ&F×&LÑ&LÑLð	
ñ 	Oõr.   c                 ó²   — |d   }|r&t        j                  |t         j                  ¬«      }nd }t        j                  |t         j                  ¬«      }	||	fS ©Nr   r“   )r?   r»  r˜   r—   ©
r¿  rÃ   rÆ  r×  Úpadding_modeÚalign_cornersrP  Úinput_requires_gradrÃ  Ú	grad_grids
             r,   Úgrid_sampler_2d_backward_metarã  S  sQ   € ð & a™.ÐÙÜ×%Ñ% e¼5×;RÑ;RÔS‰
àˆ
Ü× Ñ  ´U×5LÑ5LÔM€IØ˜	Ð"Ð"r.   c                 óö   — t        | |«       t        | ||«       | j                  d   }| j                  d   }|j                  d   }|j                  d   }|j                  d   }	| j                  |||||	f«      S )Nr   r¬   rÓ   r‡   )rÏ  rÛ  r€   r   )
rÃ   rÆ  r×  rß  rà  rB  ÚCÚout_DÚout_HÚout_Ws
             r,   Úgrid_sampler_3dré  f  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Ð7r.   râ  c                 óä   — t        ||«       t        |||«       |d   }|r&t        j                  |t        j                  ¬«      }nd }t        j
                  |t        j                  ¬«      }	||	fS rÝ  )rÏ  rÛ  r?   r»  rÓ  r—   rÞ  s
             r,   Úgrid_sampler_3d_backwardrë  y  sm   € ô ˜e TÔ*Ü˜% Ð'9Ô:Ø% a™.ÐÙÜ×%Ñ%Ø¤×!?Ñ!?ô
‰
ð ˆ
Ü× Ñ  ´U×5SÑ5SÔT€IØ�yÐ Ð r.   c                 ó�   — |j                  dd «      }|st        j                  |«      }||d<   t        j                  | g|¢­i |¤ŽS )NrG   )rF   r7   Ú	get_dtyper?   rs   )r‹   r0  r9   r  rG   s        r,   Úfullrî  ‘  sE   € à�J‰J�w Ó%€EÙÜ—‘ 
Ó+ˆØ€Fˆ7�OÜ�;‰;�tÐ-˜dÒ- fÑ-Ð-r.   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 tensorsr2   r2   r.   r,   rN   zzeros_like.<locals>.<lambda>§  rV   r.   r   rß   Trm  )r?   Ú
sparse_coorP   rs   rG   rk   Ú	is_sparseÚsparse_resize_and_clear_r‹   Ú
sparse_dimÚ	dense_dimrn   Ú_coalesced_r#   r—   rö   Úfill_)r�   rG   rj   rk   rl   r”   rb  s          r,   r»  r»  ›  sü   € ð ”×!Ñ!Ò!Ü�‰Ø˜TÐ!ÙOô	
ô
 �k‰kØØ % �$—*’*°5ØØ"( .�4—;’;°fØ!ô
ˆð �>Š>Ø×(Ñ(Ø—	‘	“˜TŸ_™_Ó.°·±Ó0@õð ×(Ñ(¨¯©«°d·h±h³jÀ!ÔDà�‰˜ÔØˆ
Ü
�/‰/×
!Ñ
!ØØØØØØ#ð "ó €Cð ‡I�Iˆa„LØ€Jr.   c                 óÄ  ‡ ‡‡— ‰ 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   c                   ó   — y)Nz-select() cannot be applied to a 0-dim tensor.r2   r2   r.   r,   rN   zmeta_select.<locals>.<lambda>Í  rV   r.   c                  ó6   •— d‰› d‰j                  «       › d‰ › �S )Nzselect(): index z! out of range for tensor of size z at dimension rŠ   ©rn   rz   r�   s   €€€r,   rN   zmeta_select.<locals>.<lambda>Õ  s%   ø€ Ð" 5 'Ð)JØ�9‰9‹;ˆ-�~ c Uð,€ r.   )rn   r?   r}   r‹   r®   r±   r¶   rµ   )r�   rn   rz   r�   r‹   Únew_sizer  Únew_storage_offsets   ```     r,   Úmeta_selectrþ  È  sà   ú€ à�8‰8‹:€DÜ	×ÑØ�‰	Ù?ôð
 ˜’‰#˜s T™z€CØ�9‰9�S‹>€Dä	×ÑØˆV�d‰]Ò+˜e t™mÐ,õ	,ôð ˜a’Z‰E U¨T¡\€Eä�D—I‘I“KÓ €HÜ�d—k‘k“mÓ$€Jà×,Ñ,Ó.°¸ÀC¹Ñ1HÑHÐØ�ˆØ�3ˆà�?‰?˜8 ZÐ1CÓDÐDr.   c                 ó,   — t        j                  | «      S r)   ©r7   Úclone_preserve_strides)r�   r÷   rn   rz   s       r,   Úmeta_select_scatterr  å  ó   € ä×'Ñ'¨Ó-Ð-r.   c                 ó,   — t        j                  | «      S r)   r   )r�   r÷   rn   rf   re   Ústeps         r,   Úmeta_slice_scatterr  ê  r  r.   Ú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 (ra   rb   r2   )rn   r  r  ru  rv  s        r,   r    r    ð  sm   € Ø˜ÒÙÐˆ{ØˆØˆ.€CØ
˜!Ñ
€CØ�c’	˜S 3šYÐR¨4°¨uÐ4DÀSÀEÈÈCÈ5ÐPQÐ)RÓRÐ'Ø
ˆQ‚wØˆ}ÑˆØ€Jr.   c                 óJ   — | j                  «       dk(  rdS | j                  |   S rÐ  rž  )r•  rn   s     r,   Úensure_nonempty_sizer  ü  s!   € Ø—‘“˜1’ˆ1Ð. !§'¡'¨#¡,Ð.r.   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 tensorr2   r2   r.   r,   rN   z$gather_shape_check.<locals>.<lambda>  rV   r.   c                  óN   •— d‰› d‰j                   › �d‰j                   › d‰ › �z   S )Nz!Size does not match at dimension z expected index ú to be smaller than self ú apart from dimension rþ  )rn   rÇ   rz   r�   s   €€€€r,   rN   z$gather_shape_check.<locals>.<lambda>  s6   ø€ Ð;¸A¸3Ð>NÈuÏ{É{ÈmÐ\Ø-¨d¯j©j¨\Ð9OÐPSÈuÐUñV€ r.   )rv  rn   r?   rP   r¯   r  )r�   rn   rz   Ú	self_dimsÚ
index_dimsrÇ   s   ```  @r,   Ú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öVõñr.   c                 ó2  ‡— ddl m} t        || j                  «       «      } |‰j	                  «       dk(  «      }|sAt        j                  ‰j                  t
        j                  k(  ˆfd„«       t        | |‰«       | j                  ‰j                  «      S )Nr   ©Úguard_size_obliviousc                  ó"   •— d‰ j                   › �S )Nz2gather(): Expected dtype int64 for index, but got rx   ry   s   €r,   rN   zmeta_gather.<locals>.<lambda>  s   ø€ ÐHÈÏÉÈÐV€ r.   )rñ   r  r    rn   r~   r?   rP   rG   r|   r  r   r€   )r�   rn   rz   Úsparse_gradr  Úwrapped_dimÚis_index_emptys     `    r,   Úmeta_gatherr    sp   ø€ åJä   d§h¡h£jÓ1€KÙ)¨%¯+©+«-¸1Ñ*<Ó=€NÙÜ�‰Ø�K‰Kœ5Ÿ:™:Ñ%ÛVô	
ô 	˜4 ¨eÔ4Ø�>‰>˜%Ÿ+™+Ó&Ð&r.   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 )NÚsumÚ
REDUCE_ADDrº  ÚREDUCE_MULTIPLYÚmeanÚREDUCE_MEANÚamaxÚREDUCE_MAXIMUMÚaminÚREDUCE_MINIMUMFc                   ó   — y)Nz=reduce argument must be either sum, prod, mean, amax or amin.r2   r2   r.   r,   rN   z#get_operator_enum.<locals>.<lambda>/  rV   r.   ÚaddÚmultiplyc                   ó   — y)Nz/reduce argument must be either add or multiply.r2   r2   r.   r,   rN   z#get_operator_enum.<locals>.<lambda>7  rV   r.   r'  )Úreduce_Úuse_new_optionss     r,   Úget_operator_enumr,  !  s{   € ÙØ�eÒØØ˜ÒØ$Ø˜ÒØ Ø˜ÒØ#Ø˜ÒØ#Ü�‰ØÙSô	
ð 	à�eÒØØ˜
Ò"Ø$Ü�‰�UÑUÔVØr.   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 indexr2   ©Úmethod_names   €r,   rN   z,scatter_gather_dtype_check.<locals>.<lambda>B  s   ø€ �{�mÐ#EÐF€ r.   c                  ó   •— ‰ › d�S )Nz0(): Expected self.dtype to be equal to src.dtyper2   r/  s   €r,   rN   z,scatter_gather_dtype_check.<locals>.<lambda>H  s   ø€ �{�mÐ#SÐT€ r.   )rñ   r  r~   r?   rP   rG   r|   )r0  r�   rz   Úsrc_optr  s   `    r,   Úscatter_gather_dtype_checkr3  <  sd   ø€ ÝJá˜EŸK™K›M¨QÑ.Ô/Ü�‰Ø�K‰Kœ5Ÿ:™:Ñ%ÛFô	
ð
 ÐÜ�‰Ø�J‰J˜'Ÿ-™-Ñ'ÛTõ	
ð r.   c                 ó   — t        | d«      S rü   )rv  r„   s    r,   Úensure_nonempty_dimr5  L  s   € Üˆs�A‹;Ðr.   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 tensorr2   r2   r.   r,   rN   z%scatter_shape_check.<locals>.<lambda>X  rV   r.   FTc                   ó   — yr8  r2   r2   r.   r,   rN   z%scatter_shape_check.<locals>.<lambda>r  rV   r.   c                  ób   •— d‰j                   › d‰j                   › �d‰ › d‰j                   › �z   S )NúExpected index r  r  z and to be smaller than src rþ  )rn   rz   r�   r2  s   €€€€r,   rN   z%scatter_shape_check.<locals>.<lambda>v  s8   ø€ �o e§k¡k ]Ð2KÈDÏJÉJÈ<ÐXØ& s eÐ+GÈÏÉÀÐWñX€ r.   c                  óH   •— d‰j                   › d‰j                   › �d‰ › �z   S )Nr;  r  r  rþ  rû  s   €€€r,   rN   z%scatter_shape_check.<locals>.<lambda>|  s,   ø€ �o e§k¡k ]Ð2KÈDÏJÉJÈ<ÐXØ& s eÐ,ñ-€ r.   )	rñ   r  r~   r?   rP   r5  rn   r¯   r  )	r�   rn   rz   r2  r  Úis_wrong_shaper  r¾   Úindex_d_sizes	   ````     r,   Úscatter_shape_checkr?  Q  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ô	
ô 	�‰ØÐöXõ	
ô 	�‰ØÐõ-õ	
r.   c                 óŽ   — t        || j                  «       «      }t        d| ||«       t        | |||«       |�t	        ||«       y y )NÚscatter)r    rn   r3  r?  r,  )r�   rn   rz   r÷   r*  r+  r  s          r,   Úscatter_meta_implrB  ‚  sE   € Ü   d§h¡h£jÓ1€KÜ˜y¨$°°sÔ;Ü˜˜k¨5°#Ô6ØÐä˜' ?Õ3ð r.   c                 óV   — t        | |||d«       | j                  | j                  «      S ©Nr'  ©rB  r   r€   ©r�   rn   rz   r÷   s       r,   Úmeta_scatter_addrG  ‹  s%   € ä�d˜C ¨¨UÔ3Ø�>‰>˜$Ÿ*™*Ó%Ð%r.   c                 ó$   — t        | |||d«       | S rD  ©rB  rF  s       r,   Úmeta_scatter_add_rJ  ‘  s   € ä�d˜C ¨¨UÔ3Ø€Kr.   c                 ó’   — t        |t        j                  «      r|nd }t        | ||||«       | j	                  | j
                  «      S r)   )rY   r?   r   rB  r   r€   ©r�   rn   rz   Úsrc_or_valuer0  r÷   s         r,   Úmeta_scatterrN  —  s;   € ô % \´5·<±<Ô@‰,Àd€CÜ�d˜C ¨¨VÔ4Ø�>‰>˜$Ÿ*™*Ó%Ð%r.   c                 ó`   — t        |t        j                  «      r|nd }t        | ||||«       | S r)   )rY   r?   r   rB  rL  s         r,   Úmeta_scatter_rP  ¦  s-   € ô % \´5·<±<Ô@‰,Àd€CÜ�d˜C ¨¨VÔ4Ø€Kr.   Úqueryrª   r&  Ú	dropout_pÚ	is_causalÚreturn_debug_maskr2  c                 óD  — | 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                  ¬«      }||d d |	|t        j                  d	t        j                  d
¬«      t        j                  d	t        j                  d
¬«      |f	S )Nr   r¬   rÓ   r‡   r�  é@   é€   é   r2   ri   )r‹   rÄ  r?   r—   rs   rC   rk   r¹  ÚceilrG   r|   )rQ  rª   r&  rR  rS  rT  r2  rÅ   Ú	num_headsÚmax_seqlen_batch_qÚhead_dimÚmax_seqlen_batch_kÚquery_tÚ	attentionÚ	logsumexpÚblocksize_cÚmax_seqlen_kÚ
debug_masks                     r,   Ú(meta__scaled_dot_product_flash_attentionrd  ´  si  € ð —‘˜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ˆ
ð 	ØØØØØÜ�‰�BœeŸj™j°Ô8Ü�‰�BœeŸj™j°Ô8Øð
ð 
r.   Ú	attn_biasÚcompute_log_sumexpc	           	      óB  — | j                  d«      }	| 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�  r2   ri   )r‹   r?   rs   rG   rk   rC   r|   )rQ  rª   r&  re  rf  rR  rS  rT  r2  rŸ  rª  ÚS_QÚS_KVÚD_QKÚD_Vrb  Ú
logsum_expÚseedÚoffsets                      r,   Ú(meta__scaled_dot_product_cudnn_attentionro  í  sï   € ð 	�
‰
�1‹€AØ�
‰
�1‹€AØ
�*‰*�Q‹-€CØ�8‰8�A‹;€DØ�:‰:�b‹>€DØ
�*‰*�R‹.€Cä
�+‰+�q˜!˜S #Ð&¨e¯k©kÀ%Ç,Á,Ô
O€CÜ—‘Ø	
ˆAˆsˆÜ�k‰kØ�|‰|ô€Jô �;‰;�r¤§¡°FÔ;€DÜ�[‰[˜¤5§:¡:°fÔ=€Fð 	ØØØØØØØØð
ð 
r.   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¬  )r?   r—   rÄ  )rþ  rQ  rª   r&  r·   r`  rp  rq  rr  rs  rR  rS  rt  ru  r2  Úgrad_qÚgrad_kÚgrad_vs                     r,   Ú'meta__scaled_dot_product_flash_backwardrz    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Ð!Ð!r.   Ú	attn_maskc                 óB  — | j                  d«      }| j                  d«      }| j                  d«      }	| j                  d«      }
t        j                  | «      }t        j                  ||	|ft        j                  | j
                  ¬«      j                  dd«      }||fS )Nr   r¬   rÓ   r‡   r�  )r‹   r?   r—   rs   rC   rk   rÄ  )rQ  rª   r&  rR  rS  r{  r2  rÅ   rZ  r[  r\  r_  r`  s                r,   Ú0meta__scaled_dot_product_flash_attention_for_cpur}  4  s—   € ð —‘˜A“€JØ—
‘
˜1“€IØŸ™ A›ÐØ�z‰z˜!‹}€Hä× Ñ  Ó'€IÜ—‘àØØð	
ô
 �k‰kØ�|‰|ô÷ �i��1ƒoð ð 	Øðð r.   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‹   r?   Úempty_permutedrG   rk   )rþ  rQ  rª   r&  r·   r`  rR  rS  r{  r2  rÅ   rZ  r\  Úlen_qÚlen_krw  rx  ry  s                     r,   Ú9meta__scaled_dot_product_flash_attention_for_cpu_backwardrƒ  W  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Ð!Ð!r.   c                 ó  — | j                  dd«      } |j                  dd«      }|j                  dd«      }| j                  d«      }| j                  d«      }	|j                  d«      }
| j                  d«      }| j                  d«      }|j                  d«      }t        j                  ||	||| j                  | j
                  ¬«      }|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Š  r2   ri   )
rÄ  r‹   r?   rs   rG   rk   r¹  rY  rC   r|   )rQ  rª   r&  re  rf  rR  rS  r2  rŸ  ÚMrB  rZ  ÚKÚKvrb  Úlogsumexp_dimrl  rm  rn  s                      r,   Ú,meta__scaled_dot_product_efficient_attentionr‰  †  s2  € ð �O‰O˜A˜qÓ!€EØ
�-‰-˜˜1Ó
€CØ�O‰O˜A˜qÓ!€Eà�
‰
�1‹€AØ�
‰
�1‹€AØ�‰�‹€AØ—
‘
˜2“€IØ�
‰
�2‹€AØ	�‰�B‹€Bä
�+‰+�a˜˜I r°·±ÀUÇ\Á\Ô
R€Cá.@”D—I‘I˜a "™fÓ%¨Ò*Àa€MÜ—‘Ø	
ˆI�}Ð%Ü�k‰kØ�|‰|ô€Jð �-‰-˜˜1Ó
€Cô �;‰;�r¤§¡°FÔ;€DÜ�[‰[˜¤5§:¡:°fÔ=€Fà�
˜D &Ð(Ð(r.   Ú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ƒ   r#  .)r‹   r?   r€  rG   rk   r®   rs   )rþ  rQ  rª   r&  re  r·   r`  rt  ru  rR  rŠ  rS  r2  rÅ   rZ  rr  r\  Ú
head_dim_vrs  rw  rx  ry  Ú	grad_biasÚlastDimÚlastDimAlignedÚ	new_sizess                             r,   Ú+meta__scaled_dot_product_efficient_backwardr‘  ®  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Ð,Ð,r.   c                 óŠ   — t        j                  |«      }t        j                  |«      }t        j                  |«      }|||fS r)   r)  )rþ  rQ  rª   r&  r·   r`  rt  ru  re  rp  rq  rr  rs  rR  rS  r2  rw  rx  ry  s                      r,   Ú'meta__scaled_dot_product_cudnn_backwardr“  ê  sA   € ô. ×Ñ˜eÓ$€FÜ×Ñ˜cÓ"€FÜ×Ñ˜eÓ$€FØ�6˜6Ð!Ð!r.   Úwindow_size_leftÚwindow_size_rightÚ	seqused_kÚalibi_slopesc                 ó2  — |€| j                  d«      n|j                  «       dz
  }|€| j                  d«      n|}|€|j                  d«      n|}| j                  d«      }| j                  d«      }t        j                  | «      }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                  d	t        j                  d
¬«      t        j                  d	t        j                  d
¬«      |fS )Nr   r¬   r‡  rƒ   r�  rV  rW  rX  r2   ri   )r‹   r~   r?   r—   rs   rC   rk   r¹  rY  rG   r|   )rQ  rª   r&  rp  rq  rr  rs  rR  rS  rT  r2  r”  r•  r–  r—  rÅ   r[  r]  rZ  r\  r_  r`  ra  rb  rc  s                            r,   Úmeta__flash_attention_forwardr™    sc  € ð4 #,Ð"3�—‘˜A”¸¿¹Ó9JÈQÑ9N€JØ*3Ð*;˜Ÿ™ AœÀÐØ(1Ð(9˜Ÿ™ !œ¸uÐØ—
‘
˜2“€IØ�z‰z˜"‹~€Hô × Ñ  Ó'€IÜ—‘Ø	�YÐ 2Ð3Ü�k‰kØ�|‰|ô€Iñ Ø%¨š]‘c°ˆÜ—y‘yÐ!3°kÑ!AÓBˆØ Ò$Ø‰LØ 3Ò&ØˆLÜ—[‘[Ø˜Ð$6¸ÐEØ—+‘+Ø—<‘<ô
‰
ô —[‘[ ¨%¯+©+¸e¿l¹lÔKˆ
ð 	ØÜ�‰�BœeŸj™j°Ô8Ü�‰�BœeŸj™j°Ô8Øðð r.   c                 óŠ   — t        j                  |«      }t        j                  |«      }t        j                  |«      }|||fS r)   r)  )rþ  rQ  rª   r&  r·   r`  rp  rq  rr  rs  rR  rS  rt  ru  r2  r”  r•  Ú
grad_queryÚgrad_keyÚ
grad_values                       r,   Úmeta__flash_attention_backwardrž  H  sA   € ô0 ×!Ñ! %Ó(€JÜ×Ñ Ó$€HÜ×!Ñ! %Ó(€Jà�x Ð+Ð+r.   Úcu_seqlens_qÚcu_seqlens_kÚmax_seqlen_qrb  Úcustom_mask_typeÚcausal_diagonalÚseqlen_kÚwindow_sizec                 óÈ  — | j                  d«      }| 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Š  r2   ri   )	r‹   r?   rs   rG   rk   r¹  rY  rC   r|   )rQ  rª   r&  r
  rŸ  r   r¡  rb  rR  r¢  rf  r2  r£  r¤  r¥  rŸ  r…  rB  rZ  r†  r‡  rb  Úlogsumexp_batch_dimÚactual_max_seqlen_qÚactual_max_seqlen_krˆ  rl  rm  rn  s                                r,   Ú!meta__efficient_attention_forwardrª  g  sF  € ð, 	�
‰
�1‹€AØ�
‰
�1‹€AØ�‰�‹€AØ—
‘
˜2“€IØ�
‰
�2‹€AØ	�‰�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ÐRr.   Ú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_dqdkdvr2   r2   r.   r,   rN   z4meta__efficient_attention_backward.<locals>.<lambda>¸  rV   r.   r‡   c                   ó   — y)Nz3embedding dim must match for `shared_storage_dqdkdvr2   r2   r.   r,   rN   z4meta__efficient_attention_backward.<locals>.<lambda>¼  rV   r.   r   r‡  rƒ   r�  r³  rÓ   r#  .r2   ro  )
r?   rP   r€   rs   rG   rk   r>  r—   r‹   r®   )rþ  rQ  rª   r&  r
  rŸ  r   r¡  rb  r`  rR  rt  ru  r¢  r«  r2  r¬  r­  Úchunkr›  rœ  r�  rŽ  r�  r�  r�  s                             r,   Ú"meta__efficient_attention_backwardr²  œ  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Ð6r.   Úscale_aÚscale_bÚscale_resultÚuse_fast_accumc                 óL  ‡ ‡‡‡‡‡— d„ }d„ }	d„ }
t        j                  ‰ j                  «       dk(  xr ‰j                  «       dk(  ˆˆ fd„«       t        j                   |‰ j                  «       «      d„ «       t        j                   |	‰j                  «       «      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
                  «      xr  |
‰j
                  «      ˆˆ 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                 ó,   — | d   | d   kD  xr | d   dk(  S rÐ  r2   rÑ  s    r,   Úis_row_majorz$meta_scaled_mm.<locals>.is_row_majorã  s"   € Ø�a‰y˜6 !™9Ñ$Ò7¨°©°a©Ð7r.   c                 ó&   — | d   dk(  xr | d   dkD  S rÐ  r2   rÑ  s    r,   Úis_col_majorz$meta_scaled_mm.<locals>.is_col_majoræ  s   € Ø�a‰y˜A‰~Ò/ &¨¡)¨a¡-Ð/r.   c                 ó‚   — | t         j                  t         j                  t         j                  t         j                  fv S r)   )r?   Úfloat8_e4m3fnÚfloat8_e5m2Úfloat8_e4m3fnuzÚfloat8_e5m2fnuzrx   s    r,   Úis_fp8_typez#meta_scaled_mm.<locals>.is_fp8_typeé  s8   € ØÜ×ÑÜ×ÑÜ×!Ñ!Ü×!Ñ!ð	
ð 
ð 	
r.   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   €€r,   rN   z meta_scaled_mm.<locals>.<lambda>ó  s'   ø€ Ð7¸¿¹»
°|ÐCSÐTX×T\ÑT\ÓT^ÐS_Ð`€ r.   c                   ó   — y)Nzself must be row_majorr2   r2   r.   r,   rN   z meta_scaled_mm.<locals>.<lambda>÷  rV   r.   c                   ó   — y)Nzmat2 must be col_majorr2   r2   r.   r,   rN   z meta_scaled_mm.<locals>.<lambda>û  rV   r.   r¬   r#  r   c                  ó,   •— d‰ j                  d«      › �S )NzBExpected self.size(1) to be divisible by 16, but got self.size(1)=r¬   rŠ   r™   s   €r,   rN   z meta_scaled_mm.<locals>.<lambda>ÿ  s   ø€ ÐTÐUY×U^ÑU^Ð_`ÓUaÐTbÐc€ r.   c                  ó"   •— d‰ j                   › �S )Nz>Expected both dimensions of mat2 to be divisble by 16 but got rþ  )r  s   €r,   rN   z meta_scaled_mm.<locals>.<lambda>  s   ø€ ÐPÐQU×Q[ÑQ[ÐP\Ð]€ r.   c                  ó<   •— d‰j                   › d‰ j                   › �S )Nz8Expected both inputs to be fp8 types but got self.dtype=z and mat2.dtype=rx   rÃ  s   €€r,   rN   z meta_scaled_mm.<locals>.<lambda>  s"   ø€ ÐJÈ4Ï:É:È,ÐVfÐgk×gqÑgqÐfrÐs€ r.   c                   ó   — y)Nz6Both scale_a and scale_b must be float (fp32) tensors.r2   r2   r.   r,   rN   z meta_scaled_mm.<locals>.<lambda>  rV   r.   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„   )r³  r´  s   €€r,   rN   z meta_scaled_mm.<locals>.<lambda>  s,   ø€ ÐcÐU\×U`ÑU`ÓUbÐTdÐdxÐjq×juÑjuÓjwÐiyÐz€ r.   c                   ó   — y)Nz@Both scale_a and scale_b must be contiguous for rowwise scaling.r2   r2   r.   r,   rN   z meta_scaled_mm.<locals>.<lambda>$  rV   r.   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   ra   r¬   z) and scale_b.size()=(rb   rŠ   )r*  rÝ   r³  r´  s   €€€€r,   rN   z meta_scaled_mm.<locals>.<lambda>*  si   ø€ ð?à?@¸cÐA]Ð^_Ð]`ð a+Ø+2¯<©<¸«?Ð*;¸2¸g¿l¹lÈ1»oÐ=Nð O+Ø+2¯<©<¸«?Ð*;¸2¸g¿l¹lÈ1»oÐ=NÈað	Qð r.   r�  )r?   rP   rn   r±   r‹   rG   r$  r€   r~   rg  rs   rk   )r�   r  r³  r´  r
  rµ  r  r¶  r¹  r»  rÁ  r)  Ú
_out_dtyper*  rÝ   s   ````         @@r,   Úmeta_scaled_mmrÎ  Ø  se  ý€ ò8ò0ò
ô 
‡L�LØ�‰‹
�a‰Ò+˜DŸH™H›J¨!™OÜ`ôô 
‡L�LÙ�T—[‘[“]Ó#Ù(ôô 
‡L�LÙ�T—[‘[“]Ó#Ù(ôô 
‡L�LØ�	‰	�!‹�rÑ˜QÑÛcôô 
‡L�LØ�	‰	�!‹�rÑ˜QÑÒ9 4§9¡9¨Q£<°"Ñ#4¸Ñ#9Û]ôô 
‡L�LÙ�D—J‘JÓÒ;¡K°·
±
Ó$;Üsôô 
‡L�LØ�‰œŸ™Ñ&ÒI¨7¯=©=¼E¿M¹MÑ+IÙHôð �:‰:�D€A€qØ�	‰	�!‹€AØ‡}�}ƒ˜!Ò §¡£°1Ò 4àô 	�‰Ø�K‰K‹M˜QÑÒ5 7§;¡;£=°AÑ#5Üzô	
ð �L‰L˜‹O˜qÒ Ø—‘˜Q“ 1Ò$Ø—‘˜Q“ 1Ò$Ø—‘˜Q“ 1Ò$ô �L‰LØ×%Ñ%Ó'ÒC¨G×,AÑ,AÓ,CÙZõô �L‰LØöô	ð (Ð3‘¸¿¹€JÜ�;‰;�t—y‘y “| T§Y¡Y¨q£\¸ÈDÏKÉKÔXÐXr.   c                 óZ   — t        | ||||d¬«       | j                  | j                  «      S ©NT)r+  rE  ©r�   rn   rz   r÷   r0  r.  s         r,   Úmeta_scatter_reduce_tworÒ  7  s)   € ô �d˜C ¨¨VÀTÕJØ�>‰>˜$Ÿ*™*Ó%Ð%r.   c                 ó(   — t        | ||||d¬«       | S rÐ  rI  rÑ  s         r,   Úmeta_scatter_reduce__tworÔ  >  s   € ä�d˜C ¨¨VÀTÕJØ€Kr.   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   €r,   rN   z"meta_multinomial.<locals>.<lambda>I  s   ø€ ÐRÐSX×S\ÑS\ÓS^ÐR_Ð`€ r.   r¬   r�  )r?   rP   rn   rs   r|   rk   r‹   )rÃ   Únum_samplesÚreplacementrÚ   s   `   r,   Úmeta_multinomialrÙ  D  s|   ø€ ô 
‡L�LØ	ˆE�I‰I‹KÖ˜1ÔÛ`ôð ‡y�yƒ{�aÒÜ�{‰{˜;¬e¯j©jÀÇÁÔNÐNÜ�;‰;Ø�
‰
�1‹�{¬%¯*©*¸U¿\¹\ôð r.   c                 ó"   — d}| D ]  }||z  }Œ	 |S rü   r2   )Úvsr%  Úvs      r,   Úmultiply_integersrÝ  R  s$   € Ø	€AØò ˆØ	ˆQ‰‰ðà€Hr.   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_dimsrõ  s   €€r,   rN   z'upsample_common_check.<locals>.<lambda>\  s   ø€ Ð7Ð8HÐ7IÈÔY\Ð]hÓYiÐXjÐk€ r.   rÓ   c                  ó&   •— d‰ › dt        ‰«      › �S )Nz$It is expected input_size equals to rà  r“  )Úexpected_input_dimsrÌ  s   €€r,   rN   z'upsample_common_check.<locals>.<lambda>a  s   ø€ Ð6Ð7JÐ6KÈ?Ô[^Ð_iÓ[jÐZkÐl€ r.   c              3   ó&   K  — | ]	  }|d kD  –— Œ y­w©r   Nr2   ©r[   rk  s     r,   r]   z(upsample_common_check.<locals>.<genexpr>e  s   è ø€ Ò*�aˆA��EÑ*ùó   ‚c              3   ó&   K  — | ]	  }|d kD  –— Œ y­wrå  r2   ræ  s     r,   r]   z(upsample_common_check.<locals>.<genexpr>e  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 r2   )rÌ  rõ  s   €€r,   rN   z'upsample_common_check.<locals>.<lambda>f  s   ø€ ð Ø �\Ð!2°;°-ðA€ r.   )r?   rP   r­   rY  )rÌ  rõ  rá  rª  Úchannelsrã  s   ```  @r,   Úupsample_common_checkrë  Y  s£   û€ Ü	‡L�LÜˆKÓÐ,Ñ,Ükôð +¨QÑ.ÐÜ	‡L�LÜˆJ‹Ð.Ñ.Ülôô
 
‡L�LÜÑ*˜: a b˜>Ô*Ó*ÒN¬sÑ2NÀ+Ô2NÓ/Nô	Aôð " " 1�~Ñ€FˆHØ�HÐ+˜{Ñ+Ð+r.   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   €r,   rN   z$upsample_nearest1d.<locals>.<lambda>t  ó   ø€ ÐPÐQV×Q[ÑQ[ÓQ]ÐP^Ð_€ r.   ©rá  r“   ©
r?   rP   r~   rÝ  r‹   rë  r   rô   r7   ra  )rÃ   rõ  ÚscalesÚfull_output_sizes   `   r,   Úupsample_nearest1dró  n  ó†   ø€ ô 
‡L�LØ�‰‹˜ÑÒAÔ/°·
±
³¸Q¸RÐ0@ÓAÛ_ôô -Ø�
‰
‹�k°AôÐð �?‰?Ð+Ó,×/Ñ/Ü×1Ñ1°%Ó8ð 0ó ð r.   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   €r,   rN   z$upsample_nearest2d.<locals>.<lambda>„  rî  r.   rÓ   rï  r9  rË  r“   )r?   rP   r~   rÝ  r‹   rë  r   r7   ra  r€   rk   rc   r˜   r£   )	rÃ   rõ  Úscales_hÚscales_wrò  rÏ   r”   r:   Ú
n_channelss	   `        r,   Úupsample_nearest2drû  ~  sÆ   ø€ ô 
‡L�LØ�‰‹˜ÑÒAÔ/°·
±
³¸Q¸RÐ0@ÓAÛ_ôô -Ø�
‰
‹�k°AôÐð �_‰_Ð-Ó.€Fô ×/Ñ/°Ó6€Mð  Ÿ+™+Ñ€A€z�1�aØ‡|�|×Ñ˜FÒ" z°A¢~Ü×/Ñ/ˆà×Ñ¨]ÐÓ;€Fà€Mr.   rõ  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Ë  r  s   €r,   rN   z-upsample_nearest2d_backward.<locals>.<lambda>ª  s   ø€ ÐXÐYd×YiÑYiÐXjÐk€ r.   c            
      óD   •— d‰› d‰ ‰   › d‰› d‰j                  ‰«      › �S )NzCExpected grad_output to have the same shape as output; output.size(z) = z but got grad_output.size(rŠ   )rò  r¿  rÇ   s   €€€r,   rN   z-upsample_nearest2d_backward.<locals>.<lambda>¯  s>   ø€ ð Ø !˜s $Ð'7¸Ñ':Ð&;Ø,¨Q¨C¨t°K×4DÑ4DÀQÓ4GÐ3HðJð r.   r“   )
rë  r?   rP   r�   r¯   r‹   r   rô   r7   ra  )r¿  rõ  rÌ  rø  rù  rò  rÇ   s   `    @@r,   Úupsample_nearest2d_backwardrÿ  ˜  s¨   ú€ ô -Ø�K°!ôÐô 
‡L�LØ×Ñ˜AÑÛkôô �1‹Xò 
ˆÜ�‰Ø×Ñ˜QÓÐ#3°AÑ#6Ñ6õõ	
ð
ð × Ñ  Ó,×/Ñ/Ü×1Ñ1°+Ó>ð 0ó ð r.   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   €r,   rN   z$upsample_nearest3d.<locals>.<lambda>Á  rî  r.   r‡   rï  r“   rð  )rÃ   rõ  Úscales_drø  rù  rò  s   `     r,   Úupsample_nearest3dr  »  rô  r.   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 )Nrx   )rU  rV  )
r?   r—   rŸ   rY   r   r€   r±   r   r  r   )
r�   Ústablern   Ú
descendingr›   rœ   rÜ  rÇ   r�   Ú
out_strides
             r,   Ú	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€Kr.   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   €r,   rN   z%rnn_cell_checkSizes.<locals>.<lambda>î  ó   ø€ °;×3CÑ3CÐ2DÀEÐ0J€ r.   c                  ó:   •— ‰j                   › d‰ j                   › �S ©Nú != rþ  )Úhidden_gatesr  s   €€r,   rN   z%rnn_cell_checkSizes.<locals>.<lambda>ñ  s    ø€ �;×$Ñ$Ð% T¨,×*<Ñ*<Ð)=Ð>€ r.   r¬   c                  ó"   •— ‰ j                   › d�S )Nz != 1rË  )Ú
input_biass   €r,   rN   z%rnn_cell_checkSizes.<locals>.<lambda>õ  s   ø€ °j·o±oÐ5FÀeÐ3L€ r.   c                  ó.   •— ‰j                  «       › d‰ › �S r  rÎ  )Ú
gates_sizer  s   €€r,   rN   z%rnn_cell_checkSizes.<locals>.<lambda>ø  s   ø€ �z×'Ñ'Ó)Ð*¨$¨z¨lÐ;€ r.   c                  ó:   •— ‰j                   › d‰ j                   › �S r  rþ  )Úhidden_biasr  s   €€r,   rN   z%rnn_cell_checkSizes.<locals>.<lambda>ü  s    ø€ �z×'Ñ'Ð(¨¨[×->Ñ->Ð,?Ð@€ r.   c                  ó"   •— ‰ j                   › d�S r  rË  )Úprev_hiddens   €r,   rN   z%rnn_cell_checkSizes.<locals>.<lambda>þ  r  r.   r   c            
      ó`   •— ‰j                  «       › d‰j                  d«      › d‰› d‰› d‰ › d�
S )Nr  r   z * z // z (aka rb   )r~   r‹   )Úexpected_prev_hidden_numelÚfactorr  r  r  s   €€€€€r,   rN   z%rnn_cell_checkSizes.<locals>.<lambda>  sB   ø€ �;×$Ñ$Ó&Ð' t¨K×,<Ñ,<¸QÓ,?Ð+@ÀÀJÀ<ÈtÐTZÐS[Ð[aÐb|Ða}Ð}~Ð€ r.   c              3   óP   •K  — | ]  }|j                   ‰j                   k(  –— Œ y ­wr)   ro  )r[   r<   r  s     €r,   r]   z&rnn_cell_checkSizes.<locals>.<genexpr>  s(   øè ø€ ò 
àð �H‰H˜×*Ñ*Õ*ñ
ùs   ƒ#&c                   ó   — y)Nz%expected all inputs to be same devicer2   r2   r.   r,   rN   z%rnn_cell_checkSizes.<locals>.<lambda>	  rV   r.   )r?   rP   r�   r€   r‹   r~   rY  )r  r  r  r  r  r  r  r  s   ``````@@r,   Ú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õr.   c                 ó
  — t        | |||d|«       t        j                  | t        j                  ¬«      }t        j                  |t        j                  ¬«      }t        j                  |t        j                  ¬«      }|||fS )NrË  r“   )r  r?   r—   r˜   )r  r  Úcxr  r  Ú	workspaceÚhyÚcys           r,   Ú_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ÐÐr.   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Ó   ro  rx   )r­   r€   r   r?   rs   rk   r‹  )rÃ   r  Úweight_stride0Ú
weight_bufÚhxr!  r!  Ú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                                r,   Ú
_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Ð.Ð.r.   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   ro  rž   )r€   r   r?   rs   rk   r‹  )rÃ   Úw0Úw1Úw2Úw3Úhx_Úcx_r«   r1  r!  r*  r,  Ú
has_biasesr0  r-  r/  r4  r5  Úoutput_chanelsr�   rÏ   r#  r$  r"  s                           r,   Úmkldnn_rnn_layerrF  T  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Ð$Ð$r.   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 r2   ©rn   r£  s   €€r,   rN   z'zero_numel_check_dims.<locals>.<lambda>€  s   ø€ �w�iÐSÐTWÐSXÐY€ r.   c                  ó   •— ‰› d‰ › d�S )Nz: Expected reduction dim z to have non-zero size.r2   rI  s   €€r,   rN   z'zero_numel_check_dims.<locals>.<lambda>…  s   ø€ �w�iÐ8¸¸Ð=TÐU€ r.   )r�   r?   r}   r‹   )r�   rn   r£  s    ``r,   Úzero_numel_check_dimsrK  |  sR   ù€ Ø‡y�y�A‚~Ü×ÑØ�1‰HÒ!˜˜r™	ÜYõ	
ô
 	×ÑØ�I‰I�c‹N˜aÑÜUõ	
r.   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.r2   r¦  s   €r,   rN   z%check_argmax_argmin.<locals>.<lambda>‘  s   ø€ �t�fÐ\Ð]€ r.   )r    rn   rK  r?   rP   r~   )r‹  r�   rn   s   `  r,   Úcheck_argmax_argminrN  Š  sC   ø€ Ø
€Ü˜S $§(¡(£*Ó-ˆÜ˜d C¨Õ.ä�‰Ø�J‰J‹L˜AÑÛ]õ	
r.   c                 óÂ   — t        d| |«       t        j                  | j                  |�|fnd «      }t	        | ||«      }| j                  |t        j                  ¬«      S )NÚargmaxrx   )rN  r7   rP  r€   rQ  r   r?   rŸ   )r�   rn   rS  rH  r€   s        r,   Úargmax_argmin_metarQ  •  sQ   € ä˜ $¨Ô,Ü×Ñ §
¡
°c°o¨S©FÈ4ÓP€DÜ$ T¨4°Ó9€EØ�>‰>˜%¤u§{¡{ˆ>Ó3Ð3r.   c                 ó6   — t        j                  d||||¬«      S )Nr2   rß   râ   )rk  rG   rj   rk   rl   s        r,   Úscalar_tensorrS  �  s   € ä�;‰;Ø
�% ¨vÀ*ôð r.   c                 ó|  — t        || j                  «       d¬«      }| j                  «       dk(  rdn| j                  |«      }t        j                  |dk\  xr ||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 dimensionr2   r2   r.   r,   rN   ztopk_meta.<locals>.<lambda>©  rV   r.   rx   )
r    rn   r‹   r?   rP   r®   r€   r­   r   rŸ   )r�   r)  rn   ÚlargestÚsortedÚ	sliceSizeÚtopKSizes          r,   Ú	topk_metar[  ¤  s—   € ô ˜˜dŸh™h›j°dÔ
;€CØ—X‘X“Z 1’_‘¨$¯)©)°C«.€IÜ	‡L�L��a‘Ò*˜A ™NÑ,RÔSä�D—J‘JÓ€HÜ
ˆ8ƒ}�qÒØˆ�‰Ø�>‰>˜(Ó# T§^¡^°HÄEÇKÁK ^Ó%PÐPÐPr.   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 )NTrU  r   r¬   c                  ó   •— d‰ › �S )Nz9kthvalue(): selected number k out of range for dimension r2   r„   s   €r,   rN   zkthvalue_meta.<locals>.<lambda>¸  s   ø€ ÐKÈCÈ5ÐQ€ r.   rx   )
r    rn   r‹   r?   rP   r®   r€   rý   r   rŸ   )r�   r)  rn   rS  ÚdimSizer€   s     `   r,   Ú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ÐJr.   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Ú r2   r2   r.   r,   rN   z(checkLSTMBackwardSizes.<locals>.<lambda>Ç  rV   r.   c                   ó   — yrb  r2   r2   r.   r,   rN   z(checkLSTMBackwardSizes.<locals>.<lambda>Ê  rV   r.   c                   ó   — yrb  r2   r2   r.   r,   rN   z(checkLSTMBackwardSizes.<locals>.<lambda>Ì  rV   r.   c                   ó   — yrb  r2   r2   r.   r,   rN   z(checkLSTMBackwardSizes.<locals>.<lambda>Í  rV   r.   c                   ó   — yrb  r2   r2   r.   r,   rN   z(checkLSTMBackwardSizes.<locals>.<lambda>Î  rV   r.   c                   ó   — yrb  r2   r2   r.   r,   rN   z(checkLSTMBackwardSizes.<locals>.<lambda>Ï  rV   r.   r   r¬   rË  c                   ó   — yrb  r2   r2   r.   r,   rN   z(checkLSTMBackwardSizes.<locals>.<lambda>Ð  rV   r.   )r?   rP   rn   r‹   r~   )Úgrad_hyÚgrad_cyr!  r$  r"  Údefined_gradÚexp_sizes          r,   ÚcheckLSTMBackwardSizesrn  Å  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ÕPr.   c                 óÎ   — | €|€yt        | ||||«       t        j                  |t        ¬«      }t        j                  |t        ¬«      }|r|j	                  dd¬«      nd }|||fS )N©NNNr“   r   F)rS  )rn  r?   r—   Úlegacy_contiguous_memory_formatr  )	rj  rk  r!  r$  r"  Úhas_biasÚ
grad_gatesÚgrad_cxr�  s	            r,   Ú#_thnn_fused_lstm_cell_backward_implru  Ô  sl   € à€˜7˜?ØÜ˜7 G¨R°°YÔ?Ü×!Ñ!ØÔ!@ô€Jô ×Ñ˜rÔ1PÔQ€GÙ4<�
—‘˜q¨%�Ô0À$€IØ�w 	Ð)Ð)r.   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ƒ   rJ  )rL  rK  rM  rP  rÃ  Úgrad_weightr�  s          r,   Úlinear_backwardrx  â  sŒ   € à€JØ€KØ€IØ�1‚~Ø!×+Ñ+¨F¯K©K«MÓ:ˆ
Ø�1‚~˜ QšØ"×,Ñ,¨l×.?Ñ.?ÀÓ.CÀVÇ[Á[ÐQSÃ_Ð-UÓVˆØ ×*Ñ*¨<×+<Ñ+<¸RÓ+@ÓAˆ	Ø˜ YÐ/Ð/r.   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 r)   r_  rc  s    r,   re  z,meta_pixel_shuffle.<locals>.is_channels_lastõ  s$   € Ü×"Ñ"×8Ñ8¸Ó=Ä×ATÑATÑTÐTr.   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 rh  )r:  r?   r˜   rb  rg  ri  )re  r�   s   €€r,   rj  z.meta_pixel_shuffle.<locals>.pick_memory_formatø  s|   ø€ Ù˜DÔ!Ü˜4Ó  FÒ*Ü×.Ñ.Ð.ä×*Ñ*Ð*Ø×Ñ¬e×.EÑ.EÐÔFÜ×*Ñ*Ð*Ø×Ñ¬e×.CÑ.CÐÔDÜ×(Ñ(Ð(ð Er.   r‡  rƒ   r“   )r­   r€   r   rô   )	r�   Úupscale_factorrj  rå  ÚHrÚWrr�   r·   re  s	   `       @r,   Úmeta_pixel_shuffler  ï  sç   ù€ ô 	ˆD�J‰J‹˜!Ò §
¡
¨2¡°.À>Ñ2QÑ RÐVWÒ Wðeà	0°·±°Ð<SÐTbÐScÐdóeØWòUõ	)ð 	�
‰
�2‰˜>¨NÑ:Ñ;€AØ	�‰�B‰˜.Ñ	(€BØ	�‰�B‰˜.Ñ	(€BØ-�$—*‘*˜S˜b�/Ð- 1Ð- bÐ-¨"Ñ-€Ià
�.‰.˜Ó
#€CØ
�&‰&Ñ1Ó3ˆ&Ó
4€CØ€Jr.   c                 óX  — | j                  | j                  «      }|j                  |j                  «      }|j                  |j                  «      }|j                  |j                  «      }|j                  |j                  «      }|j                  |j                  «      }|||||||fS r)   ry  )rÃ   Úweight0Úweight1Úweight2Úweight3rB  Úcx_tmprÏ   Úhy_Úcy_Úgrad_output_r_optÚgrad_hy_r_optÚgrad_cy_r_optr«   r!  r*  r,  rD  r/  r0  r1  r-  r"  Údiff_xÚdiff_hxÚdiff_cxÚdiff_w1Údiff_w2Údiff_bs                                r,   Úmkldnn_rnn_layer_backwardr‘    s�   € ð4 �_‰_˜UŸ[™[Ó)€FØ�m‰m˜CŸI™IÓ&€GØ×Ñ˜vŸ|™|Ó,€GØ×Ñ §¡Ó.€GØ×Ñ §¡Ó.€GØ×Ñ˜wŸ}™}Ó-€FØ�7˜G V¨V°W¸gÐEÐEr.   )Ú	out_int32rÀ   c                óŒ   — t        j                  | |rt         j                  nt         j                  ¬«      j	                  «       S rN  )r?   r—   r  rŸ   r£   )r�   Ú
boundariesr’  rÀ   s       r,   Úmeta_bucketizer•  0  s/   € ô ×ÑØ¡9”E—K’K´%·+±+ôç�jƒlðr.   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 'ú'rx   r  s   €r,   rN   zmeta_histc.<locals>.<lambda>?  s   ø€ Ð=¸e¿k¹k¸]È!ÐL€ r.   c                  ó$   •— ‰› dt        ‰ «      › �S )Nz#: argument 'bins' must be int, not rb  ©Úbinsr£  s   €€r,   rN   zmeta_histc.<locals>.<lambda>C  s   ø€ �7�)Ð>¼tÀD»z¸lÐK€ r.   r   c                  ó   •— ‰› d‰ › �S )Nz: bins must be > 0, but got r2   rš  s   €€r,   rN   zmeta_histc.<locals>.<lambda>E  s   ø€  g YÐ.JÈ4È&Ð#Q€ r.   c                  ó$   •— ‰ › dt        ‰«      › �S )Nz%: argument 'min' must be Number, not rb  )r£  ru  s   €€r,   rN   zmeta_histc.<locals>.<lambda>H  ó   ø€ �7�)Ð@ÄÀcÃÀÐL€ r.   c                  ó$   •— ‰ › dt        ‰«      › �S )Nz%: argument 'max' must be Number, not rb  )r£  rv  s   €€r,   rN   zmeta_histc.<locals>.<lambda>L  rž  r.   c                   ó   — y)Nz&{fn_name}: max must be larger than minr2   r2   r.   r,   rN   zmeta_histc.<locals>.<lambda>N  rV   r.   rž   )
r:  r?   rP   rÔ   rY   r   r   rs   rk   rG   )rÃ   r›  ru  rv  r£  s   ````@r,   Ú
meta_histcr¡  8  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ÐDr.   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å  r2   )r[   r‹   s     r,   r]   z,meta_upsample_bimode2d_aa.<locals>.<genexpr>`  s   è ø€ Ò!H¨t $¨¥(Ñ!Hùrç  r¬   c                  ó*   •— d‰ j                  «       › �S r÷  rŠ   r  s   €r,   rN   z+meta_upsample_bimode2d_aa.<locals>.<lambda>a  rî  r.   r“   )
rë  r‹   r?   rP   r~   rY  r   rô   r7   ra  )rÃ   rõ  rà  rø  rù  rò  s   `     r,   Úmeta_upsample_bimode2d_aar¥  R  s‹   ø€ ô -Ø�
‰
‹�k°AôÐô 
‡L�LØ�‰‹˜ÑÒHœcÑ!H°u·z±z³|ÀAÀBÐ7GÔ!HÓHÛ_ôð �?‰?Ð+Ó,×/Ñ/Ü×1Ñ1°%Ó8ð 0ó ð r.   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.r2   r2   r.   r,   rN   z<_amp_foreach_non_finite_check_and_unscale_.<locals>.<lambda>l  rV   r.   c                   ó   — y)Nz%inv_scale must be a 1-element tensor.r2   r2   r.   r,   rN   z<_amp_foreach_non_finite_check_and_unscale_.<locals>.<lambda>o  rV   r.   c                   ó   — y)Nz!found_inf must be a float tensor.r2   r2   r.   r,   rN   z<_amp_foreach_non_finite_check_and_unscale_.<locals>.<lambda>s  rV   r.   c                   ó   — y)Nz!inv_scale must be a float tensor.r2   r2   r.   r,   rN   z<_amp_foreach_non_finite_check_and_unscale_.<locals>.<lambda>w  rV   r.   )r?   rP   r~   rG   rÔ   )r�   r^  Ú	inv_scales      r,   Ú*_amp_foreach_non_finite_check_and_unscale_r¬  i  s|   € ä	‡L�LØ�‰Ó˜QÑÑ Oôô 
‡L�LØ�‰Ó˜QÑÑ Oôô 
‡L�LØ�‰×)Ñ)Ù3ôô 
‡L�LØ�‰×)Ñ)Ù3õr.   c                 óV   — t        | j                  «       «      }| j                  |«      S r)   )r®   r‹   r   )r�   ÚnanÚposinfÚneginfr9  s        r,   Ú
nan_to_numr±  |  s#   € ô �t—y‘y“{Ó#€KØ�>‰>˜+Ó&Ð&r.   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)rj   r?   rv  Ú
sparse_cscrw  Ú
sparse_bscr�   r    r®   r‹   r±   r  )r�   Údim0r  Úndimsr‹   r±   s         r,   rj  rj  ƒ  sú   € ð 	�‰ä×ÑÜ×ÑÜ×ÑÜ×Ñð	
ñ	
ð]ð 
HÈÏÉÀ}ÐT[Ð\ó]ð	
ð �I‰I€Eä˜$ Ó&€DÜ˜$ Ó&€Dàˆt‚|Øˆä�—	‘	“Ó€DÜ�$—+‘+“-Ó €Fà!'¨¡¨v°d©|Ð€Fˆ4�L�&˜‘,Ø! $™Z¨¨d©Ð€Dˆ�J��T‘
à×Ñ�T˜6Ô"Ø€Kr.   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õ  rn   rj  )r�   r¶  rô  rõ  s       r,   Út_r¸  ¡  s®   € à�I‰I€Eà‡~‚~Ø—_‘_Ó&ˆ
Ø—N‘NÓ$ˆ	à˜!ŠO 	¨Q¢ð	HàRÐS]ÐR^Ð^jÐktÐjuð  vGð  Hó	HØ.ð �H‰H‹J˜!ŠOð	MàCÀEÀ7È!ÐLó	MØô �d˜A E¨A¢I˜qÓ5Ð5°1Ó5Ð5r.   )r’  rÀ   ÚsideÚsorterc                ó  — |rt         j                  nt         j                  }t        |t         j                  «      r%t        j
                  ||¬«      j                  «       S t        j                  d|| j                  ¬«      S )Nrx   r2   r�  )	r?   r  rŸ   rY   r   r—   r£   rs   rk   )Úsorted_sequencer�   r’  rÀ   r¹  rº  rG   s          r,   Úmeta_searchsortedr½  ³  sX   € ñ %ŒE�KŠK¬%¯+©+€EÜ�$œŸ™Ô%Ü×Ñ ¨EÔ2×=Ñ=Ó?Ð?ä�{‰{˜2 U°?×3IÑ3IÔJÐJr.   c                 ó´   ‡ — t        j                  ‰ t         j                  t         j                  t         j                  t         j
                  fvˆ fd„«       y )Nc                  ó   •— d‰ › �S )Nz/Unsupported input type encountered for isin(): r2   rx   s   €r,   rN   z3_check_for_unsupported_isin_dtype.<locals>.<lambda>È  s   ø€ ÐAÀ%ÀÐI€ r.   )r?   rP   r-  r&  Ú
complex128Ú	complex64rx   s   `r,   Ú!_check_for_unsupported_isin_dtyperÂ  Å  s5   ø€ Ü	‡L�LØ”e—j‘j¤%§.¡.´%×2BÑ2BÄEÇOÁOÐTÐTÛIõr.   c                 ój   — |	rt         j                  | ||||||||
|«
      S t        | ||||||||
|«
      S r)   )r#   Ú_embedding_bag_sparse_backwardÚ!meta_embedding_bag_dense_backward)r  rœ   r<  râ  rã  Úmaximum_indicesÚnum_weightsrÛ  r!  rÜ  rË  rÒ  s               r,   Úmeta_embedding_bag_backwardrÈ  Ì  se   € ñ Ü×2Ñ2ØØØØØØØØØØó
ð 	
ô 1ØØØØØØØØØØó
ð 	
r.   c
                 ód  ‡ — t        j                  ‰ j                  t         j                  t         j                  t         j
                  t         j                  fv ˆ fd„«       t        d«      \  }
}}||k(  rt        j                  |d u«       ‰ j                  |‰ j                  d«      f«      }|S )Nc                  ó"   •— d‰ j                   › �S )Nz$Unsupported input type encountered: rx   )r  s   €r,   rN   z3meta_embedding_bag_dense_backward.<locals>.<lambda>  s   ø€ Ð6°t·z±z°lÐC€ r.   r‡   r¬   )
r?   rP   rG   r%  r&  r$  Úfloat64r¯   r   r‹   )r  rœ   râ  rã  rÆ  rÇ  rÛ  r!  rË  rÒ  rß  rà  rá  Úindex_grad_weights   `             r,   rÅ  rÅ  ÷  s†   ø€ ô 
‡L�LØ�
‰
”u—}‘}¤e§n¡n´e·m±mÄUÇ]Á]ÐSÐSÛCôô %*¨!£HÑ!€Hˆi˜ØˆxÒÜ�‰�_¨DÐ0Ô1ØŸ™¨°T·Y±Y¸q³\Ð'BÓCÐØÐr.   c                 óð  — t        d«      \  }}}	| j                  d«      }
t        j                  ||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‡   r¬   zHembedding_bag_backward: per_sample_weights only supported for mode='sum'rÓ   r   )r¯   r‹   r?   rP   rn   r   )r  r  rœ   r<  râ  r!  rÒ  rß  rà  rá  Úembedding_featuresr×  rÏ   s                r,   Ú.meta_embedding_bag_per_sample_weights_backwardrÏ    s»   € ô %*¨!£HÑ!€Hˆi˜ØŸ™ 1›ÐÜ	‡L�LØ�ÑØRôô 
‡L�L�—‘“˜q‘Ô!Ü	‡L�L�—‘“ !Ñ#Ô$Ø—,‘,˜q“/€KÜ	‡L�L�—‘“ Ñ"Ô#Ü	‡L�L�—‘˜Q“Ð#5Ñ5Ô6Ø�^‰^˜[˜NÓ+€FØ€Mr.   )Ú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.r2   r2   r.   r,   rN   zmeta_isin.<locals>.<lambda>-  rV   r.   ro  rx   )
r?   rP   rY   r   rþ   rk   rÂ  rG   r—   r-  )ÚelementsÚtest_elementsrÐ  rÑ  s       r,   Ú	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Ð7r.   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.r2   r2   r.   r,   rN   z meta_polygamma.<locals>.<lambda>=  rV   r.   r[  rx   )r?   rP   r   r   r\  r—   )rÝ   r�   r:   r;   s       r,   Úmeta_polygammarÙ  :  sF   € ô 
‡L�L��a‘ÑOÔPÜ(ØÜ;×HÑHô�O€A€|ô ×Ñ˜D¨Ô5Ð5r.   c                 ó   — t        d«      ‚)Nz.Tensor.item() cannot be called on meta tensors)ró   r™   s    r,   Úmeta_local_scalar_denserÛ  E  s   € ä
ÐGÓ
HÐHr.   Ú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›   r<  rÜ  rÝ  rŸ  r?  r+  s          r,   Ú$meta__jagged_to_padded_dense_forwardrß  J  sv   € ô ˆw‹<˜1ÒÐÐÜˆ{Ó˜qÒ Ð Ð à�‰
×Ñ˜Ñ˜aÑ€AØ�A‰€AØ�qÐ,˜6Ÿ<™<¨¨Ð+Ñ,€LØ×Ñ˜LÓ)Ð)r.   ÚpaddedÚtotal_Lc                 óz  — t        |«      dk(  sJ ‚|s†t        | t        j                  j                  «      sJ ‚| j
                  j                  }|€J ‚|j                  «       }t        j                  j                  j                  j                  |dd ¬«       |g| j                  dd  ¢­}| j                  |«      S )Nr¬   r   rt  rÓ   )r­   rY   r?   rK  rL  Ú	fake_modeÚ	shape_envÚcreate_unbacked_symintÚfxÚexperimentalÚsymbolic_shapesr  r€   r   )rà  r<  rá  rä  r+  s        r,   Ú$meta__padded_dense_to_jagged_forwardré  [  s¶   € ô ˆw‹<˜1ÒÐÐáÜ˜&¤%×"3Ñ"3×">Ñ">Ô?Ð?Ð?Ø×$Ñ$×.Ñ.ˆ	ØÐ$Ð$Ð$Ø×2Ñ2Ó4ˆÜ�‰×Ñ×-Ñ-×GÑGØ˜ ð 	Hô 	
ð Ð/˜fŸl™l¨1¨2Ð.Ñ/€LØ×Ñ˜LÓ)Ð)r.   c                 óB   — t        | «      t        «       d„ «       «       }|S )Nc                 ó8   — t        | t        j                  ¬«      S r  ©r=   r   r\  r”  s    r,   Ú_fz)_create_unary_float_meta_func.<locals>._fr  s   € ô  ØÔ=×JÑJô
ð 	
r.   ©r3   r   ©Úfuncrí  s     r,   Ú_create_unary_float_meta_funcrñ  q  ó*   € Ü�4ÓÜƒ]ñ
ó ó ð
ð
 €Ir.   c                 óB   — t        | «      t        «       d„ «       «       }|S )Nc                 ó:   — t        | |t        j                  ¬«      S r  rì  )r<   rF  s     r,   rí  z*_create_binary_float_meta_func.<locals>._f}  s   € ô  ØˆqÔ!@×!MÑ!Mô
ð 	
r.   rî  rï  s     r,   Ú_create_binary_float_meta_funcrõ  |  rò  r.   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)ri   Úpost_autogradÚpre_autogradÚCompositeImplicitAutogradri   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   ÚitemsrY   r?   Ú_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_tablerc   ÚregistryÚopoÚop_overloadr+   s         r,   Úactivate_metar  §  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r.   )Frp  r)   )NNNF)NN)Tr’  )r,  )r«  T)FF)TT)r#  )FTN)TFF)TF)rÓ   )g      à?N)r1  Ústr)r2   ©r   r‘  F)r2   r  FTN)Fr   FNFrƒ   )NF)rƒ   F)NNNNN)r   NNr¬   )NNF)ç        FFN)r  FNN)r  FN)FN)FNNNN)Nrƒ   FNN)NNNN)rƒ   TT)éd   r   r   )rƒ   )r  (F  r¹  Úenumr   Útypingr   r   r   r   r   r?   Útorch._prims_commonr`  r7   r	   r
   r   Útorch._decompr   r   r   r   Ú
torch._opsr   Útorch._primsr   r   r   r   r   r   r   r   r   r   Útorch._prims_common.wrappersr   r   r   r   r   r?  r    r!   Útorch.utilsr"   r/   Úopsr#   ÚlibraryÚLibraryr  r3   r=   rI   rR   ÚlinspaceÚlogspaceru  ru   Útakerö   r·   r‚   r‘   rš   ÚcummaxÚcumminr¡   r¤   rÊ   Ú_fft_c2crÑ   Ú_fft_r2crÙ   ÚrandpermÚgenerator_outrÞ   r|   rã   Úrandintræ   rè   Úlow_outré   Úrandrë   Ú_fft_c2rrî   r`  rú   r  Ú
unsqueeze_r  Ú_sparse_semi_structured_linearr  rG   r  Ú_sparse_semi_structured_mmr  Ú_sparse_semi_structured_addmmr  Ú_cslt_sparse_mmr-  r-  Úindex_reducer÷  r5  Úindex_reduce_r7  Úindex_selectr:  Úsegment_reducerG  rv  Ú	unary_outrK  rn   rT  ru  rW  rY  ra  r]  rb  Ú_assert_asyncre  Úmsgri  Ú_printrl  Ú_make_dep_tokenrp  rx  Ú_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_exrø  Úlinalg_ldl_solver  Ú	linalg_lur  Úlinalg_lu_factor_exr  Úlinalg_lu_solver  Ú	lu_unpackr   r)  Ú	linalg_qrr0  r4  r1  Ú_linalg_svdr@  r  rÎ  rP  rd  Úlinalg_solve_triangularrm  rs  rz  Ú_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_forwardrC   r  Ú_pdist_backwardr	  Úbaddbmmr  Ú	bernoullir!  Ú
bernoulli_r$  r   r'  Úpoissonr*  Ú_fused_moving_avg_obs_fq_helperr;  ÚmmrE  rQ  r:  r]  re  Úconvolutionrn  r  Ú_has_mkldnnr	  ro  Ú_convolution_pointwiserv  Ú_linear_pointwiserz  Úhas_mklr  r{  Ú_mkl_linearr  r  r€  Úqconv2d_pointwiserŠ  Úqlinear_pointwiserþ   r�  r  r�  Ú
max_pool2dr›  r   Ú
avg_pool2drÀ  rÅ  Úavg_pool2d_backwardrÍ  Ú
avg_pool3dræ  Úavg_pool3d_backwardrñ  Ú_adaptive_avg_pool2drö  Ú_adaptive_avg_pool3drù  Ú_adaptive_avg_pool2d_backwardr  Ú_adaptive_avg_pool3d_backwardr  r  Úadaptive_max_pool2dr  r  r  Úadaptive_max_pool3dr%  r'  r(  Úrepeat_interleaver+  rZ   r/  r2  rz   Ú_unsafe_indexrH  Úconvolution_backwardrT  Úaddbmmr\  Ú_fused_adam_Ú_fused_adamw_rs  Ú_fused_adamry  Ú_int_mmr‚  Ú_convert_weight_to_int4packr�  Ú_weight_int4pack_mmr™  Ú_weight_int8pack_mmr   Ú_cdist_forwardr¶  Ú_cdist_backwardrÀ  Ú_embedding_bagrç  Ú_embedding_bag_forward_onlyré  rì  Únansumrî  ÚmedianÚ	nanmedianrð  Ú
dim_valuesr!  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   Ú	index_putÚ_unsafe_index_putr$  Úmasked_fill_r'  Ú_masked_scaler*  Úmasked_scatter_r.  Úmasked_scatterr0  Úmasked_scatter_backwardr2  Ú
index_put_r4  Úaliasr7  rB  ÚbmmrD  rH  rM  r´  rµ  rÛ  rr  rí  r•  Ú max_pool2d_with_indices_backwardr  Úmax_pool2d_with_indicesr�  Úfractional_max_pool2dr”  Úmax_unpool2dr£  r­  Úmax_unpool3dr±  Úmax_pool3d_with_indicesr¾  Ú max_pool3d_with_indices_backwardrÅ  rÏ  rÑ  rÛ  Úgrid_sampler_2d_backwardrã  ré  rë  rî  r»  r>  rþ  Úselect_scatterr  Úslice_scatterr  r    r  r  Úgatherr  r,  r3  r5  r?  rB  Úscatter_addrG  Úscatter_add_rJ  rA  r÷   r&  r0  Úvalue_reducerN  Úscatter_rP  Ú#_scaled_dot_product_flash_attentionrd  Ú#_scaled_dot_product_cudnn_attentionro  Ú,_scaled_dot_product_flash_attention_backwardrz  Ú+_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_backwardr‘  Ú,_scaled_dot_product_cudnn_attention_backwardr“  Ú_flash_attention_forwardr™  Ú_flash_attention_backwardrž  Ú_efficient_attention_forwardrª  Ú_efficient_attention_backwardÚSymIntr²  Ú
_scaled_mmrÎ  Ú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<  rF  rK  rN  rP  ÚargminrQ  rS  Útopkr[  Úkthvaluer_  r˜   rq  rn  ru  rx  Úpixel_shuffler  r‘  Ú	bucketizeÚ
Tensor_outr•  Úhistcr¡  Ú_upsample_bilinear2d_aaÚ_upsample_bicubic2d_aar¥  r¬  r±  rj  r¸  Úsearchsortedr½  rÂ  Ú_embedding_bag_backwardrÈ  Ú_embedding_bag_dense_backwardrÅ  Ú*_embedding_bag_per_sample_weights_backwardrÏ  ÚisinrÖ  Ú	polygammarÙ  Ú_local_scalar_denserÛ  Ú_jagged_to_padded_dense_forwardrß  Ú_padded_dense_to_jagged_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_pÚtorch._refs.nn.functionalÚtorch._refs.specialr  r2   r.   r,   ú<module>r÷     s6>  ðó Ý ß 9Õ 9ã Ý #ß +Ñ +÷ó õ "ß U÷	÷ 	ó 	÷õ ÷ <Ý )ð ‡y�y‡~�~€à*/¯-©-×*?Ñ*?ÀÈÐPVÓ*WÐ 'ò
ðà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Ùƒñ/ó ó Cð/ò1Hñl �—‘×%Ñ% t§}¡}×'8Ñ'8Ð9Ó:Ùƒñó ó ;ðñ" �—‘×%Ñ% 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Ó:ÙƒñKó ó ;ðKñ ˆ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Ñð	!ð
 ˜Ÿ™Ñ$ð!ð ò!ó %ð!ñH ˆ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ðð
s˜Fð s¨Có sð  ð  ¨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×$Ò$Ó%ð
 ØØ#ØØ#Ø!ò8Øð8àð8ð ð	8ð
 ð8ð �VÑð8ð 	�Ñð8ð �VÑð8ð �6Ñ
ð8ð ˆ6�6˜6 6Ð)Ñ*ò8ó &ð8ñv �×,Ò,×4Ñ4°d×6RÒ6R×6VÑ6VÐWÓXð ØØ òØðàðð ð	ð
 ðð ðð 
�&Ñ	ðð òó Yðñ2 ˆt×$Ò$Ó%ÙˆZÐ-Ó.ð ØØò+(Ø
ð+(àð+(ð ð+(ð ð	+(ð
 ð+(ð ˆ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 �—’×&Ñ&¨¯ª×(:Ñ(:Ð;Ó<ÙƒØ&*ó /ó ó =ð/ñ
 ˆt�Š×$Ò$Ó%óó &ðñ ˆt�~Š~×ÒÓ ó/ó !ð/ñ
 �—’×$Ñ$ d§l¢l×&6Ñ&6Ð7Ó8Ùƒó"ó ó 9ð"ñ ˆt×3Ò3×;Ñ;Ó<ð Øó*ó =ð*ñ. ˆt�wŠwÓÙƒñ	ó ó ð	òBôð 7;òbØ—,‘,ðbà�L‰Lðbð �$�s‘)˜S�.Ñ!ðbð �4˜‘9˜c�>Ñ"ð	bð
 �D˜‘I˜s�NÑ#ðbð ðbð ðbð ˜U 4¨¡9¨c >Ñ2Ñ3óbòJQñ ˆ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×=Ñ=Ó>Ù�5—9‘9×#Ò#×5Ò5×<Ò<Ó=ñó >ó ?ñð, =B¿M¹M×<QÑ<QØ�V˜Vó=Ñ9ñ �5—9‘9×&Ò&×1Ò1Ó2ð ØØØó
ó 3ñ
ó<ñ ˆt�Š×&Ñ&Ó'ð ØØØØóIó (ñIóZ(<ñX ˆt×'Ò'×/Ñ/Ó0ñEó 1ñEñP ˆt�ŠÓÙƒð ØØØØóQJó ó  ñQJñh ˆ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ÙƒØ9;ô @ #ñ @°3ó @ó ó Gñ@ñ �—
’
×!Ñ! 4×#5Ò#5×#<Ñ#<Ð=Ó>ò`Jó ?ñ`JñF �×)Ò)×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ññ& �×(Ò(Ð)Ó*ò@ó +ñ@ñ �×(Ò(Ð)Ó*ò<ó +ñ<ñ ˆt×"Ò"×*Ñ*Ó+ò &ó ,ñ &ñF ˆt×#Ò#Ó$ÙƒòGó ó %ñGñ* ˆt×"Ò"×*Ñ*Ó+ð
 Ø	
ØØØØôe5ó ,ñe5ñP ˆt×/Ò/×7Ñ7Ó8ò5ó 9ñ5ö
ñ �—’×#Ñ# T§[¢[§_¡_Ð5Ó6Ùƒñ=¸$õ =ó ó 7ñ=ñ �—’×#Ñ# T§^¢^×%;Ñ%;Ð<Ó=ò)ó >ñ)ñ à�Š�‰Ø�Š×ÒØ�Š×ÑØ�Š×!Ò!Ø�	Š	×ÑØ�	Š	×Òðó	ñ ˆX�yÓ!ôó "ó	ññ ˆt× Ò ×(Ñ(Ó)òó *ññ ˆt�{Š{×"Ñ"Ó#ò'ó $ñ'ñ ˆt�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×!Ñ!Ó"òó #ññ �—’×&Ñ&¨×(>Ò(>×(FÑ(FÐGÓHô"ó Iñ"ñ ˆt× Ò ×'Ò'Ó(òó )ññ
 ˆt×!Ò!×)Ñ)Ó*òó +ññ ˆt×#Ò#Ó$ò	ó %ñ	ñ ˆt×"Ò"Ó#Ùƒò6ó ó $ñ6ñ ˆt×+Ò+Ó,ò!ó -ñ!ñ ˆt�Š×&Ñ&Ó'ôó (ññ ˆt�zŠz×!Ñ!Ó"ò!ó #ñ!öñB ˆt�xŠx×ÑÓ ò5ó !ñ5ôôô6ô;ðh #ò-ZØñZàñZð 	ñZð 	ñ	Zð
 	ñZð 	ñZð 	ñZð 	ñZð 	ñZð 	ñZð 	ñZð ñZð ñZð ñZð ñZð  ñ!Zð" ñ#Zð$ ñ%Zð& ñ'Zð( ð)Zð* ñ+Zð, õ-Zôz;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× Ò Ó!Ùƒò4ó ó "ñ4ôn,ñ^ ˆt× Ò Ó!Ùƒòó ó "ññ, ˆ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ñ8 ˆt×"Ò"×*Ñ*Ó+ò.ó ,ñ.ñ ˆt×!Ò!×)Ñ)Ó*ô.ó +ñ.ò
	˜ñ 	¨Cñ 	¸dõ 	ô/ô
ñ  ˆt�{Š{×"Ñ"Ó#ô'ó $ñ'öö6
ô ö
-
öb4ñ ˆt×Ò×'Ñ'Ó(ò&ó )ñ&ñ
 ˆt× Ò Ó!òó "ññ
 à�Š×ÒØ�Š×ÒØ�Š×ÒØ�Š×!Ò!ð	óñ ƒô&ó óñ&ñ à�Š×ÒØ�Š×ÒØ�Š×ÒØ�Š×"Ò"ð	óôóññ �×8Ò8Ð9Ó:ð
 ØØ#Ø!ó5Øñ5à	ñ5ð ñ5ð ñ	5ð
 ñ5ð ñ5ð �E‰?ó5ó ;ñ5ñp �×8Ò8Ð9Ó:ð ØØ#Ø!ó'Øñ'à	ñ'ð ñ'ð ˜Ññ	'ð
 ñ'ð ñ'ð ñ'ð ñ'ð �E‰?ó'ó ;ñ'ñT à×9Ò9ðóð( "ó"Øñ"àñ"ð 
ñ"ð ð	"ð
 
ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð �E‰?ó"óñ
"ñ. à×8Ò8ðóð ØØ"&Ø!óØñà	ñð ñð ñ	ð
 ñð ˜Ññð �E‰?óóñ
ñ< à×AÒAðóð #'Ø!ó'"Øñ'"àñ'"ð 
ñ'"ð ð	'"ð
 
ñ'"ð ñ'"ð ñ'"ð ñ'"ð ˜Ññ'"ð �E‰?ó'"óñ
'"ñT �×<Ò<Ð=Ó>ð ØØ!ó$)Øñ$)à	ñ$)ð ñ$)ð ˜Ññ	$)ð
 ñ$)ð ñ$)ð �E‰?ó$)ó ?ñ$)ñN à×=Ò=ðóð" Ø!ó4-Øñ4-àñ4-ð 
ñ4-ð ñ	4-ð
 ˜Ñð4-ð 
ñ4-ð ñ4-ð ñ4-ð ñ4-ð ñ4-ð ˜$‘Zñ4-ð ñ4-ð �E‰?ó4-óñ
4-ñn à×9Ò9ðóð* "ó!"Øñ"àñ"ð 
ñ"ð ð	"ð
 
ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð  �E‰?ó!"óñ
"ñ0 à×%Ò%ðóð  "Ø&*Ø'+Ø"&Ø%)ó9Øñ9à	ñ9ð ñ9ð ˜Ññ	9ð
 ˜Ññ9ð ñ9ð ñ9ð ñ9ð ñ9ð ñ9ð �E‰?ñ9ð ˜s‘mñ9ð   ‘}ñ9ð ˜Ññ9ð ˜6Ñ"ó9óñ
9ñx à×&Ò&ðóð( "Ø&*Ø'+ó#,Øñ,àñ,ð 
ñ,ð ð	,ð
 
ñ,ð ñ,ð ñ,ð ñ,ð ñ,ð ñ,ð ñ,ð ñ,ð ñ,ð ñ,ð �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 �—’×'Ñ'Ð(Ó)ð $(Ø+/Ø'+Ø ò[YØ
�,‰,ð[Yà
�,‰,ñ[Yð �\‰\ñ[Yð �\‰\ð	[Yð
 �5—<‘<Ñ
 ñ[Yð ˜5Ÿ<™<Ñ(ð[Yð ˜Ÿ™Ñ$ñ[Yð ó[Yó *ñ[Yñ| �×#Ò#×'Ò'¨×)<Ò)<×)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§}¢}×';Ò';Ð<Ó=Ùˆ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óð Øôóññ( ˆt×>Ò>×FÑFÓGòó Hññ$ �—’×'Ñ'¨¯ª×)<Ñ)<Ð=Ó>Ùƒô'ó ó ?ñ'ñ
 ˆu�y‰y�~‰~×(Ò(Ó)òó *ññ: ˆu�y‰y�~‰~× Ò Ó!ò6ó "ñ6ñ" ˆt× Ò Ó!Ùƒð
 Ø
Ø	ØõKó ó "ñKô ñ ˆt×+Ò+Ó,ð ô'
ó -ñ'
ñT ˆt×1Ò1Ó2ð ôó 3ññ. ˆt×>Ò>Ó?ð ôó @ññ0 ˆt�yŠyÓÙƒØ8=Àeõ 8ó ó ñ8ñ  ˆt�~Š~ÓÙƒñ6�cð 6 ð 6¨Fó 6ó ó ñ6ñ ˆt×'Ò'Ó(ðI &ó Ió )ñIñ ˆt×3Ò3×;Ñ;Ó<ð
 ò	*Øð*à�&‰\ñ*ð �c‘ñ*ð ó	*ó =ñ*ñ  ˆ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ó
 Ü  Ü ôBNòJ …r.   