Ë
    ÃÓ^j†• ã            -       óŒ†  — 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)m*Z* d dl+m,Z,m-Z-m.Z.m/Z/m0Z0 d dl1m2Z2m3Z3 d dl4m5Z6 d dl7m8Z8m9Z9 d dl:m;Z<  e	d«      Z= ed«      Z>ej~                  j€                  Z@ej‚                  j…                  ddd«      ZC eDd«      \  ZEZFZGd„ ZHd„ ZIdeee>e=f   gee>e=f   f   fd„ZJde!fd„ZKd„ ZLd„ ZM eJe@jœ                  e@jž                  g«       e0«       dddej                   ddfd „«       «       ZQ eJe@j¤                  j¦                  e@j¤                  j¨                  g«       e0«       d!„ «       «       ZU eJe@j¬                  j¦                  e@j¬                  j¨                  g«       e0«       �did"„«       «       ZW eJe@j°                  j¦                  e@j°                  j¨                  g«       e0«       	 	 �djd#ed$eYd%eYd&ed'ed(ed)ed*eZd+eZd,e[d-ed.ed/ed0ed1ed2ed3ed4ed5ej$                  dz  d6eYdz  def*d7„«       «       Z\ eJe@jº                  j¦                  e@jº                  j¨                  g«       e0«       d8d9œd:„«       «       Z] eJe@j¼                  «       e0«       d;„ «       «       Z^ eJe@j¾                  j¦                  e@j¾                  j¨                  e@jÀ                  j¦                  e@jÀ                  j¨                  g«       e0d<d=«      d>„ «       «       Za eJe@jÄ                  j¦                  e@jÄ                  j¨                  g«       e0«       d?„ «       «       Zbd@„ Zc�dkdAedBedeY   dCeZfdD„Ze eJe@jÌ                  j¦                  e@jÌ                  j¨                  g«       e0«       dE„ «       «       ZgdZhdBedeY   fdF„Zi eJe@jÔ                  j¦                  e@jÔ                  j¨                  g«       e0«       dG„ «       «       Zk eJe@jØ                  jÚ                  «      ddHœdI„«       Zn eJe@jØ                  j¦                  «      ejÞ                  ddddJœdK„«       Zp eJe@jâ                  j¦                  e@jâ                  j¨                  g«       e0«       ejÞ                  ddddJœdL„«       «       Zr eJe@jâ                  jæ                  e@jâ                  jè                  g«       e0«       ejÞ                  ddddJœdM„«       «       Zu eJe@jì                  j¦                  e@jì                  j¨                  g«       e0«       dddddJœdN„«       «       Zw eJe@jð                  j¦                  «      dO„ «       Zy eJe@jô                  j¦                  «      dP„ «       Z{dQ„ Z| eJe@jú                  j¦                  «      �dldR„«       Z~ eJe@jþ                  j¦                  «      �dldS„«       Z€ eJe@�j                  j¦                  e@�j                  j¨                  g«       e0«       dAedBedeY   dTeYdUeYfdV„«       «       Z‚ eJe@�j                  j¦                  «      �dkdW„«       Z„dX„ Z… eJe@�j                  j¦                  «      dY„ «       Z‡ eJe@�j                  «      	 	 	 �dmdZed[ed\ed]edz  d^e‰dz  d_e�j                  dz  fd`„«       Z‹ eJe@�j                  «      	 �didaedbedced_e�j                  dz  fdd„«       Z� eJe@�j                  «      dededdfœdZedaedbedced_e�j                  dz  f
dg„«       Z� eJe@�j                   «      	 	 	 	 	 	 	 �dndhej$                  diej$                  d]edz  djedz  d_e�j                  dz  dkeZdleYdmeYdneYfdo„«       Z‘ eJe@�j$                  j¦                  «      dpdqœdAedBeYdredsej$                  dte‰dueZdefdv„«       Z“ eJe@�j(                  j¦                  «      dpdqœdAedBeYdredsej$                  dte‰dueZdefdw„«       Z• e0«        eJe@�j,                  j¦                  «      dx„ «       «       Z— eJe@�j0                  j¦                  «      dddd dddyœdzedte‰d{edz  d=edz  d|edz  d}eYd~eZdefd„«       Z™ eJe@�j4                  j¦                  e@�j4                  �j6                  g«       e0«       d€„ «       «       Zœ eJe@�j4                  �j:                  «      �dkd�„«       Zž eJe@�j>                  j¦                  e@�j>                  �j6                  g«       e0«       d‚„ «       «       Z  eJe@�j>                  �j:                  «      �dkdƒ„«       Z¡ eJe@�jD                  j¦                  «      d„„ «       Z£ eJe@�jD                  j¨                  «      d…„ «       Z¤ eJe@�jJ                  j¦                  «      d†„ «       Z¦ eJe@�jJ                  �jN                  «      d‡„ «       Z¨ eJe@�jR                  j¦                  «      dˆ„ «       Zª eJe@�jV                  j¦                  «      dddddd‰œdŠ„«       Z¬ eJe@�jZ                  j¦                  «      �djd‹„«       Z­ eJe@�j\                  j¦                  «      �dmdŒ„«       Z¯ eJe@�j`                  j¦                  «      �djd�„«       Z° eJe@�jb                  j¦                  «      dŽ„ «       Z² eJe@�jf                  �jN                  «      d�„ «       Z´dAed�e‰fd‘„ZµdAed’ed“e‰fd”„Z¶	 �dod•ed�e‰d–eZfd—„Z·�dpd’ed�e‰d˜e‰fd™„Z¸d’edšed›eZd�e‰fdœ„Z¹	 �dqdže‰d�edZedŸe‰fd „Zºd¡e‰fd¢„Z» eJe@�jx                  j¦                  e@�jx                  �jz                  g«       e0d£d¤«      �drd’ed¡e‰d¦eZfd§„«       «       Z¾ eJe@�j~                  j¦                  e@�j€                  j¨                  g«       e0«       dZedefd¨„«       «       ZÁ eJe@�j„                  g«       e0d£d¤«      dZefd©„«       «       ZÃd#edefdª„ZÄ eJe@�jŠ                  «       e0«       dAed’ed«eZdefd¬„«       «       ZÅ eJe@�jŒ                  «       e0«       �dkdAed’ed«eZdefd­„«       «       ZÆ eJe@�jŽ                  «       e0«       �dkdAed«eZdefd®„«       «       ZÇ eJe@�j�                  «       e0«       �dkdAed«eZdefd¯„«       «       ZÈ eJe@�j’                  j¦                  «      �dsd’ed«eZd°eZfd±„«       ZÉ eJe@�j”                  j¦                  e@�j”                  j¨                  g«       e0«       dZed²edefd³„«       «       ZÊ eJe@�j–                  j¦                  «      �dkd’ed°eZfd´„«       ZÌ eJe@�jš                  j¦                  e@�jš                  j¨                  g«       e0dµd¶d·«      ddd¸œdAed¹eZd°eZdeÎeeef   fdº„«       «       ZÏ eJe@�j                   j¦                  e@�j                   j¨                  g«       e0«       dd»œdµed¶edšed¹eZdef
d¼„«       «       ZÑ eJe@�j¤                  j¦                  e@�j¤                  j¨                  g«       e0d½d¥d¾«      dpd¿œd’edÀeZdeÎeeef   fdÁ„«       «       ZÓ eJe@�j¨                  j¦                  e@�j¨                  j¨                  g«       e0dÂd¶d·«      dpddÃœd’edÀeZd°eZdeÎeeef   fdÄ„«       «       ZÕ eJe@�j¬                  j¦                  e@�j¬                  j¨                  g«       e0«       dpddÅœdÂed¶edšed›eZdÆeZdefdÇ„«       «       Z× eJe@�j°                  «       e0d½d¥d¾«      	 	 �dtdÂed¶edÈeZdÉeZdeÎeeef   f
dÊ„«       «       ZÙdËe‰deÎeZeZf   fdÌ„ZÚ eJe@�j¶                  j¦                  e@�j¶                  j¨                  g«       e0dÍdÎ«      �dud’edËe‰deÎeef   fdÏ„«       «       ZÜ eJe@�jº                  j¦                  e@�jº                  �j¼                  g«       e0dÐdÑdÂd¶«      d’edeÎeeeef   fdÒ„«       «       ZÝ eJe@�j¾                  j¦                  «      	 	 	 �dvd’edÓeZdÔeZdÕe‰dz  fdÖ„«       Zàd×edØedeÎedeY   edeY   f   fdÙ„Zád×edØed“e‰dz  deÎeef   fdÚ„ZâdZedÛedeZfdÜ„Zã eJe@�jÈ                  «      dpddddddÝœd’edšed›eZd°eZd�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ä eJe@�jÊ                  j¦                  e@�jÊ                  j¨                  g«      dpdddßœd’edšed«eZd›eZdàeZdáedz  defdâ„«       Zæ eJe@�jÎ                  «       e0dãdädp¬å«      	 	 	 �dwdAed’ed«eZdæeZdàeZdeÎeef   fdç„«       «       Zè eJe@�jÒ                  j¦                  «      dè„ «       Zê eJe@�jÖ                  «       e0«       	 	 �dxdZed²edÛed›eZdæeZdefdé„«       «       Zëdê„ Zìdë„ Zí eJe@�jÜ                  «       e0«       dì„ «       «       Zï eJe@�jà                  «       e0«       dí„ «       «       Zñdî„ Zò eJe@�jæ                  «       e0dï«      dð„ «       «       Zô eJe@�jê                  «       e0dï«      dñ„ «       «       Zödò„ Z÷ eJe@�jð                  «       e0«       dó„ «       «       Zù eJe@�jô                  «       e0«       dô„ «       «       Zû eJe@�jø                  j¦                  «      dõ„ «       Zý eJe@�jü                  j¦                  e@�jü                  �jþ                  e@�j                   j¦                  e@�j                   �jþ                  g«       e0dï«      dö„ «       «       �Zd÷„ �Z eJe@�j                  «       e0«       dø„ «       «       �Z eJe@�j
                  «       e0«       dù„ «       «       �Z eJe@�j                  j¦                  e@�j                  �jþ                  e@�j                  j¦                  e@�j                  �jþ                  g«       e0dï«      dú„ «       «       �Z	 eJe@�j                  «       e0«       �dydAedûe[defdü„«       «       �Z eJe@�j                  «       e0«       dýedAedûe[dþedef
dÿ„«       «       �Z eJe@�j                  j¦                  e@�j                  j¨                  g«       e0dp¬å«      dede�d œ�d„«       «       �Z eJe@�j                   j¦                  e@�j                   j¨                  g«       e0«       ddHœ�d„«       «       �Z eJe@�j$                  j¶                  «      �dz�d„«       �Z eJe@�j                   �j(                  «      �dz�d„«       �Z eJe@�j,                  j¦                  e@�j,                  j¨                  g«       e0«       �di�d„«       «       �Z eJe@�j0                  j¦                  «      	 	 �ds�d„«       �Z eJe@�j4                  «       e0dp¬å«      �did_e�j                  dz  f�d„«       «       �Z�d„ �Z�d{�d	„�Z	 �di�d
ej$                  d[ej$                  �dedeY   eYz  �dedeY   eYz  �dedeY   eYz  �deZ�deY�dedeY   eYz  dz  f�d„�Z�d„ �Z eJe@�j@                  j¦                  «      �d
ej$                  d[ej$                  d]ej$                  dz  �dej$                  dz  �dej$                  dz  �deZ�de[�de[f�d„«       �Z! eJe@�jD                  j¦                  «      �d
ej$                  d[ej$                  d]ej$                  dz  �dedeY   �dedeY   �dedeY   �deZ�dedeY   �deYf�d„«       �Z# eJe@�jH                  j¦                  «      	 �do�d
ej$                  d[ej$                  d]ej$                  dz  �dedeY   �dedeY   �dedeY   �deZ�dedeY   �deY�deZ�deZ�deZ�deZf�d„«       �Z%e�jL                  �jN                  �rej‚                  j…                  �d dd«      �Z( eJej~                  �jR                  �jT                  j¦                  «      �d!„ «       �Z+ eJej~                  �jR                  �jX                  j¦                  «      �d"„ «       �Z-e�jL                  �j\                  rOej‚                  j…                  �d#dd«      �Z/ eJej~                  �j`                  �jb                  «      �d$„ «       �Z2ej‚                  j…                  �d%dd«      �Z3 eJej~                  �jh                  �jj                  j¦                  «       eJej~                  �jh                  �jl                  j¦                  «       eJej~                  �jh                  �jl                  �jn                  «      �d&„ «       «       «       �Z8 eJej~                  �jh                  �jj                  �jr                  «       eJej~                  �jh                  �jj                  �jt                  «      �d'„ «       «       �Z; eJej~                  �jh                  �jx                  j¦                  «       eJej~                  �jh                  �jx                  �jn                  «      �d(„ «       «       �Z= eJej~                  �jh                  �jx                  �jr                  «       eJej~                  �jh                  �jx                  �jt                  «      �d)„ «       «       �Z> eJej~                  �jh                  �j~                  j¦                  «       eJej~                  �jh                  �j€                  j¦                  «      �d*„ «       «       �ZAej‚                  j…                  �d+dd«      �ZB eJej~                  �j†                  �jˆ                  «      	 	 	 	 �d|�d.„«       �ZE eJej~                  �j†                  �jŒ                  «      �d/„ «       �ZG�d0„ �ZH eJe@�j’                  «      dZej$                  �d1e[�d2eY�d3e�j                  dej$                  f
�d4„«       �ZJ eJe@�j–                  j¦                  «      	 	 	 	 	 �d}�d5„«       �ZL�d6„ �ZM eJe@�jœ                  j¦                  «      �d7„ «       �ZO eJe@�j                   «       e0«       	 	 	 	 	 �d}�d8„«       «       �ZQ eJe@�j¤                  «       e0dï«      �d9„ «       «       �ZS eJe@�j¨                  j¦                  «      �d:„ «       �ZU eJe@�j¬                  j¦                  «      �d;„ «       �ZW eJe@�j°                  j¦                  «      �d<„ «       �ZY eJe@�j´                  «       e0dï«      �d=„ «       «       �Z[�d>ed˜e‰f�d?„�Z\ eJe@�jº                  «       e0dád=«      �d@„ «       «       �Z^ eJe@�j¾                  «       e0dï«      �dA„ «       «       �Z` eJe@�jÂ                  «       e0dád=«      �dB„ «       «       �Zb eJe@�jÆ                  «       e0dï«      �dC„ «       «       �Zd eJe@�jÊ                  j$                  «      �di�dD„«       �Zf eJe@�jÎ                  j¦                  e@�jÎ                  j¨                  g«       e0«       �dE„ «       «       �Zh eJe@�jÒ                  j¦                  e@�jÒ                  j¨                  g«       e0«       d8�dFœ�dGeYf�dH„«       «       �Zi eJej~                  j€                  �jÔ                  j¦                  ej~                  j€                  �jÔ                  j¨                  g«       e0«       �dI„ «       «       �Zj eJe@�jÖ                  j$                  e@�jØ                  j$                  g«      �dJ„ «       �Zm eJe@�jÜ                  j¦                  g«      �dK„ «       �Zo eJe@�jà                  j¦                  e@�jà                  j¨                  g«       e0dp¬å«      dede�d œ�dL„«       «       �Zq eJe@�jä                  j$                  g«      �dM„ «       �Zs eJe@�jè                  j¦                  e@�jê                  j¦                  g«      dd�dNœ�dO„«       �Zv eJe@�jî                  j¦                  g«      dd�dNœ�dP„«       �Zx eJe@�jò                  g«       e0«       �dQ„ «       «       �Zz eJe@�jö                  g«      �dR„ «       �Z| eJe@�jú                  g«      �dS„ «       �Z~ eJe@�jþ                  g«      �dT„ «       �Z€ eJe@�j                  g«      �dU„ «       �Z‚ eJe@�j                  g«      �dV„ «       �Zƒ�dWeY�dXeYdeYf�dY„�Z„�dZ„ �Z… eJe@�j                  g«      d]edz  f�d[„«       �Z‡ eJe@�j                  g«      �d\„ «       �Z‰ eJe@�j                  g«      �d]„ «       �Z‹ eJe@�j                  j¦                  «      �d^„ «       �Z� eJe@�j                  «       e0«       �d_„ «       «       �Z� eJe@�j                   j¦                  «      	 	 	 	 	 	 �d~�d`„«       �Z‘ eJe@�j$                  j¦                  «      �da„ «       �Z“�do�db„�Z” eJe@�j*                  j¦                  e@�j*                  j¨                  g«       e0«       �dd�dcœ�dd„«       «       �Z– eJe@�j.                  j¦                  e@�j0                  j¦                  g«      �de„ «       �Z™ eJe@�j.                  �j:                  e@�j.                  �j4                  e@�j0                  �j:                  e@�j0                  �j4                  e@�j6                  j¦                  e@�j6                  �j8                  g«       e0d<d=«      �d€�df„«       «       �Z� eJe@�j<                  j¦                  «      �dg„ «       �ZŸ eJe@�j@                  j¦                  «      �dh„ «       �Z¡ eJe@�jD                  j¦                  «      �di„ «       �Z£ eJe@�jH                  �jJ                  e@�jH                  j$                  e@�jL                  j¦                  e@�jN                  j¦                  e@�jP                  j¦                  g«      �dj„ «       �Z© eJe@�jT                  �jJ                  e@�jT                  j$                  g«      �dk„ «       �Z« eJe@�jX                  �jJ                  e@�jZ                  �jJ                  e@�jX                  j$                  e@�jZ                  j$                  g«      �d-�dl„«       �Z® eJe@�j^                  �jJ                  e@�j`                  �jJ                  g«      �d-�dm„«       �Z± eJe@�jd                  j¦                  e@�jd                  �jf                  g«      �dn„ «       �Z´�do„ �Zµ eJe@�jl                  j$                  e@�jl                  �jJ                  g«      �dp„ «       �Z· eJe@�jp                  j$                  e@�jp                  �jJ                  g«      �dq„ «       �Z¹ eJe@�jt                  j¦                  «      �dr„ «       �Z» eJe@�jx                  j$                  e@�jx                  �jJ                  g«      �ds„ «       �Z½ eJe@�j|                  j$                  e@�j|                  �jJ                  g«      �dt„ «       �Z¿ eJe@�j€                  j¦                  «      �du„ «       �ZÁ eJe@�j„                  j$                  «       e0«       �d-def�dv„«       «       �ZÃ eJe@�jˆ                  g«       e0«       	 �d��dw„«       «       �ZÅ eJe@�jŒ                  g«      	 �d��dx„«       �ZÇ eJe@�j�                  g«      	 �d��dy„«       �ZÉ eJe@�j”                  j¦                  e@�j–                  j¦                  g«      �dk�dz„«       �ZÌ eJe@�jš                  �jJ                  «      �d{„ «       �ZÎ eJe@�jž                  j¦                  «      �d|„ «       �ZÐ eJe@�j¢                  «      �d}„ «       �ZÒ eJe@�j¦                  «       e0«       �d~„ «       «       �ZÔ eJe@�jª                  «      �d„ «       �ZÖ eJe@�j®                  j¦                  «      �dk�d€„«       �ZØ�dj�d�„�ZÙ eJe@�j´                  j¦                  e@�j´                  j¨                  g«       e0dp¬å«      �d‚„ «       «       �ZÛ eJe@�j´                  �j                  e@�j´                  �j¸                  g«       e0dp¬å«      �dƒ„ «       «       �ZÝ�d„„ �ZÞ�d…„ �Zß�d†„ �Zà�d‡„ �Zá	 �dkdZe�dˆeY�d‰eY�dŠeY�d‹eY�dŒeY�d�eY�dŽeY�d�eY�d�eY�d‘eY�d’eY�d“eY�d”eY�d•eY�d–eY�d—eY�d˜eY�d™eY�dšeYdže‰�d›eZf,�dœ„�Zâ�d�„ �ZãdZe�d>e�dˆeY�d‰eY�dŠeY�d‹eY�dŒeY�d�eY�dŽeY�d�eY�d�eY�d‘eY�d•eY�d–eY�d—eY�d˜eY�d™eY�dšeYdže‰f&�dž„�Zä�dŸ„ �Zå eJe@�jÌ                  «       e0dï«      �d „ «       «       �Zç eJe@�jÐ                  j¦                  «      	 	 	 	 �d|�d¡„«       �Zé eJe@�jÔ                  j¦                  «      �d¢„ «       �Zë eJe@�jØ                  «       e0dád=«      	 	 	 	 �d|�d£„«       «       �Zí eJe@�jÜ                  «       e0dï«      �d¤„ «       «       �ZïdZe�d¥ef�d¦„�Zð G �d§„ �d¨e«      �ZñdZe�d¥e�d©eYf�dª„�Zò eJe@�jæ                  j¦                  «      �d«„ «       �Zô eJe@�jê                  «       e0«       �d¬„ «       «       �Zõ eJe@�jì                  «       e0dï�d­«      �d®„ «       «       �Zö eJe@�jî                  j¦                  g«      �d¯„ «       �Z÷ eJe@�jð                  j¦                  «      	 	 	 	 	 �d‚�d°„«       �Zø eJe@�jò                  j¦                  e@�jò                  j¨                  g«       e0«       ddddd�d±œ�d²„«       «       �Zú eJe@�jö                  j¦                  e@�jö                  j¨                  g«       e0«       ddddd�d±œ�d³„«       «       �Zü eJe@�jú                  j¦                  «      �d´„ «       �Zþ eJe@�jþ                  j¦                  «      �dƒ�dµ„«       �Z  eJe@�j                  j¦                  «      �d„�d¶„«       �Z�d·„ �Z�dodBeY�d¸eY�d¹eZf�dº„�Z�d»„ �Z�d¼„ �Z eJe@�j                  j¦                  «      �dk�d½„«       �Z�dk�d¾„�Z	�di�d¿„�Z
�dÀ„ �Z�di�dÁ„�Z�d…�dÂ„�Z eJe@�j                  j¦                  «      �dÃ„ «       �Z eJe@�j                   «      �dÄ„ «       �Z eJe@�j$                  �j&                  e@�j$                  �j(                  e@�j$                  �j*                  e@�j$                  �j,                  g«       e0«       �di�dÅ„«       «       �Z eJe@�j0                  �j&                  e@�j0                  �j(                  e@�j0                  �j*                  e@�j0                  �j,                  g«      �di�dÆ„«       �Z eJe@�j4                  j¦                  g«      	 	 	 	 �d†�dÇe�dÈe�dÉe�dÊe[�dËeZ�dÌeZ�d1e[dz  f�dÍ„«       �Z eJe@�j4                  �j†                  g«      	 	 	 	 �d†�dÇe�dÈe�dÉe�dÎedz  �dÏedz  �dÐedz  �dÊe[�dËeZ�dÌeZ�d1e[dz  f�dÑ„«       �Z�dÇe�dÒeÎeY�dÓf   f�dÔ„�Z eJe@�j<                  g«      	 	 	 	 �d†�dÇe�dÈe�dÉe�dÕedz  �dÖeZ�dÊe[�dËeZ�dÌeZ�d1e[dz  f�d×„«       �Z eJe@�j@                  g«      	 	 	 	 	 �d‡�dÇe�dÈe�dÉe�dÕedz  �dÊe[�dËeZ�dÌeZ�d1e[dz  f�dØ„«       �Z! eJe@�jD                  «      d�dÙœ�dÚe�dÇe�dÈe�dÉe�dÕe�dÛedeZ   dáe�dÜe�dÝe�dÞe�dßeY�dàeY�dÊe[�dËeZ�dáe�dâe�d1e[dz  f"�dã„«       �Z# eJe@�jH                  g«      	 �di�dÚe�dÇe�dÈe�dÉedáe�dÜe�dÝe�dÞe�dßeY�dàeY�dÊe[�dËeZ�dáe�dâe�d1e[dz  f�dä„«       �Z% eJe@�jL                  g«      	 	 	 	 �dˆ�dÇe�dÈe�dÉe�dÊe[�dËeZ�dåedz  �d1e[dz  f�dæ„«       �Z' eJe@�jP                  g«      	 	 �dj�dÚe�dÇe�dÈe�dÉedáe�dÜe�dÊe[�dËeZ�dåedz  �d1e[dz  f�dç„«       �Z) eJe@�jT                  g«      	 	 	 	 	 	 �d‰�dÇe�dÈe�dÉe�dåedz  �dÊe[�dËeZ�dèedz  �d1e[dz  �déeZdeÎeef   f�dê„«       �Z+ eJe@�jX                  g«      	 	 	 �dŠ�dÇe�dÈe�dÉe�dÕedz  �dÖeZ�dËeZ�d1e[dz  f�dë„«       �Z- eJe@�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ÛedeZ   �dËeZ�d1e[dz  f�dì„«       �Z/ eJe@�j`                  g«      	 �di�dÚe�dÇe�dÈe�dÉedáe�dÜe�dáe�dâe�dÕe�dÝe�dÞe�dßeY�dàeY�dÊe[�dËeZ�d1e[dz  f �dí„«       �Z1 eJe@�jd                  j¦                  g«      	 	 	 	 	 	 	 �dŒ�dÇe�dÈe�dÉe�dÝedz  �dÞedz  �dßeY�dàeY�dÊe[�dËeZ�dÌeZ�d1e[dz  �dîeYdz  �dïeYdz  �dðedz  �dñedz  �dòedz  �dóeYdz  f"�dô„«       �Z3 eJe@�jh                  j¦                  g«      	 	 	 	 	 	 	 �dŒdáe�dÇe�dÈe�dÉe�dÝedz  �dÞedz  �dßeY�dàeY�dÊe[�dËeZ�dÌeZ�d1e[dz  �dîeYdz  �dïeYdz  �dðedz  �dñedz  �dòedz  �dóeYdz  f$�dõ„«       �Z5 eJe@�jd                  �j†                  g«      	 	 	 	 	 �d‚�dÇe�dÈe�dÉe�dÝedz  �dÞedz  �dßeY�dàeY�dÊe[�dËeZ�dÌeZ�dÎedz  �dÏedz  �dÐedz  �d1e[dz  �dîeYdz  �dïeYdz  �dðedz  �dñedz  f$�dö„«       �Z6 eJe@�jn                  g«      	 	 	 �dm�dÚe�dÇe�dÈe�dÉedáe�dÜe�dÝe�dÞe�dßeY�dàeY�dÊe[�dËeZ�dáe�dâe�d1e[dz  �dîeYdz  �dïeYdz  f"�d÷„«       �Z8 eJe@�jr                  g«      	 	 	 	 	 �d��dÇe�dÈe�dÉed]edz  �døedz  �dùedz  �dúeYdz  �dûeYdz  �dÊe[�düeY�dÖeZ�d1e[dz  �dýedz  �dþedz  �dÿeYdz  f�d „«       �Z: eJe@�jv                  g«      	 	 	 �d…�dÚe�dÇe�dÈe�dÉed]edz  �døedz  �dùedz  �dúe�jx                  �dûe�jx                  �dÜe�dÊe[�dáe�dâe�düeY�deZ�d1e[dz  �deYdz  �deZf$�d„«       �Z=	 	 	 	 �dŽdAej$                  dcej$                  �dej$                  �dej$                  d]ej$                  dz  �dej$                  dz  d_e�j                  dz  �deZf�d	„�Z> eJe@�j~                  j¦                  g«      	 	 	 	 �dŽdAej$                  dcej$                  �dej$                  �dej$                  d]ej$                  dz  �dej$                  dz  d_e�j                  dz  �deZf�d
„«       �Z@	 	 	 	 	 �d�dAej$                  dcej$                  �dedej$                     �dede8   �dedej$                     �dede8   d]ej$                  dz  d_e�j                  dz  �dede9   dz  �dede9   dz  �deZf�d„�ZA eJe@�j„                  j¦                  g«      	 	 	 	 �dŽdAej$                  dcej$                  �dedej$                     �dede8   �dede9   �dedej$                     �dede8   �dede9   d]ej$                  dz  �de�j                  dz  �dedeY   dz  �deZf�d„«       �ZC eJe@�jˆ                  �jŠ                  e@�jˆ                  �jŒ                  g«       e0«       �do�d„«       «       �ZG eJe@�j�                  �jŠ                  «      �do�d„«       �ZI eJe@�j”                  j¦                  e@�j”                  j¨                  g«       e0«       �dkddHœ�d„«       «       �ZK�d„ �ZL�d„ �ZM eJe@�jœ                  j¦                  e@�jž                  j¦                  g«      �di�d„«       �ZN eJe@�j                   j¦                  e@�j¢                  j¦                  g«      �dj�d„«       �ZP eJe@�j¤                  j¦                  e@�j¦                  j¦                  g«      	 	 �dj�d>e�deeYe�jx                  z     �deeYe�jx                  z     �de[dz  �de[dz  f
�d„«       �ZR eJe@�j¨                  j¦                  e@�jª                  j¦                  g«      �dm�d„«       �ZT eJe@�j¬                  j¦                  e@�j¬                  �j®                  e@�j¬                  �j8                  e@�j¬                  �j°                  g«      �d��d „«       �ZY�d!„ �ZZ eJe@�j¶                  j¦                  «      	 	 �dj�d"„«       �Z\ eJe@�jº                  j¦                  «      �d#„ «       �Z] eJe@�j¼                  j¦                  «      �d$„ «       �Z^ eJe@�j¾                  j¦                  «      �d%„ «       �Z_�d&„ �Z`�d'„ �Za eJe@�jÄ                  j¦                  e@�jÆ                  j¦                  g«      �d�d(„«       �Zd eJe@�jÊ                  j¦                  «      �d‘�d)„«       �Ze eJe@�jÌ                  j¦                  «      �d’�d*„«       �Zg eJe@�jÐ                  «       e0«       	 �d“�d+„«       «       �Zi eJe@�jÔ                  j¦                  e@�jÔ                  �j8                  g«       e0d<d=«      �d€�d,„«       «       �Zke�jØ                  �Zm�d-„ �Zn eJe@�jÞ                  j¦                  «      �d.„ «       �Zo eJe@�jà                  j¦                  «      �d/„ «       �Zp eJe@�jâ                  j¦                  «      �d0„ «       �Zr eJe@�jæ                  j¦                  «      �d1„ «       �Zs eJe@�jè                  j$                  e@�jè                  �jê                  g«       e0«       dd�d2œ�d3„«       «       �Zv eJe@�jè                  �jJ                  e@�jè                  �jî                  g«      dd�d2œdAe'�d4e�d5eZ�d6eZf�d7„«       �Zx eJe@�jò                  g«       e0«       �d”�d8„«       «       �Zz eJe@�jö                  j¦                  e@�jø                  j¦                  e@�jú                  j¦                  g«      	 	 �dj�d9„«       �Z~ eJe@�jþ                  j¦                  e@�j                   j¦                  g«      	 	 �dj�d:„«       �Z� eJe@�j                  j¦                  «      �d;„ «       �Z‚ eJe@�j                  j¦                  e@�j                  j¨                  g«       e0«       �dm�d<„«       «       �Zƒ eJej~                  j€                  �j                  «      �d=„ «       �Z„ eJej~                  j€                  �j
                  «      �d>„ «       �Z… eJe@�j                  «       e0«       dddd�d?œ�d@„«       «       �Z‡�dA„ �Zˆ eJe@�j                  «      �dB„ «       �ZŠ eJe@�j                  «      	 �d•�dC„«       �ZŒ eJe@�j                  «      	 �d•�dD„«       �ZŽ eJe@�j                  «      	 �d•�dE„«       �Z� eJe@�j"                  «       e0«       dd�dFœ�dG„«       «       �Z’ eJe@�j&                  «       e0«       �dHeYdAedef�dI„«       «       �Z” eJe@�j*                  «      dAef�dJ„«       �Z– eJe@�j.                  «       e0dp¬å«      dAedef�dK„«       «       �Z— eJe@�j0                  «       e0«       dAedef�dL„«       «       �Z˜�dM„ �Z™	 	 	 	 	 �d��dNe�dOe�dej$                  dz  �dej$                  dz  �dPedz  d]edz  �dej$                  dz  d_e�j                  dz  �deZf�dQ„�Zš eJe@�j6                  «       e0«       	 	 	 �dm�dNe�dOe�dPedz  d]edz  d_e�j                  dz  def�dR„«       «       �Zœ eJe@�j:                  g«      	 	 	 	 	 �d��dNej$                  �dOej$                  �dej$                  �dej$                  �dPej$                  dz  d]ej$                  dz  �dej$                  dz  d_e�j                  dz  �deZf�dS„«       �Zž eJe@�j>                  �jJ                  «      �d–�dT„«       �Z  eJe@�jB                  «       e0«       �dUedBeY�dVeZdef�dW„«       «       �Z¢ eJe@�jF                  «       e0«       �d,�dX„«       «       �Z¤ eJe@�jJ                  «       e0«       	 	 	 �d—d[ed=e�dYeY�dZeZ�d[eZdef�d\„«       «       �Z¥ eJe@�jL                  j¦                  «      	 �d˜d<ed|ede   �d]edeY   �d^e[f�d_„«       �Z§�d`„ �Z¨ eJe@�jR                  j¦                  «      	 	 	 	 �d™�da„«       �Zª�db„ �Z« �e¨e@�jX                  «        �e¨e@�jZ                  «        �e¨e@�j\                  «        �e¨e@�j^                  «        �e¨e@�j`                  «        �e¨e@�jb                  «        �e¨e@�jd                  «        �e¨e@�jf                  «        �e¨e@�jh                  «        �e«e@�jj                  «        �e«e@�jl                  «        �e«e@�jn                  «        �e«e@�jp                  «        �e«e@�jr                  «        �e«e@�jt                  «        �e«e@�jv                  «        �e«e@�jx                  «        �e«e@�jz                  «        �e«e@�j|                  «        �e«e@�j~                  «        �e«e@�j€                  «       �dc„ �ZÁ eJe@�j„                  «       e0«       �dd„ «       «       �ZÂ eJe@�j†                  «       e0«       de�deœ�df„«       «       �ZÃ eJe@�jˆ                  «       e0«       de�deœ�dg„«       «       �ZÄ �eÁe@�j„                  «      �ZÅ �eÁe@�j†                  «      �ZÆ �eÁe@�jˆ                  «      �ZÇd dl1Zd d�lÈZd d�lÉZ�dh„ �ZÊ �eÊ«        y(š  é    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_channels_last_strides_forÚ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     úd/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_meta_registrations.pyÚceil_divr:   :   s   € Ø�‰E�A‰I˜!ÑÐó    c                 ó   — | |z   dz
  |z  |z  S )z$Rounds up x to nearest multiple of yr4   r5   ©ÚxÚys     r9   Ú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    €r9   Úregisterz0register_meta.<locals>.wrapper.<locals>.registerG   s   ø€ Ü¤
¨B°Õ3r;   )r   ÚpytreeÚ	tree_map_)rG   rH   rF   s   ` €r9   Úwrapperzregister_meta.<locals>.wrapperD   s)   ù€ Ü  Ó$ˆô	4ô 	×Ñ˜ 2Ô&Øˆ	r;   r5   )rF   rK   s   ` r9   Úregister_metarL   C   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_kindrM   )Úutilsr   r!   r'   r   r   ÚDEFAULT)rM   ÚargsÚ_Úresult_dtyper>   s        r9   Úelementwise_metarU   P   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 rE   )ÚtorchÚ	complex32ÚhalfÚcfloatÚfloatÚcdoubleÚdoubleÚget)ÚdtypeÚfrom_complexs     r9   ÚtoRealValueTypera   d   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 r5   )Úbroadcasted_shapeÚ
self_shapes   €€r9   ú<lambda>z)check_inplace_broadcast.<locals>.<lambda>q   s   ø€ Ð$ Z LÐ0SÐTeÐSfÐg€ r;   )Útupler&   rW   Ú_check)re   Ú
args_shaperd   s   ` @r9   Úcheck_inplace_broadcastrj   m   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 tensorsr5   r5   r;   r9   rf   z(meta_linspace_logspace.<locals>.<lambda>…   ó   � r;   c                   ó   — yrm   r5   r5   r;   r9   rf   z(meta_linspace_logspace.<locals>.<lambda>Š   rn   r;   c              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wrE   )Ú
isinstanceÚcomplex)Ú.0Úargs     r9   ú	<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 r5   )Údefault_complex_dtyper_   s   €€r9   rf   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   €€€r9   rf   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-negativer5   r5   r;   r9   rf   z(meta_linspace_logspace.<locals>.<lambda>¥   rn   r;   Úmeta©r_   ÚlayoutÚdeviceÚ
pin_memoryÚrequires_grad)rq   rW   r   rh   ÚdimÚanyrP   r   Úget_default_dtypeÚis_complex_dtyper_   ÚAssertionErrorr{   Ú_check_typer   Úempty)
r~   r}   r   Úbaser_   r„   rƒ   r…   r†   rw   s
   ``` `    @r9   Úmeta_linspace_logspacer�   u   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   €r9   rf   zmeta_take.<locals>.<lambda>·   s   ø€ ÐDÀUÇ[Á[ÀMÐR€ r;   r   c                   ó   — y)Nz*take(): tried to take from an empty tensorr5   r5   r;   r9   rf   zmeta_take.<locals>.<lambda>¼   rn   r;   )rW   rh   r_   ÚlongÚ_check_indexÚnumelÚ	new_emptyÚshape)Úselfr”   s    `r9   Ú	meta_takerœ   ±   sm   ø€ ô 
‡L�LØ�‰”u—z‘zÑ!ÛRôô
 
×ÑØ�Z‰Z‹\˜QÑÒ5 5§;¡;£=°AÑ#5Ð6Ù<ôð �>‰>˜%Ÿ+™+Ó&Ð&r;   c                 ó,   — t        j                  | «      S rE   ©rW   Ú
empty_like©r›   Ú	generators     r9   Úmeta__standard_gammar¢   Á   ó   € ô ×Ñ˜DÓ!Ð!r;   ÚsrcÚ	embed_dimÚ	num_headsÚ
qkv_weightÚqkv_biasÚproj_weightÚ	proj_biasÚuse_geluÚ
norm_firstÚepsÚnorm_weight_1Únorm_bias_1Únorm_weight_2Únorm_bias_2Úffn_weight_1Ú
ffn_bias_1Úffn_weight_2Ú
ffn_bias_2ÚmaskÚ	mask_typec                 ó    — | j                   rt        d«      ‚| j                  «       dk(  r| j                  «       S t	        j
                  | «      S )NzR_transformer_encoder_layer_fwd fake implementation does not support nested tensorsr   )Ú	is_nestedÚNotImplementedErrorr˜   ÚclonerW   rŸ   )r¤   r¥   r¦   r§   r¨   r©   rª   r«   r¬   r­   r®   r¯   r°   r±   r²   r³   r´   rµ   r¶   r·   s                       r9   Ú#meta__transformer_encoder_layer_fwdr¼   Ç   sH   € ð: ‡}‚}Ü!Ø`ó
