Ë
    )êñiÛT ã            -       ó¦~  — d dl Z d dlmZmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlZd dlmZ d dlmZmZmZ d dlmZmZmZmZ d d	lmZ d d
lmZmZ d dlmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) d dl*m+Z+m,Z,m-Z-m.Z.m/Z/ d dl0m1Z1m2Z2 d dl3m4Z5 d dl6m7Z7m8Z8 d dl9m:Z;  e	d«      Z< ed«      Z=ej|                  j~                  Z?ej€                  jƒ                  ddd«      ZB eCd«      \  ZDZEZFd„ ZGd„ ZHdeee=e<f   gee=e<f   f   fd„ZIde!fd„ZJd„ ZKd„ ZL eIe?jš                  e?jœ                  g«       e/«       dddejž                  ddfd „«       «       ZP eIe?j¢                  j¤                  e?j¢                  j¦                  g«       e/«       d!„ «       «       ZT eIe?jª                  j¤                  e?jª                  j¦                  g«       e/«       d"d#œd$„«       «       ZU eIe?j¬                  «       e/«       d%„ «       «       ZV eIe?j®                  j¤                  e?j®                  j¦                  e?j°                  j¤                  e?j°                  j¦                  g«       e/d&d'«      d(„ «       «       ZY eIe?j´                  j¤                  e?j´                  j¦                  g«       e/«       d)„ «       «       ZZd*„ Z[�d=d+ed,e\e]   d-e^fd.„Z_ eIe?jÀ                  j¤                  e?jÀ                  j¦                  g«       e/«       d/„ «       «       ZadZbd,e\e]   fd0„Zc eIe?jÈ                  j¤                  e?jÈ                  j¦                  g«       e/«       d1„ «       «       Ze eIe?jÌ                  jÎ                  «      dd2œd3„«       Zh eIe?jÌ                  j¤                  «      ejÒ                  dddd4œd5„«       Zj eIe?jÖ                  j¤                  e?jÖ                  j¦                  g«       e/«       ejÒ                  dddd4œd6„«       «       Zl eIe?jÖ                  jÚ                  e?jÖ                  jÜ                  g«       e/«       ejÒ                  dddd4œd7„«       «       Zo eIe?jà                  j¤                  e?jà                  j¦                  g«       e/«       ddddd4œd8„«       «       Zq eIe?jä                  j¤                  e?jä                  j¦                  g«       e/«       d+ed,e\e]   d9e]d:e]fd;„«       «       Zs eIe?jè                  j¤                  «      �d=d<„«       Zud=„ Zv eIe?jî                  j¤                  «      d>„ «       Zx eIe?jò                  «      	 	 	 �d>d?ed@edAedBedz  dCezdz  dDejö                  dz  fdE„«       Z| eIe?jú                  «      	 �d?dFedGedHedDejö                  dz  fdI„«       Z~ eIe?jþ                  «      dJdJddKœd?edFedGedHedDejö                  dz  f
dL„«       Z€ eIe?�j                  «      	 	 	 	 	 	 	 �d@dMej$                  dNej$                  dBedz  dOedz  dDejö                  dz  dPe^dQe]dRe]dSe]fdT„«       Z‚ eIe?�j                  j¤                  «      dUdVœd+ed,e]dWedXej$                  dYezdZe^defd[„«       Z„ eIe?�j
                  j¤                  «      dUdVœd+ed,e]dWedXej$                  dYezdZe^defd\„«       Z† e/«        eIe?�j                  j¤                  «      d]„ «       «       Zˆ eIe?�j                  j¤                  «      dddd ddd^œd_edYezd`edz  d'edz  daedz  dbe]dce^defdd„«       ZŠ eIe?�j                  j¤                  e?�j                  �j                  g«       e/«       de„ «       «       Z� eIe?�j                  �j                  «      �d=df„«       Z� eIe?�j                   j¤                  e?�j                   �j                  g«       e/«       dg„ «       «       Z‘ eIe?�j                   �j                  «      �d=dh„«       Z’ eIe?�j&                  j¤                  «      di„ «       Z” eIe?�j&                  j¦                  «      dj„ «       Z• eIe?�j,                  j¤                  «      dk„ «       Z— eIe?�j,                  �j0                  «      dl„ «       Z™ eIe?�j4                  j¤                  «      dm„ «       Z› eIe?�j8                  j¤                  «      ddddddnœdo„«       Z� eIe?�j<                  j¤                  «      �dAdp„«       Zž eIe?�j>                  j¤                  «      �d>dq„«       Z  eIe?�jB                  j¤                  «      �dAdr„«       Z¡ eIe?�jD                  j¤                  «      ds„ «       Z£ eIe?�jH                  �j0                  «      dt„ «       Z¥d+eduezfdv„Z¦d+edwedxezfdy„Z§	 �dBdzeduezd{e^fd|„Z¨�dCdweduezd}ezfd~„Z©dweded€e^duezfd�„Zª	 �dDdƒezd‚ed?ed„ezfd…„Z«d†ezfd‡„Z¬ eIe?�jZ                  j¤                  e?�jZ                  �j\                  g«       e/dˆd‰«      �dEdwed†ezd‹e^fdŒ„«       «       Z¯ eIe?�j`                  j¤                  e?�jb                  j¦                  g«       e/«       d?edefd�„«       «       Z² eIe?�jf                  g«       e/dˆd‰«      d?efdŽ„«       «       Z´d�edefd�„Zµ eIe?�jl                  «       e/«       d+edwed‘e^defd’„«       «       Z¶ eIe?�jn                  «       e/«       �d=d+edwed‘e^defd“„«       «       Z· eIe?�jp                  «       e/«       �d=d+ed‘e^defd”„«       «       Z¸ eIe?�jr                  «       e/«       �d=d+ed‘e^defd•„«       «       Z¹ eIe?�jt                  j¤                  «      �dFdwed‘e^d–e^fd—„«       Zº eIe?�jv                  j¤                  e?�jv                  j¦                  g«       e/«       d?ed˜edefd™„«       «       Z» eIe?�jx                  j¤                  «      �d=dwed–e^fdš„«       Z½ eIe?�j|                  j¤                  e?�j|                  j¦                  g«       e/d›dœd�«      dddžœd+edŸe^d–e^de¿eeef   fd „«       «       ZÀ eIe?�j‚                  j¤                  e?�j‚                  j¦                  g«       e/«       dd¡œd›edœededŸe^def
d¢„«       «       ZÂ eIe?�j†                  j¤                  e?�j†                  j¦                  g«       e/d£dŠd¤«      dUd¥œdwed¦e^de¿eeef   fd§„«       «       ZÄ eIe?�jŠ                  j¤                  e?�jŠ                  j¦                  g«       e/d¨dœd�«      dUdd©œdwed¦e^d–e^de¿eeef   fdª„«       «       ZÆ eIe?�jŽ                  j¤                  e?�jŽ                  j¦                  g«       e/«       dUdd«œd¨edœeded€e^d¬e^defd­„«       «       ZÈ eIe?�j’                  «       e/d£dŠd¤«      	 	 �dGd¨edœed®e^d¯e^de¿eeef   f
d°„«       «       ZÊd±ezde¿e^e^f   fd²„ZË eIe?�j˜                  j¤                  e?�j˜                  j¦                  g«       e/d³d´«      �dHdwed±ezde¿eef   fdµ„«       «       ZÍ eIe?�jœ                  j¤                  e?�jœ                  �jž                  g«       e/d¶d·d¨dœ«      dwede¿eeeef   fd¸„«       «       ZÎ eIe?�j                   j¤                  «      	 	 	 �dIdwed¹e^dºe^d»ezdz  fd¼„«       ZÑd½ed¾ede¿e\e]   e\e]   f   fd¿„ZÒd½ed¾edxezdz  de¿eef   fdÀ„ZÓd?edÁede^fdÂ„ZÔ eIe?�jª                  «      dUddddddÃœdweded€e^d–e^d‚edz  d¨edz  dœedz  d�edz  de¿eeeef   fdÄ„«       ZÕ eIe?�j¬                  j¤                  e?�j¬                  j¦                  g«      dUdddÅœdweded‘e^d€e^dÆe^dÇedz  defdÈ„«       Z× eIe?�j°                  «       e/dÉdÊdU¬Ë«      	 	 	 �dJd+edwed‘e^dÌe^dÆe^de¿eef   fdÍ„«       «       ZÙ eIe?�j´                  j¤                  «      dÎ„ «       ZÛ eIe?�j¸                  «       e/«       	 	 �dKd?ed˜edÁed€e^dÌe^defdÏ„«       «       ZÜdÐ„ ZÝdÑ„ ZÞ eIe?�j¾                  «       e/«       dÒ„ «       «       Zà eIe?�jÂ                  «       e/«       dÓ„ «       «       ZâdÔ„ Zã eIe?�jÈ                  «       e/dÕ«      dÖ„ «       «       Zå eIe?�jÌ                  «       e/dÕ«      d×„ «       «       ZçdØ„ Zè eIe?�jÒ                  «       e/«       dÙ„ «       «       Zê eIe?�jÖ                  «       e/«       dÚ„ «       «       Zì eIe?�jÚ                  j¤                  «      dÛ„ «       Zî eIe?�jÞ                  j¤                  e?�jÞ                  �jà                  e?�jâ                  j¤                  e?�jâ                  �jà                  g«       e/dÕ«      dÜ„ «       «       ZòdÝ„ Zó eIe?�jè                  «       e/«       dÞ„ «       «       Zõ eIe?�jì                  «       e/«       dß„ «       «       Z÷ eIe?�jð                  j¤                  e?�jð                  �jà                  e?�jò                  j¤                  e?�jò                  �jà                  g«       e/dÕ«      dà„ «       «       Zú eIe?�jö                  «       e/«       �dLd+edáeüdefdâ„«       «       Zý eIe?�jü                  «       e/«       dãed+edáeüdäedef
då„«       «       Zÿ eIe?�j                   j¤                  e?�j                   j¦                  g«       e/dU¬Ë«      dJdJdæœdç„«       «       �Z eIe?�j                  j¤                  e?�j                  j¦                  g«       e/«       dd2œdè„«       «       �Z eIe?�j                  �jø                  «      �dMdé„«       �Z eIe?�j                  �j                  «      �dMdê„«       �Z eIe?�j                  j¤                  e?�j                  j¦                  g«       e/«       �d?dë„«       «       �Z	 eIe?�j                  j¤                  «      	 	 �dFdì„«       �Z eIe?�j                  «       e/dU¬Ë«      �d?dDejö                  dz  fdí„«       «       �Zdî„ �Z�dNdï„�Z	 �d?dðej$                  d@ej$                  dñe\e]   e]z  dòe\e]   e]z  dóe\e]   e]z  dôe^dõe]döe\e]   e]z  dz  fd÷„�Zdø„ �Z eIe?�j$                  j¤                  «      dðej$                  d@ej$                  dBej$                  dz  dùej$                  dz  dúej$                  dz  dûe^düeüdýeüfdþ„«       �Z eIe?�j(                  j¤                  «      dðej$                  d@ej$                  dBej$                  dñe\e]   dòe\e]   dóe\e]   dôe^döe\e]   dõe]fdÿ„«       �Ze�j,                  �j.                  �rej€                  jƒ                  �d dd«      �Z eIej|                  �j2                  �j4                  j¤                  «      �d„ «       �Z eIej|                  �j2                  �j8                  j¤                  «      �d„ «       �Ze�j,                  �j<                  rOej€                  jƒ                  �ddd«      �Z eIej|                  �j@                  �jB                  «      �d„ «       �Z"ej€                  jƒ                  �ddd«      �Z# eIej|                  �jH                  �jJ                  j¤                  «       eIej|                  �jH                  �jL                  j¤                  «       eIej|                  �jH                  �jL                  �jN                  «      �d„ «       «       «       �Z( eIej|                  �jH                  �jJ                  �jR                  «       eIej|                  �jH                  �jJ                  �jT                  «      �d„ «       «       �Z+ eIej|                  �jH                  �jX                  j¤                  «       eIej|                  �jH                  �jX                  �jN                  «      �d„ «       «       �Z- eIej|                  �jH                  �jX                  �jR                  «       eIej|                  �jH                  �jX                  �jT                  «      �d	„ «       «       �Z. eIej|                  �jH                  �j^                  j¤                  «       eIej|                  �jH                  �j`                  j¤                  «      �d
„ «       «       �Z1ej€                  jƒ                  �ddd«      �Z2 eIej|                  �jf                  �jh                  «      	 	 	 	 �dO�d„«       �Z5 eIej|                  �jf                  �jl                  «      �d„ «       �Z7�d„ �Z8 eIe?�jr                  j¤                  «      	 	 	 	 	 �dP�d„«       �Z:�d„ �Z; eIe?�jx                  j¤                  «      �d„ «       �Z= eIe?�j|                  «       e/«       	 	 	 	 	 �dP�d„«       «       �Z? eIe?�j€                  «       e/dÕ«      �d„ «       «       �ZA eIe?�j„                  j¤                  «      �d„ «       �ZC eIe?�jˆ                  j¤                  «      �d„ «       �ZE eIe?�jŒ                  j¤                  «      �d„ «       �ZG eIe?�j�                  «       e/dÕ«      �d„ «       «       �ZI�ded}ezf�d„�ZJ eIe?�j–                  «       e/dÇd'«      �d„ «       «       �ZL eIe?�jš                  «       e/dÕ«      �d„ «       «       �ZN eIe?�jž                  «       e/dÇd'«      �d„ «       «       �ZP eIe?�j¢                  «       e/dÕ«      �d„ «       «       �ZR eIe?�j¦                  j$                  «      �d?�d „«       �ZT eIe?�jª                  j¤                  e?�jª                  j¦                  g«       e/«       �d!„ «       «       �ZV eIe?�j®                  j¤                  e?�j®                  j¦                  g«       e/«       d"�d"œ�d#e]f�d$„«       «       �ZW eIej|                  j~                  �j°                  j¤                  ej|                  j~                  �j°                  j¦                  g«       e/«       �d%„ «       «       �ZX eIe?�j²                  j$                  e?�j´                  j$                  g«      �d&„ «       �Z[ eIe?�j¸                  j¤                  g«      �d'„ «       �Z] eIe?�j¼                  j¤                  e?�j¼                  j¦                  g«       e/dU¬Ë«      dJdJdæœ�d(„«       «       �Z_ eIe?�jÀ                  j$                  g«      �d)„ «       �Za eIe?�jÄ                  j¤                  e?�jÆ                  j¤                  g«      dd�d*œ�d+„«       �Zd eIe?�jÊ                  j¤                  g«      dd�d*œ�d,„«       �Zf eIe?�jÎ                  g«       e/«       �d-„ «       «       �Zh eIe?�jÒ                  g«      �d.„ «       �Zj eIe?�jÖ                  g«      �d/„ «       �Zl eIe?�jÚ                  g«      �d0„ «       �Zn eIe?�jÞ                  g«      �d1„ «       �Zp eIe?�jâ                  g«      �d2„ «       �Zq�d3e]�d4e]de]f�d5„�Zr�d6„ �Zs eIe?�jè                  g«      dBedz  f�d7„«       �Zu eIe?�jì                  g«      �d8„ «       �Zw eIe?�jð                  g«      �d9„ «       �Zy eIe?�jô                  j¤                  «      �d:„ «       �Z{ eIe?�jø                  «       e/«       �d;„ «       «       �Z} eIe?�jü                  j¤                  «      	 	 	 	 	 	 �dQ�d<„«       �Z eIe?�j                   j¤                  «      �d=„ «       �Z��dB�d>„�Z‚ eIe?�j                  j¤                  e?�j                  j¦                  g«       e/«       �dRd�d?œ�d@„«       «       �Z„ eIe?�j
                  j¤                  e?�j                  j¤                  g«      �dA„ «       �Z‡ eIe?�j
                  �j                  e?�j
                  �j                  e?�j                  �j                  e?�j                  �j                  e?�j                  j¤                  e?�j                  �j                  g«       e/d&d'«      �dS�dB„«       «       �Z‹ eIe?�j                  j¤                  «      �dC„ «       �Z� eIe?�j                  j¤                  «      �dD„ «       �Z� eIe?�j                   j¤                  «      �dE„ «       �Z‘ eIe?�j$                  �j&                  e?�j(                  �j&                  e?�j$                  j$                  e?�j(                  j$                  e?�j*                  j¤                  e?�j,                  j¤                  e?�j.                  j¤                  g«      �dF„ «       �Z˜ eIe?�j2                  �j&                  e?�j4                  �j&                  e?�j2                  j$                  e?�j4                  j$                  g«      �d�dG„«       �Z› eIe?�j8                  �j&                  e?�j:                  �j&                  g«      �d�dH„«       �Zž eIe?�j>                  j¤                  e?�j>                  �j@                  g«      �dI„ «       �Z¡�dJ„ �Z¢ eIe?�jF                  j$                  e?�jF                  �j&                  g«      �dK„ «       �Z¤ eIe?�jJ                  j$                  e?�jJ                  �j&                  g«      �dL„ «       �Z¦ eIe?�jN                  j¤                  «      �dM„ «       �Z¨ eIe?�jR                  j$                  e?�jR                  �j&                  g«      �dN„ «       �Zª eIe?�jV                  j$                  e?�jV                  �j&                  g«      �dO„ «       �Z¬ eIe?�jZ                  j¤                  «      �dP„ «       �Z® eIe?�j^                  j$                  «       e/«       �ddef�dQ„«       «       �Z° eIe?�jb                  g«       e/«       	 �dT�dR„«       «       �Z² eIe?�jf                  g«      	 �dT�dS„«       �Z´ eIe?�jj                  g«      	 �dT�dT„«       �Z¶ eIe?�jn                  j¤                  e?�jp                  j¤                  g«      �d=�dU„«       �Z¹ eIe?�jt                  �j&                  «      �dV„ «       �Z» eIe?�jx                  j¤                  «      �dW„ «       �Z½ eIe?�j|                  «      �dX„ «       �Z¿ eIe?�j€                  «       e/«       �dY„ «       «       �ZÁ eIe?�j„                  «      �dZ„ «       �ZÃ eIe?�jˆ                  j¤                  «      �d=�d[„«       �ZÅ�dA�d\„�ZÆ eIe?�jŽ                  j¤                  «      �d]„ «       �ZÈ eIe?�jŽ                  jö                  «      �d^„ «       �ZÉ�d_„ �ZÊ�d`„ �ZË�da„ �ZÌ�db„ �ZÍ	 �d=d?e�dce]�dde]�dee]�dfe]�dge]�dhe]�die]�dje]�dke]�dle]�dme]�dne]�doe]�dpe]�dqe]�dre]�dse]�dte]�due]dƒez�dve^f,�dw„�ZÎ�dx„ �ZÏd?e�de�dce]�dde]�dee]�dfe]�dge]�dhe]�die]�dje]�dke]�dle]�dpe]�dqe]�dre]�dse]�dte]�due]dƒezf&�dy„�ZÐ�dz„ �ZÑ eIe?�j¤                  j¤                  «      �d{„ «       �ZÓ eIe?�j¨                  j¤                  «      	 	 	 	 �dO�d|„«       �ZÕ eIe?�j¬                  j¤                  «      �d}„ «       �Z× eIe?�j°                  «       e/dÇd'«      	 	 	 	 �dO�d~„«       «       �ZÙ eIe?�j´                  «       e/dÕ«      �d„ «       «       �ZÛd?e�d€ef�d�„�ZÜ G �d‚„ �dƒe«      �ZÝd?e�d€e�d„e]f�d…„�ZÞ eIe?�j¾                  j¤                  «      �d†„ «       �Zà eIe?�jÂ                  «       e/«       �d‡„ «       «       �Zá eIe?�jÄ                  «       e/dÕ�dˆ«      �d‰„ «       «       �Zâ eIe?�jÆ                  j¤                  g«      �dŠ„ «       �Zã eIe?�jÈ                  j¤                  «      	 	 	 	 	 �dU�d‹„«       �Zä eIe?�jÊ                  j¤                  e?�jÊ                  j¦                  g«       e/«       ddddd�dŒœ�d�„«       «       �Zæ eIe?�jÎ                  j¤                  e?�jÎ                  j¦                  g«       e/«       ddddd�dŒœ�dŽ„«       «       �Zè eIe?�jÒ                  j¤                  «      �d�„ «       �Zê eIe?�jÖ                  j¤                  «      �dV�d�„«       �Zì�dBd,e]�d‘e]�d’e^f�d“„�Zí�d”„ �Zî�d•„ �Zï eIe?�jà                  j¤                  «      �d=�d–„«       �Zñ�d=�d—„�Zò�d?�d˜„�Zó�d™„ �Zô�d?�dš„�Zõ�dW�d›„�Zö eIe?�jî                  j¤                  «      �dœ„ «       �Zø eIe?�jò                  «      �d�„ «       �Zú eIe?�jö                  �jø                  e?�jö                  �jú                  e?�jö                  �jü                  e?�jö                  �jþ                  g«       e/«       �d?�dž„«       «       �Z  eIe?�j                  �jø                  e?�j                  �jú                  e?�j                  �jü                  e?�j                  �jþ                  g«      �d?�dŸ„«       �Z eIe?�j                  j¤                  g«      	 	 	 	 �dX�d e�d¡e�d¢e�d£eü�d¤e^�d¥e^�d¦eüdz  f�d§„«       �Z eIe?�j                  �jf                  g«      	 	 	 	 �dX�d e�d¡e�d¢e�d¨edz  �d©edz  �dªedz  �d£eü�d¤e^�d¥e^�d¦eüdz  f�d«„«       �Z�d e�d¬e¿e]�d­f   f�d®„�Z eIe?�j                  g«      	 	 	 	 �dX�d e�d¡e�d¢e�d¯edz  �d°e^�d£eü�d¤e^�d¥e^�d¦eüdz  f�d±„«       �Z eIe?�j                  g«      	 	 	 	 	 �dY�d e�d¡e�d¢e�d¯edz  �d£eü�d¤e^�d¥e^�d¦eüdz  f�d²„«       �Z
 eIe?�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¤e^�d¹e�dºe�d¦eüdz  f�d»„«       �Z eIe?�j                  g«      	 	 	 	 �dZ�d e�d¡e�d¢e�d£eü�d¤e^�d¼edz  �d¦eüdz  f�d½„«       �Z eIe?�j                  g«      	 	 �dA�d³e�d e�d¡e�d¢edÇe�d´e�d£eü�d¤e^�d¼edz  �d¦eüdz  f�d¾„«       �Z eIe?�j"                  g«      	 	 	 	 	 �d[�d e�d¡e�d¢e�d¼edz  �d£eü�d¤e^�d¿edz  �d¦eüdz  de¿eef   f�dÀ„«       �Z eIe?�j&                  g«      	 	 	 �d\�d e�d¡e�d¢e�d¯edz  �d°e^�d¤e^�d¦eüdz  f�dÁ„«       �Z eIe?�j*                  g«      	 	 �d]�d³e�d e�d¡e�d¢e�d¯edz  dÇe�d´e�d¹e�dºe�d£eü�dÂe\e^   �d¤e^�d¦eüdz  f�dÃ„«       �Z eIe?�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·e]�d¸e]�d£eü�d¤e^�d¦eüdz  f �dÄ„«       �Z eIe?�j2                  j¤                  g«      	 	 	 	 	 �dU�d e�d¡e�d¢e�dµedz  �d¶edz  �d·e]�d¸e]�d£eü�d¤e^�d¥e^�d¦eüdz  �dÅe]dz  �dÆe]dz  �dÇedz  �dÈedz  f�dÉ„«       �Z eIe?�j2                  �jf                  g«      	 	 	 	 	 �dU�d e�d¡e�d¢e�dµedz  �d¶edz  �d·e]�d¸e]�d£eü�d¤e^�d¥e^�d¨edz  �d©edz  �dªedz  �d¦eüdz  �dÅe]dz  �dÆe]dz  �dÇedz  �dÈedz  f$�dÊ„«       �Z eIe?�j8                  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¤e^�d¹e�dºe�d¦eüdz  �dÅe]dz  �dÆe]dz  f"�dË„«       �Z eIe?�j<                  g«      	 	 	 	 	 �d^�d e�d¡e�d¢edBedz  �dÌedz  �dÍedz  �dÎe]dz  �dÏe]dz  �d£eü�dÐe]�d°e^�d¦eüdz  �dÑedz  �dÒedz  �dÓe]dz  f�dÔ„«       �Z eIe?�j@                  g«      	 	 	 �dW�d³e�d e�d¡e�d¢edBedz  �dÌedz  �dÍedz  �dÎe�jB                  �dÏe�jB                  �d´e�d£eü�d¹e�dºe�dÐe]�dÕe^�d¦eüdz  �dÖe]dz  �d×e^f$�dØ„«       �Z"	 	 	 	 �d_d+ej$                  dHej$                  �dÙej$                  �dÚej$                  dBej$                  dz  �dÛej$                  dz  dDejö                  dz  �dÜe^f�dÝ„�Z# eIe?�jH                  j¤                  g«      	 	 	 	 �d_d+ej$                  dHej$                  �dÙej$                  �dÚej$                  dBej$                  dz  �dÛej$                  dz  dDejö                  dz  �dÜe^f�dÞ„«       �Z%	 	 	 	 	 �d`d+ej$                  dHej$                  �dÙe\ej$                     �dße\e7   �dÚe\ej$                     �dàe\e7   dBej$                  dz  dDejö                  dz  �dáe\e8   dz  �dâe\e8   dz  �dÜe^f�dã„�Z& eIe?�jN                  j¤                  g«      	 	 	 	 �d_d+ej$                  dHej$                  �dÙe\ej$                     �dße\e7   �dáe\e8   �dÚe\ej$                     �dàe\e7   �dâe\e8   dBej$                  dz  �däejö                  dz  �dåe\e]   dz  �dÜe^f�dæ„«       �Z( eIe?�jR                  �jT                  e?�jR                  �jV                  g«       e/«       �dB�dç„«       «       �Z, eIe?�jZ                  �jT                  «      �dB�dè„«       �Z. eIe?�j^                  j¤                  e?�j^                  j¦                  g«       e/«       �d=dd2œ�dé„«       «       �Z0�dê„ �Z1�dë„ �Z2 eIe?�jf                  j¤                  e?�jh                  j¤                  g«      �d?�dì„«       �Z3 eIe?�jj                  j¤                  e?�jl                  j¤                  g«      �dA�dí„«       �Z5 eIe?�jn                  j¤                  e?�jp                  j¤                  g«      	 	 �dA�de�dîee]e�jB                  z     �dïee]e�jB                  z     �dðeüdz  �dñeüdz  f
�dò„«       �Z7 eIe?�jr                  j¤                  e?�jt                  j¤                  g«      �d>�dó„«       �Z9 eIe?�jv                  j¤                  e?�jv                  �jx                  e?�jv                  �j                  e?�jv                  �jz                  g«      �da�dô„«       �Z>�dõ„ �Z? eIe?�j€                  j¤                  «      	 	 �dA�dö„«       �ZA eIe?�j„                  j¤                  «      �d÷„ «       �ZB eIe?�j†                  j¤                  «      �dø„ «       �ZC eIe?�jˆ                  j¤                  «      �dù„ «       �ZD�dú„ �ZE�dû„ �ZF eIe?�jŽ                  j¤                  e?�j�                  j¤                  g«      �dR�dü„«       �ZI eIe?�j”                  j¤                  «      �db�dý„«       �ZJ eIe?�j–                  j¤                  «      �dc�dþ„«       �ZL eIe?�jš                  «       e/«       	 �dd�dÿ„«       «       �ZN eIe?�jž                  j¤                  e?�jž                  �j                  g«       e/d&d'«      �dS�d „«       «       �ZPe�j¢                  �ZR�d„ �ZS eIe?�j¨                  j¤                  «      �d„ «       �ZT eIe?�jª                  j¤                  «      �d„ «       �ZU eIe?�j¬                  j¤                  «      �d„ «       �ZW eIe?�j°                  j¤                  «      �d„ «       �ZX eIe?�j²                  j$                  e?�j²                  �j´                  g«       e/«       dd�dœ�d„«       «       �Z[ eIe?�j²                  �j&                  e?�j²                  �j¸                  g«      dd�dœd+e&�de�d	e^�d
e^f�d„«       �Z] eIe?�j¼                  g«       e/«       �de�d„«       «       �Z_ eIe?�jÀ                  j¤                  e?�jÂ                  j¤                  g«      	 	 �dA�d„«       �Zb eIe?�jÆ                  j¤                  g«      	 	 �dA�d„«       �Zd eIe?�jÊ                  j¤                  «      �d„ «       �Ze eIe?�jÌ                  j¤                  e?�jÌ                  j¦                  g«       e/«       �d>�d„«       «       �Zf eIej|                  j~                  �jÎ                  «      �d„ «       �Zg eIej|                  j~                  �jÐ                  «      �d„ «       �Zh eIe?�jÒ                  «       e/«       dddd�dœ�d„«       «       �Zj�d„ �Zk eIe?�jØ                  «      �d„ «       �Zm eIe?�jÜ                  «      	 �df�d„«       �Zo eIe?�jà                  «      	 �df�d„«       �Zq eIe?�jä                  «      	 �df�d„«       �Zs eIe?�jè                  «       e/«       dd�dœ�d„«       «       �Zu eIe?�jì                  «       e/«       �de]d+edef�d„«       «       �Zw eIe?�jð                  «      d+ef�d„«       �Zy eIe?�jô                  «       e/dU¬Ë«      d+edef�d„«       «       �Zz eIe?�jö                  «       e/«       d+edef�d „«       «       �Z{�d!„ �Z|	 	 	 	 	 �d`�d"e�d#e�dÙej$                  dz  �dÚej$                  dz  �d$edz  dBedz  �dÛej$                  dz  dDejö                  dz  �dÜe^f�d%„�Z} eIe?�jü                  «       e/«       	 	 	 �d>�d"e�d#e�d$edz  dBedz  dDejö                  dz  def�d&„«       «       �Z eIe?�j                   g«      	 	 	 	 	 �d`�d"ej$                  �d#ej$                  �dÙej$                  �dÚej$                  �d$ej$                  dz  dBej$                  dz  �dÛej$                  dz  dDejö                  dz  �dÜe^f�d'„«       �Z� eIe?�j                  �j&                  «      �dg�d(„«       �Zƒ eIe?�j                  «       e/«       �d)ed,e]�d*e^def�d+„«       «       �Z… eIe?�j                  «       e/«       �d�d,„«       «       �Z‡ eIe?�j                  «       e/«       	 	 	 �dhd@ed'e�d-e]�d.e^�d/e^def�d0„«       «       �Zˆ eIe?�j                  j¤                  «      	 �did&edae\e   �d1e\e]   �d2eüf�d3„«       �ZŠ�d4„ �Z‹ eIe?�j                  j¤                  «      	 	 	 	 �dj�d5„«       �Z��d6„ �ZŽ �e‹e?�j                  «        �e‹e?�j                   «        �e‹e?�j"                  «        �e‹e?�j$                  «        �e‹e?�j&                  «        �e‹e?�j(                  «        �e‹e?�j*                  «        �e‹e?�j,                  «        �e‹e?�j.                  «        �eŽe?�j0                  «        �eŽe?�j2                  «        �eŽe?�j4                  «        �eŽe?�j6                  «        �eŽe?�j8                  «        �eŽe?�j:                  «        �eŽe?�j<                  «        �eŽe?�j>                  «        �eŽe?�j@                  «        �eŽe?�jB                  «        �eŽe?�jD                  «        �eŽe?�jF                  «       �d7„ �Z¤ eIe?�jJ                  «       e/«       �d8„ «       «       �Z¥ eIe?�jL                  «       e/«       dJ�d9œ�d:„«       «       �Z¦ eIe?�jN                  «       e/«       dJ�d9œ�d;„«       «       �Z§ �e¤e?�jJ                  «      �Z¨ �e¤e?�jL                  «      �Z© �e¤e?�jN                  «      �Zªd dl0Zd d�l«Zd d�l¬Z�d<„ �Z­ �e­«        y(k  é    N)ÚCallableÚSequence)ÚEnum)Úwraps)ÚTypeVar)Ú	ParamSpec)ÚSymBoolÚSymFloatÚTensor)Ú_add_op_to_registryÚ_convert_out_paramsÚglobal_decomposition_tableÚ
meta_table)Ú
OpOverload)Ú_prim_elementwise_metaÚ$ELEMENTWISE_PRIM_TYPE_PROMOTION_KIND)ÚBoolLikeÚcorresponding_complex_dtypeÚcorresponding_real_dtypeÚelementwise_dtypesÚELEMENTWISE_TYPE_PROMOTION_KINDÚ	FloatLikeÚIntLikeÚmake_contiguous_strides_forÚNumberÚ
NumberTypeÚsuggest_memory_formatÚsym_minÚ
TensorLike)Ú_maybe_convert_to_dtypeÚ_maybe_resize_outÚ_resize_output_checkÚ_safe_copy_outÚout_wrapper)Ú_broadcast_shapesÚ_maybe_broadcast)Ú_config)ÚScalingTypeÚSwizzleType)Ú_pytreeÚ_TÚ_PÚatenÚIMPLÚMetaé   c                 ó   — | |z   dz
  |z  S ©Né   © ©ÚaÚbs     ú[/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/torch/_meta_registrations.pyÚceil_divr9   9   s   € Ø�‰E�A‰I˜!ÑÐó    c                 ó   — | |z   dz
  |z  |z  S )z$Rounds up x to nearest multiple of yr3   r4   ©ÚxÚys     r8   Úround_upr?   =   s   € à�‰U�Q‰Y˜1Ñ Ñ!Ð!r:   Úreturnc                 ó   ‡ — ˆ fd„}|S )Nc                 óV   •‡ — t        ‰ «      Š ˆ fd„}t        j                  |‰«       ‰ S )Nc                 ó(   •— t        t        | ‰«       y ©N)r   r   )ÚopÚfns    €r8   Úregisterz0register_meta.<locals>.wrapper.<locals>.registerF   s   ø€ Ü¤
¨B°Õ3r:   )r   ÚpytreeÚ	tree_map_)rF   rG   rE   s   ` €r8   Úwrapperzregister_meta.<locals>.wrapperC   s)   ù€ Ü  Ó$ˆô	4ô 	×Ñ˜ 2Ô&Øˆ	r:   r4   )rE   rJ   s   ` r8   Úregister_metarK   B   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_kindrL   )Úutilsr   r    r&   r   r   ÚDEFAULT)rL   ÚargsÚ_Úresult_dtyper=   s        r8   Úelementwise_metarT   O   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 rD   )ÚtorchÚ	complex32ÚhalfÚcfloatÚfloatÚcdoubleÚdoubleÚget)ÚdtypeÚfrom_complexs     r8   ÚtoRealValueTyper`   c   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 r4   )Úbroadcasted_shapeÚ
self_shapes   €€r8   ú<lambda>z)check_inplace_broadcast.<locals>.<lambda>p   s   ø€ Ð$ Z LÐ0SÐTeÐSfÐg€ r:   )Útupler%   rV   Ú_check)rd   Ú
args_shaperc   s   ` @r8   Úcheck_inplace_broadcastri   l   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t        dt        ‰«      › �«      ‚t        j                  t        ‰t        «      ˆˆ ˆfd„«       t        ‰t        «      st        dt        ‰«      › �«      ‚t        j                  ‰dk\  d	„ «       t        j                  ‰f‰|d
||¬«      S )Nr   c                   ó   — y©Nz:linspace only supports 0-dimensional start and end tensorsr4   r4   r:   r8   re   z(meta_linspace_logspace.<locals>.<lambda>„   ó   � r:   c                   ó   — yrl   r4   r4   r:   r8   re   z(meta_linspace_logspace.<locals>.<lambda>‰   rm   r:   c              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wrD   )Ú
isinstanceÚcomplex)Ú.0Úargs     r8   ú	<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 r4   )Údefault_complex_dtyper^   s   €€r8   re   z(meta_linspace_logspace.<locals>.<lambda>•   s   ø€ Ð5Ð6KÐ5LÐLrÐsxÐryÐz€ r:   zdtype must be torch.dtype, got c                  óŽ   •— dt        ‰«      j                  › dt        ‰ «      j                  › dt        ‰«      j                  › d�S )Nz4received an invalid combination of arguments - got (ú, ú))ÚtypeÚ__name__)ÚendÚstartÚstepss   €€€r8   re   z(meta_linspace_logspace.<locals>.<lambda>Ÿ   sD   ø€ ð Ü€uƒ+×ÑÐ�rœ$˜s›)×,Ñ,Ð-¨R´°U³×0DÑ0DÐ/EÀQðH€ r:   zsteps must be IntLike, got c                   ó   — y)Nz$number of steps must be non-negativer4   r4   r:   r8   re   z(meta_linspace_logspace.<locals>.<lambda>¤   rm   r:   Úmeta©r^   ÚlayoutÚdeviceÚ
pin_memoryÚrequires_grad)rp   rV   r   rg   ÚdimÚanyrO   r   Úget_default_dtypeÚis_complex_dtyper^   ÚAssertionErrorrz   Ú_check_typer   Úempty)
r}   r|   r~   Úbaser^   rƒ   r‚   r„   r…   rv   s
   ``` `    @r8   Úmeta_linspace_logspacerŽ   t   sn  ü€ ô �%œŸ™Ô&Ü�‰Ø�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Ÿ[™[Ô)ÜÐ>¼tÀE»{¸mÐLÓMÐMô 
×ÑÜ�5œ'Ó"õ	Hôô
 �eœWÔ%ÜÐ:¼4À»;¸-ÐHÓIÐIÜ	‡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 ©r^   ©Úindexs   €r8   re   zmeta_take.<locals>.<lambda>¶   s   ø€ ÐDÀUÇ[Á[ÀMÐR€ r:   r   c                   ó   — y)Nz*take(): tried to take from an empty tensorr4   r4   r:   r8   re   zmeta_take.<locals>.<lambda>»   rm   r:   )rV   rg   r^   ÚlongÚ_check_indexÚnumelÚ	new_emptyÚshape)Úselfr“   s    `r8   Ú	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.r4   r4   r:   r8   re   zlinalg_cross.<locals>.<lambda>Ç   rm   r:   r0   c                  óV   •— d‰ › d‰j                  ‰ «      › d‰j                  ‰ «      › �S )Nzlinalg.cross: inputs dimension z must have length 3. Got ú and ©Úsize)r†   Úotherrš   s   €€€r8   re   zlinalg_cross.<locals>.<lambda>Ë   s6   ø€ Ø-¨c¨Uð 3Ø—9‘9˜S“>Ð" %¨¯
©
°3«Ð'8ð:ð r:   )ÚndimrV   rg   r£   r%   r™   r˜   )rš   r¤   r†   Úx_dÚy_dÚ	out_shapes   ```   r8   Úlinalg_crossr©   À   s‡   ú€ ð �)‰)€CØ
�*‰*€CÜ	‡L�LØˆs‰
ÙOôô 
‡L�LØ�	‰	�#‹˜!ÑÒ4 §
¡
¨3£°1Ñ 4õ	
ôô " $§*¡*¨e¯k©kÓ:€IØ�>‰>˜)Ó$Ð$r:   c                 ó|   — t        | d«       t        | d«       t        j                  | t        j                  ¬«      S )Nzlinalg.matrix_exp©Úmemory_format)ÚsquareCheckInputsÚcheckFloatingOrComplexrV   Ú
empty_likeÚcontiguous_format©rš   s    r8   Úlinalg_matrix_expr²   Ô   s3   € ô �dÐ/Ô0Ü˜4Ð!4Ô5Ü×Ñ˜D´×0GÑ0GÔHÐHr:   ÚvaluesÚindicesc                 óZ  — t        j                  | j                  | j                  | j                  ¬«      }t        j                  | j                  | j                  t         j
                  ¬«      }| j                  «       dk7  r%| j                  dk7  rt        || j                  «       ||fS )N©rƒ   r^   r   )	rV   rŒ   r™   rƒ   r^   Úint64r—   r¥   Úmaybe_wrap_dim)rš   r†   r³   r´   s       r8   Ú	cummaxminr¹   Ü   sp   € ô
 �[‰[˜Ÿ™¨D¯K©K¸t¿z¹zÔJ€FÜ�k‰k˜$Ÿ*™*¨T¯[©[ÄÇÁÔL€GØ‡z�zƒ|�qÒ˜TŸY™Y¨!š^ä�s˜DŸI™IÔ&Ø�7ˆ?Ðr:   c                 óx   — t        || j                  «       t        j                  | t        j                  ¬«      S ©Nr«   )r¸   r¥   rV   r¯   r°   )rš   r†   s     r8   Ú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 rD   r4   )r=   Úself_stridess    €r8   re   z_exec_fft.<locals>.<lambda>  s   ø€ ˜<¨™?€ r:   ©ÚkeyÚreverserœ   r   r3   r«   )r¥   ÚlenÚlistÚrangeÚappendÚstrideÚsortÚpermuter™   Úreshaper£   Úresize_rV   r°   Úas_strided_Ústorage_offset)Úoutrš   Ú	out_sizesr†   Úforwardr¥   Úsignal_ndimÚ
batch_dimsÚdim_permuterR   Úis_transformed_dimÚdÚleftÚrightÚ	batch_endÚtmpÚinputÚbatched_sizesÚ
batch_sizeÚbatched_out_sizesÚiÚout_stridesÚbatch_numelr¿   s                          @r8   Ú	_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 rD   r4   )rÞ   r¿   s    €r8   re   z_sort_dims.<locals>.<lambda>0  s   ø€ �l 1‘o€ r:   )rÁ   )rÄ   rÇ   rÃ   ÚintrÈ   )rš   r†   râ   Úsorted_dimsr¿   s       @r8   Ú
_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Ð   )	rV   rg   r^   Ú
is_complexÚclonerç   r˜   r£   rá   )rš   r†   ÚnormalizationrÐ   ræ   rÎ   s         r8   Úmeta_fft_c2crí   7  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   r3   FT)rÃ   Úcufft_max_ndimr�   s    r8   Úuse_optimized_cufft_pathrñ   F  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ï   r3   ÚcudaÚxpur‘   Tré   c                 ó   •— ‰|    S rD   r4   )rÞ   Ústridess    €r8   re   zmeta_fft_r2c.<locals>.<lambda>t  s   ø€  '¨!¡*€ r:   rÀ   r«   )rV   rg   r^   Úis_floating_pointrÄ   r£   Údevice_hintr˜   rO   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                  @r8   Úmeta_fft_r2cr  M  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 rD   )r!   rV   ÚSize)Únr  rÎ   s      r8   Úmeta_randpermr	  Š  s   € ä˜S¤%§*¡*¨a¨S£/Ó2Ð2r:   ©r^   r‚   rƒ   r„   c                ó6   — t        j                  | ||||¬«      S ©Nr
  ©rV   rŒ   )r  r^   r‚   rƒ   r„   s        r8   Úmeta_randperm_defaultr  �  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=r4   ©ÚhighÚlows   €€r8   re   zmeta_randint.<locals>.<lambda>«  ó   ø€ ÐLÈSÈEÐQXÐY]ÐX^Ð_€ r:   r
  ©rV   rg   rŒ   )r  r£   r^   r‚   rƒ   r„   r  s   `     @r8   Úmeta_randintr  �  s>   ù€ ð €CÜ	‡L�LØˆs‰
Ü_ôô �;‰;Ø�E &°ÀJôð r:   c                ót   ‡ ‡— t        j                  ‰‰ kD  ˆˆ fd„«       t        j                  |||||¬«      S )Nc                  ó   •— d‰› d‰ › �S r  r4   r  s   €€r8   re   z"meta_randint_low.<locals>.<lambda>À  r  r:   r
  r  )r  r  r£   r^   r‚   rƒ   r„   s   ``     r8   Úmeta_randint_lowr  ²  s9   ù€ ô 
‡L�LØˆs‰
Ü_ôô �;‰;Ø�E &°ÀJôð r:   c                ó6   — t        j                  | ||||¬«      S r  r  )r£   r^   r‚   rƒ   r„   s        r8   Úmeta_rand_defaultr  Ç  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é   r3   r   )rV   rg   r^   rê   rø   rÄ   r£   r˜   r`   rñ   rá   rë   r°   rÃ   rí   )
rš   r†   rì   r  rÏ   rÿ   ÚtemprÚ   Úc2c_dimsrÎ   s
             r8   Úmeta_fft_c2rr!  Ï  sk  € ô 
‡L�L�—‘×&Ñ&Ô'ä�4Ó˜FÒ"Ü˜Ÿ™›Ó%ˆ	Ø$ˆ	�#�b‘'Ñà—‘ 	´ÀÇÁÓ1L�ÓMˆä# CÔ(ÜØØ—
‘
¬×)@Ñ)@�
ÓAØØØôð ô �3‹x˜!Š|Ü# D¨#¨c¨r¨(°A°wÓ?‘à—z‘z´×0GÑ0G�zÓH�Ü˜V T¨9°s¸2±w°iÈÔOÐOð ˆÜˆs‹8�aŠ<Ø˜3˜B�xˆHÜ   x°ÈÔNˆEØ�b�c�(ˆCä˜Ÿ™›Ó&ˆ	Ø$ˆ	�#�b‘'ÑØ�n‰n˜Y¬o¸d¿j¹jÓ.IˆnÓJˆÜ˜˜e Y°¸UÔCÐ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_symbolsr3   zQmore than one element of the written-to tensor refers to a single memory location)Ú%torch.fx.experimental.symbolic_shapesr#  rV   Ú_debug_has_internal_overlapÚRuntimeErrorrp   r   Útor£   r-   Úexpand_copyÚdefault)rš   ÚsrcÚnon_blockingr#  Úintermediates        r8   Ú
meta_copy_r-  ø  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 r2   )rÄ   r£   rÇ   r†   Úinsert)Útensorr†   Úresult_sizesÚresult_stridesÚ
new_strides        r8   ÚinferUnsqueezeGeometryr4    sq   € Ü˜Ÿ™›Ó&€LÜ˜&Ÿ-™-›/Ó*€Nà˜VŸZ™Z›\Ò)‘¨|¸CÑ/@À>ÐRUÑCVÑ/V€Jà×Ñ˜˜QÔà×Ñ˜#˜zÔ*Ø˜Ð'Ð'r:   c                 ó‚   — t        || j                  «       dz   «      }t        | |«      \  }}| j                  ||«       | S r2   )r¸   r†   r4  rÌ   )rš   r†   Úg_sizesÚ	g_stridess       r8   Úmeta_unsqueeze_r8    s>   € ä
˜˜dŸh™h›j¨1™nÓ
-€CÜ/°°cÓ:Ñ€GˆYØ×Ñ�W˜iÔ(Ø€Kr:   rÚ   ÚweightÚ_metaÚbiasÚ_activation_optÚ	out_dtypec                 óF  — t        | j                  «      }|�R|j                  d«      |j                  d«      k7  r/t        d|j                  d«      › d|j                  d«      › �«      ‚|j                  d«      | j                  d«      dz  k7  r2t        d|j                  d«      › d| j                  d«      dz  › �«      ‚|j                  d«      |d<   t	        | j                  «      dk7  r"t        d	t	        | j                  «      › d
�«      ‚d| j                  d«      f}|�K| j
                  t        j                  k(  r|t        j                  k(  st        d| j
                  › d|› �«      ‚| j                  ||€| j
                  n|¬«      j                  ||«      }|S )Nr   z%output size mismatch: weight.size(0)=ú != bias.size(0)=r3   rœ   rï   zweight.size(1)=z != input.size(-1)/2=z0we can only handle the squashed input case, got úD inputzKout_dtype is only supported for i8i8->i32 linear operator, got input.dtype=ú, out_dtype=r‘   )rÄ   r™   r£   rŠ   rÃ   r^   rV   Úint8Úint32r˜   Ú
as_strided)	rÚ   r9  r:  r;  r<  r=  Úoutput_sizesÚtransposed_stridesrÿ   s	            r8   Úmeta_sparse_structured_linearrG  %  s­  € ô ˜Ÿ™Ó$€LØÐØ�;‰;�q‹>˜TŸY™Y q›\Ò)Ü Ø7¸¿¹ÀA»Ð7GÐGXÐY]×YbÑYbÐcdÓYeÐXfÐgóð ð ‡{�{�1ƒ~˜Ÿ™ B›¨!Ñ+Ò+ÜØ˜fŸk™k¨!›nÐ-Ð-BÀ5Ç:Á:ÈbÃ>ÐTUÑCUÐBVÐWó
ð 	
ð —{‘{ 1“~€L�Ñô ˆ5�;‰;Ó˜1ÒÜØ>¼sÀ5Ç;Á;Ó?OÐ>PÐPWÐXó
ð 	
ð ˜UŸZ™Z¨›]Ð+ÐàÐØ—‘œuŸz™zÒ)¨i¼5¿;¹;Ò.FÜ Ø]Ð^c×^iÑ^iÐ]jÐjvð  xAð  wBð  Cóð ð �_‰_ØØ&Ð.ˆe�kŠk°Ið ó ÷ �j�Ð1Ó2ð ð
 €Mr:   Úmat1Ú	mat1_metaÚmat2c                 ó2  — t        | j                  «      dk7  r"t        dt        | j                  «      › d�«      ‚t        |j                  «      dk7  r"t        dt        |j                  «      › d�«      ‚t        |j                  «      dk7  r"t        dt        |j                  «      › d�«      ‚| j                  d«      |j                  d«      dz  k7  r2t        d| j                  d«      › d	|j                  d«      dz  › �«      ‚| j                  d«      |j                  d«      g}|�K|j                  t
        j                  k(  r|t
        j                  k(  st        d
|j                  › d|› �«      ‚|j                  ||€|j                  n|¬«      }|S )Nrï   úmat1 must be 2D, got ÚDúmat1_meta must be 2D, got úmat2 must be 2D, got r3   r   úmat1.size(1)=ú != mat2.size(0)/2=úJout_dtype is only supported for i8i8->i32 linear operator, got mat2.dtype=rA  r‘   ©	rÃ   r™   rŠ   r£   r^   rV   rB  rC  r˜   )rH  rI  rJ  r=  rE  rÿ   s         r8   Úmeta_sparse_structured_mmrT  Q  sv  € ô ˆ4�:‰:ƒ˜!ÒÜÐ4´S¸¿¹³_Ð4EÀQÐGÓHÐHÜ
ˆ9�?‰?Ó˜qÒ ÜÐ9¼#¸i¿o¹oÓ:NÐ9OÈqÐQÓRÐRÜ
ˆ4�:‰:ƒ˜!ÒÜÐ4´S¸¿¹³_Ð4EÀQÐGÓHÐHØ‡y�y�ƒ|�t—y‘y “| aÑ'Ò'ÜØ˜DŸI™I a›L˜>Ð)<¸T¿Y¹YÀq»\ÈAÑ=MÐ<NÐOó
ð 	
ð —I‘I˜a“L $§)¡)¨A£,Ð/€LàÐØ—
‘
œeŸj™jÒ(¨Y¼%¿+¹+Ò-EÜ Ø\Ð]a×]gÑ]gÐ\hÐhtÐu~Ðtð  Aóð ð �^‰^ØØ%Ð-ˆd�jŠj°9ð ó €Fð
 €Mr:   r3   )ÚalphaÚbetar=  c                óJ  — t        | j                  «      dk7  r"t        dt        | j                  «      › d�«      ‚t        |j                  «      dk7  r"t        dt        |j                  «      › d�«      ‚t        |j                  «      dk7  r"t        dt        |j                  «      › d�«      ‚t        |j                  «      dk7  r"t        dt        |j                  «      › d�«      ‚| j                  d	«      |j                  d	«      k7  r/t        d
| j                  d	«      › d|j                  d	«      › �«      ‚|j                  d«      |j                  d	«      dz  k7  r2t        d|j                  d«      › d|j                  d	«      dz  › �«      ‚|j                  d	«      |j                  d«      g}|�K|j                  t
        j                  k(  r|t
        j                  k(  st        d|j                  › d|› �«      ‚|j                  ||€|j                  n|¬«      }|S )Nr3   zKonly input broadcasted to columns of mat1 * mat2 product is supported, got r@  rï   rL  rM  rN  rO  r   zUonly input broadcasted to columns of mat1 * mat2 product is supported, input.size(0)=z != mat1.size(0)=rP  rQ  rR  rA  r‘   rS  )	rÚ   rH  rI  rJ  rU  rV  r=  rE  rÿ   s	            r8   Úmeta_sparse_structured_addmmrX  q  sÿ  € ô ˆ5�;‰;Ó˜1ÒÜØYÔZ]Ð^c×^iÑ^iÓZjÐYkÐkrÐsó
ð 	
ô ˆ4�:‰:ƒ˜!ÒÜÐ4´S¸¿¹³_Ð4EÀQÐGÓHÐHÜ
ˆ9�?‰?Ó˜qÒ ÜÐ9¼#¸i¿o¹oÓ:NÐ9OÈqÐQÓRÐRÜ
ˆ4�:‰:ƒ˜!ÒÜÐ4´S¸¿¹³_Ð4EÀQÐGÓHÐHØ‡z�z�!ƒ}˜Ÿ	™	 !›Ò$ÜðØ"ŸZ™Z¨›]˜OÐ+<¸T¿Y¹YÀq»\¸NðLó
ð 	
ð ‡y�y�ƒ|�t—y‘y “| aÑ'Ò'ÜØ˜DŸI™I a›L˜>Ð)<¸T¿Y¹YÀq»\ÈAÑ=MÐ<NÐOó
ð 	
ð —I‘I˜a“L $§)¡)¨A£,Ð/€LàÐØ—
‘
œeŸj™jÒ(¨Y¼%¿+¹+Ò-EÜ Ø\Ð]a×]gÑ]gÐ\hÐhtÐu~Ðtð  Aóð ð �^‰^ØØ%Ð-ˆd�jŠj°9ð ó €Fð
 €Mr:   Úcompressed_AÚdense_BrU  Útranspose_resultÚalg_idÚsplit_kÚsplit_k_modec	           	      ó*  — |j                   t        j                  t        j                  t        j                  t        j
                  t        j                  hvrt        d|j                   › �«      ‚| j                   |j                   k7  r%t        d| j                   › d|j                   › �«      ‚t        |j                  «      dk7  r"t        dt        |j                  «      › d�«      ‚| j                   t        j
                  t        j                  fv }	|	r|j                  «       rt        d«      ‚|j                  d«      }
| j                  d	«      }|�4||j                  d	«      k7  r t        d
|› d|j                  d	«      › �«      ‚|�k|	r@|t        j                  t        j                  t        j                  t        j                  hv s)t        d| j                   › d|j                   › d|› d�«      ‚|r|
|fn||
f}|j                  ||¬«      S )NzA_cslt_sparse_mm only supports fp16, bf16, int8, and fp8e4m3, got z%inputs must have the same dtype, got r¡   rï   z-_cslt_sparse_mm only supports 2d inputs, got rM  z.dense input must be transposed for 8bit dtypesr3   r   zbias size mismatch: m=r?  zout_dtype is not supported for z x z -> z matmul!r‘   )r^   rV   Úfloat32Úfloat16Úbfloat16rB  Úfloat8_e4m3fnrŠ   rÃ   r™   Úis_contiguousr£   rC  r˜   )rY  rZ  r;  rU  r=  r[  r\  r]  r^  Úis_8bit_input_typer  ÚmÚoutput_shapes                r8   Úmeta__cslt_sparse_mmrh  ž  s÷  € ð ‡}�}Ü�‰Ü�‰Ü�‰Ü�
‰
Ü×Ñðñ ô ØOÐPW×P]ÑP]ÈÐ_ó
ð 	
ð ×Ñ˜WŸ]™]Ò*ÜØ3°L×4FÑ4FÐ3GÀuÈWÏ]É]ÈOÐ\ó
ð 	
ô ˆ7�=‰=Ó˜QÒÜØ;¼CÀÇÁÓ<NÐ;OÈqÐQó
ð 	
ð &×+Ñ+´·
±
¼E×<OÑ<OÐ/PÐPÐáØ× Ñ Ô"Ü Ð!QÓRÐRà�‰�Q‹€AØ×Ñ˜!Ó€AØÐØ�—	‘	˜!“ÒÜ Ø(¨¨Ð+<¸T¿Y¹YÀq»\¸NÐKóð ð ÐáØä—‘Ü—‘Ü—‘Ü×#Ñ#ð	ñô !Ø1°,×2DÑ2DÐ1EÀSÈÏÉÈÐW[Ð\eÐ[fÐfnÐoóð ñ .�A�q‘6°A°q°6€LØ×Ñ˜\°ÐÓ;Ð;r:   T)Úinclude_selfr“   ÚsourceÚreduceri  c                óL   — t        j                  | t         j                  ¬«      S r»   ©rV   r¯   r°   ©rš   r†   r“   rj  rk  ri  s         r8   Úmeta_index_reducero  Ý  s   € ô ×Ñ˜D´×0GÑ0GÔHÐHr:   c                ó   — | S rD   r4   rn  s         r8   Úmeta_index_reduce_rq  ê  s	   € ð €Kr:   c                 ó¢   — t        | j                  «       «      }| j                  «       dkD  r|j                  «       ||<   | j	                  |«      S ©Nr   )rÄ   r£   r†   r—   r˜   )rš   r†   r“   Úresult_sizes       r8   Úmeta_index_selectru  ø  s@   € ô �t—y‘y“{Ó#€KØ‡x�xƒz�A‚~Ø Ÿ;™;›=ˆ�CÑØ�>‰>˜+Ó&Ð&r:   )Úlengthsr´   ÚoffsetsÚaxisÚunsafeÚinitialÚdatarv  rw  rx  ry  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 )Nr3   r€   ©r^   rƒ   r¬   )rV   rŒ   r™   r^   r°   )Úlengths_shaperx  r{  s    €€r8   Ú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œ   r3   z<segment_reduce(): Either lengths or offsets must be defined.)ÚNotImplementedErrorr™   r&  )
r{  rk  rv  r´   rw  rx  ry  rz  r€  r  s
   `    `    r8   Úmeta_segment_reducer‚    s|   ù€ ð ÐÜ!ØMó
ð 	
õ
ð ÐÙ,¨W¯]©]Ó;Ð;ð ÐàŸ™ c rÐ*¨g¯m©m¸BÑ.?À!Ñ.CÐ-EÑEˆÙ,¨]Ó;Ð;Ü
ÐUÓ
VÐVr:   c                 ó$   — | j                  d«      S ©Nr4   ©r˜   r±   s    r8   Úmeta_maxr†  %  ó   € ð �>‰>˜"ÓÐr:   c                 óÂ   — t        j                  | j                  |f«      }t        | ||«      }| j	                  |«      | j	                  |t
        j                  ¬«      fS ©Nr‘   ©rO   Úreduction_dimsr™   Ú_compute_reduction_shaper˜   rV   r•   ©rš   r†   Úkeepdimrg  s       r8   Ú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    r8   Úmeta_minr’  5  r‡  r:   c                 óÂ   — t        j                  | j                  |f«      }t        | ||«      }| j	                  |«      | j	                  |t
        j                  ¬«      fS r‰  rŠ  r�  s       r8   Úmeta_min_dimr”  ;  r�  r:   c                 ó¸   — | j                  «       rt        | j                  «      }nt        | t        j
                  ¬«      \  }}t        j                  | |¬«      S ©N©rN   r‘   )rê   r   r^   r   r   ÚINT_TO_FLOATrV   r¯   )rš   rS   rR   s      r8   Ú
meta_angler™  E  sI   € à‡�ÔÜ/°·
±
Ó;‰ä,ØÜ ?× LÑ Lô
‰ˆˆ<ô ×Ñ˜D¨Ô5Ð5r:   c                 ó¨   — t        j                  || j                  «       | j                  «       |j	                  t        j
                  | «      «      S rD   )rV   Ú_resize_output_r£   rƒ   Úcopy_Úangle)rš   rÎ   s     r8   Úmeta_angle_outrž  Q  s6   € ä	×Ñ˜#˜tŸy™y›{¨D¯K©KÔ8Ø�9‰9”U—[‘[ Ó&Ó'Ð'r:   c                  ó   — y rD   r4   )Úvals    r8   Úassert_asyncr¡  W  ó   € à
r:   c                  ó   — y rD   r4   )r   Ú
assert_msgs     r8   Úassert_async_metar¥  \  r¢  r:   c                  ó   — y rD   r4   )Úss    r8   Ú
print_metar¨  a  r¢  r:   ©r^   r‚   rƒ   r„   r¬   c                 ó0   — t        j                  dd¬«      S )Nr   r€   ©rƒ   r  r©  s        r8   Úmake_dep_tokenr¬  f  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ù   Úmax)r$  r®  rp   r
   r	   Ú
ValueError)r£   rù   r±  r®  s       r8   Úsym_constrain_ranger³  r  s/   € õ Fä�$œ¤7Ð+Ô,ÜÐBÓCÐCÙ�D˜c sÖ+r:   c                 ó6   — t         j                  | ||¬«       |S ©Nr°  )r-   r³  ©r£   rù   r±  Ú	dep_tokens       r8   Úfunctional_sym_constrain_ranger¸  |  s   € ä×Ñ˜T s°ÐÔ4ØÐr:   c                 ó.  — ddl m} |€|€t        j                  | dk\  «       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º  rV   rg   rp   r
   r	   r²  rz   rå   )r£   rù   r±  rº  s       r8   Úsym_constrain_range_for_sizer»  ‚  s„   € õ Pà
€{�s�{Ü�‰�T˜Q‘YÔØä�$œ¤7Ð+Ô,ÜÐBÓCÐCÜˆDƒz”SÑØˆ?Ü�L‰L˜ ™Ô%Øˆ?Ü�L‰L˜ ™Ô%ØÙ˜d¨°Ö5r:   c                 ó6   — t         j                  | ||¬«       |S rµ  )r-   r»  r¶  s       r8   Ú'functional_sym_constrain_range_for_sizer½  –  s   € ä×%Ñ% d°¸Ð%Ô=ØÐr:   c                 ó   — |S rD   r4   )r   r¤  r·  s      r8   Úfunctional_assert_async_metar¿  œ  s   € àÐr:   Úf_namec                 óà   ‡ ‡— ‰ j                  «       dk  rt        ‰› d‰ j                  «       › �«      ‚t        j                  ‰ j	                  d«      ‰ j	                  d«      k(  ˆˆ fd„«       y )Nrï   z8: The input tensor must have at least 2 dimensions, got rœ   éþÿÿÿc                  óV   •— ‰ › d‰j                  d«      › d‰j                  d«      › d�S )Nz5: A must be batches of square matrices, but they are rÂ  ú by rœ   ú	 matricesr¢   )rÀ  rš   s   €€r8   re   z#squareCheckInputs.<locals>.<lambda>ª  s1   ø€ �6�(ð ØŸ	™	 "›� d¨4¯9©9°R«=¨/¸ðD€ r:   )r†   rŠ   rV   rg   r£   )rš   rÀ  s   ``r8   r­   r­   ¢  s^   ù€ Ø‡x�xƒz�A‚~ÜØˆhÐNÈtÏxÉxËzÈlÐ[ó
ð 	
ô 
‡L�LØ�	‰	�"‹˜Ÿ™ 2›Ñ&ô	Dõ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   €€r8   re   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   €€r8   re   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   €r8   re   z(linearSolveCheckInputs.<locals>.<lambda>Å  s0   ø€ ðØŸF™F 2›J˜< t¨A¯F©F°2«J¨<°yðBð r:   c                  óž   •— d‰› d‰ j                  d«      › d‰ j                  d«      › d‰j                  d«      › d‰j                  d«      › �
S )NzIncompatible matrix sizes for z: each A matrix is rœ   rÄ  z but each b matrix is rÂ  r¢   )rÆ  rÇ  rš   s   €€€r8   re   z(linearSolveCheckInputs.<locals>.<lambda>Í  sR   ø€ Ø,¨T¨Fð 3ØŸ™ ›˜ D¨¯©°«¨Ø$ T§Y¡Y¨r£] O°4¸¿	¹	À"»°ðHð r:   )rV   rg   rƒ   r^   r£   )rš   rÆ  rÇ  s   ```r8   Ú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 r4   ©r^   rÀ  s   €€r8   re   z(checkFloatingOrComplex.<locals>.<lambda>Þ  s   ø€ �6�(ÐVÐW\ÐV]Ð^€ r:   c                  ó   •— ‰› d‰ › �S )Nz*: Low precision dtypes not supported. Got r4   rÕ  s   €€r8   re   z(checkFloatingOrComplex.<locals>.<lambda>ã  s   ø€ �v�hÐHÈÈÐP€ r:   )	r^   rV   rg   r÷   rê   rZ   r\   rY   r[   )rÑ  rÀ  rÒ  r^   s    ` @r8   r®   r®   Ö  sn   ù€ ð
 �G‰G€EÜ	‡L�LØ	×ÑÓÒ/ §¡£Ü^ôñ &Ü�‰Ø”e—k‘k¤5§<¡<´·±¼u¿}¹}ÐMÐMÜPõ	
ð &r:   Úarg_namec                 ó^   ‡‡— t        j                  | j                  «       dk\  ˆˆfd„«       y )Nrï   c                  ó   •— ‰› d‰ › d�S )Nz: The input tensor z! must have at least 2 dimensions.r4   )r×  rÀ  s   €€r8   re   zcheckIsMatrix.<locals>.<lambda>ë  s   ø€ �6�(Ð-¨h¨ZÐ7XÐY€ r:   )rV   rg   r†   )rÆ  rÀ  r×  s    ``r8   ÚcheckIsMatrixrÚ  è  s   ù€ Ü	‡L�LØ	�‰‹�1‰ÜYõr:   ÚBrÖ   c                 ó   ‡ ‡‡‡— t        ‰ ‰«       t        ‰‰«       t        j                  ‰r#‰ j	                  d«      ‰j	                  d«      k(  n"‰ j	                  d«      ‰j	                  d«      k(  ˆ ˆˆˆfd„«       y )NrÂ  rœ   c                  ó¬   •— ‰› d‰rdnd› d‰ j                  d«      › d‰ j                  d«      › d‰j                  d«      › d‰j                  d«      › d	�S )
Nz2: Incompatible shapes of A and B for the equation zAX = BzXA = Bz (rÂ  r=   rœ   r¡   ry   r¢   )rÆ  rÛ  rÀ  rÖ   s   €€€€r8   re   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Ú  rV   rg   r£   )rÆ  rÛ  rÖ   rÀ  s   ````r8   ÚcheckInputsSolverrÞ  ï  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   €€€€r8   re   z!checkSameDevice.<locals>.<lambda>  s5   ø€ Øˆi�{ ; -Ð/dØˆm˜4 §¡˜¨n¸U¿\¹\¸NðLð r:   )rV   rg   rƒ   )rà  rß  rÚ   rá  s   ````r8   ÚcheckSameDevicerä  ü  s&   û€ ô 
‡L�LØ�‰˜Ÿ™Ñ%ö	
õr:   ÚUPLOc                 óŒ   ‡ — ‰ j                  «       }t        j                  t        ‰ «      dk(  xr |dk(  xs |dk(  ˆ fd„«       y )Nr3   ÚUÚLc                  ó   •— d‰ › �S )Nz1Expected UPLO argument to be 'L' or 'U', but got r4   )rå  s   €r8   re   zcheckUplo.<locals>.<lambda>  s   ø€ ÐCÀDÀ6ÐJ€ r:   )ÚupperrV   rg   rÃ   )rå  ÚUPLO_uppercases   ` r8   Ú	checkUplorì    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   Úpopr`   r^   )rÆ  rå  rï  r™   ÚvecsÚvalss         r8   Ú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­   rO   r‰   r^   r   r˜   r™   )rÚ   Úcomplex_dtypes     r8   Úmeta__linalg_eigvalsrù  &  sc   € ô �eÐ-Ô.ô ×!Ñ! %§+¡+Ô.ð 	�Šä×.Ñ.¨u¯{©{Ó;ð ð
 �?‰?˜5Ÿ;™; s¨Ð+°=ˆ?ÓAÐAr:   c                 ó®  — t        | d«       t        j                  | j                  «      r| j                  nt        j                  | j                  «      }| j                  | j                  d d |¬«      }| j                  | j                  |¬«      }t        | «      dk(  }|j                  | j                  t        | j                  |¬«      «       ||fS )Nz
linalg.eigrœ   r‘   ró   rñ  )
r­   rO   r‰   r^   r   r˜   r™   rø   rÌ   r   )rÚ   rø  r³   ÚvectorsÚis_cudas        r8   Úmeta_linalg_eigrý  2  sµ   € ô �e˜\Ô*ô ×!Ñ! %§+¡+Ô.ð 	�Šä×.Ñ.¨u¯{©{Ó;ð ð
 �_‰_˜UŸ[™[¨¨"Ð-°]ˆ_ÓC€FØ�o‰o˜eŸk™k°ˆoÓ?€GÜ˜%Ó  FÑ*€GØ×ÑØ�‰Ô0°·±ÈÔPôð �7ˆ?Ðr:   r*  c                 óv   — | j                   j                  t        j                  ¬«      j	                  dd«      S )Nr«   rÂ  rœ   )ÚmTrë   rV   r°   Ú	transpose)r*  s    r8   ÚcloneBatchedColumnMajorr  D  s*   € Ø�6‰6�<‰<¤e×&=Ñ&=ˆ<Ó>×HÑHÈÈRÓPÐPr:   rê  c                 ó   — t        | «      S rD   )r  )rš   rÆ  rê  s      r8   Ú_cholesky_solve_helperr  H  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   €r8   re   z cholesky_solve.<locals>.<lambda>S  s   ø€ Ð?ÀÇ	Á	¸{ÐJ]Ð^€ r:   c                  ó$   •— d‰ j                   › d�S )Nz-u should have at least 2 dimensions, but has r  r  rÎ  s   €r8   re   z cholesky_solve.<locals>.<lambda>W  s   ø€ Ð?ÀÇÁ¸xÐGZÐ[€ r:   Úcholesky_solve)rV   rg   r¥   Ú!_linalg_broadcast_batch_dims_namer  )rš   rÆ  rê  Úself_broadcastedÚA_broadcasteds   ``   r8   r	  r	  N  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—   rV   r¯   Úlegacy_contiguous_formatr­   r  ©rš   rê  s     r8   r  r  _  s@   € ð ‡z�zƒ|�qÒÜ×Ñ ´E×4RÑ4RÔSÐSÜ�d˜JÔ'Ü" 4Ó(Ð(r:   c                 ó0   — t        | d«       t        | «      S )NÚcholesky_inverse)r­   r  r  s     r8   r  r  h  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Ì   rV   rC  )rÆ  rê  r  ÚA_shaper¥   Ú	L_stridesrè  Úinfoss           r8   Úlinalg_cholesky_exr  p  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.r4   r4   r:   r8   re   z,linalg_householder_product.<locals>.<lambda>‰  rm   r:   rÂ  rœ   c                   ó   — y)Nzbtorch.linalg.householder_product: input.shape[-2] must be greater than or equal to input.shape[-1]r4   r4   r:   r8   re   z,linalg_householder_product.<locals>.<lambda>�  rm   r:   c                   ó   — y)Nz`torch.linalg.householder_product: input.shape[-1] must be greater than or equal to tau.shape[-1]r4   r4   r:   r8   re   z,linalg_householder_product.<locals>.<lambda>‘  rm   r:   r3   c                  ó<   •— d‰j                   › d‰ j                   › �S )Nzptorch.linalg.householder_product: Expected tau to have one dimension less than input, but got tau.ndim equal to ú and input.ndim is equal to r  ©rÚ   r  s   €€r8   re   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 r4   ©Úactual_batch_tau_shapes   €r8   re   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‘   r   s   €€r8   re   z,linalg_householder_product.<locals>.<lambda>¨  s#   ø€ Ø:¸3¿9¹9¸+Ø*¨5¯;©;¨-ð9ð r:   z torch.linalg.householder_productr  Frñ  ©r£   rÇ   r^   rƒ   )
rV   rg   r¥   r£   r™   r^   rä  Úempty_stridedr   rƒ   )rÚ   r  Úexpected_batch_tau_shaper$  s   `` @r8   Úlinalg_householder_productr*  ‚  sK  ú€ ô
 
‡L�LØ�
‰
�a‰ÙZôô 
‡L�LØ�
‰
�2‹˜%Ÿ*™* R›.Ñ(Ùtôô 
‡L�LØ�
‰
�2‹˜#Ÿ(™( 2›,Ñ&Ùrôô
 
‡L�LØ�
‰
�S—X‘XÑ Ñ"ô	
ôð ‡z�z�A‚~Ø#(§;¡;¨s°Ð#3Ð Ø!$§¡¨3¨B ÐÜ�‰Ø"Ð&>Ñ>óô	
ô 
‡L�LØ�	‰	�U—[‘[Ñ ô	
ôô Ð6¸¸UÀEÔJä×ÑØ�[‰[Ü*¨5¯;©;À%ÔHØ�k‰kØ�|‰|ô	ð r:   c                 ó2  — t        | d«       t        | dd¬«       | j                  | j                  «      }|j	                  | j                  t        | j                  d¬«      «       | j                  | j                  d d t        j                  ¬«      }||fS )Nzlinalg.inv_exF)rÒ  rñ  rÂ  r‘   ©r­   r®   r˜   r™   rÌ   r   rV   rC  )rÆ  r  rè  r  s       r8   Úlinalg_inv_ex_metar-  ¸  sq   € ä�a˜Ô)Ü˜1˜oÈ%ÕPà	�‰�A—G‘GÓ€AØ‡M�M�!—'‘'Ô6°q·w±wÈ%ÔPÔQà�K‰K˜Ÿ™  ˜¬E¯K©KˆKÓ8€EØˆeˆ8€Or:   ÚLDÚpivotsÚinfo)Ú	hermitianr  r1  c                óŒ  — t        | d«       t        | d«       t        j                  | j                  t        | j                  d¬«      | j                  | j                  ¬«      }| j                  | j                  d d t        j                  ¬«      }| j                  | j                  d d t        j                  ¬«      }|||fS )Nztorch.linalg.ldl_factor_exFrñ  r'  rœ   r‘   rÂ  )
r­   r®   rV   r(  r™   r   r^   rƒ   r˜   rå   )rš   r1  r  r.  r/  r0  s         r8   Úlinalg_ldl_factor_ex_metar3  Ä  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:   )r1  c                ód  ‡ ‡‡— t        ‰ d«       t        ‰ d«       t        ‰‰ d«       t        j                  ‰j
                  dk\  ˆfd„«       ‰ j                  d d }t        j                  |‰j                  k(  ˆfd„«       t        j                  t        j                  ‰j                  «      ˆfd„«       t        j                  ‰ j                  ‰j                  k(  ˆˆ fd„«       t        ‰‰ «      \  }}t        j                  |t        |d¬	«      ‰j                  ‰j                  ¬
«      S )Nztorch.linalg.ldl_solverï   c                  ó$   •— d‰ j                   › d�S )NzMtorch.linalg.ldl_solve: Expected B to have at least 2 dimensions, but it has r  r  )rÛ  s   €r8   re   z'linalg_ldl_solve_meta.<locals>.<lambda>ç  ó   ø€ ðØŸ&™&˜Ð!4ð6ð r:   rœ   c                  ó$   •— d‰ j                   › d�S )Nzjtorch.linalg.ldl_solve: Expected LD.shape[:-1] and pivots.shape to be the same, but got pivots with shape ú instead©r™   ©r/  s   €r8   re   z'linalg_ldl_solve_meta.<locals>.<lambda>ï  ó   ø€ ð)Ø)/¯©¨°hð@ð r:   c                  ó"   •— d‰ j                   › �S )Nz<torch.linalg.ldl_solve: Expected pivots to be integers. Got r‘   r:  s   €r8   re   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Û  r.  s   €€r8   re   z'linalg_ldl_solve_meta.<locals>.<lambda>ú  s"   ø€ Ð3°B·H±H°:Ð=UÐVW×V]ÑV]ÐU^Ð_€ r:   Frñ  r'  )r­   r®   rÐ  rV   rg   r¥   r™   rO   Úis_integer_dtyper^   Ú_linalg_broadcast_batch_dimsr(  r   rƒ   )r.  r/  rÛ  r1  Úexpected_pivots_shapeÚB_broadcast_sizerR   s   ```    r8   Úlinalg_ldl_solve_metarB  Ù  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ç  )ÚpivotrD  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: r8  r9  rÎ  s   €r8   re   z linalg_lu_meta.<locals>.<lambda>
  s   ø€ ÐRÐST×SZÑSZÐR[Ð[cÐd€ r:   rÂ  rœ   r   )rV   rg   r¥   rÄ   r™   r   r˜   )	rÆ  rD  Úsizesrf  r  ÚkrC  rè  rç  s	   `        r8   Úlinalg_lu_metarI    s·   ø€ ô 
‡L�LØ	�‰�!‰Ûdôô
 �—‘‹M€EØˆb‰	€AØˆb‰	€Aä��1‹€Aà€Eˆ"�IÙØ�K‰K˜Ó‰à�K‰K˜˜Óˆà€Eˆ"�IØ	�‰�EÓ€Aà€Eˆ"�IØ€Eˆ"�IØ	�‰�EÓ€AØˆa�ˆ7€Nr:   ÚLU)rD  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: r8  r9  rÎ  s   €r8   re   z*linalg_lu_factor_ex_meta.<locals>.<lambda>,  s   ø€ ÐXÐYZ×Y`ÑY`ÐXaÐaiÐj€ r:   rÂ  rœ   Frñ  r'  r‘   )rV   rg   r¥   rÄ   r™   r(  r   r^   rƒ   ró  r   r˜   rå   )	rÆ  rD  r  rG  rf  r  rJ  r/  r0  s	   `        r8   Úlinalg_lu_factor_ex_metarM  "  sÉ   ø€ ô 
‡L�LØ	�‰�!‰Ûjôô
 �—‘‹M€EØˆb‰	€AØˆb‰	€Aä	×	Ñ	ØÜ*¨5¸EÔBØ�g‰gØ�x‰xô	
€Bð 
‡I�I„Kä˜˜1“€Eˆ"�IØ�[‰[˜¤e§i¡iˆ[Ó0€Fð 
‡I�I„KØ�;‰;�u¤E§I¡Iˆ;Ó.€Dàˆv�tÐÐr:   )rÖ   ÚadjointrN  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 r8  r‘   )rÛ  rJ  s   €€r8   re   z&linalg_lu_solve_meta.<locals>.<lambda>U  s(   ø€ ð$Ø$&§H¡H :¨_¸Q¿W¹W¸IÀXðOð r:   c                   ó   — y)NzElinalg.lu_solve: pivots should be a Tensor of scalar type torch.int32r4   r4   r:   r8   re   z&linalg_lu_solve_meta.<locals>.<lambda>\  rm   r:   zlinalg.lu_solverœ   c                   ó   — y)NzYlinalg.lu_solve: Number of pivots per batch should be same as the dimension of the matrixr4   r4   r:   r8   re   z&linalg_lu_solve_meta.<locals>.<lambda>d  rm   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 r8  r9  r:  s   €r8   re   z&linalg_lu_solve_meta.<locals>.<lambda>j  r;  r:   rñ  r'  r   )r®   rV   rg   r^   rå   r­   rÞ  r£   r™   r?  r(  r   rƒ   r—   rê   Úconj)rJ  r/  rÛ  rÖ   rN  rA  rR   rß  s   ```     r8   Úlinalg_lu_solve_metarV  G  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: r8  r9  )rJ  s   €r8   re   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_factorr4   r4   r:   r8   re   z lu_unpack_meta.<locals>.<lambda>�  s   € ðpð r:   rÂ  rœ   r   )	rV   rg   r¥   r^   rC  rÄ   r™   rù   r˜   )rJ  r/  rW  rX  rG  rf  r  rH  rC  rè  rç  s   `          r8   Ú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'r4   )r]  s   €r8   re   z _parse_qr_mode.<locals>.<lambda>·  s   ø€ Ø1°$°ð 8Nð Oð r:   ©rV   rg   )r]  Ú	compute_qr_  s   `  r8   Ú_parse_qr_modere  ª  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®   re  r™   rù   rÄ   r˜   rÌ   r   )rÆ  r]  rd  Úreduced_moderf  r  rH  ÚQ_shaperf  ÚR_shaperg  s              r8   Úlinalg_qr_metarl  ¿  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‘   r'  rœ   )r­   r®   r™   r˜   r`   r^   rV   r(  r   rƒ   rC  )rÆ  r™   rm  rn  rJ  r/  s         r8   Ú_linalg_slogdetrp  Û  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ø   r`   r^   )rÆ  rq  rr  rs  rÒ   rf  r  rH  ÚU_shaperç  ÚV_shapeÚVrü  ÚSs                 r8   Ú_linalg_svd_metary  ï  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£   )rz  r{  Úarg1_batch_sizesÚarg2_batch_sizesÚexpand_batch_portionÚarg1_expand_sizeÚarg2_expand_sizes          r8   r?  r?    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 rD   )rÐ  r?  r™   Úexpand)rz  r{  rÇ  r€  r�  Úarg1_broadcastedÚarg2_broadcasteds          r8   r
  r
  &  sv   € ñ Ü˜t T¨4Ô0ä)EÀdÈDÓ)QÑ&ÐÐ&ð ! D§J¡JÒ.‰°D·K±KÐ@PÓ4Qð ð ! D§J¡JÒ.‰°D·K±KÐ@PÓ4Qð ð Ð-Ð-Ð-r:   r¤   c                 ó    — | j                   d d }|j                  dk(  xs- | j                  dz
  |j                  k(  xr |j                   |k(  }|S )Nrœ   r3   )r™   r¥   )rÚ   r¤   Úexpected_batched_rhs_shapeÚvector_cases       r8   Úlinalg_solve_is_vector_rhsr‰  :  sS   € Ø!&§¡¨S¨bÐ!1ÐØ—*‘* ‘/ò Ø�
‰
�Q‰˜%Ÿ*™*Ñ$ÒR¨¯©Ð8RÑ)Rð ð Ðr:   )rÖ   r  rß  rJ  r/  r0  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 rQ  r8  r‘   )rÆ  rÛ  s   €€r8   re   z"_linalg_solve_ex.<locals>.<lambda>Q  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)r4   r4   r:   r8   re   z"_linalg_solve_ex.<locals>.<lambda>\  s   € ðKð r:   r'  Fr‘   rÂ  c              3   ó$   K  — | ]  }|d u–— Œ
 y ­wrD   r4   )rr   r=   s     r8   rt   z#_linalg_solve_ex.<locals>.<genexpr>s  s   è ø€ Ò
&˜Qˆ1�DŒ=Ñ
&ùs   ‚)Ú	copy_fromÚcopy_toÚexact_dtype)r®   rV   rg   r^   r‰  Ú	unsqueezerÞ  r?  r(  r   rƒ   r™   r˜   rC  ÚallÚzipr!   rÌ   rÇ   r#   )rÆ  rÛ  rÖ   r  rß  rJ  r/  r0  rˆ  ÚB_ÚB_broad_shaperR   Úresult_shapeÚresult_r™   ÚLU_Úpivots_Úinfo_rÎ   Úresra  Úos   ``                    r8   Ú_linalg_solve_exr�  B  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t        dt	        |«      › �«      ‚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out must be TensorLike, got zlinalg.solve_triangularrÂ  rœ   )r˜   rp   r   rŠ   rz   rÞ  r
  r   rd  Úis_conjr!   r™   r"   rË   Ú
transpose_)	rÆ  rÛ  rê  rÖ   rž  rÎ   r”  ÚA_Úavoid_copy_As	            r8   Úlinalg_solve_triangular_metar¤  }  sÙ   € ð €{Ø�k‰k˜1˜#ÓˆÜ�cœ:Ô&ÜÐ;¼DÀ»I¸;ÐGÓHÐHÜ�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 r  r  r±   s   €r8   re   z'triangular_solve_meta.<locals>.<lambda>£  s   ø€ ðØŸ)™)˜Ð$7ð9ð r:   c                  ó$   •— d‰ j                   › d�S )NzMtorch.triangular_solve: Expected A to have at least 2 dimensions, but it has r  r  rÎ  s   €r8   re   z'triangular_solve_meta.<locals>.<lambda>ª  r6  r:   Útriangular_solveFrñ  r'  r   c                   ó   — y)Nz+triangular_solve: Got an unexpected layout.r4   r4   r:   r8   re   z'triangular_solve_meta.<locals>.<lambda>Ä  rm   r:   )rV   rg   r¥   rÐ  r‚   Ústridedr?  r(  r   r^   rƒ   Ú
sparse_csrÚ
sparse_bsrr¯   r˜   )	rš   rÆ  rê  r   rž  Úself_broadcast_sizeÚA_broadcast_sizeÚsolutionÚcloned_coefficients	   ``       r8   Ú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‘   r,  )rÆ  ÚdetrJ  r/  s       r8   Ú_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.r4   r4   r:   r8   re   zormqr.<locals>.<lambda>á  rm   r:   c                   ó   — y)Nz3torch.ormqr: other must have at least 2 dimensions.r4   r4   r:   r8   re   zormqr.<locals>.<lambda>ä  rm   r:   rÂ  rœ   c                  ó   •— d‰ › d�S )Nútorch.ormqr: other.shape[z0] must be greater than or equal to tau.shape[-1]r4   ©Úleft_size_conditions   €r8   re   zormqr.<locals>.<lambda>ê  s   ø€ Ð+Ð,?Ð+@Ð@pÐq€ r:   c                  ó   •— d‰ › d�S )Nr»  z"] must be equal to input.shape[-2]r4   r¼  s   €r8   re   zormqr.<locals>.<lambda>î  s   ø€ Ð+Ð,?Ð+@Ð@bÐc€ r:   c                   ó   — y)NzHtorch.ormqr: tau.shape[-1] must be less than or equal to input.shape[-1]r4   r4   r:   r8   re   zormqr.<locals>.<lambda>ó  rm   r:   r3   c                  ó<   •— d‰j                   › d‰ j                   › �S )Nz[torch.ormqr: Expected tau to have one dimension less than input, but got tau.ndim equal to r  r  r   s   €€r8   re   zormqr.<locals>.<lambda>ø  r!  r:   c                  ó<   •— d‰j                   › d‰ j                   › �S )Nzhtorch.ormqr: Expected other to have the same number of dimensions as input, but got other.ndim equal to r  r  ©rÚ   r¤   s   €€r8   re   zormqr.<locals>.<lambda>ÿ  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 r4   r#  s   €r8   re   zormqr.<locals>.<lambda>
  r%  r:   c                  ó   •— d‰ › �S )NzYtorch.ormqr: Expected batch dimensions of other to be equal to input.shape[:-2], but got r4   )Úactual_batch_other_shapes   €r8   re   zormqr.<locals>.<lambda>  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‘   r   s   €€r8   re   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   €€r8   re   zormqr.<locals>.<lambda>"  s'   ø€ ð#Ø#(§;¡; -Ð/DÀUÇ[Á[ÀMðSð r:   ztorch.ormqrr  r¤   Frñ  r'  )	rV   rg   r¥   r™   r^   rä  r(  r   rƒ   )	rÚ   r  r¤   rÖ   r   Úexpected_batch_shaperÅ  r$  r½  s	   ```   @@@r8   Ú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                ór  ‡ ‡‡— t        j                  t        ‰«      d‰z  k(  ˆˆfd„«       ‰ j                  }|‰dz   k(  }|}| }|r*t	        d|«      D ]  }|xr ‰ j                  |«      dk7  }Œ n(t	        |«      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   €€r8   re   z,_padding_check_valid_input.<locals>.<lambda>6  s   ø€ Ð1°!°c±'°¸+ÄcÈ'ÃlÀ^ÐT€ r:   r3   r   c                  ó:   •— d‰ dz   › d‰ dz   › d‰j                   › �S )Nú	Expected r3   zD or rï   zcD (batch mode) tensor with possibly 0 batch size and other non-zero dimensions for input, but got: r9  )r†   rÚ   s   €€r8   re   z,_padding_check_valid_input.<locals>.<lambda>K  s2   ø€ Ø˜˜a™�y  c¨A¡g Yð /AØAFÇÁÀðOð r:   )rV   rg   rÃ   r¥   rÅ   r£   )rÚ   rÍ  r†   Ú	input_dimÚis_batch_modeÚvalid_batch_modeÚvalid_non_batch_moderÕ   s   ```     r8   Ú_padding_check_valid_inputrÔ  3  sÉ   ú€ Ü	‡L�LÜˆG‹˜˜C™ÑÜTôð
 —
‘
€Ià #¨¡'Ñ*€Mà$ÐØ,Ð,Ðáä�q˜)Ó$ò 	GˆAØ/ÒF°E·J±J¸q³MÀQÑ4FÑñ	Gô �yÓ!ò 	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   r3   r0   r�   c                  ó4   •— d‰› d‰› d‰ › d‰j                   › �S ©NzcArgument #4: Padding size should be less than the corresponding input dimension, but got: padding (rx   ú) at dimension ú
 of input r9  ©Údim_wrÚ   Úpad_lÚpad_rs   €€€€r8   re   z_pad1d_common.<locals>.<lambda>g  ó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: r4   )Úinput_wÚoutput_ws   €€r8   re   z_pad1d_common.<locals>.<lambda>o  s   ø€ �*˜W˜IÐ%JÈ8È*ÐU€ r:   rï   )r¥   r£   rÔ  rV   rg   r˜   )rÚ   rÍ  Úis_reflectionÚ	dim_planeÚnbatchÚnplanerÛ  rà  rá  rÜ  rÝ  s   `     @@@@@r8   Ú_pad1d_commonræ  R  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     r8   Úmeta_reflection_pad1drë  x  ó   € ô ˜ °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 'ú'©r^   Ú__str__©rÚ   s   €r8   re   z(meta_replication_pad1d.<locals>.<lambda>ƒ  ó    ø€ Ð=¸e¿k¹k×>QÑ>QÓ>SÐ=TÐTUÐX€ r:   Fré  )rV   rg   r^   Úboolræ  rê  s   ` r8   Ú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 )Nr3   rï   c                   ó   — y)Nz padding size is expected to be 2r4   r4   r:   r8   re   z(_pad1d_backward_common.<locals>.<lambda>‹  rm   r:   r0   c                  ó4   •— d‰› d‰› d‰ › d‰j                   › �S r×  r9  rÚ  s   €€€€r8   re   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   €€€r8   re   z(_pad1d_backward_common.<locals>.<lambda>   ó"   ø€ Ð:¸8¸*ÀGÈK×L\ÑL\Ð]bÓLcÐKdÐe€ r:   )rV   rg   rÃ   r¥   r£   r˜   r™   )	rþ  rÚ   rÍ  râ  rà  rÛ  rá  rÜ  rÝ  s	   ``   @@@@r8   Ú_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      r8   Úmeta_reflection_pad1d_backwardr  ¦  s   € ô " +¨u°gÈTÔRÐRr:   c                 ó    — t        | ||d¬«      S )NFré  r  r  s      r8   Úmeta_replication_pad1d_backwardr  ¬  s   € ô " +¨u°gÈUÔSÐSr:   c                ó’  ‡ ‡‡‡	‡
‡‡‡‡‡‡— dŠdŠd}d}t        ‰ |d¬«       ‰ j                  }|dk(  r ‰ j                  d«      }‰dz  Š‰dz  Š|dz  }|\  ŠŠŠŠ‰ j                  |«      }‰ j                  ‰«      Š	‰ j                  ‰«      Š
‰	‰z   ‰z   Š‰
‰z   ‰z   Š|rLt        j                  ‰‰
k  xr ‰‰
k  ˆˆ ˆˆfd„«       t        j                  ‰‰	k  xr ‰‰	k  ˆˆ ˆˆfd„«       t        j                  ‰dk\  xs ‰dk\  ˆ	ˆ
ˆˆfd„«       ‰ j                  d	k(  r‰ j                  |‰‰f«      S ‰ j                  ||‰‰f«      S )
Nrï   r3   r   r�   é   c                  ó4   •— d‰› d‰› d‰ › d‰j                   › �S r×  r9  rÚ  s   €€€€r8   re   z_pad2d_common.<locals>.<lambda>Ì  rÞ  r:   c                  ó4   •— d‰› d‰› d‰ › d‰j                   › �S ©NzcArgument #6: Padding size should be less than the corresponding input dimension, but got: padding (rx   rØ  rÙ  r9  ©Údim_hrÚ   Úpad_bÚpad_ts   €€€€r8   re   z_pad2d_common.<locals>.<lambda>Ó  rÞ  r:   c                  ó    •— d‰ › d‰› d‰› d‰› �S )Nz
input (H: ú W: z%) is too small. Calculated output H: r4   )Úinput_hrà  Úoutput_hrá  s   €€€€r8   re   z_pad2d_common.<locals>.<lambda>Û  s*   ø€ Ø˜˜	  g Yð /$Ø$, :¨T°(°ð=ð r:   r0   ©rÔ  r¥   r£   rV   rg   r˜   )rÚ   rÍ  râ  Ú
dim_slicesrä  r¥   rå  r  rÛ  r  rà  r  rá  r  rÜ  rÝ  r  s   `      @@@@@@@@@@r8   Ú_pad2d_commonr  ²  sU  ÿú€ Ø€EØ€EØ€JØ€Fä˜u g°1Õ5à�:‰:€DØˆq‚yØ—‘˜A“ˆØ�‰
ˆØ�‰
ˆØ�a‰ˆ
à!(Ñ€Eˆ5�%˜à�Z‰Z˜
Ó#€FØ�j‰j˜Ó€GØ�j‰j˜Ó€GØ˜‰ Ñ&€HØ˜‰ Ñ&€HáÜ�‰Ø�G‰OÒ/ ¨¡öô	
ô 	�‰Ø�G‰OÒ/ ¨¡öô	
ô 
‡L�LØ�A‰Ò&˜ Q™ö	
ôð ‡z�z�Q‚Ø�‰ ¨°(Ð;Ó<Ð<à�‰ ¨°¸(ÐCÓDÐDr:   c                 ó   — t        | |d¬«      S rè  )r  rê  s     r8   Úmeta_reflection_pad2dr  ç  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   €r8   re   z(meta_replication_pad2d.<locals>.<lambda>ò  ró  r:   Fré  )rV   rg   r^   rô  r  rê  s   ` r8   Úmeta_replication_pad2dr  í  rö  r:   c                 ó^   — t        j                  |«      }t        j                  |«      }||fS rD   ©rV   r¯   )Úgrad_wÚsaved_vÚsaved_gÚsaved_normsr†   Úgrad_vÚgrad_gs          r8   Úmeta_weight_norm_backwardr%  ÷  s.   € ô ×Ñ˜gÓ&€FÜ×Ñ˜gÓ&€FØ�6ˆ>Ð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ï   r3   r   r	  c                  ó2   •— d‰› d‰j                  ‰ «      › �S rû  r¢   rý  s   €€€r8   re   z%meta_pad2d_backward.<locals>.<lambda>  rÿ  r:   c                  ó2   •— d‰› d‰j                  ‰ «      › �S ©Nz)grad_output height unexpected. Expected: rü  r¢   ©r  rþ  r  s   €€€r8   re   z%meta_pad2d_backward.<locals>.<lambda>!  ó"   ø€ Ð;¸H¸:ÀWÈ[×M]ÑM]Ð^cÓMdÐLeÐf€ r:   )r™   r†   rV   rg   r£   r˜   )rþ  rš   rÍ  rã  rd   rÜ  rÝ  r  r  r  rà  r  rÛ  r  rá  s   `          @@@@r8   Úmeta_pad2d_backwardr,     sÞ   ü€ ð €EØ€EØ€Ià—‘€JØ‡x�xƒz�Q‚Ø�‰
ˆØ�‰
ˆØ�Q‰ˆ	à!(Ñ€Eˆ5�%˜à˜Ñ€GØ˜Ñ€GØ˜‰ Ñ&€HØ˜‰ Ñ&€Hä	‡L�LØ�K×$Ñ$ UÓ+Ñ+Ýeôô 
‡L�LØ�K×$Ñ$ UÓ+Ñ+Ýfôð �>‰>˜$Ÿ*™*Ó%Ð%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 )Nr0   rï   r3   r   r�   é   c                  ó4   •— d‰› d‰› d‰ › d‰j                   › �S r×  r9  rÚ  s   €€€€r8   re   z_pad3d_common.<locals>.<lambda>C  rÞ  r:   c                  ó4   •— d‰› d‰› d‰ › d‰j                   › �S r  r9  r  s   €€€€r8   re   z_pad3d_common.<locals>.<lambda>J  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 (rx   rØ  rÙ  r9  )Údim_drÚ   Úpad_bkÚpad_fs   €€€€r8   re   z_pad3d_common.<locals>.<lambda>Q  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: r4   )Úinput_dr  rà  Úoutput_dr  rá  s   €€€€€€r8   re   z_pad3d_common.<locals>.<lambda>Y  s7   ø€ Ø˜˜	  g Y¨d°7°)ð <$Ø$, :¨T°(°¸4À¸zðKð r:   r  )rÚ   rÍ  râ  rã  Ú
batch_moderä  rå  r2  r  rÛ  r7  r  rà  r8  r  rá  r  r3  r4  rÜ  rÝ  r  s   `      @@@@@@@@@@@@@@@r8   Ú_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     r8   Úmeta_reflection_pad3dr<  e  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   €r8   re   z(meta_replication_pad3d.<locals>.<lambda>p  ró  r:   Fré  )rV   rg   r^   rô  r:  rê  s   ` r8   Úmeta_replication_pad3dr?  k  rö  r:   c                 óT  ‡ ‡‡‡‡‡‡— t        j                  t        |«      dk(  d„ «       |j                  dk  rt	        d|j                  › �«      ‚‰ j                  |j                  k7  r%t	        d‰ j                  › d|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 6r4   r4   r:   r8   re   z%meta_pad3d_backward.<locals>.<lambda>  rm   r:   r0   zinput.ndim must be > 3, got z,grad_output.ndim must equal input.ndim, got ú != rï   r3   r.  c                  ó2   •— d‰› d‰j                  ‰ «      › �S rû  r¢   rý  s   €€€r8   re   z%meta_pad3d_backward.<locals>.<lambda>›  rÿ  r:   c                  ó2   •— d‰› d‰j                  ‰ «      › �S r)  r¢   r*  s   €€€r8   re   z%meta_pad3d_backward.<locals>.<lambda>Ÿ  r+  r:   c                  ó2   •— d‰› d‰j                  ‰ «      › �S )Nz(grad_output depth unexpected. Expected: rü  r¢   )r2  rþ  r8  s   €€€r8   re   z%meta_pad3d_backward.<locals>.<lambda>£  rÿ  r:   )rV   rg   rÃ   r¥   rŠ   r£   r˜   r™   )rþ  rÚ   rÍ  rÜ  rÝ  r  r  r4  r3  r7  r  rà  r2  r  rÛ  r8  r  rá  s   `           @@@@@@r8   Úmeta_pad3d_backwardrG  u  s™  þ€ ô 
‡L�L”�W“ Ñ"Ñ$NÔOØ‡z�z�Q‚ÜÐ;¸E¿J¹J¸<ÐHÓIÐIØ×Ñ˜5Ÿ:™:Ò%ÜØ:¸;×;KÑ;KÐ:LÈDÐQV×Q[ÑQ[ÐP\Ð]ó
ð 	
ð €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 inputr4   r4   r:   r8   re   z%meta__pdist_forward.<locals>.<lambda>­  rm   r:   r   r3   r«   rï   )rV   rg   rd  r£   r˜   r'  r  )rš   rH  r  s      r8   Ú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 contiguousr4   r4   r:   r8   re   z&meta__pdist_backward.<locals>.<lambda>¼  rm   r:   c                   ó   — y)Nz/_pdist_backward requires pdist to be contiguousr4   r4   r:   r8   re   z&meta__pdist_backward.<locals>.<lambda>¿  rm   r:   r«   )rV   rg   rd  r¯   r  )rL  rš   rH  rM  s       r8   Úmeta__pdist_backwardrQ  ¸  sW   € ô 
‡L�LØ×ÑÓÑVôô 
‡L�LØ×ÑÓÑXôô ×Ñ˜D´×0NÑ0NÔOÐOr:   )rV  rU  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   )Úguard_or_trueÚsym_eqr3   rï   r0   c                   ó   — y©Nzbatch1 must be a 3D tensorr4   r4   r:   r8   re   zmeta_baddbmm.<locals>.<lambda>Î  rm   r:   c                   ó   — y©Nzbatch2 must be a 3D tensorr4   r4   r:   r8   re   zmeta_baddbmm.<locals>.<lambda>Ï  rm   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   €€€r8   re   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: [rx   z] but got: [r   r3   ú].r4   ©Úbatch2_sizesÚbsÚcontraction_sizes   €€€r8   re   zmeta_baddbmm.<locals>.<lambda>Û  s:   ø€ ðØˆt�2Ð&Ð' |°LÀ±OÐ3DÀBÀ|ÐTUÁÐFWÐWYð[ð r:   )r$  rS  rT  r£   rV   Úsym_notr™   rƒ  rg   r†   Ú
exp_configÚ&skip_dtype_check_in_meta_registrationsr^   r˜   )rš   rZ  r[  rV  rU  rS  rT  Údim1Údim2Údim3Úbatch1_sizesr`  ra  rb  s   ```        @@@r8   Úmeta_baddbmmrj  Ä  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»   rm  ©rš   r  s     r8   Úmeta_bernoullirm  ã  s   € ô ×Ñ˜D´×0GÑ0GÔHÐHr:   c                 ó   — | S rD   r4   ©rš   rH  r  s      r8   Úmeta_bernoulli_rp  ê  ó   € à€Kr:   c                 óL   — t        j                  | t         j                  ¬«      S r»   rm  ro  s      r8   Úmeta_bernoulli_prs  ï  s   € ô ×Ñ˜D´×0GÑ0GÔHÐHr:   c                 ó,   — t        j                  | «      S rD   r  rl  s     r8   Úmeta_poissonru  õ  ó   € ô ×Ñ˜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()r4   r4   r:   r8   re   z6meta__fused_moving_avg_obs_fq_helper.<locals>.<lambda>	  rm   r:   r‘   )rV   rg   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                 r8   Ú$meta__fused_moving_avg_obs_fq_helperr†  û  sO   € ô  
‡L�LØ�$—(‘(“*ÑÙ\ôô ×Ñ˜D¬¯
©
Ô3€DÜ×Ñ˜TÓ" DÐ)Ð)r:   c                 ó@  ‡‡‡‡— t        j                  | j                  «       dk(  d„ «       t        j                  |j                  «       dk(  d„ «       | j                  \  ŠŠ|j                  \  ŠŠt        j                  ‰‰k(  ˆˆˆˆfd„«       |�gt        j                  || j                  k(  xsA |t         j
                  k(  xr, | j                  t         j                  t         j                  fv d„ «       |€| j                  n|}| j                  ‰‰f|¬«      S )Nrï   c                   ó   — y)Nza must be 2Dr4   r4   r:   r8   re   zmeta_mm.<locals>.<lambda>	  rm   r:   c                   ó   — y)Nzb must be 2Dr4   r4   r:   r8   re   zmeta_mm.<locals>.<lambda>	  rm   r:   c            	      ó"   •— d‰› d‰ › d‰› d‰› d�	S )Nz/a and b must have same reduction dim, but got [rx   z] X [r^  r4   )ÚM1ÚM2ÚNrC  s   €€€€r8   re   zmeta_mm.<locals>.<lambda>	  s(   ø€ ÐAÀ!ÀÀBÀrÀdÈ%ÐPRÈtÐSUÐVWÐUXÐXZÐ[€ r:   c                   ó   — y)NzFout_dtype must be the same as input dtype or fp32 for fp16/bf16 inputsr4   r4   r:   r8   re   zmeta_mm.<locals>.<lambda>%	  rm   r:   r‘   )	rV   rg   r†   r™   r^   r`  ra  rb  r˜   )r6   r7   r=  rS   r‹  rŒ  r�  rC  s       @@@@r8   Úmeta_mmr�  	  sâ   û€ ô 
‡L�L�—‘“˜A‘Ñ5Ô6Ü	‡L�L�—‘“˜A‘Ñ5Ô6Ø�G‰G�E€A€rØ�G‰G�E€BˆÜ	‡L�LØ
ˆb‰Þ[ôð ÐÜ�‰Ø˜Ÿ™Ñ ò àœUŸ]™]Ñ*ò ?Ø—G‘G¤§¡¬u¯~©~Ð>Ð>á\ô	
ð (Ð/�1—7’7°Y€LØ�;‰;˜˜1�v \ˆ;Ó2Ð2r:   c                 óš   ‡ ‡— |r(t        ˆˆ fd„t        ‰ j                  «      D «       «      S t        j                  ‰ j
                  ‰«      S )Nc              3   óH   •K  — | ]  }|‰vr‰j                   |   nd –— Œ y­w)r3   Nr9  )rr   rÞ   Údimsrš   s     €€r8   rt   z+_compute_reduction_shape.<locals>.<genexpr>-	  s$   øè ø€ ÒU¸q a¨t¡m�T—Z‘Z ’]¸Ó:ÑUùs   ƒ")rf   rÅ   r¥   rO   Úcompute_reduction_output_shaper™   )rš   r’  rŽ  s   `` r8   rŒ  rŒ  +	  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)Nrƒ   rz   r€   ró   )rp   rV   Ú_subclassesÚ
FakeTensorÚfake_devicerz   Úhasattrrƒ   )r0  s    r8   rø   rø   6	  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                   |‰|   ||   ||   |
|   ||   «      «       Œ_ ddlm	} ddl
m} t        | |«      r| j                  n| j                  }|j                  dk(  xr t        j                   j"                  d u }|s1t        j$                   |‰d
d  D �cg c]  }|dkD  ‘Œ	 c}Ž ˆˆfd„«       ‰S c c}w )NÚlnrH  rÕ   rH  r§  r@   c                 ó6   — | d|z  z   ||dz
  z  z
  dz
  |z  dz   S )a�  
        Formula to apply to calculate the length of some dimension of the output

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

        Args:
            ln: length of the dimension
            p: padding in that dim
            d: dilation in that dim
            k: kernel size in that dim
            s: stride in that dim
        Returns:
            The output length
        rï   r3   r4   )rŸ  rH  rÕ   rH  r§  s        r8   Ú_formulaz+calc_conv_nd_return_shape.<locals>._formulaM	  s.   € ð �Q˜‘U‘
˜Q ! a¡%™[Ñ(¨1Ñ,°Ñ2°QÑ6Ð6r:   rE   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
        r3   rï   r4   )rŸ  rH  rÕ   rH  r§  rE   s         r8   Ú_formula_transposedz6calc_conv_nd_return_shape.<locals>._formula_transposed^	  s2   € ð" �Q‘˜!‰|˜a !™eÑ# a¨1¨q©5¡kÑ1°BÑ6¸Ñ:Ð:r:   rï   r3   r   zInvalid channel dimensions)r–  )Úsym_orró   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   €€r8   re   z+calc_conv_nd_return_shape.<locals>.<lambda>À	  s,   ø€ Ð4´T¸$³Z°Lð A3Ø3<¸Q¸R°=°/ð B'ð(€ r:   )rå   r™   r&  rp   r   rÃ   rÅ   rÆ   Útorch._subclasses.fake_tensorr–  r$  r¤  r—  rƒ   rz   rV   ÚversionÚhiprg   )r™  r9  rÇ   rÍ  rš  r›  rœ  r�  r¡  r£  Úkernel_sizeÚout_channelsÚoutput_padding_listrÞ   r–  r¤  rƒ   Úis_cudnnr=   r’  r¦  s                      @@r8   Úcalc_conv_nd_return_shaper®  C	  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Ñ,ˆà,0ÐÙÜ�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õð%õ6 9Ý<ô �l JÔ/ð 	× Ò à× Ñ ð ð �{‰{˜fÑ$ÒB¬¯©×):Ñ):¸dÐ)B€HÙÜ�‰Ù I¨a¨b MÖ2˜q�Q˜“UÒ2Ð3ô(ô	
ð Ðùò 3s   ËK&c                 ób   — t         j                  j                  | «      t         j                  k(  S rD   ©rV   Ú_prims_commonr   Úchannels_last©Útens    r8   Ú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µ  rV   r²  rd  r°   )r™  s   €r8   Úpick_memory_formatz2meta_miopen_batch_norm.<locals>.pick_memory_formatß	  sF   ø€ Ü˜LÔ)Ü×&Ñ&Ð&Ø×%Ñ%´E×4KÑ4KÐ%ÔLÜ×*Ñ*Ð*Ü×&Ñ&Ð&r:   r«   ©r   )r™   r˜   r'  )r™  r9  r;  r¶  r·  r¸  r¹  rº  r¨   Úsave_mean_shapeÚsave_var_shaper½  rÎ   Ú	save_meanÚsave_vars   `              r8   Úmeta_miopen_batch_normrÃ  Ì	  s·   ø€ ð ×"Ñ"€Ið -9Ð,D�l×(Ò(È&Ï,É,€OØ*5Ð*A�[×&Ò&ÀvÇ|Á|€Nô'ð ×
 Ñ
  Ó
+×
.Ñ
.Ñ=OÓ=QÐ
.Ó
R€CáØ ×*Ñ*¨?Ó;ˆ	Ø×)Ñ)¨.Ó9‰à ×*Ñ*¨4Ó0ˆ	Ø×)Ñ)¨$Ó/ˆà�	˜8Ð#Ð#r:   c	           
      óŽ   — t        | |||||||r|nd «      }	d}
d}| j                  |
«      dk(  rd|	|<   | j                  |	«      }|S ©Nr3   r   )r®  r£   r˜   )r™  r9  r;  rÇ   rÍ  rš  r›  r�  rœ  Ú	shape_outÚinput_channels_dimÚoutput_channels_dimrÎ   s                r8   Ú	meta_convrÉ  ò	  sl   € ô *ØØØØØØØÙ'‰¨Tó	€Ið ÐØÐØ×ÑÐ+Ó,°Ò1Ø)*ˆ	Ð%Ñ&à
×
 Ñ
  Ó
+€CØ€Jr:   Úmkldnnc
           
      óÖ   — t        | ||||d|g «      }
| j                  |
«      }t        j                  }| j	                  «       dk(  rt        j
                  }|j                  |¬«      }|S )NFr.  r«   )r®  r˜   rV   r²  r†   Úchannels_last_3dr'  )r™  r9  r;  rÍ  rÇ   rš  rœ  ÚattrÚscalarsÚ	algorithmrÆ  rÎ   Úout_memory_formats                r8   Úmeta_mkldnn_convolution_defaultrÑ  
  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™  r9  r;  rÍ  rÎ  rÏ  s         r8   Úmeta_linear_pointwise_defaultrÕ  .
  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_weightr;  rÜ   s        r8   Úmeta_mkl_linearrÚ  9
  s:   € à×)Ñ)Ø@�,×$Ñ$ S bÐ)Ð@¨;×+<Ñ+<¸QÑ+?Ñ@óð r:   Úonednnc           
      ó  — t        | ||||	d|
d «      }|€| j                  }|t        j                  t        j                  t        j
                  t        j                  t        j                  fvrt        d|› �«      ‚| j                  ||¬«      }t        |«      dvrt        dt        |«      › d�«      ‚t        j                  t        j                  t        j                  dœt        |«         }|j                  |¬«      }|S )NFúOoutput_dtype must be one of float32, bfloat16, uint8, int8, float8_e4m3fn, got r‘   )r0   r	  r.  z3Expect output to be 3d/4d/5d for conv1d/2d/3d, got rÕ   r«   )r®  r^   rV   r`  rb  Úuint8rB  rc  rŠ   r˜   rÃ   r°   r²  rÌ  r'  )r=   Úx_scaleÚx_zpÚwÚw_scaleÚw_zpr;  rÇ   rÍ  rš  rœ  Úoutput_scaleÚoutput_zero_pointÚoutput_dtyperÍ  rÎ  rÏ  rÆ  rÎ   Úformats                       r8   Úmeta_qconv_pointwiserè  C
  s  € ô, .ØØØØØØØØó	
ˆ	ð ÐØŸ7™7ˆLØÜ�M‰MÜ�N‰NÜ�K‰KÜ�J‰JÜ×Ñð 
ñ 
ô !ØaÐbnÐaoÐpóð ð �k‰k˜)¨<ˆkÓ8ˆÜˆy‹> Ñ*Ü ØEÄcÈ)ÃnÐEUÐUVÐWóð ô ×&Ñ&Ü×"Ñ"Ü×%Ñ%ñ
ô ˆi‹.ñ	ˆð
 �f‰f 6ˆfÓ*ˆØˆ
r:   c                 ó.   — |dk7  rt        d|› d�«      ‚|S )NÚsumz#binary_op_name must be 'sum', got 'rï  ©rŠ   )r=   rß  rà  rá  râ  rã  Úaccumr;  rÇ   rÍ  rš  rœ  rä  rå  ræ  Úaccum_scaleÚaccum_zero_pointÚbinary_op_namerU  Úunary_op_nameÚunary_op_argsÚunary_op_algorithms                         r8   Úmeta_qconv2d_pointwise_binaryró  |
  s-   € ð4 ˜UÒ"Ü Ø5°nÐ5EÀQÐGóð ð ˆr:   c                 ó4  — t        | j                  «      }|j                  d   |d<   |	t        j                  t        j                  t        j
                  t        j                  t        j                  fvrt        d|	› �«      ‚| j                  ||	¬«      }|S )Nr3   rœ   zOoutput_dtype must be one of float32, bfloat16, int8, uint8, float8_e4m3fn, got r‘   )
rÄ   r™   rV   r`  rb  rB  rÞ  rc  rŠ   r˜   )r=   rß  rà  rá  râ  rã  r;  rä  rå  ræ  Úpost_op_nameÚpost_op_argsÚpost_op_algorithmrg  rÎ   s                  r8   Úmeta_qlinear_pointwiserø  œ
  s‰   € ô" ˜AŸG™G“}ˆàŸ7™7 1™:ˆ�RÑØÜ�M‰MÜ�N‰NÜ�J‰JÜ�K‰KÜ×Ñð 
ñ 
ô !ØaÐbnÐaoÐpóð ð �k‰k˜,¨lˆkÓ;ˆØˆ
r:   c                 óB  — |dk(  r|S t        | j                  «      }|j                  d   |d<   |
t        j                  t        j                  t        j
                  t        j                  t        j                  fvrt        d|
› �«      ‚| j                  ||
¬«      }|S )Nrê  r3   rœ   rÝ  r‘   )
rÄ   r™   rV   r`  rb  rÞ  rB  rc  rŠ   r˜   )r=   rß  rà  rá  râ  rã  Úx_2r;  rä  rå  ræ  Úx2_scaleÚx2_zprï  rU  rð  rñ  rò  rg  rÎ   s                       r8   Úmeta_qlinear_pointwise_binaryrý  ½
  s–   € ð, ˜UÒ"ØˆJÜ˜AŸG™G“}ˆàŸ7™7 1™:ˆ�RÑØÜ�M‰MÜ�N‰NÜ�K‰KÜ�J‰JÜ×Ñð 
ñ 
ô !ØaÐbnÐaoÐpóð ð �k‰k˜,¨lˆkÓ;ˆØˆ
r:   c                 óv   — t        | j                  «      }|j                  d   |d<   | j                  |«      }|S )Nr3   rœ   )rÄ   r™   r˜   )r=   rá  r;  rg  rÎ   s        r8   Úmeta_linear_dynamic_fp16rÿ  å
  s6   € ô ˜AŸG™G“}ˆàŸ7™7 1™:ˆ�RÑØ�k‰k˜,Ó'ˆØˆ
r:   Ú	quantizedr¾  ©r3   c                 ó.  — t        | |||||«      \  }}}| j                  «       dk(  r| j                  d«      nd}	t        j                  }
| j                  «       dk(  r|||g}n|	|||g}t        j
                  || j                  | j                  |
¬«      S ©Nr	  éüÿÿÿr3   r0   r~  )Ú#max_pool2d_checks_and_compute_shaper†   r£   rV   r²  rŒ   r^   rƒ   ©rÚ   rª  rÇ   rÍ  rš  Ú	ceil_modeÚnInputPlaneÚoutputHeightÚoutputWidthrä  r¬   r£   s               r8   Úmeta_quantized_max_pool2dr  ö
  s�   € ô 0Ø�; ¨°¸9ó
ñ		
ØØØð $)§9¡9£;°!Ò#3�—‘˜B”¸ˆÜ×+Ñ+ˆØ�9‰9‹;˜!ÒØ ¨{Ð;‰Dà˜K¨°{ÐCˆDÜ�{‰{ØØ—+‘+Ø—<‘<Ø'ô	
ð 	
r:   c                 óþ  ‡ ‡‡‡— t        j                  ‰ j                  «       dk(  ˆ fd„«       t        j                  ‰j                  «       dk(  ˆfd„«       t        j                  ‰ j                  t         j                  t         j
                  t         j                  fv ˆ fd„«       t        j                  ‰j                  t         j                  k(  ˆfd„«       t        j                  ‰j                  t         j                  k(  ˆfd„«       t        j                  ‰j                  ‰ j                  k(  ˆfd„«       ‰ j                  ‰ j                  d«      ‰j                  d«      ‰ j                  ¬	«      S )
Nrï   c                  ó,   •— d‰ j                  «       › d�S )Nzx must be a 2D tensor, got rM  r�   ©r=   s   €r8   re   z/meta_int4mm_packed_weight_cpu.<locals>.<lambda>  ó   ø€ Ð-HÈÏÉËÈ	ÐQRÐ+S€ r:   c                  ó,   •— d‰ j                  «       › d�S )Nzw must be a 2D tensor, got rM  r�   ©rá  s   €r8   re   z/meta_int4mm_packed_weight_cpu.<locals>.<lambda>  r  r:   c                  ó"   •— d‰ j                   › �S ©Nz#expected x to be f32/f16/bf16, got r‘   r  s   €r8   re   z/meta_int4mm_packed_weight_cpu.<locals>.<lambda>  s   ø€ Ð9¸!¿'¹'¸ÐC€ r:   c                  ó"   •— d‰ j                   › �S ©Nzexpected w to be uint8, got r‘   r  s   €r8   re   z/meta_int4mm_packed_weight_cpu.<locals>.<lambda>  s   ø€ Ð.JÈ1Ï7É7È)Ð,T€ r:   c                  ó"   •— d‰ j                   › �S )Nz q_group_size must be int64, got r‘   )Úq_group_sizes   €r8   re   z/meta_int4mm_packed_weight_cpu.<locals>.<lambda>   s   ø€ Ð6°|×7IÑ7IÐ6JÐK€ r:   c                  ó"   •— d‰ j                   › �S )Nz5q_scale_and_zeros must have the same dtype as x, got r‘   )Úq_scale_and_zeross   €r8   re   z/meta_int4mm_packed_weight_cpu.<locals>.<lambda>$  s   ø€ ÐKÐL]×LcÑLcÐKdÐe€ r:   r   r‘   )rV   rg   r†   r^   r`  ra  rb  rÞ  r·   r˜   r£   ©r=   rá  r  r  s   ````r8   Úmeta_int4mm_packed_weight_cpur    sõ   û€ ä�‰�Q—U‘U“W ‘\Ó#SÔTÜ�‰�Q—U‘U“W ‘\Ó#SÔTÜ�‰Ø�G‰GœŸ™¤u§}¡}´e·n±nÐEÐEÛCô	
ô 	�‰Ø�G‰G”u—{‘{Ñ"Ó$Tô	
ô 	�‰Ø×Ñ¤%§+¡+Ñ-ÛKô	
ô 	�‰Ø×#Ñ# q§w¡wÑ.Ûeô	
ð �{‰{˜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] == rx   zbut got : dimension z] = ©r†   r™   )r†   Údim_sizer£   r0  s   €€€€r8   re   z check_dim_size.<locals>.<lambda>-  sP   ø€ Ð1°#°Ð6GÈÀzÐQVÐW[ÐV\Ð\^Ð_Ø  §¡£ Ð.?À¸zÈÈfÏlÉlÐ[cÑNdÐMeÐ
fñg€ r:   )rV   rg   r†   r™   )r0  r†   r  r£   s   ````r8   Úcheck_dim_sizer   *  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©r3   rï   c                  ó   •— d‰ › d�S )Nzavg_pool2d: ú4 must either be a single int, or a tuple of two intsr4   ©rÇ  s   €r8   re   z1meta_avg_pool2d.<locals>.unpack.<locals>.<lambda>?  ó   ø€ �l 4 &Ð(\Ð]€ r:   r   r3   ©rV   rg   rÃ   ©rÇ  r   ÚHÚWs   `   r8   Úunpackzmeta_avg_pool2d.<locals>.unpack<  óG   ø€ Ü�‰Ü�‹H˜ÐÛ]ô	
ð �‰FˆÜ�S“˜Q’‰A C¨¡FˆØ�!ˆtˆr:   rª  ©r   r3   rï   c                   ó   — y©NzOavg_pool2d: stride must either be omitted, a single int, or a tuple of two intsr4   r4   r:   r8   re   z!meta_avg_pool2d.<locals>.<lambda>H  rm   r:   c                  ó@   •— d‰ j                   j                  «       › d�S )Nz""avg_pool2d" not implemented for 'rï  rð  rò  s   €r8   re   z!meta_avg_pool2d.<locals>.<lambda>L  ó   ø€ Ð6°u·{±{×7JÑ7JÓ7LÐ6MÈQÐQ€ r:   r   r3   rÇ   rÍ  c                   ó   — y©Nzdivisor must be not zeror4   r4   r:   r8   re   z!meta_avg_pool2d.<locals>.<lambda>Y  rm   r:   r	  r  éýÿÿÿrÂ  rœ   r0   r~  )rV   rg   rÃ   r^   rÞ  Úuint16Úuint32Úuint64r†   r£   Úpooling_output_shaperO   r   Úpool2d_shape_checkrŒ   rƒ   )rÚ   rª  rÇ   rÍ  r  Úcount_include_padÚdivisor_overrider,  ÚkHÚkWÚdHÚdWÚpadHÚpadWrä  r  ÚinputHeightÚ
inputWidthr	  r
  r¬   r£   s   `                     r8   Úmeta_avg_pool2drE  2  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 )Nr3   r0   rï   )r:  r†   r   )rÚ   Ú
gradOutputrä  r=  r>  r?  r@  rA  rB  r  rC  rD  r	  r
  Ú
mem_formatr¥   ÚnOutputPlanes                    r8   Úavg_pool2d_backward_shape_checkrJ  „  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 )Nr3   rï   c                   ó   — y)NzKavg_pool2d: kernel_size must either be a single int, or a tuple of two intsr4   r4   r:   r8   re   z*meta_avg_pool2d_backward.<locals>.<lambda>¾  rm   r:   r   c                   ó   — yr0  r4   r4   r:   r8   re   z*meta_avg_pool2d_backward.<locals>.<lambda>Ä  rm   r:   c                   ó   — y)NzGavg_pool2d: padding must either be a single int, or a tuple of two intsr4   r4   r:   r8   re   z*meta_avg_pool2d_backward.<locals>.<lambda>Ê  rm   r:   c                   ó   — yr4  r4   r4   r:   r8   re   z*meta_avg_pool2d_backward.<locals>.<lambda>Ñ  rm   r:   r	  r  r5  rÂ  rœ   r~  )rV   rg   rÃ   r™   r†   r9  rO   r   rJ  rŒ   r^   rƒ   )ÚgradOutput_rÚ   rª  rÇ   rÍ  r  r;  r<  r=  r>  r?  r@  rA  rB  Ú
input_sizerä  r  rC  rD  r	  r
  rH  s                         r8   Úmeta_avg_pool2d_backwardrR  °  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©r3   r0   c                   ó   — y©NzFavg_pool3d: kernel_size must be a single int, or a tuple of three intsr4   r4   r:   r8   re   z!meta_avg_pool3d.<locals>.<lambda>  rm   r:   r   r3   rï   c                   ó   — y©NzJavg_pool3d: stride must be omitted, a single int, or a tuple of three intsr4   r4   r:   r8   re   z!meta_avg_pool3d.<locals>.<lambda>  rm   r:   c                  ó@   •— d‰ j                   j                  «       › d�S )Nz""avg_pool3d" not implemented for 'rï  rð  rò  s   €r8   re   z!meta_avg_pool3d.<locals>.<lambda>  r2  r:   c                   ó   — y©NzBavg_pool3d: padding must be a single int, or a tuple of three intsr4   r4   r:   r8   re   z!meta_avg_pool3d.<locals>.<lambda>  rm   r:   ©r	  r.  c                   ó   — y©Nz9non-empty 4D or 5D (batch mode) tensor expected for inputr4   r4   r:   r8   re   z!meta_avg_pool3d.<locals>.<lambda>"  rm   r:   c                   ó   — yr4  r4   r4   r:   r8   re   z!meta_avg_pool3d.<locals>.<lambda>'  rm   r:   r  r5  rÂ  rœ   zavg_pool3d()T)Úcheck_input_sizer	  )rV   rg   rÃ   r^   rÞ  r6  r7  r8  r¥   r£   r9  Úpool3d_shape_checkr˜   )rÚ   rª  rÇ   rÍ  r  r;  r<  ÚkTr=  r>  ÚdTr?  r@  ÚpadTrA  rB  rä  ÚnslicesÚitimeÚiheightÚiwidthÚotimeÚoheightÚowidths   `                       r8   Úmeta_avg_pool3drl  ù  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 )NrT  c                   ó   — yrV  r4   r4   r:   r8   re   z*meta_avg_pool3d_backward.<locals>.<lambda>a  rm   r:   r   r3   rï   c                   ó   — yrX  r4   r4   r:   r8   re   z*meta_avg_pool3d_backward.<locals>.<lambda>i  rm   r:   c                   ó   — yr[  r4   r4   r:   r8   re   z*meta_avg_pool3d_backward.<locals>.<lambda>q  rm   r:   r\  c                   ó   — yr^  r4   r4   r:   r8   re   z*meta_avg_pool3d_backward.<locals>.<lambda>y  rm   r:   c                   ó   — yr4  r4   r4   r:   r8   re   z*meta_avg_pool3d_backward.<locals>.<lambda>~  rm   r:   r  r5  rÂ  rœ   zavg_pool3d_backward())	rV   rg   rÃ   r¥   r£   r9  Úavg_pool3d_backward_shape_checkr˜   r™   )rþ  rÚ   rª  rÇ   rÍ  r  r;  r<  rb  r=  r>  rc  r?  r@  rd  rA  rB  re  rf  rg  rh  Úotime_for_shape_checkÚoheight_for_shape_checkÚowidth_for_shape_checks                           r8   Úmeta_avg_pool3d_backwardrw  S  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 )Nr0   r	  c                  ó"   •— d‰ j                   › �S )Nz"Expected 3D or 4D tensor, but got r9  r±   s   €r8   re   z*meta_adaptive_avg_pool2d.<locals>.<lambda>§  ó   ø€ Ð4°T·Z±Z°LÐA€ r:   rÂ  r~  )
rV   rg   r¥   r™   rf   rO   r   rŒ   r^   rƒ   )rš   Úoutput_sizerg  r¬   s   `   r8   Úmeta_adaptive_avg_pool2dr|  £  s|   ø€ ä	‡L�LØ�	‰	�Q‰Ò(˜$Ÿ)™) q™.ÛAôð —:‘:˜c˜r�?¤U¨;Ó%7Ñ7€LÜ×/Ñ/°Ó5€Mô �;‰;ØØ�j‰jØ�{‰{Ø#ô	ð r:   c                 óÆ   ‡ — t        j                  ‰ j                  dk(  xs ‰ j                  dk(  ˆ fd„«       ‰ j                  ‰ j                  d d t        |«      z   «      S )Nr	  r.  c                  ó"   •— d‰ j                   › �S )Nz"Expected 4D or 5D tensor, but got r9  r±   s   €r8   re   z*meta_adaptive_avg_pool3d.<locals>.<lambda>¹  rz  r:   r5  )rV   rg   r¥   r˜   r™   rf   )rš   r{  s   ` r8   Ú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 )	Nr3   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 emptyr9  )Úgrad_outrÞ   s   €€r8   re   z4meta__adaptive_avg_pool2d_backward.<locals>.<lambda>Ä  s&   ø€ ð 6Ø6>·n±nÐ5EÐEUÐVWÐUXÐXdðf€ r:   r0   r	  c                  ó"   •— d‰ j                   › �S )NzBadaptive_avg_pool2d_backward(): Expected 3D or 4D tensor, but got r9  r±   s   €r8   re   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   €€r8   re   z4meta__adaptive_avg_pool2d_backward.<locals>.<lambda>Í  s   ø€ �/ $§*¡* Ð-NÈxÏ~É~ÐN^Ð_€ r:   r«   )r¥   rÅ   rV   rg   r£   r^   r°   rµ  r²  r˜   r™   r'  )r„  rš   r¥   r¬   rÞ   s   ``  @r8   Ú"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_checkrV   r¯   r  ©rþ  rš   s     r8   Ú"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 )Nr3   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ƒ  r9  )r×  rþ  rÞ   s   €€€r8   re   z3_adaptive_pool_empty_output_check.<locals>.<lambda>á  s/   ø€ Ø�*ð -Ø-8×->Ñ->Ð,?Ð?OÐPQÈsÐR^ð`ð r:   )r¥   rÅ   rV   rg   r£   )rþ  r×  r¥   rÞ   s   `` @r8   rŒ  rŒ  Ü  sG   ú€ Ø×Ñ€DÜ�1�d‹^ò 
ˆÜ�‰Ø×Ñ˜QÓ !Ñ#õõ	
ñ
r:   c                 ó  ‡ ‡— ‰ j                   }t        j                  |dv ˆ fd„«       t        d|«      D ].  Št        j                  ‰ j	                  ‰«      dkD  ˆˆ fd„«       Œ0 t        j                  t        |«      dk(  d„ «       d}d}d}‰ j                   dk(  r‰ j	                  d«      }|dz  }‰ j	                  |dz
  «      }|\  }}‰ j                   d	k(  r;|||f}‰ j                  |«      }	‰ j                  |t        j                  ¬
«      }
|	|
fS ||||f}t        j                  ‰ «      }‰ j                  |«      j                  |¬«      }	‰ j                  |t        j                  ¬
«      j                  |¬«      }
|	|
fS )N©r0   r	  c                  ó"   •— d‰ j                   › �S )Nz:adaptive_max_pool2d(): Expected 3D or 4D tensor, but got: r9  rò  s   €r8   re   z*meta_adaptive_max_pool2d.<locals>.<lambda>î  ó   ø€ ÐLÈUÏ[É[ÈMÐZ€ r:   r3   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ƒ  r9  ©rÞ   rÚ   s   €€r8   re   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 2r4   r4   r:   r8   re   z*meta_adaptive_max_pool2d.<locals>.<lambda>û  rm   r:   r	  r0   r‘   r«   )r¥   rV   rg   rÅ   r£   rÃ   r˜   r·   rO   r   r'  )rÚ   r{  r¥   ÚdimHÚsizeBÚsizeDÚosizeHÚosizeWr¨   rÎ   r´   r¬   rÞ   s   `           @r8   Ú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: r9  ©rþ  s   €r8   re   z3meta_adaptive_max_pool2d_backward.<locals>.<lambda>  s   ø€ Ð]Ð^i×^oÑ^oÐ]pÐq€ r:   Úadaptive_max_pool2d_backwardc                  ó<   •— d‰j                   › d‰ j                   › �S r‡  r‘   )rþ  rÚ   s   €€r8   re   z3meta_adaptive_max_pool2d_backward.<locals>.<lambda>%  s!   ø€ �/ %§+¡+ Ð.OÐP[×PaÑPaÐObÐc€ r:   r«   )
r¥   rV   rg   rŒ  r^   rO   r   r˜   r™   r'  )rþ  rÚ   r´   r¥   r¬   s   ``   r8   Ú!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 )Nr\  c                  ó"   •— d‰ j                   › �S )Nz:adaptive_max_pool3d(): Expected 4D or 5D tensor, but got: r9  rò  s   €r8   re   z*meta_adaptive_max_pool3d.<locals>.<lambda>2  r”  r:   r3   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ƒ  r9  r–  s   €€r8   re   z*meta_adaptive_max_pool3d.<locals>.<lambda>7  r—  r:   r0   c                   ó   — y)NzCadaptive_max_pool3d(): internal error: output_size.size() must be 3r4   r4   r:   r8   re   z*meta_adaptive_max_pool3d.<locals>.<lambda>?  rm   r:   r.  r	  r‘   )r¥   rV   rg   rÅ   r£   rÃ   r˜   r·   )rÚ   r{  r¥   ÚdimDrš  r›  ÚosizeTrœ  r�  r¨   rÎ   r´   rÞ   s   `           @r8   Úmeta_adaptive_max_pool3dr«  ,  s  ù€ ð �:‰:€DÜ	‡L�LØ�ˆÛZôô �1�d‹^ò 
ˆÜ�‰Ø�J‰J�q‹M˜AÑôõ	
ð
ô 
‡L�LÜˆKÓ˜AÑÙUôð
 €DØ€EØ€Eàˆq‚yØ—
‘
˜1“ˆØ�‰	ˆà�J‰J�tÓ€EØ(Ñ€FˆF�Fàˆq‚yØ˜F F¨FÐ3‰	à˜E 6¨6°6Ð:ˆ	à
�/‰/˜)Ó
$€CØ�o‰o˜i¬u¯{©{ˆoÓ;€Gà�ˆ<Ðr:   c                 óP   — t        | d«       |j                  |j                  «      S )NÚadaptive_max_pool3d_backward)rŒ  r˜   r™   )rþ  rÚ   r´   s      r8   Ú!meta_adaptive_max_pool3d_backwardr®  X  s"   € ô & kÐ3QÔRØ�?‰?˜5Ÿ;™;Ó'Ð'r:   c                 ó>   — |€t        d«      ‚| j                  |«      S )Nz:cannot repeat_interleave a meta tensor without output_size)r&  r˜   )Úrepeatsr{  s     r8   Úmeta_repeat_interleave_Tensorr±  _  s%   € àÐÜÐWÓXÐXØ×Ñ˜[Ó)Ð)r:   c                 ó~  — | j                   j                  st        d| j                   › �«      ‚|j                   j                  st        d|j                   › �«      ‚t        | j	                  t        | j                   «      «      |j	                  t        |j                   «      «      t        j                  ¬«      }|S )Nz!real must be floating point, got z!imag must be floating point, got ©rL   )r^   r÷   rŠ   rT   r'  r   r   rP   )ÚrealÚimagrß  s      r8   Úmeta_complexr¶  f  s’   € ð �:‰:×'Ò'ÜÐ@ÀÇÁÀÐMÓNÐNØ�:‰:×'Ò'ÜÐ@ÀÇÁÀÐMÓNÐNÜØ�‰Ô+¨D¯J©JÓ7Ó8Ø�‰Ô+¨D¯J©JÓ7Ó8Ü6×>Ñ>ô€Fð
 €Mr:   )Ú
fill_valuer·  c                ó  — t        | «      dv r1| j                  || j                  «       ft        j                  ¬«      S t        j
                  || j                  «       fd|ft        j                  | j                  ¬«      S )N)Úcpurô   r‘   r3   ©r^   rƒ   )rø   r˜   r†   rV   r•   r(  rƒ   )rš   r£   r·  s      r8   Únonzero_staticr»  u  si   € ô �4Ó˜NÑ*Ø�~‰~˜t T§X¡X£ZÐ0¼¿
¹
ˆ~ÓCÐCä×"Ñ"Ø�4—8‘8“:ÐØ�ˆIÜ—*‘*Ø—;‘;ô	
ð 	
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.r4   r4   r:   r8   re   znonzero.<locals>.<lambda>‰  rm   r:   r3   rº  )	rV   Ú_check_not_implementedrd  Úmeta_nonzero_assume_all_nonzeror(  r—   r†   r•   rƒ   r±   s    r8   Ú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 providedr4   r4   r:   r8   re   z#meta_index_Tensor.<locals>.<lambda>™  rm   r:   c                   ó   — y)Nz?tensors used as indices must be long, int, byte or bool tensorsr4   r4   r:   r8   re   z#meta_index_Tensor.<locals>.<lambda>¡  rm   r:   c                  ó"   •— d‰ j                   › �S )Nú)too many indices for tensor of dimension r  r±   s   €r8   re   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 r9  )rÞ   r“   ÚjrH  rš   s   €€€€€r8   re   z#meta_index_Tensor.<locals>.<lambda>­  s<   ø€ Ð"8¸¿¹¸ÀZÐPQÈsð SJØJNÏ*É*ÈÐU_Ð`aÐdeÑ`eÐ_fð!h€ r:   r3   c                  ó<   •— d‰j                   › dt        ‰ «      › d�S )NrÅ  z (got ry   )r¥   rÃ   )r´   rš   s   €€r8   re   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™   rD  )rš   r™   rö   Úafter_shapeÚbefore_shapeÚreplacement_shapes      €€€r8   Ú_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_or_false) rV   rg   rô  Ú	enumerater^   r•   rå   rB  rÀ  rÃ   r–   r¥   rÅ   r™   rÆ   ÚselectÚtorch._refsÚ_refsrÄ   r&   rÉ   r˜   r$  rÐ  r—   rO   Ú3compute_elementwise_output_logical_to_physical_permÚ
apply_permr   Úinvert_permrD  r£   )rš   r´   rß  rÀ  ÚrefsÚstateÚhas_contiguous_subspacer’  Útransposed_indicesr†   rÎ  rÎ   rÐ  Úrestrided_selfÚpermrR   Ú
perm_shaper3  rË  rÌ  rÞ   r“   rÈ  rH  rÍ  s   ``                @@@@@@@r8   Ú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åDá�d—j‘j“l aÑ'Ô(àˆ
ñ
 # 4Ó(€NÜ×GÑGÈÓW�G€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„ }|
d   r8 || |«      }| j                  |j                  «       «      j                  |¬«      }|
d   r8 ||| «      }| j                  |j                  «       «      j                  |¬«      }|
d   r| j                  |«      }|||fS )Nc                 ó&  — t        | «      }t        |«      }|t        j                  k(  s|t        j                  k(  rt        j                  S |t        j                  k(  s|t        j                  k(  rt        j                  S t        j                  S rD   )r   rV   r²  rÌ  r°   )Út1Út2Úfmt1Úfmt2s       r8   Ú_conv_memory_formatz6meta_convolution_backward.<locals>._conv_memory_format9  sr   € ô % RÓ(ˆÜ$ RÓ(ˆØ”5×&Ñ&Ò&¨$´%×2EÑ2EÒ*EÜ×&Ñ&Ð&Ø”5×)Ñ)Ò)¨T´U×5KÑ5KÒ-KÜ×)Ñ)Ð)Ü×&Ñ&Ð&r:   r   r«   r3   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_biasræ  r¬   s                   r8   Úmeta_convolution_backwardrð    sÄ   € ð  ÐØÐØÐò	'ð �1‚~Ù+¨L¸'ÓBˆØ)×3Ñ3°F·K±K³MÓB×EÑEØ'ð Fó 
Ðð �1‚~Ù+¨F°LÓAˆØ*×4Ñ4°W·\±\³^ÓD×GÑGØ'ð Hó 
Ðð �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 )
Nr3   rï   r0   c                   ó   — yrV  r4   r4   r:   r8   re   zmeta_addbmm.<locals>.<lambda>Z  rm   r:   c                   ó   — yrX  r4   r4   r:   r8   re   zmeta_addbmm.<locals>.<lambda>[  rm   r:   r   c                  óP   •— d‰ j                  d«      › d‰j                  d«      › �S )Nz8batch1 and batch2 must have same number of batches, got r   r¡   r¢   ©rZ  r[  s   €€r8   re   zmeta_addbmm.<locals>.<lambda>^  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 (r3   r=   rï   r¡   ry   r¢   rõ  s   €€r8   re   zmeta_addbmm.<locals>.<lambda>b  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 shaper4   r4   r:   r8   re   zmeta_addbmm.<locals>.<lambda>i  rm   r:   )r£   rƒ  rV   rg   r†   r˜   )rš   rZ  r[  rV  rU  rf  rg  s    ``    r8   Úmeta_addbmmrø  T  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 rD   ©r˜   r£   )rš   r  Úkwargss      r8   Úmeta_randint_likerü  n  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 ©rz   ©Úls   €r8   re   z#meta__fused_adam_.<locals>.<lambda>‰  ó   ø€ Ð=¼dÀ1»g¸YÐG€ r:   ©rV   rg   rp   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                  @r8   Úmeta__fused_adam_r  s  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   €r8   re   z"meta__fused_adam.<locals>.<lambda>£  r  r:   c                 óR   — | D �cg c]  }t        j                  |«      ‘Œ c}S c c}w rD   r  )Útensor_listrÑ  s     r8   Ú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                   @r8   Úmeta__fused_adamr  �  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 tensorr4   r4   r:   r8   re   zmeta__int_mm.<locals>.<lambda>µ  rm   r:   c                   ó   — y)Nzb must be a 2D tensorr4   r4   r:   r8   re   zmeta__int_mm.<locals>.<lambda>¶  rm   r:   c                  ó"   •— d‰ j                   › �S )Nzexpected self to be int8, got r‘   )r6   s   €r8   re   zmeta__int_mm.<locals>.<lambda>¹  ó   ø€ Ð0°·±°	Ð:€ r:   c                  ó"   •— d‰ j                   › �S )Nzexpected mat2 to be int8, got r‘   )r7   s   €r8   re   zmeta__int_mm.<locals>.<lambda>½  r  r:   r3   r   c            
      óš   •— d‰ j                  d«      › d‰ j                  d«      › d‰j                  d«      › d‰j                  d«      › d�	S )Nz'Incompatible matrix sizes for _int_mm (r   r=   r3   r¡   ry   r¢   r5   s   €€r8   re   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‘   )rV   rg   r†   r^   rB  r£   r˜   rC  r5   s   ``r8   Ú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 tensorr4   r4   r:   r8   re   z2meta__convert_weight_to_int4pack.<locals>.<lambda>Ë  rm   r:   c                  ó"   •— d‰ j                   › �S r  r‘   r  s   €r8   re   z2meta__convert_weight_to_int4pack.<locals>.<lambda>Î  ó   ø€ Ð.¨q¯w©w¨iÐ8€ r:   r   r3   é   é   é    r‘   )rV   rg   r†   r^   rÞ  r£   r˜   rC  ©rá  Úinner_k_tilesr  rH  s   `   r8   Ú 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r$  r4   r4   r:   r8   re   z:meta__convert_weight_to_int4pack_for_cpu.<locals>.<lambda>ß  rm   r:   c                  ó"   •— d‰ j                   › �S ©Nzexpected w to be int32, got r‘   r  s   €r8   re   z:meta__convert_weight_to_int4pack_for_cpu.<locals>.<lambda>â  r&  r:   r   r3   r‘   )rV   rg   r†   r^   rC  r£   r˜   rÞ  r*  s   `   r8   Ú(meta__convert_weight_to_int4pack_for_cpur1  Ý  s   ø€ ä	‡L�L�—‘“˜A‘Ñ>Ô?Ü	‡L�LØ	�‰”5—;‘;ÐÛ8ôð 	
�‰ˆq‹	€AØ	�‰ˆq‹	€AØ�;‰;Ø	
ˆA�‰FˆÜ�k‰kð ó ð r:   c                 óÆ  ‡ ‡‡— t        j                  ‰ j                  «       dk(  d„ «       ‰j                  j                  dk(  rdndŠt        j                  ‰j                  «       ‰k(  ˆf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k(  r‰j                  d«      n‰j                  d«      d	z  }‰ j                  ‰ j                  d«      |‰ j
                  ¬
«      S )Nrï   c                   ó   — y©Nzx must be a 2D tensorr4   r4   r:   r8   re   z*meta__weight_int4pack_mm.<locals>.<lambda>î  rm   r:   rô   r	  c                  ó   •— d‰ › d�S )Nzw must be a zD tensorr4   )Úexpected_dims   €r8   re   z*meta__weight_int4pack_mm.<locals>.<lambda>ð  s   ø€ °LÀÀÈhÐ2W€ r:   c                  ó"   •— d‰ j                   › �S r  r‘   r  s   €r8   re   z*meta__weight_int4pack_mm.<locals>.<lambda>ó  ó   ø€ Ð5°a·g±g°YÐ?€ r:   c                  ó"   •— d‰ j                   › �S r0  r‘   r  s   €r8   re   z*meta__weight_int4pack_mm.<locals>.<lambda>÷  r&  r:   r   r'  r‘   )rV   rg   r†   r—  rz   r^   r`  ra  rb  rC  r£   r˜   )r=   rá  r  r  Údim_nr6  s   ``   @r8   Úmeta__weight_int4pack_mmr;  ì  sì   ú€ ä	‡L�L�—‘“˜A‘Ñ>Ô?ØŸ™×*Ñ*¨eÒ3‘1¸€LÜ	‡L�L�—‘“˜LÑ(Ó*WÔXÜ	‡L�LØ	�‰”E—M‘M¤5§=¡=´%·.±.ÐAÐAÛ?ôô 
‡L�LØ	�‰”5—;‘;ÐÛ8ôð Ÿ™×+Ñ+¨uÒ4ˆA�F‰F�1ŒI¸!¿&¹&À»)Àa¹-€EØ�;‰;�q—v‘v˜a“y %¨q¯w©wˆ;Ó7Ð7r:   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r4  r4   r4   r:   r8   re   z2meta__weight_int4pack_mm_for_cpu.<locals>.<lambda>ÿ  rm   r:   c                   ó   — yr$  r4   r4   r:   r8   re   z2meta__weight_int4pack_mm_for_cpu.<locals>.<lambda>   rm   r:   c                  ó"   •— d‰ j                   › �S r  r‘   r  s   €r8   re   z2meta__weight_int4pack_mm_for_cpu.<locals>.<lambda>  r8  r:   c                  ó"   •— d‰ j                   › �S r  r‘   r  s   €r8   re   z2meta__weight_int4pack_mm_for_cpu.<locals>.<lambda>  r&  r:   r   r‘   )
rV   rg   r†   r^   r`  ra  rb  rÞ  r˜   r£   r  s   ``  r8   Ú meta__weight_int4pack_mm_for_cpurA  ý  ó¯   ù€ ä	‡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r4  r4   r4   r:   r8   re   z;_weight_int4pack_mm_with_scales_and_zeros.<locals>.<lambda>  rm   r:   c                   ó   — yr$  r4   r4   r:   r8   re   z;_weight_int4pack_mm_with_scales_and_zeros.<locals>.<lambda>  rm   r:   c                  ó"   •— d‰ j                   › �S r  r‘   r  s   €r8   re   z;_weight_int4pack_mm_with_scales_and_zeros.<locals>.<lambda>  r8  r:   c                  ó"   •— d‰ j                   › �S r0  r‘   r  s   €r8   re   z;_weight_int4pack_mm_with_scales_and_zeros.<locals>.<lambda>  r&  r:   r   r‘   )
rV   rg   r†   r^   r`  ra  rb  rC  r˜   r£   )r=   rá  r  ÚqScaleÚqZeross   ``   r8   Ú)_weight_int4pack_mm_with_scales_and_zerosrJ    rB  r:   r6   r7   c                 ó   — | |z   dz
  |z  |z  S r2   r4   r5   s     r8   Úkai_rounduprL    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 )Nr	  r'  r(  rï   c                 ó8   — t        ||z  d«      }t        | |«      S )Nr	  ©rL  )rH  ÚkrÚsrÚkr_sr_roundedup4s       r8   Úkai_k_roundedupz3get_kai_packed_weight_size.<locals>.kai_k_roundedup+  s#   € ô $/¨r°B©w¸Ó#:Ð Ü" 1Ð&6Ó7Ð7r:   c                 óf   •—  ‰| ||«      }|dz  dk7  rt        d|› �«      ‚||dz  ‰z   ‰z   ‰z   z  S )Nrï   r   zk_internal must be even, got rë  )	rH  ÚnrrP  rQ  Ú
k_internalrS  Úkai_num_bytes_biasÚkai_num_bytes_multiplier_rhsÚkai_num_bytes_sum_rhss	        €€€€r8   Ú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_qsu4cxs1s01  s`   ø€ ñ -¨Q°°BÓ7�
à ‘N qÒ(Ü(Ð+HÈÈÐ)UÓVÐVàØ 1‘_Ø2ñ3à+ñ,ð )ñ)ñð r:   c                 ó>   •— t        | |«      |z  }| ‰||||«      z  S rD   rO  )r  rH  rU  rP  rQ  Únum_rowsrZ  s         €r8   Ú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:   r)  r   c                 óÜ   •— ||z  dk7  rt        d|› d|› d�«      ‚|‰	z  dk7  rt        d|› d‰	› d�«      ‚|‰z  dk7  rt        d|› d‰› d�«      ‚t        | |«      |z  }| ‰|||||«      z  S ©Nr   úbl (z) must be divisible by kr (ry   znr (z+) must be divisible by kai_nr_multiple_of (ú+) must be divisible by kai_bl_multiple_of (©rŠ   rL  )
r  rH  rU  rP  rQ  Úblr\  Úkai_bl_multiple_ofÚ;kai_get_rhs_packed_stride_rhs_pack_nxk_qsi4c32p_qsu4c32s1s0Úkai_nr_multiple_ofs
          €€€r8   Ú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_qsu4c32s1s0X  sÅ   ø€ ð ˜‘G ’>Ü(¨4°¨tÐ3NÈrÈdÐRSÐ)TÓUÐUØÐ+Ñ+°Ò1Ü(Ø˜r˜dÐ"MÐN`ÐMaÐabÐcóð ð Ð+Ñ+°Ò1Ü(Ø˜r˜dÐ"MÐN`ÐMaÐabÐcóð ô ' q¨"Ó-°Ñ3�ð ÙQØ˜2˜r 2 róñðr:   c                 óî   •— ||z  dk7  rt        d|› d|› d�«      ‚|‰
z  dk7  rt        d|› d‰
› d�«      ‚|‰z  dk7  rt        d|› d‰› d�«      ‚ ‰	«       } ‰| |«      } ‰||«      }|||z  ‰z   ‰z   z  S r_  rë  )rH  rU  rP  rQ  rc  Únum_bytes_multiplier_rhsÚnum_blocks_per_rowÚnum_bytes_per_blockrd  Ú#kai_get_bf16_datatype_size_in_bytesrf  Úkai_num_blocks_per_rowrW  Úkai_num_bytes_per_blockrY  s           €€€€€€€r8   re  z_get_kai_packed_weight_size.<locals>.kai_get_rhs_packed_stride_rhs_pack_nxk_qsi4c32p_qsu4c32s1s0o  sâ   ø€ ð ˜‘G ’>Ü(¨4°¨tÐ3NÈrÈdÐRSÐ)TÓUÐUØÐ+Ñ+°Ò1Ü(Ø˜r˜dÐ"MÐN`ÐMaÐabÐcóð ð Ð+Ñ+°Ò1Ü(Ø˜r˜dÐ"MÐN`ÐMaÐabÐcóð ñ
 ,OÓ+PÐ(Ù%;¸A¸rÓ%BÐ"Ù&=ØÐ0ó'Ð#ð Ø(Ð+=Ñ=Ø+ñ,à(ñ)ñð r:   c                   ó   — y)Nrï   r4   r4   r:   r8   rl  zGget_kai_packed_weight_size.<locals>.kai_get_bf16_datatype_size_in_bytesŒ  s   € Ør:   c                 óV   •— |‰z  dk7  rt        d|› d‰› d�«      ‚t        | |«      |z  S )Nr   r`  ra  ry   rb  )rH  rc  rd  s     €r8   rm  z:get_kai_packed_weight_size.<locals>.kai_num_blocks_per_row�  sH   ø€ ØÐ+Ñ+°Ò1Ü(Ø˜r˜dÐ"MÐN`ÐMaÐabÐcóð ô # 1 bÓ)¨RÑ/Ð/r:   c                 óH   •— | ‰z  dk7  rt        d| › d‰› d�«      ‚| dz  |z   S )Nr   r`  ra  ry   rï   rë  )rc  ri  rd  s     €r8   rn  z;get_kai_packed_weight_size.<locals>.kai_num_bytes_per_block–  sF   ø€ ØÐ+Ñ+°Ò1Ü(Ø˜r˜dÐ"MÐN`ÐMaÐabÐcóð ð ˜a™Ð#;Ñ;Ð;r:   r4   )Ún_bitsr�  ÚKÚ	groupsizeÚkai_nrÚkai_krÚkai_srr]  rg  rd  rl  re  rZ  rS  rf  rm  rW  rX  rn  rY  s            @@@@@@@@@@@r8   Úget_kai_packed_weight_sizerx    sç   ÿú€ Ø�‚{à˜Š>àˆFØˆFØˆFØ$%Ð!Ø+,Ð(Ø!"Ðò8÷ô
ñ KØ�1�f˜f fóð ð ˜‰^˜qÒ  Q¨¡]°aÒ%7ØˆFØˆFØˆFØ$%Ð!Ø!"ÐØ!"ÐØ!#Ðö÷.ò ò:ô0ô<ñ MØ�1�f˜f f¨ióð ð] &8Ð ð_ r:   c                 ó€  ‡ — 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                  «       z  }‰ j                  |t         j                  ¬«      S )Nc                  ó"   •— d‰ j                   › �S r  r‘   )Úweightss   €r8   re   z2meta__dyn_quant_pack_4bit_weight.<locals>.<lambda>¨  s   ø€ Ð.¨w¯}©}¨oÐ>€ r:   r)  r   r	  r‘   )rV   rg   r^   rÞ  ÚbackendsÚkleidiaiÚis_availablerZ   rb  rx  r˜   rå   r—   )r{  Úscales_zerosr;  Ú
block_sizeÚin_featuresÚout_featuresÚpacked_weight_sizes   `      r8   Ú meta__dyn_quant_pack_4bit_weightr„  ¢  s  ø€ ô 
‡L�LØ�‰œŸ™Ð$Û>ôô ‡~�~×Ñ×+Ñ+Ô-Ø	�{Ò	" |×'9Ñ'9¼U¿[¹[Ò'Hà˜Ò$Ø˜R‘ 1Ò$Ø˜jÑ(¨AÒ-Ø×"Ñ"¤e§n¡nÒ4ô 8Øˆ|˜[¨*ó
Ðð × Ñ ¤Ð%7Ó!8ÄÇÁÐ ÓLÐLØ Ÿ™›¨<×+=Ñ+=Ó+?Ñ?ÐØÐØ˜dŸj™j›lÑ*ÐØ×ÑÐ/´u·{±{ÐÓCÐCr:   c                 ón  ‡ ‡‡— t        j                  ‰ j                  «       dk(  d„ «       t        j                  ‰ j                  t         j                  k(  xs$ ‰ j                  t         j
                  k(  xr ‰‰k(  ˆˆˆ fd„«       ‰ j                  d«      }‰ j                  ||‰ j                  ¬«      S )Nrï   c                   ó   — y)Nzinput must be a 2D tensorr4   r4   r:   r8   re   z-meta__dyn_quant_matmul_4bit.<locals>.<lambda>Å  rm   r:   c                  ó.   •— d‰j                   › d‰ › d‰› �S )NzPexpected input to be f32 or bf16 (bf16 requires block_size == in_features), got z with block_size=z and in_features=r‘   )r€  r�  Úinps   €€€r8   re   z-meta__dyn_quant_matmul_4bit.<locals>.<lambda>É  s*   ø€ ðØ—9‘9�+Ð.¨z¨lÐ:KÈKÈ=ðZð r:   r   r‘   )rV   rg   r†   r^   r`  rb  r£   r˜   )rˆ  Úpacked_weightsr€  r�  r‚  r¦  s   ` ``  r8   Úmeta__dyn_quant_matmul_4bitrŠ  ½  s‡   ú€ ô 
‡L�L�—‘“˜a‘Ñ!DÔEÜ	‡L�LØ	�‰”e—m‘mÑ	#ò 	GØ�I‰IœŸ™Ñ'ÒE¨J¸+Ñ,Eõ	
ôð 	�‰�‹€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r4  r4   r4   r:   r8   re   z*meta__weight_int8pack_mm.<locals>.<lambda>Ô  rm   r:   c                  ó"   •— d‰ j                   › �S r  r‘   r  s   €r8   re   z*meta__weight_int8pack_mm.<locals>.<lambda>×  r8  r:   c                   ó   — yr$  r4   r4   r:   r8   re   z*meta__weight_int8pack_mm.<locals>.<lambda>Ù  rm   r:   c                  ó"   •— d‰ j                   › �S )Nzexpected w to be int8, got r‘   r  s   €r8   re   z*meta__weight_int8pack_mm.<locals>.<lambda>Ü  s   ø€ Ð-¨a¯g©g¨YÐ7€ r:   r   r‘   )
rV   rg   r†   r^   r`  ra  rb  rB  r˜   r£   )r=   rá  Úq_scaless   `` r8   Ú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                 ón  ‡ ‡‡— 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                  «      ˆ fd„«       t        j                  t	        j
                  ‰j                  «      ˆf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: rM  r�   ©Úx1s   €r8   re   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: rM  r�   ©Úx2s   €r8   re   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   €€r8   re   z$meta_cdist_forward.<locals>.<lambda>í  s,   ø€ ÐFÀrÇwÁwÈrÃ{ÀmÐSXÐY[×Y`ÑY`ÐacÓYdÐXeÐf€ r:   c                  ó"   •— d‰ j                   › �S )Nz3cdist only supports floating-point dtypes, X1 got: r‘   r”  s   €r8   re   z$meta_cdist_forward.<locals>.<lambda>ñ  ó   ø€ ÐEÀbÇhÁhÀZÐP€ r:   c                  ó"   •— d‰ j                   › �S )Nz3cdist only supports floating-point dtypes, X2 got: r‘   r˜  s   €r8   re   z$meta_cdist_forward.<locals>.<lambda>õ  rœ  r:   r   c                   ó   — y)Nz)cdist only supports non-negative p valuesr4   r4   r:   r8   re   z$meta_cdist_forward.<locals>.<lambda>÷  rm   r:   )Nr   r3   rï   c                  ó   •— d‰ › �S )Nz(possible modes: None, 0, 1, 2, but was: r4   )Úcompute_modes   €r8   re   z$meta_cdist_forward.<locals>.<lambda>ú  s   ø€ Ð:¸<¸.ÐI€ r:   rÂ  )rV   rg   r†   r£   rO   Úis_float_dtyper^   r™   rÄ   Úbroadcast_shapesÚextendr˜   )	r•  r™  rH  r   Úr1Úr2Úbatch_tensor1Úbatch_tensor2rg  s	   `` `     r8   Úmeta_cdist_forwardr¨  á  sJ  ú€ ä	‡L�LØ
�‰‹�A‰ÛOôô 
‡L�LØ
�‰‹�A‰ÛOôô 
‡L�LØ
�‰�‹�r—w‘w˜r“{Ñ"Üfôô 
‡L�LÜ×Ñ˜RŸX™XÓ&ÛPôô 
‡L�LÜ×Ñ˜RŸX™XÓ&ÛPôô 
‡L�L��a‘ÑLÔMÜ	‡L�LØ˜Ð'ÛIôð 
�‰�‹€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Ä   rV   r¢  Úcopyr£  ÚmathÚprodÚ
zeros_likerƒ  r¯   r°   )rL  r•  r™  rH  ÚcdistÚc1r¤  r¥  r¦  r§  r  Útensor1_expand_sizeÚbatch_products                r8   Ú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   €r8   re   z$meta_embedding_bag.<locals>.<lambda>*  ó   ø€ Ð:¸7¿=¹=¸/ÐJ€ r:   c                  ó"   •— d‰ j                   › �S )Nz(expected offsets to be long or int, got r‘   )rw  s   €r8   re   z$meta_embedding_bag.<locals>.<lambda>.  rµ  r:   c                  ó"   •— d‰ j                   › �S )Nz/expected weight to be floating point type, got r‘   )r9  s   €r8   re   z$meta_embedding_bag.<locals>.<lambda>2  s   ø€ ÐAÀ&Ç,Á,ÀÐP€ r:   r   r3   c                   ó   — y©Nz1include_last_offset: numBags should be at least 1r4   r4   r:   r8   re   z$meta_embedding_bag.<locals>.<lambda>9  rm   r:   c                   ó   — y)Nz@embedding_bag: per_sample_weights only supported with mode='sum'r4   r4   r:   r8   re   z$meta_embedding_bag.<locals>.<lambda>B  rm   r:   c                  ó$   •— d‰ j                   › d�S )Nz1expected per_sample_weights to be 1D tensor, got rM  r  )Úper_sample_weightss   €r8   re   z$meta_embedding_bag.<locals>.<lambda>F  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() (ry   ©r—   )r´   r¼  s   €€r8   re   z$meta_embedding_bag.<locals>.<lambda>J  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   r3   ©rÇ   )r*  r}  rÿ   Úpadding_idxÚis_fast_path_index_selects       €r8   Úis_fast_path_index_select_scalez;meta_embedding_bag.<locals>.is_fast_path_index_select_scaleP  s(   ø€ á% c¨6°;Ó?ÒXÀEÇLÁLÐQRÃOÐWXÑDXð	
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 rÅ  )r^   rV   rZ   rX   rÇ   )r*  rÿ   rÂ  s      r8   rÃ  z5meta_embedding_bag.<locals>.is_fast_path_index_selectU  sb   € à�Y‰Yœ%Ÿ+™+Ñ%Ò@¨¯©´e·j±jÑ)@ò  Ø—
‘
˜1“ Ñ"ò à—‘˜aÓ  AÑ%ò ð ˜a‘ð		
r:   c                 ó2   •— |� ‰| |||«      S  ‰| ||«      S rD   r4   )r*  r}  rÿ   rÂ  rÃ  rÄ  s       €€r8   Úis_fast_pathz(meta_embedding_bag.<locals>.is_fast_path]  s)   ø€ ØÐÙ2°3¸¸vÀ{ÓSÐSá,¨S°&¸+ÓFÐFr:   r¹  c                   ó   — yr¹  r4   r4   r:   r8   re   z$meta_embedding_bag.<locals>.<lambda>w  rm   r:   )rV   rg   r^   r•   rå   rO   r¡  r£   r˜   ÚMODE_SUMr¥   r—   rø   ÚMODE_MAXÚ	MODE_MEANr™   )r9  r´   rw  Úscale_grad_by_freqr]  Úsparser¼  Úinclude_last_offsetrÂ  Únum_bagsrÿ   rÇ  Ú
offset2bagÚbag_sizeÚmax_indicesÚfast_path_sumÚnumBagsrÃ  rÄ  s   ```   `          @@r8   Ú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£   )r9  r´   rw  rQ   rÿ   rÐ  rÑ  rÒ  s           r8   Úmeta_embedding_bag_forward_onlyr×  €  sX   € ä0BØ�˜ð1Ø#'ò1Ñ-€FˆJ˜ +ô �7Ó˜uÒ$Ø×$Ñ$ W§\¡\£^Ó4ˆØ�:˜x¨Ð4Ð4r:   c                 ó¶   — |r|S | j                   j                  s| j                   j                  r| j                   S |rt        j                  S | j                   S rD   )r^   r÷   rê   rV   r•   )rÚ   r^   Úpromote_int_to_longs      r8   Ú_get_reduction_dtyperÚ  Š  sD   € áØˆà‡{�{×$Ò$¨¯©×(>Ò(>Ø�{‰{ÐÙ	Ü�z‰zÐà�;‰;Ðr:   r‘   c                óž   — t        | |d¬«      }t        j                  | j                  |«      }t	        | ||«      }| j                  ||¬«      S )NT)rÙ  r‘   )rÚ  rO   r‹  r™   rŒ  r˜   )rÚ   r’  rŽ  r^   ræ  rg  s         r8   Úmeta_nansumrÜ  —  sI   € ô (¨¨uÈ$ÔO€LÜ×Ñ §¡¨TÓ2€DÜ+¨E°4¸ÓA€LØ�?‰?˜<¨|ˆ?Ó<Ð<r:   c           	      ó¤   — t        j                  | j                  t        t	        | j                  «       «      «      «      }| j                  |«      S rD   )rO   r“  r™   rf   rÅ   r†   r˜   )rÚ   rg  s     r8   Úmeta_medianrÞ     s<   € ä×7Ñ7Ø�‰”Uœ5 §¡£Ó-Ó.ó€Lð �?‰?˜<Ó(Ð(r:   c                 ó  — t        | «      dk(  rt        j                  d«       t        j                  | j                  |f«      }t        | ||«      }| j                  |«      | j                  |t        j                  ¬«      fS )Nró   zmedian CUDA with indices outputr‘   )	rø   rO   Úalert_not_deterministicr‹  r™   rŒ  r˜   rV   r•   )rÚ   r†   rŽ  rg  s       r8   Úmeta_median_mode_dimrá  ¨  sp   € ô �5Ó˜VÒ#Ü×%Ñ%Ð&GÔHÜ
×
Ñ
˜uŸ{™{¨S¨FÓ
3€CÜ+¨E°3¸Ó@€Là�‰˜Ó%Ø�‰˜¬E¯J©JˆÓ7ðð r:   c                 ó   — | S rD   r4   r±   s    r8   Úmeta_logical_not_rã  ¾  rq  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 tensorr4   r4   r:   r8   re   zmeta_repeat.<locals>.<lambda>Ç  rm   r:   r   c                  ó   •— d‰› d‰ › �S )Nz"Repeats cannot be negative, found rÇ  r4   )rÞ   Úreps   €€r8   re   zmeta_repeat.<locals>.<lambda>Ì  s   ø€ Ð8¸¸¸ZÈÀsÐK€ r:   r  )	rV   rg   rÃ   r†   rÑ  rf   r™   rÅ   r˜   )rš   r°  Únum_new_dimensionsÚpadded_sizerÞ   Útarget_sizerç  s       ` @r8   Ú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 rD   r4   r±   s    r8   Ú
meta_zero_rí  ×  rq  r:   c                 óz   — t        |t        j                  «      r t        | j                  |j                  «       | S rD   )rp   rV   r   ri   r™   ©rš   r¤   s     r8   Ú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 rD   )rp   r   rO   r>  r^   r   ©rs   s    r8   Ú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 rD   )rp   r   rO   r¡  r^   r   ró  s    r8   Ú
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 rD   )rp   r   rO   Úis_boolean_dtyper^   r   ró  s    r8   Ú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.)r&  rp   rV   r   ri   r™   )rš   r¤   rU  rô  rö  rù  s         r8   Úmeta_binop_inplace_alpharú  í  sz   € ò$,ò.ò-ñ �DÔ™j¨Ô/ÜØkó
ð 	
ñ
 �DÔ¡,¨uÔ"5ÜØmó
ð 	
ô �%œŸ™Ô&Ü §
¡
¨E¯K©KÔ8Ø€Kr:   c                 ó:   — t        | |t        j                  ¬«      S ©Nr³  ©rT   r   rP   ©rš   r¤   rU  s      r8   Úmeta_binop_alpharÿ  "  s   € ô ØˆeÔ$C×$KÑ$Kôð r:   c                 ó8   — t        | t        j                  ¬«      S rü  rý  )rš   rû  s     r8   Ú
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   €€r8   re   z#shift_dtype_check.<locals>.<lambda>8  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   €€r8   re   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 r4   r  s   €€r8   re   z#shift_dtype_check.<locals>.<lambda>B  s   ø€ �w�iÐHÈÈÐN€ r:   )rV   rg   rO   r>  r^   rp   r   r   )rà  rš   r   s   ```r8   Úshift_dtype_checkr  5  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  rT   r   rP   rï  s     r8   Úmeta_rshiftsr  F  ó)   € ä�h  eÔ,ÜØˆeÔ$C×$KÑ$Kôð r:   c                 óT   — t        d| |«       t        | |t        j                  ¬«      S )NÚlshiftr³  r
  rï  s     r8   Úmeta_lshiftsr  N  r  r:   c                 ó8   — | j                  | j                  «      S rD   rÔ  r±   s    r8   Ú	meta_zeror  V  s   € à�>‰>˜$Ÿ*™*Ó%Ð%r:   c                 ó   — | S rD   r4   ©rš   r   s     r8   Ú
meta_fill_r  [  rq  r:   c                 ó,   — t        j                  | «      S rD   r  r  s     r8   Ú	meta_fillr  `  ó   € ä×Ñ˜DÓ!Ð!r:   c                 ó   — | S rD   r4   r±   s    r8   Ú
meta_relu_r  e  rq  r:   c                 ó:   — t        | |t        j                  ¬«      S rü  rý  rþ  s      r8   Úmeta__add_relur  j  s   € ô ØˆeÔ$C×$KÑ$Kôð r:   c                 ó,   — t        j                  | «      S rD   r  ©rš   ÚnoiseÚlowerrê  r¸  r  s         r8   Úmeta_rrelu_with_noiser   r  s   € ô
 ×Ñ˜DÓ!Ð!r:   c                 óV   — t        j                  | «      t        j                  |«      fS rD   r  r  s         r8   Ú meta_rrelu_with_noise_functionalr"  z  s%   € ô ×Ñ˜DÓ!¤5×#3Ñ#3°EÓ#:Ð:Ð:r:   c                 ó   — | S rD   r4   )rš   r  rê  r¸  r  s        r8   Úmeta_rrelu_with_noise_r$  �  s	   € ð €Kr:   c                 ó,   — t        j                  | «      S rD   r  ©rš   r´   r³   Ú
accumulates       r8   Úmeta_index_putr(  ˆ  r  r:   c                 óF   — t        | j                  |j                  «       | S rD   ©ri   r™   )rš   r…  Úvalues      r8   Úmeta_masked_fill_r,  �  s   € ä˜DŸJ™J¨¯
©
Ô3Ø€Kr:   c                 óŠ   — | j                  | j                  «       «      j                  t        j                  | «      ¬«      }|S r»   )r˜   r£   r'  rO   r   )rš   r…  r}  Úmasked_scales       r8   Úmeta__masked_scaler/  “  s<   € à—>‘> $§)¡)£+Ó.×1Ñ1Ü×1Ñ1°$Ó7ð 2ó €Lð Ðr:   c                 óî   ‡ ‡— t        j                  |j                  t         j                  t         j                  fv d„ «       t        j                  ‰ j                  ‰j                  k(  ˆ ˆfd„«       ‰ S )Nc                   ó   — y)NzMask must be bool or uint8r4   r4   r:   r8   re   z&meta_masked_scatter_.<locals>.<lambda>ž  rm   r:   c                  ó<   •— d‰ j                   › d‰j                   › �S )NzEmasked_scatter: expected self and source to have same dtypes but got r¡   r‘   )rš   rj  s   €€r8   re   z&meta_masked_scatter_.<locals>.<lambda>¢  s"   ø€ ð ØŸ*™*˜ U¨6¯<©<¨.ð:€ r:   )rV   rg   r^   rô  rÞ  )rš   r…  rj  s   ` `r8   Úmeta_masked_scatter_r3  ›  sU   ù€ ä	‡L�LØ�
‰
”u—z‘z¤5§;¡;Ð/Ð/Ñ1Uôô 
‡L�LØ�
‰
�f—l‘lÑ"ô	:ôð
 €Kr:   c                 ó„   — t        | |«      \  } }t        j                  | t        j                  ¬«      }t	        |||«      S r»   )r&   rV   r¯   r°   r3  )rš   r…  rj  rÿ   s       r8   Úmeta_masked_scatterr5  ¨  s;   € ô " $¨Ó-�J€Dˆ$Ü×Ñ˜d´%×2IÑ2IÔJ€FÜ ¨¨fÓ5Ð5r:   c                 ó$   — | j                  |«      S rD   r…  )rš   r…  rG  s      r8   Úmeta_masked_scatter_backwardr7  °  s   € à�>‰>˜%Ó Ð r:   c                 ó   — | S rD   r4   r&  s       r8   Úmeta_index_put_r9  µ  rq  r:   c           	      ó®  ‡‡‡‡‡— ddl m}m} t        j                  | j                  «       dk(  d„ «       t        j                  |j                  «       dk(  d„ «       | j                  «       }|j                  «       Š|d   Š|d   Š|d   }‰d   }	‰||	fŠt        j                   | |‰d   ‰«       |‰d   ‰«      «      ˆˆˆ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                  ‰«      }|sY‰�Wt        j                  ‰j                  «       dk(  d
„ «       t        j                   |‰j                  «       ‰«      ˆˆfd„«       |S )Nr   )Úsym_andrT  r0   c                   ó   — yrV  r4   r4   r:   r8   re   z)common_meta_baddbmm_bmm.<locals>.<lambda>½  rm   r:   c                   ó   — yrX  r4   r4   r:   r8   re   z)common_meta_baddbmm_bmm.<locals>.<lambda>¾  rm   r:   rï   r3   c            	      ó.   •— d‰› d‰› d‰ d   › d‰ d   › d�	S r]  r4   r_  s   €€€r8   re   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 dtypesr4   r4   r:   r8   re   z)common_meta_baddbmm_bmm.<locals>.<lambda>Ô  rm   r:   c                   ó   — y)Nzself must be a 3D tensorr4   r4   r:   r8   re   z)common_meta_baddbmm_bmm.<locals>.<lambda>Ü  rm   r:   c                  ó0   •— d‰ › d‰j                  «       › �S )Nz*Expected an input tensor shape with shape z but got shape: r¢   )r{  Úself_baddbmms   €€r8   re   z)common_meta_baddbmm_bmm.<locals>.<lambda>ß  s!   ø€ Ð@ÀÀÐM]Ð^j×^oÑ^oÓ^qÐ]rÐs€ r:   )r$  r;  rT  rV   rg   r†   r£   r^   ra  rb  r`  r˜   r'  )rZ  r[  Úis_bmmrB  r=  r;  rT  ri  Úres_rowsÚres_colsÚsupported_out_dtyperÿ   r`  ra  rb  r{  s      `        @@@@r8   Úcommon_meta_baddbmm_bmmrG  º  s‘  ü€ ßEä	‡L�L�—‘“ Ñ"Ñ$HÔIÜ	‡L�L�—‘“ Ñ"Ñ$HÔIà—;‘;“=€LØ—;‘;“=€Là	�a‰€BØ# A‘ÐØ˜A‰€HØ˜A‰€HØ�x Ð*€Kä	‡L�LÙ‘�| A‘¨Ó+©V°LÀ±OÐEUÓ-VÓWõ	Rôñ
 à�L‰LœEŸM™MÑ)ÒK¨V¯\©\¼U¿^¹^Ñ-Kò)àœ5Ÿ=™=Ñ(ð 	ô 	�‰Ø˜Ÿ™Ñ%Ò<Ð)<Ù|ô	
ð ×!Ñ! +Ó.×1Ñ1°)Ó<‰ð ×!Ñ! +Ó.ˆá�lÐ.Ü�‰�\×%Ñ%Ó'¨1Ñ,Ñ.PÔQÜ�‰Ù�<×$Ñ$Ó&¨Ó4Üsô	
ð
 €Mr:   c                 ó   — t        | |d«      S )NT©rG  )rš   rJ  s     r8   Úmeta_bmmrJ  å  s   € ä" 4¨¨tÓ4Ð4r:   c                 ó    — t        | |d|¬«      S )NT)r=  rI  )rš   rJ  r=  s      r8   Úmeta_bmm_dtyperL  ê  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ô  )r=   r>   Úqra  s       r8   Údiv_rtnrO  ï  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Å  )rO  )Ú	inputSizeÚ
kernelSizerÜ  rÝ  rÇ   rš  r  Ú
outputSizes           r8   Úpooling_output_shape_pad_lrrT  ù  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 zeror4   r4   r:   r8   re   z&pooling_output_shape.<locals>.<lambda>  rm   r:   c                  ó   •— d‰ › �S )Nz'pad must be non-negative, but got pad: r4   ©Úpads   €r8   re   z&pooling_output_shape.<locals>.<lambda>  s   ø€ Ð%LÈSÈEÐ#R€ r:   r3   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=r4   )rš  rR  rY  s   €€€r8   re   z&pooling_output_shape.<locals>.<lambda>  s'   ø€ ØOÐPSÈuð UØ%˜, n°X°Jð@ð r:   )rV   rg   rT  )rQ  rR  rY  rÇ   rš  r  s    `` ` r8   r9  r9    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  ˆˆfd„«       t        j                  ‰dkD  xr ‰dkD  ˆˆfd„«       t        j                  ‰dkD  xr ‰dkD  ˆˆfd„«       ‰ j                  d«      dk7  xr ‰ j                  d«      dk7  }|t        j                  k(  r7t        j                  |dk(  xr |xr ‰ j                  d«      dk7  ˆ f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                  ó   •— d‰ › d‰› �S )Nz5kernel size should be greater than zero, but got kH: ú, kW: r4   )r=  r>  s   €€r8   re   z$pool2d_shape_check.<locals>.<lambda>9  s   ø€ ÐGÈÀtÈ6ÐRTÐQUÐV€ r:   c                  ó   •— d‰ › d‰› �S )Nz0stride should be greater than zero, but got dH: ú, dW: r4   )r?  r@  s   €€r8   re   z$pool2d_shape_check.<locals>.<lambda>=  s   ø€ ÐBÀ2À$ÀfÈRÈDÐQ€ r:   c                  ó   •— d‰ › d‰› �S )Nz9dilation should be greater than zero, but got dilationH: ú, dilationW: r4   )Ú	dilationHÚ	dilationWs   €€r8   re   z$pool2d_shape_check.<locals>.<lambda>A  s   ø€ ÐKÈIÈ;ÐVcÐdmÐcnÐo€ r:   r3   rï   r	  r0   c                  ó*   •— d‰ j                  «       › �S )Nz€Expected 4D (batch mode) tensor expected for input with channels_last layout with optional 0 dim batch size for input, but got: r¢   rò  s   €r8   re   z$pool2d_shape_check.<locals>.<lambda>I  s   ø€ ð CØCHÇ:Á:Ã<À.ðR€ 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   €r8   re   z$pool2d_shape_check.<locals>.<lambda>P  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 = r4   )r=  r>  rA  rB  s   €€€€r8   re   z$pool2d_shape_check.<locals>.<lambda>U  s&   ø€ ð Ø��y   g¨b¨T°¸¸ð>€ r:   c                  ó.   •— d‰› d‰ › d‰› d‰› d‰› d‰› d�S ©NzGiven input size: (r=   z). Calculated output size: (z). Output size is too smallr4   )rC  rD  r  rI  r	  r
  s   €€€€€€r8   re   z$pool2d_shape_check.<locals>.<lambda>[  s:   ø€ Ð% k ]°!°K°=ÀÀ*Àð N$Ø$0 >°°<°.ÀÀ+Àð O#ð#€ r:   )r†   rV   rg   r£   r²  )rÚ   r=  r>  r?  r@  rA  rB  rb  rc  r  rC  rD  r	  r
  r¬   r¥   Ú
valid_dimsrI  s   ``````````````   @r8   r:  r:  #  sƒ  ÿþ€ ð" �9‰9‹;€DØ€Lä	‡L�LØ
ˆQ‰Ò�2˜‘6ÜVôô 
‡L�LØ
ˆQ‰Ò�2˜‘6ÜQôô 
‡L�LØ�A‰Ò'˜) a™-Üoôð
 —‘˜A“ !Ñ#Ò:¨¯
©
°1«¸Ñ(:€Jàœ×+Ñ+Ò+Ü�‰Ø�A‰IÒ;˜*Ò;¨¯©°A«¸!Ñ);óRõ	
ô 	�‰Ø�Q‰YÒ<˜5Ÿ:™: a›=¨AÑ-Ò<°*ò AØ˜‘	Ò?˜jÒ?¨U¯Z©Z¸«]¸aÑ-?Û~ô	
ô 
‡L�LØ
ˆa‰�4‰Ò+˜B !™G t™Oö	>ôô 
‡L�LØ�qÑÒ.˜\¨QÑ.÷	#ð 	#õr:   re  rb  r=  r>  rc  r?  r@  ÚpTÚpHÚpWÚ	dilationTrb  rc  rf  rg  rh  ri  rj  rk  r`  c           
      óJ  ‡ ‡‡‡‡‡‡‡‡‡	‡
‡‡‡‡‡‡‡‡‡‡‡— ‰ j                   }t        j                  ‰dkD  xr ‰dkD  xr ‰dkD  ˆˆˆfd„«       t        j                  ‰dkD  xr ‰dkD  xr ‰dkD  ˆˆˆfd„«       t        j                  ‰dkD  xr ‰dkD  xr ‰dkD  ˆˆˆfd„«       t        j                  |dv ˆˆ fd„«       t        |«      D ]:  Š|dk(  r‰dk(  rŒt        j                  ‰ j	                  ‰«      dkD  ˆˆˆ fd„«       Œ< |r/t        j                  ‰‰k\  xr ‰‰k\  xr ‰‰k\  ˆˆˆˆˆˆfd	„«       t        j                  ‰d
z  ‰k\  xr ‰d
z  ‰
k\  xr ‰d
z  ‰	k\  ˆˆˆˆ	ˆˆ
fd„«       t        j                  ‰dk\  xr ‰dk\  xr ‰dk\  ˆˆˆˆˆˆˆfd„«       y )Nr   c                  ó   •— d‰› d‰ › d‰› �S )Nz5kernel size should be greater than zero, but got kT: z, kH: r]  r4   )r=  rb  r>  s   €€€r8   re   z$pool3d_shape_check.<locals>.<lambda>}  s#   ø€ ðØ�$�f˜R˜D  r dð,ð r:   c                  ó   •— d‰› d‰ › d‰› �S )Nz0stride should be greater than zero, but got dT: z, dH: r_  r4   )r?  rc  r@  s   €€€r8   re   z$pool3d_shape_check.<locals>.<lambda>„  s    ø€ Ø>¸r¸dÀ&ÈÈÈFÐSUÐRVÐWð r:   c                  ó   •— d‰› d‰ › d‰› �S )Nz9dilation should be greater than zero, but got dilationT: z, dilationH: ra  r4   )rb  rm  rc  s   €€€r8   re   z$pool3d_shape_check.<locals>.<lambda>Š  s$   ø€ ðØ#˜ M°)°¸MÈ)ÈðVð r:   r\  c                  ó&   •— ‰ › d‰j                   › �S )Nz/: Expected 4D or 5D tensor for input, but got: r9  )rà  rÚ   s   €€r8   re   z$pool3d_shape_check.<locals>.<lambda>’  s   ø€ �7�)ÐJÈ5Ï;É;È-ÐX€ r:   r.  c                  óL   •— ‰ › d‰j                   › d‰j                  ‰«      › d�S )NzZ: Expected input's non-batch dimensions to have positive length, but input has a shape of z and non-batch dimension z has length zero!)r™   r£   )rà  rÞ   rÚ   s   €€€r8   re   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: r6  r  z ) smaller than kernel size (kT: ú kH: ú kW: ry   r4   )rg  rf  rh  r=  rb  r>  s   €€€€€€r8   re   z$pool3d_shape_check.<locals>.<lambda>¥  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: rv  ru  z padT: z padW: z padH: r4   )r=  rb  r>  rk  rj  rl  s   €€€€€€r8   re   z$pool3d_shape_check.<locals>.<lambda>­  s6   ø€ ðØ�$�e˜B˜4˜u R D¨°¨t°7¸2¸$¸gÀbÀTðKð r:   r3   c                  ó:   •— d‰› d‰› d‰ › d‰› d‰› d‰› d‰› d‰› d�S rh  r4   )rg  rf  rh  re  rj  ri  rk  s   €€€€€€€r8   re   z$pool3d_shape_check.<locals>.<lambda>µ  sI   ø€ Ø! ' ¨!¨E¨7°!°G°9¸A¸f¸Xð F(Ø(/ y°°%°¸¸'¸À!ÀFÀ8ð L'ð(ð r:   )r¥   rV   rg   rÅ   r£   )rÚ   re  rb  r=  r>  rc  r?  r@  rj  rk  rl  rm  rb  rc  rf  rg  rh  ri  rj  rk  rà  r`  r¥   rÞ   s   `````````````````````  @r8   ra  ra  a  s’  ÿÿý€ ð0 �:‰:€Dä	‡L�LØ
ˆQ‰Ò$�2˜‘6Ò$˜b 1™fõ	
ôô 
‡L�LØ
ˆQ‰Ò$�2˜‘6Ò$˜b 1™fõ	
ôô 
‡L�LØ�A‰Ò9˜) a™-Ò9¨I¸©Mõ	
ôô 
‡L�LØ�ˆÜXôô
 �4‹[ò 
ˆØ�1Š9˜˜ašàÜ�‰Ø�J‰J�q‹M˜AÑõõ	
ð	
ñ Ü�‰Ø�R‰KÒ:˜G r™MÒ:¨f¸©l÷ð ô	
ô 
‡L�LØ
ˆQ‰�"‰Ò6˜˜a™ 2™Ò6¨"¨q©&°B©,÷	
ð 	
ôô 
‡L�LØ�‰
Ò3�v ‘{Ò3 w°!¡|÷	
ñ 	
õr:   c                 ój  — | j                   }t        | |||||||	|
||||||||||||«       t        |||dz
  |«       t        |||dz
  |«       t        |||dz
  |«       t        |||dz
  |«       t        |||dz
  |«       t        |||dz
  |«       t        |||dz
  |«       t        |||dz
  |«       y )Nr	  r0   rï   r3   ©r¥   ra  r   )rÚ   rþ  r´   re  rb  r=  r>  rc  r?  r@  rj  rk  rl  rm  rb  rc  rf  rg  rh  ri  rj  rk  rà  r¥   s                           r8   Ú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 )Nr3   Tr	  r0   rï   rz  )rÚ   rþ  re  rb  r=  r>  rc  r?  r@  rj  rk  rl  rf  rg  rh  ri  rj  rk  rà  r¥   s                       r8   rs  rs  û  s¡   € ð* �:‰:€DäØØØ
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø	Ø	Ø	ØØØØØØØØô-ô2 �;  d¨Q¡h°Ô8Ü�;  d¨Q¡h°Ô6Ü�;  d¨Q¡h°Ô8Ü�;  d¨Q¡h°Õ7r:   c                 óú  — d„ } |d|«      \  }}t        j                  t        |«      dv d„ «       t        |«      dk(  r||}
}	n |d|«      \  }	}
 |d|«      \  }} |d|«      \  }}| j                  d	«      }| j                  d
«      }| j                  d«      }t	        j
                  | «      }|t         j                  k(  r)t        j                  | j                  «       dk(  d„ «       nR|t         j                  k(  r(t        j                  | j                  «       dv d„ «       nt        j                  dd„ «       t        ||||	||«      }t        ||||
||«      }t        | |||	|
||||||||||«       |||fS )Nc                 óˆ   ‡ — t        j                  t        |«      dv ˆ fd„«       |d   }t        |«      dk(  r|n|d   }||fS )Nr#  c                  ó   •— d‰ › d�S )Nzmax_pool2d: r%  r4   r&  s   €r8   re   zEmax_pool2d_checks_and_compute_shape.<locals>.unpack.<locals>.<lambda>=  r'  r:   r   r3   r(  r)  s   `   r8   r,  z3max_pool2d_checks_and_compute_shape.<locals>.unpack:  r-  r:   rª  r.  c                   ó   — y)NzOmax_pool2d: stride must either be omitted, a single int, or a tuple of two intsr4   r4   r:   r8   re   z5max_pool2d_checks_and_compute_shape.<locals>.<lambda>G  rm   r:   r   rÇ   rÍ  rš  r5  rÂ  rœ   r	  c                   ó   — y)NzMnon-empty 4D (batch mode) tensor expected for input with channels_last layoutr4   r4   r:   r8   re   z5max_pool2d_checks_and_compute_shape.<locals>.<lambda>X  rm   r:   r’  c                   ó   — y)Nz9non-empty 3D or 4D (batch mode) tensor expected for inputr4   r4   r:   r8   re   z5max_pool2d_checks_and_compute_shape.<locals>.<lambda>]  rm   r:   Fc                   ó   — y)NzAUnsupported memory format. Supports only ChannelsLast, Contiguousr4   r4   r:   r8   re   z5max_pool2d_checks_and_compute_shape.<locals>.<lambda>b  rm   r:   )rV   rg   rÃ   r£   rO   r   r²  r†   r°   r9  r:  )rÚ   rª  rÇ   rÍ  rš  r  r,  r=  r>  r?  r@  rA  rB  rb  rc  r  rC  rD  r¬   r	  r
  s                        r8   r  r  1  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õ	
ô
 	�‰ØÙWô	
ô
 (¨°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   €€r8   re   z7meta_max_pool2d_with_indices_backward.<locals>.<lambda>’  s    ø€ �/ $§*¡* Ð-MÈk×N_ÑN_ÐM`Ða€ r:   c                 ól   •— t        | ‰‰dz
  ‰«       t        | ‰‰dz
  ‰«       t        | ‰‰dz
  ‰«       y )Nr0   rï   r3   )r   )rÑ  rI  r¥   r	  r
  s    €€€€r8   Ú_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  rV   rg   r^   r¥   rO   r   rŒ   r™   rƒ   )rþ  rš   rª  rÇ   rÍ  rš  r  r´   r  r‡  r¬   rI  r¥   r	  r
  s   ``         @@@@r8   Ú%meta_max_pool2d_with_indices_backwardrˆ  }  s«   ý€ ô 	,Øˆk˜6 7¨H°ió	ñ	ØØØô
 
‡L�LØ�
‰
�k×'Ñ'Ñ'Üaôð
 €LØ�9‰9€D÷7ñ
 �KÔ Ù�GÔä×/Ñ/°Ó5€MÜ�;‰;Ø�
‰
Ø�j‰jØ�{‰{Ø#ô	ð r:   c                 óš  — t        | |||||«      \  }}}| j                  «       dk(  r| j                  d«      nd}	t        j                  | «      }
| j                  «       dk(  r|||g}n|	|||g}t        j                  || j                  | j                  |
¬«      t        j                  |t
        j                  | j                  |
¬«      fS r  )
r  r†   r£   rO   r   rV   rŒ   r^   rƒ   r·   r  s               r8   Úmeta_max_pool2d_with_indicesrŠ  ©  sÉ   € ô 	,Øˆ{˜F G¨X°yó	ñ	ØØØð
  %Ÿy™y›{¨aÒ/ˆU�Z‰Z˜Œ^°Q€FÜ×/Ñ/°Ó6€MØ‡y�yƒ{�aÒØ˜\¨;Ð7‰à˜ \°;Ð?ˆä�‰ØØ—+‘+Ø—<‘<Ø'ô		
ô 	�‰ØÜ—+‘+Ø—<‘<Ø'ô		
ðð r:   c                 ót  ‡ ‡‡‡
‡‡— t        j                  ‰ j                  dv ˆ fd„«       ‰ j                  }t        |dz
  |«      D ].  Š
t        j                  ‰ j	                  ‰
«      dkD  ˆ
ˆ fd„«       Œ0 t        j                  t        ‰«      dk(  d„ «       t        j                  t        |«      dk(  d„ «       ‰ j	                  d	«      }‰ j	                  d
«      Š‰ j	                  d«      Š|dk(  r‰ j	                  d«      }nd}t        j                  ‰ j                  ‰j                  k(  d„ «       t        j                  ‰j                  dk(  ˆfd„«       ‰j	                  d«      }‰j	                  d«      }‰j	                  d«      Š
t        j                  ||k\  d„ «       t        j                  ||k(  d„ «       t        j                  ‰
dk(  ˆ
fd„«       t        j                  |d   ‰d   z   dz
  ‰k  ˆˆfd„«       t        j                  |d   ‰d   z   dz
  ‰k  ˆˆfd„«       ‰ j                  «       dk(  r|||d   |d   g}	n||d   |d   g}	t        j                  |	‰ j                  ‰ j                  ¬«      t        j                  |	t         j                  ‰ j                  ¬«      fS )Nr’  c                  ó"   •— d‰ j                   › �S )Nz:fractional_max_pool2d: Expected 3D or 4D tensor, but got: r  r±   s   €r8   re   z,meta_fractional_max_pool2d.<locals>.<lambda>Ô  s   ø€ ÐLÈTÏYÉYÈKÐX€ r:   r0   r   c                  ó2   •— d‰j                  «       › d‰ › d�S )Nz_fractional_max_pool2d: Expected input to have non-zero  size for non-batch dimensions, but got r‚  z emptyr¢   )rÕ   rš   s   €€r8   re   z,meta_fractional_max_pool2d.<locals>.<lambda>Û  s'   ø€ ð 7Ø7;·y±y³{°mÐCSÐTUÐSVÐV\ð^€ r:   rï   c                   ó   — y)NzNfractional_max_pool2d: kernel_size musteither be a single int or tuple of Intsr4   r4   r:   r8   re   z,meta_fractional_max_pool2d.<locals>.<lambda>â  rm   r:   c                   ó   — y)NzOfractional_max_pool2d: output_size must either be a single int or tuple of Intsr4   r4   r:   r8   re   z,meta_fractional_max_pool2d.<locals>.<lambda>ç  rm   r:   r5  rÂ  rœ   r	  r3   c                   ó   — y)Nz6Expect _random_samples to have the same dtype as inputr4   r4   r:   r8   re   z,meta_fractional_max_pool2d.<locals>.<lambda>õ  rm   r:   c                  ó"   •— d‰ j                   › �S )Nz1Expect _random samples to have 3 dimensions got, r  )Úrandom_sampless   €r8   re   z,meta_fractional_max_pool2d.<locals>.<lambda>ù  s   ø€ ÐCÀN×DWÑDWÐCXÐY€ r:   c                   ó   — y)Nz=Expect _random_samples.size(0) no less then input batch size.r4   r4   r:   r8   re   z,meta_fractional_max_pool2d.<locals>.<lambda>  rm   r:   c                   ó   — y)Nz<Expect _random_samples.size(1) equals to input channel size.r4   r4   r:   r8   re   z,meta_fractional_max_pool2d.<locals>.<lambda>  rm   r:   c                  ó   •— d‰ › d�S )Nz/Expect _random_samples.size(2) equals to 2 got ú.r4   )rÕ   s   €r8   re   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 r4   )Úinput_heightrª  s   €€r8   re   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 r3   z& is too large relative to input width r4   )Úinput_widthrª  s   €€r8   re   z,meta_fractional_max_pool2d.<locals>.<lambda>  s   ø€ Ð6°{À1±~Ð6FÐFlÐmxÐlyÐz€ r:   rº  )rV   rg   r¥   rÅ   r£   rÃ   r^   r†   rŒ   rƒ   r·   )rš   rª  r{  r’  r¥   Úinput_channelsÚinput_batchr  Úcr£   rÕ   r˜  rš  s   `` `      @@@r8   Úmeta_fractional_max_pool2drž  Ð  ss  ý€ ä	‡L�LØ�	‰	�VÐÛXôð �9‰9€Dä�4˜!‘8˜TÓ"ò 
ˆÜ�‰Ø�I‰I�a‹L˜1Ñô^õ	
ð
ô 
‡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Ø	ˆ[ÑÙOôô 
‡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(  r||||f}n|||||f}| j                  |«      }| j                  |t         j                  ¬«      }|r@|j                  t         j                  ¬«      }|j                  t         j                  ¬«      }||fS )NrT  c                   ó   — y©NzMmax_pool3d: kernel_size must either be a single int, or a tuple of three intsr4   r4   r:   r8   re   z.meta_max_pool3d_with_indices.<locals>.<lambda>1  rm   r:   r   r3   rï   c                   ó   — y©NzQmax_pool3d: stride must either be omitted, a single int, or a tuple of three intsr4   r4   r:   r8   re   z.meta_max_pool3d_with_indices.<locals>.<lambda>9  rm   r:   c                   ó   — y©NzImax_pool3d: padding must either be a single int, or a tuple of three intsr4   r4   r:   r8   re   z.meta_max_pool3d_with_indices.<locals>.<lambda>A  rm   r:   c                   ó   — y©NzJmax_pool3d: dilation must be either a single int, or a tuple of three intsr4   r4   r:   r8   re   z.meta_max_pool3d_with_indices.<locals>.<lambda>I  rm   r:   r\  c                   ó   — yr^  r4   r4   r:   r8   re   z.meta_max_pool3d_with_indices.<locals>.<lambda>Q  rm   r:   r.  éûÿÿÿr  r5  rÂ  rœ   zmax_pool3d_with_indices()r	  r‘   r«   )rV   rg   rÃ   r¥   r£   r9  ra  rO   r   rÌ  r˜   r·   r'  )rÚ   rª  rÇ   rÍ  rš  r  rb  r=  r>  rc  r?  r@  rj  rk  rl  rm  rb  rc  rä  re  rf  rg  rh  ri  rj  rk  r²  r¨   rÎ   r´   s                                 r8   Úmeta_max_pool3d_with_indicesrª  %  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ôð
  %Ÿ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äØØØ
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
ØØØØØØØØØØ#ô+ð4 	�
‰
�a‰ÒXœE×7Ñ7¸Ó>Ä%×BXÑBXÑXð ð ‡z�z�Q‚Ø˜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                  |j                  «      }|r |j                  t         j                  ¬«      }|S )NrT  c                   ó   — yr¡  r4   r4   r:   r8   re   z7meta_max_pool3d_with_indices_backward.<locals>.<lambda>—  rm   r:   r   r3   rï   c                   ó   — yr£  r4   r4   r:   r8   re   z7meta_max_pool3d_with_indices_backward.<locals>.<lambda>Ÿ  rm   r:   c                   ó   — yr¥  r4   r4   r:   r8   re   z7meta_max_pool3d_with_indices_backward.<locals>.<lambda>§  rm   r:   c                   ó   — yr§  r4   r4   r:   r8   re   z7meta_max_pool3d_with_indices_backward.<locals>.<lambda>¯  rm   r:   r\  c                   ó   — yr^  r4   r4   r:   r8   re   z7meta_max_pool3d_with_indices_backward.<locals>.<lambda>·  rm   r:   r  r5  rÂ  rœ   z"max_pool3d_with_indices_backward()r.  r«   )rV   rg   rÃ   r¥   r£   r{  rO   r   rÌ  r˜   r™   r'  )rþ  rÚ   rª  rÇ   rÍ  rš  r  r´   rb  r=  r>  rc  r?  r@  rj  rk  rl  rm  rb  rc  re  rf  rg  rh  ri  rj  rk  r²  r  s                                r8   Ú%meta_max_pool3d_with_indices_backwardr±  ‰  s�  € ô 
‡L�LÜˆKÓ˜FÐ"Ù_ôð 
�Q‰€BÜ�;Ó 1Ò$‰¨+°a©.€BÜ�;Ó 1Ò$‰¨+°a©.€Bä	‡L�LØˆ
Ò+”c˜&“k VÐ+Ùcôñ ‰˜v a™y€BÙ‰¤c¨&£k°QÒ&6¡¸FÀ1¹I€BÙ‰¤c¨&£k°QÒ&6¡¸FÀ1¹I€Bä	‡L�LÜˆG‹˜ÐÙ[ôð 
�‰€BÜ�7‹|˜qÒ ‰ g¨a¡j€BÜ�7‹|˜qÒ ‰ g¨a¡j€Bä	‡L�LÜˆH‹˜ÐÙ\ôð ˜‘€IÜ  ›]¨aÒ/‘	°X¸a±[€IÜ  ›]¨aÒ/‘	°X¸a±[€Iä	‡L�LØ�
‰
�fÐÙKôð
 �j‰j˜‹n€GØ�J‰J�r‹N€EØ�j‰j˜‹n€GØ�Z‰Z˜‹^€Fà×Ñ˜RÓ €EØ×Ñ˜rÓ"€GØ×Ñ˜bÓ!€Fä#ØØØØØ
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
ØØØØØØØØØØ,ô/ð8 	�
‰
�a‰ÒXœE×7Ñ7¸Ó>Ä%×BXÑBXÑXð ð —‘ §¡Ó-€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   €€r8   re   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 )r‚   rµ  s   €€r8   re   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 r9  rµ  s   €€r8   re   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   €€r8   re   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ƒ  r9  r–  s   €€r8   re   z+check_grid_sampler_common.<locals>.<lambda>  r—  r:   )rV   rg   rƒ   r‚   r¬  r™   r¥   rÅ   )rÚ   r²  rÞ   s   ``@r8   Ú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   r3   rï   N)r{   Ú
__module__Ú__qualname__ÚBILINEARÚNEARESTÚBICUBICr4   r:   r8   r½  r½    s   „ Ø€HØ€GØ�Gr:   r½  Úinterpolation_modec                 ó  ‡ ‡— t        j                  ‰ j                  dk(  xr ‰ j                  ‰j                  k(  ˆˆ fd„«       t        j                  ‰ j                  dk(  xr |t        j                  j
                  k(   d„ «       y )Nr.  c                  ó<   •— d‰j                   › d‰ j                   › �S )Nzdgrid_sampler(): expected 5D input and grid with same number of dimensions, but got input with sizes r¸  r9  rµ  s   €€r8   re   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 inputr4   r4   r:   r8   re   z'check_grid_sampler_3d.<locals>.<lambda>&  rm   r:   )rV   rg   r¥   r½  rÂ  r+  )rÚ   r²  rÃ  s   `` r8   Ú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«   )rV   r­  r°   r¯   ©
rþ  rÚ   r²  rÃ  Úpadding_modeÚalign_cornersrì  Úinput_requires_gradr  Ú	grad_grids
             r8   Ú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   r3   rï   r0   )r»  rÇ  r™   r˜   )
rÚ   r²  rÃ  rË  rÌ  r�  ÚCÚout_DÚout_HÚout_Ws
             r8   Ú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Ç  rV   r­  r  r¯   rÊ  s
             r8   Úgrid_sampler_3d_backwardr×  P  sm   € ô ˜e TÔ*Ü˜% Ð'9Ô:Ø% a™.ÐÙÜ×%Ñ%Ø¤×!?Ñ!?ô
‰
ð ˆ
Ü× Ñ  ´U×5SÑ5SÔT€IØ�yÐ Ð r:   c                 óŽ   — |j                  d«      }|st        j                  |«      }||d<   t        j                  | g|¢­i |¤ŽS )Nr^   )r]   rO   Ú	get_dtyperV   rŒ   )r£   r·  rQ   rû  r^   s        r8   ÚfullrÚ  h  sC   € à�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 tensorsr4   r4   r:   r8   re   zzeros_like.<locals>.<lambda>  rm   r:   r   r
  Tr©  )rV   Ú
sparse_coorg   rŒ   r^   rƒ   Ú	is_sparseÚsparse_resize_and_clear_r£   Ú
sparse_dimÚ	dense_dimr†   Ú_coalesced_r-   r¯   r)  Úfill_)rš   r^   r‚   rƒ   r„   r¬   r›  s          r8   r­  r­  s  sü   € ð ”×!Ñ!Ò!Ü�‰Ø˜TÐ!ÙOô	
ô
 �k‰kØØ % �$—*’*°5ØØ"( .�4—;’;°fØ!ô
ˆð �>Š>Ø×(Ñ(Ø—	‘	“˜TŸ_™_Ó.°·±Ó0@õð ×(Ñ(¨¯©«°d·h±h³jÀ!ÔDà�‰˜ÔØˆ
Ü
�/‰/×
!Ñ
!ØØØØØØ#ð "ó €Cð ‡I�Iˆa„LØ€Jr:   r�   c                ó²   — |€t        j                  «       }|€t        j                  «       }|€t         j                  }t        j                  | ||||¬«      S r  ©rV   rˆ   Úget_default_devicer¬  rŒ   ©r£   r^   r‚   rƒ   r„   r…   s         r8   Ú	meta_onesrè     óT   € ð €}Ü×'Ñ'Ó)ˆØ€~Ü×)Ñ)Ó+ˆØ€~Ü—‘ˆÜ�;‰;Ø�E &°ÀJôð r:   c                ó²   — |€t        j                  «       }|€t        j                  «       }|€t         j                  }t        j                  | ||||¬«      S r  rå  rç  s         r8   Ú
meta_zerosrë  ¶  ré  r:   c                 ó,   — t        j                  | «      S rD   ©rO   Úclone_preserve_strides)rš   r*  r†   r“   s       r8   Úmeta_select_scatterrï  Ì  ó   € ä×'Ñ'¨Ó-Ð-r:   c                 ó,   — t        j                  | «      S rD   rí  )rš   r*  r†   r}   r|   Ústeps         r8   Úmeta_slice_scatterró  Ñ  rð  r:   Údim_post_exprÚwrap_scalarc           	      ó˜   — |dk  r|st        d|› d�«      ‚d}| }|dz
  }| |k  s| |kD  rt        d| › d|› d|› d�«      ‚| dk  r| |z  } | S )	Nr   zdim_post_expr=z <= 0 but wrap_scalar is Falser3   zdim z out of bounds (rx   ry   rë  )r†   rô  rõ  rù   r±  s        r8   r¸   r¸   ×  sƒ   € Ø˜ÒÙÜ Ø   Ð/MÐNóð ð ˆØˆ.€CØ
˜!Ñ
€CØ
ˆS‚y�C˜#’IÜ˜t C 5Ð(8¸¸¸RÀ¸uÀAÐFÓGÐGØ
ˆQ‚wØˆ}ÑˆØ€Jr:   c                 óJ   — | j                  «       dk(  rdS | j                  |   S rÀ  r  )rÑ  r†   s     r8   Ú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 )Nr3   c                   ó   — y)NzDIndex tensor must have the same number of dimensions as input tensorr4   r4   r:   r8   re   z$gather_shape_check.<locals>.<lambda>ñ  rm   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 r9  )r†   rÞ   r“   rš   s   €€€€r8   re   z$gather_shape_check.<locals>.<lambda>÷  s7   ø€ Ð;¸A¸3Ð>NÈuÏ{É{ÈmÐ\Ø/°·
±
¨|Ð;QÐRUÐQVÐWñX€ r:   )r±  r†   rV   rg   rÅ   rø  )rš   r†   r“   Ú	self_dimsÚ
index_dimsrÞ   s   ```  @r8   Ú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   €r8   re   zmeta_gather.<locals>.<lambda>  s   ø€ ÐNÈuÏ{É{ÈmÐ\€ r:   )r$  rÐ  r¸   r†   r—   rV   rg   r^   r•   rå   r   r˜   r™   )rš   r†   r“   Úsparse_gradrÐ  Úwrapped_dimÚis_index_emptys     `    r8   Úmeta_gatherr  ü  s‚   ø€ åDä   d§h¡h£jÓ1€KÙ# E§K¡K£M°QÑ$6Ó7€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.r4   r4   r:   r8   re   z#get_operator_enum.<locals>.<lambda>  rm   r:   ÚaddÚmultiplyc                   ó   — y)Nz/reduce argument must be either add or multiply.r4   r4   r:   r8   re   z#get_operator_enum.<locals>.<lambda>"  rm   r:   rc  )Úreduce_Úuse_new_optionss     r8   Ú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   )rS  c                  ó   •— ‰ › d�S )Nz((): Expected dtype int32/int64 for indexr4   ©Úmethod_names   €r8   re   z,scatter_gather_dtype_check.<locals>.<lambda>-  s   ø€ �{�mÐ#KÐL€ r:   c                  ó   •— ‰ › d�S )Nz0(): Expected self.dtype to be equal to src.dtyper4   r  s   €r8   re   z,scatter_gather_dtype_check.<locals>.<lambda>3  s   ø€ �{�mÐ#SÐT€ r:   )r$  rS  r—   rV   rg   r^   r•   rå   )r  rš   r“   Úsrc_optrS  s   `    r8   Úscatter_gather_dtype_checkr  '  sv   ø€ ÝCá�U—[‘[“] aÑ'Ô(Ü�‰Ø�K‰Kœ5Ÿ:™:Ñ%ÒA¨¯©¼¿	¹	Ñ)AÛLô	
ð
 ÐÜ�‰Ø�J‰J˜'Ÿ-™-Ñ'ÛTõ	
ð r:   c                 ó   — t        | d«      S r2   )r±  r�   s    r8   Úensure_nonempty_dimr  7  s   € Üˆs�A‹;Ðr:   c                 óÆ  ‡ ‡‡‡— ddl m}  |‰j                  «       dk(  «      ry t        j                  t        ‰ j                  «       «      t        ‰j                  «       «      k(  d„ «       t        ‰ j                  «       «      }t        |«      D ]>  }|‰k(  rŒ	t        ‰|«      }t        ‰ |«      }t        j                  ||k  ˆˆˆ fd„«       Œ@ ‰�Žt        j                  t        ‰ j                  «       «      t        ‰j                  «       «      k(  d„ «       t        |«      D ]7  }t        ‰|«      }t        ‰|«      }	t        j                  ||	k  ˆˆfd„«       Œ9 y y )Nr   rÏ  c                   ó   — y)NzCIndex tensor must have the same number of dimensions as self tensorr4   r4   r:   r8   re   z%scatter_shape_check.<locals>.<lambda>C  rm   r:   c                  óH   •— d‰j                   › d‰j                   › �d‰ › �z   S )NúExpected index rü  rý  r9  )r†   r“   rš   s   €€€r8   re   z%scatter_shape_check.<locals>.<lambda>Q  s,   ø€ �o e§k¡k ]Ð2MÈdÏjÉjÈ\ÐZØ& s eÐ,ñ-€ r:   c                   ó   — y)NzBIndex tensor must have the same number of dimensions as src tensorr4   r4   r:   r8   re   z%scatter_shape_check.<locals>.<lambda>Y  rm   r:   c                  ó<   •— d‰ j                   › d‰j                   › �S )Nr#  z to be no larger than src r9  )r“   r  s   €€r8   re   z%scatter_shape_check.<locals>.<lambda>`  s!   ø€ ˜/¨%¯+©+¨Ð6PÐQX×Q^ÑQ^ÐP_Ð`€ r:   )	r$  rÐ  r—   rV   rg   r  r†   rÅ   rø  )
rš   r†   r“   r  rÐ  rþ  rÕ   Úindex_d_sizeÚself_d_sizeÚ
src_d_sizes
   ````      r8   Úscatter_shape_checkr)  <  s-  û€ ÝDá�e—k‘k“m qÑ(Ô)ØÜ	‡L�LÜ˜DŸH™H›JÓ'Ô+>¸u¿y¹y»{Ó+KÑKÙUôô
 $ D§H¡H£JÓ/€Iô �9Óò 	
ˆØ�Š8ØÜ+¨E°1Ó5ˆÜ*¨4°Ó3ˆÜ�‰Ø˜KÑ'õ-õ	
ð	
ð ÐÜ�‰Ü §¡£
Ó+Ô/BÀ7Ç;Á;Ã=Ó/QÑQÙXô	
ô �yÓ!ò 	ˆAÜ/°°qÓ9ˆLÜ-¨g°qÓ9ˆJÜ�L‰LØ 
Ñ*Ü`õñ	ð r:   c                 óŽ   — t        || j                  «       «      }t        d| ||«       t        | |||«       |�t	        ||«       y y )NÚscatter)r¸   r†   r  r)  r  )rš   r†   r“   r*  r  r  r  s          r8   Úscatter_meta_implr,  e  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       r8   Úmeta_scatter_addr1  n  s%   € ä�d˜C ¨¨UÔ3Ø�>‰>˜$Ÿ*™*Ó%Ð%r:   c                 ó$   — t        | |||d«       | S r.  ©r,  r0  s       r8   Úmeta_scatter_add_r4  t  s   € ä�d˜C ¨¨UÔ3Ø€Kr:   c                 ó’   — t        |t        j                  «      r|nd }t        | ||||«       | j	                  | j
                  «      S rD   )rp   rV   r   r,  r˜   r™   ©rš   r†   r“   Úsrc_or_valuerk  r*  s         r8   Úmeta_scatterr8  z  s;   € ô % \´5·<±<Ô@‰,Àd€CÜ�d˜C ¨¨VÔ4Ø�>‰>˜$Ÿ*™*Ó%Ð%r:   c                 ó`   — t        |t        j                  «      r|nd }t        | ||||«       | S rD   )rp   rV   r   r,  r6  s         r8   Úmeta_scatter_r:  ‰  s-   € ô % \´5·<±<Ô@‰,Àd€CÜ�d˜C ¨¨VÔ4Ø€Kr:   ÚqueryrÁ   r+  Ú	dropout_pÚ	is_causalÚreturn_debug_maskr}  c           	      ó.  — | j                  d«      }| j                  d«      }| j                  d«      }	| j                  d«      }
|j                  d«      }t        j                  | «      }t        j                  |||	ft        j                  | j
                  ¬«      }|ra|
dkD  rdnd}t        j                  |	|z  «      }|dk  rd}n|dk  rd}t        j                  |||	|f| j                  | j
                  ¬«      }n,t        j                  d| j                  | j
                  ¬«      }t        j                  j                  rt        j                  j                  «       st        | «      d	k(  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   r3   rï   r0   rº  é@   é€   é   rô   r4   r€   )r£   rV   r¯   rŒ   rZ   rƒ   r«  Úceilr^   r¨  r©  ró   r~  rø   r•   r8  )r;  rÁ   r+  r<  r=  r>  r}  rÜ   Ú	num_headsÚmax_seqlen_batch_qÚhead_dimÚmax_seqlen_batch_kÚ	attentionÚ	logsumexpÚblocksize_cÚmax_seqlen_kÚ
debug_maskÚseedÚoffsets                      r8   Ú(meta__scaled_dot_product_flash_attentionrO  —  s­  € ð —‘˜A“€JØ—
‘
˜1“€IØŸ™ A›ÐØ�z‰z˜!‹}€HØŸ™ !›Ðä× Ñ  Ó'€IÜ—‘Ø	�YÐ 2Ð3Ü�k‰kØ�|‰|ô€Iñ Ø%¨š]‘c°ˆÜ—y‘yÐ!3°kÑ!AÓBˆØ Ò$Ø‰LØ 3Ò&ØˆLÜ—[‘[Ø˜Ð$6¸ÐEØ—+‘+Ø—<‘<ô
‰
ô —[‘[ ¨%¯+©+¸e¿l¹lÔKˆ
ô ‡}�}×ÒœUŸZ™Z×4Ñ4Ô6¼+ÀeÓ:LÐPUÒ:Uä�{‰{˜2¤U§Z¡Z¸Ô?ˆÜ—‘˜R¤u§z¡z¸&ÔA‰ä�{‰{˜A¤e§l¡l¸6ÔBˆÜ—‘˜R¤u§|¡|¸FÔCˆð 	ØØØØØØØØð
ð 
r:   Ú	q_descaleÚ	k_descaleÚ	v_descalec
           	      óœ   — | j                   t        j                  k(  r| j                  t        j                  «      } t        | ||||||	«      S rD   )r^   rV   rc  r'  rb  rO  )
r;  rÁ   r+  rP  rQ  rR  r<  r=  r>  r}  s
             r8   Ú2meta__scaled_dot_product_flash_attention_quantizedrT  ×  sJ   € ð ‡{�{”e×)Ñ)Ò)Ø—‘œŸ™Ó(ˆä3ØØØØØØØóð r:   Ú	res_shape.c                 óš  ‡ — t        ‰ j                  «      |k(  rt        j                  ‰ «      }|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 )N)r   r3   rï   r0   c                 ó*   •— ‰j                  «       |    S rD   rÁ  )Úidxr;  s    €r8   re   z,alloc_with_matching_layout.<locals>.<lambda>ú  s   ø€ ¨%¯,©,«.¸Ñ*=€ r:   TrÀ   rº  )rf   r™   rV   r¯   ÚsortedrÅ   rÃ   r“   rŒ   r^   rƒ   rÉ   )r;  rU  r›  Ú	dim_orderrX  Úpermuted_shaperÞ   Úfinal_permutes   `       r8   Úalloc_with_matching_layoutr]  ò  s¸   ø€ ô ˆU�[‰[Ó˜YÒ&Ü×Ñ˜uÓ%ˆð €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                  |	|
|dft        j                  | j
                  ¬«      }t        j                  dt        j                  d¬«      }t        j                  dt        j                  d¬«      }||d d ||||d f	S ©Nr   r3   rï   rœ   rº  r4   r€   ©r£   r]  rV   rŒ   rZ   rƒ   r•   )r;  rÁ   r+  r^  r_  r<  r=  r>  r}  rÛ  r*  ÚS_QÚS_KVÚD_VrU  r›  Ú
logsum_exprM  rN  s                      r8   Ú(meta__scaled_dot_product_cudnn_attentionrg    sÛ   € ð 	�
‰
�1‹€AØ�
‰
�1‹€AØ
�*‰*�Q‹-€CØ�8‰8�A‹;€DØ
�*‰*�R‹.€Cà�A�s˜CÐ €IÜ
$ U¨IÓ
6€Cä—‘Ø	
ˆAˆs�AˆÜ�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 ra  rb  )r;  rÁ   r+  r^  r<  r=  r>  r}  rÛ  ÚH_Qrc  rd  re  rU  r›  rf  rM  rN  s                     r8   Ú5meta__scaled_dot_product_fused_attention_overrideablerj  1  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„  rI  Ú	cum_seq_qÚ	cum_seq_kÚmax_qÚmax_kÚphilox_seedÚphilox_offsetc                 óŠ   — t        j                  |«      }t        j                  |«      }t        j                  |«      }|||fS rD   r  )r„  r;  rÁ   r+  rÎ   rI  rk  rl  rm  rn  r<  r=  ro  rp  r}  Úgrad_qÚgrad_kr#  s                     r8   Ú'meta__scaled_dot_product_flash_backwardrt  \  sA   € ô, ×Ñ˜eÓ$€FÜ×Ñ˜cÓ"€FÜ×Ñ˜eÓ$€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   r3   rï   rº  )r£   rV   r¯   rŒ   rZ   rƒ   r   )r;  rÁ   r+  r<  r=  ru  r}  rÜ   rD  rE  rH  rI  s               r8   Ú0meta__scaled_dot_product_flash_attention_for_cpurw  x  sŠ   € ð —‘˜A“€JØ—
‘
˜1“€IØŸ™ A›Ðä× Ñ  Ó'€IÜ—‘àØØð	
ô
 �k‰kØ�|‰|ô÷ �i��1ƒoð ð 	Øðð r:   c
                 ón  — t        j                  |j                  «       d|j                  |j                  ¬«      }
t        j                  |j                  «       d|j                  |j                  ¬«      }t        j                  |j                  «       d|j                  |j                  ¬«      }|
||fS )N©r   rï   r3   r0   rº  )rV   Úempty_permutedr£   r^   rƒ   )r„  r;  rÁ   r+  rÎ   rI  r<  r=  ru  r}  rr  rs  r#  s                r8   Ú9meta__scaled_dot_product_flash_attention_for_cpu_backwardr{  š  s•   € ô& ×!Ñ!Ø�
‰
‹ØØ�k‰kØ�|‰|ô	€Fô ×!Ñ!Ø�‰‹
ØØ�i‰iØ�z‰zô	€Fô ×!Ñ!Ø�
‰
‹ØØ�k‰kØ�|‰|ô	€Fð �6˜6Ð!Ð!r:   Údropout_maskc                 ó   ‡ ‡‡‡‡‡‡‡— d„ } |‰ «      \  ŠŠ ||«      \  }	}
 ||«      \  }}
‰j                   \  ŠŠŠŠ|	j                   \  }
}Š}
ˆˆˆˆˆˆ ˆfd„}ˆˆˆˆˆfd„}‰dk\  s
|‰k  r‰dk\  r |«       S  |«       S )Nc                 ól  — | j                  «       dk(  r| j                  d«      dfS | j                  «       dkD  rxd}t        | j                  «       dz
  «      D ]  }|| j                  |   z  }Œ | j	                  || j                  d«      | j                  d«      | j                  d«      «      dfS | d	fS )
Nr0   r   Tr	  r3   r5  rÂ  rœ   F)r†   r‘  rÅ   r™   Úviewr£   )r=   rÜ   rÞ   s      r8   Ú	ensure_4dzBmeta__scaled_dot_product_attention_math_for_mps.<locals>.ensure_4dÎ  sŸ   € Ø�5‰5‹7�aŠ<Ø—;‘;˜q“> 4Ð'Ð'Ø�U‰U‹W�qŠ[ØˆJÜ˜1Ÿ5™5›7 Q™;Ó'ò )�Ø˜aŸg™g a™jÑ(‘
ð)à—6‘6˜* a§f¡f¨R£j°!·&±&¸³*¸a¿f¹fÀR»jÓIÈ4ÐOÐOà�e�8ˆOr:   c                  óX  •— ‰j                  ‰j                  «      } ‰	r| j                  ‰«      } ‰j                  ‰‰‰‰f«      }‰	ra‰j                  «       dk(  r|j	                  d«      }| |fS t        ‰j                  d d «      |j                  dd z   }|j                  |«      }| |fS )Nr0   r   r5  r3   r	  )r˜   r™   Úview_asr†   ÚsqueezerÄ   r  )
rÎ   Úattnr™   rÜ   Úmax_seq_lengthÚnum_headÚq_Úq_sizer;  Ú
unsqueezeds
      €€€€€€€r8   Úsdpa_vector_fast_mpszMmeta__scaled_dot_product_attention_math_for_mps.<locals>.sdpa_vector_fast_mpsà  s¥   ø€ Ø�l‰l˜2Ÿ8™8Ó$ˆÙØ—+‘+˜eÓ$ˆCà�|‰|˜Z¨°6¸>ÐJÓKˆÙØ�y‰y‹{˜aÒØ—|‘| A“�ð �DˆyÐô ˜UŸ[™[¨¨"Ð-Ó.°·±¸A¸a°Ñ@�Ø—y‘y Ó'�Ø�DˆyÐr:   c                  ór   •— d} ‰j                  ‰j                  «      }‰j                  ‰‰‰| ‰f«      }||fS )Nr)  rÔ  )ÚblocksrÎ   r,  rÜ   Ú	head_sizer†  r‡  rˆ  s      €€€€€r8   Úsdpa_vector_2pass_mpszNmeta__scaled_dot_product_attention_math_for_mps.<locals>.sdpa_vector_2pass_mpsî  s>   ø€ ØˆØ�l‰l˜2Ÿ8™8Ó$ˆØ—|‘| Z°¸6À6È9Ð$UÓVˆØ�LÐ Ð r:   i   i   r9  )r;  rÁ   r+  ru  r<  r=  r|  r}  r€  Úk_rR   Úv_Úk_sizerŠ  rŽ  rÜ   r�  r…  r†  r‡  rˆ  r‰  s   `              @@@@@@@r8   Ú/meta__scaled_dot_product_attention_math_for_mpsr’  Ã  s”   ÿ€ ò	ñ ˜uÓ%�N€Bˆ
Ù�c‹N�E€BˆÙ�eÓ�E€Bˆà.0¯h©hÑ+€J�˜& )Ø#%§8¡8Ñ €A€vˆ~˜q÷ò ÷!ð !ð 	˜$Ò F¨V¢O¸È$Ò8NÙ$Ó&Ð&á#Ó%Ð%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 )
Nr3   rï   r   rÂ  rœ   rº  r)  r4   r€   )r   r£   rV   rŒ   r^   rƒ   r¨  r©  ró   r~  r«  rC  rZ   r•   )r;  rÁ   r+  r^  r_  r<  r=  r}  rÛ  r¦  rD  ÚKvr›  Úlogsumexp_dimrf  rM  rN  s                    r8   Ú,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   r3   rï   r0   ry  rº  rœ   r(  .)r£   rV   rz  r^   rƒ   rÄ   rŒ   )r„  r;  rÁ   r+  r^  rÎ   rI  ro  rp  r<  r—  r=  r}  rÜ   rD  rm  rF  Ú
head_dim_vrn  rr  rs  r#  Ú	grad_biasÚlastDimÚlastDimAlignedÚ	new_sizess                             r8   Ú+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 rD   r  )r„  r;  rÁ   r+  rÎ   rI  ro  rp  r^  rk  rl  rm  rn  r<  r=  r}  rr  rs  r#  s                      r8   Ú'meta__scaled_dot_product_cudnn_backwardr   c  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   r3   rÂ  rœ   rº  r@  rA  rB  ©NNr4   r€   rï   )r£   r—   rV   r¯   rŒ   rZ   rƒ   r«  rC  r^   r¨  r©  ró   r~  r•   r8  )r;  rÁ   r+  rk  rl  rm  rn  r<  r=  r>  r}  r¡  r¢  r£  r¤  rÜ   rE  rG  rD  rF  rH  rI  Útotal_qrJ  rK  rL  rM  rN  s                               r8   Ú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                 ó¬   — | j                   t        j                  k(  r| j                  t        j                  «      } t        | |||||||||	|||||«      S rD   )r^   rV   rc  r'  rb  r¨  )r;  rÁ   r+  rk  rl  rm  rn  r<  r=  r>  rP  rQ  rR  r}  r¡  r¢  r£  r¤  s                     r8   Ú'meta__flash_attention_forward_quantizedrª  Ð  sb   € ð* ‡{�{”e×)Ñ)Ò)Ø—‘œŸ™Ó(ˆä(ØØØØØØØØØØØØØØØóð r:   c                 óŠ   — t        j                  |«      }t        j                  |«      }t        j                  |«      }|||fS rD   r  )r„  r;  rÁ   r+  rÎ   rI  rk  rl  rm  rn  r<  r=  ro  rp  r}  r¡  r¢  Ú
grad_queryÚgrad_keyÚ
grad_values                       r8   Úmeta__flash_attention_backwardr¯  û  sA   € ô0 ×!Ñ! %Ó(€JÜ×Ñ Ó$€HÜ×!Ñ! %Ó(€Jà�x Ð+Ð+r:   Úcu_seqlens_qÚcu_seqlens_kÚmax_seqlen_qrK  Ú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|}|}|�|€t        d«      ‚|}|�|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   r3   rÂ  rœ   rº  z;max_seqlen_q must not be None when cu_seqlens_q is providedr)  r4   r€   )
r£   rV   rŒ   r^   rƒ   rŠ   r«  rC  rZ   r•   )r;  rÁ   r+  r;  r°  r±  r²  rK  r<  r³  r_  r}  r´  rµ  r¶  rÛ  r¦  r�  rD  r”  r›  Úlogsumexp_batch_dimÚactual_max_seqlen_qÚactual_max_seqlen_kr•  rf  rM  rN  s                               r8   Ú!meta__efficient_attention_forwardr»    sE  € ð, 	�
‰
�1‹€AØ�
‰
�1‹€AØ�‰�‹€AØ—
‘
˜2“€IØ	�‰�B‹€Bä
�+‰+�a˜˜I r°·±ÀUÇ\Á\Ô
R€Cà7CÐ7O˜,×+Ñ+¨AÓ.°Ò2ÐVWÐØÐØÐØÐÜ ØMóð ð +ÐØ*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 )Nr3   c                   ó   — y)Nz,seqlen must match for `shared_storage_dqdkdvr4   r4   r:   r8   re   z4meta__efficient_attention_backward.<locals>.<lambda>m  rm   r:   r0   c                   ó   — y)Nz3embedding dim must match for `shared_storage_dqdkdvr4   r4   r:   r8   re   z4meta__efficient_attention_backward.<locals>.<lambda>q  rm   r:   r   rÂ  rœ   rº  r5  rï   r(  .r4   r«  )
rV   rg   r™   rŒ   r^   rƒ   rÒ  r¯   r£   rÄ   )r„  r;  rÁ   r+  r;  r°  r±  r²  rK  rI  r<  ro  rp  r³  r¼  r}  r½  r¾  Úchunkr¬  r­  r®  r›  rœ  r�  rš  s                             r8   Ú"meta__efficient_attention_backwardrÃ  Q  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(  st	        ‰ «      dk(  �rad„ }	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„ «       �nb|rø‰j                  t         j                  k(  rd}‰dz  Šnd}d}t        ‰|«      }t        |d«      dz  }|t        ‰|«      z  |z  Š|t        ‰|«      z  |z  Š‰j                  «       ‰k(  r_‰j                  «       ‰k(  rLt        j                  ‰j                  «       d„ «       t        j                  ‰j                  «       d„ «       �n†t        j                  dˆˆˆˆfd„«       �nht        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(  ru‰j                  d«      dk(  ra‰j                  d«      dk(  rM‰j                  d«      ‰k(  r9t        j                  ‰j                  «       xr ‰j                  «       d„ «       �nN‰j                  d«      ‰k(  rU‰j                  d«      ‰j                  d«      cxk(  rt        ‰d«      k(  r"n n‰j                  d«      t        ‰d«      k(  rnå‰j                  d«      ‰k(  rK‰j                  d«      ‰j                  d«      cxk(  rt        ‰d«      k(  rn n‰j                  d«      ‰k(  rn†‰j                  d«      t        ‰d«      k(  rK‰j                  d«      ‰j                  d«      cxk(  rt        ‰d«      k(  rn n‰j                  d«      ‰k(  r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 rD   ©rV   rc  Úfloat8_e5m2Úfloat8_e4m3fnuzÚfloat8_e5m2fnuzÚfloat4_e2m1fn_x2r‘   s    r8   Úis_fp8_or_fp4_typez2_check_scaled_mm_sizes.<locals>.is_fp8_or_fp4_type—  óA   € ØÜ×ÑÜ×ÑÜ×!Ñ!Ü×!Ñ!Ü×"Ñ"ð
ð 
ð 	
r:   rï   c                  óL   •— d‰j                  «       › d‰ j                  «       › �S ©Nz%Inputs must be 2D but got self.dim()=z and mat2.dim()=r�   ©rJ  rš   s   €€r8   re   z(_check_scaled_mm_sizes.<locals>.<lambda>¢  ó'   ø€ Ð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   €€r8   re   z(_check_scaled_mm_sizes.<locals>.<lambda>¦  ó&   ø€ ÐQÐRV×R\ÑR\ÐQ]Ð]mÐnr×nxÑnxÐmyÐz€ r:   ró   rô   c                 ó,   — | d   | d   kD  xr | d   dk(  S rÀ  r4   rÁ  s    r8   Úis_row_majorz,_check_scaled_mm_sizes.<locals>.is_row_major«  ó"   € Ø˜!‘9˜v a™yÑ(Ò;¨V°A©Y¸!©^Ð;r:   c                 ó&   — | d   dk(  xr | d   dkD  S rÀ  r4   rÁ  s    r8   Úis_col_majorz,_check_scaled_mm_sizes.<locals>.is_col_major®  ó   € Ø˜!‘9 ‘>Ò3 f¨Q¡i°!¡mÐ3r:   c                 óV   — | j                  d«      dk(  xs | j                  d«      dk(  S rÀ  r¢   ©Ú	tensor_2ds    r8   Úhas_zero_dimz,_check_scaled_mm_sizes.<locals>.has_zero_dim±  ó)   € Ø—>‘> !Ó$¨Ñ)ÒC¨Y¯^©^¸AÓ->À!Ñ-CÐCr:   c                  ó*   •— d‰ j                  «       › �S ©Nz#self must be row_major, got stride rÁ  r±   s   €r8   re   z(_check_scaled_mm_sizes.<locals>.<lambda>¶  ó   ø€ Ð9¸$¿+¹+»-¸ÐI€ r:   c                  ó*   •— d‰ j                  «       › �S ©Nz#mat2 must be col_major, got stride rÁ  ©rJ  s   €r8   re   z(_check_scaled_mm_sizes.<locals>.<lambda>º  rå  r:   r3   r(  r   c                  ó,   •— d‰ j                  d«      › �S ©NzBExpected self.size(1) to be divisible by 16, but got self.size(1)=r3   r¢   r±   s   €r8   re   z(_check_scaled_mm_sizes.<locals>.<lambda>¾  ó   ø€ ÐXÐY]×YbÑYbÐcdÓYeÐXfÐg€ r:   c                  ó"   •— d‰ j                   › �S ©Nz?Expected both dimensions of mat2 to be divisible by 16 but got r9  rè  s   €r8   re   z(_check_scaled_mm_sizes.<locals>.<lambda>Â  ó   ø€ ÐUÐVZ×V`ÑV`ÐUaÐb€ r:   c                   ó   — y)NzNFor tensorwise scaling, both scale_a and scale_b must be float (fp32) tensors.r4   r4   r:   r8   re   z(_check_scaled_mm_sizes.<locals>.<lambda>Ù  rm   r:   r)  rA  r	  c                   ó   — y)Nzscale_a must be contiguousr4   r4   r:   r8   re   z(_check_scaled_mm_sizes.<locals>.<lambda>ù  rm   r:   c                   ó   — y)Nzscale_b must be contiguousr4   r4   r:   r8   re   z(_check_scaled_mm_sizes.<locals>.<lambda>ý  rm   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   €€€€r8   re   z(_check_scaled_mm_sizes.<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.r4   r4   r:   r8   re   z(_check_scaled_mm_sizes.<locals>.<lambda>  rm   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   €€r8   re   z(_check_scaled_mm_sizes.<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.r4   r4   r:   r8   re   z(_check_scaled_mm_sizes.<locals>.<lambda>  rm   r:   c                  ó¦  •— d‰› d‰› d‰› dt        ‰ d«      › d�	dt        ‰ d«      › dt        ‰d«      › d‰› dt        ‰ d«      › d�	z   dt        ‰ d«      › d‰› d	t        ‰d«      › dt        ‰ d«      › d�	z   dt        ‰ d«      › d‰› d
‰j                  d«      › d‰j                  d«      › d‰j                  d«      › d‰j                  d«      › d�z   S )Nú}Invalid scaling configuration. For tensorwise scaling, both scales should be scalar. For rowwise scaling, scale_a should be (ú, 1), scale_b should be (1, ú>). For (BlockWise1x128, BlockWise128x128), scale_a should be (rx   rA  ú), úscale_b should be (ú<). For (BlockWise1x128, BlockWise1x128), scale_a should be (z>). For (BlockWise128x128, BlockWise1x128), scale_a should be (ú). Got scale_a.size()=(r   r3   ú) and scale_b.size()=(ry   ©r9   r£   )Ú_krf  r  rÄ  rÅ  s   €€€€€r8   re   z(_check_scaled_mm_sizes.<locals>.<lambda>7  sL  ø€ ðCàCDÀ#ÐEaÐbcÐadð eVØVWÐUXÐXZÔ[cÐdfÐhkÓ[lÐZmÐmpðrð 0´¸¸SÓ0AÐ/BÀ"ÄXÈaÐQTÓEUÐDVð WTØTUÐSVÐVXÔYaÐbdÐfiÓYjÐXkÐknðpñ	pð 0´¸¸SÓ0AÐ/BÀ"ÀQÀCð HVÜV^Ð_`ÐbeÓVfÐUgÐgiÔjrÐsuÐwzÓj{Ði|Ð|ðAñAð 0´¸¸SÓ0AÐ/BÀ"ÀQÀCð H/Ø/6¯|©|¸A«Ð.?¸rÀ'Ç,Á,ÈqÃ/ÐARð S/Ø/6¯|©|¸A«Ð.?¸rÀ'Ç,Á,ÈqÃ/ÐARÐRSðUñ
Uð r:   rº  )rV   rg   r†   r^   rø   rÇ   r£   r™   Úfloat8_e8m0fnurc  r—   r`  r9   rd  rŒ   rƒ   )rš   rJ  rÄ  rÅ  r;  rÆ  r=  rÇ  rÏ  rÙ  rÜ  rá  Úis_blockwise_scalingÚblock_size_kÚblock_size_mnÚnum_k_blocksÚpadded_num_k_blocksÚ
_out_dtyper  rô  rõ  rf  r  s   ````              @@@@@r8   Ú_check_scaled_mm_sizesr  �  s  ÿø€ ò
ô 
‡L�LØ�‰‹
�a‰Ò+˜DŸH™H›J¨!™OÜ`ôô 
‡L�LÙ˜4Ÿ:™:Ó&ÒIÑ+=¸d¿j¹jÓ+IÜzôô
 �4Ó˜FÒ"¤k°$Ó&7¸5Ó&@ò	<ò	4ò	Dô 	�‰Ù˜Ÿ™›Ó'Ò=©<¸Ó+=ÛIô	
ô 	�‰Ù˜Ÿ™›Ó'Ò=©<¸Ó+=ÛIô	
ô 	�‰Ø�I‰I�a‹L˜2Ñ Ñ"Ûgô	
ô 	�‰Ø�I‰I�a‹L˜2Ñ Ñ"Ò= t§y¡y°£|°bÑ'8¸AÑ'=Ûbô	
ð —
‘
‰ˆˆ2Ø�I‰I�a‹Lˆð —‘¤×!5Ñ!5Ñ5ò :Ø—M‘M¤U×%9Ñ%9Ñ9òð
 —‘¤×!4Ñ!4Ñ4ò 9Ø—M‘M¤U×%8Ñ%8Ñ8ð 	ð �=‰=‹?˜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Ù^öð
 —‘˜Q“ 1Ò$Ø—L‘L “O w§|¡|°A£ÔK¼(À2ÀsÓ:KÕKØ—L‘L “O¤x°°3Ó'7Ò7ð à—‘˜Q“ 1Ò$Ø—L‘L “O w§|¡|°A£ÔK¼(À2ÀsÓ:KÕKØ—L‘L “O qÒ(ð à—‘˜Q“¤8¨A¨sÓ#3Ò3Ø—L‘L “O w§|¡|°A£ÔK¼(À2ÀsÓ:KÕKØ—L‘L “O qÒ(ð ô —‘Ø÷ôð" (Ð3‘¸¿¹€JÜ�;‰;�t—y‘y “| T§Y¡Y¨q£\¸ÈDÏKÉKÔXÐXr:   c           
      ó&   — t        | |||||||«      S rD   )r  )rš   rJ  rÄ  rÅ  r;  rÆ  r=  rÇ  s           r8   Úmeta_scaled_mmr  J  s"   € ô "Øˆd�G˜W d¨L¸)À^óð r:   Úscale_recipe_aÚscale_recipe_bÚ	swizzle_aÚ	swizzle_bc           
      ó¬  ‡ ‡‡‡‡‡	‡‡‡ ‡!‡"‡#‡$‡%‡&— d„ }d„ }t        j                  ‰ j                  «       dk(  xr ‰j                  «       dk(  ˆˆ fd„«       t        j                   |‰ j                  «      xr  |‰j                  «      ˆˆ fd„«       ‰ j                  d   Š ‰ j                  d   Š‰j                  d   Š! |‰ j                  «      r |‰j                  «      rd}‰|z  Š|D �cg c]  }t        |«      ‘Œ }}|D �cg c]  }t        |«      ‘Œ }}‰r‰D �cg c]  }t        |«      ‘Œ c}Šnt        j                  gŠ‰	r‰	D �cg c]  }t        |«      ‘Œ c}Š	nt        j                  gŠ	t        ‰ «      dk(  s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„«       dt        t
           dt        t
           fd„}dt        t
           dt        t
           fd„}dt        t
           dt        t
           fd„}dt        t
           dt        t
           fd„}dt        t
           dt        t
           fd„}dt        t
           dt        t
           fd„}dt        t
           dt        t
           fd„}dt        t
           dt        t
           fd„} |||«      r‰t        j                  ‰d   j                  «       dk(  xrZ ‰d   j                  «       dk(  xrB ‰d   j                  t         j                  k(  xr  ‰d   j                  t         j                  k(  d„ «       �	nŽ |||«      r¥t        j                  ‰d   j                  d   ‰ k(  xrr ‰d   j                  «       ‰ k(  xrZ ‰d   j                  t         j                  k(  xr8 ‰d   j                  «       ‰!k(  xr  ‰d   j                  t         j                  k(  ˆˆˆˆ fd„«       �nà |||«      �rq‰d   j                  t         j                  k(  xr  ‰d   j                  t         j                  k(  }‰d   Š%‰%j                  d   ‰ k(  xrk ‰%j                  d   ‰dz  k(  xrT ‰%j                  d«      dk(  xr> ‰%j                  d«      ‰ k(  xs( ‰%j                  d   dk(  xr ‰%j                  d«      dk(  }‰d   Š&‰&j                  d   ‰!k(  xrk ‰&j                  d   ‰dz  k(  xrT ‰&j                  d«      dk(  xr> ‰&j                  d«      ‰!k(  xs( ‰&j                  d   dk(  xr ‰&j                  d«      dk(  }t        j                  |xr |xr |ˆˆ ˆ!ˆ%ˆ&fd„«       �ne |||«      �r�‰d   j                  t         j                  k(  xr  ‰d   j                  t         j                  k(  }t        ‰dz  d «      Š‰d   Š%‰%j                  d   ‰k(  xrk ‰%j                  d   ‰ dz  k(  xrT ‰%j                  d«      dk(  xr> ‰%j                  d«      ‰k(  xs( ‰%j                  d   dk(  xr ‰%j                  d«      dk(  }‰d   Š&‰&j                  d   ‰!k(  xrk ‰&j                  d   ‰dz  k(  xrT ‰&j                  d«      dk(  xr> ‰&j                  d«      ‰!k(  xs( ‰&j                  d   dk(  xr ‰&j                  d«      dk(  }t        j                  |xr |xr |ˆˆˆ ˆ!ˆ%ˆ&fd!„«       �nÚ |||«      �r�‰d   j                  t         j                  k(  xr  ‰d   j                  t         j                  k(  }t        ‰dz  d «      Š‰d   Š%‰%j                  d   ‰ k(  xrk ‰%j                  d   ‰dz  k(  xrT ‰%j                  d«      dk(  xr> ‰%j                  d«      ‰ k(  xs( ‰%j                  d   dk(  xr ‰%j                  d«      dk(  }‰d   Š&‰&j                  d   ‰k(  xrk ‰&j                  d   ‰!dz  k(  xrT ‰&j                  d«      dk(  xr> ‰&j                  d«      ‰k(  xs( ‰&j                  d   dk(  xr ‰&j                  d«      dk(  }t        j                  |xr |xr |ˆˆˆ ˆ!ˆ%ˆ&fd"„«       �nO |||«      �r¬t         j                  j                   rct#        ‰ j                  d   d#«      ‰ j                  d   z  Š"t#        ‰ j                  d   d#«      ‰ j                  d   z  Š#t        j                  Š$nŠt        ‰ j                  d   d«      t        t#        ‰ j                  d   d#«      d «      z  Š"t        ‰j                  d   d«      t        t#        ‰ j                  d   d#«      d «      z  Š#t        j$                  Š$t        j                  ‰d   j                  «       ‰"k(  xrn ‰d   j                  t         j&                  k(  xrL ‰d   j                  «       ‰#k(  xr4 ‰d   j                  t         j&                  k(  xr ‰d   ‰$k(  xr ‰	d   ‰$k(  ˆ"ˆ#ˆ$ˆˆˆˆ	fd$„«       �n™ |||«      rût        ‰ d«      t        t#        ‰d«      d «      z  Š"t        ‰!d«      t        t#        ‰d«      d «      z  Š#t        j$                  Š$t        j                  ‰d   j                  «       ‰"k(  xrn ‰d   j                  t         j(                  k(  xrL ‰d   j                  «       ‰#k(  xr4 ‰d   j                  t         j(                  k(  xr ‰d   ‰$k(  xr ‰	d   ‰$k(  ˆ"ˆ#ˆ$ˆˆˆˆ	fd%„«       �n• |||«      �rnt        ‰ d«      t        t#        ‰d«      d «      z  Š"t        ‰!d«      t        t#        ‰d«      d «      z  Š#t        j$                  Š$t        j                  ‰d   j                  «       ‰"k(  xrâ ‰d   j                  t         j(                  k(  xrÀ ‰d   j                  «       dk(  xr¨ ‰d   j                  t         j                  k(  xr† ‰d   j                  «       ‰#k(  xrn ‰d   j                  t         j(                  k(  xrL ‰d   j                  «       dk(  xr4 ‰d   j                  t         j                  k(  xr ‰d   ‰$k(  xr ‰	d   ‰$k(  ˆ"ˆ#ˆ$ˆˆˆˆ	fd&„«       nt        j                  d'ˆˆ ˆ!ˆˆfd(„«       |�|n‰ j                  }t        j*                  ‰ ‰!|‰ j,                  ¬)«      S c c}w c c}w c c}w c c}w )*Nc                 ó    — | t         j                  t         j                  t         j                  t         j                  t         j
                  fv S rD   rÊ  r‘   s    r8   rÏ  z5_check_scaled_mm_sizes_v2.<locals>.is_fp8_or_fp4_typeg  rÐ  r:   c                 ó(   — | t         j                  k(  S rD   )rV   rÎ  r‘   s    r8   Úis_fp4_typez._check_scaled_mm_sizes_v2.<locals>.is_fp4_typep  s   € Øœ×.Ñ.Ñ.Ð.r:   rï   c                  óL   •— d‰j                  «       › d‰ j                  «       › �S rÒ  r�   rÓ  s   €€r8   re   z+_check_scaled_mm_sizes_v2.<locals>.<lambda>u  rÔ  r:   c                  ó<   •— d‰j                   › d‰ j                   › �S rÖ  r‘   rÓ  s   €€r8   re   z+_check_scaled_mm_sizes_v2.<locals>.<lambda>y  r×  r:   r   r3   ró   rô   c                 ó,   — | d   | d   kD  xr | d   dk(  S rÀ  r4   rÁ  s    r8   rÙ  z/_check_scaled_mm_sizes_v2.<locals>.is_row_majorš  rÚ  r:   c                 ó&   — | d   dk(  xr | d   dkD  S rÀ  r4   rÁ  s    r8   rÜ  z/_check_scaled_mm_sizes_v2.<locals>.is_col_major�  rÝ  r:   c                 óV   — | j                  d«      dk(  xs | j                  d«      dk(  S rÀ  r¢   rß  s    r8   rá  z/_check_scaled_mm_sizes_v2.<locals>.has_zero_dim   râ  r:   c                  ó*   •— d‰ j                  «       › �S rä  rÁ  r±   s   €r8   re   z+_check_scaled_mm_sizes_v2.<locals>.<lambda>¥  rå  r:   c                  ó*   •— d‰ j                  «       › �S rç  rÁ  rè  s   €r8   re   z+_check_scaled_mm_sizes_v2.<locals>.<lambda>©  rå  r:   r(  c                  ó,   •— d‰ j                  d«      › �S rê  r¢   r±   s   €r8   re   z+_check_scaled_mm_sizes_v2.<locals>.<lambda>­  rë  r:   c                  ó"   •— d‰ j                   › �S rí  r9  rè  s   €r8   re   z+_check_scaled_mm_sizes_v2.<locals>.<lambda>±  rî  r:   Úrecipe_aÚrecipe_bc                 óž   — t        | «      dk(  xr> t        |«      dk(  xr. | d   t        j                  k(  xr |d   t        j                  k(  S rÅ  )rÃ   r(   Ú
TensorWise©r   r!  s     r8   Úis_tensorwisez0_check_scaled_mm_sizes_v2.<locals>.is_tensorwise´  sT   € ä�H“ Ñ"ò :Ü˜“M QÑ&ò:à˜Q‘K¤;×#9Ñ#9Ñ9ò:ð ˜Q‘K¤;×#9Ñ#9Ñ9ð	r:   c                 óž   — t        | «      dk(  xr> t        |«      dk(  xr. | d   t        j                  k(  xr |d   t        j                  k(  S rÅ  )rÃ   r(   ÚRowWiser$  s     r8   Ú
is_rowwisez-_check_scaled_mm_sizes_v2.<locals>.is_rowwise¼  sT   € ä�H“ Ñ"ò 7Ü˜“M QÑ&ò7à˜Q‘K¤;×#6Ñ#6Ñ6ò7ð ˜Q‘K¤;×#6Ñ#6Ñ6ð	r:   c                 óž   — t        | «      dk(  xr> t        |«      dk(  xr. | d   t        j                  k(  xr |d   t        j                  k(  S rÅ  )rÃ   r(   ÚBlockWise1x32r$  s     r8   Úis_mxz(_check_scaled_mm_sizes_v2.<locals>.is_mxÄ  sT   € ä�H“ Ñ"ò =Ü˜“M QÑ&ò=à˜Q‘K¤;×#<Ñ#<Ñ<ò=ð ˜Q‘K¤;×#<Ñ#<Ñ<ð	r:   c                 óž   — t        | «      dk(  xr> t        |«      dk(  xr. | d   t        j                  k(  xr |d   t        j                  k(  S rÅ  )rÃ   r(   ÚBlockWise1x16r$  s     r8   Úis_nv_single_levelz5_check_scaled_mm_sizes_v2.<locals>.is_nv_single_levelÌ  sV   € ô �H“ Ñ"ò =Ü˜“M QÑ&ò=à˜Q‘K¤;×#<Ñ#<Ñ<ò=ð ˜Q‘K¤;×#<Ñ#<Ñ<ð	r:   c                 óþ   — t        | «      dk(  xrn t        |«      dk(  xr^ | d   t        j                  k(  xrF | d   t        j                  k(  xr. |d   t        j                  k(  xr |d   t        j                  k(  S )Nrï   r   r3   )rÃ   r(   r-  r#  r$  s     r8   Úis_nvz(_check_scaled_mm_sizes_v2.<locals>.is_nvÖ  s†   € ä�H“ Ñ"ò :Ü˜“M QÑ&ò:à˜Q‘K¤;×#<Ñ#<Ñ<ò:ð ˜Q‘K¤;×#9Ñ#9Ñ9ò:ð ˜Q‘K¤;×#<Ñ#<Ñ<ò	:ð
 ˜Q‘K¤;×#9Ñ#9Ñ9ðr:   c                 óž   — t        | «      dk(  xr> t        |«      dk(  xr. | d   t        j                  k(  xr |d   t        j                  k(  S rÅ  )rÃ   r(   ÚBlockWise1x128r$  s     r8   Úis_1x128_1x128z1_check_scaled_mm_sizes_v2.<locals>.is_1x128_1x128à  sT   € ä�H“ Ñ"ò >Ü˜“M QÑ&ò>à˜Q‘K¤;×#=Ñ#=Ñ=ò>ð ˜Q‘K¤;×#=Ñ#=Ñ=ð	r:   c                 óž   — t        | «      dk(  xr> t        |«      dk(  xr. | d   t        j                  k(  xr |d   t        j                  k(  S rÅ  )rÃ   r(   r2  ÚBlockWise128x128r$  s     r8   Úis_1x128_128x128z3_check_scaled_mm_sizes_v2.<locals>.is_1x128_128x128è  sW   € ä�H“ Ñ"ò @Ü˜“M QÑ&ò@à˜Q‘K¤;×#=Ñ#=Ñ=ò@ð ˜Q‘K¤;×#?Ñ#?Ñ?ð	r:   c                 óž   — t        | «      dk(  xr> t        |«      dk(  xr. | d   t        j                  k(  xr |d   t        j                  k(  S rÅ  )rÃ   r(   r5  r2  r$  s     r8   Úis_128x128_1x128z3_check_scaled_mm_sizes_v2.<locals>.is_128x128_1x128ð  sT   € ä�H“ Ñ"ò >Ü˜“M QÑ&ò>à˜Q‘K¤;×#?Ñ#?Ñ?ò>ð ˜Q‘K¤;×#=Ñ#=Ñ=ð	r:   c                   ó   — y)Nz\For Tensorwise scaling, both scale_a and scale_b must be single element float (fp32) tensorsr4   r4   r:   r8   re   z+_check_scaled_mm_sizes_v2.<locals>.<lambda>  rm   r:   c            	      óš   •— d‰j                   d   › d‰d   j                  «       › d‰ j                   d   › d‰d   j                  «       › d�	S )Nz'For Rowwise scaling, scale_a must have r   z elements (got: z), and scale_b must have r3   ry   )r™   r—   )rJ  rÄ  rÅ  rš   s   €€€€r8   re   z+_check_scaled_mm_sizes_v2.<locals>.<lambda>
  sa   ø€ Ø=¸d¿j¹jÈ¹m¸_ÐL\Ð]dÐefÑ]g×]mÑ]mÓ]oÐ\pð q/Ø/3¯z©z¸!©}¨oÐ=MÈgÐVWÉj×N^ÑN^ÓN`ÐMaÐabðdð r:   rA  c                  ó¢   •— d‰› d‰ dz  › d‰j                   › d‰› d‰j                  › d‰› d‰ dz  › d‰j                   › d‰› d‰j                  › d�S )Nz>For 1x128 x 1x128 blockwise scaling, scale a must have shape [rx   rA  ú] (got: ú) and stride [1, ú)scale b must have shape [ry   ©r™   rÇ   )rs  r¦  r�  ÚsaÚsbs   €€€€€r8   re   z+_check_scaled_mm_sizes_v2.<locals>.<lambda>'  s~   ø€ ð0Ø01¨s°"°Q¸#±X°J¸hÀrÇxÁxÀjÐPaÐbcÐadÐdlÐmo×mvÑmvÐlwð x0Ø01¨s°"°Q¸#±X°J¸hÀrÇxÁxÀjÐPaÐbcÐadÐdlÐmo×mvÑmvÐlwÐwxðzð r:   r	  c                  ó¢   •— d‰› d‰dz  › d‰j                   › d‰› d‰j                  › d‰› d‰ dz  › d‰j                   › d‰› d‰j                  › d�S )Nz]For 128x128 x 1x128 blockwise scaling, L4 = {round_up(K / 128, 4)}, scale a must have shape [rx   rA  r<  r=  r>  ry   r?  ©rs  ÚL4r¦  r�  r@  rA  s   €€€€€€r8   re   z+_check_scaled_mm_sizes_v2.<locals>.<lambda>F  s~   ø€ ð0Ø02¨t°2°a¸3±h°Z¸xÈÏÉÀzÐQbÐceÐbfÐfnÐoq×oxÑoxÐnyð z0Ø01¨s°"°Q¸#±X°J¸hÀrÇxÁxÀjÐPaÐbcÐadÐdlÐmo×mvÑmvÐlwÐwxðzð r:   c                  ó¢   •— d‰› d‰ dz  › d‰j                   › d‰› d‰j                  › d‰› d‰dz  › d‰j                   › d‰› d‰j                  › d�S )Nz]For 1x128 x 128x128 blockwise scaling, L4 = {round_up(K / 128, 4)}, scale a must have shape [rx   rA  r<  r=  r>  ry   r?  rC  s   €€€€€€r8   re   z+_check_scaled_mm_sizes_v2.<locals>.<lambda>e  s~   ø€ ð0Ø01¨s°"°Q¸#±X°J¸hÀrÇxÁxÀjÐPaÐbcÐadÐdlÐmo×mvÑmvÐlwð x0Ø02¨t°2°a¸3±h°Z¸xÈÏÉÀzÐQbÐceÐbfÐfnÐoq×oxÑoxÐnyÐyzð|ð r:   r)  c                  óæ   •— d‰ › d‰d   j                  «       › d‰› d‰d   j                  «       › dt        j                  › d‰d   j                  › d‰d   j                  › d‰› d	‰d   › d‰d   › d
�S )Nz!for MX scaling scale_a must have ú (got: r   ú) and scale_b must have z). Scales must have types z (for self: ú	, mat_b: z) Must have swizzle type ú (got self: ry   )r—   rV   r  r^   ©Úexpected_scale_a_elemsÚexpected_scale_b_elemsÚexpected_swizzlerÄ  rÅ  r  r  s   €€€€€€€r8   re   z+_check_scaled_mm_sizes_v2.<locals>.<lambda>€  s°   ø€ Ø7Ð8NÐ7OÈwÐW^Ð_`ÑWa×WgÑWgÓWiÐVjð k-Ø-CÐ,DÀGÈGÐTUÉJ×L\ÑL\ÓL^ÐK_ð `"Ü"'×"6Ñ"6Ð!7°|ÀGÈAÁJ×DTÑDTÐCUÐU^Ð_fÐghÑ_i×_oÑ_oÐ^pð q.Ø.>Ð-?¸|ÈIÐVWÉLÈ>ÐYbÐclÐmnÑcoÐbpÐpqðsð r:   c                  ó„   •— d‰ › d‰d   j                  «       › d‰› d‰d   j                  «       › d‰› d‰d   › d‰d   › d�S )	Nz.for single-level NV scaling scale_a must have rG  r   rH  ú). Must have swizzle type rJ  rI  ry   r¾  rK  s   €€€€€€€r8   re   z+_check_scaled_mm_sizes_v2.<locals>.<lambda>’  sw   ø€ ØDÐE[ÐD\Ð\cÐdkÐlmÑdn×dtÑdtÓdvÐcwð x-Ø-CÐ,DÀGÈGÐTUÉJ×L\ÑL\ÓL^ÐK_ð `$Ø$4Ð#5°\À)ÈAÁ,ÀÈyÐYbÐcdÑYeÐXfÐfgðið r:   c                  ó„   •— d‰ › d‰d   j                  «       › d‰› d‰d   j                  «       › d‰› d‰d   › d‰d   › d�S )	Nz!for NV scaling scale_a must have rG  r   rH  rP  rJ  rI  ry   r¾  rK  s   €€€€€€€r8   re   z+_check_scaled_mm_sizes_v2.<locals>.<lambda>§  sv   ø€ Ø7Ð8NÐ7OÈwÐW^Ð_`ÑWa×WgÑWgÓWiÐVjð k-Ø-CÐ,DÀGÈGÐTUÉJ×L\ÑL\ÓL^ÐK_ð `$Ø$4Ð#5°\À)ÈAÁ,ÀÈyÐYbÐcdÑYeÐXfÐfgðið r:   Fc                  ób  •— d‰› d‰› d‰› dt        ‰ d«      › d�	dt        ‰ d«      › dt        ‰d«      › d‰› dt        ‰ d«      › d�	z   dt        ‰ d«      › d‰› d	‰d
   j                  d
«      › d‰d
   j                  d«      › d‰d
   j                  d
«      › d‰d
   j                  d«      › d�z   S )Nrû  rü  rý  rx   rA  rþ  rÿ  r   r  r   r3   r  ry   r  )rs  r¦  r�  rÄ  rÅ  s   €€€€€r8   re   z+_check_scaled_mm_sizes_v2.<locals>.<lambda>°  s  ø€ ð?à?@¸cÐA]Ð^_Ð]`ð aRØRSÐQTÐTVÔW_Ð`aÐcfÓWgÐVhÐhkðmð ,¬H°Q¸Ó,<Ð+=¸RÄÈÈCÓ@PÐ?Qð RPØPQÈsÐRTÔU]Ð^_ÐadÓUeÐTfÐfiðkñ	kð ,¬H°Q¸Ó,<Ð+=¸RÀ¸sð C+Ø+2°1©:¯?©?¸1Ó+=Ð*>¸bÀÈÁÇÁÐQRÓASÐ@Tð U+Ø+2°1©:¯?©?¸1Ó+=Ð*>¸bÀÈÁÇÁÐQRÓASÐ@TÐTUðWñWð r:   rº  )rV   rg   r†   r^   r™   r(   r)   Ú
NO_SWIZZLErø   rÇ   r£   rÄ   r—   r`  r?   r¨  r©  r9   ÚSWIZZLE_32_4_4r  rc  rŒ   rƒ   )'rš   rJ  rÄ  r  rÅ  r  r;  r=  r  r  rÇ  rÏ  r  ÚK_packed_multiplierÚsirÙ  rÜ  rá  r%  r(  r+  r.  r0  r3  r6  r8  Útypes_okÚ
scale_a_okÚ
scale_b_okr  rs  rD  r¦  r�  rL  rM  rN  r@  rA  s'   ``` `   ``                    @@@@@@@@@r8   Ú_check_scaled_mm_sizes_v2rZ  Z  s$  ÿþ€ ò
ò/ô 
‡L�LØ�‰‹
�a‰Ò+˜DŸH™H›J¨!™OÜ`ôô 
‡L�LÙ˜4Ÿ:™:Ó&ÒIÑ+=¸d¿j¹jÓ+IÜzôð 	�
‰
�1‰€AØ�
‰
�1‰€AØ�
‰
�1‰€Añ �4—:‘:Ô¡;¨t¯z©zÔ#:ØÐØ	Ð Ñ ˆà0>Ö?¨"”k "•oÐ?€NÐ?Ø0>Ö?¨"”k "•oÐ?€NÐ?áØ/8Ö9¨”[ •_Ò9‰	ô ×"Ñ"ð
ˆ	ñ Ø/8Ö9¨”[ •_Ò9‰	ô ×"Ñ"ð
ˆ	ô �4Ó˜FÒ"¤k°$Ó&7¸5Ó&@ò	<ò	4ò	Dô 	�‰Ù˜Ÿ™›Ó'Ò=©<¸Ó+=ÛIô	
ô 	�‰Ù˜Ÿ™›Ó'Ò=©<¸Ó+=ÛIô	
ô 	�‰Ø�I‰I�a‹L˜2Ñ Ñ"Ûgô	
ô 	�‰Ø�I‰I�a‹L˜2Ñ Ñ"Ò= t§y¡y°£|°bÑ'8¸AÑ'=Ûbô	
ð
	¤D¬Ñ$5ð 	ÄÄkÑARó 	ð	¤¤kÑ!2ð 	¼dÄ;Ñ>Oó 	ð	œD¤Ñ-ð 	¼¼kÑ9Jó 	ð	Üœ;Ñ'ð	Ü37¼Ñ3Dó	ð	œD¤Ñ-ð 	¼¼kÑ9Jó 	ð	¤T¬+Ñ%6ð 	Ä$Ä{ÑBSó 	ð	¤t¬KÑ'8ð 	ÄDÌÑDUó 	ð	¤t¬KÑ'8ð 	ÄDÌÑDUó 	ñ ˜¨Ô8ä�L‰LØ˜‘
× Ñ Ó" aÑ'ò 6Ø˜A‘J×$Ñ$Ó&¨!Ñ+ò6à˜A‘J×$Ñ$¬¯©Ñ5ò6ð ˜A‘J×$Ñ$¬¯©Ñ5Ùvöñ ˜¨Ô7Ü�L‰LØ˜‘
× Ñ  Ñ# qÑ(ò 6Ø˜A‘J×$Ñ$Ó&¨!Ñ+ò6à˜A‘J×$Ñ$¬¯©Ñ5ò6ð ˜A‘J×$Ñ$Ó&¨!Ñ+ò6ð ˜A‘J×$Ñ$¬¯©Ñ5öö
ñ ˜N¨NÕ;ð
 ˜‘
× Ñ ¤E§M¡MÑ1ÒW°g¸a±j×6FÑ6FÌ%Ï-É-Ñ6Wð ð ˜‘ˆBà—‘˜‘˜qÑ ò TØ—H‘H˜Q‘K 1¨¡8Ñ+òTà—I‘I˜a“L AÑ%òTð —Y‘Y˜q“\ QÑ&ÒR¨2¯8©8°A©;¸!Ñ+;Ò+QÀÇ	Á	È!ÃÐPQÑ@Qð	 ð ˜‘ˆBà—‘˜‘˜qÑ ò TØ—H‘H˜Q‘K 1¨¡8Ñ+òTà—I‘I˜a“L AÑ%òTð —Y‘Y˜q“\ QÑ&ÒR¨2¯8©8°A©;¸!Ñ+;Ò+QÀÇ	Á	È!ÃÐPQÑ@Qð	 ô �L‰LØÒ6˜ZÒ6¨J÷öñ ˜n¨nÕ=ð ˜‘
× Ñ ¤E§M¡MÑ1ÒW°g¸a±j×6FÑ6FÌ%Ï-É-Ñ6Wð ô ˜!˜c™' 1Ó%ˆBØ˜‘ˆBà—‘˜‘˜rÑ!ò UØ—H‘H˜Q‘K 1¨¡8Ñ+òUà—I‘I˜a“L AÑ%òUð —Y‘Y˜q“\ RÑ'ÒS¨B¯H©H°Q©K¸1Ñ,<Ò,RÀÇÁÈ1ÃÐQRÑARð	 ð ˜‘ˆBà—‘˜‘˜qÑ ò TØ—H‘H˜Q‘K 1¨¡8Ñ+òTà—I‘I˜a“L AÑ%òTð —Y‘Y˜q“\ QÑ&ÒR¨2¯8©8°A©;¸!Ñ+;Ò+QÀÇ	Á	È!ÃÐPQÑ@Qð	 ô �L‰LØÒ6˜ZÒ6¨J÷ð öñ ˜n¨nÕ=ð ˜‘
× Ñ ¤E§M¡MÑ1ÒW°g¸a±j×6FÑ6FÌ%Ï-É-Ñ6Wð ô ˜!˜c™' 1Ó%ˆBØ˜‘ˆBà—‘˜‘˜qÑ ò TØ—H‘H˜Q‘K 1¨¡8Ñ+òTà—I‘I˜a“L AÑ%òTð —Y‘Y˜q“\ QÑ&ÒR¨2¯8©8°A©;¸!Ñ+;Ò+QÀÇ	Á	È!ÃÐPQÑ@Qð	 ð ˜‘ˆBà—‘˜‘˜rÑ!ò UØ—H‘H˜Q‘K 1¨¡8Ñ+òUà—I‘I˜a“L AÑ%òUð —Y‘Y˜q“\ RÑ'ÒS¨B¯H©H°Q©K¸1Ñ,<Ò,RÀÇÁÈ1ÃÐQRÑARð	 ô �L‰LØÒ6˜ZÒ6¨J÷ð öñ �> >Õ2Ü�}‰}× Ò ä)1°$·*±*¸Q±-ÀÓ)DÀtÇzÁzÐRSÁ}Ñ)TÐ&Ü)1°$·*±*¸Q±-ÀÓ)DÀtÇzÁzÐRSÁ}Ñ)TÐ&Ü#.×#9Ñ#9Ñ ä)1°$·*±*¸Q±-ÀÓ)EÌÜ˜TŸZ™Z¨™]¨BÓ/°óIñ *Ð&ô *2°$·*±*¸Q±-ÀÓ)EÌÜ˜TŸZ™Z¨™]¨BÓ/°óIñ *Ð&ô $/×#=Ñ#=Ð Ü�L‰LØ˜‘
× Ñ Ó"Ð&<Ñ<ò 5Ø˜A‘J×$Ñ$¬×(<Ñ(<Ñ<ò5à˜A‘J×$Ñ$Ó&Ð*@Ñ@ò5ð ˜A‘J×$Ñ$¬×(<Ñ(<Ñ<ò5ð ˜a‘LÐ$4Ñ4ò	5ð
 ˜a‘LÐ$4Ñ4÷ñ öñ   °Ô?Ü%-¨a°Ó%5¼ÄÈ!ÈRÃÐRSÓ8TÑ%TÐ"Ü%-¨a°Ó%5¼ÄÈ!ÈRÃÐRSÓ8TÑ%TÐ"Ü*×9Ñ9ÐÜ�L‰LØ˜‘
× Ñ Ó"Ð&<Ñ<ò 5Ø˜A‘J×$Ñ$¬×(;Ñ(;Ñ;ò5à˜A‘J×$Ñ$Ó&Ð*@Ñ@ò5ð ˜A‘J×$Ñ$¬×(;Ñ(;Ñ;ò5ð ˜a‘LÐ$4Ñ4ò	5ð
 ˜a‘LÐ$4Ñ4÷ñ öñ �> >Õ2Ü%-¨a°Ó%5¼ÄÈ!ÈRÃÐRSÓ8TÑ%TÐ"Ü%-¨a°Ó%5¼ÄÈ!ÈRÃÐRSÓ8TÑ%TÐ"Ü*×9Ñ9ÐÜ�L‰LØ˜‘
× Ñ Ó"Ð&<Ñ<ò 	5Ø˜A‘J×$Ñ$¬×(;Ñ(;Ñ;ò	5à˜A‘J×$Ñ$Ó&¨!Ñ+ò	5ð ˜A‘J×$Ñ$¬¯©Ñ5ò	5ð ˜A‘J×$Ñ$Ó&Ð*@Ñ@ò		5ð
 ˜A‘J×$Ñ$¬×(;Ñ(;Ñ;ò	5ð ˜A‘J×$Ñ$Ó&¨!Ñ+ò	5ð ˜A‘J×$Ñ$¬¯©Ñ5ò	5ð ˜a‘LÐ$4Ñ4ò	5ð ˜a‘LÐ$4Ñ4÷ñ õô$ �L‰LØ÷
ôð (Ð3‘¸¿¹€JÜ�;‰;�q˜! :°d·k±kÔBÐBùòm	 @ùÚ?ùò :ùò :s   Ã0wÄwÄ"wÅwræ  Úcontraction_dimsc                 ó.   — t        | |||||||	|||¬«      S )N)r;  r=  r  r  rÇ  )rZ  )rš   rJ  rÄ  r  r  rÅ  r  r  r;  ræ  r[  rÇ  s               r8   Úmeta_scaled_mm_v2r]  Á  s2   € ô %ØØØØØØØØØØØ%ôð r:   c                 óZ   — t        | ||||d¬«       | j                  | j                  «      S ©NT)r  r/  ©rš   r†   r“   r*  rk  ri  s         r8   Úmeta_scatter_reduce_twora  ß  s)   € ô �d˜C ¨¨VÀTÕJØ�>‰>˜$Ÿ*™*Ó%Ð%r:   c                 ó(   — t        | ||||d¬«       | S r_  r3  r`  s         r8   Úmeta_scatter_reduce__tworc  æ  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 )NzAThe probability distributions dimensions must be 1 or 2, but got r�   rò  s   €r8   re   z"meta_multinomial.<locals>.<lambda>ñ  s   ø€ ÐSÐTY×T]ÑT]ÓT_ÐS`Ða€ r:   r3   rº  )rV   rg   r†   rŒ   r•   rƒ   r£   )rÚ   Únum_samplesÚreplacementr  s   `   r8   Úmeta_multinomialrh  ì  s|   ø€ ô 
‡L�LØ	ˆE�I‰I‹KÖ˜1ÔÛaôð ‡y�yƒ{�aÒÜ�{‰{˜;¬e¯j©jÀÇÁÔNÐNÜ�;‰;Ø�
‰
�1‹�{¬%¯*©*¸U¿\¹\ôð r:   c                 ó"   — d}| D ]  }||z  }Œ	 |S r2   r4   )Úvsra  Úvs      r8   Úmultiply_integersrl  ú  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   €€r8   re   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 ro  rÌ  )Úexpected_input_dimsrQ  s   €€r8   re   z'upsample_common_check.<locals>.<lambda>	  s   ø€ Ð6Ð7JÐ6KÈ?Ô[^Ð_iÓ[jÐZkÐl€ r:   c              3   ó&   K  — | ]	  }|d kD  –— Œ y­w©r   Nr4   ©rr   r§  s     r8   rt   z(upsample_common_check.<locals>.<genexpr>  s   è ø€ Ò*�aˆA��EÑ*ùó   ‚c              3   ó&   K  — | ]	  }|d kD  –— Œ y­wrt  r4   ru  s     r8   rt   z(upsample_common_check.<locals>.<genexpr>  s   è ø€ Ò2N¸Q°1°qµ5Ñ2Nùrv  c                  ó   •— d‰ › d‰› �S )NzDInput and output sizes should be greater than 0, but got input size z and output size r4   )rQ  r{  s   €€r8   re   z'upsample_common_check.<locals>.<lambda>  s   ø€ ð Ø �\Ð!2°;°-ðA€ r:   )rV   rg   rÃ   r’  )rQ  r{  rp  rä  Úchannelsrr  s   ```  @r8   Úupsample_common_checkrz    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   r3   c                  ó*   •— d‰ j                  «       › �S )Nz>Non-empty 3D data tensor expected but got a tensor with sizes r¢   rò  s   €r8   re   z$upsample_nearest1d.<locals>.<lambda>  ó   ø€ ÐPÐQV×Q[ÑQ[ÓQ]ÐP^Ð_€ r:   ©rp  r«   ©
rV   rg   r—   rl  r£   rz  r˜   r'  rO   r   )rÚ   r{  ÚscalesÚfull_output_sizes   `   r8   Ú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   r3   c                  ó*   •— d‰ j                  «       › �S ©Nz>Non-empty 4D data tensor expected but got a tensor with sizes r¢   rò  s   €r8   re   z$upsample_nearest2d.<locals>.<lambda>,  r}  r:   rï   r~  ró   r	  r«   )rV   rg   r—   rl  r£   rz  r˜   rO   r   r™   rƒ   rz   r°   Ú
contiguous)	rÚ   r{  Úscales_hÚscales_wr�  rÿ   r¬   rR   Ú
n_channelss	   `        r8   Ú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{  rQ  rˆ  r‰  c                 óX  ‡ ‡‡— t        ||d¬«      Št        j                  ‰ j                  dk(  ˆ fd„«       t	        d«      D ]2  Št        j                  ‰ j                  ‰«      ‰‰   k(  ˆˆ ˆfd„«       Œ4 ‰ j                  |«      j                  t        j                  ‰ «      ¬«      S )Nrï   r~  r	  c                  ó"   •— d‰ j                   › �S ©NzFExpected grad_output to be a tensor of dimension 4 but got: dimension r  r¡  s   €r8   re   z-upsample_nearest2d_backward.<locals>.<lambda>R  ó   ø€ Ð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   €€€r8   re   z-upsample_nearest2d_backward.<locals>.<lambda>W  s>   ø€ ð Ø !˜s $Ð'7¸Ñ':Ð&;Ø,¨Q¨C¨t°K×4DÑ4DÀQÓ4GÐ3HðJð r:   r«   )
rz  rV   rg   r¥   rÅ   r£   r˜   r'  rO   r   )rþ  r{  rQ  rˆ  r‰  r�  rÞ   s   `    @@r8   Ú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   r3   c                  ó*   •— d‰ j                  «       › �S )Nz>Non-empty 5D data tensor expected but got a tensor with sizes r¢   rò  s   €r8   re   z$upsample_nearest3d.<locals>.<lambda>i  r}  r:   r0   r~  r«   r  )rÚ   r{  Úscales_drˆ  r‰  r�  s   `     r8   Úupsample_nearest3dr—  c  rƒ  r:   c                 ó  — t        j                  | «      t        j                  | t         j                  ¬«      }}|�Æ|�Ät        |t        «      st        dt        |«      › �«      ‚t        |t        «      st        dt        |«      › �«      ‚|j                  }|j                  «       }	t        ||«      }t        ||«      }|j                  ||	«       |j                  ||	«       t        ||¬«       t        ||¬«       ||fS ||fS )Nr‘   zvalues must be TensorLike, got z indices must be TensorLike, got )rŽ  r�  )rV   r¯   r·   rp   r   rŠ   rz   r™   rÇ   r!   rÌ   r#   )
rš   Ústabler†   Ú
descendingr³   r´   rk  rÞ   r¨   Ú
out_strides
             r8   Ú	meta_sortrœ  s  së   € ô ×Ñ˜DÓ!¤5×#3Ñ#3°DÄÇÁÔ#L€q€AØÐ˜gÐ1Ü˜&¤*Ô-Ü Ð#BÄ4ÈÃ<À.Ð!QÓRÐRÜ˜'¤:Ô.Ü Ð#CÄDÈÃMÀ?Ð!SÓTÐTð —G‘Gˆ	Ø—X‘X“Zˆ
Ü" 6¨9Ó5ˆÜ# G¨YÓ7ˆØ×Ñ˜9 jÔ1Ø×Ñ˜I zÔ2Ü ¨FÕ3Ü ¨GÕ4Ø�wˆÐØˆaˆ4€Kr:   c           	      ó  ‡ ‡‡‡‡‡‡‡— t        j                  ‰ j                  dk(  ˆ fd„«       t        j                  ‰ j                  ‰j                  k(  ˆˆ fd„«       ‰ j	                  d«      Š‰�‚t        j                  ‰j                  dk(  ˆfd„«       t        j                  ‰j                  «       ‰k(  ˆˆfd„«       t        j                  ‰j                  ‰j                  k(  ˆˆfd„«       t        j                  ‰j                  dk(  ˆfd„«       ‰ j	                  d	«      ‰z  ‰z  Št        j                  ‰j                  «       ‰k(  ˆˆˆˆ ˆfd
„«       t        j                  t        ˆ fd„‰‰‰‰fD «       «      d„ «       y )Nrï   c                  ó"   •— ‰ j                   › d�S ©Nz != 2r  )Úinput_gatess   €r8   re   z%rnn_cell_checkSizes.<locals>.<lambda>˜  ó   ø€ °;×3CÑ3CÐ2DÀEÐ0J€ r:   c                  ó:   •— ‰j                   › d‰ j                   › �S ©NrC  r9  )Úhidden_gatesr   s   €€r8   re   z%rnn_cell_checkSizes.<locals>.<lambda>›  s    ø€ �;×$Ñ$Ð% T¨,×*<Ñ*<Ð)=Ð>€ r:   r3   c                  ó"   •— ‰ j                   › d�S )Nz != 1r  )Ú
input_biass   €r8   re   z%rnn_cell_checkSizes.<locals>.<lambda>Ÿ  s   ø€ °j·o±oÐ5FÀeÐ3L€ r:   c                  ó.   •— ‰j                  «       › d‰ › �S r£  r¾  )Ú
gates_sizer¦  s   €€r8   re   z%rnn_cell_checkSizes.<locals>.<lambda>¢  s   ø€ �z×'Ñ'Ó)Ð*¨$¨z¨lÐ;€ r:   c                  ó:   •— ‰j                   › d‰ j                   › �S r£  r9  )Úhidden_biasr¦  s   €€r8   re   z%rnn_cell_checkSizes.<locals>.<lambda>¦  s    ø€ �z×'Ñ'Ð(¨¨[×->Ñ->Ð,?Ð@€ r:   c                  ó"   •— ‰ j                   › d�S rŸ  r  )Úprev_hiddens   €r8   re   z%rnn_cell_checkSizes.<locals>.<lambda>¨  r¡  r:   r   c            
      ó`   •— ‰j                  «       › d‰j                  d«      › d‰› d‰› d‰ › d�
S )NrC  r   z * z // z (aka ry   )r—   r£   )Úexpected_prev_hidden_numelÚfactorr¨  r   r¬  s   €€€€€r8   re   z%rnn_cell_checkSizes.<locals>.<lambda>¬  sB   ø€ �;×$Ñ$Ó&Ð' t¨K×,<Ñ,<¸QÓ,?Ð+@ÀÀJÀ<ÈtÐTZÐS[Ð[aÐb|Ða}Ð}~Ð€ r:   c              3   óP   •K  — | ]  }|j                   ‰j                   k(  –— Œ y ­wrD   r«  )rr   r=   r   s     €r8   rt   z&rnn_cell_checkSizes.<locals>.<genexpr>¯  s(   øè ø€ ò 
àð �H‰H˜×*Ñ*Õ*ñ
ùs   ƒ#&c                   ó   — y)Nz%expected all inputs to be same devicer4   r4   r:   r8   re   z%rnn_cell_checkSizes.<locals>.<lambda>³  rm   r:   )rV   rg   r¥   r™   r£   r—   r’  )r   r¤  r¦  rª  r¯  r¬  r®  r¨  s   ``````@@r8   Úrnn_cell_checkSizesr²  �  s@  ÿ€ ô 
‡L�L�×!Ñ! QÑ&Ó(JÔKÜ	‡L�LØ×Ñ˜\×/Ñ/Ñ/Ü>ôð ×!Ñ! !Ó$€JØÐÜ�‰�Z—_‘_¨Ñ)Ó+LÔMÜ�‰Ø×ÑÓ *Ñ,Ü;ô	
ô 	�‰Ø×Ñ × 1Ñ 1Ñ1Ü@ô	
ô 
‡L�L�×!Ñ! QÑ&Ó(JÔKØ!,×!1Ñ!1°!Ó!4°zÑ!AÀVÑ!KÐÜ	‡L�LØ×ÑÓÐ9Ñ9ßôô 
‡L�LÜó 
à" J°¸[ÐIô
ó 	
ñ 	8õr:   c                 ó
  — t        | |||d|«       t        j                  | t        j                  ¬«      }t        j                  |t        j                  ¬«      }t        j                  |t        j                  ¬«      }|||fS )Nr	  r«   )r²  rV   r¯   r°   )r   r¤  Úcxr¦  rª  Ú	workspaceÚhyÚcys           r8   Ú_thnn_fused_lstm_cell_metar¸  ·  sk   € ô ˜ \°:¸{ÈAÈrÔRÜ× Ñ  ¼E×<SÑ<SÔT€IÜ	×	Ñ	˜"¬E×,CÑ,CÔ	D€BÜ	×	Ñ	˜"¬E×,CÑ,CÔ	D€BØ��IÐÐr:   c                 ób  — t        |«      dk7  }|r t        |«      }|d   }| j                  d   }nB|
r| j                  d   n| j                  d   }|
r| j                  d   n| j                  d   }d}|rdnd}|dk7  r|n|}|r|||z  g}n|
r||||z  gn||||z  g}| j                  |«      }|	|z  ||g}|€"t        j                  d| j
                  ¬«      }n|j                  |«      }|j                  |	|z  ||g«      }|rdnd}| j                  |t        j                  ¬«      }|||||fS )Nr   r3   rœ   rï   r«  r‘   )rÃ   r™   r˜   rV   rŒ   rƒ   rÞ  )rÚ   r9  Úweight_stride0Ú
weight_bufÚhxr´  r]  Úhidden_sizeÚ	proj_sizeÚ
num_layersÚbatch_firstÚdropoutÚtrainÚbidirectionalÚbatch_sizesÚdropout_stateÚis_input_packedÚ
seq_lengthÚ
mini_batchÚbatch_sizes_sumÚnum_directionsÚout_sizer¨   rÿ   Ú
cell_shaper·  r¶  Úreserve_shapeÚreserves                                r8   Ú
_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                 óº   — d}|D ])  }|j                  «       dkD  sŒ||j                  «       z  }Œ+ | j                  |f«      }t        | |||||||d|||	|
|||«      S rs  )r—   r˜   rÏ  )rÚ   r9  rº  r¼  r´  r]  r½  r¿  rÀ  rÁ  rÂ  rÃ  rÄ  rÅ  Útotal_weight_elemsrá  r»  s                    r8   Ú
miopen_rnnrÒ  þ  sˆ   € ð& ÐØò ,ˆØ�7‰7‹9�q‹=Ø !§'¡'£)Ñ+Ñð,ð —‘Ð"4Ð!6Ó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 )Nr3   r   r«  r¶   )r™   r˜   rV   rŒ   rƒ   rÞ  )rÚ   Úw0Úw1Úw2Úw3Úhx_Úcx_rÂ   rÄ  r]  r½  r¿  Ú
has_biasesrÃ  rÀ  rÂ  rÇ  rÈ  Úoutput_chanelsr¨   rÿ   r¶  r·  rµ  s                           r8   Úmkldnn_rnn_layerrÜ  +  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 r4   ©r†   rà  s   €€r8   re   z'zero_numel_check_dims.<locals>.<lambda>W  s   ø€ �w�iÐSÐTWÐSXÐY€ r:   c                  ó   •— ‰› d‰ › d�S )Nz: Expected reduction dim z to have non-zero size.r4   rß  s   €€r8   re   z'zero_numel_check_dims.<locals>.<lambda>\  s   ø€ �w�iÐ8¸¸Ð=TÐU€ r:   )r¥   rV   r–   r£   )rš   r†   rà  s    ``r8   Úzero_numel_check_dimsrá  S  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.r4   r&  s   €r8   re   z%check_argmax_argmin.<locals>.<lambda>h  s   ø€ �t�fÐ\Ð]€ r:   )r¸   r†   rá  rV   rg   r—   )rÇ  rš   r†   s   `  r8   Úcheck_argmax_argminrä  a  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‘   )rä  rO   r‹  r™   rŒ  r˜   rV   r·   )rš   r†   rŽ  r’  r™   s        r8   Úargmax_argmin_metarç  l  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 )Nr4   r
  )rV   Újaggedr¬  rŒ   )r§  r^   r‚   rƒ   r„   s        r8   Úscalar_tensorrê  t  s5   € ð
 ”—‘ÒÜ—‘ˆÜ�;‰;Ø
�% ¨vÀ*ôð r:   c                 óž  — t        || j                  «       d¬«      }| j                  «       dk(  rdn| j                  |«      }t        j                  |dk\  «       t        j                  ||k  d„ «       t        | j                  «      }t        |«      dkD  r|||<   | j                  |«      | j                  |t        j                  ¬«      fS )NT©rõ  r   r3   c                   ó   — y)Nzk not in range for dimensionr4   r4   r:   r8   re   ztopk_meta.<locals>.<lambda>†  rm   r:   r‘   )
r¸   r†   r£   rV   rg   rÄ   r™   rÃ   r˜   r·   )rš   rH  r†   ÚlargestrY  Ú	sliceSizeÚtopKSizes          r8   Ú	topk_metarñ  €  sž   € ô ˜˜dŸh™h›j°dÔ
;€CØ—X‘X“Z 1’_‘¨$¯)©)°C«.€IÜ	‡L�L��a‘ÔÜ	‡L�L��i‘Ñ!GÔHä�D—J‘JÓ€HÜ
ˆ8ƒ}�qÒØˆ�‰Ø�>‰>˜(Ó# T§^¡^°HÄEÇKÁK ^Ó%PÐPÐPr:   c                 óÎ   — |€|€t        d«      ‚|j                  «       }| j                  «       }	t        j                  ||	j                  |	j
                  |	j                  ¬«      S )Nz;segment_reduce(): Either lengths or offsets must be defined)r^   rƒ   r‚   )rŠ   r‡  rV   r¯   r^   rƒ   r‚   )
rL  rÿ   r{  rk  rv  rw  rx  rz  Údata_contigÚgrad_contigs
             r8   Úmeta__segment_reduce_backwardrõ  Ž  sh   € ð
 €˜7˜?ÜØIó
ð 	
ð —/‘/Ó#€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   )r;  Trì  r3   c                  ó   •— d‰ › �S )Nz9kthvalue(): selected number k out of range for dimension r4   r�   s   €r8   re   zkthvalue_meta.<locals>.<lambda>ª  s   ø€ ÐKÈCÈ5ÐQ€ r:   r‘   )r$  r;  r¸   r†   r£   rV   rg   rÄ   r™   r/  r˜   r·   )rš   rH  r†   rŽ  r;  ÚdimSizer™   s     `    r8   Ú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Ú r4   r4   r:   r8   re   z(checkLSTMBackwardSizes.<locals>.<lambda>¹  rm   r:   c                   ó   — yrü  r4   r4   r:   r8   re   z(checkLSTMBackwardSizes.<locals>.<lambda>¼  rm   r:   c                   ó   — yrü  r4   r4   r:   r8   re   z(checkLSTMBackwardSizes.<locals>.<lambda>¾  rm   r:   c                   ó   — yrü  r4   r4   r:   r8   re   z(checkLSTMBackwardSizes.<locals>.<lambda>¿  rm   r:   c                   ó   — yrü  r4   r4   r:   r8   re   z(checkLSTMBackwardSizes.<locals>.<lambda>À  rm   r:   c                   ó   — yrü  r4   r4   r:   r8   re   z(checkLSTMBackwardSizes.<locals>.<lambda>Á  rm   r:   r   r3   r	  c                   ó   — yrü  r4   r4   r:   r8   re   z(checkLSTMBackwardSizes.<locals>.<lambda>Â  rm   r:   )rV   rg   r†   r£   r—   )Úgrad_hyÚgrad_cyr´  r·  rµ  Údefined_gradÚexp_sizes          r8   ÚcheckLSTMBackwardSizesr	  ·  sí   € Ø%Ð1‘7°w€LÜ	‡L�L�×!Ñ!Ó# qÑ(©*Ô5Ø× Ñ Ó"€HØÐÜ�‰�W—\‘\“^ xÑ/±Ô<ØÐÜ�‰�W—\‘\“^ xÑ/±Ô<Ü	‡L�L�—‘“˜hÑ&©
Ô3Ü	‡L�L�—‘“˜hÑ&©
Ô3Ü	‡L�L�—‘“ AÑ%¡zÔ2Ü	‡L�L�—‘Ó" h¨q¡k°H¸Q±KÑ&?À!Ñ&CÑCÁZÕPr:   c                 óÎ   — | €|€yt        | ||||«       t        j                  |t        ¬«      }t        j                  |t        ¬«      }|r|j	                  dd¬«      nd }|||fS )N©NNNr«   r   F)rŽ  )r	  rV   r¯   Úlegacy_contiguous_memory_formatrê  )	r	  r	  r´  r·  rµ  Úhas_biasÚ
grad_gatesÚgrad_cxrš  s	            r8   Ú#_thnn_fused_lstm_cell_backward_implr	  Æ  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   r3   rï   rœ   rú  )rè  rç  ré  rì  r  Úgrad_weightrš  s          r8   Úlinear_backwardr	  Ô  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t        d‰ j                  › d|› �«      ‚d„ Šˆˆ fd„}‰ j                  d   ||z  z  }‰ j                  d   |z  }‰ j                  d	   |z  }g ‰ j                  d d ¢|‘|‘|‘­}‰ j                  |«      }|j	                   |«       ¬
«      }|S )Nrï   r5  r   z'Invalid input shape for pixel_shuffle: z with upscale_factor = c                 ób   — t         j                  j                  | «      t         j                  k(  S rD   r°  r³  s    r8   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 )Nró   r«   )rø   rV   r°   r²  rd  Úpreserve_format)rµ  rš   s   €€r8   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'  )	rš   Úupscale_factorr½  rÑ  ÚHrÚWrr¨   rÎ   rµ  s	   `       @r8   Úmeta_pixel_shuffler	  á  så   ù€ ô 	ˆD�J‰J‹˜!Ò §
¡
¨2¡°.À>Ñ2QÑ RÐVWÒ WäØ5°d·j±j°\ÐAXÐYgÐXhÐió
ð 	
ò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 rD   rÔ  )rÚ   Úweight0Úweight1Úweight2Úweight3rØ  Úcx_tmprÿ   Úhy_Úcy_Úgrad_output_r_optÚgrad_hy_r_optÚgrad_cy_r_optrÂ   r]  r½  r¿  rÚ  rÂ  rÃ  rÄ  rÀ  rµ  Údiff_xÚdiff_hxÚdiff_cxÚdiff_w1Údiff_w2Údiff_bs                                r8   Ú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©r^   r¬   )rV   r¯   rC  r·   r°   ©rš   Ú
boundariesr-	  r×   s       r8   Úmeta_bucketizer2	  %  s2   € ô ×ÑØÙ&Œe�kŠk¬E¯K©KÜ×-Ñ-ôð r:   r1	  r-	  r×   c                ór   — |j                  d|rt        j                  ¬«      S t        j                  ¬«      S )Nr4   r‘   )r˜   rV   rC  r·   r0	  s       r8   Úmeta_bucketize_scalarr4	  /  s>   € ð ×ÑØ
Ù&Œe�k‰kð  ó ð ä,1¯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\  ˆfd„«       t        j                  ‰‰ j                  ‰ j                  ¬«      S )Nzhistc()r¹  c                  ó$   •— d‰ j                   › d�S )Nz%"histogram_cpu" not implemented for 'rï  r‘   rò  s   €r8   re   zmeta_histc.<locals>.<lambda>D  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   €€r8   re   zmeta_histc.<locals>.<lambda>J  s   ø€ �7�)Ð>¼tÀD»z¸lÐK€ r:   r   c                  ó   •— ‰› d‰ › �S )Nz: bins must be > 0, but got r4   r8	  s   €€r8   re   zmeta_histc.<locals>.<lambda>L  s   ø€  g YÐ.JÈ4È&Ð#Q€ r:   c                  ó$   •— ‰ › dt        ‰«      › �S )Nz%: argument 'min' must be Number, not r  )rà  rù   s   €€r8   re   zmeta_histc.<locals>.<lambda>O  ó   ø€ �7�)Ð@ÄÀcÃÀÐL€ r:   c                  ó$   •— ‰ › dt        ‰«      › �S )Nz%: argument 'max' must be Number, not r  )rà  r±  s   €€r8   re   zmeta_histc.<locals>.<lambda>S  r<	  r:   c                  ó   •— ‰ › d�S )Nz: max must be larger than minr4   )rà  s   €r8   re   zmeta_histc.<locals>.<lambda>U  s   ø€ ¨ yÐ0MÐ%N€ r:   r¶   )rø   rV   rg   r÷   rO   rà  rp   r   r   rŒ   rƒ   r^   )rÚ   r9	  rù   r±  rà  s   ````@r8   Ú
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�˜‘ÓNÔOÜ�;‰;�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rt  r4   )rr   r£   s     r8   rt   z,meta_upsample_bimode2d_aa.<locals>.<genexpr>g  s   è ø€ Ò!H¨t $¨¥(Ñ!Hùrv  r3   c                  ó*   •— d‰ j                  «       › �S r†  r¢   rò  s   €r8   re   z+meta_upsample_bimode2d_aa.<locals>.<lambda>h  r}  r:   r«   )
rz  r£   rV   rg   r—   r’  r˜   r'  rO   r   )rÚ   r{  rÌ  rˆ  r‰  r�  s   `     r8   Úmeta_upsample_bimode2d_aarC	  Y  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~  r	  c                  ó"   •— d‰ j                   › �S rŽ  r  r¡  s   €r8   re   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   €€€r8   re   z4meta_upsample_bimode2d_aa_backward.<locals>.<lambda>‚  s@   ø€ ð DØDEÀ3ÀdÐK[Ð\]ÑK^ÐJ_ð `Ø˜˜D ×!1Ñ!1°!Ó!4Ð 5ð9€ r:   r«   )
rz  rV   rg   r¥   rÅ   r™   r˜   r'  rO   r   )rþ  r{  rQ  rÌ  rˆ  r‰  r�  rÞ   s   `     @@r8   Ú"meta_upsample_bimode2d_aa_backwardrG	  o  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 )Nr3   c                   ó   — y)Nz%found_inf must be a 1-element tensor.r4   r4   r:   r8   re   z<_amp_foreach_non_finite_check_and_unscale_.<locals>.<lambda>�  rm   r:   c                   ó   — y)Nz%inv_scale must be a 1-element tensor.r4   r4   r:   r8   re   z<_amp_foreach_non_finite_check_and_unscale_.<locals>.<lambda>’  rm   r:   c                   ó   — y)Nz!found_inf must be a float tensor.r4   r4   r:   r8   re   z<_amp_foreach_non_finite_check_and_unscale_.<locals>.<lambda>–  rm   r:   c                   ó   — y)Nz!inv_scale must be a float tensor.r4   r4   r:   r8   re   z<_amp_foreach_non_finite_check_and_unscale_.<locals>.<lambda>š  rm   r:   )rV   rg   r—   r^   r÷   )rš   rþ  Ú	inv_scales      r8   Ú*_amp_foreach_non_finite_check_and_unscale_rN	  Œ  s|   € ä	‡L�LØ�‰Ó˜QÑÑ Oôô 
‡L�LØ�‰Ó˜QÑÑ Oôô 
‡L�LØ�‰×)Ñ)Ù3ôô 
‡L�LØ�‰×)Ñ)Ù3õr:   c                 ó,   — t        j                  | «      S rD   r  )rš   ÚnanÚposinfÚneginfs       r8   Ú
nan_to_numrS	  Ÿ  rv  r:   c                 óî  — | j                   t        j                  t        j                  t        j                  t        j
                  hv rt        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)r‚   rV   r­  Ú
sparse_cscr®  Ú
sparse_bscrŠ   r¥   r¸   rÄ   r£   rÇ   rÌ   )rš   Údim0rf  Úndimsr£   rÇ   s         r8   r¡  r¡  ¥  só   € à‡{�{Ü×ÑÜ×ÑÜ×ÑÜ×Ñð	ñ ô ØLÈTÏ[É[ÈMÐY`Ðaó
ð 	
ð �I‰I€Eä˜$ Ó&€DÜ˜$ Ó&€Dàˆt‚|Øˆä�—	‘	“Ó€DÜ�$—+‘+“-Ó €Fà!'¨¡¨v°d©|Ð€Fˆ4�L�&˜‘,Ø! $™Z¨¨d©Ð€Dˆ�J��T‘
à×Ñ�T˜6Ô"Ø€Kr:   c                 ó  — | j                   }| j                  r<| j                  «       }| j                  «       }|dk  r|dk(  s4t	        d|› d|› d�«      ‚| j                  «       dkD  rt	        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 rM  r3   )r¥   rÞ  rà  rá  rŠ   r†   r¡  )rš   rX	  rà  rá  s       r8   Út_rZ	  Ã  s¤   € à�I‰I€Eà‡~‚~Ø—_‘_Ó&ˆ
Ø—N‘NÓ$ˆ	Ø˜a’ I°¢NÜ ðØ%˜, l°9°+Ð=NðPóð ð
 �8‰8‹:˜Š>Ü ØHÈÈÈqÐQóð ô �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 )
Nr3   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   €€r8   re   z#meta_searchsorted.<locals>.<lambda>è  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   €€r8   re   z#meta_searchsorted.<locals>.<lambda>ó  sO   ø€ ð#Ü#'¨×(=Ñ(=Ó#>Ð"?Ð?VØ%+Ð%7Œt�F—L‘LÓ!Ð@ðBð ð >@Ð@ðBð r:   rÖ   c                   ó   — y)Nzetorch.searchsorted(): side and right can't be set to opposites, got side of left while right was Truer4   r4   r:   r8   re   z#meta_searchsorted.<locals>.<lambda>ý  rm   r:   r/	  r4   rº  )rV   rg   rÃ   r™   rC  r·   rp   r   r¯   r°   rŒ   rƒ   )r`	  rš   r-	  r×   r[	  r\	  r^   s   ``   ` r8   Úmeta_searchsortedrc	  Ø  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(): r4   r‘   s   €r8   re   z3_check_for_unsupported_isin_dtype.<locals>.<lambda>  s   ø€ ÐAÀ%ÀÐI€ r:   )rV   rg   rô  Ú
complex128Ú	complex64r‘   s   `r8   Ú!_check_for_unsupported_isin_dtyperh	  
  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         r8   Úmeta_embedding_dense_backwardrk	    s*   € ð ×'Ñ'¨°k×6FÑ6FÀrÓ6JÐ(KÓL€KØÐr:   c                 ój   — |	rt         j                  | ||||||||
|«
      S t        | ||||||||
|«
      S rD   )r-   Ú_embedding_bag_sparse_backwardÚ!meta_embedding_bag_dense_backward)rL  r´   rw  rÐ  rÑ  Úmaximum_indicesrj	  rÌ  r]  rÍ  r¼  rÂ  s               r8   Úmeta_embedding_bag_backwardrp	    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   €r8   re   z3meta_embedding_bag_dense_backward.<locals>.<lambda>W  s   ø€ Ð6°t·z±z°lÐC€ r:   r3   )
rV   rg   r^   ra  rb  r`  Úfloat64rÊ  r˜   r£   )rL  r´   rÐ  rÑ  ro	  rj	  rÌ  r]  r¼  rÂ  Úindex_grad_weights   `          r8   rn	  rn	  H  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 )Nr3   c                   ó   — y)NzHembedding_bag_backward: per_sample_weights only supported for mode='sum'r4   r4   r:   r8   re   z@meta_embedding_bag_per_sample_weights_backward.<locals>.<lambda>l  rm   r:   rï   r   )r£   rV   rg   rÉ  r†   r˜   )
rL  r9  r´   rw  rÐ  r]  rÂ  Úembedding_featuresrf  rÿ   s
             r8   Ú.meta_embedding_bag_per_sample_weights_backwardrx	  _  s«   € ð Ÿ™ 1›ÐÜ	‡L�LØ”ÑÙZôô 
‡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.r4   r4   r:   r8   re   zmeta_isin.<locals>.<lambda>|  rm   r:   r«  r‘   )
rV   rg   rp   r   r0  rƒ   rh	  r^   r¯   rô  )ÚelementsÚtest_elementsry	  rz	  s       r8   Ú	meta_isinr	  w  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.r4   r4   r:   r8   re   z meta_polygamma.<locals>.<lambda>Œ  rm   r:   r—  r‘   )rV   rg   r   r   r˜  r¯   )r  rš   rR   rS   s       r8   Úmeta_polygammar‚	  ‰  sF   € ô 
‡L�L��a‘ÑOÔPÜ(ØÜ;×HÑHô�O€A€|ô ×Ñ˜D¨Ô5Ð5r:   c                 ó   — t        d«      ‚)Nz.Tensor.item() cannot be called on meta tensors)r&  r±   s    r8   Úmeta_local_scalar_denser„	  ”  s   € ä
ÐGÓ
HÐHr:   c                 ó,   — t        j                  | «      S rD   r  r±   s    r8   Úsilur†	  ™  rv  r:   c                 ól   — t        | t        j                  ¬«      \  }}t        j                  | |¬«      S r–  )r   r   r˜  rV   r¯   )rš   rR   rS   s      r8   Úsigmoidrˆ	  Ÿ  s3   € ô )ØÜ;×HÑHô�O€A€|ô ×Ñ˜D¨Ô5Ð5r:   c                 óR  — | 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Ç|r[t        j                  |j                  d«      | j                  d«      k(  d„ «       | j                  d«      |j                  d«      g}njt        j                  | j                  d«      |j                  d«      k(  d„ «       | j                  d«      | j                  d«      |j                  d«      g}|xs | j                  }t        j
                  j                  rZd|j                  z  }|d   |z   dz
  |z  |z  }||k(  r|d   |z  |dg}	n|dg}	t        j                  ||	|| j                  ¬	«      }
|
S t        j                  ||| j                  ¬	«      }
|
S )
Nrï   r   r3   c                   ó   — y©Nz matrix batch sizes have to matchr4   r4   r:   r8   re   z2_create_grouped_mm_output_tensor.<locals>.<lambda>²  rm   r:   rœ   c                   ó   — yr‹	  r4   r4   r:   r8   re   z2_create_grouped_mm_output_tensor.<locals>.<lambda>¸  rm   r:   c                   ó   — y)Nzbatched dimension has to matchr4   r4   r:   r8   re   z2_create_grouped_mm_output_tensor.<locals>.<lambda>¾  rm   r:   r(  rº  )r†   r£   rV   rg   r^   r¨  ró   Úitemsizer(  rƒ   rŒ   )rH  rJ  Úoffsr=  Ú
mat1_is_2dÚ
mat2_is_2drË  Ú	alignmentÚsize_paddedr›  rÎ   s              r8   Ú _create_grouped_mm_output_tensorr”	  ©  sÒ  € Ø—‘“˜q‘€JØ—‘“˜q‘€JáÙØŸ	™	 !› d§i¡i°£l°D·I±I¸a³LÐAŠHä�L‰LØ—	‘	˜!“ §	¡	¨!£Ñ,Ñ.Xôð Ÿ	™	 !› d§i¡i°£mÐ4‰HáÜ�L‰LØ—	‘	˜!“ §	¡	¨!£Ñ,Ñ.Xôð Ÿ	™	 !› d§i¡i°£lÐ3‰Hô �L‰LØ—	‘	˜!“ §	¡	¨!£Ñ,Ñ.Vôð Ÿ	™	 !› d§i¡i°£l°D·I±I¸b³MÐBˆHàÒ'˜TŸZ™Z€Iä‡}�}×ÒØ˜)×,Ñ,Ñ,ˆ	Ø ‘| iÑ/°!Ñ3¸	ÑAÀIÑMˆØ˜Ò#Ø" 1™+¨Ñ3°[À!ÐD‰Jà% qÐ)ˆJÜ×!Ñ!Ø�j¨	¸$¿+¹+ô
ˆð
 €Jô �k‰k˜(¨)¸D¿K¹KÔHˆØ€Jr:   Úmat_aÚmat_br�	  c	                 óš  ‡ ‡‡‡‡‡— t        j                  ‰d u ‰d u k(  d„ «       ‰d uxr ‰d u}	|	r¼t         j                  }
t         j                  j                  rYt         j
                  j                  «       r;dt         j
                  j                  d«      j                  v rt         j                  }
t        j                  ‰ j                  |
k(  xr ‰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(  }|r|s8t        j                  ‰ j                  d	«      ‰j                  d
«      k(  d„ «       |	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(  xs< ‰j                  t         j                  k(  xr ‰j                  t         j                  k(  ˆˆfd„«       ‰j                  t         j                  k(  xr ‰j                  t         j                  k(  Šdˆf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 noner4   r4   r:   r8   re   z)_meta_grouped_mm_common.<locals>.<lambda>à  rm   r:   Úgfx94r   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   €€r8   re   z)_meta_grouped_mm_common.<locals>.<lambda>ò  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   €€r8   re   z)_meta_grouped_mm_common.<locals>.<lambda>÷  s%   ø€ ÐGÈÏÉÀ}ÐTeÐfk×fqÑfqÐerÐrsÐt€ r:   )rï   r0   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   €€r8   re   z)_meta_grouped_mm_common.<locals>.<lambda>ü  s'   ø€ ÐEÀeÇiÁiÃkÀ]ÐRcÐdi×dmÑdmÓdoÐcpÐq€ r:   rï   rœ   rÂ  c                   ó   — y)Nz3contraction dimension of mat_a and mat_b must matchr4   r4   r:   r8   re   z)_meta_grouped_mm_common.<locals>.<lambda>   rm   r:   c                 óF   — | j                  «       }|d   dkD  xr |d   dk(  S ©NrÂ  r3   rœ   rÁ  ©ÚmatÚ
mat_strides     r8   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     r8   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   €r8   re   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   €r8   re   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 )Nr3   r(  r   c                  ó"   •— d‰› d‰ › d‰‰    › d�S )NrÏ  ú stride along ú% dim to be multiple of 16 bytes, got r–  r4   ©Úend_dimÚmat_namer¤	  s   €€€r8   re   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ª	  r3   r«	  r–  r4   r¬	  s   €€€r8   re   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.r9  r¢	  s   €€r8   re   zF_meta_grouped_mm_common.<locals>.check_valid_strides.<locals>.<lambda>0   s!   ø€ Ð5°j°\ÐARÐSV×S\ÑS\ÐR]Ð]hÐi€ r:   )r†   Úelement_sizerÇ   r±  r™   rV   rg   )r®	  r£	  r’	  r­	  r¤	  s   `` @@r8   Ú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                  ó>   •— d‰ j                   › d‰j                   › d�S )NzhFor FP8 scales must both be float32, or for MXFP8 both scales must be float8_e8m0fnu. Got scale_a.dtype=z and scale_b.dtype=r–  r‘   rø  s   €€r8   re   z)_meta_grouped_mm_common.<locals>.<lambda>=   sT   ø€ Ð~ð  @G÷  @Mñ  @Mð  Nð  Nað  bi÷  boñ  boð  apð  pqð  r€ r:   r3   c                 ó¼  •‡ ‡‡‡‡‡‡	‡
— ‰j                  «       dk(  rÍt        j                  ‰j                  «       ˆ fd„«       ‰r;t        j                  ‰j                  «       ‰j                  «       k(  ˆˆˆ fd„«       y t        j                  ‰j                  «       dk(  ˆˆ fd„«       t        j                  ‰j                  d   ‰j                  ‰   ‰z  k(  ˆˆˆˆ ˆfd„«       y t        j                  ‰j                  d«      dk(  ˆ fd	„«       t        j                  ‰j                  d   ‰j                  d   k(  ˆˆˆ fd
„«       ‰r§t        j                  ‰j                  ‰j                  dz
  k(  ˆˆˆ fd„«       ‰j                  \  Š}}d}t        ||z  d«      Š	t        |d«      Š
t        j                  ‰j                  d   ‰k(  xr ‰j                  d   ‰	‰
z  k(  ˆˆ	ˆ
ˆˆfd„«       y t        j                  ‰j                  «       dk(  ˆˆ fd„«       t        j                  ‰j                  d   ‰j                  d‰z      k(  ˆˆˆ ˆfd„«       y )Nrï   c                  ó   •— d‰ › d�S )NrÏ  z to be contiguous.r4   ©Ú
scale_names   €r8   re   z>_meta_grouped_mm_common.<locals>.check_scale.<locals>.<lambda>H   s   ø€ ˜i¨
 |Ð3EÐF€ r:   c                  óB   •— d‰› d‰ j                   › d‰j                   › �S )NzKFor MXFP8, scale must have same number of dimensions as target tensor, but ú has mat.ndim=ú and scale.ndim=r  ©r£	  r}  r·	  s   €€€r8   re   z>_meta_grouped_mm_common.<locals>.check_scale.<locals>.<lambda>Q   sZ   ø€ Ð"mÐnxÐmyð  zHð  IL÷  IQñ  IQð  HRð  Rbð  ch÷  cmñ  cmð  bnð  !o€ r:   r3   c                  ó2   •— d‰› d‰ j                  «       › d�S )NrÏ  z to be 1D tensor, but got ú	D tensor.r�   ©r}  r·	  s   €€r8   re   z>_meta_grouped_mm_common.<locals>.check_scale.<locals>.<lambda>V   ó#   ø€  )¨J¨<Ð7QÐRW×R[ÑR[ÓR]ÐQ^Ð^gÐ h€ r:   r   c                  óV   •— d‰› d‰ j                   ‰   ‰z  › d‰j                   d   › d�S )NrÏ  z	 to have ró  r   z
 elements.r9  )r£	  r}  Úscale_multiplierr·	  Ú
scaled_dims   €€€€€r8   re   z>_meta_grouped_mm_common.<locals>.check_scale.<locals>.<lambda>Z   sW   ø€  )¨J¨<°yÀÇÁÈ:ÑAVÐYiÑAiÐ@jÐjyÐz÷  {Fñ  {Fð  GHñ  {Ið  zJð  JTð  !U€ r:   rœ   c                  ó   •— d‰ › d�S )NrÏ  z( to be contiguous in the last dimension.r4   r¶	  s   €r8   re   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–  r9  r»	  s   €€€r8   re   z>_meta_grouped_mm_common.<locals>.check_scale.<locals>.<lambda>c   s6   ø€ ˜i¨
 |Ð3JÈ3Ï9É9ÐUVÉ<È.ÐX^Ð_d×_jÑ_jÐklÑ_mÐ^nÐnoÐp€ r:   c                  óB   •— d‰› d‰ j                   › d‰j                   › �S )Nz0For MXFP8, 3d tensor should have 2d scales, but r¹	  rº	  r  r»	  s   €€€r8   re   z>_meta_grouped_mm_common.<locals>.check_scale.<locals>.<lambda>j   sF   ø€ Ð"RÐS]ÐR^Ð^lÐmp×muÑmuÐlvð  wGð  HM÷  HRñ  HRð  GSð  !T€ r:   r)  r	  rA  c                  óN   •— d‰j                   › d‰ › d‰‰z  › d‰j                   › �S )NzFor MXFP8, expected mat.shape=z to have scale shape of (ú,z), but got r9  )ÚGÚ	blocked_KÚ	blocked_Nr£	  r}  s   €€€€€r8   re   z>_meta_grouped_mm_common.<locals>.check_scale.<locals>.<lambda>t   sQ   ø€ Ð"@ÀÇÁÀÐKdÐefÐdgÐghÐirÐu~Ñi~Ðhð  @Kð  LQ÷  LWñ  LWð  KXð  !Y€ r:   c                  ó2   •— d‰› d‰ j                  «       › d�S )NrÏ  z to be 2D tensor, but got r½	  r�   r¾	  s   €€r8   re   z>_meta_grouped_mm_common.<locals>.check_scale.<locals>.<lambda>y   r¿	  r:   c                  óV   •— d‰› d‰ j                   d‰z      › d‰j                   d   › d�S )NrÏ  z non-batch dimension to be r3   rÅ	  r–  r9  )r£	  r}  r·	  rÂ	  s   €€€€r8   re   z>_meta_grouped_mm_common.<locals>.check_scale.<locals>.<lambda>}   sT   ø€  )¨J¨<Ð7RÐSV×S\ÑS\Ð]^ÐakÑ]kÑSlÐRmÐmsÐty×tÑtð  ABñ  uCð  tDð  DEð  !F€ r:   )r†   rV   rg   rd  r™   rÇ   r¥   r?   )r·	  r}  r£	  rÂ	  rÁ	  rs  r�  r€  rÉ	  rÊ	  rË	  Úis_mxfp8s   `````   @@@€r8   Úcheck_scalez,_meta_grouped_mm_common.<locals>.check_scaleD   sÚ  ÿø€ Ø�w‰w‹y˜AŠ~Ü—‘Ø×'Ñ'Ó)ÛFôñ Ü—L‘LØŸ	™	› s§w¡w£yÑ0õ oõô
 —L‘LØŸ	™	› qÑ(Ühôô —L‘LØŸ™ A™¨#¯)©)°JÑ*?ÐBRÑ*RÑR÷ Uõô
 —‘Ø—L‘L Ó$¨Ñ)Û\ôô —‘Ø—K‘K ‘N c§i¡i°¡lÑ2Ýpôñ Ü—L‘LØŸ
™
 c§h¡h°¡lÑ2õ Tôð "Ÿi™i‘G�A�q˜!Ø!#�JÜ (¨¨Z©¸Ó ;�IÜ (¨¨CÓ 0�IÜ—L‘LØŸ™ A™¨!Ñ+ÒW°·±¸A±À)ÈiÑBWÑ0W÷ Yõô
 —L‘LØŸ	™	› qÑ(Ühôô —L‘LØŸ™ A™¨#¯)©)°A¸
±NÑ*CÑCö Fõr:   rÄ  rÅ  c                   ó   — y)Nz:Scale result tensor provided, but it is not supported yet.r4   r4   r:   r8   re   z)_meta_grouped_mm_common.<locals>.<lambda>ˆ   rm   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   €€r8   re   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   €r8   re   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‘   rÓ	  s   €r8   re   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.r4   r4   r:   r8   re   z)_meta_grouped_mm_common.<locals>.<lambda>œ   rm   r:   c                   ó   — y)Nz2Bias tensor provided, but it is not supported yet.r4   r4   r:   r8   re   z)_meta_grouped_mm_common.<locals>.<lambda>¡   rm   r:   c                   ó   — y)Nz4If output dtype provided, it must be torch.bfloat16.r4   r4   r:   r8   re   z)_meta_grouped_mm_common.<locals>.<lambda>¦   rm   r:   r  )rV   rg   rc  r¨  r©  ró   r~  Úget_device_propertiesÚgcnArchNamerÌ  r^   rb  r†   r£   r`  r  r™   rC  r”	  )r•	  r–	  rÄ  rÅ  r�	  r;  rÆ  r=  rÇ  ÚscaledÚ	fp8_dtypeÚmat_a_is_2dÚmat_b_is_2drÙ  rÜ  r²	  rÏ	  rÁ	  rÎ	  s   `````             @r8   Ú_meta_grouped_mm_commonrÞ	  Ó  s�  ý€ ô 
‡L�LØ	�Dˆ˜g¨˜oÑ.Ù>ôð ˜DÐ Ò8 W°DÐ%8€Fñ Ü×'Ñ'ˆ	ä�M‰M×ÒÜ—
‘
×'Ñ'Ô)Øœ5Ÿ:™:×;Ñ;¸AÓ>×JÑJÑJä×-Ñ-ˆIÜ�‰Ø�K‰K˜9Ñ$ÒA¨¯©¸	Ñ)AÜxõ	
ô
 	�‰Ø�K‰Kœ5Ÿ>™>Ñ)ÒK¨e¯k©k¼U¿^¹^Ñ.KÜtô	
ô
 
‡L�LØ�	‰	‹�vÐÒ7 %§)¡)£+°Ð"7Üqôð
 —)‘)“+ Ñ"€KØ—)‘)“+ Ñ"€Ká™kÜ�‰Ø�J‰J�r‹N˜eŸj™j¨›nÑ,ÙIô	
ñ
 ò	>ò	>ô 	�‰Ù˜ÓÛzô	
ô 	�‰Ù˜ÓÛ}ô	
ò
ñ0 ˜ Ô'Ù˜ Ô'àÑ˜wÑ2Ü�‰Ø�]‰]œeŸm™mÑ+ÒN°·±ÄÇÁÑ0Nò à—‘¤×!5Ñ!5Ñ5ò :Ø—M‘M¤U×%9Ñ%9Ñ9ô rô	
ð �M‰MœU×1Ñ1Ñ1ò 6Ø—‘¤×!5Ñ!5Ñ5ð 	õ
:	ðz "Ð-±+Á+ˆ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�	  r;  rÆ  r=  )rÞ	  )r•	  r–	  r�	  r;  r=  s        r8   Úmeta_grouped_mmrà	  ¬   s)   € ô #ØØØØØØØØô	ð 	r:   c	                 óR   — |xs t         j                  }t        | ||||||||¬«	      S )N)rÄ  rÅ  r�	  r;  rÆ  r=  rÇ  )rV   rb  rÞ	  )	r•	  r–	  rÄ  rÅ  r�	  r;  rÆ  r=  rÇ  s	            r8   Úmeta_scaled_grouped_mmrâ	  Á   s:   € ð Ò+œUŸ^™^€Iä"ØØØØØØØ!ØØ%ô
ð 
r:   c                 ó6  — t        |«      t        d«      k(  r/| D ]*  }t        j                  |j                  «       dkD  d„ «       Œ, g }| D ]K  }|�|n|j                  }|j
                  rt        |«      }|j                  |j                  d|¬«      «       ŒM |S )NÚinfr   c                   ó   — y)Nz:_foreach_norm cannot compute infinity norm on empty tensorr4   r4   r:   r8   re   z#meta_foreach_norm.<locals>.<lambda>ã   rm   r:   r4   r‘   )	rZ   rV   rg   r—   r^   rê   r   rÆ   r˜   )ÚtensorsÚordr^   rÑ  Úresultsr=  s         r8   Úmeta_foreach_normré	  Ý   s–   € äˆSƒz”U˜5“\Ò!Øò 	ˆAÜ�L‰LØ—‘“	˜A‘ÙTõð	ð
 €GØò 9ˆØ"Ð.‘E°A·G±Gˆ	Ø×ÒÜ0°Ó;ˆIØ�‰�q—{‘{ 2¨Y�{Ó7Õ8ð	9ð
 €Nr:   r=   Úhalf_to_floatc                 óP  — |rE| j                   t        j                  t        j                  fvrt	        d| j                   › d�«      ‚t        j                  | t
        j                  j                  ¬«      \  }}|s|n|}t        j                  | |t        j                  ¬«      }|S )Nz%half_to_float is True but x.dtype is z, expected half or bfloat16r—  r/	  )r^   rV   rX   rb  rŠ   rO   r   r   rP   r¯   r°   )r=   r†   rê	  Úcomputation_dtyperS   r›  s         r8   Úsoftmaxrí	  î   s’   € ñ Ø�7‰7œ5Ÿ:™:¤u§~¡~Ð6Ñ6Ü Ø7¸¿¹°yÐ@[Ð\óð ô ',×&>Ñ&>Ø	œu×DÑD×LÑLô'Ñ#Ð�|ñ (5‘<Ð:K€LÜ
×
Ñ
˜1 LÄ×@WÑ@WÔ
X€CØ€Jr:   c           	      ó°  ‡‡‡‡	‡
‡— t        j                  t        ‰«      dz  dk(  ˆfd„«       | j                  Št        ‰«      Š
t        ‰«      dz  }‰
|z
  Š	t        j                  ‰
|k\  ˆ
ˆfd„«       t	        d„ ‰D «       «      r•| }t        ‰	‰
«      D ]t  Šd‰
‰z
  dz
  z  Š‰‰   dk  r*|j                  ‰‰‰    |j                  ‰   ‰‰   z   «      }‰‰dz      dk  sŒL|j                  ‰d|j                  ‰   ‰‰dz      z   «      }Œv |j                  «       S 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Ì  rX  s   €r8   re   z'_constant_pad_nd_meta.<locals>.<lambda>!  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_inprY  s   €€r8   re   z'_constant_pad_nd_meta.<locals>.<lambda>!  s"   ø€ ð 2Ü25°c³(°Ð;PØˆ'�ð€ r:   c              3   ó^   K  — | ]%  }t        |t        j                  «      xr |d k  –— Œ' y­wrt  )rp   rO   ÚIntWithoutSymInt)rr   rH  s     r8   rt   z(_constant_pad_nd_meta.<locals>.<genexpr>!  s)   è ø€ Ò
IÀŒ:�aœ×/Ñ/Ó0Ò;°Q¸!±VÓ;Ñ
Iùs   ‚+-r3   c            	      óF   •— d‰‰‰ z      › d‰‰   › d‰‰dz      › d‰‰ z   › d�	S )NzThe input size z, plus negative padding r¡   r3   zG resulted in a negative output size, which is invalid. Check dimension z of your input.r4   )rÞ   rû   Úl_diffrY  Úpad_idxs   €€€€€r8   re   z'_constant_pad_nd_meta.<locals>.<lambda>)!  sG   ø€ �o k°&¸1±*Ñ&=Ð%>Ð>VØ�7‰|ˆn˜E # g°¡kÑ"2Ð!3ð 41Ø17¸!±°¸OðM€ r:   )r^   rƒ   r…   r¬   )rV   rg   rÃ   r™   r’  rÅ   Únarrowrë   rÄ   rÆ   rŒ   r^   rƒ   r…   r   )rÚ   rY  r+  Úl_padÚc_inputÚ	new_shapeÚnew_dimrÞ   rû   rõ	  rñ	  rö	  s    `     @@@@@r8   Ú_constant_pad_nd_metarü	   !  sç  ý€ ô 
‡L�LÜˆC‹�1‰˜ÑÛNôð
 —+‘+€KÜ�Ó€EÜ�‹H˜‰M€EØ�U‰]€Fä	‡L�LØ�‰ô	ôô Ñ
IÀSÔ
IÔIØˆÜ�v˜uÓ%ò 	TˆAØ˜5 1™9 q™=Ñ)ˆGØ�7‰|˜aÒØ!Ÿ.™.Ø˜˜G™�} g§m¡m°AÑ&6¸¸W¹Ñ&Eó�ð �7˜Q‘;Ñ !Ó#Ø!Ÿ.™.¨¨A¨w¯}©}¸QÑ/?À#ÀgÐPQÁkÑBRÑ/RÓS‘ð	Tð �}‰}‹Ðä�[  &Ð)Ó*€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                 óD  — | j                  «       dk7  rt        d| 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-D, got z-Dr   r3   r‘   )r†   rŠ   r™   r¥   r^   r˜   )	r9  r´   rÂ  rÌ  rÍ  Úweight_shapeÚindices_shaper¨   r=  s	            r8   Ú	embeddingr 
  8!  s¨   € ð ‡z�zƒ|�qÒÜÐ9¸&¿*¹*»,¸ÀrÐJÓKÐKØ—<‘<€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k7  rt        dt        |«      › d�«      ‚t        |«      dk7  rt        dt        |«      › d�«      ‚|d   j                  d   dz
  }|d   }||g| j                  dd  ¢­}| j                  |«      S )Nr3   z&Only one jagged dim is supported, got z offsetsz max_lengthsr   )rÃ   rŠ   r™   r˜   )r³   rw  r
  r
  rÛ  rx  rg  s          r8   Ú$meta__jagged_to_padded_dense_forwardr
  Q!  sª   € ô ˆ7ƒ|�qÒÜØ4´S¸³\°NÀ(ÐKó
ð 	
ô ˆ;Ó˜1ÒÜØ4´S¸Ó5EÐ4FÀlÐSó
ð 	
ð 	�‰
×Ñ˜Ñ˜aÑ€AØ�A‰€AØ�qÐ,˜6Ÿ<™<¨¨Ð+Ñ,€LØ×Ñ˜LÓ)Ð)r:   c                 óB   — t        | «      t        «       d„ «       «       }|S )Nc                 ó8   — t        | t        j                  ¬«      S rü  ©rT   r   r˜  r  s    r8   Ú_fz)_create_unary_float_meta_func.<locals>._fi!  s   € ô  ØÔ=×JÑJô
ð 	
r:   ©rK   r$   ©Úfuncr
  s     r8   Ú_create_unary_float_meta_funcr
  h!  ó*   € Ü�4ÓÜƒ]ñ
ó ó ð
ð
 €Ir:   c                 óú  — | j                   s|j                   s|j                   rt        d«      ‚| j                  «       dk(  r,| j                  | j                  «      | j                  d«      fS | j                  d«      }| j                  d«      }|j                  d«      }| j                  |||«      }|
r1|r| j                  |||«      }||fS | j                  ||||«      }||fS | j                  d«      }||fS )NzP_native_multi_head_attention fake implementation does not support nested tensorsr   r3   )Ú	is_nestedr�  r—   r˜   r™   r£   )r;  rÁ   r+  Ú	embed_dimr†  Ú
qkv_weightÚqkv_biasÚproj_weightÚ	proj_biasr…  Úneed_weightsÚaverage_attn_weightsÚ	mask_typerÛ  ÚTÚ
output_dimrÿ   Úattn_weightss                     r8   Ú native_multi_head_attention_faker
  t!  sû   € ð  ‡‚˜#Ÿ-š-¨5¯?ª?Ü!Ø^ó
ð 	
ð ‡{�{ƒ}˜ÒØ—‘ §¡Ó,¨e¯o©o¸aÓ.@ÐAÐAà�
‰
�1‹€AØ�
‰
�1‹€Að ×!Ñ! !Ó$€JØ�_‰_˜Q  :Ó.€FáÙð !Ÿ?™?¨1¨a°Ó3ˆLð �LÐ!Ð!ð	 !Ÿ?™?¨1¨h¸¸1Ó=ˆLð �LÐ!Ð!ð —‘ qÓ)ˆà�LÐ!Ð!r:   c                 óB   — t        | «      t        «       d„ «       «       }|S )Nc                 ó:   — t        | |t        j                  ¬«      S rü  r
  r<   s     r8   r
  z*_create_binary_float_meta_func.<locals>._f¦!  s   € ô  ØˆqÔ!@×!MÑ!Mô
ð 	
r:   r	
  r

  s     r8   Ú_create_binary_float_meta_funcr
  ¥!  r
  r:   c                 ó˜   ‡ — t        ‰ «      ˆ fd„«       }‰ j                  › d�}||_         t        t        t        |«      «      |«      }|S )Nc                 ó`   •—  ‰| g|¢­i |¤Ž}t        | j                  |j                  «       | S rD   r*  )rš   rQ   rû  rÎ   rF   s       €r8   Ú_fnz#_register_inplace_meta.<locals>._fnÊ!  s.   ø€ á�Ð'˜Ò' Ñ'ˆÜ §
¡
¨C¯I©IÔ6Øˆr:   rR   )r   r{   rK   Úgetattrr-   )rF   r!
  Úinplace_names   `  r8   Ú_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‘   )r|   r}   s   €€r8   re   zlerp.<locals>.<lambda>Ü!  s   ø€ �/ %§+¡+ Ð.HÈÏÉÈÐT€ r:   r   c                  ó<   •— d‰ j                   › d‰j                   › �S )Nrˆ  z for `weight`, but got dtype r‘   )r}   r9  s   €€r8   re   zlerp.<locals>.<lambda>ã!  s!   ø€ ˜/¨%¯+©+¨Ð6SÐTZ×T`ÑT`ÐSaÐb€ r:   rL   )
rV   rg   r^   rp   r   r¥   rÆ   rT   r   rP   )r}   r|   r9  rQ   s   ``` r8   Úlerpr(
  ×!  s�   ú€ ô 
‡L�LØ�‰�s—y‘yÑ ÜTôð �3ˆ<€DÜ�&œ*Ô%Ø�;‰;˜!ÒÜ�L‰LØ—‘˜vŸ|™|Ñ+Übôð 	�‰�FÔÜØ	ðÜ=×EÑEñð r:   )r+  c                ó<   — t        | ||t        j                  ¬«      S rü  rý  ©rÚ   Útensor1Útensor2r+  s       r8   Ú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.r4   r4   r:   r8   re   zaddcdiv.<locals>.<lambda>û!  rm   r:   r³  )rV   rg   rO   r>  r^   rT   r   rP   r*
  s       r8   Úaddcdivr0
  ó!  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t        dt        |«      › �«      ‚ |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%                  ||«       �ŒHd	|j                  «       v rt(        j%                  ||«       �Œrd
|j                  «       v rt*        j%                  ||«       �Œœt,        j%                  ||«       �Œ´ y )N)r€   Úpost_autogradÚpre_autogradz$op_overload must be OpOverload, got ÚCompositeImplicitAutogradr€   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   Úitemsrp   rV   Ú_opsÚHigherOrderOperatorr   rŠ   rz   Úpy_implÚ_CÚDispatchKeyr/   Ú%_dispatch_has_kernel_for_dispatch_keyrÇ  r&  Úis_viewÚ2_meta_lib_dont_use_me_use_register_meta_for_mkldnnÚimplÚ/_meta_lib_dont_use_me_use_register_meta_for_mklÚ2_meta_lib_dont_use_me_use_register_meta_for_onednnÚ5_meta_lib_dont_use_me_use_register_meta_for_quantizedÚ'_meta_lib_dont_use_me_use_register_meta)Úactivate_meta_tableÚtypÚregistryÚopoÚop_overloadrF   s         r8   Úactivate_metarO
  "  sæ  € ØÐð 9ò 9ˆÜ-¨cÑ2ˆàò 	9ˆCØÐ-Ò-Ø+3°C©=Ð# CÒ(ñ	9ð9ð /×4Ñ4Ó6ó 9N‰ˆ�Rô
 �k¤5§:¡:×#AÑ#AÔBØÜ˜+¤zÔ2Ü Ø6´t¸KÓ7HÐ6IÐJóð ð 	7ˆ×Ñœ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ñs9Nr:   )Fr
	  rD   )NNNFr   r3   rœ   r¦  )TrÎ  )rß  )rè  T)FF)TT)r_  )FTN)TFF)TF)rï   )g      à?N)r@   Ústr)r4   r¾  r  F)r4   r¾  FTN)Fr   FNFrœ   )NF)rœ   F)g      À?gUUUUUUÕ?FN)NNNNN)r   NNr3   )NNF)ç        FFN)NrQ
  FFN)rQ
  FNN)NrQ
  FNN)rQ
  FN)FN)FNNNN)NNNF)NNNNF)Nrœ   FNN)NNNN)rœ   TT)NNr   N)éd   r   r   )rœ   )rï   N)rœ   FF)rQ
  )NTTN(®  r«  Úcollections.abcr   r   Úenumr   Ú	functoolsr   Útypingr   Útyping_extensionsr   rV   Útorch._prims_commonr±  rO   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   Útorch._prims_common.wrappersr    r!   r"   r#   r$   rÓ  r%   r&   Útorch.fx.experimentalr'   rd  Útorch.nn.functionalr(   r)   Útorch.utilsr*   rH   r+   r,   Úopsr-   ÚlibraryÚLibraryrI
  rÅ   rÉ  rË  rÊ  r9   r?   rK   rT   r`   ri   ÚlinspaceÚlogspacer¬  rŽ   Útaker)  rÎ   r›   r©   r²   ÚcummaxÚcumminr¹   r¼   rá   rÄ   rå   rô  rç   Ú_fft_c2crí   rð   rñ   Ú_fft_r2cr  ÚrandpermÚgenerator_outr	  r•   r  Úrandintr  r  Úlow_outr  Úrandr  Ú_fft_c2rr!  rœ  r-  r4  Ú
unsqueeze_r8  Ú_sparse_semi_structured_linearrP
  r^   rG  Ú_sparse_semi_structured_mmrT  Ú_sparse_semi_structured_addmmrX  Ú_cslt_sparse_mmrh  Úindex_reducero  Úindex_reduce_rq  Úindex_selectru  Úsegment_reducer‚  r±  Ú	unary_outr†  r†   r�  rù   r’  r”  r�  r™  rž  Ú_assert_asyncr¡  Úmsgr¥  Ú_printr¨  Ú_make_dep_tokenr¬  r³  Ú_functional_sym_constrain_ranger¸  r»  Ú(_functional_sym_constrain_range_for_sizer½  Ú_functional_assert_asyncr¿  r­   rÐ  r®   rÚ  rÞ  rä  rì  Ú_linalg_eighrí  rö  Ú_linalg_eigvalsÚlinalg_eigvalsrù  Ú
linalg_eigrý  r  r  r	  r  r  r  r*  Úlinalg_inv_exr-  Úlinalg_ldl_factor_exrf   r3  Úlinalg_ldl_solverB  Ú	linalg_lurI  Úlinalg_lu_factor_exrM  Úlinalg_lu_solverV  Ú	lu_unpackr\  re  Ú	linalg_qrrl  rp  rm  Ú_linalg_svdry  r?  r
  r‰  r�  Úlinalg_solve_triangularr¤  rª  r³  Ú_linalg_detr¶  rÉ  rÔ  ræ  Úreflection_pad1drë  Úreplication_pad1drõ  r   Úreflection_pad1d_backwardr  Úreplication_pad1d_backwardr  r  Úreflection_pad2dr  Úreplication_pad2dr  Ú_weight_norm_interface_backwardr%  Úreflection_pad2d_backwardr  Úreplication_pad2d_backwardr,  r:  Úreflection_pad3dr<  Úreplication_pad3dr?  Úreflection_pad3d_backwardÚreplication_pad3d_backwardrG  Ú_pdist_forwardrZ   rK  Ú_pdist_backwardrQ  Úbaddbmmrj  Ú	bernoullirm  Ú
bernoulli_rp  rH  rs  Úpoissonru  Ú_fused_moving_avg_obs_fq_helperr†  Úmmr�  rŒ  rø   r®  rµ  Úmiopen_batch_normrÃ  ÚconvolutionrÉ  r@
  Ú_has_mkldnnrD
  rÊ  Ú_convolution_pointwiserÑ  Ú_linear_pointwiserÕ  Úhas_mklrF
  rÖ  Ú_mkl_linearrÚ  rG
  rÛ  Úqconv2d_pointwiseÚqconv_pointwiser0  rè  ÚbinaryÚbinary_tensorró  Úqlinear_pointwiserø  rý  Úlinear_dynamic_fp16Úlinear_relu_dynamic_fp16rÿ  rH
  r   Ú
max_pool2dr  Úint4mm_packed_weight_cpur  r   Ú
avg_pool2drE  rJ  Úavg_pool2d_backwardrR  Ú
avg_pool3drl  Úavg_pool3d_backwardrw  Ú_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±  rq   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_cpur1  Ú_weight_int4pack_mmr;  Ú_weight_int4pack_mm_for_cpurA  rJ  rL  rx  Ú_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ú  r  Úsubrÿ  ÚroundÚdecimalsr  r  Ú
__rshift__r  Ú
__lshift__r  Úzeror  rã  r  Úfillr  Úrelu_r  Ú	_add_relur  Úrrelu_with_noiser   Úrrelu_with_noise_functionalr"  Úrrelu_with_noise_r$  Ú	index_putÚ_unsafe_index_putr(  Úmasked_fill_r,  Ú_masked_scaler/  Úmasked_scatter_r3  Úmasked_scatterr5  Úmasked_scatter_backwardr7  Ú
index_put_r9  rG  ÚbmmrJ  rL  rO  rT  r9  r:  ra  r{  rs  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ë  Úselect_scatterrï  Úslice_scatterró  r¸   rø  r   Úgatherr  r  r  r  r)  r,  Úscatter_addr1  Úscatter_add_r4  r+  r*  r+  rk  Úvalue_reducer8  Úscatter_r:  Ú#_scaled_dot_product_flash_attentionrO  rT  r]  Ú#_scaled_dot_product_cudnn_attentionrg  Ú0_scaled_dot_product_fused_attention_overrideablerj  Ú,_scaled_dot_product_flash_attention_backwardrt  Ú+_scaled_dot_product_flash_attention_for_cpurw  Ú4_scaled_dot_product_flash_attention_for_cpu_backwardr{  Ú*_scaled_dot_product_attention_math_for_mpsr’  Ú'_scaled_dot_product_efficient_attentionr–  Ú0_scaled_dot_product_efficient_attention_backwardrž  Ú,_scaled_dot_product_cudnn_attention_backwardr   Ú_flash_attention_forwardr¨  rª  Ú_flash_attention_backwardr¯  Ú_efficient_attention_forwardr»  Ú_efficient_attention_backwardÚSymIntrÃ  r  Ú
_scaled_mmr  rZ  Ú_scaled_mm_v2r]  Úscatter_reduceÚtwoÚtwo_outra  Úscatter_reduce_rc  Úmultinomialrh  rl  rz  r‚  Ú_upsample_nearest_exact1dr‹  Ú_upsample_nearest_exact2dr“  Ú"_upsample_nearest_exact2d_backwardr—  Ú_upsample_nearest_exact3drÈ   r™  Úvalues_stablerœ  r²  Ú_thnn_fused_lstm_cellr¸  rÏ  rÒ  rÜ  rá  rä  ræ  Úargminrç  rê  Útopkrñ  Ú_segment_reduce_backwardrõ  Úkthvaluerù  r°   r	  r	  r	  r	  Úpixel_shuffler	  r,	  Ú	bucketizeÚ
Tensor_outr2	  Ú
Scalar_outr4	  Úhistcr?	  Ú_upsample_bilinear2d_aaÚ_upsample_bicubic2d_aarC	  Ú _upsample_bilinear2d_aa_backwardrG	  rN	  rS	  r¡  rZ	  Úsearchsortedrc	  rh	  Úembedding_dense_backwardrk	  Ú_embedding_bag_backwardrp	  Ú_embedding_bag_dense_backwardrn	  Ú*_embedding_bag_per_sample_weights_backwardrx	  Úisinr	  Ú	polygammar‚	  Ú_local_scalar_denser„	  r†	  rˆ	  r”	  rÞ	  Ú_grouped_mmrà	  Ú_scaled_grouped_mmrâ	  Ú_foreach_normré	  Ú_softmaxrí	  Úconstant_pad_ndrü	  r 
  Ú_jagged_to_padded_dense_forwardr
  r
  Ú_native_multi_head_attentionr
  r
  Úspecial_airy_aiÚspecial_bessel_y0Úspecial_bessel_y1Úspecial_modified_bessel_i0Úspecial_modified_bessel_i1Úspecial_modified_bessel_k0Úspecial_modified_bessel_k1Ú!special_scaled_modified_bessel_k0Ú!special_scaled_modified_bessel_k1Úspecial_chebyshev_polynomial_tÚspecial_chebyshev_polynomial_uÚspecial_chebyshev_polynomial_vÚspecial_chebyshev_polynomial_wÚ&special_shifted_chebyshev_polynomial_tÚ&special_shifted_chebyshev_polynomial_uÚ&special_shifted_chebyshev_polynomial_vÚ&special_shifted_chebyshev_polynomial_wÚspecial_hermite_polynomial_hÚspecial_hermite_polynomial_heÚspecial_laguerre_polynomial_lÚspecial_legendre_polynomial_pr$
  r(
  r-
  r0
  Úlerp_Úaddcmul_Úaddcdiv_Útorch._refs.nn.functionalÚtorch._refs.specialrO
  r4   r:   r8   ú<module>rW     sËM  ðã ß .Ý Ý Ý Ý 'ã Ý #ß +Ñ +÷ó õ "ß U÷÷ ÷ õ ÷õ ÷ <Ý 7ß 8Ý )ñ ˆTƒ]€Ùˆtƒ_€à‡y�y‡~�~€à*/¯-©-×*?Ñ*?ÀÈÐPVÓ*WÐ 'Ù % a£Ñ €ˆ)�Xòò"ð

˜ 8¨B°¨FÑ#3Ð"4°h¸rÀ2¸vÑ6FÐ"FÑGó 
ðà3óò(*òñ �—‘˜tŸ}™}Ð-Ó.Ùƒð
 
Ø
ØØ�=‰=ØØò7ó ó /ð7ñt �—	‘	×!Ñ! 4§9¡9§=¡=Ð1Ó2Ùƒñ'ó ó 3ð'ñ �×!Ñ!×)Ñ)¨4×+<Ñ+<×+@Ñ+@ÐAÓBÙƒØ%'ó %ó ó Cð%ñ$ ˆt×%Ñ%Ó&ÙƒñIó ó 'ðIñ Ø	‡[�[×Ñ˜$Ÿ+™+Ÿ/™/¨4¯;©;×+>Ñ+>ÀÇÁÇÁÐPóñ ˆX�yÓ!ñó "óðñ �×!Ñ!×)Ñ)¨4×+<Ñ+<×+@Ñ+@ÐAÓBÙƒñIó ó CðIò3òl�Vð  $ s¡)ð ¸4ó ñ �—‘×%Ñ% t§}¡}×'8Ñ'8Ð9Ó:ÙƒñKó ó ;ðKð €ð $ s¡)ó ñ �—‘×%Ñ% t§}¡}×'8Ñ'8Ð9Ó:Ùƒñ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ð
 Ø"&Ø$(ò(Øð(àð(ð ð(ð �4‰-ð	(ð
 ˜4‘Zð(ð �{‰{˜TÑ!ò(ó 4ð(ñV ˆt×.Ñ.Ó/ð
 %)ò	Ø
ðàðð ðð �{‰{˜TÑ!ò	ó 0ðñ> ˆt×1Ñ1Ó2ð Ø	
Ø$(ò)Øð)à
ð)ð ð)ð ð	)ð �{‰{˜TÑ!ò)ó 3ð)ñX ˆt×#Ò#Ó$ð ØØ$(Ø"ØØØò;<Ø—,‘,ð;<à�\‰\ð;<ð �4‰-ð;<ð �D‰=ð	;<ð
 �{‰{˜TÑ!ð;<ð ð;<ð ð;<ð ð;<ð ò;<ó %ð;<ñ| ˆt× Ò ×(Ñ(Ó)ð ò	IØ
ð	Ià	ð	Ið ð	Ið �L‰Lð		Ið
 ð	Ið ð	Ið ò	Ió *ð	Iñ ˆt×!Ò!×)Ñ)Ó*ð ò	Ø
ð	à	ð	ð ð	ð �L‰Lð		ð
 ð	ð ð	ð ò	ó +ð	ñ ƒÙˆt× Ò ×(Ñ(Ó)ñ'ó *ó ð'ñ ˆt×"Ò"×*Ñ*Ó+ð
 "Ø!Ø!ØØØò WØ
ð Wàð Wð �d‰]ð	 Wð
 �d‰]ð Wð �d‰]ð 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ò ó ó =ðñ6 �×(Ò(×0Ñ0°$×2JÒ2J×2NÑ2NÐOÓPÙˆT�8˜VÓ$ð Øò	 Øð ð ð ð ð	 ð
 ˆ6�6˜6Ð!Ñ"ò ó %ó Qð ñF �×$Ò$×,Ñ,¨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×Ò×'Ñ'Ó(ð  ØØò	"Øð"àð"ð ð"ð �$‰Jò	"ó )ð"ðJ.Ø
ð.à
ð.ð ˆ4�‰9�d˜3‘iÐÑ ó.ð".Ø
ð.à
ð.ð �‰*ð.ð ˆ6�6ˆ>Ñó	.ð( fð °Vð Àó ñ ˆt×$Ò$Ó%ð
 ØØ ØØ Øò7Øð7àð7ð ð	7ð
 ð7ð �T‰Mð7ð 	�‰ð7ð �T‰Mð7ð �4‰-ð7ð ˆ6�6˜6 6Ð)Ñ*ò7ó &ð7ñt �×,Ò,×4Ñ4°d×6RÒ6R×6VÑ6VÐWÓXð ØØòØðàðð ð	ð
 ðð ðð 
�$‰ðð òó Yðñ4 ˆ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×%Ò%Ó&Ùƒñ>ó ó 'ð>ñ Ø×(Ò(×0Ñ0óñóðñ à×&Ò&×.Ñ.Ø×&Ò&×1Ò1Ø×'Ò'×/Ñ/Ø×'Ò'×2Ò2ð	óñ ˆ\Óñ&ó óð&ò:<Gñ~ ˆt×$Ò$Ó%Ùƒñ=ó ó &ð=ñ ˆt×%Ò%Ó&Ùƒñ>ó ó 'ð>ñ à×&Ò&×.Ñ.Ø×&Ò&×1Ò1Ø×'Ò'×/Ñ/Ø×'Ò'×2Ò2ð	óñ ˆ\Óñ((ó óð((ñV ˆ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ÓÙ˜Ôò3˜UŸ[™[¨4Ñ/ò 3ó ó ñ3ó,Bõ
ð* .2òBØ—,‘,ðBà�L‰LðBð �‰I˜‰OðBð �#‰Y˜‰_ð	Bð
 �3‰i˜#‰oðBð ðBð ðBð ˜‘I ‘O dÑ*ôBóJQñ ˆt×%Ò%×-Ñ-Ó.ð"$Ø—,‘,ð"$à�L‰Lð"$ð �,‰,˜Ñ
ð"$ð —,‘, Ñ%ð	"$ð
 —‘ Ñ$ð"$ð ð"$ð !&ð"$ð ò"$ó /ñ"$ñJ ˆt×Ò×'Ñ'Ó(ðØ—,‘,ðà�L‰Lðð �,‰,ðð �‰Ið	ð
 �#‰Yðð �3‰iðð ðð ˜‘Iðð òó )ñð> 	‡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×;Ñ;Ó<Ù�5—9‘9×#Ò#×3Ò3×:Ò:Ó;ò4ó <ó =ó ?ñ4ñl �5—9‘9×#Ò#×5Ò5×<Ò<Ó=Ù�5—9‘9×#Ò#×5Ò5×CÒCÓDòó Eó >ññ< �5—9‘9×#Ò#×5Ò5×=Ñ=Ó>Ù�5—9‘9×#Ò#×5Ò5×<Ò<Ó=òó >ó ?ññ> �5—9‘9×#Ò#×5Ò5×<Ò<Ó=Ù�5—9‘9×#Ò#×5Ò5×CÒCÓDò$ó Eó >ñ$ñL �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Ùƒò
ó ó 9ñ
ñ �×#Ò#×+Ñ+¨T×-@Ò-@×-DÑ-DÐEÓFÙƒØ46ô 

¨có 

ó ó Gñ

ñ �—	‘	—‘×&Ò&×.Ñ.°·	±	·±×0FÒ0F×0JÑ0JÐKÓLÙƒòó ó Mññ" �—
’
×!Ñ! 4×#5Ò#5×#<Ñ#<Ð=Ó>òAó ?ñAñH �×)Ò)×1Ñ1Ð2Ó3ò4Hó 4ñ4Hñn �—’×#Ñ# T§[¢[§_¡_Ð5Ó6Ù˜ÔØ./°qô 'ó ó 7ñ'ñ0 �×!Ò!×(Ñ(Ð)Ó*ò'ó +ñ'ñ �×!Ò!×)Ñ)¨4×+=Ò+=×+EÑ+EÐFÓGð  Øõ!
ó Hñ
ñ2 �× Ò ×(Ñ(Ð)Ó*ð  Øõ!!ó +ñ!ñH �—’ˆ~ÓÙƒòBó ó ñBñ* �×0Ò0Ð1Ó2òó 3ññ& �×8Ò8Ð9Ó:òó ;ññ �×(Ò(Ð)Ó*ò8ó +ñ8ñ  �×0Ò0Ð1Ó2ò<ó 3ñ<ñ �×>Ò>Ð?Ó@ò<ó Añ<ñ"�3ñ "˜3ð " 3õ "ô@ñF �×0Ò0Ð1Ó2ðDØ!'¨$¡óDó 3ñDñ4 �×+Ò+Ð,Ó-ò;ó .ñ;ñ( �×(Ò(Ð)Ó*ò<ó +ñ<ñ ˆ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�Š×&Ñ&Ó'ôó (ñö(ñV ˆ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 ˆt×4Ò4Ó5Ùˆ\Óò\ó ó 6ñ\ð~%
 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×"Ò"×*Ñ*Ó+ò.ó ,ñ.ñ ˆt×!Ò!×)Ñ)Ó*ô.ó +ñ.ò
˜ñ ¨Cñ ¸dõ ô /ô
ñ  ˆt�{Š{×"Ñ"Ó#ô'ó $ñ'öö6
ô ö
%öR4ñ ˆt×Ò×'Ñ'Ó(ò&ó )ñ&ñ
 ˆt× Ò Ó!òó "ññ
 à�Š×ÒØ�Š×ÒØ�Š×ÒØ�Š×!Ò!ð	óñ ƒô&ó óñ&ñ à�Š×ÒØ�Š×ÒØ�Š×ÒØ�Š×"Ò"ð	óôóññ �×8Ò8×@Ñ@ÐAÓBð
 ØØ#Øó<Øñ<à	ñ<ð ñ<ð ñ	<ð
 ñ<ð ñ<ð �4‰<ó<ó Cñ<ñ~ �×8Ò8×BÒBÐCÓDð ØØ#ØóØñà	ñð ñð ˜‰}ñ	ð
 ˜‰}ñð ˜‰}ñð ñð ñð ñð �4‰<óó Eññ4Øñà�S™#�X‰õñ& �×8Ò8Ð9Ó:ð ØØ#Øó(Øñ(à	ñ(ð ñ(ð ˜‰}ñ	(ð
 ñ(ð ñ(ð ñ(ð ñ(ð �4‰<ó(ó ;ñ(ñV �×EÒEÐFÓGð
  $ØØØ#Øó'Øñ'à	ñ'ð ñ'ð ˜‰}ñ	'ð
 ñ'ð ñ'ð ñ'ð �4‰<ó'ó Hñ'ñT à×9Ò9ðóð( ó"Øñ"àñ"ð 
ñ"ð ð	"ð
 
ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð �4‰<ó"óñ
"ñ. à×8Ò8ðóð ØØ#ØóØñà	ñð ñð ñ	ð
 ñð ˜‰}ñð �4‰<óóñ
ñ: à×AÒAðóð  $Øó!"Øñ!"àñ!"ð 
ñ!"ð ð	!"ð
 
ñ!"ð ñ!"ð ñ!"ð ñ!"ð ˜‰}ñ!"ð �4‰<ó!"óñ
!"ñH �×?Ò?Ð@ÓAð
  $ØØØ"&Øó3&Øñ3&à	ñ3&ð ñ3&ð ˜‰}ñ	3&ð
 ñ3&ð ñ3&ð ˜4‘-ñ3&ð �4‰<ð3&ð ˆ6�6ˆ>Ñó3&ó Bñ3&ñl �×<Ò<Ð=Ó>ð ØØó))Øñ))à	ñ))ð ñ))ð ˜‰}ñ	))ð
 ñ))ð ñ))ð �4‰<ó))ó ?ñ))ñX à×=Ò=ðóð" Øó4-Øñ4-àñ4-ð 
ñ4-ð ñ	4-ð
 ˜‰}ð4-ð 
ñ4-ð ñ4-ð ñ4-ð ñ4-ð ñ4-ð ˜$‘Zñ4-ð ñ4-ð �4‰<ó4-óñ
4-ñn à×9Ò9ðóð* ó!"Øñ"àñ"ð 
ñ"ð ð	"ð
 
ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð  �4‰<ó!"óñ
"ñ0 à×%Ò%×-Ñ-ðóð  Ø#'Ø$(Ø#Ø"&óHØñHà	ñHð ñHð ˜‰}ñ	Hð
 ˜‰}ñHð ñHð ñHð ñHð ñHð ñHð �4‰<ñHð ˜D‘jñHð ˜T‘zñHð ˜‰}ñHð ˜4‘-óHóñ
HñV �×-Ò-×7Ò7Ð8Ó9ð Ø#'Ø$(Ø#Ø"&ó%'Øñ'à	ñ'ð ñ'ð ˜‰}ñ	'ð
 ˜‰}ñ'ð ñ'ð ñ'ð ñ'ð ñ'ð ñ'ð ˜‰}ñ'ð ˜‰}ñ'ð ˜‰}ñ'ð �4‰<ñ'ð ˜D‘jñ'ð  ˜T‘zñ!'ð" ˜‰}ñ#'ð$ ˜4‘-ó%'ó :ñ'ñT à×&Ò&ðóð( Ø#'Ø$(ó#,Øñ,àñ,ð 
ñ,ð ð	,ð
 
ñ,ð ñ,ð ñ,ð ñ,ð ñ,ð ñ,ð ñ,ð ñ,ð ñ,ð ñ,ð �4‰<ñ,ð  ˜D‘jñ!,ð" ˜T‘zó#,óñ
,ñ4 à×)Ò)ðóð   %ØØ%)Ø"Ø"ó/SØñ/Sà	ñ/Sð ð/Sð �4‰-ñ	/Sð
 ˜4‘-ñ/Sð ˜4‘-ñ/Sð ˜‘*ñ/Sð ˜‘*ñ/Sð ñ/Sð ñ/Sð ñ/Sð �4‰<ñ/Sð ˜d‘]ñ/Sð �t‰mñ/Sð �t‘ó/Sóñ
/Sñd à×*Ò*ðóð* Ø!%Ø"'ó%47Øñ47àñ47ð 
ñ47ð ð	47ð
 �4‰-ñ47ð ˜4‘-ñ47ð ˜4‘-ñ47ð —,’,ñ47ð —,’,ñ47ð ñ47ð ñ47ð ñ47ð ñ47ð ñ47ð ñ47ð  �4‰<ñ!47ð" ˜$‘Jñ#47ð$  ó%47óñ
47ðx !%Ø(,Ø$(Ø òzYØ
�,‰,ðzYà
�,‰,ñzYð �\‰\ñzYð �\‰\ð	zYð
 �,‰,˜Ñ
ñzYð —,‘, Ñ%ðzYð �{‰{˜TÑ!ñzYð õzYñz �—’×'Ñ'Ð(Ó)ð !%Ø(,Ø$(Ø òØ
�,‰,ðà
�,‰,ñð �\‰\ñð �\‰\ð	ð
 �,‰,˜Ñ
ñð —,‘, Ñ%ðð �{‰{˜TÑ!ñð óó *ñð, !%Ø$(Ø*.Ø*.Ø òdCØ
�,‰,ðdCà
�,‰,ñdCð �%—,‘,ÑñdCð ˜Ñ%ñ	dCð
 �%—,‘,ÑñdCð ˜Ñ%ðdCð �,‰,˜Ñ
ðdCð �{‰{˜TÑ!ñdCð �KÑ  4Ñ'ñdCð �KÑ  4Ñ'ñdCð õdCñN �×"Ò"×*Ñ*Ð+Ó,ð !%Ø'+Ø)-Ø òØ
�,‰,ðà
�,‰,ñð �%—,‘,Ññð ˜Ñ%ñ	ð
 �KÑ ñð �%—,‘,Ññð ˜Ñ%ñð �KÑ ðð �,‰,˜Ñ
ñð —+‘+ Ñ$ñð ˜3‘i $Ñ&ñð óó -ññ: �×#Ò#×'Ò'¨×)<Ò)<×)DÒ)DÐEÓFÙƒô&ó ó Gñ&ñ
 ˆt×#Ò#×'Ò'Ó(ôó )ññ
 �× Ò ×(Ñ(¨$×*:Ò*:×*>Ñ*>Ð?Ó@Ùƒñ	Èô 	ó ó Añ	ôô,ñ* Ø	×Ò×$Ñ$ d×&DÒ&D×&LÑ&LÐMóô
óñ
ñ Ø	×Ò×$Ñ$ d×&DÒ&D×&LÑ&LÐMóôóññ. à×(Ò(×0Ñ0Ø×/Ò/×7Ñ7ðóð "Ø!óØñà˜# §¢Ñ,Ñ-ñð ˜˜uŸ|š|Ñ+Ñ,ñð �d‰lñ	ð
 �d‰lóóññ: Ø	×Ò×$Ñ$ d×&DÒ&D×&LÑ&LÐMóô
óñ
ñ à�	Š	×ÑØ�	Š	×ÒØ�	Š	×ÒØ�	Š	×Òð	óôóñô*$ñN ˆt×)Ò)×1Ñ1Ó2ð
 Øôó 3ññ ˆt�Š×&Ñ&Ó'ò4/ó (ñ4/ñn ˆt�Š×&Ñ&Ó'ò)ó (ñ)ñX ˆ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ññ �—’×%Ò% t§~¢~×'@Ò'@ÐAÓBð
 Øó
Ø
ñ
àñ
ð ñ	
ð
 ó
ó Cñ
ñ �—
’
ˆ|ÓÙƒôEó ó ñEñ4 Ø	×!Ò!×)Ñ)¨4×+FÒ+F×+NÑ+NÐOóð Øôóññ& �×5Ò5×=Ñ=Ð>Ó?ð Øôó @ññ8 ˆt×>Ò>×FÑFÓGòó Hññ$ �—’×'Ñ'¨¯ª×)<Ñ)<Ð=Ó>Ùƒô"ó ó ?ñ"ñ ˆu�y‰y�~‰~×(Ò(Ó)òó *ññ: ˆ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ô'ð^ ØØ(,Ø$(Ø óVKØñVKàñVKð �\‰\˜DÑ ñVKð �\‰\˜DÑ ñ	VKð
 �4‰-ðVKð �4‰-ñVKð —,‘, Ñ%ðVKð �{‰{˜TÑ!ñVKð õVKñr ˆt×ÒÓ Ùƒð ØØ$(óØñàñð �4‰-ðð �4‰-ð	ð
 �{‰{˜TÑ!ðð óó ó !ññ& �×'Ò'Ð(Ó)ð !%Ø $Ø(,Ø$(Ø óØ�<‰<ñà�<‰<ñð �\‰\ñð �\‰\ñ	ð
 �,‰,˜Ñ
ðð �,‰,˜Ñ
ñð —,‘, Ñ%ðð �{‰{˜TÑ!ñð óó *ññ6 ˆt×!Ò!×(Ò(Ó)ôó *ññ  ˆt�}Š}ÓÙƒñˆvð ˜Cñ °ð ¸ó ó ó ññ  ˆt×#Ò#Ó$Ùƒô3ó ó %ñ3ñl ˆt�~Š~ÓÙƒð Ø$Øò8Øð8àñ8ð ñ8ð ñ	8ð
 ð8ð ó8ó ó ñ8ñ. ˆt×3Ò3×;Ñ;Ó<ð
 ò	*Øð*à�&‰\ñ*ð �c‘ñ*ð ó	*ó =ñ*ô,ñ ˆt×0Ò0×8Ñ8Ó9ð 
ØØØô-"ó :ñ-"ô`ò ˜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Ó)�Ú! $§,¢,Ó/�Ú! $§,¢,Ó/�ó
 Ü  Ü ôENòP …r:   