Ë
    òÍ:jøÕ ã            -       óÚv  — d dl Z d dlZd dlmZ d dlmZ d dlmZmZ d dl	m
Z
mZmZmZ d dlmZ d dlZd dlmZ d dlmZmZmZ d dlmZmZmZmZ d d	lmZ d d
lmZm Z m!Z! d dlm"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z. d dl/m0Z0m1Z1m2Z2m3Z3m4Z4 d dl5m6Z6m7Z7 d dl8m9Z: d dl;m<Z=  ed«      Z> ed«      Z?ej€                  j‚                  ZAej„                  j‡                  ddd«      ZD eEd«      \  ZFZGZHde
e
e?e>f   ge
e?e>f   f   fd„ZIde'fd„ZJd„ ZKd„ ZL eIeAjš                  eAjœ                  g«       e4«       dddejž                  ddfd„«       «       ZP eIeAj¢                  j¤                  eAj¢                  j¦                  g«       e4«       d„ «       «       ZT eIeAjª                  j¤                  eAjª                  j¦                  g«       e4«       dd œd!„«       «       ZU�d'd"„ZVd#„ ZW�d(d%„ZX eIeAj²                  j¤                  «      d&„ «       ZZ eIeAj¶                  «       e4«       d'„ «       «       Z[ eIeAj¸                  j¤                  eAj¸                  j¦                  eAjº                  j¤                  eAjº                  j¦                  g«       e4d(d)«      d*„ «       «       Z^ eIeAj¾                  j¤                  eAj¾                  j¦                  g«       e4«       d+„ «       «       Z_d,„ Z`�d'd-ed.eaeb   d/ecfd0„Zd eIeAjÊ                  j¤                  eAjÊ                  j¦                  g«       e4«       d1„ «       «       ZfdZgd.eaeb   fd2„Zh eIeAjÒ                  j¤                  eAjÒ                  j¦                  g«       e4«       d3„ «       «       Zj eIeAjÖ                  jØ                  «      dd4œd5„«       Zm eIeAjÖ                  j¤                  «      ejÜ                  dddd6œd7„«       Zo eIeAjà                  j¤                  eAjà                  j¦                  g«       e4«       ejÜ                  dddd6œd8„«       «       Zq eIeAjà                  jä                  eAjà                  jæ                  g«       e4«       ejÜ                  dddd6œd9„«       «       Zt eIeAjê                  j¤                  eAjê                  j¦                  g«       e4«       ddddd6œd:„«       «       Zv eIeAjî                  j¤                  eAjî                  j¦                  g«       e4«       d-ed.eaeb   d;ebd<ebfd=„«       «       Zx eIeAjò                  j¤                  «      �d'd>„«       Zzd?„ Z{ eIeAjø                  j¤                  «      d@„ «       Z} eIeAjü                  «      	 	 	 �d)dAedBedCedDee   dEee   dFee�j                      fdG„«       Z� eIeA�j                  «      	 �d*dHedIedJedFee�j                      fdK„«       Zƒ eIeA�j                  «      dLdLddMœdAedHedIedJedFee�j                      f
dN„«       Z… eIeA�j                  «      	 	 	 	 	 	 	 �d+dOej,                  dPej,                  dDee   dQee   dFee�j                      dRecdSebdTebdUebfdV„«       Z‡ eIeA�j                  j¤                  «      d$dWœd-ed.ebdXedYej,                  dZed[ecdefd\„«       Z‰ eIeA�j                  j¤                  «      d$dWœd-ed.ebdXedYej,                  dZed[ecdefd]„«       Z‹ e4«        eIeA�j                  j¤                  «      d^„ «       «       Z� eIeA�j                  j¤                  «      dddd ddd_œd`edZedaee   d)ee   dbee   dcebddecdefde„«       Z� eIeA�j                   j¤                  eA�j                   �j"                  g«       e4«       df„ «       «       Z’ eIeA�j                   �j&                  «      �d'dg„«       Z” eIeA�j*                  j¤                  eA�j*                  �j"                  g«       e4«       dh„ «       «       Z– eIeA�j*                  �j&                  «      �d'di„«       Z— eIeA�j0                  j¤                  «      dj„ «       Z™ eIeA�j0                  j¦                  «      dk„ «       Zš eIeA�j6                  j¤                  «      dl„ «       Zœ eIeA�j6                  �j:                  «      dm„ «       Zž eIeA�j>                  j¤                  «      dn„ «       Z  eIeA�jB                  j¤                  «      ddddddoœdp„«       Z¢ eIeA�jF                  j¤                  «      �d,dq„«       Z£ eIeA�jH                  j¤                  «      �d)dr„«       Z¥ eIeA�jL                  j¤                  «      �d,ds„«       Z¦ eIeA�jN                  j¤                  «      dt„ «       Z¨ eIeA�jR                  �j:                  «      du„ «       Zªd-edvefdw„Z«d-edxedyefdz„Z¬	 �d(d{edved|ecfd}„Z­�d-dxedved~efd„Z®dxed€ed�ecdvefd‚„Z¯	 �d.d„edƒedAed…efd†„Z°d‡efdˆ„Z± eIeA�jd                  j¤                  eA�jd                  �jf                  g«       e4d‰dŠ«      �d/dxed‡edŒecfd�„«       «       Z´ eIeA�jj                  j¤                  eA�jl                  j¦                  g«       e4«       dAedefdŽ„«       «       Z· eIeA�jp                  g«       e4d‰dŠ«      dAefd�„«       «       Z¹d�edefd‘„Zº eIeA�jv                  «       e4«       d-edxed’ecdefd“„«       «       Z» eIeA�jx                  «       e4«       �d'd-edxed’ecdefd”„«       «       Z¼ eIeA�jz                  «       e4«       �d'd-ed’ecdefd•„«       «       Z½ eIeA�j|                  «       e4«       �d'd-ed’ecdefd–„«       «       Z¾ eIeA�j~                  j¤                  «      �d0dxed’ecd—ecfd˜„«       Z¿ eIeA�j€                  j¤                  eA�j€                  j¦                  g«       e4«       dAed™edefdš„«       «       ZÀ eIeA�j‚                  j¤                  «      �d'dxed—ecfd›„«       ZÂ eIeA�j†                  j¤                  eA�j†                  j¦                  g«       e4dœd�dž«      dddŸœd-ed ecd—ecdeÄeeef   fd¡„«       «       ZÅ eIeA�jŒ                  j¤                  eA�jŒ                  j¦                  g«       e4«       dd¢œdœed�ed€ed ecdef
d£„«       «       ZÇ eIeA�j�                  j¤                  eA�j�                  j¦                  g«       e4d¤d‹d¥«      d$d¦œdxed§ecdeÄeeef   fd¨„«       «       ZÉ eIeA�j”                  j¤                  eA�j”                  j¦                  g«       e4d©d�dž«      d$ddªœdxed§ecd—ecdeÄeeef   fd«„«       «       ZË eIeA�j˜                  j¤                  eA�j˜                  j¦                  g«       e4«       d$dd¬œd©ed�ed€ed�ecd­ecdefd®„«       «       ZÍ eIeA�jœ                  «       e4d¤d‹d¥«      	 	 �d1d©ed�ed¯ecd°ecdeÄeeef   f
d±„«       «       ZÏd²edeÄececf   fd³„ZÐ eIeA�j¢                  j¤                  eA�j¢                  j¦                  g«       e4d´dµ«      �d2dxed²edeÄeef   fd¶„«       «       ZÒ eIeA�j¦                  j¤                  eA�j¦                  �j¨                  g«       e4d·d¸d©d�«      dxedeÄeeeef   fd¹„«       «       ZÓ eIeA�jª                  j¤                  «      	 	 	 �d3dxedºecd»ecd¼ee   fd½„«       ZÖd¾ed¿edeÄeaeb   eaeb   f   fdÀ„Z×d¾ed¿edyee   deÄeef   fdÁ„ZØdAedÂedecfdÃ„ZÙ eIeA�j´                  «      d$ddddddÄœdxed€ed�ecd—ecdƒee   d©ee   d�ee   džee   deÄeeeef   fdÅ„«       ZÚ eIeA�j¶                  j¤                  eA�j¶                  j¦                  g«      d$dddÆœdxed€ed’ecd�ecdÇecdÈee   defdÉ„«       ZÜ eIeA�jº                  «       e4dÊdËd$¬Ì«      	 	 	 �d4d-edxed’ecdÍecdÇecdeÄeef   fdÎ„«       «       ZÞ eIeA�j¾                  j¤                  «      dÏ„ «       Zà eIeA�jÂ                  «       e4«       	 	 �d5dAed™edÂed�ecdÍecdefdÐ„«       «       ZádÑ„ ZâdÒ„ Zã eIeA�jÈ                  «       e4«       dÓ„ «       «       Zå eIeA�jÌ                  «       e4«       dÔ„ «       «       ZçdÕ„ Zè eIeA�jÒ                  «       e4dÖ«      d×„ «       «       Zê eIeA�jÖ                  «       e4dÖ«      dØ„ «       «       ZìdÙ„ Zí eIeA�jÜ                  «       e4«       dÚ„ «       «       Zï eIeA�jà                  «       e4«       dÛ„ «       «       Zñ eIeA�jä                  j¤                  eA�jä                  �jæ                  eA�jè                  j¤                  eA�jè                  �jæ                  g«       e4dÖ«      dÜ„ «       «       ZõdÝ„ Zö eIeA�jî                  «       e4«       dÞ„ «       «       Zø eIeA�jò                  «       e4«       dß„ «       «       Zú eIeA�jö                  j¤                  eA�jö                  �jæ                  eA�jø                  j¤                  eA�jø                  �jæ                  g«       e4dÖ«      dà„ «       «       Zý eIeA�jü                  «       e4«       �d6d-edáeÿdefdâ„«       «       �Z  eIeA�j                  «       e4«       dãed-edáeÿdäedef
då„«       «       �Z eIeA�j                  j¤                  eA�j                  j¦                  g«       e4d$¬Ì«      dLdLdæœdç„«       «       �Z eIeA�j
                  j¤                  eA�j
                  j¦                  g«       e4«       dd4œdè„«       «       �Z eIeA�j                  �jþ                  «      �d7dé„«       �Z eIeA�j
                  �j                  «      �d7dê„«       �Z
 eIeA�j                  j¤                  eA�j                  j¦                  g«       e4«       �d*dë„«       «       �Z eIeA�j                  j¤                  «      	 	 �d0dì„«       �Z eIeA�j                  «       e4d$¬Ì«      dí„ «       «       �Zdî„ �Z�d8dï„�Z	 �d*dðej,                  dBej,                  dñeeaeb   ebf   dòeeaeb   ebf   dóeeaeb   ebf   dôecdõebdöeeeaeb   ebf      fd÷„�Zdø„ �Z eIeA�j*                  j¤                  «      dðej,                  dBej,                  dDeej,                     dùeej,                     dúeej,                     dûecdüeÿdýeÿfdþ„«       �Z eIeA�j.                  j¤                  «      dðej,                  dBej,                  dDej,                  dñeaeb   dòeaeb   dóeaeb   dôecdöeaeb   dõebfdÿ„«       �Ze�j2                  �j4                  �r˜ej„                  j‡                  �d dd«      �Z eIej€                  �j8                  �j:                  j¤                  «      �d„ «       �Z eIej€                  �j8                  �j>                  j¤                  «      �d„ «       �Z e�j2                  �jB                  rOej„                  j‡                  �ddd«      �Z" eIej€                  �jF                  �jH                  «      �d„ «       �Z%ej„                  j‡                  �ddd«      �Z& eIej€                  �jN                  �jP                  j¤                  «       eIej€                  �jN                  �jR                  j¤                  «      �d„ «       «       �Z* eIej€                  �jN                  �jP                  �jV                  «      �d„ «       �Z, eIej€                  �jN                  �jZ                  j¤                  «       eIej€                  �jN                  �jZ                  �j\                  «      �d„ «       «       �Z/ eIej€                  �jN                  �jZ                  �jV                  «       eIej€                  �jN                  �jZ                  �j`                  «      �d	„ «       «       �Z1 eIej€                  �jN                  �jd                  j¤                  «       eIej€                  �jN                  �jf                  j¤                  «      �d
„ «       «       �Z4ej„                  j‡                  �ddd«      �Z5 eIej€                  �jl                  �jn                  «      	 	 	 	 �d9�d„«       �Z8 eIej€                  �jl                  �jr                  «      �d„ «       �Z:�d„ �Z; eIeA�jx                  j¤                  «      	 	 	 	 	 �d:�d„«       �Z=�d„ �Z> eIeA�j~                  j¤                  «      �d„ «       �Z@ eIeA�j‚                  «       e4«       	 	 	 	 	 �d:�d„«       «       �ZB eIeA�j†                  «       e4dÖ«      �d„ «       «       �ZD eIeA�jŠ                  j¤                  «      �d„ «       �ZF eIeA�jŽ                  j¤                  «      �d„ «       �ZH eIeA�j’                  j¤                  «      �d„ «       �ZJ eIeA�j–                  «       e4dÖ«      �d„ «       «       �ZL�ded~ef�d„�ZM eIeA�jœ                  «       e4dÈd)«      �d„ «       «       �ZO eIeA�j                   «       e4dÖ«      �d„ «       «       �ZQ eIeA�j¤                  «       e4dÈd)«      �d„ «       «       �ZS eIeA�j¨                  «       e4dÖ«      �d„ «       «       �ZU eIeA�j¬                  j,                  «      �d*�d „«       �ZW eIeA�j°                  j¤                  eA�j°                  j¦                  g«       e4«       �d!„ «       «       �ZY eIeA�j´                  j¤                  eA�j´                  j¦                  g«       e4«       d�d"œ�d#ebf�d$„«       «       �ZZ eIej€                  j‚                  �j¶                  j¤                  ej€                  j‚                  �j¶                  j¦                  g«       e4«       �d%„ «       «       �Z[ eIeA�j¸                  j,                  eA�jº                  j,                  g«      �d&„ «       �Z^ eIeA�j¾                  j¤                  g«      �d'„ «       �Z` eIeA�jÂ                  j¤                  eA�jÂ                  j¦                  g«       e4d$¬Ì«      dLdLdæœ�d(„«       «       �Zb eIeA�jÆ                  j,                  g«      �d)„ «       �Zd eIeA�jÊ                  j¤                  eA�jÌ                  j¤                  g«      dd�d*œ�d+„«       �Zg eIeA�jÐ                  j¤                  g«      dd�d*œ�d,„«       �Zi eIeA�jÔ                  g«       e4«       �d-„ «       «       �Zk eIeA�jØ                  g«      �d.„ «       �Zm eIeA�jÜ                  g«      �d/„ «       �Zo eIeA�jà                  g«      �d0„ «       �Zq eIeA�jä                  g«      �d1„ «       �Zs eIeA�jè                  g«      �d2„ «       �Zt�d3eb�d4ebdebf�d5„�Zu�d6„ �Zv eIeA�jî                  g«      dDee   f�d7„«       �Zx eIeA�jò                  g«      �d8„ «       �Zz eIeA�jö                  g«      �d9„ «       �Z| eIeA�jú                  j¤                  «      �d:„ «       �Z~ eIeA�jþ                  «       e4«       �d;„ «       «       �Z€ eIeA�j                  j¤                  «      	 	 	 	 	 	 �d;�d<„«       �Z‚ eIeA�j                  j¤                  «      �d=„ «       �Z„�d(�d>„�Z… eIeA�j                  j¤                  eA�j                  j¦                  g«       e4«       �d<d�d?œ�d@„«       «       �Z‡ eIeA�j                  j¤                  eA�j                  j¤                  g«      �dA„ «       �ZŠ eIeA�j                  �j&                  eA�j                  �j                  eA�j                  �j&                  eA�j                  �j                  eA�j                  j¤                  eA�j                  �j                  g«       e4d(d)«      �d=�dB„«       «       �ZŽ eIeA�j                  j¤                  «      �dC„ «       �Z� eIeA�j"                  j¤                  «      �dD„ «       �Z’ eIeA�j&                  j¤                  «      �dE„ «       �Z” eIeA�j*                  �j,                  eA�j.                  �j,                  eA�j*                  j,                  eA�j.                  j,                  eA�j0                  j¤                  eA�j2                  j¤                  eA�j4                  j¤                  g«      �dF„ «       �Z› eIeA�j8                  �j,                  eA�j:                  �j,                  eA�j8                  j,                  eA�j:                  j,                  g«      �d�dG„«       �Zž eIeA�j>                  j¤                  eA�j>                  �j@                  g«      �dH„ «       �Z¡�dI„ �Z¢ eIeA�jF                  j,                  eA�jF                  �j,                  g«      �dJ„ «       �Z¤ eIeA�jJ                  j,                  eA�jJ                  �j,                  g«      �dK„ «       �Z¦ eIeA�jN                  j¤                  «      �dL„ «       �Z¨ eIeA�jR                  j,                  eA�jR                  �j,                  g«      �dM„ «       �Zª eIeA�jV                  j,                  eA�jV                  �j,                  g«      �dN„ «       �Z¬ eIeA�jZ                  j¤                  «      �dO„ «       �Z® eIeA�j^                  j,                  «       e4«       �ddef�dP„«       «       �Z° eIeA�jb                  g«       e4«       	 �d>�dQ„«       «       �Z² eIeA�jf                  g«      	 �d>�dR„«       �Z´ eIeA�jj                  g«      	 �d>�dS„«       �Z¶ eIeA�jn                  j¤                  eA�jp                  j¤                  g«      �d'�dT„«       �Z¹ eIeA�jt                  �j,                  «      �dU„ «       �Z» eIeA�jx                  j¤                  «      �dV„ «       �Z½ eIeA�j|                  «      �dW„ «       �Z¿ eIeA�j€                  «       e4«       �dX„ «       «       �ZÁ eIeA�j„                  «      �dY„ «       �ZÃ eIeA�jˆ                  j¤                  «      �d'�dZ„«       �ZÅ eIeA�jŒ                  j¤                  «      �d[„ «       �ZÇ�d,�d\„�ZÈ eIeA�j’                  j¤                  «      �d]„ «       �ZÊ eIeA�j’                  �j                   «      �d^„ «       �ZË�d_„ �ZÌ�d`„ �ZÍ�da„ �ZÎ�db„ �ZÏ	 �d'dAe�dceb�ddeb�deeb�dfeb�dgeb�dheb�dieb�djeb�dkeb�dleb�dmeb�dneb�doeb�dpeb�dqeb�dreb�dseb�dteb�duebd„e�dvecf,�dw„�ZÐ�dx„ �ZÑdAe�de�dceb�ddeb�deeb�dfeb�dgeb�dheb�dieb�djeb�dkeb�dleb�dpeb�dqeb�dreb�dseb�dteb�duebd„ef&�dy„�ZÒ�dz„ �ZÓ eIeA�j¨                  j¤                  «      �d{„ «       �ZÕ eIeA�j¬                  j¤                  «      	 	 	 	 �d9�d|„«       �Z× eIeA�j°                  j¤                  «      �d}„ «       �ZÙ eIeA�j´                  «       e4dÈd)«      	 	 	 	 �d9�d~„«       «       �ZÛ eIeA�j¸                  «       e4dÖ«      �d„ «       «       �ZÝdAe�d€ef�d�„�ZÞ G �d‚„ �dƒe«      �ZßdAe�d€e�d„ebf�d…„�Zà eIeA�jÂ                  j¤                  «      �d†„ «       �Zâ eIeA�jÆ                  «       e4«       �d‡„ «       «       �Zã eIeA�jÈ                  «       e4dÖ�dˆ«      �d‰„ «       «       �Zä eIeA�jÊ                  j¤                  g«      �dŠ„ «       �Zå eIeA�jÌ                  j¤                  «      	 	 	 	 	 �d?�d‹„«       �Zæ eIeA�jÎ                  j¤                  eA�jÎ                  j¦                  g«       e4«       ddddd�dŒœ�d�„«       «       �Zè eIeA�jÒ                  j¤                  eA�jÒ                  j¦                  g«       e4«       ddddd�dŒœ�dŽ„«       «       �Zê eIeA�jÖ                  jÄ                  «      �d�„ «       �Zì eIeA�jÚ                  j¤                  «      �d�„ «       �Zî eIeA�jÞ                  j¤                  «      �d@�d‘„«       �Zð�d(d.eb�d’eb�d“ecf�d”„�Zñ�d•„ �Zò�d–„ �Zó eIeA�jè                  j¤                  «      �d'�d—„«       �Zõ�d'�d˜„�Zö�d*�d™„�Z÷�dš„ �Zø�d*�d›„�Zù�dA�dœ„�Zú eIeA�jö                  j¤                  «      �d�„ «       �Zü eIeA�jú                  «      �dž„ «       �Zþ eIeA�jþ                  �j                   eA�jþ                  �j                  eA�jþ                  j                  eA�jþ                  �j                  g«       e4«       �d*�dŸ„«       «       �Z eIeA�j                  �j                   eA�j                  �j                  eA�j                  j                  eA�j                  �j                  g«      �d*�d „«       �Z eIeA�j                  g«      	 	 	 	 �dB�d¡e�d¢e�d£e�d¤eÿ�d¥ec�d¦ec�d§eeÿ   f�d¨„«       �Z�d¡e�d©eÄeb�dªf   f�d«„�Z eIeA�j                  g«      	 	 	 	 �dB�d¡e�d¢e�d£e�d¬ee   �d­ec�d¤eÿ�d¥ec�d¦ec�d§eeÿ   f�d®„«       �Z
 eIeA�j                  g«      	 	 	 	 	 �dC�d¡e�d¢e�d£e�d¬ee   �d¤eÿ�d¥ec�d¦ec�d§eeÿ   f�d¯„«       �Z eIeA�j                  g«      	 �d*�d°e�d¡e�d¢e�d£edÈe�d±e�d²e�d³e�d´eb�dµeb�d¤eÿ�d¥ec�d¶e�d·e�d§eeÿ   f�d¸„«       �Z eIeA�j                  g«      	 	 	 	 �dD�d¡e�d¢e�d£e�d¤eÿ�d¥ec�d¹ee   �d§eeÿ   f�dº„«       �Z eIeA�j"                  g«      	 	 �d,�d°e�d¡e�d¢e�d£edÈe�d±e�d¤eÿ�d¥ec�d¹ee   �d§eeÿ   f�d»„«       �Z eIeA�j&                  g«      	 	 	 �dE�d¡e�d¢e�d£e�d¬ee   �d­ec�d¥ec�d§eeÿ   f�d¼„«       �Z eIeA�j*                  g«      	 	 �dF�d°e�d¡e�d¢e�d£e�d¬ee   dÈe�d±e�d¶e�d·e�d¤eÿ�d½eaec   �d¥ec�d§eeÿ   f�d¾„«       �Z eIeA�j.                  g«      	 �d*�d°e�d¡e�d¢e�d£edÈe�d±e�d¶e�d·e�d¬e�d²e�d³e�d´eb�dµeb�d¤eÿ�d¥ec�d§eeÿ   f �d¿„«       �Z eIeA�j2                  g«      	 	 	 	 	 �d?�d¡e�d¢e�d£e�d²ee   �d³ee   �d´eb�dµeb�d¤eÿ�d¥ec�d¦ec�d§eeÿ   �dÀeeb   �dÁeeb   �dÂee   �dÃee   f�dÄ„«       �Z eIeA�j6                  g«      	 	 	 �d)�d°e�d¡e�d¢e�d£edÈe�d±e�d²e�d³e�d´eb�dµeb�d¤eÿ�d¥ec�d¶e�d·e�d§eeÿ   �dÀeeb   �dÁeeb   f"�dÅ„«       �Z eIeA�j:                  g«      	 	 	 	 	 �dG�d¡e�d¢e�d£edDee   �dÆee   �dÇee   �dÈeeb   �dÉeeb   �d¤eÿ�dÊeb�d­ec�d§eeÿ   �dËee   �dÌee   �dÍeeb   f�dÎ„«       �Z eIeA�j>                  g«      	 	 	 �dA�d°e�d¡e�d¢e�d£edDee   �dÆee   �dÇee   �dÈe�j@                  �dÉe�j@                  �d±e�d¤eÿ�d¶e�d·e�dÊeb�dÏec�d§eeÿ   �dÐeeb   �dÑecf$�dÒ„«       �Z! eIeA�jD                  j¤                  g«      	 	 	 	 �dHd-ej,                  dJej,                  �dÓej,                  �dÔej,                  dDeej,                     �dÕeej,                     dFee�j                      �dÖecf�d×„«       �Z# eIeA�jH                  �jJ                  eA�jH                  �jL                  g«       e4«       �d(�dØ„«       «       �Z' eIeA�jP                  �jJ                  «      �d(�dÙ„«       �Z) eIeA�jT                  j¤                  eA�jT                  j¦                  g«       e4«       �d'dd4œ�dÚ„«       «       �Z+�dÛ„ �Z,�dÜ„ �Z- eIeA�j\                  j¤                  eA�j^                  j¤                  g«      �d*�dÝ„«       �Z. eIeA�j`                  j¤                  eA�jb                  j¤                  g«      �d,�dÞ„«       �Z0 eIeA�jd                  j¤                  eA�jf                  j¤                  g«      	 	 �d,�de�dßeeebe�j@                  f      �dàeeebe�j@                  f      �dáeeÿ   �dâeeÿ   f
�dã„«       �Z2 eIeA�jh                  j¤                  eA�jj                  j¤                  g«      �d)�dä„«       �Z4 eIeA�jl                  j¤                  eA�jl                  �jn                  eA�jl                  �j                  eA�jl                  �jp                  g«      �dI�då„«       �Z9�dæ„ �Z: eIeA�jv                  j¤                  «      	 	 �d,�dç„«       �Z< eIeA�jz                  j¤                  «      �dè„ «       �Z= eIeA�j|                  j¤                  «      �dé„ «       �Z>�dê„ �Z?�dë„ �Z@ eIeA�j‚                  j¤                  eA�j„                  j¤                  g«      �d<�dì„«       �ZC eIeA�jˆ                  j¤                  «      �dJ�dí„«       �ZD eIeA�jŠ                  j¤                  «      �dK�dî„«       �ZF eIeA�jŽ                  «       e4«       	 �dL�dï„«       «       �ZH eIeA�j’                  j¤                  eA�j’                  �j                  g«       e4d(d)«      �d=�dð„«       «       �ZJe�j–                  �ZL�dñ„ �ZM eIeA�jœ                  j¤                  «      �dò„ «       �ZN eIeA�jž                  j¤                  «      �dó„ «       �ZO eIeA�j                   j¤                  «      �dô„ «       �ZQ eIeA�j¤                  j¤                  «      �dõ„ «       �ZR eIeA�j¦                  j,                  eA�j¦                  �j¨                  g«       e4«       dd�döœ�d÷„«       «       �ZU eIeA�j¬                  g«       e4«       �dM�dø„«       «       �ZW eIeA�j°                  j¤                  eA�j²                  j¤                  g«      	 	 �d,�dù„«       �ZZ eIeA�j¶                  j¤                  g«      	 	 �d,�dú„«       �Z\ eIeA�jº                  j¤                  «      �dû„ «       �Z] eIeA�j¼                  j¤                  eA�j¼                  j¦                  g«       e4«       �d)�dü„«       «       �Z^ eIej€                  j‚                  �j¾                  «      �dý„ «       �Z_ eIej€                  j‚                  �jÀ                  «      �dþ„ «       �Z` eIeA�jÂ                  «       e4«       dddd�dÿœ�d „«       «       �Zb�d„ �Zc eIeA�jÈ                  «      �d„ «       �Ze eIeA�jÌ                  «      	 �dN�d„«       �Zg eIeA�jÐ                  «      	 �dN�d„«       �Zi eIeA�jÔ                  «      	 �dN�d„«       �Zk eIeA�jØ                  «       e4«       dd�dœ�d„«       «       �Zm eIeA�jÜ                  «       e4«       �debd-edef�d	„«       «       �Zo eIeA�jà                  «      d-ef�d
„«       �Zq eIeA�jä                  «       e4d$¬Ì«      d-edef�d„«       «       �Zr eIeA�jæ                  «       e4«       d-edef�d„«       «       �Zs�d„ �Zt	 	 	 	 	 �dO�de�de�dÓeej,                     �dÔeej,                     �dee   dDee   �dÕeej,                     dFee�j                      �dÖecf�d„�Zu eIeA�jì                  «       e4«       	 	 	 �d)�de�de�dee   dDee   dFee�j                      def�d„«       «       �Zw eIeA�jð                  j¤                  g«      	 	 	 	 	 �dO�dej,                  �dej,                  �dÓej,                  �dÔej,                  �deej,                     dDeej,                     �dÕeej,                     dFee�j                      �dÖecf�d„«       �Zy eIeA�jô                  «       e4«       �ded.eb�decdef�d„«       «       �Z{ eIeA�jø                  «       e4«       �d�d„«       «       �Z} eIeA�jü                  «       e4«       	 	 	 �dPdBed)e�deb�dec�decdef�d„«       «       �Z~ eIeA�jþ                  j¤                  «      	 �dQd(edbeae   �deaeb   �deÿf�d„«       �Z€�d„ �Z��d „ �Z‚ �e�eA�j                  «        �e�eA�j                  «        �e�eA�j
                  «        �e�eA�j                  «        �e�eA�j                  «        �e�eA�j                  «        �e�eA�j                  «        �e�eA�j                  «        �e�eA�j                  «        �e‚eA�j                  «        �e‚eA�j                  «        �e‚eA�j                  «        �e‚eA�j                  «        �e‚eA�j                   «        �e‚eA�j"                  «        �e‚eA�j$                  «        �e‚eA�j&                  «        �e‚eA�j(                  «        �e‚eA�j*                  «        �e‚eA�j,                  «        �e‚eA�j.                  «       �d!„ �Z˜ eIeA�j2                  «       e4«       �d"„ «       «       �Z™ eIeA�j4                  «       e4«       dL�d#œ�d$„«       «       �Zš eIeA�j6                  «       e4«       dL�d#œ�d%„«       «       �Z› �e˜eA�j2                  «      �Zœ �e˜eA�j4                  «      �Z� �e˜eA�j6                  «      �Zžd dl5Zd d�lŸZd d�l Z�d&„ �Z¡ �e¡«        y(R  é    N)ÚSequence)ÚEnum)ÚreduceÚwraps)ÚCallableÚOptionalÚTypeVarÚUnion)Ú	ParamSpec)ÚSymBoolÚSymFloatÚTensor)Ú_add_op_to_registryÚ_convert_out_paramsÚglobal_decomposition_tableÚ
meta_table)Ú
OpOverload)Ú_prim_elementwise_metaÚ$ELEMENTWISE_PRIM_TYPE_PROMOTION_KINDÚview_of)ÚBoolLikeÚcorresponding_complex_dtypeÚcorresponding_real_dtypeÚdefinitely_contiguousÚelementwise_dtypesÚELEMENTWISE_TYPE_PROMOTION_KINDÚ	FloatLikeÚIntLikeÚis_contiguousÚmake_contiguous_strides_forÚNumberÚsuggest_memory_formatÚ
TensorLike)Ú_maybe_convert_to_dtypeÚ_maybe_resize_outÚ_resize_output_checkÚ_safe_copy_outÚout_wrapper)Ú_broadcast_shapesÚ_maybe_broadcast)Ú_config)Ú_pytreeÚ_TÚ_PÚatenÚIMPLÚMetaé   Úreturnc                 ó   ‡ — ˆ fd„}|S )Nc                 óV   •‡ — t        ‰ «      Š ˆ fd„}t        j                  |‰«       ‰ S )Nc                 ó(   •— t        t        | ‰«       y ©N)r   r   )ÚopÚfns    €ún/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/torch/_meta_registrations.pyÚregisterz0register_meta.<locals>.wrapper.<locals>.registerA   s   ø€ Ü¤
¨B°Õ3ó    )r   ÚpytreeÚ	tree_map_)r9   r;   r8   s   ` €r:   Úwrapperzregister_meta.<locals>.wrapper>   s)   ù€ Ü  Ó$ˆô	4ô 	×Ñ˜ 2Ô&Øˆ	r<   © )r8   r?   s   ` r:   Úregister_metarA   =   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_kindrB   )Úutilsr   r$   r*   r   r   ÚDEFAULT)rB   ÚargsÚ_Úresult_dtypeÚxs        r:   Úelementwise_metarK   J   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 r7   )ÚtorchÚ	complex32ÚhalfÚcfloatÚfloatÚcdoubleÚdoubleÚget)ÚdtypeÚfrom_complexs     r:   ÚtoRealValueTyperW   ^   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 r@   )Úbroadcasted_shapeÚ
self_shapes   €€r:   ú<lambda>z)check_inplace_broadcast.<locals>.<lambda>k   s   ø€ Ð$ Z LÐ0SÐTeÐSfÐg€ r<   )Útupler)   rM   Ú_check)r[   Ú
args_shaperZ   s   ` @r:   Úcheck_inplace_broadcastr`   g   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 tensorsr@   r@   r<   r:   r\   z(meta_linspace_logspace.<locals>.<lambda>   ó   � r<   c                   ó   — yrc   r@   r@   r<   r:   r\   z(meta_linspace_logspace.<locals>.<lambda>„   rd   r<   c              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wr7   )Ú
isinstanceÚcomplex)Ú.0Úargs     r:   ú	<genexpr>z)meta_linspace_logspace.<locals>.<genexpr>‡   s   è ø€ Ò
C¨Œ:�cœ7×#Ñ
Cùs   ‚c                  ó   •— d‰ › d‰› �S )Nzlinspace(): inferred dtype z& can't be safely cast to passed dtype r@   )Údefault_complex_dtyperU   s   €€r:   r\   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:   r\   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-negativer@   r@   r<   r:   r\   z(meta_linspace_logspace.<locals>.<lambda>�   rd   r<   Úmeta©rU   ÚlayoutÚdeviceÚ
pin_memoryÚrequires_grad)rg   rM   r   r^   ÚdimÚanyrE   r   Úget_default_dtypeÚis_complex_dtyperU   Ú_check_typer   Úempty)
rt   rs   ru   ÚbaserU   rz   ry   r{   r|   rm   s
   ``` `    @r:   Úmeta_linspace_logspacer„   o   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 ©rU   ©Úindexs   €r:   r\   zmeta_take.<locals>.<lambda>¯   s   ø€ ÐDÀUÇ[Á[ÀMÐR€ r<   r   c                   ó   — y)Nz*take(): tried to take from an empty tensorr@   r@   r<   r:   r\   zmeta_take.<locals>.<lambda>´   rd   r<   )rM   r^   rU   ÚlongÚ_check_indexÚnumelÚ	new_emptyÚshape)Úselfr‰   s    `r:   Ú	meta_taker‘   ©   sm   ø€ ô 
‡L�LØ�‰”u—z‘zÑ!ÛRôô
 
×ÑØ�Z‰Z‹\˜QÑÒ5 5§;¡;£=°AÑ#5Ð6Ù<ôð �>‰>˜%Ÿ+™+Ó&Ð&r<   éÿÿÿÿ©r}   c                óT  ‡ ‡‡— ‰ j                   }‰j                   }t        j                  ||k(  d„ «       t        j                  ‰ j                  ‰«      dk(  xr ‰j                  ‰«      dk(  ˆˆˆ fd„«       t	        ‰ j
                  ‰j
                  «      }‰ j                  |«      S )Nc                   ó   — y)Nz=linalg.cross: inputs must have the same number of dimensions.r@   r@   r<   r:   r\   zlinalg_cross.<locals>.<lambda>À   rd   r<   r2   c                  óV   •— d‰ › d‰j                  ‰ «      › d‰j                  ‰ «      › �S )Nzlinalg.cross: inputs dimension z must have length 3. Got ú and ©Úsize)r}   Úotherr�   s   €€€r:   r\   zlinalg_cross.<locals>.<lambda>Ä   s6   ø€ Ø-¨c¨Uð 3Ø—9‘9˜S“>Ð" %¨¯
©
°3«Ð'8ð:ð r<   )ÚndimrM   r^   r™   r)   r�   rŽ   )r�   rš   r}   Ú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                 ór  ‡‡‡— ddl mŠmŠm} ˆˆfd„}ˆˆfd„}t	        | «      dk(  rdgt	        |«      z  S t        t        j                  | d«      } ||dk(  «      }|r | || |«      «      r|S dgt	        |«      z  }	|rUt        t	        |«      dz
  dd«      D ]7  }
|
t	        |«      dz
  k(  rd|	|
<   Œt        ||
dz      d«      |	|
dz      z  |	|
<   Œ9 |	S t	        |«      dz
  }
|d   }d}d}t        t	        | «      dz
  dd«      D ]¨  }|| |   z  }|dk(  s' || |dz
     dk7  «      sŒ" |||dz
     ||z  k7  «      sŒ7|
dk\  rN |||k  «      s |||
   dk(  «      r5||z  |	|
<   |||
   z  }|
dz  }
|
dk\  r |||k  «      rŒ& |||
   dk(  «      rŒ5 |||k7  «      r y |dkD  sŒ�||dz
     }d}d}Œª |
dk7  ry |	S )Nr   )Úguard_or_falseÚguard_or_trueÚsym_eqc                 ó   •— ‰r ‰| «      S | S r7   r@   )rJ   r¡   Úsize_obliviouss    €€r:   Úmaybe_guard_or_falsez-_compute_stride.<locals>.maybe_guard_or_falseÕ   s   ø€ ÙÙ! !Ó$Ð$àˆr<   c                 ó   •— ‰r ‰| «      S | S r7   r@   )rJ   r¢   r¥   s    €€r:   Úmaybe_guard_or_truez,_compute_stride.<locals>.maybe_guard_or_trueÛ   s   ø€ ÙÙ  Ó#Ð#àˆr<   é   r’   )
Ú%torch.fx.experimental.symbolic_shapesr¡   r¢   r£   Úlenr   ÚoperatorÚmulÚrangeÚmax)Ú	old_shapeÚ
old_strideÚ	new_shaper¥   r£   r¦   r¨   r�   Ú
zero_numelÚ
new_strideÚview_dÚchunk_base_strideÚtensor_numelÚ
view_numelÚtensor_dr¡   r¢   s      `           @@r:   Ú_compute_striderº   Î   s<  ú€ ÷ñ õõô ˆ9ƒ~˜ÒØˆs”S˜“^Ñ#Ð#ä”8—<‘< ¨AÓ.€EÙ% e¨q¡jÓ1€JÙÑ*©6°)¸YÓ+GÔHØÐà�”s˜9“~Ñ%€JáÜœC 	›N¨QÑ.°°BÓ7ò 	ˆFØœ˜Y›¨!Ñ+Ò+Ø%&�
˜6Ò"ô ˜	 &¨1¡*Ñ-¨qÓ1°J¸vÈ¹zÑ4JÑJð ˜6Ò"ð		ð Ðä�‹^˜aÑ€FØ" 2™ÐØ€LØ€Jäœ#˜i›.¨1Ñ,¨b°"Ó5ò ˆØ˜	 (Ñ+Ñ+ˆà�qŠ=Ù 	¨(°Q©,Ñ 7¸1Ñ <Õ=Ù#Ø˜8 a™<Ñ(¨LÐ;LÑ,LÑLõð ˜A’+Ù# J°Ñ$=Ô>Ù'¨	°&Ñ(9¸QÑ(>Ô?à%/Ð2CÑ%C�
˜6Ñ"Ø˜i¨Ñ/Ñ/�
Ø˜!‘�ð ˜A’+Ù# J°Ñ$=Õ>Ù'¨	°&Ñ(9¸QÑ(>Õ?ñ # :°Ñ#=Ô>Ùà˜!‹|Ø$.¨x¸!©|Ñ$<Ð!Ø �Ø‘
ð/ð0 �‚|ØØÐr<   c                 óÈ   ‡— ddl mŠ t        ˆfd„| j                  «       D «       «      xs8 t        ˆfd„| j	                  «       D «       «      xs t        ˆfd„|D «       «      S )Nr   )Úhas_hintc              3   ó0   •K  — | ]  } ‰|«       –— Œ y ­wr7   r@   ©ri   Úsr¼   s     €r:   rk   z+_view_has_unbacked_input.<locals>.<genexpr>  s   øè ø€ Ò. ‘˜“ŒOÑ.ùó   ƒc              3   ó0   •K  — | ]  } ‰|«       –— Œ y ­wr7   r@   r¾   s     €r:   rk   z+_view_has_unbacked_input.<locals>.<genexpr>  s   øè ø€ Ò3 1‘8˜A“;ŒÑ3ùrÀ   c              3   ó0   •K  — | ]  } ‰|«       –— Œ y ­wr7   r@   r¾   s     €r:   rk   z+_view_has_unbacked_input.<locals>.<genexpr>  s   øè ø€ Ò. 1‘8˜A“;ŒÑ.ùrÀ   )rª   r¼   r~   r™   Ústride)Úar�   r¼   s     @r:   Ú_view_has_unbacked_inputrÅ     sM   ø€ Ý>ô 	Ó. Q§V¡V£XÔ.Ó.ò 	/ÜÓ3¨¯©«
Ô3Ó3ò	/äÓ.¨Ô.Ó.ðr<   Tc                 ó(  ‡ ‡— ddl m}m} t        j                  ‰d¬«      Št        j
                  ‰‰ j                  «       «      Š‰ j                  dk(  rR‰ }‰D ]:  }t        j                  |dk(  «       t        j                  j                  |d«      }Œ< |‰ u rt        ‰ «      S |S t        ‰«      dk(  r\‰ }‰ j                  D ]:  }t        j                  |dk(  «       t        j                  j                  |d«      }Œ< |‰ u rt        ‰ «      S |S t!        t"        j$                  ‰d«      }t        j                  ‰ j                  «       |k(  ˆ ˆfd„«       t        ‰«      t        ‰ j                  «      k(  r$ | |‰‰ j                  «      «      rt        ‰ «      S |rt'        ‰ «      r3nt)        ‰ «      r't        j*                  ‰«      }‰ j-                  ‰|«      S t/        ‰ j1                  «       ‰ j3                  «       ‰|¬«      }	|	�‰ j-                  ‰|	«      S |rHt        j4                  j6                  j8                  j:                  st=        ‰ ‰«      rt?        ‰ ‰d¬	«      S d
‰ j                  › d‰ j3                  «       › d‰› d�}
tA        |
«      ‚)Nr   )r¡   r£   F)Úvalidater©   r’   c                  ó*   •— d‰ j                   › d‰› d�S )Nz&Could not reshape a tensor with shape ú as a tensor with shape ú!©r�   ©rÄ   r�   s   €€r:   r\   z%_view_unbacked_meta.<locals>.<lambda>E  s   ø€ Ð8¸¿¹¸	ÐAYÐZ_ÐY`Ð`aÐb€ r<   )r¥   )Úsize_oblivious_enabledz Cannot view a tensor with shape z and strides rÉ   rÊ   )!rª   r¡   r£   rE   Úextract_shape_from_varargsÚ
infer_sizer�   r›   rM   r^   Ú_refsÚ	unsqueezer   r«   r�   Úsqueezer   r¬   r­   r   r   r    Ú
as_stridedrº   r™   rÃ   ÚfxÚexperimentalr+   Úbacked_size_obliviousrÅ   Ú_view_unbacked_metaÚ
ValueError)rÄ   r�   rÍ   r¡   r£   Ú_aÚlengthÚshape_numelÚstridesÚnew_stridesÚmsgs   ``         r:   r×   r×   !  s,  ù€ ßLô ×,Ñ,¨U¸UÔC€Eô ×Ñ˜U A§G¡G£IÓ.€Eð 	‡v�v�‚{ØˆØò 	/ˆFÜ�L‰L˜ 1™Ô%Ü—‘×&Ñ& r¨2Ó.‰Bð	/ð �‰7Ü˜1“:ÐàˆIô ˆ5ƒz�Q‚ØˆØ—g‘gò 	-ˆFÜ�L‰L˜ 1™Ô%Ü—‘×$Ñ$ R¨Ó,‰Bð	-ð �‰7Ü˜1“:ÐàˆIäœŸ™ u¨aÓ0€Kä	‡L�LØ	�‰‹	�[Ñ Übôô
 ˆ5ƒz”S˜Ÿ™“\Ò!¡n±V¸EÀ1Ç7Á7Ó5KÔ&LÜ�q‹zÐá#9Ô˜QÕ¼}ÈQÔ?OÜ×3Ñ3°EÓ:ˆØ�|‰|˜E 7Ó+Ð+ä!Ø	�‰‹�!—(‘(“*˜eÐ4Jô€Kð ÐØ�|‰|˜E ;Ó/Ð/ñ Ü�‰×Ñ×%Ñ%×;Ò;Ü# A uÔ-ä" 1 eÀEÔJÐJà,¨Q¯W©W¨I°]À1Ç8Á8Ã:À,ÐNfÐglÐfmÐmnÐ
o€CÜ
�S‹/Ðr<   c                 óÔ   — t         j                  j                  j                  j                  st        | |«      rt        | |«      S t        j                  j                  | g|¢­ddiŽS )NÚ
allow_copyF)	rM   rÔ   rÕ   r+   rÖ   rÅ   r×   rÐ   Ú_reshape_view_helperrÌ   s     r:   Ú
_view_metarâ   e  sV   € ä‡x�x×Ñ×$Ñ$×:Ò:Ô>VØ	ˆ5ô?ô # 1 eÓ,Ð,ä�{‰{×/Ñ/°ÐL°EÒLÀeÑLÐLr<   c                 ó|   — t        | d«       t        | d«       t        j                  | t        j                  ¬«      S )Nzlinalg.matrix_exp©Úmemory_format)ÚsquareCheckInputsÚcheckFloatingOrComplexrM   Ú
empty_likeÚcontiguous_format©r�   s    r:   Úlinalg_matrix_exprë   o  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©rz   rU   r   )	rM   r‚   r�   rz   rU   Úint64r�   r›   Úmaybe_wrap_dim)r�   r}   rì   rí   s       r:   Ú	cummaxminrò   w  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                 óx   — t        || j                  «       t        j                  | t        j                  ¬«      S ©Nrä   )rñ   r›   rM   rè   ré   )r�   r}   s     r:   Úlogcumsumexprõ   „  s+   € ô �3˜Ÿ	™	Ô"Ü×Ñ˜D´×0GÑ0GÔHÐHr<   c                óD  ‡— |j                   }t        |«      }||z
  }t        t        |«      «      }t        |«      D �	cg c]  }	d‘Œ }
}	|D ]  }d|
|<   Œ	 g g }}|D ]*  }|
|   s|j	                  |«       Œ|j	                  |«       Œ, ||z   }t        |«      }|j                  «       Š|d | }|j                  ˆfd„d¬«       |||d  z   }|j                  |«      }dgt        |j                  |d  «      z   }|j                  |«      }|j                  d«      }||d<   t        |«      }t        t        |«      «      D ]  }|||      ||dz   <   Œ | j                  |t        j                  ¬«       t        |«      D �	cg c]  }	d‘Œ }}	d}|dz
  }|dk\  r0|| j                  d«      z  |||   <   ||||      z  }|dz  }|dk\  rŒ0t        ||«      D ]  }| j                  d||z
  z   «      |||   <   Œ! | j                  ||| j                  «       «       | S c c}	w c c}	w )	NFTc                 ó   •— ‰|    S r7   r@   )rJ   Úself_stridess    €r:   r\   z_exec_fft.<locals>.<lambda>©  s   ø€ ˜<¨™?€ r<   ©ÚkeyÚreverser’   r   r©   rä   )r›   r«   Úlistr®   ÚappendrÃ   ÚsortÚpermuter�   Úreshaper™   Úresize_rM   ré   Úas_strided_Ústorage_offset)Úoutr�   Ú	out_sizesr}   Úforwardr›   Úsignal_ndimÚ
batch_dimsÚdim_permuterH   Ú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  ‘  sZ  ø€ Ø�9‰9€DÜ�c“(€KØ˜Ñ#€Jô ”u˜T“{Ó#€Kä).¨t«Ö5 Aš%Ð5ÐÐ5Øò %ˆØ $Ð˜1Òð%ð �bˆ%€DØò ˆØ! !Ò$Ø�K‰K˜�Nà�L‰L˜�Oð	ð
 ˜‘,€KÜ�D“	€Ià—;‘;“=€LØ
�j�yÐ
!€CØ‡H�HÓ*°D€HÔ9Ø˜ I JÐ/Ñ/€KØ�L‰L˜Ó%€Eð �Dœ4 §¡¨J¨KÐ 8Ó9Ñ9€MØ�M‰M˜-Ó(€Eà—‘˜A“€JØ!€M�!ÑÜ˜]Ó+ÐÜ”3�s“8‹_ò 5ˆØ#,¨S°©VÑ#4Ð˜!˜a™%Ò ð5à‡K�KÐ!´×1HÑ1H€KÔIô $ D›kÖ*˜’1Ð*€KÐ*Ø€KØ�Q‰€AØ
ˆqŠ&Ø&1°C·J±J¸q³MÑ&Aˆ�K ‘NÑ#Ø�y ¨Q¡Ñ0Ñ0ˆØ	ˆQ‰ˆð ˆq‹&ô �:˜tÓ$ò GˆØ&)§j¡j°°a¸*±nÑ1EÓ&Fˆ�K ‘NÒ#ðGà‡O�O�I˜{¨C×,>Ñ,>Ó,@ÔAà€JùòW 6ùò@ +s   ¿	HÆ 	Hr�   r}   Úexclude_lastc                 ó˜   ‡— t        |«      }| j                  «       Š|d t        |«      t        |«      z
   j	                  ˆfd„¬«       |S )Nc                 ó   •— ‰|    S r7   r@   )r  rø   s    €r:   r\   z_sort_dims.<locals>.<lambda>Ë  s   ø€ �l 1‘o€ r<   )rú   )rü   rÃ   r«   Úintrþ   )r�   r}   r  Úsorted_dimsrø   s       @r:   Ú
_sort_dimsr  Ç  sL   ø€ Ü�s“)€KØ—;‘;“=€LØÐ6”#�kÓ"¤S¨Ó%6Ñ6Ð7×<Ñ<Û%ð =ô ð Ðr<   c                 ó
  — t        j                  | j                  j                  «       |s| j	                  «       S t        | |«      }| j                  | j                  «       «      }t        || | j                  «       ||¬«      S )N©r  )	rM   r^   rU   Ú
is_complexÚcloner  rŽ   r™   r  )r�   r}   Únormalizationr  r  r  s         r:   Úmeta_fft_c2cr#  Ò  sb   € ô 
‡L�L�—‘×&Ñ&Ô'ÙØ�z‰z‹|Ðä˜T 3Ó'€KØ
�.‰.˜Ÿ™›Ó
%€CÜ�S˜$ §	¡	£¨[À'ÔJÐJr<   c                 óf   — t        | «      t        kD  st        | «      dk\  r| d   dk(  r	| d   dk(  ryy)Né   r   r©   FT)r«   Úcufft_max_ndimr“   s    r:   Úuse_optimized_cufft_pathr'  á  s3   € Ü
ˆ3ƒx”.Ò ¤S¨£X°¢]°s¸1±vÀ²{ÀsÈ1ÁvÐQRÂ{Øàr<   c                 óz  ‡— t        j                  | j                  j                  «       t	        | j                  «       «      }t	        |«      }|d   }||   dz  dz   }t	        |«      }|||<   |r|||<   t        | «      dk(  st        | «      dk(  �rz| j                  |t        j                  | j                  «      ¬«      }	| }
t        | «      dk(  rt        |«      rt        |	|
||d¬«       nàt        |«      dk(  r|n|}t        |	|
||gd¬«       t        |«      dkD  r0| j                  |t        j                  | j                  «      ¬«      }
|d d }|rx|
|	}
}	|
j                  «       Š|j                  ˆfd	„d¬
«       t        t         t        |«      «      }|t        |«      |z
  d  }t        |	|
||d¬«       |d t        |«      |z
   }|rŒx|s:|	j                  |«      ||   k7  r#|
j#                  |t         j$                  ¬«       |
}	|	S | j                  |t        j                  | j                  «      ¬«      S )Nr’   r%  r©   ÚcudaÚxpur‡   Tr  c                 ó   •— ‰|    S r7   r@   )r  rÜ   s    €r:   r\   zmeta_fft_r2c.<locals>.<lambda>  s   ø€  '¨!¡*€ r<   rù   rä   )rM   r^   rU   Úis_floating_pointrü   r™   Údevice_hintrŽ   rE   r   r'  r  r«   rÃ   rþ   Úminr&  r  ré   )r�   r}   r"  ÚonesidedÚinput_sizesr  Úlast_dimÚlast_dim_halfsizeÚonesided_sizesÚoutputÚworking_tensorÚtarget_sizesr  Úmax_dimsÚ	last_dimsrÜ   s                  @r:   Úmeta_fft_r2cr9  è  s>  ø€ ô 
‡L�L�—‘×-Ñ-Ô.Ü�t—y‘y“{Ó#€KÜ�[Ó!€IØ�2‰w€HØ# HÑ-°Ñ2°QÑ6ÐÜ˜+Ó&€NØ0€N�8ÑáØ/ˆ	�(Ñä�4Ó˜FÒ"¤k°$Ó&7¸5Ó&@ð —‘ØœU×>Ñ>¸t¿z¹zÓJð  ó 
ˆð ˆÜ�tÓ Ò&Ô+CÀCÔ+HÜ�f˜n¨i¸ÀdÖKô ),¨C«°Aª™9¸>ˆLÜ�f˜n¨l¸X¸JÐPTÕUÜ�3‹x˜!Š|Ø!%§¡Ø¤U×%FÑ%FÀtÇzÁzÓ%Rð "0ó "�ð
 ˜c˜r˜(ˆKÙØ)7¸˜�Ø(×/Ñ/Ó1�Ø× Ñ Û,°dð !ô ô œ~¬s°;Ó/?Ó@�Ø'¬¨KÓ(8¸8Ñ(CÐ(EÐF�	ÜØ˜N¨N¸IÈtõð *Ð*G¬C°Ó,<¸xÑ,GÐH�ò ñ Ø�{‰{˜8Ó$¨	°(Ñ(;Ò;Ø×&Ñ& yÄ×@WÑ@WÐ&ÔXØ'�àˆð �~‰~ØœU×>Ñ>¸t¿z¹zÓJð ó 
ð 	
r<   )Ú	generatorc                óB   — t        |t        j                  | g«      «      S r7   )r%   rM   ÚSize)Únr:  r  s      r:   Úmeta_randpermr>  %  s   € ä˜S¤%§*¡*¨a¨S£/Ó2Ð2r<   ©rU   ry   rz   r{   c                ó6   — t        j                  | ||||¬«      S ©Nr?  ©rM   r‚   )r=  rU   ry   rz   r{   s        r:   Úmeta_randperm_defaultrC  *  s    € ô �;‰;Ø	�˜v¨fÀôð r<   c                óx   ‡ ‡— dŠt        j                  ‰ ‰kD  ˆ ˆfd„«       t        j                  |||||¬«      S )Nr   c                  ó   •— d‰› d‰ › �S ©Nz:random_ expects 'from' to be less than 'to', but got from=z >= to=r@   ©ÚhighÚlows   €€r:   r\   zmeta_randint.<locals>.<lambda>F  ó   ø€ ÐLÈSÈEÐQXÐY]ÐX^Ð_€ r<   r?  ©rM   r^   r‚   )rH  r™   rU   ry   rz   r{   rI  s   `     @r:   Úmeta_randintrL  8  s>   ù€ ð €CÜ	‡L�LØˆs‰
Ü_ôô �;‰;Ø�E &°ÀJôð r<   c                ót   ‡ ‡— t        j                  ‰‰ kD  ˆˆ fd„«       t        j                  |||||¬«      S )Nc                  ó   •— d‰› d‰ › �S rF  r@   rG  s   €€r:   r\   z"meta_randint_low.<locals>.<lambda>[  rJ  r<   r?  rK  )rI  rH  r™   rU   ry   rz   r{   s   ``     r:   Úmeta_randint_lowrO  M  s9   ù€ ô 
‡L�LØˆs‰
Ü_ôô �;‰;Ø�E &°ÀJôð r<   c                ó6   — t        j                  | ||||¬«      S rA  rB  )r™   rU   ry   rz   r{   s        r:   Úmeta_rand_defaultrQ  b  s    € ô �;‰;Ø�E &°ÀJôð r<   r"  Úlastdimc                 ó  — t        j                  | j                  j                  «       t	        | «      dk(  rÔt        | j                  «       «      }|||d   <   | j                  |t        | j                  «      ¬«      }t        |«      r.t        || j                  t         j                  ¬«      ||d¬«      S t        |«      dkD  rt        | |d d d|«      }n | j                  t         j                  ¬«      }t        ||||d   gd¬«      S | }t        |«      dkD  r|d d }t        | ||d¬«      }|dd  }t        |j                  «       «      }|||d   <   | j                  |t        | j                  «      ¬«      }	t        |	|||d¬«      S )	Nr)  r’   r‡   rä   Fr  r©   r   )rM   r^   rU   r   r-  rü   r™   rŽ   rW   r'  r  r!  ré   r«   r#  )
r�   r}   r"  rR  r  r4  Útempr  Úc2c_dimsr  s
             r:   Úmeta_fft_c2rrV  j  sk  € ô 
‡L�L�—‘×&Ñ&Ô'ä�4Ó˜FÒ"Ü˜Ÿ™›Ó%ˆ	Ø$ˆ	�#�b‘'Ñà—‘ 	´ÀÇÁÓ1L�ÓMˆä# CÔ(ÜØØ—
‘
¬×)@Ñ)@�
ÓAØØØôð ô �3‹x˜!Š|Ü# D¨#¨c¨r¨(°A°wÓ?‘à—z‘z´×0GÑ0G�zÓH�Ü˜V T¨9°s¸2±w°iÈÔOÐOð ˆÜˆs‹8�aŠ<Ø˜3˜B�xˆHÜ   x°ÈÔNˆEØ�b�c�(ˆCä˜Ÿ™›Ó&ˆ	Ø$ˆ	�#�b‘'ÑØ�n‰n˜Y¬o¸d¿j¹jÓ.IˆnÓJˆÜ˜˜e Y°¸UÔCÐCr<   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)rª   rX  rM   Ú_debug_has_internal_overlapÚRuntimeErrorrg   r   Útor™   r/   Úexpand_copyÚdefault)r�   ÚsrcÚnon_blockingrX  Úintermediates        r:   Ú
meta_copy_ra  “  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Ã   r}   Úinsert)Útensorr}   Úresult_sizesÚresult_stridesr´   s        r:   ÚinferUnsqueezeGeometryrh  ¬  sq   € Ü˜Ÿ™›Ó&€LÜ˜&Ÿ-™-›/Ó*€NØ˜VŸZ™Z›\Ò)‘¨|¸CÑ/@À>ÐRUÑCVÑ/V€JØ×Ñ˜˜QÔØ×Ñ˜#˜zÔ*Ø˜Ð'Ð'r<   c                 ó‚   — t        || j                  «       dz   «      }t        | |«      \  }}| j                  ||«       | S rc  )rñ   r}   rh  r  )r�   r}   Úg_sizesÚ	g_stridess       r:   Úmeta_unsqueeze_rl  µ  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 operatorr‡   )
rü   r�   r™   r«   rU   rM   Úint8Úint32rŽ   rÓ   )	r  rm  rn  ro  rp  rq  Úoutput_sizesÚtransposed_stridesr4  s	            r:   Úmeta_sparse_structured_linearrx  ½  s  € ô ˜Ÿ™Ó$€LØÐØ�{‰{˜1‹~ §¡¨1£Ò-ÐEÐ/EÓEÐ-Ø�;‰;�q‹>˜UŸZ™Z¨›^¨aÑ/Ò/Ð/Ð/Ø—{‘{ 1“~€L�Ñô ˆu�{‰{Ó˜qÒ ÐNÐ"NÓNÐ Ø˜UŸZ™Z¨›]Ð+ÐàÐØ�{‰{œeŸj™jÒ(¨Y¼%¿+¹+Ò-Eð 	
ØGó	
ÐEð �_‰_ØØ&Ð.ˆe�kŠk°Ið ó ÷ �j�Ð1Ó2ð ð
 €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   rs  r‡   ©r«   r�   r™   rU   rM   rt  ru  rŽ   )ry  rz  r{  rq  rv  r4  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àÐØ�z‰zœUŸZ™ZÒ'¨I¼¿¹Ò,Dð 	
ØGó	
ÐDð �^‰^ØØ%Ð-ˆd�jŠj°9ð ó €Fð
 €Mr<   r©   )ÚalphaÚbetarq  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   rs  r‡   r}  )	r  ry  rz  r{  r  r€  rq  rv  r4  s	            r:   Úmeta_sparse_structured_addmmr‚  ø  s/  € ô ˆu�{‰{Ó˜qÒ ð ØOóÐ ô ˆt�z‰z‹?˜aÒÐÐÜˆy�‰Ó 1Ò$Ð$Ð$Üˆt�z‰z‹?˜aÒÐÐØ�:‰:�a‹=˜DŸI™I a›LÒ(ð ØOóÐ(ð �9‰9�Q‹<˜4Ÿ9™9 Q›<¨!Ñ+Ò+Ð+Ð+Ø—I‘I˜a“L $§)¡)¨A£,Ð/€LàÐØ�z‰zœUŸZ™ZÒ'¨I¼¿¹Ò,Dð 	
ØGó	
ÐDð �^‰^ØØ%Ð-ˆd�jŠj°9ð ó €Fð
 €Mr<   Úcompressed_AÚdense_Br  Útranspose_resultÚalg_idÚsplit_kÚsplit_k_modec	                 óL  — |j                   t        j                  t        j                  t        j                  t        j
                  t        j                  hv sJ d«       ‚| j                   |j                   k(  sJ d«       ‚t        |j                  «      dk(  sJ d«       ‚| j                   t        j
                  t        j                  fv }	|	rdnd}
|	r|j                  «       rJ d«       ‚|j                  d«      }|j                  d	«      }| j                  «       d
z  |
|z  z  }|�||j                  d«      k(  sJ ‚|�I|	r@|t        j                  t        j                  t        j                  t        j                  hv sJ d«       ‚|r||fn||f}|j                  ||¬«      S )Nz;_cslt_sparse_mm only supports fp16, bf16, int8, and fp8e4m3zinputs must have the same dtyper%  z'_cslt_sparse_mm only supports 2d inputsé
   é	   z.dense input must be transposed for 8bit dtypesr   r©   é   z\out_dtype is not supported for {compressed_A.dtype} x {dense_B.dtype} -> {out_dtype} matmul!r‡   )rU   rM   Úfloat32Úfloat16Úbfloat16rt  Úfloat8_e4m3fnr«   r�   r   r™   r�   ru  rŽ   )rƒ  r„  ro  r  rq  r…  r†  r‡  rˆ  Úis_8bit_input_typeÚcompression_factorÚkr=  ÚmÚoutput_shapes                  r:   Úmeta__cslt_sparse_mmr–    sž  € ð �=‰=Ü�‰Ü�‰Ü�‰Ü�
‰
Ü×Ñðñ ð Eð EóEð ð ×Ñ §¡Ò.ÐQÐ0QÓQÐ.Üˆw�}‰}Ó Ò"ÐMÐ$MÓMÐ"à%×+Ñ+´·
±
¼E×<OÑ<OÐ/PÐPÐÙ1™°qÐáØ×(Ñ(Ô*ð 	
Ø<ó	
Ð*ð 	�‰�Q‹€AØ�‰�Q‹€AØ	×	Ñ	Ó	 Ñ	"Ð(:¸QÑ(>Ñ?€AØÐØ�D—I‘I˜a“LÒ Ð Ð àÐÙ! iÜ�M‰MÜ�N‰NÜ�K‰KÜ×Ñð	4
ñ '
ð 	
ð kó	
ð 
ñ .�A�q‘6°A°q°6€LØ×Ñ˜\°ÐÓ;Ð;r<   )Úinclude_selfr‰   Úsourcer   r—  c                óL   — t        j                  | t         j                  ¬«      S rô   ©rM   rè   ré   ©r�   r}   r‰   r˜  r   r—  s         r:   Úmeta_index_reducerœ  L  s   € ô ×Ñ˜D´×0GÑ0GÔHÐHr<   c                ó   — | S r7   r@   r›  s         r:   Úmeta_index_reduce_rž  Y  s	   € ð €Kr<   c                 ó¢   — t        | j                  «       «      }| j                  «       dkD  r|j                  «       ||<   | j	                  |«      S ©Nr   )rü   r™   r}   r�   rŽ   )r�   r}   r‰   Úresult_sizes       r:   Úmeta_index_selectr¢  g  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©   rw   ©rU   rz   rå   )rM   r‚   r�   rU   ré   )Úlengths_shaper¥  r¨  s    €€r:   Úsegment_reduce_lengths_tensorz:meta_segment_reduce.<locals>.segment_reduce_lengths_tensor�  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�   rZ  )
r¨  r   r£  rí   r¤  r¥  r¦  r§  r­  r¬  s
   `    `    r:   Úmeta_segment_reducer¯  p  s|   ù€ ð ÐÜ!ØMó
ð 	
õ
ð ÐÙ,¨W¯]©]Ó;Ð;ð ÐàŸ™ c rÐ*¨g¯m©m¸BÑ.?À!Ñ.CÐ-EÑEˆÙ,¨]Ó;Ð;Ü
ÐUÓ
VÐVr<   c                 ó$   — | j                  d«      S ©Nr@   ©rŽ   rê   s    r:   Úmeta_maxr³  ”  ó   € ð �>‰>˜"ÓÐr<   c                 óÂ   — t        j                  | j                  |f«      }t        | ||«      }| j	                  |«      | j	                  |t
        j                  ¬«      fS ©Nr‡   ©rE   Úreduction_dimsr�   Ú_compute_reduction_shaperŽ   rM   r‹   ©r�   r}   Úkeepdimr•  s       r:   Úmeta_max_dimr¼  š  óR   € ä
×
Ñ
˜tŸz™z¨C¨6Ó
2€CÜ+¨D°#°wÓ?€Là�‰�|Ó$Ø�‰�|¬5¯:©:ˆÓ6ðð r<   c                 ó$   — | j                  d«      S r±  r²  rê   s    r:   Úmeta_minr¿  ¤  r´  r<   c                 óÂ   — t        j                  | j                  |f«      }t        | ||«      }| j	                  |«      | j	                  |t
        j                  ¬«      fS r¶  r·  rº  s       r:   Úmeta_min_dimrÁ  ª  r½  r<   c                 ó¸   — | j                  «       rt        | j                  «      }nt        | t        j
                  ¬«      \  }}t        j                  | |¬«      S ©N©rD   r‡   )r   r   rU   r   r   ÚINT_TO_FLOATrM   rè   )r�   rI   rH   s      r:   Ú
meta_anglerÆ  ´  sI   € à‡�ÔÜ/°·
±
Ó;‰ä,ØÜ ?× LÑ Lô
‰ˆˆ<ô ×Ñ˜D¨Ô5Ð5r<   c                 ó¨   — t        j                  || j                  «       | j                  «       |j	                  t        j
                  | «      «      S r7   )rM   Ú_resize_output_r™   rz   Úcopy_Úangle)r�   r  s     r:   Úmeta_angle_outrË  À  s6   € ä	×Ñ˜#˜tŸy™y›{¨D¯K©KÔ8Ø�9‰9”U—[‘[ Ó&Ó'Ð'r<   c                  ó   — y r7   r@   )Úvals    r:   Úassert_asyncrÎ  Æ  ó   € à
r<   c                  ó   — y r7   r@   )rÍ  Ú
assert_msgs     r:   Úassert_async_metarÒ  Ë  rÏ  r<   c                  ó   — y r7   r@   )r¿   s    r:   Ú
print_metarÔ  Ð  rÏ  r<   ©rU   ry   rz   r{   rå   c                 ó0   — t        j                  dd¬«      S )Nr   rw   ©rz   rB  rÕ  s        r:   Úmake_dep_tokenrØ  Õ  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©r.  r¯   )rª   rÚ  rg   r   r   rØ   )r™   r.  r¯   rÚ  s       r:   Úsym_constrain_rangerÝ  á  s/   € õ Fä�$œ¤7Ð+Ô,ÜÐBÓCÐCÙ�D˜c sÖ+r<   c                 ó6   — t         j                  | ||¬«       |S ©NrÜ  )r/   rÝ  ©r™   r.  r¯   Ú	dep_tokens       r:   Úfunctional_sym_constrain_rangerâ  ë  s   € ä×Ñ˜T s°ÐÔ4ØÐr<   c                 ó(  — ddl m} |€|€t        j                  | «       y t	        | t
        t        f«      rt        d«      ‚t        | «      t        u r5|�t        j                  | |k\  «       |�t        j                  | |k  «       y  || ||¬«       y )Nr   )Ú_constrain_range_for_sizerÛ  rÜ  )rª   rä  rM   Ú_check_is_sizerg   r   r   rØ   rq   r  r^   )r™   r.  r¯   rä  s       r:   Úsym_constrain_range_for_sizeræ  ñ  s‚   € õ Pà
€{�s�{Ü×Ñ˜TÔ"Øä�$œ¤7Ð+Ô,ÜÐBÓCÐCÜˆDƒz”SÑØˆ?Ü�L‰L˜ ™Ô%Øˆ?Ü�L‰L˜ ™Ô%ØÙ˜d¨°Ö5r<   c                 ó6   — t         j                  | ||¬«       |S rß  )r/   ræ  rà  s       r:   Ú'functional_sym_constrain_range_for_sizerè    s   € ä×%Ñ% d°¸Ð%Ô=ØÐr<   c                 ó   — |S r7   r@   )rÍ  rÑ  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)r}   r™   )r�   rë  s     r:   ræ   ræ     s}   € Ø�8‰8‹:˜Š?ð Øˆ(ÐEÐFóˆ?ð �9‰9�R‹=˜DŸI™I b›MÒ)ð Øˆ(ÐGÈÏ	É	ÐRTËÀÐVZÐ[_×[dÑ[dÐegÓ[hÐZiÐirÐ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.r×  ©rð  r�   s   €€r:   r\   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ô  r‡   rõ  s   €€r:   r\   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:   r\   z(linearSolveCheckInputs.<locals>.<lambda>0  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:   r\   z(linearSolveCheckInputs.<locals>.<lambda>8  sR   ø€ Ø,¨T¨Fð 3ØŸ™ ›˜ D¨¯©°«¨Ø$ T§Y¡Y¨r£] O°4¸¿	¹	À"»°ðHð r<   )rM   r^   rz   rU   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 r@   ©rU   rë  s   €€r:   r\   z(checkFloatingOrComplex.<locals>.<lambda>I  s   ø€ �6�(ÐVÐW\ÐV]Ð^€ r<   c                  ó   •— ‰› d‰ › �S )Nz*: Low precision dtypes not supported. Got r@   rÿ  s   €€r:   r\   z(checkFloatingOrComplex.<locals>.<lambda>N  s   ø€ �v�hÐHÈÈÐP€ r<   )	rU   rM   r^   r,  r   rQ   rS   rP   rR   )rû  rë  rü  rU   s    ` @r:   rç   rç   A  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.r@   )r  rë  s   €€r:   r\   zcheckIsMatrix.<locals>.<lambda>V  s   ø€ �6�(Ð-¨h¨ZÐ7XÐY€ r<   )rM   r^   r}   )rð  rë  r  s    ``r:   ÚcheckIsMatrixr  S  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í  rJ   r’   r—   rp   r˜   )rð  r  rë  r  s   €€€€r:   r\   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  rM   r^   r™   )rð  r  r  rë  s   ````r:   ÚcheckInputsSolverr  Z  sY   û€ Ü�a˜Ô Ü�!�VÔÜ	‡L�LÙ$(ˆ�‰ˆr‹
�a—f‘f˜R“jÒ ¨a¯f©f°R«j¸A¿F¹FÀ2»JÑ.Fö	
õr<   ÚresultÚfn_nameÚresult_namec                 ór   ‡ ‡‡‡— t        j                  ‰j                  ‰j                  k(  ˆ ˆˆˆfd„«       y )Nc            	      óL   •— ‰ › d‰› d‰› d‰j                   › d‰j                   › �	S )Nz: Expected z5 and input tensors to be on the same device, but got z on z and input on r×  )r
  r  r	  r  s   €€€€r:   r\   z!checkSameDevice.<locals>.<lambda>o  s5   ø€ Øˆi�{ ; -Ð/dØˆm˜4 §¡˜¨n¸U¿\¹\¸NðLð r<   )rM   r^   rz   )r
  r	  r  r  s   ````r:   ÚcheckSameDevicer  g  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 r@   )r  s   €r:   r\   zcheckUplo.<locals>.<lambda>z  s   ø€ ÐCÀDÀ6ÐJ€ r<   )ÚupperrM   r^   r«   )r  ÚUPLO_uppercases   ` r:   Ú	checkUplor  v  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   r‡   )
ræ   r  rü   r�   rŽ   r  r    ÚpoprW   rU   )rð  r  r  r�   ÚvecsÚvalss         r:   Úmeta__linalg_eighr   ~  s‰   € ô �a˜Ô'Üˆd„Oä�—‘‹M€EÙØ�{‰{˜5Ó!ˆØ×Ñ˜Ô ;¸EÈUÔ SÕTà�{‰{˜A˜3Óˆà	‡I�I„KØ�;‰;�u¤O°A·G±GÓ$<ˆ;Ó=€Dà�ˆ:Ðr<   c                 óî   — t        | d«       t        j                  | j                  «      r| j                  nt        j                  | j                  «      }| j                  | j                  d d |¬«      S )Nzlinalg.eigvalsr’   r‡   ©ræ   rE   r€   rU   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’   r‡   r"  )r  r#  rì   Úvectorss       r:   Úmeta_linalg_eigr'  �  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’   )ÚmTr!  rM   ré   Ú	transpose)r^  s    r:   ÚcloneBatchedColumnMajorr+  «  s*   € Ø�6‰6�<‰<¤e×&=Ñ&=ˆ<Ó>×HÑHÈÈRÓPÐPr<   r  c                 ó   — t        | «      S r7   )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:   r\   z cholesky_solve.<locals>.<lambda>º  s   ø€ Ð?ÀÇ	Á	¸{ÐJ]Ð^€ r<   c                  ó$   •— d‰ j                   › d�S )Nz-u should have at least 2 dimensions, but has r0  r1  rø  s   €r:   r\   z cholesky_solve.<locals>.<lambda>¾  s   ø€ Ð?ÀÇÁ¸xÐGZÐ[€ r<   Úcholesky_solve)rM   r^   r›   Ú!_linalg_broadcast_batch_dims_namer-  )r�   rð  r  Úself_broadcastedÚA_broadcasteds   ``   r:   r3  r3  µ  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�   rM   rè   Úlegacy_contiguous_formatræ   r+  ©r�   r  s     r:   r8  r8  Æ  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%  r‡   )	ræ   rç   r�   r«   r    rŽ   r  rM   ru  )rð  r  r=  ÚA_shaper›   Ú	L_stridesr  Úinfoss           r:   Úlinalg_cholesky_exrB  ×  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.r@   r@   r<   r:   r\   z,linalg_householder_product.<locals>.<lambda>ð  rd   r<   rí  r’   c                   ó   — y)Nzbtorch.linalg.householder_product: input.shape[-2] must be greater than or equal to input.shape[-1]r@   r@   r<   r:   r\   z,linalg_householder_product.<locals>.<lambda>ô  rd   r<   c                   ó   — y)Nz`torch.linalg.householder_product: input.shape[-1] must be greater than or equal to tau.shape[-1]r@   r@   r<   r:   r\   z,linalg_householder_product.<locals>.<lambda>ø  rd   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 r1  ©r  rC  s   €€r:   r\   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 r@   ©Úactual_batch_tau_shapes   €r:   r\   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 r‡   rJ  s   €€r:   r\   z,linalg_householder_product.<locals>.<lambda>  s#   ø€ Ø:¸3¿9¹9¸+Ø*¨5¯;©;¨-ð9ð r<   z torch.linalg.householder_productrC  Fr  ©r™   rÃ   rU   rz   )
rM   r^   r›   r™   r�   rU   r  Úempty_stridedr    rz   )r  rC  Úexpected_batch_tau_shaperN  s   `` @r:   Úlinalg_householder_productrT  é  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í  r‡   ©ræ   rç   rŽ   r�   r  r    rM   ru  )rð  r=  r  rA  s       r:   Úlinalg_inv_ex_metarW    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  rQ  r’   r‡   rí  )
ræ   rç   rM   rR  r�   r    rU   rz   rŽ   r  )r�   r[  r=  rX  rY  rZ  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 r0  r1  )r  s   €r:   r\   z'linalg_ldl_solve_meta.<locals>.<lambda>N  ó   ø€ ðØŸ&™&˜Ð!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 ú insteadrË   ©rY  s   €r:   r\   z'linalg_ldl_solve_meta.<locals>.<lambda>V  ó   ø€ ð)Ø)/¯©¨°hð@ð r<   c                  ó"   •— d‰ j                   › �S )Nz<torch.linalg.ldl_solve: Expected pivots to be integers. Got r‡   rc  s   €r:   r\   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 r‡   )r  rX  s   €€r:   r\   z'linalg_ldl_solve_meta.<locals>.<lambda>a  s"   ø€ Ð3°B·H±H°:Ð=UÐVW×V]ÑV]ÐU^Ð_€ r<   Fr  rQ  )ræ   rç   rú  rM   r^   r›   r�   rE   Úis_integer_dtyperU   Ú_linalg_broadcast_batch_dimsrR  r    rz   )rX  rY  r  r[  Úexpected_pivots_shapeÚB_broadcast_sizerH   s   ```    r:   Úlinalg_ldl_solve_metark  @  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  )Úpivotrm  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: rb  rË   rø  s   €r:   r\   z linalg_lu_meta.<locals>.<lambda>q  s   ø€ ÐRÐST×SZÑSZÐR[Ð[cÐd€ r<   rí  r’   r   )rM   r^   r›   rü   r�   r.  rŽ   )	rð  rm  Úsizesr”  r=  r“  rl  r  r  s	   `        r:   Úlinalg_lu_metarq  l  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)rm  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: rb  rË   rø  s   €r:   r\   z*linalg_lu_factor_ex_meta.<locals>.<lambda>’  s   ø€ ÐXÐYZ×Y`ÑY`ÐXaÐaiÐj€ r<   rí  r’   Fr  rQ  r‡   )rM   r^   r›   rü   r�   rR  r    rU   rz   r  r.  rŽ   r  )	rð  rm  r=  rp  r”  r=  rr  rY  rZ  s	   `        r:   Úlinalg_lu_factor_ex_metaru  ˆ  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  Úadjointrv  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 rb  r‡   )r  rr  s   €€r:   r\   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.int32r@   r@   r<   r:   r\   z&linalg_lu_solve_meta.<locals>.<lambda>Á  rd   r<   zlinalg.lu_solver’   c                   ó   — y)NzYlinalg.lu_solve: Number of pivots per batch should be same as the dimension of the matrixr@   r@   r<   r:   r\   z&linalg_lu_solve_meta.<locals>.<lambda>É  rd   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 rb  rË   rc  s   €r:   r\   z&linalg_lu_solve_meta.<locals>.<lambda>Ï  rd  r<   r  rQ  r   )rç   rM   r^   rU   r  ræ   r  r™   r�   rh  rR  r    rz   r�   r   Úconj)rr  rY  r  r  rv  rj  rH   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: rb  rË   )rr  s   €r:   r\   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_factorr@   r@   r<   r:   r\   z lu_unpack_meta.<locals>.<lambda>ô  s   € ðpð r<   rí  r’   r   )	rM   r^   r›   rU   ru  rü   r�   r.  rŽ   )rr  rY  r  r€  rp  r”  r=  r“  rl  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'r@   )r…  s   €r:   r\   z _parse_qr_mode.<locals>.<lambda>  s   ø€ Ø1°$°ð 8Nð Oð r<   ©rM   r^   )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�   r.  rü   rŽ   r  r    )rð  r…  rŒ  Úreduced_moder”  r=  r“  ÚQ_shaperŽ  ÚR_shaper�  s              r:   Úlinalg_qr_metar”  $  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í  r‡   rQ  r’   )ræ   rç   r�   rŽ   rW   rU   rM   rR  r    rz   ru  )rð  r�   r•  r–  rr  rY  s         r:   Ú_linalg_slogdetr˜  @  s²   € ô �aÐ)Ô*Ü˜1Ð.°Ô6Ø�G‰G€EØ�;‰;�u˜S˜b�zÓ"€DØ—‘˜E # 2˜J¬o¸a¿g¹gÓ.F�ÓG€IÜ	×	Ñ	ØÜ*¨5°%Ó8Ø�g‰gØ�x‰xô	
€Bð �[‰[˜˜s ˜¬5¯;©;ˆ[Ó7€FØ�˜B Ð&Ð&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  r)  r   r‡   )r  rç   rü   r�   r.  rŽ   r  r    r-  rW   rU   )rð  r™  rš  r›  r  r”  r=  r“  ÚU_shaper  ÚV_shapeÚVÚis_cudaÚSs                 r:   Ú_linalg_svd_metar¢  T  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™   )r£  r¤  Úarg1_batch_sizesÚarg2_batch_sizesÚexpand_batch_portionÚarg1_expand_sizeÚarg2_expand_sizes          r:   rh  rh  z  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 r7   )rú  rh  r�   Úexpand)r£  r¤  rñ  r©  rª  Úarg1_broadcastedÚarg2_broadcasteds          r:   r4  r4  ‹  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_rhsr²  Ÿ  sS   € Ø!&§¡¨S¨bÐ!1ÐØ—*‘* ‘/ò Ø�
‰
�Q‰˜%Ÿ*™*Ñ$ÒR¨¯©Ð8RÑ)Rð ð Ðr<   )r  r=  r	  rr  rY  rZ  c                óÐ  ‡ ‡— t        ‰ d«       t        j                  ‰ j                  ‰j                  k(  ˆ ˆfd„«       t	        ‰ ‰«      }|r‰j                  d«      n‰}	t        ‰ |	|d«       t        |	‰ «      \  }
}t        j                  |xs | d„ «       |r|
d d n|
}t        j                  |t        || «      ‰j                  ‰j                  ¬«      }‰ j                  }t        j                  |t        |d«      ‰ j                  ‰ j                  ¬«      }‰ j                  |d d t        j                  ¬«      }‰ j                  |d d t        j                  ¬«      }||||f}||||f}t        d	„ |D «       «      rbt        ||«      D ]S  \  }}t!        ||j                  «       |j#                  |j                  |j%                  «       «       t'        ||d¬
«       ŒU |S )Nzlinalg.solvec                  ó>   •— d‰ j                   › d‰j                   › d�S )NzKlinalg.solve: Expected A and B to have the same dtype, but found A of type ry  rb  r‡   )rð  r  s   €€r:   r\   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)r@   r@   r<   r:   r\   z"_linalg_solve_ex.<locals>.<lambda>Á  s   € ðKð r<   rQ  Fr‡   rí  c              3   ó$   K  — | ]  }|d u–— Œ
 y ­wr7   r@   ©ri   rJ   s     r:   rk   z#_linalg_solve_ex.<locals>.<genexpr>Ø  s   è ø€ Ò
&˜Qˆ1�DŒ=Ñ
&ùs   ‚)Ú	copy_fromÚcopy_toÚexact_dtype)rç   rM   r^   rU   r²  rÑ   r  rh  rR  r    rz   r�   rŽ   ru  ÚallÚzipr%   r  rÃ   r'   )rð  r  r  r=  r	  rr  rY  rZ  r±  ÚB_ÚB_broad_shaperH   Úresult_shapeÚresult_r�   ÚLU_Úpivots_Úinfo_r  Úresr‰  Úos   ``                    r:   Ú_linalg_solve_exrÆ  §  s¶  ù€ ô ˜1˜nÔ-Ü	‡L�LØ	�‰�1—7‘7Ñô	
ôô -¨Q°Ó2€KÙ'ˆ�‰�RŒ¨Q€BÜ�a˜˜T >Ô2Ü3°B¸Ó:Ñ€M�1Ü	‡L�LØÒ�K�ñ	
ôñ *5�=  "Ñ%¸-€LÜ×!Ñ!ØÜ*¨<¸T¸ÓBØ�g‰gØ�x‰xô	€Gð �G‰G€EÜ
×
Ñ
ØÜ*¨5°%Ó8Ø�g‰gØ�x‰xô	€Cð �k‰k˜%  ˜*¬E¯K©KˆkÓ8€GØ�K‰K˜˜c˜r˜
¬%¯+©+ˆKÓ6€EØ�2�v˜tÐ
$€CØ�C˜ %Ð
(€CÜ
Ñ
& #Ô
&Ô&Ü˜˜S“Mò 	F‰DˆAˆqä˜a §¡Ô)à�M‰M˜!Ÿ'™' 1§8¡8£:Ô.Ü Q°¸uÖEð	Fð €Jr<   )r  Úunitriangularr  rÇ  r  c                óÌ  — |€| j                  dg«      }t        |t        «      sJ ‚t        | ||d«       t	        || d «      \  }}|j                  dd«      j                  «       xr |j                  «       }|rt        ||j                  «      }|S t        ||j                  «      r=|j                  |j                  dd«      j                  «       |j                  dd«       |S )Nr   zlinalg.solve_triangularrí  r’   )rŽ   rg   r#   r  r4  r*  r   Úis_conjr%   r�   r&   r  Ú
transpose_)	rð  r  r  r  rÇ  r  r½  ÚA_Úavoid_copy_As	            r:   Úlinalg_solve_triangular_metarÍ  â  sÈ   € ð €{Ø�k‰k˜1˜#ÓˆÜ�cœ:Ô&Ð&Ð&Ü�a˜˜DÐ";Ô<Ü.¨q°!°TÓ:�F€BˆØ—<‘<  BÓ'×5Ñ5Ó7ÒH¸B¿J¹J»L€LÙÜ  R§X¡XÓ.ˆð €Jô    R§X¡XÔ.Ø�K‰K˜Ÿ™ R¨Ó,×2Ñ2Ô3Ø�N‰N˜2˜rÔ"Ø€Jr<   ÚXÚM)rº  r*  c                 óø  ‡ ‡— t        j                  ‰ j                  dk\  ˆ fd„«       t        j                  ‰j                  dk\  ˆfd„«       t        ‰ ‰d«       ‰j                  t         j
                  k(  rƒt        ‰ ‰«      \  }}t        j                  |t        |d¬«      ‰ j                  ‰ j                  ¬«      }t        j                  |t        |d¬«      ‰j                  ‰j                  ¬«      }||fS ‰j                  t         j                  k(  s‰j                  t         j                  k(  r+t        j                  ‰ «      }‰ j                  dg«      }||fS t        j                  dd	„ «       fS )
Nr%  c                  ó$   •— d‰ j                   › d�S )NzMtorch.triangular_solve: Expected b to have at least 2 dimensions, but it has r0  r1  rê   s   €r:   r\   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 r0  r1  rø  s   €r:   r\   z'triangular_solve_meta.<locals>.<lambda>  r`  r<   Útriangular_solveFr  rQ  r   c                   ó   — y)Nz+triangular_solve: Got an unexpected layout.r@   r@   r<   r:   r\   z'triangular_solve_meta.<locals>.<lambda>(  rd   r<   )rM   r^   r›   rú  ry   Ústridedrh  rR  r    rU   rz   Ú
sparse_csrÚ
sparse_bsrrè   rŽ   )	r�   rð  r  r*  rÇ  Úself_broadcast_sizeÚA_broadcast_sizeÚsolutionÚcloned_coefficients	   ``       r:   Útriangular_solve_metarÜ  ü  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’   r‡   rV  )rð  Údetrr  rY  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.r@   r@   r<   r:   r\   zormqr.<locals>.<lambda>E  rd   r<   c                   ó   — y)Nz3torch.ormqr: other must have at least 2 dimensions.r@   r@   r<   r:   r\   zormqr.<locals>.<lambda>H  rd   r<   rí  r’   c                  ó   •— d‰ › d�S )Nútorch.ormqr: other.shape[z0] must be greater than or equal to tau.shape[-1]r@   ©Úleft_size_conditions   €r:   r\   zormqr.<locals>.<lambda>N  s   ø€ Ð+Ð,?Ð+@Ð@pÐq€ r<   c                  ó   •— d‰ › d�S )Nrä  z"] must be equal to input.shape[-2]r@   rå  s   €r:   r\   zormqr.<locals>.<lambda>R  s   ø€ Ð+Ð,?Ð+@Ð@bÐc€ r<   c                   ó   — y)NzHtorch.ormqr: tau.shape[-1] must be less than or equal to input.shape[-1]r@   r@   r<   r:   r\   zormqr.<locals>.<lambda>W  rd   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 rI  r1  rJ  s   €€r:   r\   zormqr.<locals>.<lambda>\  rK  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 rI  r1  ©r  rš   s   €€r:   r\   zormqr.<locals>.<lambda>c  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 r@   rM  s   €r:   r\   zormqr.<locals>.<lambda>n  rO  r<   c                  ó   •— d‰ › �S )NzYtorch.ormqr: Expected batch dimensions of other to be equal to input.shape[:-2], but got r@   )Úactual_batch_other_shapes   €r:   r\   zormqr.<locals>.<lambda>w  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 r‡   rJ  s   €€r:   r\   zormqr.<locals>.<lambda>  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 r‡   rë  s   €€r:   r\   zormqr.<locals>.<lambda>†  s'   ø€ ð#Ø#(§;¡; -Ð/DÀUÇ[Á[ÀMðSð r<   ztorch.ormqrrC  rš   Fr  rQ  )	rM   r^   r›   r�   rU   r  rR  r    rz   )	r  rC  rš   r  r*  Úexpected_batch_shaperî  rN  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«   )r}   Úpaddings   €€r:   r\   z,_padding_check_valid_input.<locals>.<lambda>š  s   ø€ Ð1°!°c±'°¸+ÄcÈ'ÃlÀ^ÐT€ r<   r©   r   c                  ó:   •— d‰ dz   › d‰ dz   › d‰j                   › �S )Nú	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Ë   )r}   r  s   €€r:   r\   z,_padding_check_valid_input.<locals>.<lambda>¯  s2   ø€ Ø˜˜a™�y  c¨A¡g Yð /AØAFÇÁÀðOð r<   )rM   r^   r«   r›   r®   r™   )r  rö  r}   Ú	input_dimÚis_batch_modeÚvalid_batch_modeÚvalid_non_batch_moder  s   ```     r:   Ú_padding_check_valid_inputrý  —  sË   ú€ Ü	‡L�LÜˆG‹˜˜C™ÑÜTôð
 —
‘
€Ià #¨¡'Ñ*€Mà$ÐØ,Ð,Ðáä�q˜)Ó$ò 	GˆAØ/ÒF°E·J±J¸q³MÀQÑ4FÑñ	Gô �q˜)Ó$ò 	OˆAØ#7Ò#N¸E¿J¹JÀq»MÈQÑ<NÑ ð	Oô 
‡L�LØÒ0Ð0ô	
õ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©   r2   r“   c                  ó4   •— d‰› d‰› d‰ › d‰j                   › �S ©NzcArgument #4: Padding size should be less than the corresponding input dimension, but got: padding (ro   ú) at dimension ú
 of input rË   ©Údim_wr  Úpad_lÚpad_rs   €€€€r:   r\   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: r@   )Úinput_wÚoutput_ws   €€r:   r\   z_pad1d_common.<locals>.<lambda>Ó  s   ø€ �*˜W˜IÐ%JÈ8È*ÐU€ r<   r%  )r›   r™   rý  rM   r^   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        j                  ‰ j                  t         j                  k7  ˆ fd„«       t	        ‰ |d¬«      S )Nc                  ó@   •— d‰ j                   j                  «       › d�S )Nz)"replication_pad1d" not implemented for 'ú'©rU   Ú__str__©r  s   €r:   r\   z(meta_replication_pad1d.<locals>.<lambda>ç  ó    ø€ Ð=¸e¿k¹k×>QÑ>QÓ>SÐ=TÐTUÐX€ r<   Fr  )rM   r^   rU   Úboolr  r  s   ` r:   Úmeta_replication_pad1dr  â  ó5   ø€ ô 
‡L�LØ�‰”u—z‘zÑ!ÛXôô ˜ °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 2r@   r@   r<   r:   r\   z(_pad1d_backward_common.<locals>.<lambda>ï  rd   r<   r2   c                  ó4   •— d‰› d‰› d‰ › d‰j                   › �S r   rË   r  s   €€€€r:   r\   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:   r\   z(_pad1d_backward_common.<locals>.<lambda>  ó"   ø€ Ð:¸8¸*ÀGÈK×L\ÑL\Ð]bÓLcÐKdÐe€ r<   ©rM   r^   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 )NFr  r-  r.  s      r:   Úmeta_replication_pad1d_backwardr1    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:   r\   z_pad2d_common.<locals>.<lambda>0  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 (ro   r  r  rË   ©Údim_hr  Úpad_bÚpad_ts   €€€€r:   r\   z_pad2d_common.<locals>.<lambda>7  r  r<   c                  ó    •— d‰ › d‰› d‰› d‰› �S )Nz
input (H: ú W: z%) is too small. Calculated output H: r@   )Úinput_hr	  Úoutput_hr
  s   €€€€r:   r\   z_pad2d_common.<locals>.<lambda>?  s*   ø€ Ø˜˜	  g Yð /$Ø$, :¨T°(°ð=ð r<   r2   ©rý  r›   r™   rM   r^   rŽ   )r  rö  r  Ú
dim_slicesr  r›   r  r8  r  r=  r	  r>  r
  r9  r  r  r:  s   `      @@@@@@@@@@r:   Ú_pad2d_commonrA    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  )rA  r  s     r:   Úmeta_reflection_pad2drC  K  r  r<   c                 óˆ   ‡ — t        j                  ‰ j                  t         j                  k7  ˆ fd„«       t	        ‰ |d¬«      S )Nc                  ó@   •— d‰ j                   j                  «       › d�S )Nz)"replication_pad2d" not implemented for 'r  r  r  s   €r:   r\   z(meta_replication_pad2d.<locals>.<lambda>V  r  r<   Fr  )rM   r^   rU   r  rA  r  s   ` r:   Úmeta_replication_pad2drF  Q  r  r<   c                 ó   ‡ ‡‡‡‡— dŠdŠd}|j                   }|j                  «       dk(  r‰dz  Š‰dz  Š|dz  }|\  }}}}|‰   }	|‰   }
|	|z   |z   Š|
|z   |z   Št        j                  ‰‰ j	                  ‰«      k(  ˆˆ ˆfd„«       t        j                  ‰‰ j	                  ‰«      k(  ˆˆ ˆfd„«       |j                  |j                   «      S )Nr%  r©   r   r3  c                  ó2   •— d‰› d‰j                  ‰ «      › �S r$  r˜   r&  s   €€€r:   r\   z%meta_pad2d_backward.<locals>.<lambda>x  r(  r<   c                  ó2   •— d‰› d‰j                  ‰ «      › �S ©Nz)grad_output height unexpected. Expected: r%  r˜   ©r8  r'  r>  s   €€€r:   r\   z%meta_pad2d_backward.<locals>.<lambda>|  ó"   ø€ Ð;¸H¸:ÀWÈ[×M]ÑM]Ð^cÓMdÐLeÐf€ r<   )r�   r}   rM   r^   r™   rŽ   )r'  r�   rö  r  r[   r  r  r:  r9  r=  r	  r8  r  r>  r
  s   `          @@@@r:   Úmeta_pad2d_backwardrM  [  sÞ   ü€ ð €EØ€EØ€Ià—‘€JØ‡x�xƒz�Q‚Ø�‰
ˆØ�‰
ˆØ�Q‰ˆ	à!(Ñ€Eˆ5�%˜à˜Ñ€GØ˜Ñ€GØ˜‰ Ñ&€HØ˜‰ Ñ&€Hä	‡L�LØ�K×$Ñ$ UÓ+Ñ+Ýeôô 
‡L�LØ�K×$Ñ$ UÓ+Ñ+Ýfôð �>‰>˜$Ÿ*™*Ó%Ð%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 )Nr2   r%  r©   r   r“   é   c                  ó4   •— d‰› d‰› d‰ › d‰j                   › �S r   rË   r  s   €€€€r:   r\   z_pad3d_common.<locals>.<lambda>ž  r  r<   c                  ó4   •— d‰› d‰› d‰ › d‰j                   › �S r6  rË   r7  s   €€€€r:   r\   z_pad3d_common.<locals>.<lambda>¥  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 (ro   r  r  rË   )Údim_dr  Úpad_bkÚpad_fs   €€€€r:   r\   z_pad3d_common.<locals>.<lambda>¬  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: r@   )Úinput_dr=  r	  Úoutput_dr>  r
  s   €€€€€€r:   r\   z_pad3d_common.<locals>.<lambda>´  s7   ø€ Ø˜˜	  g Y¨d°7°)ð <$Ø$, :¨T°(°¸4À¸zðKð r<   r?  )r  rö  r  r  Ú
batch_moder  r  rS  r8  r  rX  r=  r	  rY  r>  r
  r9  rT  rU  r  r  r:  s   `      @@@@@@@@@@@@@@@r:   Ú_pad3d_commonr[  �  s¬  ÿÿ€ Ø€EØ€EØ€EØ€Iä˜u g°1Õ5à—‘˜q‘€JÙØ—‘˜A“ˆØ�‰
ˆØ�‰
ˆØ�‰
ˆØ�Q‰ˆ	à07Ñ-€Eˆ5�%˜  và�Z‰Z˜	Ó"€FØ�j‰j˜Ó€GØ�j‰j˜Ó€GØ�j‰j˜Ó€GØ˜‰ Ñ'€HØ˜‰ Ñ&€HØ˜‰ Ñ&€HáÜ�‰Ø�G‰OÒ/ ¨¡öô	
ô 	�‰Ø�G‰OÒ/ ¨¡öô	
ô 	�‰Ø�G‰OÒ0 ¨Ñ 0öô	
ô 
‡L�LØ�A‰Ò7˜ Q™Ò7¨(°a©-÷	
ð 	
ôñ Ø�‰ ¨°¸(ÀHÐMÓNÐNà�‰ ¨°(¸HÐEÓFÐFr<   c                 ó   — t        | |d¬«      S r  )r[  r  s     r:   Úmeta_reflection_pad3dr]  À  r  r<   c                 óˆ   ‡ — t        j                  ‰ j                  t         j                  k7  ˆ fd„«       t	        ‰ |d¬«      S )Nc                  ó@   •— d‰ j                   j                  «       › d�S )Nz)"replication_pad3d" not implemented for 'r  r  r  s   €r:   r\   z(meta_replication_pad3d.<locals>.<lambda>Ë  r  r<   Fr  )rM   r^   rU   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 6r@   r@   r<   r:   r\   z%meta_pad3d_backward.<locals>.<lambda>Ú  rd   r<   r2   r%  r©   rO  c                  ó2   •— d‰› d‰j                  ‰ «      › �S r$  r˜   r&  s   €€€r:   r\   z%meta_pad3d_backward.<locals>.<lambda>ò  r(  r<   c                  ó2   •— d‰› d‰j                  ‰ «      › �S rJ  r˜   rK  s   €€€r:   r\   z%meta_pad3d_backward.<locals>.<lambda>ö  rL  r<   c                  ó2   •— d‰› d‰j                  ‰ «      › �S )Nz(grad_output depth unexpected. Expected: r%  r˜   )rS  r'  rY  s   €€€r:   r\   z%meta_pad3d_backward.<locals>.<lambda>ú  r(  r<   r)  )r'  r  rö  r  r  r:  r9  rU  rT  rX  r=  r	  rS  r8  r  rY  r>  r
  s   `           @@@@@@r:   Úmeta_pad3d_backwardrg  Ð  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 inputr@   r@   r<   r:   r\   z%meta__pdist_forward.<locals>.<lambda>	  rd   r<   r   r©   rä   r%  )rM   r^   r   r™   rŽ   r[  r9  )r�   rh  r=  s      r:   Úmeta__pdist_forwardrk   	  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 contiguousr@   r@   r<   r:   r\   z&meta__pdist_backward.<locals>.<lambda>	  rd   r<   c                   ó   — y)Nz/_pdist_backward requires pdist to be contiguousr@   r@   r<   r:   r\   z&meta__pdist_backward.<locals>.<lambda>	  rd   r<   rä   )rM   r^   r   rè   r9  )rl  r�   rh  rm  s       r:   Úmeta__pdist_backwardrq  	  sW   € ô 
‡L�LØ×ÑÓÑVôô 
‡L�LØ×ÑÓÑXôô ×Ñ˜D´×0NÑ0NÔOÐOr<   )r€  r  c          
      ó0  ‡ ‡‡‡‡‡— ddl m}m} ‰j                  d«      }‰j                  d«      }‰j                  d«      }	 |t	        j
                   |‰ j                  |||	f«      «      «      r‰ j                  |||	f«      Š t	        j                  ‰j                  «       dk(  d„ «       t	        j                  ‰j                  «       dk(  d„ «       t        j                  sGt	        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©   r%  r2   c                   ó   — y©Nzbatch1 must be a 3D tensorr@   r@   r<   r:   r\   zmeta_baddbmm.<locals>.<lambda>%	  rd   r<   c                   ó   — y©Nzbatch2 must be a 3D tensorr@   r@   r<   r:   r\   zmeta_baddbmm.<locals>.<lambda>&	  rd   r<   c                  óV   •— d‰j                   › d‰ j                   › d‰j                   › �S )Nz+Input dtypes must be the same, got: input: z
, batch1: z
, batch2: r‡   )Úbatch1Úbatch2r�   s   €€€r:   r\   zmeta_baddbmm.<locals>.<lambda>*	  s0   ø€ ÐAÀ$Ç*Á*ÀÈZÐX^×XdÑXdÐWeÐeoÐpv×p|Ñp|Ðo}Ð~€ r<   c            	      ó.   •— d‰› d‰› d‰ d   › d‰ d   › d�	S ©Nz@Expected size for first two dimensions of batch2 tensor to be: [ro   z] but got: [r   r©   ú].r@   ©Úbatch2_sizesÚbsÚcontraction_sizes   €€€r:   r\   zmeta_baddbmm.<locals>.<lambda>2	  s:   ø€ ðØˆt�2Ð&Ð' |°LÀ±OÐ3DÀBÀ|ÐTUÁÐFWÐWYð[ð r<   )rª   r¢   r£   r™   rM   Úsym_notr�   r¬  r^   r}   Ú
exp_configÚ&skip_dtype_check_in_meta_registrationsrU   rŽ   )r�   rx  ry  r€  r  r¢   r£   Údim1Údim2Údim3Úbatch1_sizesr~  r  r€  s   ```        @@@r:   Úmeta_baddbmmrˆ  	  s7  ý€ ÷ Là�;‰;�q‹>€DØ�;‰;�q‹>€DØ�;‰;�q‹>€DÙ”U—]‘]¡6¨$¯*©*°t¸TÀ4Ð6HÓ#IÓJÔKØ�{‰{˜D $¨Ð-Ó.ˆÜ	‡L�L�—‘“ Ñ"Ñ$HÔIÜ	‡L�L�—‘“ Ñ"Ñ$HÔIÜ×<Ò<Ü�‰Ø�J‰J˜&Ÿ,™,Ö6¨&¯,©,Ô6Ý~ô	
ð —<‘<€LØ—<‘<€LØ	�a‰€BØ# A‘ÐÜ	‡L�LØ�Q‰˜2ÑÒE ,¨q¡/Ð5EÑ"Eõ	
ôð �>‰>˜$Ÿ)™)›+Ó&Ð&r<   c                óL   — t        j                  | t         j                  ¬«      S rô   rš  ©r�   r:  s     r:   Úmeta_bernoullir‹  :	  s   € ô ×Ñ˜D´×0GÑ0GÔHÐHr<   c                 ó   — | S r7   r@   ©r�   rh  r:  s      r:   Úmeta_bernoulli_rŽ  A	  ó   € à€Kr<   c                 óL   — t        j                  | t         j                  ¬«      S rô   rš  r�  s      r:   Úmeta_bernoulli_pr‘  F	  s   € ô ×Ñ˜D´×0GÑ0GÔHÐHr<   c                 ó,   — t        j                  | «      S r7   ©rM   rè   rŠ  s     r:   Úmeta_poissonr”  L	  ó   € ô ×Ñ˜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()r@   r@   r<   r:   r\   z6meta__fused_moving_avg_obs_fq_helper.<locals>.<lambda>d	  rd   r<   r‡   )rM   r^   r}   rè   r  )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¥  R	  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 2Dr@   r@   r<   r:   r\   zmeta_mm.<locals>.<lambda>m	  rd   r<   c                   ó   — y)Nzb must be 2Dr@   r@   r<   r:   r\   zmeta_mm.<locals>.<lambda>n	  rd   r<   c            	      ó"   •— d‰› d‰ › d‰› d‰› d�	S )Nz/a and b must have same reduction dim, but got [ro   z] X [r|  r@   )ÚM1ÚM2ÚNrl  s   €€€€r:   r\   zmeta_mm.<locals>.<lambda>s	  s(   ø€ ÐAÀ!ÀÀBÀrÀdÈ%ÐPRÈtÐSUÐVWÐUXÐXZÐ[€ r<   )rM   r^   r}   r�   rŽ   )rÄ   Úbrª  r«  r¬  rl  s     @@@@r:   Úmeta_mmr®  j	  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Ë   )ri   r  Údimsr�   s     €€r:   rk   z+_compute_reduction_shape.<locals>.<genexpr>z	  s$   øè ø€ ÒU¸q a¨t¡m�T—Z‘Z ’]¸Ó:ÑUùs   ƒ")r]   r®   r›   rE   Úcompute_reduction_output_shaper�   )r�   r±  r»  s   `` r:   r¹  r¹  x	  s7   ù€ ÙÜÔUÄEÈ$Ï)É)ÓDTÔUÓUÐUä×/Ñ/°·
±
¸DÓAÐAr<   c                 ó  — t        | t        j                  j                  «      r| j                  j
                  S t        | d«      rEt        | j                  d«      r/| j                  j
                  dk7  r| j                  j
                  S y)Nrz   rq   rw   r)  )rg   rM   Ú_subclassesÚ
FakeTensorÚfake_devicerq   Úhasattrrz   )re  s    r:   r-  r-  ƒ	  sg   € Ü�&œ%×+Ñ+×6Ñ6Ô7Ø×!Ñ!×&Ñ&Ð&ä�˜Ô!Ü�F—M‘M 6Ô*Ø�M‰M×Ñ &Ò(à�}‰}×!Ñ!Ð!à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                   |‰|   ||   ||   |
|   ||   «      «       Œ_ t        j                  t        d„ ‰d
d  D «       «      ˆˆfd„«       ‰S )NÚlnrh  r  r“  r¿   r3   c                 ó6   — | d|z  z   ||dz
  z  z
  dz
  |z  dz   S )a�  
        Formula to apply to calculate the length of some dimension of the output

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

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

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

        Returns:
            The output length
        r©   r%  r@   )r¾  rh  r  r“  r¿   r8   s         r:   Ú_formula_transposedz6calc_conv_nd_return_shape.<locals>._formula_transposed«	  s2   € ð" �Q‘˜!‰|˜a !™eÑ# a¨1¨q©5¡kÑ1°BÑ6¸Ñ:Ð:r<   r%  r©   r   zInvalid channel dimensionsc              3   ó&   K  — | ]	  }|d kD  –— Œ y­w©r   Nr@   r·  s     r:   rk   z,calc_conv_nd_return_shape.<locals>.<genexpr>ó	  s   è ø€ Ò)�aˆA��EÑ)ùó   ‚c                  ó.   •— dt        ‰ «      › d‰dd  › d�S )NzGiven input size per channel: z&. Calculated output size per channel: r%  z. Output size is too small)rü   )r±  Ú	ret_shapes   €€r:   r\   z+calc_conv_nd_return_shape.<locals>.<lambda>ô	  s*   ø€ Ð0´°d³°ð =/Ø/8¸¸¨}¨oð >#ð$€ r<   )r  r�   rZ  rg   r   r«   r®   rý   rM   r^   r~   )r¸  rm  rÃ   rö  r¹  rº  r»  r¼  rÀ  rÂ  Úkernel_sizeÚout_channelsÚoutput_padding_listr  r±  rÇ  s                 @@r:   Úcalc_conv_nd_return_shaperË  �	  s­  ù€ ð7”Sð 7œSð 7¤Sð 7¬Sð 7´Sð 7¼Só 7ð";¤ð ;¬ð ;´ð ;¼ð ;Äð ;Ìð ;ÔQTó ;ð& —,‘,˜q˜rÐ"€KØ×Ñ˜a˜bÐ!€DÙØ §¡¨Q¡Ñ/‰à—|‘| A‘ˆØ�<‰<˜‰?˜VÑ# |×'9Ñ'9¸!Ñ'<Ò<ÜÐ;Ó<Ð<à×#Ñ# AÑ&¨Ð5€IÜ�&œ'Ô"Ø�œC ›IÑ%‰Ü	ˆV‹˜Ò	Ø˜‘)�œs 4›yÑ(ˆä�'œ7Ô#Ø�)œc $›iÑ'‰Ü	ˆW‹˜Ò	Ø˜1‘:�,¤ T£Ñ*ˆä�(œGÔ$Ø�:¤ D£	Ñ)‰Ü	ˆX‹˜!Ò	Ø˜Q‘K�=¤3 t£9Ñ,ˆà/3ÐÙÜ�n¤gÔ.Ø#1Ð"2´S¸³YÑ">ÑÜ�Ó  AÒ%Ø#1°!Ñ#4Ð"5¼¸D»	Ñ"AÑà"0Ðä”3�t“9Óò ˆáØ×ÑÙ#Ø˜‘GØ˜A‘JØ˜Q‘KØ ‘NØ˜1‘IØ'¨Ñ*óõ	ð ×ÑÙ˜˜a™ '¨!¡*¨h°q©k¸;Àq¹>È6ÐRSÉ9ÓUõðô$ 
‡L�LÜÑ)˜9 Q R˜=Ô)Ó)ô	$ôð Ðr<   c                 ób   — t         j                  j                  | «      t         j                  k(  S r7   ©rM   Ú_prims_commonr"   Úchannels_last©Útens    r:   Úis_channels_lastrÒ  ü	  s$   € Ü×Ñ×4Ñ4°SÓ9¼U×=PÑ=PÑPÐPr<   Úrunning_meanÚrunning_varÚtrainingÚexponential_average_factorÚepsilonc                 ór  ‡ — ‰ j                   }|�|j                   n|j                   }	|�|j                   n|j                   }
ˆ fd„}‰ j                  |«      j                   |«       ¬«      }|r#‰ j                  |	«      }‰ j                  |
«      }n"‰ j                  d«      }‰ j                  d«      }|||fS )Nc                  óº   •— t        ‰ «      rt        j                  S ‰ j                  t        j                  ¬«      rt        j                  S t        j                  S rô   )rÒ  rM   rÏ  r   ré   )r¸  s   €r:   Úpick_memory_formatz2meta_miopen_batch_norm.<locals>.pick_memory_format
  sF   ø€ Ü˜LÔ)Ü×&Ñ&Ð&Ø×%Ñ%´E×4KÑ4KÐ%ÔLÜ×*Ñ*Ð*Ü×&Ñ&Ð&r<   rä   ©r   )r�   rŽ   r[  )r¸  rm  ro  rÓ  rÔ  rÕ  rÖ  r×  rž   Úsave_mean_shapeÚsave_var_shaperÚ  r  Ú	save_meanÚsave_vars   `              r:   Úmeta_miopen_batch_normrà   
  s·   ø€ ð ×"Ñ"€Ið -9Ð,D�l×(Ò(È&Ï,É,€OØ*5Ð*A�[×&Ò&ÀvÇ|Á|€Nô'ð ×
 Ñ
  Ó
+×
.Ñ
.Ñ=OÓ=QÐ
.Ó
R€CáØ ×*Ñ*¨?Ó;ˆ	Ø×)Ñ)¨.Ó9‰à ×*Ñ*¨4Ó0ˆ	Ø×)Ñ)¨$Ó/ˆà�	˜8Ð#Ð#r<   c	           
      óÌ   ‡ ‡— ˆ ˆfd„}	t        ‰ ‰||||||r|nd «      }
d}d}‰ j                  |«      dk(  rd|
|<   ‰ j                  |
«      }|j                   |	«       ¬«      }|S )Nc                  ód  •— t        ‰ «      dk(  r&t        ‰ «      st        ‰«      r+t        j                  S t        ‰ «      rt        j                  S ‰ j	                  t        j
                  ¬«      rt        j
                  S ‰ j	                  t        j                  ¬«      rt        j                  S y ©Nr)  rä   )r-  rÒ  rM   rÏ  r   ré   Úpreserve_format)r¸  rm  s   €€r:   rÚ  z%meta_conv.<locals>.pick_memory_format2
  sŒ   ø€ Ü�|Ó$¨Ò.Ü Ô-Ô1AÀ&Ô1IÜ×*Ñ*Ð*ä Ô-Ü×*Ñ*Ð*Ø×%Ñ%´E×4KÑ4KÐ%ÔLÜ×*Ñ*Ð*Ø×'Ñ'´e×6KÑ6KÐ'ÔLÜ×(Ñ(Ð(ð Mr<   r©   r   rä   )rË  r™   rŽ   r[  )r¸  rm  ro  rÃ   rö  r¹  rº  r¼  r»  rÚ  Ú	shape_outÚinput_channels_dimÚoutput_channels_dimr  s   ``            r:   Ú	meta_convrè  &
  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 )NFrO  rä   )rË  rŽ   rM   rÏ  r}   Úchannels_last_3dr[  )r¸  rm  ro  rö  rÃ   r¹  r»  ÚattrÚscalarsÚ	algorithmrå  r  Úout_memory_formats                r:   Úmeta_mkldnn_convolution_defaultrð  X
  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�   )r¸  rm  ro  rì  rí  rî  s         r:   Úmeta_linear_pointwise_defaultrô  o
  s5   € ð ×%Ñ%Ð&Q¨×(:Ñ(:¸3¸BÐ(?Ð&QÀÇÁÈaÁÑ&QÓRÐRr<   Úmklc                 ób   — | j                  g | j                  d d ¢|j                  d   ‘­«      S rò  ró  )r¸  Úpacked_weightÚorig_weightro  r  s        r:   Úmeta_mkl_linearrù  z
  s:   € à×)Ñ)Ø@�,×$Ñ$ S bÐ)Ð@¨;×+<Ñ+<¸QÑ+?Ñ@óð r<   Úonednnc           
      ó|  — t        | ||||	d|
d «      }|t        j                  t        j                  t        j                  t        j
                  fv sJ ‚| j                  ||¬«      }t        |«      dv sJ d«       ‚t        |«      dk(  rt        j                  nt        j                  }|j                  |¬«      }|S )NFr‡   ©r2   r3  zonly conv1d/2d are supportedr3  rä   )rË  rM   r�  r�  Úuint8rt  rŽ   r«   rÏ  ré   r[  )rJ   Úx_scaleÚx_zpÚwÚw_scaleÚw_zpro  rÃ   rö  r¹  r»  Úoutput_scaleÚoutput_zero_pointÚoutput_dtyperì  rí  rî  rå  r  Úformats                       r:   Úmeta_qconv_pointwiser  „
  s¬   € ô* .ØØØØØØØØó	
ˆ	ð ¤§¡¬u¯~©~¼u¿{¹{ÌEÏJÉJÐWÑWÐWÐWØ�k‰k˜)¨<ˆkÓ8ˆÜ�9‹~ Ñ'ÐGÐ)GÓGÐ'Ü(+¨I«¸!Ò(;”×$Ò$Ä×AXÑAXˆØ�f‰f 6ˆfÓ*ˆØˆ
r<   c                 ó   — |dk(  sJ ‚|S )NÚsumr@   )rJ   rþ  rÿ  r   r  r  Úaccumro  rÃ   rö  r¹  r»  r  r  r  Úaccum_scaleÚaccum_zero_pointÚbinary_op_namer  Úunary_op_nameÚunary_op_argsÚunary_op_algorithms                         r:   Úmeta_qconv2d_pointwise_binaryr  ª
  s   € ð2  Ò&Ð&Ð&Øˆr<   c                 óþ   — t        | j                  «      }|j                  d   |d<   |	t        j                  t        j                  t        j
                  t        j                  fv sJ ‚| j                  ||	¬«      }|S )Nr©   r’   r‡   )rü   r�   rM   r�  r�  rt  rý  rŽ   )rJ   rþ  rÿ  r   r  r  ro  r  r  r  Úpost_op_nameÚpost_op_argsÚpost_op_algorithmr•  r  s                  r:   Úmeta_qlinear_pointwiser  Æ
  sa   € ô" ˜AŸG™G“}ˆàŸ7™7 1™:ˆ�RÑØ¤§¡¬u¯~©~¼u¿z¹zÌ5Ï;É;ÐWÑWÐWÐWØ�k‰k˜,¨lˆkÓ;ˆØˆ
r<   c                 ó  — |dk(  r|S t        | j                  «      }|j                  d   |d<   |
t        j                  t        j                  t        j
                  t        j                  fv sJ ‚| j                  ||
¬«      }|S )Nr	  r©   r’   r‡   )rü   r�   rM   r�  r�  rý  rt  rŽ   )rJ   rþ  rÿ  r   r  r  Úx_2ro  r  r  r  Úx2_scaleÚx2_zpr  r  r  r  r  r•  r  s                       r:   Úmeta_qlinear_pointwise_binaryr  Þ
  sn   € ð, ˜UÒ"ØˆJÜ˜AŸG™G“}ˆàŸ7™7 1™:ˆ�RÑØ¤§¡¬u¯~©~¼u¿{¹{ÌEÏJÉJÐWÑWÐWÐWØ�k‰k˜,¨lˆkÓ;ˆØˆ
r<   c                 óv   — t        | j                  «      }|j                  d   |d<   | j                  |«      }|S )Nr©   r’   )rü   r�   rŽ   )rJ   r   ro  r•  r  s        r:   Úmeta_linear_dynamic_fp16r  ý
  s6   € ô ˜AŸG™G“}ˆàŸ7™7 1™:ˆ�RÑØ�k‰k˜,Ó'ˆØˆ
r<   Ú	quantizedrÛ  ©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 ©Nr3  éüÿÿÿr©   r2   r«  )Ú#max_pool2d_checks_and_compute_shaper}   r™   rM   rÏ  r‚   rU   rz   ©r  rÈ  rÃ   rö  r¹  Ú	ceil_modeÚnInputPlaneÚoutputHeightÚoutputWidthr  rå   r™   s               r:   Úmeta_quantized_max_pool2dr)    s�   € ô 0Ø�; ¨°¸9ó
ñ		
ØØØð $)§9¡9£;°!Ò#3�—‘˜B”¸ˆÜ×+Ñ+ˆØ�9‰9‹;˜!ÒØ ¨{Ð;‰Dà˜K¨°{ÐCˆDÜ�{‰{ØØ—+‘+Ø—<‘<Ø'ô	
ð 	
r<   c                 ó‚  — t        j                  | j                  «       dk(  d| j                  «       › d�«       t        j                  |j                  «       dk(  d|j                  «       › d�«       t        j                  | j                  t         j                  t         j
                  t         j                  fv d| j                  › �«       t        j                  |j                  t         j                  k(  d|j                  › �«       t        j                  |j                  t         j                  k(  d|j                  › �«       t        j                  |j                  | j                  k(  d|j                  › �«       | j                  | j                  d	«      |j                  d	«      | j                  ¬
«      S )Nr%  zx must be a 2D tensor, got ÚDzw must be a 2D tensor, got ú#expected x to be f32/f16/bf16, got úexpected w to be uint8, got z q_group_size must be int64, got z5q_scale_and_zeros must have the same dtype as x, got r   r‡   )rM   r^   r}   rU   r�  rŽ  r�  rý  rð   rŽ   r™   ©rJ   r   Úq_group_sizeÚq_scale_and_zeross       r:   Úmeta_int4mm_packed_weight_cpur1  +  s@  € ä�‰�Q—U‘U“W ‘\Ð%@ÀÇÁÃÀ	ÈÐ#KÔLÜ�‰�Q—U‘U“W ‘\Ð%@ÀÇÁÃÀ	ÈÐ#KÔLÜ�‰Ø�G‰GœŸ™¤u§}¡}´e·n±nÐEÐEØ1°!·'±'°Ð;ô	
ô 	�‰�Q—W‘W¤§¡Ñ+Ð/KÈAÏGÉGÈ9Ð-UÔVÜ�‰Ø×Ñ¤%§+¡+Ñ-Ø.¨|×/AÑ/AÐ.BÐCô	
ô 	�‰Ø×#Ñ# q§w¡wÑ.ØCÐDU×D[ÑD[ÐC\Ð]ô	
ð �{‰{˜1Ÿ6™6 !›9 a§f¡f¨Q£i°q·w±wˆ{Ó?Ð?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] == ro   zbut got : dimension z] = ©r}   r�   )r}   Údim_sizer™   re  s   €€€€r:   r\   z check_dim_size.<locals>.<lambda>C  sP   ø€ Ð1°#°Ð6GÈÀzÐQVÐW[ÐV\Ð\^Ð_Ø  §¡£ Ð.?À¸zÈÈfÏlÉlÐ[cÑNdÐMeÐ
fñg€ r<   )rM   r^   r}   r�   )re  r}   r5  r™   s   ````r:   Úcheck_dim_sizer6  @  s6   û€ Ü	‡L�LØ�
‰
‹˜ÑÒ> §¡¨XÑ 6¸$Ñ >ö	gõr<   c                 óÖ  ‡ — d„ } |d|«      \  }}	t        j                  t        |«      dv d„ «       t        j                  ‰ j                  t         j                  t         j
                  t         j                  t         j                  fvˆ fd„«       t        |«      dk(  r||	}}
n%t        |«      dk(  r|d   |d   }}
n |d|«      \  }
} |d	|«      \  }}t        j                  |d u xs |dk7  d
„ «       ‰ j                  «       dk(  r‰ j                  d«      nd}‰ j                  d«      }‰ j                  d«      }‰ j                  d«      }t        ||||
d|«      }t        ||	||d|«      }t        j                  ‰ «      }t        ‰ ||	|
|||dd||||||«       ‰ j                  «       dk(  r|||g}n||||g}t        j                  |‰ j                  ‰ j                  |¬«      S )Nc                 óˆ   ‡ — t        j                  t        |«      dv ˆ fd„«       |d   }t        |«      dk(  r|n|d   }||fS )N©r©   r%  c                  ó   •— d‰ › d�S )Nzavg_pool2d: ú4 must either be a single int, or a tuple of two intsr@   ©rñ  s   €r:   r\   z1meta_avg_pool2d.<locals>.unpack.<locals>.<lambda>U  ó   ø€ �l 4 &Ð(\Ð]€ r<   r   r©   ©rM   r^   r«   ©rñ  rÍ  ÚHÚWs   `   r:   Úunpackzmeta_avg_pool2d.<locals>.unpackR  óG   ø€ Ü�‰Ü�‹H˜ÐÛ]ô	
ð �‰FˆÜ�S“˜Q’‰A C¨¡FˆØ�!ˆtˆr<   rÈ  ©r   r©   r%  c                   ó   — y©NzOavg_pool2d: stride must either be omitted, a single int, or a tuple of two intsr@   r@   r<   r:   r\   z!meta_avg_pool2d.<locals>.<lambda>^  rd   r<   c                  ó@   •— d‰ j                   j                  «       › d�S )Nz""avg_pool2d" not implemented for 'r  r  r  s   €r:   r\   z!meta_avg_pool2d.<locals>.<lambda>b  ó   ø€ Ð6°u·{±{×7JÑ7JÓ7LÐ6MÈQÐQ€ r<   r   r©   rÃ   rö  c                   ó   — y©Nzdivisor must be not zeror@   r@   r<   r:   r\   z!meta_avg_pool2d.<locals>.<lambda>o  rd   r<   r3  r"  éýÿÿÿrí  r’   r2   r«  )rM   r^   r«   rU   rý  Úuint16Úuint32Úuint64r}   r™   Úpooling_output_shaperE   r"   Úpool2d_shape_checkr‚   rz   )r  rÈ  rÃ   rö  r%  Úcount_include_padÚdivisor_overriderB  ÚkHÚkWÚdHÚdWÚpadHÚpadWr  r&  ÚinputHeightÚ
inputWidthr'  r(  rå   r™   s   `                     r:   Úmeta_avg_pool2dr[  H  sâ  ø€ òñ �M ;Ó/�F€BˆÜ	‡L�LÜˆF‹�yÐ Ùaôô 
‡L�LØ�‰œEŸK™K¬¯©´u·|±|ÄUÇ\Á\ÐRÐRÛQôô ˆ6ƒ{�aÒØ�RˆB‰Ü	ˆV‹˜Ò	Ø˜‘˜F 1™IˆB‰á˜ &Ó)‰ˆˆBá˜	 7Ó+�J€Dˆ$ä	‡L�LØ˜DÐ Ò9Ð$4¸Ñ$9Ù*ôð
  %Ÿy™y›{¨aÒ/ˆU�Z‰Z˜Œ^°Q€FØ—*‘*˜R“.€KØ—*‘*˜R“.€KØ—‘˜B“€Jä'¨°R¸¸rÀ1ÀiÓP€LÜ& z°2°t¸RÀÀIÓN€Kä×/Ñ/°Ó6€MÜØØ
Ø
Ø
Ø
ØØØ	Ø	ØØØØØØôð$ ‡y�yƒ{�aÒØ˜\¨;Ð7‰à˜ \°;Ð?ˆÜ�;‰;ØØ�k‰kØ�|‰|Ø#ô	ð r<   c                 óÀ   — t        | ||||||dd|	|
||||«       | j                  «       }|	}t        |||dz
  |«       t        |||dz
  |«       t        |||dz
  |«       y )Nr©   r2   r%  )rP  r}   r6  )r  Ú
gradOutputr  rS  rT  rU  rV  rW  rX  r&  rY  rZ  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 intsr@   r@   r<   r:   r\   z*meta_avg_pool2d_backward.<locals>.<lambda>Ô  rd   r<   r   c                   ó   — yrF  r@   r@   r<   r:   r\   z*meta_avg_pool2d_backward.<locals>.<lambda>Ú  rd   r<   c                   ó   — y)NzGavg_pool2d: padding must either be a single int, or a tuple of two intsr@   r@   r<   r:   r\   z*meta_avg_pool2d_backward.<locals>.<lambda>à  rd   r<   c                   ó   — yrJ  r@   r@   r<   r:   r\   z*meta_avg_pool2d_backward.<locals>.<lambda>ç  rd   r<   r3  r"  rK  rí  r’   r«  )rM   r^   r«   r�   r}   rO  rE   r"   r`  r‚   rU   rz   )ÚgradOutput_r  rÈ  rÃ   rö  r%  rQ  rR  rS  rT  rU  rV  rW  rX  Ú
input_sizer  r&  rY  rZ  r'  r(  r^  s                         r:   Úmeta_avg_pool2d_backwardrh  Æ  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                 ó  ‡ — t        j                  t        |«      dv d„ «       |d   }t        |«      dk(  r|n|d   }t        |«      dk(  r|n|d   }	t        j                  | xs t        |«      dv d„ «       t        j                  ‰ j                  t         j                  t         j
                  t         j                  t         j                  fvˆ fd„«       |s|n|d   }
|s|nt        |«      dk(  r|
n|d   }|s|	nt        |«      dk(  r|
n|d   }t        j                  t        |«      dv d„ «       |d   }t        |«      dk(  r|n|d   }t        |«      dk(  r|n|d   }t        j                  ‰ j                  d	v d
„ «       t        j                  | xs |dk7  d„ «       ‰ j                  d«      }‰ j                  d«      }‰ j                  d«      }‰ j                  d«      }‰ j                  d«      }t        ||||
d|«      }t        ||||d|«      }t        ||	||d|«      }t        ‰ ||||	|
|||||ddd||||||dd¬«       ‰ j                  dk(  r‰ j                  ||||f«      S ‰ j                  |||||f«      S )N©r©   r2   c                   ó   — y©NzFavg_pool3d: kernel_size must be a single int, or a tuple of three intsr@   r@   r<   r:   r\   z!meta_avg_pool3d.<locals>.<lambda>  rd   r<   r   r©   r%  c                   ó   — y©NzJavg_pool3d: stride must be omitted, a single int, or a tuple of three intsr@   r@   r<   r:   r\   z!meta_avg_pool3d.<locals>.<lambda>$  rd   r<   c                  ó@   •— d‰ j                   j                  «       › d�S )Nz""avg_pool3d" not implemented for 'r  r  r  s   €r:   r\   z!meta_avg_pool3d.<locals>.<lambda>(  rH  r<   c                   ó   — y©NzBavg_pool3d: padding must be a single int, or a tuple of three intsr@   r@   r<   r:   r\   z!meta_avg_pool3d.<locals>.<lambda>0  rd   r<   ©r3  rO  c                   ó   — y©Nz9non-empty 4D or 5D (batch mode) tensor expected for inputr@   r@   r<   r:   r\   z!meta_avg_pool3d.<locals>.<lambda>8  rd   r<   c                   ó   — yrJ  r@   r@   r<   r:   r\   z!meta_avg_pool3d.<locals>.<lambda>=  rd   r<   r"  rK  rí  r’   zavg_pool3d()T)Úcheck_input_sizer3  )rM   r^   r«   rU   rý  rL  rM  rN  r›   r™   rO  Úpool3d_shape_checkrŽ   )r  rÈ  rÃ   rö  r%  rQ  rR  ÚkTrS  rT  ÚdTrU  rV  ÚpadTrW  rX  r  ÚnslicesÚitimeÚiheightÚiwidthÚotimeÚoheightÚowidths   `                       r:   Úmeta_avg_pool3dr‚    sŒ  ø€ ô 
‡L�LÜˆKÓ˜FÐ"ÙXôð 
�Q‰€BÜ�;Ó 1Ò$‰¨+°a©.€BÜ�;Ó 1Ò$‰¨+°a©.€Bä	‡L�LØˆ
Ò+”c˜&“k VÐ+Ù\ôô 
‡L�LØ�‰œEŸK™K¬¯©´u·|±|ÄUÇ\Á\ÐRÐRÛQôñ ‰˜v a™y€BÙ‰¤c¨&£k°QÒ&6¡¸FÀ1¹I€BÙ‰¤c¨&£k°QÒ&6¡¸FÀ1¹I€Bä	‡L�LÜˆG‹˜ÐÙTôð �1‰:€DÜ�w“< 1Ò$‰4¨'°!©*€DÜ�w“< 1Ò$‰4¨'°!©*€Dä	‡L�LØ�
‰
�fÐÙKôô
 
‡L�LØÐÒ5Ð 0°AÑ 5Ù*ôð
 �Z‰Z˜‹]€FØ�j‰j˜‹n€GØ�J‰J�r‹N€EØ�j‰j˜‹n€GØ�Z‰Z˜‹^€Fä  ¨¨D°"°a¸ÓC€EÜ" 7¨B°°b¸!¸YÓG€GÜ! &¨"¨d°B¸¸9ÓE€FäØØØ
Ø
Ø
Ø
Ø
Ø
ØØØØ	Ø	Ø	ØØØØØØØØõ-ð2 ‡z�z�Q‚Ø�‰ ¨°¸Ð@ÓAÐAà�‰ ¨°¸ÀÐHÓIÐ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 )Nrj  c                   ó   — yrl  r@   r@   r<   r:   r\   z*meta_avg_pool3d_backward.<locals>.<lambda>w  rd   r<   r   r©   r%  c                   ó   — yrn  r@   r@   r<   r:   r\   z*meta_avg_pool3d_backward.<locals>.<lambda>  rd   r<   c                   ó   — yrq  r@   r@   r<   r:   r\   z*meta_avg_pool3d_backward.<locals>.<lambda>‡  rd   r<   rr  c                   ó   — yrt  r@   r@   r<   r:   r\   z*meta_avg_pool3d_backward.<locals>.<lambda>�  rd   r<   c                   ó   — yrJ  r@   r@   r<   r:   r\   z*meta_avg_pool3d_backward.<locals>.<lambda>”  rd   r<   r"  rK  rí  r’   zavg_pool3d_backward())	rM   r^   r«   r›   r™   rO  Úavg_pool3d_backward_shape_checkrŽ   r�   )r'  r  rÈ  rÃ   rö  r%  rQ  rR  rx  rS  rT  ry  rU  rV  rz  rW  rX  r{  r|  r}  r~  Úotime_for_shape_checkÚoheight_for_shape_checkÚowidth_for_shape_checks                           r:   Úmeta_avg_pool3d_backwardr�  i  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 )Nr2   r3  c                  ó"   •— d‰ j                   › �S )Nz"Expected 3D or 4D tensor, but got rË   rê   s   €r:   r\   z*meta_adaptive_avg_pool2d.<locals>.<lambda>½  ó   ø€ Ð4°T·Z±Z°LÐA€ r<   rí  r«  )
rM   r^   r›   r�   r]   rE   r"   r‚   rU   rz   )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 )Nr3  rO  c                  ó"   •— d‰ j                   › �S )Nz"Expected 4D or 5D tensor, but got rË   rê   s   €r:   r\   z*meta_adaptive_avg_pool3d.<locals>.<lambda>Ï  r�  r<   rK  )rM   r^   r›   rŽ   r�   r]   )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:   r\   z4meta__adaptive_avg_pool2d_backward.<locals>.<lambda>Ú  s&   ø€ ð 6Ø6>·n±nÐ5EÐEUÐVWÐUXÐXdðf€ r<   r2   r3  c                  ó"   •— d‰ j                   › �S )NzBadaptive_avg_pool2d_backward(): Expected 3D or 4D tensor, but got rË   rê   s   €r:   r\   z4meta__adaptive_avg_pool2d_backward.<locals>.<lambda>ß  s   ø€ ÐTÐUY×U_ÑU_ÐT`Ða€ r<   c                  ó<   •— d‰j                   › d‰ j                   › �S ©Núexpected dtype z! for `grad_output` but got dtype r‡   )rš  r�   s   €€r:   r\   z4meta__adaptive_avg_pool2d_backward.<locals>.<lambda>ã  s   ø€ �/ $§*¡* Ð-NÈxÏ~É~ÐN^Ð_€ r<   rä   )r›   r®   rM   r^   r™   rU   ré   rÒ  rÏ  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_checkrM   rè   r9  ©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:   r\   z3_adaptive_pool_empty_output_check.<locals>.<lambda>÷  s/   ø€ Ø�*ð -Ø-8×->Ñ->Ð,?Ð?OÐPQÈsÐR^ð`ð r<   )r›   r®   rM   r^   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 )Nrü  c                  ó"   •— d‰ j                   › �S )Nz:adaptive_max_pool2d(): Expected 3D or 4D tensor, but got: rË   r  s   €r:   r\   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:   r\   z*meta_adaptive_max_pool2d.<locals>.<lambda>	  ó%   ø€ ð'Ø',§{¡{ mÐ3CÀAÀ3ÀlðTð r<   r%  c                   ó   — y)NzCadaptive_max_pool2d(): internal error: output_size.size() must be 2r@   r@   r<   r:   r\   z*meta_adaptive_max_pool2d.<locals>.<lambda>  rd   r<   r3  r2   r‡   rä   )r›   rM   r^   r®   r™   r«   rŽ   rð   rE   r"   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:   r\   z3meta_adaptive_max_pool2d_backward.<locals>.<lambda>4  s   ø€ Ð]Ð^i×^oÑ^oÐ]pÐq€ r<   Úadaptive_max_pool2d_backwardc                  ó<   •— d‰j                   › d‰ j                   › �S r�  r‡   )r'  r  s   €€r:   r\   z3meta_adaptive_max_pool2d_backward.<locals>.<lambda>;  s!   ø€ �/ %§+¡+ Ð.OÐP[×PaÑPaÐObÐc€ r<   rä   )
r›   rM   r^   r¢  rU   rE   r"   rŽ   r�   r[  )r'  r  rí   r›   rå   s   ``   r:   Ú!meta_adaptive_max_pool2d_backwardr¹  .  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 )Nrr  c                  ó"   •— d‰ j                   › �S )Nz:adaptive_max_pool3d(): Expected 4D or 5D tensor, but got: rË   r  s   €r:   r\   z*meta_adaptive_max_pool3d.<locals>.<lambda>H  r©  r<   r©   r   c                  ó*   •— d‰j                   › d‰ › d�S )Nzjadaptive_max_pool3d(): Expected input to have non-zero size for non-batch dimensions, but input has sizes r˜  r™  rË   r«  s   €€r:   r\   z*meta_adaptive_max_pool3d.<locals>.<lambda>M  r¬  r<   r2   c                   ó   — y)NzCadaptive_max_pool3d(): internal error: output_size.size() must be 3r@   r@   r<   r:   r\   z*meta_adaptive_max_pool3d.<locals>.<lambda>U  rd   r<   rO  r3  r‡   )r›   rM   r^   r®   r™   r«   rŽ   rð   )r  r‘  r›   ÚdimDr¯  r°  ÚosizeTr±  r²  rž   r  rí   r  s   `           @r:   Úmeta_adaptive_max_pool3drÀ  B  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Ã  n  s"   € ô & kÐ3QÔRØ�?‰?˜5Ÿ;™;Ó'Ð'r<   c                 ó>   — |€t        d«      ‚| j                  |«      S )Nz:cannot repeat_interleave a meta tensor without output_size)rZ  rŽ   )Úrepeatsr‘  s     r:   Úmeta_repeat_interleave_TensorrÆ  u  s%   € àÐÜÐWÓXÐXØ×Ñ˜[Ó)Ð)r<   c                 óî   — | j                   j                  sJ ‚|j                   j                  sJ ‚t        | j                  |j                  «      }| j	                  |t        | j                   «      ¬«      S r¶  )rU   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Ë  c                ód   — | j                  || j                  «       ft        j                  ¬«      S r¶  )rŽ   r}   rM   r‹   )r�   r™   rË  s      r:   Únonzero_staticrÍ  …  s&   € ð �>‰>˜4 §¡£Ð,´E·J±Jˆ>Ó?Ð?r<   c                 ó
  — t        j                  t        j                  d„ «       t        j                  | j                  «       | j                  «       fd| j                  «       ft         j                  | j                  ¬«      S )Nc                   ó   — y)NaY  The register_meta function for torch.nonzero() raises unimplemented by default, as a correct data-independent implementation does not exist. This implementation returns a fake value, assuming all elements of the tensor are non-zero. To enable this registration, please set 'torch.fx.experimental._config.meta_nonzero_assume_all_nonzero' to True.r@   r@   r<   r:   r\   znonzero.<locals>.<lambda>�  rd   r<   r©   ©rU   rz   )	rM   Ú_check_not_implementedr‚  Úmeta_nonzero_assume_all_nonzerorR  r�   r}   r‹   rz   rê   s    r:   ÚnonzerorÓ  ‹  sf   € ô 
× Ñ Ü×2Ñ2ñ	Sôô ×ÑØ	�‰‹�t—x‘x“zÐ"Ø	
ˆD�J‰J‹LÐÜ�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                  «      ŠŒ^ ˆˆˆfd„}
‰ j+                  ‰‰z   ‰z   «      }ddlm}  |‰ j1                  «       dk(  «      r|S  |
‰ «      }t3        j4                  |«      }t%        |«      t%        t        t        |«      «      «      k7  r~t3        j6                  |j                  |«      }t3        j8                  |«      }t3        j6                  |t3        j:                  |«      «      }|j=                  |j?                  «       |«      }|S )Nc                   ó   — y)Nz#at least one index must be providedr@   r@   r<   r:   r\   z#meta_index_Tensor.<locals>.<lambda>   rd   r<   c                   ó   — y)Nz?tensors used as indices must be long, int, byte or bool tensorsr@   r@   r<   r:   r\   z#meta_index_Tensor.<locals>.<lambda>¨  rd   r<   c                  ó"   •— d‰ j                   › �S )Nú)too many indices for tensor of dimension r1  rê   s   €r:   r\   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 ú
 at index z0 does not match the shape of the indexed tensor rË   )r  r‰   Újr“  r�   s   €€€€€r:   r\   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 )NrØ  z (got rp   )r›   r«   )rí   r�   s   €€r:   r\   z#meta_index_Tensor.<locals>.<lambda>¿  s!   ø€ Ð;¸D¿I¹I¸;ÀfÌSÐQXË\ÈNÐZ[Ð\€ r<   r   Fr%  Tc                 óÞ   •— ‰‰z   ‰z   }t        | j                  «       «      }dgt        ‰«      z  |t        ‰«      t        | j                  «      t        ‰«      z
   | j	                  ||«      S )zI
        This follows restride_src in TensorAdvancedIndexing.cpp
        r   )rü   rÃ   r«   r�   rÓ   )r�   r�   rÜ   Úafter_shapeÚbefore_shapeÚreplacement_shapes      €€€r:   Ú_restride_srcz(meta_index_Tensor.<locals>._restride_src   so   ø€ ð Ð0Ñ0°;Ñ>ˆÜ�t—{‘{“}Ó%ˆØKLÈ#ÔPSØóQ
ñ K
ˆ”�LÓ!¤C¨¯
©
£O´c¸+Ó6FÑ$FÐGð �‰˜u gÓ.Ð.r<   ©Úguard_size_oblivious) rM   r^   r  Ú	enumeraterU   r‹   r  rt  rÓ  r«   rŒ   r›   r®   r�   rý   ÚselectÚtorch._refsrÐ   rü   r*   rÿ   rŽ   rª   rã  r�   rE   Ú3compute_elementwise_output_logical_to_physical_permÚ
apply_permr    Úinvert_permrÓ   r™   )r�   rí   r	  rÓ  ÚrefsÚstateÚhas_contiguous_subspacer±  Útransposed_indicesr}   rá  r  rã  Úrestrided_selfÚpermÚ
perm_shaper´   rÞ  rß  r  r‰   rÛ  r“  rà  s   ``               @@@@@@@r:   Úmeta_index_Tensorrñ  ž  sÕ  ÿø€ ä	‡L�L”�g“Ñ MÔNð &(€FÜ˜gÓ&ó !‰ˆˆ5ØÑÜ�L‰LØ—‘¤§
¡
¬E¯I©I´u·z±zÄ5Ç:Á:ÐNÐNÙYôð �{‰{œuŸz™z¬5¯:©:Ð6Ñ6ØŸ-™-›/�Ü˜“K�Ü×"Ñ"Ø˜Ÿ
™
‘N d§i¡iÑ/ÛSôô ˜uŸz™zÓ*ò 8�AÜ×&Ñ&ØŸ™ A™¨$¯*©*°Q¸±UÑ*;Ñ;÷hôð
 —M‘M '§.¡.°°AÓ"6Õ7ò8ð —‘˜eÖ$à�M‰M˜%Ö ð/!ð0 €GÜ	‡L�LÜˆG‹˜Ÿ	™	Ñ!Ü\ôõ
 äÐ(�4×(Ñ(¨'Ð2Ó3€Gä
ˆg‹,˜Ÿ™Ò
"Ø�‰�tÔô ˆg‹,˜Ÿ™Ó
"ð €EØ#ÐØò 'ˆØ�AŠ:ØÑ Ø‘Ø�aŠZØ‰}Ø‘àÑ Ùð'ð #'Ðñ
 #ØˆØÐÜ! 'Ó*ò 	1‰HˆAˆuØÑ Ø—‘˜A”Ø"×)Ñ)¨%Õ0ð	1ô " 'Ó*ò 	1‰HˆAˆuØ‰}Ø—‘˜A”Ø"×)Ñ)¨%Õ0ð	1ð �|‰|˜DÓ!ˆØ$ˆð !€LØ€KØ#%ÐÜ Ó(ò 2‰
ˆˆUØˆ=Ù Ø×"Ñ" 4§:¡:¨c¡?Õ3à×#Ñ# D§J¡J¨s¡OÕ4ä $ U§[¡[Ó 1Ñð2ö	/ð �.‰.˜Ð(9Ñ9¸KÑGÓ
H€CÝJá˜DŸJ™J›L¨AÑ-Ô.àˆ
ñ
 # 4Ó(€NÜ×DÑDÀ^ÓT€Dô ˆDƒz”Tœ%¤ D£	Ó*Ó+Ò+Ü×%Ñ% c§i¡i°Ó6ˆ
Ü×6Ñ6°zÓBˆ
Ü×%Ñ% j´%×2CÑ2CÀDÓ2IÓJˆ
Ø�n‰n˜SŸX™X›Z¨Ó4ˆØ€Jr<   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ö  r¹  Ú
transposedr¼  r»  Úoutput_maskÚbackend_grad_inputÚbackend_grad_weightÚbackend_grad_biass                 r:   Úmeta_convolution_backwardrý  !  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%  r2   c                   ó   — yrt  r@   r@   r<   r:   r\   zmeta_addbmm.<locals>.<lambda>E  rd   r<   c                   ó   — yrv  r@   r@   r<   r:   r\   zmeta_addbmm.<locals>.<lambda>F  rd   r<   r   c                  óP   •— d‰ j                  d«      › d‰j                  d«      › �S )Nz8batch1 and batch2 must have same number of batches, got r   r—   r˜   ©rx  ry  s   €€r:   r\   zmeta_addbmm.<locals>.<lambda>I  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©   rJ   r%  r—   rp   r˜   r  s   €€r:   r\   zmeta_addbmm.<locals>.<lambda>M  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 shaper@   r@   r<   r:   r\   zmeta_addbmm.<locals>.<lambda>T  rd   r<   )r™   r¬  rM   r^   r}   rŽ   )r�   rx  ry  r€  r  r„  r…  s    ``    r:   Úmeta_addbmmr  ?  s  ù€ ð �;‰;�q‹>€DØ�;‰;�q‹>€DØ�;‰;˜˜d�|Ó$€DÜ	‡L�L�—‘“ Ñ"Ñ$HÔIÜ	‡L�L�—‘“ Ñ"Ñ$HÔIÜ	‡L�LØ�‰�A‹˜&Ÿ+™+ a›.Ñ(Üpôô 
‡L�LØ�‰�A‹˜&Ÿ+™+ a›.Ñ(ô	
ôô 
‡L�LØ�	‰	�!‹˜ÑÒ5 §¡¨1£°Ñ!5Ù@ôð �>‰>˜$Ÿ)™)›+Ó&Ð&r<   c                 ó@   — | j                  | j                  «       «      S r7   ró  )r�   rH  Úkwargss      r:   Úmeta_randint_liker  Y  s   € à�>‰>˜$Ÿ)™)›+Ó&Ð&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 ©rq   ©Úls   €r:   r\   z#meta__fused_adam_.<locals>.<lambda>t  ó   ø€ Ð=¼dÀ1»g¸YÐG€ r<   ©rM   r^   rg   rü   )r�   ÚgradsÚexp_avgsÚexp_avg_sqsÚmax_exp_avg_sqsÚstate_stepsÚlrÚbeta1Úbeta2Úweight_decayÚepsÚamsgradÚmaximizer	  r
  r  s                  @r:   Úmeta__fused_adam_r  ^  s:   ø€ ð& �E˜8 [°/À;ÐOò 
ˆÜ�‰Ü�qœ$ÓÛGõ	
ñ
r<   c       	         ó¼   ‡— | |||||fD ])  Št        j                  t        ‰t        «      ˆfd„«       Œ+ d„ } || «       ||«       ||«       ||«       ||«      fS )Nc                  ó    •— dt        ‰ «      › �S r  r  r  s   €r:   r\   z"meta__fused_adam.<locals>.<lambda>Ž  r  r<   c                 óR   — | D �cg c]  }t        j                  |«      ‘Œ c}S c c}w r7   r“  )Útensor_listrû  s     r:   Úempty_like_listz)meta__fused_adam.<locals>.empty_like_list‘  s!   € Ø-8Ö9¨”× Ñ  Õ#Ò9Ð9ùÒ9s   …$r  )r�   r  r  r  r  r  r  r  r  r  r  r  r  r	  r
  r$  r  s                   @r:   Úmeta__fused_adamr%  x  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 tensorr@   r@   r<   r:   r\   zmeta__int_mm.<locals>.<lambda>   rd   r<   c                   ó   — y)Nzb must be a 2D tensorr@   r@   r<   r:   r\   zmeta__int_mm.<locals>.<lambda>¡  rd   r<   c                  ó"   •— d‰ j                   › �S )Nzexpected self to be int8, got r‡   )rÄ   s   €r:   r\   zmeta__int_mm.<locals>.<lambda>¤  ó   ø€ Ð0°·±°	Ð:€ r<   c                  ó"   •— d‰ j                   › �S )Nzexpected mat2 to be int8, got r‡   )r­  s   €r:   r\   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   rJ   r©   r—   rp   r˜   ©rÄ   r­  s   €€r:   r\   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<   r‡   )rM   r^   r}   rU   rt  r™   rŽ   ru  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 tensorr@   r@   r<   r:   r\   z2meta__convert_weight_to_int4pack.<locals>.<lambda>¶  rd   r<   c                  ó"   •— d‰ j                   › �S ©Nr-  r‡   ©r   s   €r:   r\   z2meta__convert_weight_to_int4pack.<locals>.<lambda>¹  ó   ø€ Ð.¨q¯w©w¨iÐ8€ r<   r   r©   é   rŒ  é    r‡   )rM   r^   r}   rU   rý  r™   rŽ   ru  ©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                 óJ  ‡ — t        j                  ‰ j                  «       dk(  d„ «       t        j                  ‰ j                  t         j                  u ˆ fd„«       ‰ j                  d«      }‰ j                  d«      }‰ j                  ||dz  ft         j                  ¬«      S )Nr%  c                   ó   — yr1  r@   r@   r<   r:   r\   z:meta__convert_weight_to_int4pack_for_cpu.<locals>.<lambda>Ê  rd   r<   c                  ó"   •— d‰ j                   › �S ©Nzexpected w to be int32, got r‡   r4  s   €r:   r\   z:meta__convert_weight_to_int4pack_for_cpu.<locals>.<lambda>Í  r5  r<   r   r©   r‡   )rM   r^   r}   rU   ru  r™   rŽ   rý  r8  s   `   r:   Ú(meta__convert_weight_to_int4pack_for_cpur?  È  s   ø€ ä	‡L�L�—‘“˜A‘Ñ>Ô?Ü	‡L�LØ	�‰”5—;‘;ÐÛ8ôð 	
�‰ˆq‹	€AØ	�‰ˆq‹	€AØ�;‰;Ø	
ˆA�‰FˆÜ�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 tensorr@   r@   r<   r:   r\   z*meta__weight_int4pack_mm.<locals>.<lambda>Ù  rd   r<   r3  c                   ó   — y)Nzw must be a 4D tensorr@   r@   r<   r:   r\   z*meta__weight_int4pack_mm.<locals>.<lambda>Ú  rd   r<   c                  ó"   •— d‰ j                   › �S ©Nr,  r‡   ©rJ   s   €r:   r\   z*meta__weight_int4pack_mm.<locals>.<lambda>Ý  ó   ø€ Ð5°a·g±g°YÐ?€ r<   c                  ó"   •— d‰ j                   › �S r>  r‡   r4  s   €r:   r\   z*meta__weight_int4pack_mm.<locals>.<lambda>á  r5  r<   r   r6  r‡   ©
rM   r^   r}   rU   r�  rŽ  r�  ru  rŽ   r™   r.  s   ``  r:   Úmeta__weight_int4pack_mmrJ  ×  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                  «       dk(  d„ «       t        j                  ‰ j                  t         j                  t         j
                  t         j                  fv ˆ fd„«       t        j                  ‰j                  t         j                  u ˆfd„«       ‰ j                  ‰ j                  d«      ‰j                  d«      ‰ j                  ¬«      S )Nr%  c                   ó   — yrB  r@   r@   r<   r:   r\   z2meta__weight_int4pack_mm_for_cpu.<locals>.<lambda>è  rd   r<   c                   ó   — yr1  r@   r@   r<   r:   r\   z2meta__weight_int4pack_mm_for_cpu.<locals>.<lambda>é  rd   r<   c                  ó"   •— d‰ j                   › �S rE  r‡   rF  s   €r:   r\   z2meta__weight_int4pack_mm_for_cpu.<locals>.<lambda>ì  rG  r<   c                  ó"   •— d‰ j                   › �S r3  r‡   r4  s   €r:   r\   z2meta__weight_int4pack_mm_for_cpu.<locals>.<lambda>ð  r5  r<   r   r‡   )
rM   r^   r}   rU   r�  rŽ  r�  rý  rŽ   r™   r.  s   ``  r:   Ú meta__weight_int4pack_mm_for_cpurP  æ  ó¯   ù€ ä	‡L�L�—‘“˜A‘Ñ>Ô?Ü	‡L�L�—‘“˜A‘Ñ>Ô?Ü	‡L�LØ	�‰”E—M‘M¤5§=¡=´%·.±.ÐAÐAÛ?ôô 
‡L�LØ	�‰”5—;‘;ÐÛ8ôð �;‰;�q—v‘v˜a“y !§&¡&¨£)°1·7±7ˆ;Ó;Ð;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«      ‰ j                  ¬«      S )Nr%  c                   ó   — yrB  r@   r@   r<   r:   r\   z;_weight_int4pack_mm_with_scales_and_zeros.<locals>.<lambda>÷  rd   r<   c                   ó   — yr1  r@   r@   r<   r:   r\   z;_weight_int4pack_mm_with_scales_and_zeros.<locals>.<lambda>ø  rd   r<   c                  ó"   •— d‰ j                   › �S rE  r‡   rF  s   €r:   r\   z;_weight_int4pack_mm_with_scales_and_zeros.<locals>.<lambda>û  rG  r<   c                  ó"   •— d‰ j                   › �S r>  r‡   r4  s   €r:   r\   z;_weight_int4pack_mm_with_scales_and_zeros.<locals>.<lambda>ÿ  r5  r<   r   r‡   rI  )rJ   r   r/  ÚqScaleÚqZeross   ``   r:   Ú)_weight_int4pack_mm_with_scales_and_zerosrY  õ  rQ  r<   rÄ   r­  c                 ó   — | |z   dz
  |z  |z  S rc  r@   r-  s     r:   Úkai_roundupr[    s   € Ø�‰U�Q‰Y˜1Ñ Ñ!Ð!r<   c                 ó  ‡	‡
‡‡‡‡‡‡‡‡‡— | dk(  ry||k(  r(d}d}d}dŠdŠdŠd„ Šˆˆˆˆfd„Šˆfd„} ||||||«      S |dz  d	k(  rC||z  d	k(  r:d}d}d}dŠdŠdŠdŠ	ˆ	ˆˆfd
„}ˆ	ˆ
ˆˆˆˆˆfd„Šd„ Š
ˆ	fd„Šˆ	fd„Š |||||||«      S y y y )Nr3  r6  rŒ  r%  c                 ó8   — t        ||z  d«      }t        | |«      S )Nr3  ©r[  )r“  ÚkrÚsrÚkr_sr_roundedup4s       r:   Úkai_k_roundedupz3get_kai_packed_weight_size.<locals>.kai_k_roundedup  s#   € ô $/¨r°B©w¸Ó#:Ð Ü" 1Ð&6Ó7Ð7r<   c                 óX   •—  ‰| ||«      }|dz  dk(  sJ d«       ‚||dz  ‰z   ‰z   ‰z   z  S )Nr%  r   zk_internal must be evenr@   )	r“  Únrr_  r`  Ú
k_internalrb  Úkai_num_bytes_biasÚkai_num_bytes_multiplier_rhsÚkai_num_bytes_sum_rhss	        €€€€r:   Ú9kai_get_rhs_packed_stride_rhs_pack_nxk_qsi4cxp_qsu4cxs1s0z]get_kai_packed_weight_size.<locals>.kai_get_rhs_packed_stride_rhs_pack_nxk_qsi4cxp_qsu4cxs1s0  sY   ø€ ñ -¨Q°°BÓ7�
à" Q™¨1Ò,ÐGÐ.GÓGÐ,àØ 1‘_Ø2ñ3à+ñ,ð )ñ)ñð r<   c                 ó>   •— t        | |«      |z  }| ‰||||«      z  S r7   r^  )r=  r“  rd  r_  r`  Únum_rowsri  s         €r:   Ú7kai_get_rhs_packed_size_rhs_pack_nxk_qsi4cxp_qsu4cxs1s0z[get_kai_packed_weight_size.<locals>.kai_get_rhs_packed_size_rhs_pack_nxk_qsi4cxp_qsu4cxs1s0'  s6   ø€ ô ' q¨"Ó-°Ñ3�ð ÙOØ˜2˜r 2óñðr<   r7  r   c                 ó|   •— ||z  dk(  sJ ‚|‰	z  dk(  sJ ‚|‰z  dk(  sJ ‚t        | |«      |z  }| ‰|||||«      z  S r   r^  )
r=  r“  rd  r_  r`  Úblrk  Úkai_bl_multiple_ofÚ;kai_get_rhs_packed_stride_rhs_pack_nxk_qsi4c32p_qsu4c32s1s0Úkai_nr_multiple_ofs
          €€€r:   Ú9kai_get_rhs_packed_size_rhs_pack_nxk_qsi4c32p_qsu4c32s1s0z]get_kai_packed_weight_size.<locals>.kai_get_rhs_packed_size_rhs_pack_nxk_qsi4c32p_qsu4c32s1s0?  sp   ø€ ð ˜R™ A’~Ð%�~ØÐ/Ñ/°AÒ5Ð5Ð5ØÐ/Ñ/°AÒ5Ð5Ð5ä& q¨"Ó-°Ñ3�ð ÙQØ˜2˜r 2 róñðr<   c                 óŽ   •— ||z  dk(  sJ ‚|‰
z  dk(  sJ ‚|‰z  dk(  sJ ‚ ‰	«       } ‰| |«      } ‰||«      }|||z  ‰z   ‰z   z  S r   r@   )r“  rd  r_  r`  rn  Únum_bytes_multiplier_rhsÚnum_blocks_per_rowÚnum_bytes_per_blockro  Ú#kai_get_bf16_datatype_size_in_bytesrq  Úkai_num_blocks_per_rowrf  Úkai_num_bytes_per_blockrh  s           €€€€€€€r:   rp  z_get_kai_packed_weight_size.<locals>.kai_get_rhs_packed_stride_rhs_pack_nxk_qsi4c32p_qsu4c32s1s0O  s�   ø€ ð ˜R™ A’~Ð%�~ØÐ/Ñ/°AÒ5Ð5Ð5ØÐ/Ñ/°AÒ5Ð5Ð5ñ ,OÓ+PÐ(Ù%;¸A¸rÓ%BÐ"Ù&=ØÐ0ó'Ð#ð Ø(Ð+=Ñ=Ø+ñ,à(ñ)ñð r<   c                   ó   — y)Nr%  r@   r@   r<   r:   rw  zGget_kai_packed_weight_size.<locals>.kai_get_bf16_datatype_size_in_bytese  s   € Ør<   c                 ó6   •— |‰z  dk(  sJ ‚t        | |«      |z  S r   r^  )r“  rn  ro  s     €r:   rx  z:get_kai_packed_weight_size.<locals>.kai_num_blocks_per_rowh  s)   ø€ ØÐ/Ñ/°AÒ5Ð5Ð5Ü" 1 bÓ)¨RÑ/Ð/r<   c                 ó(   •— | ‰z  dk(  sJ ‚| dz  |z   S )Nr   r%  r@   )rn  rt  ro  s     €r:   ry  z;get_kai_packed_weight_size.<locals>.kai_num_bytes_per_blockl  s'   ø€ ØÐ/Ñ/°AÒ5Ð5Ð5Ø˜a™Ð#;Ñ;Ð;r<   r@   )Ún_bitsr¬  ÚKÚ	groupsizeÚkai_nrÚkai_krÚkai_srrl  rr  ro  rw  rp  ri  rb  rq  rx  rf  rg  ry  rh  s            @@@@@@@@@@@r:   Úget_kai_packed_weight_sizerƒ    sç   ÿú€ Ø�‚{Ø˜Š>àˆFØˆFØˆFØ$%Ð!Ø+,Ð(Ø!"Ðò8÷ô
ñ KØ�1�f˜f fóð ð ˜‰^˜qÒ  Q¨¡]°aÒ%7ØˆFØˆFØˆFØ$%Ð!Ø!"ÐØ!"ÐØ!#Ðö÷ ò ò,ô0ô<ñ MØ�1�f˜f f¨ióð ðu &8Ð ð[ r<   c                 óV  ‡ — t        j                  ‰ j                  t         j                  u ˆ fd„«       t         j                  j
                  j                  «       rŒ||k(  r|j                  t         j                  k(  s2||k  re|dz  dk(  r]||z  dk(  rU|j                  t         j                  k(  r8t        d|||«      }‰ j                  t        |«      t         j                  ¬«      S ‰ j                  «       |j                  «       z   }‰ j                  |t         j                  ¬«      S )Nc                  ó"   •— d‰ j                   › �S r3  r‡   )Úweightss   €r:   r\   z2meta__dyn_quant_pack_4bit_weight.<locals>.<lambda>{  s   ø€ Ð.¨w¯}©}¨oÐ>€ r<   r7  r   r3  r‡   )rM   r^   rU   rý  ÚbackendsÚkleidiaiÚis_availablerQ   r�  rƒ  rŽ   r  r�   )r†  Úscales_zerosro  Ú
block_sizeÚin_featuresÚout_featuresÚpacked_weight_sizes   `      r:   Ú meta__dyn_quant_pack_4bit_weightr�  u  sõ   ø€ ô 
‡L�LØ�‰œŸ™Ð$Û>ôô ‡~�~×Ñ×+Ñ+Ô-Ø	�{Ò	" |×'9Ñ'9¼U¿[¹[Ò'Hà˜Ò$Ø˜R‘ 1Ò$Ø˜jÑ(¨AÒ-Ø×"Ñ"¤e§n¡nÒ4ô 8Øˆ|˜[¨*ó
Ðð × Ñ ¤Ð%7Ó!8ÄÇÁÐ ÓLÐLØ Ÿ™›¨<×+=Ñ+=Ó+?Ñ?ÐØ×ÑÐ/´u·{±{ÐÓCÐCr<   c                 ó  ‡ — t        j                  ‰ j                  «       dk(  d„ «       t        j                  ‰ j                  t         j                  fv ˆ fd„«       ‰ j                  d«      }‰ j                  ||‰ j                  ¬«      S )Nr%  c                   ó   — y)Nzinput must be a 2D tensorr@   r@   r<   r:   r\   z-meta__dyn_quant_matmul_4bit.<locals>.<lambda>–  rd   r<   c                  ó"   •— d‰ j                   › �S )Nzexpected input to be f32, got r‡   )Úinps   €r:   r\   z-meta__dyn_quant_matmul_4bit.<locals>.<lambda>™  s   ø€ Ð0°·±°Ð<€ r<   r   r‡   )rM   r^   r}   rU   r�  r™   rŽ   )r“  Úpacked_weightsr‹  rŒ  r�  rÏ  s   `     r:   Úmeta__dyn_quant_matmul_4bitr•  Ž  sg   ø€ ô 
‡L�L�—‘“˜a‘Ñ!DÔEÜ	‡L�LØ�	‰	”e—m‘m�_Ð$Û<ôð 	�‰�‹€AØ�=‰=˜˜L°·	±	ˆ=Ó:Ð: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rB  r@   r@   r<   r:   r\   z*meta__weight_int8pack_mm.<locals>.<lambda>¡  rd   r<   c                  ó"   •— d‰ j                   › �S rE  r‡   rF  s   €r:   r\   z*meta__weight_int8pack_mm.<locals>.<lambda>¤  rG  r<   c                   ó   — yr1  r@   r@   r<   r:   r\   z*meta__weight_int8pack_mm.<locals>.<lambda>¦  rd   r<   c                  ó"   •— d‰ j                   › �S )Nzexpected w to be int8, got r‡   r4  s   €r:   r\   z*meta__weight_int8pack_mm.<locals>.<lambda>©  s   ø€ Ð-¨a¯g©g¨YÐ7€ r<   r   r‡   )
rM   r^   r}   rU   r�  rŽ  r�  rt  rŽ   r™   )rJ   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: r+  r“   )Úx1s   €r:   r\   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:   r\   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:   r\   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}r@   r@   r<   r:   r\   z$meta_cdist_forward.<locals>.<lambda>¾  rd   r<   c                   ó   — y)Nz=cdist only supports floating-point dtypes, X2 got: {x2.dtype}r@   r@   r<   r:   r\   z$meta_cdist_forward.<locals>.<lambda>Â  rd   r<   r   c                   ó   — y)Nz)cdist only supports non-negative p valuesr@   r@   r<   r:   r\   z$meta_cdist_forward.<locals>.<lambda>Ä  rd   r<   ©Nr©   r%  c                  ó   •— d‰ › �S )Nz%possible modes: None, 1, 2, but was: r@   )Úcompute_modes   €r:   r\   z$meta_cdist_forward.<locals>.<lambda>Ç  s   ø€ Ð7¸°~ÐF€ r<   rí  )rM   r^   r}   r™   rE   Úis_float_dtyperU   r�   rü   Úbroadcast_shapesÚextendrŽ   )	rŸ  r¢  rh  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ü   rM   r«  Úcopyr¬  ÚmathÚprodÚ
zeros_liker¬  rè   ré   )rl  rŸ  r¢  rh  ÚcdistÚc1r­  r®  r¯  r°  r¨  Ú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	                 ó  ‡ ‡‡‡‡‡— t        j                  ‰j                  t         j                  t         j                  fv ˆfd„«       t        j                  ‰j                  t         j                  t         j                  fv ˆfd„«       t        j                  t        j                  ‰ j                  «      ˆ fd„«       ‰j                  d«      }	|rt        j                  |	dk\  d„ «       |	dz  }	‰ j                  |	‰ j                  d«      «      }
‰�}t        j                  |t        k(  d„ «       t        j                  ‰j                  dk(  ˆfd„«       t        j                  ‰j                  «       ‰j                  «       k(  ˆˆfd	„«       ˆfd
„Šd„ Šˆˆfd„}t        ‰«      dk7  r|‰j                  ‰j                  d«      «      }‰j                  ‰j                  «       «      }|t        k(  r"‰j                  |	‰ j                  d«      «      }nè‰j                  d«      }nÖ |‰ ‰|
|«      }|t        t        fv s|s!‰j                  ‰j                  d«      «      }n‰j                  d«      }‰j                  |	«      }‰j                  d   }|t        k(  rA|rt        j                  |dk\  d„ «       |dz  }‰j                  |‰ j                  d   «      }n‰j                  |j                  «       «      }|
|||fS )Nc                  ó"   •— d‰ j                   › �S )Nz(expected indices to be long or int, got r‡   )rí   s   €r:   r\   z$meta_embedding_bag.<locals>.<lambda>÷  ó   ø€ Ð:¸7¿=¹=¸/ÐJ€ r<   c                  ó"   •— d‰ j                   › �S )Nz(expected offsets to be long or int, got r‡   )r¤  s   €r:   r\   z$meta_embedding_bag.<locals>.<lambda>û  r¾  r<   c                  ó"   •— d‰ j                   › �S )Nz/expected weight to be floating point type, got r‡   )rm  s   €r:   r\   z$meta_embedding_bag.<locals>.<lambda>ÿ  s   ø€ ÐAÀ&Ç,Á,ÀÐP€ r<   r   r©   c                   ó   — y©Nz1include_last_offset: numBags should be at least 1r@   r@   r<   r:   r\   z$meta_embedding_bag.<locals>.<lambda>  rd   r<   c                   ó   — y)Nz@embedding_bag: per_sample_weights only supported with mode='sum'r@   r@   r<   r:   r\   z$meta_embedding_bag.<locals>.<lambda>  rd   r<   c                  ó$   •— d‰ j                   › d�S )Nz1expected per_sample_weights to be 1D tensor, got r+  r1  )Úper_sample_weightss   €r:   r\   z$meta_embedding_bag.<locals>.<lambda>  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() (rp   ©r�   )rí   rÅ  s   €€r:   r\   z$meta_embedding_bag.<locals>.<lambda>  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^  rœ  r4  Úpadding_idxÚis_fast_path_index_selects       €r:   Úis_fast_path_index_select_scalez;meta_embedding_bag.<locals>.is_fast_path_index_select_scale  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   )rU   rM   rQ   rO   rÃ   )r^  r4  rË  s      r:   rÌ  z5meta_embedding_bag.<locals>.is_fast_path_index_select"  sb   € à�Y‰Yœ%Ÿ+™+Ñ%Ò@¨¯©´e·j±jÑ)@ò  Ø—
‘
˜1“ Ñ"ò à—‘˜aÓ  AÑ%ò ð ˜a‘ð		
r<   c                 ó2   •— |� ‰| |||«      S  ‰| ||«      S r7   r@   )r^  rœ  r4  rË  rÌ  rÍ  s       €€r:   Úis_fast_pathz(meta_embedding_bag.<locals>.is_fast_path*  s)   ø€ ØÐÙ2°3¸¸vÀ{ÓSÐSá,¨S°&¸+ÓFÐFr<   Úcpuc                   ó   — yrÂ  r@   r@   r<   r:   r\   z$meta_embedding_bag.<locals>.<lambda>D  rd   r<   )rM   r^   rU   r‹   r  rE   rª  r™   rŽ   ÚMODE_SUMr›   r�   r-  ÚMODE_MAXÚ	MODE_MEANr�   )rm  rí   r¤  Úscale_grad_by_freqr…  ÚsparserÅ  Úinclude_last_offsetrË  Únum_bagsr4  rÑ  Ú
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ÑÙVô	
ô 	�‰Ø×#Ñ# qÑ(Ûbô	
ô 	�‰Ø×$Ñ$Ó&¨'¯-©-«/Ñ9ôô	
ô
ò

õGô �7Ó˜uÒ$Ø×&Ñ& w§|¡|°A£Ó7ˆ
Ø×$Ñ$ W§\¡\£^Ó4ˆØ”8ÒØ!×+Ñ+¨H°f·k±kÀ!³nÓE‰Kà!×+Ñ+¨AÓ.‰Ká$ VÐ-?ÀÈÓUˆØ”IœxÐ(Ñ(±Ø ×*Ñ*¨7¯<©<¸«?Ó;‰Jà ×*Ñ*¨1Ó-ˆJØ×$Ñ$ XÓ.ˆà—-‘- Ñ"ˆØ”8ÒÙ"Ü—‘Ø˜q‘LÙOôð ˜1‘�Ø!×+Ñ+¨G°V·\±\À!±_ÓE‰Kà!×+Ñ+¨H¯M©M«OÓ<ˆKØ�:˜x¨Ð4Ð4r<   c                 óŽ   — t        | ||g|¢­Ž \  }}}}t        |«      dk(  r|j                  |j                  «       «      }||||fS )NrÒ  )rà  r-  rŽ   r™   )rm  rí   r¤  rG   r4  rÛ  rÜ  rÝ  s           r:   Úmeta_embedding_bag_forward_onlyrâ  M  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 r7   )rU   r,  r   rM   r‹   )r  rU   Úpromote_int_to_longs      r:   Ú_get_reduction_dtyperå  W  sD   € áØˆà‡{�{×$Ò$¨¯©×(>Ò(>Ø�{‰{ÐÙ	Ü�z‰zÐà�;‰;Ðr<   r‡   c                óž   — t        | |d¬«      }t        j                  | j                  |«      }t	        | ||«      }| j                  ||¬«      S )NT)rä  r‡   )rå  rE   r¸  r�   r¹  rŽ   )r  r±  r»  rU   r  r•  s         r:   Úmeta_nansumrç  d  sI   € ô (¨¨uÈ$ÔO€LÜ×Ñ §¡¨TÓ2€DÜ+¨E°4¸ÓA€LØ�?‰?˜<¨|ˆ?Ó<Ð<r<   c           	      ó¤   — t        j                  | j                  t        t	        | j                  «       «      «      «      }| j                  |«      S r7   )rE   r²  r�   r]   r®   r}   rŽ   )r  r•  s     r:   Úmeta_medianré  m  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 )Nr)  zmedian CUDA with indices outputr‡   )	r-  rE   Úalert_not_deterministicr¸  r�   r¹  rŽ   rM   r‹   )r  r}   r»  r•  s       r:   Úmeta_median_mode_dimrì  u  sp   € ô �5Ó˜VÒ#Ü×%Ñ%Ð&GÔHÜ
×
Ñ
˜uŸ{™{¨S¨FÓ
3€CÜ+¨E°3¸Ó@€Là�‰˜Ó%Ø�‰˜¬E¯J©JˆÓ7ðð r<   c                 ó   — | S r7   r@   rê   s    r:   Úmeta_logical_not_rî  ‹  r�  r<   c                 ó¶  ‡‡— t        j                  t        |«      | j                  «       k\  d„ «       t	        |«      D ]"  \  ŠŠt        j                  ‰dk\  ˆˆfd„«       Œ$ t        |«      | j                  «       z
  }d|z  t        | j                  «      z   }t        t        |«      «      D �cg c]  }||   ||   z  ‘Œ }}| j                  |«      S c c}w )Nc                   ó   — y)NzZNumber of dimensions of repeat dims can not be smaller than number of dimensions of tensorr@   r@   r<   r:   r\   zmeta_repeat.<locals>.<lambda>”  rd   r<   r   c                  ó   •— d‰› d‰ › �S )Nz"Repeats cannot be negative, found rÚ  r@   )r  Úreps   €€r:   r\   zmeta_repeat.<locals>.<lambda>™  s   ø€ Ð8¸¸¸ZÈÀsÐK€ r<   r  )	rM   r^   r«   r}   rä  r]   r�   r®   rŽ   )r�   rÅ  Únum_new_dimensionsÚpadded_sizer  Útarget_sizerò  s       ` @r:   Úmeta_repeatrö  �  sÂ   ù€ ä	‡L�LÜˆG‹˜Ÿ™›
Ñ"Ùlôô ˜GÓ$ò 
‰ˆˆ3Ü�‰Ø�1‰HÜKõ	
ð
ô ˜W›¨¯©«
Ñ2ÐØÐ+Ñ+¬e°D·J±JÓ.?Ñ?€KÜ8=¼cÀ'»lÓ8KÖL°1�;˜q‘> G¨A¡JÓ.ÐL€KÐLØ�>‰>˜+Ó&Ð&ùò Ms   Â1Cc                 ó   — | S r7   r@   rê   s    r:   Ú
meta_zero_rø  ¤  r�  r<   c                 óz   — t        |t        j                  «      r t        | j                  |j                  «       | S r7   )rg   rM   r   r`   r�   ©r�   rš   s     r:   Úmeta_binop_inplacerû  ©  s)   € ô �%œŸ™Ô&Ü §
¡
¨E¯K©KÔ8Ø€Kr<   c                 óø   — d„ }d„ }d„ } || «      r ||«      rt        d«      ‚ || «      r ||«      st        d«      ‚t        |t        j                  «      r t	        | j
                  |j
                  «       | S )a*  
    Some checks for inplace ops.
    Checks for promotion rules for some dtypes.
    int.add/sub_(float) and bool.add/sub_(others) are rejected.
    Promoting in these in-place operations would require reallocating
    and copying over elements, hence not allowed.
    Checks for alpha param.
    c                 ó€   — t        | t        «      rt        j                  | j                  «      S t        | t
        «      S r7   )rg   r#   rE   rg  rU   r   ©rj   s    r:   Úis_integericz.meta_binop_inplace_alpha.<locals>.is_integericÌ  s.   € Ü�cœ:Ô&Ü×)Ñ)¨#¯)©)Ó4Ð4ä˜c¤7Ó+Ð+r<   c                 ó€   — t        | t        «      rt        j                  | j                  «      S t        | t
        «      S r7   )rg   r#   rE   rª  rU   r   rþ  s    r:   Ú
is_floaticz,meta_binop_inplace_alpha.<locals>.is_floaticÒ  s.   € Ü�cœ:Ô&Ü×'Ñ'¨¯	©	Ó2Ð2ä˜c¤9Ó-Ð-r<   c                 ó€   — t        | t        «      rt        j                  | j                  «      S t        | t
        «      S r7   )rg   r#   rE   Úis_boolean_dtyperU   r   rþ  s    r:   Úis_booleanicz.meta_binop_inplace_alpha.<locals>.is_booleanicØ  s.   € Ü�cœ:Ô&Ü×)Ñ)¨#¯)©)Ó4Ð4ä˜c¤8Ó,Ð,r<   z]Promotion of int.add/sub_(float) in in-place ops are not possible due to element size change.z_Promotion of book.add/sub_(others) in in-place ops are not possible due to element size change.)rZ  rg   rM   r   r`   r�   )r�   rš   r  rÿ  r  r  s         r:   Úmeta_binop_inplace_alphar  º  sz   € ò$,ò.ò-ñ �DÔ™j¨Ô/ÜØkó
ð 	
ñ
 �DÔ¡,¨uÔ"5ÜØmó
ð 	
ô �%œŸ™Ô&Ü §
¡
¨E¯K©KÔ8Ø€Kr<   c                 ó8   — t        | t        j                  ¬«      S ©N©rB   ©rK   r   rF   )r�   r  s     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 r‡   )r
  r�   s   €€r:   r\   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 r‡   ©r
  rÍ  s   €€r:   r\   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 r@   r  s   €€r:   r\   z#shift_dtype_check.<locals>.<lambda>  s   ø€ �w�iÐHÈÈÐN€ r<   )rM   r^   rE   rg  rU   rg   r   r   )r
  r�   rÍ  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  rK   r   rF   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 r7   ró  rê   s    r:   Ú	meta_zeror    s   € à�>‰>˜$Ÿ*™*Ó%Ð%r<   c                 ó   — | S r7   r@   ©r�   rÍ  s     r:   Ú
meta_fill_r    r�  r<   c                 ó,   — t        j                  | «      S r7   r“  r  s     r:   Ú	meta_fillr  !  ó   € ä×Ñ˜DÓ!Ð!r<   c                 ó   — | S r7   r@   rê   s    r:   Ú
meta_relu_r"  &  r�  r<   c                 ó:   — t        | |t        j                  ¬«      S r  r	  )r�   rš   r  s      r:   Úmeta__add_relur$  +  s   € ô ØˆeÔ$C×$KÑ$Kôð r<   c                 ó,   — t        j                  | «      S r7   r“  ©r�   ÚnoiseÚlowerr  rÕ  r:  s         r:   Úmeta_rrelu_with_noiser)  3  s   € ô
 ×Ñ˜DÓ!Ð!r<   c                 óV   — t        j                  | «      t        j                  |«      fS r7   r“  r&  s         r:   Ú meta_rrelu_with_noise_functionalr+  ;  s%   € ô ×Ñ˜DÓ!¤5×#3Ñ#3°EÓ#:Ð:Ð:r<   c                 ó   — | S r7   r@   )r�   r(  r  rÕ  r:  s        r:   Úmeta_rrelu_with_noise_r-  B  s	   € ð €Kr<   c                 ó,   — t        j                  | «      S r7   r“  ©r�   rí   rì   Ú
accumulates       r:   Úmeta_index_putr1  I  r   r<   c                 óF   — t        | j                  |j                  «       | S r7   ©r`   r�   )r�   r¤  Úvalues      r:   Úmeta_masked_fill_r5  N  s   € ä˜DŸJ™J¨¯
©
Ô3Ø€Kr<   c                 óŠ   — | j                  | j                  «       «      j                  t        j                  | «      ¬«      }|S rô   )rŽ   r™   r[  rE   r"   )r�   r¤  rœ  Úmasked_scales       r:   Úmeta__masked_scaler8  T  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(  ˆ ˆfd„«       ‰ S )Nc                   ó   — y)NzMask must be bool or uint8r@   r@   r<   r:   r\   z&meta_masked_scatter_.<locals>.<lambda>_  rd   r<   c                  ó<   •— d‰ j                   › d‰j                   › �S )NzEmasked_scatter: expected self and source to have same dtypes but got r—   r‡   )r�   r˜  s   €€r:   r\   z&meta_masked_scatter_.<locals>.<lambda>c  s"   ø€ ð ØŸ*™*˜ U¨6¯<©<¨.ð:€ r<   )rM   r^   rU   r  rý  )r�   r¤  r˜  s   ` `r:   Úmeta_masked_scatter_r<  \  sU   ù€ ä	‡L�LØ�
‰
”u—z‘z¤5§;¡;Ð/Ð/Ñ1Uôô 
‡L�LØ�
‰
�f—l‘lÑ"ô	:ôð
 €Kr<   c                 ó„   — t        | |«      \  } }t        j                  | t        j                  ¬«      }t	        |||«      S rô   )r*   rM   rè   ré   r<  )r�   r¤  r˜  r4  s       r:   Úmeta_masked_scatterr>  i  s;   € ô " $¨Ó-�J€Dˆ$Ü×Ñ˜d´%×2IÑ2IÔJ€FÜ ¨¨fÓ5Ð5r<   c                 ó$   — | j                  |«      S r7   r²  )r�   r¤  rp  s      r:   Úmeta_masked_scatter_backwardr@  q  s   € à�>‰>˜%Ó Ð r<   c                 ó   — | S r7   r@   r/  s       r:   Úmeta_index_put_rB  v  r�  r<   c                 ó8   — | j                  | j                  «      S r7   )Úviewr�   rê   s    r:   Ú
meta_aliasrE  {  s   € à�9‰9�T—Z‘ZÓ Ð r<   c                 ó€  ‡‡
‡‡‡— 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„«       |rš| j                  t         j
                  k(  xs | j                  t         j                  k(  xr |t         j                  k(  }t        j                  || j                  k(  xs |d„ «       |j                  ‰«      j                  |«      }	n|j                  ‰«      }	|sU‰�St        j                  ‰j                  «       dk(  d	„ «       t        j                  ‰j                  «       ‰k(  ˆˆfd
„«       |	S )Nr2   c                   ó   — yrt  r@   r@   r<   r:   r\   z)common_meta_baddbmm_bmm.<locals>.<lambda>�  rd   r<   c                   ó   — yrv  r@   r@   r<   r:   r\   z)common_meta_baddbmm_bmm.<locals>.<lambda>‚  rd   r<   r   r%  r©   c            	      ó.   •— d‰› d‰› d‰ d   › d‰ d   › d�	S r{  r@   r}  s   €€€r:   r\   z)common_meta_baddbmm_bmm.<locals>.<lambda>�  s5   ø€ ÐRÐSUÐRVØ
ÐÐ˜l¨<¸©?Ð*;¸2¸lÈ1¹oÐ=NÈbðR€ r<   c                   ó   — y)Nzfout_dtype only supported for torch.float32 output with float16/bfloat16 inputs or same as input dtypesr@   r@   r<   r:   r\   z)common_meta_baddbmm_bmm.<locals>.<lambda>˜  rd   r<   c                   ó   — y)Nzself must be a 3D tensorr@   r@   r<   r:   r\   z)common_meta_baddbmm_bmm.<locals>.<lambda>   rd   r<   c                  ó0   •— d‰ › d‰j                  «       › �S )Nz*Expected an input tensor shape with shape z but got shape: r˜   )r‘  Úself_baddbmms   €€r:   r\   z)common_meta_baddbmm_bmm.<locals>.<lambda>£  s!   ø€ Ð@ÀÀÐM]Ð^j×^oÑ^oÓ^qÐ]rÐs€ r<   )
rM   r^   r}   r™   rU   rŽ  r�  r�  rŽ   r[  )rx  ry  Úis_bmmrM  rq  r‡  Úres_rowsÚres_colsÚsupported_out_dtyper4  r~  r  r€  r‘  s      `      @@@@r:   Úcommon_meta_baddbmm_bmmrR  €  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ôñ
 à�L‰LœEŸM™MÑ)ÒK¨V¯\©\¼U¿^¹^Ñ-Kò)àœ5Ÿ=™=Ñ(ð 	ô 	�‰Ø˜Ÿ™Ñ%Ò<Ð)<Ù|ô	
ð ×!Ñ! +Ó.×1Ñ1°)Ó<‰ð ×!Ñ! +Ó.ˆá�lÐ.Ü�‰�\×%Ñ%Ó'¨1Ñ,Ñ.PÔQÜ�‰Ø×ÑÓ ;Ñ.Üsô	
ð
 €Mr<   c                 ó   — t        | |d«      S )NT©rR  )r�   r{  s     r:   Úmeta_bmmrU  ©  s   € ä" 4¨¨tÓ4Ð4r<   c                 ó    — t        | |d|¬«      S )NT)rq  rT  )r�   r{  rq  s      r:   Úmeta_bmm_dtyperW  ®  s   € ä" 4¨¨t¸yÔIÐIr<   c                 óh   — | |z  }| |z  }|dk7  r"t        |dk  «      t        |dk  «      k7  r|dz  }|S rÉ  )r  )rJ   ÚyÚqr‰  s       r:   Údiv_rtnr[  ³  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Ï  )r[  )Ú	inputSizeÚ
kernelSizer  r  rÃ   r¹  r%  Ú
outputSizes           r:   Úpooling_output_shape_pad_lrr`  ½  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 zeror@   r@   r<   r:   r\   z&pooling_output_shape.<locals>.<lambda>Ù  rd   r<   c                  ó   •— d‰ › �S )Nz'pad must be non-negative, but got pad: r@   ©Úpads   €r:   r\   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=r@   )r¹  r^  re  s   €€€r:   r\   z&pooling_output_shape.<locals>.<lambda>Ý  s'   ø€ ØOÐPSÈuð UØ%˜, n°X°Jð@ð r<   )rM   r^   r`  )r]  r^  re  rÃ   r¹  r%  s    `` ` r:   rO  rO  Ø  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}r@   r@   r<   r:   r\   z$pool2d_shape_check.<locals>.<lambda>ý  rd   r<   c                   ó   — y)Nz>stride should be greater than zero, but got dH: {dH}, dW: {dW}r@   r@   r<   r:   r\   z$pool2d_shape_check.<locals>.<lambda>  rd   r<   c                   ó   — y)Nz\dilation should be greater than zero, but got dilationH: {dilationH}, dilationW: {dilationW}r@   r@   r<   r:   r\   z$pool2d_shape_check.<locals>.<lambda>  rd   r<   r©   r%  r3  r2   c                   ó   — y)NzŽExpected 4D (batch mode) tensor expected for input with channels_last layout with optional 0 dim batch size for input, but got: {input.size()}r@   r@   r<   r:   r\   z$pool2d_shape_check.<locals>.<lambda>  rd   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:   r\   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 = r@   )rS  rT  rW  rX  s   €€€€r:   r\   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: (rJ   z). Calculated output size: (z). Output size is too smallr@   )rY  rZ  r&  r_  r'  r(  s   €€€€€€r:   r\   z$pool2d_shape_check.<locals>.<lambda>  s:   ø€ Ð% k ]°!°K°=ÀÀ*Àð N$Ø$0 >°°<°.ÀÀ+Àð O#ð#€ r<   )r}   rM   r^   r™   rÏ  )r  rS  rT  rU  rV  rW  rX  Ú	dilationHÚ	dilationWr&  rY  rZ  r'  r(  rå   r›   Ú
valid_dimsr_  s   ```  ``  `````   @r:   rP  rP  ç  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{  rx  rS  rT  ry  rU  rV  ÚpTÚpHÚpWÚ	dilationTrp  rq  r|  r}  r~  r  r€  r�  rv  c           
      óJ  ‡ ‡‡‡‡‡‡‡‡‡	‡
‡‡‡‡‡‡‡‡‡‡‡— ‰ j                   }t        j                  ‰dkD  xr ‰dkD  xr ‰dkD  ˆˆˆfd„«       t        j                  ‰dkD  xr ‰dkD  xr ‰dkD  ˆˆˆfd„«       t        j                  ‰dkD  xr ‰dkD  xr ‰dkD  ˆˆˆfd„«       t        j                  |dv ˆˆ fd„«       t        |«      D ]:  Š|dk(  r‰dk(  rŒt        j                  ‰ j	                  ‰«      dkD  ˆˆˆ fd„«       Œ< |r/t        j                  ‰‰k\  xr ‰‰k\  xr ‰‰k\  ˆˆˆˆˆˆfd	„«       t        j                  ‰d
z  ‰k\  xr ‰d
z  ‰
k\  xr ‰d
z  ‰	k\  ˆˆˆˆ	ˆˆ
fd„«       t        j                  ‰dk\  xr ‰dk\  xr ‰dk\  ˆˆˆˆˆˆˆfd„«       y )Nr   c                  ó   •— d‰› d‰ › d‰› �S )Nz5kernel size should be greater than zero, but got kT: z, kH: z, kW: r@   )rS  rx  rT  s   €€€r:   r\   z$pool3d_shape_check.<locals>.<lambda>A  s#   ø€ ðØ�$�f˜R˜D  r dð,ð r<   c                  ó   •— d‰› d‰ › d‰› �S )Nz0stride should be greater than zero, but got dT: z, dH: z, dW: r@   )rU  ry  rV  s   €€€r:   r\   z$pool3d_shape_check.<locals>.<lambda>H  s    ø€ Ø>¸r¸dÀ&ÈÈÈFÐSUÐRVÐWð r<   c                  ó   •— d‰› d‰ › d‰› �S )Nz9dilation should be greater than zero, but got dilationT: z, dilationH: z, dilationW: r@   )rp  rv  rq  s   €€€r:   r\   z$pool3d_shape_check.<locals>.<lambda>N  s$   ø€ ðØ#˜ M°)°¸MÈ)ÈðVð r<   rr  c                  ó&   •— ‰ › d‰j                   › �S )Nz/: Expected 4D or 5D tensor for input, but got: rË   )r
  r  s   €€r:   r\   z$pool3d_shape_check.<locals>.<lambda>V  s   ø€ �7�)ÐJÈ5Ï;É;È-ÐX€ r<   rO  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:   r\   z$pool3d_shape_check.<locals>.<lambda>_  s3   ø€ Ø�)ð -Ø-2¯[©[¨MØ+¨E¯J©J°q«M¨?Ð:KðMð r<   c                  ó.   •— d‰› d‰ › d‰› d‰› d‰› d‰› d�S )Nzinput image (T: rW  r<  z ) smaller than kernel size (kT: ú kH: ú kW: rp   r@   )r}  r|  r~  rS  rx  rT  s   €€€€€€r:   r\   z$pool3d_shape_check.<locals>.<lambda>i  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: r  r~  z padT: z padW: z padH: r@   )rS  rx  rT  rt  rs  ru  s   €€€€€€r:   r\   z$pool3d_shape_check.<locals>.<lambda>q  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 ro  r@   )r}  r|  r~  r{  r€  r  r�  s   €€€€€€€r:   r\   z$pool3d_shape_check.<locals>.<lambda>y  sI   ø€ Ø! ' ¨!¨E¨7°!°G°9¸A¸f¸Xð F(Ø(/ y°°%°¸¸'¸À!ÀFÀ8ð L'ð(ð r<   )r›   rM   r^   r®   r™   )r  r{  rx  rS  rT  ry  rU  rV  rs  rt  ru  rv  rp  rq  r|  r}  r~  r  r€  r�  r
  rv  r›   r  s   `````````````````````  @r:   rw  rw  %  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 )Nr3  r2   r%  r©   ©r›   rw  r6  )r  r'  rí   r{  rx  rS  rT  ry  rU  rV  rs  rt  ru  rv  rp  rq  r|  r}  r~  r  r€  r�  r
  r›   s                           r:   Úmax_pool3d_backward_shape_checkr„  �  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©   Tr3  r2   r%  rƒ  )r  r'  r{  rx  rS  rT  ry  rU  rV  rs  rt  ru  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 )Nr9  c                  ó   •— d‰ › d�S )Nzmax_pool2d: r;  r@   r<  s   €r:   r\   zEmax_pool2d_checks_and_compute_shape.<locals>.unpack.<locals>.<lambda>  r=  r<   r   r©   r>  r?  s   `   r:   rB  z3max_pool2d_checks_and_compute_shape.<locals>.unpackþ  rC  r<   rÈ  rD  c                   ó   — y)NzOmax_pool2d: stride must either be omitted, a single int, or a tuple of two intsr@   r@   r<   r:   r\   z5max_pool2d_checks_and_compute_shape.<locals>.<lambda>  rd   r<   r   rÃ   rö  r¹  rK  rí  r’   r3  c                   ó   — y)NzMnon-empty 4D (batch mode) tensor expected for input with channels_last layoutr@   r@   r<   r:   r\   z5max_pool2d_checks_and_compute_shape.<locals>.<lambda>  rd   r<   rü  c                   ó   — y)Nz9non-empty 3D or 4D (batch mode) tensor expected for inputr@   r@   r<   r:   r\   z5max_pool2d_checks_and_compute_shape.<locals>.<lambda>!  rd   r<   Fc                   ó   — y)Nz?Unsupport memory format. Supports only ChannelsLast, Contiguousr@   r@   r<   r:   r\   z5max_pool2d_checks_and_compute_shape.<locals>.<lambda>&  rd   r<   )rM   r^   r«   r™   rE   r"   rÏ  r}   ré   rO  rP  )r  rÈ  rÃ   rö  r¹  r%  rB  rS  rT  rU  rV  rW  rX  rp  rq  r&  rY  rZ  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 r‡   r£  s   €€r:   r\   z7meta_max_pool2d_with_indices_backward.<locals>.<lambda>V  s    ø€ �/ $§*¡* Ð-MÈk×N_ÑN_ÐM`Ða€ r<   c                 ól   •— t        | ‰‰dz
  ‰«       t        | ‰‰dz
  ‰«       t        | ‰‰dz
  ‰«       y )Nr2   r%  r©   )r6  )rû  r_  r›   r'  r(  s    €€€€r:   Ú_check_dim_sizez>meta_max_pool2d_with_indices_backward.<locals>._check_dim_size\  s9   ø€ Ü�q˜$  q¡¨,Ô7Ü�q˜$  q¡¨,Ô7Ü�q˜$  q¡¨+Õ6r<   r«  )
r#  rM   r^   rU   r›   rE   r"   r‚   r�   rz   )r'  r�   rÈ  rÃ   rö  r¹  r%  rí   r&  r�  rå   r_  r›   r'  r(  s   ``         @@@@r:   Ú%meta_max_pool2d_with_indices_backwardr‘  A  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#  r}   r™   rE   r"   rM   r‚   rU   rz   rð   r$  s               r:   Úmeta_max_pool2d_with_indicesr“  m  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: r1  rê   s   €r:   r\   z,meta_fractional_max_pool2d.<locals>.<lambda>˜  s   ø€ ÐLÈTÏYÉYÈKÐX€ r<   r2   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 Intsr@   r@   r<   r:   r\   z,meta_fractional_max_pool2d.<locals>.<lambda>¦  rd   r<   c                   ó   — y)NzOfractional_max_pool2d: output_size must either be a single int or tuple of Intsr@   r@   r<   r:   r\   z,meta_fractional_max_pool2d.<locals>.<lambda>«  rd   r<   rK  rí  r’   r3  r©   c                   ó   — y)Nz6Expect _random_samples to have the same dtype as inputr@   r@   r<   r:   r\   z,meta_fractional_max_pool2d.<locals>.<lambda>¹  rd   r<   c                  ó"   •— d‰ j                   › �S )Nz1Expect _random samples to have 3 dimensions got, r1  )Úrandom_sampless   €r:   r\   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.r@   r@   r<   r:   r\   z,meta_fractional_max_pool2d.<locals>.<lambda>É  rd   r<   c                  ó   •— d‰ › d�S )Nz/Expect _random_samples.size(2) equals to 2 got ú.r@   )r  s   €r:   r\   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 r@   )Úinput_heightrÈ  s   €€r:   r\   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 r@   )Úinput_widthrÈ  s   €€r:   r\   z,meta_fractional_max_pool2d.<locals>.<lambda>Ó  s   ø€ Ð6°{À1±~Ð6FÐFlÐmxÐlyÐz€ r<   rÐ  )rM   r^   r›   r®   r™   r«   rU   r}   r‚   rz   rð   )r�   rÈ  r‘  rš  r›   Úinput_channelsÚinput_batchr=  Úcr™   r  rŸ  r¡  s   `` `      @@@r:   Úmeta_fractional_max_pool2dr¥  ”  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                  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 )Nrj  c                   ó   — y©NzMmax_pool3d: kernel_size must either be a single int, or a tuple of three intsr@   r@   r<   r:   r\   z.meta_max_pool3d_with_indices.<locals>.<lambda>õ  rd   r<   r   r©   r%  c                   ó   — y©NzQmax_pool3d: stride must either be omitted, a single int, or a tuple of three intsr@   r@   r<   r:   r\   z.meta_max_pool3d_with_indices.<locals>.<lambda>ý  rd   r<   c                   ó   — y©NzImax_pool3d: padding must either be a single int, or a tuple of three intsr@   r@   r<   r:   r\   z.meta_max_pool3d_with_indices.<locals>.<lambda>  rd   r<   c                   ó   — y©NzJmax_pool3d: dilation must be either a single int, or a tuple of three intsr@   r@   r<   r:   r\   z.meta_max_pool3d_with_indices.<locals>.<lambda>  rd   r<   rr  c                   ó   — yrt  r@   r@   r<   r:   r\   z.meta_max_pool3d_with_indices.<locals>.<lambda>  rd   r<   rO  éûÿÿÿr"  rK  rí  r’   zmax_pool3d_with_indices()r3  rä   r‡   )rM   r^   r«   r›   r™   rO  rw  rE   r"   rë  rÑ   r   rŽ   rð   r[  )r  rÈ  rÃ   rö  r¹  r%  rx  rS  rT  ry  rU  rV  rs  rt  ru  rv  rp  rq  r  r{  r|  r}  r~  r  r€  r�  rÏ  Úinput_channels_last_checkrž   r  rí   s                                  r:   Úmeta_max_pool3d_with_indicesr²  é  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 )Nrj  c                   ó   — yr¨  r@   r@   r<   r:   r\   z7meta_max_pool3d_with_indices_backward.<locals>.<lambda>`  rd   r<   r   r©   r%  c                   ó   — yrª  r@   r@   r<   r:   r\   z7meta_max_pool3d_with_indices_backward.<locals>.<lambda>h  rd   r<   c                   ó   — yr¬  r@   r@   r<   r:   r\   z7meta_max_pool3d_with_indices_backward.<locals>.<lambda>p  rd   r<   c                   ó   — yr®  r@   r@   r<   r:   r\   z7meta_max_pool3d_with_indices_backward.<locals>.<lambda>x  rd   r<   rr  c                   ó   — yrt  r@   r@   r<   r:   r\   z7meta_max_pool3d_with_indices_backward.<locals>.<lambda>€  rd   r<   r"  rK  rí  r’   z"max_pool3d_with_indices_backward()rO  r3  rä   )rM   r^   r«   r›   r™   r„  rE   r"   rë  rÑ   r   rŽ   r�   r[  )r'  r  rÈ  rÃ   rö  r¹  r%  rí   rx  rS  rT  ry  rU  rV  rs  rt  ru  rv  rp  rq  r{  r|  r}  r~  r  r€  r�  rÏ  r±  r+  s                                 r:   Ú%meta_max_pool3d_with_indices_backwardr¹  R  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 r×  ©rº  r  s   €€r:   r\   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 )ry   r½  s   €€r:   r\   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:   r\   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:   r\   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:   r\   z+check_grid_sampler_common.<locals>.<lambda>Ú  r¬  r<   )rM   r^   rz   ry   rÕ  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)rr   Ú
__module__Ú__qualname__ÚBILINEARÚNEARESTÚBICUBICr@   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 )NrO  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:   r\   z'check_grid_sampler_3d.<locals>.<lambda>ê  s&   ø€ ð4Ø49·K±K°=Ø# D§J¡J <ð1ð r<   c                   ó   — y)Nz<grid_sampler(): bicubic interpolation only supports 4D inputr@   r@   r<   r:   r\   z'check_grid_sampler_3d.<locals>.<lambda>õ  rd   r<   )rM   r^   r›   rÅ  rÊ  r4  )r  rº  rË  s   `` r:   Úcheck_grid_sampler_3drÏ  ç  sp   ù€ Ü	‡L�LØ�
‰
�a‰Ò3˜EŸJ™J¨$¯)©)Ñ3ô	
ôô 
‡L�Là�J‰J˜!‰Oò MØ"Ô&>×&FÑ&F×&LÑ&LÑLð	
ñ 	Oõr<   c                 ó²   — |d   }|r&t        j                  |t         j                  ¬«      }nd }t        j                  |t         j                  ¬«      }	||	fS ©Nr   rä   )rM   r¶  ré   rè   ©
r'  r  rº  rË  Úpadding_modeÚalign_cornersrù  Úinput_requires_gradr+  Ú	grad_grids
             r:   Úgrid_sampler_2d_backward_metar×  ù  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%  r2   )rÃ  rÏ  r�   rŽ   )
r  rº  rË  rÓ  rÔ  r¬  ÚCÚout_DÚout_HÚout_Ws
             r:   Úgrid_sampler_3drÝ    sv   € ô ˜e TÔ*Ü˜% Ð'9Ô:Ø�‰�A‰€AØ�‰�A‰€AØ�J‰J�q‰M€EØ�J‰J�q‰M€EØ�J‰J�q‰M€EØ�?‰?˜A˜q %¨°Ð6Ó7Ð7r<   rÖ  c                 óä   — t        ||«       t        |||«       |d   }|r&t        j                  |t        j                  ¬«      }nd }t        j
                  |t        j                  ¬«      }	||	fS rÑ  )rÃ  rÏ  rM   r¶  r9  rè   rÒ  s
             r:   Úgrid_sampler_3d_backwardrß    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 )NrU   )rT   rE   Ú	get_dtyperM   r‚   )r™   rË  rG   r  rU   s        r:   Úfullrâ  7  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 tensorsr@   r@   r<   r:   r\   zzeros_like.<locals>.<lambda>M  rd   r<   r   r?  TrÕ  )rM   Ú
sparse_coor^   r‚   rU   rz   Ú	is_sparseÚsparse_resize_and_clear_r™   Ú
sparse_dimÚ	dense_dimr}   Ú_coalesced_r/   rè   r]  Úfill_)r�   rU   ry   rz   r{   rå   rÄ  s          r:   r¶  r¶  A  sü   € ð ”×!Ñ!Ò!Ü�‰Ø˜TÐ!ÙOô	
ô
 �k‰kØØ % �$—*’*°5ØØ"( .�4—;’;°fØ!ô
ˆð �>Š>Ø×(Ñ(Ø—	‘	“˜TŸ_™_Ó.°·±Ó0@õð ×(Ñ(¨¯©«°d·h±h³jÀ!ÔDà�‰˜ÔØˆ
Ü
�/‰/×
!Ñ
!ØØØØØØ#ð "ó €Cð ‡I�Iˆa„LØ€Jr<   rx   c                ó²   — |€t        j                  «       }|€t        j                  «       }|€t         j                  }t        j                  | ||||¬«      S rA  ©rM   r   Úget_default_devicerÕ  r‚   ©r™   rU   ry   rz   r{   r|   s         r:   Ú	meta_onesrð  n  óT   € ð €}Ü×'Ñ'Ó)ˆØ€~Ü×)Ñ)Ó+ˆØ€~Ü—‘ˆÜ�;‰;Ø�E &°ÀJôð r<   c                ó²   — |€t        j                  «       }|€t        j                  «       }|€t         j                  }t        j                  | ||||¬«      S rA  rí  rï  s         r:   Ú
meta_zerosró  „  rñ  r<   c                 óè  ‡ ‡‡— ddl m} ‰ j                  «       }t        j                  |dk7  d„ «       ‰dk\  r‰n‰|z   Š‰ j                  ‰«      }t        j                   |‰ |kD  «      xs  |‰|k\  «       ˆˆˆ fd„«       ‰dk\  r‰n‰|z   Št        ‰ j                  «       «      }t        ‰ j                  «       «      }‰ j                  «       ‰|‰   z  z   }|‰= |‰= ‰ j                  |||«      S )Nr   râ  c                   ó   — y)Nz-select() cannot be applied to a 0-dim tensor.r@   r@   r<   r:   r\   zmeta_select.<locals>.<lambda>¡  rd   r<   c                  ó6   •— d‰› d‰j                  «       › d‰ › �S )Nzselect(): index z! out of range for tensor of size z at dimension r˜   ©r}   r‰   r�   s   €€€r:   r\   zmeta_select.<locals>.<lambda>«  s%   ø€ Ð" 5 'Ð)JØ�9‰9‹;ˆ-�~ c Uð,€ r<   )
rª   rã  r}   rM   rŒ   r™   rü   rÃ   r  rÓ   )	r�   r}   r‰   rã  r›   r™   Únew_sizer´   Únew_storage_offsets	   ```      r:   Úmeta_selectrú  š  sñ   ú€ åJà�8‰8‹:€DÜ	×ÑØ�‰	Ù?ôð
 ˜’‰#˜s T™z€CØ�9‰9�S‹>€Dä	×Ñá  % ¨$¡Ó/ÒVÑ3GÈÐQUÉÓ3Vð	
õ	,ô	ð ˜a’Z‰E U¨T¡\€Eä�D—I‘I“KÓ €HÜ�d—k‘k“mÓ$€Jà×,Ñ,Ó.°¸ÀC¹Ñ1HÑHÐØ�ˆØ�3ˆà�?‰?˜8 ZÐ1CÓDÐDr<   c                 ó,   — t        j                  | «      S r7   ©rE   Úclone_preserve_strides)r�   r^  r}   r‰   s       r:   Úmeta_select_scatterrþ  »  ó   € ä×'Ñ'¨Ó-Ð-r<   c                 ó,   — t        j                  | «      S r7   rü  )r�   r^  r}   rt   rs   Ú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 (ro   rp   r@   )r}   r  r  r.  r¯   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É  r4  )rû  r}   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 tensorr@   r@   r<   r:   r\   z$gather_shape_check.<locals>.<lambda>Ü  rd   r<   c                  óN   •— d‰› d‰j                   › �d‰j                   › d‰ › �z   S )Nz!Size does not match at dimension z expected index ú to be no larger than self ú apart from dimension rË   )r}   r  r‰   r�   s   €€€€r:   r\   z$gather_shape_check.<locals>.<lambda>â  s7   ø€ Ð;¸A¸3Ð>NÈuÏ{É{ÈmÐ\Ø/°·
±
¨|Ð;QÐRUÐQVÐWñX€ r<   )r¯   r}   rM   r^   r®   r  )r�   r}   r‰   Ú	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öXõñr<   c                 óp  ‡— ddl m} t        || j                  «       «      } |‰j	                  «       dk(  «      }|s`t        j                  ‰j                  t
        j                  k(  xs ‰j                  t
        j                  k(  ˆfd„«       t        | |‰«       | j                  ‰j                  «      S )Nr   râ  c                  ó"   •— d‰ j                   › �S )Nz8gather(): Expected dtype int32/int64 for index, but got r‡   rˆ   s   €r:   r\   zmeta_gather.<locals>.<lambda>ð  s   ø€ ÐNÈuÏ{É{ÈmÐ\€ r<   )rª   rã  rñ   r}   r�   rM   r^   rU   r‹   r  r  rŽ   r�   )r�   r}   r‰   Úsparse_gradrã  Úwrapped_dimÚis_index_emptys     `    r:   Úmeta_gatherr  ç  s‚   ø€ åJä   d§h¡h£jÓ1€KÙ)¨%¯+©+«-¸1Ñ*<Ó=€NÙÜ�‰Ø�K‰Kœ5Ÿ:™:Ñ%ÒA¨¯©¼¿	¹	Ñ)AÛ\ô	
ô 	˜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 )Nr	  Ú
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.r@   r@   r<   r:   r\   z#get_operator_enum.<locals>.<lambda>  rd   r<   ÚaddÚmultiplyc                   ó   — y)Nz/reduce argument must be either add or multiply.r@   r@   r<   r:   r\   z#get_operator_enum.<locals>.<lambda>  rd   r<   r‹  )Úreduce_Úuse_new_optionss     r:   Úget_operator_enumr%  ÷  s{   € ÙØ�eÒØØ˜ÒØ$Ø˜ÒØ Ø˜ÒØ#Ø˜ÒØ#Ü�‰ØÙSô	
ð 	à�eÒØØ˜
Ò"Ø$Ü�‰�UÑUÔVØr<   c                 óP  ‡ — ddl m}  ||j                  «       dk7  «      rSt        j                  |j
                  t        j                  k(  xs |j
                  t        j                  k(  ˆ fd„«       |�1t        j                  |j
                  |j
                  k(  ˆ fd„«       y y )Nr   râ  c                  ó   •— ‰ › d�S )Nz((): Expected dtype int32/int64 for indexr@   ©Úmethod_names   €r:   r\   z,scatter_gather_dtype_check.<locals>.<lambda>  s   ø€ �{�mÐ#KÐL€ r<   c                  ó   •— ‰ › d�S )Nz0(): Expected self.dtype to be equal to src.dtyper@   r(  s   €r:   r\   z,scatter_gather_dtype_check.<locals>.<lambda>  s   ø€ �{�mÐ#SÐT€ r<   )rª   rã  r�   rM   r^   rU   r‹   r  )r)  r�   r‰   Úsrc_optrã  s   `    r:   Úscatter_gather_dtype_checkr,    sv   ø€ ÝJá˜EŸK™K›M¨QÑ.Ô/Ü�‰Ø�K‰Kœ5Ÿ:™:Ñ%ÒA¨¯©¼¿	¹	Ñ)AÛLô	
ð
 ÐÜ�‰Ø�J‰J˜'Ÿ-™-Ñ'ÛTõ	
ð r<   c                 ó   — t        | d«      S rc  )r¯   r“   s    r:   Úensure_nonempty_dimr.  "  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 tensorr@   r@   r<   r:   r\   z%scatter_shape_check.<locals>.<lambda>.  rd   r<   FTc                   ó   — yr1  r@   r@   r<   r:   r\   z%scatter_shape_check.<locals>.<lambda>H  rd   r<   c                  ób   •— d‰j                   › d‰j                   › �d‰ › d‰j                   › �z   S )NúExpected index r  r  z and to be no larger than src rË   )r}   r‰   r�   r+  s   €€€€r:   r\   z%scatter_shape_check.<locals>.<lambda>L  s8   ø€ �o e§k¡k ]Ð2MÈdÏjÉjÈ\ÐZØ& s eÐ+IÈ'Ï-É-ÈÐYñZ€ r<   c                  óH   •— d‰j                   › d‰j                   › �d‰ › �z   S )Nr4  r  r  rË   r÷  s   €€€r:   r\   z%scatter_shape_check.<locals>.<lambda>R  s,   ø€ �o e§k¡k ]Ð2MÈdÏjÉjÈ\ÐZØ& s eÐ,ñ-€ r<   )	rª   rã  r�   rM   r^   r.  r}   r®   r  )	r�   r}   r‰   r+  rã  Úis_wrong_shaper  r  Úindex_d_sizes	   ````     r:   Úscatter_shape_checkr8  '  sP  û€ ÝJá˜EŸK™K›M¨QÑ.Ô/ØÜ	‡L�LÜ˜DŸH™H›JÓ'Ô+>¸u¿y¹y»{Ó+KÑKÙUôð
 €NÜ# D§H¡H£JÓ/€Iô �9Óò ˆÜ+¨E°1Ó5ˆØ�Š8ØØÔ.¨t°QÓ7Ó7Ø!ˆNÙðñ ˜gÐ1Ü�yÓ!ò 	ˆAÜ/°°qÓ9ˆLØÔ2°7¸AÓ>Ó>Ø!%�Ùð		ð ÐÜ�‰Ü §¡£
Ó+Ô/BÀ5Ç9Á9Ã;Ó/OÑOÙYô	
ô 	�‰ØÐöZõ	
ô 	�‰ØÐõ-õ	
r<   c                 óŽ   — t        || j                  «       «      }t        d| ||«       t        | |||«       |�t	        ||«       y y )NÚscatter)rñ   r}   r,  r8  r%  )r�   r}   r‰   r^  r#  r$  r  s          r:   Úscatter_meta_implr;  X  sE   € Ü   d§h¡h£jÓ1€KÜ˜y¨$°°sÔ;Ü˜˜k¨5°#Ô6ØÐä˜' ?Õ3ð r<   c                 óV   — t        | |||d«       | j                  | j                  «      S ©Nr   ©r;  rŽ   r�   ©r�   r}   r‰   r^  s       r:   Úmeta_scatter_addr@  a  s%   € ä�d˜C ¨¨UÔ3Ø�>‰>˜$Ÿ*™*Ó%Ð%r<   c                 ó$   — t        | |||d«       | S r=  ©r;  r?  s       r:   Úmeta_scatter_add_rC  g  s   € ä�d˜C ¨¨UÔ3Ø€Kr<   c                 ó’   — t        |t        j                  «      r|nd }t        | ||||«       | j	                  | j
                  «      S r7   )rg   rM   r   r;  rŽ   r�   ©r�   r}   r‰   Úsrc_or_valuer   r^  s         r:   Úmeta_scatterrG  m  s;   € ô % \´5·<±<Ô@‰,Àd€CÜ�d˜C ¨¨VÔ4Ø�>‰>˜$Ÿ*™*Ó%Ð%r<   c                 ó`   — t        |t        j                  «      r|nd }t        | ||||«       | S r7   )rg   rM   r   r;  rE  s         r:   Úmeta_scatter_rI  |  s-   € ô % \´5·<±<Ô@‰,Àd€CÜ�d˜C ¨¨VÔ4Ø€Kr<   Úqueryrú   r4  Ú	dropout_pÚ	is_causalÚreturn_debug_maskrœ  c           	      óV  — | j                  d«      }| j                  d«      }| j                  d«      }	| j                  d«      }
|j                  d«      }| j                  dd«      }t        j                  |«      j                  dd«      }t        j                  |||	ft        j
                  | j                  ¬«      }|ra|
dkD  rdnd}t        j                  |	|z  «      }|dk  rd}n|dk  rd}t        j                  |||	|f| j                  | j                  ¬«      }n,t        j                  d| j                  | j                  ¬«      }t        j                  j                  rkt        j                  j                  «       rMt        j                  d	t        j                  d
¬«      }t        j                  d	t        j                  d
¬«      }nLt        j                  dt        j                  d
¬«      }t        j                  d	t        j                  d
¬«      }||d d |	||||f	S )Nr   r©   r%  r2   rÐ  é@   é€   é   r@   rw   )r™   r*  rM   rè   r‚   rQ   rz   r´  ÚceilrU   ÚversionÚhipr)  r‰  r‹   rN  )rJ  rú   r4  rK  rL  rM  rœ  r  Ú	num_headsÚmax_seqlen_batch_qÚhead_dimÚmax_seqlen_batch_kÚquery_tÚ	attentionÚ	logsumexpÚblocksize_cÚmax_seqlen_kÚ
debug_maskÚseedÚoffsets                       r:   Ú(meta__scaled_dot_product_flash_attentionra  Š  s½  € ð —‘˜A“€JØ—
‘
˜1“€IØŸ™ A›ÐØ�z‰z˜!‹}€HØŸ™ !›Ðà�o‰o˜a Ó#€GÜ× Ñ  Ó)×3Ñ3°A°qÓ9€IÜ—‘Ø	�YÐ 2Ð3Ü�k‰kØ�|‰|ô€Iñ Ø%¨š]‘c°ˆÜ—y‘yÐ!3°kÑ!AÓBˆØ Ò$Ø‰LØ 3Ò&ØˆLÜ—[‘[Ø˜Ð$6¸ÐEØ—+‘+Ø—<‘<ô
‰
ô —[‘[ ¨%¯+©+¸e¿l¹lÔKˆ
ô ‡}�}×ÒœUŸZ™Z×4Ñ4Ô6ä�{‰{˜2¤U§Z¡Z¸Ô?ˆÜ—‘˜R¤u§z¡z¸&ÔA‰ä�{‰{˜A¤e§l¡l¸6ÔBˆÜ—‘˜R¤u§|¡|¸FÔCˆð 	ØØØØØØØØð
ð 
r<   Ú	res_shape.c                 óÞ  ‡ — t        ‰ j                  «      |k(  r9‰ j                  dd«      }t        j                  |«      j                  dd«      }|S t        g d¢ˆ fd„d¬«      }|D �cg c]  }||   ‘Œ	 }}t        t        |«      «      D �cg c]  }|j                  |«      ‘Œ }}t        j                  |‰ j                  ‰ j                  ¬«      j                  |«      }|S c c}w c c}w )Nr©   r%  )r   r©   r%  r2   c                 ó*   •— ‰j                  «       |    S r7   rÊ  )ÚidxrJ  s    €r:   r\   z,alloc_with_matching_layout.<locals>.<lambda>Ô  s   ø€ ¨%¯,©,«.¸Ñ*=€ r<   Trù   rÐ  )r]   r�   r*  rM   rè   Úsortedr®   r«   r‰   r‚   rU   rz   rÿ   )	rJ  rb  rY  rÄ  Ú	dim_orderre  Úpermuted_shaper  Úfinal_permutes	   `        r:   Úalloc_with_matching_layoutrj  Ë  sÕ   ø€ ô ˆU�[‰[Ó˜YÒ&Ø—/‘/ ! QÓ'ˆÜ×Ñ˜wÓ'×1Ñ1°!°QÓ7ˆð €Jô ÚÓ=Àtô
ˆ	ð 5>Ö>¨S˜) C›.Ð>ˆÐ>Ü5:¼3¸y»>Ó5JÖK°˜Ÿ™¨Õ+ÐKˆÐKÜ�k‰kØ %§+¡+°e·l±lô
ç
‰'�-Ó
 ð 	ð €Jùò ?ùÚKs   Á*C%ÂC*Ú	attn_biasÚcompute_log_sumexpc	           	      óä  — | j                  d«      }	| j                  d«      }
| j                  d«      }|j                  d«      }|j                  d«      }|	|
||f}t        | |«      }t        j                  |	|
|ft        j                  | j
                  ¬«      }t        j                  dt        j                  d¬«      }t        j                  dt        j                  d¬«      }||d d ||||d f	S ©Nr   r©   r%  r’   rÐ  r@   rw   ©r™   rj  rM   r‚   rQ   rz   r‹   )rJ  rú   r4  rk  rl  rK  rL  rM  rœ  r  r@  ÚS_QÚS_KVÚD_Vrb  rÄ  Ú
logsum_expr_  r`  s                      r:   Ú(meta__scaled_dot_product_cudnn_attentionrt  ß  sÙ   € ð 	�
‰
�1‹€AØ�
‰
�1‹€AØ
�*‰*�Q‹-€CØ�8‰8�A‹;€DØ
�*‰*�R‹.€Cà�A�s˜CÐ €IÜ
$ U¨IÓ
6€Cä—‘Ø	
ˆAˆsˆÜ�k‰kØ�|‰|ô€Jô �;‰;�r¤§¡°FÔ;€DÜ�[‰[˜¤5§:¡:°fÔ=€Fð 	ØØØØØØØØð
ð 
r<   c           	      óä  — | j                  d«      }| j                  d«      }	| j                  d«      }
|j                  d«      }|j                  d«      }||	|
|f}t        | |«      }t        j                  ||	|
ft        j                  | j
                  ¬«      }t        j                  dt        j                  d¬«      }t        j                  dt        j                  d¬«      }||d d |
|||d f	S rn  ro  )rJ  rú   r4  rk  rK  rL  rM  rœ  r  ÚH_Qrp  rq  rr  rb  rÄ  rs  r_  r`  s                     r:   Ú5meta__scaled_dot_product_fused_attention_overrideablerw    sÙ   € ð 	�
‰
�1‹€AØ
�*‰*�Q‹-€CØ
�*‰*�Q‹-€CØ�8‰8�A‹;€DØ
�*‰*�R‹.€Cà�C˜˜cÐ"€IÜ
$ U¨IÓ
6€Cä—‘Ø	
ˆC�ˆÜ�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§  )rM   rè   r*  )rš  rJ  rú   r4  r  r[  rx  ry  rz  r{  rK  rL  r|  r}  rœ  Úgrad_qÚgrad_kÚgrad_vs                     r:   Ú'meta__scaled_dot_product_flash_backwardr‚  6  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                 ó   — | j                  d«      }| j                  d«      }| j                  d«      }	t        j                  | «      }
t        j                  ||	|ft        j                  | j
                  ¬«      j                  dd«      }|
|fS )Nr   r©   r%  rÐ  )r™   rM   rè   r‚   rQ   rz   r*  )rJ  rú   r4  rK  rL  rƒ  rœ  r  rU  rV  rZ  r[  s               r:   Ú0meta__scaled_dot_product_flash_attention_for_cpur…  R  sŠ   € ð —‘˜A“€JØ—
‘
˜1“€IØŸ™ A›Ðä× Ñ  Ó'€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©   r2   r%  ©r   r%  r©   r2   rÐ  )r™   rM   Úempty_permutedrU   rz   )rš  rJ  rú   r4  r  r[  rK  rL  rƒ  rœ  r  rU  rW  Úlen_qÚlen_kr  r€  r�  s                     r:   Ú9meta__scaled_dot_product_flash_attention_for_cpu_backwardr‹  t  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«      }t        j                  ||	|
|| j                  | j
                  ¬«      }t        j                  j                  r&t        j                  j                  «       r	 |r|	nd}n|rt        j                  |	dz  «      dz  nd}t        j                  ||
|ft        j                  | j
                  ¬«      }|j                  dd«      }t        j                  dt        j                  d	¬«      }t        j                  dt        j                  d	¬«      }||||fS )
Nr©   r%  r   rí  r’   rÐ  r7  r@   rw   )r*  r™   rM   r‚   rU   rz   rS  rT  r)  r‰  r´  rR  rQ   r‹   )rJ  rú   r4  rk  rl  rK  rL  rœ  r  rÏ  rU  ÚKvrÄ  Úlogsumexp_dimrs  r_  r`  s                    r:   Ú,meta__scaled_dot_product_efficient_attentionr�  £  sD  € ð �O‰O˜A˜qÓ!€EØ
�-‰-˜˜1Ó
€CØ�O‰O˜A˜qÓ!€Eà�
‰
�1‹€AØ�
‰
�1‹€AØ—
‘
˜2“€IØ	�‰�B‹€Bä
�+‰+�a˜˜I r°·±ÀUÇ\Á\Ô
R€Cä‡}�}×ÒœUŸZ™Z×4Ñ4Ô6ð	ñ 0™°Q‰á2DœŸ	™	 ! b¡&Ó)¨BÒ.È!ˆä—‘Ø	
ˆI�}Ð%Ü�k‰kØ�|‰|ô€Jð �-‰-˜˜1Ó
€Cô �;‰;�r¤§¡°FÔ;€DÜ�[‰[˜¤5§:¡:°fÔ=€Fà�
˜D &Ð(Ð(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%  r2   r‡  rÐ  r’   rŒ  .)r™   rM   rˆ  rU   rz   rü   r‚   )rš  rJ  rú   r4  rk  r  r[  r|  r}  rK  r�  rL  rœ  r  rU  rz  rW  Ú
head_dim_vr{  r  r€  r�  Ú	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 r7   r“  )rš  rJ  rú   r4  r  r[  r|  r}  rk  rx  ry  rz  r{  rK  rL  rœ  r  r€  r�  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                 óÚ  — |€| j                  d«      n|j                  «       dz
  }|€| j                  d«      n|}|€|j                  d«      n|}| j                  d«      }| j                  d«      }t        j                  | «      }|€4t        j                  |||ft        j
                  | j                  ¬«      }nC| j                  d«      }t        j                  ||ft        j
                  | j                  ¬«      }|	ra|dkD  rdnd}t        j                  ||z  «      }|dk  rd}n|dk  rd}t        j                  ||||f| j                  | j                  ¬«      }n,t        j                  d| j                  | j                  ¬«      }d	\  }}t        j                  j                  rkt        j                  j                  «       rMt        j                  d
t        j                  d¬«      }t        j                  d
t        j                  d¬«      }nLt        j                  dt        j                  d¬«      }t        j                  d
t        j                  d¬«      }|||||fS )Nr   r©   rí  r’   rÐ  rO  rP  rQ  ©NNr@   rw   r%  )r™   r�   rM   rè   r‚   rQ   rz   r´  rR  rU   rS  rT  r)  r‰  r‹   rN  )rJ  rú   r4  rx  ry  rz  r{  rK  rL  rM  rœ  rš  r›  rœ  r�  r  rV  rX  rU  rW  rZ  r[  Útotal_qr\  r]  r^  r_  r`  s                               r:   Úmeta__flash_attention_forwardr¡  )  sõ  € ð4 #,Ð"3�—‘˜A”¸¿¹Ó9JÈQÑ9N€JØ*3Ð*;˜Ÿ™ AœÀÐØ(1Ð(9˜Ÿ™ !œ¸uÐØ—
‘
˜2“€IØ�z‰z˜"‹~€Hô × Ñ  Ó'€IØÐÜ—K‘KØ˜Ð$6Ð7Ü—+‘+Ø—<‘<ô
‰	ð —*‘*˜Q“-ˆÜ—K‘KØ˜Ð ¬¯©¸E¿L¹Lô
ˆ	ñ Ø%¨š]‘c°ˆÜ—y‘yÐ!3°kÑ!AÓBˆØ Ò$Ø‰LØ 3Ò&ØˆLÜ—[‘[Ø˜Ð$6¸ÐEØ—+‘+Ø—<‘<ô
‰
ô —[‘[ ¨%¯+©+¸e¿l¹lÔKˆ
ð �L€Dˆ&Ü‡}�}×ÒœUŸZ™Z×4Ñ4Ô6ä�{‰{˜2¤U§Z¡Z¸Ô?ˆÜ—‘˜R¤u§z¡z¸&ÔA‰ä�{‰{˜A¤e§l¡l¸6ÔBˆÜ—‘˜R¤u§|¡|¸FÔCˆàØØØØðð r<   c                 óŠ   — t        j                  |«      }t        j                  |«      }t        j                  |«      }|||fS r7   r“  )rš  rJ  rú   r4  r  r[  rx  ry  rz  r{  rK  rL  r|  r}  rœ  rš  r›  Ú
grad_queryÚgrad_keyÚ
grad_values                       r:   Úmeta__flash_attention_backwardr¦  y  sA   € ô0 ×!Ñ! %Ó(€JÜ×Ñ Ó$€HÜ×!Ñ! %Ó(€Jà�x Ð+Ð+r<   Úcu_seqlens_qÚcu_seqlens_kÚmax_seqlen_qr]  Úcustom_mask_typeÚcausal_diagonalÚseqlen_kÚwindow_sizec                 ó¦  — | j                  d«      }| j                  d«      }|j                  d«      }| j                  d«      }|j                  d«      }t        j                  ||||| j                  | j                  ¬«      }|�|j                  d«      dz
  n|}|}|�|€J ‚|}|�|n|}|
rt        j                  |dz  «      dz  nd}t        j                  |||ft        j                  | j                  ¬«      }t        j                  dt        j                  d¬«      }t        j                  dt        j                  d¬«      }||||||fS )	Nr   r©   rí  r’   rÐ  r7  r@   rw   )	r™   rM   r‚   rU   rz   r´  rR  rQ   r‹   )rJ  rú   r4  ro  r§  r¨  r©  r]  rK  rª  rl  rœ  r«  r¬  r­  r  rÏ  r¬  rU  r�  rÄ  Úlogsumexp_batch_dimÚactual_max_seqlen_qÚactual_max_seqlen_krŽ  rs  r_  r`  s                               r:   Ú!meta__efficient_attention_forwardr²  ˜  s9  € ð, 	�
‰
�1‹€AØ�
‰
�1‹€AØ�‰�‹€AØ—
‘
˜2“€IØ	�‰�B‹€Bä
�+‰+�a˜˜I r°·±ÀUÇ\Á\Ô
R€Cà7CÐ7O˜,×+Ñ+¨AÓ.°Ò2ÐVWÐØÐØÐØÐ'Ð'Ð'Ø*ÐØ*6Ð*B™,ÈÐá4FŒ�	‰	Ð%¨Ñ*Ó+¨bÒ0ÈAð ô —‘Ø	˜i¨Ð7Ü�k‰kØ�|‰|ô€Jô �;‰;�r¤§¡°FÔ;€DÜ�[‰[˜¤5§:¡:°fÔ=€Fà�
˜D &Ð*=Ð?RÐRÐ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_dqdkdvr@   r@   r<   r:   r\   z4meta__efficient_attention_backward.<locals>.<lambda>è  rd   r<   r2   c                   ó   — y)Nz3embedding dim must match for `shared_storage_dqdkdvr@   r@   r<   r:   r\   z4meta__efficient_attention_backward.<locals>.<lambda>ì  rd   r<   r   rí  r’   rÐ  rK  r%  rŒ  .r@   r×  )
rM   r^   r�   r‚   rU   rz   rå  rè   r™   rü   )rš  rJ  rú   r4  ro  r§  r¨  r©  r]  r[  rK  r|  r}  rª  r³  rœ  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                 ó
  ‡ ‡‡‡‡‡‡‡— d„ }t        j                  ‰ j                  «       dk(  xr ‰j                  «       dk(  ˆˆ fd„«       t        j                   |‰ j                  «      xr  |‰j                  «      ˆˆ fd„«       t	        ‰ «      dk(  �r%d„ }	d„ }
d„ }t        j                   |	‰ j                  «       «      xs  |‰ «      ˆ fd	„«       t        j                   |
‰j                  «       «      xs  |‰«      ˆfd
„«       t        j                  ‰ j                  d«      dz  dk(  ˆ fd„«       t        j                  ‰j                  d«      dz  dk(  xr ‰j                  d«      dz  dk(  ˆfd„«       ‰ j                  \  Š}‰j                  d«      Š‰j                  t         j                  k(  xr ‰j                  t         j                  k(  xs< ‰j                  t         j                  k(  xr ‰j                  t         j                  k(  }‰j                  «       dk(  rf‰j                  «       dk(  rSt        j                  ‰j                  t         j                  k(  xr ‰j                  t         j                  k(  d„ «       �n&|rï‰j                  t         j                  k(  rd}|dz  }nd}d}d„ } |||«      } ||d«      dz  }| |‰|«      z  |z  Š| |‰|«      z  |z  Š‰j                  «       ‰k(  r_‰j                  «       ‰k(  rLt        j                  ‰j                  «       d„ «       t        j                  ‰j                  «       d„ «       �nSt        j                  dˆˆˆˆfd„«       �n5t        j                  ‰j                  t         j                  k(  xr ‰j                  t         j                  k(  d„ «       t        j                  ‰j                  «       dk(  xr ‰j                  «       dk(  ˆˆfd„«       ‰j                  d«      ‰k(  rt‰j                  d«      dk(  r`‰j                  d«      dk(  rL‰j                  d«      ‰k(  r8t        j                  ‰j                  «       xr ‰j                  «       d„ «       nt        j                  dˆˆˆˆfd„«       |�|n‰ j                  }t        j                  ‰ j                  d«      ‰j                  d«      |‰ j                  ¬«      S )Nc                 ó    — | t         j                  t         j                  t         j                  t         j                  t         j
                  fv S r7   )rM   r�  Úfloat8_e5m2Úfloat8_e4m3fnuzÚfloat8_e5m2fnuzÚfloat4_e2m1fn_x2r‡   s    r:   Úis_fp8_or_fp4_typez*meta_scaled_mm.<locals>.is_fp8_or_fp4_type  sA   € ØÜ×ÑÜ×ÑÜ×!Ñ!Ü×!Ñ!Ü×"Ñ"ð
ð 
ð 	
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:   r\   z meta_scaled_mm.<locals>.<lambda>  s'   ø€ Ð7¸¿¹»
°|ÐCSÐTX×T\ÑT\ÓT^ÐS_Ð`€ r<   c                  ó<   •— d‰j                   › d‰ j                   › �S )Nz?Expected both inputs to be fp8 or fp4 types but got self.dtype=z and mat2.dtype=r‡   rÇ  s   €€r:   r\   z meta_scaled_mm.<locals>.<lambda>"  s&   ø€ ÐQÐRV×R\ÑR\ÐQ]Ð]mÐnr×nxÑnxÐmyÐz€ r<   r)  c                 ó,   — | d   | d   kD  xr | d   dk(  S rÉ  r@   rÊ  s    r:   Úis_row_majorz$meta_scaled_mm.<locals>.is_row_major'  s"   € Ø˜!‘9˜v a™yÑ(Ò;¨V°A©Y¸!©^Ð;r<   c                 ó&   — | d   dk(  xr | d   dkD  S rÉ  r@   rÊ  s    r:   Úis_col_majorz$meta_scaled_mm.<locals>.is_col_major*  s   € Ø˜!‘9 ‘>Ò3 f¨Q¡i°!¡mÐ3r<   c                 óV   — | j                  d«      dk(  xs | j                  d«      dk(  S rÉ  r˜   )Ú	tensor_2ds    r:   Úhas_zero_dimz$meta_scaled_mm.<locals>.has_zero_dim-  s)   € Ø—>‘> !Ó$¨Ñ)ÒC¨Y¯^©^¸AÓ->À!Ñ-CÐCr<   c                  ó*   •— d‰ j                  «       › �S )Nz#self must be row_major, got stride rÊ  rê   s   €r:   r\   z meta_scaled_mm.<locals>.<lambda>2  ó   ø€ Ð9¸$¿+¹+»-¸ÐI€ r<   c                  ó*   •— d‰ j                  «       › �S )Nz#mat2 must be col_major, got stride rÊ  ©r{  s   €r:   r\   z meta_scaled_mm.<locals>.<lambda>6  rÑ  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:   r\   z meta_scaled_mm.<locals>.<lambda>:  s   ø€ ÐXÐY]×YbÑYbÐcdÓYeÐXfÐg€ r<   c                  ó"   •— d‰ j                   › �S )Nz>Expected both dimensions of mat2 to be divisble by 16 but got rË   rÓ  s   €r:   r\   z meta_scaled_mm.<locals>.<lambda>>  s   ø€ ÐTÐUY×U_ÑU_ÐT`Ða€ r<   c                   ó   — y)NzNFor tensorwise scaling, both scale_a and scale_b must be float (fp32) tensors.r@   r@   r<   r:   r\   z meta_scaled_mm.<locals>.<lambda>R  rd   r<   r7  rP  c                 ó   — | |z   dz
  |z  S rc  r@   r-  s     r:   Úceil_divz meta_scaled_mm.<locals>.ceil_divb  s   € Ø˜A™ ™	 aÑ'Ð'r<   r3  c                   ó   — y)Nzscale_a must be contiguousr@   r@   r<   r:   r\   z meta_scaled_mm.<locals>.<lambda>u  rd   r<   c                   ó   — y)Nzscale_b must be contiguousr@   r@   r<   r:   r\   z meta_scaled_mm.<locals>.<lambda>y  rd   r<   Fc            	      óZ   •— d‰ › d‰j                  «       › d‰› d‰j                  «       › d�	S )NzTInvalid blockwise scaling configuration. For blockwise scaling, scale_a should have ú elements, got z, scale_b should have r�  rÇ  )Úexpected_a_sizeÚexpected_b_sizer»  r¼  s   €€€€r:   r\   z meta_scaled_mm.<locals>.<lambda>~  sH   ø€ ðFØFUÐEVÐVeÐfm×fsÑfsÓfuÐevð w/Ø/>Ð.?¸ÈwÏ}É}ËÐN_Ð_`ðbð r<   c                   ó   — y)NzKFor rowwise scaling, both scale_a and scale_b must be float (fp32) tensors.r@   r@   r<   r:   r\   z meta_scaled_mm.<locals>.<lambda>‡  rd   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:   r\   z meta_scaled_mm.<locals>.<lambda>Œ  s,   ø€ ÐgÐY`×YdÑYdÓYfÐXhÐh|Ðnu×nyÑnyÓn{Ðm}Ð~€ r<   c                   ó   — y)Nz@Both scale_a and scale_b must be contiguous for rowwise scaling.r@   r@   r<   r:   r\   z meta_scaled_mm.<locals>.<lambda>˜  rd   r<   c                  ó¦   •— 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   ro   r©   z) and scale_b.size()=(rp   r˜   )r”  r=  r»  r¼  s   €€€€r:   r\   z meta_scaled_mm.<locals>.<lambda>ž  sk   ø€ ðCàCDÀ#ÐEaÐbcÐadð e/Ø/6¯|©|¸A«Ð.?¸rÀ'Ç,Á,ÈqÃ/ÐARð S/Ø/6¯|©|¸A«Ð.?¸rÀ'Ç,Á,ÈqÃ/ÐARÐRSð	Uð r<   rÐ  )rM   r^   r}   rU   r-  rÃ   r™   r�   Úfloat8_e8m0fnur�  r�   r�  r   r‚   rz   )r�   r{  r»  r¼  ro  r½  rq  r¾  rÅ  rÊ  rÌ  rÏ  Ú_kÚis_blockwise_scalingÚblock_size_kÚblock_size_mnrØ  Únum_k_blocksÚpadded_num_k_blocksÚ
_out_dtyperÝ  rÞ  r”  r=  s   ````                @@@@r:   Úmeta_scaled_mmrë    s  ÿ€ ò
ô 
‡L�LØ�‰‹
�a‰Ò+˜DŸH™H›J¨!™OÜ`ôô 
‡L�LÙ˜4Ÿ:™:Ó&ÒIÑ+=¸d¿j¹jÓ+IÜzôô
 �4Ó˜FÓ"ò	<ò	4ò	Dô 	�‰Ù˜Ÿ™›Ó'Ò=©<¸Ó+=ÛIô	
ô 	�‰Ù˜Ÿ™›Ó'Ò=©<¸Ó+=ÛIô	
ô 	�‰Ø�I‰I�a‹L˜2Ñ Ñ"Ûgô	
ô 	�‰Ø�I‰I�a‹L˜2Ñ Ñ"Ò= t§y¡y°£|°bÑ'8¸AÑ'=Ûaô	
ð —
‘
‰ˆˆ2Ø�I‰I�a‹Lˆð �M‰MœU×1Ñ1Ñ1ò 6Ø—‘¤×!5Ñ!5Ñ5ò 
ð �M‰MœU×0Ñ0Ñ0ò 5Ø—‘¤×!4Ñ!4Ñ4ð 	ð �=‰=‹?˜aÒ G§M¡M£O°qÒ$8ä�L‰LØ—‘¤§¡Ñ.ÒQ°7·=±=ÄEÇMÁMÑ3QÙhöñ "ð �}‰}¤× 3Ñ 3Ò3ð  "�Ø˜!‘V‘à!�àˆMò(ñ $ B¨Ó5ˆLÙ"*¨<¸Ó";¸aÑ"?Ðð ¡¨¨MÓ :Ñ:Ð=PÑPð ð ¡¨¨MÓ :Ñ:Ð=PÑPð ð
 —‘“ ?Ò2Ø—M‘M“O Ò6ä—‘Ø×)Ñ)Ó+Ù8ôô —‘Ø×)Ñ)Ó+Ù8öô
 —‘Øööô �L‰LØ—‘¤§¡Ñ.ÒQ°7·=±=ÄEÇMÁMÑ3QÙeôô
 �L‰LØ—‘“ Ñ"Ò9 w§{¡{£}¸Ñ'9Ü~ôð —‘˜Q“ 1Ò$Ø—L‘L “O qÒ(Ø—L‘L “O qÒ(Ø—L‘L “O qÒ(ô —‘Ø×)Ñ)Ó+ÒG°×0EÑ0EÓ0GÙ^õô —‘Øöô	ð (Ð3‘¸¿¹€JÜ�;‰;�t—y‘y “| T§Y¡Y¨q£\¸ÈDÏKÉKÔXÐXr<   c                 óZ   — t        | ||||d¬«       | j                  | j                  «      S ©NT)r$  r>  ©r�   r}   r‰   r^  r   r—  s         r:   Úmeta_scatter_reduce_tworï  «  s)   € ô �d˜C ¨¨VÀTÕJØ�>‰>˜$Ÿ*™*Ó%Ð%r<   c                 ó(   — t        | ||||d¬«       | S rí  rB  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:   r\   z"meta_multinomial.<locals>.<lambda>½  s   ø€ ÐRÐSX×S\ÑS\ÓS^ÐR_Ð`€ r<   r©   rÐ  )rM   r^   r}   r‚   r‹   rz   r™   )r  Únum_samplesÚreplacementr:  s   `   r:   Úmeta_multinomialrö  ¸  s|   ø€ ô 
‡L�LØ	ˆE�I‰I‹KÖ˜1ÔÛ`ôð ‡y�yƒ{�aÒÜ�{‰{˜;¬e¯j©jÀÇÁÔNÐNÜ�;‰;Ø�
‰
�1‹�{¬%¯*©*¸U¿\¹\ôð r<   c                 ó"   — d}| D ]  }||z  }Œ	 |S rc  r@   )Úvsr‰  Úvs      r:   Úmultiply_integersrú  Æ  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:   r\   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_dimsrg  s   €€r:   r\   z'upsample_common_check.<locals>.<lambda>Õ  s   ø€ Ð6Ð7JÐ6KÈ?Ô[^Ð_iÓ[jÐZkÐl€ r<   c              3   ó&   K  — | ]	  }|d kD  –— Œ y­wrÄ  r@   ©ri   r¿   s     r:   rk   z(upsample_common_check.<locals>.<genexpr>Ù  s   è ø€ Ò*�aˆA��EÑ*ùrÅ  c              3   ó&   K  — | ]	  }|d kD  –— Œ y­wrÄ  r@   r  s     r:   rk   z(upsample_common_check.<locals>.<genexpr>Ù  s   è ø€ Ò2N¸Q°1°qµ5Ñ2NùrÅ  c                  ó   •— d‰ › d‰› �S )NzDInput and output sizes should be greater than 0, but got input size z and output size r@   )rg  r‘  s   €€r:   r\   z'upsample_common_check.<locals>.<lambda>Ú  s   ø€ ð Ø �\Ð!2°;°-ðA€ r<   )rM   r^   r«   r»  )rg  r‘  rþ  r  Úchannelsr   s   ```  @r:   Úupsample_common_checkr  Í  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:   r\   z$upsample_nearest1d.<locals>.<lambda>è  ó   ø€ ÐPÐQV×Q[ÑQ[ÓQ]ÐP^Ð_€ r<   ©rþ  rä   ©
rM   r^   r�   rú  r™   r  rŽ   r[  rE   r"   )r  r‘  ÚscalesÚfull_output_sizes   `   r:   Úupsample_nearest1dr  â  ó†   ø€ ô 
‡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:   r\   z$upsample_nearest2d.<locals>.<lambda>ø  r	  r<   r%  r
  r)  r3  rä   )rM   r^   r�   rú  r™   r  rŽ   rE   r"   r�   rz   rq   ré   Ú
contiguous)	r  r‘  Úscales_hÚscales_wr  r4  rå   rH   Ú
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‘  rg  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
  r3  c                  ó"   •— d‰ j                   › �S ©NzFExpected grad_output to be a tensor of dimension 4 but got: dimension r1  r¶  s   €r:   r\   z-upsample_nearest2d_backward.<locals>.<lambda>  ó   ø€ Ð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 but got grad_output.size(r˜   ©r  r'  r  s   €€€r:   r\   z-upsample_nearest2d_backward.<locals>.<lambda>#  s>   ø€ ð Ø !˜s $Ð'7¸Ñ':Ð&;Ø,¨Q¨C¨t°K×4DÑ4DÀQÓ4GÐ3HðJð r<   rä   )
r  rM   r^   r›   r®   r™   rŽ   r[  rE   r"   )r'  r‘  rg  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:   r\   z$upsample_nearest3d.<locals>.<lambda>5  r	  r<   r2   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 )Nr‡   )r¸  r¹  )
rM   rè   rð   rg   r#   r�   rÃ   r%   r  r'   )
r�   Ústabler}   Ú
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 != 2r1  )Úinput_gatess   €r:   r\   z%rnn_cell_checkSizes.<locals>.<lambda>b  ó   ø€ °;×3CÑ3CÐ2DÀEÐ0J€ r<   c                  ó:   •— ‰j                   › d‰ j                   › �S ©Nú != rË   )Úhidden_gatesr,  s   €€r:   r\   z%rnn_cell_checkSizes.<locals>.<lambda>e  s    ø€ �;×$Ñ$Ð% T¨,×*<Ñ*<Ð)=Ð>€ r<   r©   c                  ó"   •— ‰ j                   › d�S )Nz != 1r1  )Ú
input_biass   €r:   r\   z%rnn_cell_checkSizes.<locals>.<lambda>i  s   ø€ °j·o±oÐ5FÀeÐ3L€ r<   c                  ó.   •— ‰j                  «       › d‰ › �S r/  rÇ  )Ú
gates_sizer3  s   €€r:   r\   z%rnn_cell_checkSizes.<locals>.<lambda>l  s   ø€ �z×'Ñ'Ó)Ð*¨$¨z¨lÐ;€ r<   c                  ó:   •— ‰j                   › d‰ j                   › �S r/  rË   )Úhidden_biasr3  s   €€r:   r\   z%rnn_cell_checkSizes.<locals>.<lambda>p  s    ø€ �z×'Ñ'Ð(¨¨[×->Ñ->Ð,?Ð@€ r<   c                  ó"   •— ‰ j                   › d�S r+  r1  )Úprev_hiddens   €r:   r\   z%rnn_cell_checkSizes.<locals>.<lambda>r  r-  r<   r   c            
      ó`   •— ‰j                  «       › d‰j                  d«      › d‰› d‰› d‰ › d�
S )Nr0  r   z * z // z (aka rp   )r�   r™   )Úexpected_prev_hidden_numelÚfactorr5  r,  r9  s   €€€€€r:   r\   z%rnn_cell_checkSizes.<locals>.<lambda>v  sB   ø€ �;×$Ñ$Ó&Ð' t¨K×,<Ñ,<¸QÓ,?Ð+@ÀÀJÀ<ÈtÐTZÐS[Ð[aÐb|Ða}Ð}~Ð€ r<   c              3   óP   •K  — | ]  }|j                   ‰j                   k(  –— Œ y ­wr7   r×  )ri   rJ   r,  s     €r:   rk   z&rnn_cell_checkSizes.<locals>.<genexpr>y  s(   øè ø€ ò 
àð �H‰H˜×*Ñ*Õ*ñ
ùs   ƒ#&c                   ó   — y)Nz%expected all inputs to be same devicer@   r@   r<   r:   r\   z%rnn_cell_checkSizes.<locals>.<lambda>}  rd   r<   )rM   r^   r›   r�   r™   r�   r»  )r,  r1  r3  r7  r<  r9  r;  r5  s   ``````@@r:   Úrnn_cell_checkSizesr?  Z  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 )Nr3  rä   )r?  rM   rè   ré   )r,  r1  Úcxr3  r7  Ú	workspaceÚhyÚcys           r:   Ú_thnn_fused_lstm_cell_metarE  �  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%  r×  r‡   )r«   r�   rŽ   rM   r‚   rz   rý  )r  rm  Úweight_stride0Ú
weight_bufÚhxrA  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ž   r4  Ú
cell_shaperD  rC  Ú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   r×  rï   )r�   rŽ   rM   r‚   rz   rý  )r  Úw0Úw1Úw2Úw3Úhx_Úcx_rû   rQ  r…  rJ  rL  Ú
has_biasesrP  rM  rO  rT  rU  Úoutput_chanelsrž   r4  rC  rD  rB  s                           r:   Úmkldnn_rnn_layerrf  È  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 r@   ©r}   r
  s   €€r:   r\   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.r@   ri  s   €€r:   r\   z'zero_numel_check_dims.<locals>.<lambda>ù  s   ø€ �w�iÐ8¸¸Ð=TÐU€ r<   )r›   rM   rŒ   r™   )r�   r}   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.r@   r<  s   €r:   r\   z%check_argmax_argmin.<locals>.<lambda>  s   ø€ �t�fÐ\Ð]€ r<   )rñ   r}   rk  rM   r^   r�   )rñ  r�   r}   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Úargmaxr‡   )rn  rE   r¸  r�   r¹  rŽ   rM   rð   )r�   r}   r»  r±  r�   s        r:   Úargmax_argmin_metarq  	  sQ   € ä˜ $¨Ô,Ü×Ñ §
¡
°c°o¨S©FÈ4ÓP€DÜ$ T¨4°Ó9€EØ�>‰>˜%¤u§{¡{ˆ>Ó3Ð3r<   c                 ó|   — |t         j                  k(  rt         j                  }t        j                  d||||¬«      S )Nr@   r?  )rM   ÚjaggedrÕ  r‚   )r¿   rU   ry   rz   r{   s        r:   Úscalar_tensorrt    s5   € ð
 ”—‘ÒÜ—‘ˆÜ�;‰;Ø
�% ¨vÀ*ôð r<   c                 ó˜  — t        || j                  «       d¬«      }| j                  «       dk(  rdn| j                  |«      }t        j                  |«       t        j
                  ||k  d„ «       t        | j                  «      }t        |«      dkD  r|||<   | j                  |«      | j                  |t        j                  ¬«      fS )NT©r  r   r©   c                   ó   — y)Nzk not in range for dimensionr@   r@   r<   r:   r\   ztopk_meta.<locals>.<lambda>#  rd   r<   r‡   )rñ   r}   r™   rM   rå  r^   rü   r�   r«   rŽ   rð   )r�   r“  r}   Úlargestrf  Ú	sliceSizeÚtopKSizes          r:   Ú	topk_metar{    sœ   € ô ˜˜dŸh™h›j°dÔ
;€CØ—X‘X“Z 1’_‘¨$¯)©)°C«.€IÜ	×Ñ˜ÔÜ	‡L�L��i‘Ñ!GÔHä�D—J‘JÓ€HÜ
ˆ8ƒ}�qÒØˆ�‰Ø�>‰>˜(Ó# T§^¡^°HÄEÇKÁK ^Ó%PÐPÐPr<   c                 óÆ   — |€	|€J d«       ‚|j                  «       }| j                  «       }	t        j                  ||	j                  |	j                  |	j
                  ¬«      S )Nz;segment_reduce(): Either lengths or offsets must be defined)rU   rz   ry   )r  rM   rè   rU   rz   ry   )
rl  r4  r¨  r   r£  r¤  r¥  r§  Údata_contigÚgrad_contigs
             r:   Úmeta__segment_reduce_backwardr  +  sj   € ð
 Ð 'Ð"5ð ØEóÐ5ð —/‘/Ó#€KØ—/‘/Ó#€KÜ×ÑØØ×ÑØ×!Ñ!Ø×!Ñ!ô	ð r<   c                 óè  ‡— ddl m} t        ‰| j                  «       d¬«      Š| j                  «       dkD  r| j	                  ‰«      nd}t        j                   ||dk\  ||k  «      ˆfd„«       t        | j                  d ‰ | j                  ‰dz   d  z   «      }|r%| j                  «       dkD  r|j                  ‰d«       | j                  |«      | j                  |t
        j                  ¬«      fS )Nr   )Úsym_andTrv  r©   c                  ó   •— d‰ › �S )Nz9kthvalue(): selected number k out of range for dimension r@   r“   s   €r:   r\   zkthvalue_meta.<locals>.<lambda>F  s   ø€ ÐKÈCÈ5ÐQ€ r<   r‡   )rª   r�  rñ   r}   r™   rM   r^   rü   r�   rd  rŽ   rð   )r�   r“  r}   r»  r�  ÚdimSizer�   s     `    r:   Úkthvalue_metar„  =  sÅ   ø€ õ >ä
˜˜dŸh™h›j°dÔ
;€CØ $§¡£
¨Q¢ˆd�i‰i˜Œn°A€GÜ	‡L�LÙ��Q‘˜˜W™Ó%Û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Ú r@   r@   r<   r:   r\   z(checkLSTMBackwardSizes.<locals>.<lambda>U  rd   r<   c                   ó   — yr‡  r@   r@   r<   r:   r\   z(checkLSTMBackwardSizes.<locals>.<lambda>X  rd   r<   c                   ó   — yr‡  r@   r@   r<   r:   r\   z(checkLSTMBackwardSizes.<locals>.<lambda>Z  rd   r<   c                   ó   — yr‡  r@   r@   r<   r:   r\   z(checkLSTMBackwardSizes.<locals>.<lambda>[  rd   r<   c                   ó   — yr‡  r@   r@   r<   r:   r\   z(checkLSTMBackwardSizes.<locals>.<lambda>\  rd   r<   c                   ó   — yr‡  r@   r@   r<   r:   r\   z(checkLSTMBackwardSizes.<locals>.<lambda>]  rd   r<   r   r©   r3  c                   ó   — yr‡  r@   r@   r<   r:   r\   z(checkLSTMBackwardSizes.<locals>.<lambda>^  rd   r<   )rM   r^   r}   r™   r�   )Úgrad_hyÚgrad_cyrA  rD  rB  Údefined_gradÚexp_sizes          r:   ÚcheckLSTMBackwardSizesr“  S  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)r»  )r“  rM   rè   Úlegacy_contiguous_memory_formatr	  )	r�  r�  rA  rD  rB  Úhas_biasÚ
grad_gatesÚgrad_cxr“  s	            r:   Ú#_thnn_fused_lstm_cell_backward_implrš  b  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’   ró  )rõ  rô  rö  rù  r+  Úgrad_weightr“  s          r:   Úlinear_backwardr�  p  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%  rK  r   z'Invalid input shape for pixel_shuffle: z with upscale_factor = c                 ób   — t         j                  j                  | «      t         j                  k(  S r7   rÍ  rÐ  s    r:   rÒ  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 rã  )r-  rM   ré   rÏ  r   rä  )rÒ  r�   s   €€r:   rÚ  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_factorrÚ  rÙ  ÚHrÚWrrž   r  rÒ  s	   `       @r:   Úmeta_pixel_shuffler¤  }  sç   ù€ ô 	ˆD�J‰J‹˜!Ò §
¡
¨2¡°.À>Ñ2QÑ RÐVWÒ Wðð 2°$·*±*°Ð=TÐUcÐTdÐeóØWò
Uõ	)ð 	�
‰
�2‰˜>¨NÑ:Ñ;€AØ	�‰�B‰˜.Ñ	(€BØ	�‰�B‰˜.Ñ	(€BØ-�$—*‘*˜S˜b�/Ð- 1Ð- bÐ-¨"Ñ-€Ià
�.‰.˜Ó
#€CØ
�&‰&Ñ1Ó3ˆ&Ó
4€CØ€Jr<   c                 óX  — | j                  | j                  «      }|j                  |j                  «      }|j                  |j                  «      }|j                  |j                  «      }|j                  |j                  «      }|j                  |j                  «      }|||||||fS r7   ró  )r  Úweight0Úweight1Úweight2Úweight3rb  Úcx_tmpr4  Úhy_Úcy_Úgrad_output_r_optÚgrad_hy_r_optÚgrad_cy_r_optrû   r…  rJ  rL  rd  rO  rP  rQ  rM  rB  Ú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                  t         j                  ¬«      S )N©rU   rå   )rM   rè   ru  rð   ré   )r�   Ú
boundariesr·  r  s       r:   Úmeta_bucketizer»  À  s2   € ô ×ÑØÙ&Œe�kŠk¬E¯K©KÜ×-Ñ-ôð r<   c                 ó–  ‡ ‡‡‡‡— dŠt        ‰ «      dk(  r't        j                  ‰ j                  «       ˆ fd„«       t        ‰ «      dk(  r%‰ j                  «       rt	        j
                  d«       t        j                  t        ‰t        «      ˆˆfd„«       t        j                  ‰dkD  ˆˆfd„«       t        j                  t        ‰t        «      ˆˆfd	„«       t        j                  t        ‰t        «      ˆˆfd
„«       t        j                  ‰‰k\  d„ «       t        j                  ‰‰ j                  ‰ j                  ¬«      S )Nzhistc()rÒ  c                  ó$   •— d‰ j                   › d�S )Nz%"histogram_cpu" not implemented for 'r  r‡   r  s   €r:   r\   zmeta_histc.<locals>.<lambda>Ñ  s   ø€ Ð=¸e¿k¹k¸]È!ÐL€ r<   r)  z%_histc_cuda with floating point inputc                  ó$   •— ‰› dt        ‰ «      › �S )Nz#: argument 'bins' must be int, not r  ©Úbinsr
  s   €€r:   r\   zmeta_histc.<locals>.<lambda>×  s   ø€ �7�)Ð>¼tÀD»z¸lÐK€ r<   r   c                  ó   •— ‰› d‰ › �S )Nz: bins must be > 0, but got r@   r¿  s   €€r:   r\   zmeta_histc.<locals>.<lambda>Ù  s   ø€  g YÐ.JÈ4È&Ð#Q€ r<   c                  ó$   •— ‰ › dt        ‰«      › �S )Nz%: argument 'min' must be Number, not r  )r
  r.  s   €€r:   r\   zmeta_histc.<locals>.<lambda>Ü  ó   ø€ �7�)Ð@ÄÀcÃÀÐL€ r<   c                  ó$   •— ‰ › dt        ‰«      › �S )Nz%: argument 'max' must be Number, not r  )r
  r¯   s   €€r:   r\   zmeta_histc.<locals>.<lambda>à  rÃ  r<   c                   ó   — y)Nz&{fn_name}: max must be larger than minr@   r@   r<   r:   r\   zmeta_histc.<locals>.<lambda>â  rd   r<   rï   )r-  rM   r^   r,  rE   rë  rg   r   r!   r‚   rz   rU   )r  rÀ  r.  r¯   r
  s   ````@r:   Ú
meta_histcrÆ  Ê  sí   ü€ ð €GÜ�5Ó˜UÒ"Ü�‰Ø×#Ñ#Ó%ÛLô	
ô �5Ó˜VÒ#¨×(?Ñ(?Ô(AÜ×%Ñ%Ð&MÔNÜ	‡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Ä  r@   )ri   r™   s     r:   rk   z,meta_upsample_bimode2d_aa.<locals>.<genexpr>ô  s   è ø€ Ò!H¨t $¨¥(Ñ!HùrÅ  r©   c                  ó*   •— d‰ j                  «       › �S r  r˜   r  s   €r:   r\   z+meta_upsample_bimode2d_aa.<locals>.<lambda>õ  r	  r<   rä   )
r  r™   rM   r^   r�   r»  rŽ   r[  rE   r"   )r  r‘  rÔ  r  r  r  s   `     r:   Úmeta_upsample_bimode2d_aarÊ  æ  s‹   ø€ ô -Ø�
‰
‹�k°AôÐô 
‡L�LØ�‰‹˜ÑÒHœcÑ!H°u·z±z³|ÀAÀBÐ7GÔ!HÓHÛ_ôð �?‰?Ð+Ó,×/Ñ/Ü×1Ñ1°%Ó8ð 0ó ð r<   c                 óT  ‡ ‡‡— t        ||d¬«      Št        j                  ‰ j                  dk(  ˆ fd„«       t	        d«      D ]0  Št        j                  ‰ j
                  ‰   ‰‰   k(  ˆˆ ˆfd„«       Œ2 ‰ j                  |«      j                  t        j                  ‰ «      ¬«      S )Nr%  r
  r3  c                  ó"   •— d‰ j                   › �S r  r1  r¶  s   €r:   r\   z4meta_upsample_bimode2d_aa_backward.<locals>.<lambda>
  r  r<   c            
      óD   •— d‰› d‰ ‰   › d‰› d‰j                  ‰«      › �S )NzD
Expected grad_output to have the same shape as output; output.size(r  z
but got grad_output_size(r˜   r  s   €€€r:   r\   z4meta_upsample_bimode2d_aa_backward.<locals>.<lambda>  s@   ø€ ð DØDEÀ3ÀdÐK[Ð\]ÑK^ÐJ_ð `Ø˜˜D ×!1Ñ!1°!Ó!4Ð 5ð9€ r<   rä   )
r  rM   r^   r›   r®   r�   rŽ   r[  rE   r"   )r'  r‘  rg  rÔ  r  r  r  r  s   `     @@r:   Ú"meta_upsample_bimode2d_aa_backwardrÎ  ü  s¨   ú€ ô -Ø�K°!ôÐô 
‡L�LØ×Ñ˜AÑÛkôô �1‹Xò 
ˆÜ�‰Ø×Ñ˜aÑ Ð$4°QÑ$7Ñ7õ9õ	
ð
ð × Ñ  Ó,×/Ñ/Ü×1Ñ1°+Ó>ð 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.r@   r@   r<   r:   r\   z<_amp_foreach_non_finite_check_and_unscale_.<locals>.<lambda>  rd   r<   c                   ó   — y)Nz%inv_scale must be a 1-element tensor.r@   r@   r<   r:   r\   z<_amp_foreach_non_finite_check_and_unscale_.<locals>.<lambda>  rd   r<   c                   ó   — y)Nz!found_inf must be a float tensor.r@   r@   r<   r:   r\   z<_amp_foreach_non_finite_check_and_unscale_.<locals>.<lambda>#  rd   r<   c                   ó   — y)Nz!inv_scale must be a float tensor.r@   r@   r<   r:   r\   z<_amp_foreach_non_finite_check_and_unscale_.<locals>.<lambda>'  rd   r<   )rM   r^   r�   rU   r,  )r�   r
  Ú	inv_scales      r:   Ú*_amp_foreach_non_finite_check_and_unscale_rÕ    s|   € ä	‡L�LØ�‰Ó˜QÑÑ Oôô 
‡L�LØ�‰Ó˜QÑÑ Oôô 
‡L�LØ�‰×)Ñ)Ù3ôô 
‡L�LØ�‰×)Ñ)Ù3õr<   c                 óV   — t        | j                  «       «      }| j                  |«      S r7   )rü   r™   rŽ   )r�   ÚnanÚposinfÚneginfr¡  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)ry   rM   rÖ  Ú
sparse_cscr×  Ú
sparse_bscr›   rñ   rü   r™   rÃ   r  )r�   Údim0r„  Úndimsr™   rÃ   s         r:   rÊ  rÊ  3  sö   € à�;‰;Ü×ÑÜ×ÑÜ×ÑÜ×Ñð	ñ ð ð IÈÏÉÈÐU\Ð]óð ð �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é  r}   rÊ  )r�   rß  rè  ré  s       r:   Út_rá  P  s£   € à�I‰I€Eà‡~‚~Ø—_‘_Ó&ˆ
Ø—N‘NÓ$ˆ	Ø˜QŠ 9°¢>ð 	
ðØ!�l ,¨y¨kÐ9JðLó	
Ð1ð
 �x‰x‹z˜QŠð 	
ØDÀUÀGÈ1ÐMó	
ˆô �d˜A E¨A¢I˜qÓ5Ð5°1Ó5Ð5r<   )r·  r  ÚsideÚsorterc                ó\  ‡ ‡‡— t        j                  t        ‰ j                  «      dk  xs ‰ j                  d d ‰j                  d d k(  ˆˆ fd„«       t        j                  ‰d u xs ‰ j                  ‰j                  k(  ˆ ˆfd„«       t        j                  |dk7  xs | d«       |rt         j                  nt         j
                  }t        ‰t         j                  «      r&t        j                  ‰|t         j                  ¬«      S t        j                  d|‰ j                  ¬	«      S )
Nr©   r’   c                  ó`   •— dt        ‰j                  «      › dt        ‰ j                  «      › �S )Nz¯torch.searchsorted(): boundaries tensor should be 1 dimension or the first N-1 dimensions of boundaries tensor and input value tensor must match, but we got boundaries tensor z and input value tensor ©rü   r�   )r�   Úsorted_sequences   €€r:   r\   z#meta_searchsorted.<locals>.<lambda>s  s8   ø€ ð3ä37¸×8MÑ8MÓ3NÐ2Oð P"Ü"& t§z¡zÓ"2Ð!3ð5ð r<   c                  ól   •— dt        ‰ j                  «      › d‰�t        ‰j                  «      › �S g › �S )Nz[torch.searchsorted(): boundary and sorter must have the same size, but got boundary tensor z and got sorter tensor ræ  )rç  rã  s   €€r:   r\   z#meta_searchsorted.<locals>.<lambda>~  sO   ø€ ð#Ü#'¨×(=Ñ(=Ó#>Ð"?Ð?VØ%+Ð%7Œt�F—L‘LÓ!Ð@ðBð ð >@Ð@ðBð r<   r  zetorch.searchsorted(): side and right can't be set to opposites, got side of left while right was Truer¹  r@   rÐ  )rM   r^   r«   r�   ru  rð   rg   r   rè   ré   r‚   rz   )rç  r�   r·  r  râ  rã  rU   s   ``   ` r:   Úmeta_searchsortedré  c  sø   ú€ ô 
‡L�LÜˆO×!Ñ!Ó" aÑ'ò 	9Ø× Ñ   "Ð%¨¯©°C°R¨Ñ8ô	
ô	ô 
‡L�LØ�$ˆÒ?˜/×/Ñ/°6·<±<Ñ?ô	
ôô 
‡L�LØ�‰Ò#˜e˜)ð	$ôñ %ŒE�KŠK¬%¯+©+€EÜ�$œŸ™Ô%Ü×ÑØ˜¬U×-DÑ-Dô
ð 	
ô �{‰{˜2 U°?×3IÑ3IÔJÐJr<   c                 ó–   ‡ — t        j                  ‰ t         j                  t         j                  t         j                  fvˆ fd„«       y )Nc                  ó   •— d‰ › �S )Nz/Unsupported input type encountered for isin(): r@   r‡   s   €r:   r\   z3_check_for_unsupported_isin_dtype.<locals>.<lambda>˜  s   ø€ ÐAÀ%ÀÐI€ r<   )rM   r^   r  Ú
complex128Ú	complex64r‡   s   `r:   Ú!_check_for_unsupported_isin_dtyperî  •  s/   ø€ Ü	‡L�LØ”e—j‘j¤%×"2Ñ"2´E·O±OÐDÐDÛIõr<   c                 óJ   — | j                  || j                  d«      f«      }|S )Nr’   ró  )r'  rí   Únum_weightsrË  r×  rœ  s         r:   Úmeta_embedding_dense_backwardrñ  œ  s*   € ð ×'Ñ'¨°k×6FÑ6FÀrÓ6JÐ(KÓL€KØÐr<   c                 ój   — |	rt         j                  | ||||||||
|«
      S t        | ||||||||
|«
      S r7   )r/   Ú_embedding_bag_sparse_backwardÚ!meta_embedding_bag_dense_backward)rl  rí   r¤  rÛ  rÜ  Úmaximum_indicesrð  r×  r…  rØ  rÅ  rË  s               r:   Úmeta_embedding_bag_backwardrö  ¨  se   € ñ Ü×2Ñ2ØØØØØØØØØØó
ð 	
ô 1ØØØØØØØØØØó
ð 	
r<   c
                 óN  ‡ — t        j                  ‰ j                  t         j                  t         j                  t         j
                  t         j                  fv ˆ fd„«       |t        k(  rt        j                  |d u«       ‰ j                  |‰ j                  d«      f«      }
|
S )Nc                  ó"   •— d‰ j                   › �S )Nz$Unsupported input type encountered: r‡   )rl  s   €r:   r\   z3meta_embedding_bag_dense_backward.<locals>.<lambda>â  s   ø€ Ð6°t·z±z°lÐC€ r<   r©   )
rM   r^   rU   rŽ  r�  r�  Úfloat64rÕ  rŽ   r™   )rl  rí   rÛ  rÜ  rõ  rð  r×  r…  rÅ  rË  Úindex_grad_weights   `          r:   rô  rô  Ó  sv   ø€ ô 
‡L�LØ�
‰
”u—}‘}¤e§n¡n´e·m±mÄUÇ]Á]ÐSÐSÛCôð ŒxÒÜ�‰�_¨DÐ0Ô1ØŸ™¨°T·Y±Y¸q³\Ð'BÓCÐØÐr<   c                 óÚ  — | j                  d«      }t        j                  |t        k(  d«       t        j                  | j	                  «       dk(  «       t        j                  |j	                  «       dk(  «       |j                  d«      }t        j                  |j	                  «       dk(  «       t        j                  |j                  d«      |k(  «       | j                  |f«      }	|	S )Nr©   zHembedding_bag_backward: per_sample_weights only supported for mode='sum'r%  r   )r™   rM   r^   rÔ  r}   rŽ   )
rl  rm  rí   r¤  rÛ  r…  rË  Úembedding_featuresrô  r4  s
             r:   Ú.meta_embedding_bag_per_sample_weights_backwardrý  ê  s«   € ð Ÿ™ 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.r@   r@   r<   r:   r\   zmeta_isin.<locals>.<lambda>  rd   r<   r×  r‡   )
rM   r^   rg   r   re  rz   rî  rU   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.r@   r@   r<   r:   r\   z meta_polygamma.<locals>.<lambda>  rd   r<   rÄ  r‡   )rM   r^   r   r   rÅ  rè   )r=  r�   rH   rI   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)rZ  rê   s    r:   Úmeta_local_scalar_denser		    s   € ä
ÐGÓ
HÐHr<   c                 ó,   — t        j                  | «      S r7   r“  rê   s    r:   Úsilur	  $  r•  r<   c                 ól   — t        | t        j                  ¬«      \  }}t        j                  | |¬«      S rÃ  )r   r   rÅ  rM   rè   )r�   rH   rI   s      r:   Úsigmoidr	  *  s3   € ô )ØÜ;×HÑHô�O€A€|ô ×Ñ˜D¨Ô5Ð5r<   c                 óÐ  — | j                  «       dk(  }|j                  «       dk(  }|r�|r4|j                  d«      | j                  d«      |j                  d«      g}�nt        j                  |j                  d«      |j                  d«      k(  d«       | j                  d«      |j                  d«      g}nÅ|rZt        j                  |j                  d«      | j                  d«      k(  d«       | j                  d«      |j                  d«      g}nit        j                  | j                  d«      |j                  d«      k(  d«       | j                  d«      | j                  d«      |j                  d«      g}|xs | j                  }d|j
                  z  }|d   |z   dz
  |z  |z  }||k(  r|d   |z  |dg}	n|dg}	t        j                  ||	|| j                  ¬«      }
|
S )	Nr%  r   r©   z matrix batch sizes have to matchr’   zbatched dimension has to matchrŒ  rÐ  )r}   r™   rM   r^   rU   ÚitemsizerR  rz   )ry  r{  Úoffsrq  Ú
mat1_is_2dÚ
mat2_is_2drX  Ú	alignmentÚsize_paddedr'  r  s              r:   Ú _create_grouped_mm_output_tensorr	  4  sž  € Ø—‘“˜q‘€JØ—‘“˜q‘€JáÙØŸ	™	 !› d§i¡i°£l°D·I±I¸a³LÐAŠHä�L‰LØ—	‘	˜!“ §	¡	¨!£Ñ,Ð.Pôð Ÿ	™	 !› d§i¡i°£mÐ4‰HáÜ�L‰LØ—	‘	˜!“ §	¡	¨!£Ñ,Ð.Pôð Ÿ	™	 !› d§i¡i°£lÐ3‰Hô �L‰L˜Ÿ™ 1›¨¯©°1«Ñ5Ð7WÔXØŸ	™	 !› d§i¡i°£l°D·I±I¸b³MÐBˆHàÒ'˜TŸZ™Z€Ià�i×(Ñ(Ñ(€IØ˜B‘< )Ñ+¨aÑ/°IÑ=À	ÑI€KØ�ZÒØ˜q‘k KÑ/°¸aÐ@‰
à! 1Ð%ˆ
Ü
×
Ñ
˜h¨
¸)ÈDÏKÉKÔ
X€CØ€Jr<   Úmat_aÚmat_br	  c	                 óL  ‡ ‡‡— t        j                  |d u |d u k(  d„ «       |d uxr |d u}	|	rUt        j                  ‰ j                  t         j                  k(  xr ‰j                  t         j                  k(  ˆ ˆfd„«       nTt        j                  ‰ j                  t         j                  k(  xr ‰j                  t         j                  k(  ˆ ˆfd„«       t        j                  ‰ j                  «       dv xr ‰j                  «       dv ˆ ˆfd„«       ‰ j                  «       dk(  }
‰j                  «       dk(  }|	rDd„ }d„ }t        j                   |‰ «      ˆ fd	„«       t        j                   |‰«      ˆfd
„«       d„ } |d‰ «        |d‰«       |�Ÿ|��t        j                  |j                  t         j                  k(  xr |j                  t         j                  k(  d„ «       dd„}‰�|
r|r‰j                  d   nd} |d|‰ d|«        |d|‰d|«       t        j                  |d u d„ «       |
s|r}t        j                  ‰d uˆ ˆfd„«       ‰�xt        j                  ‰j                  «       dk(  ˆfd„«       t        j                  ‰j                  t         j                  k(  ˆfd„«       nt        j                  ‰d u d„ «       t        j                  |d u d„ «       t        j                  |d u xs |t         j                  k(  d„ «       t        ‰ ‰‰|«      S )Nc                   ó   — y)Nz,Either both scale factors are given, or noner@   r@   r<   r:   r\   z)_meta_grouped_mm_common.<locals>.<lambda>d  rd   r<   c                  ó>   •— d‰ j                   › d‰j                   › d�S )Nz5Expected inputs of E4M3 FP8 type but got mat_a.dtype=ú and mat_b.dtype=r�  r‡   ©r	  r	  s   €€r:   r\   z)_meta_grouped_mm_common.<locals>.<lambda>o  s%   ø€ ÐKÈEÏKÉKÈ=ÐXiÐjo×juÑjuÐivÐvwÐx€ r<   c                  ó>   •— d‰ j                   › d‰j                   › d�S )Nz1Expected inputs of BF16 type but got mat_a.dtype=r	  r�  r‡   r	  s   €€r:   r\   z)_meta_grouped_mm_common.<locals>.<lambda>t  s%   ø€ ÐGÈÏÉÀ}ÐTeÐfk×fqÑfqÐerÐrsÐt€ r<   )r%  r2   c                  óL   •— d‰ j                  «       › d‰j                  «       › �S )Nz3Multiplicands must be 2D or 3D but got mat_a.dim()=z and mat_b.dim()=r“   r	  s   €€r:   r\   z)_meta_grouped_mm_common.<locals>.<lambda>y  s'   ø€ ÐEÀeÇiÁiÃkÀ]ÐRcÐdi×dmÑdmÓdoÐcpÐq€ r<   r%  c                 óF   — | j                  «       }|d   dkD  xr |d   dk(  S ©Nrí  r©   r’   rÊ  ©ÚmatÚ
mat_strides     r:   rÊ  z-_meta_grouped_mm_common.<locals>.is_row_major�  s*   € ØŸ™›ˆJØ˜b‘> AÑ%Ò=¨*°R©.¸AÑ*=Ð=r<   c                 óF   — | j                  «       }|d   dk(  xr |d   dkD  S r 	  rÊ  r!	  s     r:   rÌ  z-_meta_grouped_mm_common.<locals>.is_col_major…  s*   € ØŸ™›ˆJØ˜b‘> QÑ&Ò=¨:°b©>¸AÑ+=Ð=r<   c                  ó0   •— d‰ j                  «       dd  › �S )NzNExpected mat_a tensor to be row major in the last two dimensions, got strides rí  rÊ  )r	  s   €r:   r\   z)_meta_grouped_mm_common.<locals>.<lambda>‹  s#   ø€ ÐdÐej×eqÑeqÓesÐtvÐtwÐexÐdyÐz€ r<   c                  ó0   •— d‰ j                  «       dd  › �S )NzQExpected mat_b tensor to be column major in the last two dimensions, got strides rí  rÊ  )r	  s   €r:   r\   z)_meta_grouped_mm_common.<locals>.<lambda>�  s#   ø€ ÐgÐhm×htÑhtÓhvÐwyÐwzÐh{Ðg|Ð}€ r<   c                 óô  ‡ ‡‡‡— ‰j                  «       dz
  Šd‰j                  «       z  }‰j                  «       Š‰‰dz
     dk(  rG‰‰   t        d‰j                  ‰dz
     «      k\  r%t        j                  ‰‰   |z  dk(  ˆˆ ˆfd„«       y ‰‰   dk(  rJ‰‰dz
     t        d‰j                  ‰   «      k\  r(t        j                  ‰‰dz
     |z  dk(  ˆˆ ˆfd„«       y t        j                  dˆˆfd„«       y )Nr©   rŒ  r   c                  ó"   •— d‰› d‰ › d‰‰    › d�S )Nrø  ú stride along ú% dim to be multiple of 16 bytes, got r�  r@   ©Úend_dimÚmat_namer#	  s   €€€r:   r\   zF_meta_grouped_mm_common.<locals>.check_valid_strides.<locals>.<lambda>›  s)   ø€ ˜) H :¨^¸G¸9ÐDiÐjtÐu|Ñj}Ði~Ð~ð  A€ r<   c                  ó.   •— d‰› d‰ dz
  › d‰‰ dz
     › d�S )Nrø  r)	  r©   r*	  r�  r@   r+	  s   €€€r:   r\   zF_meta_grouped_mm_common.<locals>.check_valid_strides.<locals>.<lambda>¢  sK   ø€ ˜) H :¨^¸GÀa¹K¸=ÐHmÐnxð  zAð  DEñ  zEñ  oFð  nGð  GHð  I€ r<   Fc                  ó*   •— d‰› d‰ j                   › d�S )NzInvalid strides/sizes, got z for strides and z for sizes.rË   r!	  s   €€r:   r\   zF_meta_grouped_mm_common.<locals>.check_valid_strides.<locals>.<lambda>§  s!   ø€ Ð5°j°\ÐARÐSV×S\ÑS\ÐR]Ð]hÐi€ r<   )r}   Úelement_sizerÃ   r¯   r�   rM   r^   )r-	  r"	  r	  r,	  r#	  s   `` @@r:   Úcheck_valid_stridesz4_meta_grouped_mm_common.<locals>.check_valid_strides’  s   û€ Ø—'‘'“)˜a‘-ˆØ˜#×*Ñ*Ó,Ñ,ˆ	Ø—Z‘Z“\ˆ
Ø�g ‘kÑ" aÒ'¨J°wÑ,?Ä3Øˆs�y‰y˜ 1™Ñ%óD
ò -
ô �L‰LØ˜7Ñ# iÑ/°1Ñ4õ Aõð ˜Ñ  AÒ%¨*°W¸q±[Ñ*AÄSØˆs�y‰y˜Ñ!óF
ò +
ô �L‰LØ˜7 Q™;Ñ'¨)Ñ3°qÑ8õ Iõô
 �L‰LØÜiõr<   r	  r	  c                   ó   — y)NzBoth scale_a and scale_b must be float (fp32) tensors, but got scale_a.dtype={scale_a.dtype} and scale_b.dtype={scale_b.dtype}.r@   r@   r<   r:   r\   z)_meta_grouped_mm_common.<locals>.<lambda>°  rd   r<   r©   c                 óè  ‡ ‡‡‡‡— ‰j                  «       dk(  r�t        j                  ‰j                  «       dk(  ˆˆ fd„«       t        j                  ‰j                  «       ˆ fd„«       t        j                  ‰j                  d   ‰j                  ‰   ‰z  k(  ˆˆˆˆ ˆfd„«       y t        j                  ‰j                  «       dk(  ˆˆ fd„«       t        j                  ‰j                  d«      dk(  ˆ fd„«       t        j                  ‰j                  d   ‰j                  d   k(  ˆˆˆ fd	„«       t        j                  ‰j                  d   ‰j                  d‰z      k(  ˆˆˆ ˆfd
„«       y )Nr%  r©   c                  ó2   •— d‰› d‰ j                  «       › d�S )Nrø  z to be 1D tensor, but got ú	D tensor.r“   ©rœ  Ú
scale_names   €€r:   r\   z>_meta_grouped_mm_common.<locals>.check_scale.<locals>.<lambda>·  ó   ø€ ˜i¨
 |Ð3MÈeÏiÉiËkÈ]ÐZcÐd€ r<   c                  ó   •— d‰ › d�S )Nrø  z to be contiguous.r@   ©r7	  s   €r:   r\   z>_meta_grouped_mm_common.<locals>.check_scale.<locals>.<lambda>»  s   ø€ ˜i¨
 |Ð3EÐF€ r<   r   c                  óV   •— d‰› d‰ j                   ‰   ‰z  › d‰j                   d   › d�S )Nrø  z	 to have rÜ  r   z
 elements.rË   )r"	  rœ  Úscale_multiplierr7	  Ú
scaled_dims   €€€€€r:   r\   z>_meta_grouped_mm_common.<locals>.check_scale.<locals>.<lambda>¿  sW   ø€ ˜i¨
 |°9¸S¿Y¹YÀzÑ=RÐUeÑ=eÐ<fÐfuÐv{÷  wBñ  wBð  CDñ  wEð  vFð  FPð  Q€ r<   c                  ó2   •— d‰› d‰ j                  «       › d�S )Nrø  z to be 2D tensor, but got r5	  r“   r6	  s   €€r:   r\   z>_meta_grouped_mm_common.<locals>.check_scale.<locals>.<lambda>Ä  r8	  r<   c                  ó   •— d‰ › d�S )Nrø  z( to be contiguous in the last dimension.r@   r:	  s   €r:   r\   z>_meta_grouped_mm_common.<locals>.check_scale.<locals>.<lambda>È  s   ø€ ˜i¨
 |Ð3[Ð\€ r<   c                  óP   •— d‰› d‰ j                   d   › d‰j                   d   › d�S )Nrø  z batch dimension to be r   ú, got r�  rË   )r"	  rœ  r7	  s   €€€r:   r\   z>_meta_grouped_mm_common.<locals>.check_scale.<locals>.<lambda>Ì  s6   ø€ ˜i¨
 |Ð3JÈ3Ï9É9ÐUVÉ<È.ÐX^Ð_d×_jÑ_jÐklÑ_mÐ^nÐnoÐp€ r<   c                  óV   •— d‰› d‰ j                   d‰z      › d‰j                   d   › d�S )Nrø  z non-batch dimension to be r©   rA	  r�  rË   )r"	  rœ  r7	  r=	  s   €€€€r:   r\   z>_meta_grouped_mm_common.<locals>.check_scale.<locals>.<lambda>Ð  sE   ø€ ˜i¨
 |Ð3NÈsÏyÉyÐYZÐ]gÑYgÑOhÐNiÐioÐpu×p{Ñp{Ð|}Ñp~Ðoð  @Að  B€ r<   )r}   rM   r^   r   r�   rÃ   )r7	  rœ  r"	  r=	  r<	  s   `````r:   Úcheck_scalez,_meta_grouped_mm_common.<locals>.check_scale³  s  ü€ Ø�w‰w‹y˜AŠ~Ü—‘Ø—I‘I“K 1Ñ$Üdôô —‘Ø×'Ñ'Ó)ÛFôô —‘Ø—K‘K ‘N c§i¡i°
Ñ&;Ð>NÑ&NÑN÷ Qõô
 —‘Ø—I‘I“K 1Ñ$Üdôô —‘Ø—L‘L “O qÑ(Û\ôô —‘Ø—K‘K ‘N c§i¡i°¡lÑ2Ýpôô —‘Ø—K‘K ‘N c§i¡i°°J±Ñ&?Ñ?ö Bõr<   r   r»  r¼  c                   ó   — y)Nz:Scale result tensor provided, but it is not supported yet.r@   r@   r<   r:   r\   z)_meta_grouped_mm_common.<locals>.<lambda>Û  rd   r<   c                  óN   •— d‰ j                  «       › d‰j                  «       › d�S )Nz/Offsets tensor not provided, but is needed for zD/zD multiplicand layouts.r“   r	  s   €€r:   r\   z)_meta_grouped_mm_common.<locals>.<lambda>á  s*   ø€ ÐEÀeÇiÁiÃkÀ]ÐRTÐUZ×U^ÑU^ÓU`ÐTaÐaxÐy€ r<   c                  ó,   •— d‰ j                  «       › d�S )Nz.Offsets tensor must be 1D, but got offs.dim()=r�  r“   ©r	  s   €r:   r\   z)_meta_grouped_mm_common.<locals>.<lambda>æ  s   ø€ ÐHÈÏÉËÈÐTUÐV€ r<   c                  ó$   •— d‰ j                   › d�S )Nz7Offsets tensor must be integer (int32) tensor, but got r�  r‡   rG	  s   €r:   r\   z)_meta_grouped_mm_common.<locals>.<lambda>ê  s   ø€ ÐQÐRV×R\ÑR\ÐQ]Ð]^Ð_€ r<   c                   ó   — y)NzJOffsets tensor provided, but is not needed for 3D/3D multiplicand layouts.r@   r@   r<   r:   r\   z)_meta_grouped_mm_common.<locals>.<lambda>ï  rd   r<   c                   ó   — y)Nz2Bias tensor provided, but it is not supported yet.r@   r@   r<   r:   r\   z)_meta_grouped_mm_common.<locals>.<lambda>ô  rd   r<   c                   ó   — y)Nz4If output dtype provided, it must be torch.bfloat16.r@   r@   r<   r:   r\   z)_meta_grouped_mm_common.<locals>.<lambda>ù  rd   r<   r  )
rM   r^   rU   r�  r�  r}   r�  r�   ru  r	  )r	  r	  r»  r¼  r	  ro  r½  rq  r¾  ÚscaledÚmat_a_is_2dÚmat_b_is_2drÊ  rÌ  r1	  rC	  r<	  s   ``  `            r:   Ú_meta_grouped_mm_commonrO	  W  s½  ú€ ô 
‡L�LØ	�Dˆ˜g¨˜oÑ.Ù>ôð ˜DÐ Ò8 W°DÐ%8€Fñ Ü�‰Ø�K‰Kœ5×.Ñ.Ñ.ÒU°5·;±;Ä%×BUÑBUÑ3UÜxõ	
ô
 	�‰Ø�K‰Kœ5Ÿ>™>Ñ)ÒK¨e¯k©k¼U¿^¹^Ñ.KÜtô	
ô
 
‡L�LØ�	‰	‹�vÐÒ7 %§)¡)£+°Ð"7Üqôð
 —)‘)“+ Ñ"€KØ—)‘)“+ Ñ"€Káò	>ò	>ô 	�‰Ù˜ÓÛzô	
ô 	�‰Ù˜ÓÛ}ô	
ò
ñ0 ˜ Ô'Ù˜ Ô'àÐ˜wÐ2Ü�‰Ø�M‰MœUŸ]™]Ñ*ÒM¨w¯}©}ÄÇÁÑ/Mñ Vô	
ó
	ðB "Ð-±+Á+ˆD�J‰J�qŠMÐSTð 	ñ 	�I˜w¨¨qÐ2BÔCÙ�I˜w¨¨qÐ2BÔCä�‰Ø˜DÐ ÙPô	
ñ
 ‘kÜ�‰Ø˜ÐÜyô	
ð ÐÜ�L‰LØ—‘“
˜a‘ÛVôô �L‰LØ—
‘
œeŸk™kÑ)Û_õô
 	�‰Ø�DˆLÙ`ô	
ô
 
‡L�LØ�ˆÙDôô
 
‡L�LØ�TÐÒ8˜Y¬%¯.©.Ñ8ÙFôô
 ,¨E°5¸$À	ÓJÐJr<   c           
      ó(   — t        | |d d ||d |¬«      S )N)r»  r¼  r	  ro  r½  rq  ©rO	  )r	  r	  r	  ro  rq  s        r:   Ú
grouped_mmrR	  ÿ  s)   € ô #ØØØØØØØØô	ð 	r<   c	                 ó*   — t        | ||||||||¬«	      S )N)r»  r¼  r	  ro  r½  rq  r¾  rQ	  )	r	  r	  r»  r¼  r	  ro  r½  rq  r¾  s	            r:   Úmeta_scaled_grouped_mmrT	    s,   € ô #ØØØØØØØ!ØØ%ô
ð 
r<   rJ   Úhalf_to_floatc                 ó  — |r| j                   t        j                  k(  sJ ‚t        j                  | t        j
                  j                  ¬«      \  }}|s|n|}t        j                  | |t        j                  ¬«      }|S )NrÄ  r¹  )	rU   rM   rO   rE   r   r   rF   rè   ré   )rJ   r}   rU	  Úcomputation_dtyperI   rÄ  s         r:   ÚsoftmaxrX	  -  so   € ñ Ø�w‰wœ%Ÿ*™*Ò$Ð$Ð$Ü&+×&>Ñ&>Ø	œu×DÑD×LÑLô'Ñ#Ð�|ñ (5‘<Ð:K€LÜ
×
Ñ
˜1 LÄ×@WÑ@WÔ
X€CØ€Jr<   c           	      ób  ‡‡‡‡‡	‡
— t        j                  t        ‰«      dz  dk(  ˆfd„«       | j                  Št        ‰«      Š	t        ‰«      dz  }‰	|z
  Št        j                  ‰	|k\  ˆ	ˆfd„«       t	        ‰d ‰ «      }t        |«      D ]^  Št        ‰«      ‰dz   dz  z
  Š
‰‰‰z      ‰‰
   z   ‰‰
dz      z   }t        j                  |dk\  ˆˆˆˆˆ
fd„«       |j                  |«       Œ` t        j                  || j                  | j                  | j                  t        | «      ¬«      S )Nr%  r   c                  ó    •— dt        ‰ «      › �S )Nz1Length of pad must be even but instead it equals rõ  rd  s   €r:   r\   z'_constant_pad_nd_meta.<locals>.<lambda>A  s   ø€ ÐCÄCÈÃHÀ:ÐN€ r<   c                  ó(   •— dt        ‰«      › d‰ › d�S )Nz`Length of pad should be no more than twice the number of dimensions of the input. Pad length is z while the input has z dimensions.rõ  )Úl_inpre  s   €€r:   r\   z'_constant_pad_nd_meta.<locals>.<lambda>K  s"   ø€ ð 2Ü25°c³(°Ð;PØˆ'�ð€ r<   r©   c            	      óF   •— d‰‰‰ z      › d‰‰   › d‰‰dz      › d‰‰ z   › d�	S )NzThe input size z, plus negative padding r—   r©   zG resulted in a negative output size, which is invalid. Check dimension z of your input.r@   )r  r0  Úl_diffre  Úpad_idxs   €€€€€r:   r\   z'_constant_pad_nd_meta.<locals>.<lambda>V  sG   ø€ �o k°&¸1±*Ñ&=Ð%>Ð>VØ�7‰|ˆn˜E # g°¡kÑ"2Ð!3ð 41Ø17¸!±°¸OðM€ r<   )rU   rz   r|   rå   )rM   r^   r«   r�   rü   r®   rý   r‚   rU   rz   r|   r"   )r  re  r4  Úl_padr²   Únew_dimr  r0  r^	  r\	  r_	  s    `    @@@@@r:   Ú_constant_pad_nd_metarb	  ;  s&  ý€ ô 
‡L�LÜˆC‹�1‰˜ÑÛNôð
 —+‘+€KÜ�Ó€EÜ�‹H˜‰M€EØ�U‰]€Fä	‡L�LØ�‰ô	ôô �[  &Ð)Ó*€IÜ�5‹\ò 	"ˆÜ�c“(˜q 1™u¨™kÑ*ˆØ˜f q™jÑ)¨C°©LÑ8¸3¸wÈ¹{Ñ;KÑKˆÜ�‰Ø�q‰L÷Mô	
ð 	×Ñ˜Õ!ð	"ô �;‰;ØØ�k‰kØ�|‰|Ø×)Ñ)Ü+¨EÓ2ôð r<   rË  r×  rØ  c                 ó  — | j                  «       dk(  sJ d«       ‚| j                  }|j                  }|j                  dk(  r|d   f}n$|j                  dk(  r|d   |d   f}n
g |¢|d   ‘­}| j                  }| j	                  ||¬«      S )Nr%  z'weight' must be 2-Dr   r©   r‡   )r}   r�   r›   rU   rŽ   )	rm  rí   rË  r×  rØ  Úweight_shapeÚindices_shaperž   rq  s	            r:   Ú	embeddingrf	  e  s™   € ð �:‰:‹<˜1ÒÐ4Ð4Ó4ÐØ—<‘<€LØ—M‘M€Mà‡|�|�qÒØ&2°1¡oÐ%7‰	Ø	�‰˜Ò	Ø" 1Ñ% |°A¡Ð7‰	à5�mÐ5 \°!¡_Ñ5ˆ	à—‘€IØ×Ñ˜I¨YÐÓ7Ð7r<   Ú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¤  rg	  rh	  r  r¡  r•  s          r:   Ú$meta__jagged_to_padded_dense_forwardrj	  }  sv   € ô ˆw‹<˜1ÒÐÐÜˆ{Ó˜qÒ Ð Ð à�‰
×Ñ˜Ñ˜aÑ€AØ�A‰€AØ�qÐ,˜6Ÿ<™<¨¨Ð+Ñ,€LØ×Ñ˜LÓ)Ð)r<   c                 óB   — t        | «      t        «       d„ «       «       }|S )Nc                 ó8   — t        | t        j                  ¬«      S r  ©rK   r   rÅ  rF  s    r:   Ú_fz)_create_unary_float_meta_func.<locals>._f�  s   € ô  ØÔ=×JÑJô
ð 	
r<   ©rA   r(   ©Úfuncrn	  s     r:   Ú_create_unary_float_meta_funcrr	  Ž  ó*   € Ü�4ÓÜƒ]ñ
ó ó ð
ð
 €Ir<   c                 óB   — t        | «      t        «       d„ «       «       }|S )Nc                 ó:   — t        | |t        j                  ¬«      S r  rm	  )rJ   rY  s     r:   rn	  z*_create_binary_float_meta_func.<locals>._fš  s   € ô  ØˆqÔ!@×!MÑ!Mô
ð 	
r<   ro	  rp	  s     r:   Ú_create_binary_float_meta_funcrv	  ™  rs	  r<   c                 ó˜   ‡ — t        ‰ «      ˆ fd„«       }‰ j                  › d�}||_         t        t        t        |«      «      |«      }|S )Nc                 ó`   •—  ‰| g|¢­i |¤Ž}t        | j                  |j                  «       | S r7   r3  )r�   rG   r  r  r9   s       €r:   Ú_fnz#_register_inplace_meta.<locals>._fn¾  s.   ø€ á�Ð'˜Ò' Ñ'ˆÜ §
¡
¨C¯I©IÔ6Øˆr<   rH   )r   rr   rA   Úgetattrr/   )r9   ry	  Úinplace_names   `  r:   Ú_register_inplace_metar|	  ½  sO   ø€ Ü
ˆ2ƒYóó ðð
 —k‘k�] !Ð$€LØ€C„LØ
4Œ-œ¤ lÓ3Ó
4°SÓ
9€Cà€Jr<   c                 óf  ‡ ‡‡— t        j                  ‰ j                  ‰j                  k(  ˆˆ fd„«       ‰ ‰g}t        ‰t        «      rQ‰j
                  dk7  r1t        j                  ‰ j                  ‰j                  k(  ˆ ˆfd„«       |j                  ‰«       t        |dt        j                  iŽS )Nc                  ó<   •— d‰j                   › d‰ j                   › �S )Nrž  z for `end`, but got dtype r‡   )rs   rt   s   €€r:   r\   zlerp.<locals>.<lambda>Ð  s   ø€ �/ %§+¡+ Ð.HÈÏÉÈÐT€ r<   r   c                  ó<   •— d‰ j                   › d‰j                   › �S )Nrž  z for `weight`, but got dtype r‡   )rt   rm  s   €€r:   r\   zlerp.<locals>.<lambda>×  s!   ø€ ˜/¨%¯+©+¨Ð6SÐTZ×T`ÑT`ÐSaÐb€ r<   rB   )
rM   r^   rU   rg   r#   r›   rý   rK   r   rF   )rt   rs   rm  rG   s   ``` r:   Úlerpr€	  Ë  s�   ú€ ô 
‡L�LØ�‰�s—y‘yÑ ÜTôð �3ˆ<€DÜ�&œ*Ô%Ø�;‰;˜!ÒÜ�L‰LØ—‘˜vŸ|™|Ñ+Übôð 	�‰�FÔÜØ	ðÜ=×EÑEñð r<   )r4  c                ó<   — t        | ||t        j                  ¬«      S r  r	  ©r  Útensor1Útensor2r4  s       r:   Úaddcmulr…	  ß  s!   € ô Øˆw˜Ô0O×0WÑ0Wôð r<   c                óè   — t        j                  t        j                  |j                  «      xr t        j                  |j                  «       d„ «       t        | ||t        j                  ¬«      S )Nc                   ó   — y)N)zFInteger division with addcdiv is no longer supported, and in a future zErelease addcdiv will perform a true division of tensor1 and tensor2. z4The historic addcdiv behavior can be implemented as zA(input + value * torch.trunc(tensor1 / tensor2)).to(input.dtype) zfor integer inputs and as z6(input + value * tensor1 / tensor2) for float inputs. z?The future addcdiv behavior is just the latter implementation: z4(input + value * tensor1 / tensor2), for all dtypes.r@   r@   r<   r:   r\   zaddcdiv.<locals>.<lambda>ï  rd   r<   r  )rM   r^   rE   rg  rU   rK   r   rF   r‚	  s       r:   Úaddcdivrˆ	  ç  sb   € ô 
‡L�Lä×"Ñ" 7§=¡=Ó1ò 6Ü×&Ñ& w§}¡}Ó5ð	
ñ		
ôô  Øˆw˜Ô0O×0WÑ0Wôð 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)rw   Úpost_autogradÚpre_autogradÚCompositeImplicitAutogradrw   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   Úitemsrg   rM   Ú_opsÚHigherOrderOperatorr   Úpy_implÚ_CÚDispatchKeyr1   Ú%_dispatch_has_kernel_for_dispatch_keyrñ  rZ  Ú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_tablerq   ÚregistryÚopoÚop_overloadr9   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<   )F)Tr•  r7   )NNNFr   r©   r’   rŸ  rø  )r	  )r  T)FF)TT)r‡  )FTN)TFF)TF)r%  )g      à?N)r3   Ústr)r@   rÛ  r  F)r@   rÛ  FTN)Fr   FNFr’   )NF)r’   F)g      À?gUUUUUUÕ?FN)NNNNN)r   NNr©   )NNF)ç        FFN)Nr¨	  FFN)r¨	  FNN)r¨	  FN)FN)FNNNN)NNNF)Nr’   FNN)NNNN)r’   TT)NNr   N)éd   r   r   )r’   )NNNNF)r’   FF)r¨	  (¢  r´  r¬   Úcollections.abcr   Úenumr   Ú	functoolsr   r   Útypingr   r   r	   r
   Útyping_extensionsr   rM   Útorch._prims_commonrÎ  rE   r   r   r   Útorch._decompr   r   r   r   Ú
torch._opsr   Útorch._primsr   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   Útorch._prims_common.wrappersr$   r%   r&   r'   r(   ræ  r)   r*   Útorch.fx.experimentalr+   r‚  Útorch.utilsr,   r=   r-   r.   Úopsr/   ÚlibraryÚLibraryr¡	  r®   rÔ  rÖ  rÕ  rA   rK   rW   r`   ÚlinspaceÚlogspacerÕ  r„   Útaker]  r  r‘   rŸ   rº   rÅ   r×   rD  râ   rë   ÚcummaxÚcumminrò   rõ   r  rü   r  r  r  Ú_fft_c2cr#  r&  r'  Ú_fft_r2cr9  ÚrandpermÚgenerator_outr>  r‹   rC  ÚrandintrL  rI  Úlow_outrO  ÚrandrQ  Ú_fft_c2rrV  rÉ  ra  rh  Ú
unsqueeze_rl  Ú_sparse_semi_structured_linearr§	  rU   rx  Ú_sparse_semi_structured_mmr~  Ú_sparse_semi_structured_addmmr‚  Ú_cslt_sparse_mmr–  Úindex_reducerœ  Úindex_reduce_rž  Úindex_selectr¢  Úsegment_reducer¯  r¯   Ú	unary_outr³  r}   r¼  r.  r¿  rÁ  rÊ  rÆ  rË  Ú_assert_asyncrÎ  rÞ   rÒ  Ú_printrÔ  Ú_make_dep_tokenrØ  rÝ  Ú_functional_sym_constrain_rangerâ  ræ  Ú(_functional_sym_constrain_range_for_sizerè  Ú_functional_assert_asyncrê  ræ   rú  rç   r  r  r  r  Ú_linalg_eighr  r   Ú_linalg_eigvalsÚlinalg_eigvalsr$  Ú
linalg_eigr'  r+  r-  r3  r8  r<  rB  rT  Úlinalg_inv_exrW  Úlinalg_ldl_factor_exr]   r]  Úlinalg_ldl_solverk  Ú	linalg_lurq  Úlinalg_lu_factor_exru  Úlinalg_lu_solver~  Ú	lu_unpackr„  r�  Ú	linalg_qrr”  r˜  r•  Ú_linalg_svdr¢  rh  r4  r²  rÆ  Úlinalg_solve_triangularrÍ  rÓ  rÜ  Ú_linalg_detrß  rò  rý  r  Úreflection_pad1dr  Úreplication_pad1dr  r*  Úreflection_pad1d_backwardr/  Úreplication_pad1d_backwardr1  rA  Úreflection_pad2drC  Úreplication_pad2drF  Úreflection_pad2d_backwardr+  Úreplication_pad2d_backwardrM  r[  Úreflection_pad3dr]  Úreplication_pad3dr`  Úreflection_pad3d_backwardÚreplication_pad3d_backwardrg  Ú_pdist_forwardrQ   rk  Ú_pdist_backwardrq  Úbaddbmmrˆ  Ú	bernoullir‹  Ú
bernoulli_rŽ  rh  r‘  Úpoissonr”  Ú_fused_moving_avg_obs_fq_helperr¥  Úmmr®  r¹  r-  rË  rÒ  Úmiopen_batch_normrà  Úconvolutionrè  r˜	  Ú_has_mkldnnrœ	  ré  Ú_convolution_pointwiserð  Ú_linear_pointwiserô  Úhas_mklrž	  rõ  Ú_mkl_linearrù  rŸ	  rú  Úqconv2d_pointwiseÚqconv_pointwiser  Úbinaryr  Úqlinear_pointwisere  r  Úbinary_tensorr  Úlinear_dynamic_fp16Úlinear_relu_dynamic_fp16r  r 	  r  Ú
max_pool2dr)  Úint4mm_packed_weight_cpur1  r6  Ú
avg_pool2dr[  r`  Úavg_pool2d_backwardrh  Ú
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Æ  rh   rÊ  rÍ  rÓ  r‰   Ú_unsafe_indexrñ  Úconvolution_backwardrý  Úaddbmmr  Úrandint_liker  Ú_fused_adam_Ú_fused_adamw_r  Ú_fused_adamr%  Ú_int_mmr.  Ú_convert_weight_to_int4packr:  Ú#_convert_weight_to_int4pack_for_cpur?  Ú_weight_int4pack_mmrJ  Ú_weight_int4pack_mm_for_cpurP  rY  r[  rƒ  Ú_dyn_quant_pack_4bit_weightr�  Ú_dyn_quant_matmul_4bitr•  Ú_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"  Ú	_add_relur$  Úrrelu_with_noiser)  Úrrelu_with_noise_functionalr+  Úrrelu_with_noise_r-  Ú	index_putÚ_unsafe_index_putr1  Úmasked_fill_r5  Ú_masked_scaler8  Úmasked_scatter_r<  Úmasked_scatterr>  Úmasked_scatter_backwardr@  Ú
index_put_rB  ÚaliasrE  rR  ÚbmmrU  rW  r[  r`  rO  rP  rw  r„  r‰  r#  Ú max_pool2d_with_indices_backwardr‘  Úmax_pool2d_with_indicesr“  Úfractional_max_pool2dr¥  Úmax_pool3d_with_indicesr²  Ú max_pool3d_with_indices_backwardr¹  rÃ  rÅ  rÏ  Úgrid_sampler_2d_backwardr×  rÝ  rß  râ  r¶  Úonesrð  Úzerosró  rå  rú  Úselect_scatterrþ  Úslice_scatterr  rñ   r  r  Úgatherr  r%  r,  r.  r8  r;  Úscatter_addr@  Úscatter_add_rC  r:  r^  r4  Úvalue_reducerG  Úscatter_rI  Ú#_scaled_dot_product_flash_attentionra  rj  Ú#_scaled_dot_product_cudnn_attentionrt  Ú0_scaled_dot_product_fused_attention_overrideablerw  Ú,_scaled_dot_product_flash_attention_backwardr‚  Ú+_scaled_dot_product_flash_attention_for_cpur…  Ú4_scaled_dot_product_flash_attention_for_cpu_backwardr‹  Ú'_scaled_dot_product_efficient_attentionr�  Ú0_scaled_dot_product_efficient_attention_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_cellrE  r\  rf  rk  rn  rp  Úargminrq  rt  Útopkr{  Ú_segment_reduce_backwardr  Úkthvaluer„  ré   r–  r“  rš  r�  Úpixel_shuffler¤  r¶  Ú	bucketizeÚ
Tensor_outr»  ÚhistcrÆ  Ú_upsample_bilinear2d_aaÚ_upsample_bicubic2d_aarÊ  Ú _upsample_bilinear2d_aa_backwardrÎ  rÕ  rÚ  rÊ  rá  Úsearchsortedré  rî  Úembedding_dense_backwardrñ  Ú_embedding_bag_backwardrö  Ú_embedding_bag_dense_backwardrô  Ú*_embedding_bag_per_sample_weights_backwardrý  Úisinr	  Ú	polygammar	  Ú_local_scalar_denser		  r	  r	  r	  rO	  Ú_grouped_mmrR	  Ú_scaled_grouped_mmrT	  Ú_softmaxrX	  Úconstant_pad_ndrb	  rf	  Ú_jagged_to_padded_dense_forwardrj	  rr	  rv	  Úspecial_airy_aiÚspecial_bessel_y0Úspecial_bessel_y1Úspecial_modified_bessel_i0Úspecial_modified_bessel_i1Úspecial_modified_bessel_k0Úspecial_modified_bessel_k1Ú!special_scaled_modified_bessel_k0Ú!special_scaled_modified_bessel_k1Úspecial_chebyshev_polynomial_tÚspecial_chebyshev_polynomial_uÚspecial_chebyshev_polynomial_vÚspecial_chebyshev_polynomial_wÚ&special_shifted_chebyshev_polynomial_tÚ&special_shifted_chebyshev_polynomial_uÚ&special_shifted_chebyshev_polynomial_vÚ&special_shifted_chebyshev_polynomial_wÚspecial_hermite_polynomial_hÚspecial_hermite_polynomial_heÚspecial_laguerre_polynomial_lÚspecial_legendre_polynomial_pr|	  r€	  r…	  rˆ	  Úlerp_Úaddcmul_Úaddcdiv_Útorch._refs.nn.functionalÚtorch._refs.specialr¦	  r@   r<   r:   ú<module>r¦
     sBH  ðã Û Ý $Ý ß #ß 5Ó 5Ý 'ã Ý #ß +Ñ +÷ó õ "÷ñ ÷
÷ ÷ õ ÷õ ÷ <Ý 7Ý )ñ ˆTƒ]€Ùˆtƒ_€à‡y�y‡~�~€à*/¯-©-×*?Ñ*?ÀÈÐPVÓ*WÐ 'Ù % a£Ñ €ˆ)�Xð
˜ 8¨B°¨FÑ#3Ð"4°h¸rÀ2¸vÑ6FÐ"FÑGó 
ðà3óò(*òñ �—‘˜tŸ}™}Ð-Ó.Ùƒð
 
Ø
ØØ�=‰=ØØò5ó ó /ð5ñp �—	‘	×!Ñ! 4§9¡9§=¡=Ð1Ó2Ùƒñ'ó ó 3ð'ñ �×!Ñ!×)Ñ)¨4×+<Ñ+<×+@Ñ+@ÐAÓBÙƒØ%'ó %ó ó Cð%ô&FòRôAñH ˆt�y‰y× Ñ Ó!ñMó "ðMñ ˆt×%Ñ%Ó&ÙƒñIó ó 'ðIñ Ø	‡[�[×Ñ˜$Ÿ+™+Ÿ/™/¨4¯;©;×+>Ñ+>ÀÇÁÇÁÐPóñ ˆX�yÓ!ñó "óðñ �×!Ñ!×)Ñ)¨4×+<Ñ+<×+@Ñ+@ÐAÓBÙƒñIó ó CðIò3òl�Vð  $ s¡)ð ¸4ó ñ �—‘×%Ñ% t§}¡}×'8Ñ'8Ð9Ó:ÙƒñKó ó ;ðKð €ð $ s¡)ó ñ �—‘×%Ñ% t§}¡}×'8Ñ'8Ð9Ó:Ùƒñ8
ó ó ;ð8
ñv ˆt�}‰}×*Ñ*Ó+Ø"&ó 3ó ,ð3ñ ˆt�}‰}×$Ñ$Ó%ð �*‰*ØØØó
ó &ð
ñ �—‘×$Ñ$ d§l¡l×&6Ñ&6Ð7Ó8Ùƒð
 �*‰*ØØØóó ó 9ðñ& �—‘× Ñ  $§,¡,×"6Ñ"6Ð7Ó8Ùƒð �*‰*ØØØóó ó 9ðñ& �—	‘	×!Ñ! 4§9¡9§=¡=Ð1Ó2ÙƒØ%)°$¸tÐPTó ó ó 3ðñ �—‘×%Ñ% t§}¡}×'8Ñ'8Ð9Ó:Ùƒð$D�vð $D D¨¡Ið $D¸cð $DÈCò $Dó ó ;ð$DñN ˆt�z‰z×!Ñ!Ó"óó #ðò0(ñ ˆt�‰×&Ñ&Ó'ñó (ðñ ˆt×2Ñ2Ó3ð
 "Ø%)Ø'+òØðàðð ðð �6Ñ
ð	ð
 ˜c‘]ðð ˜ŸšÑ$òó 4ðñB ˆt×.Ò.Ó/ð
 (,ò	Ø
ðàðð ðð ˜ŸšÑ$ò	ó 0ðñ0 ˆt×1Ò1Ó2ð Ø	
Ø'+òØðà
ðð ðð ð	ð ˜ŸšÑ$òó 3ðñD ˆt×#Ò#Ó$ð "Ø"Ø'+Ø"ØØØò-<Ø—,‘,ð-<à�\‰\ð-<ð �6Ñ
ð-<ð �FÑð	-<ð
 ˜ŸšÑ$ð-<ð ð-<ð ð-<ð ð-<ð ò-<ó %ð-<ñ` ˆt× Ò ×(Ñ(Ó)ð ò	IØ
ð	Ià	ð	Ið ð	Ið �L‰Lð		Ið
 ð	Ið ð	Ið ò	Ió *ð	Iñ ˆt×!Ò!×)Ñ)Ó*ð ò	Ø
ð	à	ð	ð ð	ð �L‰Lð		ð
 ð	ð ð	ð ò	ó +ð	ñ ƒÙˆt× Ò ×(Ñ(Ó)ñ'ó *ó ð'ñ ˆt×"Ò"×*Ñ*Ó+ð
 !%Ø $Ø $ØØØò WØ
ð Wàð Wð �fÑð	 Wð
 �fÑð Wð �fÑð Wð ð Wð ð Wð ò Wó ,ð WñF �—’× Ñ  $§(¢(×"4Ò"4Ð5Ó6Ùƒñó ó 7ðñ ˆt�xŠx�|Š|Óóó ðñ �—’× Ñ  $§(¢(×"4Ò"4Ð5Ó6Ùƒñó ó 7ðñ ˆt�xŠx�|Š|Óóó ðñ ˆt�zŠz×!Ñ!Ó"ñ6ó #ð6ñ ˆt�zŠz�~‰~Óñ(ó ð(ñ
 ˆt×!Ò!×)Ñ)Ó*ñó +ðñ ˆt×!Ò!×%Ò%Ó&ñó 'ðñ ˆt�{Š{×"Ñ"Ó#ñó $ðñ ˆt×#Ò#×+Ñ+Ó,ð ØØØØó)ó -ð)ñ ˆt×'Ò'×/Ñ/Ó0ó,ó 1ð,ñ ˆt×3Ò3×;Ñ;Ó<óó =ðñ
 ˆt×0Ò0×8Ñ8Ó9ó6ó :ð6ñ& ˆt×<Ò<×DÑDÓEñó Fðñ
 ˆt×,Ò,×0Ò0Ó1ñó 2ðð
˜Fð ¨Có ð  ð  ¨Fð  ¸#ó  ðN (,ò
Øð
àð
ð !%ó
ò$�Vð  Sð °Có ð
˜ð 
 Fð 
°$ð 
Àó 
ð"  ò	Øðàðð ðð ó	ð�Có ñ �×!Ò!×)Ñ)¨4×+<Ò+<×+HÒ+HÐIÓJÙˆ]˜NÓ+ò˜ð  sð ¸Tò ó ,ó Kðñ" �×$Ò$×,Ñ,¨d×.AÒ.A×.EÑ.EÐFÓGÙƒðB ð B¨6ò Bó ó HðBñ �—’Ð Ó!Ùˆ]˜NÓ+ð	˜6ò 	ó ,ó "ð	ðQ ð Q¨Fó Qñ ˆt×*Ò*Ó+Ùƒð) ð )¨Fð )¸4ð )ÀFò )ó ó ,ð)ñ ˆt×"Ò"Ó#ÙƒòJ˜ð J Fð J°4ð JÀFò Jó ó $ðJñ ˆt�}Š}ÓÙƒò)�6ð ) $ð )°6ò )ó ó ð)ñ ˆt×$Ò$Ó%Ùƒò)˜6ð )¨$ð )¸6ò )ó ó &ð)ñ ˆt×&Ò&×.Ñ.Ó/ò˜&ð ¨ð ÀTò ó 0ðñ" Ø	×$Ò$×,Ñ,¨d×.MÒ.M×.QÑ.QÐRóñ ƒð. fð .°6ð .¸fò .ó óð.ñd ˆt×!Ò!×)Ñ)Ó*ò˜&ð °ò ó +ðñ �×)Ò)×1Ñ1°4×3LÒ3L×3PÑ3PÐQÓRÙˆT�8˜VÓ$ð Øò	Ø
ðð ðð ð	ð
 ˆ6�6˜6Ð!Ñ"òó %ó Sðñ& �×%Ò%×-Ñ-¨t×/DÒ/D×/HÑ/HÐIÓJÙƒð ò'Øð'àð'ð ð'ð
 ð'ð ò'ó ó Kð'ñT �—’×&Ñ&¨¯ª×(:Ñ(:Ð;Ó<ÙˆS�#�sÓØ/3ò �fð ¨ð ¸¸fÀfÈfÐ>TÑ8Uò ó ó =ðñ4 �×(Ò(×0Ñ0°$×2JÒ2J×2NÑ2NÐOÓPÙˆT�8˜VÓ$ð Øò	Øðð ðð ð	ð
 ˆ6�6˜6Ð!Ñ"òó %ó QðñD �×$Ò$×,Ñ,¨d×.BÒ.B×.FÑ.FÐGÓHÙƒð Øò4Øð4àð4ð ð4ð
 ð4ð ð4ð ò4ó ó Ið4ñn ˆt�~Š~ÓÙˆS�#�sÓð Øò	$Øð$àð$ð ð$ð ð	$ð
 ˆ6�6˜6Ð!Ñ"ò$ó ó ð$ðP˜ð   t¨T zÑ!2ó ñ* �—’×&Ñ&¨¯ª×(:Ñ(:Ð;Ó<ÙˆS�#Óò�fð  Cð ¸¸fÀf¸nÑ8Mò ó ó =ðñ4 �×$Ò$×,Ñ,¨d×.BÒ.B×.GÒ.GÐHÓIÙˆV�[ $¨Ó1ð'�vð ' %¨°¸ÀÐ(FÑ"Gò 'ó 2ó Jð'ñ$ ˆt×Ò×'Ñ'Ó(ð  ØØ ò	"Øð"àð"ð ð"ð �S‰Mò	"ó )ð"ðJ.Ø
ð.à
ð.ð ˆ4�‰9�d˜3‘iÐÑ ó.ð".Ø
ð.à
ð.ð �3‰-ð.ð ˆ6�6ˆ>Ñó	.ð( fð °Vð Àó ñ ˆt×$Ò$Ó%ð
 ØØ#ØØ#Ø!ò7Øð7àð7ð ð	7ð
 ð7ð �VÑð7ð 	�Ñð7ð �VÑð7ð �6Ñ
ð7ð ˆ6�6˜6 6Ð)Ñ*ò7ó &ð7ñt �×,Ò,×4Ñ4°d×6RÒ6R×6VÑ6VÐWÓXð ØØ òØðàðð ð	ð
 ðð ðð 
�&Ñ	ðð òó Yðñ2 ˆt×$Ò$Ó%ÙˆS�# 4Ô(ð ØØò+(Ø
ð+(àð+(ð ð+(ð ð	+(ð
 ð+(ð ˆ6�6ˆ>Ñò+(ó )ó &ð+(ñ^ ˆt×Ò×'Ñ'Ó(ñ
ó )ð
ñ ˆt�zŠzÓÙƒð
 ØòWØðWà	ðWð ðWð ð	Wð
 ðWð òWó ó ðWòtò>#;ñL ˆt×$Ò$Ó%Ùƒñ=ó ó &ð=ñ ˆt×%Ò%Ó&Ùƒñ>ó ó 'ð>ò(ñ< ˆt×-Ò-Ó.Ùˆ\ÓñSó ó /ðSñ ˆt×.Ò.Ó/Ùˆ\ÓñTó ó 0ðTò2Eñj ˆt×$Ò$Ó%Ùƒñ=ó ó &ð=ñ ˆt×%Ò%Ó&Ùƒñ>ó ó 'ð>ñ à×&Ò&×.Ñ.Ø×&Ò&×1Ò1Ø×'Ò'×/Ñ/Ø×'Ò'×2Ò2ð	óñ ˆ\Óñ&ó óð&ò:<Gñ~ ˆt×$Ò$Ó%Ùƒñ=ó ó &ð=ñ ˆt×%Ò%Ó&Ùƒñ>ó ó 'ð>ñ à×&Ò&×.Ñ.Ø×&Ò&×1Ò1Ø×'Ò'×/Ñ/Ø×'Ò'×2Ò2ð	óñ ˆ\Óñ$(ó óð$(ñN ˆt×"Ò"Ó#Ùƒò

˜fð 

¨ð 

°vò 

ó ó $ñ

ñ ˆt×#Ò#Ó$ÙƒðP˜vð P¨Vð P¸ð PÀfð PÐQWò Pó ó %ñPñ �—’×$Ñ$ d§l¢l×&6Ñ&6Ð7Ó8Ù˜ÔØ/0¸ó 'ó ó 9ñ'ñ: �—’×&Ñ&¨¯ª×(:Ñ(:Ð;Ó<ÙƒØ&*ó Ió ó =ñIñ
 ˆt�Š×$Ò$Ó%óó &ññ ˆt�~Š~×ÒÓ óIó !ñIñ
 �—’×$Ñ$ d§l¢l×&6Ñ&6Ð7Ó8Ùƒó"ó ó 9ñ"ñ ˆt×3Ò3×;Ñ;Ó<ð Øó*ó =ñ*ñ. ˆt�wŠwÓÙ˜Ôñ	ó ó ñ	óBõ
ð* 7;òiØ—,‘,ðià�L‰Lðið �$�s‘)˜S�.Ñ!ðið �4˜‘9˜c�>Ñ"ð	ið
 �D˜‘I˜s�NÑ#ðið ðið ðið ˜U 4¨¡9¨c >Ñ2Ñ3ôióXQñ ˆt×%Ò%×-Ñ-Ó.ð"$Ø—,‘,ð"$à�L‰Lð"$ð �5—<‘<Ñ
 ð"$ð ˜5Ÿ<™<Ñ(ð	"$ð
 ˜%Ÿ,™,Ñ'ð"$ð ð"$ð !&ð"$ð ò"$ó /ñ"$ñJ ˆt×Ò×'Ñ'Ó(ð)Ø—,‘,ð)à�L‰Lð)ð �,‰,ð)ð �‰Ið	)ð
 �#‰Yð)ð �3‰ið)ð ð)ð ˜‘Ið)ð ò)ó )ñ)ðX 	‡8‚8×ÔØ9>¿¹×9NÑ9NÙ�&˜&ó:Ñ6ñ �5—9‘9×#Ò#×:Ò:×BÑBÓCòó Dññ, �5—9‘9×#Ò#×5Ò5×=Ñ=Ó>òSó ?ñSð
 ‡x‚x×ÓØ:?¿-¹-×:OÑ:OÙ�6˜6ó;
Ñ7ñ 
�u—y‘y—}’}×0Ò0Ó	1ò	ó 
2ñ	ð
 :?¿¹×9NÑ9NÙ�&˜&ó:Ñ6ñ �5—9‘9×#Ò#×5Ò5×=Ñ=Ó>Ù�5—9‘9×#Ò#×3Ò3×;Ñ;Ó<ò"ó =ó ?ñ"ñH �5—9‘9×#Ò#×5Ò5×<Ò<Ó=òó >ññ6 �5—9‘9×#Ò#×5Ò5×=Ñ=Ó>Ù�5—9‘9×#Ò#×5Ò5×<Ò<Ó=òó >ó ?ññ, �5—9‘9×#Ò#×5Ò5×<Ò<Ó=Ù�5—9‘9×#Ò#×5Ò5×CÒCÓDòó Eó >ññ: �5—9‘9×#Ò#×7Ò7×?Ñ?Ó@Ù�5—9‘9×#Ò#×<Ò<×DÑDÓEò	ó Fó Añ	ð =B¿M¹M×<QÑ<QÙ�V˜Vó=Ñ9ñ �5—9‘9×&Ò&×1Ò1Ó2ð ØØØô
ó 3ñ
ñ8 �5—9‘9×&Ò&×?Ò?Ó@ò@ó Añ@ô(ñ ˆt�Š×&Ñ&Ó'ð ØØØØôMó (ñMôb(<ñX ˆt×'Ò'×/Ñ/Ó0òEó 1ñEñP ˆt�ŠÓÙƒð ØØØØôUJó ó  ñUJñp ˆt×'Ò'Ó(Ùˆ\ÓòK(ó ó )ñK(ñ\ ˆt×(Ò(×0Ñ0Ó1òó 2ññ" ˆt×(Ò(×0Ñ0Ó1ò@ó 2ñ@ñ ˆt×1Ò1×9Ñ9Ó:òFó ;ñFñ, ˆt×1Ò1Ó2Ùˆ\ÓòPó ó 3ñPñ
	
°6ð 	
ÀSõ 	
ñ ˆt×'Ò'Ó(ÙˆU�IÓò+ó ó )ñ+ñ\ ˆt×0Ò0Ó1Ùˆ\ÓòHó ó 2ñHñ$ ˆt×'Ò'Ó(ÙˆU�IÓò'ó ó )ñ'ñT ˆt×0Ò0Ó1Ùˆ\Óò(ó ó 2ñ(ñ
 ˆt×%Ò%×,Ñ,Ó-ô*ó .ñ*ñ �—’×$Ñ$ d§l¢l×&6Ñ&6Ð7Ó8ÙƒòTó ó 9ñTñ �×#Ò#×+Ñ+¨T×-@Ò-@×-DÑ-DÐEÓFÙƒØ46ô @¨có @ó ó Gñ@ñ �—	‘	—‘×&Ò&×.Ñ.°·	±	·±×0FÒ0F×0JÑ0JÐKÓLÙƒòó ó Mññ" �—
’
×!Ñ! 4×#5Ò#5×#<Ñ#<Ð=Ó>òó ?ññD �×)Ò)×1Ñ1Ð2Ó3òHó 4ñHñ: �—’×#Ñ# T§[¢[§_¡_Ð5Ó6Ù˜ÔØ./°qô 'ó ó 7ñ'ñ0 �×!Ò!×(Ñ(Ð)Ó*ò'ó +ñ'ñ �×!Ò!×)Ñ)¨4×+=Ò+=×+EÑ+EÐFÓGð  Øõ!
ó Hñ
ñ2 �× Ò ×(Ñ(Ð)Ó*ð  Øõ!!ó +ñ!ñH �—’ˆ~ÓÙƒòBó ó ñBñ* �×0Ò0Ð1Ó2òó 3ññ& �×8Ò8Ð9Ó:òó ;ññ �×(Ò(Ð)Ó*ò@ó +ñ@ñ �×0Ò0Ð1Ó2ò<ó 3ñ<ñ �×>Ò>Ð?Ó@ò<ó Añ<ñ"�3ñ "˜3ð " 3õ "ôjñZ �×0Ò0Ð1Ó2ðDØ!)¨&Ñ!1óDó 3ñDñ0 �×+Ò+Ð,Ó-ò;ó .ñ;ñ  �×(Ò(Ð)Ó*ò<ó +ñ<ñ ˆt×"Ò"×*Ñ*Ó+ò &ó ,ñ &ñF ˆt×#Ò#Ó$ÙƒòGó ó %ñGñ* ˆt×"Ò"×*Ñ*Ó+ð
 Ø	
ØØØØô`5ó ,ñ`5ñF ˆt×/Ò/×7Ñ7Ó8ò5ó 9ñ5ö
ñ �—’×#Ñ# T§[¢[§_¡_Ð5Ó6Ùƒñ=¸$õ =ó ó 7ñ=ñ �—’×#Ñ# T§^¢^×%;Ñ%;Ð<Ó=ò)ó >ñ)ñ à�Š�ŠØ�Š×ÒØ�Š×ÒØ�Š×!Ò!Ø�	Š	×ÑØ�	Š	×Òðó	ñ ˆX�yÓ!ôó "ó	ññ ˆt× Ò ×(Ñ(Ó)òó *ññ ˆt�{Š{×"Ñ"Ó#ò'ó $ñ'ñ& ˆt�zŠz×!Ñ!Ó"òó #ññ à�	Š	×ÒØ�	Š	×ÒØ�	Š	×ÑØ�	Š	×ÑØ×Ò×!Ñ!Ø×Ò× Ñ Ø×Ò×!Ñ!ðó
òó
ññ à�	Š	×ÒØ�	Š	×ÒØ�	Š	×ÑØ�	Š	×Ñð	óô*óñ*ñZ �—
’
×"Ñ" D§J¢J×$7Ò$7Ð8Ó9òó :ñô
ñ" �—’×&Ñ&¨¯ª×(>Ò(>Ð?Ó@òó Aññ �—’×&Ñ&¨¯ª×(>Ò(>Ð?Ó@òó Aññ ˆt�yŠy× Ñ Ó!ò&ó "ñ&ñ �—
’
×!Ñ! 4§:¢:×#4Ò#4Ð5Ó6òó 7ññ �—	’	× Ñ  $§)¢)×"2Ò"2Ð3Ó4ò"ó 5ñ"ñ ˆt�zŠz×!Ñ!Ó"òó #ññ ˆt�~Š~×$Ñ$Ó%Ùƒò¨Fó ó ó &ññ �×%Ò%Ð&Ó'ÙƒàRVô"ó ó (ñ"ñ �×0Ò0Ð1Ó2àRVô;ó 3ñ;ñ �×&Ò&Ð'Ó(àKOôó )ññ �—’×&Ñ&¨×(>Ò(>×(FÑ(FÐGÓHô"ó Iñ"ñ ˆt× Ò ×'Ò'Ó(òó )ññ
 ˆt×!Ò!×)Ñ)Ó*òó +ññ ˆt×#Ò#Ó$ò	ó %ñ	ñ ˆt×"Ò"Ó#Ùƒò6ó ó $ñ6ñ ˆt×+Ò+Ó,ò!ó -ñ!ñ ˆt�Š×&Ñ&Ó'ôó (ññ ˆt�zŠz×!Ñ!Ó"ò!ó #ñ!ö&ñR ˆt�xŠx×ÑÓ ò5ó !ñ5ñ ˆt�xŠx�~Š~ÓòJó ñJôôô6ô;ðh #ò-YØñYàñYð 	ñYð 	ñ	Yð
 	ñYð 	ñYð 	ñYð 	ñYð 	ñYð 	ñYð 	ñYð ñYð ñYð ñYð ñYð  ñ!Yð" ñ#Yð$ ñ%Yð& ñ'Yð( ð)Yð* ñ+Yð, õ-Yôx;4ð|38Øñ38àñ38ð ñ38ð 	ñ	38ð
 	ñ38ð 	ñ38ð 	ñ38ð 	ñ38ð 	ñ38ð 	ñ38ð 	ñ38ð 	ñ38ð ñ38ð ñ38ð ñ38ð  ñ!38ð" ñ#38ð$ ð%38ð& õ'38ôlI2ñX ˆt×4Ò4×<Ñ<Ó=ò(ó >ñ(ñV ˆt×+Ò+×3Ñ3Ó4ð ØØØô#ó 5ñ#ñL ˆt×)Ò)×1Ñ1Ó2òQó 3ñQñh ˆt×+Ò+Ó,ÙˆU�IÓð ØØØôdó ó -ñdñN ˆt×4Ò4Ó5Ùˆ\Óòbó ó 6ñbðJ%
 Vñ %
°6õ %
öP˜tõ ð ñ ¨vñ È3õ ñ$ ˆt×,Ò,×4Ñ4Ó5ò#ó 6ñ#ñ$ ˆt×#Ò#Ó$Ùƒò8ó ó %ñ8ñ" ˆt×,Ò,Ó-Ùˆ\™;Ó'ò!ó (ó .ñ!ñ, �—	’	×!Ñ!Ð"Ó#ò.ó $ñ.ñ ˆt�Š×&Ñ&Ó'ð ØØØØô)ó (ñ)ñX �—	’	×!Ñ! 4§9¢9§=¡=Ð1Ó2Ùƒð ØØØØõó ó 3ññ( �—
’
×"Ñ" D§J¢J§N¡NÐ3Ó4Ùƒð ØØØØõó ó 5ññ( ˆt�{Š{�‰ÓòEó  ñEñ@ ˆt×"Ò"×*Ñ*Ó+ò.ó ,ñ.ñ ˆt×!Ò!×)Ñ)Ó*ô.ó +ñ.ò
	˜ñ 	¨Cñ 	¸dõ 	ô/ô
ñ  ˆt�{Š{×"Ñ"Ó#ô'ó $ñ'öö6
ô ö
-
öb4ñ ˆt×Ò×'Ñ'Ó(ò&ó )ñ&ñ
 ˆt× Ò Ó!òó "ññ
 à�Š×ÒØ�Š×ÒØ�Š×ÑØ�Š×!Ò!ð	óñ ƒô&ó óñ&ñ à�Š×ÒØ�Š×ÒØ�Š×ÑØ�Š×"Ò"ð	óôóññ �×8Ò8Ð9Ó:ð
 ØØ#Ø!ó=Øñ=à	ñ=ð ñ=ð ñ	=ð
 ñ=ð ñ=ð �E‰?ó=ó ;ñ=ñ@Øñà�S™#�X‰õñ( �×8Ò8Ð9Ó:ð ØØ#Ø!ó(Øñ(à	ñ(ð ñ(ð ˜Ññ	(ð
 ñ(ð ñ(ð ñ(ð ñ(ð �E‰?ó(ó ;ñ(ñV �×EÒEÐFÓGð
 #'ØØØ#Ø!ó'Øñ'à	ñ'ð ñ'ð ˜Ññ	'ð
 ñ'ð ñ'ð ñ'ð �E‰?ó'ó Hñ'ñT à×9Ò9ðóð( "ó"Øñ"àñ"ð 
ñ"ð ð	"ð
 
ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð �E‰?ó"óñ
"ñ. à×8Ò8ðóð ØØ"&Ø!óØñà	ñð ñð ñ	ð
 ñð ˜Ññð �E‰?óóñ
ñ: à×AÒAðóð #'Ø!ó'"Øñ'"àñ'"ð 
ñ'"ð ð	'"ð
 
ñ'"ð ñ'"ð ñ'"ð ñ'"ð ˜Ññ'"ð �E‰?ó'"óñ
'"ñT �×<Ò<Ð=Ó>ð ØØ!ó))Øñ))à	ñ))ð ñ))ð ˜Ññ	))ð
 ñ))ð ñ))ð �E‰?ó))ó ?ñ))ñX à×=Ò=ðóð" Ø!ó4-Øñ4-àñ4-ð 
ñ4-ð ñ	4-ð
 ˜Ñð4-ð 
ñ4-ð ñ4-ð ñ4-ð ñ4-ð ñ4-ð ˜$‘Zñ4-ð ñ4-ð �E‰?ó4-óñ
4-ñn à×9Ò9ðóð* "ó!"Øñ"àñ"ð 
ñ"ð ð	"ð
 
ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð  �E‰?ó!"óñ
"ñ0 à×%Ò%ðóð  "Ø&*Ø'+Ø"&Ø%)óHØñHà	ñHð ñHð ˜Ññ	Hð
 ˜ÑñHð ñHð ñHð ñHð ñHð ñHð �E‰?ñHð ˜s‘mñHð   ‘}ñHð ˜ÑñHð ˜6Ñ"óHóñ
HñV à×&Ò&ðóð( "Ø&*Ø'+ó#,Øñ,àñ,ð 
ñ,ð ð	,ð
 
ñ,ð ñ,ð ñ,ð ñ,ð ñ,ð ñ,ð ñ,ð ñ,ð ñ,ð ñ,ð �E‰?ñ,ð  ˜s‘mñ!,ð"   ‘}ó#,óñ
,ñ4 à×)Ò)ðóð   %Ø!Ø(,Ø!%Ø!%ó,SØñ,Sà	ñ,Sð ð,Sð �6Ñ
ñ	,Sð
 ˜6Ñ"ñ,Sð ˜6Ñ"ñ,Sð ˜3‘-ñ,Sð ˜3‘-ñ,Sð ñ,Sð ñ,Sð ñ,Sð �E‰?ñ,Sð ˜fÑ%ñ,Sð �vÑñ,Sð ˜#‘ó,Sóñ
,Sñ^ à×*Ò*ðóð* "Ø$(Ø"'ó%47Øñ47àñ47ð 
ñ47ð ð	47ð
 �6Ñ
ñ47ð ˜6Ñ"ñ47ð ˜6Ñ"ñ47ð —,’,ñ47ð —,’,ñ47ð ñ47ð ñ47ð ñ47ð ñ47ð ñ47ð ñ47ð  �E‰?ñ!47ð" ˜S‘Mñ#47ð$  ó%47óñ
47ñn �—’×'Ñ'Ð(Ó)ð $(Ø+/Ø'+Ø ò_YØ
�,‰,ð_Yà
�,‰,ñ_Yð �\‰\ñ_Yð �\‰\ð	_Yð
 �5—<‘<Ñ
 ñ_Yð ˜5Ÿ<™<Ñ(ð_Yð ˜ŸšÑ$ñ_Yð ó_Yó *ñ_YñD �×#Ò#×'Ò'¨×)<Ò)<×)DÒ)DÐEÓFÙƒô&ó ó Gñ&ñ
 ˆt×#Ò#×'Ò'Ó(ôó )ññ
 �× Ò ×(Ñ(¨$×*:Ò*:×*>Ñ*>Ð?Ó@Ùƒñ	Èô 	ó ó Añ	ôô,ñ* Ø	×Ò×$Ñ$ d×&DÒ&D×&LÑ&LÐMóô
óñ
ñ Ø	×Ò×$Ñ$ d×&DÒ&D×&LÑ&LÐMóôóññ. à×(Ò(×0Ñ0Ø×/Ò/×7Ñ7ðóð !%Ø $óØñà˜%  U§\¢\Ð 1Ñ2Ñ3ñð ˜˜s E§L¢LÐ0Ñ1Ñ2ñð �u‰oñ	ð
 �u‰oóóññ: Ø	×Ò×$Ñ$ d×&DÒ&D×&LÑ&LÐMóô
óñ
ñ à�	Š	×ÑØ�	Š	×ÒØ�	Š	×ÒØ�	Š	×Òð	óôóñô&$ñN ˆt×)Ò)×1Ñ1Ó2ð
 Øôó 3ññ ˆt�Š×&Ñ&Ó'ò4/ó (ñ4/ñn ˆt×$Ò$×,Ñ,Ó-ò$%ó .ñ$%ôN

ô
ñ �—’×#Ñ# T§[¢[×%8Ñ%8Ð9Ó:ô4ó ;ñ4ñ ˆt×!Ò!×)Ñ)Ó*ôó +ññ ˆt�yŠy× Ñ Ó!ô
Qó "ñ
Qñ ˆt×,Ò,Ó-ÙƒàLPôó ó .ññ  �—’×%Ñ% t§}¢}×';Ò';Ð<Ó=ÙˆX�yÓ!ôKó "ó >ñKð  #(×"9Ò"9Ñ ôQñ ˆt×7Ò7×?Ñ?Ó@ò	*ó Añ	*ñ ˆt×#Ò#×+Ñ+Ó,ò	0ó -ñ	0ñ ˆt×!Ò!×)Ñ)Ó*òó +ññ> ˆt×-Ò-×5Ñ5Ó6òFó 7ñFñD �—’×%Ñ% t§~¢~×'@Ò'@ÐAÓBÙƒØ27¸uõ ó ó Cññ �—
’
ˆ|ÓÙƒôEó ó ñEñ4 Ø	×!Ò!×)Ñ)¨4×+FÒ+F×+NÑ+NÐOóð Øôóññ& �×5Ò5×=Ñ=Ð>Ó?ð Øôó @ññ8 ˆt×>Ò>×FÑFÓGòó Hññ$ �—’×'Ñ'¨¯ª×)<Ñ)<Ð=Ó>Ùƒô'ó ó ?ñ'ñ
 ˆu�y‰y�~‰~×(Ò(Ó)òó *ññ8 ˆu�y‰y�~‰~× Ò Ó!ò6ó "ñ6ñ$ ˆt× Ò Ó!Ùƒð
 Ø
Ø	Øõ-Kó ó "ñ-Kô`ñ ˆt×,Ò,Ó-òó .ññ ˆt×+Ò+Ó,ð ô'
ó -ñ'
ñT ˆt×1Ò1Ó2ð ôó 3ññ, ˆt×>Ò>Ó?ð ôó @ññ. ˆt�yŠyÓÙƒØ8=Àeõ 8ó ó ñ8ñ  ˆt�~Š~ÓÙƒñ6�cð 6 ð 6¨Fó 6ó ó ñ6ñ ˆt×'Ò'Ó(ðI &ó Ió )ñIñ ˆt�yŠyÓÙ˜Ôð"ˆvð "˜&ó "ó ó ñ"ñ ˆt�|Š|ÓÙƒð6�&ð 6˜Vó 6ó ó ñ6ô ðP "Ø!Ø+/Ø'+Ø óeKØñeKàñeKð �e—l‘lÑ#ñeKð �e—l‘lÑ#ñ	eKð
 �6Ñ
ðeKð �6Ñ
ñeKð ˜5Ÿ<™<Ñ(ðeKð ˜ŸšÑ$ñeKð õeKñP ˆt×ÒÓ Ùƒð "Ø!Ø'+óØñàñð �6Ñ
ðð �6Ñ
ð	ð
 ˜ŸšÑ$ðð óó ó !ññ& �×'Ò'×/Ñ/Ð0Ó1ð $(Ø#'Ø+/Ø'+Ø óØ�<‰<ñà�<‰<ñð �\‰\ñð �\‰\ñ	ð
 �5—<‘<Ñ
 ðð �5—<‘<Ñ
 ñð ˜5Ÿ<™<Ñ(ðð ˜ŸšÑ$ñð óó 2ññ0 ˆt�}Š}ÓÙƒñ	ˆvð 	˜Cñ 	°ð 	¸ó 	ó ó ñ	ñ ˆt×#Ò#Ó$Ùƒô%ó ó %ñ%ñP ˆt�~Š~ÓÙƒð Ø$Øò8Øð8àñ8ð ñ8ð ñ	8ð
 ð8ð ó8ó ó ñ8ñ, ˆt×3Ò3×;Ñ;Ó<ð
 ò	*Øð*à�&‰\ñ*ð �c‘ñ*ð ó	*ó =ñ*ô ôò ˜d×2Ò2Ô 3Ú ˜d×4Ò4Ô 5Ú ˜d×4Ò4Ô 5Ú ˜d×=Ò=Ô >Ú ˜d×=Ò=Ô >Ú ˜d×=Ò=Ô >Ú ˜d×=Ò=Ô >Ú ˜d×DÒDÔ EÚ ˜d×DÒDÔ Eò ˜t×BÒBÔ CÚ ˜t×BÒBÔ CÚ ˜t×BÒBÔ CÚ ˜t×BÒBÔ CÚ ˜t×JÒJÔ KÚ ˜t×JÒJÔ KÚ ˜t×JÒJÔ KÚ ˜t×JÒJÔ KÚ ˜t×@Ò@Ô AÚ ˜t×AÒAÔ BÚ ˜t×AÒAÔ BÚ ˜t×AÒAÔ Bôñ ˆt�yŠyÓÙƒòó ó ññ$ ˆt�|Š|ÓÙƒØ./õ ó ó ññ ˆt�|Š|ÓÙƒØ./õ ó ó ñò, 	˜tŸyšyÓ)�Ú! $§,¢,Ó/�Ú! $§,¢,Ó/�ó
 Ü  Ü ôBNòJ …r<   