ð 	
ð ‡y�yƒ{�aÒØ�y‰y‹{ÐÜ×Ñ˜CÓ Ð 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.r5   r5   r;   r9   rf   zlinalg_cross.<locals>.<lambda>ô   rn   r;   r1   c                  óV   •— d‰ › d‰j                  ‰ «      › d‰j                  ‰ «      › �S )Nzlinalg.cross: inputs dimension z must have length 3. Got ú and ©Úsize)r‡   Úotherr›   s   €€€r9   rf   zlinalg_cross.<locals>.<lambda>ø   s6   ø€ Ø-¨c¨Uð 3Ø—9‘9˜S“>Ð" %¨¯
©
°3«Ð'8ð:ð r;   )ÚndimrW   rh   rÄ   r&   rš   r™   )r›   rÅ   r‡   Úx_dÚy_dÚ	out_shapes   ```   r9   Ú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ÚcheckFloatingOrComplexrW   rŸ   Úcontiguous_format©r›   s    r9   Ú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   )	rW   r�   rš   r„   r_   Úint64r˜   rÆ   Úmaybe_wrap_dim)r›   r‡   rÓ   rÔ   s       r9   Ú	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Æ   rW   rŸ   rÐ   )r›   r‡   s     r9   ÚlogcumsumexprÜ     s+   € ô �3˜Ÿ	™	Ô"Ü×Ñ˜D´×0GÑ0GÔHÐHr;   c                ó$  ‡— |j                   }t        |«      }||z
  }t        t        |«      «      }t        |«      D �	cg c]  }	d‘Œ }
}	|D ]  }d|
|<   Œ	 |D �cg c]
  }|
|   rŒ	|‘Œ }}|t        |«      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 c c}	w )	NFTc                 ó   •— ‰|    S rE   r5   )r>   Úself_stridess    €r9   rf   z_exec_fft.<locals>.<lambda>6  s   ø€ ˜<¨™?€ r;   ©ÚkeyÚreverser½   r   r4   rÌ   )rÆ   ÚlenÚlistÚrangeÚstrideÚsortÚpermuterš   ÚreshaperÄ   Úresize_rW   rÐ   Úas_strided_Ústorage_offset)Úoutr›   Ú	out_sizesr‡   ÚforwardrÆ   Úsignal_ndimÚ
batch_dimsÚdim_permuterS   Úis_transformed_dimÚdÚleftÚ	batch_endÚtmpÚinputÚbatched_sizesÚ
batch_sizeÚbatched_out_sizesÚiÚout_stridesÚbatch_numelrß   s                         @r9   Ú	_exec_fftrÿ   #  sG  ø€ Ø�9‰9€DÜ�c“(€KØ˜Ñ#€Jô ”u˜T“{Ó#€Kä).¨t«Ö5 Aš%Ð5ÐÐ5Øò %ˆØ $Ð˜1Òð%ð #Ö@�!Ð*<¸QÓ*?ŠAÐ@€DÐ@Øœ˜c›Ñ"€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ùòM 6ùò
 Aùò, +s   ¿	HÁ
HÁ%HÅ+	Hr›   r‡   Úexclude_lastc                 óš   ‡— t        |«      }| j                  «       Št        |«      t        |«      z
  }t	        |d | ˆfd„d¬«      |d | |S )Nc                 ó   •— ‰|    S rE   r5   )rü   rß   s    €r9   rf   z_sort_dims.<locals>.<lambda>Y  s   ø€ ¨°a©€ r;   Trà   )rä   ræ   rã   ÚintÚsorted)r›   r‡   r   Úsorted_dimsr}   rß   s        @r9   Ú
_sort_dimsr  T  sS   ø€ Ü�s“)€KØ—;‘;“=€LÜ
ˆkÓ
œS Ó.Ñ
.€CÜØ�D�SÐÓ8À$ô€K��Ðð Ðr;   c                 óú  ‡
— t        j                  | j                  j                  «       |s| j	                  «       S t        | «      dk(  rGt         j                  j                  j                  «       s| j                  | j                  «       «      S | j                  «       }| j                  |«      }t        | «      dk7  rt        | |«      }t        || |||¬«      S t        |«      }| }	 |j                  «       Š
|j                  ˆ
fd„d¬«       t!        t"        t%        |«      «      }|t%        |«      |z
  d  }	t        ||||	|¬«       |d t%        |«      |z
   }|s|S || u r|}| j                  |«      }n||}}Œ’)NÚcpuÚcuda©rï   Tc                 ó   •— ‰|    S rE   r5   ©rü   Ústridess    €r9   rf   zmeta_fft_c2c.<locals>.<lambda>v  s   ø€  w¨q¡z€ r;   rà   )rW   rh   r_   Ú
is_complexr»   Údevice_hintÚbackendsÚmklÚis_availabler™   rÄ   r  rÿ   rä   ræ   rç   ÚminÚcufft_max_ndimrã   )r›   r‡   Únormalizationrï   rî   Úoutputr  Úworking_tensorÚmax_dimsÚ	last_dimsr  s             @r9   Úmeta_fft_c2cr  `  s[  ø€ ô 
‡L�L�—‘×&Ñ&Ô'ÙØ�z‰z‹|Ðä�4Ó˜EÒ!¬%¯.©.×*<Ñ*<×*IÑ*IÔ*KØ�~‰~˜dŸi™i›kÓ*Ð*à—	‘	“€IØ�^‰^˜IÓ&€FÜ�4Ó˜FÒ"Ü   sÓ+ˆÜ˜  y°+ÀwÔOÐOô �s“)€KØ€NØ
Ø ×'Ñ'Ó)ˆØ×ÑÓ1¸4ÐÔ@Ü”~¤s¨;Ó'7Ó8ˆØ¤ KÓ 0°8Ñ ;Ð =Ð>ˆ	ä�&˜.¨)°YÈÕPØ!Ð"?¤C¨Ó$4°xÑ$?Ð@ˆáØˆMà˜TÑ!Ø#ˆNØ—^‘^ IÓ.‰Fà%3°V�NˆFð! r;   c                 óf   — t        | «      t        kD  st        | «      dk\  r| d   dk(  r	| d   dk(  ryy)Né   r   r4   FT)rã   r  r¾   s    r9   Úuse_optimized_cufft_pathr  Š  s3   € Ü
ˆ3ƒx”.Ò ¤S¨£X°¢]°s¸1±vÀ²{ÀsÈ1ÁvÐQRÂ{Øàr;   c                 óf  ‡— 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 t         j&                  j(                  j+                  «       rNt-        | |d¬«      }| j                  |t        j                  | j                  «      ¬«      }	t        |	| ||d¬«      S | j                  |t        j                  | j                  «      ¬«      S )Nr½   r  r4   r	  Úxpur’   Tr
  c                 ó   •— ‰|    S rE   r5   r  s    €r9   rf   zmeta_fft_r2c.<locals>.<lambda>¸  s   ø€  '¨!¡*€ r;   rà   rÌ   )r   )rW   rh   r_   Úis_floating_pointrä   rÄ   r  r™   rP   r   r  rÿ   rã   ræ   rç   r  r  rê   rÐ   r  r  r  r  )r›   r‡   r  ÚonesidedÚinput_sizesrî   Úlast_dimÚlast_dim_halfsizeÚonesided_sizesr  r  Útarget_sizesr  r  r  r  s                  @r9   Úmeta_fft_r2cr(  ‘  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Ø'�àˆä	�‰×	Ñ	×	(Ñ	(Ô	*ä   s¸Ô>ˆØ—‘ØœU×>Ñ>¸t¿z¹zÓJð  ó 
ˆô ˜  y°+ÀtÔLÐLð �~‰~ØœU×>Ñ>¸t¿z¹zÓJð ó 
ð 	
r;   )r¡   c                óB   — t        |t        j                  | g«      «      S rE   )r"   rW   ÚSize)Únr¡   rí   s      r9   Úmeta_randpermr,  Ö  s   € ä˜S¤%§*¡*¨a¨S£/Ó2Ð2r;   ©r_   rƒ   r„   r…   c                ó6   — t        j                  | ||||¬«      S ©Nr-  ©rW   r�   )r+  r_   rƒ   r„   r…   s        r9   Úmeta_randperm_defaultr1  Û  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=r5   ©ÚhighÚlows   €€r9   rf   zmeta_randint.<locals>.<lambda>÷  ó   ø€ ÐLÈSÈEÐQXÐY]ÐX^Ð_€ r;   r-  ©rW   rh   r�   )r6  rÄ   r_   rƒ   r„   r…   r7  s   `     @r9   Úmeta_randintr:  é  s>   ù€ ð €CÜ	‡L�LØˆs‰
Ü_ôô �;‰;Ø�E &°ÀJôð r;   c                ót   ‡ ‡— t        j                  ‰‰ kD  ˆˆ fd„«       t        j                  |||||¬«      S )Nc                  ó   •— d‰› d‰ › �S r4  r5   r5  s   €€r9   rf   z"meta_randint_low.<locals>.<lambda>  r8  r;   r-  r9  )r7  r6  rÄ   r_   rƒ   r„   r…   s   ``     r9   Úmeta_randint_lowr=  þ  s9   ù€ ô 
‡L�LØˆs‰
Ü_ôô �;‰;Ø�E &°ÀJôð r;   c                ó6   — t        j                  | ||||¬«      S r/  r0  )rÄ   r_   rƒ   r„   r…   s        r9   Úmeta_rand_defaultr?    s    € ô �;‰;Ø�E &°ÀJôð r;   c                 ón  ‡ ‡— t        j                  ‰ j                  «       dk\  xr ‰ j                  d   dk(  ˆ fd„«       t        j                  ‰ j                  t         j
                  k(  ˆ fd„«       t        j                  ‰dkD  ˆfd„«       ‰ j                  d d }‰ j                  ‰g|¢d‘­«      S )Nr4   r½   r  c                  ó"   •— d‰ j                   › �S )Nz>_philox_key_split: key must have shape (*batch, 2), got shape ©rš   ©rá   s   €r9   rf   z'meta_philox_key_split.<locals>.<lambda>  s   ø€ ÐPÐQT×QZÑQZÐP[Ð\€ r;   c                  ó"   •— d‰ j                   › �S )Nz3_philox_key_split: key must have dtype uint64, got r’   rC  s   €r9   rf   z'meta_philox_key_split.<locals>.<lambda>#  s   ø€ ÐEÀcÇiÁiÀ[ÐQ€ r;   r   c                  ó   •— d‰ › �S )Nz4_philox_key_split: num_splits must be positive, got r5   )Ú
num_splitss   €r9   rf   z'meta_philox_key_split.<locals>.<lambda>'  s   ø€ ÐFÀzÀlÐS€ r;   )rW   rh   r‡   rš   r_   Úuint64r™   )rá   rF  Úbatch_sizess   `` r9   Úmeta_philox_key_splitrI    s—   ù€ ä	‡L�LØ�‰‹	�Q‰Ò-˜3Ÿ9™9 R™=¨AÑ-Û\ôô 
‡L�LØ�	‰	”U—\‘\Ñ!ÛQôô 
‡L�LØ�Q‰ÛSôð —)‘)˜C˜R�.€KØ�=‰=˜*Ð6 {Ð6°AÑ6Ó7Ð7r;   c                 ó  ‡ — t        j                  ‰ j                  «       dk\  xr ‰ j                  d   dk(  ˆ fd„«       t        j                  ‰ j                  t         j
                  k(  ˆ fd„«       t        j                  ‰ «      S )Nr4   r½   r  c                  ó"   •— d‰ j                   › �S )Nz@_philox_key_fold_in: key must have shape (*batch, 2), got shape rB  rC  s   €r9   rf   z)meta_philox_key_fold_in.<locals>.<lambda>1  s   ø€ ÐRÐSV×S\ÑS\ÐR]Ð^€ r;   c                  ó"   •— d‰ j                   › �S )Nz5_philox_key_fold_in: key must have dtype uint64, got r’   rC  s   €r9   rf   z)meta_philox_key_fold_in.<locals>.<lambda>5  s   ø€ ÐGÈÏ	É	À{ÐS€ r;   )rW   rh   r‡   rš   r_   rG  rŸ   )rá   Údatas   ` r9   Úmeta_philox_key_fold_inrN  -  se   ø€ ä	‡L�LØ�‰‹	�Q‰Ò-˜3Ÿ9™9 R™=¨AÑ-Û^ôô 
‡L�LØ�	‰	”U—\‘\Ñ!ÛSôô ×Ñ˜CÓ Ð r;   c           	      ó  ‡ ‡‡‡— t        j                  ‰j                  j                  ˆ ˆfd„«       t        j                  ‰j                  t         j                  k(  ˆˆ fd„«       t        j                  ‰j
                  ‰j
                  k(  ˆˆ ˆfd„«       t        j                  ‰j                  «       dk\  xr ‰j                  d   dk(  ˆˆ fd„«       ‰j                  «       dkD  ršt        j                  ‰j                  «       ‰j                  «       dz   k(  ˆˆ ˆfd„«       ‰j                  d ‰j                  «        Št        j                  t        d	„ t        ‰‰j                  «      D «       «      ˆˆ ˆfd
„«       y y )Nc                  ó&   •— ‰ › d‰j                   › �S )Nz,: self must be a floating point tensor, got r’   )Úop_namer›   s   €€r9   rf   z1_check_philox_distribution_args.<locals>.<lambda>=  s   ø€ �7�)ÐGÈÏ
É
À|ÐT€ r;   c                  ó&   •— ‰› d‰ j                   › �S )Nz": key must have dtype uint64, got r’   ©rá   rQ  s   €€r9   rf   z1_check_philox_distribution_args.<locals>.<lambda>A  s   ø€ �7�)Ð=¸c¿i¹i¸[ÐI€ r;   c                  ó@   •— ‰› d‰j                   › d‰ j                   › �S )Nz/: self and key must be on the same device, got rÂ   ©r„   ©rá   rQ  r›   s   €€€r9   rf   z1_check_philox_distribution_args.<locals>.<lambda>E  s*   ø€ Øˆið Ø—;‘;�-˜u S§Z¡Z Lð2ð r;   r4   r½   r  c                  ó&   •— ‰› d‰ j                   › �S )Nz5: key must have shape (2,) or (*batch, 2), got shape rB  rS  s   €€r9   rf   z1_check_philox_distribution_args.<locals>.<lambda>L  s   ø€ ØˆiÐLÈSÏYÉYÈKÐXð r;   c                  ó@   •— ‰› d‰ j                   › d‰j                   › �S )Nz?: batched key must have ndim == output ndim + 1, got key shape z with output shape rB  rV  s   €€€r9   rf   z1_check_philox_distribution_args.<locals>.<lambda>S  s,   ø€ Ø�)ð !Ø!$§¡ Ð+>¸t¿z¹z¸lðLð r;   c              3   ó:   K  — | ]  \  }}|d k(  xs ||k(  –— Œ y­w©r4   Nr5   )rs   ÚksÚsss      r9   ru   z2_check_philox_distribution_args.<locals>.<genexpr>Z  s$   è ø€ ÒM©¨¨B��a‘Ò#˜2 ™8Ó#ÑMùs   ‚c                  ó>   •— ‰› dt        ‰ «      › d‰j                  › �S )Nz: key batch shape z( is not broadcastable with output shape ©rä   rš   )Ú	key_batchrQ  r›   s   €€€r9   rf   z1_check_philox_distribution_args.<locals>.<lambda>[  s-   ø€ Ø�)Ð-¬d°9«oÐ->ð ?:Ø:>¿*¹*¸ðGð r;   )
rW   rh   r_   r!  rG  r„   r‡   rš   ÚallÚzip)rQ  r›   rá   r_  s   ```@r9   Ú_check_philox_distribution_argsrb  :  s  û€ Ü	‡L�LØ�
‰
×$Ñ$ÜTôô 
‡L�LØ�	‰	”U—\‘\Ñ!ÜIôô 
‡L�LØ�‰�s—z‘zÑ!õ	
ôô 
‡L�LØ�‰‹	�Q‰Ò-˜3Ÿ9™9 R™=¨AÑ-ô	
ôð ‡w�wƒy�1‚}Ü�‰Ø�G‰G‹I˜Ÿ™› a™Ñ'õô	
ð —I‘I˜l §¡£
Ð+ˆ	Ü�‰ÜÑM´#°iÀÇÁÓ2LÔMÓMõõ	
ð r;   c                 ó    — t        d| |«       | S )NÚ_philox_normal_©rb  )r›   rá   ÚmeanÚstds       r9   Úmeta_philox_normal_rh  b  s   € ä#Ð$5°t¸SÔAØ€Kr;   c                 ó    — t        d| |«       | S )NÚ_philox_uniform_re  )r›   rá   r7  r6  s       r9   Úmeta_philox_uniform_rk  h  s   € ä#Ð$6¸¸cÔBØ€Kr;   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d¬«      }n | j                  t         j                  ¬«      }t        ||||d   gd¬«      S t         j                  j                   j#                  «       r€| }t        |«      dkD  r|d d }t        | ||d¬«      }|dd  }t        |j                  «       «      }|||d   <   | j                  |t        | j                  «      ¬«      }	t        |	|||d¬«      S t        | j                  «       «      }|||d   <   | j                  |t        | j                  «      ¬«      S )	Nr	  r½   r’   rÌ   Fr
  r4   r   )rW   rh   r_   r  r  rä   rÄ   r™   ra   r  rÿ   r»   rÐ   rã   r  r  r  r  )
r›   r‡   r  rl  rî   r  Útemprø   Úc2c_dimsrí   s
             r9   Úmeta_fft_c2rrp  n  s»  € ô 
‡L�L�—‘×&Ñ&Ô'ä�4Ó˜FÒ"Ü˜Ÿ™›Ó%ˆ	Ø$ˆ	�#�b‘'Ñà—‘ 	´ÀÇÁÓ1L�ÓMˆä# CÔ(ÜØØ—
‘
¬×)@Ñ)@�
ÓAØØØôð ô �3‹x˜!Š|Ü# D¨#¨c¨r¨(°A¸uÔE‘à—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ÐCô ˜Ÿ™›Ó%ˆ	Ø$ˆ	�#�b‘'ÑØ�~‰~˜i¬¸t¿z¹zÓ/Jˆ~ÓKÐKr;   c                 ó  — ddl m}  || «      s#t        j                  | «      dk(  rt	        d«      ‚t        |t        «      r@|j                  | |«      }t        j                  j                  || j                  «       «       | S )Nr   ©Úfree_unbacked_symbolsr4   zQmore than one element of the written-to tensor refers to a single memory location)Ú%torch.fx.experimental.symbolic_shapesrs  rW   Ú_debug_has_internal_overlapÚRuntimeErrorrq   r   ÚtoÚ_refsÚexpandrÄ   )r›   r¤   Únon_blockingrs  Úintermediates        r9   Ú
meta_copy_r|  �  sr   € õ Lñ " $Ô'¬E×,MÑ,MÈdÓ,SÐWXÒ,XäØ_ó
ð 	
ô �#”vÔØ—v‘v˜d LÓ1ˆô 	�‰×Ñ˜<¨¯©«Ô5Ø€Kr;   c                 óö   — t        | j                  «       «      }t        | j                  «       «      }|| j                  «       k\  rdn
||   ||   z  }|j	                  |d«       |j	                  ||«       ||fS r3   )rä   rÄ   ræ   r‡   Úinsert)Útensorr‡   Úresult_sizesÚresult_stridesÚ
new_strides        r9   ÚinferUnsqueezeGeometryrƒ  »  sq   € Ü˜Ÿ™›Ó&€LÜ˜&Ÿ-™-›/Ó*€Nà˜VŸZ™Z›\Ò)‘¨|¸CÑ/@À>ÐRUÑCVÑ/V€Jà×Ñ˜˜QÔà×Ñ˜#˜zÔ*Ø˜Ð'Ð'r;   c                 ó‚   — t        || j                  «       dz   «      }t        | |«      \  }}| j                  ||«       | S r3   )rØ   r‡   rƒ  rë   )r›   r‡   Úg_sizesÚ	g_stridess       r9   Úmeta_unsqueeze_r‡  Ç  s>   € ä
˜˜dŸh™h›j¨1™nÓ
-€CÜ/°°cÓ:Ñ€GˆYØ×Ñ�W˜iÔ(Ø€Kr;   rø   ÚweightÚ_metaÚbiasÚ_activation_optÚ	out_dtypec                 ó(  — 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|¬«      }|S )Nr   z%output size mismatch: weight.size(0)=ú != bias.size(0)=r4   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_   rW   Úint8Úint32Únew_empty_strided)	rø   rˆ  r‰  rŠ  r‹  rŒ  Úoutput_sizesÚtransposed_stridesr  s	            r9   Úmeta_sparse_structured_linearr–  Ï  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ð %ó €Fð €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 r4   r   úmat1.size(1)=ú != mat2.size(0)/2=úJout_dtype is only supported for i8i8->i32 linear operator, got mat2.dtype=r�  r’   ©	rã   rš   r‹   rÄ   r_   rW   r‘  r’  r™   )r—  r˜  r™  rŒ  r”  r  s         r9   Úmeta_sparse_structured_mmr£  ü  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;   r4   )Ú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 )Nr4   zKonly input broadcasted to columns of mat1 * mat2 product is supported, got r�  r  r›  rœ  r�  rž  r   zUonly input broadcasted to columns of mat1 * mat2 product is supported, input.size(0)=z != mat1.size(0)=rŸ  r   r¡  r�  r’   r¢  )	rø   r—  r˜  r™  r¤  r¥  rŒ  r”  r  s	            r9   Úmeta_sparse_structured_addmmr§    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_Br¤  Ú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 }	|j                  d«      }
| j                  d«      }|�4||j                  d«      k7  r t        d	|› d
|j                  d«      › �«      ‚|�z|	rO|t        j                  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 rœ  r4   r   zbias size mismatch: m=rŽ  zout_dtype is not supported for ú x z -> z matmul!r’   )r_   rW   Úfloat32Úfloat16Úbfloat16r‘  Úfloat8_e4m3fnr‹   rã   rš   rÄ   r’  r™   )r¨  r©  rŠ  r¤  rŒ  rª  r«  r¬  r­  Úis_8bit_input_typer+  ÚmÚoutput_shapes                r9   Úmeta__cslt_sparse_mmr·  I  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‹€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Úreducer¸  c                óL   — t        j                  | t         j                  ¬«      S rÛ   ©rW   rŸ   rÐ   ©r›   r‡   r”   r¹  rº  r¸  s         r9   Úmeta_index_reducer¾  …  s   € ô ×Ñ˜D´×0GÑ0GÔHÐHr;   c                ó   — | S rE   r5   r½  s         r9   Úmeta_index_reduce_rÀ  ’  s	   € ð €Kr;   c                 ó¢   — t        | j                  «       «      }| j                  «       dkD  r|j                  «       ||<   | j	                  |«      S ©Nr   )rä   rÄ   r‡   r˜   r™   )r›   r‡   r”   Úresult_sizes       r9   Úmeta_index_selectrÄ     s@   € ô �t—y‘y“{Ó#€KØ‡x�xƒz�A‚~Ø Ÿ;™;›=ˆ�CÑØ�>‰>˜+Ó&Ð&r;   )ÚlengthsrÔ   ÚoffsetsÚaxisÚunsafeÚinitialrM  rÅ  rÆ  rÇ  rÈ  c                ó¤   ‡ ‡— |�t        d«      ‚ˆˆ fd„}|� ||j                  ‰   «      S |� ||j                  ‰   dz
  «      S t        d«      ‚)Nz?segment_reduce(): indices based reduction is not supported yet.c                 óš   •— t        ‰j                  «      }| |‰<   t        j                  |‰j                  dt        j
                  ¬«      S )Nr�   ©r_   r„   rÍ   )rä   rš   rW   r�   r_   rÐ   )Úsegment_countr¶  rÇ  rM  s     €€r9   Úsegment_reduce_outputz2meta_segment_reduce.<locals>.segment_reduce_outputº  sB   ø€ Ü˜DŸJ™JÓ'ˆØ*ˆ�TÑÜ�{‰{ØØ—*‘*ØÜ×1Ñ1ô	
ð 	
r;   r4   z<segment_reduce(): Either lengths or offsets must be defined.)rº   rš   rv  )	rM  rº  rÅ  rÔ   rÆ  rÇ  rÈ  rÉ  rÎ  s	   `    `   r9   Úmeta_segment_reducerÏ  ©  si   ù€ ð ÐÜ!ØMó
ð 	
õ
ð ÐÙ$ W§]¡]°4Ñ%8Ó9Ð9ð ÐÙ$ W§]¡]°4Ñ%8¸1Ñ%<Ó=Ð=Ü
ÐUÓ
VÐVr;   c                 ó$   — | j                  d«      S ©Nr5   ©r™   rÑ   s    r9   Úmeta_maxrÓ  Í  ó   € ð �>‰>˜"ÓÐr;   c                 óÂ   — t        j                  | j                  |f«      }t        | ||«      }| j	                  |«      | j	                  |t
        j                  ¬«      fS ©Nr’   ©rP   Úreduction_dimsrš   Ú_compute_reduction_shaper™   rW   r–   ©r›   r‡   Úkeepdimr¶  s       r9   Ú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    r9   Úmeta_minrß  Ý  rÔ  r;   c                 óÂ   — t        j                  | j                  |f«      }t        | ||«      }| j	                  |«      | j	                  |t
        j                  ¬«      fS rÖ  r×  rÚ  s       r9   Úmeta_min_dimrá  ã  rÝ  r;   c                 ó¸   — | j                  «       rt        | j                  «      }nt        | t        j
                  ¬«      \  }}t        j                  | |¬«      S ©N©rO   r’   )r  r   r_   r   r   ÚINT_TO_FLOATrW   rŸ   )r›   rT   rS   s      r9   Ú
meta_angleræ  í  sI   € à‡�ÔÜ/°·
±
Ó;‰ä,ØÜ ?× LÑ Lô
‰ˆˆ<ô ×Ñ˜D¨Ô5Ð5r;   c                 ó¨   — t        j                  || j                  «       | j                  «       |j	                  t        j
                  | «      «      S rE   )rW   Ú_resize_output_rÄ   r„   Úcopy_Úangle)r›   rí   s     r9   Úmeta_angle_outrë  ù  s6   € ä	×Ñ˜#˜tŸy™y›{¨D¯K©KÔ8Ø�9‰9”U—[‘[ Ó&Ó'Ð'r;   c                  ó   — y rE   r5   ©Úvals    r9   Úassert_asyncrï  ÿ  ó   € à
r;   c                  ó   — y rE   r5   )rî  Ú
assert_msgs     r9   Úassert_async_metaró    rð  r;   c                  ó   — y rE   r5   )Úss    r9   Ú
print_metarö  	  rð  r;   ©r_   rƒ   r„   r…   rÍ   c                 ó0   — t        j                  dd¬«      S )Nr5   r�   rU  r0  r÷  s        r9   Úmake_dep_tokenrù    s   € ô �;‰;�r &Ô)Ð)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)rt  rû  rq   r
   r	   Ú
ValueError)rÄ   r  rþ  rû  s       r9   Úsym_constrain_ranger     s/   € õ Fä�$œ¤7Ð+Ô,ÜÐBÓCÐCÙ�D˜c sÖ+r;   c                 ó6   — t         j                  | ||¬«       |S ©Nrý  )r.   r   ©rÄ   r  rþ  Ú	dep_tokens       r9   Ú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ý  )
rt  r  rW   rh   rq   r
   r	   rÿ  r{   r  )rÄ   r  rþ  r  s       r9   Ú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       r9   Ú'functional_sym_constrain_range_for_sizer
  >  s   € ä×%Ñ% d°¸Ð%Ô=ØÐr;   c                 ó   — |S rE   r5   )rî  rò  r  s      r9   Úfunctional_assert_async_metar  D  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   €€r9   rf   z#squareCheckInputs.<locals>.<lambda>R  s1   ø€ �6�(ð ØŸ	™	 "›� d¨4¯9©9°R«=¨/¸ðD€ r;   )r‡   r‹   rW   rh   rÄ   )r›   r  s   ``r9   rÎ   rÎ   J  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.rU  ©r  r›   s   €€r9   rf   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   €€r9   rf   z(linearSolveCheckInputs.<locals>.<lambda>e  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   €r9   rf   z(linearSolveCheckInputs.<locals>.<lambda>m  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   €€€r9   rf   z(linearSolveCheckInputs.<locals>.<lambda>u  sR   ø€ Ø,¨T¨Fð 3ØŸ™ ›˜ D¨¯©°«¨Ø$ T§Y¡Y¨r£] O°4¸¿	¹	À"»°ðHð r;   )rW   rh   r„   r_   rÄ   )r›   r  r  s   ```r9   ÚlinearSolveCheckInputsr  Z  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 r5   ©r_   r  s   €€r9   rf   z(checkFloatingOrComplex.<locals>.<lambda>†  s   ø€ �6�(ÐVÐW\ÐV]Ð^€ r;   c                  ó   •— ‰› d‰ › �S )Nz*: Low precision dtypes not supported. Got r5   r"  s   €€r9   rf   z(checkFloatingOrComplex.<locals>.<lambda>‹  s   ø€ �v�hÐHÈÈÐP€ r;   )	r_   rW   rh   r!  r  r[   r]   rZ   r\   )r  r  r  r_   s    ` @r9   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.r5   )r$  r  s   €€r9   rf   zcheckIsMatrix.<locals>.<lambda>“  s   ø€ �6�(Ð-¨h¨ZÐ7XÐY€ r;   )rW   rh   r‡   )r  r  r$  s    ``r9   Ú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Â   rz   rÃ   )r  r(  r  rõ   s   €€€€r9   rf   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'  rW   rh   rÄ   )r  r(  rõ   r  s   ````r9   Ú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 rU  )r-  rø   r,  r.  s   €€€€r9   rf   z!checkSameDevice.<locals>.<lambda>¬  s5   ø€ Øˆi�{ ; -Ð/dØˆm˜4 §¡˜¨n¸U¿\¹\¸NðLð r;   )rW   rh   r„   )r-  r,  rø   r.  s   ````r9   ÚcheckSameDevicer1  ¤  s&   û€ ô 
‡L�LØ�‰˜Ÿ™Ñ%ö	
õr;   ÚUPLOc                 óŒ   ‡ — ‰ j                  «       }t        j                  t        ‰ «      dk(  xr |dk(  xs |dk(  ˆ fd„«       y )Nr4   ÚUÚLc                  ó   •— d‰ › �S )Nz1Expected UPLO argument to be 'L' or 'U', but got r5   )r2  s   €r9   rf   zcheckUplo.<locals>.<lambda>·  s   ø€ ÐCÀDÀ6ÐJ€ r;   )ÚupperrW   rh   rã   )r2  ÚUPLO_uppercases   ` r9   Ú	checkUplor9  ³  s<   ø€ Ø—Z‘Z“\€NÜ	‡L�LÜˆD‹	�Q‰ÒK˜N¨cÑ1ÒJ°^ÀsÑ5JÛJõr;   ÚeigenvaluesÚeigenvectorsr5  Ú	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Î   r9  rä   rš   r™   rë   r   Úpopra   r_   )r  r2  r<  rš   ÚvecsÚvalss         r9   Úmeta__linalg_eighrC  »  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Î   rP   rŠ   r_   r   r™   rš   )rø   Úcomplex_dtypes     r9   Úmeta__linalg_eigvalsrF  Î  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Î   rP   rŠ   r_   r   r™   rš   r  rë   r   )rø   rE  rÓ   ÚvectorsÚis_cudas        r9   Úmeta_linalg_eigrJ  Ú  s·   € ô �e˜\Ô*ô ×!Ñ! %§+¡+Ô.ð 	�Šä×.Ñ.¨u¯{©{Ó;ð ð
 �_‰_˜UŸ[™[¨¨"Ð-°]ˆ_ÓC€FØ�o‰o˜eŸk™k°ˆoÓ?€Gô ˜%Ó  FÑ*€GØ×ÑØ�‰Ô0°·±ÈÔPôð �7ˆ?Ðr;   c                 óv   — | j                   j                  t        j                  ¬«      j	                  dd«      S )NrÌ   r  r½   )ÚmTr»   rW   rÐ   Ú	transpose)r¤   s    r9   ÚcloneBatchedColumnMajorrN  ï  s*   € Ø�6‰6�<‰<¤e×&=Ñ&=ˆ<Ó>×HÑHÈÈRÓPÐPr;   r7  c                 ó   — t        | «      S rE   )rN  )r›   r  r7  s      r9   Ú_cholesky_solve_helperrP  ó  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   €r9   rf   z cholesky_solve.<locals>.<lambda>þ  s   ø€ Ð?ÀÇ	Á	¸{ÐJ]Ð^€ r;   c                  ó$   •— d‰ j                   › d�S )Nz-u should have at least 2 dimensions, but has rS  rT  r  s   €r9   rf   z cholesky_solve.<locals>.<lambda>  s   ø€ Ð?ÀÇÁ¸xÐGZÐ[€ r;   Úcholesky_solve)rW   rh   rÆ   Ú!_linalg_broadcast_batch_dims_namerP  )r›   r  r7  Úself_broadcastedÚA_broadcasteds   ``   r9   rV  rV  ù  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˜   rW   rŸ   Úlegacy_contiguous_formatrÎ   rN  ©r›   r7  s     r9   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Î   rN  r]  s     r9   r_  r_    s   € ô �dÐ.Ô/Ü" 4Ó(Ð(r;   Úcheck_errorsc                 ó  — t        | d«       t        | d«       | j                  }t        |«      }t	        |d«      }| j                  |«      }|j                  ||«       | j                  |d|dz
   t        j                  ¬«      }||fS )Nzlinalg.choleskyFr   r  r’   )	rÎ   rÏ   rš   rã   r   r™   rë   rW   r’  )r  r7  r`  ÚA_shaperÆ   Ú	L_stridesr5  Úinfoss           r9   Úlinalg_cholesky_exre    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.r5   r5   r;   r9   rf   z,linalg_householder_product.<locals>.<lambda>4  rn   r;   r  r½   c                   ó   — y)Nzbtorch.linalg.householder_product: input.shape[-2] must be greater than or equal to input.shape[-1]r5   r5   r;   r9   rf   z,linalg_householder_product.<locals>.<lambda>8  rn   r;   c                   ó   — y)Nz`torch.linalg.householder_product: input.shape[-1] must be greater than or equal to tau.shape[-1]r5   r5   r;   r9   rf   z,linalg_householder_product.<locals>.<lambda><  rn   r;   r4   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 rT  ©rø   rf  s   €€r9   rf   z,linalg_householder_product.<locals>.<lambda>A  ó'   ø€ ð)Ø),¯©¨
Ð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 r5   ©Úactual_batch_tau_shapes   €r9   rf   z,linalg_householder_product.<locals>.<lambda>K  ó   ø€ ð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’   rm  s   €€r9   rf   z,linalg_householder_product.<locals>.<lambda>S  s#   ø€ Ø:¸3¿9¹9¸+Ø*¨5¯;©;¨-ð9ð r;   z torch.linalg.householder_productrf  Fr>  ©rÄ   ræ   r_   r„   )
rW   rh   rÆ   rÄ   rš   r_   r1  Úempty_stridedr   r„   )rø   rf  Úexpected_batch_tau_shaperq  s   `` @r9   Úlinalg_householder_productrw  -  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   rW   r’  )r  r`  r5  rd  s       r9   Úlinalg_inv_ex_metarz  c  sq   € ä�a˜Ô)Ü˜1˜oÈ%ÕPà	�‰�A—G‘GÓ€AØ‡M�M�!—'‘'Ô6°q·w±wÈ%ÔPÔQà�K‰K˜Ÿ™  ˜¬E¯K©KˆKÓ8€EØˆeˆ8€Or;   ÚLDÚpivotsÚinfo)Ú	hermitianr`  r~  c                óŒ  — t        | d«       t        | d«       t        j                  | j                  t        | j                  d¬«      | j                  | j                  ¬«      }| j                  | j                  d d t        j                  ¬«      }| j                  | j                  d d t        j                  ¬«      }|||fS )Nztorch.linalg.ldl_factor_exFr>  rt  r½   r’   r  )
rÎ   rÏ   rW   ru  rš   r   r_   r„   r™   r  )r›   r~  r`  r{  r|  r}  s         r9   Úlinalg_ldl_factor_ex_metar€  o  sœ   € ô �dÐ8Ô9Ü˜4Ð!=Ô>Ü	×	Ñ	Ø�Z‰ZÜ*¨4¯:©:ÀÔGØ�j‰jØ�{‰{ô	
€Bð �^‰^˜DŸJ™J s¨˜O´5·9±9ˆ^Ó=€FØ�>‰>˜$Ÿ*™* S b˜/´·±ˆ>Ó;€DØˆv�tÐÐr;   )r~  c                ód  ‡ ‡‡— t        ‰ d«       t        ‰ d«       t        ‰‰ d«       t        j                  ‰j
                  dk\  ˆfd„«       ‰ j                  d d }t        j                  |‰j                  k(  ˆfd„«       t        j                  t        j                  ‰j                  «      ˆfd„«       t        j                  ‰ j                  ‰j                  k(  ˆˆ fd„«       t        ‰‰ «      \  }}t        j                  |t        |d¬	«      ‰j                  ‰j                  ¬
«      S )Nztorch.linalg.ldl_solver  c                  ó$   •— d‰ j                   › d�S )NzMtorch.linalg.ldl_solve: Expected B to have at least 2 dimensions, but it has rS  rT  )r(  s   €r9   rf   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 ú insteadrB  ©r|  s   €r9   rf   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   €r9   rf   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   €€r9   rf   z'linalg_ldl_solve_meta.<locals>.<lambda>¥  s"   ø€ Ð3°B·H±H°:Ð=UÐVW×V]ÑV]ÐU^Ð_€ r;   Fr>  rt  )rÎ   rÏ   r  rW   rh   rÆ   rš   rP   Úis_integer_dtyper_   Ú_linalg_broadcast_batch_dimsru  r   r„   )r{  r|  r(  r~  Úexpected_pivots_shapeÚB_broadcast_sizerS   s   ```    r9   Úlinalg_ldl_solve_metarŽ  „  sú   ú€ ô �bÐ2Ô3Ü˜2Ð7Ô8Ü˜1˜bÐ":Ô;Ü	‡L�LØ	�‰�!‰ó	
ôð ŸH™H S b˜MÐÜ	‡L�LØ §¡Ñ-ó	
ôô 
‡L�LÜ×Ñ˜vŸ|™|Ó,Û]ôô 
‡L�LØ
�‰�A—G‘GÑÜ_ôô 7°q¸"Ó=ÑÐ�aÜ×ÑØÜ*Ð+;ÀuÔMØ�g‰gØ�x‰xô	ð r;   ÚPr4  )Úpivotr�  c                óh  ‡ — t        j                  ‰ j                  dk\  ˆ fd„«       t        ‰ j                  «      }|d   }|d   }t        ||«      }||d<   |r‰ j                  |«      }n‰ j                  dg«      }||d<   ‰ j                  |«      }||d<   ||d<   ‰ j                  |«      }|||fS )Nr  c                  ó$   •— d‰ j                   › d�S )Nz@linalg.lu: Expected tensor with 2 or more dimensions. Got size: r…  rB  r  s   €r9   rf   z linalg_lu_meta.<locals>.<lambda>µ  s   ø€ ÐRÐST×SZÑSZÐR[Ð[cÐd€ r;   r  r½   r   )rW   rh   rÆ   rä   rš   r   r™   )	r  r�  Úsizesrµ  r+  Úkr�  r5  r4  s	   `        r9   Úlinalg_lu_metar•  °  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)r�  r`  c                óê  ‡ — t        j                  ‰ j                  dk\  ˆ fd„«       t        ‰ j                  «      }|d   }|d   }t        j
                  |t        |d¬«      ‰ j                  ‰ j                  ¬«      }|j                  «        t        ||«      |d<   ‰ j                  |t         j                  ¬«      }|j                  «        ‰ j                  |t         j                  ¬«      }|||fS )	Nr  c                  ó$   •— d‰ j                   › d�S )NzFtorch.lu_factor: Expected tensor with 2 or more dimensions. Got size: r…  rB  r  s   €r9   rf   z*linalg_lu_factor_ex_meta.<locals>.<lambda>×  s   ø€ ÐXÐYZ×Y`ÑY`ÐXaÐaiÐj€ r;   r  r½   Fr>  rt  r’   )rW   rh   rÆ   rä   rš   ru  r   r_   r„   r@  r   r™   r  )	r  r�  r`  r“  rµ  r+  r–  r|  r}  s	   `        r9   Úlinalg_lu_factor_ex_metar™  Í  sÉ   ø€ ô 
