Ë
    ÄÓ^j¥ª ã                  óŽ„  — U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlmZ d dlmZmZmZmZ d dlmZmZmZmZmZ d dlmZ d dlmZ d dlZd dlZd dlZd dl Zd dl!m"c m#Z$ d dl%m&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l0m1Z1 d dl2m3Z3 d dl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z? d dl@mAZAmBZB d dlCmDZDmEZEmFZFmGZG d dlHmIZI d dlJmKZKmLZLmMZMmNZNmOZOmPZPmQZQ ddlRmSZS ddlTmUZUmVZVmWZWmXZX ddlYmZZZm[Z[ ddlWm\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZk ddl"mlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZtmuZumvZvmwZwmxZxmyZymzZz ddl{m|Z|m}Z} erddlWm~Z~ ddlm€Z€  ed«      Z� ed«      Z‚ eId d!g«      Zƒ e�j                  e…«      Z†i Z‡d"eˆd#<   i Z‰d$eˆd%<   i ZŠd&eˆd'<    eIe�j                  �j                     «       Z�ejø                  �j                  ZŽejø                  �j                  Z�ejø                  �j                   Z� eIe�j                  �j                     «       Z‘ eIe�j                  �j                     e�j$                  �j&                  g«      Z” eIe�j                  �j                     «       Z•i Z–d(eˆd)<   ejø                  �j.                  Z—e(e)fZ˜�dŸd*„Z™	 	 	 	 �d d+„Zš�d¡d,„Z›	 	 	 	 �d¢d-„Zœ�d£d.„Z�d/„ Zž	 	 	 	 	 	 �d¤d0„ZŸ ežeŽ�j@                  eŽ�jB                  eŽ�jD                  eŽ�jF                  eŽ�jH                  eŽ�jJ                  eŽ�jL                  eŽ�jN                  eŽ�jP                  eŽ�jR                  eŽ�jT                  eŽ�jV                  eŽ�jX                  eŽ�jZ                  g«       e�j\                  e�j^                  e�j`                  e�jb                  e�jd                  e�jf                  e�jh                  e�jj                  e�jl                  e�jn                  e�jl                  e�jp                  e�jr                  d1œZº�d¥d2„Z»�d¦d3„Z¼�d§d4„Z½d5d6œ	 	 	 	 	 	 	 �d¨d7„Z¾d8„ Z¿	 	 	 	 	 	 �d©d9„ZÀ�dªd:„ZÁ	 	 	 	 	 	 	 	 	 	 	 	 �d«d;„ZÂ	 	 	 	 	 	 �d¬d<„ZÃ	 	 	 	 	 	 	 	 	 	 �d­d=„ZÄd5e:�jŠ                  d5e‡f	 	 	 �d®d>„ZÆd?„ ZÇ	 	 �d¯	 	 	 	 	 	 	 �d°d@„ZÈdA„ ZÉ�d±dB„ZÊ	 	 	 	 	 	 �d²	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 �d³dC„ZË edDe`¬E«      ZÌ	 	 �d´	 	 	 	 	 	 	 �dµdF„ZÍ	 	 	 	 	 	 	 	 	 	 �d¶dG„ZÎ	 �d·	 	 	 	 	 	 	 �d¸dI„ZÏ eÆe�j$                  �j&                  d¬J«      dK„ «       Z“ eÆe��j                   d¬J«      �d¹dL„«       ZÑd5dMœ�d¹dN„ZÒ eÆeŽ�j¦                  �j¨                  d¬J«      �d¹dO„«       ZÕd5d5dPœ�dºdQ„ZÖ eÆe��j®                  d¬J«      �d»�dºdR„«       ZØddHe:�jŠ                  d5ddd5d5df	dS„ZÙ ewdTe:�j´                  d¬U«        eÆeŽ�j¶                  dHd¬V«      �d¼dW„«       ZÜdX„ ZÝ eÝ«        	 	 �d´dY„ZÞ eÆeŽ�j¾                  d5d¬V«      dZ„ «       Zß eÆeŽ�jÀ                  d5d¬V«      d[„ «       Zà eÆeŽ�jÂ                  eŽ�jÄ                  eŽ�jÆ                  eŽ�jÈ                  e��jÊ                  g«      d\„ «       Zæ eçeŽd]«      r  eÆeŽ�jÐ                  «      eæ«        eÆeŽ�jÒ                  d¬J«      �d½d^„«       Zé eÆeŽ�jÔ                  d¬J«      �d½d_„«       Zê eÆeŽ�jÖ                  g«      �d½d`„«       Zë eÆeŽ�jØ                  «      da„ «       Zì eÆeŽ�jÚ                  «      db„ «       Zí eÆeŽ�jÜ                  «      dc„ «       Zî eÆeŽ�jÞ                  «      dd„ «       Zï eÆeŽ�jà                  �jâ                  «      de„ «       Zð eÆeŽ�jä                  «      df„ «       Zò eÆeŽ�jæ                  d¬J«      dg„ «       Zó eÆe��jè                  d¬J«      dh„ «       Zô eÆeŽ�jê                  d¬J«      di„ «       Zõ eÆeŽ�jì                  «      dj„ «       Zö eÆeŽ�jî                  d¬J«       eÆeŽ�j¦                  d¬J«       eÆeŽ�jð                  d¬J«      �d¾dk„«       «       «       ZÓ eÆeŽ�jò                  d¬J«      dl„ «       Zùdm„ Zú eÆeŽ�jö                  d¬J«      d d e
�jø                  ddHfdn„«       Zý eÆeŽ�j@                  d¬J«      	 �d½dHdoœdp„«       Z  eÆeŽ�jü                  d¬J«      �d½dq„«       Zþ eÆeŽ�jB                  d¬J«      �d½dr„«       Z¡�d¿ds„Zÿ eÆe—�j                   d¬J«      	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 �dÀdt„«       �Zdu„ �Z eÆeŽ�j                  �j                  «      dv„ «       �Z eÆeŽ�j
                  �j                  «      dw„ «       �Z eÆe—�j                  d¬J«      ddxœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 �dÁdy„«       �Z eÆe—�j                  �jâ                  d¬J«      	 	 	 	 	 	 	 	 	 	 	 	 	 	 �dÂdz„«       �Z
 eÆe—�j                  �jâ                  d¬J«      ddxœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 �dÃd{„«       �Z eÆe—�j                  �j                  d¬J«      	 	 	 	 	 	 	 	 	 	 	 	 	 	 �dÄd|„«       �Z eÆe—�j                  �j                  d¬J«      ddxœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 �dÅd}„«       �Z�dÆd~„�Z eÆeŽ�j"                  «      �d¿d„«       �Z eÆeŽ�j$                  d¬J«      �dÇ�dÈd€„«       �Z eÆeŽ�j&                  d¬J«      �dÇ�dÈd�„«       �Z eÆeŽ�j(                  d¬J«      �dÇ�dÈd‚„«       �Z eÆeŽ�j*                  d¬J«      dƒ„ «       �Z eÆeŽ�j,                  d¬J«      �d¿d„„«       �Z eÆeŽ�j.                  d¬J«      �d¿d…„«       �Z eÆeŽ�j0                  d¬J«      �d¿d†„«       �Z eÆeŽ�j2                  d¬J«      d‡„ «       �Z eÆeŽ�j4                  d¬J«      dˆ„ «       �Z eÆeŽ�j6                  d¬J«      d‰„ «       �Z�d¿dŠ„�Z eÆeŽ�j:                  «      �dÉdŒ„«       �Z�dÊd�„�Ze�j>                  dŽ„ «       �Z �d½�dËd�„�Z!�d½�dËd�„�Z"�dÊ�dÌd‘„�Z#	 	 	 	 �dÍd’„�Z$d“„ �Z% eÆejø                  �jL                  �jN                  d¬J«      d”„ «       �Z' eÆeŽ�jP                  d¬J«      d•„ «       �Z( eÆeŽ�jR                  d¬J«      d–„ «       �Z) eÆeŽ�jT                  �jV                  d¬J«      d—„ «       �Z, eÆeŽ�jZ                  «      d˜„ «       �Z- e�j\                  d«      d™„ «       �Z/dš„ �Z0 �eeŽ�jb                  �jâ                  «      �Z2 �eeŽ�jb                  �jf                  «      �Z4 �eeŽ�jj                  �jâ                  «      �Z6 �eeŽ�jj                  �jf                  «      �Z7 �e$eŽ�jp                  «        �e$eŽ�jr                  dH¬›«        �e$eŽ�jt                  dH¬›«        �e$eŽ�jv                  dH¬›«        �e$eŽ�jx                  «        �e$ejø                  �jz                  �j|                  �jâ                  «        �e$ejø                  �jz                  �j~                  �jâ                  «        �e$ejø                  �jz                  �j€                  �jâ                  «        �e$ejø                  �jz                  �j‚                  �jâ                  «        eÆeŽ�jb                  «      dœ„ «       �Z1 eÆeŽ�jj                  «      d�„ «       �Z5 eÆeV�j„                  d¬J«      dž„ «       �ZC eÆeV�jˆ                  d¬J«      �dÎdŸ„«       �ZE eÆeV�jŒ                  d¬J«      d „ «       �ZG eÆeV�j�                  d¬J«      d¡„ «       �ZI�dÎd¢„�ZJ eÆeV�j–                  d¬J«      d e�jh                  d£œ	 	 	 	 	 	 	 	 	 �dÏd¤„«       �ZL �e$eV�jš                  «        �e$eV�jœ                  «        eÆeV�jp                  d¬J«      d d¥œ	 	 	 	 	 	 	 	 	 �dÐd¦„«       �ZO�dÑd§„�ZP�dÒd¨„�ZQ�dÓd©„�ZR	 	 	 	 	 	 	 	 �dÔdª„�ZS eÆeŽ�j¨                  �jª                  d¬J«      d5d5ddd«œ	 	 	 	 	 	 	 	 	 	 	 	 	 �dÕd¬„«       �ZT eÆeŽ�j¬                  �jª                  e:�j®                  ¬J«      d5d5d­œ	 	 	 	 	 	 	 �dÖd®„«       �ZVd¯„ �ZXd°„ �ZYd±„ �ZZd²„ �Z[d³„ �Z\d´„ �Z]dµ„ �Z^d¶„ �Z_d·„ �Z` eŸeŽ�jP                  �jâ                  �e`«       d¸„ �Za �e$eŽ�jÄ                  «        �e$eŽ�jÆ                  dH¬›«        �e$eŽ�jÈ                  «        �e$eŽ�jÊ                  d5¬¹«        �e$eŽ�jÌ                  �jâ                  d5¬¹«        �e$eŽ�jÎ                  �eZ«        �e$eŽ�jÐ                  d5¬¹«        �e$eŽ�jÒ                  d5¬¹«       e�jÔ                  �j×                  «       r �e$eŽ�jØ                  d5¬¹«       e�jÚ                  �j×                  «       r �e$eŽ�jÜ                  d5¬¹«        �e$eŽ�jÞ                  «        �e$eŽ�jà                  «        �e$eŽ�jâ                  «        �e$eŽ�jä                  �jâ                  «        �e$eŽ�jæ                  �jâ                  «        �e$eŽ�jè                  «        �e$eŽ�jê                  �jì                  «        �e$eŽ�jî                  �jâ                  «        �e$eŽ�jð                  �jâ                  «        �e$eŽ�jò                  «        �e$eŽ�jô                  d5¬¹«        �e$eŽ�jö                  �eY«        �e$eŽ�jø                  �eY«        �e$eŽ�jú                  �eZ«        �e$eŽ�jü                  �eY«        �e$eŽ�jþ                  �eZ«        �e$eŽ�j                   �eZ«        �e$eŽ�j                  �eZ«        �e$eŽ�j                  «        �e$eŽ�j                  «        �e$eŽ�j                  «        �e$eŽ�j                  «        �e$eŽ�j
                  «        �e$eŽ�j                  «        �e$eŽ�j                  �eY«        �e$eŽ�j                  «        �e$eŽ�j                  «        �e$eŽ�j                  «        �e$eŽ�j                  «        �e$eŽ�j                  «        �e$eŽ�j                  «        �e$eŽ�j                  «        �e$eŽ�j                  «        �e$eŽ�j                   �eZ«        �e$eŽ�j"                  «        �e$eŽ�j$                  «        �e$eŽ�j&                  �eZ«        �e$eŽ�j(                  «        �e$eŽ�j*                  �jâ                  d5¬¹«        �e$eŽ�j,                  «        �e$eŽ�j.                  «        �e$eŽ�j0                  «        �e$eŽ�j2                  «        �e$eŽ�j4                  «        �e$eŽ�j6                  «        �e$eŽ�j8                  «        �e$eŽ�j:                  «        �e$eŽ�j<                  «        �e$eŽ�j>                  «        �e$eŽ�j@                  «        �e$eŽ�jB                  «        �e$eŽ�jD                  «        �e$eŽ�jF                  «        �e$eŽ�jH                  «        �e$eŽ�jJ                  «        �e$eŽ�jL                  «        �e$eŽ�jN                  «        �e$eŽ�jP                  «        �e$eŽ�jR                  «        �e$eŽ�jT                  �jV                  «        �e$eŽ�jX                  «        �e$eŽ�jZ                  «        �e$eŽ�j\                  «        �e$eŽ�j^                  «        �e$eŽ�j`                  «        �e$eŽ�jb                  «        �e$eŽ�jd                  «        �e$eŽ�jf                  �jâ                  «        �e$eŽ�jh                  �jâ                  d5¬¹«        �e$eŽ�jj                  �jâ                  d5¬¹«        �e$eŽ�jl                  �jâ                  d5¬¹«        �e$eŽ�jn                  �jâ                  d5¬¹«        �e$eŽ�jp                  �jâ                  d5¬¹«        �e$eŽ�jr                  �jâ                  d5¬¹«        �e$eŽ�jt                  �eY«        �e$e�jv                  �jx                  �jz                  «        �e$e�jv                  �jx                  �j|                  «        �e$e�jv                  �jx                  �j~                  «        �e$e�jv                  �jx                  �j€                  «        �e$eŽ�j‚                  �jâ                  d5¬¹«        �e$eŽ�j„                  �jâ                  d5¬¹«        �e$eŽ�j†                  «        �e$eŽ�jˆ                  «        �e$eŽ�jŠ                  �eZ«        �e$eŽ�jŒ                  «        �e$eŽ�jŽ                  «        �e$eŽ�j�                  «        �e$eŽ�j’                  «        �e$eŽ�j”                  «        �e$eŽ�j–                  �jâ                  �ead5¬¹«        �e$eŽ�j˜                  �jâ                  �ead5¬¹«        �e$eŽ�jš                  �jâ                  �ead5¬¹«        �e$eŽ�jš                  �jœ                  d5¬¹«        �e$eŽ�jž                  �jâ                  �ead5¬¹«        �e$eŽ�j                   �jâ                  �ead5¬¹«        �e$eŽ�j¢                  �jâ                  �ead5¬¹«        �e$eŽ�j¤                  �jâ                  �ead5¬¹«        �e$eŽ�j¦                  �jâ                  �ead5¬¹«        �e$eŽ�j¨                  �jâ                  �ead5¬¹«        �e$eŽ�jª                  �jâ                  �ead5¬¹«        �e$eŽ�j¬                  �jâ                  �ea«        �e$eŽ�j¬                  �jœ                  «        �e$eŽ�j®                  �jâ                  �ea«        �e$eŽ�j°                  �jâ                  �ea«        �e$eŽ�j²                  �jâ                  �ea«        �e$eŽ�j´                  «        �e$eŽ�j¶                  �jª                  dH¬›«        �e$eŽ�j¸                  �jâ                  �eZ«        eÆeŽ�jº                  d¬J«      �d»dº„«       �ZÝ eÆeŽ�j¼                  «      dd»œd¼„«       �ZÞd½„ �Zßd¾„ �Zàd¿„ �Zá eçeŽdÀ«      r  eÆeŽ�jÂ                  «      �eá«        eÆe��jÄ                  «      dÁ„ «       �Zâ eÆeŽ�jÆ                  �jÈ                  d¬J«      	 �d×ddddd5dÂœdÃ„«       �Zå eÆeŽ�jÌ                  d¬J«      �dØdÄ„«       �Zæ eÆeŽ�jÎ                  d¬J«      �dÙdÅ„«       �ZçdÆ„ �Zè eÆe�j                  eŽ�jÒ                  e��jÒ                  g«      dddd5dÇœdÈ„«       �Z eÆe�jÔ                  «      �d¯dÉ„«       �Zê eÆe�jÖ                  «      dÊ„ «       �Zì eÆeŽ�jÚ                  «      dË„ «       �Zí eÆeŽ�jÜ                  «      dÌ„ «       �Zî eÆeŽ�jÞ                  «      	 �dÚdddÍœdÎ„«       �ZïdÏ„ �ZðdÐ„ �ZñdÑ„ �Zò eÆe�jæ                  eŽ�jæ                  g«      ddddddÒœdÓ„«       �ZódÔ„ �ZôdÕ„ �Zõ  eÆeŽ�jì                  «       �eô�eó«      «      �Zö �eô �eòd«      «      �Z÷ �eô �eòd «      «      �ZødÖ„ �Zù eÆeŽ�jô                  «      ddddd×œdØ„«       �Zú eÆeŽ�jö                  «      ddddd×œdÙ„«       �Zû eÆeŽ�jø                  «      ddddd×œdÚ„«       �Zü eÆe��jú                  �jâ                  «      dÛ„ «       �Zý eÆe�jü                  eŽ�jü                  g«      dÜ„ «       �Zþ eÆeŽ�jþ                  d¬J«      �d»dÝ„«       �Zÿ eÆeŽ�j                   d¬J«      �dÛdÞ„«       �Z dß„ �Z	 �dÊdà„�Zdá„ �Z�dÊdâ„�Z eÆeŽ�j
                  d¬J«      dã„ «       �Z eÆeŽ�j                  d¬J«      dä„ «       �Z eÆeŽ�j                  d¬J«      �d»då„«       �Z eÆeŽ�j                  «      �d»dæ„«       �Zdç„ �Z	dè„ �Z
 eÆeŽ�j                  d¬J«      �d»dé„«       �Z eÆeV�j                  d¬J«      �d»dê„«       �Z�d»dë„�Z �eeŽ�j                  �jâ                  d5¬ì«      �Z �eeŽ�j                   �jâ                  d5¬ì«      �Z eÆeŽ�j                  d¬J«      dí„ «       �Z eÆeŽ�j                   d¬J«      dî„ «       �ZeËdï„ «       �Z eÆeŽ�j&                  d¬J«      �d½dð„«       �Z eÆeŽ�j(                  d¬J«      �dÜdñ„«       �ZddHdòœ	 	 	 	 	 	 	 �dÝdó„�Z eÆeŽ�j,                  d¬J«      ddôœ�dÞdõ„«       �Z eÆeŽ�j.                  d¬J«      �dÜdö„«       �Z eÆeŽ�j0                  d¬J«      �dÜd÷„«       �Z eÆeŽ�j2                  d¬J«      �dÜdø„«       �Z eÆeŽ�j4                  d¬J«      dHdùœ�dßdú„«       �Z	 	 �dà	 	 	 	 	 �dádû„�Z eÆeŽ�j8                  �jâ                  «      �d½�dâdü„«       �Z eÆeŽ�j:                  �jâ                  «      �d½�dâdý„«       �Z eÆeŽ�jV                  �jâ                  «      	 �d¯	 	 	 �dãdþ„«       Z« eÆeŽ�jX                  �jâ                  «      	 �d¯	 	 	 �dãdÿ„«       Z¬ eÆeŽ�j<                  �jâ                  «      	 	 	 �dÚ	 	 	 	 	 �dä�d „«       �Z eÆeŽ�j>                  �jâ                  «      	 	 	 �dÚ	 	 	 	 	 �dä�d„«       �Z�d„ �Z  eÆe��jB                  �jâ                  «      �d„ «       �Z!	 	 	 	 	 	 	 	 �då�d„�Z"	 	 	 	 	 	 	 	 �då�d„�Z# eÆeŽ�jH                  d¬J«      �d¿�d„«       �Z$�dæ�d„�Z%�dç�d„�Z&�dè�d	„�Z'	 �dé�d
„�Z(d�dœ�d„�Z)�d„ �Z*d�dœ�d„�Z+�d„ �Z, eÆe��jZ                  d¬J«      	 �d»�d„«       �Z-	 	 	 	 	 	 	 	 	 	 �dê�d„�Z. eÆe��j^                  d¬J«      �d„ «       �Z/�d„ �Z0 eÆeŽ�jN                  d¬J«      	 	 	 	 �dë�d„«       Z§ eÆeŽ�jP                  d¬J«      	 	 	 	 �dë�d„«       Z¨ �eeŽ�jR                  �jâ                  d5¬ì«      �Z1 eÆeŽ�jR                  d¬J«      �d„ «       Z©�dì�d„�Z2�d„ �Z3�d„ �Z4�d„ �Z5 �eeŽ�jl                  �jâ                  d5¬ì«      �Z7 eÆeŽ�jl                  «      �d„ «       �Z6 �eeŽ�jp                  �jâ                  d5¬ì«      �Z9 eÆeŽ�jp                  «      �d„ «       �Z8�d„ �Z: eÆeŽ�jv                  «      �d„ «       �Z; eÆeŽ�jx                  «      �d „ «       �Z<�d!„ �Z= eÆeŽ�j|                  �jâ                  «      	 �dí�d"„«       �Z> eÆeŽ�jD                  d¬J«      	 	 	 	 	 �dî�d#„«       Z¢ eÆeŽ�j~                  d¬J«      	 	 	 	 	 �dî�d$„«       �Z? �eeŽ�j€                  �jâ                  d5¬ì«       �eeŽ�jD                  �jâ                  d5¬ì«       �eeŽ�j~                  �jâ                  d5¬ì«      g�ZA�d%„ �ZB �eeŽ�jF                  �jâ                  d5¬ì«      �ZC eÆeŽ�jF                  d¬J«      	 �d½�d&„«       Z£ �eeŽ�jˆ                  �jâ                  d5¬ì«      �ZE eÆeŽ�jˆ                  d¬J«      	 �d½�d'„«       �ZD�d(„ �ZFd�d)œ�d*„�ZG	 �d½	 	 	 �dï�d+„�ZH	 	 	 	 �dð�d,„�ZI�d-„ �ZJ eÆeŽ�j–                  «      �dñd�d.œ�d/„«       �ZK�d0„ �ZL�d1„ �ZM�d2„ �ZN�d3„ �ZO eÆeŽ�j                   e��j                   g«      �d½dd5�d4œ�d5„«       �ZQ eÆeŽ�j¤                  «      �d½dd5�d4œ�d6„«       �ZR�d7„ �ZSeË�d8„ «       �ZT �eeŽ�jª                  �j¬                  d5¬ì«      �ZW �eeŽ�jª                  �j°                  d5¬ì«      �ZY �eeŽ�jª                  �j´                  d5¬ì«      �Z[ eÆeŽ�jª                  dH�¬9«      �d:„ «       �ZU�d»�d;„�Z\ eÆeŽ�jº                  «      �d<„ «       �Z] eÆeŽ�j¼                  d¬J«      �d»�d=„«       �Z^eË�d>„ «       �Z_eË�d?„ «       �Z`eË�d@„ «       �Za eÆeŽ�jÄ                  dH�¬9«      �d½�dA„«       �Zc eÆeŽ�jÈ                  gdH�¬9«      �dB„ «       �Zd�dò�dC„�Ze eÆe��jÄ                  gdH�¬9«      �dD„ «       �Zf eÆeŽ�jÎ                  eŽ�jÄ                  �jª                  gdHe:�j´                  ¬V«      �dE„ «       �Zb eÆeŽ�jÐ                  e��jÐ                  gdH�¬9«      �dF„ «       �Zh eÆeŽ�jÒ                  e��jÒ                  g«      �dñd�d.œ�dG„«       �Zj �eeŽ�jÖ                  �jâ                  «      �Zl �eeŽ�jÚ                  �jâ                  «      �Zn �eeŽ�jÞ                  �jâ                  «      �Zp �eeŽ�jâ                  �jâ                  «      �Zr �eeŽ�jæ                  �jâ                  «      �Zt eÆeŽ�jÖ                  «      �d¯�dH„«       �Zk eÆeŽ�jÚ                  «      �d¯�dI„«       �Zm eÆeŽ�jÞ                  «      �dJ„ «       �Zo eÆeŽ�jâ                  d¬J«      �d½�dK„«       �Zq eÆeŽ�jæ                  d¬J«      �d½�dL„«       �Zs eÆeŽ�jê                  «      �dñd�d.œ�dM„«       �Zu�dó�dN„�Zv eÆeŽ�jî                  «      �dñ�dO„«       �Zx eÆeŽ�jò                  d¬J«      �dñ�dP„«       �Zz eÆeŽ�jö                  d¬J«      �dñ�dQ„«       �Z|  eÆe��jú                  «       �eH�dR«      «         eÆeŽ�jü                  «       �eH�dS«      «      �Z  eÆeŽ�j                   «       �eH�dT«      «      �Z�  eÆeŽ�j                  «       �eH�dUe�jd                  �¬V«      «      �Zƒ  eÆeŽ�j                  «       �eH�dWe�jd                  �¬V«      «      �Z… �eH�dX«      �Z† �eH�dY«      �Z‡ �eI�dZ«      �Zˆ �eI�d[«      �Z‰ eÙeŽ�j                  dHdH�d\�¬]«      �ZŠ �eeŽ�j                  �j                  d5¬ì«      �Z� eÆeŽ�j                  �j                  d¬J«      dd‹d5�d^œ�d_„«       �ZŽ eÆeŽ�j                  �jâ                  d¬J«      �dô�d`„«       �Z‹ �eeŽ�j                  �jâ                  d5¬ì«      �Z� �eeŽ�j"                  �jâ                  d5¬ì«      �Z’ �eeŽ�j&                  �jâ                  d5¬ì«      �Z” �eeŽ�j&                  �j*                  d5¬ì«      �Z– �eeŽ�j.                  �jâ                  d5¬ì«      �Z˜ eÆeŽ�j&                  �jâ                  d¬J«      �da„ «       �Z™ eÆeŽ�j&                  �j*                  d¬J«      �d»�db„«       �Zš eÆeŽ�j.                  �jâ                  d¬J«      �dô�dc„«       �Z› eÆeŽ�j                  �jâ                  d¬J«      �dõ�dd„«       �Z� eÆeŽ�j"                  �jâ                  d¬J«      �dô�de„«       �Z‘�d¯�df„�Zœ�dö�dg„�Z� �eœeŽ�j<                  «      �Zž �e�eŽ�j>                  «      �ZŸ �eœeŽ�j@                  «      �Z  �eœeŽ�jB                  «      �Z¡ eÙeŽ�jD                  «      �Z¢ �e�eŽ�jF                  «      �Z£ �e�eŽ�jH                  «      �Z¤ eÙeŽ�jJ                  «      �Z¥ eÙeŽ�jL                  dH�¬h«      �Z¦ eÆeŽ�jN                  dH�¬9«      d�diœ�dj„«       �Z§ eÆeŽ�jP                  dH�¬9«      d�diœ�dk„«       �Z¨ eÞeŽ�jR                  �j°                  �e§dH�dl�¬m«      �Zª eÞeŽ�jV                  �j°                  �e¨dH�dl�¬m«      �Z¬ �e�eŽ�jZ                  «        �e�eŽ�j\                  «        eÙeŽ�j^                  «      �Z¯ eÙeŽ�j`                  «      �Z° eÙeŽ�jb                  «      �Z± eÙeŽ�jd                  �dn�¬o«      �Z² eÙeŽ�jf                  «      �Z³ eÙeŽ�jh                  «      �Z´ eÙeŽ�jj                  «      �Zµ �eœeŽ�jl                  «        �eœeŽ�jn                  «      �Z·  eÆeŽ�jp                  e:�j´                  ¬J«      �e·«        �eœeŽ�jr                  «        �eœeŽ�jt                  «        �eœeŽ�jv                  «        �e�eŽ�j                  «        eÙeŽ�jx                  ddHe�jp                  �¬p«      �Z¼ eÙeŽ�jz                  ddHe�jp                  �¬p«      �Z½ eÙeŽ�j|                  ddHe�jp                  �¬p«      �Z¾ eÙeŽ�j~                  ddHe�jp                  �¬p«      �Z¿ eÙeŽ�j€                  «      �ZÀ eÙeŽ�j‚                  «      �ZÁ  eÆeŽ�j„                  «      �eÀ«         eÆeŽ�j†                  «      �eÁ«        eÙeŽ�jˆ                  «      �ZÄ eÙeŽ�j^                  «      �Z¯ �eœeŽ�jŠ                  «      �ZÅ eÙeŽ�jŒ                  «        eÙeŽ�jŽ                  �dq�¬o«      �ZÇ eÙeŽ�jÜ                  «        eÆeŽ�j�                  «      �dr„ «       �ZÈ  eÆeŽ�j’                  «      �eÄ«        eÙeŽ�j”                  e�jp                  �¬V«        eÙeŽ�j–                  e�jp                  �¬V«        eÙeŽ�j˜                  e�jp                  �¬V«        eÙeŽ�jš                  e�jp                  �¬V«      �ZÍ eÙeŽ�jœ                  e�jp                  �¬V«        eÙeŽ�jž                  e�jp                  �¬V«        �eœeŽ�j                   «        �eœeŽ�j¢                  «        �eœeŽ�j¤                  «        �eœeŽ�j¦                  «        �eœeŽ�j¨                  «        �eœeŽ�jª                  «        �eœeŽ�j¬                  «        �eœeŽ�j®                  «        �eœeŽ�j°                  «        �eœeŽ�j²                  «        �eœeŽ�j´                  «        �eœeŽ�j¶                  «        �eœeŽ�j¸                  «        �eœeŽ�jº                  «        �eœeŽ�j¼                  «        �eœeŽ�j¾                  «       d�ds�là�má�Zá�mâ�Zâ �dt„ �Zã�eâD ]S  �Zä �eãeŽ�eä«      D ]  \  �Zå�Zæ�Zç eÙ�eå�eä�eæ�eç�¬u«       Œ  �eãe��eä«      D ]  \  �Zå�Zæ�Zç eÙ�eå�eä�eæ�eç�¬u«       Œ ŒU  eÞeŽ�jÐ                  �jÒ                  �eŠdH�¬h«      �Zê eÞeŽ�jÐ                  �j°                  �eŠdH�¬h«      �Zë eÞeŽ�jÐ                  �jª                  �eŠdH�¬h«        eÞeŽ�jØ                  �jÒ                  �ed«      �Zí eÞeŽ�jØ                  �jª                  �ed«        eÞeŽ�jØ                  �j°                  �ed«      �Zî eÞeŽ�jÞ                  �jÒ                  �e¦dH�¬h«        eÞeŽ�jÞ                  �j°                  �e¦dH�¬h«        eÞeŽ�jà                  �jâ                  �eÄ«        eÞeŽ�jâ                  �jâ                  �e¯«        eÞeŽ�jä                  �j°                  �eU«        eÞeŽ�jä                  �jÒ                  �eU«        eÞeŽ�jä                  �jæ                  �eU«        eÞeŽ�jè                  �jÒ                  �eb«      �Zõ eÞeŽ�jè                  �jª                  �eb«        eÞeŽ�jè                  �j°                  �eb«      �Zö eÞeŽ�jî                  �e¤«        eÞeŽ�jð                  �ež«        eÞeŽ�jò                  �jÒ                  �eÀ«        eÞeŽ�jò                  �j°                  �eÀ«        eÞeŽ�jô                  �jÒ                  �eÁ«        eÞeŽ�jô                  �j°                  �eÁ«        eÞeŽ�jö                  �jÒ                  �eÀ«        eÞeŽ�jö                  �j°                  �eÀ«        eÞeŽ�jø                  �jÒ                  �eÁ«        eÞeŽ�jø                  �j°                  �eÁ«        eÞeŽ�jú                  �eÅ«        eÞeŽ�jü                  �eÇ«        eÞeŽ�jþ                  �eÞ«        eÞeŽ�j                   �eÝ«      �Z�dv„ �Z �eeŽ�j                  �jÒ                  eŽ�jÐ                  �jÒ                  �eê«        �eeŽ�j                  �j°                  eŽ�jÐ                  �j°                  �eë«        �eeŽ�j                  �jÒ                  eŽ�jØ                  �jÒ                  �eí«        �eeŽ�j                  �j°                  eŽ�jØ                  �j°                  �eî«        �eeŽ�j
                  �jÒ                  eŽ�jè                  �jÒ                  �eõ«        �eeŽ�j
                  �j°                  eŽ�jè                  �j°                  �eö«        �eeŽ�j                  �jâ                  eŽ�j                   �jâ                  �e«        �eeŽ�j                  �j°                  eŽ�jR                  �j°                  �eª«        �eeŽ�j                  �j°                  eŽ�jV                  �j°                  �e¬«       �dw„ �Z	 �e	eŽ�j                  �eŠ«        �e	eŽ�j                  �e°«        �e	eŽ�j                  �e±«        �e	eŽ�j                  �e²«        �e	eŽ�j                  �e³«        �e	eŽ�j                  �e´«        �e	eŽ�j                   �eµ«        �e	eŽ�j"                  �ed«        �e	eŽ�j$                  �jª                  �eb«        �e	eŽ�j$                  �j&                  �ec«        �e	eŽ�j(                  �e¼«        �e	eŽ�j*                  �e½«        �e	eŽ�j,                  �e¾«        �e	eŽ�j.                  �e¿«        �e	eŽ�j0                  �e¦«        �e	eŽ�j2                  �e¢«        �e	eŽ�j4                  �e£«         eÆeŽ�j6                  «      �e°«         eÆeŽ�j8                  «      �e±«         eÆeŽ�j:                  «      �e³«         eÆeŽ�j<                  «      �e´«         eÆeŽ�j>                  «      �eµ«        �e	eŽ�j@                  eŽ�j6                  «        �e	eŽ�jB                  eŽ�j8                  «        �e	eŽ�jD                  eŽ�j:                  «        �e	eŽ�jF                  eŽ�j<                  «        �e	eŽ�jH                  eŽ�j>                  «        eÆeŽ�jJ                  «      �d¯�dx„«       �Z% eÆeŽ�jL                  �jN                  «      �dy„ «       �Z& eÆeŽ�jP                  �jN                  «      �dz„ «       �Z( eÆeŽ�jR                  «      �d{„ «       �Z)�d|„ �Z* eA�jV                  «       D ]#  \  �Z,�Z- eÆ eB�e,«      «      �e-�d}œ�d~„«       �Z.Œ%  eÆe�j^                  «      �d„ «       �Z/ eÆeŽ�jZ                  «      �d€„ «       �Z0 eÆejø                  �jb                  �jd                  «      �d�„ «       �Z3 eÆejø                  �jh                  �jj                  «      �d‚„ «       �Z5 eÆejø                  �j                  �jl                  �jn                  «      �dƒ„ «       �Z8 eçejø                  �jr                  �d„«      r; eÆejø                  �jr                  �j¼                  �jâ                  «      �d…„ «       �Z: eÆejø                  �j                  �jv                  «      dd»œ�d†„«       �Z;d �d‡�l<�m=�Z=  �e$�e=«        eÆe-«      �dˆ„ «       �Z> eÆejø                  �j~                  �j€                  d¬J«      	 	 �d÷�d‰„«       �Z@ eÆejø                  �j~                  �j‚                  d¬J«      �d»�dŠ„«       �ZA  eÆejø                  �j~                  �j„                  d¬J«       e�j†                  �eAdH�¬‹«      «        eÆejø                  �j~                  �jˆ                  d¬J«      �dø�dŒ„«       �ZD �eE«       �ZF�dù�d�„�ZGd �dŽ�lH�mI�ZI  eÆ�eId¬J«      �d�„ «       �ZJ eÆe�j$                  �j–                  d¬J«      d�d�œ�dú�d‘„«       �ZL eÆe+d¬J«      �dû�d’„«       �ZM eÆejø                  �j                   �jœ                  �jâ                  «      �d“„ «       �ZN eÆejø                  �j                   �jž                  �jâ                  «      �d”„ «       �ZO eÆejø                  �j~                  �j                   d¬J«      �d•„ «       �ZPd�d–�lQ�mR�ZR�mS�ZS  �eR«         �eS«         eÆeV�j¨                  d¬J«      �d—„ «       �ZT eÆeV�jª                  d¬J«      �d˜„ «       �ZV eÆe�j$                  �j®                  d¬J«      dHd�d™œ�dš„«       �ZXd�d›lT�mY�ZY  eS�eY«       d�dœlT�mZ�ZZ  �eZ�j¶                  «         �eZ�j¸                  «        d�d�lT�m]�Z]�m^�Z^  �e]�j¾                  «        e�jÀ                  �dü�dž„«       �Zay(ý  é    )ÚannotationsN)Údefaultdict)ÚCallableÚIterableÚMappingÚSequence)ÚAnyÚcastÚTYPE_CHECKINGÚ	TypeGuardÚTypeVar)Ú	ParamSpec)Úpatch)Úcounters)ÚSavedForBackwardsAOTOutputÚ#SavedForBackwardsNoVcCheckAOTOutput)Úassociative_scan_op)Útriton_kernel_wrapper_mutation)ÚFakeScriptObject)Úis_opaque_value)Úget_layout_constraint_tag)Úcanonicalize_dimÚcanonicalize_dimsÚcheckÚdtype_to_typeÚelementwise_dtypesÚELEMENTWISE_TYPE_PROMOTION_KINDÚget_computation_dtypeÚis_boolean_dtypeÚis_float_dtypeÚis_integer_dtypeÚNumber)Úmagic_methodsÚmethod_to_operator)Úfree_unbacked_symbolsÚhas_free_unbacked_symbolsÚresolve_unbacked_bindingsÚSymTypes)Ú
OrderedSet)ÚCeilDivÚFloorDivÚIdentityÚMaxÚMinÚModÚModularIndexingé   )Úimport_submoduleé   )ÚconfigÚinductor_primsÚirÚtest_operators)ÚdecompositionsÚget_decompositions)ÚBaseViewÚ	DtypeViewÚ
ExpandViewÚIndexingConstantÚIRNodeÚ	is_tritonÚ
MutableBoxÚOnlineSoftmaxReductionÚops_wrapperÚPermuteViewÚ	PointwiseÚ	ReductionÚSqueezeViewÚ	TensorBoxÚvalidate_irÚView)ÚceildivÚconvert_symint_to_exprÚdecode_deviceÚ
is_dynamicÚis_gpuÚis_nvidia_sm100_or_laterÚis_pointwise_useÚis_triton_fp8_dtype_supportedÚis_viewÚ,needs_fallback_due_to_atomic_add_limitationsÚpad_listlikeÚ#register_op_dtype_propagation_rulesÚ#register_op_requires_libdevice_fp64Úsympy_productÚuse_scatter_fallback)ÚopsÚV)ÚBaseConstant)ÚReductionTypeÚ_TÚ_Pztorchvision::roi_alignzaten::index_addú2dict[Callable[..., Any] | str, Callable[..., Any]]Ú	loweringsz/dict[torch._ops.OpOverload, Callable[..., Any]]Úuser_loweringsz6dict[torch._ops.OpOverload, Callable[..., Any] | None]Ú_maybe_layout_constraintsz2dict[torch._ops.OpOverload, torch._ops.OpOverload]Úinplaceable_foreach_opsc                 óÀ   — t         j                  j                  j                  D ]7  } | j                  D ]&  }|j                  dk(  r|j
                  t        v rŒ%  y Œ9 y)NÚcall_functionTF)rZ   ÚgraphÚcurrent_nodeÚusersÚopÚtargetÚforeach_ops)ÚnodeÚusers     úc/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_inductor/lowering.pyÚcur_node_has_non_foreach_usersro   •   sS   € Ü—‘×$Ñ$×*Ñ*ò ˆØ—J‘Jò 	ˆDØ—G‘G˜Ò.°D·K±KÄ;Ò4NÚñ	ðð
 ó    c                óf  — t        t        «      }d}t        | «      D ]‘  \  }}t        |t        «      sd}|f}t        |Ž  xs t        j                  }d }|D ].  }t        |t        «      sŒ|j                  j                  «       } n |€J d«       ‚|r|\  }|||f   j                  ||f«       Œ“ |S )NFTz.foreach op should have at least one tensor arg)r   ÚlistÚ	enumerateÚ
isinstancer   rM   r4   Ú#combo_kernel_foreach_dynamic_shapesrG   ÚdataÚ
get_deviceÚappend)Ú	arg_pairsÚoutÚunpack_argsÚiÚargsÚuse_foreachÚdeviceÚts           rn   Úgroup_foreach_argsr�   ¡   sÒ   € ô ”dÓ
€CØ€KÜ˜YÓ'ò 5‰ˆˆ4Ü˜$¤Ô)ØˆKØ�7ˆDä˜DÐ!Ð!ÒO¤V×%OÑ%Oð 	ð ˆØò 	ˆAÜ˜!œYÕ'ØŸ™×*Ñ*Ó,�Ùð	ð Ð!ÐSÐ#SÓSÐ!ÙØ‰GˆTØˆV�[Ð!Ñ"×)Ñ)¨1¨d¨)Õ4ð5ð  €Jrp   c                ó¤   — t        | t        j                  j                  «      syt	        | d¬«      x}rt        |«      S | t        v r	t        |    S y)zHGet layout constraints. Returns None if there are no layout constraints.NF)Úwith_default)rt   ÚtorchÚ_opsÚ
OpOverloadr   Útag_to_layout_constraintrb   )ÚfnÚmaybe_layout_tags     rn   Úmaybe_layout_constraintsrŠ   ¹   sO   € ä�bœ%Ÿ*™*×/Ñ/Ô0àä4°RÀeÔLÐLÐÐLÜ'Ð(8Ó9Ð9à	Ô&Ñ&Ü(¨Ñ,Ð,Ørp   c                ó|  — | t         j                  j                  j                  k(  rt        S | t         j                  j                  j
                  k(  rt        S | t         j                  j                  j                  k(  rt        S | t         j                  j                  j                  k(  ry t        d| › �«      ‚)NzUnknown layout constraint tag: )r„   Ú_CÚTagÚneeds_exact_stridesÚconstrain_to_fake_tensorsÚneeds_contiguous_stridesÚrequire_contiguous_stridesÚneeds_fixed_stride_orderÚconstrain_to_fx_stridesÚflexible_layoutÚAssertionError)Útags    rn   r‡   r‡   Ç   s„   € ð Œe�h‰h�l‰l×.Ñ.Ò.Ü(Ð(Ø
Œe�h‰h�l‰l×3Ñ3Ò3Ü)Ð)Ø
Œe�h‰h�l‰l×3Ñ3Ò3Ü&Ð&Ø
Œe�h‰h�l‰l×*Ñ*Ò*ØÜ
Ð:¸3¸%Ð@Ó
AÐArp   c                ó$   — | st        d|› �«      ‚y )Nzinductor does not support ©ÚNotImplementedError©ÚcondÚmsgs     rn   Ú
assert_nyir�   Õ   s   € ÙÜ!Ð$>¸s¸eÐ"DÓEÐEð rp   c                ó:  — t        | t        t        t        t        f«      r| D �cg c]  }t        |«      ‘Œ c}S t        j                  | «       t        | t        j                  j                  «      r$t        j                  | j                  «       «       y y c c}w ©N)rt   rr   ÚsetÚtupler)   Úadd_needs_realized_inputsÚneeds_realized_inputsÚaddr„   r…   ÚOpOverloadPacketÚupdateÚop_overloads)rˆ   Úxs     rn   r¢   r¢   Ú   sm   € Ü�"”tœS¤%¬Ð4Ô5Ø68Ö9°Ô)¨!Õ,Ò9Ð9Ü×Ñ˜bÔ!Ü�"”e—j‘j×1Ñ1Ô2Ü×$Ñ$ R§_¡_Ó%6Õ7ð 3ùò :s   ¥Bc                óœ   — t        | t        j                  j                  «      r| j	                  «       D ]  }|t
        |<   Œ y |t
        | <   y rŸ   )rt   r„   r…   r¥   r§   rb   )rˆ   Ú
constraintÚoverloads      rn   Úadd_layout_constraintr¬   â   sF   € ô �"”e—j‘j×1Ñ1Ô2ØŸ™Ó)ò 	=ˆHØ2<Ô% hÒ/ñ	=ð )3Ô! "Ò%rp   )r   r3   r1   é   é   é   é   é   é   é	   é
   é   é   c                ób   — t        | t        «      s| S | t        v sJ d| › d�«       ‚t        |    } | S )Nzid z missing from DTYPE_ID_LOOKUP)rt   ÚintÚDTYPE_ID_LOOKUP©Údtypes    rn   Údecode_dtyper¼     s=   € Ü�eœSÔ!ØˆØ”OÑ#ÐO s¨5¨'Ð1NÐ%OÓOÐ#ä˜EÑ"€EØ€Lrp   c                óú   — t        | t        «      r4t        | j                  «       «      xs t	        | j                  «       «      S t        | t
        j                  «      r| j                  du S t        | t        «      S ©NT)	rt   rG   r!   Ú	get_dtyper   ÚsympyÚExprÚ
is_integerr¸   ©r¨   s    rn   Úis_integer_typerÄ   "  sX   € Ü�!”YÔÜ §¡£Ó.ÒQÔ2BÀ1Ç;Á;Ã=Ó2QÐQÜ	�A”u—z‘zÔ	"Ø�|‰|˜tÐ#Ð#ä˜!œSÓ!Ð!rp   c                ót   — t        | t        «      rt        | j                  «       «      S t        | t        «      S rŸ   )rt   rG   r   r¿   ÚboolrÃ   s    rn   Úis_boolean_typerÇ   +  s*   € Ü�!”YÔÜ §¡£Ó.Ð.ä˜!œTÓ"Ð"rp   F)Úreturn_compute_dtypec                óf   — dd„}|D �cg c]
  } ||«      ‘Œ }}t        |d| iŽ\  }}|r|S |S c c}w )Nc                óÊ   — t        | t        t        j                  f«      r| S t	        | j                  «       «      }t        j                  dg|z  | j                  «       ¬«      S )Nr3   rº   )	rt   r"   rÀ   ÚBasicÚlenÚget_sizer„   Úzerosr¿   )ÚinpÚdims     rn   Úconstruct_inputz+get_promoted_dtype.<locals>.construct_input7  sG   € Ü�cœF¤E§K¡KÐ0Ô1ØˆJä�c—l‘l“nÓ%ˆCä—;‘; ˜s S™y°·±³Ô@Ð@rp   Útype_promotion_kind)rÏ   r	   Úreturnr	   )r   )rÒ   rÈ   r}   rÑ   ÚargÚinpsÚcompute_dtypeÚresult_dtypes           rn   Úget_promoted_dtyperØ   2  sP   € ó
Að -1Ö1 S‰O˜CÕ Ð1€DÐ1Ü"4Ø	ð#Ø#6ñ#Ñ€M�<ñ 1ˆ=ÐB°lÐBùò	 2s   ‰.c                ó  — t        | t        t        f«      s| g} nt        | «      } t        | «      D ]V  }t        |t        j                  j
                  «      sŒ(|j                  «       D ]  }|t        vsŒ| j                  |«       Œ ŒX | S rŸ   )	rt   rr   r¡   r„   r…   r¥   r§   r`   rx   )Úaten_fnrˆ   Úother_fns      rn   Úget_overloadsrÜ   F  sx   € Ü�g¤¤e˜}Ô-Ø�)‰ä�w“-ˆä�7‹mò -ˆÜ�bœ%Ÿ*™*×5Ñ5Õ6ØŸO™OÓ-ò -�Ø¤9Ò,Ø—N‘N 8Õ,ñ-ð-ð €Nrp   c                óÔ   — t        | t        j                  j                  «      r|| j                  v S t        | t        j                  j
                  «      r|| j                  «       v S y©NF)rt   r„   r…   r¥   Ú_qualified_op_namer†   Úname)ri   Ú	namespaces     rn   Úin_namespacerâ   U  sQ   € ô �"”e—j‘j×1Ñ1Ô2Ø˜B×1Ñ1Ð1Ð1Ü	�BœŸ
™
×-Ñ-Ô	.Ø˜BŸG™G›IÐ%Ð%Ørp   c           	     ó   — t        | j                  t        j                  «      rt	        | j                  «       «      r| S t        j                  j                  j                  | j                  «       «      }| j                  «       }|�u|j                  dk(  rf||k7  rat        |«      dk(  st        |«      dk(  rE|d   dk(  r=t        t        j                  t        j                  j!                  | |d«      «      «      S | S )zB
    Copy cpu scalar if doesn't not match with given `device`
    Úcpur   r3   F)rt   rv   r6   ÚReinterpretViewr&   rÍ   rZ   rf   ÚsizevarsÚguarding_hints_or_throwrw   ÚtyperÌ   rG   Ú
StorageBoxÚ
DeviceCopyÚcreate)r¨   r   ÚsizeÚ
cur_devices       rn   Úmaybe_copy_cpu_scalarrî   _  sÀ   € ô �a—f‘fœb×0Ñ0Ô1Ô5NØ	�
‰
‹ô6ð ˆÜ�7‰7×Ñ×3Ñ3°A·J±J³LÓA€DØ—‘“€JàÐØ�O‰O˜uÒ$Ø˜&Ò Ü�‹Y˜!Š^¤ D£	¨Q¢°4¸±7¸a²<äœŸ™¤r§}¡}×';Ñ';¸A¸zÈ5Ó'QÓRÓSÐSØ€Hrp   c           	     ó¾  ‡ ‡‡‡— t        ‰ «      D ��cg c]  \  }}t        |t        «      sŒ|‘Œ }}}‰j                  «       D ��	cg c]  \  }}	t        |	t        «      sŒ|‘Œ }
}}	|s|
s‰ ‰fS |s|�r|rt        j
                  Šnl‰ D �cg c]0  }t        |t        t        j                  f«      st        |d«      r|‘Œ2 }}|j                  d„ ‰j                  «       D «       «       t        |d|iŽŠ|r‰ |d      n‰|
d      j                  «       Š|D ]  }t        ‰ |   ‰«      ‰ |<   Œ |
D ]  }t        ‰|   ‰«      ‰|<   Œ d	ˆˆfd„}‰ D �cg c]
  } ||«      ‘Œ c}Š ‰j                  «       D ��	ci c]  \  }}	| ||	«      “Œ c}	}Š|�r1t        t!        t#        j$                  ˆ fd„|D «       ˆfd„|
D «       «      «      Ž }t!        |d   j'                  «       «      }t)        ||dt+        |«       «      D ]
  \  }}|‰ |<   Œ t)        |
|t+        |«      d «      D ]
  \  }}|‰|<   Œ t-        t+        ‰ «      «      D ]<  }t        ‰ |   t.        j0                  «      sŒ!t3        j4                  ‰ |   |«      ‰ |<   Œ> ‰D ]<  }t        ‰|   t.        j0                  «      sŒ!t3        j4                  ‰|   |«      ‰|<   Œ> ‰ ‰fS c c}}w c c}	}w c c}w c c}w c c}	}w )
zB
    Transforms arguments for broadcasting and type promotion
    r»   c              3  ó:   K  — | ]  }t        |d «      sŒ|–— Œ y­w)r»   N)Úhasattr)Ú.0Úas     rn   ú	<genexpr>z!transform_args.<locals>.<genexpr>�  s   è ø€ Ò!T¨ÄÈÈ7Õ@S¤!Ñ!Tùs   ‚”rÒ   r   c                ó¸   •— t        | t        «      rt        | ‰«      S t        | t        j                  «      r"t        j                  | j
                  ‰‰¬«      S | S )N©Úvaluer»   r   )rt   rG   Úto_dtyper6   ÚConstantr÷   )rÔ   r   r»   s    €€rn   Úpromoteztransform_args.<locals>.promote   sD   ø€ Ü˜#œyÔ)Ü  UÓ+Ð+Ü˜C¤§¡Ô-Ü—{‘{¨¯©¸%ÈÔOÐOà�
rp   c              3  ó(   •K  — | ]	  }‰|   –— Œ y ­wrŸ   © )rò   r|   r}   s     €rn   rô   z!transform_args.<locals>.<genexpr>¯  s   øè ø€ Ò3 �T˜!•WÑ3ùó   ƒc              3  ó(   •K  — | ]	  }‰|   –— Œ y ­wrŸ   rü   )rò   ÚkÚkwargss     €rn   rô   z!transform_args.<locals>.<genexpr>°  s   øè ø€ Ò7 1�V˜A•YÑ7ùrý   N)rÔ   r	   rÓ   r	   )rs   rt   rG   Úitemsr„   rÆ   r"   rÀ   rË   rñ   ÚextendÚvaluesrØ   rw   rî   Úbroadcast_tensorsrr   Ú	itertoolsÚchainrÍ   ÚziprÌ   Úranger6   rù   r<   rë   )r}   r   Ú	broadcastrÒ   Úconvert_input_to_boolr|   r¨   Úargs_indicesrÿ   ÚvÚkwargs_indicesró   Úpromoting_argsrú   Úbroadcastedrì   r   r»   s   ``              @@rn   Útransform_argsr  s  sÝ  û€ ô #,¨D£/×N™$˜!˜Q´ZÀÄ9Õ5M’AÐN€LÑNØ$*§L¡L£N×O™D˜A˜q´jÀÄIÕ6N’aÐO€NÑOá¡Ø�Vˆ|ÐáÒ3Ù Ü—J‘J‰Eð
 öàÜ˜a¤&¬%¯+©+Ð!6Ô7¼7À1ÀgÔ;Nò ðˆNð ð ×!Ñ!Ñ!T¨V¯]©]«_Ô!TÔTÜ&Øðà$7ñˆEñ &2ˆD�˜a‘Ò!°v¸nÈQÑ>OÑ7Pß
‰*‹,ð 	ð ò 	=ˆAÜ+¨D°©G°VÓ<ˆD�ŠGð	=ð  ò 	AˆAÜ-¨f°Q©i¸Ó@ˆF�1ŠIð	Aö	ð %)Ö)˜q‘˜•
Ò)ˆØ,2¯L©L«N×;¡D A q�!‘W˜Q“Z‘-Ó;ˆâÜ'ÜÜ—‘Û3 lÔ3Û7¨Ô7óóð
ˆô �K ‘N×+Ñ+Ó-Ó.ˆä˜ kÐ2E´C¸Ó4EÐ&FÓGò 	‰DˆAˆqØˆD�ŠGð	ä˜¨´C¸Ó4EÐ4GÐ(HÓIò 	‰DˆAˆqØˆF�1ŠIð	ô ”s˜4“yÓ!ò 	;ˆAÜ˜$˜q™'¤2§;¡;Õ/Ü$×+Ñ+¨D°©G°TÓ:��Q’ð	;ð ò 	?ˆAÜ˜& ™)¤R§[¡[Õ1Ü&×-Ñ-¨f°Q©i¸Ó>��q’	ð	?ð �ˆ<ÐùóI OùÛOùòùò> *ùÛ;s(   “K¬KÁK	ÁK	Â
5KÅKÅ4Kc                óÖ   ‡— t        j                  ‰«      dˆfd„«       }t        | «      }t        j	                  |«       t
        j	                  t        j                  ||«      «       |S )a¯  
    Add a foreach lowering to lowerings dict.

    Arguments:
        aten_fn: torch.ops.aten.* fn we are lowering
        decomp_fn: alternate implementation on our IR
        broadcast: True to apply broadcasting to tensor inputs
        type_promotion_kind: kind of type promotion applied to tensor inputs, `None` means no type promotion
        convert_input_to_bool: some logical ops require inputs are converted to bool
    c                 ó.   •—  ‰| i |¤Ž}t        |«       |S rŸ   )rH   )r}   r   rz   Ú	decomp_fns      €rn   Úwrappedz+_register_foreach_lowering.<locals>.wrappedÓ  s   ø€ á˜Ð( Ñ(ˆÜ�CÔØˆ
rp   )r}   r	   r   r	   rÓ   r	   )Ú	functoolsÚwrapsrÜ   rk   r¦   r`   ÚdictÚfromkeys)rÚ   r  r  Úaten_fnss    `  rn   Ú_register_foreach_loweringr  Å  sX   ø€ ô ‡_�_�YÓôó  ðô
 ˜WÓ%€HÜ×Ñ�xÔ Ü×Ñ”T—]‘] 8¨WÓ5Ô6Ø€Nrp   c                ó²   ‡ ‡‡‡‡— t        j                  ‰«      ˆ ˆˆˆˆfd„«       }t        ‰ «      Š |j                  t        j                  ‰ |«      «       |S )a¦  
    Add a lowering to lowerings dict

    Arguments:
        aten_fn: torch.ops.aten.* fn we are lowering
        decomp_fn: alternate implementation on our IR
        broadcast: True to apply broadcasting to tensor inputs
        type_promotion_kind: kind of type promotion applied to tensor inputs, `None` means no type promotion
        convert_input_to_bool: some logical ops require inputs are converted to bool
    c                 óP  •— t        | «      } t        |«      }d}t        | «      dk(  r)t        | d   t         t        f«      rd}t        | d   «      } t        d„ ‰D «       «      st        d„ |D «       «      rJ d«       ‚t        | |‰‰‰«      \  } }|r| g}  ‰| i |¤Ž}t        |«       |S )NFr3   r   Tc              3  óH   K  — | ]  }|t         v xs t        |d «      –— Œ y­w)Ú_c10d_functionalN)Ú	fallbacksrâ   )rò   rˆ   s     rn   rô   z6_register_lowering.<locals>.wrapped.<locals>.<genexpr>ü  s)   è ø€ ò 
ØJLˆR”9ˆ_ÒD¤¨RÐ1CÓ DÓDñ
ùs   ‚ "c              3  ó&   K  — | ]	  }|d k(  –— Œ y­w)rz   Nrü   ©rò   r¨   s     rn   rô   z6_register_lowering.<locals>.wrapped.<locals>.<genexpr>   s   è ø€ Ò6¨!˜1 �:Ñ6ùó   ‚zout= ops aren't yet supported)	rr   r  rÌ   rt   r¡   ÚallÚanyr  rH   )	r}   r   Úunpackedrz   rÚ   r	  r
  r  rÒ   s	       €€€€€rn   r  z#_register_lowering.<locals>.wrappedò  s¼   ø€ ä˜t›*ˆÜ!% f£ˆØˆäˆt‹9˜Š>œj¨¨a©´4¼°-Ô@ØˆHÜ˜˜Q™“=ˆDäñ 
ØPWô
ô 
ô Ñ6¨vÔ6Ô6ÐWÐ8WÓWÐ6ä%Ø�&˜)Ð%8Ð:Oó
‰ˆˆfñ Ø�6ˆDá˜Ð( Ñ(ˆÜ�CÔàˆ
rp   )r  r  rÜ   r¦   r  r  )rÚ   r  r	  rÒ   r
  Úlowering_dictr  s   `````  rn   Ú_register_loweringr'  ß  sJ   ü€ ô& ‡_�_�YÓ÷ó  ðô6 ˜GÓ$€Gà×ÑœŸ™ w°Ó8Ô9Ø€Nrp   c                ó@   — t        j                  t        | ||||¬«      S )z+
    Shim to support decorator syntax.
    )r	  rÒ   r
  r&  )r  Úpartialr'  )rÚ   r	  rÒ   r
  r&  s        rn   Úregister_loweringr*    s)   € ô ×ÑÜØØØ/Ø3Ø#ôð rp   c                ó  — t        |«      }| r| |k(  r|S g }t        j                  t        | «      t        |«      t        j
                  j                  ¬«      D �]  \  }}t        j                  j                  j                  |«      r|j                  |«       ŒBt        j                  j                  j                  |«      r|j                  |«       Œ}t        j                  j                  j                  ||«       t        t	        j                  |«      j                  «      t        t	        j                  |«      j                  «      k  r|j                  |«       �Œ|j                  |«       �Œ t        t        |«      «      S )zŸ
    Broadcasting logic based on symbolic shapes.

    We give the shapes 0 and 1 concrete values, while all other shapes
    are symbolic sympy formulas.
    )Ú	fillvalue)r¡   r  Úzip_longestÚreversedrÀ   ÚSÚOnerZ   rf   ræ   Úis_size_one_or_falserx   Úcheck_equalsrÌ   ÚexpandÚfree_symbols)ró   ÚbÚoutputr¨   Úys        rn   Úbroadcast_symbolic_shapesr8  )  s  € ô 	ˆa‹€AÙ��Q’Øˆà€FÜ×%Ñ%¤h¨q£k´8¸A³;Ì%Ï'É'Ï+É+ÔVó 
!‰ˆˆ1Ü�7‰7×Ñ×0Ñ0°Ô3Ø�M‰M˜!ÕÜ�W‰W×Ñ×2Ñ2°1Ô5Ø�M‰M˜!Õä�G‰G×Ñ×)Ñ)¨!¨QÔ/Ü”5—<‘< “?×/Ñ/Ó0´3´u·|±|ÀA³×7SÑ7SÓ3TÒTØ—‘˜aÖ à—‘˜aÖ ð
!ô ”˜&Ó!Ó"Ð"rp   c                óÆ  ‡‡	— |�	|�J d«       ‚|€|€t         j                  }t        d„ | D «       «      s| S t        d„ | D «       «      r*|xs t	        | d|iŽŠˆfd„}| D �cg c]
  } ||«      ‘Œ c}S t        d„ | D «       «      }|j                  «       Š	|t        j                  k(  r(‰	t        j                  t        j                  fv rˆ	fd„}nd„ }g }| D �]  }t        |t        t        f«      rg|j                  t        j                   t#        j$                   ||«      ‰	|j'                  «       ¬	«      t)        |j+                  «       «      «      «       Œ�t        |t,        j.                  «      rW|j                  t        j                   t1        |‰	|j'                  «       ¬
«      t)        |j+                  «       «      «      «       Œò|j                  |«       �Œ |S c c}w )NzEonly one of override_return_dtype or type_promotion_kind may be givenc              3  óf   K  — | ])  }t        |t        j                  t        t        f«      –— Œ+ y ­wrŸ   )rt   rÀ   rË   r¸   Úfloatr!  s     rn   rô   z$promote_constants.<locals>.<genexpr>O  s"   è ø€ ÒH¸AŒz˜!œeŸk™k¬3´Ð6×7ÑHùó   ‚/1c              3  óf   K  — | ])  }t        |t        t        t        j                  f«      –— Œ+ y ­wrŸ   )rt   r¸   r;  rÀ   rË   r!  s     rn   rô   z$promote_constants.<locals>.<genexpr>Q  s"   è ø€ Ò
D¸Œ:�aœ#œu¤e§k¡kÐ2×3Ñ
Dùr<  rÒ   c                ó¼   •— t        | t        j                  «      r!t        j                  | ‰t        d «      ¬«      S t        j                  | ‰t        d «      ¬«      S )N©Úindexr»   r   rö   )rt   rÀ   rË   r6   r=   rL   rù   ©r¨   r»   s    €rn   Ú
const_funcz%promote_constants.<locals>.const_funcX  sJ   ø€ Ü˜!œUŸ[™[Ô)Ü×*Ñ*Ø 5´¸tÓ1Dôð ô —{‘{¨°%ÄÈdÓ@SÔTÐTrp   c              3  ól   K  — | ],  }t        |t        t        t        j                  f«      sŒ)|–— Œ. y ­wrŸ   )rt   rG   r<   r6   rù   r!  s     rn   rô   z$promote_constants.<locals>.<genexpr>a  s$   è ø€ ÒW�A¤:¨a´)¼ZÌÏÉÐ1UÕ#VŒaÑWùs   ‚*4­4c                óN   •— t        j                  | ‰¬«      j                  «       S ©Nrº   )r„   ÚtensorÚitem)r  Útensor_dtypes    €rn   ú<lambda>z#promote_constants.<locals>.<lambda>i  s   ø€ ¤%§,¡,¨q¸Ô"E×"JÑ"JÓ"L€ rp   c                ó   — | S rŸ   rü   )r  s    rn   rI  z#promote_constants.<locals>.<lambda>k  s   €  !€ rp   rö   r?  )r   ÚDEFAULTr$  r#  rØ   Únextr¿   r„   rÆ   Úbfloat16Úfloat16rt   r¸   r;  rx   r<   rë   r6   rù   Úget_device_or_errorrr   rÍ   rÀ   rË   r=   )
ÚinputsÚoverride_return_dtyperÒ   rB  r¨   ÚexÚ_round_scalarrz   r»   rH  s
           @@rn   Úpromote_constantsrT  C  sÄ  ù€ ð
 !Ð(Ð,?Ð,Gð ØOóÐGð Ð$Ð)<Ð)DÜ=×EÑEÐäÑHÀÔHÔHØˆÜ
Ñ
D¸VÔ
DÔDØ%ò 
Ô);Øð*
ð !4ñ*
ˆô	Uð (.Ö. !‘
˜1•Ò.Ð.Ü	ÑW˜ÔWÓ	W€BØ—<‘<“>€Lð ¤§
¡
Ò*¨|Ü�‰Ü�‰ð@ñ 0ó M‰á#ˆà
€CØó ˆÜ�aœ#œu˜Ô&Ø�J‰JÜ×!Ñ!Ü—K‘KÙ+¨AÓ.Ø*Ø!×5Ñ5Ó7ôô
 ˜Ÿ™›Ó'óõ	ô ˜œ5Ÿ;™;Ô'Ø�J‰JÜ×!Ñ!Ü$Ø |¸B×<RÑ<RÓ<Tôô ˜Ÿ™›Ó'ó	õð �J‰J�qŽMð-ð0 €JùòM /s   Á Gc                óü   ‡‡‡‡— t        | |t        j                  ¬«      Š| j                  «       Š|j                  «       Šˆˆˆˆfd„}t	        j
                  | j                  «       ‰|| j                  «       ¬«      S )zBCompute a + alpha * b using FMA for CUDA floating-point precision.©rÒ   c                óà   •—  ‰| «      } ‰| «      }t        ‰t        j                  «      rt        j                  ‰‰«      }nt        j
                  ‰‰«      }t        j                  |||«      S rŸ   )rt   rÀ   rË   rY   Ú
index_exprÚconstantÚfma)ÚidxÚa_valÚb_valÚ
alpha_exprÚa_loaderÚalphaÚb_loaderr»   s       €€€€rn   Úinner_fnz%_add_with_alpha_fma.<locals>.inner_fn“  sV   ø€ Ù˜“ˆÙ˜“ˆÜ�eœUŸ[™[Ô)ÜŸ™¨¨uÓ5‰JäŸ™ e¨UÓ3ˆJÜ�w‰w�u˜j¨%Ó0Ð0rp   ©r   r»   rb  Úranges)rØ   r   rK  Úmake_loaderrD   rë   rw   rÍ   )ró   r5  r`  rb  r_  ra  r»   s     ` @@@rn   Ú_add_with_alpha_fmarf  ‰  sf   û€ äØ	Ø	Ü;×CÑCô€Eð
 �}‰}‹€HØ�}‰}‹€H÷1ô ×ÑØ�|‰|‹~ØØØ�z‰z‹|ô	ð rp   c                óv  — | €yd}| j                   D ]  }|j                  dk7  sŒd} n |sy| j                   D ]~  }|j                  dk7  rŒ|j                  j                  d«      }|€Œ1t	        j
                  |j                  d   «      }t        ||«      D ]  \  }}|| u sŒt        |t        «      sŒ  y Œ€ y)NFr6  TÚdescr   )
rh   ri   ÚmetaÚgetÚpytreeÚtree_leavesr}   r  rt   Ú&_SAVED_FOR_BACKWARDS_OUTPUT_DESC_TYPES)rl   Úhas_non_output_userrm   ÚdescsÚoutput_valuesÚoutput_valuerh  s          rn   Ú_has_saved_lowp_output_userr  ¤  sÎ   € Ø€|ØàÐØ—
‘
ò ˆØ�7‰7�hÓØ"&ÐÙðñ
 Øà—
‘
ò ˆØ�7‰7�hÒØà—	‘	—‘˜fÓ%ˆØˆ=Øä×*Ñ*¨4¯9©9°Q©<Ó8ˆÜ"% m°UÓ";ò 	ÑˆL˜$Ø˜tÒ#¬
ØÔ<õ)ò ñ		ðð rp   c           	     ó2   ‡ ‡‡‡‡‡‡— ddœdˆˆ ˆˆˆˆˆfd„}|S )zcWraps a pointwise fn and returns a function representing the pointwise in
    the define-by-run IR.N)r`  c           	     ó’  •‡‡
‡‡‡‡‡— ‰�t        d„ ‰D «       «      r	‰rJ ‚ ‰‰Ž S t        ‰‰«      Š‰r¨| �ª| dk7  r¥‰r�t        ‰d   t        «      rn‰d   j	                  «       }‰d   j                  «       j                  r>t        j                  j                  s$|�"|j                  dk(  rt        ‰d   ‰d   | «      S t        ‰«      Št        ‰d   | «      ‰d<   n| �J ‚‰D �cg c]  }|j                  «       ‘Œ c}Š‰d   j                  «       Š‰xs ‰d   j                  «       Š
‰dd  D ]`  }t        |t         j"                  «      rŒt%        ‰«      t%        |j                  «       «      k(  rŒDJ d‰› d‰› d|j                  «       › �«       ‚ t        j&                  t        j(                  fŠt*        j,                  �t/        t*        j,                  dd «      nd }|d uxr, |j0                  d uxr |j0                  j3                  d	d
«      Št4        j6                  xr ‰ xr ‰
‰v xr t9        |«      }‰xs |xr ‰
‰v Šˆ
ˆˆˆˆˆˆˆˆf	d„}‰sSd }‰D ]7  }	t;        |	j	                  «       j                  «      sŒ'|	j	                  «       } n |s‰d   j	                  «       }‰xs }t=        j>                  |‰
|‰¬«      S c c}w )Nc              3  óV   K  — | ]!  }t        |t        «      xr t        |«      –— Œ# y ­wrŸ   ©rt   r>   r?   ©rò   rÏ   s     rn   rô   z0make_pointwise.<locals>.inner.<locals>.<genexpr>Ð  s(   è ø€ ò /
Ø;>ŒJ�sœFÓ#Ò6¬	°#«Ó6ñ/
ùó   ‚')r3   r   Úcudaéÿÿÿÿzndim mismatch ú rg   Úlow_precision_pointwise_barrierFc                ó
  •	— t        | «      t        ‰«      k(  sJ d| › d‰› �«       ‚‰t        j                  k(  r‰� ‰‰D �cg c]
  } || «      ‘Œ c}Ž S g }t        ‰«      D ]e  \  }} || «      }‰|   j	                  «       }‰	r2|‰v r.t        j                  ||d¬«      }t        j                  ||«      }|j                  |«       Œg  ‰
|Ž }‰r.t        j                  |‰d¬«      }t        j                  |‰«      S |S c c}w )Nzwrong ndim r{  F)Úuse_compute_types)rÌ   r„   rÆ   rs   r¿   rY   rø   rx   )r@  ÚloadÚinputs_loadedÚ	inp_indexrz   Ú	inp_dtypeÚdowncastr»   Úemulate_output_castÚemulate_precision_castsrˆ   rP  ÚloadersÚ	low_pr_fpÚoverride_fn_when_input_boolrd  s          €€€€€€€€€rn   rb  z/make_pointwise.<locals>.inner.<locals>.inner_fn  s
  ø€ Ü�u“:¤ V£Ò,ÐL°¸E¸7À!ÀFÀ8Ð.LÓLÐ,ØœŸ
™
Ò"Ð'BÐ'NÙ2ÈWÖ4UÀT±T¸%µ[Ò4UÐVÐVà "�Ü'0°Ó'9ò .‘O�I˜tÙ˜u›+�CØ & yÑ 1× ;Ñ ;Ó =�IÙ.°9À	Ñ3IÜ#&§<¡<°°YÐRWÔ#X˜Ü!Ÿl™l¨8°YÓ?˜Ø!×(Ñ(¨Õ-ð.ñ ˜-Ð(�Ù&ô  #Ÿ|™|¨C°È%ÔP�HÜŸ<™<¨°%Ó8Ð8Ø�
ùò# 5Vs   ÁD rc  ) r$  rT  rt   r>   rw   r¿   Úis_floating_pointr„   ÚversionÚhiprè   rf  rr   Úmulre  rÍ   r6   r[   rÌ   rM  rN  rZ   rf   Úgetattrri  rj  r4   Ú(emulate_precision_casts_on_saved_tensorsrr  rN   rD   rë   )r`  rP  Ú
inp_devicer¨   Úotherrg   Útruncate_saved_outputrb  r   r|   r»   r„  r…  r†  r‡  rd  Úallow_alpharˆ   Úoverride_devicerˆ  rQ  Útriton_fallbackÚuse_fma_for_alphas    `        @@@@@@€€€€€€€rn   Úinnerzmake_pointwise.<locals>.innerÏ  sî  ÿ€ ØÐ&¬3ñ /
ØBHô/
ô ,
ñ #Ð"�?Ù" FÐ+Ð+ô # 6Ð+@ÓAˆÙØÐ  U¨a¢Zñ %¬°F¸1±I¼vÔ)FØ!'¨¡×!5Ñ!5Ó!7�Jà˜q™	×+Ñ+Ó-×?Ò?Ü %§¡× 1Ò 1Ø&Ð2Ø&ŸO™O¨vÒ5ä2°6¸!±9¸fÀQ¹iÈÓOÐOô ˜f›�ä  ¨¡¨UÓ3��r’
à�=Ð �=Ø,2Ö3 q�1—=‘=•?Ò3ˆØ˜‘×#Ñ#Ó%ˆØ%Ò>¨°©×)<Ñ)<Ó)>ˆà˜A˜B�Zò 	AˆEÜ˜e¤R§_¡_Õ5¼¸V»ÌØ—‘Ó óIó :ð Aà ˜t 1 V H¨A¨e¯n©nÓ.>Ð-?Ð@óAð ð	Aô —^‘^¤U§]¡]Ð3ˆ	ä67·g±gÐ6IŒG”A—G‘G˜^¨TÔ2Ètð 	ð  Ð$ò PØ×!Ñ!¨Ð-òPà×!Ñ!×%Ñ%Ð&GÈÓOð 	 ô ×;Ñ;ò 9Ø+Ð+ò9à˜Ð"ò9ô +¨<Ó8ð	 	ð $Ò<Ð'<ò!à�yÐ ð 	÷	ô 	ñ, ØˆFØò �ä˜!Ÿ,™,›.×-Ñ-Õ.ØŸ\™\›^�FÙð	ñ
 Ø ™×-Ñ-Ó/�ð !Ò* Fˆä×ÑØØØØô	
ð 	
ùòE 4s   Ã$K)rP  r	   rÓ   zTensorBox | _Trü   )rˆ   rQ  r“  rˆ  r’  r•  r”  r–  s   ``````` rn   Úmake_pointwiser—  Ã  s   þ€ ð #'÷ d
õ d
ðL €Lrp   Úforeach_node_t)Úboundc                ó$   ‡ ‡‡— dddœdˆˆ ˆfd„}|S )Nr3   )r`  r÷   c                óº  •‡	— t        |«      }‰dk(  r,|r*t        |d   t         t        f«      s|j                  «       Š	n
‰dk(  r|Š	n| Š	t	        t
        j                  j                  j                  «      dk(  xs6 t
        j                  j                  j                  t        v xs
 t        «       }d }|D ]  }t        |t         t        f«      sŒ|} n |€J d«       ‚g }|D ]H  }t        |t         t        f«      s|j                  |gt	        |«      z  «       Œ8|j                  |«       ŒJ t        t        |Ž «      }dˆ
ˆˆˆ	fd„}t        |t	        |«      ||«      S )Nr÷   rz  r   z1at least one input must be a list to a foreach opc                ó&   •— ‰r
 ‰| i ‰‰i¤ŽS  ‰| Ž S rŸ   rü   )r}   r’  Úpw_fnÚscalar_kwargÚ
scalar_vals    €€€€rn   Úapply_fnz7make_foreach_pointwise.<locals>.inner.<locals>.apply_fnl  s%   ø€ ÙÙ˜dÐA |°ZÐ&@ÑAÐAá˜d�|Ð#rp   )rÓ   r˜  )rr   rt   r¡   ÚpoprÌ   rZ   rf   rg   rh   rj   Úinplace_foreach_opsro   rx   r�   r  Úforeach_group_loop)r`  r÷   rP  Úrealize_outputsÚa_list_inputÚinputÚbroadcast_inputsÚgroupsr   rŸ  r’  r�  rž  s            @€€€rn   r–  z%make_foreach_pointwise.<locals>.inner@  s^  ù€ ô
 �f“ˆà˜GÒ#ÙÜ˜v b™z¬D´%¨=Ô9ð  Ÿ™›‰JØ˜WÒ$Ø‰JàˆJô ”—‘×$Ñ$×*Ñ*Ó+¨qÑ0ò 0Ü�w‰w×#Ñ#×*Ñ*Ô.AÐAò0ä-Ó/ð 	ð ˆØò 	ˆEÜ˜%¤$¬ Õ/Ø$�Ùð	ð Ð'ð 	
Ø?ó	
Ð'ð
 ÐØò 	/ˆEÜ˜e¤d¬E ]Ô3Ø ×'Ñ'¨¨´#°lÓ2CÑ(CÕDð !×'Ñ'¨Õ.ð	/ô $¤CÐ)9Ð$:Ó;ˆ÷	$ð 	$ô " &¬#¨lÓ*;¸XÀÓWÐWrp   )rP  zlist[list[TensorBox]]rÓ   úlist[foreach_node_t]rü   )r�  r’  rž  r–  s   ``` rn   Úmake_foreach_pointwiserª  ;  s   ú€ ð
 56¸Q÷ 2Xñ 2Xðh €Lrp   c                óØ  — dg|z  }| j                  «       D ]§  \  \  }}}g }|D ]v  \  }	}
 ||
«      }|||	<   t        j                  j                  |t        j
                  «      sŒB|sŒE|sŒH|j                  «        |j                  |j                  «       «       Œx |sŒ‰t        j                  j                  |«       Œ© t        d„ |D «       «      sJ ‚t        t        t           |«      S )aa  
    Common loop over grouped foreach arguments.

    Args:
        groups: Result of group_foreach_args - dict mapping (device, use_foreach) to groups
        num_outputs: Number of outputs to produce
        apply_fn: Function to apply to each set of args, returns the output
        realize_outputs: Whether to realize outputs for foreach fusion
    Nc              3  ó$   K  — | ]  }|d u–— Œ
 y ­wrŸ   rü   r!  s     rn   rô   z%foreach_group_loop.<locals>.<genexpr>˜  ó   è ø€ Ò. ˆq˜Œ}Ñ.ùó   ‚)r  rZ   rf   Úhas_featureÚBackendFeatureÚFOREACHÚrealizerx   Úget_operation_nameÚregister_operation_listr#  r
   rr   r˜  )r¨  Únum_outputsr   r¤  Úoutputsr   r~   ÚgroupÚoperation_listÚ
output_indr}   r6  s               rn   r£  r£  w  sß   € ð -1¨6°KÑ+?€GØ(.¯©«ò <Ñ$Ñˆ�˜uØ$&ˆØ %ò 
	CÑˆJ˜Ù˜d“^ˆFØ"(ˆG�JÑô —‘×#Ñ# F¬N×,BÑ,BÕCÚÚ#à—‘Ô Ø×%Ñ% f×&?Ñ&?Ó&AÕBð
	Cò Ü�G‰G×+Ñ+¨NÕ;ð<ô" Ñ. gÔ.Ô.Ð.Ð.ä””^Ñ$ gÓ.Ð.rp   Tc                ó„   ‡‡‡— | j                  «       Š‰‰k(  r|rt        | «      S | S ˆˆˆfd„} t        |‰¬«      | «      S )Nc                ó²   •— t        j                  | ‰‰‰¬«      }t        j                  t        j                  f}‰s‰|v rt        j                  |‰«      }|S )N)Ú	src_dtyper~  )rY   rø   r„   rM  rN  )r¨   Úresultr‡  r»   r¼  r~  s      €€€rn   Ú	_to_dtypezto_dtype.<locals>._to_dtype¤  sR   ø€ Ü—‘ØØØØ/ô	
ˆô —^‘^¤U§]¡]Ð3ˆ	Ù  U¨iÑ%7ô —\‘\ &¨%Ó0ˆFØˆrp   ©rQ  )r¿   Úcloner—  )r¨   r»   Úcopyr~  r¾  r¼  s    ` ` @rn   rø   rø   �  sE   ú€ ð —‘“€IØ�EÒÙŒu�Q‹xÐ& QÐ&öð BŒ>˜)¸5ÔAÀ!ÓDÐDrp   rV  c                óª  — ddl m} |}| j                  } ||t        j                  ¬«      }t        j
                  |«      5   |j                  |Ž  ddd«       |j                  }|sJ ‚t        |«      }dgt        |«      z  }	|j                  «       D ]œ  \  \  }
}}g }|D ]k  \  }}||	|<   t        j                  j                  |
t        j                  «      sŒ:|sŒ=|j                  «        |j                  |j!                  «       «       Œm |sŒ~t        j                  j#                  |«       Œž t%        d„ |	D «       «      sJ ‚|	S # 1 sw Y   ŒøxY w)aI  
    This lowers an invocation of foreach_map
    The way this works is that an arbitrary N-arg func is provided by the user, looped over by the
    polyfill with the same semantics as a foreach op (a loop applying an n-ary function to n args)
    and then traced into a subgraph by dynamo.
    This code allows us to inline the subgraph into the main graph lowering using the PontwiseSubgraphLowering.
    The graph outputs represent the vertically fused sequence of ops, and then register_operation_list
    below registers the buffers as horizontally fuseable in the scheduler.
    r3   )ÚPointwiseSubgraphLowering)Úroot_graph_loweringNc              3  ó$   K  — | ]  }|d u–— Œ
 y ­wrŸ   rü   r!  s     rn   rô   z_foreach_map.<locals>.<genexpr>ß  r­  r®  )Úsubgraph_loweringrÃ  Úgraph_modulerZ   rf   Úset_graph_handlerÚrunÚgraph_outputsr�   rÌ   r  r¯  r°  r±  r²  rx   r³  r´  r#  )Úsubgraphr}   r   rÃ  rP  ÚgmÚpw_subgraphÚsub_outputsr¨  r¶  r   r~   r·  r¸  r¹  r6  s                   rn   Ú_foreach_maprÏ  ¶  sA  € õ =à€Fà	×	Ñ	€BÙ+¨BÄAÇGÁGÔL€KÜ	
×	Ñ	˜[Ó	)ñ !Øˆ�‰˜Ñ ÷!ð ×+Ñ+€KáÐˆ;Ü Ó,€Fàˆf”s˜;Ó'Ñ'€GØ(.¯©«ò <Ñ$Ñˆ�˜uØ$&ˆð ò	Cñ 
ØØà"(ˆG�JÑä�w‰w×"Ñ" 6¬>×+AÑ+AÕBÂ{Ø—‘Ô Ø×%Ñ% f×&?Ñ&?Ó&AÕBð	Cò Ü�G‰G×+Ñ+¨NÕ;ð<ô Ñ. gÔ.Ô.Ð.Ð.Ø€N÷3!ð !ús   ÁE	Å	Ec                óÜ  — |j                   s| j                  «       j                   rk| j                  «       r/t        | |¬«      }t        j
                  j                  || «       |S  t        t        j                  j                  d¬«      | |«      S | j                  «       }t        j                  t        j                  f}t        j                  xr
 ||v xs ||v  }t!        | |d|¬«      S )Nrº   F©Úadd_to_fallback_setT)rÁ  r~  )Ú
is_complexr¿   rÍ   Ú
empty_liker6   ÚInplaceCopyFallbackrë   Úfallback_handlerÚprimsÚconvert_element_typeÚdefaultr„   rM  rN  r4   r…  rø   )r¨   r»   Údstr¼  r‡  r~  s         rn   Ú_convert_element_typerÛ  ã  sÓ   € à×Ò˜1Ÿ;™;›=×3Ò3Ø�:‰:Œ<ô ˜Q eÔ,ˆCÜ×"Ñ"×)Ñ)¨#¨qÔ1ØˆJðÔ#Ü×*Ñ*×2Ñ2Èôà�óð ð —‘“€IÜ—‘¤§¡Ð/€Iä×&Ñ&ò 	;Ø˜)Ð#Ò9 u°	Ð'9ðÐô �A�u 4Ð;LÔMÐMrp   ©rÁ  c               óJ  — | j                  «       }||k(  r|rt        | «      S | S d„ } ||«      } ||«      }||k7  rIt        j                  j	                  | «      } t        t        j                  j                  «      ||«      S t        t        j                  | |«      «      S )Nc                ó¾   — | j                   rt        j                  | «      j                  S | t        j                  k(  ryt        j
                  | «      j                  S )Nr²   )r‰  r„   ÚfinfoÚbitsrÆ   Úiinforº   s    rn   Ú_get_primitive_bitwidthz1to_dtype_bitcast.<locals>._get_primitive_bitwidthþ  sD   € Ø×"Ò"Ü—;‘;˜uÓ%×*Ñ*Ð*Ø”e—j‘jÒ àä—;‘;˜uÓ%×*Ñ*Ð*rp   )r¿   rÀ  r6   ÚExternKernelr‘   rÖ  ÚatenÚviewr»   rG   r;   rë   )r¨   r»   rÁ  Úx_dtyperâ  Úsrc_bitsÚdst_bitsÚx_conts           rn   Úto_dtype_bitcastrê  ù  s’   € Ø�k‰k‹m€GØ�%ÒÙŒu�Q‹xÐ& QÐ&ò+ñ ' wÓ/€HÙ& uÓ-€HØ�8Òä—‘×;Ñ;¸AÓ>ˆØ0Ô¤§	¡	§¡Ó0°¸Ó?Ð?äœ×)Ñ)¨!¨UÓ3Ó4Ð4rp   c                ó&  — |j                   s| j                  «       j                   r`t        j                  t        j
                  j                  t        j                  j                  j                  j                  | |«      «      S t        | |«      S rŸ   )rÓ  r¿   rG   rë   r6   ÚComplexViewr„   rY   rä  rå  r»   rê  rA  s     rn   Ú_view_dtyperí    se   € à×Ò˜1Ÿ;™;›=×3Ò3Ü×ÑÜ�N‰N×!Ñ!¤%§)¡)§.¡.×"5Ñ"5×";Ñ";¸QÀÓFó
ð 	
ô ˜A˜uÓ%Ð%rp   ©rÁ  Únon_blockingc               óÄ   — t        |«      }| j                  «       |k(  r|rt        | «      S | S t        j                  t
        j                  j	                  | ||«      «      S rŸ   )rL   rw   rÀ  rG   rë   r6   rê   )r¨   r   rÁ  rï  s       rn   Ú	to_devicerñ    sO   € Ü˜6Ó"€FØ‡|�|ƒ~˜ÒÙŒu�Q‹xÐ& QÐ&Ü×ÑœBŸM™M×0Ñ0°°F¸LÓIÓJÐJrp   c                ó    — t        | |d|¬«      S )NTrî  )rñ  )r¨   r   rï  s      rn   Ú_device_putró  !  s   € ä�Q˜ T¸ÔEÐErp   c
                ó   — |xs | j                   }t        |«      }
t        |||«       |�t        |«      }t        |
|||||	¬«      }
 t	        | |||¬«      |
«      }
t        t        |«      r" t	        t        t        |«      d|¬«      |
«       |
S )z3A pointwise function that maps ops.{name} to inputsN)rQ  rˆ  r’  r•  r”  )r	  rÒ   r
  )rÒ   r
  )Ú__name__rB   rU   r—  r*  rñ   r×  r�  )rÚ   rà   r	  rÒ   r
  rQ  rˆ  r’  r•  r”  rˆ   s              rn   Úregister_pointwiserö  &  s¾   € ð Ò#�7×#Ñ#€DÜ	�TÓ	€Bä'ØÐ!Ð#8ôð #Ð.Ü&1Ð2MÓ&NÐ#ä	Ø
Ø3Ø$?ØØ+Ø'ô
€Bð
Ô	ØØØ/Ø3ô	
ð
 	ó

€Bô Œu�dÔð	
ÔÜ”E˜4Ó Ø $Ø"7ô	
ð ô		ð
 €Irp   Úldexp)rÒ   rQ  )r	  rÒ   c                óZ  ‡‡	— t        d«      Š| j                  «       }|j                  «       }|j                  }|j                   xr |t        j                  k7  }|r|rˆfd„} t        |«      | |«      S t        | «      rt        j                  n|Š	ˆ	fd„} t        |‰	¬«      | |«      S )Nr÷  c                ó   •—  ‰| |«      S rŸ   rü   )r¨   ÚnÚldexp_fns     €rn   Úcompute_ldexpz%ldexp_lowering.<locals>.compute_ldexph  s   ø€ Ù˜A˜q“>Ð!rp   c                ó´   •— t        j                  |‰«      }t        j                  d‰«      }t        j                  ||«      }t        j                  | |«      S )Ng       @)rY   rø   rY  ÚpowrŒ  )r¨   rú  Ú
n_out_typeÚtwoÚ
pow_resultÚ	out_dtypes        €rn   Úcompute_fallbackz(ldexp_lowering.<locals>.compute_fallbackp  sD   ø€ ÜŸ™ a¨Ó3ˆJÜ—,‘,˜s IÓ.ˆCÜŸ™  jÓ1ˆJÜ—7‘7˜1˜jÓ)Ð)rp   r¿  )rB   r¿   r‰  r„   rÆ   r—  rÄ   Úfloat32)
r¨   rú  ræ  Ún_dtypeÚ
x_is_floatÚn_is_intrü  r  rû  r  s
           @@rn   Úldexp_loweringr  \  s¦   ù€ ä˜7Ó#€Hà�k‰k‹m€GØ�k‰k‹m€Gà×*Ñ*€JØ×,Ñ,Ð,ÒF°¼E¿J¹JÑ1F€Há‘hô	"ð -Œ~˜mÓ,¨Q°Ó2Ð2ô &5°QÔ%7”E—M’M¸Wˆ	ô	*ð
Œ~ØØ"+ô
ð ˆQóð 	rp   c                 ó.  ‡‡— d} t        d«      Šˆfd„}ˆfd„}t        |«      t        |t        j                  ¬«      gŠˆfd„} t	        t
        j                  «      |«      }t        t        | «      r! t	        t        t        | «      d¬«      |«       |S )z2A pointwise function that maps ops.frexp to inputsÚfrexpc                 ó   •—  ‰| i |¤Žd   S ©Nr   rü   ©r}   r   r
  s     €rn   Úfrexp0zregister_frexp.<locals>.frexp0�  ó   ø€ Ù�dÐ%˜fÑ% aÑ(Ð(rp   c                 ó   •—  ‰| i |¤Žd   S ©Nr3   rü   r  s     €rn   Úfrexp1zregister_frexp.<locals>.frexp1„  r  rp   r¿  c                 ó0   •—  ‰d   | i |¤Ž ‰d   | i |¤ŽfS ©Nr   r3   rü   )r}   r   Úpw_fnss     €rn   rˆ   zregister_frexp.<locals>.fnŒ  s.   ø€ Øˆv�a‰y˜$Ð) &Ñ)¨9¨6°!©9°dÐ+E¸fÑ+EÐEÐErp   NrV  )
rB   r—  r„   Úint32r*  rä  r
  rñ   r×  r�  )rà   r  r  rˆ   r
  r  s       @@rn   Úregister_frexpr  |  s–   ù€ à€DÜ˜Ó €Eô)ô)ô 	�vÓÜ�v´U·[±[ÔAð€Fô
Fð
Ô	Ü�
‰
ó
àó

€Bô Œu�dÔð	
ÔÜ”E˜4Ó Ø $ô	
ð ô	ð €Irp   c                ó:   — t        |||¬«      }t        | |«      }|S )N©r’  rž  )rª  r  )rÚ   Úpointwise_lowering_fnr’  rž  rˆ   s        rn   Úregister_foreach_pointwiser  ž  s(   € ô 
 Ø¨;À\ô
€Bô 
$ G¨RÓ	0€BØ€Irp   c           
     ó  — d„ }t        |t        t        f«      r t        |«      |«      }t        |t        t        f«      r t        |«      |«      }| ||g}t	        |d   |d   t
        j                  ¬«      }t        |«      D ��cg c]  \  }}t        |t        «      sŒ|‘Œ }}}t        |t        |D �cg c]  }||   ‘Œ	 c}Ž «      D ]
  \  }}|||<   Œ t        t        |«      «      D ]Y  }t        ||   t        j                  «      sŒ!t        j                   ||   t#        ||d      j%                  «       «      «      ||<   Œ[  t'        ||¬«      |d   t)        |d   |«      t)        |d   |«      «      S c c}}w c c}w )Nc                 ó&   — t        j                  | Ž S rŸ   )rY   Úwhere©r}   s    rn   rˆ   zwhere.<locals>.fn­  s   € Ü�y‰y˜$ÐÐrp   r3   r1   rV  r   r¿  )rt   r;  r¸   Úconstant_likerØ   r   rK  rs   rG   r  r  r  rÌ   r6   rù   r<   rë   rr   rÍ   r—  rø   )	r›   ró   r5  rˆ   r}   r»   r|   r¨   Úindicess	            rn   r  r  «  so  € ò ô �!”eœS�\Ô"ØŒM˜!Ó˜QÓˆÜ�!”eœS�\Ô"ØŒM˜!Ó˜QÓˆà�!�Qˆ<€DÜØˆQ‰��a‘Ô.M×.UÑ.Uô€Eô ' t›_×I‘T�Q˜´
¸1¼iÕ0HŠqÐI€GÑIÜ�GÔ.À'Ö0J¸Q°°a³Ò0JÐKÓLò ‰ˆˆ1ØˆˆQŠðä”3�t“9Óò TˆÜ�d˜1‘gœrŸ{™{Õ+Ü ×'Ñ'¨¨Q©´°d¸7À1¹:Ñ6F×6OÑ6OÓ6QÓ1RÓSˆD�ŠGðTð ;Œ>˜"°EÔ:ØˆQ‰”˜$˜q™' 5Ó)¬8°D¸±G¸UÓ+Cóð ùó JùÚ0Js   ÂE9Â E9Â6E?c                 ó¢  — t        | «      dk(  r&t        | d   t        t        f«      rt	        | d   Ž S | S t        j                  t        d„ | D «       d«      }g }| D ]q  }t        |j                  «       «      x}|k(  rn?t        |«      t        |«      k7  st        d„ t        ||«      D «       «      rt        ||«      }|j                  |«       Œs |S )Nr3   r   c              3  ó<   K  — | ]  }|j                  «       –— Œ y ­wrŸ   )rÍ   r!  s     rn   rô   z$broadcast_tensors.<locals>.<genexpr>Ë  s   è ø€ Ò#A°Q A§J¡J§LÑ#Aùó   ‚rü   c              3  óÈ   K  — | ]Z  \  }}t         j                  j                  j                  |«      t         j                  j                  j                  |«      k7  –— Œ\ y ­wrŸ   )rZ   rf   ræ   r1  ©rò   ró   r5  s      rn   rô   z$broadcast_tensors.<locals>.<genexpr>Ò  sP   è ø€ ò .
ñ ��1ô �G‰G×Ñ×1Ñ1°!Ó4Ü�w‰w×Ñ×4Ñ4°QÓ7õ8ñ.
ùs   ‚A A")rÌ   rt   rr   r¡   r  r  Úreducer8  rÍ   r$  r  r3  rx   )rP  rj   r¶  r¨   Úsizess        rn   r  r  Ä  sÐ   € ä
ˆ6ƒ{�aÒÜ�f˜Q‘i¤$¬ Ô/Ü$ f¨Q¡iÐ0Ð0ØˆÜ(×/Ñ/Ü!Ñ#A¸&Ô#AÀ2ó €Fð €GØò 
ˆÜ˜1Ÿ:™:›<Ó(Ð(ˆE¨VÒ3Øä�‹Zœ3˜v›;Ò&¬#ñ .
ô ˜E 6Ó*ô.
ô +
ô
 �q˜&Ó!ˆAØ�‰�qÕð
ð €Nrp   c                ó   — | S rŸ   rü   rÃ   s    rn   Únopr*  Ü  s   € à€Hrp   Ú
lift_freshc                óà  — t        | t        «      sJ ‚|€(t        t        j                  | j                  «      «      S t        |t
        t        j                  f«      r)t        j                  j                  j                  |«      nt        d„ |D «       «      }t        t        | j                  «       «      |«      }t!        t        |t        «      s|fn|«      }g }t#        | j                  «       «      D ]X  \  }}||v r>t        j                  j                  j%                  t        j&                  |d«      «      rŒH|j)                  |«       ŒZ || j                  «       k7  rt+        | |«      S | S )Nc              3  ón   K  — | ]-  }t         j                  j                  j                  |«      –— Œ/ y ­wrŸ   )rZ   rf   ræ   Ú	guard_int©rò   Úds     rn   rô   zsqueeze.<locals>.<genexpr>î  s%   è ø€ Ò>°Q”1—7‘7×#Ñ#×-Ñ-¨a×0Ñ>ùs   ‚35r3   )rt   rG   rF   rë   rv   r¸   rÀ   rÁ   rZ   rf   ræ   r.  r¡   r   rÌ   rÍ   r)   rs   Úguard_or_falseÚEqrx   rå  )r¨   rÐ   ÚdimsÚ	new_shaper0  Úss         rn   Úsqueezer6  å  s  € ä�aœÔ#Ð#Ð#Ø
€{Üœ×+Ñ+¨A¯F©FÓ3Ó4Ð4ô �cœC¤§¡Ð,Ô-ô 	
�‰×Ñ×"Ñ" 3Ô'äÑ>¸#Ô>Ó>ð ô
 œC §
¡
£Ó-¨sÓ
3€CÜ¤J¨s´EÔ$:�s‘fÀÓD€Dà€IÜ˜!Ÿ*™*›,Ó'ò  ‰ˆˆ1Ø�T‘	œaŸg™g×.Ñ.×=Ñ=¼e¿h¹hÀqÈ!»nÕMØ×Ñ˜QÕð ð
 "+¨a¯j©j«lÒ!:Œ4��9ÓÐAÀÐArp   c                ó,   — t        t        | |«      «      S rŸ   )rÀ  r6  )r¨   rÐ   s     rn   Úsqueeze_copyr8  ü  s   € ä”˜˜C“Ó!Ð!rp   c                óˆ   — t        | |«      }t        | t        «      sJ ‚t        |t        «      sJ ‚|j                  | _        | S rŸ   )r6  rt   rG   rv   ©r¨   rÐ   Úvals      rn   Úsqueeze_r<    s=   € ä
�!�S‹/€CÜ�aœÔ#Ð#Ð#Ü�cœ9Ô%Ð%Ð%Ø�X‰X€A„FØ€Hrp   c                ó¨   — t        | «      rt        | dt        j                  ¬«      S t	        d«      } t        |t        j                  ¬«      | «      S )NFrº   Úisinfr¿  ©rÄ   Ú	full_liker„   rÆ   rB   r—  ©r¨   rˆ   s     rn   r>  r>  
  ó?   € ä�qÔÜ˜˜E¬¯©Ô4Ð4Ü	�WÓ	€BØ?Œ>˜"´E·J±JÔ?ÀÓBÐBrp   c                ó¨   — t        | «      rt        | dt        j                  ¬«      S t	        d«      } t        |t        j                  ¬«      | «      S )NFrº   Úisnanr¿  r?  rA  s     rn   rD  rD    rB  rp   c                óf   — t        | «      rt        | «      S t        d«      } t        |«      | «      S )NÚceil©rÄ   rÀ  rB   r—  rA  s     rn   rF  rF    s/   € ä�qÔÜ�Q‹xˆÜ	�VÓ	€BØŒ>˜"Ó˜aÓ Ð rp   c                óf   — t        | «      rt        | «      S t        d«      } t        |«      | «      S )NÚfloorrG  rA  s     rn   rI  rI  "  ó/   € ä�qÔÜ�Q‹xˆÜ	�WÓ	€BØŒ>˜"Ó˜aÓ Ð rp   c                óf   — t        | «      rt        | «      S t        d«      } t        |«      | «      S )NÚroundrG  rA  s     rn   rL  rL  *  s/   € ä�qÔÜ�Q‹xˆä˜Ó!ˆØ!Œ~˜bÓ! !Ó$Ð$rp   c                óf   — t        | «      rt        | «      S t        d«      } t        |«      | «      S )NÚtruncrG  rA  s     rn   rN  rN  3  rJ  rp   c                ó<  — t        | g«      \  } t        | t        j                  «      rt	        j
                  | t        |«      «      S t        | t        «      sJ ‚t        |t        t        f«      sJ ‚t        | j                  «       «      t        |«      k(  r| S t        | j                  «       «      sºt        j                  j                  j                  t        | j                  «       «      «      }|dkD  rut        |«      sj| j!                  t        j                  j                  j                  t        |«      «      |z  t"        j$                  xs t'        j(                  «       ¬«       t        t	        j
                  | j*                  t        |«      «      «      S )Nr   )Úgraph_reuse)rT  rt   r6   r[   r<   rë   r¡   rG   rr   rÍ   r%   rZ   rf   ræ   Úguarding_hint_or_throwrW   Ú
mark_reuser4   Údeterministicr„   Ú$are_deterministic_algorithms_enabledrv   )r¨   r(  Úx_size_products      rn   r3  r3  ;  s2  € ä˜a˜SÓ!�D€QÜ�!”R—_‘_Ô%Ü× Ñ  ¤E¨%£LÓ1Ð1Ü�aœÔ#Ð#Ð#Ü�eœd¤E˜]Ô+Ð+Ð+ÜˆQ�Z‰Z‹\Óœe E›lÒ*Øˆä  §¡£Ô.ÜŸ™×)Ñ)×@Ñ@Ü˜!Ÿ*™*›,Ó'ó
ˆð ˜AÒÔ&;¸EÔ&Bð
 �L‰LÜ—‘× Ñ ×7Ñ7¼ÀeÓ8LÓMØ!ñ"ä"×0Ñ0ò @Ü×=Ñ=Ó?ð	 ô ô ”Z×&Ñ& q§v¡v¬u°U«|Ó<Ó=Ð=rp   c                ó–   — t        |«      }|D ]  }d||<   Œ	 | }t        |«      D ]  \  }}|dk7  sŒt        ||«      }Œ t        ||«      S ©Nrz  )rr   rs   Ú	unsqueezer3  )ró   ÚshapeÚbroadcast_dimensionsr5  Úbroadcast_dimensionr  r[  r¨   s           rn   Úbroadcast_in_dimr\  [  sf   € äˆU‹€AØ3ò $ÐØ!#ˆÐ
Òð$ð 	
€AÜ˜A“,ò "‰ˆˆQØ�‹7Ü˜!˜SÓ!‰Að"ô �!�UÓÐrp   c                ó6   — t        | |j                  «       «      S rŸ   )r3  rÍ   )r¨   r7  s     rn   Ú	expand_asr^  i  s   € ä�!�Q—Z‘Z“\Ó"Ð"rp   c                ój  ‡‡‡— t        | j                  «       «      Št        ‰«      t        ‰«      kD  rKt        j                  j
                  gt        ‰«      t        ‰«      z
  z  ‰z   Št        | t        ‰«      «      } t        ‰«      t        | j                  «       «      k(  sJ ‚t        | j                  «       «      }d}t        t        ‰«      «      D ]  }‰|   dk(  rd}||   ‰|   z  ||<   Œ |r*t        || j                  «       | j                  «       ¬«      S t        d„ t        ‰‰«      D «       «      rt        t        | |«      «      S ˆˆˆfd„}t        ‰«      s†t        |«      s{t         j"                  j$                  j'                  t)        ‰«      «      }|dkD  rD| j+                  t         j"                  j$                  j'                  t)        |«      «      |z  «       | j-                  «       Št/        j0                  | j                  «       | j                  «       |t        |«      ¬«      S )NFr   T©r»   r   c              3  ó:   K  — | ]  \  }}|d k(  xs |d k(  –— Œ y­w©r3   Nrü   r&  s      rn   rô   zrepeat.<locals>.<genexpr>€  s$   è ø€ Ò
A¡$ ! QˆA�‰FÒ�a˜1‘fÓÑ
Aùó   ‚c                ó  •— t        | «      t        ‰«      k(  sJ ‚t        | «      } t        t        ‰«      «      D ]G  }‰|   dk7  sŒ‰|   dk(  rt        j                  j
                  | |<   Œ2t        | |   d‰|   «      | |<   ŒI  ‰| «      S r  )rÌ   rr   r  rÀ   r/  ÚZeror0   )r@  r|   Úold_sizeÚrepeatsÚx_loaders     €€€rn   rb  zrepeat.<locals>.inner_fn…  sŠ   ø€ Ü�5‹zœS ›\Ò)Ð)Ð)Ü�U“ˆÜ”s˜7“|Ó$ò 	IˆAØ�q‰z˜Q‹Ø˜A‘; !Ò#Ü$Ÿw™wŸ|™|�E˜!’Hä.¨u°Q©x¸¸HÀQ¹KÓH�E˜!’Hð	Iñ ˜‹Ðrp   rc  )rr   rÍ   rÌ   rÀ   r/  r0  rå  r  Úemptyr¿   rw   r#  r  rÀ  r3  r%   rZ   rf   ræ   rQ  rW   rR  re  rD   rë   )	r¨   rg  Únew_sizeÚzero_tensorr|   rb  Úold_size_productrf  rh  s	    `     @@rn   Úrepeatrm  n  sÃ  ú€ ä�A—J‘J“LÓ!€HÜ
ˆ7ƒ|”c˜(“mÒ#Ü—G‘G—K‘K�=¤C¨£L´3°x³=Ñ$@ÑAÀHÑLˆÜ�”D˜“NÓ#ˆÜˆw‹<œ3˜qŸz™z›|Ó,Ò,Ð,Ð,ä�A—J‘J“LÓ!€Hà€KÜ”3�w“<Ó ò /ˆØ�1‰:˜Š?ØˆKØ˜q‘k G¨A¡JÑ.ˆ�Šð/ñ
 Ü�X Q§[¡[£]¸1¿<¹<»>ÔJÐJÜ
Ñ
A¬#¨g°xÓ*@Ô
AÔAÜ”V˜A˜xÓ(Ó)Ð)ö	ô ! Ô*Ô3HÈÔ3RÜŸ7™7×+Ñ+×BÑBÜ˜(Ó#ó
Ðð ˜aÒð �L‰LÜ—‘× Ñ ×7Ñ7¼ÀhÓ8OÓPØ#ñ$ôð
 �}‰}‹€HÜ×ÑØ�|‰|‹~Ø�k‰k‹mØÜ�H‹~ô	ð rp   c                óT   — t        t        j                  | j                  |«      «      S rŸ   )rG   rI   rë   rv   )r¨   r(  s     rn   rå  rå  ¦  s   € ô ”T—[‘[ §¡¨Ó/Ó0Ð0rp   c                óº   — t        | t        «      sJ ‚t        |t        t        f«      sJ ‚t        t	        j
                  | j                  t        |«      «      «      S rŸ   )rt   rG   rr   r¡   rC   rë   rv   )r¨   r3  s     rn   Úpermuterp  ­  sF   € ä�aœÔ#Ð#Ð#Ü�dœT¤5˜MÔ*Ð*Ð*Ü”[×'Ñ'¨¯©´°d³Ó<Ó=Ð=rp   c                óh  — ddl m}m} t        j                  j
                  } |t        j                  j                  j                  |�|j                  j                  di «      ni «      }d\  }	}
|r½t        |«      dk  sJ |«       ‚|j                  «       D ]7  \  }}| |d«      t        j                  | «      fk(  r|}	Œ)| |d«      fk(  sŒ6|}
Œ9 |	�\t        j                  |	||||«      }t        j                  j!                  |«      |_        t        j                  j%                  |«       |	|
fS )ad  Register DynamicSliceSize for any unbacked size bindings on the current FX node.

    Unbacked symbols may have been allocated at trace time of the slice
    that inductor must define so the assertion
    new_unbacked_defs >= renamed_unbacked_bindings passes in run_node.

    Returns (sym_size, sym_storage) parsed from the bindings, or (None, None).
    r   )ÚCallMethodKeyr'   Úunbacked_bindings©NNr1   rì   Ústorage_offset)Ú%torch.fx.experimental.symbolic_shapesrr  r'   rZ   rf   rg   ræ   Ú	shape_envri  rj  rÌ   r  rk  ÚSequenceKeyr6   ÚDynamicSliceSizeÚregister_bufferrà   Úregister_operation)rÐ   ÚstartÚendÚsteprì   rr  r'   rg   Únode_unbacked_bindingsÚsym_sizeÚsym_storageÚsymÚkeypathÚb_sizes                 rn   Ú&_register_unbacked_slice_size_bindingsr…  ¶  s*  € ÷ô —7‘7×'Ñ'€LÙ6Ü	�‰×Ñ×"Ñ"àÐ#ð 	×Ñ×ÑÐ1°2Ô6àó	Ðð 'Ñ€HˆkÙÜÐ)Ó*¨aÒ/ÐGÐ1GÓGÐ/Ø2×8Ñ8Ó:ò 	"‰LˆC�Ø™=¨Ó0´&×2DÑ2DÀSÓ2IÐJÒJØ‘Ø™]Ð+;Ó<Ð>Ó>Ø!‘ð		"ð
 ÐÜ×(Ñ(¨°5¸#¸tÀTÓJˆFÜŸ'™'×1Ñ1°&Ó9ˆFŒKÜ�G‰G×&Ñ& vÔ.ð �[Ð Ð rp   c           
     ó  — t        | t        «      sJ ‚t        | |d«      }| j                  «       |   }t	        j
                  |«      }t        |t        j                  «      s|dkD  sJ |«       ‚	 |dk(  rLt        j                  j                  j                  ||«      r"|dk(  rt        |||||«      \  }}|�J d«       ‚| S dd„}	d\  }
}|}|r[ |	||d«      }
|�;t        j                  j                  j                  |t        j                  «      r|}n
 |	|||«      }|
�|�|
|}}d}|sSt        |||||«      \  }}|�J d«       ‚t        t         j"                  j%                  | j&                  |||||¬«      «      S |sJ ‚|
�|�J ‚t        ||||| j                  «       |   «      \  }}|€J ‚| j)                  «       €| j+                  «        |
�6|�J ‚| j-                  «       j.                  |
| j1                  «       |   z  z   }nšt!        j2                  ||| j-                  «       j.                  | j1                  «       |   | j                  «       |   d	¬«      }t        j                  j5                  |«      |_        t        j                  j9                  |«       |}t;        | j                  «       «      }t;        | j1                  «       «      }|||<   ||xx   |z  cc<   t=        | |||d¬
«      S # t        $ r Y �Œ@w xY w)a	  
    Lowers a slice call, creating ExternKernels for the output size & storage offset symbols,
    if the indices are unbacked and appropriate semantics aren't known.
    If they are known (indices are static/backed/unbacked with info), a SliceView is created.
    r   r3   z:Unexpected storage_offset unbacked binding for no-op slicec           	     ó¤  — | €|S d„ }t        j                  | «      } t        j                  |«      } |t        j                  t        j                  | d«      t        j                  | |«      «      «      r| S  |t        j                  t        j
                  | d«      t        j                  | | «      «      «      r| |z   S  |t        j                  | |«      «      r|S  |t        j
                  | | «      «      ry |t        j                  | d«      «      rt        | |«      S  |t        j
                  | d«      «      rt        | |z   d«      S y )Nc                óT   — t         j                  j                  j                  | «      S rŸ   )rZ   rf   ræ   r1  rÃ   s    rn   rI  z5slice_.<locals>.compute_slice_index.<locals>.<lambda>  s   € ”q—w‘w×'Ñ'×6Ñ6°qÓ9€ rp   r   )	rÀ   r3  ÚAndÚGeÚLeÚLtÚGtr.   r-   )r@  rì   rÙ  rˆ   s       rn   Úcompute_slice_indexz#slice_.<locals>.compute_slice_indexÿ  s  € Øˆ=ØˆNá9ˆÜ—‘˜UÓ#ˆÜ�|‰|˜DÓ!ˆÙŒe�i‰iœŸ™ ¨Ó*¬E¯H©H°U¸DÓ,AÓBÔCØˆLÙ”—	‘	œ%Ÿ(™( 5¨!Ó,¬e¯h©h°u¸t¸eÓ.DÓEÔFØ˜4‘<ÐÙ”—‘˜ Ó%Ô&ØˆKÙ”—‘˜  Ó&Ô'ØÙ”—‘˜ Ó"Ô#ä�u˜dÓ#Ð#Ù”—‘˜ Ó"Ô#ä�u˜t‘| QÓ'Ð'Ørp   rt  FzWUnexpected storage_offset unbacked binding when both start and end indices are resolved©ÚclampT©Ú(storage_offset_relative_to_input_storagerŸ   )rt   rG   Ú_validate_dimrÍ   rÀ   r3  rÁ   rZ   rf   ræ   Ústatically_known_leqr…  Ú	TypeErrorÚstatically_known_equalsÚsysÚmaxsizer6   Ú	SliceViewrë   rv   Úmaybe_get_layoutr²  Ú
get_layoutÚoffsetÚ
get_strideÚDynamicSelectStorageOffsetrz  rà   r{  rr   Ú
as_strided)r¨   rÐ   r|  r}  r~  r�  rì   Ú_r�  rŽ  Ústart_indexÚ	end_indexÚambiguous_slicer€  Únew_storage_offsetÚ	b_storageÚ	new_sizesÚnew_stridess                     rn   Úslice_r¨  ß  s'  € ô �aœÔ#Ð#Ð#Ü
˜˜3 Ó
"€CØ�:‰:‹<˜Ñ€DÜ�<‰<˜Ó€DÜ�dœEŸJ™JÔ'¨4°!ª8Ð9°TÓ9Ð3ðà�QŠJÜ—‘× Ñ ×5Ñ5°d¸CÔ@Ø˜’	äCØ�U˜C  tó‰NˆAˆ{ð Ð&ð ØLóÐ&ð ˆHó
ð. (Ñ€K�ð
 €OÙÙ)¨%°°qÓ9ˆð ˆ?œqŸw™w×/Ñ/×GÑGØ”—‘ô 
ð ‰Iá+¨C°°tÓ<ˆIØÐ" yÐ'<Ø$ i�3ˆEØ#ˆOáÜ?Ø�˜˜T 4ó
‰ˆˆ;ð Ð"ð 	
ð1ó	
Ð"ô
 Ü�L‰L×Ñ §¡¨¨U°C¸ÀUÐÓKó
ð 	
ñ
 €Lˆ5ØÐ )Ð"3Ð3Ð3ÜBØˆU�C˜˜qŸz™z›|¨CÑ0óÑ€Hˆkð ÐÐÐà×ÑÓÐ#à	�	‰	ŒàÐàÐ"Ð"Ð"ØŸ\™\›^×2Ñ2°[À1Ç<Á<Ã>ÐRUÑCVÑ5VÑVÑä×1Ñ1ØØØ�L‰L‹N×!Ñ!Ø�L‰L‹N˜3ÑØ�J‰J‹L˜ÑØô
ˆ	ô Ÿ™×0Ñ0°Ó;ˆ	ŒÜ	�‰×"Ñ" 9Ô-Ø(Ðä�Q—Z‘Z“\Ó"€IÜ�q—|‘|“~Ó&€KØ€Iˆc�NØ�Ó˜ÑÓÜØ	ØØØØ16ôð øô{ ò Úðús   Á/AK4 Ë4	LÌ Lr‘  c               óˆ  — |d uxr |}d }d }t        | t        «      r†t        | j                  t        j                  «      rb| j                  «       }| j                  }|€*| j                  «       �| j                  «       j                  }| j                  j                  «       } | j                  «        t        j                  | «      st        d| › d�«      ‚t        j                  | «      \  }}	|�t        |«      nd}t        |t        j                   «      r|j                  n|}
|rht        |
t        j"                  «      rNt%        j&                  |t(        j*                  j,                  j/                  |
j1                  «       d«      z
  «      }t        j2                  |r|n|	j4                  |r|n|	j                  |D �cg c]  }t%        j&                  |«      ‘Œ c}|D �cg c]  }t%        j&                  |«      ‘Œ c}t%        j&                  |«      «      }t        t        j6                  ||¬«      «      S c c}w c c}w )Nzunrealized as_strided(z, ...)r   ©rv   Úlayout)rt   rG   rv   r6   r:   rw   r»   rš  r›  rœ  Úunwrap_viewr²  Úis_storage_and_layoutr™   Úas_storage_and_layoutrK   ré   ÚInputBufferrÀ   r3  rZ   rf   Úgraph_input_storage_offsetsrj  Úget_nameÚFixedLayoutr   rå   )r¨   rì   Ústrideru  r’  Úexplicit_storage_offsetÚ
new_deviceÚ	new_dtypeÚstorageÚ
old_layoutÚstorage_datar5  Ú
new_layouts                rn   rŸ  rŸ  a  sÌ  € ð 	˜dÐ"ÒOÐ'Oð ð €JØ€IÜ�!”YÔ¤J¨q¯v©v´r·{±{Ô$Cð —\‘\“^ˆ
Ø—G‘Gˆ	ØÐ! a×&8Ñ&8Ó&:Ð&FØŸ\™\›^×2Ñ2ˆNØ�F‰F×ÑÓ ˆØ‡I�I„KÜ×#Ñ# AÔ&Ü!Ð$:¸1¸#¸VÐ"DÓEÐEÜ×2Ñ2°1Ó5Ñ€GˆZà2@Ð2LÔ˜~Ô.ÐRSð ô $.¨g´r·}±}Ô#E�7—<’<È7€LÙ¤:¨l¼B¿N¹NÔ#Kô Ÿ™ØÜ�g‰g×1Ñ1×5Ñ5°l×6KÑ6KÓ6MÈqÓQñRó
ˆô —‘Ù ‰
 j×&7Ñ&7Ù‰	 J×$4Ñ$4Ø"&Ö'˜QŒ�‰�a�Ò'Ø"(Ö)˜QŒ�‰�a�Ò)Ü�‰�^Ó$ó€Jô ”R×'Ñ'¨W¸ZÔHÓIÐIùò	 	(ùÚ)s   ÇH:Ç#H?c                ód   — t        | t        «      sJ ‚t        | |||«      j                  | _        | S rŸ   )rt   rG   rŸ  rv   )r¨   rì   r³  ru  s       rn   Úas_strided_r¼  •  s/   € ä�aœÔ#Ð#Ð#Ü˜˜4 ¨Ó8×=Ñ=€A„FØ€Hrp   c                ó4   — t        | |||«      }t        |«      S rŸ   )rŸ  rÀ  )r¨   rì   r³  ru  r½  s        rn   Úas_strided_copyr¾  œ  s   € ä˜˜4 ¨Ó8€FÜ�‹=Ðrp   c                ó˜  ‡ ‡‡‡— g Šd}‰ D ]1  }‰j                  |||j                  «       ‰   z   f«       ‰d   d   }Œ3 ‰ D �cg c]  }|j                  «       ‘Œ c}Šˆˆ ˆˆfd„}t        ‰ d   j                  «       «      }‰d   d   |‰<   t	        j
                  ‰ d   j                  «       ‰ d   j                  «       ||¬«      S c c}w )Nr   rz  c           	     ó�  •‡
‡— t        j                  | ‰   t        j                  «      }g }g }t	        t        ‰«      «      D �]?  Š
‰
dk(  r$t        j                  dt        j                  «      n)t        j                  ‰‰
   d   t        j                  «      }t        j                  ‰‰
   d   t        j                  «      }t        j                  ||«      }t        j                  ||«      }‰
dk(  r|}n*‰
t        ‰«      dz
  k(  r|}nt        j                  ||«      }|j                  |«       t        | «      Št        ‰‰   ‰‰
   d   z
  «      ‰‰<   |j                  t        j                  |ˆ
ˆˆfd„d«      «       �ŒB |d   }	t	        t        ‰«      dz
  dd«      D ]  Š
t        j                  |‰
   |‰
   |	«      }	Œ! |	S )Nr   r3   c                 ó   •—  ‰‰    ‰«      S rŸ   rü   )r|   Úidx_loadÚinputs_loaderss   €€€rn   rI  z1pointwise_cat.<locals>.inner_fn.<locals>.<lambda>Î  s   ø€ Ð-˜N¨1Ñ-¨hÓ7€ rp   ç        rz  r1   )rY   rX  r„   Úint64r  rÌ   rY  ÚgeÚltÚand_rx   rr   r,   Úmaskedr  )r[  Úidx_dimÚmasksÚmasked_loadsr|  r}  Ú
start_condÚend_condÚmaskÚnext_valr|   rÂ  rÐ   rP  rÃ  Úinputs_rangess             @@€€€€rn   rb  zpointwise_cat.<locals>.inner_fn¬  s›  ú€ Ü—.‘.  S¡¬5¯;©;Ó7ˆàˆØˆÜ”s˜6“{Ó#ó  	ˆAð ˜’6ô —‘˜Q¤§¡Ô,ä—^‘^ M°!Ñ$4°QÑ$7¼¿¹ÓEð ô
 —.‘. ¨qÑ!1°!Ñ!4´e·k±kÓBˆCäŸ™ ¨Ó/ˆJÜ—v‘v˜g sÓ+ˆHØ�AŠvØ‘Ø”c˜&“k A‘oÒ%Ø!‘ä—x‘x 
¨HÓ5�à�L‰L˜ÔÜ˜C“yˆHô % X¨c¡]°]À1Ñ5EÀaÑ5HÑ%HÓIˆH�S‰Mà×ÑÜ—
‘
ØÝ7Øóöð5 	ðD   Ñ#ˆÜœ˜F› qÑ(¨"¨bÓ1ò 	ˆAÜ—y‘yØ�a‘Ø˜Q‘Øó‰Hð	ð ˆrp   rc  )rx   rÍ   re  rr   rD   rë   rw   r¿   )rP  rÐ   Úprev_endrÏ   rb  rj  rÃ  rÑ  s   ``    @@rn   Úpointwise_catrÓ  ¢  sØ   û€ à9;€MØ€HØò )ˆØ×Ñ˜h¨°3·<±<³>À#Ñ3FÑ(FÐGÔHØ  Ñ$ RÑ(‰ð)ð 4:Ö:¨C�c—o‘oÕ'Ò:€N÷.ô` �F˜1‘I×&Ñ&Ó(Ó)€HØ! "Ñ% bÑ)€HˆS�Mä×ÑØ�a‰y×#Ñ#Ó%Ø�Q‰i×!Ñ!Ó#ØØô	ð ùòk ;s   ÁCc           	     óæ  ‡‡‡‡‡‡‡‡	‡
— t        ‰j                  «       «      dk(  sJ d«       ‚t        ‰j                  «       «      dk(  sJ d«       ‚| j                  «       t        j                  k(  rt        | t        j                  «      } | j                  «       t        j                  k(  sJ d| j                  «       › �«       ‚‰t        | j                  «       «      k  s!J dt        | j                  «       «      › �«       ‚| j                  «       Š‰j                  «       Š	‰j                  «       Š
ˆˆˆˆˆˆˆ	ˆˆ
f	d„}t        j                  | j                  «       ‰|| j                  «       ¬«      S )Nr3   úexpect scales 1 dimúexpect zero_points 1 dimú<Expecting input to have dtype torch.float32, but got dtype: úExpecting axis to be < c                ób  •	— | ‰
   f} ‰| «      } ‰|«      } ‰|«      }t        ‰‰t        j                  ¬«      \  }}‰j                  t        j                  k7  r$t	        j
                  |t        j                  «      }‰j                  t        j                  k7  r$t	        j
                  |t        j                  «      }t	        j                  |«      }t	        j                  ||z  «      |z   }t	        j                  |t	        j                  ||«      «      }	t	        j
                  |	‰«      S rE  )Ú_create_constantsr„   r  r»   rY   rø   r  Ú
reciprocalrL  ÚmaximumÚminimum)r[  Úchannel_idxr¦  ÚscaleÚ
zero_pointÚqminÚqmaxÚ	inv_scaler;  ÚclampedÚaxisr»   Úinput_loaderÚ	quant_maxÚ	quant_minÚscalesÚscales_loaderÚzero_pointsÚzero_points_loaders             €€€€€€€€€rn   rb  z;quantized_decomposed_quantize_per_channel.<locals>.inner_fn  sÞ   ø€ Ø˜4‘y�lˆá˜SÓ!ˆÙ˜kÓ*ˆÙ'¨Ó4ˆ
Ü& y°)Ä5Ç=Á=ÔQ‰
ˆˆdà�<‰<œ5Ÿ=™=Ò(Ü—L‘L ¬¯©Ó6ˆEØ×Ñ¤§¡Ò+ÜŸ™ j´%·+±+Ó>ˆJÜ—N‘N 5Ó)ˆ	Ü�i‰i˜ 	Ñ)Ó*¨ZÑ7ˆÜ—+‘+˜d¤C§K¡K°°cÓ$:Ó;ˆÜ�|‰|˜G UÓ+Ð+rp   rc  )rÌ   rÍ   r¿   r„   rM  rø   r  re  rD   rë   rw   )r¦  ré  rë  rå  rè  rç  r»   rb  ræ  rê  rì  s    `````` @@@rn   Ú)quantized_decomposed_quantize_per_channelrí  ç  s?  ÿø€ ô ˆv�‰Ó Ó! QÒ&Ð=Ð(=Ó=Ð&Üˆ{×#Ñ#Ó%Ó&¨!Ò+ÐGÐ-GÓGÐ+à‡�ÓœEŸN™NÒ*Ü˜¤§¡Ó.ˆØ�?‰?Ó¤§¡Ò-ð Ø
FÀuÇÁÓGXÐFYÐZóÐ-ð ”#�e—n‘nÓ&Ó'Ò'ð Ø
!¤# e§n¡nÓ&6Ó"7Ð!8Ð9óÐ'ð ×$Ñ$Ó&€LØ×&Ñ&Ó(€MØ$×0Ñ0Ó2Ð÷,ô ,ô" ×ÑØ×ÑÓ!ØØØ�~‰~Óô	ð rp   c           	     ó"  ‡ ‡— ‰ j                  «        t        ‰ t        j                  «      Š ˆ ˆfd„}t	        j
                  ‰ j                  «       ‰ j                  «       |t        ‰ j                  «       «      ¬«      }|j                  «        |S )Nc                óÀ   •— t         j                  j                  «       5  t        j                   ‰j                  «       | «      ‰«      cd d d «       S # 1 sw Y   y xY wrŸ   )r6   ÚComputedBufferÚforce_realizerY   Údevice_assert_asyncre  )r@  r›   rœ   s    €€rn   rb  z_assert_async.<locals>.inner_fn  sO   ø€ Ü×Ñ×,Ñ,Ó.ñ 	KÜ×*Ñ*Ð+=¨4×+;Ñ+;Ó+=¸eÓ+DÀcÓJ÷	K÷ 	Kò 	Kús    *AÁArc  )
r²  rø   r„   rÆ   rD   rë   rw   r¿   rr   rÍ   )r›   rœ   rb  Úassertion_ops   ``  rn   Ú_assert_asyncrô    sm   ù€ Ø‡L�L„NÜ�Dœ%Ÿ*™*Ó%€DõKô ×#Ñ#Ø�‰Ó Ø�n‰nÓØÜ�D—M‘M“OÓ$ô	€Lð ×ÑÔØÐrp   c                ó   — t        | |«      S rŸ   ©rô  rš   s     rn   Úlower_assert_asyncr÷  ,  ó   € ä˜˜sÓ#Ð#rp   c                ó   — t        | |«      S rŸ   rö  rš   s     rn   Úlower_assert_functional_asyncrú  1  rø  rp   )r  c               óv  ‡‡‡‡‡	‡
‡— t        ‰j                  «       «      dk(  sJ d«       ‚t        ‰j                  «       «      dk(  sJ d«       ‚| j                  «       |k(  sJ d|› d| j                  «       › �«       ‚‰t        | j                  «       «      k  s!J dt        | j                  «       «      › �«       ‚‰€t        j                  Š| j                  «       Š	‰j                  «       Š
‰j                  «       Šˆˆ	ˆˆˆ
ˆˆfd„}t        j                  | j                  «       ‰|| j                  «       ¬«      S )	Nr3   rÕ  rÖ  úExpecting input to have dtype ú, but got dtype: rØ  c                óê  •— | ‰   f} ‰| «      } ‰
|«      } ‰|«      }‰	j                   t        j                  k7  r$t        j                  |t        j                  «      }‰j                   t        j                  k7  r$t        j                  |t        j                  «      }t        j
                  t        j                  |t        j                  «      |«      |z  }t        j                  |‰«      }|S rŸ   )r»   r„   r  rY   rø   Úsub)r[  rÞ  r¦  rß  rà  r;  rå  ræ  r  ré  rê  rë  rì  s         €€€€€€€rn   rb  z=quantized_decomposed_dequantize_per_channel.<locals>.inner_fnT  s¯   ø€ Ø˜4‘y�lˆá˜SÓ!ˆÙ˜kÓ*ˆÙ'¨Ó4ˆ
à�<‰<œ5Ÿ=™=Ò(Ü—L‘L ¬¯©Ó6ˆEØ×Ñ¤§¡Ò-ÜŸ™ j´%·-±-Ó@ˆJÜ�g‰g”c—l‘l 5¬%¯-©-Ó8¸*ÓEÈÑMˆÜ�l‰l˜3 	Ó*ˆØˆ
rp   rc  ©	rÌ   rÍ   r¿   r„   r  re  rD   rë   rw   )r¦  ré  rë  rå  rè  rç  r»   r  rb  ræ  rê  rì  s    ```   ` @@@rn   Ú+quantized_decomposed_dequantize_per_channelr  6  s-  þ€ ô ˆv�‰Ó Ó! QÒ&Ð=Ð(=Ó=Ð&Üˆ{×#Ñ#Ó%Ó&¨!Ò+ÐGÐ-GÓGÐ+Ø�?‰?Ó Ò%ð Ø
(¨¨Ð/@ÀÇÁÓARÐ@SÐTóÐ%ð ”#�e—n‘nÓ&Ó'Ò'ð Ø
!¤# e§n¡nÓ&6Ó"7Ð!8Ð9óÐ'ð ÐÜ—M‘Mˆ	à×$Ñ$Ó&€LØ×&Ñ&Ó(€MØ$×0Ñ0Ó2Ð÷ò ô ×ÑØ×ÑÓ!ØØØ�~‰~Óô	ð rp   c                óÜ  ‡‡‡‡— | j                  «       t        j                  k(  rt        | t        j                  «      } | j                  «       t        j                  k(  sJ d| j                  «       › �«       ‚| j                  «       Šˆˆˆˆfd„}t        j                  | j                  «       ‰t        j                  |t        |«      t        |«      ¬«      | j                  «       ¬«      S )Nr×  c                óL  •—  ‰
| «      }t        d|z  |t        j                  ¬«      \  }}t        j                  ||z  «      |z   }t        ‰‰t        j                  ¬«      \  }}t        j
                  t        j                  ||«      |«      }t        j                  |‰	«      S )Nç      ð?rº   )rÚ  r„   r  rY   rL  rÝ  rÜ  rø   )r[  rß  rà  r¦  rã  r;  rá  râ  rä  r»   ræ  rç  rè  s            €€€€rn   rb  zBquantized_decomposed_quantize_per_tensor_default.<locals>.inner_fn~  s‡   ø€ Ù˜SÓ!ˆÜ 1Ø�%‰K˜¬5¯=©=ô!
Ñˆ	�:ô �i‰i˜ 	Ñ)Ó*¨ZÑ7ˆÜ& y°)Ä5Ç=Á=ÔQ‰
ˆˆdÜ—+‘+œcŸk™k¨#¨tÓ4°dÓ;ˆÜ�|‰|˜G UÓ+Ð+rp   ©rß  rà  rc  )r¿   r„   rM  rø   r  re  rD   rë   rw   r  r)  r;  r¸   rÍ   )r¦  rß  rà  rè  rç  r»   rb  ræ  s      ``` @rn   Ú0quantized_decomposed_quantize_per_tensor_defaultr  k  s¼   û€ ð ‡�ÓœEŸN™NÒ*Ü˜¤§¡Ó.ˆØ�?‰?Ó¤§¡Ò-ð Ø
FÀuÇÁÓGXÐFYÐZóÐ-ð ×$Ñ$Ó&€L÷,ô ×ÑØ×ÑÓ!ØÜ×"Ñ"ØœE %›L´S¸³_ô
ð �~‰~Óôð rp   c               ól  ‡‡— | j                  «       |k(  sJ d|› d| j                  «       › �«       ‚‰€t        j                  Š| j                  «       Šˆˆfd„}t	        j
                  | j                  «       ‰t        j                  |t        |«      t        |«      ¬«      | j                  «       ¬«      S )Nrü  rý  c                óø   •—  ‰| «      }t        ||t        j                  ¬«      \  }}t        j                  t        j
                  |t        j                  «      |«      |z  }t        j
                  |‰«      }|S rE  )rÚ  r„   r  rY   rÿ  rø   )r[  rß  rà  r¦  r;  ræ  r  s        €€rn   rb  zDquantized_decomposed_dequantize_per_tensor_default.<locals>.inner_fn¨  s]   ø€ Ù˜SÓ!ˆÜ-¨e°ZÄuÇ}Á}ÔUÑˆˆzÜ�g‰g”c—l‘l 5¬%¯-©-Ó8¸*ÓEÈÑMˆÜ�l‰l˜3 	Ó*ˆØˆ
rp   r  rc  )r¿   r„   r  re  rD   rë   rw   r  r)  r;  r¸   rÍ   )	r¦  rß  rà  rè  rç  r»   r  rb  ræ  s	         ` @rn   Ú2quantized_decomposed_dequantize_per_tensor_defaultr	  ’  s«   ù€ ð �?‰?Ó Ò%ð Ø
(¨¨Ð/@ÀÇÁÓARÐ@SÐTóÐ%ð ÐÜ—M‘Mˆ	à×$Ñ$Ó&€Lõô ×ÑØ×ÑÓ!ØÜ×"Ñ"ØœE %›L´S¸³_ô
ð �~‰~Óôð rp   c           	     óT  ‡‡‡‡‡‡‡‡	‡
— | j                  «       t        j                  k(  rt        | t        j                  «      } | j                  «       t        j                  k(  sJ d| j                  «       › �«       ‚t        ‰j                  «       «      dk(  s9t        ‰j                  «       «      dk(  r‰j                  «       d   dk(  sJ d«       ‚t        ‰j                  «       «      dk(  s9t        ‰j                  «       «      dk(  r‰j                  «       d   dk(  sJ d«       ‚| j                  «       Š‰j                  «       Š	‰j                  «       Š
| j                  «       Šˆˆˆˆˆˆˆ	ˆˆ
f	d„}t        j                  | j                  «       ‰|| j                  «       ¬«      S )Nr×  r   r3   úexpect scale as scalar tensorú"expect zero_point as scalar tensorc                ól  •	—  ‰
| «      } ‰t        ‰j                  «       «      dk(  rdnd«      } ‰t        ‰j                  «       «      dk(  rdnd«      }‰j                  t        j                  k7  r$t        j                  |t        j                  «      }‰j                  t        j                  k7  r$t        j                  |t        j                  «      }‰rO‰j                  dk(  r@t        j                  |t        j                  |«      |«      }t        j                  |‰	«      S t        j                  |t        j                  |«      z  «      |z   }t        ‰‰t        j                  ¬«      \  }}t        j                  t        j                  ||«      |«      }t        j                  |‰	«      S )Nr3   ©r   rü   rä   rº   )rÌ   rÍ   r»   r„   r  rY   rø   rè   rZ  rÛ  Úround_to_intrL  rÚ  rÝ  rÜ  )r[  r¦  Ú_scaleÚ_zero_pointr;  rá  râ  rä  r   r»   ræ  rç  rè  rß  Úscale_loaderrà  Úzero_point_loaders           €€€€€€€€€rn   rb  zAquantized_decomposed_quantize_per_tensor_tensor.<locals>.inner_fnÖ  s5  ø€ Ù˜SÓ!ˆÙ¤c¨%¯.©.Ó*:Ó&;¸qÒ&@™dÀbÓIˆÙ'´°E·N±NÓ4DÓ0EÈÒ0J©ÐPRÓSˆØ�;‰;œ%Ÿ-™-Ò'Ü—\‘\ &¬%¯-©-Ó8ˆFØ×ÑœuŸ}™}Ò,ÜŸ,™, {´E·M±MÓBˆKÙ�f—k‘k UÒ*Ü—'‘'˜%¤§¡°Ó!7¸ÓEˆCÜ×#Ñ# C¨Ó/Ð/Ü�i‰i˜¤§¡¨vÓ 6Ñ6Ó7¸+ÑEˆÜ& y°)Ä5Ç=Á=ÔQ‰
ˆˆdÜ—+‘+œcŸk™k¨#¨tÓ4°dÓ;ˆÜ�|‰|˜G UÓ+Ð+rp   rc  )r¿   r„   rM  rø   r  rÌ   rÍ   re  rw   rD   rë   )r¦  rß  rà  rè  rç  r»   rb  r   ræ  r  r  s    ````` @@@@rn   Ú/quantized_decomposed_quantize_per_tensor_tensorr  ¹  su  ÿø€ ð ‡�ÓœEŸN™NÒ*Ü˜¤§¡Ó.ˆØ�?‰?Ó¤§¡Ò-ð Ø
FÀuÇÁÓGXÐFYÐZóÐ-ô ˆu�~‰~ÓÓ  AÒ%ÜˆE�N‰NÓÓ Ò" u§~¡~Ó'7¸Ñ':¸aÒ'?ð'à&ó'ð ô ˆz×"Ñ"Ó$Ó%¨Ò*ÜˆJ×ÑÓ!Ó" aÒ'¨J×,?Ñ,?Ó,AÀ!Ñ,DÈÒ,Ið,à+ó,ð ð ×$Ñ$Ó&€LØ×$Ñ$Ó&€LØ"×.Ñ.Ó0Ðà×ÑÓ€F÷,ô ,ô  ×ÑØ×ÑÓ!ØØØ�~‰~Óô	ð rp   c               óÀ  ‡‡‡‡‡	‡
— t        ‰j                  «       «      dk(  s9t        ‰j                  «       «      dk(  r‰j                  «       d   dk(  sJ d«       ‚t        ‰j                  «       «      dk(  s9t        ‰j                  «       «      dk(  r‰j                  «       d   dk(  sJ d«       ‚| j                  «       |k(  sJ d|› d| j                  «       › �«       ‚‰€t        j                  Š| j                  «       Š‰j                  «       Š	‰j                  «       Š
ˆˆˆˆ	ˆˆ
fd„}t        j                  | j                  «       ‰|| j                  «       ¬«      S )	Nr   r3   r  r  rü  rý  c                óV  •—  ‰| «      } ‰t        ‰j                  «       «      dk(  rdnd«      } ‰
t        ‰j                  «       «      dk(  rdnd«      }‰j                  t        j                  k7  r$t        j                  |t        j                  «      }‰	j                  t        j                  k7  r$t        j                  |t        j                  «      }t        j                  t        j                  |t        j                  «      |«      |z  }t        j                  |‰«      }|S )Nr3   r  rü   )rÌ   rÍ   r»   r„   r  rY   rø   rÿ  )r[  r¦  r  r  r;  ræ  r  rß  r  rà  r  s        €€€€€€rn   rb  zCquantized_decomposed_dequantize_per_tensor_tensor.<locals>.inner_fn  sÏ   ø€ Ù˜SÓ!ˆÙ¤c¨%¯.©.Ó*:Ó&;¸qÒ&@™dÀbÓIˆÙ'´°E·N±NÓ4DÓ0EÈÒ0J©ÐPRÓSˆØ�;‰;œ%Ÿ-™-Ò'Ü—\‘\ &¬%¯-©-Ó8ˆFØ×ÑœuŸ}™}Ò,ÜŸ,™, {´E·M±MÓBˆKÜ�g‰g”c—l‘l 5¬%¯-©-Ó8¸+ÓFÈÑOˆÜ�l‰l˜3 	Ó*ˆØˆ
rp   rc  r   )r¦  rß  rà  rè  rç  r»   r  rb  ræ  r  r  s    ``   ` @@@rn   Ú1quantized_decomposed_dequantize_per_tensor_tensorr  î  sU  ý€ ô ˆu�~‰~ÓÓ  AÒ%ÜˆE�N‰NÓÓ Ò" u§~¡~Ó'7¸Ñ':¸aÒ'?ð'à&ó'ð ô ˆz×"Ñ"Ó$Ó%¨Ò*ÜˆJ×ÑÓ!Ó" aÒ'¨J×,?Ñ,?Ó,AÀ!Ñ,DÈÒ,Ið,à+ó,ð ð �?‰?Ó Ò%ð Ø
(¨¨Ð/@ÀÇÁÓARÐ@SÐTóÐ%ð ÐÜ—M‘Mˆ	à×$Ñ$Ó&€LØ×$Ñ$Ó&€LØ"×.Ñ.Ó0Ð÷
ñ 
ô ×ÑØ×ÑÓ!ØØØ�~‰~Óô	ð rp   c                óˆ  ‡— t        | «      dk  ry| d   j                  «       }| dd D ]  }||j                  «       z  }Œ |syt        t        j                  j
                  j                  d   j                  «       «      }d}d}|D ]Û  }t        j                  j                  |«      }|€Œ%t        |t        j                  «      sŒ@t        |j                  t        j                  «      sŒet        |j                  j                  «       «      t        |j                  j!                  «       «      z  }	t        j                  j"                  j%                  ||	«      sŒ×|}|} n |€yt'        |dd«      }
|
syt)        «       Š| D ]#  }t'        |dd«      }|sŒ‰j+                  |«       Œ% |
D ]’  }|j,                  dk(  sŒt        |j.                  t0        j2                  j4                  «      sŒBt0        j6                  j8                  |j.                  j:                  v sŒst=        ˆfd„|j>                  D «       «      rŒ’ y |S )	aj  If all cat inputs share a common upstream reduction buffer whose
    only consumers feed into this cat, return its name so it can be
    excluded from the can_fuse_reduction check.

    Checks common reads for an IR reduction whose numel matches the cat
    output, then verifies via FX origins that all of the reduction's
    consumers feed into the cat inputs.r1   Nr   r3   r;  Úoriginsre   c              3  ó&   •K  — | ]  }|‰v –— Œ
 y ­wrŸ   rü   )rò   ÚuÚcat_input_originss     €rn   rô   z2_cat_inputs_recombine_reduction.<locals>.<genexpr>h  s   øè ø€ ÒE°1˜Ð.Ô.ÑEùó   ƒ) rÌ   Úget_read_namesrK   rZ   rf   rg   ri  ÚnumelÚtry_get_bufferrt   r6   rð  rv   rE   rW   rÍ   Úget_reduction_sizeræ   r–  r�  r)   r¦   ri   rj   r„   r…   r†   r�   Ú	reductionÚtagsr#  rh   )rP  rÐ   Úcommon_readsrÏ   Úcat_out_numelÚreduction_nameÚreduction_bufrà   ÚbufÚreduction_numelr  Úinp_originsÚoriginr  s                @rn   Ú_cat_inputs_recombine_reductionr,     só  ø€ ô ˆ6ƒ{�Q‚Øà˜!‘9×+Ñ+Ó-€LØ�a�bˆzò ;ˆØ# c×&8Ñ&8Ó&:Ñ:‰ð;áØô +¬1¯7©7×+?Ñ+?×+DÑ+DÀUÑ+K×+QÑ+QÓ+SÓT€MØ€NØ€MØò ˆÜ�g‰g×$Ñ$ TÓ*ˆà‰OÜ˜3¤× 1Ñ 1Õ2Ü˜3Ÿ8™8¤R§\¡\Õ2ä+¨C¯H©H×,=Ñ,=Ó,?Ó@Ä=Ø—‘×+Ñ+Ó-óDñ ˆOô �w‰w×Ñ×7Ñ7¸ÀÕWØ!%�Ø #�Ùðð ÐØô  �m Y°Ó5€GÙØä3=³<ÐØò 2ˆÜ˜c 9¨dÓ3ˆÚØ×$Ñ$ [Õ1ð2ð ò ˆà�I‰I˜Ó(Ü˜6Ÿ=™=¬%¯*©*×*?Ñ*?Õ@Ü—	‘	×#Ñ# v§}¡}×'9Ñ'9Ò9ÜÓE¸¿¹ÔEÕEáðð Ðrp   c                ób  ‡ ‡‡‡‡‡‡‡‡‡— ‰ d   j                  «       j                  dk(  }|r‚t        d„ ‰ D «       «      rp‰ D ]  }|j                  «        Œ t        d„ ‰ D «       «      rt	        t
        j                  g‰ ¢­Ž \  Š } t        t
        j                  j                  «      ‰ |«      S t        ‰ «      dk(  rt        ‰ d   «      S d„ }‰ D �cg c]
  } ||«      ‘Œ c}Št        ‰«      rOt        ‰ ‰«      D ��cg c]
  \  }}|rŒ	|‘Œ }}}|st        ‰ d   «      S t        |«      dk(  rt        |d   «      S |Š t        ‰ d   |d«      }t        ‰ dt        j                   iŽ}	‰ D �
cg c]  }
t#        |
|	«      ‘Œ c}
Š dd„Šd	„ Št%        «       fdˆˆˆfd
„Št'        ‰ |«      }|rt%        |g«      n	t%        «       Št        ˆˆfd„‰ D «       «      }dˆˆfd„Št(        j*                  rt-        ‰ |«      S |r)t/        t0        j2                  j5                  ‰ |«      «      S ˆˆfd„ŠdŠdd„Št        ‰ «      t(        j6                  k  s1t        ‰ «      t(        j8                  k  r“t        ˆˆfd„‰ D «       «      r~t        ˆfd„t:        j<                  j>                  D «       «      }t        ˆfd„‰ D «       «      xr |}dˆ ˆˆfd„} |«       }t        ˆfd„‰ D «       «      xr | }|s|s|rt-        ‰ |«      S t/        t0        j2                  j5                  ‰ |«      «      S c c}w c c}}w c c}
w )z@Lower aten.cat, choosing between pointwise_cat and ConcatKernel.r   rä   c              3  ó|   K  — | ]4  }|j                  «       t        j                  t        j                  fv –— Œ6 y ­wrŸ   )r¿   r„   Úint8Úuint8©rò   r¦  s     rn   rô   zcat.<locals>.<genexpr>s  s.   è ø€ ò Ø;@ˆ�‰ÓœeŸj™j¬%¯+©+Ð6Ô6ñùs   ‚:<c              3  óT   K  — | ]   }t        |j                  «       «      d k(  –— Œ" y­w)r®   N)rÌ   rÍ   r1  s     rn   rô   zcat.<locals>.<genexpr>z  s!   è ø€ Ò>¨eŒs�5—>‘>Ó#Ó$¨Õ)Ñ>ùs   ‚&(r3   c                óœ   — | j                  «       }t        |«      dk(  xr- t        j                  j                  j                  |d   d«      S ©Nr3   r   )rÍ   rÌ   rZ   rf   ræ   r–  )r€   rì   s     rn   Ú_cat_should_skipzcat.<locals>._cat_should_skipƒ  s=   € Ø�z‰z‹|ˆÜ�4‹y˜A‰~ÒV¤!§'¡'×"2Ñ"2×"JÑ"JÈ4ÐPQÉ7ÐTUÓ"VÐVrp   rÒ   c                ó  — t        | t        «      rJt        | j                  t        j                  «      r| j                  j                  «       S | j                  S t        | t        j                  «      r| j                  S | S rŸ   )rt   rG   rv   r6   r:   r¬  ré   rÃ   s    rn   Úunwrap_tensorzcat.<locals>.unwrap_tensor–  sV   € Ü�aœÔ#Ü˜!Ÿ&™&¤"§+¡+Ô.Ø—v‘v×)Ñ)Ó+Ð+à—v‘v�ä�aœŸ™Ô'Ø—6‘6ˆMàˆrp   c                ó‚   — t        | t        j                  «      xr$ t        | j                  t        j                  «      S rŸ   )rt   r6   rð  rv   rE   )r€   s    rn   Úis_reductionzcat.<locals>.is_reduction¢  s)   € Ü˜!œR×.Ñ.Ó/ÒT´J¸q¿v¹vÄrÇ|Á|Ó4TÐTrp   c                óö   •‡— t        | t        t        j                  f«      r ‰ ‰| «      ‰«      S  ‰| «      xs? t        | t        j                  «      xr# t        ˆˆfd„| j                  «       D «       «      S )Nc              3  óv   •K  — | ]0  }|‰vxr&  ‰t         j                  j                  |«      ‰«      –— Œ2 y ­wrŸ   )rZ   rf   Ú
get_buffer)rò   ÚreadÚcan_fuse_reductionÚexcludes     €€rn   rô   z2cat.<locals>.can_fuse_reduction.<locals>.<genexpr>«  sE   øè ø€ ò ð ð ˜GÐ#ò JÙ&¤q§w¡w×'9Ñ'9¸$Ó'?ÀÓIóJñùs   ƒ69)rt   rG   r6   ré   rD   r$  r  )r€   r?  r>  r9  r7  s    `€€€rn   r>  zcat.<locals>.can_fuse_reduction¥  sl   ù€ Ü�aœ)¤R§]¡]Ð3Ô4Ù%¡m°AÓ&6¸Ó@Ð@á˜‹Oò Ü˜!œRŸ\™\Ó*ò Üô ð ×,Ñ,Ó.ôó ð	
rp   c              3  ó0   •K  — | ]  } ‰|‰«      –— Œ y ­wrŸ   rü   )rò   r€   r>  r?  s     €€rn   rô   zcat.<locals>.<genexpr>¸  s   øè ø€ ÒK¸qÑ.¨q°'×:ÑKùs   ƒc                ó6  •— t        j                  | «      r:t        j                  | d¬«      \  }}t         j                  j	                  |«       S t        | t        t         j                  f«      r ‰ ‰| «      «      S t        | t         j                  «      ryy)NF)ÚfreezeT)	r6   r­  r®  ÚConcatKernelÚcan_realize_into_without_copyrt   rG   ré   rD   )r¨   r·  r   Úshould_lower_cat_inputr7  s      €€rn   rE  z#cat.<locals>.should_lower_cat_inputº  sx   ø€ ô ×#Ñ# AÔ&Ü×1Ñ1°!¸EÔB‰JˆG�QÜ—‘×DÑDÀWÓMÐMÐMä�aœ)¤R§]¡]Ð3Ô4Ù)©-¸Ó*:Ó;Ð;ä�aœŸ™Ô&Øàrp   c                óH  •— t        | t        t        j                  f«      r ‰ ‰| «      «      S t        | t        j                  «      sy| j                  «       j                  }| j                  «       D ]*  }| ‰t        j                  j                  |«      «      z  }Œ, |S r  )rt   rG   r6   ré   rD   Úinner_fn_opcountÚnum_opsr  rZ   rf   r<  )r¨   Úcountr=  Úop_countr7  s      €€rn   rJ  zcat.<locals>.op_countÑ  sŠ   ø€ Ü�aœ)¤R§]¡]Ð3Ô4Ù™M¨!Ó,Ó-Ð-ô ˜!œRŸ\™\Ô*Øà×"Ñ"Ó$×,Ñ,ˆØ×$Ñ$Ó&ò 	8ˆDØ‘XœaŸg™g×0Ñ0°Ó6Ó7Ñ7‰Eð	8ð ˆrp   r1   c                ón   — | t         j                  j                  t         j                  j                  fv S rŸ   )rä  ÚcatrÙ  Úconstant_pad_nd©ri   s    rn   Úadditional_pointwise_opsz%cat.<locals>.additional_pointwise_opsã  s(   € Ø”d—h‘h×&Ñ&¬×(<Ñ(<×(DÑ(DÐEÐEÐErp   c              3  ó4   •K  — | ]  } ‰|«      ‰k  –— Œ y ­wrŸ   rü   )rò   r€   ÚMAX_SIMPLE_OP_COUNTrJ  s     €€rn   rô   zcat.<locals>.<genexpr>è  s   øè ø€ ÒC°q‘˜“Ð2Õ2ÑCùs   ƒc              3  ó6   •K  — | ]  }t        |‰«      –— Œ y ­wrŸ   ©rP   )rò   ÚuserO  s     €rn   rô   zcat.<locals>.<genexpr>ê  s!   øè ø€ ò 
àô ˜SÐ":×;ñ
ùó   ƒc              3  ó.   •K  — | ]  } ‰|«      –— Œ y ­wrŸ   rü   ©rò   rÏ   rE  s     €rn   rô   zcat.<locals>.<genexpr>ñ  ó   øè ø€ Ò>°Ñ& s×+Ñ>ùó   ƒc                 ó  •‡‡— t         j                  Š‰€y‰j                  d   } t        | t        t
        f«      r| }n)t        | t        j                  j                  «      r| g}nyt        ‰	«      r!t        |‰	«      D ��cg c]
  \  }}|rŒ	|‘Œ }}}ˆˆ
fd„Št        |‰«      D ]T  \  }}t        |d«      rt        |j                  «      dk  rŒ+t        ˆfd„|j                  D «       «      r y ‰|«      sŒT y yc c}}w )NFr   c                ó”   •— t        | t        t        j                  f«      r ‰ ‰| «      «      S t        | t        j                  «      S rŸ   )rt   rG   r6   ré   rD   )r¨   Úis_unrealized_pointwiser7  s    €€rn   r\  zKcat.<locals>.any_input_has_multi_consumers.<locals>.is_unrealized_pointwise
	  s7   ø€ Ü˜a¤)¬R¯]©]Ð!;Ô<Ù2±=ÀÓ3CÓDÐDÜ! !¤R§\¡\Ó2Ð2rp   rh   r3   c              3  ó>   •K  — | ]  }|‰usŒt        |«      –— Œ y ­wrŸ   rS  )rò   r  rg   s     €rn   rô   z=cat.<locals>.any_input_has_multi_consumers.<locals>.<genexpr>	  s   øè ø€ ÒW¨qÀÈ,ÒAVÔ'¨×*ÑWùs   ƒ	�T)rZ   rg   r}   rt   rr   r¡   r„   ÚfxÚNoder$  r  rñ   rÌ   rh   )Úfx_argsÚinput_nodesrú  ÚskiprÔ   Úir_inputrg   r\  rP  Ú	skip_maskr7  s         @@€€€rn   Úany_input_has_multi_consumersz*cat.<locals>.any_input_has_multi_consumersû  sè   ú€ ÜŸ>™>ˆLØÐ#ØØ"×'Ñ'¨Ñ*ˆGÜ˜'¤D¬% =Ô1Ø%‘Ü˜G¤U§X¡X§]¡]Ô3Ø&˜i‘àä�9Œ~Ü03°KÀÓ0K×X¡W Q¨ÒSWšqÐX�ÑXõ3ô
 "% [°&Ó!9ò  ‘��XÜ˜s GÔ,´°C·I±I³À!Ò0CØô ÓW°C·I±IÔWÔWÙñ +¨8Õ4Ùð ð ùó' Ys   Â
C>ÂC>c              3  ó.   •K  — | ]  } ‰|«      –— Œ y ­wrŸ   rü   rW  s     €rn   rô   zcat.<locals>.<genexpr> 	  rX  rY  )r¨   zTensorBox | ir.StorageBoxrÓ   ú	ir.IRNode)r?  zOrderedSet[str]©rÓ   rÆ   ©ri   útorch._ops.OpOverload) rw   rè   r#  r²  Úrequire_channels_lasträ  rL  rÖ  rÙ  rÌ   rÀ  r$  r  r“  rØ   r   rK  rø   r)   r,  r4   Úforce_pointwise_catrÓ  rG   r6   rC  rë   Ú max_complex_pointwise_cat_inputsÚmax_pointwise_cat_inputsrZ   rg   rh   )rP  rÐ   Ú
cpu_devicer¦  r   r5  r€   rb  Úvalid_inputsr»   rÏ   Ú
recombinedÚfusable_reductionÚpointwise_usesÚfuse_pointwise_usere  Úhas_multi_consumersÚhorizontal_fuse_catrQ  rO  r>  r?  r9  rJ  rE  rd  r7  s   `                 @@@@@@@@@rn   rL  rL  o  sð  ÿù€ ð ˜‘×%Ñ%Ó'×,Ñ,°Ñ5€JÙ”cñ ØDJôô ð
 ò 	ˆEØ�M‰M�Oð	äÑ>°vÔ>Ô>Ü-¬d¯h©hÐ@¸Ò@‰IˆF�AØ1Ô¤§¡× 0Ñ 0Ó1°&¸#Ó>Ð>ä
ˆ6ƒ{�aÒÜ�V˜A‘YÓÐòWð /5Ö5¨Ñ! !Õ$Ò5€IÜ
ˆ9„~Ü),¨V°YÓ)?×L™g˜a ÂtšÐLˆÑLÙÜ˜ ™Ó#Ð#Üˆ|Ó Ò!Ü˜ a™Ó)Ð)Øˆä
˜˜q™	 3¨Ó
*€CÜØ	ðÜ%D×%LÑ%Lñ€Eð /5Ö5 sŒh�s˜EÕ"Ò5€Fó
òUô :D»÷ 
ð 
ô" 1°¸Ó=€JÙ;Eœz¨:¨,Ô7Ì:Ë<€GÜÔKÀFÔKÓKÐöô ×!Ò!Ü˜V SÓ)Ð)ñ ÜœŸ™×/Ñ/°¸Ó<Ó=Ð=õð  ÐóFô ˆ6ƒ{”f×=Ñ=Ò=Ü	ˆV‹œ×7Ñ7Ò	7ÜÔC¸FÔCÔCäó 
ä—~‘~×+Ñ+ô
ó 
ˆô Ó>°vÔ>Ó>ÒQÀ>ð 	÷ 	ñD <Ó=Ðô Ó>°vÔ>Ó>ÒXÐGXÐCXð 	ñ #Ñ(:Ñ>QÜ  ¨Ó-Ð-ä”R—_‘_×+Ñ+¨F°CÓ8Ó9Ð9ùò 6ùãLùò 6s   ÃL!Ã>
L&Ä	L&Å+L,c                ó€  ‡‡‡
‡‡— | j                  «       Št        ‰«      Št        ‰‰¬«      Št        ‰‰¬«      Št        ‰‰k7  ˆˆfd„«       t        j
                  j                  j                  t        j                  |d«      «      }|r\t        j
                  j                  j                  t        j
                  j                  j                  ‰‰   |z   ‰‰   «      d«      }n[t        j
                  j                  j                  t        j
                  j                  j                  ‰‰   ‰‰   |z
  «      d«      }dŠ
|r| dfŠ
nd|fŠ
t        ‰«      D ��cg c]  \  }}|‰‰fvsŒ|‘Œ }}}|j                  |«       ˆ
ˆˆˆˆfd„}	t        t        j                   j#                  | ||	«      «      S c c}}w )N)r[  Úrankc                 ó   •— d‰ › d‰› �S )Nz(diagonal dimensions cannot be identical z, rü   )Údim1Údim2s   €€rn   rI  zdiagonal.<locals>.<lambda>1	  s   ø€ Ð HÈÈÈbÐQUÐPVÐW€ rp   r   )r   r   c                óØ   •— | d   }dgt        ‰	«      z  }d}t        ‰«      D ]1  }|‰k(  r|‰d   z   ||<   Œ|‰k(  r|‰d   z   ||<   Œ%| |   ||<   |dz  }Œ3 |t        ‰	«      dz
  k(  sJ ‚|S )Nrz  r   r3   r1   )rÌ   r  )
r[  Údiag_idxÚoriginal_idxÚcur_dimr0  Úbase_idxrz  r{  Únum_dimsÚoriginal_shapes
        €€€€€rn   Ú	reindexerzdiagonal.<locals>.reindexerO	  s�   ø€ Ø�r‘7ˆØ�sœS Ó0Ñ0ˆØˆÜ�x“ò 	ˆAØ�DŠyØ"*¨X°a©[Ñ"8�˜Q’Ø�d’Ø"*¨X°a©[Ñ"8�˜Q’à"% g¡,�˜Q‘Ø˜1‘‘ð	ð œ#˜nÓ-°Ñ1Ò1Ð1Ð1ØÐrp   )rÍ   rÌ   r   r   rZ   rf   ræ   Úevaluate_exprrÀ   rŒ  Úevaluate_maxÚevaluate_minrs   rx   rG   r6   ÚGenericViewrë   )r¦  rœ  rz  r{  Úoffset_negativeÚ	diag_sizer|   r5  r(  rƒ  r€  r�  r‚  s     ``      @@@rn   ÚdiagonalrŠ  )	  sˆ  ü€ à—^‘^Ó%€NÜ�>Ó"€HÜ ¨8Ô4€DÜ ¨8Ô4€Dä	Ø�‰ÔWôô —g‘g×&Ñ&×4Ñ4´U·X±X¸fÀaÓ5HÓI€OÙÜ—G‘G×$Ñ$×1Ñ1Ü�G‰G×Ñ×)Ñ)Ø˜tÑ$ vÑ-Ø˜tÑ$óð ó
‰	ô —G‘G×$Ñ$×1Ñ1Ü�G‰G×Ñ×)Ñ)Ø˜tÑ$Ø˜tÑ$ vÑ-óð ó
ˆ	ð €HÙØ�G˜Q�<‰à�v�;ˆä$ ^Ó4×N‘4�1�a¸À$ÈÀÒ8MŠQÐN€EÑNØ	‡L�L�Ô÷ð ô  ”R—^‘^×*Ñ*¨5°%¸ÓCÓDÐDùó' Os   Å F:Å/F:c                ó0   — t        t        | |||«      «      S rŸ   )rÀ  rŠ  )r¦  rœ  rz  r{  s       rn   Údiagonal_copyrŒ  b	  s   € ä”˜% ¨¨tÓ4Ó5Ð5rp   c                óP   — t        | «      }t        ||||«      }t        ||«       |S rŸ   )rÀ  rŠ  Ú	mutate_to)r¦  Úsrcrœ  rz  r{  r6  rj   s          rn   Údiagonal_scatterr�  g	  s*   € ä�5‹\€FÜ�f˜f d¨DÓ1€FÜˆf�cÔØ€Mrp   c                óp  — t        j                  |«      }t        j                  | j                  «       |   «      }d }t        j                  j
                  j                  t        j                  |d«      «      r||z   }n?t        j                  j
                  j                  t        j                  |d«      «      r|}|�“t        |«      ri| j                  «        | j                  «       }| j                  «       }| j                  «       j                  ||   |z  z   }||= ||= t        | |||d¬«      S t        | |||dz   d¬«      }t!        ||«      S t#        t        j                  j
                  j$                  t        j                  j&                  j(                  d   «      }	|	€J ‚t+        |	«      dk(  sJ |	«       ‚t-        t/        |	j1                  «       «      «      \  }
}| j                  «        | j                  «       }| j                  «       }|
}t3        j4                  |
|| j                  «       j                  ||   | j                  «       |   d¬«      }t        j                  j7                  |«      |_        t        j                  j;                  |«       ||= ||= t        | |||d¬«      S )Nr   Fr‘  r3   r�  rs  )rÀ   r3  rÍ   rZ   rf   ræ   r1  rŒ  rŠ  r&   r²  r�  r›  rœ  rŸ  r¨  r6  r'   rw  rg   ri  rÌ   rL  Úiterr  r6   rž  rz  rà   r{  )r¨   rÐ   r[  rì   Úactual_indexrj  Ú
new_strider¤  Úslice_resultrs  Úunbacked_offset_symr   Úbuffers                rn   Úselectr˜  o	  sY  € ä
�,‰,�sÓ
€CÜ�<‰<˜Ÿ
™
› SÑ)Ó*€DØ€Lä‡w�w×Ñ×&Ñ&¤u§x¡x°°QÓ'7Ô8Ø˜T‘z‰Ü	
�‰×	Ñ	×	(Ñ	(¬¯©°#°qÓ)9Ô	:ØˆàÐÜ$ SÔ)ð �I‰IŒKØ—z‘z“|ˆHØŸ™›ˆJØ!"§¡£×!6Ñ!6¸ÀC¹È<Ñ9WÑ!WÐà˜�Ø˜3�ÜØØØØ"Ø9>ôð ô " ! S¨,¸ÀqÑ8HÐPUÔVˆLÜ˜<¨Ó-Ð-ô 2Ü	�‰×Ñ×"Ñ"¤A§G¡G×$8Ñ$8×$=Ñ$=Ð>QÑ$RóÐð Ð(Ð(Ð(ÜÐ Ó! QÒ&Ð9Ð(9Ó9Ð&Ü!¤$Ð'8×'>Ñ'>Ó'@Ó"AÓBÑÐ˜ð ‡I�I„KØ�z‰z‹|€HØ—‘“€JØ,ÐÜ×*Ñ*ØØØ	�‰‹×ÑØ�3‰Ø	�
‰
‹�SÑØô€Fô —'‘'×)Ñ)¨&Ó1€F„KÜ‡G�G×Ñ˜vÔ&à�ˆØ�3ˆÜØ	ØØØØ16ôð rp   c           
     ó<  — t        | |d«      }|}t        |t        t        f«      sÅt        j
                  j                  }|j                  |d«      rt        d|› �«      ‚| j                  «       |   }|j                  |d«      rt        | |ddd¬«      gS |j                  |d«      rt        d|› �«      ‚|j                  t        ||z   dz
  |«      «      }|g|z  }||dz
  |z  z
  |d<   g }d}|D ](  }	||	z   }
|j                  t        | |||
d¬«      «       |
}Œ* |S )Nr   z=split expects split_size be non-negative, but got split_size=Fr�  zKsplit_size can only be 0 if dimension size is 0, but got dimension size of r3   rz  )r“  rt   rr   r¡   rZ   rf   ræ   Ústatically_known_ltÚRuntimeErrorrÍ   r–  r¨  r.  r+   rx   )r¨   r(  rÐ   Úsizes_ræ   Úx_sizeÚchunksr½  r|  rì   r}  s              rn   ÚsplitrŸ  ¼	  sP  € ä
˜˜3 Ó
"€CØ€Fô �eœd¤E˜]Ô+Ü—7‘7×#Ñ#ˆØ×'Ñ'¨¨qÔ1ÜØOÐPUÈwÐWóð ð —‘“˜cÑ"ˆØ×+Ñ+¨F°AÔ6Ü˜1˜c 1 a¨uÔ5Ð6Ð6à×+Ñ+¨E°1Ô5Üð-Ø-3¨Hð6óð ð
 ×#Ñ#¤H¨V°e©^¸aÑ-?ÀÓ$GÓHˆØ�˜6Ñ!ˆà˜v¨™z¨UÑ2Ñ2ˆˆr‰
ð €FØ€EØò ˆØ�d‰lˆð 	�‰”f˜Q  U¨C°uÔ=Ô>Ø‰ðð €Mrp   c                ó   — t        | ||«      S rŸ   )rŸ  )r¨   r(  rÐ   s      rn   Úsplit_with_sizesr¡  æ	  s   € ä��E˜3ÓÐrp   c                óä   — t        | |d«      }t        j                  j                  j	                  | j                  «       |   «      }t        |«      D �cg c]  }t        | ||«      ‘Œ }}|S c c}w r  )r“  rZ   rf   ræ   r.  rÍ   r  r˜  )r¨   rÐ   r�  r|   r½  s        rn   Úunbindr£  ë	  s_   € ä
˜˜3 Ó
"€CÜ�W‰W×Ñ×'Ñ'¨¯
©
«°SÑ(9Ó:€FÜ).¨v«Ö7 AŒf�Q˜˜QÕÐ7€FÐ7Ø€Mùò 8s   ÁA-c                ó@  ‡‡— | j                  «       }t        |«      }t        ||«      Š|dk(  rt        t	        | d«      |d¬«      S |‰   }t
        j                  j                  }|j                  ||«       |j                  d‰«       t        ||z
  ‰«      dz   }|j                  |«      dkD  r-| j                  |j                  t        ||z  |«      «      «       g |d ‰ ¢|‘|‰dz   d  ¢|‘}	ˆˆfd„}
t        t        j                   j#                  | |	|
«      «      S )Nr   F)r}  r�  r3   c                óD   •— | d   | ‰   ‰z  z   }g | d ‰ ¢|‘| ‰dz   d ¢­S )Nrz  r3   rü   )r[  Údim_idxrÐ   r~  s     €€rn   rƒ  zunfold.<locals>.reindexer	
  s?   ø€ Ø�b‘'˜C ™H t™OÑ+ˆØ8��T�c�Ð8˜GÐ8 c¨#°©'°BÐ&7Ñ8Ð8rp   )rÍ   rÌ   r   r¨  rX  rZ   rf   ræ   Ú	check_leqÚcheck_ltr+   rQ  rR  r*   rG   r6   r‡  rë   )r¨   Ú	dimensionrì   r~  r(  ÚndimÚdim_sizeræ   Únew_dim_sizeÚout_sizerƒ  rÐ   s      `       @rn   Úunfoldr®  ó	  s  ù€ à�J‰J‹L€EÜˆu‹:€DÜ
˜4 Ó
+€Càˆq‚yÜ”i  1“o¨4°uÔ=Ð=à�S‰z€HÜ�w‰w×Ñ€HØ×Ñ�t˜XÔ&Ø×Ñ�a˜Ôä˜H t™O¨TÓ2°QÑ6€LØ×&Ñ& xÓ0°1Ò4Ø	�‰Ø×+Ñ+¬G°LÀ4Ñ4GÈÓ,RÓSô	
ð E��t˜�ÐD˜lÐD¨U°3¸±7°9Ð-=ÐD¸tÐD€Hõ9ô ”R—^‘^×*Ñ*¨1¨h¸	ÓBÓCÐCrp   c                óº   — t        | |d«      }t        | j                  «       «      }|j                  |t        j
                  j                  «       t        | |«      S r  )r“  rr   rÍ   ÚinsertrÀ   r/  r0  rå  )r¨   rÐ   r4  s      rn   rX  rX  
  sE   € ä
˜˜3 Ó
"€CÜ�Q—Z‘Z“\Ó"€IØ×Ñ�Sœ%Ÿ'™'Ÿ+™+Ô&Ü��9ÓÐrp   c                óˆ   — t        | |«      }t        | t        «      sJ ‚t        |t        «      sJ ‚|j                  | _        | S rŸ   )rX  rt   rG   rv   r:  s      rn   Ú
unsqueeze_r²  
  s>   € ä
�A�sÓ
€CÜ�aœÔ#Ð#Ð#Ü�cœ9Ô%Ð%Ð%Ø�X‰X€A„FØ€Hrp   c                ó  — t         j                  j                  j                  j	                  t        j                  |«      «      }t        | j                  «       «      }|dk  r|||z   z  }d|cxk  r	||z   k  sJ ‚ J ‚|S r  )	rZ   rf   ræ   rw  r„  rÀ   ÚsympifyrÌ   rÍ   )r¨   rÐ   rœ  rª  s       rn   r“  r“  !
  sr   € Ü
�'‰'×
Ñ
×
$Ñ
$×
2Ñ
2´5·=±=ÀÓ3EÓ
F€CÜˆq�z‰z‹|Ó€DØ
ˆQ‚wØˆt�f‰}ÑˆØ�Ô#�d˜V‘mÒ#Ð#Ñ#Ð#Ð#Ø€Jrp   rz  c                ó  — t        | |d«      }t        j                  j                  j	                  | j                  «       |   «      dz  }t        | |d|d¬«      }t        | |||dz  d¬«      }t        |t        |«      «      S )Nr   r1   Fr�  )	r“  rZ   rf   ræ   r.  rÍ   r¨  rŒ  Úsigmoid)r¨   rÐ   Únew_lenró   r5  s        rn   Úglur¸  *
  ss   € ä
˜˜3 Ó
"€Cä�g‰g×Ñ×(Ñ(¨¯©«°cÑ):Ó;¸qÑ@€Gäˆq�#�q˜'¨Ô/€AÜˆq�#�w ¨!¡°5Ô9€AÜˆq”'˜!“*ÓÐrp   c                óN   ‡ — |rt         j                  ‰ «       ˆ fd„}d|_        |S )Nc                 óx   •— d„ }t        j                  |t        j                  j                  ‰g| ¢­i |¤Ž«      S )Nc                óZ   — t        | t        j                  «      r| j                  «       S | S rŸ   ©rt   r6   r>   Úwrap_for_loweringrÃ   s    rn   Úwrap_tensorsz7fallback_handler.<locals>.handler.<locals>.wrap_tensors:
  ó#   € Ü,6°q¼"¿)¹)Ô,D�1×&Ñ&Ó(ÐKÈ!ÐKrp   )rk  Útree_mapr6   ÚFallbackKernelrë   )r}   r   r¾  Úkernels      €rn   Úhandlerz!fallback_handler.<locals>.handler9
  s<   ø€ ò	Lô �‰Øœ"×+Ñ+×2Ñ2°6ÐK¸DÒKÀFÑKó
ð 	
rp   T)r  r¤   Ú_is_fallback_handler)rÂ  rÒ  rÃ  s   `  rn   rÖ  rÖ  5
  s&   ø€ ÙÜ�‰�fÔô
ð $(€GÔ à€Nrp   c                 ó.   — t        j                  d«       y )NzjTorchinductor does not support code generation for complex operators. Performance may be worse than eager.)ÚwarningsÚwarnrü   rp   rn   Ú_warn_complex_not_supportedrÈ  G
  s   € ä‡M�MØtõrp   c                óø  — | j                  «       rt        «        y| j                  ry| j                  ryt	        | j
                  | j                  «      sy| j
                  t        j                  k(  �r|syt        |j                  t        j                  j                  «      xr‹ |j                  t        j                  j
                  t        j                  j                   t        j"                  j                   t        j$                  j                   t        j&                  j                   fv xsE t        |j                  t        j                  j                  «      xr t)        |j                  «       S y)z0Do not support reading or writing to this tensorTF)rÓ  rÈ  Úis_metaÚ	is_sparserQ   r»   r   r„   Úfloat8_e8m0fnurt   rj   r…   r†   rä  rå  rL  rÙ  rÀ  Ú
_scaled_mmÚ_scaled_mm_v2rR   )r€   rl   s     rn   Úunsupported_input_tensorrÏ  P
  s  € à‡|�|„~ä#Ô%Øà‡y‚yØà‡{‚{Øä(¨¯©°!·(±(Ô;Øà‡w�w”%×&Ñ&Ó&ÙØô
 �t—{‘{¤E§J¡J×$9Ñ$9Ó:ò Ø—‘ä—	‘	—‘Ü—‘× Ñ Ü—
‘
×"Ñ"Ü—‘×'Ñ'Ü×"Ñ"×*Ñ*ððò	Yô ˜4Ÿ;™;¬¯
©
×(=Ñ(=Ó>ÒWÄ7È4Ï;É;ÓCWð
ð 	
ð rp   c                ó*  — t         j                  j                  t        j                  j
                  j                  j                  f}|�|j                  |v r| j                  «       ryt        | |«      ry| j                  xr t        j                  S )z2Do not support writing tensor but can read from itFT)rä  rå  r»   r„   rY   r×  rØ  rÙ  rj   rÓ  rÏ  Úis_cpur4   Údisable_cpp_codegen)r€   rl   Úsupported_complex_viewss      rn   Úunsupported_output_tensorrÔ  v
  so   € ô 	�	‰	�‰Ü�	‰	�‰×,Ñ,×4Ñ4ðÐð Ð˜DŸK™KÐ+BÑBÀqÇ|Á|Ä~ØÜ  4Ô(ØØ�8‰8Ò2œ×2Ñ2Ð2rp   c                óR  ‡ — ‰ j                   t        j                  j                  u ry‰ j                  dk(  ry‰ j                   t        j
                  j                  u ryˆ fd„}t        j                  ‰ j                  i ‰ j                  ¤ŽD ]  } ||d¬«      sŒ y  |‰ d¬«      S )NFÚplaceholderc                óD  •— t        | t        j                  j                  «      syd| j                  vryt        j                  | j                  d   «      D ]F  }t        |t        j                  j                  «      sŒ(|rt        |‰«      sŒ7 yt        |‰«      sŒF y y)NFr;  T)rt   r„   r^  r_  ri  rk  rl  Ú_subclassesÚ
FakeTensorrÔ  rÏ  )Úinp_out_nodeÚ	is_outputri  rl   s      €rn   Úcheck_skip_conditionzCfallback_node_due_to_unsupported_type.<locals>.check_skip_condition�
  s‰   ø€ Ü˜,¬¯©¯©Ô6Øà˜×)Ñ)Ñ)Øä×&Ñ& |×'8Ñ'8¸Ñ'?Ó@ò 		 ˆDÜ˜d¤E×$5Ñ$5×$@Ñ$@ÔAØáÜ,¨T°4Õ8Ùä+¨D°$Õ7Ùð		 ð rp   )rÛ  T)
rj   rä  Úview_as_complexrÙ  ri   Úlift_fresh_copyrk  Úarg_tree_leavesr}   r   )rl   Úallow_cpu_inputsrÜ  rÔ   s   `   rn   Ú%fallback_node_due_to_unsupported_typerá  ƒ
  s”   ø€ à‡{�{”d×*Ñ*×2Ñ2Ñ2Øà‡w�w�-ÒØð ‡{�{”d×*Ñ*×2Ñ2Ñ2Øôô* ×%Ñ% t§y¡yÐ@°D·K±KÑ@ò ˆÙ ¨uÖ5Ùðñ   °Ô5Ð5rp   c                ó(  ‡— |� |«       nt         }| |vs|s
J d| › �«       ‚|rÉt        t        j                  d«      «      r«t	        | g«      rŸt
        j                  r&| t        j                  j                  j                  v si|sgt        j                  j
                  j                  r4dt        j                  j
                  _        t        j                  d«       t        d| › d�«      ‚ˆfd„}t!        | t        j"                  j$                  «      r| j'                  «       D ]
  } ||«       Œ y t!        | t        j"                  j(                  t        j"                  j*                  f«      r	 || «       y t-        d| › d	t/        | «      › �«      ‚)
Nz*both a fallback and a decomp for same op: ÚCIFznA make_fallback error occurred in suppress_errors config, and suppress_errors is being disabled to surface it.zmake_fallback(a.  ): a decomposition exists, we should switch to it. To fix this error, either add a decomposition to core_aten_decompositions (preferred) or inductor_decompositions, and delete the corresponding `make_fallback` line. Get help from the inductor team if unsure, don't pick arbitrarily to unblock yourself.c                ón   •— t        | «       ‰�t        | ‰«        t        | d ¬«      t        | «      «      S ©NrV  )r¢   r¬   r*  rÖ  )Úop_overloadÚlayout_constraints    €rn   Úregister_fallbackz(make_fallback.<locals>.register_fallbackÒ
  s;   ø€ Ü! +Ô.ØÐ(Ü! +Ð/@ÔAØGÔ  À$ÔGÜ˜[Ó)ó
ð 	
rp   zUnsupported fallback z with type )r8   rÆ   ÚosÚgetenvr9   r4   Úfallback_randomr„   Ú_decompÚdecompositions_for_rngÚextra_random_decompsÚ_dynamoÚsuppress_errorsÚlogÚwarningr•   rt   r…   r¥   r§   r†   ÚHigherOrderOperatorr›  rè   )ri   rç  rÇ  Úoverride_decompÚget_decomp_fnÚcheck_decompsrè  ræ  s    `      rn   Úmake_fallbackr÷  «
  sU  ø€ ð (5Ð'@‘M”OÄn€MØ�]Ñ"¡oð Ø
4°R°DÐ9óÐ5ñ 	Ü”—‘˜4“Ô!Ü ˜tÔ$ô ×"Ò"Ø”e—m‘m×:Ñ:×OÑOÑOáô �=‰=×Ñ×/Ò/Ø38ŒE�M‰M× Ñ Ô0Ü�K‰KðHôô Ø˜R˜Dð !fð fó
ð 	
ô
ô �"”e—j‘j×1Ñ1Ô2ØŸ?™?Ó,ò 	+ˆKÙ˜kÕ*ñ	+ä	�BœŸ™×.Ñ.´·
±
×0NÑ0NÐOÔ	PÙ˜"ÕäÐ2°2°$°kÄ$ÀrÃ(ÀÐLÓMÐMrp   c                óT   — d}| D ]  }||z  }Œ	 t        |t        j                  ¬«      S )zÎ
    TorchInductor offset calculation differs from PyTorch eager offset
    calculation for random ops (tl.rand vs torch.rand). In future, we should
    strive for same impl for tl.rand and torch.rand.
    r3   rº   ©rF  r„   rÅ  )rY  r  r5  s      rn   Úphilox_rand_offsetrú  ã
  s2   € ð €EØò ˆØ˜‘	‰ðä�%œuŸ{™{Ô+Ð+rp   c                óB  ‡‡	‡
‡— t        j                  |‰| t         j                  j                  | «      «      j	                  «       Š
|j                  «       Š|j                  «       Š	ˆˆ	ˆ
ˆfd„}t        j                  |‰|t        | «      ¬«      }t        | «      }||fS )Nc                ó€  •— t        j                   ‰g «      t        j                  «      }t        j                   ‰g «      t        j                  «      }t        j                  t        j
                   ‰| «      t        j                  «      |«      }t        j                  ||«      }t        j                  |‰«      S rŸ   )rY   rø   r„   r  r¤   rX  Úrand)	r@  Úseed_index_exprÚoffset_index_exprÚrand_index_exprr½  r»   Úoffset_loaderÚ
random_posÚseed_loaders	        €€€€rn   rb  zphilox_rand.<locals>.inner_fnü
  sˆ   ø€ ô Ÿ,™,¡{°2£¼¿¹ÓDˆÜŸL™L©°rÓ):¼E¿K¹KÓHÐäŸ'™'Ü�N‰N™: eÓ,¬e¯k©kÓ:Ð<Mó
ˆô —‘ØØó
ˆô �|‰|˜F EÓ*Ð*rp   rc  )
r6   r²  ÚFlexibleLayoutÚcontiguous_stridesÚmake_indexerre  rD   rë   rr   rú  )rì   Úseedrœ  r³  r   r»   rb  Úrandom_values_nodeÚoffset_noder  r  r  s        `   @@@rn   Úphilox_randr
  ï
  s™   û€ ô —‘ØØØÜ
×Ñ×,Ñ,¨TÓ2ó	÷
 �lƒnð ð ×"Ñ"Ó$€KØ×&Ñ&Ó(€M÷+ô #×)Ñ)ØØØÜ�D‹zô	Ðô % TÓ*€KØ˜{Ð*Ð*rp   c           	     óð   — t         j                  r\t        j                  t        j
                  t        j                  j                  t        j                  j                  | ||«      «      S t        d«      ‚)Nz&should be handled in replace_random.py)r4   rë  rk  rÀ  rG   rë   r6   rÁ  rä  Únative_dropoutrÙ  r•   )r¨   ÚpÚtrains      rn   r  r    sY   € ä×ÒÜ�‰Ü×ÑÜ×Ñ×$Ñ$¤T×%8Ñ%8×%@Ñ%@À!ÀQÈÓNó
ð 	
ô
 ÐEÓFÐFrp   c                óx  — t         j                  s-| j                  «       t        j                  d«      k(  sJ d«       ‚| j                  «        t        |«      dk(  st        |d   t        «      rt        j                  j                  nt        j                  j                  }t        j                  || g|¢­Ž  | S )Nrä   úTthis should be handled in decomps unless config.fallback_random or the device is CPUr   )r4   rë  rw   r„   r   r²  rÌ   rt   r;  rä  Ú
bernoulli_ÚTensorr6   ÚInplaceBernoulliFallback)r¨   r}   ræ  s      rn   r  r  !  s“   € ä×!Ò! Q§\¡\£^´u·|±|ÀEÓ7JÒ%Jð Ø^óÐJð ‡I�I„Kô ˆt‹9˜Š>œZ¨¨Q©´Ô7ô 	�‰×Òä�_‰_×#Ñ#ð ô
 ×Ñ ¨QÐ6°Ó6Ø€Hrp   c                ó¦   — t         j                  s-| j                  «       t        j                  d«      k(  sJ d«       ‚t        t        | «      g|¢­Ž S )Nrä   r  )r4   rë  rw   r„   r   r  rÀ  )r¨   r}   s     rn   Úbernoulli_pr  0  sG   € ä×!Ò! Q§\¡\£^´u·|±|ÀEÓ7JÒ%Jð Ø^óÐJô ”e˜A“hÐ& Ò&Ð&rp   c                ó   — t         ‚rŸ   ©r•   )r   s    rn   Ú_foobarr  9  s   € ä
Ðrp   c                ó.   — t         j                  d«       y )Nz1using triton random, expect difference from eager)rñ  Úinfo)Úsalts    rn   Ú_warn_triton_randomr  >  s   € ä‡H�HÐ@ÕArp   c                 óJ   — t        t        j                  j                  «       y rŸ   )r  rZ   rf   Úcreation_timerü   rp   rn   Úwarn_triton_randomr  C  s   € äœŸ™×-Ñ-Õ.rp   )rô  c                 óÌ   — |j                  d«      �t        | i |¤ŽS t        j                  s|j                  d«      r|j	                  dd «       t        | i |¤ŽS t        d«      ‚©NÚ	generatorÚ
pin_memoryz-should have been handled in replace_random.py)rj  Úfallback_rand_generatorr4   rë  r¡  Úfallback_rand_defaultr•   ©r}   r   s     rn   rý  rý  Y  s_   € à‡z�z�+ÓÐ*Ü&¨Ð7°Ñ7Ð7Ü	×	Ò	 6§:¡:¨lÔ#;Ø�
‰
�; Ô%Ü$ dÐ5¨fÑ5Ð5Ü
ÐHÓ
IÐIrp   c                 óÌ   — |j                  d«      �t        | i |¤ŽS t        j                  s|j                  d«      r|j	                  dd «       t        | i |¤ŽS t        d«      ‚r!  )rj  Úfallback_randn_generatorr4   rë  r¡  Úfallback_randn_defaultr•   r&  s     rn   Úrandnr*  c  s_   € à‡z�z�+ÓÐ*Ü'¨Ð8°Ñ8Ð8Ü	×	Ò	 6§:¡:¨lÔ#;Ø�
‰
�; Ô%Ü% tÐ6¨vÑ6Ð6Ü
ÐHÓ
IÐIrp   c                ó²   — t        j                  |t        j                  j                  j
                  «      }t         j                  j                  | |«      S rŸ   )r6   Úget_stride_orderrZ   rf   ræ   rw  rã  Úrequire_stride_order)Úinput_tensorr³  Ústride_orders      rn   Úinductor_force_stride_orderr0  m  s;   € ä×&Ñ& v¬q¯w©w×/?Ñ/?×/IÑ/IÓJ€LÜ�?‰?×/Ñ/°¸lÓKÐKrp   c                ó   — t        d«      ‚)Nz.should be handled in fuse_seed_creation_pass()r  ©r   s    rn   Úinductor_seedr3  s  s   € ä
ÐIÓ
JÐJrp   c                óz   — t        «        t        j                  t        j                  | t        |«      «      «      S rŸ   )r  rG   rë   r6   ÚRandomSeedsrL   )rI  r   s     rn   Úinductor_seedsr6  x  s)   € äÔÜ×ÑœBŸN™N¨5´-ÀÓ2GÓHÓIÐIrp   c                ó|   ‡ ‡— ˆˆ fd„}t        j                  ‰ j                  «       ‰ j                  «       |g ¬«      S )Nc                óL   •— t        j                  ‰j                  «       ‰«      S rŸ   )rY   Ú	load_seedr±  )r   r@  Úseedss    €€rn   rb  z&inductor_lookup_seed.<locals>.inner_fn€  s   ø€ Ü�}‰}˜UŸ^™^Ó-¨uÓ5Ð5rp   rc  )rD   rë   rw   r¿   )r:  r@  rb  s   `` rn   Úinductor_lookup_seedr;  ~  s9   ù€ õ6ô ×ÑØ×ÑÓ!Ø�o‰oÓØØô	ð rp   c                óV  — t        | t        j                  «      st        j                  | «      } | j                  dk(  rf| j                  }|€t        j
                  j                  «       }t        j
                  j                  |«      }|j                  |j                  z  }|S d}|}|S )Nry  i €  )
rt   r„   r   rè   r@  ry  Úcurrent_deviceÚget_device_propertiesÚmulti_processor_countÚmax_threads_per_multi_processor)r   r[  ÚpropÚthreads_per_roundÚ_CPU_GRAIN_SIZEs        rn   Úget_threads_per_roundrD  ‹  s’   € Ü�fœeŸl™lÔ+Ü—‘˜fÓ%ˆà‡{�{�fÒØ�l‰lˆØˆ;Ü—*‘*×+Ñ+Ó-ˆCä�z‰z×/Ñ/°Ó4ˆà×&Ñ&¨×)MÑ)MÑMð 	ð Ðð  ˆØ+ÐàÐrp   )rœ  Úalign_dtypec               ó  ‡‡
‡‡‡— t         j                  rJ ‚‰dv sJ ‚g | ¢} t        j                  }|j	                  «       }t        j                  ||| t
        j                  j                  | «      |¬«      j                  «       Š
|j                  «       Št         j                  r/|j                  dk(  r t        |«      Šdd„} ||«      Šˆ
ˆˆˆfd„}nˆˆ
ˆfd„}t        j                  |||g | ¢¬«      }	|	j!                  «        |	S )	N)rý  r*  ©rœ  ry  c                óJ   — | t         j                  t         j                  fv ryy)Nr²   r®   )r„   rN  rM  )Údts    rn   Ú_vec_from_dtypez(inductor_random.<locals>._vec_from_dtypeµ  s   € Ø”e—m‘m¤U§^¡^Ð4Ñ4ØØrp   c           
     ó¾   •—  ‰dg«      } ‰dg«      }t        j                  ||‰t        j                   ‰| «      t        j                  «      t        ‰«      ¬«      S )Nr   r3   )Úvec)rY   Ú
rand_eagerrX  r„   r  r¸   )r@  Úrng_seedÚbase_offsetr  r  rB  rL  s      €€€€rn   rb  z!inductor_random.<locals>.inner_fn¼  sS   ø€ Ù" A 3Ó'ˆHÙ% q cÓ*ˆKÜ—>‘>ØØØ!Ü—‘™z¨%Ó0´%·+±+Ó>Ü˜“Hôð rp   c                óŽ   •—  t        t        ‰«       ‰g «      t        j                   ‰| «      t        j                  «      «      S rŸ   )r�  rY   rX  r„   r  )r@  Úmoder  r  s    €€€rn   rb  z!inductor_random.<locals>.inner_fnÈ  s7   ø€ Ø%”7œ3 Ó%Ù˜B“Ü—‘™z¨%Ó0´%·+±+Ó>óð rp   rc  )rI  útorch.dtyperÓ   r¸   )r4   rë  r„   r  rO  r6   r²  r  r  r  re  Úalign_random_eagerrè   rD  rD   rë   r²  )rì   r  rQ  rœ  rE  r»   r   rJ  rb  r½  r  r  rB  rL  s     `       @@@@rn   Úinductor_randomrT  Ÿ  sú   ü€ ô ×%Ò%Ð%Ð%ØÐ$Ñ$Ð$Ð$ØˆTˆ7€DÜ�M‰M€EØ×%Ñ%Ó'€FÜ—‘Ø��tœR×.Ñ.×AÑAÀ$ÓGÐPVôç�lƒnð ð ×"Ñ"Ó$€Kä× Ò  V§[¡[°FÒ%:Ü1°&Ó9Ðó	ñ
 ˜kÓ*ˆ÷		ð 		ö	ô ×ÑØØØØ�ˆwô	€Fð ‡N�NÔØ€Mrp   rG  c               óf  ‡ ‡‡‡	— t         j                  rJ ‚g |¢}t        j                  }|j	                  «       }t        j                  |||t
        j                  j                  |«      |¬«      j                  «       Š|j                  «       Š	ˆˆ ˆˆ	fd„}t        j                  |||g |¢¬«      S )NrG  c           	     ó  •— t        j                   ‰g «      t        j                   ‰| «      t        j                  «      t        j
                  ‰t        j                  «      t        j
                  ‰t        j                  «      «      S rŸ   )rY   Ú	randint64rX  r„   r  Ú
value_exprrÅ  )r@  ÚhighÚlowr  r  s    €€€€rn   rb  z"inductor_randint.<locals>.inner_fné  sV   ø€ Ü�}‰}Ù˜‹OÜ�N‰N™: eÓ,¬e¯k©kÓ:Ü�N‰N˜3¤§¡Ó,Ü�N‰N˜4¤§¡Ó-ó	
ð 	
rp   rc  )r4   rë  r„   rÅ  rO  r6   r²  r  r  r  re  rD   rë   )
rZ  rY  rì   r  rœ  r»   r   rb  r  r  s
   ``      @@rn   Úinductor_randintr[  Ü  s£   û€ ô ×%Ò%Ð%Ð%ØˆTˆ7€DÜ�K‰K€EØ×%Ñ%Ó'€FÜ—‘Ø��tœR×.Ñ.×AÑAÀ$ÓGÐPVôç�lƒnð ð ×"Ñ"Ó$€K÷
ô ×ÑØØØØ�ˆwô	ð rp   c                ó®   — | j                  «       }| j                  «       }| j                  «       |d   | j                  «       j	                  «       |d   fS rW  )rÍ   r�  r±  r›  Ústorage_size)Útbrì   r³  s      rn   Ú_boundaries_helperr_  ù  sK   € Ø�;‰;‹=€DØ�]‰]‹_€Fà
�‰‹ØˆR‰Ø
�‰‹×$Ñ$Ó&Øˆr‰
ð	ð rp   c                óR   — t        t        j                  j                  | «      «      S rŸ   )rG   r6   rã  Úrealize_input©r^  s    rn   Ú _realize_bucketize_lookup_tensorrc    s   € ô ”R—_‘_×2Ñ2°2Ó6Ó7Ð7rp   c                óH   — | j                  «       | j                  «       d   fS rW  )r±  r�  rb  s    rn   Ú_sorter_helperre  
  s   € Ø�;‰;‹=˜"Ÿ-™-›/¨"Ñ-Ð-Ð-rp   c           
     óH  — | j                  «       }| j                  «       j                  t        d„ t	        |d d |d d «      D «       t
        j                  j                  «      z   }|s%t        |t
        j                  «      rt        |«      S t        j                  ||«      S )Nc              3  ó,   K  — | ]  \  }}||z  –— Œ y ­wrŸ   rü   )rò   r5  r|   s      rn   rô   z%_bucketize_indices.<locals>.<genexpr>  s   è ø€ Ò9‘4�1�aˆˆQ�Ñ9ùó   ‚rz  )r�  r›  rœ  Úsumr  rÀ   r/  re  rt   ÚIntegerr¸   rY   rX  )r^  r@  Úindex_dtypeÚstridesÚflattened_indexs        rn   Ú_bucketize_indicesrn    s   € ð �m‰m‹o€GØ—m‘m“o×,Ñ,¬sÙ9œ3˜w s¨˜|¨U°3°B¨ZÓ8Ô9¼5¿7¹7¿<¹<ó0ñ €Oñ ”Z ´·±Ô?Ü�?Ó#Ð#Ü�>‰>˜/¨;Ó7Ð7rp   ©Ú	out_int32ÚrightÚsideÚsorterc               ó6  ‡ ‡‡‡
‡— d„ } |‰ «      r ||«      r
‰�9 |‰«      s1 t        t        j                  j                  d¬«      ‰ ||‰|‰¬«      S |�|dk(  rdŠ|rt        j
                  nt        j                  Š
|j                  «       Št        ‰ «      Š ‰�t        ‰«      Št        ‰ j                  «       «      dk(  r
ˆ
ˆˆ ˆˆfd„}n	ˆ
ˆˆ ˆˆfd	„}|j                  «       }t        j                  |‰
||j                  ¬
«      }	|	j                  «        |	S )Nc                ó^   — t         j                  j                  | t        j                  «      S rŸ   )rZ   rf   r¯  r°  Ú	BUCKETIZErb  s    rn   rI  zsearchsorted.<locals>.<lambda>$  s    € ¤A§G¡G×$7Ñ$7Ø
ŒN×$Ñ$ó%€ rp   FrÑ  ro  rq  Tr3   c                ó¶   •—  ‰| «      }t        j                  |t        ‰«      t        ‰d‰«      ‰‰‰€d n
t	        ‰«      ‰€d ¬«      S t        ‰d‰«      ¬«      S )Nrü   ©rs  Úsorter_indices)rY   Ú	bucketizer_  rn  re  )r[  r;  rk  rq  Úsorted_sequencers  Úvalues_loaders     €€€€€rn   rb  zsearchsorted.<locals>.inner_fnG  sm   ø€ Ù Ó$ˆCÜ—=‘=ØÜ" ?Ó3Ü" ?°B¸ÓDØØØ%˜~‘t´>À&Ó3Ið �~ð ôð ô ,¨F°B¸ÓDôð rp   c                ó²   •‡ —  ‰‰ «      }dˆ ˆfd„}t        j                  |t        ‰«       |‰«      ‰‰‰€d n
t        ‰«      ‰€d ¬«      S  |‰«      ¬«      S )Nc                ó   •— t        | ‰‰«      S rŸ   )rn  )r^  r[  rk  s    €€rn   Úget_flattened_indexz;searchsorted.<locals>.inner_fn.<locals>.get_flattened_index^  s   ø€ Ü)¨"¨c°;Ó?Ð?rp   rx  )r^  rG   )rY   rz  r_  re  )r[  r;  r  rk  rq  r{  rs  r|  s   `  €€€€€rn   rb  zsearchsorted.<locals>.inner_fnY  si   ù€ Ù Ó$ˆCö@ô —=‘=ØÜ" ?Ó3Ù# OÓ4ØØØ%˜~‘t´>À&Ó3IØ'- ~˜tôð ñ <OÈvÓ;Vôð rp   rc  )rÖ  rä  Úsearchsortedr  r„   r  rÅ  re  rc  rÌ   rÍ   rw   rD   rë   rY  r²  )r{  Úselfrp  rq  rr  rs  Úvalidate_bucketizerb  r   r½  rk  r|  s   `  ` `    @@rn   r€  r€    s  ü€ ñÐñ ˜Ô/Ù! $Ô'ØÐÑ'9¸&Ô'AàTÔ¤× 1Ñ 1× 8Ñ 8ÈeÔTØØØØØØô
ð 	
ð Ð˜D GšOØˆá!*”%—+’+´·±€KØ×$Ñ$Ó&€Mô 7°ÓG€OàÐÜ1°&Ó9ˆä
ˆ?×#Ñ#Ó%Ó&¨!Ò+÷	ñ 	÷$	ð 	ð$ �_‰_Ó€FÜ×ÑØØØØ�z‰zô	€Fð ‡N�NÔà€Mrp   ©rp  rq  c               óx  ‡‡‡‡— t        ‰j                  «       «      dk(  sJ ‚t        j                  j	                  | t
        j                  «      r.t        j                  j	                  ‰t
        j                  «      s/ t        t        j                  j                  d¬«      | ‰|‰¬«      S t        ‰«      Š| j                  «       }| j                  «       Š|rt        j                  nt        j                   Šˆˆˆˆfd„}t#        j$                  |‰|| j                  «       ¬«      }|j'                  «        |S )Nr3   FrÑ  rƒ  c           	     ór   •—  ‰| «      }t        j                  |t        ‰«      t        ‰d‰«      ‰‰«      }|S )Nrü   )rY   rz  r_  rn  )r@  r;  r!  Ú
boundariesrk  ræ  rq  s      €€€€rn   rb  zbucketize.<locals>.inner_fn”  s?   ø€ Ù˜5Ó!ˆÜ—-‘-ØÜ˜zÓ*Ü˜z¨2¨{Ó;ØØó
ˆð ˆrp   rc  )rÌ   rÍ   rZ   rf   r¯  r°  rv  rÖ  rä  rz  r  rc  rw   re  r„   r  rÅ  rD   rë   r²  )	r¦  r†  rp  rq  r   rb  r½  rk  ræ  s	    ` `   @@rn   rz  rz  x  sõ   û€ ô ˆz×"Ñ"Ó$Ó%¨Ò*Ð*Ð*ô 	
�‰×Ñ˜E¤>×#;Ñ#;Ô<Ü�G‰G×Ñ 
¬N×,DÑ,DÔEàQÔ¤§¡× 5Ñ 5È5ÔQØ�:¨¸%ô
ð 	
ô 2°*Ó=€JØ×ÑÓ€FØ×$Ñ$Ó&€Lá!*”%—+’+´·±€K÷
ô ×ÑØØØØ�~‰~Óô	€Fð ‡N�NÔà€Mrp   c                ó�   — t        | t        j                  «      xr+ t        | t        j                  t        j                  f«       S rŸ   )rt   r6   r>   ÚNonTensorObjÚOpaqueMultiOutputrÃ   s    rn   Ú_is_tensor_irnoderŠ  ³  s:   € Ü�aœŸ™Ó#ò ¬JØ	ŒB�O‰OœR×1Ñ1Ð2ó-ð )ð rp   c                óz   — t        j                  t        t        j                  j
                  ||f«      \  }}||fS rŸ   )rk  Útree_map_onlyrŠ  r6   rã  Úrequire_stride1©r   r}   r   s      rn   Úrequire_denser�  ¹  s7   € Ü×'Ñ'Üœ2Ÿ?™?×:Ñ:¸TÀ6¸Nó�L€Dˆ&ð �ˆ<Ðrp   c                óz   — t        j                  t        t        j                  j
                  ||f«      \  }}||fS rŸ   )rk  rŒ  rŠ  r6   rã  Úrequire_contiguousrŽ  s      rn   r‘  r‘  À  s9   € Ü×'Ñ'ÜÜ
�‰×*Ñ*Ø	ˆvˆó�L€Dˆ&ð
 �ˆ<Ðrp   c                óz   — t        j                  t        t        j                  j
                  ||f«      \  }}||fS rŸ   )rk  rŒ  rŠ  r6   rã  r‘   rŽ  s      rn   r‘   r‘   É  s;   € ô ×'Ñ'ÜÜ
�‰×2Ñ2Ø	ˆvˆó�L€Dˆ&ð
 �ˆ<Ðrp   c                óz   — t        j                  t        t        j                  j
                  ||f«      \  }}||fS rŸ   )rk  rŒ  rŠ  r6   rã  rk  rŽ  s      rn   rk  rk  Ô  s9   € Ü×'Ñ'ÜÜ
�‰×-Ñ-Ø	ˆvˆó�L€Dˆ&ð
 �ˆ<Ðrp   c           	     ó´  — |€| S t        |t        «      st        |«      r| S t        | t        j                  «      r.t        j
                  j                  | |j                  «       «      S t        | t        «      r!| D �ci c]  }|t        | |   ||   «      “Œ c}S t        | t        t        f«      r" t        | «      d„ t        | |«      D «       «      S | S c c}w )Nc              3  ó:   K  — | ]  \  }}t        ||«      –— Œ y ­wrŸ   ©Úconstrain_to_fake_tensor)rò   ró   Úf_as      rn   rô   z+constrain_to_fake_tensor.<locals>.<genexpr>ç  s!   è ø€ ò 
Ù19°!°SÔ$ Q¨×,ñ
ùrc  )rt   r   r   r6   r>   rã  Úrequire_exact_stridesr³  r  r—  r¡   rr   rè   r  )rÔ   Úfake_argÚkeys      rn   r—  r—  Ý  sÂ   € ØÐØˆ
Ü�(Ô,Ô-´ÀÔ1JØˆ
Ü�#”r—y‘yÔ!Ü�‰×4Ñ4°S¸(¿/¹/Ó:KÓLÐLÜ�#”tÔØRUÖVÈ3�Ô-¨c°#©h¸À¹ÓFÑFÒVÐVÜ	�Cœ%¤˜Ô	'ØŒt�C‹yñ 
Ü=@ÀÀhÓ=Oô
ó 
ð 	
ð €Jùò Ws   Á>Cc           
     ó®   — t        d„ t        | |«      D «       «      } |j                  «       D ��ci c]  \  }}|t        |||   «      “Œ }}}| |fS c c}}w )Nc              3  ó:   K  — | ]  \  }}t        ||«      –— Œ y ­wrŸ   r–  )rò   rÔ   rš  s      rn   rô   z,constrain_to_fake_tensors.<locals>.<genexpr>î  s#   è ø€ ò áˆC�ô 	!  h×/ñùrc  )r¡   r  r  r—  )r}   r   Ú	fake_argsÚfake_kwargsrÿ   r  s         rn   r�   r�   í  sb   € Üñ ä   yÓ1ôó €Dð JPÏÉË×XÁÀÀAˆaÔ)¨!¨[¸©^Ó<Ñ<ÐX€FÑXØ�ˆ<Ðùó Ys   °Ac           
     óê   ‡‡— d„ Šˆˆfd„Št        ˆfd„t        || j                  «      D «       «      }|j                  «       D ��ci c]  \  }}| ‰|| j                  |   «      “Œ }}}||fS c c}}w )Nc                ó„   — t        | t        j                  j                  «      r| j                  j                  d«      S | S ©Nr;  )rt   r„   r^  r_  ri  rj  )Úfx_args    rn   Úget_fake_valz-constrain_to_fx_strides.<locals>.get_fake_val÷  s,   € Ü�fœeŸh™hŸm™mÔ,Ø—;‘;—?‘? 5Ó)Ð)Øˆrp   c           	     ó`  •—  ‰|«      }t        | «      r‚t        |t        j                  «      s| S t	        j
                  |j                  «       t        j                  j                  j                  «      }t        j                  j                  | |«      S t        | t        «      r0t        |t        «      s| S | D �ci c]  }| ‰| |   ||   «      “Œ c}S t        | t        t        f«      r<t        |t        t        f«      s| S  t!        | «      ˆfd„t#        | |«      D «       «      S | S c c}w )Nc              3  ó6   •K  — | ]  \  }} ‰||«      –— Œ y ­wrŸ   rü   )rò   ró   Úfx_aÚapply_constraints      €rn   rô   zDconstrain_to_fx_strides.<locals>.apply_constraint.<locals>.<genexpr>  s"   øè ø€ ò Ù.5¨a°Ñ   D×)ñùrU  )rŠ  rt   r„   r  r6   r,  r³  rZ   rf   ræ   rw  rã  r-  r  r¡   rr   rè   r  )rÔ   r£  Úfake_valr/  r›  r¨  r¤  s        €€rn   r¨  z1constrain_to_fx_strides.<locals>.apply_constraintü  s  ø€ Ù Ó'ˆÜ˜SÔ!Ü˜h¬¯©Ô5Ø�
Ü×.Ñ.Ø—‘Ó!¤1§7¡7×#3Ñ#3×#=Ñ#=óˆLô —?‘?×7Ñ7¸¸\ÓJÐJÜ�cœ4Ô Ü˜h¬Ô-Ø�
ØNQÖRÀs�CÑ)¨#¨c©(°H¸S±MÓBÑBÒRÐRÜ�cœE¤4˜=Ô)Ü˜h¬´¨Ô6Ø�
Ø”4˜“9ó Ü9<¸SÀ(Ó9Kôó ð ð ˆ
ùò Ss   Â=D+c              3  ó6   •K  — | ]  \  }} ‰||«      –— Œ y ­wrŸ   rü   )rò   rÔ   r£  r¨  s      €rn   rô   z*constrain_to_fx_strides.<locals>.<genexpr>  s"   øè ø€ ò Ù*5¨#¨vÑ˜˜f×%ñùrU  )r¡   r  r}   r  r   )Úfx_noder}   r   rÿ   r  r¨  r¤  s        @@rn   r“   r“   ö  sx   ù€ òõ
ô* ó Ü9<¸TÀ7Ç<Á<Ó9Pôó €Dð EKÇLÁLÃN×S¹D¸A¸qˆaÑ! ! W§^¡^°AÑ%6Ó7Ñ7ÐS€FÑSØ�ˆ<Ðùó Ts   Á!A/c                óH   — t         j                  s||fS t        | g|¢­i |¤ŽS rŸ   )r4   rë  r“   )r«  r}   r   s      rn   Ú*constrain_to_fx_strides_if_fallback_randomr­    s*   € Ü×!Ò!Ø�Vˆ|ÐÜ" 7Ð<¨TÒ<°VÑ<Ð<rp   c                ó  ‡ ‡‡— ˆˆ fd„Šˆ fd„Št        ˆfd„t        t        |‰ j                  «      «      D «       «      }|j	                  «       D ��ci c]  \  }}| ‰d|‰ j
                  |   «      “Œ }}}||fS c c}}w )zGApply stride constraints to SDPA inputs, ensuring dense last dimension.c           
     ó¬  •— t        |«      s|S |j                  d   }|j                  «       D �cg c]4  }t        |t        j
                  «      r|j                  j                  n|‘Œ6 }}t        j                  j                  j                  }t        j                  |j                  «       |«      }|r<|d   dk7  r4t        t        t!        t#        |j%                  «       «      «      «      «      }‰j&                  t(        j*                  j,                  k(  r| dv rt#        |«      dk(  sJ ‚d}d }t.        j0                  rd|j3                  «       }	t5        |«      |	|rt7        |«      nd f}|t        j                  j8                  v rt        j                  j8                  |   S  ‰| ||||«      }
|�|
t        j                  j8                  |<   |
S c c}w )Nr;  rz  r   )r   r¯   r®   )r­   r3   r1   r   )rŠ  ri  r³  rt   r„   ÚSymIntrl   ÚexprrZ   rf   ræ   rw  r6   r,  rr   r.  r  rÌ   rÍ   rj   rä  Ú0_scaled_dot_product_efficient_attention_backwardrÙ  r4   Úcache_sdpa_constraintÚmaybe_get_nameÚidr¡   Úsdpa_constraint_cache)r[  rÔ   r£  Úmeta_valr5  Úmeta_stride_exprrw  r/  Ú	cache_keyÚarg_namer½  Ú_apply_constraint_innerr«  s              €€rn   r¨  z)sdpa_constraint.<locals>.apply_constraint)  s˜  ø€ Ü  Ô%ØˆJà—;‘;˜uÑ%ˆàGOÇÁÓGXö
ØBCœ: a¬¯©Ô6ˆA�F‰F�KŠK¸AÑ=ð
Ðð 
ô —G‘G×$Ñ$×.Ñ.ˆ	Ü×*Ñ*¨8¯?©?Ó+<¸iÓHˆá˜L¨Ñ,°Ò1ä¤¬¬s°3·<±<³>Ó/BÓ)CÓ DÓEˆLð �N‰NÜ×DÑD×LÑLòMà�v‘ä�|Ó$¨Ò)Ð)Ð)ð
 (ˆLð ˆ	Ü×'Ò'Ø×)Ñ)Ó+ˆHä�3“ØÙ'3”�lÔ#¸ðˆIð
 œAŸG™G×9Ñ9Ñ9Ü—w‘w×4Ñ4°YÑ?Ð?á(Ø��hÐ 0°,ó
ˆð Ð Ø7=ŒA�G‰G×)Ñ)¨)Ñ4ØˆùòY
s   °9Gc                ó^  •‡— |j                   s,|j                  s t        j                  j	                  ||«      S dŠ‰j
                  t        j                  j                  j                  j                  k(  xr | dk(  }t        |t        «      sJ ‚t        |j                  «       «      dvr|S t        j                  |‰«      }|r3t        j                   t        j                  j#                  |«      |«      S t        |t$        «      rE|j'                  «       �5|r3t        j                   t        j                  j#                  |«      |«      S |�rºt)        |j                  «       «      }g }|j'                  «       }	t+        t        |j                  «       «      dz
  «      D ]q  }
t,        j.                  j0                  j3                  ||
   d«      s1|	€Œ3t,        j.                  j0                  j3                  |	|
   d«      sŒa|j5                  |
«       Œs dgt        |«      z  }d|d<   d}t+        t        |«      dz
  dd«      D ]¤  }
||
dz      dk7  r|||
dz      z  }|
|v r@t,        j.                  j0                  j3                  t7        ||
dz      ‰«      d«      rd||
<   Œ]t,        j.                  j0                  j3                  t7        |‰«      d«      st9        |‰«      ‰z  }|||
<   Œ¦ t        j                  j;                  ||«      S |r3t        j                   t        j                  j#                  |«      |«      S t        |t$        «      rE|j'                  «       �5|r3t        j                   t        j                  j#                  |«      |«      S ˆfd„}t        |j<                  t        j>                  «      rQ ||«      sI ||jA                  «       «      r3t        j                   t        j                  j#                  |«      |«      S t        j                  j	                  ||«      S )	Nr²   r­   ©r­   r®   r3   r   rz  r1   c                óÖ   •— | j                  «       }t        |«      dk(  ryt        j                  j                  j                  t        j                  t        |d   ‰«      d«      «      S )Nr   Frz  )	rÍ   rÌ   rZ   rf   ræ   r1  rÀ   r2  r/   )r¨   rì   Ú	ALIGNMENTs     €rn   Ú
is_alignedzDsdpa_constraint.<locals>._apply_constraint_inner.<locals>.is_aligned´  sR   ø€ Ø—:‘:“<ˆDÜ�4‹y˜AŠ~ØÜ—7‘7×#Ñ#×2Ñ2Ü—‘œ˜T "™X yÓ1°1Ó5óð rp   )!Úis_cudaÚis_xpur6   rã  r-  rj   r„   rY   rä  Ú'_scaled_dot_product_efficient_attentionrÙ  rt   rG   rÌ   rÍ   Úis_aligned_realized_tensorÚtry_match_insignificant_stridesra  r>   Úmaybe_get_striderr   r  rZ   rf   ræ   r–  rx   r/   rJ   r™  rv   r:   r¬  )r[  rÔ   r·  r¸  r/  Úeffn_attn_fwd_biasÚis_aligned_tensorr­  Úexpanded_dimsÚmaybe_strider|   Úout_stridesr³  rÀ  r¿  r«  s                 @€rn   r»  z0sdpa_constraint.<locals>._apply_constraint_inner\  sš  ù€ Ø× Ò  H§O¢OÜ—?‘?×7Ñ7¸¸\ÓJÐJð ˆ	ð �N‰NÜ�y‰y�~‰~×EÑE×MÑMñNò à�q‘ð 	ô ˜#œyÔ)Ð)Ð)Üˆs�|‰|‹~Ó fÑ,ØˆJä×9Ñ9¸#¸yÓIÐÙÜ×5Ñ5Ü—‘×-Ñ-¨cÓ2Ð4Dóð ô
 �sœFÔ#Ø×$Ñ$Ó&Ð2Ù!ä×5Ñ5Ü—‘×-Ñ-¨cÓ2Ð4Dóð ò Ü˜CŸL™L›NÓ+ˆHàˆMð ×/Ñ/Ó1ˆLÜœ3˜sŸ|™|›~Ó.°Ñ2Ó3ò ,�Ü—7‘7×#Ñ#×;Ñ;Ð<LÈQÑ<OÐQRÔSØ Ñ,ÜŸ™×(Ñ(×@Ñ@ÀÈaÁÐRSÕTà!×(Ñ(¨Õ+ð,ð ˜$¤ X£Ñ.ˆKØˆK˜‰OØˆFÜœ3˜x›=¨1Ñ,¨b°"Ó5ò (�Ø˜q 1™uÑ%¨Ò*Ø# h¨q°1©u¡oÑ5�Fð ˜Ñ%Ü—w‘w×'Ñ'×?Ñ?Ü˜K¨¨A©Ñ.°	Ó:¸Aôð *+˜ A™Ø ä—w‘w×'Ñ'×?Ñ?Ü˜ 	Ó*¨Aôô % V¨YÓ7¸)ÑC�Fà!'�˜A’ð%(ô( —?‘?×8Ñ8¸¸kÓJÐJáÜ×5Ñ5Ü—‘×-Ñ-¨cÓ2Ð4Dóð ô
 �sœFÔ#Ø×$Ñ$Ó&Ð2Ù!ä×5Ñ5Ü—‘×-Ñ-¨cÓ2Ð4Dóð ô	ô �c—h‘h¤§¡Ô,Ù˜c”?Ù˜cŸo™oÓ/Ô0Ü×=Ñ=ÜŸ™×5Ñ5°cÓ:Ð<Lóð ô �‰×3Ñ3°C¸ÓFÐFrp   c              3  ó>   •K  — | ]  \  }\  }} ‰|||«      –— Œ y ­wrŸ   rü   )rò   r[  rÔ   r£  r¨  s       €rn   rô   z"sdpa_constraint.<locals>.<genexpr>Å  s*   øè ø€ ò áˆC‘�#�vñ 	˜˜c 6×*ñùs   ƒrz  )r¡   rs   r  r}   r  r   )r«  r}   r   rÿ   r  r»  r¨  s   `    @@rn   Úsdpa_constraintrÍ  &  sƒ   ú€ õ1ôfgGôR ó ä"+¬C°°g·l±lÓ,CÓ"Dôó €Dð IOÏÉË×WÁÀÀ1ˆaÑ! " a¨¯©¸Ñ):Ó;Ñ;ÐW€FÑWØ�ˆ<Ðùó Xs   Á"A<)rÇ  c                ót  — t        |t        j                  «      s*t        || j	                  «       | j                  «       ¬«      }|}| j                  «       |j                  «       k7  rt        || j                  «       «      }| j	                  «       |j	                  «       k7  rt        || j	                  «       «      }| j                  «       |j                  «       k7  r&t        || j                  «       «      }t        |«      }nt        |«      }| j                  «       }|�|j                  rt        |«       |S ©Nr`  )rt   r6   r>   rF  r¿   rw   rñ  rø   rÍ   r3  rÀ  rš  Ú	is_pinnedÚ_realize_as_pinned)r�  r�  rï  r¨   rz   r½  Úself_layouts          rn   rÁ  rÁ  ´  sã   € ä�cœ2Ÿ9™9Ô%Ü�S §¡Ó 0¸¿¹Ó9JÔKˆØ€AØ‡�Ó˜CŸN™NÓ,Ò,Ü�a˜Ÿ™Ó*Ó+ˆØ‡~�~Ó˜3Ÿ=™=›?Ò*Ü�Q˜Ÿ™Ó(Ó)ˆà‡}�}ƒ˜#Ÿ,™,›.Ò(Ü�Q˜Ÿ™›Ó(ˆÜ�s“‰ä�q“ˆà×'Ñ'Ó)€KØÐ ;×#8Ò#8Ü˜6Ô"Ø€Mrp   )Úmemory_formatc          	     ó¶   — t        j                  | j                  «       | j                  «       | j	                  «       t        | j                  «       «      ¬«      S ©Nrc  )rD   rë   rw   r¿   re  rr   rÍ   )r¨   rÓ  s     rn   rÀ  rÀ  Ê  s@   € ô
 ×ÑØ�|‰|‹~Ø�k‰k‹mØ—‘“Ü�A—J‘J“LÓ!ô	ð rp   c                óv   — | j                  «        d| j                  j                  j                  «       _        y r¾   )r²  rv   r›  rÐ  )r½  s    rn   rÑ  rÑ  ×  s'   € Ø
‡N�NÔØ.2€F‡K�K×Ñ×ÑÓ!Õ+rp   c                óð  — g }t        | t        «      r›t        | j                  t        j                  «      rw| j                  } t        | t        j                  «      rF|j                  | j                  «       «       | j                  } t        | t        j                  «      rŒFt        | «      } t        | «      } |r;| j                  } |d d d…   D ]  }t        j                  | |¬«      } Œ t        | «      } | S )Nrz  rª  )rt   rG   rv   r6   rå   rx   r›  rÀ  )r¨   Úreinterpret_view_layoutsr«  s      rn   Úclone_preserve_reinterpret_viewrÙ  Ü  sÅ   € Ø!ÐÜ�!”YÔ¤J¨q¯v©v´r×7IÑ7IÔ$JØ�F‰Fˆä˜œB×.Ñ.Ô/Ø$×+Ñ+¨A¯L©L«NÔ;Ø—‘ˆAô ˜œB×.Ñ.Õ/ô �a‹Lˆäˆa‹€AáØ�F‰FˆØ.©t°¨tÑ4ò 	:ˆFÜ×"Ñ"¨°&Ô9‰Að	:ä�a‹Lˆà€Hrp   c                ón   — t        | «      }| j                  «       }|�|j                  rt        |«       |S rŸ   )rÀ  rš  rÐ  rÑ  )r¨   r½  Úinput_layouts      rn   rÞ  rÞ  ñ  s6   € Ü�1‹X€FØ×%Ñ%Ó'€LØÐ L×$:Ò$:ô 	˜6Ô"Ø€Mrp   rÞ  c               ó\   ‡‡‡— ˆˆˆfd„}t        j                  t        |«      ‰|| g¬«      S )Nc                óD   •— t        j                  ‰| d   z  ‰z   ‰¬«      S )Nr   rº   ©rY   rX  )r@  r»   r|  r~  s    €€€rn   rˆ   ziota.<locals>.fn	  s!   ø€ Ü�~‰~˜d U¨1¡X™o°Ñ5¸UÔCÐCrp   rc  )rD   rë   rL   )Úlengthr|  r~  r»   r   Úrequires_gradrˆ   s    ```   rn   Úiotará  ÿ  s1   ú€ öDô ×ÑÜ˜VÓ$ØØØˆxô	ð rp   )r»   r   r«  r#  rà  c               ó^   — |€J ‚t        || z
  |«      }t        || |||�||¬«      S d|¬«      S )Nrä   ©r|  r~  r»   r   rà  )rJ   rá  )	r|  r}  r~  r»   r   r«  r#  rà  rß  s	            rn   Úarange_start_steprä    sV   € ð ÐÐÐÜ�S˜5‘[ $Ó'€FÜØØØØØÐ+ˆvØ#ôð ð
 27Ø#ôð rp   c           	     óÎ  ‡‡‡‡— t        || j                  «       «      }| j                  «       Št        | ‰d«      Št        j
                  j                  j                  t        j                  ‰d«      «      r‰| j                  «       ‰   z   Šnjt        j
                  j                  j                  t        j                  ‰d«      «      rn, t        t        j                  j                  «      | |‰‰«      S t        j
                  j                  j!                  d‰«       t        j
                  j                  j#                  ‰| j                  «       ‰   «       t%        t'        |‰«      | j                  «       «      }|j                  «       Šˆˆˆˆfd„}t)        j*                  | j-                  «       | j                  «       |t/        | j                  «       «      ¬«      S )Nr   c           	     ó   •— t        j                  t        j                  t        j                  | ‰   t        j
                  «      t        j                  ‰t        j
                  «      «       ‰| «       ‰| «      «      S rŸ   )rY   r  ÚeqrX  r„   r  )r[  rÐ   r@  Ú
src_loaderrh  s    €€€€rn   rb  z select_scatter.<locals>.inner_fn>  sX   ø€ Ü�y‰yÜ�F‰FÜ—‘˜s 3™x¬¯©Ó5Ü—‘˜u¤e§k¡kÓ2óñ �s‹OÙ�S‹Mó
ð 	
rp   rc  )rø   r¿   re  r“  rZ   rf   ræ   r1  rÀ   rŒ  rÍ   rŠ  rÖ  rä  Úselect_scatterrÙ  r§  r¨  r3  rX  rD   rë   rw   rr   )r¨   r�  rÐ   r@  rb  rè  rh  s     `` @@rn   ré  ré  ,  sT  û€ ä
�3˜Ÿ™›Ó
&€CØ�}‰}‹€HÜ
˜˜3 Ó
"€CÜ‡w�w×Ñ×&Ñ&¤u§x¡x°°qÓ'9Ô:Ø˜Ÿ
™
› SÑ)Ñ)‰Ü	
�‰×	Ñ	×	(Ñ	(¬¯©°%¸Ó);Ô	<Øð =Ô¤× 3Ñ 3× ;Ñ ;Ó<¸QÀÀSÈ%ÓPÐPä‡G�G×Ñ×Ñ˜q %Ô(Ü‡G�G×Ñ×Ñ˜e Q§Z¡Z£\°#Ñ%6Ô7Ü
”˜3 Ó$ a§j¡j£lÓ
3€CØ—‘Ó"€J÷
ô ×ÑØ�|‰|‹~Ø�k‰k‹mØÜ�A—J‘J“LÓ!ô	ð rp   c           	     ó:  ‡ ‡‡‡‡‡‡	‡
— t        |‰ j                  «       «      }‰ j                  «       Š
t        ‰ ‰d«      Š‰ j	                  «       ‰   Št
        j                  j                  ‰ ‰‰‰«      \  ŠŠt        ‰ j	                  «       «      }t        ‰‰z
  ‰dz
  z   ‰«      |‰<   t        ||«      }|j                  «       Š	ˆˆˆˆ	ˆˆˆ ˆ
fd„}t        j                  ‰ j                  «       ‰ j                  «       |t        ‰ j	                  «       «      ¬«      S )Nr   r3   c                ó  •‡— ‰	dk(  r‰‰k(  r‰
dk(  r ‰| «      S t        j                  | ‰   t        j                  «      }t	        | «      Št        | ‰   ‰	z
  ‰
«      ‰‰<   g }‰	dk7  rZ|j                  t        j                  |t        j                  t        j                  ‰	«      t        j                  «      «      «       ‰‰k7  rZ|j                  t        j                  |t        j                  t        j                  ‰«      t        j                  «      «      «       ‰
dk7  rz|j                  t        j                  t        j                  t        | ‰   ‰	z
  d‰
«      t        j                  «      t        j                  dt        j                  «      «      «       |sJ ‚t        j                  t         j                   |«      }t        j"                  |ˆˆfd„t%        ‰«      rdnd«      }t        j&                  || ‰| «      «      S )Nr   r3   c                 ó   •—  ‰‰ «      S rŸ   rü   )Úsrc_idxrè  s   €€rn   rI  z1slice_scatter.<locals>.inner_fn.<locals>.<lambda>„  s   ø€ ‘J˜wÓ'€ rp   rÄ  )rY   rX  r„   rÅ  rr   r+   rx   rÆ  rÀ   r3  rÇ  rç  r0   rY  r  r'  rÈ  rÉ  rÄ   r  )r[  rÊ  rÏ  Úsrc_valrí  rÐ   r«  r}  rè  r|  r~  r¨   rh  s       @€€€€€€€€rn   rb  zslice_scatter.<locals>.inner_fn_  s–  ù€ Ø�AŠ:˜# š/¨d°aªiá˜c“?Ð"ä—.‘.  S¡¬5¯;©;Ó7ˆÜ�s“)ˆÜ  C¡¨5Ñ 0°$Ó7ˆ�‰àˆØ�AŠ:Ø�K‰KÜ—‘ØÜ—N‘N¤5§<¡<°Ó#6¼¿¹ÓDóôð �(Š?Ø�K‰KÜ—‘ØÜ—N‘N¤5§<¡<°Ó#4´e·k±kÓBóôð �1Š9Ø�K‰KÜ—‘Ü—N‘NÜ'¨¨C©°5Ñ(8¸!¸TÓBÄEÇKÁKóô —L‘L ¤E§K¡KÓ0ó	ôñ ˆˆtÜ×Ñ¤§¡¨$Ó/ˆÜ—*‘*ØÜ'Ü  Ô#‰A¨ó
ˆô
 �y‰yØØÙ�S‹Mó
ð 	
rp   rc  )rø   r¿   re  r“  rÍ   r6   r™  Únormalize_start_endrr   r+   r3  rD   rë   rw   )r¨   r�  rÐ   r|  r}  r~  Úsrc_sizerb  r«  rè  rh  s   ` ````  @@@rn   Úslice_scatterrñ  P  sæ   ÿ€ ä
�3˜Ÿ™›Ó
&€CØ�}‰}‹€HÜ
˜˜3 Ó
"€CØ�z‰z‹|˜CÑ €Hô —‘×1Ñ1°!°S¸%ÀÓE�J€Eˆ3ä�A—J‘J“LÓ!€HÜ˜S 5™[¨D°1©HÑ5°tÓ<€HˆS�MÜ
��hÓ
€CØ—‘Ó"€J÷,
ó ,
ô\ ×ÑØ�|‰|‹~Ø�k‰k‹mØÜ�A—J‘J“LÓ!ô	ð rp   c                ój   — t        | t        t        f«      rt        | «      dkD  rt	        | d   «      S | S r  )rt   rr   r¡   rÌ   Ú_unwraprÃ   s    rn   ró  ró  •  s-   € Ü�!”dœE�]Ô#¬¨A«°ª
Ü�q˜‘t‹}ÐØ€Hrp   ©r»   r   r«  r#  c          	     óB  ‡ ‡— |t         j                  k(  rt         j                  }t        |d t         j                  fv d|› �«       t	        t        ‰ «      t        «      r‰xs t         j                  Šn‰xs t        j                  «       Šg }t	        ‰ t        j                  «      rˆ ˆfd„}nÀt	        ‰ t        t        f«      rˆ ˆfd„}n£t        ‰ «      dk(  s't	        ‰ d   t        t        f«      rBt        ‰ «      dk  r4|j                  t        j                  t        ‰ «      «      «       ˆ ˆfd„}n:t        j                   j#                  t        j$                  ‰ ‰||xs d¬«      «      S t'        j(                  t+        |«      ‰||¬	«      }|rt-        |«       |S )
Núlayout=c                ó0   •— t        j                  ‰‰«      S rŸ   rÞ  ©r@  rv   r»   s    €€rn   rb  ztensor.<locals>.inner_fnª  s   ø€ Ü—>‘> $¨Ó.Ð.rp   c                ó0   •— t        j                  ‰‰«      S rŸ   ©rY   rY  rø  s    €€rn   rb  ztensor.<locals>.inner_fn¯  s   ø€ Ü—<‘<  eÓ,Ð,rp   r   r²   c                ó„   •‡ ‡— ˆˆˆˆ fd„Št        ‰«      dk(  rt        j                  d‰«      S  ‰dt        ‰«      «      S )Nc           	     ój  •— | |k  sJ ‚|| z
  dk(  rt        j                  ‰|    ‰«      S || z
  dz  | z   }t        j                  t        j                  t        j                  ‰d   t
        j                  «      t        j                  |t
        j                  «      «       ‰| |«       ‰||«      «      S )Nr3   r1   r   )rY   rY  r  rÇ  rX  r„   rÅ  )r|  r}  ÚmidÚbinary_searchrv   r»   r@  s      €€€€rn   rþ  z/tensor.<locals>.inner_fn.<locals>.binary_search·  sž   ø€ Ø˜s’{Ð"�{Ø˜‘; !Ò#ÜŸ<™<¨¨U©°UÓ;Ð;Ø˜U‘{ qÑ(¨5Ñ0�Ü—y‘yÜ—F‘FÜŸ™ u¨Q¡x´·±Ó=ÜŸ™ S¬%¯+©+Ó6óñ " %¨Ó-Ù! # sÓ+óð rp   r   )rÌ   rY   rY  )r@  rþ  rv   r»   s   `@€€rn   rb  ztensor.<locals>.inner_fn¶  s7   ú€ ÷ô �4‹y˜AŠ~Ü—|‘| A uÓ-Ð-Ù  ¤C¨£IÓ.Ð.rp   F)r»   r   r#  rc  )r„   ÚjaggedÚstridedr�   rt   ró  r¸   rÅ  Úget_default_dtyperÀ   rË   r;  rÌ   rx   rj  rZ   rf   Úadd_tensor_constantrF  rD   rë   rL   rÑ  )rv   r»   r   r«  r#  rd  rb  r½  s   ``      rn   rF  rF  ›  sC  ù€ ð ”—‘ÒÜ—‘ˆÜˆv˜$¤§¡Ð.Ð.°'¸&¸Ð0BÔCÜ”'˜$“-¤Ô%ØÒ$œŸ™‰àÒ2œ×0Ñ0Ó2ˆà!€Fä�$œŸ™Ô$ö	/ô 
�Dœ5¤#˜,Ô	'ö	-ô 
ˆT‹�aŠœ: d¨1¡g´´s¨|Ô<ÄÀTÃÈaÂà�‰”e—m‘m¤C¨£IÓ.Ô/ö	/ô( �w‰w×*Ñ*Ü�L‰LØ˜E¨&¸ZÒ=PÈ5ôó
ð 	
ô ×ÑÜ˜VÓ$ØØØô	€Fñ Ü˜6Ô"Ø€Mrp   c                óz   — t        | t        «      r|�t        | |«      } |�t        | |«      } | S t	        | ||¬«      S rÏ  )rt   rG   rø   rñ  rF  )rv   r»   r   s      rn   Ú	as_tensorr  Û  sD   € ä�$œ	Ô"ØÐÜ˜D %Ó(ˆDØÐÜ˜T 6Ó*ˆDØˆÜ�$˜e¨FÔ3Ð3rp   c                ó8   — t        | t        j                  ¬«      S rE  rù  )rv   s    rn   Úlong_tensorr  æ  s   € ä�$œeŸk™kÔ*Ð*rp   c                óî  — t        t        j                  j                  j                  t        j                  j
                  j                  d   «      }|€J ‚t        |«      dk(  sJ |«       ‚t        t        |j                  «       «      «      \  }}t        j                  ||| «      }t        j                  j                  |«      |_        t        j                  j                  |«       t        j                  j
                  j                  d   }t!        |t"        j$                  t"        j&                  t"        j(                  f«      r|j*                  j,                  S t/        j0                  |«      S )Nrs  r3   r;  )r'   rZ   rf   ræ   rw  rg   ri  rÌ   rL  r’  r  r6   ÚDynamicScalarrz  rà   r{  rt   r„   r°  ÚSymFloatÚSymBoolrl   r±  rÀ   r´  )rv   rs  Úbinding_symrƒ  r—  r;  s         rn   Ú_local_scalar_denser  ë  s  € ô 2Ü	�‰×Ñ×"Ñ"¤A§G¡G×$8Ñ$8×$=Ñ$=Ð>QÑ$RóÐð Ð(Ð(Ð(ÜÐ Ó! QÒ&Ð9Ð(9Ó9Ð&ô   ¤Ð%6×%<Ñ%<Ó%>Ó ?Ó@Ñ€K�Ü×Ñ˜k¨7°DÓ9€FÜ—'‘'×)Ñ)¨&Ó1€F„KÜ‡G�G×Ñ˜vÔ&ô �'‰'×
Ñ
×
#Ñ
# EÑ
*€CÜ�#œŸ™¤e§n¡n´e·m±mÐDÔEØ�x‰x�}‰}Ðä�}‰}˜SÓ!Ð!rp   c                 ó   — y rŸ   rü   )rv   rœ   s     rn   Ú_assert_scalarr    s   € ð rp   )r   r«  c                ó   — y rŸ   rü   )ró   rì   r³  r»   r   r«  s         rn   Ú_assert_tensor_metadatar  "  s   € ð rp   c                óŽ  ‡‡‡— | Št        | t        t        f«      st        ‰d«      r‰j                  Št        ‰t        t        f«      rˆˆfd„}nTt        ‰t
        j                  «      rˆˆfd„}n3t        ‰j                  «       «      dk(  sJ ‚‰j                  «       Šˆfd„}t        j                  |‰|t        |«      ¬«      S )Nr÷   c                ó0   •— t        j                  ‰‰«      S rŸ   rú  ©r@  r»   r÷   s    €€rn   rb  z_full.<locals>.inner_fn0  s   ø€ Ü—<‘<  uÓ-Ð-rp   c                ó0   •— t        j                  ‰‰«      S rŸ   rÞ  r  s    €€rn   rb  z_full.<locals>.inner_fn5  s   ø€ Ü—>‘> %¨Ó/Ð/rp   r   c                ó   •—  ‰g «      S rŸ   rü   )r@  Úvalue_loaders    €rn   rb  z_full.<locals>.inner_fn<  s   ø€ Ù Ó#Ð#rp   rc  )rt   r¸   r;  rñ   r÷   rÀ   rË   rÌ   rÍ   re  rD   rë   rr   )Ú
fill_valuer   r»   rì   rb  r÷   r  s     `  @@rn   Ú_fullr  )  s¤   ú€ Ø€EÜ�j¤3¬ ,Ô/´G¸EÀ7Ô4KØ—‘ˆä�%œ#œu˜Ô&ö	.ô 
�Eœ5Ÿ;™;Ô	'ö	0ô �5—>‘>Ó#Ó$¨Ò)Ð)Ð)Ø×(Ñ(Ó*ˆô	$ô ×ÑØØØÜ�D‹zô	ð rp   c                ó8   —  t        t        |«      «      | fi |¤ŽS rŸ   ©Úcreate_tensor_likeÚtensor_constructor)r¨   r  r   s      rn   r@  r@  G  s    € Ø=ÔÔ0°Ó<Ó=¸aÑJÀ6ÑJÐJrp   c                ó    ‡ — d d d dd dœˆ fd„
}|S )NF©r»   r   r«  r#  rÓ  c                ó  •— t        |d t        j                  fv d|› �«       t        | d«       t        |«      }| xs t        j                  «       } t        |«      dk(  r6t        |d   t        t        t        j                  f«      rt        |d   «      }|D ]  }t        |t        j                  «      sŒJ ‚ |D �cg c]  }t        j                  |«      ‘Œ }}t        ‰t        |«      | |«      }|rt        |«       |S c c}w )Nrö  rÓ  r3   r   )r�   r„   r   rL   r  rÌ   rt   rr   r¡   ÚSizer°  rÀ   r3  r  rÑ  )	r»   r   r«  r#  rÓ  rì   r5  Úfull_pointwiser  s	           €rn   r–  z!tensor_constructor.<locals>.innerM  sé   ø€ ô 	�6˜d¤E§M¡MÐ2Ð2°g¸f¸XÐ4FÔGÜ�}Ð$ oÔ6Ü˜vÓ&ˆØÒ2œ×0Ñ0Ó2ˆÜˆt‹9˜Š>œj¨¨a©´4¼ÄÇ
Á
Ð2KÔLÜ˜˜a™“>ˆDð ò 	3ˆAÜ! !¤U§\¡\Õ2Ð2Ð2ð	3à)-Ö. A”—‘˜Q•Ð.ˆÐ.Ü˜z¬=¸Ó+@À%ÈÓNˆáÜ˜~Ô.àÐùò /s   Â>Drü   )r  r–  s   ` rn   r  r  K  s    ø€ ð ØØØØöð4 €Lrp   )r»   r«  r   r#  rÓ  c                óÂ   — t        |«      }t        |«      dk(  r6t        |d   t        t        t
        j                  f«      rt	        |d   «      }t        |d | |||¬«      S )Nr3   r   ©r»   r«  r   r#  )rL   rÌ   rt   rr   r¡   r„   r   Úempty_strided)r»   r«  r   r#  rÓ  rì   s         rn   ri  ri  j  sX   € ô ˜6Ó"€FÜ
ˆ4ƒy�A‚~œ* T¨!¡W¬t´U¼E¿J¹JÐ.GÔHÜ�T˜!‘W‹~ˆÜØˆd˜%¨°vÈ*ôð rp   c                ó    ‡ — ddddddœˆ fd„
}|S )zZ
    Shim to convert X_like(...) into X(...).  For example zeros_like() into zeros().
    NFr  c               ó  •— t        | d«       t        |d t        j                  fv d|› �«       |€| j                  «       }nt	        |«      }|xs | j                  «       }t        | j                  «       «      } ‰|||||¬«      S )Nr#  rö  rô  )r�   r„   r   r¿   r¼   rw   rr   rÍ   )r¨   r»   r   r«  r#  rÓ  rì   Úcreation_fns          €rn   Ú_constant_likez*create_tensor_like.<locals>._constant_like€  s‚   ø€ ô 	�z�> <Ô0Ü�6˜d¤E§M¡MÐ2Ð2°g¸f¸XÐ4FÔGØˆ=Ø—K‘K“M‰Eä  Ó'ˆEØÒ)˜1Ÿ<™<›>ˆÜ�A—J‘J“LÓ!ˆÙØ˜ f°VÈ
ô
ð 	
rp   rü   )r'  r(  s   ` rn   r  r  {  s   ø€ ð  ¨d¸uÐTXö
ð Ðrp   c                ó*   — t        t        | «      «      S rŸ   r  )r  s    rn   r   r   ’  s   € ÜÔ0°Ó<Ó=Ð=rp   c                ó   ‡ — d d d d dœˆ fd„
}|S )Nr#  c               ón  •— t        |t        t        f«      sJ ‚t        | d«       t        |d t        j
                  fv d|› �«       t        |«      xs | j                  «       }|xs | j                  «       }|D �cg c]  }t        j                  |«      ‘Œ }}t        ‰t        |«      ||«      S c c}w )Nr#  rö  )rt   rr   r¡   r�   r„   r   r¼   r¿   rw   rÀ   rj  r  rL   )r¨   rì   r»   r«  r   r#  r5  r  s          €rn   Ú_new_constantz#new_constant.<locals>._new_constantœ  s    ø€ ô ˜$¤¤u Ô.Ð.Ð.Ü�z�> <Ô0Ü�6˜d¤E§M¡MÐ2Ð2°g¸f¸XÐ4FÔGä˜UÓ#Ò4 q§{¡{£}ˆØÒ)˜1Ÿ<™<›>ˆØ*.Ö/ Q”—‘˜aÕ Ð/ˆÐ/Ü�Z¤¨vÓ!6¸¸tÓDÐDùò 0s   Á=B2rü   )r  r,  s   ` rn   Únew_constantr-  ›  s   ø€ à t°DÀTö
Eð Ðrp   r#  c          	     ó~   — |€| j                  «       }|€| j                  «       }t        |d ||t        |«      |¬«      S ©Nr#  ©r¿   rw   r$  rL   )r¨   rì   r»   r«  r   r#  s         rn   Ú	new_emptyr1  «  sF   € à€}Ø—‘“ˆØ€~Ø—‘“ˆÜØØØØÜ˜VÓ$Øôð rp   c               óˆ  — t        | t        t        f«      sJ ‚t        |t        t        t        d «      f«      sJ ‚t	        |d t
        j                  fv d|› �«       t        |«      xs t        j                  «       }|xs t        j                  d«      j                  }t        |«      }t        d||| ¬«      }|j                  «        |j                  j                  }t        j                   |j                  dgt#        | «      z  ¬«      |_        t        |t$        j&                  «      sJ ‚| D �cg c]  }t)        j*                  |«      ‘Œ } }|r#|D �cg c]  }t)        j*                  |«      ‘Œ c}nt$        j,                  j/                  | «      }t%        j0                  ||| ||xs d¬«      |_        |S c c}w c c}w )Nrö  rÄ  r   )r  r   r»   rì   )rd  F)r   r»   rì   r³  rÐ  )rt   rr   r¡   rè   r�   r„   r   r¼   r  rF  r   rL   r  r²  rv   ÚdataclassesÚreplacerÌ   r6   rð  rÀ   r3  r  r  r²  r«  )	rì   r³  r»   r«  r   r#  Ú	pointwiser—  r5  s	            rn   r$  r$  »  sw  € ô �dœT¤5˜MÔ*Ð*Ð*Ü�fœt¤U¬D°«JÐ7Ô8Ð8Ð8Üˆv˜$¤§¡Ð.Ð.°'¸&¸Ð0BÔCä˜ÓÒ<¤5×#:Ñ#:Ó#<€EØÒ/”u—|‘| CÓ(×/Ñ/€FÜ˜6Ó"€FÜ ¨6¸ÀTÔJ€IØ×ÑÔØ�^‰^× Ñ €Fä×%Ñ% f§k¡k¸1¸#ÄÀDÃ	¹/ÔJ€F„KÜ�fœb×/Ñ/Ô0Ð0Ð0Ø%)Ö* ŒE�L‰L˜�OÐ*€DÐ*ñ ð #)Ö)˜QŒ�‰�a�Ó)ä×Ñ×1Ñ1°$Ó7ð ô
 —N‘NØØØØØÒ% ô€F„Mð Ðùò +ùâ)s   Ä3F:ÅF?c          	     ó~   — |€| j                  «       }|€| j                  «       }t        ||||t        |«      |¬«      S r/  r0  )r¨   rì   r³  r»   r«  r   r#  s          rn   Únew_empty_stridedr7  Ü  sH   € ð €}Ø—‘“ˆØ€~Ø—‘“ˆÜØØØØÜ˜VÓ$Øôð rp   c                óæ   — t         j                  j                  j                  |«      }t	        t        t        |«      «      |j                  ¬«      }t        j                  j                  | |«      S )N)r›  )rZ   rf   ræ   rç   Úsortedr  rÌ   Ú__getitem__r6   rã  r-  )r¨   r³  r/  s      rn   Úcopy_stridedr;  î  sN   € ä�W‰W×Ñ×5Ñ5°fÓ=€FÜœ%¤ F£Ó,°&×2DÑ2DÔE€LÜ�?‰?×/Ñ/°°<Ó@Ð@rp   c                óV   — |j                  d«      €J d«       ‚ t        |«      | fi |¤ŽS )Nr»   z(dtype should be handled by decomposition)rj  r  )rì   r  r   s      rn   Úfullr=  õ  s5   € à�:‰:�gÓÐ*ÐVÐ,VÓVÐ*Ø)Ô˜jÓ)¨$Ñ9°&Ñ9Ð9rp   c                óØ  ‡‡‡‡— t        | t        «      sJ ‚|j                  «       dk(  rt        | |j	                  «       «      S | j	                  «       Št        ‰«      dk(  }t        | ‰|«      Š|rt        | dg«      } dgŠ| j                  «       Š|j                  «       Šˆˆˆˆfd„}t        j                  | j                  «       | j                  «       ||j	                  «       ¬«      S )Nr   r3   c                óš   •— t        | «      } t        j                   ‰| «      ‰‰   d¬«      }t        | «      dk(  r|g} n|| ‰<    ‰| «      S )NF©Úwrap_negr   )rr   rY   Úindirect_indexingrÌ   )r[  Ú
gather_idxrÐ   Úindex_loaderrì   rh  s     €€€€rn   rˆ   zgather.<locals>.fn  sO   ø€ Ü�3‹iˆÜ×*Ñ*©<¸Ó+<¸dÀ3¹iÐRWÔXˆ
Üˆs‹8�qŠ=Ø�,‰Cà!ˆC�‰HÙ˜‹}Ðrp   rc  )rt   rG   Ú	get_numelr1  rÍ   rÌ   r“  r3  re  rD   rë   rw   r¿   )	r¨   rÐ   r@  Úsparse_gradrœ  rˆ   rD  rì   rh  s	    `    @@@rn   ÚgatherrG  û  sÇ   û€ ô �aœÔ#Ð#Ð#Ø‡�Ó˜AÒä˜˜EŸN™NÓ,Ó-Ð-à�:‰:‹<€DÜ�‹Y˜!‰^€FÜ
˜˜3 Ó
'€CáÜ�1�q�c‹NˆØˆsˆà�}‰}‹€HØ×$Ñ$Ó&€L÷ô ×ÑØ�|‰|‹~Ø�k‰k‹mØØ�~‰~Óô	ð rp   c                ó0  ‡‡‡‡	‡
— |r- t        t        j                  j                  «      | ||||«      S |rJ ‚t	        | t
        «      sJ ‚t	        |t
        «      sJ ‚dt        |j                  «       «      v sJ ‚| j                  «       Š	|j                  «       Št        |j                  «       «      Š| j                  «       Š
g |j                  «       ¢‰
dd  ¢Šˆˆˆˆ	ˆ
fd„}t        j                  | j                  «       | j                  «       |‰¬«      S )Nr¸   r3   c                ó¸   •— t        | «      t        ‰«      k(  sJ | › d‰› �«       ‚ ‰| d ‰ «      }t        j                  |‰d   d¬«      gg | ‰d  ¢z   } ‰|«      S )Nz != r   Fr@  )rÌ   rY   rB  )r[  Ú	var_indexÚ
weight_idxÚindices_loaderÚindices_ndimrj  Úweight_loaderÚweight_sizes      €€€€€rn   rˆ   zembedding.<locals>.fn2  sx   ø€ Ü�3‹xœ3˜x›=Ò(Ð@¨S¨E°°h°ZÐ*@Ó@Ð(Ù" 3 }¨Ð#5Ó6ˆ	ä×!Ñ! )¨[¸©^ÀeÔLð
à!ˆc�,�-Ð Ð!ñ"ˆ
ñ ˜ZÓ(Ð(rp   rc  )rÖ  rä  Ú	embeddingrÙ  rt   rG   Ústrr¿   re  rÌ   rÍ   rD   rë   rw   )Úweightr!  Úpadding_idxÚscale_grad_by_freqÚsparserˆ   rL  rM  rj  rN  rO  s         @@@@@rn   rP  rP     s  ü€ áØ7Ô¤§¡× 6Ñ 6Ó7Ø�G˜[Ð*<¸fó
ð 	
ñ Ðˆ:Ü�fœiÔ(Ð(Ð(Ü�gœyÔ)Ð)Ð)Ø”C˜×)Ñ)Ó+Ó,Ñ,Ð,Ð,à×&Ñ&Ó(€MØ×(Ñ(Ó*€NÜ�w×'Ñ'Ó)Ó*€LØ—/‘/Ó#€KØ6�×!Ñ!Ó#Ð6 k°!°" oÐ6€H÷)ð )ô ×ÑØ× Ñ Ó"Ø×ÑÓ ØØô	ð rp   c           
     ó  — t        d„ | D «       «      s)J d| D �cg c]  }|€Œ|j                  «       ‘Œ c}› �«       ‚t        d„ | D «       «      rt        d«      ‚t	        | «      D ��cg c]  \  }}t        |t        «      sŒ|‘Œ }}}t        |«      dkD  sJ d«       ‚d gt        | «      z  }t        |t        |D �cg c]  }| |   ‘Œ	 c}Ž «      D ](  \  }}|j                  «       |k7  rt        d«      ‚|||<   Œ* ||fS c c}w c c}}w c c}w )Nc              3  ó¼   K  — | ]T  }|�P|j                  «       t        j                  t        j                  t        j                  t        j
                  fv –— ŒV y ­wrŸ   )r¿   r„   rÅ  r  rÆ   r0  ©rò   r|   s     rn   rô   z.check_and_broadcast_indices.<locals>.<genexpr>C  sA   è ø€ ò àØˆ=ð 	
�‰‹œ%Ÿ+™+¤u§{¡{´E·J±JÄÇÁÐLÔLñùs   ‚AAz)indices must be int64, byte or bool. Got c              3  ó‚   K  — | ]7  }|€Œ|j                  «       t        j                  t        j                  fv –— Œ9 y ­wrŸ   )r¿   r„   rÆ   r0  rX  s     rn   rô   z.check_and_broadcast_indices.<locals>.<genexpr>J  s1   è ø€ ò Ø78ÀqÁ}ˆ�‰‹œ%Ÿ*™*¤e§k¡kÐ2Ô2ñùs   ‚?Š5?zFallback for bool indicesr   z"requires at least 1 non-None indexz.Fallback when indices is on a different device)r#  r¿   r$  r™   rs   rt   rG   rÌ   r  r  rw   )r!  r   r|   r¨   Ú
valid_idxsÚnew_indicess         rn   Úcheck_and_broadcast_indicesr\  B  s/  € Üñ àôô ð ð
 4ÈGÖ4eÀqÐWXÑWd°Q·[±[µ]Ò4eÐ3fÐgóð ô ñ Ø<Côô ô "Ð"=Ó>Ð>ä )¨'Ó 2×O™˜˜1´jÀÄIÕ6N’!ÐO€JÑOÜˆz‹?˜QÒÐDÐ DÓDÐØ�&œ3˜w›<Ñ'€KÜ�JÔ 1È
Ö3SÀ1°G¸A³JÒ3SÐ TÓUò ‰ˆˆ1ð �<‰<‹>˜VÒ#Ü%Ð&VÓWÐWØˆ�AŠðð ˜
Ð"Ð"ùò# 5fùó Pùò 4Ts   ™C=¡C=Á'DÂ DÂ:Dc	           
     óT  ‡‡‡‡‡‡‡‡‡‡— dŠt        j                  ‰«      D ]  \  }	}
|
|	z
  dk7  sŒdŠŒ t        ‰«      D ��cg c]  \  }}|�Œ	| |   ‘Œ c}}Šg ‰¢| t        ‰«      t        ‰«      z   d  ¢Š‰d   }‰r‰‰z   Šn‰d | ‰z   ‰|d  z   Šˆˆˆˆˆˆˆˆˆˆf
d„}‰|fS c c}}w )NFr3   Tr   c                óè  •
— t        | «      t        ‰«      k(  sJ ‚t        ‰«      t        ‰
«      k(  sJ ‚t        ‰«      }g }‰d   }‰rdn|}d}t        ‰d   dz   «      D ]}  }||k(  r||z  }‰|   €*|t        | «      k  sJ ‚|j                  | |   «       |dz  }Œ<‰|   }|€J ‚‰
|   }|j                  t        j                   || |||z    «      |‰	‰¬«      «       Œ g |¢| |d  ¢}‰€|S  ‰|«      S )Nr   rz  r3   ©r   rA  )rÌ   r  rx   rY   rB  )r[  rx  Ú	new_indexÚfirst_tensor_indexÚstart_offsetÚnext_idxr|   Úloaderrì   r   Úindexed_sizer!  Úindices_loadersÚnon_consecutive_tensorsÚoutput_sizeÚtensor_indicesÚtensor_sizerA  rh  s            €€€€€€€€€€rn   rˆ   z*index_output_size_and_inner_fn.<locals>.fn€  sN  ø€ Ü�3‹xœ3˜{Ó+Ò+Ð+Ð+Ü�?Ó#¤s¨<Ó'8Ò8Ð8Ð8ä�;ÓˆØˆ	Ø+¨AÑ.ÐÙ3‘qÐ9KˆØˆÜ�~ bÑ)¨AÑ-Ó.ò 	ˆAØ�LÒ Ø˜DÑ �Ø�q‰zÐ!Ø¤# c£(Ò*Ð*Ð*Ø× Ñ   X¡Ô/Ø˜A‘‘à(¨Ñ+�ØÐ)Ð)Ð)Ø# A‘�Ø× Ñ Ü×)Ñ)Ù˜s <°,ÀÑ2EÐFÓGØØ#Ø!)ô	õð	ð&
Øð
à��ˆ^ð
ˆ	ð %Ð,ˆyÐE±(¸9Ó2EÐErp   )r  Úpairwisers   rÌ   )r�  r!  ri  rj  rf  re  rh  r   rA  ÚpreviousÚcurrentr|   r;  ra  rˆ   rg  rh  s    ````````      @@rn   Úindex_output_size_and_inner_fnrn  \  së   ÿù€ ð$ $ÐÜ&×/Ñ/°Ó?ò +Ñˆ�'Ø�XÑ Ó"Ø&*Ñ#ð+ô ,5°WÓ+=×M¡  CÀÁ�6˜!“9ÓM€KØS�KÐS &¬¨[Ó)9¼CÀÓ<OÑ)OÐ)QÐ"RÐS€Kà'¨Ñ*ÐÙØ! KÑ/‰ð Ð+Ð+Ð,ØñàÐ,Ð-Ð.ñ/ð 	÷ Fõ  FðD ˜ˆ?Ðùó_ Ns   Á
B$ÁB$c                óŽ   — t        | ||«      \  }}}t        j                  | j                  «       | j	                  «       ||¬«      S rÕ  )Úindex_impl_helperrD   rë   rw   r¿   )r¨   r!  r   rh  rb  r   s         rn   Ú
index_implrq  ¥  sB   € Ü0°°G¸UÓCÑ€K�˜1ä×ÑØ�|‰|‹~Ø�k‰k‹mØØô	ð rp   c                ó‚  ‡‡— t        |t        t        f«      sJ ‚| j                  «       Št	        || j                  «       «      \  }}t        |«      dkD  sJ d«       ‚|D �cg c]  }|�|j                  «       nd ‘Œ }}t        ||d      j                  «       «      }| j                  «       }t        t        |«      «      D �cg c]  }||   €Œ	||   ‘Œ }	}|rd|	v rd|vrt        d«      ‚t        t        |«      «      D �cg c]  }||   ‘Œ	 }	}t        ||||||	d ||¬«	      \  }
Šˆˆfd„}|
|‰fS c c}w c c}w c c}w )Nr   z Must have at least one valid idxz0index is out of bounds for dimension with size 0r_  c                ó    •—  ‰ ‰| «      «      S rŸ   rü   )r[  Úindex_inner_fnrh  s    €€rn   rb  z#index_impl_helper.<locals>.inner_fnÏ  s   ø€ Ù™ sÓ+Ó,Ð,rp   )rt   rr   r¡   re  r\  rw   rÌ   rÍ   r  Ú
IndexErrorrn  )r¨   r!  r   rA  ri  r|   rf  rj  r�  re  rh  rb  rt  rh  s               @@rn   rp  rp  °  sS  ù€ Ü�g¤¤e˜}Ô-Ð-Ð-Ø�}‰}‹€HÜ9¸'À1Ç<Á<Ã>ÓRÑ€Gˆ^Üˆ~Ó Ò"ÐFÐ$FÓFÐ"àKRÖSÀa¨!¨-�q—}‘}”¸TÑAÐS€OÐSô �w˜~¨aÑ0Ñ1×:Ñ:Ó<Ó=€Kà�Z‰Z‹\€Fä',¬S°«\Ó':ÖU !¸gÀa¹jÑ>T�F˜1“IÐU€LÐUÙ��lÑ" q°Ñ';ÜÐKÓLÐLä',¬S°«\Ó':Ö; !�F˜1“IÐ;€LÐ;Ü"@ØØØØØØØØØô
#Ñ€K�õ-ð ˜ .Ð0Ð0ùò9 Tùò Vùò <s   Á!D2Ã
D7ÃD7ÄD<c                ó¶   — 	 t        | |d¬«      S # t        $ r? | j                  «         t        t        j
                  j                  d¬«      | |«      cY S w xY w)NT©r   FrÑ  )rq  r™   r²  rÖ  rä  r@  r  ©r¨   r!  s     rn   r@  r@  Õ  sT   € ð
Ü˜!˜W¨DÔ1Ð1øÜò 
à	�	‰	ŒØMÔ¤§
¡
× 1Ñ 1ÀuÔMØˆwó
ò 	
ð
ús   ‚ �AAÁAc                ó   — t        | |d¬«      S )NFrw  )rq  rx  s     rn   Ú_unsafe_indexrz  á  s   € ä�a˜¨Ô.Ð.rp   c                ó6   — t        t        | «      |||dd¬«      S )NTF©r   Úmay_realize©Úindex_put_impl_rÀ  ©r¨   r!  r  Ú
accumulates       rn   Ú	index_putr‚  î  s    € äÜˆa‹�'˜6 :°TÀuôð rp   c                ó6   — t        t        | «      |||dd¬«      S )NFr|  r~  r€  s       rn   Ú_unsafe_index_putr„  õ  s    € äÜˆa‹�'˜6 :°UÈôð rp   c                óÈ   — |j                  «       | j                  «       k7  rt        || j                  «       «      }|rt        | |«      }t        | t	        |d   || «      «      S r  )rw   rñ  r¤   rŽ  r  )r�  r!  r÷   r�  s       rn   Úindex_put_as_masked_fillr†  ü  sV   € Ø×ÑÓ˜TŸ_™_Ó.Ò.Ü˜% §¡Ó!2Ó3ˆÙÜ�D˜%Ó ˆÜ�Tœ5 ¨¡¨U°DÓ9Ó:Ð:rp   c                ó°  — ddl m} t        t        j                  t
        j                  j                  j                  j                  «      }t
        j                  j                  }t        j                  sF|�D ||«      r<d}|j                  j                  dd «      x}r|› d|› �}|t
        j                  _        t        j                   || |||«       | S )Nr3   )Ú,_fx_node_is_input_dependent_cudagraph_unsafezLindex_put_ fallback with boolean indexing is not compatible with CUDA graphsÚstack_traceú Found from : 
 )Úutilsrˆ  r�  rä  Ú
index_put_rZ   rf   rg   rj   Ú_overloadnamer4   Úgraph_partitionri  rj  Údisable_cudagraphs_reasonr6   ÚIndexPutFallback)	r�  r!  r  r�  rˆ  ræ  r«  rœ   r‰  s	            rn   Úindex_put_fallbackr‘    s¬   € ÝCäœ$Ÿ/™/¬1¯7©7×+?Ñ+?×+FÑ+F×+TÑ+TÓU€Kô
 �g‰g×"Ñ"€Gä×"Ò"ØÐÙ8¸ÔAà\ˆØ!Ÿ,™,×*Ñ*¨=¸$Ó?Ð?ˆ;Ð?Ø�EÐ*¨;¨-Ð8ˆCØ,/Œ�‰Ô)ä×Ñ˜ T¨7°F¸JÔGØ€Krp   c                ó$   — t        | |||dd¬«      S )NTr|  ©r  ©r�  r!  r  r�  s       rn   rŒ  rŒ    s   € äØˆg�v˜z°À4ôð rp   c                ó$   — t        | |||dd¬«      S )NFTr|  r“  r”  s       rn   Ú_unsafe_index_put_r–  "  s   € äØˆg�v˜z°ÀDôð rp   c           
     ó‚  ‡— |rLd„ Št        j                  | «      |j                  «       v r$t        ˆfd„|D «       «      s|j	                  «        |j                  «       dk(  r t        |«      dk(  r’|d   j                  «       t        j                  t        j                  fv r_|d   }t        t        |j                  «       «      t        | j                  «       «      «      D ]  }t        |d«      }Œ t        | |g||«      S t        j                  «       rt!        | |||«      S |D ]E  }|€Œ|j                  «       t        j                  t        j                  fv sŒ7t!        | |||«      c S  | j                  «       }	t        |	«      }
|rLt#        | j                  «       «      r3|
dk(  rt%        | dg«      } t!        | |||«      } |
dk(  rt%        | g «      } | S t'        || j                  «       «      }	 t)        || j+                  «       «      \  }}|D �cg c]  }|�|j/                  «       nd ‘Œ }}t1        | t2        «      sJ ‚| j	                  «        |
dk(  rt%        | dg«      } t5        ||d      j                  «       «      }t        t        |«      «      D �cg c]  }|	|   ‘Œ	 }}t7        |	|||||d |¬«      \  }}t9        ||«      }| j+                  «       }|€J ‚t        j:                  || j                  «       |j/                  «       |||rdnd ¬«      }t        j<                  d t        j>                  | «      |¬	«      }t@        jB                  jE                  |«      |_#        t@        jB                  jI                  |«       |
dk(  rt%        | g «      } | S # t,        $ r t!        | |||«      cY S w xY wc c}w c c}w )
Nc                óò  — t        | t        «      rçt        | j                  t        j                  «      rÃ| j                  j                  «       } t        | t        j                  «      xr� t        | j                  t        j                  «      xrg t        | j                  dd «      xrN | j                  j                  j                  t        j                  j                  j                  j                  u S y)Nr«  F)rt   rG   rv   r6   r:   r¬  ré   rã  r�  r«  rj   r„   rY   rä  ÚrandpermrÙ  )Úindices    rn   Úindice_slice_from_randpermz3index_put_impl_.<locals>.indice_slice_from_randperm,  s«   € ô ˜&¤)Ô,´¸F¿K¹KÌÏÉÔ1UØŸ™×0Ñ0Ó2�ä˜v¤r§}¡}Ó5ò VÜ" 6§;¡;´·±Ó@òVä §¡¨Y¸Ó=òVð Ÿ™×+Ñ+×2Ñ2´e·i±i·n±n×6MÑ6M×6UÑ6UÐUð	ð rp   c              3  ó.   •K  — | ]  } ‰|«      –— Œ y ­wrŸ   rü   )rò   rš  r›  s     €rn   rô   z"index_put_impl_.<locals>.<genexpr>:  s   øè ø€ ò H
Ø39Ñ& v×.ñH
ùrY  r3   r   rz  rw  Ú
atomic_add©r   r»   rb  rd  Úoutput_indexerÚscatter_mode©rà   r«  rv   )%r6   Útry_get_namer  r#  r²  rE  rÌ   r¿   r„   rÆ   r0  r  rÍ   rX  r†  rT  r‘  rS   rå  rø   r\  rw   r™   re  rt   rG   rr   rn  r3  ÚScatterrð  ÚMutationLayoutSHOULDREMOVErZ   rf   rz  rà   r{  )r�  r!  r  r�  r   r}  rÏ  r   r@  r�  Úx_ndimri  r|   rf  rj  re  Úexpected_vals_sizerb  r   Úscatterr—  r›  s                        @rn   r  r  )  s‰  ø€ Ùò	ô �?‰?˜4Ó  F×$9Ñ$9Ó$;Ñ;ÄCó H
Ø=DôH
ô E
ð �N‰NÔð 	×ÑÓ˜aÒÜ�‹L˜AÒØ�A‰J× Ñ Ó"¤u§z¡z´5·;±;Ð&?Ñ?à�q‰zˆÜ”s˜4Ÿ=™=›?Ó+¬S°·±³Ó-AÓBò 	'ˆAÜ˜T 2Ó&‰Dð	'ä'¨¨t¨f°f¸jÓIÐIô ×1Ñ1Ô3Ü! $¨°¸ÓDÐDð ò IˆØÑ §¡Ó!2´u·z±zÄ5Ç;Á;Ð6OÒ!OÜ% d¨G°V¸ZÓHÒHðIð �]‰]‹_€FÜ�‹[€FáÔBÀ4Ç>Á>ÓCSÔTà�QŠ;Ü˜˜q˜c“?ˆDÜ! $¨°¸ÓDˆØ�QŠ;Ü˜˜b“>ˆDØˆä�f˜dŸn™nÓ.Ó/€FðEä"=Ø�T—_‘_Ó&ó#
Ñˆ�ð LSÖSÀa¨!¨-�q—}‘}”¸TÑAÐS€OÐSä�dœIÔ&Ð&Ð&Ø‡L�L„Nð �‚{Ü�D˜1˜#‹ˆô �w˜~¨aÑ0Ñ1×:Ñ:Ó<Ó=€KÜ',¬S°«\Ó':Ö; !�F˜1“IÐ;€LÐ;ä#AØØØØØØØØô	$Ñ Ð˜ô �FÐ.Ó/€Fð �_‰_Ó€FØÐÐÐÜ�j‰jØØ�n‰nÓØ×#Ñ#Ó%Ø!ØÙ%/‘\°Tô€Gô ×ÑØÜ×,Ñ,¨TÓ2Øô€Fô
 —'‘'×)Ñ)¨&Ó1€F„KÜ‡G�G×Ñ˜vÔ&à�‚{Ü�D˜"‹~ˆØ€Køôc ò EÜ! $¨°¸ÓDÒDðEüò Tùò <s   Ç3N ÈN7ÊN<ÎN4Î3N4rÑ  c                óî   ‡‡‡‡‡	— t        | |dd¬«      \  }}Š‰j                  «       Š| j                  «       Š	ˆˆˆˆˆ	fd„}t        j                  | j	                  «       | j                  «       ||¬«      S )NFr_  c                óÞ   •‡ — ‰j                   t        j                  k7  r+t        j                   ‰‰ «      t        j                  «      }n ‰‰ «      }t        j
                  |ˆˆ ˆfd„‰«      S )Nc                 ó    •—  ‰ ‰ ‰«      «      S rŸ   rü   )Ú_unsafe_index_fnr[  Úself_loaders   €€€rn   rI  z8_unsafe_masked_index.<locals>.inner_fn.<locals>.<lambda>µ  s   ø€ ©KÑ8HÈÓ8MÓ,N€ rp   )r»   r„   rÆ   rY   rø   rÉ  )r[  Úmask_valr«  ÚfillrÏ  Úmask_loaderr¬  s   ` €€€€€rn   rb  z&_unsafe_masked_index.<locals>.inner_fn°  sK   ù€ Ø�:‰:œŸ™Ò#Ü—|‘|¡K°Ó$4´e·j±jÓA‰Há" 3Ó'ˆHÜ�z‰z˜(Õ$NÐPTÓUÐUrp   rc  )rp  re  rD   rë   rw   r¿   )
r�  rÏ  r!  r®  rd  r   rb  r«  r¯  r¬  s
    ` `   @@@rn   Ú_unsafe_masked_indexr°  ¨  sw   ü€ ä"3Øˆg˜U¨Uô#Ñ€FˆAÐð ×"Ñ"Ó$€KØ×"Ñ"Ó$€K÷Vð Vô ×ÑØ�‰Ó Ø�n‰nÓØØô	ð rp   c           	     óä   — t        ||d«      }| j                  «       }t        t        |«      «      D �cg c]#  }||   rt	        ||   ||    ||   dz
  «      nd ‘Œ% }}t        | ||d¬«      S c c}w )Nr   r3   T)r�  )r  rÍ   r  rÌ   r�  r„  )r¨   rÏ  r!  r  Úmasked_valuerY  r|   Úclamped_indicess           rn   Ú#_unsafe_masked_index_put_accumulater´  ¿  s�   € ä˜˜v qÓ)€LØ�J‰J‹L€Eô ”s˜7“|Ó$öàð 7>¸a²jŒˆg�a‰j˜5 ™8˜) U¨1¡X°¡\Ô2ÀdÑJð€Oð ô ˜Q °È$ÔOÐOùòs   ´(A-c                óV   — t        j                  |t        j                  || «      «      S rŸ   )rY   rÜ  rÝ  ©ró   ÚminÚmaxs      rn   r�  r�  Ì  s   € ä�;‰;�sœCŸK™K¨¨QÓ/Ó0Ð0rp   c                óP   — t        | «      }t        ||||«      }t        ||«       |S rŸ   )rÀ  rŸ  Úcopy_)r�  r�  rì   r³  ru  r6  Úoutput_views          rn   Úas_strided_scatterr¼  Ñ  s*   € ä�4‹[€FÜ˜V T¨6°>ÓB€KÜ	ˆ+�sÔØ€Mrp   c                ó2   — t        t        | «      |||fi |¤ŽS rŸ   )Úscatter_rÀ  )r¨   rÐ   r@  r�  r   s        rn   r§  r§  Ù  s   € ä”E˜!“H˜c 5¨#Ñ8°Ñ8Ð8rp   ©r'  Úinclude_selfc               ó:  — t        |t        «      }t        | ||j                  «       t	        t
        j                  |r|j                  «       n
t        |«      «      |r|j                  «       j                  nd|«      rt        j                  | ||||||¬«       |S y )Nznot implr¿  )rt   rG   rX   r¿   r
   r„   r»   rè   rw   r6   ÚScatterFallback)ræ  r�  rÐ   r@  r�  r'  rÀ  Úsrc_is_tensors           rn   Úscatter_fallbackrÄ  Þ  sŠ   € ô ˜s¤IÓ.€MÜØØØ�‰ÓÜŒU�[‰[©]˜#Ÿ-™-œ/ÄÀSÃ	ÓJá!.ˆ�‰Ó×Ò°JØôô 	×ÑØØØØØØØ%õ	
ð ˆàrp   ©r'  c               ó  — |dv sJ ‚|€[t        t        j                  t        j                  j
                  j                  j                  «      }t        || ||||¬«      }|�|S |dk(  rd}n|dk(  rd}t        | ||||«      S )N)Nr¤   ÚmultiplyrÅ  r¤   ri  rÇ  Úprod)
r�  rä  r¾  rZ   rf   rg   rj   r�  rÄ  Úscatter_reduce_)r�  rÐ   r@  r�  r'  ræ  Úfallback_results          rn   r¾  r¾     s�   € àÐ.Ñ.Ð.Ð.Ø€~ÜœdŸm™m¬Q¯W©W×-AÑ-A×-HÑ-H×-VÑ-VÓWˆÜ*Ø˜˜s E¨3°vô
ˆð Ð&Ø"Ð"à�‚Ø‰Ø	�:Ò	ØˆÜ˜4  e¨S°&Ó9Ð9rp   c                ó0   — t        t        | «      |||«      S rŸ   )Úscatter_add_rÀ  ©r¨   rÐ   r@  r�  s       rn   Úscatter_addrÎ    s   € äœ˜a› # u¨cÓ2Ð2rp   c                ó    — t        | |||d«      S )Nri  )rÉ  rÍ  s       rn   rÌ  rÌ    s   € ä˜1˜c 5¨#¨uÓ5Ð5rp   c                ó4   — t        t        | «      ||||fi |¤ŽS rŸ   )rÉ  rÀ  )r¨   rÐ   r@  r�  Úreduction_typer   s         rn   Úscatter_reducerÒ    s   € äœ5 ›8 S¨%°°nÑOÈÑOÐOrp   )rÀ  c          
     óÆ  ‡ ‡‡‡‡— |dv sJ ‚t        t        j                  j                  «       «      dk(  r dt        j                  j                  «       v sJ d«       ‚t	        ‰t
        «      rt        ‰ ‰«      Št        t        j                  j                  ‰ ‰|‰||¬«      }|r|S t	        ‰ t        «      sJ ‚dt        |j                  «       «      v sJ ‚t        ‰ j                  «       «      }|dk(  rt        ‰ dg«      Š t	        ‰t        «      r)t        ‰j                  «       «      dk(  rt        ‰dg«      Št	        |t        «      r)t        |j                  «       «      dk(  rt        |dg«      }|j                  «       dk(  r‰ S t        ‰ ‰«      Š‰ j!                  «        |j#                  «       Št	        ‰t        «      r‰j#                  «       nd Šˆˆˆ fd„}ˆ ˆˆfd	„}	d
„ }
‰ j%                  «       }|€J ‚|s¨t'        j(                  |‰ j                  «       ˆ fd„|j                  «       |d ¬«      }t'        j*                  d t'        j,                  ‰ «      |¬«      }t.        j0                  j3                  |«      |_        t.        j0                  j7                  |«       t'        j(                  |‰ j                  «       |	|j                  «       | |
|«      ¬«      }t'        j*                  d t'        j,                  ‰ «      |¬«      }t.        j0                  j3                  |«      |_        t.        j0                  j7                  |«       |dk(  rt        ‰ g «      Š ‰ S )N)Nri  rÈ  ÚmeanÚamaxÚaminr3   r   zKaten.scatter_reduce_.two is not the unique overload of aten.scatter_reduce_r¿  r¸   r   c                óª   •— ‰j                  «       }t        |«      }t        | «      }t        j                   ‰| «      |dk(  rdn|‰   d¬«      |‰<   |S )Nr   r3   Fr@  )rÍ   rÌ   rr   rY   rB  )r[  rY  rª  Úindirect_idxrÐ   rD  r�  s       €€€rn   rŸ  z'scatter_reduce_.<locals>.output_indexerO  sU   ø€ à—‘“ˆÜ�5‹zˆÜ˜C“yˆÜ×1Ñ1Ù˜Ó D¨A¢I™q°5¸±:Èô
ˆ�SÑð Ðrp   c                ó`   •— ‰r ‰| «      S t        j                  ‰‰j                  «       «      S rŸ   ©rY   rY  r¿   )r[  r�  r�  rè  s    €€€rn   rˆ   zscatter_reduce_.<locals>.fnY  s*   ø€ ÙÙ˜c“?Ð"ô —<‘<  T§^¡^Ó%5Ó6Ð6rp   c                ó   — | dk(  ry| �J ‚y )Nri  r�  rü   rÅ  s    rn   Úbackend_reduce_strz+scatter_reduce_.<locals>.backend_reduce_stra  s   € Ø�UŠ?Øð �>Ð!�>Ørp   c                óL   •— t        j                  d‰j                  «       «      S r  rÚ  )r@  r�  s    €rn   rI  z!scatter_reduce_.<locals>.<lambda>q  s   ø€ ¤3§<¡<°°4·>±>Ó3CÓ#D€ rp   rž  r¡  )rÌ   rä  rÉ  Ú	overloadsrt   r"   r@  rÄ  r   rG   rQ  r¿   rÍ   rå  rE  r“  r²  re  rw   r6   r£  rð  r¤  rZ   rf   rz  rà   r{  )r�  rÐ   r@  r�  r'  rÀ  rÊ  rª  rŸ  rˆ   rÜ  r   Úzero_outr—  r§  rD  rè  s   `` `           @@rn   rÉ  rÉ  !  sà  ü€ àÐBÑBÐBÐBäŒD× Ñ ×*Ñ*Ó,Ó-°Ò2Ø”T×)Ñ)×3Ñ3Ó5Ñ5ðUð UóUð	6ô �#”vÔÜ˜˜cÓ"ˆä&Ü×Ñ× Ñ ØØØØØØ!ô€Oñ ØÐä�dœIÔ&Ð&Ð&Ø”C˜Ÿ™Ó)Ó*Ñ*Ð*Ð*äˆt�}‰}‹Ó€DØˆq‚yÜ�D˜1˜#‹ˆä�#”yÔ!¤c¨#¯,©,«.Ó&9¸QÒ&>Ü�3˜˜‹nˆä�%œÔ#¬¨E¯N©NÓ,<Ó(=ÀÒ(BÜ�U˜Q˜CÓ ˆà‡�Ó˜AÒØˆä
˜˜cÓ
"€Cà‡L�L„NØ×$Ñ$Ó&€LÜ&0°´iÔ&@�—‘Ô"Àd€Jöö7òð �_‰_Ó€FØÐÐÐáä—:‘:ØØ—.‘.Ó"ÛDØ—>‘>Ó#Ø)Øô
ˆô ×"Ñ"ØÜ×0Ñ0°Ó6Øô
ˆô
 —g‘g×-Ñ-¨fÓ5ˆŒÜ	�‰×"Ñ" 6Ô*ô
 �j‰jØØ�n‰nÓØØ�~‰~ÓØ%Ù'¨Ó/ô€Gô ×ÑØÜ×,Ñ,¨TÓ2Øô€Fô
 —'‘'×)Ñ)¨&Ó1€F„KÜ‡G�G×Ñ˜vÔ&àˆq‚yÜ�D˜"‹~ˆØ€Krp   c                óT  ‡‡‡‡‡‡— | j                  «        | j                  «       Š| j                  «       ‰ d  Š| j                  «       d ‰  }‰D �cg c]+  }t        j                  j
                  j                  |«      ‘Œ- c}Št        |«      ‰k(  sJ ‚|}t        ‰|«      D ��cg c]
  \  }}||z  ‘Œ c}}Št        |«      D ]  \  }}	|	€Œ	d|	z  ‰|<   Œ ˆfd„Šˆˆˆˆˆfd„}
t        j                  | j                  «       | j                  «       |
g |¢|¢¬«      S c c}w c c}}w )Nr  c                ó¨  •— t        j                  | t        j                  «      } ‰r8t        j                  | t        j
                  dt        j                  «      «      } t        j                  | t        j
                  |t        j                  «      «      } t        j                  | t        j                  «      } t        j                  | |d¬«      S )Nç      à?Frw  )
rY   rX  r„   r  r¤   rY  rŒ  rø   r  rB  )r¨   rß  rì   Úexacts      €rn   Úscale_fnz$upsample_nearestnd.<locals>.scale_fn«  sƒ   ø€ ô �N‰N˜1œeŸm™mÓ,ˆÙÜ—‘˜œ3Ÿ<™<¨¬U¯]©]Ó;Ó<ˆAÜ�G‰G�A”s—|‘| E¬5¯=©=Ó9Ó:ˆÜ�L‰L˜œEŸK™KÓ(ˆÜ×$Ñ$ Q¨°EÔ:Ð:rp   c                ó”   •— | ‰ d  }| d ‰  } ‰
g |¢t        |‰‰«      D ���cg c]  \  }}} ‰	|||«      ‘Œ c}}}¢«      S c c}}}w rŸ   )r  )r[  r¨   r5  r|   r5  rì   Úi_sizesÚ
inv_scalesrú  rä  rh  s         €€€€€rn   rˆ   zupsample_nearestnd.<locals>.fn¶  s`   ø€ Ø���ˆHˆØ��!�ˆHˆÙØWˆaÐW¼#¸aÀÈWÓ:U×VÐV©J¨A¨q°$‘8˜A˜q $Õ'ÔVÐWó
ð 	
ùÜVs   ¤Arc  )Úrealize_hintre  rÍ   rZ   rf   ræ   r.  rÌ   r  rs   rD   rë   rw   r¿   )r¨   rh  Úscales_xrú  rã  Úbatchr|   Úo_sizesÚorß  rˆ   ræ  rç  rä  rh  s      ``      @@@@rn   Úupsample_nearestndrí  –  s  ý€ ð ‡N�NÔØ�}‰}‹€HØ�j‰j‹l˜A˜2˜3Ð€GØ�J‰J‹L˜˜1˜"Ð€EØ6=Ö>°Œq�w‰w×Ñ×)Ñ)¨!Õ,Ò>€Gäˆx‹=˜AÒÐÐØ€Gä$'¨°Ó$9×:™D˜A˜q�!�a“%Ó:€JÜ˜hÓ'ò (‰ˆˆ5ØÑØ %™KˆJ�qŠMð(ô	;÷
ð 
ô ×ÑØ�|‰|‹~Ø�k‰k‹mØØ!�Ð!˜Ð!ô	ð ùò9 ?ùó
 ;s   Á0DÂ'D$c                ó"   — t        | ||fd¬«      S )Nr3   ©rú  ©rí  ©r¨   rh  ré  s      rn   Úupsample_nearest1drò  Å  s   € ä˜a ¨v¨i¸1Ô=Ð=rp   c                ó$   — t        | ||fdd¬«      S )Nr3   T©rú  rã  rð  rñ  s      rn   Ú_upsample_nearest_exact1drõ  Ê  s   € ä˜a ¨v¨i¸1ÀDÔIÐIrp   c                ó$   — t        | |||fd¬«      S )Nr1   rï  rð  ©r¨   rh  Úscales_hÚscales_ws       rn   Úupsample_nearest2drú  Ï  s   € ô ˜a ¨x¸Ð.BÀaÔHÐHrp   c                ó&   — t        | |||fdd¬«      S )Nr1   Trô  rð  r÷  s       rn   Ú_upsample_nearest_exact2drü  Ö  s   € ô ˜a ¨x¸Ð.BÀaÈtÔTÐTrp   c                ó&   — t        | ||||fd¬«      S )Nr­   rï  rð  ©r¨   rh  Úscales_drø  rù  s        rn   Úupsample_nearest3dr   Ý  s   € ô ˜a ¨x¸À8Ð.LÐPQÔRÐRrp   c                ó(   — t        | ||||fdd¬«      S )Nr­   Trô  rð  rþ  s        rn   Ú_upsample_nearest_exact3dr  è  s#   € ô Ø	ˆ;˜ 8¨XÐ6¸!À4ôð rp   c                ó,   ‡ — t        ˆ fd„|D «       «      S )Nc              3  óJ   •K  — | ]  }t        j                  |‰«      –— Œ y ­wrŸ   rú  )rò   ró   r»   s     €rn   rô   z$_create_constants.<locals>.<genexpr>ö  s   øè ø€ Ò6¨A”—‘˜a ×'Ñ6ùs   ƒ #)r¡   )r»   r}   s   ` rn   rÚ  rÚ  õ  s   ø€ ÜÓ6°Ô6Ó6Ð6rp   c                óÀ   ‡‡‡— | j                  «       Š| j                  «       Šˆˆˆfd„}t        j                  | j	                  «       | j                  «       |‰¬«      S )Nc                óŒ   •— t        | «      } t        | «      t        ‰«      k(  sJ ‚‰D ]  }‰|   dz
  | |   z
  | |<   Œ  ‰| «      S r  )rr   rÌ   )r[  rÐ   r3  r(  rh  s     €€€rn   rd  zrev.<locals>.loaderÿ  sW   ø€ Ü�3‹iˆÜ�3‹xœ3˜u›:Ò%Ð%Ð%Øò 	3ˆCØ˜c™
 Q™¨#¨c©(Ñ2ˆC�ŠHð	3ñ ˜‹}Ðrp   rc  )re  rÍ   rD   rë   rw   r¿   )r¨   r3  rd  r(  rh  s    ` @@rn   Úrevr  ù  sM   ú€ ð �}‰}‹€HØ�J‰J‹L€Eöô ×ÑØ�|‰|‹~Ø�k‰k‹mØØô	ð rp   c                óŽ  — d„ } |«       ryt        |«      dk7  st        | j                  «       «      dk7  ry| j                  «        t        | t        j
                  «      r°t        | j                  t        j                  «      rŒt        | j                  j                  t        j                  «      s>t        j                  rNt        | j                  j                  t        j                  «      r | j                  j                  j                  sy| j                  «        t	        j                  | «      \  }}|j                  }|d   dk7  ry|d   dk7  s|d   dk7  s|d   dk7  ry|d   }|dk(  ry|d   }|j                   d   }	||	|z   k  ry| j                  j                  j                  }
|j                   d   |j                   d   |z   g}|t"        j$                  j&                  |
<   t)        | ||j                  |j*                  d¬	«      }t-        |d|	|	|z   d¬
«      }t/        ||«       t0        d   dxx   dz  cc<   |S )zÀ
    This optimization changes the semantics of padding from 'clone'
    style to 'view' style.

    Thanks to functionalization, this change can still maintain numerical
    correctness.
    c                 ó  — t         j                  j                  } | €yt        | j                  «      }t        |«      dk(  rD|d   j                  t        j                  j                  t        j                  j                  fv ryy)a  
        Conservatively check if padding can be fused with downstream op.
        1. if the downstream op is a sum, then there is little benefit to
           do inplace padding
        2. if the downstream op is a matmul, doing inplace padding can
           save membw.
        Tr3   r   F)rZ   rf   rg   r¡   rh   rÌ   rj   rä  ÚmmrÙ  Úaddmm)rg   rh   s     rn   Ú_padding_can_be_fusedz6inplace_constant_pad_nd.<locals>._padding_can_be_fused  sk   € ô —w‘w×+Ñ+ˆØÐØÜ�l×(Ñ(Ó)ˆÜˆu‹:˜Š?˜u Q™xŸ™Ü�G‰G�O‰OÜ�J‰J×Ñð3
ñ  
ð àrp   Nr®   r1   r3   r   r­   Fr‘  )rÐ   r|  r}  r�  ÚinductorÚinplace_padding)rÌ   rÍ   r²  rt   r6   rG   rv   ré   rð  r4   Úcan_inplace_pad_graph_inputr¯  rà   Úfreeze_layoutr®  r³  rì   rZ   rf   Úbuffer_to_padded_sizerŸ  rœ  r¨  Úfill_r   )r¨   Úpaddingr  r  r   r«  rl  ÚnpadÚstride0ÚrowsizeÚbufnameÚpadded_sizeÚ	resized_xÚsliced_xs                 rn   Úinplace_constant_pad_ndr    sä  € òñ( ÔØô ˆ7ƒ|�qÒœC §
¡
£Ó-°Ò2Øð
 ‡I�I„Kô
 �qœ"Ÿ,™,Ô'Ü˜!Ÿ&™&¤"§-¡-Ô0ä�q—v‘v—{‘{¤B×$5Ñ$5Ô6ä×2Ò2Ü˜qŸv™vŸ{™{¬B¯N©NÔ;ð �v‰v�{‰{×ÒàØ‡O�OÔä×(Ñ(¨Ó+�I€A€vØ�m‰m€GØˆq�z�Q‚Øàˆq�z�Q‚˜' !™*¨š/¨W°Q©Z¸1ª_Øà�1‰:€DØˆq‚yØà�a‰j€GØ�k‰k˜!‰n€Gà�˜4‘ÒØà�f‰f�k‰k×Ñ€GØ—;‘;˜q‘> 6§;¡;¨q¡>°DÑ#8Ð9€KØ-8„A‡G�G×!Ñ! 'Ñ*ÜØ	ØØ�‰Ø�‰Ø16ô€Iô �i Q¨g¸7ÀT¹>ÐQVÔW€HÜ	ˆ(�JÔäˆZÑÐ*Ó+¨qÑ0Ó+ØÐrp   c           	     ó0  — t        d„ |D «       «      sy| j                  «       }t        |«      }t        t	        |ddd…   |ddd…   «      «      }d}d}t        |«      D ]*  \  }\  }	}
|	dk7  r y|
dkD  r|� y|dz
  |z
  }|
}Œ$|
dk  sŒ* y |€y| j                  «       }|�|j                  dk(  ryt        |«      }|||<   | j                  «       } t        |«      |«      } t        |«      |||¬«      }t        d   d	xx   dz  cc<   t        | |g|«      S )
a7  Decompose right-pad into cat([x, fill], dim) and delegate to cat lowering.

    The cat lowering already has heuristics for choosing between pointwise_cat
    (fusion) and ConcatKernel (memory planning / zero-copy).  By routing through
    cat() we reuse those heuristics rather than duplicating them here.
    c              3  ó<   K  — | ]  }t        |t        «      –— Œ y ­wrŸ   )rt   r¸   ©rò   r  s     rn   rô   z_pad_as_cat.<locals>.<genexpr>y  s   è ø€ Ò3 aŒz˜!œS×!Ñ3ùr$  Nr1   r3   r   rä   r`  r  Úpad_rewritten_as_cat)r#  rÍ   rÌ   rr   r  rs   rw   rè   r¿   r   r  r   rL  )r¨   r  r  r(  rª  Ú	pad_pairsÚpad_dimÚ
pad_amountr|   Úleftrq  r   Ú	pad_shaper»   Úfill_value_typedÚ
pad_tensors                   rn   Ú_pad_as_catr'  o  sK  € ô Ñ3¨7Ô3Ô3Øà�J‰J‹L€EÜˆu‹:€DÜ”S˜¡ 1 ™ w¨q¨t°!¨t¡}Ó5Ó6€Ið €GØ€JÜ% iÓ0ò 	Ñˆ‰=ˆD�%Ø�1Š9ÙØ�1Š9ØÐ"ÙØ˜Q‘h ‘lˆGØ‰JØ�Q‹YÙð	ð €Øð �\‰\‹^€FØÐ˜fŸk™k¨UÒ2Øô �U“€IØ#€IˆgÑØ�K‰K‹M€EØ+”} UÓ+¨JÓ7ÐØ5Ô#Ð$4Ó5Ø˜ vô€Jô ˆZÑÐ/Ó0°AÑ5Ó0Ü��:ˆ Ó(Ð(rp   c                óø  ‡‡‡‡‡‡‡— t        |«      dz  dk(  sJ ‚t        d„ |D «       «      rt        | «      S t        j                  rt        | |‰«      }|r|S t        | |‰«      }|�|S | j                  «       }t        t        t        t        |d d d…   |dd d…   «      «      «      «      Št        |«      t        ‰«      z
  Šg Š‰D ]?  \  }}‰j                  t        j                  j                  j                  |«      |f«       ŒA t        |d ‰ «      }g Št        ‰|‰d  «      D ]C  \  \  }}	}
‰j                  |
«       |j                  t!        j"                  |
|z   |	z   «      «       ŒE t        |«      t        |«      k(  sJ ‚ t%        | j'                  «       «      ‰«      Šˆˆˆˆˆfd„Šˆˆˆfd„}| j)                  «       Št+        j,                  | j/                  «       | j'                  «       ||¬«      S )Nr1   r   c              3  ó&   K  — | ]	  }|d k(  –— Œ y­w©r   Nrü   r  s     rn   rô   z"constant_pad_nd.<locals>.<genexpr>§  s   è ø€ Ò
#�aˆ1��6Ñ
#ùr"  r3   c                óB  •‡ — g }t        ‰ ‰	d  ‰‰«      D ]J  \  }\  }}}|dk7  r|j                  t        |d«      «       |dk7  sŒ0|j                  t        ||«      «       ŒL t	        j
                  t        j                  |«      }t        j                  |ˆ ˆ
fd„‰«      S )Nr   c                 ó   •—  ‰‰ «      S rŸ   rü   )r@  rh  s   €€rn   rI  z/constant_pad_nd.<locals>.mask.<locals>.<lambda>Î  s   ø€ ©°«€ rp   )	r  rx   Úrange_mask_lowÚrange_mask_highr  r'  rY   rÈ  rÉ  )r@  rÏ  r[  rZ  rY  rß  Úboundsr  Ú
mask_sizesrú  rh  s   `     €€€€€rn   rÏ  zconstant_pad_nd.<locals>.maskÆ  s‘   ù€ ØˆÜ(+¨E°!°"¨I°v¸zÓ(Jò 	:Ñ$ˆC‘�#�t˜fØ�aŠxØ—‘œN¨3°Ó2Ô3Ø�q‹yØ—‘œO¨C°Ó8Õ9ð		:ô
 ×Ñ¤§¡¨$Ó/ˆÜ�z‰z˜$Ô 7¸ÓDÐDrp   c                ó¾   •— t        | d ‰ «      }t        | ‰d  ‰«      D ]  \  }\  }}|j                  ||z
  «       Œ t        |«      t        | «      k(  sJ ‚ ‰|«      S rŸ   )rr   r  rx   rÌ   )r@  r`  r[  rZ  Ú_highÚbounds_precomprÏ  rú  s        €€€rn   Ú	offset_fnz"constant_pad_nd.<locals>.offset_fnÐ  si   ø€ Ü˜˜r ˜“Oˆ	Ü!$ U¨1¨2 Y°Ó!?ò 	(ÑˆC‘�#�uØ×Ñ˜S 3™YÕ'ð	(ä�9‹~¤ U£Ò+Ð+Ð+Ù�I‹Ðrp   rc  )rÌ   r#  rÀ  r4   r  r  r'  rÍ   rr   r.  r  rx   rZ   rf   ræ   Úlookup_precomputed_sizerÀ   r3  r   r¿   re  rD   rë   rw   )r¨   r  r  rz   r(  ÚlÚhrh  rZ  rY  rì   r4  r/  r3  rÏ  r0  rú  rh  s     `         @@@@@@rn   rM  rM  ¤  sÚ  þ€ ä�‹L˜1Ñ Ò"Ð"Ð"Ü
Ñ
#˜7Ô
#Ô#Ü�Q‹xˆä×ÒÜ% a¨°*Ó=ˆÙØˆJô �a˜ *Ó
-€CØ
€Øˆ
à�J‰J‹L€Eä”(œ4¤ G©C¨a¨C¡L°'¸!¸$¸Q¸$±-Ó @ÓAÓBÓC€FÜˆE‹
”S˜“[Ñ €Að 68€NØò P‰ˆˆ1Ø×ÑœqŸw™w×/Ñ/×GÑGÈÓJÈAÐNÕOðPô �u˜R˜a�y“/€KØ€JÜ  ¨¨q¨r¨Ó3ò <Ñ‰ˆˆd�TØ×Ñ˜$ÔØ×Ñœ5Ÿ<™<¨¨s©
°TÑ(9Ó:Õ;ð<ô ˆ{Óœs 5›zÒ)Ð)Ð)Ø-”˜qŸ{™{›}Ó-¨jÓ9€J÷Eð Eöð �}‰}‹€HÜ×ÑØ�|‰|‹~Ø�k‰k‹mØØô	ð rp   c                óÜ   — t        j                  t        j                  | t        j                  «      t        j                  t        j                  |«      t        j                  «      «      S rŸ   )rY   rÆ  rX  r„   rÅ  rÀ   rj  )r|   rZ  s     rn   r-  r-  à  s@   € Ü�6‰6Ü�‰�qœ%Ÿ+™+Ó&Ü�‰”u—}‘} SÓ)¬5¯;©;Ó7óð rp   c                ó¶   — t        j                  t        j                  | t        j                  «      t        j                  |t        j                  «      «      S rŸ   )rY   rÇ  rX  r„   rÅ  )r|   rY  s     rn   r.  r.  ç  s7   € Ü�6‰6Ü�‰�qœ%Ÿ+™+Ó&Ü�‰�tœUŸ[™[Ó)óð rp   c                óV   — t        j                  t        | |«      t        | |«      «      S rŸ   )rY   rÈ  r-  r.  )r|   rY  rZ  s      rn   Ú
range_maskr;  î  s'   € Ü�8‰8Ü�q˜#ÓÜ˜˜4Ó óð rp   c                óŠ   ‡ ‡‡‡‡‡‡‡— ‰ j                  «       ‰ d  Š‰ j                  «       Š‰xs dg‰z  Šˆˆˆˆˆˆˆ ˆfd„}|S )Nr   c                óN  •‡‡— | d ‰  Š| ‰ d  Št        j                  t        j                  t	        ‰«      D �cg c]  }t        ‰|   ‰|   ‰
|   z   ‰
|    «      ‘Œ! c}«      }‰	rt        j                  |ˆˆˆˆˆfd„‰«      S t        j                  |ˆˆˆfd„‰«      S c c}w )Nc                 ó4   •—  t        ‰‰‰ ¬«      g ‰¢‰¢«      S )N©rÐ   )Úconstant_boundary_condition)rÐ   ÚihÚpad_fill_valueÚprefixr¨   s   €€€€€rn   rI  z;constant_boundary_condition.<locals>.load.<locals>.<lambda>	  s$   ø€ ÐOÔ3°A°~È3ÔOØ"�f�N˜r�Nó€ rp   c                 ó   •—  ‰g ‰¢‰ ¢«      S rŸ   rü   )rA  rC  rh  s   €€€rn   rI  z;constant_boundary_condition.<locals>.load.<locals>.<lambda>  s   ø€ ©(°>°V°>¸b°>Ó*B€ rp   )r  r'  rY   rÈ  r  r;  rÉ  )r@  r|   rÏ  rA  rC  rÐ   r  r7  rB  r  Ú	padding_hr¨   rh  s      @@€€€€€€€€rn   r  z)constant_boundary_condition.<locals>.loadý  sª   ú€ Ø�u˜˜�ˆØ�C�4�5ˆ\ˆä×ÑÜ�H‰HäLQÐRUËJÖWÀqŒZ˜˜1™˜q ™t i°¡lÑ2°Y¸q±\°MÕBÒWó
ˆñ ô �J‰JØ÷ð óð
	
ô —‘˜DÕ"BÀJÓOð
	
ùò Xs   »$B"
)rÍ   re  )	r¨   r  r  rB  rÐ   r  r7  rE  rh  s	   ````` @@@rn   r@  r@  õ  sE   ÿ€ ð 	
�
‰
‹�c�T�UÐ€AØ�}‰}‹€HàÒ$˜A˜3 ™9€I÷
ó 
ð* €Krp   ©Údilationc               ó(  — |€dgt        |«      z  }t        | d||   z  z   ||   ||   dz
  z  z
  ||   dz
  z   ||   «      }|rÌt        | d||   z  z   ||   ||   dz
  z  z
  d||   dz
  z  z   ||   «      }t        j                  j                  j                  t        j                  |dz
  ||   z  | z
  ||   z
  d«      «      r|dz  }t        j                  j                  j                  t        j                  ||«      «      rd}||fS |}||fS )Nr3   r1   r   F)	rÌ   r+   rZ   rf   ræ   r1  rÀ   rŠ  r2  )	r¨   r|   Úkernel_sizer³  r  Ú	ceil_moderG  Úx_outÚx_alts	            rn   Úpooling_sizerM    sN  € ØÐØ�3œ˜W›Ñ%ˆäØ	ˆA�˜‘
‰NÑ˜X a™[¨K¸©N¸QÑ,>Ñ?Ñ?À6È!Á9ÈqÁ=ÑQØˆq‰	ó€Eñ
 ÜØØ�'˜!‘*‰nñà�q‰k˜[¨™^¨aÑ/Ñ0ñ1ð �6˜!‘9˜q‘=Ñ!ñ"ð �1‰Ió
ˆô �7‰7×Ñ×*Ñ*Ü�H‰H�e˜a‘i 6¨!¡9Ñ,¨qÑ0°7¸1±:Ñ=¸qÓAô
ð �Q‰JˆEÜ�7‰7×Ñ×*Ñ*¬5¯8©8°E¸5Ó+AÔBàˆIð �)ÐÐð ˆEØ�)ÐÐrp   c               ól   — t        | |«      } t        j                  t        j                  | «      }|dkD  S )Né   )rT   r  r'  ÚoperatorrŒ  )rI  Ún_dimÚwindow_sizes      rn   Ú%should_fallback_max_pool_with_indicesrS  3  s/   € Ü˜{¨EÓ2€KÜ×"Ñ"¤8§<¡<°Ó=€KØ˜ÑÐrp   ©Úassert_fallbackc               ó¾  — |dk(  rdg|z  }|dk(  rdg|z  }|s|}t        ||«      }t        ||«      }t        ||«      }t        ||«      }t        | t        «      sJ ‚t        |«      |k(  sJ ‚t        |«      |k(  sJ ‚t        |«      |k(  sJ ‚t        |«      |k(  sJ ‚t        | j	                  «       «      |dz   |dz   fv sJ ‚t        ||¬«      }|�||k(  sJ ‚|||||fS )Nr   r3   r1   ©rQ  )rT   rt   rG   rÌ   rÍ   rS  )r¨   rI  r³  r  rG  rQ  rU  Úuse_fallbacks           rn   Úmax_pool_checksrY  9  s  € ð �!‚|Ø�#˜‘+ˆØ�1‚}Ø�3˜‘;ˆÙØˆä˜{¨EÓ2€KÜ˜& %Ó(€FÜ˜7 EÓ*€GÜ˜H eÓ,€Hä�aœÔ#Ð#Ð#Üˆ{Ó˜uÒ$Ð$Ð$Üˆv‹;˜%ÒÐÐÜˆw‹<˜5Ò Ð Ð Üˆx‹=˜EÒ!Ð!Ð!Üˆq�z‰z‹|Ó ¨¡¨E°A©IÐ 6Ñ6Ð6Ð6ä8¸ÈEÔR€LØÐ"Ø˜Ò.Ð.Ð.à˜ ¨°<Ð?Ð?rp   c               óú  ‡‡‡‡‡— | j                  «        | j                  d ‰  }| j                  ‰ d  }t        t        ‰«      D �	cg c]  }	t	        ||	   |	|‰‰|‰¬«      ‘Œ c}	Ž \  }
}| j
                  }|t        j                  u rdn5|j                  rt        d«      nt        j                  |«      j                  }t        |«      t        |
«      z   }t        ‰«      st        |«      st        d„ ‰D «       «      rt        | |‰¬«      Šn| j                  «       Šˆˆˆˆˆfd„}t!        j"                  d| | j%                  «       |||||¬«      }t!        j"                  d	| | j%                  «       t        j&                  ||||¬«      }t)        |j*                  j*                  t         «      r|j-                  «        t)        |j*                  j*                  t         «      r|j-                  «        ||fS c c}	w )
NrF  Fú-infc              3  ó&   K  — | ]	  }|d kD  –— Œ y­wrb  rü   r/  s     rn   rô   z)_max_pool_with_offsets.<locals>.<genexpr>u  s   è ø€ Ò,E°q¨Q°­UÑ,Eùr"  r?  c                ó¤   •— | d ‰  }| ‰ d  }t        ‰«      D �cg c]  }||   ‰	|   z  ||   ‰|   z  z   ‰|   z
  ‘Œ! }} ‰
g |¢|¢«      S c c}w rŸ   ©r  )r[  Úreduction_idxrC  Úbhr|   rA  rG  rQ  r  r³  rh  s         €€€€€rn   Úfn_innerz(_max_pool_with_offsets.<locals>.fn_innerz  sƒ   ø€ Ø�W�u�f�ˆØ�%��ˆ\ˆô ˜5“\ö
àð �‰U�V˜A‘YÑ =°Ñ#3°h¸q±kÑ#AÑBÀWÈQÁZÓOð
ˆð 
ñ ˜˜&˜ 2˜Ó'Ð'ùò	
s   ›$Ar¸  ©rÑ  Ú
input_noder   Ú	dst_dtyper¼  rb  rd  Úreduction_rangesÚargmax)rè  rY  r  r  rM  r»   r„   rÆ   r‰  r;  rá  r·  rr   r$  r@  re  rE   rë   rw   rÅ  rt   rv   r²  )r¨   rI  r³  r  rG  rJ  rQ  rê  Údhwr0  Údhw_outr»   Ú	min_valuerj  ra  r½  Úoffsetsrh  s     ``` `          @rn   Ú_max_pool_with_offsetsrk  V  s¾  ü€ ð ‡N�NÔØ�G‰G�G�e�VÐ€EØ
�'‰'�5�&�'Ð
€Cäô
 ˜5“\ö	

ð ô Ø�A‘˜˜;¨°¸ÈXöò

ðÑ€GˆYð �G‰G€Eð ”E—J‘JÑñ 	à$×6Ò6Œe�FŒm¼E¿K¹KÈÓ<N×<RÑ<Rð ô �E‹{œT '›]Ñ*€HÜ
ˆ7„|”s˜9”~¬Ñ,E¸HÔ,EÔ)EÜ.¨q°)ÀÔG‰à—=‘=“?ˆ÷(ð (ô ×ÑØØØ�|‰|‹~ØØØØØ$ô	€Fô ×ÑØØØ�|‰|‹~Ü—+‘+ØØØØ$ô	€Gô �&—+‘+×"Ñ"¤IÔ.à�‰ÔÜ�'—,‘,×#Ñ#¤YÔ/à�‰Ôà�7ˆ?Ðùòs

s   ÁG8c           
     ó  — t        |«      }t        | |||||d¬«      \  }}}}}t        j                  d¬«      5  t	        | ||||||¬«      \  }}	|t        |	t        j                  «      fcd d d «       S # 1 sw Y   y xY w)NFrT  rO  ©Úunroll_reductions_thresholdrW  )rÌ   rY  r4   r   rk  rø   r„   r/  )
r¨   rI  r³  r  rG  rJ  rQ  r   r½  rj  s
             rn   Ú!_low_memory_max_pool_with_offsetsro  ¡  s–   € ô �Ó€Eô 1@Ø	ØØØØØØô1Ñ-€K�˜ (¨Aô 
�‰°"Ô	5ñ 
5Ü0ØØØØØØØô
‰ˆ�ð ”x ¬¯©Ó4Ð4÷
5÷ 
5ò 
5ús   º1A5Á5A>c                óP  ‡‡‡‡‡‡— t        ‰«      Š| j                  «       Št        j                  t	        j
                  t        j                  ‰«      «      Šˆˆˆˆˆˆfd„}t        j                  | j                  «       t        j                  || j                  «       ¬«      }|S )Nc                óö   •—  ‰	| «      }t        j                  |‰
«      }t        j                  |‰«      } ‰| |«      }t        j                  t        j
                  |‰‰ d  «      t        j                  «      S rŸ   )rY   rB  r5   Ú_flattened_index_to_ndrX  Ú_flatten_indexr„   rÅ  )r[  rœ  Úoffset_sympyr_  ÚidhwÚincrements_to_indexÚ
input_sizerI  rQ  Úoffsets_loaderrR  s        €€€€€€rn   Úoffsets_to_indicesz4_pool_offsets_to_indices.<locals>.offsets_to_indicesÑ  sm   ø€ Ù Ó$ˆÜ×,Ñ,¨V°[ÓAˆÜ&×=Ñ=¸lÈKÓXˆÙ" 3¨Ó6ˆÜ�~‰~Ü×)Ñ)¨$°
¸E¸6¸7Ð0CÓDÄeÇkÁkó
ð 	
rp   rc  )rÌ   re  rÀ   r´  r  r'  rP  rŒ  rD   rë   rw   r„   rÅ  rÍ   )	rj  rI  rw  rv  ry  r!  rQ  rx  rR  s	    ```  @@@rn   Ú_pool_offsets_to_indicesrz  Ä  s�   ý€ ô �Ó€EØ×(Ñ(Ó*€NÜ—-‘-¤	× 0Ñ 0´·±¸{Ó KÓL€K÷
ñ 
ô ×ÑØ×!Ñ!Ó#Ü�k‰kØ#Ø×ÑÓ!ô	€Gð €Nrp   c                óL   ‡‡‡‡— t        |«      Šˆˆˆˆfd„}t        | |||«      S )Nc                ó‚   •— | ‰ d  }t        ‰«      D �cg c]  }||   ‰|   z  ||   ‰|   z  z   ‰|   z
  ‘Œ! c}S c c}w rŸ   r^  )r[  r_  r`  r|   rG  rQ  r  r³  s       €€€€rn   rv  zD_low_memory_max_pool_offsets_to_indices.<locals>.increments_to_indexì  s_   ø€ Ø�%��ˆ\ˆô ˜5“\ö
àð �‰U�V˜A‘YÑ =°Ñ#3°h¸q±kÑ#AÑBÀWÈQÁZÓOò
ð 	
ùò 
s   •$<)rÌ   rz  )rj  rI  rw  r³  r  rG  rv  rQ  s      ``` @rn   Ú'_low_memory_max_pool_offsets_to_indicesr}  ã  s-   û€ ô �Ó€E÷
ô $Ø�˜jÐ*=óð rp   c           	     óž   — t        | |||||¬«      \  }}}}}t        | ||||||¬«      \  }}	t        |	|| j                  | d  |||«      }
||
fS )NrW  )rY  rk  r}  rY  )r¨   rI  r³  r  rG  rJ  rQ  r   rz   rj  r!  s              rn   Ú_max_pool_with_indicesr  ø  s}   € ô 1@Ø	ˆ;˜ ¨¸ô1Ñ-€K�˜ (¨Aô *Ø	ˆ;˜ ¨°9ÀEô�L€Cˆô 6ØØØ	�‰���ÐØØØó€Gð �ˆ<Ðrp   c           	     ó&   — t        | |||||d¬«      S ©Nr1   rW  ©r  ©r¨   rI  r³  r  rG  rJ  s         rn   Úmax_pool2d_with_indicesr„    ó    € ô "Ø	ˆ;˜ ¨°9ÀAôð rp   c           	     ó&   — t        | |||||d¬«      S ©Nr­   rW  r‚  rƒ  s         rn   Úmax_pool3d_with_indicesrˆ  %  r…  rp   c                ó  ‡‡‡‡‡‡‡‡‡‡‡— ‰dk(  rddgŠ|dk(  rddg}‰s‰Št        |t        «      sJ ‚t        ‰«      dk(  sJ ‚t        ‰«      dk(  sJ ‚t        ‰«      dk(  sJ ‚t        |«      dk(  sJ ‚t        |j                  «       «      dv sJ ‚| j	                  «        | j                  «       }t        |t        «      r¹t        |j                  j                  t        «      r•|j                  j                  }	|	j                  «       }
|
€J ‚t        j                  d t        j                  |
|	j                  «       |	j                  «       ¬«      |	¬«      }|j                  «        |j                  «       }n|j                  «       }|d uxr |d   dk(  xs |d uxr |d   dk(  }t        d„ |D «       «      rt!        | |‰‰‰|||«      S |j                  «       �^ }}Š| j                  «       �^ }ŠŠ|j#                  «       Š| j#                  «       Št%        |j                  «       «      }t'        ˆˆfd„t)        ‰d   dz  «      D «       «      Št'        ˆˆfd	„t)        ‰d   dz  «      D «       «      Š‰‰z  }|d
kD  rt!        | |‰‰‰|||«      S |j                  «       Šˆˆˆˆˆˆˆˆˆˆˆfd„}t        j*                  | j                  «       | j                  «       ||¬«      }|rt        j,                  j/                  |«      S |S )Nr   r3   r1   r½  )r   r»   rì   r¡  c              3  ó&   K  — | ]	  }|d k7  –— Œ y­wrb  rü   r/  s     rn   rô   z3max_pool2d_with_indices_backward.<locals>.<genexpr>d  s   è ø€ Ò
$�aˆ1��6Ñ
$ùr"  c              3  ó�   •K  — | ]=  }t        t        |‰d    «      t        d t        |‰d    z
  ‰d    «      «      z
  d«      –— Œ? y­w©r   r3   N©r¸  r+   ©rò   r7  rI  r³  s     €€rn   rô   z3max_pool2d_with_indices_backward.<locals>.<genexpr>q  óM   øè ø€ ò àô 	ŒH�Q˜˜q™	Ó"¤S¨¬H°Q¸ÀQ¹Ñ5GÈÐPQÉÓ,SÓ%TÑTÐVW×Xñùó   ƒAAc              3  ó�   •K  — | ]=  }t        t        |‰d    «      t        dt        |‰d    z
  ‰d    «      «      z
  d «      –— Œ? y­w©r3   r   Nr�  ©rò   ÚwrI  r³  s     €€rn   rô   z3max_pool2d_with_indices_backward.<locals>.<genexpr>u  r�  r�  rO  c                óœ  •— | �^ }}}t        j                  |‰z  |z   t        j                  «      }|‰d   z   }|‰d   z   }t        j                  t	        |‰d   z
  ‰d   z   ‰d   «      t        j                  «      }t        j                  t	        |‰d   z
  ‰d   z   ‰d   «      t        j                  «      }t        j                  t	        |‰d   «      dz   t        j                  «      }t        j                  t	        |‰d   «      dz   t        j                  «      }t        j
                  |t        j                  dt        j                  «      «      }t        j
                  |t        j                  dt        j                  «      «      }t        j                  |t        j                  ‰t        j                  «      «      }t        j                  |t        j                  ‰t        j                  «      «      }d }	t        ‰«      D �]3  }
t        ‰«      D �]!  }t        j                  |t        j                  |
t        j                  «      «      }t        j                  |t        j                  |t        j                  «      «      }g |¢t        j                  t        j                  |t        j                  |t        j                  dt        j                  «      «      «      ‰d   d¬«      ‘t        j                  t        j                  |t        j                  |t        j                  dt        j                  «      «      «      ‰d   d¬«      ‘} ‰|«      } ‰|«      }t        j                  ||«      }|	€;t        j                  ||t        j                  dt        j                  «      «      }	�Œ¥t        j                  t        j                  t        j                   ||«      t        j                   ||«      «      |«      }t        j                  |t        j                  |	|«      |	«      }	�Œ$ �Œ6 |	€J ‚|	S )Nr   r3   éþÿÿÿFrw  rz  rÄ  )rY   rX  r„   r  r+   rÜ  rY  rÝ  r  r¤   rB  rÿ  rç  r  r  rÈ  rÇ  )r[  rC  r7  r”  Ú
index_testÚphstartÚpwstartÚphendÚpwendÚgradientÚph_Úpw_ÚphÚpwÚ
grad_indexÚindex_actualÚ	grad_partr   rÏ  Úgrad_loaderÚh_window_sizerL  Úindices_sizerI  r  Úpooled_heightÚpooled_widthr³  Úw_window_sizeÚwidths                      €€€€€€€€€€€rn   rˆ   z,max_pool2d_with_indices_backward.<locals>.fn„  sA  ø€ Ø‰ˆ��AÜ—^‘^ A¨¡I°¡M´5·;±;Ó?ˆ
Ø�˜‘
‰NˆØ�˜‘
‰NˆÜ—.‘.Ü�Q˜ Q™Ñ'¨&°©)Ñ3°V¸A±YÓ?ÄÇÁó
ˆô —.‘.Ü�Q˜ Q™Ñ'¨&°©)Ñ3°V¸A±YÓ?ÄÇÁó
ˆô —‘œx¨¨6°!©9Ó5¸Ñ9¼5¿;¹;ÓGˆÜ—‘œx¨¨6°!©9Ó5¸Ñ9¼5¿;¹;ÓGˆä—+‘+˜g¤s§|¡|°A´u·{±{Ó'CÓDˆÜ—+‘+˜g¤s§|¡|°A´u·{±{Ó'CÓDˆÜ—‘˜E¤3§>¡>°-ÄÇÁÓ#MÓNˆÜ—‘˜E¤3§>¡>°,ÄÇÁÓ#LÓMˆàˆÜ˜Ó'ó #	WˆCÜ˜]Ó+ó "W�Ü—W‘W˜W¤c§l¡l°3¼¿¹Ó&DÓE�Ü—W‘W˜W¤c§l¡l°3¼¿¹Ó&DÓE�ðØðä×)Ñ)ÜŸ™ B¬¯©°´s·|±|ÀAÄuÇ{Á{Ó7SÓ(TÓUØ$ RÑ(Ø#ôðô ×)Ñ)ÜŸ™ B¬¯©°´s·|±|ÀAÄuÇ{Á{Ó7SÓ(TÓUØ$ RÑ(Ø#ôð�
ñ  .¨jÓ9�Ù'¨
Ó3�	ÜŸ™˜|¨ZÓ8�àÐ#ä"Ÿy™yØ˜y¬#¯,©,°s¼E¿M¹MÓ*Jó ’Hô Ÿ8™8ÜŸ™ÜŸF™F 2 uÓ-ÜŸF™F 2 uÓ-óð ó�Dô  #Ÿy™y¨¬s¯w©w°xÀÓ/KÈXÓV’HòE"Wð#	WðH Ð#Ð#Ð#Øˆrp   rc  )rt   rG   rÌ   rÍ   rè  rÆ  rv   rD   rw   r6   rð  r  r¿   Údecide_layoutr�  r$  Ú)fallback_max_pool2d_with_indices_backwardre  rr   r¸  r  rë   rã  rk  )Úgrad_outputr¨   rI  r³  r  rG  rJ  r!  Ú	gO_striderv   r   Úx_bufferÚx_strideÚis_channels_lastÚ_batchÚ_heightr   rj  rR  rˆ   rz   r¤  r¥  rL  r¦  r§  r¨  r©  rª  s     ```                @@@@@@@@rn   Ú max_pool2d_with_indices_backwardr´  9  s  ÿú€ ð �!‚|Ø�a�&ˆØ�1‚}Ø�q�6ˆÙØˆä�aœÔ#Ð#Ð#Üˆ{Ó˜qÒ Ð Ð Üˆv‹;˜!ÒÐÐÜˆw‹<˜1ÒÐÐÜˆx‹=˜AÒÐÐÜˆq�z‰z‹|Ó Ñ&Ð&Ð&ð ×ÑÔØ×,Ñ,Ó.€Iä�!”YÔ¤J¨q¯v©v¯{©{¼IÔ$FØ�v‰v�{‰{ˆØ—‘Ó"ˆØÐ!Ð!Ð!Ü×$Ñ$ØÜ×$Ñ$ØØ—n‘nÓ&Ø—]‘]“_ôð
 ô
ˆð 	×ÑÔ Ø×&Ñ&Ó(‰à×%Ñ%Ó'ˆà ¨Ð,ÒA°¸!±ÀÑ1Aò Ø˜ÐÒ3 )¨A¡,°!Ñ"3ð ô Ñ
$˜8Ô
$Ô$ä8Ø˜˜K¨°¸(ÀIÈwó
ð 	
ð  Ÿj™j›lÑ€VˆW�eØ&1×&:Ñ&:Ó&<Ñ#€Qˆ�|à×(Ñ(Ó*€NØ×)Ñ)Ó+€KÜ�A—J‘J“LÓ!€Häô ä�{ 1‘~¨Ñ)Ó*ôó €Mô ô ä�{ 1‘~¨Ñ)Ó*ôó €Mð
   -Ñ/€Kà�RÒä8Ø˜˜K¨°¸(ÀIÈwó
ð 	
ð ×#Ñ#Ó%€L÷9ö 9ôv ×
Ñ
Ø×%Ñ%Ó'Ø×#Ñ#Ó%ØØô	€Cñ Ü�‰×4Ñ4°SÓ9Ð9àˆ
rp   c                ó6   ‡‡— | j                  «       Šˆˆfd„}|S )Nc           
     ó  •‡ ‡‡‡	‡
— |\  ŠŠ	|\  ŠŠ
|\  }}t        j                  t        j                  t        j                  ‰‰z   t        j
                  «      t        j                  |t        j
                  «      «      t        j                  t        j                  ‰
‰	z   t        j
                  «      t        j                  |t        j
                  «      «      «      }t        j                  |ˆˆˆ	ˆ ˆ
ˆfd„‰«      S )Nc                 ó,   •—  ‰g ‰¢‰ ‰z   ‘‰‰z   ‘«      S rŸ   rü   )Úh_start_indexrA  ÚiwrC  Úw_start_indexrh  s   €€€€€€rn   rI  z3pad_adaptive_loader.<locals>.load.<locals>.<lambda>à  s&   ø€ ‘HÐN˜vÐN }°rÑ'9ÐN¸=È2Ñ;MÐNÓO€ rp   )rY   rÈ  rÇ  rX  r„   rÅ  rÉ  )rC  Ú
incrementsÚstart_indicesÚend_indicesÚh_end_indexÚw_end_indexrÏ  r¸  rA  r¹  rº  Úpad_valrh  s   `      @@@@€€rn   r  z!pad_adaptive_loader.<locals>.loadÎ  s¹   ý€ Ø‰ˆˆBØ'4Ñ$ˆ�}Ø#.Ñ ˆ�[ä�x‰xÜ�F‰FÜ—‘˜}¨rÑ1´5·;±;Ó?Ü—‘˜{¬E¯K©KÓ8óô �F‰FÜ—‘˜}¨rÑ1´5·;±;Ó?Ü—‘˜{¬E¯K©KÓ8óó	
ˆô �z‰zØßOÐOØó
ð 	
rp   ©re  )r¨   rÀ  r  rh  s    ` @rn   Úpad_adaptive_loaderrÂ  Ë  s   ù€ Ø�}‰}‹€Hõ
ð, €Krp   c                óÎ   — t        j                  | ||¬«      }t        j                  |||¬«      }t        j                  | ||¬«      }t        j                  |||¬«      }	||||	fS )N)Úout_dimÚinp_dim)r  r)  )
r¡  r¢  Úh_inÚw_inÚh_outÚw_outr¸  r¾  rº  r¿  s
             rn   Ú compute_indices_adaptive_poolingrÊ  ç  sa   € Ü×%Ñ% k¸5È$ÔO€MÜ×#Ñ# I°uÀdÔK€Kä×%Ñ% k¸5È$ÔO€MÜ×#Ñ# I°uÀdÔK€Kà˜+ }°kÐAÐArp   c                ód   ‡‡‡‡‡‡— |\  }}|\  }}	t        | |||||	«      \  ŠŠŠŠˆˆˆˆˆˆfd„}
|
S )Nc                ó  •— | �^ }}} ‰|«      } ‰|«      } ‰|«      } ‰|«      }d }	t        j                  t        ‰d   «      t        ‰d   «      «      D ]$  \  }
} |||
|g||g||g«      }|	€|}	Œ ‰||	«      }	Œ& |	S r  )r  Úproductr  )r[  rd  rC  r`  Úbwr¸  r¾  rº  r¿  r½  rA  r¹  r;  Úh_end_index_fnÚh_start_index_fnÚkernel_maxesÚ
pooling_fnÚw_end_index_fnÚw_start_index_fns                €€€€€€rn   rˆ   z _adaptive_pooling_fn.<locals>.fn   s±   ø€ Ø‰ˆ��Rá(¨Ó,ˆÙ$ RÓ(ˆá(¨Ó,ˆÙ$ RÓ(ˆàˆÜ×'Ñ'¬¨l¸1©oÓ(>ÄÀlÐSTÁoÓ@VÓWò 
	1‰FˆB�ÙØØ�R�Ø Ð.Ø˜kÐ*ó	ˆCð ˆ~Ø‘á# C¨Ó0‘ð
	1ð ˆrp   ©rÊ  )r¡  r¢  rÑ  Úin_sizesÚ	out_sizesrÒ  rÆ  rÇ  rÈ  rÉ  rˆ   rÏ  rÐ  rÓ  rÔ  s     `  `     @@@@rn   Ú_adaptive_pooling_fnrØ  ñ  sP   ý€ ð �J€Dˆ$Ø�L€Eˆ5ô 	)Ø�Y  d¨E°5ó	ñØØØØ÷
ñ ð. €Irp   c                óh   ‡‡‡
‡‡‡‡— |\  }Š|\  }}t        | ||‰||«      \  ŠŠ
ŠŠˆ
ˆˆˆˆˆˆfd„}	|	S )Nc                óÆ  •— | �^ }}} ‰|«      } ‰|«      } ‰|«      } ‰|«      }d }	d }
t        j                  t        ‰d   «      t        ‰d   «      «      D ]„  \  }} ||||g||g||g«      }t        j                  ||z   ‰z  |z   |z   t
        j                  «      }|
€|}
n+t        j                  t        j                  ||	«      ||
«      }
|	€|}	Œ| ‰||	«      }	Œ† |
S r  )	r  rÍ  r  rY   rX  r„   rÅ  r  Úgt)r[  rd  rC  r`  rÎ  r¸  r¾  rº  r¿  ÚmaxvalÚmaxindexrA  r¹  r;  r@  rÏ  rÐ  rÑ  rÒ  rÓ  rÇ  rÔ  s                  €€€€€€€rn   rˆ   z)_adaptive_pooling_fn_with_idx.<locals>.fn)  s  ø€ Ø‰ˆ��Rá(¨Ó,ˆÙ$ RÓ(ˆá(¨Ó,ˆÙ$ RÓ(ˆàˆØˆÜ×'Ñ'¬¨l¸1©oÓ(>ÄÀlÐSTÁoÓ@VÓWò 	1‰FˆB�ÙØØ�R�Ø Ð.Ø˜kÐ*ó	ˆCô —N‘NØ Ñ# tÑ+¨mÑ;¸bÑ@Ä%Ç+Á+óˆEð ÐØ ‘äŸ9™9¤S§V¡V¨C°Ó%8¸%ÀÓJ�àˆ~Ø‘á# C¨Ó0‘ð)	1ð, ˆrp   rÕ  )r¡  r¢  rÑ  rÖ  r×  rÒ  rÆ  rÈ  rÉ  rˆ   rÏ  rÐ  rÓ  rÇ  rÔ  s     `  `    @@@@@rn   Ú_adaptive_pooling_fn_with_idxrÞ    sQ   þ€ ð �J€Dˆ$Ø�L€Eˆ5ô 	)Ø�Y  d¨E°5ó	ñØØØØ÷
!ò !ðF €Irp   c                ó6  ‡ ‡‡— ‰ j                  «       t        j                  k(  rt        d«      ‚t	        ‰ t
        «      sJ ‚t        |«      dk(  sJ ‚‰ j                  «        ‰ j                  «       �^ }}}t        j                  j                  j                  |«      }t        j                  j                  j                  |«      }|\  }}||k(  r||k(  rt        ‰ «      S |dk(  s|dk(  r2g |¢|‘|‘}t        |‰ j                  «       ‰ j                  «       ¬«      S ||z  dk(  r,||z  dk(  r$t!        ||«      t!        ||«      g}t#        ‰ |«      S t%        ||z   dz
  |«      }	t%        ||z   dz
  |«      }
t'        |«      ||gz   }‰ j                  «       }|	|
z  }|dkD  rt)        ‰ |«      S d„ }d„ }t+        |||	|
g||g||gt,        j.                  ¬	«      Št1        t3        ‰ «      «      Šˆˆˆ fd
„}t5        j6                  ‰ j                  «       |||¬«      }|S )Nz0'adaptive_avg_pool2d' not implemented for 'Long'r1   r   r`  r3   rO  c                ó    — t        | |z  |«      S rŸ   ©r+   ©r@  rÄ  rÅ  s      rn   r¡  z)_adaptive_avg_pool2d.<locals>.start_indexz  ó   € Ü˜ ™¨7Ó3Ð3rp   c                ó2   — t        | dz   |z  |z   dz
  |«      S r  rá  râ  s      rn   r¢  z'_adaptive_avg_pool2d.<locals>.end_index}  ó"   € Ü˜ ™ gÑ-°Ñ7¸!Ñ;¸WÓEÐErp   ©r¡  r¢  rÑ  rÖ  r×  rÒ  c                ó^   •— t        j                   ‰| t        ‰«      «       ‰| ‰«      «      S rŸ   )rY   ÚtruedivrÂ  )r[  Úfn_sumÚones_loaderr¨   s    €€€rn   rˆ   z _adaptive_avg_pool2d.<locals>.fn‹  s-   ø€ Ü�{‰{Ù�3Ô+¨AÓ.Ó/±¸¸[Ó1Ió
ð 	
rp   rc  )r¿   r„   rÅ  r›  rt   rG   rÌ   rè  rÍ   rZ   rf   ræ   r.  rÀ  ri  rw   r+   Ú
avg_pool2drJ   rr   Úfallback_adaptive_avg_pool2drØ  rY   r¤   rÂ  Ú	ones_likerD   rë   )r¨   rh  rê  rÆ  rÇ  rÈ  rÉ  Úo_sizerI  Úh_kernel_maxÚw_kernel_maxrj  r»   rR  r¡  r¢  rˆ   Úrvré  rê  s   `                 @@rn   Ú_adaptive_avg_pool2drò  T  s  ú€ à‡{�{ƒ}œŸ™Ò#äÐMÓNÐNÜ�aœÔ#Ð#Ð#Üˆ{Ó˜qÒ Ð Ð Ø‡N�NÔàŸ™›Ñ€UˆD�$ä�7‰7×Ñ×%Ñ% dÓ+€DÜ�7‰7×Ñ×%Ñ% dÓ+€Dà�L€Eˆ5ð ˆu‚}˜ šÜ�Q‹xˆà�‚z�U˜a’ZØ'�5Ð'˜%Ð' Ð'ˆÜ�V 1§;¡;£=¸¿¹»ÔHÐHØˆe�|�qÒ˜T E™\¨QÒ.Ü  eÓ,¬h°t¸UÓ.CÐDˆÜ˜!˜[Ó)Ð)ä˜D 5™L¨1Ñ,¨uÓ5€LÜ˜D 5™L¨1Ñ,¨uÓ5€Lä�E‹{˜e U˜^Ñ+€HØ�K‰K‹M€Eà Ñ-€KØ�RÒä+¨A¨{Ó;Ð;ò4òFô "ØØØ" LÐ1Ø˜�Ø˜%�.Ü—7‘7ô€Fô &¤i°£lÓ3€Kö
ô
 
×	Ñ	Ø�|‰|‹~ØØØô	
€Bð €Irp   c                ó¾  ‡ ‡‡— ‰ j                  «       t        j                  k(  rt        d«      ‚t	        ‰ t
        «      sJ ‚t        |«      dk(  sJ ‚‰ j                  «        ‰ j                  «       �^ }}}t        j                  j                  j                  |«      }t        j                  j                  j                  |«      }|\  }}|dk(  s|dk(  r\g |¢|‘|‘}t        |‰ j                  «       ‰ j                  «       ¬«      t        |t        j                  ‰ j                  «       ¬«      fS ||z  dk(  r||z  dk(  rt        ‚t!        ||z   dz
  |«      }t!        ||z   dz
  |«      }	t#        |«      ||gz   }
‰ j                  «       }||	z  }|dkD  rt%        ‰ |«      S d„ }d„ }t'        ||||	g||g||gt(        j*                  ¬	«      Št-        ||||	g||g||gt(        j*                  ¬	«      Šˆˆ fd
„}ˆˆ fd„}t/        j0                  ‰ j                  «       |||
¬«      }t/        j0                  ‰ j                  «       t        j                  ||
¬«      }||fS )Nz,adaptive_max_pool2d not implemented for Longr1   r   r`  r3   rO  c                ó    — t        | |z  |«      S rŸ   rá  râ  s      rn   r¡  z(adaptive_max_pool2d.<locals>.start_indexÄ  rã  rp   c                ó2   — t        | dz   |z  |z   dz
  |«      S r  rá  râ  s      rn   r¢  z&adaptive_max_pool2d.<locals>.end_indexÇ  rå  rp   ræ  c           	     ó<   •—  ‰| t        ‰t        d«      «      «      S ©Nr[  ©rÂ  r;  )r[  Úinner_func_max_valr¨   s    €€rn   Úinner_fn_max_valz-adaptive_max_pool2d.<locals>.inner_fn_max_valÜ  ó   ø€ Ù! #Ô':¸1¼eÀF»mÓ'LÓMÐMrp   c           	     ó<   •—  ‰| t        ‰t        d«      «      «      S r÷  rø  )r[  Úinner_func_max_idxr¨   s    €€rn   Úinner_fn_max_idxz-adaptive_max_pool2d.<locals>.inner_fn_max_idxß  rû  rp   rc  )r¿   r„   rÅ  r›  rt   rG   rÌ   rè  rÍ   rZ   rf   ræ   r.  ri  rw   Ú
ValueErrorrJ   rr   Úfallback_adaptive_max_pool2drØ  rY   rÜ  rÞ  rD   rë   )r¨   rh  rê  rÆ  rÇ  rÈ  rÉ  rî  rï  rð  rj  r»   rR  r¡  r¢  rú  rþ  rñ  Úrirý  rù  s   `                  @@rn   Úadaptive_max_pool2dr  Ÿ  sL  ú€ à‡{�{ƒ}œŸ™Ò#äÐIÓJÐJÜ�aœÔ#Ð#Ð#Üˆ{Ó˜qÒ Ð Ð Ø‡N�NÔàŸ™›Ñ€UˆD�$ä�7‰7×Ñ×%Ñ% dÓ+€DÜ�7‰7×Ñ×%Ñ% dÓ+€Dà�L€Eˆ5à�‚z�U˜a’ZØ'�5Ð'˜%Ð' Ð'ˆÜ�V 1§;¡;£=¸¿¹»ÔHÌ%Øœ%Ÿ+™+¨a¯l©l«nôK
ð 
ð 	
ð ˆe�|�qÒ˜T E™\¨QÒ.äÐä˜D 5™L¨1Ñ,¨uÓ5€LÜ˜D 5™L¨1Ñ,¨uÓ5€Lä�E‹{˜e U˜^Ñ+€HØ�K‰K‹M€Eà Ñ-€KØ�RÒä+¨A¨{Ó;Ð;ò4òFô .ØØØ" LÐ1Ø˜�Ø˜%�.Ü—;‘;ôÐô 7ØØØ" LÐ1Ø˜�Ø˜%�.Ü—;‘;ôÐõNõNô 
×	Ñ	Ø�|‰|‹~ØØ!Øô	
€Bô 
×	Ñ	Ø�|‰|‹~Ü�k‰kØ!Øô	
€Bð ˆrˆ6€Mrp   c                óh   ‡ ‡‡‡‡‡‡— ‰‰   Š‰‰   Š‰‰   Š‰ j                  «       Šˆˆˆˆˆˆ ˆfd„}|S )Nc                ó`  •— ‰j                  «       }t        |«      dk(  r[t        | «      dk(  r ‰d| d   ‰dz
  ‰
z
  g«      }nJt        | «      dk\  r ‰| d   | d   ‰dz
  ‰
z
  g«      }n$ ‰dd‰dz
  ‰
z
  g«      }n ‰g | ¢‰dz
  ‰
z
  ‘«      }t        j                  |‰j	                  «       «      }t        j                  ‰‰z
  t
        j                  «      }t        j                  ‰dz
  t
        j                  «      }t        j                  t        j                  |t
        j                  «      t        j                  |t
        j                  «      «      }t        j                  t        j                  |d«      d|«      }t        j                  ||z   |z  «      t        j                  ||z  «      z
  }t        j                  |t
        j                  «      }t        j                  ||«      }	t        j                  t        j                  |	||«      t        j                   ‰«      «      S )Nr­   r3   r   r1   )rÍ   rÌ   rY   rX  r¿   r„   rÅ  rè  rø   Úfloat64r  rç  rN  rÇ  rB  rÀ   r´  )rC  r|   Úsamples_shapeÚsampleÚi_exprÚdiffÚout_sz_exprr`  Úseq_irÏ  rÐ   Úin_szÚ	kernel_szÚndimsÚout_szÚsamplesÚsamples_loaders             €€€€€€€rn   r  z)_fractional_pooling_offsets.<locals>.load÷  sÅ  ø€ ð  ×(Ñ(Ó*ˆäˆ}Ó Ò"Ü�6‹{˜aÒñ (¨¨F°1©I°u¸q±yÀ3±Ð(GÓH‘Ü�V“ Ò!ñ (¨°©°F¸1±I¸uÀq¹yÈ3¹Ð(OÓP‘ñ (¨¨A¨u°q©y¸3©Ð(?Ó@‘ñ $Ð$> fÐ$>¨e°a©i¸#©oÐ$>Ó?ˆFÜ—‘  7×#4Ñ#4Ó#6Ó7ˆÜ�~‰~˜e iÑ/´·±Ó=ˆÜ—n‘n V¨a¡Z´·±Ó=ˆÜ—‘Ü�L‰L˜œuŸ}™}Ó-¬s¯|©|¸KÌÏÉÓ/Wó
ˆô —	‘	œ#Ÿ&™& ¨aÓ0°!°UÓ;ˆÜ—	‘	˜6 F™?¨eÑ3Ó4´s·y±yÀÈ%ÁÓ7PÑPˆÜ—‘˜U¤E§K¡KÓ0ˆÜ�v‰v�f˜kÓ*ˆÜ×$Ñ$¤S§Y¡Y¨t°U¸DÓ%AÄ5Ç=Á=ÐQVÓCWÓXÐXrp   rÁ  )r  r  r  r  rÐ   r  r  r  s   `````` @rn   Ú_fractional_pooling_offsetsr  ñ  s@   þ€ Ø�C‰[€FØ�#‰J€EØ˜#‘€IØ×(Ñ(Ó*€N÷!Yò !YðF €Krp   c                ó"   — t        | |||d¬«      S r�  ©Ú_fractional_max_pool©r¨   rI  rh  Úrandom_sampless       rn   Úfractional_max_pool2dr    ó   € ä  ;°¸^ÐSTÔUÐUrp   c                ó"   — t        | |||d¬«      S r‡  r  r  s       rn   Úfractional_max_pool3dr  "  r  rp   c                óÐ  ‡‡‡‡— | j                  «        | j                  d ‰  | j                  ‰ d  }}t        j                  d¬«      5  t	        ‰«      D �cg c]  }t        ||||‰|¬«      ‘Œ c}Š| j                  «       Šˆˆˆfd„}ˆˆfd„Št        |«      t        |«      z   }	| j                  «       }
t        j                  d| | j                  «       |
|
||	|¬«      }t        j                  d| | j                  «       t        j                  |
||	|¬«      }t        |t        «      sJ |«       ‚t        |j                   j                   t        «      r|j#                  «        t        |t        «      sJ |«       ‚t        |j                   j                   t        «      r|j#                  «        t%        ||| j                  ‰«      }||fcd d d «       S c c}w # 1 sw Y   y xY w)	NrO  rm  )r  r  r  r  r  rÐ   c                ó6   •— | d ‰  } ‰g |¢ ‰| |«      ¢«      S rŸ   rü   )r[  r_  rC  rv  rQ  rh  s      €€€rn   ra  z&_fractional_max_pool.<locals>.fn_inner:  s.   ø€ Ø˜˜5˜&�\ˆFÙÐO˜fÐOÑ':¸3ÀÓ'NÐOÓPÐPrp   c                ó~   •— | d ‰  }| ‰ d  }t        ‰«      D �cg c]  } ‰|   |||   «      ||   z   ‘Œ c}S c c}w rŸ   r^  )r[  r_  rC  Úbdhwr0  Údhw_index_fnrQ  s        €€rn   rv  z1_fractional_max_pool.<locals>.increments_to_index>  s^   ø€ Ø˜˜5˜&�\ˆFØ˜�v�w�<ˆDô ˜u›öàð  �˜Q‘ ¨¨Q©Ó0°=ÀÑ3CÓCòð ùò s   ›:r¸  rb  rf  )rè  rY  r4   r   r  r  re  rr   r¿   rE   rë   rw   r„   rÅ  rt   rG   rv   r²  rz  )r¨   rI  rh  r  rQ  rê  Úinp_dhwr0  ra  rj  r»   r½  rj  r!  r   rv  rh  s       `         @@@rn   r  r  '  s¶  û€ Ø‡N�NÔØ—W‘W˜W˜u˜fÐ% q§w¡w°¨v¨wÐ'7ˆ7€Eä	�‰°"Ô	5ñ =ô ˜5“\ö

ð ô (Ø&ØØ"Ø%ØØöò

ˆð —=‘=“?ˆö	Qõ	ô ˜“;¤ kÓ!2Ñ2ˆØ—‘“ˆÜ×!Ñ!Ø ØØ—<‘<“>ØØØØØ(ô	
ˆô ×"Ñ"Ø#ØØ—<‘<“>Ü—k‘kØØØØ(ô	
ˆô ˜&¤)Ô,Ð4¨fÓ4Ð,Ü�f—k‘k×&Ñ&¬	Ô2à�N‰NÔÜ˜'¤9Ô-Ð6¨wÓ6Ð-Ü�g—l‘l×'Ñ'¬Ô3à�O‰OÔä*Ø�[ !§'¡'Ð+>ó
ˆð �wˆ÷{=ñ =ùò

÷=ð =ús   ÁGÁGÁ1EGÇGÇG%c                ó~  ‡ ‡‡— ‰ j                  «        ‰ j                  «       �^ }}}t        j                  j                  j                  |«      }t        j                  j                  j                  |«      }|�^ }}}	||z  dk(  r,||	z  dk(  r$t        ‰ t        ||«      t        ||	«      gd¬«      S t        ||«      }
t        ||	«      }d„ Šˆfd„}t        ‰||
|g||g||	gt        j                  ¬«      Šˆˆ fd„}t        j                  ‰ j                  «       ‰ j                  «       |t!        |«      ¬«      }|S )	Nr   r3   )Údivisor_overridec                óF   — t        | |z  t        j                  |«      «      S rŸ   )r*   rÀ   r´  râ  s      rn   r¡  z0upsample_nearest2d_backward.<locals>.start_index€  s   € Ü�u˜w‘¬¯©°gÓ(>Ó?Ð?rp   c                ó   •—  ‰| dz   ||«      S r  rü   )r@  rÄ  rÅ  r¡  s      €rn   r¢  z.upsample_nearest2d_backward.<locals>.end_indexƒ  s   ø€ Ù˜E A™I¨°Ó9Ð9rp   ræ  c                ó(   •—  ‰| t        ‰«      «      S rŸ   )rÂ  )r[  ré  r¨   s    €€rn   rˆ   z'upsample_nearest2d_backward.<locals>.fn�  s   ø€ Ù�cÔ.¨qÓ1Ó2Ð2rp   rc  )rè  rÍ   rZ   rf   ræ   r.  rë  r+   rJ   rØ  rY   r¤   rD   rë   rw   r¿   rr   )r¨   rh  rw  rø  rù  r²  Úinp_hÚinp_wÚout_hÚout_wrï  rð  r¢  rˆ   rñ  ré  r¡  s   `              @@rn   Úupsample_nearest2d_backwardr+  k  s1  ú€ ð ‡N�NÔàŸJ™J›LÑ€VˆU�EÜ�G‰G×Ñ×&Ñ& uÓ-€EÜ�G‰G×Ñ×&Ñ& uÓ-€Eð 'Ñ€VˆU�Eàˆu�}˜Ò˜e e™m¨qÒ0ÜØ”˜ Ó&¬°¸Ó(>Ð?ÐRSô
ð 	
ô ˜5 %Ó(€LÜ˜5 %Ó(€Lò@ô:ô "ØØØ" LÐ1Ø˜�Ø˜%�.Ü—7‘7ô€Fõ3ô 
×	Ñ	Ø�|‰|‹~Ø�k‰k‹mØä�JÓô
€Bð €Irp   c           
     ó(   — t        | ||||||d¬«      S )Nr1   r?  ©Ú_avg_poolnd©r¨   rI  r³  r  rJ  Úcount_include_padr#  s          rn   rë  rë  �  ó)   € ô Ø	ØØØØØØØô	ð 	rp   c           
     ó(   — t        | ||||||d¬«      S )Nr­   r?  r-  r/  s          rn   Ú
avg_pool3dr3  ³  r1  rp   c                ó&  ‡‡‡‡‡‡‡— ‰s‰Š‰sdg‰z  Št        ‰‰«      Št        ‰‰«      Št        ‰‰«      Št        | t        «      sJ ‚t        ‰«      ‰k(  sJ ‚t        ‰«      ‰k(  sJ ‚t        ‰«      ‰k(  sJ ‚t        | j	                  «       «      ‰dz   ‰dz   fv sJ ‚| j                  «        | j	                  «       d ‰  }| j	                  «       ‰ d  Št        t        ‰«      D �	cg c]  }	t        ‰|	   |	‰‰‰|«      ‘Œ c}	Ž \  }
}t        ‰«      st        |«      rt        | d‰¬«      Šd}n| j                  «       Šd}t        |«      t        |
«      z   }| j                  «       }t        | t        j                   d¬«      }ˆˆˆˆfd	„}t#        j$                  t&        j(                  ‰«      }|d
kD  r6t        d„ t        ‰‰«      D «       «      rt*        ‰dz
     } || ‰‰‰|‰|«      S |d
k  rt-        j.                  d
¬«      nt1        j2                  «       }| j5                  «       }|€J ‚|5  t7        j8                  d| |||||‰¬«      }d d d «       t;        j<                  d«      r4t        |j<                  j<                  t6        «      r|j?                  «        |r|r|r|n|}tA        ||«      }n=ˆˆˆˆˆˆfd„}tC        j8                  | j5                  «       |||¬«      }tA        ||«      }tE        ||«      S c c}	w # 1 sw Y   Œ¸xY w)Nr   r3   r1   rÄ  r?  TF)rÒ   rÈ   c                óœ   •— | d ‰  }| ‰ d  }|}t        ‰«      D �cg c]  }||   ‰|   z  ||   z   ‰|   z
  ‘Œ }} ‰	g |¢|¢«      S c c}w rŸ   r^  )
r[  r_  rC  r`  rA  r|   rÐ   r  r³  rh  s
         €€€€rn   ra  z_avg_poolnd.<locals>.fn_inner  sq   ø€ Ø�U�s�d�ˆØ�#��ˆZˆØˆÜ>CÀC»jÖI¸ˆb�‰e�f˜Q‘iÑ " Q¡%Ñ'¨'°!©*Ó4ÐIˆÐIÙ˜˜&˜ 2˜Ó'Ð'ùò Js   �A	rO  c              3  óœ   K  — | ]D  \  }}t         j                  j                  j                  t	        j
                  ||«      «      –— ŒF y ­wrŸ   )rZ   rf   ræ   Ústatically_known_truerÀ   ÚNe)rò   rÿ   r5  s      rn   rô   z_avg_poolnd.<locals>.<genexpr>  s;   è ø€ ò  áˆAˆqô 	
�‰×Ñ×.Ñ.¬u¯x©x¸¸1«~×>ñ ùs   ‚A
Arm  ri  rb  rv   c                ó~  •— | ‰ d  }g }t        ‰«      D ]ƒ  }||   ‰|   z  ‰|   z
  }t        |‰
|   z   ‰	|   ‰|   z   «      }‰st        |d«      }t        |‰	|   «      }t        j                  ||z
  t
        j                  «      }|j                  |«       Œ… t        j                  t        j                  |«      S r  )r  r.   r-   rY   rX  r„   r  rx   r  r'  rŒ  )r[  r`  Údivide_factorsr|   ÚhstartÚhendÚfactorr0  rÐ   r7  rI  r  r³  s          €€€€€€rn   Úfn_countz_avg_poolnd.<locals>.fn_count;  sÁ   ø€ Ø�c�T�U�ˆBàˆNÜ˜3“Zò .�Ø˜A™ ¨¡Ñ*¨W°Q©ZÑ7�Ü˜6 K°¡NÑ2°A°a±D¸7À1¹:Ñ4EÓF�Ù(Ü  ¨›^�FÜ˜t Q q¡T›?�DÜŸ™¨¨v©´u·{±{ÓC�Ø×%Ñ% fÕ-ð.ô ×#Ñ#¤C§G¡G¨^Ó<Ð<rp   rc  )#rT   rt   rG   rÌ   rÍ   rè  r  r  rM  r$  r@  re  rr   r¿   rØ   r   rK  r  r'  rP  rŒ  Úfallbacks_avg_poolndr4   r   Ú
contextlibÚnullcontextrw   rE   rë   rñ   rv   r²  Údiv_primrD   rø   )r¨   rI  r³  r  rJ  r0  r#  rÐ   rê  r|   rÈ  Ú
ceil_modesÚhad_paddingrj  r»   Úoutput_dtypera  rR  ÚfallbackÚcontextr   rñ  Údivisorr½  r>  Údivide_factorr7  rh  s    ``` ` `                  @@rn   r.  r.  Ð  s  þ€ ñ ØˆÙØ�#˜‘)ˆÜ˜{¨CÓ0€KÜ˜& #Ó&€FÜ˜7 CÓ(€Gä�aœÔ#Ð#Ð#Üˆ{Ó˜sÒ"Ð"Ð"Üˆv‹;˜#ÒÐÐÜˆw‹<˜3ÒÐÐÜˆq�z‰z‹|Ó  q¡¨#°©'Ð 2Ñ2Ð2Ð2à‡N�NÔØ�J‰J‹L˜˜3˜$Ð€EØ	�
‰
‹�c�T�UÐ€Aäô ˜3“Zö

àô ˜˜1™˜q +¨v°wÀ	ÕJò

ðÑ€Eˆ:ô ˆ7„|”s˜:”Ü.¨q°#¸3Ô?ˆØ‰à—=‘=“?ˆØˆä�E‹{œT %›[Ñ(€HØ�K‰K‹M€Eä%Ø	Ü;×CÑCØ!ô€L÷(ô ×"Ñ"¤8§<¡<°Ó=€Kà�RÒœCñ  ä˜ VÓ,ô ô ô (¨¨a©Ñ0ˆÙØØØØØØØó
ð 	
ð ˜"Òô 	�‰°Õ4ä×#Ñ#Ó%ð ð �\‰\‹^€FØÐÐÐà	ñ 

Ü×ÑØ ØØØ"ØØØØ(ô	
ˆ÷

ô ˆr�w‰w˜Ô¤J¨r¯w©w¯|©|¼YÔ$Gà
�
‰
ŒáÑ*Ù&6Ñ"¸KˆÜ˜"˜gÓ&‰÷	=ñ 	=ô "×(Ñ(Ø—<‘<“>ØØØô	
ˆô ˜"˜mÓ,ˆä�F˜EÓ"Ð"ùòI

÷t

ð 

ús   Ã)LÈ2LÌLc                óÒ  ‡‡‡‡‡‡‡‡‡‡‡‡‡‡— ‰�‰dk7  sJ d«       ‚‰s‰Š‰sddgŠt        | t        «      sJ ‚t        |t        «      sJ ‚t        ‰«      dk(  sJ ‚t        ‰«      dk(  sJ ‚t        ‰«      dk(  sJ ‚t        |j                  «       «      dv sJ ‚| j	                  «        |j                  «       �^ }ŠŠt        ‰d‰‰‰|«      \  }	}
t        ‰d‰‰‰|«      \  }}| j                  «       Š‰d   xs ‰d   xs |
xs |Š| j                  «       �^ }ŠŠt        |j                  «       «      }|j                  «       }t        ˆˆfd„t        ‰d   dz  «      D «       «      Št        ˆˆfd„t        ‰d   dz  «      D «       «      Š‰‰z  }|dkD  rt        | |‰‰‰|‰‰«      S ˆˆˆˆˆfd	„Šˆˆˆˆˆˆˆˆˆˆˆˆfd
„}t        j                  | j                  «       |||¬«      }|S )Nr   údivisor must be not zeror1   r½  r3   c              3  ó�   •K  — | ]=  }t        t        |‰d    «      t        d t        |‰d    z
  ‰d    «      «      z
  d«      –— Œ? y­wrŒ  r�  rŽ  s     €€rn   rô   z&avg_pool2d_backward.<locals>.<genexpr>‚  r�  r�  c              3  ó�   •K  — | ]=  }t        t        |‰d    «      t        dt        |‰d    z
  ‰d    «      «      z
  d «      –— Œ? y­wr’  r�  r“  s     €€rn   rô   z&avg_pool2d_backward.<locals>.<genexpr>†  r�  r�  rO  c           	     ó@  •— t        j                  ‰d   t        j                  «      }t        j                  ‰d   t        j                  «      }t        j                  ‰d   t        j                  «      }t        j                  ‰d   t        j                  «      }t        j                  ‰d   t        j                  «      }t        j                  ‰d   t        j                  «      }t        j                  t        j
                  | |«      |«      }t        j                  t        j
                  ||«      |«      }	t        j                  t        j                  ||«      t        j                  t        j                  ‰t        j                  «      |«      «      }
t        j                  t        j                  |	|«      t        j                  t        j                  ‰t        j                  «      |«      «      }t        j                  |t        j                  dt        j                  «      «      }t        j                  |	t        j                  dt        j                  «      «      }	t        j                  |
t        j                  ‰t        j                  «      «      }
t        j                  |t        j                  ‰t        j                  «      «      }t        j
                  t        j                  |
|«      t        j                  ||	«      «      }|S )z{
        This computes the scaling factor that we will divide an element
        by when `count_include_pad=False`
        r   r3   )
rY   rY  r„   r  rÿ  rŒ  rÝ  r¤   rX  rÜ  )rŸ  r   Ústride_hÚstride_wÚpad_hÚpad_wÚkernel_hÚkernel_wr;  Úwstartr<  ÚwendrI  ÚheightrI  r  r³  rª  s                €€€€€rn   Ú!compute_pool_size_without_paddingz>avg_pool2d_backward.<locals>.compute_pool_size_without_padding™  sé  ø€ ô
 —<‘<  q¡	¬5¯;©;Ó7ˆÜ—<‘<  q¡	¬5¯;©;Ó7ˆÜ—‘˜W Q™Z¬¯©Ó5ˆÜ—‘˜W Q™Z¬¯©Ó5ˆÜ—<‘< ¨A¡´·±Ó<ˆÜ—<‘< ¨A¡´·±Ó<ˆÜ—‘œŸ™  XÓ.°Ó6ˆÜ—‘œŸ™  XÓ.°Ó6ˆÜ�{‰{Ü�G‰G�F˜HÓ%Ü�G‰G”C—N‘N 6¬5¯;©;Ó7¸Ó?ó
ˆô �{‰{Ü�G‰G�F˜HÓ%Ü�G‰G”C—N‘N 5¬%¯+©+Ó6¸Ó>ó
ˆô —‘˜V¤S§\¡\°!´U·[±[Ó%AÓBˆÜ—‘˜V¤S§\¡\°!´U·[±[Ó%AÓBˆÜ�{‰{˜4¤§¡°¼¿¹Ó!DÓEˆÜ�{‰{˜4¤§¡°´u·{±{Ó!CÓDˆÜŸ™¤§¡¨¨fÓ 5´s·w±w¸tÀVÓ7LÓMˆØÐrp   c                ó8  •— | �^ }}}|‰d   z   }|‰d   z   }t        j                  t        |‰d   z
  ‰d   z   ‰d   «      t        j                  «      }t        j                  t        |‰d   z
  ‰d   z   ‰d   «      t        j                  «      }t        j                  t        |‰d   «      dz   t        j                  «      }t        j                  t        |‰d   «      dz   t        j                  «      }t        j
                  |t        j                  dt        j                  «      «      }t        j
                  |t        j                  dt        j                  «      «      }t        j                  |t        j                  ‰t        j                  «      «      }t        j                  |t        j                  ‰t        j                  «      «      }d }t        ‰«      D �]+  }	t        ‰«      D �]  }
t        j                  |t        j                  |	t        j                  «      «      }t        j                  |t        j                  |
t        j                  «      «      }‰�‰}n‰s‰s‰d   ‰d   z  }n	 ‰||«      }t        j                   ‰g |¢t        j                  t        j                  |t        j                  |t        j                  dt        j                  «      «      «      ‰d¬«      ‘t        j                  t        j                  |t        j                  |t        j                  dt        j                  «      «      «      ‰d¬«      ‘«      |«      }t        j                  t        j                  ||«      t        j                  ||«      «      }|€;t        j                  ||t        j                  dt        j                   «      «      }�Œït        j                  |t        j                  ||«      |«      }�Œ �Œ. |€J ‚|S )Nr   r3   Frw  rÄ  )rY   rX  r+   r„   r  rÜ  rY  rÝ  r  r¤   rè  rB  rÿ  rÈ  rÇ  r  r  )r[  rC  r7  r”  r˜  r™  rš  r›  rœ  r�  rž  rŸ  r   rß  ÚpartrÏ  rX  r0  r#  r¤  r¥  rD  rI  r  r§  r¨  r³  r©  s                   €€€€€€€€€€€€rn   rˆ   zavg_pool2d_backward.<locals>.fnµ  s2  ø€ Ø‰ˆ��AØ�˜‘
‰NˆØ�˜‘
‰NˆÜ—.‘.Ü�Q˜ Q™Ñ'¨&°©)Ñ3°V¸A±YÓ?ÄÇÁó
ˆô —.‘.Ü�Q˜ Q™Ñ'¨&°©)Ñ3°V¸A±YÓ?ÄÇÁó
ˆô —‘œx¨¨6°!©9Ó5¸Ñ9¼5¿;¹;ÓGˆÜ—‘œx¨¨6°!©9Ó5¸Ñ9¼5¿;¹;ÓGˆä—+‘+˜g¤s§|¡|°A´u·{±{Ó'CÓDˆÜ—+‘+˜g¤s§|¡|°A´u·{±{Ó'CÓDˆÜ—‘˜E¤3§>¡>°-ÄÇÁÓ#MÓNˆÜ—‘˜E¤3§>¡>°,ÄÇÁÓ#LÓMˆàˆÜ˜Ó'ó *	RˆCÜ˜]Ó+ó )R�Ü—W‘W˜W¤c§l¡l°3¼¿¹Ó&DÓE�Ü—W‘W˜W¤c§l¡l°3¼¿¹Ó&DÓE�à#Ð/Ø,‘EÙ&©kØ'¨™N¨[¸©^Ñ;‘Eá=¸bÀ"ÓE�Eä—{‘{ÙðØ#ðä×1Ñ1Ü #§¡Ø$&¬¯©°´s·|±|ÀAÄuÇ{Á{Ó7SÓ(Tó!"ð !.Ø&+ôðô  ×1Ñ1Ü #§¡Ø$&¬¯©°´s·|±|ÀAÄuÇ{Á{Ó7SÓ(Tó!"ð !-Ø&+ôðóð& ó)�ô. —x‘xÜ—F‘F˜2˜uÓ%Ü—F‘F˜2˜uÓ%ó�ð Ð#Ü"Ÿy™y¨¨t´S·\±\À#ÄuÇ}Á}Ó5UÓV’Hä"Ÿy™y¨¬s¯w©w°xÀÓ/FÈÓQ’HòS)Rð*	RðV Ð#Ð#Ð#Øˆrp   rc  )rt   rG   rÌ   rÍ   rè  rM  re  rr   r¿   r¸  r  Úfallback_avg_pool2d_backwardrD   rë   rw   )r­  r¨   rI  r³  r  rJ  r0  r#  r   Ú_h_outÚ
ceil_mode1Ú_w_outÚ
ceil_mode2rj  r»   rR  rˆ   rñ  rX  r¤  r¥  rD  rW  r§  r¨  r©  rª  s     ``` ``          @@@@@@@@@rn   Úavg_pool2d_backwardr`  Y  s  ÿý€ ð Ð#Ð'7¸1Ò'<ÐXÐ>XÓXÐ<ÙØˆÙØ�a�&ˆä�k¤9Ô-Ð-Ð-Ü�aœÔ#Ð#Ð#Üˆ{Ó˜qÒ Ð Ð Üˆv‹;˜!ÒÐÐÜˆw‹<˜1ÒÐÐÜˆq�z‰z‹|Ó Ñ&Ð&Ð&à×ÑÔàŸ
™
›Ñ€Qˆ�ä%Ø��; ¨°óÑ€FˆJô & e¨Q°¸VÀWÈiÓXÑ€FˆJà×)Ñ)Ó+€Kà˜!‘*ÒF ¨¡
ÒF¨jÒF¸J€Kà&1×&:Ñ&:Ó&<Ñ#€Qˆ�|Ü�A—J‘J“LÓ!€HØ�K‰K‹M€Eäô ä�{ 1‘~¨Ñ)Ó*ôó €Mô ô ä�{ 1‘~¨Ñ)Ó*ôó €Mð
   -Ñ/€KØ�RÒä+ØØØØØØØØó	
ð 		
÷ð ÷8?÷ ?ôB 
×	Ñ	Ø×%Ñ%Ó'ØØØô	
€Bð €Irp   c                ó¶  ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ — ‰�‰dk7  sJ d«       ‚‰s‰Š‰sg d¢Št        | t        «      sJ ‚t        |t        «      sJ ‚t        ‰«      dk(  sJ ‚t        ‰«      dk(  sJ ‚t        ‰«      dk(  sJ ‚t        |j                  «       «      dv sJ ‚| j	                  «        |j                  «       �^ }ŠŠŠ t        ‰d‰‰‰|«      \  }	}
t        ‰d‰‰‰|«      \  }}t        ‰ d‰‰‰|«      \  }}| j                  «       Št        ‰«      xs
 |
xs |xs |Š| j                  «       �^ }ŠŠŠt        |j                  «       «      }|j                  «       }ˆˆfd„t        d«      D «       \  ŠŠŠ‰‰z  ‰z  }|d	kD  rt        | |‰‰‰|‰‰«      S ˆˆˆˆˆˆ fd
„Šˆˆˆˆˆˆˆˆˆˆˆˆˆˆfd„}t        j                  | j                  «       |||¬«      }|S )Nr   rK  )r   r   r   r­   )r®   r¯   r3   r1   c              3  ój   •‡K  — | ])  Št        ˆˆˆfd „t        ‰‰   dz  «      D «       «      –— Œ+ y­w)c           
   3  ót   •K  — | ]/  }t        |‰‰   z  t        d |‰‰   z
  ‰‰   z  «      z
  d«      –— Œ1 y­wrŒ  )r¸  )rò   r0  r|   rI  r³  s     €€€rn   rô   z0avg_pool3d_backward.<locals>.<genexpr>.<genexpr>2  sF   øè ø€ ò 
àô ��V˜A‘Y‘¤ Q¨¨[¸©^Ñ);ÀÀqÁ	Ñ(IÓ!JÑJÈA×Nñ
ùs   ƒ58r1   N)r¸  r  )rò   r|   rI  r³  s    @€€rn   rô   z&avg_pool3d_backward.<locals>.<genexpr>1  s;   ùè ø€ ò 3ð
 ô	 	õ 
ä˜; q™>¨AÑ-Ó.ô
÷ 	
ñ3ùs   „/3é}   c           	     ó  •— d„ ‰D «       \  }}}d„ ‰D «       \  }}}d„ ‰D «       \  }	}
}d„ t        | ||g|||g|||g«      D «       \  }}}d„ t        |||g|	|
|g‰‰‰g|||g«      D «       \  }}}d„ |||fD «       \  }}}d„ t        |||g‰‰‰g«      D «       \  }}}t        j                  t        j                  t        j                  ||«      t        j                  ||«      «      t        j                  ||«      «      }|S )Nc              3  ód   K  — | ](  }t        j                  |t        j                  «      –— Œ* y ­wrŸ   ©rY   rY  r„   r  ©rò   r5  s     rn   rô   zQavg_pool3d_backward.<locals>.compute_pool_size_without_padding.<locals>.<genexpr>H  s   è ø€ Ò'UÈ¬¯©°Q¼¿¹×(DÑ'Uùó   ‚.0c              3  ód   K  — | ](  }t        j                  |t        j                  «      –— Œ* y ­wrŸ   rg  r  s     rn   rô   zQavg_pool3d_backward.<locals>.compute_pool_size_without_padding.<locals>.<genexpr>I  s   è ø€ ÒMÀœsŸ|™|¨A¬u¯{©{×;ÑMùri  c              3  ód   K  — | ](  }t        j                  |t        j                  «      –— Œ* y ­wrŸ   rg  )rò   rÿ   s     rn   rô   zQavg_pool3d_backward.<locals>.compute_pool_size_without_padding.<locals>.<genexpr>J  s$   è ø€ ò (
Ø-.ŒC�L‰L˜œEŸK™K×(ñ(
ùri  c              3  óx   K  — | ]2  \  }}}t        j                  t        j                  ||«      |«      –— Œ4 y ­wrŸ   )rY   rÿ  rŒ  )rò   r  r5  Úpads       rn   rô   zQavg_pool3d_backward.<locals>.compute_pool_size_without_padding.<locals>.<genexpr>N  s3   è ø€ ò "
á��1�cô �G‰G”C—G‘G˜A˜q“M 3×'ñ"
ùs   ‚8:c           
   3  óæ   K  — | ]i  \  }}}}t        j                  t        j                  ||«      t        j                  t        j                  |t        j
                  «      |«      «      –— Œk y ­wrŸ   )rY   rÝ  r¤   rX  r„   r  )rò   r|  rÿ   rÐ   rm  s        rn   rô   zQavg_pool3d_backward.<locals>.compute_pool_size_without_padding.<locals>.<genexpr>T  sU   è ø€ ò 

ñ #��q˜#˜sô �K‰KÜ—‘˜˜qÓ!¤3§7¡7¬3¯>©>¸#¼u¿{¹{Ó+KÈSÓ#Q÷ñ

ùs   ‚A/A1c              3  óŒ   K  — | ]<  }t        j                  |t        j                  d t        j                  «      «      –— Œ> y­wr*  ©rY   rÜ  rY  r„   r  )rò   r|  s     rn   rô   zQavg_pool3d_backward.<locals>.compute_pool_size_without_padding.<locals>.<genexpr>_  s2   è ø€ ò "
àô �K‰K˜œsŸ|™|¨A¬u¯{©{Ó;×<ñ"
ùó   ‚AAc              3  ó’   K  — | ]?  \  }}t        j                  |t        j                  |t        j                  «      «      –— ŒA y ­wrŸ   ©rY   rÝ  rX  r„   r  )rò   r}  rÐ   s      rn   rô   zQavg_pool3d_backward.<locals>.compute_pool_size_without_padding.<locals>.<genexpr>c  s6   è ø€ ò 
á��Sô �K‰K˜œSŸ^™^¨C´·±Ó=×>ñ
ùó   ‚AA)r  rY   rŒ  rÿ  )ÚpdrŸ  r   Ústride_drO  rP  Úpad_drQ  rR  Úkernel_drS  rT  Údstartr;  rU  Údendr<  rV  rI  ÚdepthrW  rI  r  r³  rª  s                      €€€€€€rn   rX  z>avg_pool3d_backward.<locals>.compute_pool_size_without_paddingG  sH  ø€ Ù'UÈfÔ'UÑ$ˆ�(˜HÙMÀWÔMÑˆˆu�eñ(
Ø2=ô(
Ñ$ˆ�(˜Hñ"
ä Ø�R˜�˜x¨°8Ð<¸uÀeÈUÐ>Sóô"
Ñˆ�˜ñ

ô '*Ø˜ Ð(Ø˜8 XÐ.Ø˜ Ð&Ø˜˜uÐ%ó	'ô	

Ñˆˆd�Dñ"
à  &¨&Ð1ô"
Ñˆ�˜ñ
ä  t¨TÐ 2°U¸FÀEÐ4JÓKô
Ñˆˆd�Dô Ÿ™Ü�G‰G”C—G‘G˜D &Ó)¬3¯7©7°4¸Ó+@ÓAÄ3Ç7Á7È4ÐQWÓCXó
ˆð Ðrp   c                ó.  •— | �^ }}}}d„ t        |||g‰«      D «       \  }}}d„ t        |||g‰‰!«      D «       \  }}}d„ t        |||g‰!«      D «       \  }}	}
d„ |||fD «       \  }}}d„ t        ||	|
g‰‰‰ g«      D «       \  }}	}
d }t        ‰«      D �]{  }t        ‰«      D �]i  }t        ‰"«      D �]W  }d„ t        |||g|||g«      D «       \  }}}‰�‰}n ‰s‰s‰d   ‰d   z  ‰d	   z  }n
 ‰|||«      }t        j                   ‰g |¢t        j                  t        j
                  |t        j                  |t        j                  dt        j                  «      «      «      ‰d
¬«      ‘t        j                  t        j
                  |t        j                  |	t        j                  dt        j                  «      «      «      ‰d
¬«      ‘t        j                  t        j
                  |t        j                  |
t        j                  dt        j                  «      «      «      ‰ d
¬«      ‘«      |«      }t        j                  t        j                  t        j                  ||«      t        j                  ||	«      «      t        j                  ||
«      «      }|€;t        j                  ||t        j                  dt        j                  «      «      }�Œ-t        j                  |t        j                  ||«      |«      }�ŒZ �Œl �Œ~ |€J ‚|S )Nc              3  ó,   K  — | ]  \  }}||z   –— Œ y ­wrŸ   rü   )rò   r  rm  s      rn   rô   z2avg_pool3d_backward.<locals>.fn.<locals>.<genexpr>n  s   è ø€ ÒA™v˜q #�1�s•7ÑAùrh  c              3  óŒ   K  — | ]<  \  }}}t        j                  t        ||z
  |z   |«      t        j                  «      –— Œ> y ­wrŸ   ©rY   rX  r+   r„   r  )rò   r  rÿ   r5  s       rn   rô   z2avg_pool3d_backward.<locals>.fn.<locals>.<genexpr>p  s<   è ø€ ò %
á��1�aô �N‰Nœ8 A¨¡E¨A¡I¨qÓ1´5·;±;×?ñ%
ùrq  c              3  ó„   K  — | ]8  \  }}t        j                  t        ||«      d z   t        j                  «      –— Œ: y­wrb  r  )rò   r  r5  s      rn   rô   z2avg_pool3d_backward.<locals>.fn.<locals>.<genexpr>u  s6   è ø€ ò 
á��1ô �N‰Nœ8 A q›>¨AÑ-¬u¯{©{×;ñ
ùs   ‚>A c              3  óŒ   K  — | ]<  }t        j                  |t        j                  d t        j                  «      «      –— Œ> y­wr*  rp  )rò   Úpstarts     rn   rô   z2avg_pool3d_backward.<locals>.fn.<locals>.<genexpr>z  s2   è ø€ ò %
àô �K‰K˜¤§¡¨Q´·±Ó <×=ñ%
ùrq  c              3  ó’   K  — | ]?  \  }}t        j                  |t        j                  |t        j                  «      «      –— ŒA y ­wrŸ   rs  )rò   ÚpendÚ
pooled_dims      rn   rô   z2avg_pool3d_backward.<locals>.fn.<locals>.<genexpr>~  s6   è ø€ ò 
á ��jô �K‰K˜œcŸn™n¨Z¼¿¹ÓE×Fñ
ùrt  c              3  ó’   K  — | ]?  \  }}t        j                  |t        j                  |t        j                  «      «      –— ŒA y ­wrŸ   )rY   r¤   rY  r„   r  )rò   r‚  Úp_s      rn   rô   z2avg_pool3d_backward.<locals>.fn.<locals>.<genexpr>Š  s6   è ø€ ò "á&˜F Bô Ÿ™ ¬¯©°R¼¿¹Ó(E×Fñ"ùrt  r   r3   r1   Frw  rÄ  )r  r  rY   rè  rB  rÝ  rÿ  rY  r„   r  rÈ  rÇ  r  r  r¤   )#r[  rC  r0  r7  r”  Úpdstartr˜  r™  Úpdendrš  r›  rœ  Úpd_r�  rž  ru  rŸ  r   rß  rZ  rÏ  rX  r0  Úd_window_sizer#  r¤  r¥  rD  rI  r  Úpooled_depthr§  r¨  r³  r©  s#                        €€€€€€€€€€€€€€rn   rˆ   zavg_pool3d_backward.<locals>.fnl  s  ø€ ØÑˆ��A�qÙA¬¨a°°A¨Y¸Ó)@ÔA‰ˆˆ1ˆañ%
ä  1 a˜y¨+°vÓ>ô%
Ñ!ˆ�˜'ñ

ä˜Q  1˜I vÓ.ô
Ñˆˆu�eñ
%
à" G¨WÐ5ô%
Ñ!ˆ�˜'ñ
ä$'Ø˜˜uÐ%¨°mÀ\Ð'Ró%ô
Ñˆˆu�eð ˆä˜Ó'ó 8	VˆCÜ˜]Ó+ó 7V�Ü  Ó/ó 6V�Cñ"ä*-Ø$ g¨wÐ7¸#¸sÀC¸ó+ô"‘J�B˜˜Bð (Ð3Ø 0™Ù*±+Ø +¨A¡°¸Q±Ñ ?À+ÈaÁ.Ñ P™á AÀ"ÀbÈ"Ó M˜äŸ;™;Ù#ðØ!'ðä #× 5Ñ 5Ü$'§K¡KØ(*¬C¯G©G°E¼3¿<¹<ÈÌ5Ï;É;Ó;WÓ,Xó%&ð %1Ø*/ô!"ðô !$× 5Ñ 5Ü$'§K¡KØ(*¬C¯G©G°E¼3¿<¹<ÈÌ5Ï;É;Ó;WÓ,Xó%&ð %2Ø*/ô!"ðô  !$× 5Ñ 5Ü$'§K¡KØ(*¬C¯G©G°E¼3¿<¹<ÈÌ5Ï;É;Ó;WÓ,Xó%&ð %1Ø*/ô!"ð!óð4 ó7�Dô< Ÿ8™8ÜŸ™¤§¡¨¨EÓ!2´C·F±F¸2¸uÓ4EÓFÜŸ™˜r 5Ó)ó�Dð  Ð'Ü#&§9¡9Ø  $¬¯©°S¼%¿-¹-Ó(Hó$šô $'§9¡9¨T´3·7±7¸8ÀTÓ3JÈHÓ#Ušòm6Vò7Vð8	Vðr Ð#Ð#Ð#Øˆrp   rc  )rt   rG   rÌ   rÍ   rè  rM  re  r$  rr   r¿   r  Úfallback_avg_pool3d_backwardrD   rë   rw   )!r­  r¨   rI  r³  r  rJ  r0  r#  r²  Ú_d_outÚceil_mode_dr\  Úceil_mode_hr^  Úceil_mode_wr   rj  r»   rR  rˆ   rñ  rX  r‹  r{  r¤  r¥  rD  rW  rŒ  r§  r¨  r©  rª  s!     ``` ``             @@@@@@@@@@@@rn   Úavg_pool3d_backwardr’    s  ÿÿø€ ð Ð#Ð'7¸1Ò'<ÐXÐ>XÓXÐ<ÙØˆÙÚˆä�k¤9Ô-Ð-Ð-Ü�aœÔ#Ð#Ð#Üˆ{Ó˜qÒ Ð Ð Üˆv‹;˜!ÒÐÐÜˆw‹<˜1ÒÐÐÜˆq�z‰z‹|Ó Ñ&Ð&Ð&à×ÑÔà$%§J¡J£LÑ!€VˆU�F˜Eä&Øˆq�+˜v w°	óÑ€FˆKô 'Ø��; ¨°óÑ€FˆKô 'Øˆq�+˜v w°	óÑ€FˆKð ×)Ñ)Ó+€KÜ�g“,ÒK +ÒK°ÒKÀ€Kà4?×4HÑ4HÓ4JÑ1€Qˆ�m \Ü�A—J‘J“LÓ!€HØ�K‰K‹M€Eô3ô
 �q“ô3Ñ/€M�= -ð   -Ñ/°-Ñ?€KØ�SÒä+ØØØØØØØØó	
ð 		
÷#ñ #÷JU÷ Uñ Uôn 
×	Ñ	Ø×%Ñ%Ó'ØØØô	
€Bð €Irp   c                ó  — | j                  «       }t        |t        «      r|g}n|st        t	        |«      «      }t	        |«      dk(  rt        |«      dv s
J d|› �«       ‚g S t        |«      }t        t	        |«      «      D ]_  }||   dk  r#||xx   t	        |«      rt	        |«      ndz  cc<   d||   cxk  rt	        |«      k  rŒFn t	        |«      dk(  r	||   dk(  rŒ_J ‚ t	        t        |«      «      t	        |«      k(  sJ d«       ‚|S )Nr   )rü   r  ©rz  zinvalid axis: r3   zreduction axis not unique)rÍ   rt   r¸   r  rÌ   r¡   rr   r)   )r¨   rå  rì   r|   s       rn   Ú_validate_reduction_axisr•  Ì  sþ   € Ø�:‰:‹<€DÜ�$œÔØˆv‰ÙÜ”S˜“YÓˆÜ
ˆ4ƒy�A‚~Ü�T‹{Ð/Ñ/ÐH°>À$ÀÐ1HÓHÐ/Øˆ	Ü�‹:€DÜ”3�t“9Óò MˆØ�‰7�QŠ;Ø�‹G¤C¨¤I”s˜4”y°1Ñ4‹GØ�D˜‘GÔ'œc $›iÕ'¬C°«I¸ªN¸tÀA¹wÈ!»|ÐLÐLðMô Œz˜$ÓÓ ¤C¨£IÒ-ÐJÐ/JÓJÐ-Ø€Krp   )rÑ  c               ó¬  ‡‡‡‡‡‡‡— |�t        | |«      } | j                  «       Št        t           t	        | |«      «      }g }g Šg Šg Št        t        ‰«      «      D ]Q  }||v r&‰j                  |«       ‰j                  ‰|   «       Œ-‰j                  |«       |j                  ‰|   «       ŒS dŠt        | «      xs- t        j                  | «      dk(  xr t        j                  dk(  }|dv rÖt        ‰«      dkD  rÈ|rÆt        | j                  t        «      rdŠn©t        | j                  t        j                   «      sRt        | j                  t        j"                  «      rat        | j                  j                  t        j$                  «      r3| j'                  «       }	|	j)                  «       xs |	j+                  «        Šˆˆˆˆˆˆˆfd„}
‰r0t-        ‰«      }‰D ]  }t.        j0                  j2                  ||<   Œ! n|}| j5                  «       Št7        | j9                  «       |xs | j;                  «       | j;                  «       |
|‰¬«      S )	NFrä   Úcpp)rf  ÚargminÚargmax_valueÚargmin_valueÚargmax_with_valueÚargmin_with_valuer3   Tc                ó|  •— t        |«      t        ‰«      k(  sJ ‚‰
r+t        | «      t        ‰«      k(  sJ ‚‰D �cg c]  }| |   ‘Œ	 } }t        | «      t        ‰«      k(  sJ ‚d gt        | «      t        |«      z   z  }t        j                  t        ‰| «      t        ‰|«      «      D ]
  \  }}|||<   Œ  ‰	|«      }‰ru|D �cg c]  }t	        j
                  |«      ‘Œ }}|d   }t        dt        |«      «      D ]  }|‰|   z  ||   z   }Œ |t        j                  |t        j                  «      fS |S c c}w c c}w r  )rÌ   r  r  r  rÀ   r3  r  rY   rX  r„   rÅ  )r@  Úreduction_indexr|   r`  r[  Úvarr÷   ÚrindexÚ
linear_idxÚinner_loaderÚkeepdimsÚkept_idxÚreduced_idxÚreduced_sizesÚshould_compute_logical_indexrì   s            €€€€€€€rn   rd  z%_make_reduction_inner.<locals>.loader  sL  ø€ Ü�?Ó#¤s¨;Ó'7Ò7Ð7Ð7ÙÜ�u“:¤ T£Ò*Ð*Ð*Ø'/Ö0 !�U˜1“XÐ0ˆEÐ0Ü�5‹zœS ›]Ò*Ð*Ð*Ø�Fœc %›j¬3¨Ó+?Ñ?Ñ@ˆ	Ü!Ÿ™Ü�˜%Ó ¤# k°?Ó"Có
ò 	!‰HˆC�ð !ˆI�cŠNð	!ñ ˜YÓ'ˆñ (Ø/>Ö?¨!”e—l‘l 1•oÐ?ˆFÐ?ð   ™ˆJÜ˜1œc &›kÓ*ò G�Ø'¨-¸Ñ*:Ñ:¸VÀA¹YÑF‘
ðGð œ3Ÿ>™>¨*´e·k±kÓBÐCÐCàˆùò+ 1ùò @s   ºD4ÃD9)r   rd  r¼  rb  rd  re  )rø   rÍ   r)   r¸   r•  r  rÌ   rx   r?   r6   Úget_device_typer4   Úcpu_backendrt   rv   rC   rå   ré   ÚBufferr›  Úis_transposedÚis_contiguousrr   rÀ   r/  r0  re  r  rw   r¿   )r¨   rå  r£  r»   rQ  rÑ  Ú
kept_sizesr|   Ú supports_logical_index_argreducer«  rd  rj  r¢  r¤  r¥  r¦  r§  rì   s     `         @@@@@@rn   Ú_make_reduction_innerr¯  Þ  s  þ€ ð ÐÜ�Q˜ÓˆØ�:‰:‹<€DÜ”c‰?Ô3°A°tÓ<Ó=€Dà€JØ€HØ€MØ€KÜ”3�t“9Óò 'ˆØ�‰9Ø×Ñ˜qÔ!Ø× Ñ   a¡Õ)à�O‰O˜AÔØ×Ñ˜d 1™gÕ&ð'ð $)Ð Ü'0°£|ò (Ü
×Ñ˜1Ó Ñ&ÒF¬6×+=Ñ+=ÀÑ+Fð %ð 	ð
ñ	
ô �Ó Ò"Ù,ä�a—f‘fœkÔ*Ø+/Ñ(Ü˜Ÿ™¤× 2Ñ 2Ô3Ü�q—v‘vœrŸ}™}Ô-´*¸Q¿V¹V¿[¹[Ì"Ï)É)Ô2Tà—\‘\“^ˆFà×$Ñ$Ó&ÒD¨f×.BÑ.BÓ.DÐ*Dð )÷ò ñ6 Ü˜“:ˆØò 	&ˆAÜŸ'™'Ÿ+™+ˆH�QŠKñ	&ð ˆà—=‘=“?€LÜØ�|‰|‹~Ø'Ò8¨1¯;©;«=Ø—+‘+“-ØØØ&ôð rp   c                ó    ‡ ‡— dd dœdˆˆ fd„}|S )Nrº   c               óV  •— ‰dv rF| j                  «       t        j                  k(  r%t        | «      rt	        | t        j
                  «      } t        | |||‰‰¬«      }t        j                  d‰| dœ|¤Ž}t        |j                  j                  t        «      r|j                  «        |S )N)rf  r˜  ©rå  r£  r»   rQ  rÑ  ©rÑ  rc  rü   )r¿   r„   rÆ   r?   rø   r  r¯  rE   rë   rt   rv   r²  )r¨   rå  r£  r»   r   r½  rQ  rÑ  s         €€rn   r–  zmake_reduction.<locals>.inner>  s™   ø€ ð
 Ð2Ñ2Ø—‘“¤§¡Ò+Ü˜!”ä˜œEŸK™KÓ(ˆAÜ&ØØØØØ"7Ø)ô
ˆô ×!Ñ!ÐX°ÈAÑXÐQWÑXˆÜØ�K‰K×ÑÜô
ð �N‰NÔØˆrp   rÞ   )rÓ   rG   rü   )rÑ  rQ  r–  s   `` rn   Úmake_reductionr´  ;  s   ù€ ð°T÷ ð ð4 €Lrp   c                ó   ‡ — ddˆ fd„}|S )Nc                ó†   •— t        | ||d | j                  «       ‰¬«      }t        j                  j                  d‰| dœ|¤ŽS )Nr²  r³  rü   )r¯  r¿   r6   ÚArgReductionrë   )r¨   rå  r£  r   rÑ  s       €rn   r–  z,make_arg_with_value_reduction.<locals>.inner^  sP   ø€ Ü&ØØØØØ"#§+¡+£-Ø)ô
ˆô �‰×%Ñ%ð 
Ø)°añ
Ø;Añ
ð 	
rp   rÞ   )rÓ   zSequence[TensorBox]rü   )rÑ  r–  s   ` rn   Úmake_arg_with_value_reductionr¸  [  s   ø€ ö
ð €Lrp   c               óÊ   — |�t        | |«      } t        | |«      }t        | j                  «       | j	                  «       f| j                  «       f| j                  «       |¬«      S )N)r   ÚdtypesÚ	inner_fnsrì   rå  )rø   r“  r  rw   r¿   re  rÍ   )r¨   rå  r»   s      rn   Ú_make_scan_innerr¼  n  sZ   € ØÐÜ�Q˜ÓˆÜ˜˜DÓ!€DäØ�|‰|‹~Ø—‘“ÐØ—=‘=“?Ð$Ø�Z‰Z‹\Øôð rp   rº   c               ó   ‡— |�t        | |«      } | j                  «       Št        | |«      }| j                  «       }|t        j
                  t        j                  fv rt        | t        j                  «      } t        | ||«      }t        ˆfd„|D «       «      }t        j                  || j                  «       | j                  «       ¬«      }t        j                  |t        |j                  «       «      «      }t        t!        ||«      |«      S )Nc              3  ó(   •K  — | ]	  }‰|   –— Œ y ­wrŸ   rü   ©rò   r|   rì   s     €rn   rô   zmean.<locals>.<genexpr>‡  ó   øè ø€ Ò0 a˜$˜q�'Ñ0ùrý   r?  )rø   rÍ   r•  r¿   r„   rN  rM  r;  Úsum_rW   r6   r=   rw   r<   rë   rr   Údiv)r¨   rå  Úkeepdimr»   rE  Ú
sum_resultÚdenomrì   s          @rn   rÔ  rÔ  |  sÎ   ø€ àÐÜ�Q˜ÓˆØ�:‰:‹<€DÜ# A tÓ,€Dà—;‘;“=€LØœŸ™¤u§~¡~Ð6Ñ6Ü�QœŸ™Ó$ˆÜ�a˜˜wÓ'€JÜÓ0¨4Ô0Ó0€EÜ×Ñ e°1·;±;³=ÈÏÉËÔX€EÜ×Ñ˜e¤T¨*×*=Ñ*=Ó*?Ó%@ÓA€EÜ”C˜
 EÓ*¨LÓ9Ð9rp   c                ó  ‡
— |€d}| j                  «       Š
t        | |«      }t        | |d¬«      }|r|j                  «        t	        t        | |«      «      }t        |||«      }t        ˆ
fd„|D «       «      }|rt        ||z
  d«      }t        j                  || j                  «       | j                  «       ¬«      }t        j                  |t        |j                  «       «      «      }t!        ||«      }	|s|	fS |r|nt#        ||«      }|	|fS )Nr3   T)rÃ  c              3  ó(   •K  — | ]	  }‰|   –— Œ y ­wrŸ   rü   r¿  s     €rn   rô   z var_mean_sum_.<locals>.<genexpr>š  rÀ  rý   r   r?  )rÍ   r•  rÔ  r²  Úsquarerÿ  rÁ  rW   r-   r6   r=   r¿   rw   r<   rë   rr   rÂ  r6  )r¨   rå  Ú
correctionrÃ  Úreturn_meanÚx_meanÚdiffsrÄ  rÅ  Úx_varrì   s             @rn   Úvar_mean_sum_rÎ  �  sò   ø€ ØÐØˆ
à�:‰:‹<€DÜ# A tÓ,€DÜ�!�T 4Ô(€FÙØ�‰Ôä”3�q˜&“>Ó"€EÜ�e˜T 7Ó+€JäÓ0¨4Ô0Ó0€EÙÜ�E˜JÑ&¨Ó*ˆÜ×Ñ e°1·;±;³=ÈÏÉËÔX€EÜ×Ñ˜e¤T¨*×*=Ñ*=Ó*?Ó%@ÓA€EÜ�
˜EÓ"€EÙØˆxˆá‰V¤G¨F°DÓ$9€FØ�&ˆ=Ðrp   c                ó@  — t        | |«      }t        | ||d d ¬«      }|d   }t        |d   «      }| j                  «       }d}d}	|t        j
                  t        j                  fv }
|r*|j                  dk(  rt        j                  j                  }ne|rS|j                  dk(  rDt        | «      r9|
r7t        j                  j                  }	t        j                  j                  }d}nt        j                  }t        |t         j"                  «      syt%        |«      }||kD  st        |«      d	k(  ry|	rt        j                  |cxk  r|	k  ry |syt'        j(                  j*                  d|d
dœ|¤Ž\  }}t,        j.                  j0                  j3                  |d	«      S )N©rå  r£  r»   rQ  rd  re  Fr   rä   ry  Tr3   ri  )r)  rÑ  rü   )r•  r¯  rW   rw   r„   rM  rN  rè   r4   r—  Úuse_two_step_variance_thresholdr?   ÚtritonÚuse_two_step_variance_min_numelrn  rt   rÀ   rj  r¸   r6   rE   Ú
num_splitsrZ   rf   ræ   r”  )r¨   rå  rÃ  Úinput_dtyper   rd  r)  r   Úcheck_for_splitÚ	min_numelÚis_cuda_two_step_dtypeÚ	thresholdr   rŸ  s                 rn   Úuse_two_step_variancerÚ  §  sv  € ô $ A tÓ,€DÜ"Ø	�˜w¨dÈ$ô€Fð �HÑ€FÜ# FÐ+=Ñ$>Ó?€OØ�\‰\‹^€FØ€OØ€IØ(¬U¯^©^¼U¿]¹]Ð,KÐKÐÙ�&—+‘+ Ò&ô —J‘J×>Ñ>‰	Ù	�F—K‘K 6Ò)¬i¸¬lÑ?UÜ—M‘M×AÑAˆ	Ü—M‘M×AÑAˆ	Ø‰ä×6Ñ6ˆ	ä�o¤u§}¡}Ô5Øä˜/Ó*€OØ˜Ò"¤m°FÓ&;¸qÒ&@Øá”V×7Ñ7¸/ÔUÈIÒUØð Vñ Øä�|‰|×&Ñ&ð Ø'Øñð ñ�H€A€uô
 �7‰7×Ñ×0Ñ0°¸Ó:Ð:rp   c               ó  ‡‡‡‡‡— ‰€dŠt        | ||d d ¬«      }|j                  d«      }|j                  d«       |j                  d«       t        j                  j                  d|fd| j                  «       dœ|¤Ž\  }}}	|j                  «        | j                  «       Š| j                  «       Št        | |«      }t        ˆfd„|D «       «      Šd	„ Šˆˆˆˆfd
„}
 t        |
«      |«      }|r|j                  «        ||fS |fS )Nr3   rÐ  rb  rd  r¼  Úwelford_reduce)r»  rÑ  r»   c              3  ó(   •K  — | ]	  }‰|   –— Œ y ­wrŸ   rü   r¿  s     €rn   rô   z$var_mean_welford_.<locals>.<genexpr>ï  s   øè ø€ Ò1 q˜4 �7Ñ1ùrý   c                óê   — t        | t        j                  «      rD| j                  s8t	        j
                  t	        j                  | t        j                  «      |«      S t	        j                  | |«      S rŸ   )
rt   rÀ   rÁ   Ú	is_numberrY   rø   rX  r„   rÅ  rY  rA  s     rn   Úget_constant_or_index_exprz5var_mean_welford_.<locals>.get_constant_or_index_exprñ  sG   € Ü�aœŸ™Ô$¨Q¯[ª[Ü—<‘<¤§¡¨q´%·+±+Ó >ÀÓFÐFÜ�|‰|˜A˜uÓ%Ð%rp   c                óŒ   •—  ‰‰‰«      } ‰‰‰«      }t        j                  d‰«      }| t        j                  |||z
  «      z  S r  )rY   rY  rÜ  )rv   ÚcÚNÚzerorÉ  r»   rà  Úrnumels       €€€€rn   rä  z#var_mean_welford_.<locals>.scale_fnö  sE   ø€ Ù& z°5Ó9ˆÙ& v¨uÓ5ˆÜ�|‰|˜A˜uÓ%ˆØ”c—k‘k $¨¨A©Ó.Ñ.Ð.rp   rü   )r¯  r¡  r6   ÚWelfordReductionrë   r¿   r²  rÍ   r•  rW   r—  )r¨   rå  rÉ  rÃ  rÊ  r   rd  rÔ  Úm2r   rä  rŸ  r»   rà  rå  rì   s     `         @@@@rn   Úvar_mean_welford_rè  Ù  sþ   ü€ ØÐØˆ
ä"Ø	�˜w¨dÈ$ô€Fð �Z‰Z˜
Ó#€FØ
‡J�Jˆ{ÔØ
‡J�Jˆ{Ôä×%Ñ%×,Ñ,ð Ø�)Ø'Ø�k‰k‹mñð ñ	�K€Dˆ"ˆað ‡J�J„Là�K‰K‹M€EØ�:‰:‹<€DÜ# A tÓ,€DÜÓ1¨DÔ1Ó1€Fò&÷
/ð #Œ.˜Ó
" 2Ó
&€CáØ�‰ŒØ�DˆyÐØˆ6€Mrp   c               ó.  ‡— | j                  «       Št        ‰«      }t        | |d¬«      } t        | ||||¬«      }t        j
                  j                  st        | ||‰¬«      rt        di |¤Žn
t        di |¤Ž}t        ˆfd„|D «       «      }|s|d   S |S )NFrÜ  )r¨   rå  rÉ  rÃ  rÊ  )rå  rÃ  rÕ  c              3  ó:   •K  — | ]  }t        |‰d ¬«      –— Œ y­w)FrÜ  N)rø   )rò   r¨   r  s     €rn   rô   z#var_mean_helper_.<locals>.<genexpr>  s   øè ø€ ÒF¸!”8˜A˜y¨u×5Ð5ÑFùs   ƒr   rü   )r¿   r   rø   r  r4   ÚmtiaÚdisable_welford_reductionrÚ  rÎ  rè  r¡   )	r¨   rå  rÉ  rÃ  rÊ  rÖ   r   r6  r  s	           @rn   Úvar_mean_helper_rí    s¡   ø€ Ø—‘“€IÜ)¨)Ó4€MÜ��M¨Ô.€AÜØ
ØØØØô€Fô �K‰K×1Ò1Ü$Ø˜ g¸9õô 	Ñ˜Òô Ñ( Ñ(ð ô ÓF¸vÔFÓF€FÙ'ˆ6�!‰9Ð3¨VÐ3rp   )rÉ  rÃ  c               ó"   — t        | |||d¬«      S )NF©rå  rÉ  rÃ  rÊ  ©rí  ©r¨   rå  rÉ  rÃ  s       rn   Úvar_rò    s   € äØ	� °WÈ%ôð rp   c               ó"   — t        | |||d¬«      S )NTrï  rð  rñ  s       rn   Úvar_meanrô  $  s   € äØ	� °WÈ$ôð rp   c                ó  — |dk  r!t        t        j                  | «      | |«      S |dk(  rt        j                  d|«      S |dk(  r| S t        | |dz  |«      }t        j                  ||«      }|dz  dk(  rt        j                  || «      }|S )Nr   r3   r1   )Úpow_recursiverY   rÛ  rY  rŒ  )r¨   r7  r»   r½  s       rn   rö  rö  +  s‰   € Øˆ1‚uÜœSŸ^™^¨AÓ.°°°EÓ:Ð:ØˆA‚vÜ�|‰|˜A˜uÓ%Ð%ØˆA‚vØˆä˜1˜a 1™f eÓ,€FÜ�W‰W�V˜VÓ$€FØ	ˆA‰�!‚|Ü—‘˜ Ó#ˆØ€Mrp   c                ó.   — t        j                  | |«      S rŸ   )rY   rþ  ©ró   r5  s     rn   Ú
pow_nativerù  :  s   € ä�7‰7�1�a‹=Ðrp   )r	  c                óz  ‡ ‡‡— t        ‰t        «      r%‰j                  «       rt        ‰ t	        ‰«      «      S t        ‰t        «      r‰dk(  rt        ‰ «      S t        ‰t        «      r‰dk(  rt        ‰ «      S t        d„ ‰ ‰fD «       «      }t        |«      }t        ‰t        «      xr d‰cxk  xr dk  nc xs	 |xr ‰dk\  }|rZ‰ j                  «       Šˆ ˆˆfd„}t        j                  ‰ j                  «       ‰ j                  «       |‰ j                  «       ¬«      S t        ‰ t        «      r:‰ dk(  rt!        ‰d«      S ‰ d	k(  r$t#        ‰j                  «       «      rt%        ‰«      S |rDt        ‰ t        «      rt'        ‰ ‰«      S t        ‰t        «      rt)        ‰ ‰«      S t+        ‰ ‰«      S t-        ‰ ‰«      S )
Nrâ  r3   c              3  ór   K  — | ]/  }t        |t        j                  «      sŒ|j                  «       –— Œ1 y ­wrŸ   )rt   r6   rG   r¿   r!  s     rn   rô   zpow.<locals>.<genexpr>R  s#   è ø€ ÒN 1´*¸QÄÇÁÕ2M�—‘—ÑNùs   ‚7¢7iàÿÿÿé    r   c                óF   •— t         ‰| «      ‰‰j                  «       «      S rŸ   )rö  r¿   )r[  ró   r5  rd  s    €€€rn   rˆ   zpow.<locals>.fn\  s   ø€ Ü ¡¨£¨a°·±³Ó?Ð?rp   rc  r1   )rt   r;  rÂ   rþ  r¸   ÚsqrtrÀ  rL  r!   re  rD   rë   rw   r¿   rÍ   r"   r@  r    Úexp2Úfallback_pow_scalarÚfallback_pow_tensor_scalarÚfallback_pow_tensor_tensorrù  )ró   r5  r»   Úis_integer_powÚembed_exponentrˆ   rd  s   ``    @rn   rþ  rþ  H  sv  ú€ ä�!”UÔ §¡¤Ü�1”c˜!“f‹~ÐÜ	�A”uÔ	 ! s¢(Ü�A‹wˆÜ	�A”sÔ	  Q¢Ü�Q‹xˆô ÑN¨¨A¨ÔNÓN€EÜ% eÓ,€Nô   ¤3Ó'ò ØˆaŽ�"ŒÒ3˜Ò2¨A°©Fð ñ Ø—‘“ˆö	@ô ×ÑØ—<‘<“>Ø—+‘+“-ØØ—:‘:“<ô	
ð 	
ô �!”VÔØ�Š6Ü˜Q “?Ð"à�Š6”n Q§[¡[£]Ô3Ü˜“7ˆNáä�aœÔ Ü& q¨!Ó,Ð,Ü˜œ6Ô"Ü-¨a°Ó3Ð3ä-¨a°Ó3Ð3ä�a˜ÓÐrp   c                ó  — t        | t        «      r| j                  }n| }t        |t        «      r|j                  }t        |t        j                  «      s‘t        j                  | j                  «       | j                  «       |j                  «       | j                  «       ¬«      }t        |t        t        f«      sJ ‚|j                  }t        |t        j                  «      sJ ‚t        |t        j                  «      rg|j                  «       sW|j                  «       sGt        |j                  t        j                  «      s#|j!                  «        |j                  |_        | S t        j"                  j%                  |||¬«       | S )Nrc  ©Úunsafe_alias)rt   rG   rv   r6   ré   rD   rë   rw   r¿   re  rÍ   r:   r@   Úis_input_bufferÚis_module_bufferÚ	NopKernelr²  r¤  Úrealize_into)Úchangedr;  r  Úchanged_datarl   s        rn   rŽ  rŽ  y  s*  € Ü�'œ9Ô%Ø—|‘|‰àˆÜ�#”yÔ!Ø�h‰hˆä�cœ2Ÿ=™=Ô)ä×ÑØ×%Ñ%Ó'Ø×#Ñ#Ó%Ø—_‘_Ó&Ø×#Ñ#Ó%ô	
ˆô ˜$¤¬:Ð 6Ô7Ð7Ð7Ø�i‰iˆÜ˜#œrŸ}™}Ô-Ð-Ð-ä�,¤§¡Ô.Ø×$Ñ$Ô&à×(Ñ(Ô*Ü�l×'Ñ'¬¯©Ô6ð 	�‰ŒØŸH™HˆÔØˆä×!Ñ!×.Ñ.Øˆ\¨ð /ô ð €Nrp   c                ó.   — t        | t        | |«      «      S rŸ   )rŽ  r@  )r¨   r  s     rn   r  r  ž  s   € ä�Qœ	 ! ZÓ0Ó1Ð1rp   c                óÂ   — | |u r| S t        || j                  «       «      }t        || j                  «       «      }t	        || j                  «       «      }t        | |«      S rŸ   ©rñ  rw   rø   r¿   r3  rÍ   rŽ  )rÚ  r�  rï  s      rn   rº  rº  £  sR   € à
ˆc�zàˆ
Ü
�C˜Ÿ™Ó)Ó
*€CÜ
�3˜Ÿ™›Ó
(€CÜ
��c—l‘l“nÓ
%€CÜ�S˜#ÓÐrp   c                ó.   — t        j                  | |«      S rŸ   )rY   Úfloordivrø  s     rn   r  r  ®  ó   € ä�<‰<˜˜1ÓÐrp   c                ó.   — t        j                  | |«      S rŸ   )rY   Útruncdivrø  s     rn   r  r  ³  r  rp   c                ó.   — t        j                  | |«      S rŸ   )rY   Údiv_rnrø  s     rn   Ú_div_rnr  ¸  s   € ä�:‰:�a˜ÓÐrp   c                ó>  — t        | «      xr t        |«      }t        | «      xr t        |«      }|dk(  r,|rJ d«       ‚|rt        | |«      S t        t	        | |«      «      S |dk(  r,|rJ d«       ‚|rt        | |«      S t        t        | |«      «      S t        | |«      S )NrI  z5floordiv operands can not be boolean at the same timerN  z5truncdiv operands can not be boolean at the same time)rÄ   rÇ   r  rI  r  r  rN  rÂ  )ró   r5  Úrounding_modeÚboth_integerÚboth_booleans        rn   Údiv_moder  ½  s¤   € ä" 1Ó%Ò<¬/¸!Ó*<€LÜ" 1Ó%Ò<¬/¸!Ó*<€Lð ˜ÒÙÐXÐ!XÓXÐñ
 ".Œx˜˜1‹~ÐG´5¼ÀÀA»Ó3GÐGØ˜ÒÙÐXÐ!XÓXÐÙ!-Œx˜˜1‹~ÐC´5¼¸QÀ»Ó3CÐCÜˆq�!‹9Ðrp   c                ó¸   — t        | «      xr t        |«      }|rt        | |«      S t        t        j                  j
                  «      } t        |«      | |«      S rŸ   )rÇ   Úlogical_andrB   rä  rŒ  rõ  r—  )ró   r5  Ú	both_boolrˆ   s       rn   rŒ  rŒ  Ñ  sN   € ä Ó"Ò9¤°qÓ'9€IÙÜ˜1˜aÓ Ð äœŸ™×*Ñ*Ó+ˆØ!Œ~˜bÓ! ! QÓ'Ð'rp   c                óf  — t        | t        j                  «      rt        | j                  «      S t        | t        j
                  «      rt        | j                  «       «      S t        | t        j                  «      r| S t        | t        j                  «      syt        j                  j                  j                  | j                  «       «      }t        j                  |«      5  t!        j"                  t        j$                  dd«      5   | j&                  | j)                  «       Ž }ddd«       ddd«       t        t        j                  j*                  j,                  «      sJ ‚t        |j.                  t        j                  «      r|j.                  S y# 1 sw Y   ŒrxY w# 1 sw Y   ŒvxY w)z:Try convert an arbitrary IR node into an ir.Constant valueNÚallow_indexingT)rt   r6   r@   Úget_constant_valuerv   r:   r¬  rù   ÚLoopsr„   Ú	_inductorÚops_handlerÚExtractConstantsHandlerrw   rZ   Úset_ops_handlerr   Úobjectr  rb  Úinner_fn_argsÚvirtualizedÚOpsValuer÷   )r¨   rÃ  rz   s      rn   r#  r#  Û  s/  € ô
 �!”R—]‘]Ô#Ü! !§&¡&Ó)Ð)Ü�!”R—[‘[Ô!Ü! !§-¡-£/Ó2Ð2Ü�!”R—[‘[Ô!Øˆô �aœŸ™Ô"Øä�o‰o×)Ñ)×AÑAÀ!Ç,Á,Ã.ÓQ€Gä	×Ñ˜'Ó"ñ-ä�‰”R×&Ñ&Ð(8¸$Ó?ñ-ð ˆa�j‰j˜!Ÿ/™/Ó+Ð,ˆ÷	-÷ -ô �cœ5Ÿ?™?×6Ñ6×?Ñ?Ô@Ð@Ð@Ü�#—)‘)œRŸ[™[Ô)Ø�y‰yÐØ÷-ð -ú÷ -ð -ús$   Ã&&F'ÄFÄ*F'ÆF$	Æ F'Æ'F0c                ól  — t        d„ | |fD «       «      }|rt        | |«      S t        |«      x}�q| j                  «       j                  dk7  rT|j
                  dk(  r*t        j                  t        d«      |j
                  «      }nd|j
                  z  }t        | |«      S d„ } t        |«      | |«      S )Nc              3  óL   K  — | ]  }t        |«      xs t        |«      –— Œ y ­wrŸ   )rÇ   rÄ   r!  s     rn   rô   zdiv_prim.<locals>.<genexpr>ý  s"   è ø€ ÒOÀ1”o aÓ(Ò>¬O¸AÓ,>Ó>ÑOùs   ‚"$rä   r   Úinfr  c                 ó&   — t        j                  | Ž S rŸ   )rY   rè  r  s    rn   rˆ   zdiv_prim.<locals>.fn  s   € Ü�{‰{˜DÐ!Ð!rp   )r#  r  r#  rw   rè   r÷   ÚmathÚcopysignr;  rŒ  r—  )ró   r5  Úis_integralrH  rÛ  rˆ   s         rn   rB  rB  û  s§   € äÑOÈÈAÈÔOÓO€KáÜ˜˜1‹~Ðô & aÓ(Ð(ˆÐ5¸!¿,¹,».×:MÑ:MÐQVÒ:Vð �=‰=˜AÒÜŸ™¤u¨U£|°W·]±]ÓC‰Jà˜wŸ}™}Ñ,ˆJÜ�1�jÓ!Ð!ò"ð Œ>˜"Ó˜a Ó#Ð#rp   c                óZ   — t        | |ft        j                  ¬«      \  } }t        | |«      S rå  )rT  r   ÚINT_TO_FLOATrB  rø  s     rn   rÂ  rÂ    s0   € ô Ø	
ˆAˆÔ$C×$PÑ$Pô�D€A€qô �A�q‹>Ðrp   c                óh   — t        | «      xs t        | «      }|rd„ }nd„ } t        |«      | |«      S )Nc                ó.   — t        j                  | |«      S rŸ   )rY   Úmodrø  s     rn   rˆ   zfmod.<locals>.fn%  s   € Ü—7‘7˜1˜a“=Ð rp   c                ó.   — t        j                  | |«      S rŸ   )rY   Úfmodrø  s     rn   rˆ   zfmod.<locals>.fn*  s   € Ü—8‘8˜A˜q“>Ð!rp   )rÇ   rÄ   r—  )ró   r5  r3  rˆ   s       rn   r:  r:    s9   € ä! !Ó$Ò:¬¸Ó(:€Káó	!ò
	"ð Œ>˜"Ó˜a Ó#Ð#rp   c               ó¼   — t        | j                  «       «      st        | j                  «       «      r|€t        j                  }t        d|¬«      } || |||¬«      S )Nri  r¿  rº   ©r!   r¿   r   r„   rÅ  r´  ©r¨   rå  r£  r»   rˆ   s        rn   rÁ  rÁ  0  sK   € ô 	˜Ÿ™›Ô'Ô+;¸A¿K¹K»MÔ+JØ
ˆ-Ü—‘ˆä	˜°UÔ	;€BÙˆa��x uÔ-Ð-rp   c                ó¢  — t        | j                  «       «      st        | j                  «       «      r|€t        j                  }t        | j                  «       «      dk(  r(|dv sJ ‚|xs | j                  «       }t        | |d¬«      S d„ }t        | ||¬«      }t        j                  j                  d	i |¤d|i¤Ž\  }|€t        | ||¬«      S |S )
Nr   ©r   rz  TrÜ  c                ó@   — | \  }|\  }t        j                  ||«      fS rŸ   )rY   r¤   ©Úa_tupleÚb_tupleró   r5  s       rn   Ú
combine_fnzcumsum.<locals>.combine_fnN  ó#   € Ø‰ˆØ‰ˆÜ—‘˜˜1“ÐÐrp   ©rå  r»   rD  ©rÐ   r»   rü   )r!   r¿   r   r„   rÅ  rÌ   rÍ   rø   r¼  r6   ÚScanrë   Úfallback_cumsum©r¨   rå  r»   rD  r   r½  s         rn   ÚcumsumrK  B  s¶   € ô 	˜Ÿ™›Ô'Ô+;¸A¿K¹K»MÔ+JØ
ˆ-Ü—‘ˆä
ˆ1�:‰:‹<Ó˜AÒØ�w‰ÐˆØÒ&˜Ÿ™›ˆÜ˜˜5 tÔ,Ð,ò ô
 ˜a d°%Ô8€FÜ—‘—‘Ñ? Ñ?°JÒ?�I€VØ€~Ü˜q d°%Ô8Ð8Ø€Mrp   c                ó¢  — t        | j                  «       «      st        | j                  «       «      r|€t        j                  }t        | j                  «       «      dk(  r(|dv sJ ‚|xs | j                  «       }t        | |d¬«      S d„ }t        | ||¬«      }t        j                  j                  d	i |¤d|i¤Ž\  }|€t        | ||¬«      S |S )
Nr   r?  TrÜ  c                ó@   — | \  }|\  }t        j                  ||«      fS rŸ   )rY   rŒ  rA  s       rn   rD  zcumprod.<locals>.combine_fnf  rE  rp   rF  rD  rG  rü   )r!   r¿   r   r„   rÅ  rÌ   rÍ   rø   r¼  r6   rH  rë   Úfallback_cumprodrJ  s         rn   ÚcumprodrO  Z  s¶   € ô 	˜Ÿ™›Ô'Ô+;¸A¿K¹K»MÔ+JØ
ˆ-Ü—‘ˆä
ˆ1�:‰:‹<Ó˜AÒØ�w‰ÐˆØÒ&˜Ÿ™›ˆÜ˜˜5 tÔ,Ð,ò ô
 ˜a d°%Ô8€FÜ—‘—‘Ñ? Ñ?°JÒ?�I€VØ€~Ü  t°5Ô9Ð9Ø€Mrp   c                ó
  — d„ }| j                  «       }t        | j                  «       «      dk(  r|dv sJ ‚t        | «      S t	        | ||¬«      }t        j                  j                  di |¤d|i¤Ž\  }|€t        | |¬«      S |S )Nc           	     ó*  — | \  }|\  }t        j                  ||«      }t        j                  ||«      }||k7  t        j                  |«       z  }t        j                  |t        j
                  t        j                  ||z
  «      «      |z   |«      fS rŸ   )rY   rÝ  rÜ  r>  r  Úlog1pÚexp)rB  rC  ró   r5  Úmin_vÚmax_vrÏ  s          rn   Úlog_add_exp_helperz(logcumsumexp.<locals>.log_add_exp_helpert  s{   € Ø‰ˆØ‰ˆÜ—‘˜A˜qÓ!ˆÜ—‘˜A˜qÓ!ˆØ˜‘¤C§I¡I¨eÓ$4Ð#4Ñ5ˆÜ—	‘	˜$¤§	¡	¬#¯'©'°%¸%±-Ó*@Ó AÀEÑ IÈ1ÓMÐOÐOrp   r   r?  rF  rD  r?  rü   )	r¿   rÌ   rÍ   rÀ  r¼  r6   rH  rë   Úfallback_logcumsumexp)r¨   rÐ   rV  r»   r   r½  s         rn   ÚlogcumsumexprX  r  s   € òPð �K‰K‹M€EÜ
ˆ1�:‰:‹<Ó˜AÒØ�g‰~Ðˆ~Ü�Q‹xˆä˜a c°Ô7€FÜ—‘—‘ÑG ÑGÐ4FÒG�I€VØ€~Ü$ Q¨CÔ0Ð0Ø€Mrp   c                óÌ  ‡— t        | j                  «       «      dk(  r,‰dv sJ ‚t        | «      t        | t        j
                  ¬«      fS | j                  «       }t        j                  d|d¬«      }t        | ‰|¬«      }|t        j
                  f|d<   | j                  «       ˆfd	„f|d
<   t        j                  j                  di |¤d|i¤Ž\  }}|€t        | ‰¬«      S ||fS )Nr   r?  rº   rf  F©r»   Úarg_break_ties_leftrF  rº  c                óR   •— t        j                  | ‰   t        j                  «      S rŸ   ©rY   rX  r„   rÅ  ©r[  rå  s    €rn   rI  zcummax.<locals>.<lambda>—  ó   ø€ ”C—N‘N 3 t¡9¬e¯k©kÓ:€ rp   r»  rD  r?  rü   )rÌ   rÍ   rÀ  rÔ  r„   rÅ  r¿   r6   Úget_reduction_combine_fnr¼  re  rH  rë   Úfallback_cummax©r¨   rå  r»   rD  r   r  r!  s    `     rn   Úcummaxrc  ˆ  óÕ   ø€ ä
ˆ1�:‰:‹<Ó˜AÒØ�w‰ÐˆÜ�Q‹xœ A¬U¯[©[Ô9Ð9Ð9à�K‰K‹M€EÜ×,Ñ,Ø˜°5ô€Jô ˜a d°%Ô8€FØœuŸ{™{Ð+€Fˆ8Ñà	�‰‹Û:ð€Fˆ;Ñô —g‘g—n‘nÑE vÑE¸*ÒE�O€FˆGØ€~Ü˜q dÔ+Ð+Ø�7ˆ?Ðrp   c                óÌ  ‡— t        | j                  «       «      dk(  r,‰dv sJ ‚t        | «      t        | t        j
                  ¬«      fS | j                  «       }t        j                  d|d¬«      }t        | ‰|¬«      }|t        j
                  f|d<   | j                  «       ˆfd	„f|d
<   t        j                  j                  di |¤d|i¤Ž\  }}|€t        | ‰¬«      S ||fS )Nr   r?  rº   r˜  FrZ  rF  rº  c                óR   •— t        j                  | ‰   t        j                  «      S rŸ   r]  r^  s    €rn   rI  zcummin.<locals>.<lambda>®  r_  rp   r»  rD  r?  rü   )rÌ   rÍ   rÀ  rÔ  r„   rÅ  r¿   r6   r`  r¼  re  rH  rë   Úfallback_cumminrb  s    `     rn   Úcumminrh  Ÿ  rd  rp   c               ó¼   — t        | j                  «       «      st        | j                  «       «      r|€t        j                  }t        d|¬«      } || |||¬«      S )NrÈ  r¿  rº   r<  r=  s        rn   rÈ  rÈ  ¶  sK   € ô 	˜Ÿ™›Ô'Ô+;¸A¿K¹K»MÔ+JØ
ˆ-Ü—‘ˆä	˜°eÔ	<€BÙˆa��x uÔ-Ð-rp   c                óÎ  ‡— t         j                  j                  }|€yt        «       Š|j                  D ]›  }|j
                  dk(  r‰|j                  t        j                  u rmt        |j                  «      dk\  rUt        |j                  d   t        «      r8t        |j                  «      dkD  sŒ|‰j                  |j                  d   «       Œ› y t        ˆfd„| D «       «      S )NTre   r1   r3   r   c              3  ó&   •K  — | ]  }|‰v –— Œ
 y ­wrŸ   rü   )rò   r@  Úused_indicess     €rn   rô   z7_current_node_uses_all_tuple_outputs.<locals>.<genexpr>Ó  s   øè ø€ Ò:¨ˆu˜Ô$Ñ:ùr  )rZ   rf   rg   r)   rh   ri   rj   rP  ÚgetitemrÌ   r}   rt   r¸   r¤   r#  )r!  rg   rm   rl  s      @rn   Ú$_current_node_uses_all_tuple_outputsrn  Á  s³   ø€ Ü—7‘7×'Ñ'€LØÐØä$.£L€LØ×"Ñ"ò 
ˆà�G‰G�Ò&Ø—‘œx×/Ñ/Ñ/Ü�D—I‘I“ !Ò#Ü˜4Ÿ9™9 Q™<¬Ô-ä�4—:‘:‹ Ó"Ø× Ñ  §¡¨1¡Õ.áð
ô Ó:°'Ô:Ó:Ð:rp   c                ó^   — t        | t        j                  «      }  t        d«      | ||¬«      S )Nr$  ©rå  r£  )rø   r„   rÆ   r´  ©r¨   rÐ   rÃ  s      rn   Ú
reduce_anyrr  Ö  s(   € ä�”E—J‘JÓ€AØ Œ>˜%Ó  ¨°wÔ?Ð?rp   c                ó  — |�}t        | «      rV| j                  «       t        j                  k7  r5t	        d«      rt        | ||¬«      S t        | ||¬«      t        | ||¬«      fS t        | ||¬«      t        | ||¬«      fS t        | d |¬«      S ©N)r   r3   rp  )	r?   r¿   r„   rÆ   rn  Úreduce_argmax_with_valueÚreduce_argmax_valueÚreduce_argmaxÚreduce_amaxrq  s      rn   Ú
reduce_maxry  Ü  ó�   € à
€Ü�QŒ<˜AŸK™K›M¬U¯Z©ZÒ7Ü3°FÔ;Ü/°¸ÀgÔNÐNä# A¨C¸'ÔBÜ˜a c°GÔ<ðð ô
 ˜ ¨gÔ6Ü˜! #°Ô8ð
ð 	
ô
 �q˜t¨gÔ6Ð6rp   c                ó  — |�}t        | «      rV| j                  «       t        j                  k7  r5t	        d«      rt        | ||¬«      S t        | ||¬«      t        | ||¬«      fS t        | ||¬«      t        | ||¬«      fS t        | d |¬«      S rt  )	r?   r¿   r„   rÆ   rn  Úreduce_argmin_with_valueÚreduce_argmin_valueÚreduce_argminÚreduce_aminrq  s      rn   Ú
reduce_minr€  î  rz  rp   Úxor_sumr¸  r·  rf  r¿  r˜  r™  rš  r›  rœ  Ú
logical_or)r’  r•  rˆ  ©ÚstablerÐ   Ú
descendingc          	     óö  — |€d}| j                  «       }| j                  «       }t        t        |«      |«      }t        |«      dk(  r't	        | «      t        d|t        j                  |«      fS t        |«      r||   nd}t        j                  j                  rt        j                  }nt        j                  }t        j                  j                  j!                  t#        j$                  |t        j&                  |«      j(                  «      «      st+        | |||¬«      S t-        |dd||d¬«      }dgt        |«      z  }	t        |«      r||	|<   t/        ||	«      }t1        ||«      }t2        j4                  j7                  || j8                  |j8                  f| j;                  «       |j;                  «       f||||¬«      \  }
}|
€t+        | |||¬«      S |€J ‚|
t=        |t        j                  «      fS )NFr   r3   rƒ  rã  )r   rº  r»  rì   rå  r„  r…  )rÍ   rw   r   rÌ   rÀ  r  r„   rÅ  r4   rÒ  Údecompose_sort_opsr  Úint16rZ   rf   ræ   r1  rÀ   rŒ  rá  r¸  Úsort_fallbackrá  rå  r3  r6   ÚSortrë   r»   re  rø   )r¨   r„  rÐ   r…  rY  r   r«  Ú	idx_dtyper!  Ú
view_shaper  s              rn   Úsort_stabler�    s²  € à€~Øˆà�J‰J‹L€EØ�\‰\‹^€FÜ
œ3˜u›: sÓ
+€CÜ
ˆ5ƒz�Q‚Ü�Q‹xœ˜q &¬%¯+©+°uÓ=Ð=Ð=ä  œZˆu�SŠz¨Q€Hô ‡}�}×'Ò'Ü—K‘K‰	ä—K‘Kˆ	Ü�7‰7×Ñ×*Ñ*Ü�‰�œ5Ÿ;™; yÓ1×5Ñ5Ó6ôô ˜Q v°3À:ÔNÐNäØ˜ ¨¸6ÐQVô€Gð �”s˜5“zÑ!€JÜ
ˆ5„zØ"ˆ
�3‰Ü�7˜JÓ'€GÜ�W˜eÓ$€Gä—g‘g—n‘nØØ—‘˜Ÿ™Ð'Ø—=‘=“? G×$7Ñ$7Ó$9Ð:ØØØØð %ó �O€FˆGð €~Ü˜Q v°3À:ÔNÐNàÐÐÐØ”8˜G¤U§[¡[Ó1Ð1Ð1rp   c                ó    — t        | d||¬«      S )NFrƒ  )r�  )r¨   rÐ   r…  s      rn   Úsortr�  I  s   € ä�q ¨C¸JÔGÐGrp   c                ó@  — t         j                  j                  st        | «      S | j	                  «       }t        j                  t        j                  |t        j                  d«      «      }t        | |g«      }t        |d¬«      \  }}|dz
  dz  }t        |d|«      S )Nr3   r   r?  r1   )r4   rÒ  r‡  Úmedian_fallbackrÍ   r  r'  rP  rŒ  rÀ   rj  rå  r�  r˜  )r�  rì   r  ÚflatÚsorted_valsr   rÿ   s          rn   Úmedian_defaultr”  ]  s�   € ä�=‰=×+Ò+Ü˜tÓ$Ð$Ø�=‰=‹?€DÜ×ÑœXŸ\™\¨4´·±¸qÓ1AÓB€EÜ��u�gÓ€DÜ  ¨1Ô-�N€K�Ø	�‰�qÑ€AÜ�+˜q !Ó$Ð$rp   c                ó¾  — t         j                  j                  st        | ||«      S | j	                  «       }t        |«      }|dk(  r5t        | «      t        d| j                  «       t        j                  |«      fS t        ||«      }t        | d|¬«      \  }}||   }|dz
  dz  }t        |||«      }	t        |||«      }
|rt        |	|«      }	t        |
|«      }
|	|
fS )Nr   T©r„  rÐ   r3   r1   )r4   rÒ  r‡  Úmedian_dim_fallbackrÍ   rÌ   rÀ  r  rw   r„   rÅ  r   r�  r˜  rX  )r�  rÐ   rÃ  rY  rª  r“  Úsorted_idxsrú  rÿ   r  r!  s              rn   Ú
median_dimr™  i  sÔ   € ä�=‰=×+Ò+Ü" 4¨¨gÓ6Ð6Ø�M‰M‹O€EÜˆu‹:€DØˆq‚yÜ�T‹{œE ! T§_¡_Ó%6¼¿¹ÀUÓKÐKÐKÜ
˜4 Ó
%€CÜ*¨4¸À#ÔFÑ€K�Øˆc‰
€AØ	
ˆQ‰�1‰€AÜ�K  aÓ(€FÜ�[ # qÓ)€GÙÜ˜6 3Ó'ˆÜ˜G SÓ)ˆØ�7ˆ?Ðrp   c                óp  ‡‡‡‡‡‡‡‡ — t         j                  j                  st        | ||«      S | j	                  «       }t        |«      }| j                  «       }|dk(  r't        | «      t        d|t        j                  |«      fS t        ||«      }t        | d|¬«      \  }}||   }t        |ddt        j                  |d¬«      }	t        j                  d«      g|z  }
||
|<   t!        |	|
«      }	t#        |	|«      }	|	j%                  «       Šˆfd„}t'        j(                  t+        |«      t        j                  ||¬«      }t-        |||«      }|j%                  «       Š |j%                  «       Š|	j%                  «       Šˆˆˆ fd	„}t'        j(                  t+        |«      t        j.                  ||¬«      }|j%                  «       Š|	j%                  «       Šˆˆfd
„}t'        j(                  t+        |«      t        j                  ||¬«      }t1        ||«      \  }}|	j%                  «       Š|j%                  «       Šˆˆfd„}t'        j(                  t+        |«      t        j                  ||¬«      }t3        ||d¬«      }t-        |||«      }t-        |||«      }|st5        ||«      }t5        ||«      }||fS )z9Lower aten.mode via sort-based decomposition or fallback.r   Tr–  r3   Frã  c           	     óì   •— t        j                  t        j                   ‰| «      t        j                  dt        j
                  «      «      t        j                  dt        j
                  «      «      S r4  )rY   rÜ  rÿ  rY  r„   rÅ  )r[  Úpositions_loader0s    €rn   Úprev_pos_fnz!mode_default.<locals>.prev_pos_fn—  sI   ø€ Ü�{‰{Ü�G‰GÑ% cÓ*¬C¯L©L¸¼E¿K¹KÓ,HÓIÜ�L‰L˜œEŸK™KÓ(ó
ð 	
rp   rc  c           
     óè   •— t        j                  t        j                   ‰| «       ‰| «      «      t        j                   ‰| «      t        j                  dt
        j                  «      «      «      S r  )rY   Úor_Únerç  rY  r„   rÅ  )r[  Úpositions_loaderÚshifted_loaderÚsorted_loaders    €€€rn   Úis_boundary_fnz$mode_default.<locals>.is_boundary_fn¬  sO   ø€ Ü�w‰wÜ�F‰F‘= Ó%¡~°cÓ':Ó;Ü�F‰FÑ# CÓ(¬#¯,©,°q¼%¿+¹+Ó*FÓGó
ð 	
rp   c                óŽ   •— t        j                   ‰| «       ‰| «      t        j                  dt        j                  «      «      S rW  )rY   r  rY  r„   rÅ  )r[  Úis_boundary_loaderÚpositions_loader2s    €€rn   Úboundary_pos_fnz%mode_default.<locals>.boundary_pos_fn½  s6   ø€ Ü�y‰yÙ˜sÓ#Ù˜cÓ"Ü�L‰L˜œUŸ[™[Ó)ó
ð 	
rp   c                ó´   •— t        j                  t        j                   ‰| «       ‰| «      «      t        j                  dt        j
                  «      «      S r  )rY   r¤   rÿ  rY  r„   rÅ  )r[  Úlast_boundary_loaderÚpositions_loader3s    €€rn   Ú
run_len_fnz mode_default.<locals>.run_len_fnÒ  s@   ø€ Ü�w‰wÜ�G‰GÑ% cÓ*Ñ,@ÀÓ,EÓFÜ�L‰L˜œEŸK™KÓ(ó
ð 	
rp   rp  )r4   rÒ  r‡  Úmode_fallbackrÍ   rÌ   rw   rÀ  r  r„   rÅ  r   r�  rá  rÀ   rj  rå  r3  re  rD   rë   rL   rG  rÆ   rc  rw  r6  )!r�  rÐ   rÃ  rY  rª  r   r“  r˜  rú  Ú	positionsÚpos_view_shaper�  Úprev_positionsÚshifted_valsr¤  Úis_boundaryr¨  Úboundary_posÚlast_boundaryr   r¬  Úrun_lenÚmax_posÚ	mode_valsÚ	mode_idxsr¦  rª  r¡  rœ  r§  r«  r¢  r£  s!                            @@@@@@@@rn   Úmode_defaultr¹  }  s†  ÿ€ ô �=‰=×+Ò+Ü˜T 3¨Ó0Ð0Ø�M‰M‹O€EÜˆu‹:€DØ�_‰_Ó€FØˆq‚yÜ�T‹{œE ! V¬U¯[©[¸%Ó@Ð@Ð@Ü
˜4 Ó
%€CÜ*¨4¸À#ÔFÑ€K�Øˆc‰
€Aô Ø	�˜¤%§+¡+°fÈEô€Iô —m‘m AÓ&Ð'¨$Ñ.€NØ€N�3ÑÜ�Y Ó/€IÜ�y %Ó(€Ið "×-Ñ-Ó/Ðô
ô ×%Ñ%Ü˜VÓ$Ü�k‰kØØô	€Nô ˜+ s¨NÓ;€Là×+Ñ+Ó-€MØ!×-Ñ-Ó/€NØ ×,Ñ,Ó.Ðö
ô ×"Ñ"Ü˜VÓ$Ü�j‰jØØô	€Kð %×0Ñ0Ó2ÐØ!×-Ñ-Ó/Ðõ
ô ×#Ñ#Ü˜VÓ$Ü�k‰kØ Øô	€Lô ˜l¨CÓ0Ñ€M�1ð "×-Ñ-Ó/ÐØ(×4Ñ4Ó6Ðõ
ô ×ÑÜ˜VÓ$Ü�k‰kØØô	€Gô ˜G¨#¸Ô=€GÜ�{ C¨Ó1€IÜ�{ C¨Ó1€IáÜ˜I sÓ+ˆ	Ü˜I sÓ+ˆ	à�iÐÐrp   c                óz  — t         j                  j                  st        | ||||«      S | j	                  «       }t        |«      }|dk(  r5t        | «      t        d| j                  «       t        j                  |«      fS t        ||«      }t        | d||¬«      \  }}t        ||d|«      }	t        ||d|«      }
|	|
fS )Nr   Trƒ  )r4   rÒ  r‡  Útopk_fallbackrÍ   rÌ   rÀ  r  rw   r„   rÅ  r   r�  r¨  )r�  rÿ   rÐ   Úlargestr9  rY  rª  r“  r˜  r  r!  s              rn   Útopkr½  ë  s²   € ä�=‰=×+Ò+Ü˜T 1 c¨7°FÓ;Ð;Ø�M‰M‹O€EÜˆu‹:€DØˆq‚yÜ�T‹{œE ! T§_¡_Ó%6¼¿¹ÀUÓKÐKÐKÜ
˜4 Ó
%€CÜ*Ø�T˜s¨wô Ñ€K�ô �K  a¨Ó+€FÜ�[ # q¨!Ó,€GØ�7ˆ?Ðrp   c                ó²  — t         j                  j                  st        | |||«      S | j	                  «       }t        |«      }|dk(  r5t        | «      t        d| j                  «       t        j                  |«      fS t        ||«      }t        | d|¬«      \  }}t        |||dz
  «      }t        |||dz
  «      }	|rt        ||«      }t        |	|«      }	||	fS )Nr   Tr–  r3   )r4   rÒ  r‡  Úkthvalue_fallbackrÍ   rÌ   rÀ  r  rw   r„   rÅ  r   r�  r˜  rX  )
r�  rÿ   rÐ   rÃ  rY  rª  r“  r˜  r  r!  s
             rn   ÚkthvaluerÀ  ü  sÈ   € ä�=‰=×+Ò+Ü   q¨#¨wÓ7Ð7Ø�M‰M‹O€EÜˆu‹:€DØˆq‚yÜ�T‹{œE ! T§_¡_Ó%6¼¿¹ÀUÓKÐKÐKÜ
˜4 Ó
%€CÜ*¨4¸À#ÔFÑ€K�ä�K  a¨!¡eÓ,€FÜ�[ # q¨1¡uÓ-€GÙÜ˜6 3Ó'ˆÜ˜G SÓ)ˆØ�7ˆ?Ðrp   c                ó<   — t        | |t        j                  |¬«      S )N©rà   rÒ   r”  )rö  r   r5  )ri   rà   r”  s      rn   Úregister_pointwise_numericrÃ    s!   € ÜØ
ØÜ;×HÑHØ'ô	ð rp   c                ób   — t        | j                  «       t        | t        j                  ¬«      S rå  )rV   rõ  rö  r   r5  rN  s    rn   Ú register_pointwise_numeric_ldf64rÅ    s'   € Ü'¨¯©Ô4ÜØ
Ü;×HÑHôð rp   )r’  )r÷   c               óŠ  ‡‡‡‡‡	‡
— t        | ||t        j                  ¬«      Š| j                  «       Š|j                  «       Š|j                  «       Š	| j	                  «       }‰j
                  xr |duxr |j                  dv Š
ˆˆˆˆ	ˆ
ˆfd„}t        j                  | j	                  «       ‰|| j                  «       ¬«      S )az  
    Computes self + value * tensor1 * tensor2 using FMA for better precision.

    Matches eager CUDA kernel order: self + value * (tensor1 * tensor2)
    This is computed as: fma(value, tensor1 * tensor2, self)

    Note: FMA is only used for floating-point types on non-AMD GPUs. For integer types,
    we fall back to regular arithmetic since FMA doesn't support integers.

    For floating-point types, we use mul_rn (round-to-nearest multiplication)
    to force rounding of the product before the FMA. This prevents Triton's
    compiler from fusing the multiplication with the FMA, matching eager's
    rounding behavior.
    rV  N©ry  Úxpuc                óâ  •—  ‰| «      } ‰| «      } ‰	| «      }‰dk(  r‰
rt        j                  |||«      S ‰
rt        j                  ||«      }nt        j                  ||«      }t	        ‰t
        j                  «      rt        j                  ‰‰«      }nt        j                  ‰‰«      }‰
rt        j                  |||«      S t        j                  |t        j                  ||«      «      S r  )
rY   rZ  Úmul_rnrŒ  rt   rÀ   rË   rX  rY  r¤   )r[  Úself_valÚt1_valÚt2_valÚt1_times_t2rX  r»   r¬  Ú	t1_loaderÚ	t2_loaderÚuse_fmar÷   s         €€€€€€rn   rb  zaddcmul.<locals>.inner_fnN  sÆ   ø€ Ù˜sÓ#ˆÙ˜3“ˆÙ˜3“ˆà�AŠ:™'Ü—7‘7˜6 6¨8Ó4Ð4ñ ô Ÿ*™* V¨VÓ4‰KäŸ'™' &¨&Ó1ˆKô �eœUŸ[™[Ô)ÜŸ™¨¨uÓ5‰JäŸ™ e¨UÓ3ˆJáä—7‘7˜: {°HÓ=Ð=ô —7‘7˜8¤S§W¡W¨Z¸Ó%EÓFÐFrp   rc  )
rØ   r   rK  re  rw   r‰  rè   rD   rë   rÍ   ©r�  Útensor1Útensor2r÷   r   rb  r»   r¬  rÏ  rÐ  rÑ  s      `  @@@@@rn   ÚaddcmulrÕ  +  sÁ   ý€ ô  ØØØÜ;×CÑCô	€Eð ×"Ñ"Ó$€KØ×#Ñ#Ó%€IØ×#Ñ#Ó%€Ið �_‰_Ó€Fà×Ñò 	+Ø˜$Ðò	+à�K‰K˜?Ð*ð ÷Gñ Gô< ×ÑØ�‰Ó ØØØ�}‰}‹ô	ð rp   c               óÄ  ‡‡‡‡‡	‡
— t        | ||t        j                  ¬«      Š| j                  «       Š|j                  «       Š|j                  «       Š	| j	                  «       }‰j
                  xr1 t        j                  j                   xr |duxr |j                  dv Š
ˆˆˆˆ	ˆ
ˆfd„}t        j                  | j	                  «       ‰|| j                  «       ¬«      S )a¯  
    Computes self + value * (tensor1 / tensor2) using FMA for better precision.

    Matches eager CUDA kernel order: self + value * (tensor1 / tensor2)
    This is computed as: fma(value, tensor1 / tensor2, self)

    For value=1: self + tensor1 / tensor2 (no FMA needed, just add the division)
    For value!=1: fma(value, div_rn(tensor1, tensor2), self)

    Note: FMA is only used for floating-point types on non-AMD GPUs. For integer types,
    we fall back to regular arithmetic since FMA doesn't support integers.

    We use div_rn (round-to-nearest division) to force proper rounding, preventing
    Triton from fusing operations in ways that change the rounding behavior.
    rV  NrÇ  c                óÜ  •—  ‰| «      } ‰| «      } ‰	| «      }‰
rt        j                  ||«      }nt        j                  ||«      }‰dk(  rt        j                  ||«      S t	        ‰t
        j                  «      rt        j                  ‰‰«      }nt        j                  ‰‰«      }‰
rt        j                  |||«      S t        j                  |t        j                  ||«      «      S r  )rY   r  rè  r¤   rt   rÀ   rË   rX  rY  rZ  rŒ  )r[  rË  rÌ  rÍ  Ú	t1_div_t2rX  r»   r¬  rÏ  rÐ  rÑ  r÷   s         €€€€€€rn   rb  zaddcdiv.<locals>.inner_fn™  sÀ   ø€ Ù˜sÓ#ˆÙ˜3“ˆÙ˜3“ˆñ ÜŸ
™
 6¨6Ó2‰IäŸ™ F¨FÓ3ˆIà�AŠ:ä—7‘7˜8 YÓ/Ð/ô �eœUŸ[™[Ô)ÜŸ™¨¨uÓ5‰JäŸ™ e¨UÓ3ˆJáä—7‘7˜: y°(Ó;Ð;ô —7‘7˜8¤S§W¡W¨Z¸Ó%CÓDÐDrp   rc  )rØ   r   r5  re  rw   r‰  r„   rŠ  r‹  rè   rD   rë   rÍ   rÒ  s      `  @@@@@rn   ÚaddcdivrÙ  t  sØ   ý€ ô" ØØØÜ;×HÑHô	€Eð ×"Ñ"Ó$€KØ×#Ñ#Ó%€IØ×#Ñ#Ó%€Ið �_‰_Ó€Fà×Ñò 	+Ü—‘×!Ñ!Ð!ò	+à˜$Ðò	+ð �K‰K˜?Ð*ð	 ÷Eñ Eô: ×ÑØ�‰Ó ØØØ�}‰}‹ô	ð rp   r÷   r  Úlogical_not)rˆ  )rÒ   r
  rQ  Úidentityc                óL  — | j                  «       t        j                  t        j                  t        j                  t        j
                  t        j                  fv rt        | dt        j                  ¬«      S t        d«      } t        |t        j                  ¬«      | «      S )NFrº   Úsignbitr¿  )
r¿   r„   rÆ   r0  Úuint16Úuint32Úuint64r@  rB   r—  rA  s     rn   rÝ  rÝ  ÿ  so   € à‡{�{ƒ}Ü�
‰
Ü�‰Ü�‰Ü�‰Ü�‰ðñ ô ˜˜E¬¯©Ô4Ð4Ü	�YÓ	€BØ?Œ>˜"´E·J±JÔ?ÀÓBÐBrp   )r°  Úpointwise_overrides_datac              #  ó.  ‡K  — t         |   Št        | ‰j                  d «      }|€y ˆfd„}t        |t        j
                  j                  «      r-|j                  «       D ]  }|‰j                   ||«      f–— Œ y |‰j                   ||«      f–— y ­w)Nc                ó4   •— ‰j                   €t        | «      S y rŸ   )rÒ  rÖ  )ri   rv   s    €rn   Úmake_triton_fallbackz6_get_pointwise_overrides.<locals>.make_triton_fallback0   s   ø€ Ø�;‰;ÐÜ# BÓ'Ð'ð rp   )	rá  r�  rà   rt   r„   r…   r¥   r§   rÒ   )Únsrà   ri   rä  Úolrv   s        @rn   Ú_get_pointwise_overridesrç  *   s’   øè ø€ Ü# DÑ)€DÜ	��T—Y‘Y Ó	%€BØ	€zØô(ô �"”e—j‘j×1Ñ1Ô2Ø—/‘/Ó#ò 	IˆBØ�d×.Ñ.Ñ0DÀRÓ0HÐHÓHñ	Ið �$×*Ñ*Ñ,@ÀÓ,DÐDÓDùs   ƒBBrÂ  c                ód   ‡— | t         |<   t        j                  | «       ˆfd„}t        | |«       y )Nc                 ó„   •—  ‰| i |¤Ž}g }t        | d   |«      D ]"  \  }}|j                  t        ||d¬«      «       Œ$ |S )Nr   Tr  )r  rx   rŽ  )r}   r   ÚresultsÚmut_resultsrÔ   r½  Úoutplace_ops         €rn   rˆ   z$register_foreach_inplace.<locals>.fn|   sV   ø€ Ù˜tÐ. vÑ.ˆØˆÜ˜t A™w¨Ó0ò 	J‰KˆC�Ø×Ñœy¨¨fÀ4ÔHÕIð	Jð Ðrp   )rc   r¢  r¤   r  )Úaten_opÚoutplace_aten_oprì  rˆ   s     ` rn   Úregister_foreach_inplacerï  x   s.   ø€ Ø07ÔÐ,Ñ-Ü×Ñ˜GÔ$ôô ˜w¨Õ+rp   c                ó2   ‡— t        | d ¬«      ˆfd„«       }|S )NrV  c                 ól   •—  ‰| i |¤Ž}t        || d   j                  «       «      }t        | d   |«      S r  )rø   r¿   rŽ  )r}   r   r½  rì  s      €rn   rˆ   zregister_inplace.<locals>.fn©   s<   ø€ á˜dÐ- fÑ-ˆÜ˜& $ q¡'×"3Ñ"3Ó"5Ó6ˆÜ˜˜a™ &Ó)Ð)rp   )r*  )rí  rì  rˆ   s    ` rn   Úregister_inplacerò  ¨   s#   ø€ Ü�w°DÔ9ó*ó :ð*ð
 €Irp   c                 ó   — y rŸ   rü   r¶  s      rn   Úsym_constrain_rangerô  Ò   ó   € àrp   c                óÆ   — t         j                  j                  j                  d   }t	        |t
        j                  «      r|j                  j                  S t        |«      S r¢  ©
rZ   rf   rg   ri  rt   r„   r°  rl   r±  r¸   ©ró   rÐ   r;  s      rn   r€  r€  ×   óA   € ä
�'‰'×
Ñ
×
#Ñ
# EÑ
*€CÜ�#”u—|‘|Ô$Ø�x‰x�}‰}Ðä�3‹xˆrp   c                óÆ   — t         j                  j                  j                  d   }t	        |t
        j                  «      r|j                  j                  S t        |«      S r¢  r÷  rø  s      rn   Ú
sym_striderû  à   rù  rp   c                ó"   — | j                  «       S rŸ   )rE  ©ró   s    rn   Ú	sym_numelrþ  é   s   € à�;‰;‹=Ðrp   c                ó²   — t        | t        «      r| j                  j                  S t        | t        t
        t        f«      rt        j                  | «      S | S rŸ   )	rt   r(   rl   r±  r¸   r;  rÆ   rÀ   r´  rÃ   s    rn   Ú_unwrap_symbolic_magic_argr 	  î   s?   € Ü�!”XÔØ�v‰v�{‰{ÐÜ�!”cœ5¤$Ð'Ô(Ü�}‰}˜QÓÐØ€Hrp   )Ú_funcc                ó¸  — t         j                  j                  }|�|j                  j	                  d«      nd }t        |t        «      r|j                  j                  S t        d„ t        j                  ||j                  «       «      D «       «      r: | d„ |D «       i |j                  «       D ��ci c]  \  }}|t        |«      “Œ c}}¤ŽS  | |i |¤ŽS c c}}w )Nr;  c              3  ó\   K  — | ]$  }t        |t        t        j                  f«      –— Œ& y ­wrŸ   )rt   r(   rÀ   rË   r!  s     rn   rô   zwrapped.<locals>.<genexpr>þ   s(   è ø€ ò 
àô �qœ8¤U§[¡[Ð1×2ñ
ùs   ‚*,c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wrŸ   )r 	  r!  s     rn   rô   zwrapped.<locals>.<genexpr>!  s   è ø€ Ò>°AÔ,¨Q×/Ñ>ùs   ‚)rZ   rf   rg   ri  rj  rt   r(   rl   r±  r$  r  r  r  r  r 	  )r	  r}   r   rl   r·  rÿ   r  s          rn   r  r  ø   sÁ   € ä�w‰w×#Ñ#ˆØ+/Ð+;�4—9‘9—=‘= Ô'ÀˆÜ�h¤Ô)Ø—=‘=×%Ñ%Ð%Üñ 
ä—_‘_ T¨6¯=©=«?Ó;ô
ô 
ñ Ù>¸Ô>ðà@FÇÁÃ×O¹¸¸1�1Ô0°Ó3Ñ3ÓOñð ñ �dÐ%˜fÑ%Ð%ùó Ps   Â2Cc                 ó~   — t        | «      dk(  rt        | d   t        t        f«      r| d   } t	        j
                  | Ž S r4  )rÌ   rt   rr   r¡   rÀ   ÚAddr  s    rn   Úsym_sumr	  	!  s8   € ô ˆ4ƒy�A‚~œ* T¨!¡W¬t´U¨mÔ<Ø�A‰wˆÜ�9‰9�dÐÐrp   c                ó   — t        d«      ‚)NzHelpful for debuggingr˜   )r�  r}   r   s      rn   Úfoobarr		  !  s   € ä
Ð5Ó
6Ð6rp   c                ó8   — | j                  «        t        | «      S rŸ   )r²  rÀ  rÃ   s    rn   Ú_realizer	  !  s   € à‡I�I„KÜ�‹8€Orp   c                óR   — | j                  «        t        j                  | |«       | S rŸ   )r²  r6   ÚResizeStorageBytes)Úvariablerj  s     rn   Úresize_storage_bytes_r	  !  s#   € à×ÑÔÜ×Ñ˜( HÔ-Ø€Orp   c                ó”   — | j                  «        |j                  «        t        j                  t        j                  | |«      «      S rŸ   )r²  rG   rë   r6   ÚSetSourceTensorKernel)r�  Úsource_tensors     rn   Úset__source_tensorr	  $!  s5   € à‡L�L„NØ×ÑÔÜ×ÑœB×4Ñ4°T¸=ÓIÓJÐJrp   rº  c                óÂ   — | |u r| S t        || j                  «       «      }t        || j                  «       «      }t	        || j                  «       «      }t        | |«      S rŸ   r  )rÚ  r�  s     rn   Ú
fsdp_copy_r	  -!  sR   € à�#‰:àˆJÜ˜˜SŸ^™^Ó-Ó.ˆÜ�s˜CŸM™M›OÓ,ˆÜ�S˜#Ÿ,™,›.Ó)ˆÜ˜˜cÓ"Ð"rp   c               ó8  ‡‡‡‡— t        | t        «      sJ ‚t        |t        t        f«      sJ ‚|€t        j
                  }|t        j                  k(  rt        d|› �«      ‚|t        j                  k(  rt        |«      dk(  sJ ‚|t        j                  k(  rt        |«      dk(  sJ ‚| j                  «       Š| j                  «       }| j                  «       }t	        j                  «       rit        j                  j                   j"                  rEt%        |«      rt'        d«      Šn0t)        |«      r t	        j*                  |«      j,                  ŠndŠndŠt.        j0                  j2                  j5                  ‰d«      rt7        |‰||¬«      S | j9                  «       }|d uxr t;        d	„ |D «       «      }|rt=        | ‰g«      }nRt        | j>                  t@        jB                  «      r| j>                  jE                  «       | _        tG        | ‰gd
g«      }|jI                  «       Št@        jJ                  jM                  ||«      }tA        jN                  ||||«      jQ                  «       Šˆˆˆˆfd„}	tS        jT                  |||	t        |«      ¬«      }
|
S )Nzunsupported memory format: r®   r¯   ÚnanTrÄ  r   r`  c              3  óp   K  — | ].  }t         j                  j                  j                  |d «      –— Œ0 y­wr*  )rZ   rf   ræ   r–  rh  s     rn   rô   zresize.<locals>.<genexpr>]!  s,   è ø€ ò 2Ø;<Œ�‰×Ñ×0Ñ0°°A×6ñ2ùs   ‚46r3   c                ó  •‡—  ‰| «      Št        j                  ‰t        j                  «      }t        j                  ‰t        j                  «      }t        j                  ||«      }t        j
                  |ˆˆfd„‰«      S )Nc                 ó   •—  ‰‰ g«      S rŸ   rü   )Ú
flat_indexÚflat_loaders   €€rn   rI  z*resize.<locals>.inner_fn.<locals>.<lambda>q!  s   ø€ ©°Z°LÓ(A€ rp   )rY   rX  r„   rÅ  rÇ  rÉ  )	r[  Úflat_index_exprÚlimitrÏ  r	  r	  Ú	old_numelÚout_indexerÚuninitialized_vals	       @€€€€rn   rb  zresize.<locals>.inner_fnl!  sZ   ù€ Ù  Ó%ˆ
ÜŸ.™.¨´U·[±[ÓAˆÜ—‘˜y¬%¯+©+Ó6ˆÜ�v‰v�o uÓ-ˆÜ�z‰z˜$Ô AÐCTÓUÐUrp   rc  )+rt   rG   rr   r¡   r„   Úcontiguous_formatÚpreserve_formatr›  Úchannels_lastrÌ   Úchannels_last_3drE  r¿   rO  rT  r‹  rS  Úfill_uninitialized_memoryr    r;  r!   rá  r¸  rZ   rf   ræ   r–  r=  rÆ  r$  rå  rv   r6   r:   r¬  rŸ  re  r  Ú stride_ordered_for_memory_formatr²  r  rD   rë   )r¨   rì   rÓ  r»   r   rl  Úhas_overlappingÚx_flatÚ
out_striderb  rz   r	  r	  r 	  r!	  s              @@@@rn   Úresizer+	  8!  s0  û€ ä�aœÔ#Ð#Ð#Ü�dœT¤5˜MÔ*Ð*Ð*àÐÜ×/Ñ/ˆØœ×-Ñ-Ò-ÜÐ8¸¸ÐHÓIÐIàœ×+Ñ+Ò+Ü�4‹y˜AŠ~Ðˆ~Øœ×.Ñ.Ò.Ü�4‹y˜AŠ~Ðˆ~à—‘“€IØ�K‰K‹M€EØ×"Ñ"Ó$€Fô 	×2Ñ2Ô4Ü�K‰K×%Ñ%×?Ò?ä˜%Ô Ü % e£ÑÜ˜eÔ$Ü %§¡¨EÓ 2× 6Ñ 6Ñà $Ñð  Ðä‡w�w×Ñ×/Ñ/°	¸1Ô=Ü�DÐ+°5ÀÔHÐHà× Ñ Ó"€GØ TÐ)ò ¬cñ 2Ø@Gô2ó /€Oñ ä�a˜)˜Ó%‰ô �a—f‘fœbŸk™kÔ*Ø—V‘V×'Ñ'Ó)ˆAŒFÜ˜A 	˜{¨Q¨CÓ0ˆØ×$Ñ$Ó&€KÜ×"Ñ"×CÑCÀDÈ-ÓX€JÜ—.‘. ¨°°jÓA×NÑNÓP€K÷Vô ×
Ñ
Ø˜U¨X¼dÀ4»jô€Cð €Jrp   )Úauto_functionalizedc                óà   — ddl m} |j                  |«      }t        j                  | ||i |¥|¥¬«       |j                  «       D ��ci c]  \  }}t        |t        «      sŒ||“Œ c}}S c c}}w )Nr   )Úkernel_side_table)Ú
kernel_idxÚgridÚtma_descriptor_metadataÚkernel_args)Ú*torch._higher_order_ops.triton_kernel_wrapr.	  Úget_constant_argsr6   ÚUserDefinedTritonKernelr  rt   rG   )	r/	  Úconstant_args_idxr0	  r1	  r   r.	  Úconstant_argsr›  r;  s	            rn   Útriton_kernel_wrap_r8	  !  sj   € õ Mà%×7Ñ7Ð8IÓJ€MÜ×ÑØØØ 7Ø/�vÐ/ Ð/õ	ð &,§\¡\£^×R™˜˜c´zÀ#ÄyÕ7QˆC�‰HÓRÐRùÓRs   ÁA*Á!A*c                ó^  — t        d„ | g|¢D «       «      rTd}t        j                  j                  j                  j                  dd «      x}r|› d|› �}|t        j                  _        t        j                  j                  | |||«      }t        t        t        j                  |«      «      S )Nc              3  óV   K  — | ]!  }t        |t        «      xr t        |«      –— Œ# y ­wrŸ   rv  r!  s     rn   rô   zcond.<locals>.<genexpr>š!  s#   è ø€ Ò
M°aŒ:�aœÓ Ò1¤Y¨q£\Ó1Ñ
Mùrx  z"control flow operator: torch.cond.r‰  rŠ  )r$  rZ   rf   rg   ri  rj  r�  r6   ÚConditionalrë   rr   ÚmaprG   )ÚpredÚtrue_fnÚfalse_fnÚoperandsrœ   r‰  r½  s          rn   r›   r›   ”!  s–   € ô Ñ
M¸DÐ;LÀ8Ð;LÔ
MÔMØ2ˆÜŸ'™'×.Ñ.×3Ñ3×7Ñ7¸ÀtÓLÐLˆ;ÐLØ�EÐ*¨;¨-Ð8ˆCØ,/Œ�‰Ô)ä�^‰^×"Ñ" 4¨°(¸HÓE€FÜ””I×$Ñ$ fÓ-Ó.Ð.rp   c                ó¸  — t         j                  sit        d„ ||z   D «       «      rTd}t        j                  j
                  j                  j                  dd «      x}r|› d|› �}|t        j                  _        t        j                  j                  | ||||«      }t        |t        «      sJ ‚t        t        t        j                  j                   |«      «      S )Nc              3  óV   K  — | ]!  }t        |t        «      xr t        |«      –— Œ# y ­wrŸ   rv  r!  s     rn   rô   zwhile_loop.<locals>.<genexpr>¨!  s+   è ø€ ò *àô 	�1”fÓÒ.¤)¨A£,Ó.ñ*ùrx  z(control flow operator: torch.while_loop.r‰  rŠ  )r4   rŽ  r$  rZ   rf   rg   ri  rj  r�  r6   Ú	WhileLooprë   rt   r   rr   r<	  Ú_maybe_wrap_as_tensor_box)Úcond_fnÚbody_fnÚcarried_inputsÚadditional_inputsÚstack_outputrœ   r‰  r½  s           rn   Ú
while_looprJ	  ¤!  sÁ   € ô ×!Ò!¤cñ *àÐ"3Ñ3ô*ô 'ð 9ˆÜŸ'™'×.Ñ.×3Ñ3×7Ñ7¸ÀtÓLÐLˆ;ÐLØ�EÐ*¨;¨-Ð8ˆCØ,/Œ�‰Ô)ä�\‰\× Ñ Ø�˜.Ð*;¸\ó€Fô �fœhÔ'Ð'Ð'Ü””B—L‘L×:Ñ:¸FÓCÓDÐDrp   )rI	  c                óˆ   — t        j                  j                  | g|¢­Ž }t        t	        t
        j                  |«      «      S rŸ   )r6   ÚInvokeSubgraphrë   rr   r<	  rG   )Úsubgraph_fnÚ
identifierr@	  r½  s       rn   Úinvoke_subgraphrO	  ½!  s5   € ä×Ñ×%Ñ% kÐ=°HÒ=€FÜ””I×$Ñ$ fÓ-Ó.Ð.rp   c                ól  — t         }t        | j                  j                  «      D �]]  \  }}|j                  dk(  r?|t
        j                  j                  vsJ ‚||   t
        j                  j                  |<   ŒU|j                  dk(  r]t
        j                  j                  |«      \  }}t        j                  j                  j                  t
        j                  |||«      }ŒÁ|t
        j                  j                  vsJ ‚t
        j                  j                  }	 |t
        j                  _        t
        j                  j                  |«      t
        j                  j                  |<   |t
        j                  _        �Œ` |t         u rt        d«      ‚|S # |t
        j                  _        w xY w)a  Process nodes from a FX graph by executing them through V.graph.

    This is a common pattern for executing a subgraph's nodes:
    - Placeholder nodes are mapped to the provided args
    - Output nodes return their result
    - Other nodes are executed via V.graph.run_node

    rÖ  r6  zNo output node found in graph)Ú_MISSINGrs   rf   Únodesri   rZ   ÚenvÚfetch_args_kwargs_from_envr„   r^  ÚInterpreterr6  rg   Úrun_noder›  )rÇ  r}   r6  r|   rl   Úoutput_argsr   Úsaved_current_nodes           rn   Úprocess_subgraph_nodesrY	  Æ!  s@  € ô €Fä˜\×/Ñ/×5Ñ5Ó6ó :‰ˆˆ4Ø�7‰7�mÒ#ØœqŸw™wŸ{™{Ñ*Ð*Ð*Ø $ Q¡ŒA�G‰G�K‰K˜ÑØØ�W‰W˜Ò Ü"#§'¡'×"DÑ"DÀTÓ"JÑˆK˜Ü—X‘X×)Ñ)×0Ñ0´·±¸$ÀÈVÓT‰FàœqŸw™wŸ{™{Ñ*Ð*Ð*ä!"§¡×!5Ñ!5Ðð:Ø'+”—‘Ô$Ü$%§G¡G×$4Ñ$4°TÓ$:”—‘—‘˜DÑ!à'9”—‘Ö$ð!:ð$ ”ÑÜÐ:Ó;Ð;à€Møð (:”—‘Õ$ús   Ä AFÆF3)Úcontrol_depsc                ó˜  — t         j                  j                  j                  d   }t	        |t
        «      sJ ‚g }t        | |d¬«      D ]Í  \  }}t        j                  |«      D �cg c]  }t	        |t        «      r|‘Œ }}|D ]1  }	|	j                  «        |j                  |	j                  «       «       Œ3 t	        |t        j                  j                  «      sŒ“t         j                  j                   j#                  |g «      }
|j%                  |
«       ŒÏ t         j                  j                  j                  }d}t'        |«      |z   t'        |«      k(  sJ ‚t'        t         j                  j(                  «      }t'        |j*                  j                  j-                  d¬«      «      t'        |«      k(  sJ ‚t/        |j*                  t1        |«      «      }| sJ ‚t         j                  j(                  |d }|D �cg c]\  }t	        |t2        j4                  «      r@|j6                  �4t	        |j8                  t2        j:                  «      r|j                  «       ‘Œ^ }}|r5|t         j                  j                   t         j                  j                  <   |D ]E  }|D ]>  }|j<                  }|€J ‚t         j                  j>                  |   jA                  |«       Œ@ ŒG |D �cg c]h  }t	        |t2        j4                  «      rL|j6                  �@t	        |j8                  t2        j:                  «      rt	        |t2        jB                  «      s|‘Œj }}|râ|ràtE        d„ |j*                  j                  jF                  D «       «      }|r®|D ]©  }t	        |t2        jH                  «      sJ ‚|D ]†  }t        j                  |«      D ]l  }t	        |t        «      sŒ|jK                  «       }|€Œ't3        jB                  t3        j:                  |¬	«      ||«      }|jL                  j                  |«       Œn Œˆ Œ« |S c c}w c c}w c c}w )
aS  
    Lower control_deps_op by ensuring dependencies are realized and tracking them.

    The control_deps_op HOP makes dependencies explicit in the graph. During lowering:
    1. Realize all additional dependencies to ensure they're computed
    2. Execute the target operation normally
    3. Track the dependencies for the scheduler
    r   T)Ústrictr1   rÖ  rN  Nc              3  ó²   K  — | ]O  }|j                   d k(  xr: |j                  t        j                  j                  j
                  j                  u –— ŒQ y­w)re   N)ri   rj   r„   rY   ÚstreamsÚwait_streamrÙ  )rò   rú  s     rn   rô   z+control_deps_op_lowering.<locals>.<genexpr>O"  sQ   è ø€ ò 
ð ð �D‰D�OÑ#ò BØ—‘œEŸI™I×-Ñ-×9Ñ9×AÑAÐAóBñ
ùs   ‚AAr2  )'rZ   rf   rg   r}   rt   r¡   r  rk  rl  r>   r²  rx   r±  r„   r^  r_  Ú_void_ctrl_dep_op_namesrj  r  rÌ   Ú
operationsrÇ  Ú
find_nodesrY	  rr   r6   rª  rà   r«  Ú
NoneLayoutÚoperation_nameÚadditional_buffer_depsr¤   ÚMutationOutputr$  rR	  rã  rw   Úmutation_outputs)Úadditional_depsrM	  r}   Úoriginal_dep_nodesÚ	dep_namesÚdepÚ	orig_nodeÚdep_leafÚdep_ir_nodesÚdep_ir_nodeÚfoundÚoriginal_argsÚ
arg_offsetÚoperation_lenr6  Únew_opsri   Ú
void_namesÚdep_nameÚop_nameÚvoid_opsÚhas_wait_streamÚvoid_oprÔ   Úarg_leafr   Úmut_outs                              rn   Úcontrol_deps_op_loweringr}	  í!  sÉ  € ô Ÿ™×-Ñ-×2Ñ2°1Ñ5ÐÜÐ(¬%Ô0Ð0Ð0à€IÜ˜oÐ/AÈ$ÔOò $‰ˆˆYô #×.Ñ.¨sÓ3ö
àÜ˜(¤FÔ+ò ð
ˆð 
ð
 (ò 	5ˆKØ×ÑÔ!Ø×Ñ˜[×1Ñ1Ó3Õ4ð	5ô �i¤§¡§¡Õ/Ü—G‘G×3Ñ3×7Ñ7¸	À2ÓFˆEØ×Ñ˜UÕ#ð$ô —G‘G×(Ñ(×-Ñ-€MØ€JÜˆt‹9�zÑ!¤S¨Ó%7Ò7Ð7Ð7äœŸ™×*Ñ*Ó+€MÜˆ{×'Ñ'×-Ñ-×8Ñ8¸MÐ8ÓJÓKÌsÐSWËyÒXÐXÐXô $ K×$<Ñ$<¼dÀ4»jÓI€FáÐˆ?ä�g‰g× Ñ   Ð0€Gð" öàÜ�bœ"Ÿ)™)Ô$Ø�G‰GÐÜ�r—y‘y¤"§-¡-Ô0ð	 	�‰�ð€Jð ñ Ø@JŒ�‰×'Ñ'¬¯©×(<Ñ(<Ñ=ð ò BˆØ!ò 	BˆHØ×'Ñ'ˆGØÐ&Ð&Ð&Ü�G‰G×*Ñ*¨7Ñ3×7Ñ7¸ÕAñ	BðBð  öàÜ�bœ"Ÿ)™)Ô$Ø�G‰GÐÜ�r—y‘y¤"§-¡-Ô0Ü˜2œr×0Ñ0Ô1ò 	ð€Hð ñ ‘Däñ 
ð !×-Ñ-×3Ñ3×9Ñ9ô
ó 
ˆñ
 Ø#ò A�Ü! '¬2¯?©?Ô;Ð;Ð;Øò 
A�CÜ$*×$6Ñ$6°sÓ$;ò 	A˜Ü)¨(´FÔ;Ø$Ø!)×!4Ñ!4Ó!6˜Ø!˜>Ø$Ü"$×"3Ñ"3ÜŸM™M°Ô8¸(ÀGó#˜ð  ×0Ñ0×7Ñ7¸Õ@ñ	Añ
AðAð €MùòI
ùòNùò>s   Á'P=È A!QË(A-Q)Úschemec               óö  — d }t         j                  j                  j                  j	                  dd «      }|€J ‚t        | j                  j                  j                  «      D �]‘  \  }}|j                  dk(  r!||   t         j                  j                  |<   Œ7|j                  dk(  �rt         j                  j                  |«      \  }}t        j                  ||j                  «       «      D ]Œ  }	|	j                  «        |j                  r7t         j                  j                   j#                  |	j%                  «       «       t         j                  j&                  j#                  |	j%                  «       «       ŒŽ t(        j*                  j,                  j/                  t         j                  |||«      }�ŒXt         j                  j1                  |«      t         j                  j                  |<   �Œ” |S )NÚquant_optionsrÖ  r6  )rZ   rf   rg   ri  rj  rs   rÇ  rR	  ri   rS	  rT	  r  r  r  r²  Úcodegen_low_precisionÚlow_precision_codegen_opsr¤   r³  Úinvoke_quant_opsr„   r^  rU	  r6  rV	  )
rM	  r~	  r@	  r6  r€	  r|   rl   r}   r   r  s
             rn   Úinvoke_quant_tracerr„	  f"  sl  € à€FÜ—G‘G×(Ñ(×-Ñ-×1Ñ1°/À4ÓH€MØÐ$Ð$Ð$ä˜[×5Ñ5×;Ñ;×AÑAÓBó 7‰ˆˆ4Ø�7‰7�mÒ#Ø (¨¡ŒA�G‰G�K‰K˜ÑØà�W‰W˜Ó ÜŸ7™7×=Ñ=¸dÓC‰LˆD�&ä—_‘_ T¨6¯=©=«?Ó;ò E�Ø—	‘	”à ×6Ò6Ü—G‘G×5Ñ5×9Ñ9¸!×:NÑ:NÓ:PÔQä—‘×(Ñ(×,Ñ,¨Q×-AÑ-AÓ-CÕDðEô —X‘X×)Ñ)×0Ñ0´·±¸$ÀÀfÓMŠFä !§¡× 0Ñ 0°Ó 6ŒA�G‰G�K‰K˜Óð%7ð( €Mrp   c                ó|  ‡‡— ddl m}m} dt        |«      z  }| j                  j
                  j                  D �cg c]  }|j                  dk(  sŒ|‘Œ }}||d  }t        |«      t        ‰«      k7  rt        d«      ‚g }	t        ‰|«      D ]C  \  }
}t        |
t        t        j                  f«      r|j                  sŒ3|	j                  |
«       ŒE |	rt        d«      ‚t!        j"                  ||«      D �cg c](  } ||j%                  «       |j'                  «       ¬«      ‘Œ* }}|j)                  ‰«        || |«      Šˆˆfd„}t+        |d	   d	d ¬
«      }t-        d„ |D «       «      |d<   t-        d„ |D «       «      |d<   t/        j0                  j2                  d|ddœ|¤Ž}|d	   €t        d«      ‚|S c c}w c c}w )Nr3   )ÚInputDescriptorÚlower_pointwise_subgraphr1   rÖ  z/Unable to generate code for associative_scan opz_Unable to generate code for associative_scan op, because there are unsupported lifted argumentsr`  c                óh   •—  ‰g t        j                  | «      ¢t        j                  |«      ¢‰¢­Ž S rŸ   )rk  rl  )ÚlhsÚrhsrH	  Úlowered_combine_fns     €€rn   Úwrapped_combine_fnz,associative_scan.<locals>.wrapped_combine_fn¢"  s@   ø€ Ù!ð 
Ü×Ñ Ó$ð
ä×Ñ Ó$ð
ð ò
ð 	
rp   r   rF  c              3  ó<   K  — | ]  }|j                  «       –— Œ y ­wrŸ   ©r¿   r!  s     rn   rô   z#associative_scan.<locals>.<genexpr>ª"  s   è ø€ Ò7¨q˜QŸ[™[Ÿ]Ñ7ùr$  rº  c              3  ó<   K  — | ]  }|j                  «       –— Œ y ­wrŸ   rÁ  r!  s     rn   rô   z#associative_scan.<locals>.<genexpr>«"  s   è ø€ Ò<°A §¡§Ñ<ùr$  r»  F)rD  Úcan_fallback_to_atenrü   )rÆ  r†	  r‡	  rÌ   rÇ  rf   rR	  ri   r›  r  rt   r¸   rÀ   rË   rh   rx   r  r  r¿   rw   r  r¼  r¡   r6   rH  rë   )rD  ÚxsrH	  r†	  r‡	  Únum_scan_inputsrl   ÚplaceholdersÚadditional_placeholdersÚunsupported_inputsrÔ   rÖ  r¨   Úsubgraph_inputsrŒ	  r   r½  r‹	  s     `              @rn   Úassociative_scanr—	  ƒ"  sÌ  ù€ çLàœ#˜b›'‘k€Oà#×0Ñ0×6Ñ6×<Ñ<öØÀÇÁÈ=Ó@XŠð€Lð ð +¨?Ð+;Ð<ÐÜ
Ð"Ó#¤sÐ+<Ó'=Ò=ÜÐLÓMÐMð ÐÜÐ 1Ð3JÓKò +Ñˆˆ[Ü˜#¤¤U§[¡[Ð1Ô2°k×6GÓ6GØ×%Ñ% cÕ*ð+ñ Üð+ó
ð 	
ô —‘  RÓ(öàñ 	˜aŸk™k›m°A·L±L³NÖCð€Oð ð ×ÑÐ,Ô-Ù1°*¸oÓNÐõ
ô ˜b ™e¨!°4Ô8€FÜÑ7°BÔ7Ó7€Fˆ8ÑÜÑ<¸Ô<Ó<€Fˆ;ÑÜ�W‰W�^‰^ð Ø%Ø"ñð ñ€Fð
 ˆa�yÐÜÐLÓMÐMØ€MùòWùò&s   »F4ÁF4Ã6-F9c                 ó   — y rŸ   rü   )Útokenss    rn   Ú_sink_tokensrš	  ¶"  rõ  rp   c                  ó   — y rŸ   rü   rü   rp   rn   Ú_make_tokenrœ	  »"  rõ  rp   c                óL  — ddl m}m}  ||«      }|€Ì|t        j                  j
                  j                  u r¦ddlm}m	} |j                  «       }	|	rŒ|	j                  j                  t        j                  j
                  j                  «      }
|
rMt        |
|«      sJ ‚|
j                  |d   «      }|r)t        |«      dk(  sJ d«       ‚t!        t#        |«      «      }t        t$        j&                  j(                  «      }|t*        v r+t+        |   |i |¤Ž}t-        j.                  t0        d„ |«       n:d„ }t-        j2                  |t5        j6                  j8                  |g|¢­i |¤Ž«      }t        t$        j&                  j(                  |d «      dkD  sJ d	|› d
�«       ‚|r½t$        j&                  j:                  j=                  |«      }t$        j&                  j(                  |d D ]W  }d„ |_        |sŒ|jA                  «       }t$        j&                  jB                  |   jE                  |jA                  «       «       ŒY t$        j&                  j:                  |<   	 d„ }t-        j2                  |||f«      \  }} ||||«      }t        |jR                  «      dk(  r| |fS t        |jR                  «      dk(  r| |fS | g|¢­S # tF        $ rQ}tI        |«      }tJ        jM                  d||«       t        |tN        tP        f«      r| g|¢­cY d}~S | |fcY d}~S d}~ww xY w)z
    We lower the operator directly, and then we add StarDep dependencies to all
    the newly created nodes in the graph.
    r   )Ú_get_effectÚ_get_schemaN)ÚInvokeSubgraphCacheÚTracingContextr3   zMultiple effects NYIc                ó"   — | j                  «       S rŸ   )r²  rý  s    rn   rI  zwith_effects.<locals>.<lambda>á"  s   € °!·)±)³+€ rp   c                óZ   — t        | t        j                  «      r| j                  «       S | S rŸ   r¼  rÃ   s    rn   r¾  z"with_effects.<locals>.wrap_tensorsä"  r¿  rp   zCNo operation nodes were generated when lowering effectful operator ú.c                  ó   — yr¾   rü   rü   rp   rn   rI  zwith_effects.<locals>.<lambda>ô"  s   � rp   c                ó<  — t        | t        j                  «      r| j                  «       S t        | t        «      rK	 | j
                  }t        |d«      r0t        |j
                  d«      r|j
                  j                  «       S | S | S # t        t        f$ r Y | S w xY w)Nrv   Úget_example)
rt   r6   ÚTorchBindObjectÚ	get_valuerG   rv   rñ   r§	  ÚAttributeErrorr™   )ró   r·  s     rn   Úconvert_ir_to_valuez)with_effects.<locals>.convert_ir_to_valueÿ"  s�   € Ü˜!œR×/Ñ/Ô0Ø—{‘{“}Ð$Ü˜AœyÔ)ðØŸf™f�GÜ˜w¨Ô/´GØŸ™ mô5ð  'Ÿ|™|×7Ñ7Ó9Ð9ð �ØˆHøô	 'Ô(;Ð<ò Øà�ðús   ¼AB ÂBÂBz5Failed to get schema for %s: %s. Assuming list output)*Útorch._higher_order_ops.effectsrž	  rŸ	  r„   rY   Úhigher_orderrO	  Útorch._guardsr 	  r¡	  Útry_getÚhop_dispatch_set_cacheÚ	get_cachert   Úget_effectsrÌ   rL  r’  rZ   rf   ra	  r`   rk  rŒ  rG   rÀ  r6   rÁ  rë   Úeffectful_opsrj  Úhas_side_effectsr±  Úadditional_star_depsr¤   r›  rQ  rñ  rò  r¡   rr   Úreturns)Útokenri   r}   r   rž	  rŸ	  Úeffect_typer 	  r¡	  Útracing_ctxÚinvoke_subgraph_cacheÚeffectsrs	  r½  r¾  Úprev_effect_bufferÚnew_oprw	  r«	  Úschema_argsÚschema_kwargsÚschemaÚeÚ	error_msgs                           rn   Úwith_effectsrÃ	  À"  sä  € ÷ Iñ ˜b“/€KØÐ˜r¤U§Y¡Y×%;Ñ%;×%KÑ%KÑKßEà$×,Ñ,Ó.ˆÙØ$/×$FÑ$F×$PÑ$PÜ—	‘	×&Ñ&×6Ñ6ó%Ð!ñ %Ü!Ð"7Ð9LÔMÐMÐMà/×;Ñ;¸DÀ¹GÓD�ÙÜ˜w›<¨1Ò,ÐDÐ.DÓDÐ,Ü"&¤t¨G£}Ó"5�Kô œŸ™×*Ñ*Ó+€Mð 
ŒY�Ü˜2‘ Ð/¨Ñ/ˆä×ÑœYÑ(=¸vÕFò	Lô —‘Øœ"×+Ñ+×2Ñ2°2ÐG¸ÒGÀÑGó
ˆô Œq�w‰w×!Ñ! - .Ð1Ó2°QÒ6ð Ø
MÈbÈTÐQRÐSóÐ6ñ ÜŸW™W×2Ñ2×6Ñ6°{ÓCÐÜ—g‘g×(Ñ(¨¨Ð8ò 	YˆFá&2ˆFÔ#Ú!Ø Ÿ/™/Ó+�Ü—‘×,Ñ,¨WÑ5×9Ñ9Ð:L×:UÑ:UÓ:WÕXð	Yð ô 	
�‰×Ñ˜kÑ*ð #ò	ô$ &,§_¡_Ø $¨ ó&
Ñ"ˆ�]ñ ˜R ¨mÓ<ˆô ˆ6�>‰>Ó˜aÒØ�vˆÐÜ	ˆV�^‰^Ó	 Ò	!Ø�vˆÐàÐ˜ÑÐøô ò #Ü˜“Fˆ	Ü�‰ØCÀRÈô	
ô �fœu¤d˜mÔ,ØÐ#˜FÑ#Õ#à˜6�?Õ"ûð#ús*   É#(K	 Ë		L#Ë=LÌL#ÌLÌL#ÌL#)Úregister_comm_loweringsÚregister_symm_mem_loweringsc                óÆ  — t        | |ddd¬«      }t        j                  j                  j	                  t        |d   «      «      }t        j                  j                  j                  |t        j                  «      rt        j                  d| ddœ|¤Ž\  }}||fS t        | |d¬«      }t        t        j                     t        | |«      «      }t!        ||d¬«      }||fS )	z
    Lowering inductor_prims.prepare_softmax_online to compute max/sum with
    online softmax reductions when profitable.
    TNrÐ  re  r1   )rc  Ú
num_output)r£  rü   )r¯  rZ   rf   ræ   ÚsimplifyrW   Ústatically_known_geqr4   rn  rA   rë   rx  r`   rä  rS  rÿ  rÁ  )	r¨   rÐ   r   rå  Ú
max_tensorÚ
sum_tensorrÕ  rS  Úxsums	            rn   Úprepare_softmax_onlinerÍ	  .#  sØ   € ô #Ø	�˜d¨$Àdô€Fô �W‰W×Ñ×&Ñ&¤}°VÐ<NÑ5OÓ'PÓQ€Fä‡w�w×Ñ×,Ñ,Ø”×2Ñ2ôô "8×!>Ñ!>ð "
Ø Qñ"
Ø*0ñ"
Ñˆ
�Jð ˜:Ð%Ð%ä˜1˜c¨DÔ1ˆÜœŸ™Ñ!¤# a¨£,Ó/ˆÜ�C˜ tÔ,ˆØ�TˆzÐrp   c                óè  — t        «       st        d«      ‚| j                  «       }|t        j                  t        j
                  t        j                  fvrt        d|› �«      ‚|t        j                  k7  rt        | t        j                  «      } t        j                  t        j                  ddt        j                  dd¬«      } t        |«      | «      }t        |t        j                  «      S )zü
    Lowering for cvt_e8m0_rceil. Uses PTX cvt.rp.satfinite.ue8m0x2.f32 on NVIDIA SM100+.

    The PTX instruction takes 2 float32 and outputs 2 e8m0 packed in uint16.
    Currently we pass 0.0 as the second input and only use the low byte result.
    zMcvt_e8m0_rceil requires NVIDIA SM100+ (Blackwell) for PTX instruction supportzAcvt_e8m0_rceil requires float32, float16, or bfloat16 input, got z)cvt.rp.satfinite.ue8m0x2.f32 $0, 0.0, $1;z=h,rTr3   )ÚasmÚconstraintsr»   Úis_pureÚpack)rO   r™   r¿   r„   r  rN  rM  rÿ  rø   r  r)  rY   Úinline_asm_elementwiserÞ  r—  r0  )rÏ   r»   rˆ   r½  s       rn   Úcvt_e8m0_rceil_loweringrÔ	  H#  sÈ   € ô $Ô%Ü!Ø[ó
ð 	
ð �M‰M‹O€EØ”U—]‘]¤E§M¡M´5·>±>ÐBÑBÜØOÐPUÈwÐWó
ð 	
ð
 ”—‘ÒÜ�sœEŸM™MÓ*ˆä	×	Ñ	Ü×"Ñ"Ø7ØÜ�l‰lØØô
€Bð  Œ^˜BÓ Ó$€FÜ�FœEŸK™KÓ(Ð(rp   )rÑ	  rÒ	  c           	     ó<  ‡ ‡‡‡‡‡‡	— t        |Ž }t        d„ |D «       «      Š|D �cg c]  }|j                  «       ‘Œ c}Š	ˆ ˆˆˆˆˆ	ˆfd„}t        j                  j                  |d   j                  «       ‰|t        |d   j                  «       «      ¬«      S c c}w )Nc              3  ó<   K  — | ]  }|j                  «       –— Œ y ­wrŸ   rŽ	  rw  s     rn   rô   z/lower_inline_asm_elementwise.<locals>.<genexpr>v#  s   è ø€ Ò;¨S˜Ÿ™ŸÑ;ùr$  c           
     óò   •‡ — t        ˆ fd„‰D «       «      }t        j                  |‰‰‰‰‰	‰dœŽ}‰t        j                  t        j
                  fv r$t        j                  |t        j                  «      }|S )Nc              3  ó.   •K  — | ]  } |‰«      –— Œ y ­wrŸ   rü   )rò   rd  r[  s     €rn   rô   zAlower_inline_asm_elementwise.<locals>.inner_fn.<locals>.<genexpr>z#  s   øè ø€ Ò7 V‘V˜C—[Ñ7ùrY  )rÏ	  rÐ	  r»   rÑ	  rÒ	  Úinput_dtypes)r¡   rY   rÓ	  r„   rN  rM  rø   r  )
r[  Úvalsr½  Úasm_strrÐ	  r»   rÙ	  rÑ	  r†  rÒ	  s
   `  €€€€€€€rn   rb  z.lower_inline_asm_elementwise.<locals>.inner_fny#  sh   ù€ ÜÓ7¨wÔ7Ó7ˆÜ×+Ñ+ØØØ#ØØØØ%ò
ˆð ”U—]‘]¤E§N¡NÐ3Ñ3Ü—\‘\ &¬%¯-©-Ó8ˆFØˆrp   r   rc  )	r  r¡   re  r6   rD   rë   rw   rr   rÍ   )
rÛ	  rÐ	  r»   rÑ	  rÒ	  rP  rÏ   rb  rÙ	  r†  s
   `````   @@rn   Úlower_inline_asm_elementwiserÜ	  n#  sŽ   þ€ ô  Ð'€FäÑ;°FÔ;Ó;€LØ,2Ö3 Sˆs�‰Õ Ò3€G÷ò ô$ �<‰<×ÑØ�a‰y×#Ñ#Ó%ØØÜ�F˜1‘I×&Ñ&Ó(Ó)ð	 ó ð ùò) 4s   ¦B)rÂ  )Úquantized_lowerings)Újagged_loweringsÚmkldnn_loweringsc              #  óX  K  — t        | t        j                  j                  «      sJ d«       ‚t        j                  | «      }	  t        | «      t        | «      «       d–— |r
|t        | <   yt        j                  | «       y# |r
|t        | <   w t        j                  | «       w xY w­w)z^
    A context manager to force fallback an op. Used in unit test
    for FallbackKernel.
    z+Only OpOverload to make the clean up easierN)	rt   r„   r…   r†   r`   rj  r*  rÖ  r¡  )ri   Úold_handlers     rn   Úforce_fallbackrâ	  ¨#  s�   è ø€ ô �bœ%Ÿ*™*×/Ñ/Ô0ð Ø5óÐ0ô —-‘- Ó#€KðØÔ˜"ÓÔ.¨rÓ2Ô3ÛáØ'ŒI�bŠMä�M‰M˜"Õøñ Ø'ŒI�bŠMä�M‰M˜"Õüs   ‚AB*ÁB Á""B*Â#B'Â'B*rh  )ry   zIterable[Any]rÓ   z4defaultdict[tuple[Any, bool], list[tuple[int, Any]]])rˆ   úCallable[..., Any]rÓ   úCallable[..., Any] | None)r–   ztorch._C.TagrÓ   z%Callable[..., tuple[Any, Any]] | None)r›   rÆ   rœ   rQ  rÓ   ÚNone)rˆ   z3torch._ops.OpOverloadPacket | torch._ops.OpOverloadrª   zCallable[..., tuple[Any, Any]]rÓ   rå	  )r»   zint | torch.dtyperÓ   rR  )r¨   r	   rÓ   z'TypeGuard[TensorBox | sympy.Expr | int])r¨   r	   rÓ   zTypeGuard[TensorBox | bool])r}   r	   rÒ   r   rÈ   rÆ   rÓ   rR  )ri   z9Any | torch._ops.OpOverloadPacket | torch._ops.OpOverloadrá   rQ  rÓ   rÆ   )r¨   rG   r   útorch.devicerÓ   rG   )r}   ú	list[Any]r   zdict[str, Any]r	  rÆ   rÒ   ú&ELEMENTWISE_TYPE_PROMOTION_KIND | Noner
  rÆ   rÓ   z tuple[list[Any], dict[str, Any]])rÚ   rj  r  rã	  rÓ   rã	  )
r  rã	  r	  rÆ   rÒ   rè	  r
  rÆ   r&  r_   )rÒ   rè	  rÓ   z.Callable[[Callable[_P, _T]], Callable[_P, _T]]rt  )rP  zSequence[_T]rQ  útorch.dtype | NonerÒ   rè	  rÓ   z&Sequence[_T | BaseView | BaseConstant])rl   ztorch.fx.Node | NonerÓ   rÆ   )NNNFFN)rˆ   rã	  rQ  ré	  r“  ztorch.device | Nonerˆ  rä	  r’  rÆ   r•  rÆ   r”  zCallable[..., _T] | NonerÓ   zCallable[..., TensorBox | _T])Fr`  )r�  úCallable[..., foreach_node_t]r’  rÆ   rž  rQ  rÓ   z#Callable[..., list[foreach_node_t]])
r¨  z0Mapping[tuple[Any, bool], list[tuple[int, Any]]]rµ  r¸   r   rê	  r¤  rÆ   rÓ   r©  )FT)r¨   rG   r»   rR  rÁ  rÆ   r~  rÆ   )r¨   rG   r»   rR  )r¨   rG   r   ræ	  )F)r¨   rG   rú  rG   rŸ   )r¨   rG   r(  úSequence[sympy.Expr]rÓ   rG   r  )r¦  rG   ré  rG   rë  rG   rå  r¸   rè  r¸   rç  r¸   r»   rR  rÓ   rG   )r¦  rG   ré  rG   rë  rG   rå  r¸   rè  r¸   rç  r¸   r»   rR  r  ré	  rÓ   rG   )r¦  rG   rß  r;  rà  r¸   rè  r¸   rç  r¸   r»   rR  rÓ   rG   )r¦  rG   rß  r;  rà  r¸   rè  r¸   rç  r¸   r»   rR  r  ré	  rÓ   rG   )r¦  rG   rß  rG   rà  rG   rè  r¸   rç  r¸   r»   rR  rÓ   rG   )r¦  rG   rß  rG   rà  rG   rè  r¸   rç  r¸   r»   rR  r  ré	  rÓ   rG   )rP  zlist[TensorBox]rÐ   r¸   rÓ   ú
str | None)r   r   r3   )rœ  r¸   rz  r¸   r{  r¸   r”  )T)r€   ztorch.Tensor)rl   ztorch.fx.Node)NTFN)r   ræ	  )
rì   ú	list[int]r  rG   rQ  rQ  rœ  r¸   rE  rR  )
rZ  r¸   rY  r¸   rì   rí	  r  rG   rœ  r¸   )r^  rG   rÓ   z.tuple[str, sympy.Expr, sympy.Expr, sympy.Expr])r^  rG   rÓ   rG   )r^  rG   rÓ   ztuple[str, sympy.Expr])r^  rG   r@  rë	  rk  rR  rÓ   r	   )r{  rG   r�  rG   rp  rÆ   rq  rÆ   rr  rì	  rs  úTensorBox | NonerÓ   rG   )r¦  rG   r†  rG   rp  rÆ   rq  rÆ   )r3   )rÐ   r¸   r@  r¸   )r   NNr3   )NNN)rz  FF)rÐ   r¸   )ræ  rj  rÐ   r¸   r'  rì	  rÀ  rÆ   )rÐ   r¸   r'  rì	  )rÐ   r¸   rÀ  rÆ   )r1   F)ré  ztuple[float | None, ...]rú  r¸   rã  rÆ   )ré  úfloat | None)rø  rï	  rù  rï	  )rÿ  rï	  rø  rï	  rù  rï	  )r¨   rG   r  zSequence[int]r  r;  rÓ   rî	  )r|   ú
sympy.ExprrZ  zsympy.Expr | int)r|   rð	  rY  rð	  )r|   rð	  rY  rð	  rZ  rð	  )Nr  N)
rj  rG   rI  úSequence[int | torch.SymInt]rw  rñ	  rv  zlCallable[[Sequence[int | torch.SymInt], Sequence[int | torch.SymInt]], torch._inductor.virtualized.OpsValue]rÓ   rG   )Nr   r3   F)rÄ  )NNNN)rü   r   FTN)rÑ  r\   rÓ   zCallable[..., TensorBox])rÑ  r\   rÓ   z"Callable[..., Sequence[TensorBox]]rÞ   )r¨   rg  rÓ   zir.Constant | None)r!  ztuple[int, ...]rÓ   rÆ   )rz  F)rz  TT)ri   ztorch._ops.OpOverloadPacket)rÓ   z-list[ir.TensorBox | ir.ShapeAsConstantBuffer])rM	  úir.SubgraphrN	  rQ  )rÇ  ztorch.fx.GraphModuler}   rç	  )rM	  rò	  )rD  rò	  rH	  ztuple[Any, ...]ri  (b  Ú
__future__r   r@  r3  r  r  Úloggingr1  rP  ré  r—  rÆ  Úcollectionsr   Úcollections.abcr   r   r   r   Útypingr	   r
   r   r   r   Útyping_extensionsr   Úunittest.mockr   rÀ   r„   Ú$torch.ao.quantization.fx._decomposedÚtorch.fxÚtorch.utils._pytreer‹  Ú_pytreerk  Útorch._dynamo.utilsr   Ú*torch._functorch._aot_autograd.descriptorsr   r   Ú(torch._higher_order_ops.associative_scanr   r3	  r   Ú"torch._library.fake_class_registryr   Útorch._library.opaque_objectr   Útorch._library.utilsr   Útorch._prims_commonr   r   r   r   r   r   r   r   r    r!   r"   Útorch.fx.experimental.sym_noder#   r$   rv  r%   r&   r'   r(   Útorch.utils._ordered_setr)   Útorch.utils._sympy.functionsr*   r+   r,   r-   r.   r/   r0   Ú_dynamo.utilsr2   Ú r4   r5   r6   r7   Údecompositionr8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   r+  rY   rZ   r[   r&  r\   r]   r^   ÚFALLBACK_ALLOW_LISTÚ	getLoggerrõ  rñ  r`   Ú__annotations__ra   rb   r…   r†   r  rä  Útr_c10dr×  r£   Ú_higher_order_opsrÏ  rk   r¢  rc   Úquantized_decomposedrm  ro   r�   rŠ   r‡   r�   r¢   r¬   rŸ  r¾  rë  r`  ÚbmmÚconvolutionÚconvolution_backwardr„  rˆ  r´  r
  rú  rü  Ú_int_mmr0  r/  rˆ  r  rÅ  rN  r  r  Ú	complex32Ú	complex64rÆ   rM  r¹   r¼   rÄ   rÇ   rØ   rÜ   râ   rî   r  r  r'  rK  r*  r8  rT  rf  rr  r—  r˜  rª  r£  rø   rØ  rÛ  rê  rå  r»   rí  rñ  Ú
device_putró  rö  r5  r÷  r  r  r  r  r  ÚaliasÚdetachÚdetach_ÚliftÚview_ofr*  rñ   r+  r6  r8  r<  r>  rD  rF  rI  rL  rÙ  rN  r3  r\  r^  rm  Ú_unsafe_viewÚreshaperp  r…  Úslicer˜  r¨  r¼  rÓ  Úquantize_per_channelrí  rô  rœ   r÷  Ú_functional_assert_asyncrú  Údequantize_per_channelr  Úquantize_per_tensorr  Údequantize_per_tensorr	  rF  r  r  r,  rL  rŠ  rŒ  r�  r˜  rŸ  r¡  r£  r®  rX  r²  r“  r¸  rÖ  ÚcacherÈ  rÏ  rÔ  rá  r÷  rú  Úrngprimsr
  r  r  Ú	bernoullir  r  r  Ú	lru_cacher  r  rý  r%  r"  r$  r*  r)  r(  ÚrandintÚ	rand_likeÚ
randn_likeÚrandint_likeÚrrelu_with_noise_functionalr^	  Úrecord_eventÚ
wait_eventÚsynchronize_eventÚsynchronize_deviceÚforce_stride_orderr0  r  r3  r:  r6  Úlookup_seedr;  rD  ÚrandomrT  Úrand_eager_offsetÚrand_eager_offsetsr[  r_  rc  re  rn  r€  r  rz  Ú	NO_OPMATHrŠ  r�  r‘  r‘   rk  r—  r�   r“   r­  rÍ  Ú_adaptive_avg_pool3dÚadaptive_max_pool3dÚ*_scaled_dot_product_attention_math_for_mpsÚuniformÚexponentialÚ_pdist_forwardÚsoft_margin_loss_backwardÚ_fused_rms_normrÈ  Ú_is_compiledÚembedding_dense_backwardrë  Únative_layer_normÚ_cdist_forwardÚ_cdist_backwardÚ
_trilinearÚsegment_reduceÚ_segment_reduce_backwardÚhistcÚ	histogramÚbin_ctÚ_histogramdd_bin_edgesÚ_histogramdd_from_bin_ctsÚaddbmmÚ_addmm_activationÚ_grouped_mmÚ
_cudnn_rnnÚ_cudnn_rnn_backwardÚ
miopen_rnnÚmiopen_rnn_backwardÚ_embedding_bagÚ_embedding_bag_forward_onlyÚ_embedding_bag_backwardÚ*_embedding_bag_per_sample_weights_backwardÚ_fused_moving_avg_obs_fq_helperÚ*_fused_moving_avg_obs_fq_helper_functionalÚ max_pool3d_with_indices_backwardÚ_adaptive_avg_pool2d_backwardÚ_adaptive_avg_pool3d_backwardÚadaptive_max_pool2d_backwardÚadaptive_max_pool3d_backwardÚfractional_max_pool2d_backwardÚfractional_max_pool3d_backwardÚreplication_pad1d_backwardÚreplication_pad2d_backwardÚupsample_linear1d_backwardÚupsample_bicubic2d_backwardÚupsample_trilinear3d_backwardÚgrid_sampler_2d_backwardÚ_pdist_backwardÚ	nanmedianÚmultinomialr™  Úresize_Ú
resize_as_Ú_linalg_detÚlinalg_householder_productÚlinalg_inv_exÚlinalg_ldl_factor_exÚlinalg_ldl_solveÚ	linalg_luÚlinalg_lu_factor_exÚlinalg_lu_solveÚlinalg_matrix_expÚ	linalg_qrÚ_linalg_slogdetÚ_linalg_solve_exÚlinalg_solve_triangularÚ_linalg_svdÚ	lu_unpackÚormqrÚ_linalg_check_errorsÚlinalg_pinvÚatol_rtol_tensorÚ_linalg_eighÚtriangular_solveÚlinalg_cholesky_exÚcholesky_inverseÚcholesky_solveÚgeqrfÚ_fft_r2cÚnonzeroÚbincountÚ_unique2Ú
unique_dimÚunique_consecutiveÚunique_dim_consecutiveÚgcdÚ_thnn_fused_lstm_cellÚ_primsÚ	rng_primsÚrun_and_save_rng_stateÚrun_with_rng_stateÚgraphsafe_run_with_rng_stateÚrun_dtensor_rng_opÚ_amp_update_scale_Ú_amp_update_scaleÚmasked_scatterÚmasked_scatter_backwardrÝ  ÚangleÚ_efficientzerotensorÚ(_sparse_coo_tensor_with_dims_and_tensorsÚ	to_sparseÚ
_to_sparserÃ  r²  Ú#_scaled_dot_product_flash_attentionÚ	quantizedÚ,_scaled_dot_product_flash_attention_backwardÚ#_scaled_dot_product_cudnn_attentionÚ,_scaled_dot_product_cudnn_attention_backwardÚ+_scaled_dot_product_flash_attention_for_cpuÚ4_scaled_dot_product_flash_attention_for_cpu_backwardÚ0_scaled_dot_product_fused_attention_overrideableÚ9_scaled_dot_product_fused_attention_overrideable_backwardÚ_flash_attention_forwardÚ_flash_attention_backwardÚ_efficient_attention_forwardÚ_efficient_attention_backwardÚindex_reduceÚrepeat_interleaveÚ_weight_norm_interface_backwardrÁ  rÀ  rÑ  rÙ  rÞ  rá  ÚarangeÚ
start_steprä  ré  rñ  ró  Úscalar_tensorr  Ú
LongTensorr  r  r  r  r  r@  r  ri  r  r   rÔ  rí  Ú
zeros_liker-  r1  r$  r7  r;  r=  rG  rP  r\  rn  rq  rp  r@  rz  r‚  r„  r†  r‘  rŒ  r–  r  r°  Úfallback__unsafe_masked_indexr´  Ú,fallback__unsafe_masked_index_put_accumulater�  r¼  r§  rÄ  r¾  rÎ  rÌ  rÒ  rÉ  rí  rò  rõ  r   r  rÚ  r  r  r'  rM  r-  r.  r;  r@  rM  rS  rY  rk  ro  rz  r}  r  r¬  rÂ  rÊ  rØ  rÞ  rò  rì  r  r   r  r  r  r  r+  r3  Ú
avg_pool1dr?  r.  r[  r’  r�  r•  r¯  r´  r¸  r¼  rÔ  rÎ  rÚ  rè  rí  rŸ  rò  rô  rö  rù  rþ  ÚTensor_Tensorr  ÚScalarr   ÚTensor_Scalarr  rŽ  r  rº  r  r  r  rÂ  r  rŒ  r#  rB  Útrue_divider:  ri  rÁ  rK  rI  rO  rN  rX  rW  rc  ra  rh  rg  rÈ  rn  r$  rr  r¸  ry  r·  r€  r�  rÕ  rx  rÖ  r  rf  rw  r˜  r~  rv  r}  ru  r|  r¤   r�  r„  r‰  r�  r½  r»  rÀ  r¿  Úmedianr‘  rÐ   r—  rQ  r­  r”  r™  r¹  rÃ  rÅ  ÚrsqrtrS  rÿ  Úexpm1Úrelur¶  rþ  rÈ  rÿ  rÕ  rÙ  Ú_foreach_addcmulÚ_foreach_addcmul_scalarÚ_foreach_addcdivÚ_foreach_addcdiv_scalarÚcosÚsinÚabsÚbitwise_andÚbitwise_left_shiftÚbitwise_notÚ
bitwise_orÚbitwise_right_shiftÚbitwise_xorÚlgammaÚerfÚspecial_erfrR  ÚtanÚtanhr  rÚ  r‚  Úlogical_xorrÜ  rÝ  Ú	clamp_minÚ	clamp_maxÚnegrÛ  Ú	remainderÚsignrÝ  Ú	_neg_viewÚlerÇ  rÆ  rÛ  rç  r   ÚcoshÚsinhÚacosÚacoshÚasinÚasinhÚatan2ÚatanÚatanhr2  ÚerfcÚerfinvÚhypotÚlog10Úlog2Ú	nextafterÚcodegen.commonr°  rá  rç  rà   ri   rÒ   r”  Ú_foreach_addÚListÚforeach_add_listÚforeach_add_scalarÚ_foreach_mulÚforeach_mul_listÚforeach_mul_scalarÚ_foreach_subÚ_foreach_negÚ_foreach_absÚ_foreach_powÚScalarAndTensorÚ_foreach_divÚforeach_div_listÚforeach_div_scalarÚ_foreach_sqrtÚ_foreach_rsqrtÚ_foreach_maximumÚ_foreach_minimumÚ_foreach_clamp_minÚ_foreach_clamp_maxÚ_foreach_reciprocalÚ_foreach_signÚ_foreach_cloneÚ_foreach_copyÚforeach_copyrï  Ú_foreach_add_Ú_foreach_mul_Ú_foreach_div_Ú_foreach_copy_Ú_foreach_addcmul_Ú_foreach_addcdiv_rò  Úadd_Úbitwise_and_Úbitwise_left_shift_Úbitwise_not_Úbitwise_or_Úbitwise_right_shift_Úbitwise_xor_Úmul_Údiv_ÚTensor_modeÚlogical_and_Úlogical_not_Úlogical_or_Úlogical_xor_Úsub_Úrelu_Úsigmoid_Ú__and__Ú
__lshift__Ú__or__Ú
__rshift__Ú__xor__Ú__iand__Ú__ilshift__Ú__ior__Ú__irshift__Ú__ixor__rô  r€  r¸   rû  rþ  r 	  r  ÚmethodÚfuncr  r	  r		  Ú_inductor_testr²  r	  r  r	  Úset_Úsource_Tensorr	  Úfsdpr	  r+	  Ú*torch._higher_order_ops.auto_functionalizer,	  r8	  r­	  r›   rJ	  Úwhile_loop_stack_outputr)  rO	  r)  rQ	  rY	  Ú.torch._inductor.fx_passes.control_dependenciesrZ	  r}	  Úinvoke_quantr„	  r—	  rš	  rœ	  rÃ	  Úcomm_loweringrÄ	  rÅ	  rÍ	  Úcvt_e8m0_rceilrÔ	  rÓ	  rÜ	  rÂ  rÝ	  Úregister_quantized_opsÚregister_woq_mm_opsrÞ	  rß	  Úregister_jagged_opsÚcontextmanagerrâ	  rü   rp   rn   ú<module>r2     s¤?  ðÞ "ã Û Û Û Û Û Û Û 	Û 
Û Ý #ß AÓ Aß ?Õ ?Ý 'Ý ã ã Û +Û ß $Ð $Ý (÷õ IÝ UÝ ?Ý 8Ý :÷÷ ÷ ñ ÷ M÷ó õ 0÷÷ ñ õ -ß 8Ó 8ß =÷÷ ÷ ÷ ó ÷$÷ ÷ ÷ ñ ÷"  ñ Ý Ý*ñ ˆTƒ]€Ùˆtƒ_€ñ !à ØðóÐ ð €g×Ò˜Ó!€Ø@B€	Ð=Ó BàBD€Ð?Ó DàTVÐ ÐQÓ VØ-ˆJ�u—z’z×,Ò,Ñ-Ó/€	Ø‡y�y‡~‚~€Ø
�)‰)×
Ò
€Ø�	‰	�Š€Ø9˜
 5§:¢:×#8Ò#8Ñ9Ó;Ð Ø/ˆj˜Ÿš×.Ò.Ñ/Ø
×Ò×)Ò)Ð*ó€ð
 8�j §¢×!6Ò!6Ñ7Ó9Ð ØNPÐ ÐKÓ PØ—y‘y×5Ò5Ð àØ'ð*Ð &ôðØðà9ôô0ðBØ	ðBà*ôBôFò
8ð3Ø;ð3à.ð3ð 
ô3ñ à�ŠØ×ÒØ�ŠØ× Ò Ø�ŠØ×ÒØ×!Ò!Ø×$Ò$Ø×$Ò$Ø×-Ò-Ø�ŠØ×ÒØ×&Ò&Ø�Šðôð, ‡{‚{Ø‡z‚zØ‡{‚{Ø‡{‚{Ø‡{‚{Ø‡}‚}Ø‡}‚}Ø‡}‚}Ø‡‚Ø‡‚Ø�ŠØ�
Š
Ø�Šñ€ô.ô"ô#ð "'ñCØðCà8ðCð ðCð ô	Cò(ðØAðØNQðà	ôôð(OØ
ðOàðOð ðOð @ð	Oð
  ðOð &ôOðdØ"ðØ/Aðàôð42à!ð2ð ð2ð @ð	2ð
  ð2ð Fô2ðn à,×4Ò4ØØðððð 4ôò*#ð8 15ØBFñCØðCà-ðCð @ðCð ,ô	CòLô6ðB 15Ø+/Ø=AØØ#Ø04ñrØðrà-ðrð )ðrð ";ð	rð
 ðrð ðrð .ðrð #ôrñj Ð)°Ô8€ð
 Øñ9Ø(ð9àð9ð ð9ð )ô	9ðx#/Ø<ð#/àð#/ð ,ð#/ð ð	#/ð
 ô#/ðN UYñEØðEØ$ðEØ,0ðEØMQôEñ2 �5×*Ò*×7Ò7ÈTÔRñ)ó Sð)ñX �5×-Ò-À4ÔHóNó IðNð* @Eö 5ñ0 �4—9’9—?’?¸Ô=ó&ó >ð&ð ;@Èeö Kñ �5×#Ò#¸Ô>õFó ?ðFð 
ØØ7×?Ò?ØØØ $ØØØó,ñ^ $ØØ7×DÒDØõñ �4—:’:¨À4ÔHóó Iðò>ñ> Ô ð Øô	
ñ �4—:’:¨ÀDÔIñó Jðñ0 �4×)Ò)°UÐPTÔUñó Vðñ. �D—J’J §¢¨T¯\ª\¸4¿9º9ÀeÇmÂmÐTÓUñó Vðñ ˆ4�ÔØ&Ñ�d—o’oÓ& sÔ+ñ �4—<’<°TÔ:óBó ;ðBñ, �4×$Ò$¸$Ô?ó"ó @ð"ñ �D—M’M�?Ó#óó $ðñ �4—:’:ÓñCó ðCñ �4—:’:ÓñCó ðCñ �4—9’9Óñ!ó ð!ñ �4—:’:Óñ!ó ð!ñ �4—:’:×%Ò%Ó&ñ%ó 'ð%ñ �4—:’:Óñ!ó ð!ñ �4—;’;°DÔ9ñ>ó :ð>ñ> �5×)Ò)¸tÔDñ
ó Eð
ñ �4—>’>°tÔ<ñ#ó =ð#ñ �4—;’;Óñ4ó  ð4ñn �4×$Ò$¸$Ô?Ù�4—9’9°$Ô7Ù�4—<’<°TÔ:ó1ó ;ó 8ó @ð1ñ �4—<’<°TÔ:ñ>ó ;ð>ò&!ñR �4—:’:°4Ô8Ø˜1 #§+¢+°A¸Tò ~ó 9ð~ñB �4—?’?¸Ô=ð
 ñ	0Jð .2ó0Jó >ð0Jñf �4×#Ò#¸Ô>óó ?ðñ �4×'Ò'¸TÔBóó Cðô
BñJ Ð'×<Ò<ÐRVÔWð/Øð/àð/ð ð/ð ð	/ð
 ð/ð ð/ð ð/ð ó/ó Xñ/ódñ$ �4×%Ò%×)Ò)Ó*ñ$ó +ñ$ñ �4×0Ò0×4Ò4Ó5ñ$ó 6ñ$ñ Ø×/Ò/ÀTôð %)ñ/Øð/àð/ð ð/ð ð	/ð
 ð/ð ð/ð ð/ð "ð/ð ó/óñ/ñd Ø×,Ò,×4Ò4È$ôð!Øð!àð!ð ð!ð ð	!ð
 ð!ð ð!ð ó!óñ!ñH Ø×.Ò.×6Ò6ÈDôð %)ñ!Øð!àð!ð ð!ð ð	!ð
 ð!ð ð!ð "ð!ð ó!óñ!ñH Ø×,Ò,×3Ò3Èôð/Øð/àð/ð ð/ð ð	/ð
 ð/ð ð/ð ó/óñ/ñd Ø×.Ò.×5Ò5È4ôð %)ñ,Øð,àð,ð ð,ð ð	,ð
 ð,ð ð,ð "ð,ð ó,óñ,õ^Lñ^ �4—8’8Óóv:ó ñv:ñr �4—=’=°dÔ;õ5Eó <ñ5Eñp �4×%Ò%¸4Ô@õ6ó Añ6ñ �4×(Ò(¸dÔCõó Dññ �4—;’;°DÔ9ñIó :ñIñX �4—:’:°4Ô8ó&ó 9ñ&ñR �4×(Ò(¸dÔCó ó Dñ ñ �4—;’;°DÔ9óó :ññ �4—;’;°DÔ9ñDó :ñDñ8 �4—>’>°tÔ<ñó =ññ �4—?’?¸Ô=ñó >ñõñ �4—8’8Óóó ñõð$ ‡‚ñó ñ÷#÷L
3÷%6ðT Ø	ØØõ5Nóp	,ñ �5—9‘9×%Ò%×1Ò1ÀtÔLñ#+ó Mñ#+ñL �4×&Ò&¸DÔAñGó BñGñ �4—?’?¸Ô=ñó >ññ �4—>’>×#Ò#¸Ô>ñ'ó ?ñ'ñ �4—<’<Ó ñó !ñð €×Ò�QÓñBó ñBó/ò
 )¨¯ª×):Ò):Ó;Ñ Ú*¨4¯9ª9×+>Ò+>Ó?Ñ Ú)¨$¯*ª*×*<Ò*<Ó=Ñ Ú+¨D¯JªJ×,@Ò,@ÓAÑ Ú ˆd�lŠlÔ Ú ˆd�nŠn¨dÕ 3Ú ˆd�oŠo¨tÕ 4Ú ˆd×Ò°Õ 6Ú ˆd×.Ò.Ô /ò ˆe�i‰i×Ò×,Ò,×4Ò4Ô 5Ú ˆe�i‰i×Ò×*Ò*×2Ò2Ô 3Ú ˆe�i‰i×Ò×1Ò1×9Ò9Ô :Ú ˆe�i‰i×Ò×2Ò2×:Ò:Ô ;ñ �4—9’9ÓñJó ñJñ �4—:’:ÓñJó ñJñ �>×4Ò4È$ÔOñLó PñLñ
 �>×&Ò&¸DÔAóKó BñKñ �>×'Ò'¸TÔBñJó CñJñ
 �>×-Ò-À4ÔHñ	ó Iñ	õñ( �>×(Ò(¸dÔCð Ø$Ÿ}š}ñ5Ø
ð5à
ð5ð ð5ð
 ð5ð ó5ó Dñ5òp ˆn×.Ò.Ô /Ú ˆn×/Ò/Ô 0ñ �>×)Ò)¸tÔDàLMñØ	ðØðØ(ðØ09ðØFIóó Eñõ8õ8õ.ð	8Øð	8Ø.ð	8Ø=Hð	8àõ	8ñ �4×$Ò$×+Ò+ÀÔFð
 ØØØ#ñZØðZà
ðZð ð	Zð
 ðZð ðZð ðZð óZó GñZñz Ø‡N‚N×ÒÐ/N×/XÒ/Xôð Øñ5Øð5àð5ð ð	5ð
 ó5óñ5ópóóóóóó óóD=ñ Ø×Ò×ÒÑ!Kôó
dòP ˆd×'Ò'Ô (Ú ˆd×&Ò&¸Õ =Ú ˆd×=Ò=Ô >ò ˆd�lŠl Õ 'Ú ˆd×Ò×&Ò&¨UÕ 3Ú ˆd×!Ò!Ñ#5Ô 6Ú ˆd×,Ò,°5Õ 9Ú ˆd×"Ò"¨Õ /Ø‡9‚9×ÒÔÚØ×%Ò%¨Eõð 	‡:‚:×ÒÔÚØ×Ò Uõò
 ˆd×!Ò!Ô "Ú ˆd×"Ò"Ô #ò ˆd�oŠoÔ ò ˆd×!Ò!×)Ò)Ô *Ú ˆd×+Ò+×3Ò3Ô 4ò ˆd�jŠjÔ Ú ˆd�nŠn×#Ò#Ô $Ú ˆd×)Ò)×1Ò1Ô 2Ú ˆd×,Ò,×4Ò4Ô 5ò ˆd�kŠkÔ Ú ˆd×$Ò$¨5Õ 1â ˆd×Ò¡Ô .ò ˆd�oŠo™}Ô -Ú ˆd×&Ò&Ñ(:Ô ;Ú ˆd�oŠo™}Ô -Ú ˆd×&Ò&Ñ(:Ô ;ò ˆd×!Ò!Ñ#5Ô 6Ú ˆd×.Ò.Ñ0BÔ CÚ ˆd×*Ò*Ô +Ú ˆd×=Ò=Ô >Ú ˆd×=Ò=Ô >Ú ˆd×2Ò2Ô 3Ú ˆd×=Ò=Ô >ò ˆd×3Ò3Ô 4Ú ˆd×0Ò0±-Ô @Ú ˆd×0Ò0Ô 1Ú ˆd×/Ò/Ô 0Ú ˆd×/Ò/Ô 0Ú ˆd×1Ò1Ô 2Ú ˆd×1Ò1Ô 2Ú ˆd×-Ò-Ô .Ú ˆd×-Ò-Ô .Ú ˆd×-Ò-Ô .Ú ˆd×.Ò.Ñ0BÔ CÚ ˆd×0Ò0Ô 1Ú ˆd×+Ò+Ô ,Ú ˆd×"Ò"Ñ$6Ô 7ò ˆd�nŠnÔ Ú ˆd×Ò×&Ò&¨UÕ 3Ú ˆd�mŠmÔ â ˆd�lŠlÔ Ú ˆd�oŠoÔ ò ˆd×ÒÔ Ú ˆd×-Ò-Ô .Ú ˆd× Ò Ô !Ú ˆd×'Ò'Ô (Ú ˆd×#Ò#Ô $Ú ˆd�nŠnÔ Ú ˆd×&Ò&Ô 'Ú ˆd×"Ò"Ô #Ú ˆd×$Ò$Ô %Ú ˆd�nŠnÔ Ú ˆd×"Ò"Ô #Ú ˆd×#Ò#Ô $Ú ˆd×*Ò*Ô +Ú ˆd×ÒÔ Ú ˆd�nŠnÔ Ú ˆd�jŠjÔ Ú ˆd×'Ò'Ô (Ú ˆd×Ò×/Ò/Ô 0Ú ˆd×ÒÔ  Ú ˆd×#Ò#Ô $Ú ˆd×%Ò%Ô &Ú ˆd×#Ò#Ô $Ú ˆd×!Ò!Ô "Ú ˆd�jŠjÔ Ú ˆd�mŠmÔ ò ˆd�lŠl×"Ò"Ô #ò ˆd�mŠm×#Ò#¨%Õ 0Ú ˆd�mŠm×#Ò#¨%Õ 0Ú ˆd�oŠo×%Ò%¨EÕ 2Ú ˆd×%Ò%×-Ò-°EÕ :Ú ˆd×)Ò)×1Ò1¸Õ >ò ˆd�hŠh×Ò UÕ +Ú ˆd×(Ò(©-Ô 8Ú ˆe�lŠl×$Ò$×;Ò;Ô <Ú ˆe�lŠl×$Ò$×7Ò7Ô 8Ú ˆe�lŠl×$Ò$×AÒAÔ BÚ ˆe�lŠl×$Ò$×7Ò7Ô 8ò
 ˆd×%Ò%×-Ò-°EÕ :Ú ˆd×$Ò$×,Ò,°5Õ 9ò
 ˆd×!Ò!Ô "Ú ˆd×*Ò*Ô +ò ˆd×"Ò"Ñ$6Ô 7Ú ˆd�jŠjÔ ò ˆd×'Ò'Ô (ò ˆd×;Ò;Ô <Ú ˆd�nŠnÔ Ú ˆd�oŠoÔ ò Ø×0Ò0×8Ò8ÙØ	õò
 Ø×9Ò9×AÒAÙØ	õò
 Ø×,Ò,×4Ò4ÙØ	õò
 Ø×,Ò,×6Ò6Ø	õò Ø×5Ò5×=Ò=ÙØ	õò
 Ø×,Ò,×4Ò4ÙØ	õò
 Ø×5Ò5×=Ò=ÙØ	õò
 Ø×4Ò4×<Ò<ÙØ	õò
 Ø×=Ò=×EÒEÙØ	õò
 Ø×9Ò9×AÒAÙØ	õò
 Ø×BÒB×JÒJÙØ	õò
 ˆd×+Ò+×3Ò3±_Ô EÚ ˆd×+Ò+×5Ò5Ô 6Ú ˆd×,Ò,×4Ò4±oÔ FÚ ˆd×/Ò/×7Ò7¹Ô IÚ ˆd×0Ò0×8Ò8¹/Ô Jò ˆd×ÒÔ  Ú ˆd×$Ò$×+Ò+¸TÕ Bâ ˆd×2Ò2×:Ò:Ñ<NÔ Oñ
 �4—9’9°$Ô7óó 8ññ* �4—:’:ÓØ"ó 	ó ñ	ó3ó
ó*ñ ˆ4Ð"Ô#Ø+Ñ�d×*Ò*Ó+©OÔ<ñ �5—:’:Óñó ññ( �4—;’;×)Ò)¸tÔDð 
ñð
 ØØØØóó Eññ. �4×&Ò&¸DÔAó ó Bñ ñF �4×%Ò%¸4Ô@óAó AñAóHñ �E—L’L $×"4Ò"4°e×6IÒ6IÐJÓKØ t°DÀUó <ó Lñ<ñ~ �5—?’?Ó#ó4ó $ñ4ñ �5×#Ò#Ó$ñ+ó %ñ+ñ �4×+Ò+Ó,ñ)"ó -ñ)"ñX �4×&Ò&Ó'ñó (ññ �4×/Ò/Ó0à%)ñØ59À$óó 1ñóó<Kóñ> �E—K’K §¢Ð,Ó-ð ØØØØóó .ñó ó.>ð 0Ñ˜tŸšÓ/Ò0BÁ5Ó0IÓJ�
ÚÒ1°!Ó4Ó5�	ÚÒ 2°1Ó 5Ó6�
óñ  �4—>’>Ó"Ø $¨T¸$È4ó ó #ññ �4×%Ò%Ó&à¨°TÀdóó 'ññ@ �4×)Ò)Ó*à"¨4¸Èóó +ññ" �5×%Ò%×-Ò-Ó.ñAó /ñAñ �E—J’J §	¢	Ð*Ó+ñ:ó ,ñ:ñ
 �4—;’;°DÔ9ó!ó :ñ!ñH �4—>’>°tÔ<óó =ñóB#ðF õFóRõ"1ñJ �4—:’:°4Ô8ñ
ó 9ñ
ñ �4×%Ò%¸4Ô@ñ/ó Añ/ñ �4—>’>°tÔ<óó =ññ �4×)Ò)Ó*óó +ñó;óñ. �4—?’?¸Ô=óó >ññ �>×4Ò4È$ÔOóó Pñõsòl !1Ø×Ò×%Ò%¸5ô!Ñ ò 0@Ø×,Ò,×4Ò4È%ô0Ñ ,ñ
 �4×,Ò,À$ÔGñó Hññ, �4×;Ò;ÐQUÔVñ	Pó Wñ	Pð ñ1ó ñ1ñ �4×*Ò*ÀÔEóó Fññ �4—<’<°TÔ:ó9ó ;ñ9ð ØñØ&ðð 
ðð ðð õñD �4—=’=°dÔ;ØAEõ :ó <ñ:ñ" �4×#Ò#¸Ô>ó3ó ?ñ3ñ �4×$Ò$¸$Ô?ó6ó @ñ6ñ �4×&Ò&¸DÔAóPó BñPñ �4×'Ò'¸TÔBØPTõ qó Cñqðp Øñ,ð 'ð,ð ð	,ð
 õ,ñ^ �4×*Ò*×2Ò2Ó3õ>ó 4ñ>ñ �4×1Ò1×9Ò9Ó:õJó ;ñJñ �4×*Ò*×2Ò2Ó3àLPñIØ*ðIØ=IóIó 4ðIñ �4×1Ò1×9Ò9Ó:àLPñUØ*ðUØ=IóUó ;ðUñ �4×*Ò*×2Ò2Ó3ð "Ø!Ø!ñSð ðSð ð	Sð
 ôSó 4ñSñ �4×1Ò1×9Ò9Ó:ð "Ø!Ø!ñ	ð ð	ð ð		ð
 ô	ó ;ñ	ô7ñ �5—9’9×$Ò$Ó%òó &ñð*]Øð]Ø(ð]Ø6;ð]àö]ð@2)Øð2)Ø(ð2)Ø6;ð2)àö2)ñj �4×'Ò'¸TÔBô8ó Cñ8övööð :>öð@ MQ÷ ô<ð JN÷@ô:HñV �5×:Ò:ÐPTÔUð ô5ó Vñ5ðDØðà-ðð -ððð	ð öñ> Ø	×1Ò1Àtôòóñô$ñ< �4×/Ò/ÀTÔJð ØØØô
ó Kð
ñ �4×/Ò/ÀTÔJð ØØØô
ó Kð
ò -=Ø×)Ò)×1Ò1Øô-Ñ )ñ �4×8Ò8ÈdÔSòNó TðNöbô8Bô&ôR2òj  0Ø×Ò×%Ò%¸5ô Ñ ñ
 �4×,Ò,Ó-òBó .ñBòJ  0Ø×Ò×$Ò$¸%ô Ñ ñ
 �4×+Ò+Ó,òNó -ñNôb)ñX �4×-Ò-Ó.òVó /ñVñ �4×-Ò-Ó.òVó /ñVôAñH �4×3Ò3×;Ò;Ó<àBFô.ó =ñ.ñb �4—?’?¸Ô=ð ØØØØôó >ðñ* �4—?’?¸Ô=ð ØØØØôó >ñò, �T—_’_×,Ò,À%ÔHÚ�T—_’_×,Ò,À%ÔHÚ�T—_’_×,Ò,À%ÔHðÑ ôA#òH  0Ø×Ò×$Ò$¸%ô Ñ ñ
 �4×+Ò+ÀÔFð ôbó GðbòJ  0Ø×Ò×$Ò$¸%ô Ñ ñ
 �4×+Ò+ÀÔFð ôDó GñDôNð& HL÷Zð| :>ñØ!ðàöð@Ø!ðà'öô&ñ �4—9’9Óñ:¨tõ :ó ñ:ô ô4/;ôd(ôV4ñ2 �D—H’H˜eŸišiÐ(Ó)ñ T°5õ ó *ññ �4—=’=Ó!ñ¨°uõ ó "ñôð òó ñò .Ø‡H‚H×Ò°ôÑ ò ' t§x¢x§¢ÈEÔRÑ Ú-Ø‡H‚H×Ò°ôÑ ñ
 �4—8’8 tÕ,ò-ó -ñ-ö`"ñJ �4—:’:Óò2ó ñ2ñ �4—:’:°4Ô8ôó 9ñð òó ñð òó ñð òó ññ �4—8’8 tÕ,ôó -ññ& �D—H’H�:¨Õ.ò(ó /ñ(öñ@ �E—I’I�;¨$Õ/ò$ó 0ñ$ñ. Ø	×Ò�t—x’x—’Ð'ØØ7×DÒDôò
óñ
ñ �D—I’I˜uŸzšzÐ*°dÕ;ò$ó <ñ$ñ  �D—H’H˜eŸišiÐ(Ó)ñ.°õ .ó *ñ.ò # 4§;¢;×#6Ò#6Ó7�Ú# D§L¢L×$8Ò$8Ó9Ñ Ú(¨×):Ò):×)BÒ)BÓCÑ Ú" 4§;¢;×#6Ò#6Ó7�Ú" 4§;¢;×#6Ò#6Ó7�ñ �4—;’;Óôó  ññ. �4—<’<Ó ôó !ññ. �4×$Ò$Ó%òó &ññ* �4—;’;°DÔ9ôó :ññ, �4—;’;°DÔ9ôó :ññ, �4—9’9Óñ.°õ .ó ñ.ö;ñ* �4—8’8Óô@ó ñ@ñ
 �4—8’8°Ô6ô7ó 7ñ7ñ" �4—8’8°Ô6ô7ó 7ñ7ð" !Ñ �%—-’-Ó  ¢±	Ó!:Ô ;Ø*Ñ §	¢	Ó*ª>¹%Ó+@ÓA�Ø*Ñ §	¢	Ó*ª>¹%Ó+@ÓA�Ø.Ñ! $§+¢+Ó.Ú‘8°5·;²;Õ?ó�ð /Ñ! $§+¢+Ó.Ú‘8°5·;²;Õ?ó�ò %¡^Ó4Ñ Ú$¡^Ó4Ñ Ú8Ñ9LÓMÑ Ú8Ñ9LÓMÑ áØ‡H‚HØØÙ ,õ	�ò ! §¢×!1Ò!1ÀuÔM�ñ �4—9’9×#Ò#¸Ô>Ø! r°eõ -2ó ?ñ-2ñ` �4—9’9×$Ò$¸$Ô?ôHó @ñHò ! §¢×!2Ò!2ÈÔN�Ú$ T§]¢]×%:Ò%:ÐPUÔVÑ Ú" 4§;¢;×#6Ò#6ÈEÔR�Ú& t§{¢{§¢ÈEÔRÑ Ú  §¢×!2Ò!2ÈÔN�ñ �4—;’;×&Ò&¸DÔAò%ó Bñ%ñ �4—;’;—?’?¸Ô=ôó >ññ& �4—9’9×$Ò$¸$Ô?ôj ó @ñj ñZ �4—9’9×$Ò$¸$Ô?ôó @ññ  �4—=’=×(Ò(¸dÔCôó Dñö$öò 	# 4§:¢:Ó.�Ú& t§x¢xÓ0�Ú! $§)¢)Ó,�Ú" 4§:¢:Ó.�Ù˜$Ÿ)š)Ó$�Ú
*¨4¯<ª<Ó
8�Ú'¨¯	ª	Ó2�Ù	˜DŸKšKÓ	(�Ù˜Ÿš¨tÕ4�ñ �4—<’<¨4Õ0Ø-.õ Eó 1ñEñP �4—<’<¨4Õ0Ø-.õ Fó 1ñFñR 5Ø×Ò× Ò ¡'°tÉ'õÑ ñ 5Ø×Ò× Ò ¡'°tÉ'õÑ ò
 ! §¢Ô *Ú   §¢Ô *Ù˜ŸšÓ"�Ù  ×!1Ò!1Ó2�Ù'¨×(?Ò(?Ó@Ñ Ù Ø×Ò±-õ�ñ   §¢Ó0�
Ù(¨×)AÒ)AÓBÑ Ù  ×!1Ò!1Ó2�Ú ˜4Ÿ;š;Ô 'Ú  §¢Ó*�ðÑ Ø×ÒÐ*I×*VÒ*Vôáôò ˜4Ÿ:š:Ô &Ú ˜4Ÿ8š8Ô $Ú ˜4Ÿ9š9Ô %Ú   §¢Ô *Ù Ø×ÒØØØŸ*š*õ	�ñ !Ø×ÒØØØŸ*š*õ	�ñ  Ø‡O‚OØØØŸ*š*õ	�
ñ !Ø×ÒØØØŸ*š*õ	�ñ ˜TŸ\š\Ó
*�Ù
˜TŸ\š\Ó
*�Ø !Ñ �$—.’.Ó !¡'Ô *Ø !Ñ �$—.’.Ó !¡'Ô *Ù˜ŸšÓ"�Ù˜ŸšÓ"�Ú'¨¯ªÓ8�
Ù �4—>’>Ô "Ù˜$Ÿ)š)ÁÕL�Ù �4—9’9Ô ñ �4—<’<Ó ò
Có !ñ
Cð "Ñ �$—.’.Ó !¡#Ô &á �4—7’7°%·*²*Ö =Ù �4—7’7°%·*²*Ö =Ù �4—7’7°%·*²*Ö =Ù˜Ÿš°u·z²zÕB�Ù �4—7’7°%·*²*Ö =Ù �4—7’7°%·*²*Ö =â ˜4Ÿ9š9Ô %Ú ˜4Ÿ9š9Ô %Ú ˜4Ÿ9š9Ô %Ú ˜4Ÿ:š:Ô &Ú ˜4Ÿ9š9Ô %Ú ˜4Ÿ:š:Ô &Ú ˜4Ÿ:š:Ô &Ú ˜4Ÿ9š9Ô %Ú ˜4Ÿ:š:Ô &Ú ˜4Ÿ=š=Ô )Ú ˜4Ÿ9š9Ô %Ú ˜4Ÿ;š;Ô 'Ú ˜4Ÿ:š:Ô &Ú ˜4Ÿ:š:Ô &Ú ˜4Ÿ9š9Ô %Ú ˜4Ÿ>š>Ô *ç DÕ DôEñ" %ò 
�DÚ4LØ‰dó5ò 
Ñ0‰Ñ¡ñ 	ÙÙÙ 3Ù+÷		
ð
ò 5MØ‰tó5ò 
Ñ0‰Ñ¡ñ 	ÙÙÙ 3Ù+÷		
ñ
ð
ñ, .Ø×Ò×Ò™C¨TõÑ ñ 0Ø×Ò×Ò™c¨tõÑ ñ ˜4×,Ò,×3Ò3±SÀdÖ KÙ-¨d×.?Ò.?×.DÒ.DÁcÓJÑ Ù ˜4×,Ò,×3Ò3±SÔ 9Ù/°×0AÒ0A×0HÒ0HÉ#ÓNÑ Ù ˜4×,Ò,×1Ò1±3ÀDÖ IÙ ˜4×,Ò,×3Ò3±SÀdÖ KÙ ˜4×,Ò,×4Ò4±cÔ :Ù ˜4×,Ò,×4Ò4±cÔ :Ù ˜4×,Ò,×3Ò3±SÔ 9Ù ˜4×,Ò,×1Ò1±3Ô 7Ù ˜4×,Ò,×<Ò<¹cÔ BÙ-¨d×.?Ò.?×.DÒ.DÁcÓJÑ Ù ˜4×,Ò,×3Ò3±SÔ 9Ù/°×0AÒ0A×0HÒ0HÉ#ÓNÑ Ù ˜4×-Ò-©tÔ 4Ù ˜4×.Ò.±Ô 6Ù ˜4×0Ò0×5Ò5±wÔ ?Ù ˜4×0Ò0×7Ò7¹Ô AÙ ˜4×0Ò0×5Ò5±wÔ ?Ù ˜4×0Ò0×7Ò7¹Ô AÙ ˜4×2Ò2×7Ò7¹Ô AÙ ˜4×2Ò2×9Ò9¹7Ô CÙ ˜4×2Ò2×7Ò7¹Ô AÙ ˜4×2Ò2×9Ò9¹7Ô CÙ ˜4×3Ò3±ZÔ @Ù ˜4×-Ò-©tÔ 4Ù ˜4×.Ò.±Ô 6Ù)¨$×*<Ò*<¹dÓC�ô,ò Ø×Ò×Ò˜T×.Ò.×3Ò3Ñ5Eôò Ø×Ò×Ò˜t×0Ò0×7Ò7Ñ9Kôò Ø×Ò×Ò˜T×.Ò.×3Ò3Ñ5Eôò Ø×Ò×Ò˜t×0Ò0×7Ò7Ñ9Kôò Ø×Ò×Ò˜T×.Ò.×3Ò3Ñ5Eôò Ø×Ò×Ò˜t×0Ò0×7Ò7Ñ9Kôò Ø×Ò×Ò ×!3Ò!3×!;Ò!;¹\ôò Ø×Ò×!Ò!Ø×Ò× Ò Ùôò
 Ø×Ò×!Ò!Ø×Ò× Ò Ùôôò �—’™CÔ  Ú �×"Ò"¡KÔ 0Ú �×)Ò)Ñ+=Ô >Ú �×"Ò"¡KÔ 0Ú �×!Ò!¡:Ô .Ú �×*Ò*Ñ,?Ô @Ú �×"Ò"¡KÔ 0Ú �—’™CÔ  Ú �—’×!Ò!¡3Ô 'Ú �—’×&Ò&©Ô 1Ú �×"Ò"¡KÔ 0Ú �×"Ò"¡KÔ 0Ú �×!Ò!¡:Ô .Ú �×"Ò"¡KÔ 0Ú �—’™CÔ  Ú �—’™TÔ "Ú �—’¡Ô (ð  Ñ �$—,’,Ó ¡Ô ,Ø "Ñ �$—/’/Ó "Ñ#5Ô 6Ø Ñ �$—+’+Ó ™zÔ *Ø "Ñ �$—/’/Ó "Ñ#6Ô 7Ø Ñ �$—,’,Ó ¡Ô ,â �—’ §¢Ô -Ú �×!Ò! 4§?¢?Ô 3Ú �—’˜tŸ{š{Ô +Ú �×!Ò! 4§?¢?Ô 3Ú �—’ §¢Ô -ñ �4×+Ò+Ó,ôó -ññ �4—=’=×$Ò$Ó%òó &ññ �4—?’?×&Ò&Ó'òó (ññ �4—>’>Ó"òó #ñôð (�M×'Ò'Ó)ò &�L�F‰DáÑ)©&Ó1Ó2Ù!õ &ó 3ò&ð&ñ& �5—=’=Ó!òó "ññ �4—<’<Ó ò7ó !ñ7ñ �5—9‘9×+Ò+×3Ò3Ó4òó 5ññ
 �5—9‘9×%Ò%×;Ò;Ó<òó =ññ �5—9‘9—>’>×&Ò&×4Ò4Ó5òKó 6ñKñ ˆ5�9‰9�>Š>™7Ô#á�u—y‘y—~’~×+Ò+×3Ò3Ó4ò#ó 5ñ#ñ �5—9‘9—>’>×(Ò(Ó)Ø%)ô =ó *ñ=÷@ KÑ Jò Ñ!Ô "ñ Ð1Ó2òSó 3ñSñ( �5—9‘9×)Ò)×.Ò.ÀDÔIð/à2ô/ó Jñ/ñ �5—9‘9×)Ò)×4Ò4È$ÔOôEó PñEð&Ñ Ø	‡I�I×Ò×2Ò2Èôà€)×Ò‘J¨TÕ2ô4ñ
 �5—9‘9×)Ò)×9Ò9ÈtÔTô/ó Uñ/ò
 ‹8�ö ÷H HÑ Gñ ‘<°TÔ:òuó ;ñuñp �5×*Ò*×7Ò7ÈTÔRØDH÷ ó Sññ8 Ð&¸DÔAô/ó Bñ/ñd �5—9‘9—?’?×/Ò/×7Ò7Ó8òó 9ññ �5—9‘9—?’?×.Ò.×6Ò6Ó7òó 8ññ �5—9‘9×)Ò)×6Ò6ÈDÔQòc ó Rñc ÷L PÕ Oò Ô Ú Ô ñ �>×8Ò8ÈdÔSòó Tññ2 �>×0Ò0ÀdÔKò")ó Lñ")ñJ Ø	×Ò×2Ò2Èôð 37¸Qõóñ÷F Ð ñ ‘Ô ç !Ð !ð +Ñ × *Ò *Ô ,Ø 'Ñ × 'Ò 'Ô )÷ô ð %Ñ × $Ò $Ô &ð ×Òôó òrp   