‡L�LØ	�‰�!‰Ûjôô
 �—‘‹M€EØˆb‰	€AØˆb‰	€Aä	×	Ñ	ØÜ*¨5¸EÔBØ�g‰gØ�x‰xô	
€Bð 
‡I�I„Kä˜˜1“€Eˆ"�IØ�[‰[˜¤e§i¡iˆ[Ó0€Fð 
‡I�I„KØ�;‰;�u¤E§I¡Iˆ;Ó.€Dàˆv�tÐÐr;   )rõ   Úadjointrš  c                óî  ‡ ‡‡— t        ‰ d«       t        j                  ‰ j                  ‰j                  k(  ˆˆ fd„«       t        j                  ‰j                  t        j                  k(  d„ «       t        ‰ d«       t        ‰ ‰|d«       t        j                  ‰ j                  d«      ‰j                  d«      k(  d„ «       t        j                  ‰ j                  d d ‰j                  k(  ˆfd„«       t        ‰‰ «      \  }}t        j                  |t        || ¬«      ‰j                  ‰j                  ¬	«      }|j                  «       d
k7  r"|s |j                  «       r|j                  «       }|S )Nztorch.linalg.lu_solvec                  ó>   •— d‰j                   › d‰ j                   › d�S )NzPlinalg.lu_solve: Expected LU and B to have the same dtype, but found LU of type ú and B of type r…  r’   )r(  r–  s   €€r9   rf   z&linalg_lu_solve_meta.<locals>.<lambda>   s(   ø€ ð$Ø$&§H¡H :¨_¸Q¿W¹W¸IÀXðOð r;   c                   ó   — y)NzElinalg.lu_solve: pivots should be a Tensor of scalar type torch.int32r5   r5   r;   r9   rf   z&linalg_lu_solve_meta.<locals>.<lambda>  rn   r;   zlinalg.lu_solver½   c                   ó   — y)NzYlinalg.lu_solve: Number of pivots per batch should be same as the dimension of the matrixr5   r5   r;   r9   rf   z&linalg_lu_solve_meta.<locals>.<lambda>  rn   r;   c                  ó$   •— d‰ j                   › d�S )Nzclinalg.lu_solve: Expected LU.shape[:-1] and pivots.shape to be the same, but got pivots with shape r…  rB  r†  s   €r9   rf   z&linalg_lu_solve_meta.<locals>.<lambda>  r‡  r;   r>  rt  r   )rÏ   rW   rh   r_   r  rÎ   r+  rÄ   rš   r‹  ru  r   r„   r˜   r  Úconj)r–  r|  r(  rõ   rš  r�  rS   r,  s   ```     r9   Úlinalg_lu_solve_metar¢  ò  s.  ú€ ô ˜2Ð6Ô7Ü	‡L�LØ
�‰�A—G‘GÑô	
ôô 
‡L�LØ�‰œŸ	™	Ñ!ÙWôô �bÐ1Ô2Ü�b˜!˜TÐ#4Ô5Ü	‡L�LØ
�‰�‹�v—{‘{ 2“Ñ&Ùkôô 
‡L�LØ
�‰��"ˆ˜Ÿ™Ñ%ó	
ôô 7°q¸"Ó=ÑÐ�aä× Ñ ØÜ*Ð+;È4ÀxÔPØ�g‰gØ�x‰xô	€Fð ‡|�|ƒ~˜Ò¡4Ø×ÑÔØ—[‘[“]ˆFà€Mr;   Úunpack_dataÚunpack_pivotsc                 ó  ‡ — t        j                  ‰ j                  dk\  ˆ fd„«       |r2t        j                  |j                  t         j                  k(  d„ «       t        ‰ j                  «      }|d   }|d   }t        ||«      }||d<   |r‰ j                  |«      }n‰ j                  dg«      }|r2||d<   ‰ j                  |«      }	||d<   ||d<   ‰ j                  |«      }
n$‰ j                  dg«      }	‰ j                  dg«      }
||	|
fS )Nr  c                  ó$   •— d‰ j                   › d�S )NzFtorch.lu_unpack: Expected tensor with 2 or more dimensions. Got size: r…  rB  )r–  s   €r9   rf   z lu_unpack_meta.<locals>.<lambda>5  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_factorr5   r5   r;   r9   rf   z lu_unpack_meta.<locals>.<lambda>:  s   € ðpð r;   r  r½   r   )	rW   rh   rÆ   r_   r’  rä   rš   r   r™   )r–  r|  r£  r¤  r“  rµ  r+  r”  r�  r5  r4  s   `          r9   Úlu_unpack_metar¨  +  s   ø€ ô 
‡L�LØ
�‰�1‰Ûkôñ Ü�‰Ø�L‰LœEŸK™KÑ'ñô	
ô �—‘‹N€EØˆb‰	€AØˆb‰	€AÜ��1‹€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'r5   )r©  s   €r9   rf   z _parse_qr_mode.<locals>.<lambda>b  s   ø€ Ø1°$°ð 8Nð Oð r;   ©rW   rh   )r©  Ú	compute_qr«  s   `  r9   Ú_parse_qr_moder±  U  s†   ø€ ØˆyÒØˆ	Øˆð �gÐÐð 
�Ò	Øˆ	Øˆð �gÐÐð 
�ŠØˆ	Øˆð �gÐÐô 	�‰Øóô	
ð �gÐÐr;   ÚQÚRc                 ó  — t        | d«       t        | d«       t        |«      \  }}| j                  d   }| j                  d   }t	        ||«      }|rMt        | j                  «      }|r|n||d<   | j                  |«      }|j                  |t        |d¬«      «       n| j                  dg«      }t        | j                  «      }	|s|s|n||	d<   | j                  |	«      }
|
j                  |	t        |	d¬«      «       ||
fS )Nz	linalg.qrr  r½   Fr>  r   )	r'  rÏ   r±  rš   r   rä   r™   rë   r   )r  r©  r°  Úreduced_moderµ  r+  r”  ÚQ_shaper²  ÚR_shaper³  s              r9   Úlinalg_qr_metar¸  j  sè   € ô �!�[Ô!Ü˜1˜kÔ*ä,¨TÓ2Ñ€Iˆ|à	�‰�‰€AØ	�‰�‰€AÜ��1‹€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’   rt  r½   )rÎ   rÏ   rš   r™   ra   r_   rW   ru  r   r„   r’  )r  rš   r¹  rº  r–  r|  s         r9   Ú_linalg_slogdetr¼  †  s²   € ô �aÐ)Ô*Ü˜1Ð.°Ô6Ø�G‰G€EØ�;‰;�u˜S˜b�zÓ"€DØ—‘˜E # 2˜J¬o¸a¿g¹gÓ.F�ÓG€IÜ	×	Ñ	ØÜ*¨5°%Ó8Ø�g‰gØ�x‰xô	
€Bð �[‰[˜˜s ˜¬5¯;©;ˆ[Ó7€FØ�˜B Ð&Ð&r;   Úfull_matricesÚ
compute_uvÚdriverc                 óv  — t        | d«       t        | d«       t        | j                  d d «      }| j                  d   }| j                  d   }t	        j
                  ||«      }|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š   rW   r   r™   rë   r   r  ra   r_   )r  r½  r¾  r¿  rñ   rµ  r+  r”  ÚU_shaper4  ÚV_shapeÚVrI  ÚSs                 r9   Ú_linalg_svd_metarÅ  š  s(  € ô �!�\Ô"Ü˜1˜lÔ+ä�a—g‘g˜c˜r�lÓ#€JØ	�‰�‰€AØ	�‰�‰€AÜ�‰�a˜Ó€AáØ ©¡1¸1Ð=Ñ=ˆØ�K‰K˜Ó ˆØ	�‰�gÔ:¸7ÈeÔTÔUà¡]¡¸¸1Ð=Ñ=ˆØ�K‰K˜Ó ˆô
 ˜a“. FÑ*ˆØ	�‰�gÔ:¸7ÈgÔVÕWð �K‰K˜˜ÓˆØ�K‰K˜˜Óˆð 	
�‰�J ! Ñ$¬O¸A¿G¹GÓ,DˆÓE€AØˆa�ˆ7€Nr;   Úarg1Úarg2c                 ó  — | j                   d d }|j                   d d }t        ||«      }t        |«      }|| j                  d«      | j                  d«      gz  }t        |«      }||j                  d«      |j                  d«      gz  }||fS )Nr  r½   )rš   r&   rä   rÄ   )rÆ  rÇ  Úarg1_batch_sizesÚarg2_batch_sizesÚexpand_batch_portionÚarg1_expand_sizeÚarg2_expand_sizes          r9   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 rE   )r  r‹  rš   ry  )rÆ  rÇ  r  rÌ  rÍ  Úarg1_broadcastedÚarg2_broadcasteds          r9   rW  rW  Ñ  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½   r4   )rš   rÆ   )rø   rÅ   Úexpected_batched_rhs_shapeÚvector_cases       r9   Úlinalg_solve_is_vector_rhsrÔ  å  sS   € Ø!&§¡¨S¨bÐ!1ÐØ—*‘* ‘/ò Ø�
‰
�Q‰˜%Ÿ*™*Ñ$ÒR¨¯©Ð8RÑ)Rð ð Ðr;   )rõ   r`  r,  r–  r|  r}  c                óÐ  ‡ ‡— t        ‰ d«       t        j                  ‰ j                  ‰j                  k(  ˆ ˆfd„«       t	        ‰ ‰«      }|r‰j                  d«      n‰}	t        ‰ |	|d«       t        |	‰ «      \  }
}t        j                  |xs | d„ «       |r|
d d n|
}t        j                  |t        || «      ‰j                  ‰j                  ¬«      }‰ j                  }t        j                  |t        |d«      ‰ j                  ‰ j                  ¬«      }‰ j                  |d d t        j                  ¬«      }‰ j                  |d d t        j                  ¬«      }||||f}||||f}t        d	„ |D «       «      rbt        ||«      D ]S  \  }}t!        ||j                  «       |j#                  |j                  |j%                  «       «       t'        ||d¬
«       ŒU |S )Nzlinalg.solvec                  ó>   •— d‰ j                   › d‰j                   › d�S )NzKlinalg.solve: Expected A and B to have the same dtype, but found A of type r�  r…  r’   )r  r(  s   €€r9   rf   z"_linalg_solve_ex.<locals>.<lambda>ü  s%   ø€ ØYØ�w‰wˆi� q§w¡w i¨xð9ð r;   r½   c                   ó   — 	 y)Nz•linalg.solve: Vector broadcasting of the left hand side is not supported for left=False. In this case linalg.solve is equivalent to B / A.squeeze(-1)r5   r5   r;   r9   rf   z"_linalg_solve_ex.<locals>.<lambda>  s   € ðKð r;   rt  Fr’   r  c              3   ó$   K  — | ]  }|d u–— Œ
 y ­wrE   r5   ©rs   r>   s     r9   ru   z#_linalg_solve_ex.<locals>.<genexpr>  s   è ø€ Ò
&˜Qˆ1�DŒ=Ñ
&ùs   ‚)Ú	copy_fromÚcopy_toÚexact_dtype)rÏ   rW   rh   r_   rÔ  Ú	unsqueezer+  r‹  ru  r   r„   rš   r™   r’  r`  ra  r"   rë   ræ   r$   )r  r(  rõ   r`  r,  r–  r|  r}  rÓ  ÚB_ÚB_broad_shaperS   Úresult_shapeÚresult_rš   ÚLU_Úpivots_Úinfo_rí   Úresr­  Úos   ``                    r9   Ú_linalg_solve_exrç  í  s¶  ù€ ô ˜1˜nÔ-Ü	‡L�LØ	�‰�1—7‘7Ñô	
ôô -¨Q°Ó2€KÙ'ˆ�‰�RŒ¨Q€BÜ�a˜˜T >Ô2Ü3°B¸Ó:Ñ€M�1Ü	‡L�LØÒ�K�ñ	
ôñ *5�=  "Ñ%¸-€LÜ×!Ñ!ØÜ*¨<¸T¸ÓBØ�g‰gØ�x‰xô	€Gð �G‰G€EÜ
×
Ñ
ØÜ*¨5°%Ó8Ø�g‰gØ�x‰xô	€Cð �k‰k˜%  ˜*¬E¯K©KˆkÓ8€GØ�K‰K˜˜c˜r˜
¬%¯+©+ˆKÓ6€EØ�2�v˜tÐ
$€CØ�C˜ %Ð
(€CÜ
Ñ
& #Ô
&Ô&Ü˜˜S“Mò 	F‰DˆAˆqä˜a §¡Ô)à�M‰M˜!Ÿ'™' 1§8¡8£:Ô.Ü Q°¸uÖEð	Fð €Jr;   )rõ   Úunitriangularrí   rè  rí   c                óö  — |€| j                  dg«      }t        |t        «      s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™   rq   r    r‹   r{   r+  rW  rM  Úis_contiguousÚis_conjr"   rš   r#   rê   Ú
transpose_)	r  r(  r7  rõ   rè  rí   rÞ  ÚA_Úavoid_copy_As	            r9   Ú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Ü  rM  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 rS  rT  rÑ   s   €r9   rf   z'triangular_solve_meta.<locals>.<lambda>N  s   ø€ ðØŸ)™)˜Ð$7ð9ð r;   c                  ó$   •— d‰ j                   › d�S )NzMtorch.triangular_solve: Expected A to have at least 2 dimensions, but it has rS  rT  r  s   €r9   rf   z'triangular_solve_meta.<locals>.<lambda>U  rƒ  r;   Útriangular_solveFr>  rt  r   c                   ó   — y)Nz+triangular_solve: Got an unexpected layout.r5   r5   r;   r9   rf   z'triangular_solve_meta.<locals>.<lambda>o  rn   r;   )rW   rh   rÆ   r  rƒ   Ústridedr‹  ru  r   r_   r„   Ú
sparse_csrÚ
sparse_bsrrŸ   r™   )	r›   r  r7  rM  rè  Úself_broadcast_sizeÚA_broadcast_sizeÚsolutionÚcloned_coefficients	   ``       r9   Útriangular_solve_metarþ  C  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’   ry  )r  Údetr–  r|  s       r9   Ú_linalg_det_metar  t  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.r5   r5   r;   r9   rf   zormqr.<locals>.<lambda>Œ  rn   r;   c                   ó   — y)Nz3torch.ormqr: other must have at least 2 dimensions.r5   r5   r;   r9   rf   zormqr.<locals>.<lambda>�  rn   r;   r  r½   c                  ó   •— d‰ › d�S )Nútorch.ormqr: other.shape[z0] must be greater than or equal to tau.shape[-1]r5   ©Úleft_size_conditions   €r9   rf   zormqr.<locals>.<lambda>•  s   ø€ Ð+Ð,?Ð+@Ð@pÐq€ r;   c                  ó   •— d‰ › d�S )Nr  z"] must be equal to input.shape[-2]r5   r  s   €r9   rf   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]r5   r5   r;   r9   rf   zormqr.<locals>.<lambda>ž  rn   r;   r4   c                  ó<   •— d‰j                   › d‰ j                   › �S )Nz[torch.ormqr: Expected tau to have one dimension less than input, but got tau.ndim equal to rl  rT  rm  s   €€r9   rf   zormqr.<locals>.<lambda>£  rn  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 rl  rT  ©rø   rÅ   s   €€r9   rf   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 r5   rp  s   €r9   rf   zormqr.<locals>.<lambda>µ  rr  r;   c                  ó   •— d‰ › �S )NzYtorch.ormqr: Expected batch dimensions of other to be equal to input.shape[:-2], but got r5   )Úactual_batch_other_shapes   €r9   rf   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’   rm  s   €€r9   rf   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   €€r9   rf   zormqr.<locals>.<lambda>Í  s'   ø€ ð#Ø#(§;¡; -Ð/DÀUÇ[Á[ÀMðSð r;   ztorch.ormqrrf  rÅ   Fr>  rt  )	rW   rh   rÆ   rš   r_   r1  ru  r   r„   )	rø   rf  rÅ   rõ   rM  Úexpected_batch_shaper  rq  r  s	   ```   @@@r9   Úormqrr  ‚  s  ý€ ô 
‡L�LØ�
‰
�a‰ÑVôô 
‡L�LØ�
‰
�a‰ÑVôñ !%™"¨"ÐÜ	‡L�LØ�‰Ð'Ñ(¨C¯I©I°b©MÑ9Ûqôô 
‡L�LØ�‰Ð'Ñ(¨E¯K©K¸©OÑ;Ûcôô
 
‡L�LØ�	‰	�"‰˜Ÿ™ R™Ñ(ÙZôô
 
‡L�LØ�
‰
�S—X‘XÑ Ñ"ô	
ôô 
‡L�LØ�
‰
�e—j‘jÑ ô	
ôð ‡z�z�A‚~Ø$Ÿ{™{¨3¨BÐ/ÐØ!$§¡¨3¨B ÐÜ�‰Ø"Ð&:Ñ:óô	
ð $)§;¡;¨s°Ð#3Ð Ü�‰Ø$Ð(<Ñ<óô	
ô 
‡L�LØ�	‰	�U—[‘[Ñ ô	
ôô 
‡L�LØ�‰�u—{‘{Ñ"ô	
ôô �M 3¨¨uÔ5Ü�M 5¨%°Ô9ä×ÑØ�[‰[Ü*¨5¯;©;À%ÔHØ�k‰kØ�|‰|ô	ð r;   c                ó”  ‡ ‡‡— t        j                  t        ‰«      d‰z  k(  ˆˆfd„«       ‰ j                  }|‰dz   k(  }|}| }ddlm}m} |r-t        d|«      D ]  }	 ||‰ j                  |	«      dk7  «      }Œ n+t        |«      D ]  }	 ||‰ j                  |	«      dk7  «      }Œ t        j                   |||«      ˆˆ 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   €€r9   rf   z,_padding_check_valid_input.<locals>.<lambda>á  s   ø€ Ð1°!°c±'°¸+ÄcÈ'ÃlÀ^ÐT€ r;   r   ©Úsym_andÚsym_orr4   c                  ó:   •— d‰ dz   › d‰ dz   › d‰j                   › �S )Nú	Expected r4   zD or r  zcD (batch mode) tensor with possibly 0 batch size and other non-zero dimensions for input, but got: rB  )r‡   rø   s   €€r9   rf   z,_padding_check_valid_input.<locals>.<lambda>ø  s2   ø€ Ø˜˜a™�y  c¨A¡g Yð /AØAFÇÁÀðOð r;   )	rW   rh   rã   rÆ   rt  r  r  rå   rÄ   )
rø   r  r‡   Ú	input_dimÚis_batch_modeÚvalid_batch_modeÚvalid_non_batch_moder  r  rô   s
   ```       r9   Ú_padding_check_valid_inputr"  Þ  sÖ   ú€ Ü	‡L�LÜˆG‹˜˜C™ÑÜTôð
 —
‘
€Ià #¨¡'Ñ*€Mà$ÐØ,Ð,ÐçEáä�q˜)Ó$ò 	MˆAÙ&Ð'7¸¿¹ÀA»È!Ñ9KÓLÑñ	Mô �yÓ!ò 	UˆAÙ#*Ð+?ÀÇÁÈAÃÐRSÑASÓ#TÑ ð	Uô 
‡L�LÙÐÐ!5Ó6ô	
õr;   c                óð  ‡ ‡‡‡	‡
‡— ddl m} d}dŠd}‰ j                  dk(  r‰ j                  d«      }‰dz  Š|dz  }t	        ‰ |d¬«       |\  Š
Š‰ j                  |«      }‰ j                  ‰«      Š‰‰
z   ‰z   Š	|r)t        j                   |‰
‰k  ‰‰k  «      ˆˆ ˆ
ˆfd„«       t        j                  ‰	dk\  ˆˆ	fd„«       ‰ j                  dk(  r‰ j                  |‰	f«      S ‰ j                  ||‰	f«      S )	Nr   ©r  r4   r1   r¾   c                  ó4   •— d‰› d‰› d‰ › d‰j                   › �S ©NzcArgument #4: Padding size should be less than the corresponding input dimension, but got: padding (ry   ú) at dimension ú
 of input rB  ©Údim_wrø   Úpad_lÚpad_rs   €€€€r9   rf   z_pad1d_common.<locals>.<lambda>  ó2   ø€ ð%Ø%* G¨2¨e¨W°OÀEÀ7È*ÐUZ×U`ÑU`ÐTaðcð r;   c                  ó   •— d‰ › d‰› �S )Nz
input (W: z%) is too small. Calculated output W: r5   )Úinput_wÚoutput_ws   €€r9   rf   z_pad1d_common.<locals>.<lambda>  s   ø€ �*˜W˜IÐ%JÈ8È*ÐU€ r;   r  )rt  r  rÆ   rÄ   r"  rW   rh   r™   )rø   r  Úis_reflectionr  Ú	dim_planeÚnbatchÚnplaner*  r/  r0  r+  r,  s   `      @@@@@r9   Ú_pad1d_commonr5  ÿ  só   ý€ Ý=à€IØ€EØ€Fà‡z�z�Q‚Ø—‘˜A“ˆØ�‰
ˆØ�Q‰ˆ	ä˜u g°1Õ5à�L€Eˆ5à�Z‰Z˜	Ó"€FØ�j‰j˜Ó€GØ˜‰ Ñ&€HáÜ�‰Ù�E˜G‘O U¨W¡_Ó5öô	
ô 
‡L�LØ�A‰ÜUôð
 ‡z�z�Q‚Ø�‰ ¨Ð1Ó2Ð2à�‰ ¨°Ð9Ó:Ð:r;   c                 ó   — t        | |d¬«      S ©NT©r1  )r5  ©rø   r  s     r9   Úmeta_reflection_pad1dr:  '  ó   € ô ˜ °tÔ<Ð<r;   c                 óˆ   ‡ — t        j                  ‰ j                  t         j                  k7  ˆ fd„«       t	        ‰ |d¬«      S )Nc                  ó@   •— d‰ j                   j                  «       › d�S )Nz)"replication_pad1d" not implemented for 'ú'©r_   Ú__str__©rø   s   €r9   rf   z(meta_replication_pad1d.<locals>.<lambda>2  ó    ø€ Ð=¸e¿k¹k×>QÑ>QÓ>SÐ=TÐTUÐX€ r;   Fr8  )rW   rh   r_   Úboolr5  r9  s   ` r9   Úmeta_replication_pad1drD  -  ó5   ø€ ô 
‡L�LØ�‰”u—z‘zÑ!ÛXôô ˜ °uÔ=Ð=r;   c                ó²  ‡ ‡‡‡‡‡	— ddl m} dŠ|s#t        j                  t	        |«      dk(  d„ «       ‰j
                  dk(  r‰dz  Š|\  ŠŠ	‰j                  ‰«      }|‰z   ‰	z   Š|r)t        j                   |‰|k  ‰	|k  «      ˆˆˆˆ	fd„«       t        j                  ‰‰ j                  ‰«      k(  ˆˆ ˆfd„«       ‰j                  ‰j                  «      S )	Nr   r$  r4   r  c                   ó   — y)Nz padding size is expected to be 2r5   r5   r;   r9   rf   z(_pad1d_backward_common.<locals>.<lambda><  rn   r;   r1   c                  ó4   •— d‰› d‰› d‰ › d‰j                   › �S r&  rB  r)  s   €€€€r9   rf   z(_pad1d_backward_common.<locals>.<lambda>I  r-  r;   c                  ó2   •— d‰› d‰j                  ‰ «      › �S ©Nz(grad_output width unexpected. Expected: ú, Got: rÃ   ©r*  Úgrad_outputr0  s   €€€r9   rf   z(_pad1d_backward_common.<locals>.<lambda>Q  ó"   ø€ Ð:¸8¸*ÀGÈK×L\ÑL\Ð]bÓLcÐKdÐe€ r;   )	rt  r  rW   rh   rã   rÆ   rÄ   r™   rš   )
rM  rø   r  r1  r  r/  r*  r0  r+  r,  s
   ``    @@@@r9   Ú_pad1d_backward_commonrO  7  s¾   ý€ Ý=à€EÙÜ�‰”S˜“\ QÑ&Ñ(RÔSà‡z�z�Q‚Ø�‰
ˆà�L€Eˆ5à�j‰j˜Ó€GØ˜‰ Ñ&€HáÜ�‰Ù�E˜G‘O U¨W¡_Ó5öô	
ô 
‡L�LØ�K×$Ñ$ UÓ+Ñ+Ýeôð
 �?‰?˜5Ÿ;™;Ó'Ð'r;   Ú
grad_inputc                 ó    — t        | ||d¬«      S r7  ©rO  ©rM  rø   r  s      r9   Úmeta_reflection_pad1d_backwardrT  W  s   € ô " +¨u°gÈTÔRÐRr;   c                 ó    — t        | ||d¬«      S )NFr8  rR  rS  s      r9   Úmeta_replication_pad1d_backwardrV  ]  s   € ô " +¨u°gÈUÔSÐSr;   c                óV  ‡ ‡	‡
‡‡‡‡‡‡‡‡— ddl m} 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   Š|rRt        j                   |‰‰k  ‰‰k  «      ˆ
ˆ ˆˆfd„«       t        j                   |‰‰k  ‰‰k  «      ˆ	ˆ ˆˆfd„«       t        j                  ‰dk\  xs ‰dk\  ˆˆˆˆfd	„«       ‰ j                  d
k(  r‰ j                  |‰‰f«      S ‰ j                  ||‰‰f«      }t        ‰ «      dk7  rFt        j                  ‰ «      t
        j                  k(  r |j                  t
        j                  ¬«      }|S )Nr   r$  r  r4   r¾   é   c                  ó4   •— d‰› d‰› d‰ › d‰j                   › �S r&  rB  r)  s   €€€€r9   rf   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 (ry   r'  r(  rB  ©Údim_hrø   Úpad_bÚpad_ts   €€€€r9   rf   z_pad2d_common.<locals>.<lambda>†  r-  r;   c                  ó    •— d‰ › d‰› d‰› d‰› �S )Nz
input (H: ú W: z%) is too small. Calculated output H: r5   )Úinput_hr/  Úoutput_hr0  s   €€€€r9   rf   z_pad2d_common.<locals>.<lambda>Ž  s*   ø€ Ø˜˜	  g Yð /$Ø$, :¨T°(°ð=ð r;   r1   r	  rÌ   )rt  r  r"  rÆ   rÄ   rW   rh   r™   r  rP   r   Úchannels_lastrw  )rø   r  r1  r  Ú
dim_slicesr3  rÆ   r4  r  r]  r*  rb  r/  rc  r0  r^  r+  r,  r_  s   `        @@@@@@@@@@r9   Ú_pad2d_commonrf  c  sž  ÿú€ Ý=à€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áÜ�‰Ù�E˜G‘O U¨W¡_Ó5öô	
ô 	�‰Ù�E˜G‘O U¨W¡_Ó5öô	
ô 
‡L�LØ�A‰Ò&˜ Q™ö	
ôð ‡z�z�Q‚Ø�‰ ¨°(Ð;Ó<Ð<à—‘ &¨&°(¸HÐ!EÓFˆô ˜Ó &Ò(Ü×+Ñ+¨EÓ2´e×6IÑ6IÒIà—Y‘Y¬U×-@Ñ-@�YÓAˆFØˆr;   c                 ó   — t        | |d¬«      S r7  )rf  r9  s     r9   Úmeta_reflection_pad2drh  ¢  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?  rA  s   €r9   rf   z(meta_replication_pad2d.<locals>.<lambda>­  rB  r;   Fr8  )rW   rh   r_   rC  rf  r9  s   ` r9   Úmeta_replication_pad2drk  ¨  rE  r;   c                 ó^   — t        j                  |«      }t        j                  |«      }||fS rE   rž   )Úgrad_wÚsaved_vÚsaved_gÚsaved_normsr‡   Úgrad_vÚgrad_gs          r9   Úmeta_weight_norm_backwardrs  ²  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  r4   r   rX  c                  ó2   •— d‰› d‰j                  ‰ «      › �S rJ  rÃ   rL  s   €€€r9   rf   z%meta_pad2d_backward.<locals>.<lambda>Ø  rN  r;   c                  ó2   •— d‰› d‰j                  ‰ «      › �S ©Nz)grad_output height unexpected. Expected: rK  rÃ   ©r]  rM  rc  s   €€€r9   rf   z%meta_pad2d_backward.<locals>.<lambda>Ü  ó"   ø€ Ð;¸H¸:ÀWÈ[×M]ÑM]Ð^cÓMdÐLeÐf€ r;   )rš   r‡   rW   rh   rÄ   r™   )rM  r›   r  r2  re   r+  r,  r_  r^  rb  r/  r]  r*  rc  r0  s   `          @@@@r9   Úmeta_pad2d_backwardrz  »  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          	      óN  ‡ ‡	‡
‡‡‡‡‡‡‡‡‡‡‡‡‡— ddl m} 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   Š|r{t        j                   |‰‰k  ‰‰k  «      ˆˆ ˆˆfd„«       t        j                   |‰‰k  ‰‰k  «      ˆ
ˆ ˆˆfd	„«       t        j                   |‰‰k  ‰‰k  «      ˆ	ˆ ˆˆfd
„«       ddl m} t        j                   |‰dk\  ‰dk\  ‰dk\  «      ˆˆˆˆˆˆfd„«       |r‰ j                  |‰‰‰f«      S ‰ j                  |‰‰‰f«      S )Nr   r$  r1   r  r4   r¾   é   c                  ó4   •— d‰› d‰› d‰ › d‰j                   › �S r&  rB  r)  s   €€€€r9   rf   z_pad3d_common.<locals>.<lambda> 	  r-  r;   c                  ó4   •— d‰› d‰› d‰ › d‰j                   › �S r[  rB  r\  s   €€€€r9   rf   z_pad3d_common.<locals>.<lambda>	  r-  r;   c                  ó4   •— d‰› d‰› d‰ › d‰j                   › �S )NzcArgument #8: Padding size should be less than the corresponding input dimension, but got: padding (ry   r'  r(  rB  )Údim_drø   Úpad_bkÚpad_fs   €€€€r9   rf   z_pad3d_common.<locals>.<lambda>	  s2   ø€ ð%Ø%* G¨2¨f¨X°_ÀUÀGÈ:ÐV[×VaÑVaÐUbðdð r;   ©r  c                  ó,   •— d‰ › d‰› d‰› d‰› d‰› d‰› �S )Nz
input (D: ú H: ra  z%) is too small. Calculated output D: r5   )Úinput_drb  r/  Úoutput_drc  r0  s   €€€€€€r9   rf   z_pad3d_common.<locals>.<lambda>	  s7   ø€ Ø˜˜	  g Y¨d°7°)ð <$Ø$, :¨T°(°¸4À¸zðKð r;   )	rt  r  r"  rÆ   rÄ   rW   rh   r  r™   )rø   r  r1  r  r2  Ú
batch_moder3  r4  r  r€  r]  r*  r†  rb  r/  r‡  rc  r0  r^  r�  r‚  r+  r,  r_  s   `        @@@@@@@@@@@@@@@r9   Ú_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áÜ�‰Ù�E˜G‘O U¨W¡_Ó5öô	
ô 	�‰Ù�E˜G‘O U¨W¡_Ó5öô	
ô 	�‰Ù�E˜G‘O V¨gÑ%5Ó6öô	
õ =ä	‡L�LÙˆx˜1‰}˜h¨!™m¨X¸©]Ó;÷	
ð 	
ôñ Ø�‰ ¨°¸(ÀHÐMÓNÐNà�‰ ¨°(¸HÐEÓFÐFr;   c                 ó   — t        | |d¬«      S r7  )r‰  r9  s     r9   Úmeta_reflection_pad3dr‹  $	  r;  r;   c                 óˆ   ‡ — t        j                  ‰ j                  t         j                  k7  ˆ fd„«       t	        ‰ |d¬«      S )Nc                  ó@   •— d‰ j                   j                  «       › d�S )Nz)"replication_pad3d" not implemented for 'r>  r?  rA  s   €r9   rf   z(meta_replication_pad3d.<locals>.<lambda>/	  rB  r;   Fr8  )rW   rh   r_   rC  r‰  r9  s   ` r9   Úmeta_replication_pad3drŽ  *	  rE  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 6r5   r5   r;   r9   rf   z%meta_pad3d_backward.<locals>.<lambda>>	  rn   r;   r1   zinput.ndim must be > 3, got z,grad_output.ndim must equal input.ndim, got ú != r  r4   r|  c                  ó2   •— d‰› d‰j                  ‰ «      › �S rJ  rÃ   rL  s   €€€r9   rf   z%meta_pad3d_backward.<locals>.<lambda>Z	  rN  r;   c                  ó2   •— d‰› d‰j                  ‰ «      › �S rw  rÃ   rx  s   €€€r9   rf   z%meta_pad3d_backward.<locals>.<lambda>^	  ry  r;   c                  ó2   •— d‰› d‰j                  ‰ «      › �S )Nz(grad_output depth unexpected. Expected: rK  rÃ   )r€  rM  r‡  s   €€€r9   rf   z%meta_pad3d_backward.<locals>.<lambda>b	  rN  r;   )rW   rh   rã   rÆ   r‹   rÄ   r™   rš   )rM  rø   r  r+  r,  r_  r^  r‚  r�  r†  rb  r/  r€  r]  r*  r‡  rc  r0  s   `           @@@@@@r9   Úmeta_pad3d_backwardr–  4	  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                 óà   — t        j                  | j                  «       d„ «       | j                  d«      }| j	                  ||dz
  z  dz  f«      j                  t         j                  ¬«      S )Nc                   ó   — y)Nz(_pdist_forward requires contiguous inputr5   r5   r;   r9   rf   z%meta__pdist_forward.<locals>.<lambda>l	  rn   r;   r   r4   r  rÌ   )rW   rh   rê  rÄ   r™   rw  r\  )r›   r—  r+  s      r9   Úmeta__pdist_forwardrš  h	  sh   € ô 
‡L�LØ×ÑÓÑPôð 	�	‰	�!‹€AØ�>‰>˜1  A¡™;¨!Ñ+Ð-Ó.×1Ñ1Ü×4Ñ4ð 2ó ð 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 contiguousr5   r5   r;   r9   rf   z&meta__pdist_backward.<locals>.<lambda>x	  rn   r;   c                   ó   — y)Nz/_pdist_backward requires pdist to be contiguousr5   r5   r;   r9   rf   z&meta__pdist_backward.<locals>.<lambda>{	  rn   r;   rÌ   )rW   rh   rê  rŸ   r\  )r›  r›   r—  rœ  s       r9   Úmeta__pdist_backwardr   t	  sW   € ô 
‡L�LØ×ÑÓÑVôô 
‡L�LØ×ÑÓÑXôô ×Ñ˜D´×0NÑ0NÔOÐOr;   )r¥  r¤  c          
      ó0  ‡ ‡‡‡‡‡— ddl m}m} ‰j                  d«      }‰j                  d«      }‰j                  d«      }	 |t	        j
                   |‰ j                  |||	f«      «      «      r‰ j                  |||	f«      Š t	        j                  ‰j                  «       dk(  d„ «       t	        j                  ‰j                  «       dk(  d„ «       t        j                  sGt	        j                  ‰ j                  ‰j                  cxk(  xr ‰j                  k(  nc ˆˆˆ fd„«       ‰j                  }
‰j                  Š|
d   Š|
d   Št	        j                  ‰d   ‰k(  xr ‰d   ‰k(  ˆˆˆfd	„«       ‰ j                  ‰ j                  «       «      S )
Nr   )Úguard_or_trueÚsym_eqr4   r  r1   c                   ó   — y©Nzbatch1 must be a 3D tensorr5   r5   r;   r9   rf   zmeta_baddbmm.<locals>.<lambda>Š	  rn   r;   c                   ó   — y©Nzbatch2 must be a 3D tensorr5   r5   r;   r9   rf   zmeta_baddbmm.<locals>.<lambda>‹	  rn   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   €€€r9   rf   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: [ry   z] but got: [r   r4   ú].r5   ©Úbatch2_sizesÚbsÚcontraction_sizes   €€€r9   rf   zmeta_baddbmm.<locals>.<lambda>—	  s:   ø€ ðØˆt�2Ð&Ð' |°LÀ±OÐ3DÀBÀ|ÐTUÁÐFWÐWYð[ð r;   )rt  r¢  r£  rÄ   rW   Úsym_notrš   ry  rh   r‡   Ú
exp_configÚ&skip_dtype_check_in_meta_registrationsr_   r™   )r›   r©  rª  r¥  r¤  r¢  r£  Údim1Údim2Údim3Úbatch1_sizesr¯  r°  r±  s   ```        @@@r9   Úmeta_baddbmmr¹  €	  s7  ý€ ÷ Là�;‰;�q‹>€DØ�;‰;�q‹>€DØ�;‰;�q‹>€DÙ”U—]‘]¡6¨$¯*©*°t¸TÀ4Ð6HÓ#IÓJÔKØ�{‰{˜D $¨Ð-Ó.ˆÜ	‡L�L�—‘“ Ñ"Ñ$HÔIÜ	‡L�L�—‘“ Ñ"Ñ$HÔIÜ×<Ò<Ü�‰Ø�J‰J˜&Ÿ,™,Ö6¨&¯,©,Ô6Ý~ô	
ð —<‘<€LØ—<‘<€LØ	�a‰€BØ# A‘ÐÜ	‡L�LØ�Q‰˜2ÑÒE ,¨q¡/Ð5EÑ"Eõ	
ôð �>‰>˜$Ÿ)™)›+Ó&Ð&r;   c                óL   — t        j                  | t         j                  ¬«      S rÛ   r¼  r    s     r9   Úmeta_bernoullir»  Ÿ	  s   € ô ×Ñ˜D´×0GÑ0GÔHÐHr;   c                 ó   — | S rE   r5   ©r›   r—  r¡   s      r9   Úmeta_bernoulli_r¾  ¦	  ó   € à€Kr;   c                 óL   — t        j                  | t         j                  ¬«      S rÛ   r¼  r½  s      r9   Úmeta_bernoulli_prÁ  «	  s   € ô ×Ñ˜D´×0GÑ0GÔHÐHr;   c                 ó,   — t        j                  | «      S rE   rž   r    s     r9   Úmeta_poissonrÃ  ±	  r£   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()r5   r5   r;   r9   rf   z6meta__fused_moving_avg_obs_fq_helper.<locals>.<lambda>É	  rn   r;   r’   )rW   rh   r‡   rŸ   rC  )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_quantr¶   s                 r9   Ú$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 2Dr5   r5   r;   r9   rf   zmeta_mm.<locals>.<lambda>Ò	  rn   r;   c                   ó   — y)Nzb must be 2Dr5   r5   r;   r9   rf   zmeta_mm.<locals>.<lambda>Ó	  rn   r;   c            	      ó"   •— d‰› d‰ › d‰› d‰› d�	S )Nz/a and b must have same reduction dim, but got [ry   z] X [r­  r5   )ÚM1ÚM2ÚNr�  s   €€€€r9   rf   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 inputsr5   r5   r;   r9   rf   zmeta_mm.<locals>.<lambda>á	  rn   r;   r’   )	rW   rh   r‡   rš   r_   r°  r±  r²  r™   )r7   r8   rŒ  rT   r×  rØ  rÙ  r�  s       @@@@r9   Ú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rZ  rB  )rs   rü   Údimsr›   s     €€r9   ru   z+_compute_reduction_shape.<locals>.<genexpr>é	  s$   øè ø€ ÒU¸q a¨t¡m�T—Z‘Z ’]¸Ó:ÑUùs   ƒ")rg   rå   rÆ   rP   Úcompute_reduction_output_shaperš   )r›   rÞ  rÛ  s   `` r9   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„   r{   r�   r	  )rq   rW   Ú_subclassesÚ
FakeTensorÚfake_devicer{   Úhasattrr„   )r  s    r9   r  r  ò	  sg   € Ü�&œ%×+Ñ+×6Ñ6Ô7Ø×!Ñ!×&Ñ&Ð&ä�˜Ô!Ü�F—M‘M 6Ô*Ø�M‰M×Ñ &Ò(à�}‰}×!Ñ!Ð!àr;   Úinput_tensorræ   r  ÚdilationÚis_transposedÚgroupsÚoutput_paddingc                 óZ  ‡‡‡‡— 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  }nF|j                  d   }t        j                  |j                  d   |z  | j                  d   k(  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|}|s¤ddlm} t        t        ‰«      «      D �cg c]  }‰|   d
||   z  z   ‘Œ c}Št        t        ‰«      «      D �cg c]  }||   |
|   dz
  z  dz   ‘Œ c}Št        j                   |t        ‰‰d¬«      D ��cg c]
  \  }}||k\  ‘Œ c}}Ž ˆˆfd„«       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 c c}w c c}}w c c}w )NÚlnr—  rô   r”  rõ  rA   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  r4   r5   )rë  r—  rô   r”  rõ  s        r9   Ú_formulaz+calc_conv_nd_return_shape.<locals>._formula	
  s.   € ð �Q˜‘U‘
˜Q ! a¡%™[Ñ(¨1Ñ,°Ñ2°QÑ6Ð6r;   rF   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
        r4   r  r5   )rë  r—  rô   r”  rõ  rF   s         r9   Ú_formula_transposedz6calc_conv_nd_return_shape.<locals>._formula_transposed
  s2   € ð" �Q‘˜!‰|˜a !™eÑ# a¨1¨q©5¡kÑ1°BÑ6¸Ñ:Ð:r;   r  r4   r   c                   ó   — y)NzInvalid channel dimensionsr5   r5   r;   r9   rf   z+calc_conv_nd_return_shape.<locals>.<lambda>5
  rn   r;   r$  T)Ústrictc                  ón   •— ddj                  d„ ‰D «       «      › ddj                  d„ ‰ D «       «      › d�S )Nz+Calculated padded input size per channel: (r¯  c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wrE   ©ÚstrrÙ  s     r9   ru   z>calc_conv_nd_return_shape.<locals>.<lambda>.<locals>.<genexpr>g
  s   è ø€ Ò<¨!œs 1ŸvÑ<ùó   ‚z). Kernel size: (c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wrE   rô  rÙ  s     r9   ru   z>calc_conv_nd_return_shape.<locals>.<lambda>.<locals>.<genexpr>h
  s   è ø€ Ò+M°q¬C°¯FÑ+Mùrö  z6). Kernel size can't be greater than actual input size)Újoin)Úeffective_kernelÚpadded_inputs   €€r9   rf   z+calc_conv_nd_return_shape.<locals>.<lambda>e
  sJ   ø€ ðØ—J‘JÑ<¨|Ô<Ó<Ð=ð >!Ø!&§¡Ñ+MÐ<LÔ+MÓ!MÐ Nð OFðGð r;   )râ  rƒ  r	  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   €€r9   rf   z+calc_conv_nd_return_shape.<locals>.<lambda>–
  s,   ø€ Ð4´T¸$³Z°Lð A3Ø3<¸Q¸R°=°/ð B'ð(€ r;   )r  rš   rW   rh   rq   r   rã   rt  r  rå   ra  ÚappendÚtorch._subclasses.fake_tensorrâ  r  rã  r„   r{   ÚversionÚhip)rå  rˆ  ræ   r  ræ  rç  rè  ré  rí  rï  Úkernel_sizeÚout_channelsÚoutput_padding_listr  rü   r—  r”  râ  r  r„   Úis_cudnnr>   rÞ  rù  rú  rü  s                         @@@@r9   Úcalc_conv_nd_return_shaper  ÿ	  s×  û€ ð7”Sð 7œSð 7¤Sð 7¬Sð 7´Sð 7¼Só 7ð";¤ð ;¬ð ;´ð ;¼ð ;Äð ;Ìð ;ÔQTó ;ð& —,‘,˜q˜rÐ"€KØ×Ñ˜a˜bÐ!€DÙØ §¡¨Q¡Ñ/‰à—|‘| A‘ˆÜ�‰Ø�L‰L˜‰O˜fÑ$¨×(:Ñ(:¸1Ñ(=Ñ=Ù0ô	
ð
 ×#Ñ# 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Ðñ ÝAô ;@ÄÀDÃ	Ó:JÖK°Q˜˜Q™ ! g¨a¡j¡.Ó0ÒKˆô œ3˜t›9Ó%ö
ð ð �Q‰K˜; q™>¨AÑ-Ñ.°Ó2ò
Ðô
 	�‰ÙÜ%(¨Ð7GÐPTÔ%U×V™T˜Q �!�q“&ÓVðôô	
	
ô ”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ô(ô	
ð ÐùòA Lùò
ùó Wùòd 3s   È
NÈ8NÉ5N"Í=N(c                 ób   — t         j                  j                  | «      t         j                  k(  S rE   )rW   Ú_prims_commonr   rd  )Útens    r9   Úis_channels_lastr	  ž
  s$   € Ü×Ñ×4Ñ4°SÓ9¼U×=PÑ=PÑPÐPr;   Úrunning_meanÚrunning_varÚtrainingÚexponential_average_factorÚepsilonc                 óà  ‡— |�|j                   n|j                   }|�|j                   n|j                   }	t        | «      Št        j                  t        j                  j
                  j                  j                  | ‰¬«      ˆfd„«       t        j                  | ‰¬«      }
|r#|j                  |«      }|j                  |	«      }n"|j                  d«      }|j                  d«      }|
||fS )NrÌ   c                  ó   •— d‰ › �S )Nz/miopen_batch_norm: input must be contiguous in r5   )Úfmts   €r9   rf   z(meta_miopen_batch_norm.<locals>.<lambda>»
  s   ø€ ÐAÀ#ÀÐG€ r;   ©r   )
rš   r   rW   rh   Úopsr.   Úsym_is_contiguousÚdefaultrŸ   r™   )rå  rˆ  rŠ  r
  r  r  r  r  Úsave_mean_shapeÚsave_var_shaperí   Ú	save_meanÚsave_varr  s                @r9   Úmeta_miopen_batch_normr  ¢
  sÓ   ø€ ð -9Ð,D�l×(Ò(È&Ï,É,€OØ*5Ð*A�[×&Ò&ÀvÇ|Á|€Nô
   Ó
-€Cô 
‡L�LÜ�	‰	�‰×(Ñ(×0Ñ0°ÈSÐ0ÓQÛGôô
 ×
Ñ
˜<°sÔ
;€CáØ×$Ñ$ _Ó5ˆ	Ø×#Ñ# NÓ3‰à×$Ñ$ TÓ*ˆ	Ø×#Ñ# DÓ)ˆà�	˜8Ð#Ð#r;   c	           
      ó¦   — t        | |||||||r|nd «      }	ddlm}
 d}d} |
| j                  |«      dk(  «      rd|	|<   | j	                  |	«      }|S )Nr   ©Úguard_or_falser4   )r  rt  r  rÄ   r™   )rå  rˆ  rŠ  ræ   r  ræ  rç  ré  rè  Ú	shape_outr  Úinput_channels_dimÚoutput_channels_dimrí   s                 r9   Ú	meta_convr!  Ê
  sw   € ô *ØØØØØØØÙ'‰¨Tó	€Iõ EàÐØÐÙ�l×'Ñ'Ð(:Ó;¸qÑ@ÔAØ)*ˆ	Ð%Ñ&ð ×
 Ñ
  Ó
+€CØ€Jr;   Ú
transposedÚ	benchmarkÚdeterministicÚcudnn_enabledÚ
allow_tf32c                 ó(   — t        | ||||||||«	      S rE   )r!  )rå  rˆ  rŠ  ræ   r  ræ  r"  ré  rè  r#  r$  r%  r&  s                r9   Ú
meta__convr(  ñ
  s,   € ô  ØØØØØØØØØó
ð 
r;   Úmkldnnc
           
      óÖ   — t        | ||||d|g «      }
| j                  |
«      }t        j                  }| j	                  «       dk(  rt        j
                  }|j                  |¬«      }|S )NFr|  rÌ   )r  r™   rW   rd  r‡   Úchannels_last_3drw  )rå  rˆ  rŠ  r  ræ   ræ  rè  ÚattrÚscalarsÚ	algorithmr  rí   Úout_memory_formats                r9   Úmeta_mkldnn_convolution_defaultr0    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å  rˆ  rŠ  r,  r-  r.  s         r9   Úmeta_linear_pointwise_defaultr4  *  s5   € ð ×%Ñ%Ð&Q¨×(:Ñ(:¸3¸BÐ(?Ð&QÀÇÁÈaÁÑ&QÓRÐRr;   r  c                 ób   — | j                  g | j                  d d ¢|j                  d   ‘­«      S r2  r3  )rå  Úpacked_weightÚorig_weightrŠ  rú   s        r9   Úmeta_mkl_linearr8  5  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’   )r1   rX  r|  z3Expect output to be 3d/4d/5d for conv1d/2d/3d, got rô   rÌ   )r  r_   rW   r°  r²  Úuint8r‘  r³  r‹   r™   rã   rÐ   rd  r+  rw  )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                       r9   Úmeta_qconv_pointwiserF  ?  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@  rA  ÚaccumrŠ  ræ   r  ræ  rè  rB  rC  rD  Úaccum_scaleÚaccum_zero_pointÚbinary_op_namer¤  Úunary_op_nameÚunary_op_argsÚunary_op_algorithms                         r9   Úmeta_qconv2d_pointwise_binaryrQ  x  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 )Nr4   r½   zOoutput_dtype must be one of float32, bfloat16, int8, uint8, float8_e4m3fn, got r’   )
rä   rš   rW   r°  r²  r‘  r<  r³  r‹   r™   )r>   r=  r>  r?  r@  rA  rŠ  rB  rC  rD  Úpost_op_nameÚpost_op_argsÚpost_op_algorithmr¶  rí   s                  r9   Úmeta_qlinear_pointwiserV  ˜  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 )NrH  r4   r½   r;  r’   )
rä   rš   rW   r°  r²  r<  r‘  r³  r‹   r™   )r>   r=  r>  r?  r@  rA  Úx_2rŠ  rB  rC  rD  Úx2_scaleÚx2_zprM  r¤  rN  rO  rP  r¶  rí   s                       r9   Ú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 )Nr4   r½   )rä   rš   r™   )r>   r?  rŠ  r¶  rí   s        r9   Úmeta_linear_dynamic_fp16r]  á  s6   € ô ˜AŸG™G“}ˆàŸ7™7 1™:ˆ�RÑØ�k‰k˜,Ó'ˆØˆ
r;   Ú	quantizedr  ©r4   c                 ó.  — t        | |||||«      \  }}}| j                  «       dk(  r| j                  d«      nd}	t        j                  }
| j                  «       dk(  r|||g}n|	|||g}t        j
                  || j                  | j                  |
¬«      S ©NrX  éüÿÿÿr4   r1   rÌ  )Ú#max_pool2d_checks_and_compute_shaper‡   rÄ   rW   rd  r�   r_   r„   ©rø   r  ræ   r  ræ  Ú	ceil_modeÚnInputPlaneÚoutputHeightÚoutputWidthr3  rÍ   rÄ   s               r9   Úmeta_quantized_max_pool2dri  ò  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 rœ  r¾   ©r>   s   €r9   rf   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 rœ  r¾   ©r?  s   €r9   rf   z/meta_int4mm_packed_weight_cpu.<locals>.<lambda>  rm  r;   c                  ó"   •— d‰ j                   › �S ©Nz#expected x to be f32/f16/bf16, got r’   rl  s   €r9   rf   z/meta_int4mm_packed_weight_cpu.<locals>.<lambda>  s   ø€ Ð9¸!¿'¹'¸ÐC€ r;   c                  ó"   •— d‰ j                   › �S ©Nzexpected w to be uint8, got r’   ro  s   €r9   rf   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   €r9   rf   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   €r9   rf   z/meta_int4mm_packed_weight_cpu.<locals>.<lambda>   s   ø€ ÐKÐL]×LcÑLcÐKdÐe€ r;   r   r’   )rW   rh   r‡   r_   r°  r±  r²  r<  r×   r™   rÄ   ©r>   r?  ru  rw  s   ````r9   Úmeta_int4mm_packed_weight_cpury    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] == ry   zbut got : dimension z] = ©r‡   rš   )r‡   Údim_sizerÄ   r  s   €€€€r9   rf   z check_dim_size.<locals>.<lambda>)  sP   ø€ Ð1°#°Ð6GÈÀzÐQVÐW[ÐV\Ð\^Ð_Ø  §¡£ Ð.?À¸zÈÈfÏlÉlÐ[cÑNdÐMeÐ
fñg€ r;   )rW   rh   r‡   rš   )r  r‡   r}  rÄ   s   ````r9   Úcheck_dim_sizer~  &  s6   û€ Ü	‡L�LØ�
‰
‹˜ÑÒ> §¡¨XÑ 6¸$Ñ >ö	gõr;   rÊ  rË  r_   c                 ó,   — t        j                  | «      S rE   rž   )rø   rÊ  rË  r_   s       r9   Úmeta_quantize_per_tensorr€  .  s   € ô ×Ñ˜EÓ"Ð"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©r4   r  c                  ó   •— d‰ › d�S )Nzavg_pool2d: ú4 must either be a single int, or a tuple of two intsr5   ©r  s   €r9   rf   z1meta_avg_pool2d.<locals>.unpack.<locals>.<lambda>B  ó   ø€ �l 4 &Ð(\Ð]€ r;   r   r4   ©rW   rh   rã   ©r  rî  ÚHÚWs   `   r9   Úunpackzmeta_avg_pool2d.<locals>.unpack?  óG   ø€ Ü�‰Ü�‹H˜ÐÛ]ô	
ð �‰FˆÜ�S“˜Q’‰A C¨¡FˆØ�!ˆtˆr;   r  ©r   r4   r  c                   ó   — y©NzOavg_pool2d: stride must either be omitted, a single int, or a tuple of two intsr5   r5   r;   r9   rf   z!meta_avg_pool2d.<locals>.<lambda>K  rn   r;   c                  ó@   •— d‰ j                   j                  «       › d�S )Nz""avg_pool2d" not implemented for 'r>  r?  rA  s   €r9   rf   z!meta_avg_pool2d.<locals>.<lambda>O  ó   ø€ Ð6°u·{±{×7JÑ7JÓ7LÐ6MÈQÐQ€ r;   r   r4   ræ   r  c                   ó   — y©Nzdivisor must be not zeror5   r5   r;   r9   rf   z!meta_avg_pool2d.<locals>.<lambda>\  rn   r;   rX  rb  éýÿÿÿr  r½   r1   rÌ  )rW   rh   rã   r_   r<  Úuint16Úuint32rG  r‡   rÄ   Úpooling_output_shaperP   r   Úpool2d_shape_checkr�   r„   )rø   r  ræ   r  re  Úcount_include_padÚdivisor_overriderŒ  ÚkHÚkWÚdHÚdWÚpadHÚpadWr3  rf  ÚinputHeightÚ
inputWidthrg  rh  rÍ   rÄ   s   `                     r9   Úmeta_avg_pool2dr¤  5  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 )Nr4   r1   r  )r™  r‡   r~  )rø   Ú
gradOutputr3  rœ  r�  rž  rŸ  r   r¡  rf  r¢  r£  rg  rh  Ú
mem_formatrÆ   ÚnOutputPlanes                    r9   Úavg_pool2d_backward_shape_checkr©  ‡  s�   € ô" ØØ
Ø
Ø
Ø
ØØØ	Ø	ØØØØØØôð$ �9‰9‹;€DØ€Lä�:˜t T¨A¡X¨|Ô<Ü�:˜t T¨A¡X¨|Ô<Ü�:˜t T¨A¡X¨{Õ;r;   c                 óÐ  — t        j                  t        |«      dk(  xs t        |«      dk(  d„ «       |d   }t        |«      dk(  r|n|d   }	t        j                  t        |«      dk(  xs t        |«      dk(  xs t        |«      dk(  d„ «       t        |«      dk(  r|n|d   }
t        |«      dk(  r|	nt        |«      dk(  r|
n|d   }t        j                  t        |«      dk(  xs t        |«      dk(  d„ «       |d   }t        |«      dk(  r|n|d   }t        j                  |d u xs |dk7  d„ «       |j                  }|j	                  «       dk(  r|d	   nd}|d
   }|d   }|d   }t        ||||
d|«      }t        ||	||d|«      }t        j                  |«      }t        || |||	|
|||||||||«       t        j                  ||j                  |j                  |¬«      S )Nr4   r  c                   ó   — y)NzKavg_pool2d: kernel_size must either be a single int, or a tuple of two intsr5   r5   r;   r9   rf   z*meta_avg_pool2d_backward.<locals>.<lambda>Á  rn   r;   r   c                   ó   — yr�  r5   r5   r;   r9   rf   z*meta_avg_pool2d_backward.<locals>.<lambda>Ç  rn   r;   c                   ó   — y)NzGavg_pool2d: padding must either be a single int, or a tuple of two intsr5   r5   r;   r9   rf   z*meta_avg_pool2d_backward.<locals>.<lambda>Í  rn   r;   c                   ó   — yr”  r5   r5   r;   r9   rf   z*meta_avg_pool2d_backward.<locals>.<lambda>Ô  rn   r;   rX  rb  r•  r  r½   rÌ  )rW   rh   rã   rš   r‡   r˜  rP   r   r©  r�   r_   r„   )ÚgradOutput_rø   r  ræ   r  re  rš  r›  rœ  r�  rž  rŸ  r   r¡  Ú
input_sizer3  rf  r¢  r£  rg  rh  r§  s                         r9   Úmeta_avg_pool2d_backwardr±  ³  s  € ô 
‡L�LÜˆKÓ˜AÑÒ6¤ [Ó!1°QÑ!6Ù]ôð 
�Q‰€BÜ�;Ó 1Ò$‰¨+°a©.€BÜ	‡L�LÜˆF‹�qÑÒ@œC ›K¨1Ñ,Ò@´°F³¸qÑ0@Ùaôô �6‹{˜aÒ‰ V¨A¡Y€BÜ�6‹{˜aÒ‰¬3¨v«;¸!Ò+;¡RÀÈÁ€BÜ	‡L�LÜˆG‹˜ÑÒ.œS ›\¨QÑ.ÙYôð �1‰:€DÜ�w“< 1Ò$‰4¨'°!©*€Dä	‡L�LØ˜DÐ Ò9Ð$4¸Ñ$9Ù*ôð
 —‘€JØ$Ÿy™y›{¨aÒ/ˆZ˜Š^°Q€FØ˜R‘.€KØ˜R‘.€KØ˜B‘€Jä'¨°R¸¸rÀ1ÀiÓP€LÜ& z°2°t¸RÀÀIÓN€Kä×,Ñ,¨UÓ3€Jä#ØØØØ
Ø
Ø
Ø
ØØØØØØØØôô$ �;‰;ØØ�k‰kØ�|‰|Ø ô	ð r;   c                 ó  ‡ — 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                  |d u 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©r4   r1   c                   ó   — y©NzFavg_pool3d: kernel_size must be a single int, or a tuple of three intsr5   r5   r;   r9   rf   z!meta_avg_pool3d.<locals>.<lambda>	  rn   r;   r   r4   r  c                   ó   — y©NzJavg_pool3d: stride must be omitted, a single int, or a tuple of three intsr5   r5   r;   r9   rf   z!meta_avg_pool3d.<locals>.<lambda>  rn   r;   c                  ó@   •— d‰ j                   j                  «       › d�S )Nz""avg_pool3d" not implemented for 'r>  r?  rA  s   €r9   rf   z!meta_avg_pool3d.<locals>.<lambda>  r’  r;   c                   ó   — y©NzBavg_pool3d: padding must be a single int, or a tuple of three intsr5   r5   r;   r9   rf   z!meta_avg_pool3d.<locals>.<lambda>  rn   r;   ©rX  r|  c                   ó   — y©Nz9non-empty 4D or 5D (batch mode) tensor expected for inputr5   r5   r;   r9   rf   z!meta_avg_pool3d.<locals>.<lambda>%  rn   r;   c                   ó   — yr”  r5   r5   r;   r9   rf   z!meta_avg_pool3d.<locals>.<lambda>*  rn   r;   rb  r•  r  r½   zavg_pool3d()T)Úcheck_input_sizerX  )rW   rh   rã   r_   r<  r–  r—  rG  rÆ   rÄ   r˜  Úpool3d_shape_checkr™   )rø   r  ræ   r  re  rš  r›  ÚkTrœ  r�  ÚdTrž  rŸ  ÚpadTr   r¡  r3  ÚnslicesÚitimeÚiheightÚiwidthÚotimeÚoheightÚowidths   `                       r9   Úmeta_avg_pool3drË  ü  sŽ  ø€ ô 
‡L�LÜˆKÓ˜FÐ"ÙXôð 
�Q‰€BÜ�;Ó 1Ò$‰¨+°a©.€BÜ�;Ó 1Ò$‰¨+°a©.€Bä	‡L�LØˆ
Ò+”c˜&“k VÐ+Ù\ôô 
‡L�LØ�‰œEŸK™K¬¯©´u·|±|ÄUÇ\Á\ÐRÐRÛQôñ ‰˜v a™y€BÙ‰¤c¨&£k°QÒ&6¡¸FÀ1¹I€BÙ‰¤c¨&£k°QÒ&6¡¸FÀ1¹I€Bä	‡L�LÜˆG‹˜ÐÙTôð �1‰:€DÜ�w“< 1Ò$‰4¨'°!©*€DÜ�w“< 1Ò$‰4¨'°!©*€Dä	‡L�LØ�
‰
�fÐÙKôô
 
‡L�LØ˜DÐ Ò9Ð$4¸Ñ$9Ù*ôð
 �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                  |d u xs |dk7  d
„ «       |j	                  d«      }|j	                  d«      }|j	                  d«      }|j	                  d«      }t        ||||d|«      }t        ||	||d|«      }t        ||
||d|«      }t        || |||	|
||||||||||||d«       |j                  |j                  «      S )Nr³  c                   ó   — yrµ  r5   r5   r;   r9   rf   z*meta_avg_pool3d_backward.<locals>.<lambda>d  rn   r;   r   r4   r  c                   ó   — yr·  r5   r5   r;   r9   rf   z*meta_avg_pool3d_backward.<locals>.<lambda>l  rn   r;   c                   ó   — yrº  r5   r5   r;   r9   rf   z*meta_avg_pool3d_backward.<locals>.<lambda>t  rn   r;   r»  c                   ó   — yr½  r5   r5   r;   r9   rf   z*meta_avg_pool3d_backward.<locals>.<lambda>|  rn   r;   c                   ó   — yr”  r5   r5   r;   r9   rf   z*meta_avg_pool3d_backward.<locals>.<lambda>�  rn   r;   rb  r•  r  r½   zavg_pool3d_backward())	rW   rh   rã   rÆ   rÄ   r˜  Úavg_pool3d_backward_shape_checkr™   rš   )rM  rø   r  ræ   r  re  rš  r›  rÁ  rœ  r�  rÂ  rž  rŸ  rÃ  r   r¡  rÄ  rÅ  rÆ  rÇ  Úotime_for_shape_checkÚoheight_for_shape_checkÚowidth_for_shape_checks                           r9   Úmeta_avg_pool3d_backwardrÖ  V  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Ø˜DÐ Ò9Ð$4¸Ñ$9Ù*ôð
 �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 )Nr1   rX  c                  ó"   •— d‰ j                   › �S )Nz"Expected 3D or 4D tensor, but got rB  rÑ   s   €r9   rf   z*meta_adaptive_avg_pool2d.<locals>.<lambda>ª  ó   ø€ Ð4°T·Z±Z°LÐA€ r;   r  rÌ  )
rW   rh   rÆ   rš   rg   rP   r   r�   r_   r„   )r›   Úoutput_sizer¶  rÍ   s   `   r9   Ú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 )NrX  r|  c                  ó"   •— d‰ j                   › �S )Nz"Expected 4D or 5D tensor, but got rB  rÑ   s   €r9   rf   z*meta_adaptive_avg_pool3d.<locals>.<lambda>¼  rÙ  r;   r•  )rW   rh   rÆ   r™   rš   rg   )r›   rÚ  s   ` r9   Ú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 )	Nr4   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 emptyrB  )Úgrad_outrü   s   €€r9   rf   z4meta__adaptive_avg_pool2d_backward.<locals>.<lambda>Ç  s&   ø€ ð 6Ø6>·n±nÐ5EÐEUÐVWÐUXÐXdðf€ r;   r1   rX  c                  ó"   •— d‰ j                   › �S )NzBadaptive_avg_pool2d_backward(): Expected 3D or 4D tensor, but got rB  rÑ   s   €r9   rf   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   €€r9   rf   z4meta__adaptive_avg_pool2d_backward.<locals>.<lambda>Ð  s   ø€ �/ $§*¡* Ð-NÈxÏ~É~ÐN^Ð_€ r;   rÌ   )rÆ   rå   rW   rh   rÄ   r_   rÐ   r	  rd  r™   rš   rw  )rã  r›   rÆ   rÍ   rü   s   ``  @r9   Ú"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_checkrW   rŸ   r\  ©rM  r›   s     r9   Ú"meta__adaptive_avg_pool3d_backwardrí  Ø  s(   € ô & kÐ3QÔRÜ×Ñ˜D´×0NÑ0NÔOÐOr;   rM  c                 óž   ‡ ‡‡— ‰ j                   }t        d|«      D ]/  Št        j                  ‰ j	                  ‰«      dkD  ˆˆ ˆfd„«       Œ1 y )Nr4   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â  rB  )r$  rM  rü   s   €€€r9   rf   z3_adaptive_pool_empty_output_check.<locals>.<lambda>ä  s/   ø€ Ø�*ð -Ø-8×->Ñ->Ð,?Ð?OÐPQÈsÐR^ð`ð r;   )rÆ   rå   rW   rh   rÄ   )rM  r$  rÆ   rü   s   `` @r9   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©r1   rX  c                  ó"   •— d‰ j                   › �S )Nz:adaptive_max_pool2d(): Expected 3D or 4D tensor, but got: rB  rA  s   €r9   rf   z*meta_adaptive_max_pool2d.<locals>.<lambda>ñ  ó   ø€ ÐLÈUÏ[É[ÈMÐZ€ r;   r4   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â  rB  ©rü   rø   s   €€r9   rf   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 2r5   r5   r;   r9   rf   z*meta_adaptive_max_pool2d.<locals>.<lambda>þ  rn   r;   rX  r1   r’   rÌ   )rÆ   rW   rh   rå   rÄ   rã   r™   r×   rP   r   rw  )rø   rÚ  rÆ   ÚdimHÚsizeBÚsizeDÚosizeHÚosizeWrÉ   rí   rÔ   rÍ   rü   s   `           @r9   Ú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: rB  ©rM  s   €r9   rf   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’   )rM  rø   s   €€r9   rf   z3meta_adaptive_max_pool2d_backward.<locals>.<lambda>(  s!   ø€ �/ %§+¡+ Ð.OÐP[×PaÑPaÐObÐc€ r;   rÌ   )
rÆ   rW   rh   rë  r_   rP   r   r™   rš   rw  )rM  rø   rÔ   rÆ   rÍ   s   ``   r9   Ú!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: rB  rA  s   €r9   rf   z*meta_adaptive_max_pool3d.<locals>.<lambda>5  ró  r;   r4   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â  rB  rõ  s   €€r9   rf   z*meta_adaptive_max_pool3d.<locals>.<lambda>:  rö  r;   r1   c                   ó   — y)NzCadaptive_max_pool3d(): internal error: output_size.size() must be 3r5   r5   r;   r9   rf   z*meta_adaptive_max_pool3d.<locals>.<lambda>B  rn   r;   r|  rX  r’   )rÆ   rW   rh   rå   rÄ   rã   r™   r×   )rø   rÚ  rÆ   ÚdimDrù  rú  ÚosizeTrû  rü  rÉ   rí   rÔ   rü   s   `           @r9   Ú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š   )rM  rø   rÔ   s      r9   Ú!meta_adaptive_max_pool3d_backwardr  [  s"   € ô & kÐ3QÔRØ�?‰?˜5Ÿ;™;Ó'Ð'r;   c                 ó>   — |€t        d«      ‚| j                  |«      S )Nz:cannot repeat_interleave a meta tensor without output_size)rv  r™   )ÚrepeatsrÚ  s     r9   Úmeta_repeat_interleave_Tensorr  b  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 ©rM   )r_   r!  r‹   rU   rw  r   r   rQ   )ÚrealÚimagr,  s      r9   Úmeta_complexr  i  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)r  Úmpsr  r’   r4   ©r_   r„   )r  r™   r‡   rW   r–   ru  r„   )r›   rÄ   r  s      r9   Únonzero_staticr  x  sj   € ô �4ÓÐ1Ñ1Ø�~‰~˜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.r5   r5   r;   r9   rf   znonzero.<locals>.<lambda>Œ  rn   r;   r4   r  )	rW   Ú_check_not_implementedr³  Úmeta_nonzero_assume_all_nonzeroru  r˜   r‡   r–   r„   rÑ   s    r9   Ú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 providedr5   r5   r;   r9   rf   z#meta_index_Tensor.<locals>.<lambda>œ  rn   r;   c                   ó   — y)Nz?tensors used as indices must be long, int, byte or bool tensorsr5   r5   r;   r9   rf   z#meta_index_Tensor.<locals>.<lambda>¤  rn   r;   c                  ó"   •— d‰ j                   › �S )Nú)too many indices for tensor of dimension rT  rÑ   s   €r9   rf   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 rB  )rü   r”   Újr”  r›   s   €€€€€r9   rf   z#meta_index_Tensor.<locals>.<lambda>°  s<   ø€ Ð"8¸¿¹¸ÀZÐPQÈsð SJØJNÏ*É*ÈÐU_Ð`aÐdeÑ`eÐ_fð!h€ r;   r4   c                  ó<   •— d‰j                   › dt        ‰ «      › d�S )Nr$  z (got rz   )rÆ   rã   )rÔ   r›   s   €€r9   rf   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š   Ú
as_strided)r›   rš   r  Úafter_shapeÚbefore_shapeÚreplacement_shapes      €€€r9   Ú_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;   r  ) rW   rh   rC  Ú	enumerater_   r–   r  r‘  r  rã   r—   rÆ   rå   rš   rý  ÚselectÚtorch._refsrx  rä   r'   rè   r™   rt  r  r˜   rP   Ú3compute_elementwise_output_logical_to_physical_permÚ
apply_permr   Úinvert_permr*  rÄ   )r›   rÔ   r,  r  ÚrefsÚstateÚhas_contiguous_subspacerÞ  Útransposed_indicesr‡   r.  rí   r  Úrestrided_selfÚpermrS   Ú
perm_shaper‚  r+  r,  rü   r”   r'  r”  r-  s   ``                @@@@@@@r9   Ú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   r/| j                  |j                  «       «      j                  |¬«      }|
d   r/| 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 rE   )r   rW   rd  r+  rÐ   )Út1Út2Úfmt1Úfmt2s       r9   Ú_conv_memory_formatz6meta_convolution_backward.<locals>._conv_memory_format9  sp   € Ü$ RÓ(ˆÜ$ RÓ(ˆØ”5×&Ñ&Ò&¨$´%×2EÑ2EÒ*EÜ×&Ñ&Ð&Ø”5×)Ñ)Ò)¨T´U×5KÑ5KÒ-KÜ×)Ñ)Ð)Ü×&Ñ&Ð&r;   r   rÌ   r4   r  )r™   rÄ   rw  )Úgrad_output_Úinput_Úweight_Úbias_sizes_optræ   r  ræ  r"  ré  rè  Úoutput_maskÚbackend_grad_inputÚbackend_grad_weightÚbackend_grad_biasrC  rÍ   s                   r9   Úmeta_convolution_backwardrL    s¸   € ð  ÐØÐØÐò'ñ (¨°Ó8€MØ�1‚~Ø)×3Ñ3°F·K±K³MÓB×EÑEØ'ð Fó 
Ðð �1‚~Ø*×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 )
Nr4   r  r1   c                   ó   — yr¥  r5   r5   r;   r9   rf   zmeta_addbmm.<locals>.<lambda>W  rn   r;   c                   ó   — yr§  r5   r5   r;   r9   rf   zmeta_addbmm.<locals>.<lambda>X  rn   r;   r   c                  óP   •— d‰ j                  d«      › d‰j                  d«      › �S )Nz8batch1 and batch2 must have same number of batches, got r   rÂ   rÃ   ©r©  rª  s   €€r9   rf   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 (r4   r>   r  rÂ   rz   rÃ   rQ  s   €€r9   rf   zmeta_addbmm.<locals>.<lambda>_  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 shaper5   r5   r;   r9   rf   zmeta_addbmm.<locals>.<lambda>f  rn   r;   )rÄ   ry  rW   rh   r‡   r™   )r›   r©  rª  r¥  r¤  rµ  r¶  s    ``    r9   Úmeta_addbmmrT  Q  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           
      óâ   — t         j                  j                  | |j                  d«      |j                  d«      |j                  d«      |j                  d«      |j                  d«      ¬«      S )Nr_   rƒ   r„   r…   rÍ   r÷  )r.   rŸ   r  r^   )r›   r6  Úkwargss      r9   Úmeta_randint_likerW  k  s]   € ä�?‰?×"Ñ"ØØ�j‰j˜Ó!Ø�z‰z˜(Ó#Ø�z‰z˜(Ó#Ø—:‘:˜lÓ+Ø—j‘j Ó1ð #ó ð 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 ©r{   ©Úls   €r9   rf   z#meta__fused_adam_.<locals>.<lambda>�  ó   ø€ Ð=¼dÀ1»g¸YÐG€ r;   ©rW   rh   rq   rä   )r›   ÚgradsÚexp_avgsÚexp_avg_sqsÚmax_exp_avg_sqsÚstate_stepsÚlrÚbeta1Úbeta2Úweight_decayr­   ÚamsgradÚmaximizerX  rY  r_  s                  @r9   Úmeta__fused_adam_rm  w  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   €r9   rf   z"meta__fused_adam.<locals>.<lambda>§  r`  r;   c                 óR   — | D �cg c]  }t        j                  |«      ‘Œ c}S c c}w rE   rž   )Útensor_listr  s     r9   Úempty_like_listz)meta__fused_adam.<locals>.empty_like_listª  s!   € Ø-8Ö9¨”× Ñ  Õ#Ò9Ð9ùÒ9s   …$ra  )r›   rb  rc  rd  re  rf  rg  rh  ri  rj  r­   rk  rl  rX  rY  rr  r_  s                   @r9   Úmeta__fused_adamrs  ‘  ss   ø€ ð& �E˜8 [°/À;ÐOò 
ˆÜ�‰Ü�qœ$ÓÛGõ	
ð
ò:ñ 	˜ÓÙ˜ÓÙ˜Ó!Ù˜Ó$Ù˜Ó(ðð r;   c                 óŠ  ‡ ‡— t        j                  ‰ j                  «       dk(  d„ «       t        j                  ‰j                  «       dk(  d„ «       t        j                  ‰ j                  t         j                  t         j
                  fv ˆ 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 tensorr5   r5   r;   r9   rf   zmeta__int_mm.<locals>.<lambda>¹  rn   r;   c                   ó   — y)Nzb must be a 2D tensorr5   r5   r;   r9   rf   zmeta__int_mm.<locals>.<lambda>º  rn   r;   c                  ó"   •— d‰ j                   › �S )Nz'expected self to be int8 or uint8, got r’   )r7   s   €r9   rf   zmeta__int_mm.<locals>.<lambda>½  s   ø€ Ð9¸!¿'¹'¸ÐC€ r;   c                  ó"   •— d‰ j                   › �S )Nzexpected mat2 to be int8, got r’   )r8   s   €r9   rf   zmeta__int_mm.<locals>.<lambda>Á  s   ø€ Ð0°·±°	Ð:€ r;   r4   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>   r4   rÂ   rz   rÃ   r6   s   €€r9   rf   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’   )	rW   rh   r‡   r_   r‘  r<  rÄ   r™   r’  r6   s   ``r9   Úmeta__int_mmrz  ¶  sÙ   ù€ ô 
‡L�L�—‘“˜A‘Ñ>Ô?Ü	‡L�L�—‘“˜A‘Ñ>Ô?Ü	‡L�LØ	�‰”E—J‘J¤§¡Ð,Ð,ÛCôô 
‡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 tensorr5   r5   r;   r9   rf   z2meta__convert_weight_to_int4pack.<locals>.<lambda>Ï  rn   r;   c                  ó"   •— d‰ j                   › �S rs  r’   ro  s   €r9   rf   z2meta__convert_weight_to_int4pack.<locals>.<lambda>Ò  ó   ø€ Ð.¨q¯w©w¨iÐ8€ r;   r   r4   é   é   é    r’   )rW   rh   r‡   r_   r<  rÄ   r™   r’  ©r?  Úinner_k_tilesr+  r”  s   `   r9   Ú 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}  r5   r5   r;   r9   rf   z:meta__convert_weight_to_int4pack_for_cpu.<locals>.<lambda>ã  rn   r;   c                  ó"   •— d‰ j                   › �S ©Nzexpected w to be int32, got r’   ro  s   €r9   rf   z:meta__convert_weight_to_int4pack_for_cpu.<locals>.<lambda>æ  r  r;   r   r4   r’   )rW   rh   r‡   r_   r’  rÄ   r™   r<  rƒ  s   `   r9   Ú(meta__convert_weight_to_int4pack_for_cpurŠ  á  s   ø€ ä	‡L�L�—‘“˜A‘Ñ>Ô?Ü	‡L�LØ	�‰”5—;‘;ÐÛ8ôð 	
�‰ˆq‹	€AØ	�‰ˆq‹	€AØ�;‰;Ø	
ˆA�‰FˆÜ�k‰kð ó ð r;   c                 óÆ  ‡ ‡‡— t        j                  ‰ j                  «       dk(  d„ «       ‰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 tensorr5   r5   r;   r9   rf   z*meta__weight_int4pack_mm.<locals>.<lambda>ò  rn   r;   r  rX  c                  ó   •— d‰ › d�S )Nzw must be a zD tensorr5   )Úexpected_dims   €r9   rf   z*meta__weight_int4pack_mm.<locals>.<lambda>ô  s   ø€ °LÀÀÈhÐ2W€ r;   c                  ó"   •— d‰ j                   › �S rq  r’   rl  s   €r9   rf   z*meta__weight_int4pack_mm.<locals>.<lambda>÷  ó   ø€ Ð5°a·g±g°YÐ?€ r;   c                  ó"   •— d‰ j                   › �S r‰  r’   ro  s   €r9   rf   z*meta__weight_int4pack_mm.<locals>.<lambda>û  r  r;   r   r€  r’   )rW   rh   r‡   rã  r{   r_   r°  r±  r²  r’  rÄ   r™   )r>   r?  ru  rw  Údim_nr�  s   ``   @r9   Ú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r�  r5   r5   r;   r9   rf   z2meta__weight_int4pack_mm_for_cpu.<locals>.<lambda>  rn   r;   c                   ó   — yr}  r5   r5   r;   r9   rf   z2meta__weight_int4pack_mm_for_cpu.<locals>.<lambda>  rn   r;   c                  ó"   •— d‰ j                   › �S rq  r’   rl  s   €r9   rf   z2meta__weight_int4pack_mm_for_cpu.<locals>.<lambda>  r‘  r;   c                  ó"   •— d‰ j                   › �S rs  r’   ro  s   €r9   rf   z2meta__weight_int4pack_mm_for_cpu.<locals>.<lambda>  r  r;   r   r’   )
rW   rh   r‡   r_   r°  r±  r²  r<  r™   rÄ   rx  s   ``  r9   Ú meta__weight_int4pack_mm_for_cpurš    ó¯   ù€ ä	‡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r�  r5   r5   r;   r9   rf   z;_weight_int4pack_mm_with_scales_and_zeros.<locals>.<lambda>  rn   r;   c                   ó   — yr}  r5   r5   r;   r9   rf   z;_weight_int4pack_mm_with_scales_and_zeros.<locals>.<lambda>  rn   r;   c                  ó"   •— d‰ j                   › �S rq  r’   rl  s   €r9   rf   z;_weight_int4pack_mm_with_scales_and_zeros.<locals>.<lambda>  r‘  r;   c                  ó"   •— d‰ j                   › �S r‰  r’   ro  s   €r9   rf   z;_weight_int4pack_mm_with_scales_and_zeros.<locals>.<lambda>  r  r;   r   r’   )
rW   rh   r‡   r_   r°  r±  r²  r’  r™   rÄ   )r>   r?  ru  ÚqScaleÚqZeross   ``   r9   Ú)_weight_int4pack_mm_with_scales_and_zerosr£    r›  r;   r7   r8   c                 ó   — | |z   dz
  |z  |z  S r3   r5   r6   s     r9   Úkai_roundupr¥    s   € Ø�‰U�Q‰Y˜1Ñ Ñ!Ð!r;   c                 ó  ‡	‡
‡‡‡‡‡‡‡‡‡— | dk(  ry||k(  r(d}d}d}dŠdŠdŠd„ Šˆˆˆˆfd„Šˆfd„} ||||||«      S |dz  d	k(  rC||z  d	k(  r:d}d}d}dŠdŠdŠdŠ	ˆ	ˆˆfd
„}ˆ	ˆ
ˆˆˆˆˆfd„Šd„ Š
ˆ	fd„Šˆ	fd„Š |||||||«      S y y y )NrX  r€  r�  r  c                 ó8   — t        ||z  d«      }t        | |«      S )NrX  ©r¥  )r”  ÚkrÚsrÚkr_sr_roundedup4s       r9   Ú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 rI  )	r”  Únrr©  rª  Ú
k_internalr¬  Úkai_num_bytes_biasÚkai_num_bytes_multiplier_rhsÚkai_num_bytes_sum_rhss	        €€€€r9   Ú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_qsu4cxs1s05  s`   ø€ ñ -¨Q°°BÓ7�
à ‘N qÒ(Ü(Ð+HÈÈÐ)UÓVÐVàØ 1‘_Ø2ñ3à+ñ,ð )ñ)ñð r;   c                 ó>   •— t        | |«      |z  }| ‰||||«      z  S rE   r¨  )r+  r”  r®  r©  rª  Únum_rowsr³  s         €r9   Ú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_qsu4cxs1s0D  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 (rz   znr (z+) must be divisible by kai_nr_multiple_of (ú+) must be divisible by kai_bl_multiple_of (©r‹   r¥  )
r+  r”  r®  r©  rª  Úblrµ  Úkai_bl_multiple_ofÚ;kai_get_rhs_packed_stride_rhs_pack_nxk_qsi4c32p_qsu4c32s1s0Úkai_nr_multiple_ofs
          €€€r9   Ú9kai_get_rhs_packed_size_rhs_pack_nxk_qsi4c32p_qsu4c32s1s0z]get_kai_packed_weight_size.<locals>.kai_get_rhs_packed_size_rhs_pack_nxk_qsi4c32p_qsu4c32s1s0\  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¸  rI  )r”  r®  r©  rª  r¼  Únum_bytes_multiplier_rhsÚnum_blocks_per_rowÚnum_bytes_per_blockr½  Ú#kai_get_bf16_datatype_size_in_bytesr¿  Úkai_num_blocks_per_rowr°  Úkai_num_bytes_per_blockr²  s           €€€€€€€r9   r¾  z_get_kai_packed_weight_size.<locals>.kai_get_rhs_packed_stride_rhs_pack_nxk_qsi4c32p_qsu4c32s1s0s  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  r5   r5   r;   r9   rÅ  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¹  rº  rz   r»  )r”  r¼  r½  s     €r9   rÆ  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¹  rº  rz   r  rI  )r¼  rÂ  r½  s     €r9   rÇ  z;get_kai_packed_weight_size.<locals>.kai_num_bytes_per_blockš  sF   ø€ ØÐ+Ñ+°Ò1Ü(Ø˜r˜dÐ"MÐN`ÐMaÐabÐcóð ð ˜a™Ð#;Ñ;Ð;r;   r5   )Ún_bitsrÙ  ÚKÚ	groupsizeÚkai_nrÚkai_krÚkai_srr¶  rÀ  r½  rÅ  r¾  r³  r¬  r¿  rÆ  r°  r±  rÇ  r²  s            @@@@@@@@@@@r9   Úget_kai_packed_weight_sizerÑ  #  sç   ÿú€ Ø�‚{à˜Š>àˆFØˆFØˆFØ$%Ð!Ø+,Ð(Ø!"Ðò8÷ô
ñ KØ�1�f˜f fóð ð ˜‰^˜qÒ  Q¨¡]°aÒ%7ØˆFØˆFØˆFØ$%Ð!Ø!"ÐØ!"ÐØ!#Ðö÷.ò ò:ô0ô<ñ MØ�1�f˜f f¨ióð ð] &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 rs  r’   )Úweightss   €r9   rf   z2meta__dyn_quant_pack_4bit_weight.<locals>.<lambda>¬  s   ø€ Ð.¨w¯}©}¨oÐ>€ r;   r‚  r   rX  r’   )rW   rh   r_   r<  r  Úkleidiair  r[   r²  rÑ  r™   r  r˜   )rÔ  Úscales_zerosrŠ  Ú
block_sizeÚin_featuresÚout_featuresÚpacked_weight_sizes   `      r9   Ú 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 tensorr5   r5   r;   r9   rf   z-meta__dyn_quant_matmul_4bit.<locals>.<lambda>É  rn   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   €€€r9   rf   z-meta__dyn_quant_matmul_4bit.<locals>.<lambda>Í  s*   ø€ ðØ—9‘9�+Ð.¨z¨lÐ:KÈKÈ=ðZð r;   r   r’   )rW   rh   r‡   r_   r°  r²  rÄ   r™   )rß  Úpacked_weightsr×  rØ  rÙ  rñ  s   ` ``  r9   Ú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„«       t        j                  ‰j                  d«      ‰ j                  d«      k(  ˆˆ fd„«       t        j                  ‰j                  «       dk(  xr# ‰j                  d«      ‰j                  d«      k(  ˆˆfd	„«       ‰ j                  ‰ j                  d«      ‰j                  d«      ‰ j                  ¬
«      S )Nr  c                   ó   — yr�  r5   r5   r;   r9   rf   z*meta__weight_int8pack_mm.<locals>.<lambda>Ø  rn   r;   c                  ó"   •— d‰ j                   › �S rq  r’   rl  s   €r9   rf   z*meta__weight_int8pack_mm.<locals>.<lambda>Û  r‘  r;   c                   ó   — yr}  r5   r5   r;   r9   rf   z*meta__weight_int8pack_mm.<locals>.<lambda>Ý  rn   r;   c                  ó"   •— d‰ j                   › �S )Nzexpected w to be int8, got r’   ro  s   €r9   rf   z*meta__weight_int8pack_mm.<locals>.<lambda>à  s   ø€ Ð-¨a¯g©g¨YÐ7€ r;   r4   c                  óR   •— d‰ j                  d«      › d‰j                  d«      › d�S )Nzexpected w.size(1) (r4   z) == x.size(1) (rz   rÃ   )r?  r>   s   €€r9   rf   z*meta__weight_int8pack_mm.<locals>.<lambda>ä  s(   ø€ Ð& q§v¡v¨a£y kÐ1AÀ!Ç&Á&ÈÃ)ÀÈAÐN€ r;   r   c                  óF   •— d‰j                  d«      › d‰ j                  › �S )Nz%expected q_scales to be 1D with size r   z, got shape )rÄ   rš   )Úq_scalesr?  s   €€r9   rf   z*meta__weight_int8pack_mm.<locals>.<lambda>è  s"   ø€ Ð7¸¿¹¸q»	°{À,ÈxÏ~É~ÐN^Ð_€ r;   r’   )
rW   rh   r‡   r_   r°  r±  r²  r‘  rÄ   r™   )r>   r?  ré  s   ```r9   Úmeta__weight_int8pack_mmrê  Ö  s  ú€ ä	‡L�L�—‘“˜A‘Ñ>Ô?Ü	‡L�LØ	�‰”E—M‘M¤5§=¡=´%·.±.ÐAÐAÛ?ôô 
‡L�L�—‘“˜A‘Ñ>Ô?Ü	‡L�LØ	�‰”5—:‘:ÐÛ7ôô 
‡L�LØ	�‰ˆq‹	�Q—V‘V˜A“YÑÜNôô 
‡L�LØ�‰‹˜!ÑÒ= §¡¨aÓ 0°A·F±F¸1³IÑ =Ü_ôð �;‰;�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: rœ  r¾   ©Úx1s   €r9   rf   z$meta_cdist_forward.<locals>.<lambda>ñ  ó   ø€ ÐCÀBÇFÁFÃHÀ:ÈQÐO€ r;   c                  ó,   •— d‰ j                  «       › d�S )Nz1cdist only supports at least 2D tensors, X2 got: rœ  r¾   ©Úx2s   €r9   rf   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   €€r9   rf   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   €r9   rf   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   €r9   rf   z$meta_cdist_forward.<locals>.<lambda>  rõ  r;   r   c                   ó   — y)Nz)cdist only supports non-negative p valuesr5   r5   r;   r9   rf   z$meta_cdist_forward.<locals>.<lambda>  rn   r;   )Nr   r4   r  c                  ó   •— d‰ › �S )Nz(possible modes: None, 0, 1, 2, but was: r5   )Úcompute_modes   €r9   rf   z$meta_cdist_forward.<locals>.<lambda>  s   ø€ Ð:¸<¸.ÐI€ r;   r  )rW   rh   r‡   rÄ   rP   Úis_float_dtyper_   rš   rä   Úbroadcast_shapesÚextendr™   )	rî  rò  r—  rù  Úr1Úr2Úbatch_tensor1Úbatch_tensor2r¶  s	   `` `     r9   Ú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ä   rW   rû  Úcopyrü  ÚmathÚprodÚ
zeros_likery  rŸ   rÐ   )r›  rî  rò  r—  ÚcdistÚc1rý  rþ  rÿ  r   rË  Útensor1_expand_sizeÚbatch_products                r9   Ú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   €r9   rf   z$meta_embedding_bag.<locals>.<lambda>6  ó   ø€ Ð:¸7¿=¹=¸/ÐJ€ r;   c                  ó"   •— d‰ j                   › �S )Nz(expected offsets to be long or int, got r’   )rÆ  s   €r9   rf   z$meta_embedding_bag.<locals>.<lambda>:  r  r;   c                  ó"   •— d‰ j                   › �S )Nz/expected weight to be floating point type, got r’   )rˆ  s   €r9   rf   z$meta_embedding_bag.<locals>.<lambda>>  s   ø€ ÐAÀ&Ç,Á,ÀÐP€ r;   r   r4   c                   ó   — y©Nz1include_last_offset: numBags should be at least 1r5   r5   r;   r9   rf   z$meta_embedding_bag.<locals>.<lambda>E  rn   r;   c                   ó   — y)Nz@embedding_bag: per_sample_weights only supported with mode='sum'r5   r5   r;   r9   rf   z$meta_embedding_bag.<locals>.<lambda>N  rn   r;   c                  ó$   •— d‰ j                   › d�S )Nz1expected per_sample_weights to be 1D tensor, got rœ  rT  )Úper_sample_weightss   €r9   rf   z$meta_embedding_bag.<locals>.<lambda>R  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() (rz   ©r˜   )rÔ   r  s   €€r9   rf   z$meta_embedding_bag.<locals>.<lambda>V  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   r4   ©ræ   )r¤   rÊ  r  Úpadding_idxÚis_fast_path_index_selects       €r9   Úis_fast_path_index_select_scalez;meta_embedding_bag.<locals>.is_fast_path_index_select_scale\  s(   ø€ á% c¨6°;Ó?ÒXÀEÇLÁLÐQRÃOÐWXÑDXð	
r;   c                 óà   — | j                   t        j                  k(  xs | j                   t        j                  k(  xr1 | j	                  d«      dk(  xr |j	                  d«      dk(  xr |dk  S ©Nr4   r   )r_   rW   r[   rY   ræ   )r¤   r  r  s      r9   r  z5meta_embedding_bag.<locals>.is_fast_path_index_selecta  sb   € à�Y‰Yœ%Ÿ+™+Ñ%Ò@¨¯©´e·j±jÑ)@ò  Ø—
‘
˜1“ Ñ"ò à—‘˜aÓ  AÑ%ò ð ˜a‘ð		
r;   c                 ó2   •— |� ‰| |||«      S  ‰| ||«      S rE   r5   )r¤   rÊ  r  r  r  r  s       €€r9   Úis_fast_pathz(meta_embedding_bag.<locals>.is_fast_pathi  s)   ø€ ØÐÙ2°3¸¸vÀ{ÓSÐSá,¨S°&¸+ÓFÐFr;   r  c                   ó   — yr  r5   r5   r;   r9   rf   z$meta_embedding_bag.<locals>.<lambda>ƒ  rn   r;   )rW   rh   r_   r–   r  rP   rú  rÄ   r™   ÚMODE_SUMrÆ   r˜   r  ÚMODE_MAXÚ	MODE_MEANrš   )rˆ  rÔ   rÆ  Úscale_grad_by_freqr©  Úsparser  Úinclude_last_offsetr  Únum_bagsr  r"  Ú
offset2bagÚbag_sizeÚmax_indicesÚfast_path_sumÚnumBagsr  r  s   ```   `          @@r9   Úmeta_embedding_bagr0  (  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  )r0  r  r™   rÄ   )rˆ  rÔ   rÆ  rR   r  r+  r,  r-  s           r9   Úmeta_embedding_bag_forward_onlyr3  Œ  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 rE   )r_   r!  r  rW   r–   )rø   r_   Úpromote_int_to_longs      r9   Ú_get_reduction_dtyper6  –  sD   € áØˆà‡{�{×$Ò$¨¯©×(>Ò(>Ø�{‰{ÐÙ	Ü�z‰zÐà�;‰;Ðr;   r’   c                óž   — t        | |d¬«      }t        j                  | j                  |«      }t	        | ||«      }| j                  ||¬«      S )NT)r5  r’   )r6  rP   rØ  rš   rÙ  r™   )rø   rÞ  rÛ  r_   rD  r¶  s         r9   Úmeta_nansumr8  £  sI   € ô (¨¨uÈ$ÔO€LÜ×Ñ §¡¨TÓ2€DÜ+¨E°4¸ÓA€LØ�?‰?˜<¨|ˆ?Ó<Ð<r;   c           	      ó¤   — t        j                  | j                  t        t	        | j                  «       «      «      «      }| j                  |«      S rE   )rP   rß  rš   rg   rå   r‡   r™   )rø   r¶  s     r9   Ú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  rP   Úalert_not_deterministicrØ  rš   rÙ  r™   rW   r–   )rø   r‡   rÛ  r¶  s       r9   Úmeta_median_mode_dimr=  ´  sp   € ô �5Ó˜VÒ#Ü×%Ñ%Ð&GÔHÜ
×
Ñ
˜uŸ{™{¨S¨FÓ
3€CÜ+¨E°3¸Ó@€Là�‰˜Ó%Ø�‰˜¬E¯J©JˆÓ7ðð r;   c                 ó   — | S rE   r5   rÑ   s    r9   Úmeta_logical_not_r?  Ê  r¿  r;   c                 ó¶  ‡‡— t        j                  t        |«      | j                  «       k\  d„ «       t	        |«      D ]"  \  ŠŠt        j                  ‰dk\  ˆˆfd„«       Œ$ t        |«      | j                  «       z
  }d|z  t        | j                  «      z   }t        t        |«      «      D �cg c]  }||   ||   z  ‘Œ }}| j                  |«      S c c}w )Nc                   ó   — y)NzZNumber of dimensions of repeat dims can not be smaller than number of dimensions of tensorr5   r5   r;   r9   rf   zmeta_repeat.<locals>.<lambda>Ó  rn   r;   r   c                  ó   •— d‰› d‰ › �S )Nz"Repeats cannot be negative, found r&  r5   )rü   Úreps   €€r9   rf   zmeta_repeat.<locals>.<lambda>Ø  s   ø€ Ð8¸¸¸ZÈÀsÐK€ r;   r_  )	rW   rh   rã   r‡   r/  rg   rš   rå   r™   )r›   r  Únum_new_dimensionsÚpadded_sizerü   Útarget_sizerC  s       ` @r9   Úmeta_repeatrG  Ï  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 rE   r5   rÑ   s    r9   Ú
meta_zero_rI  ã  r¿  r;   c                 óz   — t        |t        j                  «      r t        | j                  |j                  «       | S rE   )rq   rW   r   rj   rš   ©r›   rÅ   s     r9   Úmeta_binop_inplacerL  è  s)   € ô �%œŸ™Ô&Ü §
¡
¨E¯K©KÔ8Ø€Kr;   c                 ó.  ‡ ‡— t        ‰ |t        j                  ¬«      \  }Št        j                  t        j                  ‰‰ j                  ¬«      ˆˆ fd„«       t        |t        j                  «      r t        ‰ j                  |j                  «       ‰ S )Nrä  )Ú	cast_fromÚcast_toc                  ó(   •— d‰ › d‰j                   › �S )Nzresult type z* can't be cast to the desired output type r’   )rT   r›   s   €€r9   rf   z"meta_div_inplace.<locals>.<lambda>   s"   ø€ Ø˜<˜.ð )ØŸ:™:˜,ð(ð r;   )r   r   rå  rW   rh   rP   Úcan_safe_cast_tor_   rq   r   rj   rš   )r›   rÅ   rS   rT   s   `  @r9   Úmeta_div_inplacerR  ÷  sn   ù€ ä(ØØÜ;×HÑHô�O€A€|ô
 
‡L�LÜ×Ñ¨¸t¿z¹zÔJô	
ôô �%œŸ™Ô&Ü §
¡
¨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 rE   )rq   r    rP   rŠ  r_   r   ©rt   s    r9   Ú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 rE   )rq   r    rP   rú  r_   r   rU  s    r9   Ú
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 rE   )rq   r    rP   Úis_boolean_dtyper_   r   rU  s    r9   Ú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 bool.add/sub_(others) in in-place ops are not possible due to element size change.)rv  rq   rW   r   rj   rš   )r›   rÅ   r¤  rV  rX  r[  s         r9   Úmeta_binop_inplace_alphar\    sz   € ò$,ò.ò-ñ �DÔ™j¨Ô/ÜØkó
ð 	
ñ
 �DÔ¡,¨uÔ"5ÜØmó
ð 	
ô �%œŸ™Ô&Ü §
¡
¨E¯K©KÔ8Ø€Kr;   c                 ó:   — t        | |t        j                  ¬«      S ©Nr  ©rU   r   rQ   ©r›   rÅ   r¤  s      r9   Úmeta_binop_alphara  @  s   € ô ØˆeÔ$C×$KÑ$Kôð r;   c                 ó8   — t        | t        j                  ¬«      S r^  r_  )r›   rV  s     r9   Ú
meta_roundrc  L  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   €€r9   rf   z#shift_dtype_check.<locals>.<lambda>V  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   €€r9   rf   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 r5   rg  s   €€r9   rf   z#shift_dtype_check.<locals>.<lambda>`  s   ø€ �w�iÐHÈÈÐN€ r;   )rW   rh   rP   rŠ  r_   rq   r   r   )r-  r›   rî  s   ```r9   Úshift_dtype_checkri  S  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  ©ri  rU   r   rQ   rK  s     r9   Úmeta_rshiftsrm  d  ó)   € ä�h  eÔ,ÜØˆeÔ$C×$KÑ$Kôð r;   c                 óT   — t        d| |«       t        | |t        j                  ¬«      S )NÚlshiftr  rl  rK  s     r9   Úmeta_lshiftsrq  l  rn  r;   c                 ó,   — t        j                  | «      S rE   rž   rÑ   s    r9   Ú	meta_zerors  t  ó   € ä×Ñ˜DÓ!Ð!r;   c                 ó�   ‡— t        ‰t        j                  «      r*t        j                  ‰j	                  «       dk(  ˆfd„«       | S )Nr   c                  ó,   •— d‰ j                  «       › d�S ©NzAfill_ only supports 0-dimension value tensor but got tensor with ú dimensions.r¾   rí  s   €r9   rf   zmeta_fill_.<locals>.<lambda>~  ó   ø€ ÐWÐX[×X_ÑX_ÓXaÐWbÐbnÐo€ r;   )rq   rW   r   rh   r‡   ©r›   rî  s    `r9   Ú
meta_fill_r{  y  s4   ø€ ä�#”u—|‘|Ô$Ü�‰Ø�G‰G‹I˜‰NÛoô	
ð €Kr;   c                 ó¶   ‡— t        ‰t        j                  «      r*t        j                  ‰j	                  «       dk(  ˆfd„«       t        j
                  | «      S )Nr   c                  ó,   •— d‰ j                  «       › d�S rw  r¾   rí  s   €r9   rf   zmeta_fill.<locals>.<lambda>ˆ  ry  r;   )rq   rW   r   rh   r‡   rŸ   rz  s    `r9   Ú	meta_fillr~  ƒ  s@   ø€ ä�#”u—|‘|Ô$Ü�‰Ø�G‰G‹I˜‰NÛoô	
ô ×Ñ˜DÓ!Ð!r;   c                 ó   — | S rE   r5   rÑ   s    r9   Ú
meta_relu_r€  �  r¿  r;   c                 ó:   — t        | |t        j                  ¬«      S r^  r_  r`  s      r9   Úmeta__add_relur‚  ’  s   € ô ØˆeÔ$C×$KÑ$Kôð r;   c                 ó,   — t        j                  | «      S rE   rž   ©r›   ÚnoiseÚlowerr7  r  r¡   s         r9   Úmeta_rrelu_with_noiser‡  š  s   € ô
 ×Ñ˜DÓ!Ð!r;   c                 óV   — t        j                  | «      t        j                  |«      fS rE   rž   r„  s         r9   Ú meta_rrelu_with_noise_functionalr‰  ¢  s%   € ô ×Ñ˜DÓ!¤5×#3Ñ#3°EÓ#:Ð:Ð:r;   c                 ó   — | S rE   r5   )r›   r†  r7  r  r¡   s        r9   Úmeta_rrelu_with_noise_r‹  ©  s	   € ð €Kr;   c                 ó,   — t        j                  | «      S rE   rž   ©r›   rÔ   rÓ   Ú
accumulates       r9   Úmeta_index_putr�  °  rt  r;   c                 óF   — t        | j                  |j                  «       | S rE   ©rj   rš   )r›   r¶   Úvalues      r9   Úmeta_masked_fill_r“  µ  s   € ä˜DŸJ™J¨¯
©
Ô3Ø€Kr;   c                 óŠ   — | j                  | j                  «       «      j                  t        j                  | «      ¬«      }|S rÛ   )r™   rÄ   rw  rP   r   )r›   r¶   rÊ  Úmasked_scales       r9   Ú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 uint8r5   r5   r;   r9   rf   z&meta_masked_scatter_.<locals>.<lambda>Æ  rn   r;   c                  ó<   •— d‰ j                   › d‰j                   › �S )NzEmasked_scatter: expected self and source to have same dtypes but got rÂ   r’   )r›   r¹  s   €€r9   rf   z&meta_masked_scatter_.<locals>.<lambda>Ê  s"   ø€ ð ØŸ*™*˜ U¨6¯<©<¨.ð:€ r;   )rW   rh   r_   rC  r<  )r›   r¶   r¹  s   ` `r9   Úmeta_masked_scatter_rš  Ã  sU   ù€ ä	‡L�LØ�
‰
”u—z‘z¤5§;¡;Ð/Ð/Ñ1Uôô 
‡L�LØ�
‰
�f—l‘lÑ"ô	:ôð
 €Kr;   c                 ó„   — t        | |«      \  } }t        j                  | t        j                  ¬«      }t	        |||«      S rÛ   )r'   rW   rŸ   rÐ   rš  )r›   r¶   r¹  r  s       r9   Úmeta_masked_scatterrœ  Ð  s;   € ô " $¨Ó-�J€Dˆ$Ü×Ñ˜d´%×2IÑ2IÔJ€FÜ ¨¨fÓ5Ð5r;   c                 ó$   — | j                  |«      S rE   rÒ  )r›   r¶   r“  s      r9   Úmeta_masked_scatter_backwardrž  Ø  s   € à�>‰>˜%Ó Ð r;   c                 ó   — | S rE   r5   r�  s       r9   Úmeta_index_put_r   Ý  r¿  r;   c           	      ó  ‡ ‡‡‡‡‡‡— ddl m}m} t        j                  ‰ j                  «       dk(  d„ «       t        j                  ‰j                  «       dk(  d„ «       t        j                  ‰ j                  ‰j                  k(  ˆ ˆf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   )r  r£  r1   c                   ó   — yr¥  r5   r5   r;   r9   rf   z)common_meta_baddbmm_bmm.<locals>.<lambda>å  rn   r;   c                   ó   — yr§  r5   r5   r;   r9   rf   z)common_meta_baddbmm_bmm.<locals>.<lambda>æ  rn   r;   c                  ó<   •— d‰ j                   › d‰j                   › �S )Nzexpected scalar type z but found r’   rQ  s   €€r9   rf   z)common_meta_baddbmm_bmm.<locals>.<lambda>é  s   ø€ Ð'¨¯© ~°[ÀÇÁÀÐO€ r;   r  r4   c            	      ó.   •— d‰› d‰› d‰ d   › d‰ d   › d�	S r¬  r5   r®  s   €€€r9   rf   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 dtypesr5   r5   r;   r9   rf   z)common_meta_baddbmm_bmm.<locals>.<lambda>   rn   r;   c                   ó   — y)Nzself must be a 3D tensorr5   r5   r;   r9   rf   z)common_meta_baddbmm_bmm.<locals>.<lambda>  rn   r;   c                  ó0   •— d‰ › d‰j                  «       › �S )Nz*Expected an input tensor shape with shape z but got shape: rÃ   )rÚ  Úself_baddbmms   €€r9   rf   z)common_meta_baddbmm_bmm.<locals>.<lambda>  s!   ø€ Ð@ÀÀÐM]Ð^j×^oÑ^oÓ^qÐ]rÐs€ r;   )rt  r  r£  rW   rh   r‡   r_   rÄ   r±  r²  r°  r™   rw  )r©  rª  Úis_bmmr©  rŒ  r  r£  r¸  Úres_rowsÚres_colsÚsupported_out_dtyper  r¯  r°  r±  rÚ  s   `` `        @@@@r9   Úcommon_meta_baddbmm_bmmr®  â  s²  þ€ ßEä	‡L�L�—‘“ Ñ"Ñ$HÔIÜ	‡L�L�—‘“ Ñ"Ñ$HÔIÜ	‡L�LØ�‰˜Ÿ™Ñ$ÜOôð
 —;‘;“=€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©r®  )r›   r™  s     r9   Úmeta_bmmr±    s   € ô # 4¨¨tÓ4Ð4r;   c                 ó    — t        | |d|¬«      S )NT)rŒ  r°  )r›   r™  rŒ  s      r9   Úmeta_bmm_dtyper³    s   € ô # 4¨¨t¸yÔIÐIr;   c                 ó   — | |z  S rE   r5   r=   s     r9   Údiv_rtnrµ    s   € ð �‰6€Mr;   c                 ó†   — t        | |z   |z   ||dz
  z  z
  dz
  |r|dz
  ndz   |«      dz   }|r|dz
  |z  | |z   k\  r|dz  }|S r   )rµ  )Ú	inputSizeÚ
kernelSizer+  r,  ræ   ræ  re  Ú
outputSizes           r9   Úpooling_output_shape_pad_lrrº  #  sŒ   € ô 	ØØñàñð ˜* q™.Ñ)ñ*ð ñ	ñ
 'ˆv˜Šz¨Añ/ð ó	
ð ñ		ð ñ Ø˜‰N˜fÑ$¨	°EÑ(9Ò9Ø˜!‰OˆJØÐr;   c           	      óê   ‡‡‡— t        j                  |dk7  d„ «       t        j                  ‰dk\  ˆfd„«       t        j                  ‰‰dz
  ‰z  dz   dz  k  ˆˆˆfd„«       t        | ‰‰‰|‰|«      S )Nr   c                   ó   — y)Nzstride should not be zeror5   r5   r;   r9   rf   z&pooling_output_shape.<locals>.<lambda>?  rn   r;   c                  ó   •— d‰ › �S )Nz'pad must be non-negative, but got pad: r5   ©Úpads   €r9   rf   z&pooling_output_shape.<locals>.<lambda>@  s   ø€ Ð%LÈSÈEÐ#R€ r;   r4   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=r5   )ræ  r¸  r¿  s   €€€r9   rf   z&pooling_output_shape.<locals>.<lambda>C  s'   ø€ ØOÐPSÈuð UØ%˜, n°X°Jð@ð r;   )rW   rh   rº  )r·  r¸  r¿  ræ   ræ  re  s    `` ` r9   r˜  r˜  >  ss   ú€ Ü	‡L�L�˜1‘ÑAÔBÜ	‡L�L�˜‘ÓRÔSÜ	‡L�LØ�˜a‘ 8Ñ+¨aÑ/°AÑ5Ñ5õ	
ôô 'Ø�:˜s C¨°¸9óð r;   c                 ó–  ‡ ‡‡‡‡‡‡‡‡‡	‡
‡‡‡‡— ddl m}m} ‰ 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  ‰ j                  d«      dk7  «      }|t        j                  k(  r:t	        j
                  |dk(  xr  ||‰ j                  d	«      dk7  «      ˆ fd
„«       n`t	        j
                   ||d	k(  xr  |‰ j                  d«      dk7  |«      |dk(  xr  ||‰ j                  d	«      dk7  «      «      ˆ fd„«       t	        j
                   |‰dz  ‰k\  ‰dz  ‰k\  «      ˆˆˆˆfd„«       t	        j
                   |‰dk\  ‰dk\  «      ˆ
ˆˆ	ˆˆˆfd„«       y )Nr   r  c                  ó   •— d‰ › d‰› �S )Nz5kernel size should be greater than zero, but got kH: ú, kW: r5   )rœ  r�  s   €€r9   rf   z$pool2d_shape_check.<locals>.<lambda>e  s   ø€ ÐGÈÀtÈ6ÐRTÐQUÐV€ r;   c                  ó   •— d‰ › d‰› �S )Nz0stride should be greater than zero, but got dH: ú, dW: r5   )rž  rŸ  s   €€r9   rf   z$pool2d_shape_check.<locals>.<lambda>i  s   ø€ ÐBÀ2À$ÀfÈRÈDÐQ€ r;   c                  ó   •— d‰ › d‰› �S )Nz9dilation should be greater than zero, but got dilationH: ú, dilationW: r5   )Ú	dilationHÚ	dilationWs   €€r9   rf   z$pool2d_shape_check.<locals>.<lambda>m  s   ø€ ÐKÈIÈ;ÐVcÐdmÐcnÐo€ r;   r4   r  rX  r1   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Ã   rA  s   €r9   rf   z$pool2d_shape_check.<locals>.<lambda>u  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Ã   rA  s   €r9   rf   z$pool2d_shape_check.<locals>.<lambda>~  s   ø€ ÐoÐpu×pzÑpzÓp|Ðo}Ð~€ r;   c                  ó    •— d‰› d‰› d‰› d‰ › �S )NzKpad should be smaller than or equal to half of kernel size, but got padW = z	, padH = z, kW = z, kH = r5   )rœ  r�  r   r¡  s   €€€€r9   rf   z$pool2d_shape_check.<locals>.<lambda>ƒ  s&   ø€ ð Ø��y   g¨b¨T°¸¸ð>€ r;   c                  ó.   •— d‰› d‰ › d‰› d‰› d‰› d‰› d�S ©NzGiven input size: (r>   z). Calculated output size: (z). Output size is too smallr5   )r¢  r£  rf  r¨  rg  rh  s   €€€€€€r9   rf   z$pool2d_shape_check.<locals>.<lambda>‰  s:   ø€ Ð% k ]°!°K°=ÀÀ*Àð N$Ø$0 >°°<°.ÀÀ+Àð O#ð#€ r;   )rt  r  r  r‡   rW   rh   rÄ   rd  )rø   rœ  r�  rž  rŸ  r   r¡  rÈ  rÉ  rf  r¢  r£  rg  rh  rÍ   r  r  rÆ   Ú
valid_dimsr¨  s   ``````````````     @r9   r™  r™  M  s˜  ÿþ€ ÷" Fà�9‰9‹;€DØ€Lä	‡L�LØ
ˆQ‰Ò�2˜‘6ÜVôô 
‡L�LØ
ˆQ‰Ò�2˜‘6ÜQôô 
‡L�LØ�A‰Ò'˜) a™-Üoôñ
 ˜Ÿ™ A›¨!Ñ+¨U¯Z©Z¸«]¸aÑ-?Ó@€Jàœ×+Ñ+Ò+Ü�‰Ø�A‰IÒA™' *¨e¯j©j¸«m¸qÑ.@ÓAóRõ	
ô 	�‰ÙØ˜‘	ÒE™g e§j¡j°£m°qÑ&8¸*ÓEØ˜‘	ÒE™g j°%·*±*¸Q³-À1Ñ2DÓEóó ô	
ô 
‡L�LÙ��a‘˜4‘  q¡¨D¡Ó1ö	>ôô 
‡L�LÙ�˜qÑ  ,°!Ñ"3Ó4÷	#ð 	#õr;   rÄ  rÁ  rœ  r�  rÂ  rž  rŸ  ÚpTÚpHÚpWÚ	dilationTrÈ  rÉ  rÅ  rÆ  rÇ  rÈ  rÉ  rÊ  r¿  c           
      óV  ‡ ‡‡‡‡‡‡‡‡‡	‡
‡‡‡‡‡‡‡‡‡‡‡— ‰ 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„«       Œ< dd	lm} |r/t        j                   |‰‰k\  ‰‰k\  ‰‰k\  «      ˆˆˆˆˆˆfd
„«       t        j                   |‰dz  ‰k\  ‰dz  ‰
k\  ‰dz  ‰	k\  «      ˆˆˆˆ	ˆˆ
fd„«       t        j                   |‰dk\  ‰dk\  ‰dk\  «      ˆˆˆˆˆˆˆfd„«       y )Nr   c                  ó   •— d‰› d‰ › d‰› �S )Nz5kernel size should be greater than zero, but got kT: z, kH: rÃ  r5   )rœ  rÁ  r�  s   €€€r9   rf   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Å  r5   )rž  rÂ  rŸ  s   €€€r9   rf   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: rÇ  r5   )rÈ  rÓ  rÉ  s   €€€r9   rf   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: rB  )r-  rø   s   €€r9   rf   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   €€€r9   rf   z$pool3d_shape_check.<locals>.<lambda>É  s3   ø€ Ø�)ð -Ø-2¯[©[¨MØ+¨E¯J©J°q«M¨?Ð:KðMð r;   r$  c                  ó.   •— d‰› d‰ › d‰› d‰› d‰› d‰› d�S )Nzinput image (T: r…  ra  z ) smaller than kernel size (kT: ú kH: ú kW: rz   r5   )rÆ  rÅ  rÇ  rœ  rÁ  r�  s   €€€€€€r9   rf   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: rÜ  rÛ  z padT: z padW: z padH: r5   )rœ  rÁ  r�  rÑ  rÐ  rÒ  s   €€€€€€r9   rf   z$pool3d_shape_check.<locals>.<lambda>Ý  s6   ø€ ðØ�$�e˜B˜4˜u R D¨°¨t°7¸2¸$¸gÀbÀTðKð r;   r4   c                  ó:   •— d‰› d‰› d‰ › d‰› d‰› d‰› d‰› d‰› d�S rÎ  r5   )rÆ  rÅ  rÇ  rÄ  rÉ  rÈ  rÊ  s   €€€€€€€r9   rf   z$pool3d_shape_check.<locals>.<lambda>å  sI   ø€ Ø! ' ¨!¨E¨7°!°G°9¸A¸f¸Xð F(Ø(/ y°°%°¸¸'¸À!ÀFÀ8ð L'ð(ð r;   )rÆ   rW   rh   rå   rÄ   rt  r  )rø   rÄ  rÁ  rœ  r�  rÂ  rž  rŸ  rÐ  rÑ  rÒ  rÓ  rÈ  rÉ  rÅ  rÆ  rÇ  rÈ  rÉ  rÊ  r-  r¿  rÆ   r  rü   s   `````````````````````   @r9   rÀ  rÀ  �  s’  ÿÿý€ ð0 �:‰:€Dä	‡L�LØ
ˆQ‰Ò$�2˜‘6Ò$˜b 1™fõ	
ôô 
‡L�LØ
ˆQ‰Ò$�2˜‘6Ò$˜b 1™fõ	
ôô 
‡L�LØ�A‰Ò9˜) a™-Ò9¨I¸©Mõ	
ôô 
‡L�LØ�ˆÜXôô
 �4‹[ò 
ˆØ�1Š9˜˜ašàÜ�‰Ø�J‰J�q‹M˜AÑõõ	
ð	
õ >áÜ�‰Ù�E˜R‘K ¨B¡°¸"±Ó=÷ð ô	
ô 
‡L�LÙ��Q‘˜"‘˜b 1™f¨™l¨B°©F°b©LÓ9÷	
ð 	
ôô 
‡L�LÙ�˜‘
˜F a™K¨°A©Ó6÷	
ñ 	
õ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 )NrX  r1   r  r4   ©rÆ   rÀ  r~  )rø   rM  rÔ   rÄ  rÁ  rœ  r�  rÂ  rž  rŸ  rÐ  rÑ  rÒ  rÓ  rÈ  rÉ  rÅ  rÆ  rÇ  rÈ  rÉ  rÊ  r-  rÆ   s                           r9   Ú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 )Nr4   TrX  r1   r  rà  )rø   rM  rÄ  rÁ  rœ  r�  rÂ  rž  rŸ  rÐ  rÑ  rÒ  rÅ  rÆ  rÇ  rÈ  rÉ  rÊ  r-  rÆ   s                       r9   rÒ  rÒ  +  s¡   € ð* �:‰:€DäØØØ
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø	Ø	Ø	ØØØØØØØØô-ô2 �;  d¨Q¡h°Ô8Ü�;  d¨Q¡h°Ô6Ü�;  d¨Q¡h°Ô8Ü�;  d¨Q¡h°Õ7r;   c                 óú  — d„ } |d|«      \  }}t        j                  t        |«      dv d„ «       t        |«      dk(  r||}
}	n |d|«      \  }	}
 |d|«      \  }} |d|«      \  }}| j                  d	«      }| j                  d
«      }| j                  d«      }t	        j
                  | «      }|t         j                  k(  r)t        j                  | j                  «       dk(  d„ «       nR|t         j                  k(  r(t        j                  | j                  «       dv d„ «       nt        j                  dd„ «       t        ||||	||«      }t        ||||
||«      }t        | |||	|
||||||||||«       |||fS )Nc                 óˆ   ‡ — t        j                  t        |«      dv ˆ fd„«       |d   }t        |«      dk(  r|n|d   }||fS )Nrƒ  c                  ó   •— d‰ › d�S )Nzmax_pool2d: r…  r5   r†  s   €r9   rf   zEmax_pool2d_checks_and_compute_shape.<locals>.unpack.<locals>.<lambda>m  r‡  r;   r   r4   rˆ  r‰  s   `   r9   rŒ  z3max_pool2d_checks_and_compute_shape.<locals>.unpackj  r�  r;   r  rŽ  c                   ó   — y)NzOmax_pool2d: stride must either be omitted, a single int, or a tuple of two intsr5   r5   r;   r9   rf   z5max_pool2d_checks_and_compute_shape.<locals>.<lambda>w  rn   r;   r   ræ   r  ræ  r•  r  r½   rX  c                   ó   — y)NzMnon-empty 4D (batch mode) tensor expected for input with channels_last layoutr5   r5   r;   r9   rf   z5max_pool2d_checks_and_compute_shape.<locals>.<lambda>ˆ  rn   r;   rñ  c                   ó   — y)Nz9non-empty 3D or 4D (batch mode) tensor expected for inputr5   r5   r;   r9   rf   z5max_pool2d_checks_and_compute_shape.<locals>.<lambda>�  rn   r;   Fc                   ó   — y)NzAUnsupported memory format. Supports only ChannelsLast, Contiguousr5   r5   r;   r9   rf   z5max_pool2d_checks_and_compute_shape.<locals>.<lambda>’  rn   r;   )rW   rh   rã   rÄ   rP   r   rd  r‡   rÐ   r˜  r™  )rø   r  ræ   r  ræ  re  rŒ  rœ  r�  rž  rŸ  r   r¡  rÈ  rÉ  rf  r¢  r£  rÍ   rg  rh  s                        r9   rc  rc  a  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   €€r9   rf   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 )Nr1   r  r4   )r~  )r  r¨  rÆ   rg  rh  s    €€€€r9   Ú_check_dim_sizez>meta_max_pool2d_with_indices_backward.<locals>._check_dim_sizeÉ  s9   ø€ Ü�q˜$  q¡¨,Ô7Ü�q˜$  q¡¨,Ô7Ü�q˜$  q¡¨+Õ6r;   rÌ  )
rc  rW   rh   r_   rÆ   rP   r   r�   rš   r„   )rM  r›   r  ræ   r  ræ  re  rÔ   rf  rí  rÍ   r¨  rÆ   rg  rh  s   ``         @@@@r9   Ú%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 ra  )
rc  r‡   rÄ   rP   r   rW   r�   r_   r„   r×   rd  s               r9   Ú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: rT  rÑ   s   €r9   rf   z,meta_fractional_max_pool2d.<locals>.<lambda>  s   ø€ ÐLÈTÏYÉYÈKÐX€ r;   r1   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   €€r9   rf   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 Intsr5   r5   r;   r9   rf   z,meta_fractional_max_pool2d.<locals>.<lambda>  rn   r;   c                   ó   — y)NzOfractional_max_pool2d: output_size must either be a single int or tuple of Intsr5   r5   r;   r9   rf   z,meta_fractional_max_pool2d.<locals>.<lambda>  rn   r;   r•  r  r½   rX  r4   c                   ó   — y)Nz6Expect _random_samples to have the same dtype as inputr5   r5   r;   r9   rf   z,meta_fractional_max_pool2d.<locals>.<lambda>&  rn   r;   c                  ó"   •— d‰ j                   › �S )Nz1Expect _random samples to have 3 dimensions got, rT  )Úrandom_sampless   €r9   rf   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.r5   r5   r;   r9   rf   z,meta_fractional_max_pool2d.<locals>.<lambda>2  rn   r;   c                   ó   — y)Nz<Expect _random_samples.size(1) equals to input channel size.r5   r5   r;   r9   rf   z,meta_fractional_max_pool2d.<locals>.<lambda>6  rn   r;   c                  ó   •— d‰ › d�S )Nz/Expect _random_samples.size(2) equals to 2 got ú.r5   )rô   s   €r9   rf   z,meta_fractional_max_pool2d.<locals>.<lambda>8  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 r5   )Úinput_heightr  s   €€r9   rf   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 r4   z& is too large relative to input width r5   )Úinput_widthr  s   €€r9   rf   z,meta_fractional_max_pool2d.<locals>.<lambda>@  s   ø€ Ð6°{À1±~Ð6FÐFlÐmxÐlyÐz€ r;   r  )rW   rh   rÆ   rå   rÄ   rã   r_   r‡   r�   r„   r×   )r›   r  rÚ  rø  rÆ   Úinput_channelsÚinput_batchr+  ÚcrÄ   rô   rþ  r   s   `` `      @@@r9   Ú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 )Nr³  c                   ó   — y©NzMmax_pool3d: kernel_size must either be a single int, or a tuple of three intsr5   r5   r;   r9   rf   z.meta_max_pool3d_with_indices.<locals>.<lambda>b  rn   r;   r   r4   r  c                   ó   — y©NzQmax_pool3d: stride must either be omitted, a single int, or a tuple of three intsr5   r5   r;   r9   rf   z.meta_max_pool3d_with_indices.<locals>.<lambda>j  rn   r;   c                   ó   — y©NzImax_pool3d: padding must either be a single int, or a tuple of three intsr5   r5   r;   r9   rf   z.meta_max_pool3d_with_indices.<locals>.<lambda>r  rn   r;   c                   ó   — y©NzJmax_pool3d: dilation must be either a single int, or a tuple of three intsr5   r5   r;   r9   rf   z.meta_max_pool3d_with_indices.<locals>.<lambda>z  rn   r;   r»  c                   ó   — yr½  r5   r5   r;   r9   rf   z.meta_max_pool3d_with_indices.<locals>.<lambda>‚  rn   r;   r|  éûÿÿÿrb  r•  r  r½   zmax_pool3d_with_indices()rX  r’   rÌ   )rW   rh   rã   rÆ   rÄ   r˜  rÀ  rP   r   r+  r™   r×   rw  )rø   r  ræ   r  ræ  re  rÁ  rœ  r�  rÂ  rž  rŸ  rÐ  rÑ  rÒ  rÓ  rÈ  rÉ  r3  rÄ  rÅ  rÆ  rÇ  rÈ  rÉ  rÊ  rd  rÉ   rí   rÔ   s                                 r9   Úmeta_max_pool3d_with_indicesr  V  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 )Nr³  c                   ó   — yr  r5   r5   r;   r9   rf   z7meta_max_pool3d_with_indices_backward.<locals>.<lambda>È  rn   r;   r   r4   r  c                   ó   — yr	  r5   r5   r;   r9   rf   z7meta_max_pool3d_with_indices_backward.<locals>.<lambda>Ð  rn   r;   c                   ó   — yr  r5   r5   r;   r9   rf   z7meta_max_pool3d_with_indices_backward.<locals>.<lambda>Ø  rn   r;   c                   ó   — yr  r5   r5   r;   r9   rf   z7meta_max_pool3d_with_indices_backward.<locals>.<lambda>à  rn   r;   r»  c                   ó   — yr½  r5   r5   r;   r9   rf   z7meta_max_pool3d_with_indices_backward.<locals>.<lambda>è  rn   r;   rb  r•  r  r½   z"max_pool3d_with_indices_backward()r|  rÌ   )rW   rh   rã   rÆ   rÄ   rá  rP   r   r+  r™   rš   rw  )rM  rø   r  ræ   r  ræ  re  rÔ   rÁ  rœ  r�  rÂ  rž  rŸ  rÐ  rÑ  rÒ  rÓ  rÈ  rÉ  rÄ  rÅ  rÆ  rÇ  rÈ  rÉ  rÊ  rd  rP  s                                r9   Ú%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 rU  ©r  rø   s   €€r9   rf   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   €€r9   rf   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 rB  r  s   €€r9   rf   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   €€r9   rf   z+check_grid_sampler_common.<locals>.<lambda>3  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â  rB  rõ  s   €€r9   rf   z+check_grid_sampler_common.<locals>.<lambda><  rö  r;   )rW   rh   r„   rƒ   r÷  rš   rÆ   rå   )rø   r  rü   s   ``@r9   Ú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   r4   r  N)r|   Ú
__module__Ú__qualname__ÚBILINEARÚNEARESTÚBICUBICr5   r;   r9   r#  r#  C  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  rB  r  s   €€r9   rf   z'check_grid_sampler_3d.<locals>.<lambda>L  s&   ø€ ð4Ø49·K±K°=Ø# D§J¡J <ð1ð r;   c                   ó   — y)Nz<grid_sampler(): bicubic interpolation only supports 4D inputr5   r5   r;   r9   rf   z'check_grid_sampler_3d.<locals>.<lambda>W  rn   r;   )rW   rh   rÆ   r#  r(  r’  )rø   r  r)  s   `` r9   Úcheck_grid_sampler_3dr-  I  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Ì   )rW   r  rÐ   rŸ   ©
rM  rø   r  r)  Úpadding_modeÚalign_cornersrH  Úinput_requires_gradrP  Ú	grad_grids
             r9   Úgrid_sampler_2d_backward_metar5  [  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   r4   r  r1   )r!  r-  rš   r™   )
rø   r  r)  r1  r2  rÙ  ÚCÚout_DÚout_HÚout_Ws
             r9   Úgrid_sampler_3dr;  n  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;   r4  c                 óä   — t        ||«       t        |||«       |d   }|r&t        j                  |t        j                  ¬«      }nd }t        j
                  |t        j                  ¬«      }	||	fS r/  )r!  r-  rW   r  r\  rŸ   r0  s
             r9   Úgrid_sampler_3d_backwardr=  �  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^   rP   Ú	get_dtyperW   r�   )rÄ   r  rR   rV  r_   s        r9   Úfullr@  ™  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 tensorsr5   r5   r;   r9   rf   zzeros_like.<locals>.<lambda>°  rn   r;   r   r-  Tr÷  )rW   Ú
sparse_coorh   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          r9   r  r  ¤  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/  ©rW   r‰   Úget_default_devicer÷  r�   ©rÄ   r_   rƒ   r„   r…   r†   s         r9   Ú	meta_onesrN  Ñ  óT   € ð €}Ü×'Ñ'Ó)ˆØ€~Ü×)Ñ)Ó+ˆØ€~Ü—‘ˆÜ�;‰;Ø�E &°ÀJôð r;   c                ó²   — |€t        j                  «       }|€t        j                  «       }|€t         j                  }t        j                  | ||||¬«      S r/  rK  rM  s         r9   Ú
meta_zerosrQ  ç  rO  r;   c                 ó   — t        | «      S rE   ©Ú_scatter_meta_output)r›   r¤   r‡   r”   s       r9   Úmeta_select_scatterrU  ý  ó   € ä Ó%Ð%r;   c                 ó   — t        | «      S rE   rS  )r›   r¤   r‡   r~   r}   Ústeps         r9   Úmeta_slice_scatterrY    rV  r;   c                 ó   — t        | «      S rE   rS  )r›   r¤   Úoffsetrµ  r¶  s        r9   Úmeta_diagonal_scatterr\    rV  r;   c                 ó˜   — ddl m}  || «      s(t        j                  | «      dk(  r| j	                  «       S t        j                  | «      S )Nr   rr  r4   )rt  rs  rW   ru  r»   rP   Úclone_preserve_strides)r›   rs  s     r9   rT  rT    s?   € ÝKñ
 ! Ô&¬5×+LÑ+LÈTÓ+RÐVWÒ+WØ�z‰z‹|ÐÜ×'Ñ'¨Ó-Ð-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 Falser4   z4Dimension out of range (expected to be in range of [ry   z], but got rz   )r‹   Ú
IndexError)r‡   r_  r`  r  rþ  s        r9   rØ   rØ     sŒ   € Ø˜ÒÙÜ Ø   Ð/MÐNóð ð ˆØˆ.€CØ
˜!Ñ
€CØ
ˆS‚y�C˜#’IÜØBÀ3À%ÀrÈ#ÈÈkÐZ]ÐY^Ð^_Ð`ó
ð 	
ð ˆQ‚wØˆ}ÑˆØ€Jr;   c                 óJ   — | j                  «       dk(  rdS | j                  |   S r  r|  )r  r‡   s     r9   Úensure_nonempty_sizerd  *  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 )Nr4   c                   ó   — y)NzDIndex tensor must have the same number of dimensions as input tensorr5   r5   r;   r9   rf   z$gather_shape_check.<locals>.<lambda>4  rn   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 rB  )r‡   rü   r”   r›   s   €€€€r9   rf   z$gather_shape_check.<locals>.<lambda>:  s7   ø€ Ð;¸A¸3Ð>NÈuÏ{É{ÈmÐ\Ø/°·
±
¨|Ð;QÐRUÐQVÐWñX€ r;   )rþ  r‡   rW   rh   rå   rd  )r›   r‡   r”   Ú	self_dimsÚ
index_dimsrü   s   ```  @r9   Úgather_shape_checkrl  /  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   €r9   rf   zmeta_gather.<locals>.<lambda>H  s   ø€ ÐNÈuÏ{É{ÈmÐ\€ r;   )rt  r  rØ   r‡   r˜   rW   rh   r_   r–   r  rl  r™   rš   )r›   r‡   r”   Úsparse_gradr  Úwrapped_dimÚis_index_emptys     `    r9   Úmeta_gatherrr  ?  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 )NrH  Ú
REDUCE_ADDr  ÚREDUCE_MULTIPLYrf  ÚREDUCE_MEANÚamaxÚREDUCE_MAXIMUMÚaminÚREDUCE_MINIMUMFc                   ó   — y)Nz=reduce argument must be either sum, prod, mean, amax or amin.r5   r5   r;   r9   rf   z#get_operator_enum.<locals>.<lambda>]  rn   r;   ÚaddÚmultiplyc                   ó   — y)Nz/reduce argument must be either add or multiply.r5   r5   r;   r9   rf   z#get_operator_enum.<locals>.<lambda>e  rn   r;   r¯  )Úreduce_Úuse_new_optionss     r9   Úget_operator_enumr�  O  s{   € ÙØ�eÒØØ˜ÒØ$Ø˜ÒØ Ø˜ÒØ#Ø˜ÒØ#Ü�‰ØÙSô	
ð 	à�eÒØØ˜
Ò"Ø$Ü�‰�UÑUÔVØr;   c                 óP  ‡ — ddl m}  ||j                  «       dk7  «      rSt        j                  |j
                  t        j                  k(  xs |j
                  t        j                  k(  ˆ fd„«       |�1t        j                  |j
                  |j
                  k(  ˆ fd„«       y y )Nr   )r¢  c                  ó   •— ‰ › d�S )Nz((): Expected dtype int32/int64 for indexr5   ©Úmethod_names   €r9   rf   z,scatter_gather_dtype_check.<locals>.<lambda>p  s   ø€ �{�mÐ#KÐL€ r;   c                  ó   •— ‰ › d�S )Nz0(): Expected self.dtype to be equal to src.dtyper5   r„  s   €r9   rf   z,scatter_gather_dtype_check.<locals>.<lambda>v  s   ø€ �{�mÐ#SÐT€ r;   )rt  r¢  r˜   rW   rh   r_   r–   r  )r…  r›   r”   Úsrc_optr¢  s   `    r9   Úscatter_gather_dtype_checkrˆ  j  sv   ø€ ÝCá�U—[‘[“] aÑ'Ô(Ü�‰Ø�K‰Kœ5Ÿ:™:Ñ%ÒA¨¯©¼¿	¹	Ñ)AÛLô	
ð
 ÐÜ�‰Ø�J‰J˜'Ÿ-™-Ñ'ÛTõ	
ð r;   c                 ó   — t        | d«      S r3   )rþ  r¾   s    r9   Úensure_nonempty_dimrŠ  z  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 tensorr5   r5   r;   r9   rf   z%scatter_shape_check.<locals>.<lambda>†  rn   r;   c                  óH   •— d‰j                   › d‰j                   › �d‰ › �z   S )NúExpected index rh  ri  rB  )r‡   r”   r›   s   €€€r9   rf   z%scatter_shape_check.<locals>.<lambda>”  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 tensorr5   r5   r;   r9   rf   z%scatter_shape_check.<locals>.<lambda>œ  rn   r;   c                  ó<   •— d‰ j                   › d‰j                   › �S )NrŽ  z to be no larger than src rB  )r”   r‡  s   €€r9   rf   z%scatter_shape_check.<locals>.<lambda>£  s!   ø€ ˜/¨%¯+©+¨Ð6PÐQX×Q^ÑQ^ÐP_Ð`€ r;   )	rt  r  r˜   rW   rh   rŠ  r‡   rå   rd  )
r›   r‡   r”   r‡  r  rj  rô   Úindex_d_sizeÚself_d_sizeÚ
src_d_sizes
   ````      r9   Ú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€  rp  s          r9   Úscatter_meta_implr—  ¨  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       r9   Úmeta_scatter_addrœ  ±  s%   € ä�d˜C ¨¨UÔ3Ø�>‰>˜$Ÿ*™*Ó%Ð%r;   c                 ó$   — t        | |||d«       | S r™  ©r—  r›  s       r9   Úmeta_scatter_add_rŸ  ·  s   € ä�d˜C ¨¨UÔ3Ø€Kr;   c                 ó’   — t        |t        j                  «      r|nd }t        | ||||«       | j	                  | j
                  «      S rE   )rq   rW   r   r—  r™   rš   ©r›   r‡   r”   Úsrc_or_valuerº  r¤   s         r9   Úmeta_scatterr£  ½  s;   € ô % \´5·<±<Ô@‰,Àd€CÜ�d˜C ¨¨VÔ4Ø�>‰>˜$Ÿ*™*Ó%Ð%r;   c                 ó`   — t        |t        j                  «      r|nd }t        | ||||«       | S rE   )rq   rW   r   r—  r¡  s         r9   Úmeta_scatter_r¥  Ì  s-   € ô % \´5·<±<Ô@‰,Àd€CÜ�d˜C ¨¨VÔ4Ø€Kr;   Úqueryrá   r’  Ú	dropout_pÚ	is_causalÚreturn_debug_maskc           	      ó.  — | 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   r4   r  r1   r  é@   é€   é   r  r5   r�   )rÄ   rW   rŸ   r�   r[   r„   r  Úceilr_   rÿ  r   r	  r  r  r–   rG  )r¦  rá   r’  r§  r¨  r©  rÊ  rú   r¦   Úmax_seqlen_batch_qÚhead_dimÚmax_seqlen_batch_kÚ	attentionÚ	logsumexpÚblocksize_cÚmax_seqlen_kÚ
debug_maskÚseedr[  s                      r9   Ú(meta__scaled_dot_product_flash_attentionr¸  Ú  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 rE   )r_   rW   r³  rw  r²  r¸  )
r¦  rá   r’  r¹  rº  r»  r§  r¨  r©  rÊ  s
             r9   Ú2meta__scaled_dot_product_flash_attention_quantizedr½    sJ   € ð ‡{�{”e×)Ñ)Ò)Ø—‘œŸ™Ó(ˆä3ØØØØØØØóð r;   Ú	res_shape.c                 óB  ‡ — t        ‰ j                  «      |k(  rt        j                  ‰ «      }|S t	        g d¢ˆ fd„d¬«      }dgt        |«      z  }d}t        |«      D ]  }|||<   |||   z  }Œ t        j                  ||‰ j                  ‰ j                  ¬«      }|S )N)r   r4   r  r1   c                 ó*   •— ‰j                  «       |    S rE   r  )Úidxr¦  s    €r9   rf   z,alloc_with_matching_layout.<locals>.<lambda>=  s   ø€ ¨%¯,©,«.¸Ñ*=€ r;   Trà   r   r4   r  )
rg   rš   rW   rŸ   r  rã   Úreversedru  r_   r„   )r¦  r¾  rå  Ú	dim_orderr  ræ   rÁ  s   `      r9   Úalloc_with_matching_layoutrÄ  5  s­   ø€ ô ˆU�[‰[Ó˜YÒ&Ü×Ñ˜uÓ%ˆð €Jô ÚÓ=Àtô
ˆ	ð �#œ˜I›Ñ&ˆØˆÜ˜IÓ&ò 	%ˆCØ!ˆG�C‰LØ�i ‘nÑ$‰Fð	%ô ×!Ñ!Ø�w e§k¡k¸%¿,¹,ô
ˆð €Jr;   Ú	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   r4   r  r½   r  r5   r�   )rÄ   rÄ  rW   r�   r[   r„   r–   )r¦  rá   r’  rÅ  rÆ  r§  r¨  r©  rÊ  r(  rŠ  ÚS_QÚS_KVÚD_Vr¾  rå  Ú
logsum_expr·  r[  s                      r9   Ú(meta__scaled_dot_product_cudnn_attentionrÌ  K  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           	      ó€  — d\  }}	}
| j                  «       dk(  r| j                  «       \  }}	}
}n5| j                  «       dk(  r| j                  «       \  }	}
}d}nt        d«      ‚|j                  d«      }|j                  d«      }t        | j                  «      }||d<   t        | t        |«      «      }t        j                  ||	|
ft        j                  | j                  ¬«      }t        j                  d	t        j                  d
¬«      }t        j                  d	t        j                  d
¬«      }||d d |
|||d f	S )N)r   r   r   rX  r1   r4   zquery must be 3D or 4Dr  r½   r  r5   r�   )r‡   rÄ   rv  rä   rš   rÄ  rg   rW   r�   r[   r„   r–   )r¦  rá   r’  rÅ  r§  r¨  r©  rÊ  r(  ÚH_QrÈ  rS   rÉ  rÊ  rÉ   rå  rË  r·  r[  s                      r9   Ú5meta__scaled_dot_product_fused_attention_overrideablerÏ  w  s  € ð �K€A€sˆCØ‡y�yƒ{�aÒØŸ™›‰ˆˆ3�‘QØ	�‰‹˜Ò	Ø—j‘j“l‰ˆˆS�!Ø‰äÐ3Ó4Ð4Ø�8‰8�B‹<€DØ
�*‰*�R‹.€Cô �U—[‘[Ó!€IØ€Iˆb�MÜ
$ U¬E°)Ó,<Ó
=€Cä—‘Ø	
ˆC�ˆÜ�k‰kØ�|‰|ô€Jô �;‰;�r¤§¡°FÔ;€DÜ�[‰[˜¤5§:¡:°fÔ=€Fð 	ØØØØØØØØð
ð 
r;   )rÊ  rã  Úgrad_input_maskr³  Ú	cum_seq_qÚ	cum_seq_kÚmax_qÚmax_kÚphilox_seedÚphilox_offsetc                ó¾   — t        j                  |«      }t        j                  |«      }t        j                  |«      }|�t        j                  |«      nd }||||fS rE   rž   )rã  r¦  rá   r’  rÅ  rÐ  rí   r³  rÑ  rÒ  rÓ  rÔ  r§  r¨  rÕ  rÖ  rÊ  Úgrad_qÚgrad_krq  Úgrad_attn_biass                        r9   Ú>meta__scaled_dot_product_fused_attention_overrideable_backwardrÛ  «  sZ   € ô* ×Ñ˜eÓ$€FÜ×Ñ˜cÓ"€FÜ×Ñ˜eÓ$€FØ4=Ð4I”U×%Ñ% iÔ0Èt€NØ�6˜6 >Ð1Ð1r;   c                 óŠ   — t        j                  |«      }t        j                  |«      }t        j                  |«      }|||fS rE   rž   )rã  r¦  rá   r’  rí   r³  rÑ  rÒ  rÓ  rÔ  r§  r¨  rÕ  rÖ  rÊ  rØ  rÙ  rq  s                     r9   Ú'meta__scaled_dot_product_flash_backwardrÝ  Ç  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                  ¬«      j                  dd«      }|
|fS )Nr   r4   r  r  )	rÄ   rW   rŸ   r�   rP   Úget_computation_dtyper_   r„   rM  )r¦  rá   r’  r§  r¨  rÞ  rÊ  rú   r¦   r¯  r²  r³  s               r9   Ú0meta__scaled_dot_product_flash_attention_for_cpurá  ã  s•   € ð —‘˜A“€JØ—
‘
˜1“€IØŸ™ A›Ðä× Ñ  Ó'€IÜ—‘àØØð	
ô
 ×)Ñ)¨%¯+©+Ó6Ø�|‰|ô÷ �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  r4   r1   r  )rW   Úempty_permutedrÄ   r_   r„   )rã  r¦  rá   r’  rí   r³  r§  r¨  rÞ  rÊ  rØ  rÙ  rq  s                r9   Ú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_maskÚ
enable_gqac	                 óÄ   ‡ ‡‡‡‡‡‡‡— d„ }	 |	‰ «      \  ŠŠ |	|«      \  }
} |	|«      \  }}‰j                   \  ŠŠŠ}|j                   \  }}ŠŠˆˆˆˆˆˆ ˆˆfd„} |«       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 )
Nr1   r   TrX  r4   r•  r  r½   F)r‡   rÝ  rå   rš   ÚviewrÄ   )r>   rú   rü   s      r9   Ú	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                  óÞ  •— ‰j                  ‰‰‰‰f«      } ‰j                  ‰‰‰‰f«      }‰
r½‰	j                  «       dk(  r&| j                  d«      } |j                  d«      }| |fS t        ‰	j                  d d «      t        | j                  dd «      z   }t        ‰	j                  d d «      t        |j                  dd «      z   }| j                  |«      } |j                  |«      }| |fS )Nr1   r   r•  r4   rX  )r™   r‡   Úsqueezerä   rš   rê  )rí   ÚattnrÉ   Ú
attn_shaperú   Úmax_seq_lengthÚnum_headÚq_Úq_sizer¦  Ú
unsqueezedÚvalue_head_sizes       €€€€€€€€r9   Úsdpa_general_mpszImeta__scaled_dot_product_attention_math_for_mps.<locals>.sdpa_general_mpsL  sâ   ø€ Ø�l‰l˜J¨°&¸/ÐJÓKˆØ�|‰|˜Z¨°6¸>ÐJÓKˆÙØ�y‰y‹{˜aÒØ—k‘k !“n�Ø—|‘| A“�ð �DˆyÐô	 ! §¡¨S¨bÐ!1Ó2´T¸#¿)¹)ÀAÀa¸.Ó5IÑI�	Ü! %§+¡+¨c¨rÐ"2Ó3´d¸4¿:¹:ÀaÈ¸?Ó6KÑK�
Ø—h‘h˜yÓ)�Ø—y‘y Ó,�Ø�DˆyÐr;   rB  )r¦  rá   r’  rÞ  r§  r¨  ræ  rÊ  rç  rë  Úk_rS   Úv_rö  rú   rð  rñ  rò  ró  rô  rõ  s   `             @@@@@@@r9   Ú/meta__scaled_dot_product_attention_math_for_mpsrù  .  sl   ÿ€ ò	ñ ˜uÓ%�N€Bˆ
Ù�c‹N�E€BˆÙ�eÓ�E€Bˆà&(§h¡hÑ#€J�˜& !Ø,.¯H©HÑ)€A€qˆ.˜/÷ó ñ  ÓÐ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 )
Nr4   r  r   r  r½   r  r‚  r5   r�   )rM  rÄ   rW   r�   r_   r„   rÿ  r   r	  r  r  r®  r[   r–   )r¦  rá   r’  rÅ  rÆ  r§  r¨  rÊ  r(  rñ  r¦   ÚKvrå  Úlogsumexp_dimrË  r·  r[  s                    r9   Ú,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;   c                 ó  — |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   r4   r  r1   rã  r  r½   r�  .)rÄ   rW   rä  r_   r„   rä   r�   )rã  r¦  rá   r’  rÅ  rí   r³  rÕ  rÖ  r§  rÐ  r¨  rÊ  rú   r¦   rÓ  r°  Ú
head_dim_vrÔ  rØ  rÙ  rq  Ú	grad_biasÚlastDimÚlastDimAlignedÚ	new_sizess                             r9   Ú+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 rE   rž   )rã  r¦  rá   r’  rí   r³  rÕ  rÖ  rÅ  rÑ  rÒ  rÓ  rÔ  r§  r¨  rÊ  rØ  rÙ  rq  s                      r9   Ú'meta__scaled_dot_product_cudnn_backwardr  È  sA   € ô. ×Ñ˜eÓ$€FÜ×Ñ˜cÓ"€FÜ×Ñ˜eÓ$€FØ�6˜6Ð!Ð!r;   Úwindow_size_leftÚwindow_size_rightÚ	seqused_kÚalibi_slopesÚblock_tablerF  c                 óÚ  — |€| 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   r4   r  r½   r  r«  r¬  r­  ©NNr5   r�   r  )rÄ   r˜   rW   rŸ   r�   r[   r„   r  r®  r_   rÿ  r   r	  r  r–   rG  )r¦  rá   r’  rÑ  rÒ  rÓ  rÔ  r§  r¨  r©  rÊ  r  r  r	  r
  r  rF  rú   r¯  r±  r¦   r°  r²  r³  Útotal_qr´  rµ  r¶  r·  r[  s                                 r9   Úmeta__flash_attention_forwardr  å  sõ  € ð8 #,Ð"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                 óF   — t        |||||||||	|
||||||«      \  }}}}}|S rE   )r  )rí   r¦  rá   r’  rÑ  rÒ  rÓ  rÔ  r§  r¨  r©  rÊ  r  r  r	  r
  r  rF  rS   r³  s                       r9   Ú0meta__flash_attention_forward_no_dropout_inplacer  7  sQ   € ô* :ØØØØØØØØØØØØØØØØó!Ñ€A€y�!�Q˜ð$ Ðr;   c                 ó¬   — | j                   t        j                  k(  r| j                  t        j                  «      } t        | |||||||||	|||||«      S rE   )r_   rW   r³  rw  r²  r  )r¦  rá   r’  rÑ  rÒ  rÓ  rÔ  r§  r¨  r©  r¹  rº  r»  rÊ  r  r  r	  r
  s                     r9   Ú'meta__flash_attention_forward_quantizedr  a  sb   € ð* ‡{�{”e×)Ñ)Ò)Ø—‘œŸ™Ó(ˆä(ØØØØØØØØØØØØØØØóð r;   c                 óŠ   — t        j                  |«      }t        j                  |«      }t        j                  |«      }|||fS rE   rž   )rã  r¦  rá   r’  rí   r³  rÑ  rÒ  rÓ  rÔ  r§  r¨  rÕ  rÖ  rÊ  r  r  Ú
grad_queryÚgrad_keyÚ
grad_values                       r9   Úmeta__flash_attention_backwardr  Œ  sA   € ô0 ×!Ñ! %Ó(€JÜ×Ñ Ó$€HÜ×!Ñ! %Ó(€Jà�x Ð+Ð+r;   Úcu_seqlens_qÚcu_seqlens_kÚmax_seqlen_qrµ  Úcustom_mask_typeÚcausal_diagonalÚseqlen_kÚwindow_sizec                 ó¸  — | j                  d«      }| j                  d«      }|j                  d«      }| j                  d«      }|j                  d«      }t        j                  ||||| j                  | j                  ¬«      }|�|j                  d«      dz
  n|}|}|�|€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   r4   r  r½   r  z;max_seqlen_q must not be None when cu_seqlens_q is providedr‚  r5   r�   )
rÄ   rW   r�   r_   r„   r‹   r  r®  r[   r–   )r¦  rá   r’  rŠ  r  r  r  rµ  r§  r  rÆ  rÊ  r  r  r  r(  rñ  rÙ  r¦   rû  rå  Úlogsumexp_batch_dimÚactual_max_seqlen_qÚactual_max_seqlen_krü  rË  r·  r[  s                               r9   Ú!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 )Nr4   c                   ó   — y)Nz,seqlen must match for `shared_storage_dqdkdvr5   r5   r;   r9   rf   z4meta__efficient_attention_backward.<locals>.<lambda>þ  rn   r;   r1   c                   ó   — y)Nz3embedding dim must match for `shared_storage_dqdkdvr5   r5   r;   r9   rf   z4meta__efficient_attention_backward.<locals>.<lambda>  rn   r;   r   r  r½   r  r•  r  r�  .r5   rU  )
rW   rh   rš   r�   r_   r„   r0  rŸ   rÄ   rä   )rã  r¦  rá   r’  rŠ  r  r  r  rµ  r³  r§  rÕ  rÖ  r  r%  rÊ  r&  r'  Úchunkr  r  r  r  r  r  r   s                             r9   Ú"meta__efficient_attention_backwardr,  â  s¤  € ñ2 Ü�‰Ø�K‰K˜‰N˜cŸi™i¨™lÑ*ÙBô	
ô 	�‰Ø�K‰K˜‰N˜cŸi™i¨™lÑ*ÙIô	
ô —‘ØEˆe�k‰k˜!˜BÐÐE ÐE E§K¡K°¡OÐE°U·[±[À±_ÑEØ—+‘+Ø—<‘<ô
ˆð
 —\‘\ " aÓ(ˆ
Ø—<‘<  AÓ&ˆØ—\‘\ " aÓ(‰
ä×%Ñ% eÓ,ˆ
Ü×#Ñ# CÓ(ˆÜ×%Ñ% eÓ,ˆ
àÐØ—)‘)˜B“-ˆØ$+¨b¡L°AÒ$5™¸7ÀR¹<È'ÐTVÉ,Ñ;VˆÜ˜Ÿ™›Ó%ˆ	Ø&ˆ	�"‰Ü—K‘K 	°·±ÀDÇKÁKÔPˆ	Ø˜c 8 G 8˜mÑ,‰	ä—K‘K ¨5¯<©<Ô8ˆ	à�x ¨YÐ6Ð6r;   Úscale_aÚscale_bÚscale_resultÚuse_fast_accumc                 ó2  ‡ ‡‡‡‡‡‡‡‡— 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(  st	        ‰ «      dk(  �r’d„ }	d	„ }
d
„ }t	        ‰ «      dk7  rãt        j                   |	‰ j                  «       «      xs  |‰ «      ˆ fd„«       t        j                   |
‰j                  «       «      xs  |‰«      ˆfd„«       t        j                  ‰ j                  d«      dz  dk(  ˆ fd„«       t        j                  ‰j                  d«      dz  dk(  xr ‰j                  d«      dz  dk(  ˆfd„«       ‰ j                  \  ŠŠ‰j                  d«      Š‰j                  t         j                  k(  xr ‰j                  t         j                  k(  xs< ‰j                  t         j                  k(  xr ‰j                  t         j                  k(  }‰j                  «       dk(  rf‰j                  «       dk(  rSt        j                  ‰j                  t         j                  k(  xr ‰j                  t         j                  k(  d„ «       �n…|�r‰j                  t         j                  k(  rd}‰dz  Šn$d}‰ j                  t         j                  k(  r‰dz  Š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 rE   ©rW   r³  Úfloat8_e5m2Úfloat8_e4m3fnuzÚfloat8_e5m2fnuzÚfloat4_e2m1fn_x2r’   s    r9   Ú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¾   ©r™  r›   s   €€r9   rf   z(_check_scaled_mm_sizes.<locals>.<lambda>3  ó'   ø€ Ð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   €€r9   rf   z(_check_scaled_mm_sizes.<locals>.<lambda>7  ó&   ø€ ÐQÐRV×R\ÑR\ÐQ]Ð]mÐnr×nxÑnxÐmyÐz€ r;   r	  r  r  c                 ó,   — | d   | d   kD  xr | d   dk(  S r  r5   r  s    r9   Ú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  r5   r  s    r9   Úis_col_majorz,_check_scaled_mm_sizes.<locals>.is_col_majorC  ó   € Ø˜!‘9 ‘>Ò3 f¨Q¡i°!¡mÐ3r;   c                 óV   — | j                  d«      dk(  xs | j                  d«      dk(  S r  rÃ   ©Ú	tensor_2ds    r9   Úhas_zero_dimz,_check_scaled_mm_sizes.<locals>.has_zero_dimF  ó)   € Ø—>‘> !Ó$¨Ñ)ÒC¨Y¯^©^¸AÓ->À!Ñ-CÐCr;   c                  ó*   •— d‰ j                  «       › �S ©Nz#self must be row_major, got stride r  rÑ   s   €r9   rf   z(_check_scaled_mm_sizes.<locals>.<lambda>L  ó   ø€ Ð=¸d¿k¹k»m¸_ÐM€ r;   c                  ó*   •— d‰ j                  «       › �S ©Nz#mat2 must be col_major, got stride r  ©r™  s   €r9   rf   z(_check_scaled_mm_sizes.<locals>.<lambda>P  rN  r;   r4   r�  r   c                  ó,   •— d‰ j                  d«      › �S ©NzBExpected self.size(1) to be divisible by 16, but got self.size(1)=r4   rÃ   rÑ   s   €r9   rf   z(_check_scaled_mm_sizes.<locals>.<lambda>T  ó   ø€ Ð\Ð]a×]fÑ]fÐghÓ]iÐ\jÐk€ r;   c                  ó"   •— d‰ j                   › �S ©Nz?Expected both dimensions of mat2 to be divisible by 16 but got rB  rQ  s   €r9   rf   z(_check_scaled_mm_sizes.<locals>.<lambda>X  ó   ø€ ÐYÐZ^×ZdÑZdÐYeÐf€ r;   c                   ó   — y)NzNFor tensorwise scaling, both scale_a and scale_b must be float (fp32) tensors.r5   r5   r;   r9   rf   z(_check_scaled_mm_sizes.<locals>.<lambda>o  rn   r;   r‚  r¬  rX  c                   ó   — y)Nzscale_a must be contiguousr5   r5   r;   r9   rf   z(_check_scaled_mm_sizes.<locals>.<lambda>‘  rn   r;   c                   ó   — y)Nzscale_b must be contiguousr5   r5   r;   r9   rf   z(_check_scaled_mm_sizes.<locals>.<lambda>•  rn   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   €€€€r9   rf   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.r5   r5   r;   r9   rf   z(_check_scaled_mm_sizes.<locals>.<lambda>£  rn   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   €€r9   rf   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.r5   r5   r;   r9   rf   z(_check_scaled_mm_sizes.<locals>.<lambda>´  rn   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 (ry   r¬  ú), úscale_b should be (ú<). For (BlockWise1x128, BlockWise1x128), scale_a should be (z>). For (BlockWise128x128, BlockWise1x128), scale_a should be (ú). Got scale_a.size()=(r   r4   ú) and scale_b.size()=(rz   ©r:   rÄ   )Ú_krµ  r+  r-  r.  s   €€€€€r9   rf   z(_check_scaled_mm_sizes.<locals>.<lambda>Ï  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  )rW   rh   r‡   r_   r  ræ   rÄ   rš   Úfloat8_e8m0fnur³  r˜   r°  r7  r:   rê  r�   r„   )r›   r™  r-  r.  rŠ  r/  rŒ  r0  r8  rB  rE  rJ  Úis_blockwise_scalingÚblock_size_kÚblock_size_mnÚnum_k_blocksÚpadded_num_k_blocksÚ
_out_dtyperm  r]  r^  rµ  r+  s   ````              @@@@@r9   Ú_check_scaled_mm_sizesru    sB  ÿø€ ò
ô 
‡L�LØ�‰‹
�a‰Ò+˜DŸH™H›J¨!™OÜ`ôô 
‡L�LÙ˜4Ÿ:™:Ó&ÒIÑ+=¸d¿j¹jÓ+IÜzôô 	�DÓ˜VÒ#Ü�tÓ Ò%Ü�tÓ Ó%ò	<ò	4ò	Dô �tÓ Ò%Ü�L‰LÙ˜TŸ[™[›]Ó+ÒA©|¸DÓ/AÛMôô �L‰LÙ˜TŸ[™[›]Ó+ÒA©|¸DÓ/AÛMôô �L‰LØ—	‘	˜!“˜rÑ! QÑ&Ûkôô �L‰LØ—	‘	˜!“˜rÑ! QÑ&ÒA¨4¯9©9°Q«<¸"Ñ+<ÀÑ+AÛfôð —
‘
‰ˆˆ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‘à!�Ø—:‘:¤×!7Ñ!7Ò7Ø˜a™�Bàˆ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 rE   )ru  )r›   r™  r-  r.  rŠ  r/  rŒ  r0  s           r9   Úmeta_scaled_mmrw  â  s"   € ô "Øˆd�G˜W d¨L¸)À^óð r;   Úscale_recipe_aÚscale_recipe_bÚ	swizzle_aÚ	swizzle_bc           
      óN  ‡ ‡‡‡‡‡	‡‡‡ ‡!‡"‡#‡$‡%‡&— 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(  st        ‰ «      d
k(  �r¿d„ }d„ }d„ }t        ‰ «      d
k7  rã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r  ‰d   j                  t         j                  k(  d„ «       t        j                  ‰d   j                  «       dk(  xr  ‰d   j                  t         j                  k(  d„ «       �
n0 |||«      �rFt        j                  ‰d   j                  d«      ‰ k(  xr ‰d   j                  d«      dk(  ˆ ˆfd„«       t        j                  ‰d   j                  «       ‰ k(  xr  ‰d   j                  t         j                  k(  ˆ ˆfd „«       t        j                  ‰d   j                  «       ‰!k(  xr  ‰d   j                  t         j                  k(  ˆ!ˆfd!„«       t        j                  ‰d   j                  d«      dk(  ˆfd"„«       t        j                  ‰d   j                  d«      d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 )0Nc                 ó    — | t         j                  t         j                  t         j                  t         j                  t         j
                  fv S rE   r3  r’   s    r9   r8  z5_check_scaled_mm_sizes_v2.<locals>.is_fp8_or_fp4_typeÿ  r9  r;   c                 ó(   — | t         j                  k(  S rE   )rW   r7  r’   s    r9   Úis_fp4_typez._check_scaled_mm_sizes_v2.<locals>.is_fp4_type  s   € Øœ×.Ñ.Ñ.Ð.r;   r  c                  óL   •— d‰j                  «       › d‰ j                  «       › �S r;  r¾   r<  s   €€r9   rf   z+_check_scaled_mm_sizes_v2.<locals>.<lambda>  r=  r;   c                  ó<   •— d‰j                   › d‰ j                   › �S r?  r’   r<  s   €€r9   rf   z+_check_scaled_mm_sizes_v2.<locals>.<lambda>  r@  r;   r   r4   r	  r  r  c                 ó,   — | d   | d   kD  xr | d   dk(  S r  r5   r  s    r9   rB  z/_check_scaled_mm_sizes_v2.<locals>.is_row_major6  rC  r;   c                 ó&   — | d   dk(  xr | d   dkD  S r  r5   r  s    r9   rE  z/_check_scaled_mm_sizes_v2.<locals>.is_col_major9  rF  r;   c                 óV   — | j                  d«      dk(  xs | j                  d«      dk(  S r  rÃ   rH  s    r9   rJ  z/_check_scaled_mm_sizes_v2.<locals>.has_zero_dim<  rK  r;   c                  ó*   •— d‰ j                  «       › �S rM  r  rÑ   s   €r9   rf   z+_check_scaled_mm_sizes_v2.<locals>.<lambda>B  rN  r;   c                  ó*   •— d‰ j                  «       › �S rP  r  rQ  s   €r9   rf   z+_check_scaled_mm_sizes_v2.<locals>.<lambda>F  rN  r;   r�  c                  ó,   •— d‰ j                  d«      › �S rS  rÃ   rÑ   s   €r9   rf   z+_check_scaled_mm_sizes_v2.<locals>.<lambda>J  rT  r;   c                  ó"   •— d‰ j                   › �S rV  rB  rQ  s   €r9   rf   z+_check_scaled_mm_sizes_v2.<locals>.<lambda>N  rW  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     r9   Úis_tensorwisez0_check_scaled_mm_sizes_v2.<locals>.is_tensorwiseQ  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     r9   Ú
is_rowwisez-_check_scaled_mm_sizes_v2.<locals>.is_rowwiseY  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     r9   Úis_mxz(_check_scaled_mm_sizes_v2.<locals>.is_mxa  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     r9   Úis_nv_single_levelz5_check_scaled_mm_sizes_v2.<locals>.is_nv_single_leveli  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   r4   )rã   r)   r–  rŒ  r�  s     r9   Úis_nvz(_check_scaled_mm_sizes_v2.<locals>.is_nvs  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     r9   Ú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)   r›  ÚBlockWise128x128r�  s     r9   Ú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)   rž  r›  r�  s     r9   Úis_128x128_1x128z3_check_scaled_mm_sizes_v2.<locals>.is_128x128_1x128�  sT   € ä�H“ Ñ"ò >Ü˜“M QÑ&ò>à˜Q‘K¤;×#?Ñ#?Ñ?ò>ð ˜Q‘K¤;×#=Ñ#=Ñ=ð	r;   c                   ó   — y)Nz!scale_a must have 1 Float elementr5   r5   r;   r9   rf   z+_check_scaled_mm_sizes_v2.<locals>.<lambda>œ  rn   r;   c                   ó   — y)Nz!scale_b must have 1 Float elementr5   r5   r;   r9   rf   z+_check_scaled_mm_sizes_v2.<locals>.<lambda>   rn   r;   c                  óH   •— d‰ › dt        ‰d   j                  «       «      › �S )Nzscale_a must have shape [z
, 1], got r   )rä   rÄ   ©rñ  r-  s   €€r9   rf   z+_check_scaled_mm_sizes_v2.<locals>.<lambda>¦  s)   ø€ Ø/°¨s°*¼TÀ'È!Á*Ç/Á/ÓBSÓ=TÐ<UÐVð r;   c                  ó6   •— d‰ › d‰d   j                  «       › �S )Nzscale_a must have ú Float elements, got r   r  r¥  s   €€r9   rf   z+_check_scaled_mm_sizes_v2.<locals>.<lambda>¬  ó'   ø€ Ø(¨¨Ð+@ÀÈÁ×AQÑAQÓASÐ@TÐUð r;   c                  ó6   •— d‰ › d‰d   j                  «       › �S )Nzscale_b must have r§  r   r  )rÙ  r.  s   €€r9   rf   z+_check_scaled_mm_sizes_v2.<locals>.<lambda>²  r¨  r;   c                  ó2   •— d‰ d   j                  d«      › �S )Nz,expected scale_a.stride(1) to be 1, but got r   r4   r  )r-  s   €r9   rf   z+_check_scaled_mm_sizes_v2.<locals>.<lambda>¸  ó    ø€ ÐFÀwÈqÁz×GXÑGXÐYZÓG[ÐF\Ð]€ r;   c                  ó2   •— d‰ d   j                  d«      › �S )Nz,expected scale_b.stride(1) to be 1, but got r   r4   r  )r.  s   €r9   rf   z+_check_scaled_mm_sizes_v2.<locals>.<lambda>¼  r«  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 1x128 x 1x128 blockwise scaling, scale a must have shape [ry   r¬  ú] (got: ú) and stride [1, ú)scale b must have shape [rz   ©rš   ræ   )rÌ  rñ  rÙ  ÚsaÚsbs   €€€€€r9   rf   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;   rX  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 [ry   r¬  r®  r¯  r°  rz   r±  ©rÌ  ÚL4rñ  rÙ  r²  r³  s   €€€€€€r9   rf   z+_check_scaled_mm_sizes_v2.<locals>.<lambda>õ  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 [ry   r¬  r®  r¯  r°  rz   r±  rµ  s   €€€€€€r9   rf   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Ø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: rz   )r˜   rW   rn  r_   ©Úexpected_scale_a_elemsÚexpected_scale_b_elemsÚexpected_swizzler-  r.  rz  r{  s   €€€€€€€r9   rf   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 r¹  r   rº  ú). Must have swizzle type r¼  r»  rz   r  r½  s   €€€€€€€r9   rf   z+_check_scaled_mm_sizes_v2.<locals>.<lambda>A  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 r¹  r   rº  rÂ  r¼  r»  rz   r  r½  s   €€€€€€€r9   rf   z+_check_scaled_mm_sizes_v2.<locals>.<lambda>V  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 )Nrd  re  rf  ry   r¬  rg  rh  ri  rj  r   r4   rk  rz   rl  )rÌ  rñ  rÙ  r-  r.  s   €€€€€r9   rf   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  )rW   rh   r‡   r_   rš   r)   r*   Ú
NO_SWIZZLEr  ræ   rÄ   rä   Ú_check_valuer˜   r°  r@   rÿ  r   r:   ÚSWIZZLE_32_4_4rn  r³  r�   r„   )'r›   r™  r-  rx  r.  ry  rŠ  rŒ  rz  r{  r0  r8  r  ÚK_packed_multiplierÚsirB  rE  rJ  rŽ  r‘  r”  r—  r™  rœ  rŸ  r¡  Útypes_okÚ
scale_a_okÚ
scale_b_okrt  rÌ  r¶  rñ  rÙ  r¾  r¿  rÀ  r²  r³  s'   ``` `   ``                    @@@@@@@@@r9   Ú_check_scaled_mm_sizes_v2rÍ  ò  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‰	ô ×"Ñ"ð
ˆ	ô
 	�DÓ˜VÒ#Ü�tÓ Ò%Ü�tÓ Ó%ò	<ò	4ò	Dô �tÓ Ò%Ü�L‰LÙ˜TŸ[™[›]Ó+ÒA©|¸DÓ/AÛMôô �L‰LÙ˜TŸ[™[›]Ó+ÒA©|¸DÓ/AÛMôô �L‰LØ—	‘	˜!“˜rÑ! QÑ&Ûkôô �L‰LØ—	‘	˜!“˜rÑ! QÑ&ÒA¨4¯9©9°Q«<¸"Ñ+<ÀÑ+AÛfôð
	¤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ô ×ÑØ˜‘
× Ñ Ó" aÑ'ÒM¨G°A©J×,<Ñ,<ÄÇÁÑ,MÙ;ôô ×ÑØ˜‘
× Ñ Ó" aÑ'ÒM¨G°A©J×,<Ñ,<ÄÇÁÑ,MÙ;öñ ˜¨Õ7ä×ÑØ˜‘
—‘ Ó" aÑ'ÒC¨G°A©J¯O©O¸AÓ,>À!Ñ,Côôô ×ÑØ˜‘
× Ñ Ó" aÑ'ÒM¨G°A©J×,<Ñ,<ÄÇÁÑ,Môôô ×ÑØ˜‘
× Ñ Ó" aÑ'ÒM¨G°A©J×,<Ñ,<ÄÇÁÑ,Môôô ×ÑØ˜‘
×!Ñ! !Ó$¨Ñ)Û]ôô ×ÑØ˜‘
×!Ñ! !Ó$¨Ñ)Û]öñ ˜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ùò[
 @ùÚ?ùò :ùò :s   Ã0zÄzÄ"zÅz"rD  Úcontraction_dimsc                 ó.   — t        | |||||||	|||¬«      S )N)rŠ  rŒ  rz  r{  r0  )rÍ  )r›   r™  r-  rx  rz  r.  ry  r{  rŠ  rD  rÎ  r0  s               r9   Úmeta_scaled_mm_v2rÐ  p  s2   € ô %ØØØØØØØØØØØ%ôð r;   c                 óZ   — t        | ||||d¬«       | j                  | j                  «      S ©NT)r€  rš  ©r›   r‡   r”   r¤   rº  r¸  s         r9   Úmeta_scatter_reduce_tworÔ  Ž  s)   € ô �d˜C ¨¨VÀTÕJØ�>‰>˜$Ÿ*™*Ó%Ð%r;   c                 ó(   — t        | ||||d¬«       | S rÒ  rž  rÓ  s         r9   Úmeta_scatter_reduce__tworÖ  •  s   € ä�d˜C ¨¨VÀTÕJØ€Kr;   c                ót  ‡ — t        j                  d‰ j                  «       cxk  xr dk  nc ˆ fd„«       ‰ j                  «       dk(  r0t        j                  |t         j                  ‰ j
                  ¬«      S t        j                  ‰ j                  d«      |t         j                  ‰ j
                  ¬«      S )Nr   r  c                  ó*   •— d‰ j                  «       › �S )NzAThe probability distributions dimensions must be 1 or 2, but got r¾   rA  s   €r9   rf   z"meta_multinomial.<locals>.<lambda>   s   ø€ ÐSÐTY×T]ÑT]ÓT_ÐS`Ða€ r;   r4   r  )rW   rh   r‡   r�   r–   r„   rÄ   )rø   Únum_samplesÚreplacementr¡   s   `   r9   Úmeta_multinomialrÛ  ›  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 r3   r5   )Úvsr­  Úvs      r9   Úmultiply_integersrß  ©  s$   € Ø	€AØò ˆØ	ˆQ‰‰ðà€Hr;   c                 óL  ‡ ‡‡‡— t        j                  t        ‰«      ‰k(  ˆˆfd„«       ‰dz   Št        j                  t        ‰ «      ‰k(  ˆˆ fd„«       t        j                  t        d„ ‰ dd  D «       «      xr t        d„ ‰D «       «      ˆ ˆfd„«       ‰ d d \  }}||g‰¢­S )Nc                  ó&   •— d‰ › dt        ‰«      › �S )Nz%It is expected output_size equals to ú, but got size r  )Únum_spatial_dimsrÚ  s   €€r9   rf   z'upsample_common_check.<locals>.<lambda>³  s   ø€ Ð7Ð8HÐ7IÈÔY\Ð]hÓYiÐXjÐk€ r;   r  c                  ó&   •— d‰ › dt        ‰«      › �S )Nz$It is expected input_size equals to râ  r  )Úexpected_input_dimsr°  s   €€r9   rf   z'upsample_common_check.<locals>.<lambda>¸  s   ø€ Ð6Ð7JÐ6KÈ?Ô[^Ð_iÓ[jÐZkÐl€ r;   c              3   ó&   K  — | ]	  }|d kD  –— Œ y­w©r   Nr5   ©rs   rõ  s     r9   ru   z(upsample_common_check.<locals>.<genexpr>¼  s   è ø€ Ò*�aˆA��EÑ*ùó   ‚c              3   ó&   K  — | ]	  }|d kD  –— Œ y­wrç  r5   rè  s     r9   ru   z(upsample_common_check.<locals>.<genexpr>¼  s   è ø€ Ò2N¸Q°1°qµ5Ñ2Nùré  c                  ó   •— d‰ › d‰› �S )NzDInput and output sizes should be greater than 0, but got input size z and output size r5   )r°  rÚ  s   €€r9   rf   z'upsample_common_check.<locals>.<lambda>½  s   ø€ ð Ø �\Ð!2°;°-ðA€ r;   )rW   rh   rã   r`  )r°  rÚ  rã  r3  Úchannelsrå  s   ```  @r9   Úupsample_common_checkrí  °  s£   û€ Ü	‡L�LÜˆKÓÐ,Ñ,Ükôð +¨QÑ.ÐÜ	‡L�LÜˆJ‹Ð.Ñ.Ülôô
 
‡L�LÜÑ*˜: a b˜>Ô*Ó*ÒN¬sÑ2NÀ+Ô2NÓ/Nô	Aôð " " 1�~Ñ€FˆHØ�HÐ+˜{Ñ+Ð+r;   c                 ó4  ‡ — t        j                  ‰ j                  «       dk7  xs t        ‰ j	                  «       dd  «      ˆ fd„«       t        ‰ j	                  «       |d¬«      }‰ j                  |«      j                  t        j                  ‰ «      ¬«      S )Nr   r4   c                  ó*   •— d‰ j                  «       › �S )Nz>Non-empty 3D data tensor expected but got a tensor with sizes rÃ   rA  s   €r9   rf   z$upsample_nearest1d.<locals>.<lambda>Ë  ó   ø€ ÐPÐQV×Q[ÑQ[ÓQ]ÐP^Ð_€ r;   ©rã  rÌ   ©
rW   rh   r˜   rß  rÄ   rí  r™   rw  rP   r   )rø   rÚ  ÚscalesÚfull_output_sizes   `   r9   Ú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   r4   c                  ó*   •— d‰ j                  «       › �S ©Nz>Non-empty 4D data tensor expected but got a tensor with sizes rÃ   rA  s   €r9   rf   z$upsample_nearest2d.<locals>.<lambda>Û  rð  r;   r  rñ  r	  rX  rÌ   )rW   rh   r˜   rß  rÄ   rí  r™   rP   r   rš   r„   r{   rÐ   Ú
contiguous)	rø   rÚ  Úscales_hÚscales_wrô  r  rÍ   rS   Ú
n_channelss	   `        r9   Úupsample_nearest2drþ  Õ  sÆ   ø€ ô 
‡L�LØ�‰‹˜ÑÒAÔ/°·
±
³¸Q¸RÐ0@ÓAÛ_ôô -Ø�
‰
‹�k°AôÐð �_‰_Ð-Ó.€Fô ×/Ñ/°Ó6€Mð  Ÿ+™+Ñ€A€z�1�aØ‡|�|×Ñ˜FÒ" z°A¢~Ü×/Ñ/ˆà×Ñ¨]ÐÓ;€Fà€Mr;   rÚ  r°  rû  rü  c                 óX  ‡ ‡‡— t        ||d¬«      Št        j                  ‰ j                  dk(  ˆ fd„«       t	        d«      D ]2  Št        j                  ‰ j                  ‰«      ‰‰   k(  ˆˆ ˆfd„«       Œ4 ‰ j                  |«      j                  t        j                  ‰ «      ¬«      S )Nr  rñ  rX  c                  ó"   •— d‰ j                   › �S ©NzFExpected grad_output to be a tensor of dimension 4 but got: dimension rT  r   s   €r9   rf   z-upsample_nearest2d_backward.<locals>.<lambda>  ó   ø€ ÐXÐYd×YiÑYiÐXjÐk€ r;   c            
      óD   •— d‰› d‰ ‰   › d‰› d‰j                  ‰«      › �S )NzCExpected grad_output to have the same shape as output; output.size(ú) = z but got grad_output.size(rÃ   ©rô  rM  rü   s   €€€r9   rf   z-upsample_nearest2d_backward.<locals>.<lambda>  s>   ø€ ð Ø !˜s $Ð'7¸Ñ':Ð&;Ø,¨Q¨C¨t°K×4DÑ4DÀQÓ4GÐ3HðJð r;   rÌ   )
rí  rW   rh   rÆ   rå   rÄ   r™   rw  rP   r   )rM  rÚ  r°  rû  rü  rô  rü   s   `    @@r9   Ú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   r4   c                  ó*   •— d‰ j                  «       › �S )Nz>Non-empty 5D data tensor expected but got a tensor with sizes rÃ   rA  s   €r9   rf   z$upsample_nearest3d.<locals>.<lambda>  rð  r;   r1   rñ  rÌ   rò  )rø   rÚ  Úscales_drû  rü  rô  s   `     r9   Úupsample_nearest3dr
	    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Û  )rW   rŸ   r×   rq   r    r‹   r{   rš   ræ   r"   rë   r$   )
r›   Ústabler‡   Ú
descendingrÓ   rÔ   rÞ  rü   rÉ   Ú
out_strides
             r9   Ú	meta_sortr	  "  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 != 2rT  )Úinput_gatess   €r9   rf   z%rnn_cell_checkSizes.<locals>.<lambda>G  ó   ø€ °;×3CÑ3CÐ2DÀEÐ0J€ r;   c                  ó:   •— ‰j                   › d‰ j                   › �S ©Nr’  rB  )Úhidden_gatesr	  s   €€r9   rf   z%rnn_cell_checkSizes.<locals>.<lambda>J  s    ø€ �;×$Ñ$Ð% T¨,×*<Ñ*<Ð)=Ð>€ r;   r4   c                  ó"   •— ‰ j                   › d�S )Nz != 1rT  )Ú
input_biass   €r9   rf   z%rnn_cell_checkSizes.<locals>.<lambda>N  s   ø€ °j·o±oÐ5FÀeÐ3L€ r;   c                  ó.   •— ‰j                  «       › d‰ › �S r	  r  )Ú
gates_sizer	  s   €€r9   rf   z%rnn_cell_checkSizes.<locals>.<lambda>Q  s   ø€ �z×'Ñ'Ó)Ð*¨$¨z¨lÐ;€ r;   c                  ó:   •— ‰j                   › d‰ j                   › �S r	  rB  )Úhidden_biasr	  s   €€r9   rf   z%rnn_cell_checkSizes.<locals>.<lambda>U  s    ø€ �z×'Ñ'Ð(¨¨[×->Ñ->Ð,?Ð@€ r;   c                  ó"   •— ‰ j                   › d�S r	  rT  )Úprev_hiddens   €r9   rf   z%rnn_cell_checkSizes.<locals>.<lambda>W  r	  r;   r   c            
      ó`   •— ‰j                  «       › d‰j                  d«      › d‰› d‰› d‰ › d�
S )Nr’  r   z * z // z (aka rz   )r˜   rÄ   )Úexpected_prev_hidden_numelÚfactorr	  r	  r	  s   €€€€€r9   rf   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rE   rU  )rs   r>   r	  s     €r9   ru   z&rnn_cell_checkSizes.<locals>.<genexpr>^  s(   øè ø€ ò 
àð �H‰H˜×*Ñ*Õ*ñ
ùs   ƒ#&c                   ó   — y)Nz%expected all inputs to be same devicer5   r5   r;   r9   rf   z%rnn_cell_checkSizes.<locals>.<lambda>b  rn   r;   )rW   rh   rÆ   rš   rÄ   r˜   r`  )r	  r	  r	  r	  r"	  r	  r!	  r	  s   ``````@@r9   Ú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 )NrX  rÌ   )r%	  rW   rŸ   rÐ   )r	  r	  Úcxr	  r	  Ú	workspaceÚhyÚcys           r9   Ú_thnn_fused_lstm_cell_metar+	  f  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   r4   r½   r  rU  r’   )rã   rš   r™   rW   r�   r„   r<  )rø   rˆ  Úweight_stride0Ú
weight_bufÚhxr'	  r©  Úhidden_sizeÚ	proj_sizeÚ
num_layersÚbatch_firstÚdropoutÚtrainÚbidirectionalrH  Údropout_stateÚis_input_packedÚ
seq_lengthÚ
mini_batchÚbatch_sizes_sumÚnum_directionsÚout_sizerÉ   r  Ú
cell_shaper*	  r)	  Úreserve_shapeÚreserves                                r9   Ú
_cudnn_rnnrA	  u  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 rÂ  )r˜   r™   rA	  )rø   rˆ  r-	  r/	  r'	  r©  r0	  r2	  r3	  r4	  r5	  r6	  rH  r7	  Útotal_weight_elemsr?  r.	  s                    r9   Ú
miopen_rnnrD	  ­  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 )Nr4   r   rU  rÖ   )rš   r™   rW   r�   r„   r<  )rø   Úw0Úw1Úw2Úw3Úhx_Úcx_râ   rH  r©  r0	  r2	  Ú
has_biasesr6	  r3	  r5	  r9	  r:	  Úoutput_chanelsrÉ   r  r)	  r*	  r(	  s                           r9   Úmkldnn_rnn_layerrN	  Ú  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 r5   ©r‡   r-  s   €€r9   rf   z'zero_numel_check_dims.<locals>.<lambda>  s   ø€ �w�iÐSÐTWÐSXÐY€ r;   c                  ó   •— ‰› d‰ › d�S )Nz: Expected reduction dim z to have non-zero size.r5   rQ	  s   €€r9   rf   z'zero_numel_check_dims.<locals>.<lambda>  s   ø€ �w�iÐ8¸¸Ð=TÐU€ r;   )rÆ   rW   r—   rÄ   )r›   r‡   r-  s    ``r9   Úzero_numel_check_dimsrS	    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.r5   r†  s   €r9   rf   z%check_argmax_argmin.<locals>.<lambda>  s   ø€ �t�fÐ\Ð]€ r;   )rØ   r‡   rS	  rW   rh   r˜   )r  r›   r‡   s   `  r9   Úcheck_argmax_argminrV	    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’   )rV	  rP   rØ  rš   rÙ  r™   rW   r×   )r›   r‡   rÛ  rÞ  rš   s        r9   Úargmax_argmin_metarY	    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 )Nr5   r-  )rW   Újaggedr÷  r�   )rõ  r_   rƒ   r„   r…   s        r9   Úscalar_tensorr\	  #  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   r4   c                   ó   — y)Nzk not in range for dimensionr5   r5   r;   r9   rf   ztopk_meta.<locals>.<lambda>5  rn   r;   r’   )
rØ   r‡   rÄ   rW   rh   rä   rš   rã   r™   r×   )r›   r”  r‡   Úlargestr  Ú	sliceSizeÚtopKSizes          r9   Ú	topk_metarc	  /  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ú  rW   rŸ   r_   r„   rƒ   )
r›  r  rM  rº  rÅ  rÆ  rÇ  rÉ  Údata_contigÚgrad_contigs
             r9   Úmeta__segment_reduce_backwardrg	  =  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^	  r4   c                  ó   •— d‰ › �S )Nz9kthvalue(): selected number k out of range for dimension r5   r¾   s   €r9   rf   zkthvalue_meta.<locals>.<lambda>Y  s   ø€ ÐKÈCÈ5ÐQ€ r;   r’   )rt  r  rØ   r‡   rÄ   rW   rh   rä   rš   r~  r™   r×   )r›   r”  r‡   rÛ  r  ÚdimSizerš   s     `    r9   Úkthvalue_metark	  P  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Ú r5   r5   r;   r9   rf   z(checkLSTMBackwardSizes.<locals>.<lambda>h  rn   r;   c                   ó   — yrn	  r5   r5   r;   r9   rf   z(checkLSTMBackwardSizes.<locals>.<lambda>k  rn   r;   c                   ó   — yrn	  r5   r5   r;   r9   rf   z(checkLSTMBackwardSizes.<locals>.<lambda>m  rn   r;   c                   ó   — yrn	  r5   r5   r;   r9   rf   z(checkLSTMBackwardSizes.<locals>.<lambda>n  rn   r;   c                   ó   — yrn	  r5   r5   r;   r9   rf   z(checkLSTMBackwardSizes.<locals>.<lambda>o  rn   r;   c                   ó   — yrn	  r5   r5   r;   r9   rf   z(checkLSTMBackwardSizes.<locals>.<lambda>p  rn   r;   r   r4   rX  c                   ó   — yrn	  r5   r5   r;   r9   rf   z(checkLSTMBackwardSizes.<locals>.<lambda>q  rn   r;   )rW   rh   r‡   rÄ   r˜   )Úgrad_hyÚgrad_cyr'	  r*	  r(	  Údefined_gradÚexp_sizes          r9   ÚcheckLSTMBackwardSizesrz	  f  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Û  )rz	  rW   rŸ   Úlegacy_contiguous_memory_formatrH  )	rv	  rw	  r'	  r*	  r(	  Úhas_biasÚ
grad_gatesÚgrad_cxr   s	            r9   Ú#_thnn_fused_lstm_cell_backward_implr�	  u  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   r4   r  r½   ©r™   rÄ   )rE  rD  rF  rH  rP  Úgrad_weightr   s          r9   Úlinear_backwardr…	  ƒ  sŒ   € à€JØ€KØ€IØ�1‚~Ø!×+Ñ+¨F¯K©K«MÓ:ˆ
Ø�1‚~˜ QšØ"×,Ñ,¨l×.?Ñ.?ÀÓ.CÀVÇ[Á[ÐQSÃ_Ð-UÓVˆØ ×*Ñ*¨<×+<Ñ+<¸RÓ+@ÓAˆ	Ø˜ YÐ/Ð/r;   c                 óN  ‡ ‡— t        j                  t        ‰ j                  «      dkD  ˆ fd„«       t        j                  ‰ j                  d   ‰‰z  z  dk(  ˆ ˆfd„«       ˆ fd„}‰ j                  d   ‰‰z  z  }‰ j                  d   ‰z  }‰ j                  d   ‰z  }g ‰ j                  d d ¢|‘|‘|‘­} |«       }|t         j                  u s|t         j
                  u rt        |«      }nt        |«      }t        j                  ||‰ j                  ‰ j                  ¬	«      S )
Nr  c                  ó"   •— d‰ j                   › �S )Nú'Invalid input shape for pixel_shuffle: rB  rÑ   s   €r9   rf   z$meta_pixel_shuffle.<locals>.<lambda>”  s   ø€ Ð9¸$¿*¹*¸ÐF€ r;   r•  r   c                  ó(   •— d‰ j                   › d‰› �S )Nrˆ	  z with upscale_factor = rB  )r›   Úupscale_factors   €€r9   rf   z$meta_pixel_shuffle.<locals>.<lambda>˜  s   ø€ Ð9¸$¿*¹*¸ÐE\Ð]kÐ\lÐm€ r;   c                  ó¢   •— t        ‰«      } | t        j                  u s| t        j                  u rt	        ‰«      dk(  r| S t        j
                  S r2  )r   rW   rd  r+  r  rÐ   )r  r›   s    €r9   Úpick_memory_formatz.meta_pixel_shuffle.<locals>.pick_memory_format›  sH   ø€ ô $ DÓ)ˆà”5×&Ñ&Ñ&¨#´×1GÑ1GÑ*GÜ˜$Ó 5Ò(ØˆJÜ×&Ñ&Ð&r;   r  r½   r  )rW   rh   rã   rš   rd  r+  r   r   ru  r_   r„   )	r›   rŠ	  rŒ	  r7  ÚHrÚWrrÉ   r  rý   s	   ``       r9   Úmeta_pixel_shuffler�	  �  s  ù€ ä	‡L�LÜˆD�J‰J‹˜!ÑÛFôô 
‡L�LØ�
‰
�2‰˜.¨>Ñ9Ñ:¸aÑ?Ümôô
'ð" 	�
‰
�2‰˜>¨NÑ:Ñ;€AØ	�‰�B‰˜.Ñ	(€BØ	�‰�B‰˜.Ñ	(€BØ-�$—*‘*˜S˜b�/Ð- 1Ð- bÐ-¨"Ñ-€Iñ Ó
€CØ
Œe×!Ñ!Ñ! S¬E×,BÑ,BÑ%BÜ4°YÓ?‰ä1°)Ó<ˆÜ×ÑØ�; d§j¡j¸¿¹ôð r;   c                 ó>  — | j                  | j                  t        j                  ¬«      }|j                  |j                  t        j                  ¬«      }|j                  |j                  t        j                  ¬«      }|j                  |j                  t        j                  ¬«      }|j                  |j                  t        j                  ¬«      }d}||k(  rd|z  }n|j                  d   }|j                  |gt        j                  ¬«      }|||||||fS )Nr’   r1   rX  r   )r™   rš   rW   r[   )rø   Úweight0Úweight1Úweight2Úweight3rJ	  Úcx_tmpr  Úhy_Úcy_Úgrad_output_r_optÚgrad_hy_r_optÚgrad_cy_r_optrâ   r©  r0	  r2	  rL	  r5	  r6	  rH  r3	  r(	  Údiff_xÚdiff_hxÚdiff_cxÚdiff_w1Údiff_w2Ú	_GRU_MODEÚ	bias_sizeÚdiff_bs                                  r9   Úmkldnn_rnn_layer_backwardr£	  ¿  så   € ð4 �_‰_˜UŸ[™[´·±ˆ_Ó<€FØ�m‰m˜CŸI™I¬U¯[©[ˆmÓ9€GØ×Ñ˜vŸ|™|´5·;±;ÐÓ?€GØ×Ñ §¡´U·[±[ÐÓA€GØ×Ñ §¡´U·[±[ÐÓA€Gð €IØˆyÒØ˜‘O‰	à—M‘M !Ñ$ˆ	Ø×Ñ 	˜{´%·+±+ÐÓ>€FØ�7˜G V¨V°W¸gÐEÐEr;   )Ú	out_int32Úrightc                óŽ   — t        j                  | |rt         j                  nt         j                  t         j                  ¬«      S )N©r_   rÍ   )rW   rŸ   r’  r×   rÐ   ©r›   Ú
boundariesr¤	  r¥	  s       r9   Úmeta_bucketizerª	  ì  s2   € ô ×ÑØÙ&Œe�kŠk¬E¯K©KÜ×-Ñ-ôð r;   r©	  r¤	  r¥	  c                ór   — |j                  d|rt        j                  ¬«      S t        j                  ¬«      S )Nr5   r’   )r™   rW   r’  r×   r¨	  s       r9   Úmeta_bucketize_scalarr¬	  ö  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’   rA  s   €r9   rf   zmeta_histc.<locals>.<lambda>   s   ø€ Ð=¸e¿k¹k¸]È!ÐL€ r;   r	  z%_histc_cuda with floating point inputc                  ó$   •— ‰› dt        ‰ «      › �S )Nz#: argument 'bins' must be int, not r]  ©Úbinsr-  s   €€r9   rf   zmeta_histc.<locals>.<lambda>   s   ø€ �7�)Ð>¼tÀD»z¸lÐK€ r;   r   c                  ó   •— ‰› d‰ › �S )Nz: bins must be > 0, but got r5   r°	  s   €€r9   rf   zmeta_histc.<locals>.<lambda>   s   ø€  g YÐ.JÈ4È&Ð#Q€ r;   c                  ó$   •— ‰ › dt        ‰«      › �S )Nz%: argument 'min' must be Number, not r]  )r-  r  s   €€r9   rf   zmeta_histc.<locals>.<lambda>   ó   ø€ �7�)Ð@ÄÀcÃÀÐL€ r;   c                  ó$   •— ‰ › dt        ‰«      › �S )Nz%: argument 'max' must be Number, not r]  )r-  rþ  s   €€r9   rf   zmeta_histc.<locals>.<lambda>   r´	  r;   c                  ó   •— ‰ › d�S )Nz: max must be larger than minr5   )r-  s   €r9   rf   zmeta_histc.<locals>.<lambda>   s   ø€ ¨ yÐ0MÐ%N€ r;   rÖ   )r  rW   rh   r!  rP   r<  rq   r   r   r�   r„   r_   )rø   r±	  r  rþ  r-  s   ````@r9   Ú
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rç  r5   )rs   rÄ   s     r9   ru   z,meta_upsample_bimode2d_aa.<locals>.<genexpr>2   s   è ø€ Ò!H¨t $¨¥(Ñ!Hùré  r4   c                  ó*   •— d‰ j                  «       › �S rù  rÃ   rA  s   €r9   rf   z+meta_upsample_bimode2d_aa.<locals>.<lambda>3   rð  r;   rÌ   )
rí  rÄ   rW   rh   r˜   r`  r™   rw  rP   r   )rø   rÚ  r2  rû  rü  rô  s   `     r9   Úmeta_upsample_bimode2d_aar»	      s‹   ø€ ô -Ø�
‰
‹�k°AôÐô 
‡L�LØ�‰‹˜ÑÒHœcÑ!H°u·z±z³|ÀAÀBÐ7GÔ!HÓHÛ_ôð �?‰?Ð+Ó,×/Ñ/Ü×1Ñ1°%Ó8ð 0ó ð r;   c                 óT  ‡ ‡‡— t        ||d¬«      Št        j                  ‰ j                  dk(  ˆ fd„«       t	        d«      D ]0  Št        j                  ‰ j
                  ‰   ‰‰   k(  ˆˆ ˆfd„«       Œ2 ‰ j                  |«      j                  t        j                  ‰ «      ¬«      S )Nr  rñ  rX  c                  ó"   •— d‰ j                   › �S r	  rT  r   s   €r9   rf   z4meta_upsample_bimode2d_aa_backward.<locals>.<lambda>M   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   €€€r9   rf   z4meta_upsample_bimode2d_aa_backward.<locals>.<lambda>R   s@   ø€ ð DØDEÀ3ÀdÐK[Ð\]ÑK^ÐJ_ð `Ø˜˜D ×!1Ñ!1°!Ó!4Ð 5ð9€ r;   rÌ   )
rí  rW   rh   rÆ   rå   rš   r™   rw  rP   r   )rM  rÚ  r°  r2  rû  rü  rô  rü   s   `     @@r9   Ú"meta_upsample_bimode2d_aa_backwardr¿	  :   s¨   ú€ ô -Ø�K°!ôÐô 
‡L�LØ×Ñ˜AÑÛkôô �1‹Xò 
ˆÜ�‰Ø×Ñ˜aÑ Ð$4°QÑ$7Ñ7õ9õ	
ð
ð × Ñ  Ó,×/Ñ/Ü×1Ñ1°+Ó>ð 0ó ð r;   c                 óP  — t        j                  |j                  «       dk(  d„ «       t        j                  |j                  «       dk(  d„ «       t        j                  |j                  j                  d„ «       t        j                  |j                  j                  d„ «       y )Nr4   c                   ó   — y)Nz%found_inf must be a 1-element tensor.r5   r5   r;   r9   rf   z<_amp_foreach_non_finite_check_and_unscale_.<locals>.<lambda>_   rn   r;   c                   ó   — y)Nz%inv_scale must be a 1-element tensor.r5   r5   r;   r9   rf   z<_amp_foreach_non_finite_check_and_unscale_.<locals>.<lambda>b   rn   r;   c                   ó   — y)Nz!found_inf must be a float tensor.r5   r5   r;   r9   rf   z<_amp_foreach_non_finite_check_and_unscale_.<locals>.<lambda>f   rn   r;   c                   ó   — y)Nz!inv_scale must be a float tensor.r5   r5   r;   r9   rf   z<_amp_foreach_non_finite_check_and_unscale_.<locals>.<lambda>j   rn   r;   )rW   rh   r˜   r_   r!  )r›   rY  Ú	inv_scales      r9   Ú*_amp_foreach_non_finite_check_and_unscale_rÆ	  \   s|   € ä	‡L�LØ�‰Ó˜QÑÑ Oôô 
‡L�LØ�‰Ó˜QÑÑ Oôô 
‡L�LØ�‰×)Ñ)Ù3ôô 
‡L�LØ�‰×)Ñ)Ù3õr;   c                 ó,   — t        j                  | «      S rE   rž   )r›   ÚnanÚposinfÚneginfs       r9   Ú
nan_to_numrË	  o   r£   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ƒ   rW   rø  Ú
sparse_cscrù  Ú
sparse_bscr‹   rÆ   rØ   rä   rÄ   ræ   rë   )r›   Údim0rµ  ÚndimsrÄ   ræ   s         r9   rì  rì  u   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 rœ  r4   )rÆ   rD  rF  rG  r‹   r‡   rì  )r›   rÐ	  rF  rG  s       r9   Út_rÒ	  “   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 )
Nr4   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›   Úsorted_sequences   €€r9   rf   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   €€r9   rf   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 Truer5   r5   r;   r9   rf   z#meta_searchsorted.<locals>.<lambda>Í   rn   r;   r§	  r5   r  )rW   rh   rã   rš   r’  r×   rq   r   rŸ   rÐ   r�   r„   )r×	  r›   r¤	  r¥	  rÓ	  rÔ	  r_   s   ``   ` r9   Úmeta_searchsortedrÚ	  ¨   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(): r5   r’   s   €r9   rf   z3_check_for_unsupported_isin_dtype.<locals>.<lambda>Ý   s   ø€ ÐAÀ%ÀÐI€ r;   )rW   rh   rC  Ú
complex128Ú	complex64r’   s   `r9   Ú!_check_for_unsupported_isin_dtyperß	  Ú   s/   ø€ Ü	‡L�LØ”e—j‘j¤%×"2Ñ"2´E·O±OÐDÐDÛIõr;   c                 óJ   — | j                  || j                  d«      f«      }|S )Nr½   rƒ	  )rM  rÔ   Únum_weightsr  r'  r„	  s         r9   Úmeta_embedding_dense_backwardrâ	  á   s*   € ð ×'Ñ'¨°k×6FÑ6FÀrÓ6JÐ(KÓL€KØÐr;   c                 ój   — |	rt         j                  | ||||||||
|«
      S t        | ||||||||
|«
      S rE   )r.   Ú_embedding_bag_sparse_backwardÚ!meta_embedding_bag_dense_backward)r›  rÔ   rÆ  r+  r,  Úmaximum_indicesrá	  r'  r©  r(  r  r  s               r9   Úmeta_embedding_bag_backwardrç	  í   se   € ñ Ü×2Ñ2ØØØØØØØØØØó
ð 	
ô 1ØØØØØØØØØØó
ð 	
r;   c
                 óN  ‡ — t        j                  ‰ j                  t         j                  t         j                  t         j
                  t         j                  fv ˆ fd„«       |t        k(  rt        j                  |d u«       ‰ j                  |‰ j                  d«      f«      }
|
S )Nc                  ó"   •— d‰ j                   › �S )Nz$Unsupported input type encountered: r’   )r›  s   €r9   rf   z3meta_embedding_bag_dense_backward.<locals>.<lambda>'!  s   ø€ Ð6°t·z±z°lÐC€ r;   r4   )
rW   rh   r_   r±  r²  r°  Úfloat64r%  r™   rÄ   )r›  rÔ   r+  r,  ræ	  rá	  r'  r©  r  r  Úindex_grad_weights   `          r9   rå	  rå	  !  sv   ø€ ô 
‡L�LØ�
‰
”u—}‘}¤e§n¡n´e·m±mÄUÇ]Á]ÐSÐSÛCôð ŒxÒÜ�‰�_¨DÐ0Ô1ØŸ™¨°T·Y±Y¸q³\Ð'BÓCÐØÐr;   c                 óÜ  — | j                  d«      }t        j                  |t        k(  d„ «       t        j                  | j	                  «       dk(  «       t        j                  |j	                  «       dk(  «       |j                  d«      }t        j                  |j	                  «       dk(  «       t        j                  |j                  d«      |k(  «       | j                  |f«      }	|	S )Nr4   c                   ó   — y)NzHembedding_bag_backward: per_sample_weights only supported for mode='sum'r5   r5   r;   r9   rf   z@meta_embedding_bag_per_sample_weights_backward.<locals>.<lambda><!  rn   r;   r  r   )rÄ   rW   rh   r$  r‡   r™   )
r›  rˆ  rÔ   rÆ  r+  r©  r  Úembedding_featuresrÙ  r  s
             r9   Ú.meta_embedding_bag_per_sample_weights_backwardrï	  /!  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.r5   r5   r;   r9   rf   zmeta_isin.<locals>.<lambda>L!  rn   r;   rU  r’   )
rW   rh   rq   r   r  r„   rß	  r_   rŸ   rC  )ÚelementsÚtest_elementsrð	  rñ	  s       r9   Ú	meta_isinrö	  G!  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.r5   r5   r;   r9   rf   z meta_polygamma.<locals>.<lambda>\!  rn   r;   rä  r’   )rW   rh   r   r   rå  rŸ   )r+  r›   rS   rT   s       r9   Úmeta_polygammarù	  Y!  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)rv  rÑ   s    r9   Úmeta_local_scalar_denserû	  d!  s   € ä
ÐGÓ
HÐHr;   c                 ó,   — t        j                  | «      S rE   rž   rÑ   s    r9   Úsilurý	  i!  r£   r;   c                 ól   — t        | t        j                  ¬«      \  }}t        j                  | |¬«      S rã  )r   r   rå  rW   rŸ   )r›   rS   rT   s      r9   Úsigmoidrÿ	  o!  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   r4   c                   ó   — y©Nz matrix batch sizes have to matchr5   r5   r;   r9   rf   z2_create_grouped_mm_output_tensor.<locals>.<lambda>‚!  rn   r;   r½   c                   ó   — yr
  r5   r5   r;   r9   rf   z2_create_grouped_mm_output_tensor.<locals>.<lambda>ˆ!  rn   r;   c                   ó   — y)Nzbatched dimension has to matchr5   r5   r;   r9   rf   z2_create_grouped_mm_output_tensor.<locals>.<lambda>Ž!  rn   r;   r�  r  )r‡   rÄ   rW   rh   r_   rÿ  r	  Úitemsizeru  r„   r�   )r—  r™  ÚoffsrŒ  Ú
mat1_is_2dÚ
mat2_is_2dr=	  Ú	alignmentÚsize_paddedr	  rí   s              r9   Ú _create_grouped_mm_output_tensorr
  y!  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 noner5   r5   r;   r9   rf   z)_meta_grouped_mm_common.<locals>.<lambda>°!  rn   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   €€r9   rf   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   €€r9   rf   z)_meta_grouped_mm_common.<locals>.<lambda>Ç!  s%   ø€ ÐGÈÏÉÀ}ÐTeÐfk×fqÑfqÐerÐrsÐt€ r;   )r  r1   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   €€r9   rf   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 matchr5   r5   r;   r9   rf   z)_meta_grouped_mm_common.<locals>.<lambda>Õ!  rn   r;   c                 óF   — | j                  «       }|d   dkD  xr |d   dk(  S ©Nr  r4   r½   r  ©ÚmatÚ
mat_strides     r9   rB  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     r9   rE  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   €r9   rf   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   €r9   rf   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 )Nr4   r�  r   c                  ó"   •— d‰› d‰ › d‰‰    › d�S )Nr  ú stride along ú% dim to be multiple of 16 bytes, got rü  r5   ©Úend_dimÚmat_namer
  s   €€€r9   rf   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!
  r4   r"
  rü  r5   r#
  s   €€€r9   rf   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.rB  r
  s   €€r9   rf   zF_meta_grouped_mm_common.<locals>.check_valid_strides.<locals>.<lambda> "  s!   ø€ Ð5°j°\ÐARÐSV×S\ÑS\ÐR]Ð]hÐi€ r;   )r‡   Úelement_sizeræ   rþ  rš   rW   rh   )r%
  r
  r	
  r$
  r
  s   `` @@r9   Ú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’   ra  s   €€r9   rf   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;   r4   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.r5   ©Ú
scale_names   €r9   rf   z>_meta_grouped_mm_common.<locals>.check_scale.<locals>.<lambda>"  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=rT  ©r
  rÊ  r.
  s   €€€r9   rf   z>_meta_grouped_mm_common.<locals>.check_scale.<locals>.<lambda>!"  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;   r4   c                  ó2   •— d‰› d‰ j                  «       › d�S )Nr  z to be 1D tensor, but got ú	D tensor.r¾   ©rÊ  r.
  s   €€r9   rf   z>_meta_grouped_mm_common.<locals>.check_scale.<locals>.<lambda>&"  ó#   ø€  )¨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.rB  )r
  rÊ  Úscale_multiplierr.
  Ú
scaled_dims   €€€€€r9   rf   z>_meta_grouped_mm_common.<locals>.check_scale.<locals>.<lambda>*"  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.r5   r-
  s   €r9   rf   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ü  rB  r2
  s   €€€r9   rf   z>_meta_grouped_mm_common.<locals>.check_scale.<locals>.<lambda>3"  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 r0
  r1
  rT  r2
  s   €€€r9   rf   z>_meta_grouped_mm_common.<locals>.check_scale.<locals>.<lambda>:"  sF   ø€ Ð"RÐS]ÐR^Ð^lÐmp×muÑmuÐlvð  wGð  HM÷  HRñ  HRð  GSð  !T€ r;   r‚  rX  r¬  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 rB  )ÚGÚ	blocked_KÚ	blocked_Nr
  rÊ  s   €€€€€r9   rf   z>_meta_grouped_mm_common.<locals>.check_scale.<locals>.<lambda>D"  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 r4
  r¾   r5
  s   €€r9   rf   z>_meta_grouped_mm_common.<locals>.check_scale.<locals>.<lambda>I"  r6
  r;   c                  óV   •— d‰› d‰ j                   d‰z      › d‰j                   d   › d�S )Nr  z non-batch dimension to be r4   r<
  rü  rB  )r
  rÊ  r.
  r9
  s   €€€€r9   rf   z>_meta_grouped_mm_common.<locals>.check_scale.<locals>.<lambda>M"  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‡   rW   rh   rê  rš   ræ   rÆ   r@   )r.
  rÊ  r
  r9
  r8
  rÌ  rÙ  r×  r@
  rA
  rB
  Úis_mxfp8s   `````   @@@€r9   Úcheck_scalez,_meta_grouped_mm_common.<locals>.check_scale"  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.r5   r5   r;   r9   rf   z)_meta_grouped_mm_common.<locals>.<lambda>X"  rn   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   €€r9   rf   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   €r9   rf   z)_meta_grouped_mm_common.<locals>.<lambda>c"  s   ø€ ÐHÈÏÉËÈÐTUÐV€ r;   c                  ó$   •— d‰ j                   › d�S )Nz7Offsets tensor must be integer (int32) tensor, but got rü  r’   rJ
  s   €r9   rf   z)_meta_grouped_mm_common.<locals>.<lambda>g"  s   ø€ ÐQÐRV×R\ÑR\ÐQ]Ð]^Ð_€ r;   c                   ó   — y)NzJOffsets tensor provided, but is not needed for 3D/3D multiplicand layouts.r5   r5   r;   r9   rf   z)_meta_grouped_mm_common.<locals>.<lambda>l"  rn   r;   c                   ó   — y)Nz2Bias tensor provided, but it is not supported yet.r5   r5   r;   r9   rf   z)_meta_grouped_mm_common.<locals>.<lambda>q"  rn   r;   c                   ó   — y)Nz4If output dtype provided, it must be torch.bfloat16.r5   r5   r;   r9   rf   z)_meta_grouped_mm_common.<locals>.<lambda>v"  rn   r;   r_  )rW   rh   r³  rÿ  r   r	  r  Úget_device_propertiesÚgcnArchNamer5  r_   r²  r‡   rÄ   r°  rn  rš   r’  r
  )r
  r
  r-  r.  r
  rŠ  r/  rŒ  r0  ÚscaledÚ	fp8_dtypeÚmat_a_is_2dÚmat_b_is_2drB  rE  r)
  rF
  r8
  rE
  s   `````             @r9   Ú_meta_grouped_mm_commonrU
  £!  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Œ  )rU
  )r
  r
  r
  rŠ  rŒ  s        r9   Úmeta_grouped_mmrW
  |"  s)   € ô #ØØØØØØØØô	ð 	r;   c	                 óR   — |xs t         j                  }t        | ||||||||¬«	      S )N)r-  r.  r
  rŠ  r/  rŒ  r0  )rW   r²  rU
  )	r
  r
  r-  r.  r
  rŠ  r/  rŒ  r0  s	            r9   Úmeta_scaled_grouped_mmrY
  ‘"  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 tensorr5   r5   r;   r9   rf   z#meta_foreach_norm.<locals>.<lambda>³"  rn   r;   r5   r’   )	r[   rW   rh   r˜   r_   r  r   rý  r™   )ÚtensorsÚordr_   r  ÚresultsrŒ  s         r9   Ú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_   rW   rY   r²  r‹   rP   r   r   rQ   rŸ   rÐ   )r>   r‡   ra
  Úcomputation_dtyperT   rå  s         r9   Úsoftmaxrd
  ¾"  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  r¾  s   €r9   rf   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 rx  r  )Úl_inpr¿  s   €€r9   rf   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rç  )rq   rP   ÚIntWithoutSymInt)rs   r—  s     r9   ru   z(_constant_pad_nd_meta.<locals>.<genexpr>å"  s)   è ø€ Ò
IÀŒ:�aœ×/Ñ/Ó0Ò;°Q¸!±VÓ;Ñ
Iùs   ‚+-r4   c            	      óF   •— d‰‰‰ z      › d‰‰   › d‰‰dz      › d‰‰ z   › d�	S )NzThe input size z, plus negative padding rÂ   r4   zG resulted in a negative output size, which is invalid. Check dimension z of your input.r5   )rü   r#  Úl_diffr¿  Úpad_idxs   €€€€€r9   rf   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Í   )rW   rh   rã   rš   r`  rå   Únarrowr»   rä   rý  r�   r_   r„   r†   r   )rø   r¿  r’  Úl_padÚc_inputÚ	new_shapeÚnew_dimrü   r#  rl
  rh
  rm
  s    `     @@@@@r9   Ú_constant_pad_nd_metars
  Ð"  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                 óÌ  ‡— | j                  «       dk7  rt        d| j                  «       › d�«      ‚t        j                  ‰j                  t        j
                  t        j                  fv ˆf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-Dc                  ó$   •— d‰ j                   › d�S )NzhExpected tensor for argument #1 'indices' to have one of the following scalar types: Long, Int; but got r…  r’   r  s   €r9   rf   zembedding.<locals>.<lambda>#  s   ø€ ð0Ø07·±¨¸hðHð r;   r   r4   r’   )
r‡   r‹   rW   rh   r_   r–   r’  rš   rÆ   r™   )	rˆ  rÔ   r  r'  r(  Úweight_shapeÚindices_shaperÉ   rŒ  s	    `       r9   Ú	embeddingrx
  #  sÕ   ø€ ð ‡z�zƒ|�qÒÜÐ9¸&¿*¹*»,¸ÀrÐJÓKÐKÜ	‡L�LØ�‰œ%Ÿ*™*¤e§k¡kÐ2Ð2ó	
ôð —<‘<€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 )Nr4   z&Only one jagged dim is supported, got z offsetsz max_lengthsr   )rã   r‹   rš   r™   )rÓ   rÆ  ry
  rz
  r(  rÄ  r¶  s          r9   Ú$meta__jagged_to_padded_dense_forwardr|
  (#  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^  ©rU   r   rå  rl  s    r9   Ú_fz)_create_unary_float_meta_func.<locals>._f@#  s   € ô  ØÔ=×JÑJô
ð 	
r;   ©rL   r%   ©Úfuncr€
  s     r9   Ú_create_unary_float_meta_funcr„
  ?#  ó*   € Ü�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   r4   )r¹   rº   r˜   r™   rš   rÄ   )r¦  rá   r’  r¥   rñ  r§   r¨   r©   rª   r¶   Úneed_weightsÚaverage_attn_weightsr·   r(  ÚTÚ
output_dimr  Úattn_weightss                     r9   Ú native_multi_head_attention_fakerŒ
  K#  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     r9   r€
  z*_create_binary_float_meta_func.<locals>._f}#  s   € ô  ØˆqÔ!@×!MÑ!Mô
ð 	
r;   r�
  r‚
  s     r9   Ú_create_binary_float_meta_funcr�
  |#  r…
  r;   c                 ó˜   ‡ — t        ‰ «      ˆ fd„«       }‰ j                  › d�}||_         t        t        t        |«      «      |«      }|S )Nc                 ó`   •—  ‰| g|¢­i |¤Ž}t        | j                  |j                  «       | S rE   r‘  )r›   rR   rV  rí   rG   s       €r9   Ú_fnz#_register_inplace_meta.<locals>._fn¡#  s.   ø€ á�Ð'˜Ò' Ñ'ˆÜ §
¡
¨C¯I©IÔ6Øˆr;   rS   )r   r|   rL   Úgetattrr.   )rG   r’
  Úinplace_names   `  r9   Ú_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   €€r9   rf   zlerp.<locals>.<lambda>³#  s   ø€ �/ %§+¡+ Ð.HÈÏÉÈÐT€ r;   r   c                  ó<   •— d‰ j                   › d‰j                   › �S )Nrç  z for `weight`, but got dtype r’   )r~   rˆ  s   €€r9   rf   zlerp.<locals>.<lambda>º#  s!   ø€ ˜/¨%¯+©+¨Ð6SÐTZ×T`ÑT`ÐSaÐb€ r;   rM   )
rW   rh   r_   rq   r    rÆ   rý  rU   r   rQ   )r~   r}   rˆ  rR   s   ``` r9   Ú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       r9   Ú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.r5   r5   r;   r9   rf   zaddcdiv.<locals>.<lambda>Ò#  rn   r;   r  )rW   rh   rP   rŠ  r_   rU   r   rQ   r›
  s       r9   Úaddcdivr¡
  Ê#  sb   € ô 
‡L�Lä×"Ñ" 7§=¡=Ó1ò 6Ü×&Ñ& w§}¡}Ó5ð	
ñ		
ôô  Øˆw˜Ô0O×0WÑ0Wôð r;   c                  óÚ  — i } dD ]  }t         |   }|D ]  }|| vsŒ||   | |<   Œ Œ! | j                  «       D �]±  \  }}t        |t        j                  j
                  «      rŒ,t        |t        «      s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   Úitemsrq   rW   Ú_opsÚHigherOrderOperatorr   r‹   r{   Úpy_implÚ_CÚDispatchKeyr0   Ú%_dispatch_has_kernel_for_dispatch_keyr  rv  Ú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_overloadrG   s         r9   Úactivate_metarÀ
  î#  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;   rE   r  )F)ç        g      ð?r|	  )NNNFr   r4   r½   )Tr  )r,  )r5  T)FF)TT)r«  )FTN)TFF)TF)r  )g      à?N)rA   rõ  )r5   r  r_  F)r5   r  FTN)Fr   FNFr½   )NF)r½   F)g      À?gUUUUUUÕ?FN)NNNNN)r   NNr4   )r   r   r4   )NNF)rÁ
  FFN)NrÁ
  FFN)rÁ
  FNN)NrÁ
  FNNF)rÁ
  FN)FN)NNNNNNN)FNNNN)NNNF)NNNNF)Nr½   FNN)NNNN)r½   TT)NNr   N)éd   r   r   )r½   )r  N)r½   FF)rÁ
  )NTTN(Ë  r  Úcollections.abcr   r   Úenumr   Ú	functoolsr   Útypingr   Útyping_extensionsr   rW   Útorch._prims_commonr  rP   r	   r
   r   Útorch._decompr   r   r   r   Ú
torch._opsr   Útorch._primsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    Útorch._prims_common.wrappersr!   r"   r#   r$   r%   r1  r&   r'   Útorch.fx.experimentalr(   r³  Útorch.nn.functionalr)   r*   Útorch.utilsr+   rI   r,   r-   r  r.   ÚlibraryÚLibraryrº
  rå   r$  r&  r%  r:   r@   rL   rU   ra   rj   ÚlinspaceÚlogspacer÷  r�   Útaker  rí   rœ   Ú_standard_gammar¢   Ú_transformer_encoder_layer_fwdr  rC  r[   r¼   rÊ   rÒ   ÚcummaxÚcumminrÙ   rÜ   rÿ   rä   r  Ú_fft_c2cr  r  r  Ú_fft_r2cr(  ÚrandpermÚgenerator_outr,  r–   r1  Úrandintr:  r7  Úlow_outr=  Úrandr?  Ú_philox_key_splitrI  Ú_philox_key_fold_inrN  rb  rd  rh  rj  rk  Ú_fft_c2rrp  ré  r|  rƒ  Ú
unsqueeze_r‡  Ú_sparse_semi_structured_linearrõ  r_   r–  Ú_sparse_semi_structured_mmr£  Ú_sparse_semi_structured_addmmr§  Ú_cslt_sparse_mmr·  Úindex_reducer¾  Úindex_reduce_rÀ  Úindex_selectrÄ  Úsegment_reducerÏ  rþ  Ú	unary_outrÓ  r‡   rÜ  r  rß  rá  rê  ræ  rë  Ú_assert_asyncrï  Ú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+  r1  r9  Ú_linalg_eighr:  rC  Ú_linalg_eigvalsÚlinalg_eigvalsrF  Ú
linalg_eigrJ  rN  rP  rV  r[  r_  re  rw  Úlinalg_inv_exrz  Úlinalg_ldl_factor_exrg   r€  Úlinalg_ldl_solverŽ  Ú	linalg_lur•  Úlinalg_lu_factor_exr™  Úlinalg_lu_solver¢  Ú	lu_unpackr¨  r±  Ú	linalg_qrr¸  r¼  r¹  Ú_linalg_svdrÅ  r‹  rW  rÔ  rç  Úlinalg_solve_triangularrï  rõ  rþ  Ú_linalg_detr  r  r"  r5  Úreflection_pad1dr:  Úreplication_pad1drD  rO  Úreflection_pad1d_backwardrT  Úreplication_pad1d_backwardrV  rf  Úreflection_pad2drh  Úreplication_pad2drk  Ú_weight_norm_interface_backwardrs  Úreflection_pad2d_backwardrP  Úreplication_pad2d_backwardrz  r‰  Úreflection_pad3dr‹  Úreplication_pad3drŽ  Úreflection_pad3d_backwardÚreplication_pad3d_backwardr–  Ú_pdist_forwardrš  Ú_pdist_backwardr   Úbaddbmmr¹  Ú	bernoullir»  Ú
bernoulli_r¾  r—  rÁ  ÚpoissonrÃ  Ú_fused_moving_avg_obs_fq_helperrÒ  ÚmmrÛ  rÙ  r  r  r	  Úmiopen_batch_normr  Úconvolutionr!  Ú_convolutionr(  r±
  Ú_has_mkldnnrµ
  r)  Ú_convolution_pointwiser0  Ú_linear_pointwiser4  Úhas_mklr·
  r  Ú_mkl_linearr8  r¸
  r9  Úqconv2d_pointwiseÚqconv_pointwiser  rF  ÚbinaryÚbinary_tensorrQ  Úqlinear_pointwiserV  r[  Úlinear_dynamic_fp16Úlinear_relu_dynamic_fp16r]  r¹
  r^  Ú
max_pool2dri  Úint4mm_packed_weight_cpury  r~  Úquantize_per_tensorr€  Ú
avg_pool2dr¤  r©  Úavg_pool2d_backwardr±  Ú
avg_pool3drË  Úavg_pool3d_backwardrÖ  Ú_adaptive_avg_pool2drÛ  Ú_adaptive_avg_pool3drÞ  Ú_adaptive_avg_pool2d_backwardrè  Ú_adaptive_avg_pool3d_backwardrí  rë  Úadaptive_max_pool2drý  r  r  Úadaptive_max_pool3dr
  r  r  Úrepeat_interleaver  rr   r  r  r  r”   Ú_unsafe_indexr<  Úconvolution_backwardrL  ÚaddbmmrT  Úrandint_likerW  Ú_fused_adam_Ú_fused_adamw_rm  Ú_fused_adamrs  Ú_int_mmrz  Ú_convert_weight_to_int4packr…  Ú#_convert_weight_to_int4pack_for_cpurŠ  Ú_weight_int4pack_mmr”  Ú_weight_int4pack_mm_for_cpurš  r£  r¥  rÑ  Ú_dyn_quant_pack_4bit_weightrÛ  Ú_dyn_quant_matmul_4bitrá  Ú_weight_int8pack_mmrê  Ú_cdist_forwardr  Ú_cdist_backwardr  Ú_embedding_bagr0  Ú_embedding_bag_forward_onlyr3  r6  Únansumr8  ÚmedianÚ	nanmedianr:  Ú
dim_valuesr©  rÓ   r=  Úlogical_not_r?  ÚrepeatrG  Úzero_rI  Úmul_ÚScalarÚlogical_and_Úlogical_or_Úlogical_xor_rL  Údiv_rR  Úadd_Úsub_r\  r|  Úsubra  ÚroundÚdecimalsrc  ri  Ú
__rshift__rm  Ú
__lshift__rq  Úzerors  rI  r{  Úfillr~  Úrelu_r€  Ú	_add_relur‚  Úrrelu_with_noiser‡  Úrrelu_with_noise_functionalr‰  Úrrelu_with_noise_r‹  Ú	index_putÚ_unsafe_index_putr�  Úmasked_fill_r“  Ú_masked_scaler–  Úmasked_scatter_rš  Úmasked_scatterrœ  Úmasked_scatter_backwardrž  Ú
index_put_r   r®  Úbmmr±  Ú	dtype_outr³  rµ  rº  r˜  r™  rÀ  rá  rÒ  rc  Ú 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_backwardr5  r;  r=  r@  r  ÚonesrN  ÚzerosrQ  Úselect_scatterrU  Úslice_scatterrY  Údiagonal_scatterr\  rT  rØ   rd  rl  Úgatherrr  r�  rˆ  rŠ  r”  r—  Úscatter_addrœ  Úscatter_add_rŸ  r–  r¤   r’  rº  Úvalue_reducer£  Úscatter_r¥  Ú#_scaled_dot_product_flash_attentionr¸  r½  rÄ  Ú#_scaled_dot_product_cudnn_attentionrÌ  Ú0_scaled_dot_product_fused_attention_overrideablerÏ  Ú9_scaled_dot_product_fused_attention_overrideable_backwardrÛ  Ú,_scaled_dot_product_flash_attention_backwardrÝ  Ú+_scaled_dot_product_flash_attention_for_cpurá  Ú4_scaled_dot_product_flash_attention_for_cpu_backwardrå  Ú*_scaled_dot_product_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  Ú+_flash_attention_forward_no_dropout_inplacer  r  Ú_flash_attention_backwardr  Ú_efficient_attention_forwardr$  Ú_efficient_attention_backwardÚSymIntr,  ru  Ú
_scaled_mmrw  rÍ  Ú_scaled_mm_v2rÐ  Úscatter_reduceÚtwoÚtwo_outrÔ  Úscatter_reduce_rÖ  ÚmultinomialrÛ  rß  rí  rõ  Ú_upsample_nearest_exact1drþ  Ú_upsample_nearest_exact2dr	  Ú"_upsample_nearest_exact2d_backwardr
	  Ú_upsample_nearest_exact3drç   r	  Úvalues_stabler	  r%	  Ú_thnn_fused_lstm_cellr+	  rA	  rD	  rN	  rS	  rV	  rX	  ÚargminrY	  r\	  Útopkrc	  Ú_segment_reduce_backwardrg	  Úkthvaluerk	  rÐ   r}	  rz	  r�	  r…	  Úpixel_shuffler�	  r£	  Ú	bucketizeÚ
Tensor_outrª	  Ú
Scalar_outr¬	  Úhistcr·	  Ú_upsample_bilinear2d_aaÚ_upsample_bicubic2d_aaÚ_upsample_lanczos2d_aar»	  Ú _upsample_bilinear2d_aa_backwardÚ_upsample_lanczos2d_aa_backwardr¿	  rÆ	  rË	  rì  rÒ	  ÚsearchsortedrÚ	  rß	  Úembedding_dense_backwardrâ	  Ú_embedding_bag_backwardrç	  Ú_embedding_bag_dense_backwardrå	  Ú*_embedding_bag_per_sample_weights_backwardrï	  Úisinrö	  Ú	polygammarù	  Ú_local_scalar_denserû	  rý	  rÿ	  r
  rU
  Ú_grouped_mmrW
  Ú_scaled_grouped_mmrY
  Ú_foreach_normr`
  Ú_softmaxrd
  Úconstant_pad_ndrs
  rx
  Ú_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ž
  r¡
  Úlerp_Úaddcmul_Úaddcdiv_Útorch._refs.nn.functionalÚtorch._refs.specialrÀ
  r5   r;   r9   ú<module>rÒ     s³S  ðã ß .Ý Ý Ý Ý 'ã Ý #ß +Ñ +÷ó õ "ß 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ð'ñ �×$Ñ$×,Ñ,¨d×.BÑ.B×.FÑ.FÐGÓHÙƒó"ó ó Ið"ñ à×+Ñ+×3Ñ3Ø×+Ñ+×/Ñ/ðóñ ƒð( !%Ø ò)!Ø	ð!àð!ð ð!ð ð	!ð
 ð!ð ð!ð ð!ð ð!ð ð!ð 
ð!ð ð!ð ð!ð ð!ð ð!ð ð!ð  ð!!ð" ð#!ð$ ð%!ð& �,‰,˜Ñ
ð'!ð( �T‰zð)!ð* ò+!ó óð!ñ> �×!Ñ!×)Ñ)¨4×+<Ñ+<×+@Ñ+@ÐAÓBÙƒØ%'ó %ó ó Cð%ñ$ ˆt×%Ñ%Ó&ÙƒñIó ó 'ðIñ Ø	‡[�[×Ñ˜$Ÿ+™+Ÿ/™/¨4¯;©;×+>Ñ+>ÀÇÁÇÁÐPóñ ˆX�yÓ!ñó "óðñ �×!Ñ!×)Ñ)¨4×+<Ñ+<×+@Ñ+@ÐAÓBÙƒñIó ó CðIò.òb�Vð  $ s¡)ð ¸4ó ñ �—‘×%Ñ% t§}¡}×'8Ñ'8Ð9Ó:Ùƒñ"<ó ó ;ð"<ðJ €ð $ s¡)ó ñ �—‘×%Ñ% t§}¡}×'8Ñ'8Ð9Ó:Ùƒñ@
ó ó ;ð@
ñF ˆ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ñ" ˆt×'Ñ'×/Ñ/Ó0ñ	!ó 1ð	!ò%
ñP ˆt×#Ñ#×+Ñ+Ó,óó -ðñ
 ˆt×$Ñ$×,Ñ,Ó-óó .ðñ
 �—’×%Ñ% t§}¢}×'8Ñ'8Ð9Ó:Ùƒð*L�vð *L D¨¡Ið *L¸cð *LÈCò *Ló ó ;ð*LñZ ˆt�zŠz×!Ñ!Ó"óó #ðò:	(ñ ˆt�Š×&Ñ&Ó'ñó (ðñ ˆt×2Ò2Ó3ð
 Ø"&Ø$(ò)Øð)àð)ð ð)ð �4‰-ð	)ð
 ˜4‘Zð)ð �{Š{˜TÑ!ò)ó 4ð)ñX ˆt×.Ò.Ó/ð
 %)ò	Ø
ðàðð ðð �{Š{˜TÑ!ò	ó 0ðñ> ˆt×1Ò1Ó2ð Ø	
Ø$(ò)Øð)à
ð)ð ð)ð ð	)ð �{Š{˜TÑ!ò)ó 3ð)ñX ˆt×#Ò#Ó$ð ØØ$(Ø"ØØØò8<Ø—,‘,ð8<à�\‰\ð8<ð �4‰-ð8<ð �D‰=ð	8<ð
 �{Š{˜TÑ!ð8<ð ð8<ð ð8<ð ð8<ð ò8<ó %ð8<ñv ˆ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òB%;ñP ˆt×$Ò$Ó%Ùƒñ=ó ó &ð=ñ ˆt×%Ò%Ó&Ùƒñ>ó ó 'ð>ò(ñ@ ˆt×-Ò-Ó.Ùˆ\ÓñSó ó /ðSñ ˆt×.Ò.Ó/Ùˆ\ÓñTó ó 0ðTò<ñ~ ˆt×$Ò$Ó%Ùƒñ=ó ó &ð=ñ ˆt×%Ò%Ó&Ùƒñ>ó ó 'ð>ñ Ø×(Ò(×0Ñ0óñóðñ à×&Ò&×.Ñ.Ø×&Ò&×1Ò1Ø×'Ò'×/Ñ/Ø×'Ò'×2Ò2ð	óñ ˆ\Óñ&ó óñ&ó:@GñF ˆ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ó\Ø—,‘,ð\à�L‰Lñ\ð �‰I˜‰Oñ\ð �#‰Y˜‰_ñ	\ð
 �3‰i˜#‰oñ\ð ñ\ð ñ\ð ˜‘I ‘O dÑ*õ\ô~Qñ ˆt×%Ò%×-Ñ-Ó.ñ$$Ø—,‘,ð$$à�L‰Lð$$ð �,‰,˜Ñ
ñ$$ð —,‘, Ñ%ñ	$$ð
 —‘ Ñ$ñ$$ð ñ$$ð !&ñ$$ð ó$$ó /ñ$$ñN ˆt×Ò×'Ñ'Ó(ñ#Ø—,‘,ð#à�L‰Lð#ð �,‰,˜Ñ
ñ#ð �‰Iñ	#ð
 �#‰Yñ#ð �3‰iñ#ð ñ#ð ˜‘Iñ#ð ó#ó )ñ#ñL ˆt× Ò ×(Ñ(Ó)ð óØ—,‘,ðà�L‰Lðð �,‰,˜Ñ
ñð �‰Iñ	ð
 �#‰Yñð �3‰iñð ñð ˜‘Iñð ñð ñð ñð ñð óó *ñð8 	‡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×'Ò'Ó(ð#Ø�<‰<ñ#Ø %ñ#Ø36ñ#Ø?D¿{º{ð#à
‡\�\ó#ó )ñ#ñ ˆ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ò.Hó 4ñ.Hñb �—’×#Ñ# 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×!Ñ!Ó"òó #ññ à�	Š	×ÒØ�	Š	×ÑØ×Ò×!Ñ!Ø×Ò× Ñ Ø×Ò×!Ñ!ðóòóññ �—	’	× Ò  $§)¢)×"2Ñ"2Ð3Ó4òó 5ññ& à�	Š	×ÒØ�	Š	×ÒØ�	Š	×ÑØ�	Š	×Ñð	óô*óñ*ñ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�Š×&Ñ&Ó'ôó (ñö,ñ^ �—’× Ñ  $§(¢(§,¡,Ð/Ó0Ù˜Ôò5ó ó 1ñ5ñ �—’—’ §¢× 2Ò 2Ð3Ó4Ù˜ÔòJó ó 5ñJôôô6ô?ðp #ò-[Øñ[àñ[ð 	ñ[ð 	ñ	[ð
 	ñ[ð 	ñ[ð 	ñ[ð 	ñ[ð 	ñ[ð 	ñ[ð 	ñ[ð ñ[ð ñ[ð ñ[ð ñ[ð  ñ![ð" ñ#[ð$ ñ%[ð& ñ'[ð( ð)[ð* ñ+[ð, õ-[ô|;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Ó5Ùˆ\Óò(ó ó 6ñ(ñ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×!Ò!×)Ñ)Ó*ô&ó +ñ&ñ ˆ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ð
  $ØØØ#Øó0Øñ0à	ñ0ð ñ0ð ˜‰}ñ	0ð
 ñ0ð ñ0ð ñ0ð �4‰<ó0ó Hñ0ñf ˆt×MÒMÓNð& ô%2Øñ2àñ2ð 
ñ2ð ñ	2ð
 ñ2ð ˜$‘Zð2ð 
ñ2ð ñ2ð ñ2ð ñ2ð ñ2ð ñ2ð ñ2ð ñ2ð ñ2ð  ñ!2ð$ �4‰<ó%2ó Oñ2ñ6 à×9Ò9ðóð( ó"Øñ"àñ"ð 
ñ"ð ð	"ð
 
ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð �4‰<ó"óñ
"ñ. à×8Ò8ðóð ØØ#ØóØñà	ñð ñð ñ	ð
 ñð ˜‰}ñð �4‰<óóñ
ñ: à×AÒAðóð  $Øó!"Øñ!"àñ!"ð 
ñ!"ð ð	!"ð
 
ñ!"ð ñ!"ð ñ!"ð ñ!"ð ˜‰}ñ!"ð �4‰<ó!"óñ
!"ñH �×?Ò?Ð@ÓAð
  $ØØØ"&ØØó-Øñ-à	ñ-ð ñ-ð ˜‰}ñ	-ð
 ñ-ð ñ-ð ˜4‘-ñ-ð �4‰<ñ-ð ð-ð ˆ6�6ˆ>Ñó-ó Bñ-ñ` �×<Ò<Ð=Ó>ð ØØó))Øñ))à	ñ))ð ñ))ð ˜‰}ñ	))ð
 ñ))ð ñ))ð �4‰<ó))ó ?ñ))ñX à×=Ò=ðóð" Øó4-Øñ4-àñ4-ð 
ñ4-ð ñ	4-ð
 ˜‰}ð4-ð 
ñ4-ð ñ4-ð ñ4-ð ñ4-ð ñ4-ð ˜$‘Zñ4-ð ñ4-ð �4‰<ó4-óñ
4-ñn à×9Ò9ðóð* ó!"Øñ"àñ"ð 
ñ"ð ð	"ð
 
ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð ñ"ð  �4‰<ó!"óñ
"ñ0 à×%Ò%×-Ñ-ðóð  Ø#'Ø$(Ø#Ø"&Ø!%Ø!ó#JØñJà	ñJð ñJð ˜‰}ñ	Jð
 ˜‰}ñJð ñJð ñJð ñJð ñJð ñJð �4‰<ñJð ˜D‘jñJð ˜T‘zñJð ˜‰}ñJð ˜4‘-ñJð  ˜$‘ñ!Jð" �d‘
ó#Jóñ
JñZ �×@Ò@×HÑHÐIÓJð Ø#'Ø$(Ø#Ø"&Ø!%Ø!ò%&Ø	ñ&àñ&ð 
ñ&ð ñ	&ð
 ˜‰}ñ&ð ˜‰}ñ&ð ñ&ð ñ&ð ñ&ð ñ&ð ñ&ð �4‰<ñ&ð ˜D‘jñ&ð ˜T‘zñ&ð ˜‰}ñ&ð  ˜4‘-ñ!&ð" ˜$‘ñ#&ð$ �d‘
ó%&ó Kñ&ñR �×-Ò-×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 !%Ø(,Ø$(Ø òAYØ
�,‰,ðAYà
�,‰,ñAYð �\‰\ñAYð �\‰\ð	AYð
 �,‰,˜Ñ
ñAYð —,‘, Ñ%ðAYð �{Š{˜TÑ!ñAYð õAYñH �—’×'Ñ'Ð(Ó)ð !%Ø(,Ø$(Ø òØ
�,‰,ðà
�,‰,ñð �\‰\ñð �\‰\ð	ð
 �,‰,˜Ñ
ñð —,‘, Ñ%ðð �{Š{˜TÑ!ñð óó *ñð, !%Ø$(Ø*.Ø*.Ø ò{CØ
�,‰,ð{Cà
�,‰,ñ{Cð �%—,‘,Ññ{Cð ˜Ñ%ñ	{Cð
 �%—,‘,Ññ{Cð ˜Ñ%ð{Cð �,‰,˜Ñ
ð{Cð �{Š{˜TÑ!ñ{Cð �KÑ  4Ñ'ñ{Cð �KÑ  4Ñ'ñ{Cð õ{Cñ| �×"Ò"×*Ñ*Ð+Ó,ð !%Ø'+Ø)-Ø òØ
�,‰,ðà
�,‰,ñð �%—,‘,Ññð ˜Ñ%ñ	ð
 �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ñX �—’×%Ñ% t§~¢~×'@Ò'@ÐAÓBÙƒØ27¸uõ ó ó Cññ �—’×%Ò% t§~¢~×'@Ò'@ÐAÓBð
 Øó
Ø
ñ
àñ
ð ñ	
ð
 ó
ó Cñ
ñ �—
’
ˆ|ÓÙƒôEó ó ñEñ4 à×$Ò$×,Ñ,Ø×#Ò#×+Ñ+Ø×#Ò#×+Ñ+ðóð Øôóññ& à×-Ò-×5Ñ5Ø×,Ò,×4Ñ4ðóð Øôóññ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;   