Ë
    L²j“a ã                  ó*�  — 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( d d
l)m*Z* d dl+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z< d dl=m>Z>m?Z? d dl@mAZAmBZBmCZC d dlDmEZE d dlFmGZGmHZHmIZImJZJmKZK ddlLmMZM ddlNmOZOmPZPmQZQmRZR ddlSmTZTmUZU ddlQmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZe ddl"mfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZq ddlrmsZsmtZt erddlumvZv  ed«      Zw ed«      Zx eEddg«      Zy ejô                  e{«      Z|i Z}d e~d!<   i Zd"e~d#<   i Z€d$e~d%<    eEe�j                  �j                     «       Zƒejæ                  �j                  Z„ejæ                  �j
                  Z…ejæ                  �j                  Z† eEe�j                  �j                     «       Z‡ eEe�j                  �j                     e�j                  �j                  g«      ZŠ eEe�j                  �j                     «       Z‹i ZŒd&e~d'<   ejæ                  �j                  Z��dŠd(„ZŽ	 	 	 	 �d‹d)„Z��dŒd*„Z�	 	 	 	 �d�d+„Z‘�dŽd,„Z’	 	 	 	 �d�d-„Z“	 	 	 	 	 	 �d�d.„Z” e“e„�j*                  e„�j,                  e„�j.                  e„�j0                  e„�j2                  e„�j4                  e„�j6                  e„�j8                  e„�j:                  e„�j<                  e„�j>                  e„�j@                  e„�jB                  e„�jD                  g«       e�jF                  e�jH                  e�jJ                  e�jL                  e�jN                  e�jP                  e�jR                  e�jT                  e�jV                  e�jX                  e�jV                  e�jZ                  e�j\                  d/œZ¯�d‘d0„Z°�d’d1„Z±�d“d2„Z²d3d4œ	 	 	 	 	 	 	 �d”d5„Z³d6„ Z´	 	 	 	 	 	 �d•d7„Zµ�d–d8„Z¶	 	 	 	 	 	 	 	 	 	 	 	 �d—d9„Z·	 	 	 	 	 	 �d˜d:„Z¸	 	 	 	 	 	 	 	 	 	 �d™d;„Z¹d3e7�jt                  d3e}f	 	 	 �dšd<„Z»d=„ Z¼�d›d>„Z½d?„ Z¾	 	 	 	 	 	 �dœd@„Z¿�d�dA„ZÀdB„ ZÁ	 �dž	 	 	 	 	 	 	 �dŸdD„ZÂ e»e�j                  �j                  d¬E«      dF„ «       Z‰ e»e†�j†                  d¬E«      �d dG„«       ZÄd3dHœ�d dI„ZÅ e»e„�jŒ                  �jŽ                  d¬E«      �d dJ„«       ZÈd3d3dKœ�d¡dL„ZÉ e»e†�j”                  d¬E«      �d¢�d¡dM„«       ZËddCe7�jt                  d3ddd3d3df	dN„ZÌ endOe7�jš                  d¬P«        e»e„�jœ                  dCd¬Q«      �d£dR„«       ZÏdS„ ZÐ eÐ«        	 	 �d�dT„ZÑ e»e„�j¤                  d3d¬Q«      dU„ «       ZÒ e»e„�j¦                  d3d¬Q«      dV„ «       ZÓ e»e„�j¨                  e„�jª                  e„�j¬                  e„�j®                  e†�j°                  g«      dW„ «       ZÙ eÚe„dX«      r  e»e„�j¶                  «      eÙ«        e»e„�j¸                  d¬E«      �d¤dY„«       ZÜ e»e„�jº                  d¬E«      �d¤dZ„«       ZÝ e»e„�j¼                  g«      �d¤d[„«       ZÞ e»e„�j¾                  «      d\„ «       Zß e»e„�jÀ                  «      d]„ «       Zà e»e„�jÂ                  «      d^„ «       Zá e»e„�jÄ                  «      d_„ «       Zâ e»e„�jÆ                  �jÈ                  «      d`„ «       Zã e»e„�jÊ                  «      da„ «       Zå e»e„�jÌ                  d¬E«      db„ «       Zæ e»e†�jÎ                  d¬E«      dc„ «       Zç e»e„�jÐ                  d¬E«      dd„ «       Zè e»e„�jÒ                  «      de„ «       Zé e»e„�jÔ                  d¬E«       e»e„�jŒ                  d¬E«       e»e„�jÖ                  d¬E«      �d¥df„«       «       «       ZÆ e»e„�jØ                  d¬E«      dg„ «       Zì e»e„�jÚ                  d¬E«      d d e
�jÜ                  ddCfdh„«       Zï e»e„�j*                  d¬E«      �d¤di„«       Z• e»e„�jà                  d¬E«      �d¤dj„«       Zð e»e„�j,                  d¬E«      �d¤dk„«       Z–�d¦dl„Zñ e»e��jä                  d¬E«      	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 �d§dm„«       Zódn„ Zô e»e„�jè                  �jê                  «      do„ «       Zö e»e„�jî                  �jê                  «      dp„ «       Zø e»e��jò                  d¬E«      ddqœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 �d¨dr„«       Zú e»e��jö                  �jÈ                  d¬E«      	 	 	 	 	 	 	 	 	 	 	 	 	 	 �d©ds„«       Zü e»e��jú                  �jÈ                  d¬E«      ddqœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 �dªdt„«       Zþ e»e��jö                  �jþ                  d¬E«      	 	 	 	 	 	 	 	 	 	 	 	 	 	 �d«du„«       �Z  e»e��jú                  �jþ                  d¬E«      ddqœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 �d¬dv„«       �Z e»e„�j                  «      �d¦dw„«       �Z e»e„�j                  d¬E«      �d­�d®dx„«       �Z e»e„�j                  d¬E«      �d­�d®dy„«       �Z e»e„�j
                  d¬E«      �d­�d®dz„«       �Z e»e„�j                  d¬E«      d{„ «       �Z e»e„�j                  d¬E«      �d¦d|„«       �Z e»e„�j                  d¬E«      �d¦d}„«       �Z e»e„�j                  d¬E«      �d¦d~„«       �Z	 e»e„�j                  d¬E«      d„ «       �Z
 e»e„�j                  d¬E«      d€„ «       �Z e»e„�j                  d¬E«      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æ                  �j.                  �j0                  d¬E«      dŒ„ «       �Z e»e„�j2                  d¬E«      d�„ «       �Z e»e„�j4                  d¬E«      dŽ„ «       �Z e»e„�j6                  �j8                  d¬E«      d�„ «       �Z e»e„�j<                  «      d�„ «       �Z e�j>                  d«      d‘„ «       �Z d’„ �Z! �ee„�jD                  �jÈ                  «      �Z# �ee„�jD                  �jH                  «      �Z% �ee„�jL                  �jÈ                  «      �Z' �ee„�jL                  �jH                  «      �Z( �ee„�jR                  «        �ee„�jT                  dC¬“«        �ee„�jV                  dC¬“«        �ee„�jX                  dC¬“«        �eejæ                  �jZ                  �j\                  �jÈ                  «        �eejæ                  �jZ                  �j^                  �jÈ                  «        �eejæ                  �jZ                  �j`                  �jÈ                  «        �eejæ                  �jZ                  �jb                  �jÈ                  «        e»e„�jD                  «      d”„ «       �Z" e»e„�jL                  «      d•„ «       �Z& e»eP�jd                  d¬E«      d–„ «       �Z3 e»eP�jh                  d¬E«      �d´d—„«       �Z5 e»eP�jl                  d¬E«      d˜„ «       �Z7 e»eP�jp                  d¬E«      d™„ «       �Z9�d´dš„�Z: e»eP�jv                  d¬E«      d e�jR                  d›œ	 	 	 	 	 	 	 	 	 �dµdœ„«       �Z< �eeP�jz                  «        �eeP�j|                  «        e»eP�jR                  d¬E«      d d�œ	 	 	 	 	 	 	 	 	 �d¶dž„«       �Z?�d·dŸ„�Z@�d¸d „�ZA e»e„�j„                  �j†                  d¬E«      d3d3ddd¡œ	 	 	 	 	 	 	 	 	 	 	 	 	 �d¹d¢„«       �ZB e»e„�jˆ                  �j†                  e7�jŠ                  ¬E«      d3d3d£œ	 	 	 	 	 	 	 �dºd¤„«       �ZDd¥„ �ZFd¦„ �ZGd§„ �ZHd¨„ �ZId©„ �ZJdª„ �ZKd«„ �ZLd¬„ �ZM e”e„�j2                  �jÈ                  �eM«       d­„ �ZN �ee„�jž                  «        �ee„�j                   «        �ee„�j¢                  «        �ee„�j¤                  d3¬®«        �ee„�j¦                  �jÈ                  d3¬®«        �ee„�j¨                  �eH«        �ee„�jª                  d3¬®«        �ee„�j¬                  d3¬®«       e�j®                  �j±                  «       r �ee„�j²                  d3¬®«       e�j´                  �j±                  «       r �ee„�j¶                  d3¬®«        �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Î                  d3¬®«        �ee„�jÐ                  �eG«        �ee„�j6                  �eM«        �ee„�jÒ                  �eG«        �ee„�jÔ                  �eH«        �ee„�jÖ                  �eG«        �ee„�jØ                  �eH«        �ee„�jÚ                  �eH«        �ee„�jÜ                  �eH«        �ee„�jÞ                  «        �ee„�jà                  «        �ee„�jà                  «        �ee„�jâ                  «        �ee„�jä                  «        �ee„�jæ                  «        �ee„�jè                  �eG«        �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ú                  �eH«        �ee„�jü                  «        �ee„�jþ                  «        �ee„�j                   �eH«        �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                   «        �ee„�j"                  «        �ee„�j$                  «        �ee„�j&                  «        �ee„�j(                  «        �ee„�j*                  «        �ee„�j,                  �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>                  �jÈ                  «        �ee„�j@                  �jÈ                  d3¬®«        �ee„�jB                  �eG«        �ee�jD                  �jF                  �jH                  «        �ee�jD                  �jF                  �jJ                  «        �ee�jD                  �jF                  �jL                  «        �ee�jD                  �jF                  �jN                  «        �ee„�jP                  «        �ee„�jR                  «        �ee„�jT                  �eH«        �ee„�jV                  «        �ee„�jX                  «        �ee„�jZ                  «        �ee„�j\                  «        �ee„�j^                  «        �ee„�j`                  �jb                  «        �ee„�jd                  �jÈ                  �eNd3¬®«        �ee„�jf                  �jÈ                  �eNd3¬®«        �ee„�jh                  �jÈ                  �eNd3¬®«        �ee„�jh                  �jj                  d3¬®«        �ee„�jl                  �jÈ                  �eNd3¬®«        �ee„�jn                  �jÈ                  �eNd3¬®«        �ee„�jp                  �jÈ                  �eNd3¬®«        �ee„�jr                  �jÈ                  �eNd3¬®«        �ee„�jt                  �jÈ                  �eNd3¬®«        �ee„�jv                  �jÈ                  �eNd3¬®«        �ee„�jx                  �jÈ                  �eNd3¬®«        �ee„�jz                  �jÈ                  �eN«        �ee„�jz                  �jj                  «        �ee„�j|                  �jÈ                  �eN«        �ee„�j~                  �jÈ                  �eN«        �ee„�j€                  �jÈ                  �eN«        �ee„�j‚                  «        �ee„�j„                  �j†                  dC¬“«        �ee„�j†                  �jÈ                  �eH«        e»e„�jˆ                  d¬E«      �d¢d¯„«       �ZÄ e»e„�jŠ                  «      dd°œd±„«       �ZÅd²„ �ZÆ eÚe„d³«      r  e»e„�jŽ                  «      �eÅ«        e»e†�j�                  «      d´„ «       �ZÈ e»e„�j’                  �j”                  d¬E«      	 �d»ddddd3dµœd¶„«       �ZË e»e„�j˜                  d¬E«      �d¼d·„«       �ZÌ e»e„�jš                  d¬E«      �d½d¸„«       �ZÍd¹„ �ZÎ e»e�jþ                  e„�jž                  e†�jž                  g«      dddd3dºœ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Åœ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¬E«      �d¢dÐ„«       �Zå e»e„�jÌ                  d¬E«      �d¿dÑ„«       �ZædÒ„ �Zç	 �d°dÓ„�ZèdÔ„ �Zé�d°dÕ„�Zê e»e„�jÖ                  d¬E«      dÖ„ «       �Zë e»e„�jØ                  d¬E«      d×„ «       �Zì e»e„�jÚ                  d¬E«      �d¢dØ„«       �Zí e»e„�jÜ                  «      �d¢dÙ„«       �ZîdÚ„ �ZïdÛ„ �Zð e»e„�jâ                  d¬E«      �d¢dÜ„«       �Zñ e»eP�jä                  d¬E«      �d¢dÝ„«       �Zò�d¢dÞ„�Zó �ee„�jè                  �jÈ                  d3¬ß«      �Zõ �ee„�jì                  �jÈ                  d3¬ß«      �Z÷ e»e„�jè                  d¬E«      dà„ «       �Zô e»e„�jì                  d¬E«      dá„ «       �Zöe¿dâ„ «       �Zø e»e„�jò                  d¬E«      �d¤dã„«       �Zù e»e„�jô                  d¬E«      �dÀdä„«       �ZúddCdåœ	 	 	 	 	 	 	 �dÁdæ„�Zû e»e„�jø                  d¬E«      ddçœ�dÂdè„«       �Zü e»e„�jú                  d¬E«      �dÀdé„«       �Zý e»e„�jü                  d¬E«      �dÀdê„«       �Zþ e»e„�jþ                  d¬E«      �dÀdë„«       �Zÿ e»e„�j                   d¬E«      dCdìœ�dÃdí„«       �Z 	 	 �dÄ	 	 	 	 	 �dÅdî„�Z e»e„�j                  �jÈ                  «      �d¤�dÆdï„«       �Z e»e„�j                  �jÈ                  «      �d¤�dÆdð„«       �Z e»e„�j@                  �jÈ                  «      	 �d›	 	 	 �dÇdñ„«       Z  e»e„�jB                  �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†�j                  �jÈ                  «      dö„ «       �Z	 	 	 	 	 	 	 	 �dÉd÷„�Z	 	 	 	 	 	 	 	 �dÉdø„�Z	 e»e„�j                  d¬E«      �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†�j&                  d¬E«      	 �d¢�d„«       �Z	 	 	 	 	 	 	 	 	 	 �dÎ�d„�Z e»e†�j*                  d¬E«      �d„ «       �Z�d„ �Z e»e„�j8                  d¬E«      	 	 	 	 �dÏ�d„«       Zœ e»e„�j:                  d¬E«      	 	 	 	 �dÏ�d	„«       Z� �ee„�j<                  �jÈ                  d3¬ß«      �Z e»e„�j<                  d¬E«      �d
„ «       Zž�dÐ�d„�Z�d„ �Z�d„ �Z�d„ �Z �ee„�j8                  �jÈ                  d3¬ß«      �Z e»e„�j8                  «      �d„ «       �Z �ee„�j<                  �jÈ                  d3¬ß«      �Z e»e„�j<                  «      �d„ «       �Z�d„ �Z  e»e„�jB                  «      �d„ «       �Z! e»e„�jD                  «      �d„ «       �Z"�d„ �Z# e»e„�jH                  �jÈ                  «      	 �dÑ�d„«       �Z$ e»e„�j.                  d¬E«      	 	 	 	 	 �dÒ�d„«       Z— e»e„�jJ                  d¬E«      	 	 	 	 	 �dÒ�d„«       �Z% �ee„�jL                  �jÈ                  d3¬ß«       �ee„�j.                  �jÈ                  d3¬ß«       �ee„�jJ                  �jÈ                  d3¬ß«      g�Z'�d„ �Z( �ee„�j0                  �jÈ                  d3¬ß«      �Z) e»e„�j0                  d¬E«      	 �d¤�d„«       Z˜ �ee„�jT                  �jÈ                  d3¬ß«      �Z+ e»e„�jT                  d¬E«      	 �d¤�d„«       �Z*�d„ �Z,d�dœ�d„�Z-�d¤�dÓ�d„�Z.�d„ �Z/ e»e„�j`                  «      �dÔd�d œ�d!„«       �Z0�d"„ �Z1�d#„ �Z2�d$„ �Z3�d%„ �Z4 e»e„�jj                  e†�jj                  g«      �d¤dd3�d&œ�d'„«       �Z6 e»e„�jn                  «      �d¤dd3�d&œ�d(„«       �Z7�d)„ �Z8e¿�d*„ «       �Z9 �ee„�jt                  �jv                  d3¬ß«      �Z< �ee„�jt                  �jz                  d3¬ß«      �Z> �ee„�jt                  �j~                  d3¬ß«      �Z@ e»e„�jt                  dC�¬+«      �d,„ «       �Z:�d¢�d-„�ZA e»e„�j„                  «      �d.„ «       �ZB e»e„�j†                  d¬E«      �d¢�d/„«       �ZCe¿�d0„ «       �ZDe¿�d1„ «       �ZEe¿�d2„ «       �ZF e»e„�jŽ                  dC�¬+«      �d¤�d3„«       �ZH e»e„�j’                  gdC�¬+«      �d4„ «       �ZI�dÕ�d5„�ZJ e»e†�jŽ                  gdC�¬+«      �d6„ «       �ZK e»e„�j˜                  e„�jŽ                  �j†                  gdCe7�jš                  ¬Q«      �d7„ «       �ZG e»e„�jš                  e†�jš                  gdC�¬+«      �d8„ «       �ZM e»e„�jœ                  e†�jœ                  g«      �dÔd�d œ�d9„«       �ZO �ee„�j                   �jÈ                  «      �ZQ �ee„�j¤                  �jÈ                  «      �ZS �ee„�j¨                  �jÈ                  «      �ZU �ee„�j¬                  �jÈ                  «      �ZW �ee„�j°                  �jÈ                  «      �ZY e»e„�j                   «      �d›�d:„«       �ZP e»e„�j¤                  «      �d›�d;„«       �ZR e»e„�j¨                  «      �d<„ «       �ZT e»e„�j¬                  d¬E«      �d¤�d=„«       �ZV e»e„�j°                  d¬E«      �d¤�d>„«       �ZX e»e„�j´                  «      �dÔd�d œ�d?„«       �ZZ e»e„�j¶                  «      �dÔ�d@„«       �Z\ e»e„�jº                  d¬E«      �dÔ�dA„«       �Z^ e»e„�j¾                  d¬E«      �dÔ�dB„«       �Z`  e»e†�jÂ                  «       �e.�dC«      «         e»e„�jÄ                  «       �e.�dD«      «      �Zc  e»e„�jÈ                  «       �e.�dE«      «      �Ze  e»e„�jÌ                  «       �e.�dFe�jN                  �¬G«      «      �Zg  e»e„�jÐ                  «       �e.�dHe�jN                  �¬G«      «      �Zi eÌe„�jÔ                  dCdC�dI�¬J«      �Zj �ee„�jÖ                  �jØ                  d3¬ß«      �Zm e»e„�jÖ                  �jØ                  d¬E«      ddƒd3�dKœ�dL„«       �Zn e»e„�jÖ                  �jÈ                  d¬E«      �dÖ�dM„«       �Zk �ee„�jÞ                  �jÈ                  d3¬ß«      �Zp �ee„�jâ                  �jÈ                  d3¬ß«      �Zr �ee„�jæ                  �jÈ                  d3¬ß«      �Zt �ee„�jæ                  �jê                  d3¬ß«      �Zv �ee„�jî                  �jÈ                  d3¬ß«      �Zx e»e„�jæ                  �jÈ                  d¬E«      �dN„ «       �Zy e»e„�jæ                  �jê                  d¬E«      �d¢�dO„«       �Zz e»e„�jî                  �jÈ                  d¬E«      �dÖ�dP„«       �Z{ e»e„�jÞ                  �jÈ                  d¬E«      �d×�dQ„«       �Zo e»e„�jâ                  �jÈ                  d¬E«      �dÖ�dR„«       �Zq�d›�dS„�Z|�dØ�dT„�Z} �e|e„�jü                  «      �Z~ �e}e„�jþ                  «      �Z �e|e„�j                   «      �Z€ �e|e„�j                  «      �Z� eÌe„�j                  «      �Z‚ �e}e„�j                  «      �Zƒ �e}e„�j                  «      �Z„ eÌe„�j
                  «      �Z… eÌe„�j                  dC�¬U«      �Z† e»e„�j                  dC�¬+«      d�dVœ�dW„«       �Z‡ e»e„�j                  dC�¬+«      d�dVœ�dX„«       �Zˆ eÑe„�j                  �jz                  �e‡dC�dY�¬Z«      �ZŠ eÑe„�j                  �jz                  �eˆdC�dY�¬Z«      �ZŒ �e}e„�j                  «        �e}e„�j                  «        eÌe„�j                  «      �Z� eÌe„�j                   «      �Z� eÌe„�j"                  «      �Z‘ eÌe„�j$                  �d[�¬\«      �Z’ eÌe„�j&                  «      �Z“ eÌe„�j(                  «      �Z” eÌe„�j*                  «      �Z• �e|e„�j,                  «        �e|e„�j.                  «      �Z—  e»e„�j0                  e7�jš                  ¬E«      �e—«        �e|e„�j2                  «        �e|e„�j4                  «        �e|e„�j6                  «        �e}e„jø                  «        eÌe„�j8                  ddCe�jZ                  �¬]«      �Zœ eÌe„�j:                  ddCe�jZ                  �¬]«      �Z� eÌe„�j<                  ddCe�jZ                  �¬]«      �Zž eÌe„�j>                  ddCe�jZ                  �¬]«      �ZŸ eÌe„�j@                  «      �Z  eÌe„�jB                  «      �Z¡  e»e„�jD                  «      �e «         e»e„�jF                  «      �e¡«        eÌe„�jH                  «      �Z¤ eÌe„�j                  «      �Z� �e|e„�jJ                  «      �Z¥ eÌe„�jL                  «        eÌe„�jN                  �d^�¬\«      �Z§ eÌe„�jÂ                  «        eÌe„�jP                  e�jZ                  �¬G«         e»e„�jR                  «      �e¤«        eÌe„�jT                  e�jZ                  �¬G«        eÌe„�jV                  e�jZ                  �¬G«        eÌe„�jX                  e�jZ                  �¬G«        eÌe„�jZ                  e�jZ                  �¬G«      �Z­ eÌe„�j\                  e�jZ                  �¬G«        eÌe„�j^                  e�jZ                  �¬G«        �e|e„�j`                  «        �e|e„�jb                  «        �e|e„�jd                  «        �e|e„�jf                  «        �e|e„�jh                  «        �e|e„�jj                  «        �e|e„�jl                  «        �e|e„�jn                  «        �e|e„�jp                  «        �e|e„�jr                  «        �e|e„�jt                  «        �e|e„�jv                  «        �e|e„�jx                  «        �e|e„�jz                  «        �e|e„�j|                  «        �e|e„�j~                  «       d�d_�lÀ�mÁ�ZÁ�mÂ�ZÂ �d`„ �ZÃ�eÂD ]S  �ZÄ �eÃe„�eÄ«      D ]  \  �ZÅ�ZÆ�ZÇ eÌ�eÅ�eÄ�eÆ�eÇ�¬a«       Œ  �eÃe†�eÄ«      D ]  \  �ZÅ�ZÆ�ZÇ eÌ�eÅ�eÄ�eÆ�eÇ�¬a«       Œ ŒU  eÑe„�j�                  �j’                  �ejdC�¬U«      �ZÊ eÑe„�j�                  �jz                  �ejdC�¬U«      �ZË eÑe„�j�                  �j†                  �ejdC�¬U«        eÑe„�j˜                  �j’                  �eI«      �ZÍ eÑe„�j˜                  �j†                  �eI«        eÑe„�j˜                  �jz                  �eI«      �ZÎ eÑe„�jž                  �j’                  �e†«        eÑe„�jž                  �jz                  �e†«        eÑe„�j                   �jÈ                  �e¤«        eÑe„�j¢                  �jÈ                  �e�«        eÑe„�j¤                  �jz                  �e:«        eÑe„�j¤                  �j’                  �e:«        eÑe„�j¤                  �j¦                  �e:«        eÑe„�j¨                  �j’                  �eG«      �ZÕ eÑe„�j¨                  �j†                  �eG«        eÑe„�j¨                  �jz                  �eG«      �ZÖ eÑe„�j®                  �e„«        eÑe„�j°                  �e~«        eÑe„�j²                  �j’                  �e «        eÑe„�j²                  �jz                  �e «        eÑe„�j´                  �j’                  �e¡«        eÑe„�j´                  �jz                  �e¡«        eÑe„�j¶                  �j’                  �e «        eÑe„�j¶                  �jz                  �e «        eÑe„�j¸                  �j’                  �e¡«        eÑe„�j¸                  �jz                  �e¡«        eÑe„�jº                  �e¥«        eÑe„�j¼                  �e§«        eÑe„�j¾                  �eÅ«        eÑe„�jÀ                  �eÄ«      �Zá�db„ �Zâ �eâe„�jÆ                  �j’                  e„�j�                  �j’                  �eÊ«        �eâe„�jÆ                  �jz                  e„�j�                  �jz                  �eË«        �eâe„�jÈ                  �j’                  e„�j˜                  �j’                  �eÍ«        �eâe„�jÈ                  �jz                  e„�j˜                  �jz                  �eÎ«        �eâe„�jÊ                  �j’                  e„�j¨                  �j’                  �eÕ«        �eâe„�jÊ                  �jz                  e„�j¨                  �jz                  �eÖ«        �eâe„�jÌ                  �jÈ                  e„�jÀ                  �jÈ                  �eá«        �eâe„�jÎ                  �jz                  e„�j                  �jz                  �eŠ«        �eâe„�jÐ                  �jz                  e„�j                  �jz                  �eŒ«       �dc„ �Zé �eée„�jÔ                  �ej«        �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â                  �eI«        �eée„�jä                  �j†                  �eG«        �eée„�jä                  �jæ                  �eH«        �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ö                  «      �e�«         e»e„�jø                  «      �e‘«         e»e„�jú                  «      �e“«         e»e„�jü                  «      �e”«         e»e„�jþ                  «      �e•«        �eée„�j                   e„�jö                  «        �eée„�j                  e„�jø                  «        �eée„�j                  e„�jú                  «        �eée„�j                  e„�jü                  «        �eée„�j                  e„�jþ                  «        e»e„�j
                  «      �d›�dd„«       �Z e»e„�j                  �j                  «      �de„ «       �Z e»e„�j                  �j                  «      �df„ «       �Z e»e„�j                  «      �dg„ «       �Z	 e>�j                  «       D ]  \  �Z�Z  e» e?�e«      «      �e«       Œ  e»e�j                  «      �dh„ «       �Z e»e„�j<                  «      �di„ «       �Z e»ejæ                  �j                  �j                   «      �dj„ «       �Z e»ejæ                  �j$                  �j&                  «      �dk„ «       �Z e»ejæ                  �j                  �j(                  �j*                  «      �dl„ «       �Z eÚejæ                  �j.                  �dm«      r; e»ejæ                  �j.                  �j†                  �jÈ                  «      �dn„ «       �Z e»ejæ                  �j                  �j2                  «      dd°œ�do„«       �Zd �dp�l�m�Z  �e�e«        e»e*«      �dq„ «       �Z e»ejæ                  �j:                  �j<                  d¬E«      	 	 �dÙ�dr„«       �Z e»ejæ                  �j:                  �j>                  d¬E«      �d¢�ds„«       �Z  e»ejæ                  �j:                  �j@                  d¬E«       e�jB                  �edC�¬t«      «        e»ejæ                  �j:                  �jD                  d¬E«      �dÚ�du„«       �Z" �e#«       �Z$�dÛ�dv„�Z%d �dw�l&�m'�Z'  e»�e'd¬E«      �dx„ «       �Z( e»e�j                  �jR                  d¬E«      d�dyœ�dÜ�dz„«       �Z* e»e(d¬E«      	 	 	 	 �dÝ�d{„«       �Z+ e»ejæ                  �j                  �jX                  �jÈ                  «      �d|„ «       �Z, e»ejæ                  �j                  �jZ                  �jÈ                  «      �d}„ «       �Z- e»ejæ                  �j:                  �j\                  d¬E«      �d~„ «       �Z.d�d�l/�m0�Z0�m1�Z1  �e0«         �e1«         e»eP�jd                  d¬E«      �d€„ «       �Z2�d�„ �Z3 e»eP�jh                  d¬E«      �d‚„ «       �Z5 e»e�j                  �jl                  d¬E«      dCd�dƒœ�d„„«       �Z7d�d…lN�m8�Z8  eM�e8«       d�d†lN�m9�Z9  �e9�jt                  «         �e9�jv                  «        d�d‡lN�m<�Z<  �e<�jz                  «        d�dˆlN�m>�Z>  �e>�j~                  «        e�j€                  �dÞ�d‰„«       �ZAy(ß  é    )ÚannotationsN)Údefaultdict)ÚCallableÚ
CollectionÚIterableÚSequence)ÚAnyÚcastÚTYPE_CHECKINGÚ	TypeGuardÚTypeVar)Ú	ParamSpec)Úpatch)Úcounters)Ú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)Ú
OrderedSet)ÚCeilDivÚFloorDivÚIdentityÚ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Údecode_deviceÚ
is_dynamicÚis_gpuÚis_pointwise_useÚ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)Ú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)rR   ÚgraphÚcurrent_nodeÚusersÚopÚtargetÚforeach_ops)ÚnodeÚusers     úW/var/www/html/ia-enhanced/venv/lib/python3.12/site-packages/torch/_inductor/lowering.pyÚcur_node_has_non_foreach_usersrf   ‡   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   rG   r/   Ú#combo_kernel_foreach_dynamic_shapesrB   ÚdataÚ
get_deviceÚappend)Ú	arg_pairsÚoutÚunpack_argsÚiÚargsÚuse_foreachÚdeviceÚts           re   Úgroup_foreach_argsrx   “   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ð  €Jrg   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)rk   ÚtorchÚ_opsÚ
OpOverloadr   Útag_to_layout_constraintrY   )ÚfnÚmaybe_layout_tags     re   Úmaybe_layout_constraintsr�   «   sO   € ä�bœ%Ÿ*™*×/Ñ/Ô0àä4°RÀeÔLÐLÐÐLÜ'Ð(8Ó9Ð9à	Ô&Ñ&Ü(¨Ñ,Ð,Ørg   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    re   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ÐArg   c                ó$   — | st        d|› �«      ‚y )Nzinductor does not support ©ÚNotImplementedError©ÚcondÚmsgs     re   Ú
assert_nyir”   Ç   s   € ÙÜ!Ð$>¸s¸eÐ"DÓEÐEð rg   c                ó–  ‡ — t        ‰ t        t        t        t        f«      r‰ D �cg c]  }t        |«      ‘Œ c}S t        ‰ t        j                  j                  «      rt        j                  ‰ «       y t        ‰ t        j                  j                  «      r,t        j                  ˆ fd„‰ j                  «       D «       «       y c c}w )Nc              3  ó6   •K  — | ]  }t        ‰|«      –— Œ y ­w©N)Úgetattr)Ú.0Úoverloadr   s     €re   ú	<genexpr>z,add_needs_realized_inputs.<locals>.<genexpr>×   s   øè ø€ ò %
Ø&.ŒG�B˜×!ñ%
ùó   ƒ)rk   ri   ÚsetÚtupler&   Úadd_needs_realized_inputsr{   r|   r}   Úneeds_realized_inputsÚaddÚOpOverloadPacketÚupdateÚ	overloads)r   Úxs   ` re   rŸ   rŸ   Ì   s—   ø€ ô
 �"”tœS¤%¬Ð4Ô5à68Ö9°Ô)¨!Õ,Ò9Ð9Ü�"”e—j‘j×+Ñ+Ô,Ü×!Ñ! "Ô%ð
 ô	 
�BœŸ
™
×3Ñ3Ô	4Ü×$Ñ$ó %
Ø24·,±,³.ô%
ô 	
ð ùò :s   ¦Cc                ó°   — t        | t        j                  j                  «      r)| j	                  «       D ]  }|t
        t        | |«      <   Œ y |t
        | <   y r—   )rk   r{   r|   r¢   r¤   rY   r˜   )r   Ú
constraintrš   s      re   Úadd_layout_constraintr¨   Ý   sN   € ô �"”e—j‘j×1Ñ1Ô2ØŸ™›ò 	JˆHØ?IÔ%¤g¨b°(Ó&;Ò<ñ	Jð )3Ô! "Ò%rg   )r   r.   r,   é   é   é   é   é   é   é	   é
   é   é   c                ób   — t        | t        «      s| S | t        v sJ d| › d�«       ‚t        |    } | S )Nzid z missing from DTYPE_ID_LOOKUP)rk   ÚintÚDTYPE_ID_LOOKUP©Údtypes    re   Údecode_dtyper¸     s=   € Ü�eœSÔ!ØˆØ”OÑ#ÐO s¨5¨'Ð1NÐ%OÓOÐ#ä˜EÑ"€EØ€Lrg   c                óú   — t        | t        «      r4t        | j                  «       «      xs t	        | j                  «       «      S t        | t
        j                  «      r| j                  du S t        | t        «      S ©NT)	rk   rB   r   Ú	get_dtyper   ÚsympyÚExprÚ
is_integerr´   ©r¥   s    re   Úis_integer_typerÀ     sX   € Ü�!”YÔÜ §¡£Ó.ÒQÔ2BÀ1Ç;Á;Ã=Ó2QÐQÜ	�A”u—z‘zÔ	"Ø�|‰|˜tÐ#Ð#ä˜!œSÓ!Ð!rg   c                ót   — t        | t        «      rt        | j                  «       «      S t        | t        «      S r—   )rk   rB   r   r»   Úboolr¿   s    re   Úis_boolean_typerÃ   &  s*   € Ü�!”YÔÜ §¡£Ó.Ð.ä˜!œTÓ"Ð"rg   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 )Nr.   r¶   )	rk   r    r¼   ÚBasicÚlenÚget_sizer{   Úzerosr»   )ÚinpÚdims     re   Úconstruct_inputz+get_promoted_dtype.<locals>.construct_input2  sG   € Ü�cœF¤E§K¡KÐ0Ô1ØˆJä�c—l‘l“nÓ%ˆCä—;‘; ˜s S™y°·±³Ô@Ð@rg   Útype_promotion_kind)rË   r	   Úreturnr	   )r   )rÎ   rÄ   rt   rÍ   ÚargÚinpsÚcompute_dtypeÚresult_dtypes           re   Úget_promoted_dtyperÔ   -  sP   € ó
Að -1Ö1 S‰O˜CÕ Ð1€DÐ1Ü"4Ø	ð#Ø#6ñ#Ñ€M�<ñ 1ˆ=ÐB°lÐBùò	 2s   ‰.c                ó0  — t        | t        t        f«      s| g} nt        | «      } t        | «      D ]b  }t        |t        j                  j
                  «      sŒ(|j                  «       D ](  }t        ||«      }|t        vsŒ| j                  |«       Œ* Œd | S r—   )
rk   ri   rž   r{   r|   r¢   r¤   r˜   rW   ro   )Úaten_fnr   rš   Úother_fns       re   Úget_overloadsrØ   A  sƒ   € Ü�g¤¤e˜}Ô-Ø�)‰ä�w“-ˆä�7‹mò -ˆÜ�bœ%Ÿ*™*×5Ñ5Õ6ØŸL™L›Nò -�Ü" 2 xÓ0�Ø¤9Ò,Ø—N‘N 8Õ,ñ-ð-ð €Nrg   c                óÔ   — t        | t        j                  j                  «      r|| j                  v S t        | t        j                  j
                  «      r|| j                  «       v S y©NF)rk   r{   r|   r¢   Ú_qualified_op_namer}   Úname)r`   Ú	namespaces     re   Úin_namespacerÞ   Q  sQ   € ô �"”e—j‘j×1Ñ1Ô2Ø˜B×1Ñ1Ð1Ð1Ü	�BœŸ
™
×-Ñ-Ô	.Ø˜BŸG™G›IÐ%Ð%Ørg   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   r.   F)rk   rm   r1   ÚReinterpretViewr$   rÉ   rR   r]   ÚsizevarsÚguarding_hints_or_throwrn   ÚtyperÈ   rB   Ú
StorageBoxÚ
DeviceCopyÚcreate)r¥   rv   ÚsizeÚ
cur_devices       re   Ú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Ø€Hrg   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)r™   Úas     re   r›   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·   rv   )rk   rB   Úto_dtyper1   ÚConstantrñ   )rÐ   rv   r·   s    €€re   Úpromoteztransform_args.<locals>.promoteœ  sD   ø€ Ü˜#œyÔ)Ü  UÓ+Ð+Ü˜C¤§¡Ô-Ü—{‘{¨¯©¸%ÈÔOÐOà�
rg   c              3  ó(   •K  — | ]	  }‰|   –— Œ y ­wr—   © )r™   rs   rt   s     €re   r›   z!transform_args.<locals>.<genexpr>«  s   øè ø€ Ò3 �T˜!•WÑ3ùó   ƒc              3  ó(   •K  — | ]	  }‰|   –— Œ y ­wr—   rö   )r™   ÚkÚkwargss     €re   r›   z!transform_args.<locals>.<genexpr>¬  s   øè ø€ Ò7 1�V˜A•YÑ7ùr÷   N)rÐ   r	   rÏ   r	   )rj   rk   rB   Úitemsr{   rÂ   r    r¼   rÇ   rí   ÚextendÚvaluesrÔ   rn   rê   Úbroadcast_tensorsri   Ú	itertoolsÚchainrÉ   ÚziprÈ   Úranger1   ró   r7   rç   )rt   rú   Ú	broadcastrÎ   Úconvert_input_to_boolrs   r¥   Úargs_indicesrù   ÚvÚkwargs_indicesrî   Úpromoting_argsrô   Úbroadcastedrè   rv   r·   s   ``              @@re   Útransform_argsr
  o  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—   )rC   )rt   rú   rq   Ú	decomp_fns      €re   Úwrappedz+_register_foreach_lowering.<locals>.wrappedÏ  s   ø€ á˜Ð( Ñ(ˆÜ�CÔØˆ
rg   )rt   r	   rú   r	   rÏ   r	   )Ú	functoolsÚwrapsrØ   rb   r£   rW   ÚdictÚfromkeys)rÖ   r  r  Úaten_fnss    `  re   Ú_register_foreach_loweringr  Á  sX   ø€ ô ‡_�_�YÓôó  ðô
 ˜WÓ%€HÜ×Ñ�xÔ Ü×Ñ”T—]‘] 8¨WÓ5Ô6Ø€Nrg   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 )NFr.   r   Tc              3  óH   K  — | ]  }|t         v xs t        |d «      –— Œ y­w)Ú_c10d_functionalN)Ú	fallbacksrÞ   )r™   r   s     re   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)rq   Nrö   ©r™   r¥   s     re   r›   z6_register_lowering.<locals>.wrapped.<locals>.<genexpr>ü  s   è ø€ Ò6¨!˜1 �:Ñ6ùó   ‚zout= ops aren't yet supported)	ri   r  rÈ   rk   rž   ÚallÚanyr
  rC   )	rt   rú   Úunpackedrq   rÖ   r  r  r  rÎ   s	       €€€€€re   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Ôàˆ
rg   )r  r  rØ   r£   r  r  )rÖ   r  r  rÎ   r  Úlowering_dictr  s   `````  re   Ú_register_loweringr!  Û  sJ   ü€ ô& ‡_�_�YÓ÷ó  ðô6 ˜GÓ$€Gà×ÑœŸ™ w°Ó8Ô9Ø€Nrg   c                ó@   — t        j                  t        | ||||¬«      S )z+
    Shim to support decorator syntax.
    )r  rÎ   r  r   )r  Úpartialr!  )rÖ   r  rÎ   r  r   s        re   Úregister_loweringr$    s)   € ô ×ÑÜØØØ/Ø3Ø#ôð rg   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ÚOnerR   r]   râ   Úis_size_one_or_falsero   Úcheck_equalsrÈ   ÚexpandÚfree_symbols)rî   ÚbÚoutputr¥   Úys        re   Úbroadcast_symbolic_shapesr2  %  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Ö ð
!ô ”˜&Ó!Ó"Ð"rg   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—   )rk   r¼   rÇ   r´   Úfloatr  s     re   r›   z$promote_constants.<locals>.<genexpr>G  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—   )rk   r´   r5  r¼   rÇ   r  s     re   r›   z$promote_constants.<locals>.<genexpr>I  s"   è ø€ Ò
D¸Œ:�aœ#œu¤e§k¡kÐ2×3Ñ
Dùr6  rÎ   c                ó¼   •— t        | t        j                  «      r!t        j                  | ‰t        d «      ¬«      S t        j                  | ‰t        d «      ¬«      S )N©Úindexr·   rv   rð   )rk   r¼   rÇ   r1   r8   rF   ró   ©r¥   r·   s    €re   Ú
const_funcz%promote_constants.<locals>.const_funcP  sJ   ø€ Ü˜!œUŸ[™[Ô)Ü×*Ñ*Ø 5´¸tÓ1Dôð ô —{‘{¨°%ÄÈdÓ@SÔTÐTrg   c              3  ól   K  — | ],  }t        |t        t        t        j                  f«      sŒ)|–— Œ. y ­wr—   )rk   rB   r7   r1   ró   r  s     re   r›   z$promote_constants.<locals>.<genexpr>Y  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    €re   ú<lambda>z#promote_constants.<locals>.<lambda>a  s   ø€ ¤%§,¡,¨q¸Ô"E×"JÑ"JÓ"L€ rg   c                ó   — | S r—   rö   )r  s    re   rC  z#promote_constants.<locals>.<lambda>c  s   €  !€ rg   rð   r9  )r   ÚDEFAULTr  r  rÔ   Únextr»   r{   rÂ   Úbfloat16Úfloat16rk   r´   r5  ro   r7   rç   r1   ró   Úget_device_or_errorri   rÉ   r¼   rÇ   r8   )
ÚinputsÚoverride_return_dtyperÎ   r<  r¥   ÚexÚ_round_scalarrq   r·   rB  s
           @@re   Úpromote_constantsrN  ?  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—   )rk   r¼   rÇ   rQ   Ú
index_exprÚconstantÚfma)ÚidxÚa_valÚb_valÚ
alpha_exprÚa_loaderÚalphaÚb_loaderr·   s       €€€€re   Úinner_fnz%_add_with_alpha_fma.<locals>.inner_fn‹  sV   ø€ Ù˜“ˆÙ˜“ˆÜ�eœUŸ[™[Ô)ÜŸ™¨¨uÓ5‰JäŸ™ e¨UÓ3ˆJÜ�w‰w�u˜j¨%Ó0Ð0rg   ©rv   r·   r\  Úranges)rÔ   r   rE  Úmake_loaderr?   rç   rn   rÉ   )rî   r/  rZ  r\  rY  r[  r·   s     ` @@@re   Ú_add_with_alpha_fmar`  �  sf   û€ äØ	Ø	Ü;×CÑCô€Eð
 �}‰}‹€HØ�}‰}‹€H÷1ô ×ÑØ�|‰|‹~ØØØ�z‰z‹|ô	ð rg   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)rZ  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,                  d uxr{ t/        t*        j,                  dd «      d uxr\ t*        j,                  j0                  j2                  d uxr4 t*        j,                  j0                  j2                  j5                  d	d
«      Š
‰
xr ‰‰v Š	ˆˆ	ˆ
ˆˆˆˆˆˆf	d„}‰sSd }‰D ]7  }t7        |j	                  «       j                  «      sŒ'|j	                  «       } n |s‰d   j	                  «       }‰xs }t9        j:                  |‰|‰¬«      S c c}w )Nc              3  óV   K  — | ]!  }t        |t        «      xr t        |«      –— Œ# y ­wr—   ©rk   r9   r:   ©r™   rË   s     re   r›   z0make_pointwise.<locals>.inner.<locals>.<genexpr>©  s(   è ø€ ò /
Ø;>ŒJ�sœFÓ#Ò6¬	°#«Ó6ñ/
ùó   ‚')r.   r   Úcudaéÿÿÿÿzndim mismatch ú r^   Ú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 ri  F)Úuse_compute_types)rÈ   r{   rÂ   rj   r»   rQ   rò   ro   )r:  ÚloadÚinputs_loadedÚ	inp_indexrq   Ú	inp_dtypeÚdowncastr·   Úemulate_output_castÚemulate_precision_castsr   rJ  ÚloadersÚ	low_pr_fpÚoverride_fn_when_input_boolr^  s          €€€€€€€€€re   r\  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 r]  )r  rN  rk   r9   rn   r»   Úis_floating_pointr{   ÚversionÚhiprä   r`  ri   Úmulr_  rÉ   r1   ÚBaseConstantrÈ   rG  rH  rR   r]   r˜   r^   ÚmetaÚgetrH   r?   rç   )rZ  rJ  Ú
inp_devicer¥   Úotherr\  rv   rs   r·   rr  rs  rt  ru  r^  Úallow_alphar   Úoverride_devicerv  rK  Útriton_fallbackÚuse_fma_for_alphas    `      @@@@@@€€€€€€€re   Ú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ˆ	ä�G‰G˜4Ðò XÜœŸ™ °Ó6¸dÐBòXä—‘×$Ñ$×)Ñ)°Ð5òXô —‘×$Ñ$×)Ñ)×-Ñ-Ð.OÐQVÓWð	 	 ð 6ÒL¸%À9Ð:LÐ÷	ô 	ñ, ØˆFØò �Ü˜!Ÿ,™,›.×-Ñ-Õ.ØŸ\™\›^�FÙðñ Ø ™×-Ñ-Ó/�ð !Ò* Fˆä×ÑØØØØô	
ð 	
ùòo 4s   Ã$K)rJ  rB   rö   )r   rK  r�  rv  r€  rƒ  r‚  r„  s   ``````` re   Úmake_pointwiser…  œ  s   þ€ ð )-÷ X
õ X
ðt €Lrg   c                ó$   ‡ ‡‡— dddœdˆˆ ˆfd„}|S )Nr.   )rZ  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        |Ž «      }ˆ
ˆˆˆ	fd„}t        |t	        |«      ||«      S )Nrñ   rh  r   z1at least one input must be a list to a foreach opc                ó&   •— ‰r
 ‰| i ‰‰i¤ŽS  ‰| Ž S r—   rö   )rt   r€  Úpw_fnÚscalar_kwargÚ
scalar_vals    €€€€re   Úapply_fnz7make_foreach_pointwise.<locals>.inner.<locals>.apply_fn2  s%   ø€ ÙÙ˜dÐA |°ZÐ&@ÑAÐAá˜d�|Ð#rg   )ri   rk   rž   ÚpoprÈ   rR   r]   r^   r_   ra   Úinplace_foreach_opsrf   ro   rx   r  Úforeach_group_loop)rZ  rñ   rJ  Úrealize_outputsÚa_list_inputÚinputÚbroadcast_inputsÚgroupsrŒ  r‹  r€  r‰  rŠ  s            @€€€re   r„  z%make_foreach_pointwise.<locals>.inner  sY  ù€ ô
 �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ÐWrg   )rJ  zlist[list[TensorBox]]rö   )r‰  r€  rŠ  r„  s   ``` re   Úmake_foreach_pointwiser•    s   ú€ Ø45¸Q÷ 2Xñ 2Xðh €Lrg   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 ‚|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     re   r›   z%foreach_group_loop.<locals>.<genexpr>Y  ó   è ø€ Ò. ˆq˜Œ}Ñ.ùó   ‚)rû   rR   r]   Úhas_featureÚBackendFeatureÚFOREACHÚrealizero   Úget_operation_nameÚregister_operation_listr  )r”  Únum_outputsrŒ  r�  Úoutputsrv   ru   ÚgroupÚoperation_listÚ
output_indrt   r0  s               re   r�  r�  =  sÒ   € ð ˆf�{Ñ"€GØ(.¯©«ò <Ñ$Ñˆ�˜uØ$&ˆØ %ò 
	CÑˆJ˜Ù˜d“^ˆFØ"(ˆG�JÑô —‘×#Ñ# F¬N×,BÑ,BÕCÚÚ#à—‘Ô Ø×%Ñ% f×&?Ñ&?Ó&AÕBð
	Cò Ü�G‰G×+Ñ+¨NÕ;ð<ô" Ñ. gÔ.Ô.Ð.Ð.Ø€Nrg   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_dtyperl  )rQ   rò   r{   rG  rH  )r¥   Úresultru  r·   r§  rl  s      €€€re   Ú	_to_dtypezto_dtype.<locals>._to_dtyped  sR   ø€ Ü—‘ØØØØ/ô	
ˆô —^‘^¤U§]¡]Ð3ˆ	Ù  U¨iÑ%7ô —\‘\ &¨%Ó0ˆFØˆrg   ©rK  )r»   Úcloner…  )r¥   r·   Úcopyrl  r©  r§  s    ` ` @re   rò   rò   ]  sE   ú€ ð —‘“€IØ�EÒÙŒu�Q‹xÐ& QÐ&öð BŒ>˜)¸5ÔAÀ!ÓDÐDrg   rP  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.
    r.   )ÚPointwiseSubgraphLowering)Úroot_graph_loweringNc              3  ó$   K  — | ]  }|d u–— Œ
 y ­wr—   rö   r  s     re   r›   z_foreach_map.<locals>.<genexpr>Ÿ  r˜  r™  )Úsubgraph_loweringr®  Úgraph_modulerR   r]   Úset_graph_handlerÚrunÚgraph_outputsrx   rÈ   rû   rš  r›  rœ  r�  ro   rž  rŸ  r  )Úsubgraphrt   rú   r®  rJ  ÚgmÚpw_subgraphÚsub_outputsr”  r¡  rv   ru   r¢  r£  r¤  r0  s                   re   Ú_foreach_maprº  v  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¬  rl  )Ú
is_complexr»   rÉ   Ú
empty_liker1   ÚInplaceCopyFallbackrç   Úfallback_handlerÚprimsÚconvert_element_typeÚdefaultr{   rG  rH  r/   rs  rò   )r¥   r·   Údstr§  ru  rl  s         re   Ú_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ÐMrg   ©r¬  c               ó  — | j                  «       }||k(  r|rt        | «      S | S d„ } ||«      } ||«      }||k7  r* 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®   )rw  r{   ÚfinfoÚbitsrÂ   Úiinfor¶   s    re   Ú_get_primitive_bitwidthz1to_dtype_bitcast.<locals>._get_primitive_bitwidth¾  sD   € Ø×"Ò"Ü—;‘;˜uÓ%×*Ñ*Ð*Ø”e—j‘jÒ àä—;‘;˜uÓ%×*Ñ*Ð*rg   )	r»   r«  rÁ  ÚatenÚviewr·   rB   r6   rç   )r¥   r·   r¬  Úx_dtyperÍ  Úsrc_bitsÚdst_bitss          re   Úto_dtype_bitcastrÓ  ¹  s~   € Ø�k‰k‹m€GØ�%ÒÙŒu�Q‹xÐ& QÐ&ò+ñ ' wÓ/€HÙ& uÓ-€HØ�8Òà0Ô¤§	¡	§¡Ó0°°EÓ:Ð:äœ×)Ñ)¨!¨UÓ3Ó4Ð4rg   c                ó&  — |j                   s| j                  «       j                   r`t        j                  t        j
                  j                  t        j                  j                  j                  j                  | |«      «      S t        | |«      S r—   )r¾  r»   rB   rç   r1   ÚComplexViewr{   rQ   rÎ  rÏ  r·   rÓ  r;  s     re   Ú_view_dtyperÖ  Ð  se   € à×Ò˜1Ÿ;™;›=×3Ò3Ü×ÑÜ�N‰N×!Ñ!¤%§)¡)§.¡.×"5Ñ"5×";Ñ";¸QÀÓFó
ð 	
ô ˜A˜uÓ%Ð%rg   ©r¬  Únon_blockingc               óÄ   — t        |«      }| j                  «       |k(  r|rt        | «      S | S t        j                  t
        j                  j	                  | ||«      «      S r—   )rF   rn   r«  rB   rç   r1   ræ   )r¥   rv   r¬  rØ  s       re   Ú	to_devicerÚ  Ù  sO   € Ü˜6Ó"€FØ‡|�|ƒ~˜ÒÙŒu�Q‹xÐ& QÐ&Ü×ÑœBŸM™M×0Ñ0°°F¸LÓIÓJÐJrg   c                ó    — t        | |d|¬«      S )NTr×  )rÚ  )r¥   rv   rØ  s      re   Ú_device_putrÜ  à  s   € ä�Q˜ T¸ÔEÐErg   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)rK  rv  r€  rƒ  r‚  )r  rÎ   r  )rÎ   r  )Ú__name__r=   rM   r…  r$  rí   rÂ  r˜   )rÖ   rÜ   r  rÎ   r  rK  rv  r€  rƒ  r‚  r   s              re   Úregister_pointwiserß  å  s¾   € ð Ò#�7×#Ñ#€DÜ	�TÓ	€Bä'ØÐ!Ð#8ôð #Ð.Ü&1Ð2MÓ&NÐ#ä	Ø
Ø3Ø$?ØØ+Ø'ô
€Bð
Ô	ØØØ/Ø3ô	
ð
 	ó

€Bô Œu�dÔð	
ÔÜ”E˜4Ó Ø $Ø"7ô	
ð ô		ð
 €Irg   Úldexp)rÎ   rK  )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     €re   Úcompute_ldexpz%ldexp_lowering.<locals>.compute_ldexp'  s   ø€ Ù˜A˜q“>Ð!rg   c                ó´   •— t        j                  |‰«      }t        j                  d‰«      }t        j                  ||«      }t        j                  | |«      S )Ng       @)rQ   rò   rS  Úpowrz  )r¥   rã  Ú
n_out_typeÚtwoÚ
pow_resultÚ	out_dtypes        €re   Úcompute_fallbackz(ldexp_lowering.<locals>.compute_fallback/  sD   ø€ ÜŸ™ a¨Ó3ˆJÜ—,‘,˜s IÓ.ˆCÜŸ™  jÓ1ˆJÜ—7‘7˜1˜jÓ)Ð)rg   rª  )r=   r»   rw  r{   rÂ   r…  rÀ   Úfloat32)
r¥   rã  rÐ  Ún_dtypeÚ
x_is_floatÚn_is_intrå  rì  rä  rë  s
           @@re   Ú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óð 	rg   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ö   ©rt   rú   ró  s     €re   Úfrexp0zregister_frexp.<locals>.frexp0@  ó   ø€ Ù�dÐ%˜fÑ% aÑ(Ð(rg   c                 ó   •—  ‰| i |¤Žd   S ©Nr.   rö   rö  s     €re   Úfrexp1zregister_frexp.<locals>.frexp1C  rø  rg   rª  c                 ó0   •—  ‰d   | i |¤Ž ‰d   | i |¤ŽfS ©Nr   r.   rö   )rt   rú   Úpw_fnss     €re   r   zregister_frexp.<locals>.fnK  s.   ø€ Øˆv�a‰y˜$Ð) &Ñ)¨9¨6°!©9°dÐ+E¸fÑ+EÐEÐErg   NrP  )
r=   r…  r{   Úint32r$  rÎ  ró  rí   rÂ  r˜   )rÜ   r÷  rû  r   ró  rþ  s       @@re   Úregister_frexpr   ;  s–   ù€ à€DÜ˜Ó €Eô)ô)ô 	�vÓÜ�v´U·[±[ÔAð€Fô
Fð
Ô	Ü�
‰
ó
àó

€Bô Œu�dÔð	
ÔÜ”E˜4Ó Ø $ô	
ð ô	ð €Irg   c                ó:   — t        |||¬«      }t        | |«      }|S )N©r€  rŠ  )r•  r  )rÖ   Úpointwise_lowering_fnr€  rŠ  r   s        re   Úregister_foreach_pointwiser  ]  s(   € ô 
 Ø¨;À\ô
€Bô 
$ G¨RÓ	0€BØ€Irg   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—   )rQ   Úwhere©rt   s    re   r   zwhere.<locals>.fnl  s   € Ü�y‰y˜$ÐÐrg   r.   r,   rP  r   rª  )rk   r5  r´   Úconstant_likerÔ   r   rE  rj   rB   r  rþ   r  rÈ   r1   ró   r7   rç   ri   rÉ   r…  rò   )	r’   rî   r/  r   rt   r·   rs   r¥   Úindicess	            re   r  r  j  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 )Nr.   r   c              3  ó<   K  — | ]  }|j                  «       –— Œ y ­wr—   )rÉ   r  s     re   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—   )rR   r]   râ   r+  ©r™   rî   r/  s      re   r›   z$broadcast_tensors.<locals>.<genexpr>‘  sP   è ø€ ò .
ñ ��1ô �G‰G×Ñ×1Ñ1°!Ó4Ü�w‰w×Ñ×4Ñ4°QÓ7õ8ñ.
ùs   ‚A A")rÈ   rk   ri   rž   rþ   r  Úreducer2  rÉ   r  r  r-  ro   )rJ  ra   r¡  r¥   Úsizess        re   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Õð
ð €Nrg   c                ó   — | S r—   rö   r¿   s    re   Únopr  ›  s   € à€Hrg   Ú
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—   )rR   r]   râ   Ú	guard_int©r™   Úds     re   r›   zsqueeze.<locals>.<genexpr>­  s%   è ø€ Ò>°Q”1—7‘7×#Ñ#×-Ñ-¨a×0Ñ>ùs   ‚35r.   )rk   rB   rA   rç   rm   r´   r¼   r½   rR   r]   râ   r  rž   r   rÈ   rÉ   r&   rj   Úguard_or_falseÚEqro   rÏ  )r¥   rÌ   ÚdimsÚ	new_shaper  Úss         re   Úsqueezer  ¤  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ÀÐArg   c                ó,   — t        t        | |«      «      S r—   )r«  r  )r¥   rÌ   s     re   Úsqueeze_copyr!  »  s   € ä”˜˜C“Ó!Ð!rg   c                óˆ   — t        | |«      }t        | t        «      sJ ‚t        |t        «      sJ ‚|j                  | _        | S r—   )r  rk   rB   rm   ©r¥   rÌ   Úvals      re   Úsqueeze_r%  À  s=   € ä
�!�S‹/€CÜ�aœÔ#Ð#Ð#Ü�cœ9Ô%Ð%Ð%Ø�X‰X€A„FØ€Hrg   c                ó¨   — t        | «      rt        | dt        j                  ¬«      S t	        d«      } t        |t        j                  ¬«      | «      S )NFr¶   Úisinfrª  ©rÀ   Ú	full_liker{   rÂ   r=   r…  ©r¥   r   s     re   r'  r'  É  ó?   € ä�qÔÜ˜˜E¬¯©Ô4Ð4Ü	�WÓ	€BØ?Œ>˜"´E·J±JÔ?ÀÓBÐBrg   c                ó¨   — t        | «      rt        | dt        j                  ¬«      S t	        d«      } t        |t        j                  ¬«      | «      S )NFr¶   Úisnanrª  r(  r*  s     re   r-  r-  Ñ  r+  rg   c                óf   — t        | «      rt        | «      S t        d«      } t        |«      | «      S )NÚceil©rÀ   r«  r=   r…  r*  s     re   r/  r/  Ù  s/   € ä�qÔÜ�Q‹xˆÜ	�VÓ	€BØŒ>˜"Ó˜aÓ Ð rg   c                óf   — t        | «      rt        | «      S t        d«      } t        |«      | «      S )NÚfloorr0  r*  s     re   r2  r2  á  ó/   € ä�qÔÜ�Q‹xˆÜ	�WÓ	€BØŒ>˜"Ó˜aÓ Ð rg   c                óf   — t        | «      rt        | «      S t        d«      } t        |«      | «      S )NÚroundr0  r*  s     re   r5  r5  é  s/   € ä�qÔÜ�Q‹xˆä˜Ó!ˆØ!Œ~˜bÓ! !Ó$Ð$rg   c                óf   — t        | «      rt        | «      S t        d«      } t        |«      | «      S )NÚtruncr0  r*  s     re   r7  r7  ò  r3  rg   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  rOt        |«      sD| j!                  t        j                  j                  j                  t        |«      «      |z  «       t        t	        j
                  | j"                  t        |«      «      «      S rõ  )rN  rk   r1   r{  r7   rç   rž   rB   ri   rÉ   r#   rR   r]   râ   Úguarding_hint_or_throwrO   Ú
mark_reuserm   )r¥   r  Úx_size_products      re   r-  r-  ú  s  € ä˜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Ø!ñ"ôô ”Z×&Ñ& q§v¡v¬u°U«|Ó<Ó=Ð=rg   c                ó–   — t        |«      }|D ]  }d||<   Œ	 | }t        |«      D ]  \  }}|dk7  sŒt        ||«      }Œ t        ||«      S ©Nrh  )ri   rj   Ú	unsqueezer-  )rî   ÚshapeÚbroadcast_dimensionsr  Úbroadcast_dimensionr  rU  r¥   s           re   Úbroadcast_in_dimrB    sf   € äˆU‹€AØ3ò $ÐØ!#ˆÐ
Òð$ð 	
€AÜ˜A“,ò "‰ˆˆQØ�‹7Ü˜!˜SÓ!‰Að"ô �!�UÓÐrg   c                ó6   — t        | |j                  «       «      S r—   )r-  rÉ   )r¥   r1  s     re   Ú	expand_asrD  #  s   € ä�!�Q—Z‘Z“\Ó"Ð"rg   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·   rv   c              3  ó:   K  — | ]  \  }}|d k(  xs |d k(  –— Œ y­w©r.   Nrö   r  s      re   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È   ri   r  r¼   r)  ÚZeror+   )r:  rs   Úold_sizeÚrepeatsÚx_loaders     €€€re   r\  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ñ ˜‹Ðrg   r]  )ri   rÉ   rÈ   r¼   r)  r*  rÏ  r  Úemptyr»   rn   r  r  r«  r-  r#   rR   r]   râ   r9  rO   r:  r_  r?   rç   )	r¥   rM  Únew_sizeÚzero_tensorrs   r\  Úold_size_productrL  rN  s	    `     @@re   ÚrepeatrS  (  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‹~ô	ð rg   c                óT   — t        t        j                  | j                  |«      «      S r—   )rB   rD   rç   rm   )r¥   r  s     re   rÏ  rÏ  `  s   € ô ”T—[‘[ §¡¨Ó/Ó0Ð0rg   c                óº   — t        | t        «      sJ ‚t        |t        t        f«      sJ ‚t        t	        j
                  | j                  t        |«      «      «      S r—   )rk   rB   ri   rž   r>   rç   rm   )r¥   r  s     re   ÚpermuterV  g  sF   € ä�aœÔ#Ð#Ð#Ü�dœT¤5˜MÔ*Ð*Ð*Ü”[×'Ñ'¨¯©´°d³Ó<Ó=Ð=rg   c           
     óÌ	  — ddl m}m} t        | t        «      sJ ‚t        | |d«      }| j                  «       |   }t        j                  |«      }t        |t        j                  «      s|dkD  sJ |«       ‚	 |dk(  r1t        j                  j                  j                  ||«      r|dk(  r| S dd„}	d\  }
}|}|r[ |	||d«      }
|�;t        j                  j                  j                  |t         j"                  «      r|}n
 |	|||«      }|
�|�|
|}}d}|�sIt        j                  j$                  } |t        j                  j                  j&                  |�|j(                  j+                  di «      ni «      }|r¬|j-                  «       D ]™  \  }}| |d«      t/        j0                  |«      fk(  r]t3        j4                  |||||«      }t        j                  j7                  |«      |_        t        j                  j;                  |«       Œƒ| |d	«      fk(  sŒ�t=        d
«      ‚ t	        t2        j>                  jA                  | jB                  |||||¬«      «      S |sJ ‚ |t        j                  j                  j&                  t        j                  j$                  j(                  d   «      }|€J ‚tE        |«      dk  sJ |«       ‚d\  }}|j-                  «       D ]7  \  }}| |d«      t/        j0                  |«      fk(  r|}Œ)| |d	«      fk(  sŒ6|}Œ9 |
�|�J ‚t3        j4                  ||||| j                  «       |   «      }t        j                  j7                  |«      |_        t        j                  j;                  |«       |}| jG                  «       €| jI                  «        |
�6|�J ‚| jK                  «       jL                  |
| jO                  «       |   z  z   }nšt3        jP                  ||| jK                  «       jL                  | jO                  «       |   | j                  «       |   d¬«      }t        j                  j7                  |«      |_        t        j                  j;                  |«       |}tS        | j                  «       «      }tS        | jO                  «       «      }|||<   ||xx   |z  cc<   tU        | |||«      S # t        $ r Y �Œ5w 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   )ÚCallMethodKeyr%   r.   c           	     óÌ  — | €|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        j                  | |«      S  |t        j
                  | d«      «      rt        j                  | |z   d«      S y )Nc                óT   — t         j                  j                  j                  | «      S r—   )rR   r]   râ   r  r¿   s    re   rC  z5slice_.<locals>.compute_slice_index.<locals>.<lambda>“  s   € ”q—w‘w×'Ñ'×6Ñ6°qÓ9€ rg   r   )	r¼   r-  ÚAndÚGeÚLeÚLtÚGtÚMinÚMax)r:  rè   rÄ  r   s       re   Ú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Ù”—‘˜  Ó&Ô'ØÙ”—‘˜ Ó"Ô#ä—9‘9˜U DÓ)Ð)Ù”—‘˜ Ó"Ô#ä—9‘9˜U T™\¨1Ó-Ð-Ørg   ©NNFÚunbacked_bindingsrè   Ústorage_offsetzWUnexpected storage_offset unbacked binding when both start and end indices are resolved©Úclampr,   Tr—   )+Ú%torch.fx.experimental.symbolic_shapesrX  r%   rk   rB   Ú_validate_dimrÉ   r¼   r-  r½   rR   r]   râ   Ústatically_known_leqÚ	TypeErrorÚstatically_known_equalsÚsysÚmaxsizer^   Ú	shape_envr|  r}  rû   ÚpytreeÚSequenceKeyr1   ÚDynamicSliceSizeÚregister_bufferrÜ   Úregister_operationrŒ   Ú	SliceViewrç   rm   rÈ   Úmaybe_get_layoutr�  Ú
get_layoutÚoffsetÚ
get_strideÚDynamicSelectStorageOffsetri   Ú
as_strided)r¥   rÌ   ÚstartÚendÚsteprg  rX  r%   rè   rb  Ústart_indexÚ	end_indexÚambiguous_slicer^   Únode_unbacked_bindingsÚsymÚkeypathÚb_sizerd  Úsym_sizeÚsym_storagerP  Únew_storage_offsetÚ	b_storageÚ	new_sizesÚnew_stridess                             re   Úslice_rŒ  p  s”  € ÷ô
 �aœÔ#Ð#Ð#Ü
˜˜3 Ó
"€CØ�:‰:‹<˜Ñ€DÜ�<‰<˜Ó€DÜ�dœEŸJ™JÔ'¨4°!ª8Ð9°TÓ9Ð3ðà�QŠJÜ—‘× Ñ ×5Ñ5°d¸CÔ@Ø˜’	àˆHó
ð. (Ñ€K�ð
 €OÙÙ)¨%°°qÓ9ˆð ˆ?œqŸw™w×/Ñ/×GÑGØ”—‘ô 
ð ‰Iá+¨C°°tÓ<ˆIØÐ" yÐ'<Ø$ i�3ˆEØ#ˆOâô —w‘w×+Ñ+ˆÙ!:Ü�G‰G×Ñ×&Ñ&àÐ'ð ×Ñ×!Ñ!Ð"5°rÔ:àó	"
Ðñ "Ø 6× <Ñ <Ó >ò ‘��WØ™}¨VÓ4´f×6HÑ6HÈÓ6MÐNÒNÜ×0Ñ0°°e¸SÀ$ÈÓM�FÜ"#§'¡'×"9Ñ"9¸&Ó"A�F”KÜ—G‘G×.Ñ.¨vÕ6Ø¡Ð/?Ó!@Ð BÓBô )ð=óð ðô Ü�L‰L×Ñ §¡¨¨U°C¸ÀUÐÓKó
ð 	
ñ €Lˆ5Ù1Ü	�‰×Ñ×"Ñ"¤A§G¡G×$8Ñ$8×$=Ñ$=Ð>QÑ$RóÐð Ð(Ð(Ð(ÜÐ Ó! QÒ&Ð9Ð(9Ó9Ð&Ø&Ñ€HˆkØ)×/Ñ/Ó1ò ‰ˆˆWØ‘} VÓ,¬f×.@Ñ.@ÀÓ.EÐFÒFØ‰HØ™Ð'7Ó8Ð:Ó:Ø‰Kð	ð Ð )Ð"3Ð3Ð3Ü× Ñ ØØØØØ	�
‰
‹�SÑó€Fô —'‘'×)Ñ)¨&Ó1€F„KÜ‡G�G×Ñ˜vÔ&Ø€Hà×ÑÓÐ#à	�	‰	ŒàÐàÐ"Ð"Ð"ØŸ\™\›^×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Ø�Ó˜ÑÓÜ�a˜ KÐ1CÓDÐDøôW ò Úðús   Á75S Ó	S#Ó"S#c                óæ  — d }d }t        | t        «      rZt        | j                  t        j                  «      r6| j                  «       }| j                  }| j                  j                  «       } | j                  «        t        j                  | «      st        d| › d�«      ‚t        j                  | «      \  }}t        j                  |r|n|j                  |r|n|j                  |D �cg c]  }t        j                  |«      ‘Œ c}|D �cg c]  }t        j                  |«      ‘Œ c}t        j                  |xs d«      «      }	t        t        j                   ||	¬«      «      S c c}w c c}w )Nzunrealized as_strided(z, ...)r   ©rm   Úlayout)rk   rB   rm   r1   r5   rn   r·   Úunwrap_viewr�  Úis_storage_and_layoutr�   Úas_storage_and_layoutÚFixedLayoutrv   r¼   r-  rá   )
r¥   rè   Ústridere  Ú
new_deviceÚ	new_dtypeÚstorageÚ
old_layoutr  Ú
new_layouts
             re   r{  r{    s  € à€JØ€IÜ�!”YÔ¤J¨q¯v©v´r·{±{Ô$Cð —\‘\“^ˆ
Ø—G‘Gˆ	Ø�F‰F×ÑÓ ˆØ‡I�I„KÜ×#Ñ# AÔ&Ü!Ð$:¸1¸#¸VÐ"DÓEÐEÜ×2Ñ2°1Ó5Ñ€GˆZÜ—‘Ù ‰
 j×&7Ñ&7Ù‰	 J×$4Ñ$4Ø"&Ö'˜QŒ�‰�a�Ò'Ø"(Ö)˜QŒ�‰�a�Ò)Ü�‰�^Ò( qÓ)ó€Jô ”R×'Ñ'¨W¸ZÔHÓIÐIùò	 	(ùÚ)s   Ã,E)ÄE.c                ód   — t        | t        «      sJ ‚t        | |||«      j                  | _        | S r—   )rk   rB   r{  rm   )r¥   rè   r”  re  s       re   Úas_strided_r›  6  s/   € ä�aœÔ#Ð#Ð#Ü˜˜4 ¨Ó8×=Ñ=€A„FØ€Hrg   c                ó4   — t        | |||«      }t        |«      S r—   )r{  r«  )r¥   rè   r”  re  r¨  s        re   Úas_strided_copyr�  =  s   € ä˜˜4 ¨Ó8€FÜ�‹=Ðrg   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   rh  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   r.   c                 ó   •—  ‰‰    ‰«      S r—   rö   )rs   Úidx_loadÚinputs_loaderss   €€€re   rC  z1pointwise_cat.<locals>.inner_fn.<locals>.<lambda>o  s   ø€ Ð-˜N¨1Ñ-¨hÓ7€ rg   ç        rh  r,   )rQ   rR  r{   Úint64r  rÈ   rS  ÚgeÚltÚand_ro   ri   r)   Úmaskedr  )rU  Úidx_dimÚmasksÚmasked_loadsr|  r}  Ú
start_condÚend_condÚmaskÚnext_valrs   r¡  rÌ   rJ  r¢  Úinputs_rangess             @@€€€€re   r\  zpointwise_cat.<locals>.inner_fnM  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ð	ð ˆrg   r]  )ro   rÉ   r_  ri   r?   rç   rn   r»   )rJ  rÌ   Úprev_endrË   r\  rP  r¢  r°  s   ``    @@re   Úpointwise_catr²  C  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 )Nr.   ú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 r?  )Ú_create_constantsr{   rí  r·   rQ   rò   rÿ  Ú
reciprocalr5  ÚmaximumÚminimum)rU  Ú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             €€€€€€€€€re   r\  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Ó+Ð+rg   r]  )rÈ   rÉ   r»   r{   rG  rò   rí  r_  r?   rç   rn   )r’  rÈ  rÊ  rÄ  rÇ  rÆ  r·   r\  rÅ  rÉ  rË  s    `````` @@@re   Ú)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Ð÷,ô ,ô" ×ÑØ×ÑÓ!ØØØ�~‰~Óô	ð rg   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—   )r1   ÚComputedBufferÚforce_realizerQ   Údevice_assert_asyncr_  )r:  r’   r“   s    €€re   r\  z_assert_async.<locals>.inner_fn¿  sO   ø€ Ü×Ñ×,Ñ,Ó.ñ 	KÜ×*Ñ*Ð+=¨4×+;Ñ+;Ó+=¸eÓ+DÀcÓJ÷	K÷ 	Kò 	Kús    *AÁAr]  )
r�  rò   r{   rÂ   r?   rç   rn   r»   ri   rÉ   )r’   r“   r\  Úassertion_ops   ``  re   Ú_assert_asyncrÓ  »  sm   ù€ Ø‡L�L„NÜ�Dœ%Ÿ*™*Ó%€DõKô ×#Ñ#Ø�‰Ó Ø�n‰nÓØÜ�D—M‘M“OÓ$ô	€Lð ×ÑÔØÐrg   c                ó   — t        | |«      S r—   ©rÓ  r‘   s     re   Úlower_assert_asyncrÖ  Í  ó   € ä˜˜sÓ#Ð#rg   c                ó   — t        | |«      S r—   rÕ  r‘   s     re   Úlower_assert_functional_asyncrÙ  Ò  r×  rg   )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 )	Nr.   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í  rQ   rò   Úsub)rU  r½  r’  r¾  r¿  r$  rÄ  rÅ  rë  rÈ  rÉ  rÊ  rË  s         €€€€€€€re   r\  z=quantized_decomposed_dequantize_per_channel.<locals>.inner_fnõ  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 	Ó*ˆØˆ
rg   r]  ©	rÈ   rÉ   r»   r{   rí  r_  r?   rç   rn   )r’  rÈ  rÊ  rÄ  rÇ  rÆ  r·   rë  r\  rÅ  rÉ  rË  s    ```   ` @@@re   Ú+quantized_decomposed_dequantize_per_channelrà  ×  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Ð÷ò ô ×ÑØ×ÑÓ!ØØØ�~‰~Óô	ð rg   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í  rQ   r5  r¼  r»  rò   )rU  r¾  r¿  r’  rÂ  r$  rÀ  rÁ  rÃ  r·   rÅ  rÆ  rÇ  s            €€€€re   r\  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Ó+Ð+rg   ©r¾  r¿  r]  )r»   r{   rG  rò   rí  r_  r?   rç   rn   r  r#  r5  r´   rÉ   )r’  r¾  r¿  rÇ  rÆ  r·   r\  rÅ  s      ``` @re   Ú0quantized_decomposed_quantize_per_tensor_defaultrå    s¼   û€ ð ‡�ÓœEŸN™NÒ*Ü˜¤§¡Ó.ˆØ�?‰?Ó¤§¡Ò-ð Ø
FÀuÇÁÓGXÐFYÐZóÐ-ð ×$Ñ$Ó&€L÷,ô ×ÑØ×ÑÓ!ØÜ×"Ñ"ØœE %›L´S¸³_ô
ð �~‰~Óôð rg   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 r?  )r¹  r{   rí  rQ   rÞ  rò   )rU  r¾  r¿  r’  r$  rÅ  rë  s        €€re   r\  zDquantized_decomposed_dequantize_per_tensor_default.<locals>.inner_fnI  s]   ø€ Ù˜SÓ!ˆÜ-¨e°ZÄuÇ}Á}ÔUÑˆˆzÜ�g‰g”c—l‘l 5¬%¯-©-Ó8¸*ÓEÈÑMˆÜ�l‰l˜3 	Ó*ˆØˆ
rg   rä  r]  )r»   r{   rí  r_  r?   rç   rn   r  r#  r5  r´   rÉ   )	r’  r¾  r¿  rÇ  rÆ  r·   rë  r\  rÅ  s	         ` @re   Ú2quantized_decomposed_dequantize_per_tensor_defaultrè  3  s«   ù€ ð �?‰?Ó Ò%ð Ø
(¨¨Ð/@ÀÇÁÓARÐ@SÐTóÐ%ð ÐÜ—M‘Mˆ	à×$Ñ$Ó&€Lõô ×ÑØ×ÑÓ!ØÜ×"Ñ"ØœE %›L´S¸³_ô
ð �~‰~Óôð rg   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   r.   ú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 )Nr.   ©r   rö   rà   r¶   )rÈ   rÉ   r·   r{   rí  rQ   rò   rä   rT  rº  Úround_to_intr5  r¹  r¼  r»  )rU  r’  Ú_scaleÚ_zero_pointr$  rÀ  rÁ  rÃ  rv   r·   rÅ  rÆ  rÇ  r¾  Úscale_loaderr¿  Úzero_point_loaders           €€€€€€€€€re   r\  zAquantized_decomposed_quantize_per_tensor_tensor.<locals>.inner_fnw  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Ó+Ð+rg   r]  )r»   r{   rG  rò   rí  rÈ   rÉ   r_  rn   r?   rç   )r’  r¾  r¿  rÇ  rÆ  r·   r\  rv   rÅ  rñ  rò  s    ````` @@@@re   Ú/quantized_decomposed_quantize_per_tensor_tensorró  Z  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÷,ô ,ô  ×ÑØ×ÑÓ!ØØØ�~‰~Óô	ð rg   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   r.   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 )Nr.   rí  rö   )rÈ   rÉ   r·   r{   rí  rQ   rò   rÞ  )rU  r’  rï  rð  r$  rÅ  rë  r¾  rñ  r¿  rò  s        €€€€€€re   r\  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 	Ó*ˆØˆ
rg   r]  rß  )r’  r¾  r¿  rÇ  rÆ  r·   rë  r\  rÅ  rñ  rò  s    ``   ` @@@re   Ú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Ð÷
ñ 
ô ×ÑØ×ÑÓ!ØØØ�~‰~Óô	ð rg   c                ó  ‡ ‡‡‡‡‡‡‡— ‰ 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 t        ‰ d   |d«      }t        ‰ dt        j                  iŽ}‰ D �cg c]  }t        ||«      ‘Œ c}Š dd„Šd„ Šˆˆˆfd	„Št!        ˆfd
„‰ D «       «      }dˆˆfd„Št"        j$                  rt'        ‰ |«      S |r)t)        t*        j,                  j/                  ‰ |«      «      S ˆˆfd„Šd}dŠdd„Št        ‰ «      |k  s1t        ‰ «      t"        j0                  k  r¦t        ˆˆfd„‰ D «       «      r‘t        ˆfd„t2        j4                  j6                  D «       «      }	t!        ˆfd„‰ D «       «      xr |	}
dˆ ˆfd„} |«       }t        ˆfd„‰ D «       «      xr t!        ˆfd„‰ D «       «       }|s|
s|r|st'        ‰ |«      S t)        t*        j,                  j/                  ‰ |«      «      S 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     re   r›   zcat.<locals>.<genexpr>Å  s.   è ø€ ò Ø;@ˆ�‰ÓœeŸj™j¬%¯+©+Ð6Ô6ñùs   ‚:<c              3  óT   K  — | ]   }t        |j                  «       «      d k(  –— Œ" y­w)rª   N)rÈ   rÉ   rû  s     re   r›   zcat.<locals>.<genexpr>Ì  s!   è ø€ Ò>¨eŒs�5—>‘>Ó#Ó$¨Õ)Ñ>ùs   ‚&(r.   rÎ   c                ó  — t        | t        «      rJt        | j                  t        j                  «      r| j                  j                  «       S | j                  S t        | t        j                  «      r| j                  S | S r—   )rk   rB   rm   r1   r5   r�  rå   r¿   s    re   Úunwrap_tensorzcat.<locals>.unwrap_tensorÙ  sV   € Ü�aœÔ#Ü˜!Ÿ&™&¤"§+¡+Ô.Ø—v‘v×)Ñ)Ó+Ð+à—v‘v�ä�aœŸ™Ô'Ø—6‘6ˆMàˆrg   c                ó‚   — t        | t        j                  «      xr$ t        | j                  t        j                  «      S r—   )rk   r1   rÏ  rm   r@   )rw   s    re   Úis_reductionzcat.<locals>.is_reductionå  s)   € Ü˜!œR×.Ñ.Ó/ÒT´J¸q¿v¹vÄrÇ|Á|Ó4TÐTrg   c                óð   •— t        | t        t        j                  f«      r ‰ ‰| «      «      S  ‰| «      xs> t        | t        j                  «      xr" t        ˆfd„| j                  «       D «       «      S )Nc              3  óh   •K  — | ])  } ‰t         j                  j                  |«      «      –— Œ+ y ­wr—   )rR   r]   Ú
get_buffer)r™   ÚreadÚcan_fuse_reductions     €re   r›   z2cat.<locals>.can_fuse_reduction.<locals>.<genexpr>î  s-   øè ø€ ò àñ #¤1§7¡7×#5Ñ#5°dÓ#;×<ñùs   ƒ/2)rk   rB   r1   rå   r?   r  Úget_read_names)rw   r  r   rþ  s    €€€re   r  zcat.<locals>.can_fuse_reductionè  sh   ø€ Ü�aœ)¤R§]¡]Ð3Ô4Ù%¡m°AÓ&6Ó7Ð7á˜‹Oò Ü˜!œRŸ\™\Ó*ò Üó à×,Ñ,Ó.ôó ð	
rg   c              3  ó.   •K  — | ]  } ‰|«      –— Œ y ­wr—   rö   ©r™   rw   r  s     €re   r›   zcat.<locals>.<genexpr>õ  s   øè ø€ ÒB°aÑ.¨q×1ÑBùó   ƒ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)	r1   r‘  r’  ÚConcatKernelÚcan_realize_into_without_copyrk   rB   rå   r?   )r¥   r—  Ú_Úshould_lower_cat_inputrþ  s      €€re   r  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œŸ™Ô&Øàrg   c                óH  •— t        | t        t        j                  f«      r ‰ ‰| «      «      S t        | t        j                  «      sy| j                  «       j                  }| j                  «       D ]*  }| ‰t        j                  j                  |«      «      z  }Œ, |S rõ  )rk   rB   r1   rå   r?   Úinner_fn_opcountÚnum_opsr  rR   r]   r  )r¥   Úcountr  Úop_countrþ  s      €€re   r  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ð ˆrg   r®   r,   c                ón   — | t         j                  j                  t         j                  j                  fv S r—   )rÎ  ÚcatrÄ  Úconstant_pad_nd©r`   s    re   Úadditional_pointwise_opsz%cat.<locals>.additional_pointwise_ops#  s(   € Ø”d—h‘h×&Ñ&¬×(<Ñ(<×(DÑ(DÐEÐEÐErg   c              3  ó4   •K  — | ]  } ‰|«      ‰k  –— Œ y ­wr—   rö   )r™   rw   ÚMAX_SIMPLE_OP_COUNTr  s     €€re   r›   zcat.<locals>.<genexpr>(  s   øè ø€ ÒC°q‘˜“Ð2Õ2ÑCùs   ƒc              3  ó6   •K  — | ]  }t        |‰«      –— Œ y ­wr—   ©rI   )r™   Úuser  s     €re   r›   zcat.<locals>.<genexpr>*  s!   øè ø€ ò 
àô ˜SÐ":×;ñ
ùrœ   c              3  ó.   •K  — | ]  } ‰|«      –— Œ y ­wr—   rö   ©r™   rË   r  s     €re   r›   zcat.<locals>.<genexpr>1  s   øè ø€ Ò>°Ñ& s×+Ñ>ùr	  c                 ó¤  •‡‡— t         j                  Š‰€y‰j                  d   } t        | t        t
        f«      r| }n)t        | t        j                  j                  «      r| g}nyˆˆfd„Št        |‰«      D ]T  \  }}t        |d«      rt        |j                  «      dk  rŒ+t        ˆfd„|j                  D «       «      r y ‰|«      sŒT y y)NFr   c                ó”   •— t        | t        t        j                  f«      r ‰ ‰| «      «      S t        | t        j                  «      S r—   )rk   rB   r1   rå   r?   )r¥   Úis_unrealized_pointwiserþ  s    €€re   r#  zKcat.<locals>.any_input_has_multi_consumers.<locals>.is_unrealized_pointwiseG  s7   ø€ Ü˜a¤)¬R¯]©]Ð!;Ô<Ù2±=ÀÓ3CÓDÐDÜ! !¤R§\¡\Ó2Ð2rg   r_   r.   c              3  ó>   •K  — | ]  }|‰usŒt        |«      –— Œ y ­wr—   r  )r™   Úur^   s     €re   r›   z=cat.<locals>.any_input_has_multi_consumers.<locals>.<genexpr>Q  s   øè ø€ ÒW¨qÀÈ,ÒAVÔ'¨×*ÑWùs   ƒ	�T)rR   r^   rt   rk   ri   rž   r{   ÚfxÚNoder  rí   rÈ   r_   r  )Úfx_argsÚinput_nodesrÐ   Úir_inputr^   r#  rJ  rþ  s       @@€€re   Úany_input_has_multi_consumersz*cat.<locals>.any_input_has_multi_consumers;  sº   ú€ ÜŸ>™>ˆLØÐ#ØØ"×'Ñ'¨Ñ*ˆGÜ˜'¤D¬% =Ô1Ø%‘Ü˜G¤U§X¡X§]¡]Ô3Ø&˜i‘àõ3ô
 "% [°&Ó!9ò  ‘��XÜ˜s GÔ,´°C·I±I³À!Ò0CØô ÓW°C·I±IÔWÔWÙñ +¨8Õ4Ùð ð rg   c              3  ó.   •K  — | ]  } ‰|«      –— Œ y ­wr—   rö   r   s     €re   r›   zcat.<locals>.<genexpr>\  s   øè ø€ ò "
Ø,/Ñ" 3×'ñ"
ùr	  c              3  ó.   •K  — | ]  } ‰|«      –— Œ y ­wr—   rö   r  s     €re   r›   zcat.<locals>.<genexpr>^  s   øè ø€ Ò<°Ñ(¨×+Ñ<ùr	  )r¥   zTensorBox | ir.StorageBoxrÏ   ú	ir.IRNode©rÏ   rÂ   ©r`   útorch._ops.OpOverload)rn   rä   r  r�  Úrequire_channels_lastrÎ  r  rÁ  rÄ  rÈ   r«  ri  rÔ   r   rE  rò   r  r/   Úforce_pointwise_catr²  rB   r1   r  rç   Úmax_pointwise_cat_inputsrR   r^   r_   )rJ  rÌ   Ú
cpu_devicer’  r  r·   rË   Úfusable_reductionÚMAX_COMPLEX_POINTWISE_CATÚpointwise_usesÚfuse_pointwise_user+  Úhas_multi_consumersÚhorizontal_fuse_catr  r  r  r   r  r  rþ  s   `             @@@@@@@re   r  r  Á  sY  ÿ€ ð ˜‘×%Ñ%Ó'×,Ñ,°Ñ5€JÙ”cñ ØDJôô ð
 ò 	ˆEØ�M‰M�Oð	äÑ>°vÔ>Ô>Ü-¬d¯h©hÐ@¸Ò@‰IˆF�AØ1Ô¤§¡× 0Ñ 0Ó1°&¸#Ó>Ð>ä
ˆ6ƒ{�aÒÜ�V˜A‘YÓÐä
˜˜q™	 3¨Ó
*€CÜØ	ðÜ%D×%LÑ%Lñ€Eð /5Ö5 sŒh�s˜EÕ"Ò5€Fó
òUö

ô ÓB¸6ÔBÓBÐöô ×!Ò!Ü˜V SÓ)Ð)ñ ÜœŸ™×/Ñ/°¸Ó<Ó=Ð=õð$ !"ÐØÐóFô ˆ6ƒ{Ð/Ò/Ü	ˆV‹œ×7Ñ7Ò	7ÜÔC¸FÔCÔCäó 
ä—~‘~×+Ñ+ô
ó 
ˆô Ó>°vÔ>Ó>ÒQÀ>ð 	ö	ñ> <Ó=Ðä!ó "
Ø39ô"
ó 
ò =äÓ<°VÔ<Ó<Ð<ð 	ñ #ÙÑ#6Ñ?Pä  ¨Ó-Ð-ä”R—_‘_×+Ñ+¨F°CÓ8Ó9Ð9ùò[ 6s   Ã6J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)rU  Úrankc                 ó   •— d‰ › d‰› �S )Nz(diagonal dimensions cannot be identical z, rö   )Údim1Údim2s   €€re   rC  zdiagonal.<locals>.<lambda>o  s   ø€ Ð HÈÈÈbÐQUÐPVÐW€ rg   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 )Nrh  r   r.   r,   )rÈ   r  )
rU  Údiag_idxÚoriginal_idxÚcur_dimr  Úbase_idxr?  r@  Únum_dimsÚoriginal_shapes
        €€€€€re   Ú	reindexerzdiagonal.<locals>.reindexer�  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ØÐrg   )rÉ   rÈ   r   r   rR   r]   râ   Úevaluate_exprr¼   r^  Úevaluate_maxÚevaluate_minrj   ro   rB   r1   ÚGenericViewrç   )r’  rx  r?  r@  Úoffset_negativeÚ	diag_sizers   r  r  rH  rE  rF  rG  s     ``      @@@re   ÚdiagonalrO  g  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«  rO  )r’  rx  r?  r@  s       re   Údiagonal_copyrQ     s   € ä”˜% ¨¨tÓ4Ó5Ð5rg   c                óP   — t        | «      }t        ||||«      }t        ||«       |S r—   )r«  rO  Ú	mutate_to)r’  Úsrcrx  r?  r@  r0  ra   s          re   Údiagonal_scatterrU  ¥  s*   € ä�5‹\€FÜ�f˜f d¨DÓ1€FÜˆf�cÔØ€Mrg   c                óh  — 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        |«      rg| j                  «        | j                  «       }| j                  «       }| j                  «       j                  ||   |z  z   }||= ||= t        | |||«      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        | |||«      S )Nr   r.   Frf  rd  )r¼   r-  rÉ   rR   r]   râ   r  r^  r\  r$   r�  ry  rw  rx  r{  rŒ  r  r%   ro  r^   r|  rÈ   rF  Úiterrû   r1   rz  rs  rÜ   rt  )r¥   rÌ   rU  rè   Úactual_indexrP  Ú
new_striderˆ  Úslice_resultrd  Úunbacked_offset_symr  Úbuffers                re   Úselectr]  ­  sE  € ä
�,‰,�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�Ü˜a ¨:Ð7IÓJÐJô " ! 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ˆÜ�a˜ :Ð/AÓBÐBrg   c           
     ór  — t        | |d«      }|}t        |t        t        f«      s`| j	                  «       |   }t
        j                  j                  j                  t        ||z   dz
  |«      «      }|g|z  }||dz
  |z  z
  |d<   g }d}|D ](  }||z   }	|j                  t        | |||	d¬«      «       |	}Œ* |S )Nr   r.   rh  Frf  )ri  rk   ri   rž   rÉ   rR   r]   râ   r  r(   ro   rŒ  )
r¥   r  rÌ   Úsizes_Úx_sizeÚchunksr¨  r|  rè   r}  s
             re   Úsplitrb  î  sÍ   € ä
˜˜3 Ó
"€CØ€Fô �eœd¤E˜]Ô+Ø—‘“˜cÑ"ˆÜ—‘×!Ñ!×+Ñ+¬H°V¸e±^ÀaÑ5GÈÓ,OÓPˆØ�˜6Ñ!ˆà˜v¨™z¨UÑ2Ñ2ˆˆr‰
ð €FØ€EØò ˆØ�d‰lˆð 	�‰”f˜Q  U¨C°uÔ=Ô>Ø‰ðð €Mrg   c                ó   — t        | ||«      S r—   )rb  )r¥   r  rÌ   s      re   Úsplit_with_sizesrd  		  s   € ä��E˜3ÓÐrg   c                óä   — t        | |d«      }t        j                  j                  j	                  | j                  «       |   «      }t        |«      D �cg c]  }t        | ||«      ‘Œ }}|S c c}w rõ  )ri  rR   r]   râ   r  rÉ   r  r]  )r¥   rÌ   r`  rs   r¨  s        re   Úunbindrf  	  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}  rg  r.   c                óD   •— | d   | ‰   ‰z  z   }g | d ‰ ¢|‘| ‰dz   d ¢­S )Nrh  r.   rö   )rU  Údim_idxrÌ   r~  s     €€re   rH  zunfold.<locals>.reindexer,	  s?   ø€ Ø�b‘'˜C ™H t™OÑ+ˆØ8��T�c�Ð8˜GÐ8 c¨#°©'°BÐ&7Ñ8Ð8rg   )rÉ   rÈ   r   rŒ  r>  rR   r]   râ   Ú	check_leqÚcheck_ltr(   r9  r:  r'   rB   r1   rL  rç   )r¥   Ú	dimensionrè   r~  r  ÚndimÚdim_sizerâ   Únew_dim_sizeÚout_sizerH  rÌ   s      `       @re   Úunfoldrq  	  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ÐCrg   c                óº   — t        | |d«      }t        | j                  «       «      }|j                  |t        j
                  j                  «       t        | |«      S rú  )ri  ri   rÉ   Úinsertr¼   r)  r*  rÏ  )r¥   rÌ   r  s      re   r>  r>  3	  sE   € ä
˜˜3 Ó
"€CÜ�Q—Z‘Z“\Ó"€IØ×Ñ�Sœ%Ÿ'™'Ÿ+™+Ô&Ü��9ÓÐrg   c                óˆ   — t        | |«      }t        | t        «      sJ ‚t        |t        «      sJ ‚|j                  | _        | S r—   )r>  rk   rB   rm   r#  s      re   Ú
unsqueeze_ru  ;	  s>   € ä
�A�sÓ
€CÜ�aœÔ#Ð#Ð#Ü�cœ9Ô%Ð%Ð%Ø�X‰X€A„FØ€Hrg   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õ  )	rR   r]   râ   ro  rI  r¼   ÚsympifyrÈ   rÉ   )r¥   rÌ   rx  rm  s       re   ri  ri  D	  sr   € Ü
�'‰'×
Ñ
×
$Ñ
$×
2Ñ
2´5·=±=ÀÓ3EÓ
F€CÜˆq�z‰z‹|Ó€DØ
ˆQ‚wØˆt�f‰}ÑˆØ�Ô#�d˜V‘mÒ#Ð#Ñ#Ð#Ð#Ø€Jrg   rh  c                ó  — t        | |d«      }t        j                  j                  j	                  | j                  «       |   «      dz  }t        | |d|d¬«      }t        | |||dz  d¬«      }t        |t        |«      «      S )Nr   r,   Frf  )	ri  rR   r]   râ   r  rÉ   rŒ  rz  Úsigmoid)r¥   rÌ   Únew_lenrî   r/  s        re   Úglur{  M	  ss   € ä
˜˜3 Ó
"€Cä�g‰g×Ñ×(Ñ(¨¯©«°cÑ):Ó;¸qÑ@€Gäˆq�#�q˜'¨Ô/€AÜˆq�#�w ¨!¡°5Ô9€AÜˆq”'˜!“*ÓÐrg   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—   ©rk   r1   r9   Úwrap_for_loweringr¿   s    re   Úwrap_tensorsz7fallback_handler.<locals>.handler.<locals>.wrap_tensors]	  ó#   € Ü,6°q¼"¿)¹)Ô,D�1×&Ñ&Ó(ÐKÈ!ÐKrg   )rp  Útree_mapr1   ÚFallbackKernelrç   )rt   rú   r�  Úkernels      €re   Úhandlerz!fallback_handler.<locals>.handler\	  s<   ø€ ò	Lô �‰Øœ"×+Ñ+×2Ñ2°6ÐK¸DÒKÀFÑKó
ð 	
rg   T)r  r¡   Ú_is_fallback_handler)r…  r½  r†  s   `  re   rÁ  rÁ  X	  s&   ø€ ÙÜ�‰�fÔô
ð $(€GÔ à€Nrg   c                 ó.   — t        j                  d«       y )NzjTorchinductor does not support code generation for complex operators. Performance may be worse than eager.)ÚwarningsÚwarnrö   rg   re   Ú_warn_complex_not_supportedr‹  j	  s   € ä‡M�MØtõrg   c                ó‚  — | j                  «       rt        «        y| j                  ry| j                  ry| j                  t
        j                  k(  rí|syt        |j                  t
        j                  j                  «      xrr |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_sparser·   r{   Úfloat8_e8m0fnurk   ra   r|   r}   rÎ  rÏ  r  rÄ  r«  Ú
_scaled_mmrJ   )rw   rc   s     re   Úunsupported_input_tensorr‘  s	  sß   € à‡|�|„~ä#Ô%Øà‡y‚yØà‡{‚{Øà‡w�w”%×&Ñ&Ò&ÙØô
 �t—{‘{¤E§J¡J×$9Ñ$9Ó:ò Ø—‘ä—	‘	—‘Ü—‘× Ñ Ü—
‘
×"Ñ"Ü—‘×'Ñ'ð	ðòYô ˜4Ÿ;™;¬¯
©
×(=Ñ(=Ó>ÒWÄ7È4Ï;É;ÓCWð

ð 
	
ð rg   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{   rQ   rÂ  rÃ  rÄ  ra   r¾  r‘  Úis_cpur/   Údisable_cpp_codegen)rw   rc   Úsupported_complex_viewss      re   Úunsupported_output_tensorr–  •	  so   € ô 	�	‰	�‰Ü�	‰	�‰×,Ñ,×4Ñ4ðÐð Ð˜DŸK™KÐ+BÑBÀqÇ|Á|Ä~ØÜ  4Ô(ØØ�8‰8Ò2œ×2Ñ2Ð2rg   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)rk   r{   r&  r'  r|  rp  Útree_leavesÚ_subclassesÚ
FakeTensorr–  r‘  )Úinp_out_nodeÚ	is_outputr|  rc   s      €re   Ú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Ùð		 ð rg   )rž  T)
ra   rÎ  Úview_as_complexrÄ  r`   Úlift_fresh_copyrp  Úarg_tree_leavesrt   rú   )rc   Úallow_cpu_inputsrŸ  rÐ   s   `   re   Ú%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Ð5rg   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 ]  }t)        | |«      } ||«       Œ y t!        | t        j"                  j*                  t        j"                  j,                  f«      r	 || «       y t/        d| › d	t1        | «      › �«      ‚)
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 ©NrP  )rŸ   r¨   r$  rÁ  )Úop_overloadÚlayout_constraints    €re   Úregister_fallbackz(make_fallback.<locals>.register_fallbackñ	  s;   ø€ Ü! +Ô.ØÐ(Ü! +Ð/@ÔAØGÔ  À$ÔGÜ˜[Ó)ó
ð 	
rg   zUnsupported fallback z with type )r3   rÂ   ÚosÚgetenvr4   r/   Úfallback_randomr{   Ú_decompÚdecompositions_for_rngÚextra_random_decompsÚ_dynamoÚsuppress_errorsÚlogÚwarningrŒ   rk   r|   r¢   r¤   r˜   r}   ÚHigherOrderOperatorÚRuntimeErrorrä   )	r`   rª  rŠ  Úoverride_decompÚget_decomp_fnÚcheck_decompsr«  Úolr©  s	    `       re   Úmake_fallbackr¼  Ê	  sa  ø€ ð (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Ø—,‘,“.ò 	+ˆBÜ! " b›/ˆKÙ˜kÕ*ñ	+ô 
�BœŸ™×.Ñ.´·
±
×0NÑ0NÐOÔ	PÙ˜"ÕäÐ2°2°$°kÄ$ÀrÃ(ÀÐLÓMÐMrg   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.
    r.   r¶   ©r@  r{   r¤  )r?  Únumelr  s      re   Úphilox_rand_offsetrÀ  
  s2   € ð €EØò ˆØ˜‘	‰ðä�%œuŸ{™{Ô+Ð+rg   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—   )rQ   rò   r{   rÿ  r¡   rR  Úrand)	r:  Úseed_index_exprÚoffset_index_exprÚrand_index_exprr¨  r·   Úoffset_loaderÚ
random_posÚseed_loaders	        €€€€re   r\  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Ó*Ð*rg   r]  )
r1   r“  ÚFlexibleLayoutÚcontiguous_stridesÚmake_indexerr_  r?   rç   ri   rÀ  )rè   Úseedrx  r”  rv   r·   r\  Úrandom_values_nodeÚoffset_noderÇ  rÈ  rÉ  s        `   @@@re   Úphilox_randrÐ  
  s™   û€ ô —‘ØØØÜ
×Ñ×,Ñ,¨TÓ2ó	÷
 �lƒnð ð ×"Ñ"Ó$€KØ×&Ñ&Ó(€M÷+ô #×)Ñ)ØØØÜ�D‹zô	Ðô % TÓ*€KØ˜{Ð*Ð*rg   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)r/   r®  rp  rƒ  rB   rç   r1   r„  rÎ  Únative_dropoutrÄ  rŒ   )r¥   ÚpÚtrains      re   rÒ  rÒ  6
  sY   € ä×ÒÜ�‰Ü×ÑÜ×Ñ×$Ñ$¤T×%8Ñ%8×%@Ñ%@À!ÀQÈÓNó
ð 	
ô
 ÐEÓFÐFrg   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   )r/   r®  rn   r{   rv   r�  rÈ   rk   r5  rÎ  Ú
bernoulli_ÚTensorr1   ÚInplaceBernoulliFallback)r¥   rt   r©  s      re   r×  r×  A
  s“   € ä×!Ò! Q§\¡\£^´u·|±|ÀEÓ7JÒ%Jð Ø^óÐJð ‡I�I„Kô ˆt‹9˜Š>œZ¨¨Q©´Ô7ô 	�‰×Òä�_‰_×#Ñ#ð ô
 ×Ñ ¨QÐ6°Ó6Ø€Hrg   c                ó¦   — t         j                  s-| j                  «       t        j                  d«      k(  sJ d«       ‚t        t        | «      g|¢­Ž S )Nrà   rÖ  )r/   r®  rn   r{   rv   r×  r«  )r¥   rt   s     re   Úbernoulli_prÛ  P
  sG   € ä×!Ò! Q§\¡\£^´u·|±|ÀEÓ7JÒ%Jð Ø^óÐJô ”e˜A“hÐ& Ò&Ð&rg   c                ó   — t         ‚r—   ©rŒ   )r  s    re   Ú_foobarrÞ  Y
  s   € ä
Ðrg   c                ó.   — t         j                  d«       y )Nz1using triton random, expect difference from eager)r´  Úinfo)Úsalts    re   Ú_warn_triton_randomrâ  ^
  s   € ä‡H�HÐ@ÕArg   c                 óJ   — t        t        j                  j                  «       y r—   )râ  rR   r]   Úcreation_timerö   rg   re   Úwarn_triton_randområ  c
  s   € äœŸ™×-Ñ-Õ.rg   )r¸  c                 óª   — |j                  d«      �t        | i |¤ŽS t        j                  r|j	                  dd «       t        | i |¤ŽS t        d«      ‚©NÚ	generatorz-should have been handled in replace_random.py)r}  Úfallback_rand_generatorr/   r®  r�  Úfallback_rand_defaultrŒ   ©rt   rú   s     re   rÃ  rÃ  x
  sT   € à‡z�z�+ÓÐ*Ü&¨Ð7°Ñ7Ð7Ü	×	Ò	Ø�
‰
�; Ô%Ü$ dÐ5¨fÑ5Ð5Ü
ÐHÓ
IÐIrg   c                 óª   — |j                  d«      �t        | i |¤ŽS t        j                  r|j	                  dd «       t        | i |¤ŽS t        d«      ‚rç  )r}  Úfallback_randn_generatorr/   r®  r�  Úfallback_randn_defaultrŒ   rë  s     re   Úrandnrï  ‚
  sT   € à‡z�z�+ÓÐ*Ü'¨Ð8°Ñ8Ð8Ü	×	Ò	Ø�
‰
�; Ô%Ü% tÐ6¨vÑ6Ð6Ü
ÐHÓ
IÐIrg   c                ól   — t        j                  |«      }t         j                  j                  | |«      S r—   )r1   Úget_stride_orderÚExternKernelÚrequire_stride_order)Úinput_tensorr”  Ústride_orders      re   Úinductor_force_stride_orderrö  Œ
  s)   € ä×&Ñ& vÓ.€LÜ�?‰?×/Ñ/°¸lÓKÐKrg   c                ó   — t        d«      ‚)Nz.should be handled in fuse_seed_creation_pass()rÝ  )rv   s    re   Úinductor_seedrø  ’
  s   € ä
ÐIÓ
JÐJrg   c                óz   — t        «        t        j                  t        j                  | t        |«      «      «      S r—   )rå  rB   rç   r1   ÚRandomSeedsrF   )r  rv   s     re   Úinductor_seedsrû  —
  s)   € äÔÜ×ÑœBŸN™N¨5´-ÀÓ2GÓHÓIÐIrg   c                ó|   ‡ ‡— ˆˆ fd„}t        j                  ‰ j                  «       ‰ j                  «       |g ¬«      S )Nc                óL   •— t        j                  ‰j                  «       ‰«      S r—   )rQ   Ú	load_seedÚget_name)r  r:  Úseedss    €€re   r\  z&inductor_lookup_seed.<locals>.inner_fnŸ
  s   ø€ Ü�}‰}˜UŸ^™^Ó-¨uÓ5Ð5rg   r]  )r?   rç   rn   r»   )r   r:  r\  s   `` re   Úinductor_lookup_seedr  �
  s9   ù€ õ6ô ×ÑØ×ÑÓ!Ø�o‰oÓØØô	ð rg   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 )Nrg  i €  )
rk   r{   rv   rä   r:  rg  Úcurrent_deviceÚget_device_propertiesÚmulti_processor_countÚmax_threads_per_multi_processor)rv   rU  ÚpropÚthreads_per_roundÚ_CPU_GRAIN_SIZEs        re   Úget_threads_per_roundr
  ª
  s’   € Ü�fœeŸl™lÔ+Ü—‘˜fÓ%ˆà‡{�{�fÒØ�l‰lˆØˆ;Ü—*‘*×+Ñ+Ó-ˆCä�z‰z×/Ñ/°Ó4ˆà×&Ñ&¨×)MÑ)MÑMð 	ð Ðð  ˆØ+ÐàÐrg   )rx  Ú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ï  ©rx  rg  c                óJ   — | t         j                  t         j                  fv ryy)Nr®   rª   )r{   rH  rG  )Údts    re   Ú_vec_from_dtypez(inductor_random.<locals>._vec_from_dtypeÔ
  s   € Ø”e—m‘m¤U§^¡^Ð4Ñ4ØØrg   c           
     ó¾   •—  ‰dg«      } ‰dg«      }t        j                  ||‰t        j                   ‰| «      t        j                  «      t        ‰«      ¬«      S )Nr   r.   )Úvec)rQ   Ú
rand_eagerrR  r{   rÿ  r´   )r:  Úrng_seedÚbase_offsetrÈ  rÉ  r  r  s      €€€€re   r\  z!inductor_random.<locals>.inner_fnÛ
  sS   ø€ Ù" A 3Ó'ˆHÙ% q cÓ*ˆKÜ—>‘>ØØØ!Ü—‘™z¨%Ó0´%·+±+Ó>Ü˜“Hôð rg   c                óŽ   •—  t        t        ‰«       ‰g «      t        j                   ‰| «      t        j                  «      «      S r—   )r˜   rQ   rR  r{   rÿ  )r:  ÚmoderÈ  rÉ  s    €€€re   r\  z!inductor_random.<locals>.inner_fnç
  s7   ø€ Ø%”7œ3 Ó%Ù˜B“Ü—‘™z¨%Ó0´%·+±+Ó>óð rg   r]  )r  útorch.dtyperÏ   r´   )r/   r®  r{   rí  rI  r1   r“  rÊ  rË  rÌ  r_  Úalign_random_eagerrä   r
  r?   rç   r�  )rè   rÍ  r  rx  r  r·   rv   r  r\  r¨  rÈ  rÉ  r  r  s     `       @@@@re   Úinductor_randomr  ¾
  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ÔØ€Mrg   r  c               óf  ‡ ‡‡‡	— t         j                  rJ ‚g |¢}t        j                  }|j	                  «       }t        j                  |||t
        j                  j                  |«      |¬«      j                  «       Š|j                  «       Š	ˆˆ ˆˆ	fd„}t        j                  |||g |¢¬«      S )Nr  c           	     ó  •— t        j                   ‰g «      t        j                   ‰| «      t        j                  «      t        j                  ‰t        j
                  «      t        j                  ‰t        j
                  «      «      S r—   )rQ   Ú	randint64rR  r{   rÿ  r¤  )r:  ÚhighÚlowrÈ  rÉ  s    €€€€re   r\  z"inductor_randint.<locals>.inner_fn  sV   ø€ Ü�}‰}Ù˜‹OÜ�N‰N™: eÓ,¬e¯k©kÓ:Ü�N‰N˜3¤§¡Ó,Ü�N‰N˜4¤§¡Ó-ó	
ð 	
rg   r]  )r/   r®  r{   r¤  rI  r1   r“  rÊ  rË  rÌ  r_  r?   rç   )
r  r  rè   rÍ  rx  r·   rv   r\  rÈ  rÉ  s
   ``      @@re   Úinductor_randintr   û
  s£   û€ ô ×%Ò%Ð%Ð%ØˆTˆ7€DÜ�K‰K€EØ×%Ñ%Ó'€FÜ—‘Ø��tœR×.Ñ.×AÑAÀ$ÓGÐPVôç�lƒnð ð ×"Ñ"Ó$€K÷
ô ×ÑØØØØ�ˆwô	ð rg   c                óº   — | j                  «       }| j                  «       }t        d„ t        ||«      D «       «      |d   z   }| j	                  «       |d   ||d   fS )Nc              3  ó2   K  — | ]  \  }}|d z
  |z  –— Œ y­wrH  rö   )r™   r  Ústs      re   r›   z%_boundaries_helper.<locals>.<genexpr>  s   è ø€ ÒA¡e a¨�a˜!‘e˜r•\ÑAùs   ‚rh  )rÉ   ry  Úsumr  rÿ  )Útbrè   r”  Ú
max_offsets       re   Ú_boundaries_helperr'    s^   € ð
 �;‰;‹=€DØ�]‰]‹_€FÜÑA¬s°4¸Ó/@ÔAÓAÀFÈ2ÁJÑN€Jà
�‰‹ØˆR‰ØØˆr‰
ð	ð rg   c                óH   — | j                  «       | j                  «       d   fS r=  )rÿ  ry  ©r%  s    re   Ú_sorter_helperr*  (  s   € Ø�;‰;‹=˜"Ÿ-™-›/¨"Ñ-Ð-Ð-rg   ©Ú	out_int32ÚrightÚsideÚsorterc               óJ  ‡ ‡‡‡
‡— d„ } |‰ «      r ||«      r
‰�9 |‰«      s1 t        t        j                  j                  d¬«      ‰ ||‰|‰¬«      S |�|dk(  rdŠ|rt        j
                  nt        j                  Š
|j                  «       Š‰ j                  «        ‰�‰j                  «        t        ‰ j                  «       «      dk(  r
ˆ
ˆˆ ˆˆfd„}n	ˆ
ˆˆ ˆˆfd	„}|j                  «       }t        j                  |‰
||j                  ¬
«      }	|	j                  «        |	S )Nc                ó^   — t         j                  j                  | t        j                  «      S r—   )rR   r]   rš  r›  Ú	BUCKETIZEr)  s    re   rC  zsearchsorted.<locals>.<lambda>6  s    € ¤A§G¡G×$7Ñ$7Ø
ŒN×$Ñ$ó%€ rg   Fr¼  r+  r-  Tr.   c           
     óŠ   •—  ‰| «      }t        j                  |t        ‰«      d‰‰‰€d n
t        ‰«      ‰€d ¬«      S d¬«      S )Nr   ©r/  Úsorter_indices©rQ   Ú	bucketizer'  r*  )rU  r$  Úindex_dtyper-  Úsorted_sequencer/  Úvalues_loaders     €€€€€re   r\  zsearchsorted.<locals>.inner_fn[  sV   ø€ Ù Ó$ˆCÜ—=‘=ØÜ" ?Ó3ØØØØ%˜~‘t´>À&Ó3IØ'- ~˜tôð ð <=ôð rg   c                ó²   •‡ —  ‰‰ «      }dˆ ˆfd„}t        j                  |t        ‰«       |‰«      ‰‰‰€d n
t        ‰«      ‰€d ¬«      S  |‰«      ¬«      S )Nc                óÂ   •— | j                  «       }t        j                  t        j                  t
        j                  d„ t        |d d ‰d d «      D «       «      ‰«      S )Nc              3  ó,   K  — | ]  \  }}||z  –— Œ y ­wr—   rö   )r™   r  rs   s      re   r›   zNsearchsorted.<locals>.inner_fn.<locals>.get_flattened_index.<locals>.<genexpr>r  s   è ø€ Ò&U±°°A q¨1¥uÑ&Uùó   ‚rh  )ry  rQ   rR  r  r  Úoperatorr¡   r  )r%  ÚstridesrU  r8  s     €€re   Úget_flattened_indexz;searchsorted.<locals>.inner_fn.<locals>.get_flattened_indexn  sU   ø€ ØŸ-™-›/�Ü—~‘~Ü×$Ñ$Ü Ÿ™Ñ&U¼¸WÀSÀb¸\È3ÈsÐPRÈ8Ó9TÔ&Uóð  ó	ð rg   r4  )r%  rB   r6  )rU  r$  rA  r8  r-  r9  r/  r:  s   `  €€€€€re   r\  zsearchsorted.<locals>.inner_fni  sh   ù€ Ù Ó$ˆCöô —=‘=ØÜ" ?Ó3Ù# OÓ4ØØØ%˜~‘t´>À&Ó3IØ'- ~˜tôð ñ <OÈvÓ;Vôð rg   r]  )rÁ  rÎ  ÚsearchsortedrØ  r{   rÿ  r¤  r_  r�  rÈ   rÉ   rn   r?   rç   r?  )r9  Úselfr,  r-  r.  r/  Úvalidate_bucketizer\  rv   r¨  r8  r:  s   `  ` `    @@re   rB  rB  ,  s  ü€ ñÐñ ˜Ô/Ù! $Ô'ØÐÑ'9¸&Ô'AàTÔ¤× 1Ñ 1× 8Ñ 8ÈeÔTØØØØØØô
ð 	
ð Ð˜D GšOØˆá!*”%—+’+´·±€KØ×$Ñ$Ó&€Mð ×ÑÔàÐØ�‰Ôä
ˆ?×#Ñ#Ó%Ó&¨!Ò+÷
	ñ 
	÷	ð 	ð0 �_‰_Ó€FÜ×ÑØØØØ�z‰zô	€Fð ‡N�NÔà€Mrg   ©r,  r-  c               ó‚  ‡‡‡‡— t        ‰j                  «       «      dk(  sJ ‚t        j                  j	                  | t
        j                  «      r.t        j                  j	                  ‰t
        j                  «      s/ t        t        j                  j                  d¬«      | ‰|‰¬«      S ‰j                  «        | j                  «       }| j                  «       Š|rt        j                  nt        j                   Šˆˆˆˆfd„}t#        j$                  |‰|| j                  «       ¬«      }|j                  «        |S )Nr.   Fr¼  rE  c                ó\   •—  ‰| «      }t        j                  |t        ‰«      d‰‰«      }|S rõ  )rQ   r7  r'  )r:  r$  r
  Ú
boundariesr8  rÅ  r-  s      €€€€re   r\  zbucketize.<locals>.inner_fn¬  s6   ø€ Ù˜5Ó!ˆÜ—-‘-ØÜ˜zÓ*ØØØó
ˆð ˆrg   r]  )rÈ   rÉ   rR   r]   rš  r›  r2  rÁ  rÎ  r7  rØ  r�  rn   r_  r{   rÿ  r¤  r?   rç   )	r’  rH  r,  r-  rv   r\  r¨  r8  rÅ  s	    ` `   @@re   r7  r7  Ž  s÷   û€ ô ˆz×"Ñ"Ó$Ó%¨Ò*Ð*Ð*ô 	
�‰×Ñ˜E¤>×#;Ñ#;Ô<Ü�G‰G×Ñ 
¬N×,DÑ,DÔEàQÔ¤§¡× 5Ñ 5È5ÔQØ�:¨¸%ô
ð 	
ð ×ÑÔØ×ÑÓ€FØ×$Ñ$Ó&€Lá!*”%—+’+´·±€K÷
ô ×ÑØØØØ�~‰~Óô	€Fð ‡N�NÔà€Mrg   c                ó�   — t        | t        j                  «      xr+ t        | t        j                  t        j                  f«       S r—   )rk   r1   r9   ÚNonTensorObjÚOpaqueMultiOutputr¿   s    re   Ú_is_tensor_irnoderL  Ë  s:   € Ü�aœŸ™Ó#ò ¬JØ	ŒB�O‰OœR×1Ñ1Ð2ó-ð )ð rg   c                óz   — t        j                  t        t        j                  j
                  ||f«      \  }}||fS r—   )rp  Útree_map_onlyrL  r1   rò  Úrequire_stride1©r  rt   rú   s      re   Úrequire_denserQ  Ñ  s7   € Ü×'Ñ'Üœ2Ÿ?™?×:Ñ:¸TÀ6¸Nó�L€Dˆ&ð �ˆ<Ðrg   c                óz   — t        j                  t        t        j                  j
                  ||f«      \  }}||fS r—   )rp  rN  rL  r1   rò  Úrequire_contiguousrP  s      re   rS  rS  Ø  s9   € Ü×'Ñ'ÜÜ
�‰×*Ñ*Ø	ˆvˆó�L€Dˆ&ð
 �ˆ<Ðrg   c                óz   — t        j                  t        t        j                  j
                  ||f«      \  }}||fS r—   )rp  rN  rL  r1   rò  rˆ   rP  s      re   rˆ   rˆ   á  s;   € ô ×'Ñ'ÜÜ
�‰×2Ñ2Ø	ˆvˆó�L€Dˆ&ð
 �ˆ<Ðrg   c                óz   — t        j                  t        t        j                  j
                  ||f«      \  }}||fS r—   )rp  rN  rL  r1   rò  r2  rP  s      re   r2  r2  ì  s9   € Ü×'Ñ'ÜÜ
�‰×-Ñ-Ø	ˆvˆó�L€Dˆ&ð
 �ˆ<Ðrg   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      re   r›   z+constrain_to_fake_tensor.<locals>.<genexpr>ÿ  s!   è ø€ ò 
Ù19°!°SÔ$ Q¨×,ñ
ùrI  )rk   r   r   r1   r9   rò  Úrequire_exact_stridesr”  r  rY  rž   ri   rä   r  )rÐ   Úfake_argÚkeys      re   rY  rY  õ  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—   rX  )r™   rÐ   r\  s      re   r›   z,constrain_to_fake_tensors.<locals>.<genexpr>  s#   è ø€ ò áˆC�ô 	!  h×/ñùrI  )rž   r  rû   rY  )rt   rú   Ú	fake_argsÚfake_kwargsrù   r  s         re   r†   r†     sb   € Üñ ä   yÓ1ôó €Dð JPÏÉË×XÁÀÀAˆaÔ)¨!¨[¸©^Ó<Ñ<ÐX€FÑXØ�ˆ<Ðùó Ys   °Ac           
     óà   ‡— ˆfd„Št        ˆfd„t        || j                  «      D «       «      }|j                  «       D ��ci c]  \  }}| ‰|| j                  |   «      “Œ }}}||fS c c}}w )Nc           	     ó¾  •— t        | «      r�|j                  j                  d«      }t        |t        j
                  «      s| S t        j                  |j                  «       t        j                  j                  j                  «      }t        j                  j                  | |«      S t        | t        «      r| D �ci c]  }| ‰| |   ||   «      “Œ c}S | S c c}w ©Nr$  )rL  r|  r}  rk   r{   rØ  r1   rñ  r”  rR   r]   râ   ro  rò  ró  r  )rÐ   Úfx_argÚfake_valrõ  r]  Úapply_constraints        €re   rg  z1constrain_to_fx_strides.<locals>.apply_constraint  s°   ø€ Ü˜SÔ!Ø—{‘{—‘ uÓ-ˆHÜ˜h¬¯©Ô5Ø�
Ü×.Ñ.Ø—‘Ó!¤1§7¡7×#3Ñ#3×#=Ñ#=óˆLô —?‘?×7Ñ7¸¸\ÓJÐJÜ�cœ4Ô ØLOÖPÀS�CÑ)¨#¨c©(°F¸3±KÓ@Ñ@ÒPÐPØˆ
ùò Qs   Â>Cc              3  ó6   •K  — | ]  \  }} ‰||«      –— Œ y ­wr—   rö   )r™   rÐ   re  rg  s      €re   r›   z*constrain_to_fx_strides.<locals>.<genexpr>  s"   øè ø€ ò Ù*5¨#¨vÑ˜˜f×%ñùrœ   )rž   r  rt   rû   rú   )Úfx_nodert   rú   rù   r  rg  s        @re   rŠ   rŠ     ss   ø€ ôô ó Ü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                ó  ‡ ‡‡— ˆˆ 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$  rh  r   )r   r«   rª   )r©   r.   r,   r   )rL  r|  r”  rk   r{   ÚSymIntrc   ÚexprrR   r]   râ   ro  r1   rñ  ri   r(  r  rÈ   rÉ   ra   rÎ  Ú0_scaled_dot_product_efficient_attention_backwardrÄ  r/   Úcache_sdpa_constraintÚmaybe_get_nameÚidrž   Úsdpa_constraint_cache)rU  rÐ   re  Úmeta_valr  Úmeta_stride_exprro  rõ  Ú	cache_keyÚarg_namer¨  Ú_apply_constraint_innerri  s              €€re   rg  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ª   r.   r   rh  r,   c                ó´   •— t         j                  j                  j                  t	        j
                  t        | j                  «       d   ‰«      d«      «      S )Nrh  r   )rR   r]   râ   r  r¼   r  r*   rÉ   )r¥   Ú	ALIGNMENTs    €re   Ú
is_alignedzDsdpa_constraint.<locals>._apply_constraint_inner.<locals>.is_aligned·  s@   ø€ Ü—7‘7×#Ñ#×2Ñ2Ü—‘œ˜QŸZ™Z›\¨"Ñ-¨yÓ9¸1Ó=óð rg   )!Úis_cudaÚis_xpur1   rò  ró  ra   r{   rQ   rÎ  Ú'_scaled_dot_product_efficient_attentionrÄ  rk   rB   rÈ   rÉ   Úis_aligned_realized_tensorÚtry_match_insignificant_stridesÚrealize_inputr9   Úmaybe_get_strideri   r  rR   r]   râ   rl  ro   r*   rE   r[  rm   r5   r�  )rU  rÐ   rs  rt  rõ  Úeffn_attn_fwd_biasÚis_aligned_tensorrp  Úexpanded_dimsÚmaybe_striders   Úout_stridesr”  r|  r{  ri  s                 @€re   rw  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ÐFrg   c              3  ó>   •K  — | ]  \  }\  }} ‰|||«      –— Œ y ­wr—   rö   )r™   rU  rÐ   re  rg  s       €re   r›   z"sdpa_constraint.<locals>.<genexpr>Å  s*   øè ø€ ò áˆC‘�#�vñ 	˜˜c 6×*ñùs   ƒrh  )rž   rj   r  rt   rû   rú   )ri  rt   rú   rù   r  rw  rg  s   `    @@re   Úsdpa_constraintrŠ  )  sƒ   ú€ õ1ôfdGôL ó ä"+¬C°°g·l±lÓ,CÓ"Dôó €Dð IOÏÉË×WÁÀÀ1ˆaÑ! " a¨¯©¸Ñ):Ó;Ñ;ÐW€FÑWØ�ˆ<Ðùó Xs   Á"A<)rŠ  c                ó  — 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        |«      S t        |«      S ©NrF  )rk   r1   r9   r@  r»   rn   rÚ  rò   rÉ   r-  r«  )rC  rT  rØ  r¥   rq   s        re   r¬  r¬  ª  s»   € ä�cœ2Ÿ9™9Ô%Ü�S §¡Ó 0¸¿¹Ó9JÔKˆØ€AØ‡�Ó˜CŸN™NÓ,Ò,Ü�a˜Ÿ™Ó*Ó+ˆØ‡~�~Ó˜3Ÿ=™=›?Ò*Ü�Q˜Ÿ™Ó(Ó)ˆà‡}�}ƒ˜#Ÿ,™,›.Ò(Ü�Q˜Ÿ™›Ó(ˆÜ�S‹zÐÜ�‹8€Org   )Úmemory_formatc          	     ó¶   — t        j                  | j                  «       | j                  «       | j	                  «       t        | j                  «       «      ¬«      S ©Nr]  )r?   rç   rn   r»   r_  ri   rÉ   )r¥   r�  s     re   r«  r«  º  s@   € ô ×ÑØ�|‰|‹~Ø�k‰k‹mØ—‘“Ü�A—J‘J“LÓ!ô	ð rg   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 )Nrh  rŽ  )rk   rB   rm   r1   rá   ro   rw  r«  )r¥   Úreinterpret_view_layoutsr�  s      re   Ú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ˆà€Hrg   r¡  c               ó\   ‡‡‡— ˆˆˆfd„}t        j                  t        |«      ‰|| g¬«      S )Nc                óD   •— t        j                  ‰| d   z  ‰z   ‰¬«      S )Nr   r¶   ©rQ   rR  )r:  r·   r|  r~  s    €€€re   r   ziota.<locals>.fnè  s!   ø€ Ü�~‰~˜d U¨1¡X™o°Ñ5¸UÔCÐCrg   r]  )r?   rç   rF   )Úlengthr|  r~  r·   rv   Úrequires_gradr   s    ```   re   Úiotar˜  Þ  s1   ú€ öDô ×ÑÜ˜VÓ$ØØØˆxô	ð rg   )r·   rv   r�  Ú
pin_memoryr—  c               ó^   — |€J ‚t        || z
  |«      }t        || |||�||¬«      S d|¬«      S )Nrà   ©r|  r~  r·   rv   r—  )rE   r˜  )	r|  r}  r~  r·   rv   r�  r™  r—  r–  s	            re   Úarange_start_steprœ  ó  sV   € ð ÐÐÐÜ�S˜5‘[ $Ó'€FÜØØØØØÐ+ˆvØ#ôð ð
 27Ø#ôð rg   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—   )rQ   r  ÚeqrR  r{   rÿ  )rU  rÌ   r:  Ú
src_loaderrN  s    €€€€re   r\  z select_scatter.<locals>.inner_fn  sX   ø€ Ü�y‰yÜ�F‰FÜ—‘˜s 3™x¬¯©Ó5Ü—‘˜u¤e§k¡kÓ2óñ �s‹OÙ�S‹Mó
ð 	
rg   r]  )rò   r»   r_  ri  rR   r]   râ   r  r¼   r^  rÉ   r\  rÁ  rÎ  Úselect_scatterrÄ  rj  rk  r-  r>  r?   rç   rn   ri   )r¥   rT  rÌ   r:  r\  r   rN  s     `` @@re   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Ó!ô	ð rg   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   r.   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   r.   c                 ó   •—  ‰‰ «      S r—   rö   )Úsrc_idxr   s   €€re   rC  z1slice_scatter.<locals>.inner_fn.<locals>.<lambda>c  s   ø€ ‘J˜wÓ'€ rg   r£  )rQ   rR  r{   r¤  ri   r(   ro   r¥  r¼   r-  r¦  rŸ  r+   rS  r  r  r§  r¨  rÀ   r  )rU  r©  r®  Úsrc_valr¥  rÌ   rn  r}  r   r|  r~  r¥   rN  s       @€€€€€€€€re   r\  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ó
ð 	
rg   r]  )rò   r»   r_  ri  rÉ   r1   ru  Únormalize_start_endri   r(   r-  r?   rç   rn   )r¥   rT  rÌ   r|  r}  r~  Úsrc_sizer\  rn  r   rN  s   ` ````  @@@re   Úslice_scatterr©  /  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Ó!ô	ð rg   c                ój   — t        | t        t        f«      rt        | «      dkD  rt	        | d   «      S | S rõ  )rk   ri   rž   rÈ   Ú_unwrapr¿   s    re   r«  r«  t  s-   € Ü�!”dœE�]Ô#¬¨A«°ª
Ü�q˜‘t‹}ÐØ€Hrg   ©r·   rv   r�  r™  c               óî  ‡ ‡— t        |d t        j                  fv d|› �«       t        | 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„}n5t        j                  j!                  t        j"                  ‰ ‰|¬«      «      S t%        j&                  t)        |«      ‰||¬	«      S )
Núlayout=r™  c                ó0   •— t        j                  ‰‰«      S r—   r•  ©r:  rm   r·   s    €€re   r\  ztensor.<locals>.inner_fn‡  s   ø€ Ü—>‘> $¨Ó.Ð.rg   c                ó0   •— t        j                  ‰‰«      S r—   ©rQ   rS  r°  s    €€re   r\  ztensor.<locals>.inner_fnŒ  s   ø€ Ü—<‘<  eÓ,Ð,rg   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 )Nr.   r,   r   )rQ   rS  r  r¦  rR  r{   r¤  )r|  r}  ÚmidÚbinary_searchrm   r·   r:  s      €€€€re   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Ó+óð rg   r   )rÈ   rQ   rS  )r:  r¶  rm   r·   s   `@€€re   r\  ztensor.<locals>.inner_fn“  s7   ú€ ÷ô �4‹y˜AŠ~Ü—|‘| A uÓ-Ð-Ù  ¤C¨£IÓ.Ð.rg   rF  r]  )r”   r{   Ústridedrk   r«  r´   r¤  Úget_default_dtyper¼   rÇ   r5  rÈ   ro   ÚIntegerrR   r]   Úadd_tensor_constantr@  r?   rç   rF   )rm   r·   rv   r�  r™  r^  r\  s   ``     re   r@  r@  z  s  ù€ äˆ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˜ U°6Ô:ó
ð 	
ô ×ÑÜ˜VÓ$ØØØô	ð rg   c                óz   — t        | t        «      r|�t        | |«      } |�t        | |«      } | S t	        | ||¬«      S rŒ  )rk   rB   rò   rÚ  r@  )rm   r·   rv   s      re   Ú	as_tensorr¼  ³  sD   € ä�$œ	Ô"ØÐÜ˜D %Ó(ˆDØÐÜ˜T 6Ó*ˆDØˆÜ�$˜e¨FÔ3Ð3rg   c                ó8   — t        | t        j                  ¬«      S r?  r¾  )rm   s    re   Úlong_tensorr¾  ¾  s   € ä�$œeŸk™kÔ*Ð*rg   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 )Nrd  r.   r$  )r%   rR   r]   râ   ro  r^   r|  rÈ   rF  rW  rû   r1   ÚDynamicScalarrs  rÜ   rt  rk   r{   rl  ÚSymFloatÚSymBoolrc   rm  r¼   rw  )rm   rd  Úbinding_symr„  r\  r$  s         re   Ú_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Ó!Ð!rg   c                 ó   — y r—   rö   )rm   r“   s     re   Ú_assert_scalarrÆ  ð  s   € ð rg   )rv   r�  c                ó   — y r—   rö   )rî   rè   r”  r·   rv   r�  s         re   Ú_assert_tensor_metadatarÈ  ú  s   € ð rg   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    €€re   r\  z_full.<locals>.inner_fn  s   ø€ Ü—<‘<  uÓ-Ð-rg   c                ó0   •— t        j                  ‰‰«      S r—   r•  rË  s    €€re   r\  z_full.<locals>.inner_fn  s   ø€ Ü—>‘> %¨Ó/Ð/rg   r   c                ó   •—  ‰g «      S r—   rö   )r:  Úvalue_loaders    €re   r\  z_full.<locals>.inner_fn  s   ø€ Ù Ó#Ð#rg   r]  )rk   r´   r5  rí   rñ   r¼   rÇ   rÈ   rÉ   r_  r?   rç   ri   )Ú
fill_valuerv   r·   rè   r\  rñ   rÎ  s     `  @@re   Ú_fullrÐ    s¤   ú€ Ø€EÜ�j¤3¬ ,Ô/´G¸EÀ7Ô4KØ—‘ˆä�%œ#œu˜Ô&ö	.ô 
�Eœ5Ÿ;™;Ô	'ö	0ô �5—>‘>Ó#Ó$¨Ò)Ð)Ð)Ø×(Ñ(Ó*ˆô	$ô ×ÑØØØÜ�D‹zô	ð rg   c                ó8   —  t        t        |«      «      | fi |¤ŽS r—   ©Úcreate_tensor_likeÚtensor_constructor)r¥   rÏ  rú   s      re   r)  r)    s    € Ø=ÔÔ0°Ó<Ó=¸aÑJÀ6ÑJÐJrg   c                ó"   ‡ — d d d d dd dœˆ fd„
}|S )NF)Únamesr·   rv   r�  r™  r�  c                óú  •— t        | d u d«       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        ‰|||«      S c c}w )Núnamed tensorsr®  r™  r.   r   )r”   r{   r·  rF   r¸  rÈ   rk   ri   rž   ÚSizerl  r¼   r-  rÐ  )	rÖ  r·   rv   r�  r™  r�  rè   r  rÏ  s	           €re   r„  z!tensor_constructor.<locals>.inner%  sá   ø€ ô 	�5˜D�= /Ô2Ü�6˜d¤E§M¡MÐ2Ð2°g¸f¸XÐ4FÔGÜ�z�> <Ô0Ü˜vÓ&ˆØÒ2œ×0Ñ0Ó2ˆÜˆt‹9˜Š>œj¨¨a©´4¼ÄÇ
Á
Ð2KÔLÜ˜˜a™“>ˆDð ò 	3ˆAÜ! !¤U§\¡\Õ2Ð2Ð2ð	3à)-Ö. A”—‘˜Q•Ð.ˆÐ.Ü�Z ¨°Ó5Ð5ùò /s   ÃC8rö   )rÏ  r„  s   ` re   rÔ  rÔ  #  s#   ø€ ð ØØØØØö6ð. €Lrg   )rÖ  r·   r�  rv   r™  r�  c                óÞ   — t        | d u d«       t        |«      }t        |«      dk(  r6t        |d   t        t
        t        j                  f«      rt        |d   «      }t        |d ||||¬«      S )NrØ  r.   r   ©r·   r�  rv   r™  )	r”   rF   rÈ   rk   ri   rž   r{   rÙ  Úempty_strided)rÖ  r·   r�  rv   r™  r�  rè   s          re   rO  rO  ?  sf   € ô ˆu˜ˆ}˜oÔ.Ü˜6Ó"€FÜ
ˆ4ƒy�A‚~œ* T¨!¡W¬t´U¼E¿J¹JÐ.GÔHÜ�T˜!‘W‹~ˆÜØˆd˜%¨°vÈ*ôð rg   c                ó    ‡ — ddddddœˆ fd„
}|S )zZ
    Shim to convert X_like(...) into X(...).  For example zeros_like() into zeros().
    NF)r·   rv   r�  r™  r�  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¸   rn   ri   rÉ   )r¥   r·   rv   r�  r™  r�  rè   Úcreation_fns          €re   Ú_constant_likez*create_tensor_like.<locals>._constant_likeW  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È
ô
ð 	
rg   rö   )rß  rà  s   ` re   rÓ  rÓ  R  s   ø€ ð  ¨d¸uÐTXö
ð Ðrg   c                ó*   — t        t        | «      «      S r—   rÒ  )rÏ  s    re   r	  r	  i  s   € ÜÔ0°Ó<Ó=Ð=rg   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®  )rk   ri   rž   r”   r{   r·  r¸   r»   rn   r¼   r¹  rÐ  rF   )r¥   rè   r·   r�  rv   r™  r  rÏ  s          €re   Ú_new_constantz#new_constant.<locals>._new_constants  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   ` re   Únew_constantrå  r  s   ø€ à t°DÀTö
Eð Ðrg   rÛ  c          	     ó~   — |€| j                  «       }|€| j                  «       }t        |d ||t        |«      |¬«      S ©NrÛ  ©r»   rn   rÜ  rF   )r¥   rè   r·   r�  rv   r™  s         re   Ú	new_emptyré  ‚  sF   € à€}Ø—‘“ˆØ€~Ø—‘“ˆÜØØØØÜ˜VÓ$Øôð rg   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Ï  rv   r·   rè   )r^  F)rv   r·   rè   r”  Ú	is_pinned)rk   ri   rž   rä   r”   r{   r·  r¸   r¸  r@  rv   rF   rÐ  r�  rm   ÚdataclassesÚreplacerÈ   r1   rÏ  r¼   r-  rÊ  rË  r“  r�  )	rè   r”  r·   r�  rv   r™  Ú	pointwiser\  r  s	            re   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ç  rè  )r¥   rè   r”  r·   r�  rv   r™  s          re   Únew_empty_stridedrð  ³  sH   € ð €}Ø—‘“ˆØ€~Ø—‘“ˆÜØØØØÜ˜VÓ$Øôð rg   c                óæ   — t         j                  j                  j                  |«      }t	        t        t        |«      «      |j                  ¬«      }t        j                  j                  | |«      S )N)r]  )rR   r]   râ   rã   Úsortedr  rÈ   Ú__getitem__r1   rò  ró  )r¥   r”  rõ  s      re   Úcopy_stridedrô  Å  sN   € ä�W‰W×Ñ×5Ñ5°fÓ=€FÜœ%¤ F£Ó,°&×2DÑ2DÔE€LÜ�?‰?×/Ñ/°°<Ó@Ð@rg   c                óV   — |j                  d«      €J d«       ‚ t        |«      | fi |¤ŽS )Nr·   z(dtype should be handled by decomposition)r}  rÔ  )rè   rÏ  rú   s      re   Úfullrö  Ì  s5   € à�:‰:�gÓÐ*ÐVÐ,VÓVÐ*Ø)Ô˜jÓ)¨$Ñ9°&Ñ9Ð9rg   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   r.   c                ó–   •— t        | «      } t        j                   ‰| «      ‰‰   «      }t        | «      dk(  r|g} n|| ‰<    ‰| «      S rõ  )ri   rQ   Úindirect_indexingrÈ   )rU  Ú
gather_idxrÌ   Úindex_loaderrè   rN  s     €€€€re   r   zgather.<locals>.fnæ  sL   ø€ Ü�3‹iˆÜ×*Ñ*©<¸Ó+<¸dÀ3¹iÓHˆ
Üˆs‹8�qŠ=Ø�,‰Cà!ˆC�‰HÙ˜‹}Ðrg   r]  )rk   rB   Ú	get_numelré  rÉ   rÈ   ri  r-  r_  r?   rç   rn   r»   )	r¥   rÌ   r:  Úsparse_gradrx  r   rû  rè   rN  s	    `    @@@re   Úgatherrþ  Ò  sÇ   û€ ô �aœÔ#Ð#Ð#Ø‡�Ó˜AÒä˜˜EŸN™NÓ,Ó-Ð-à�:‰:‹<€DÜ�‹Y˜!‰^€FÜ
˜˜3 Ó
'€CáÜ�1�q�c‹NˆØˆsˆà�}‰}‹€HØ×$Ñ$Ó&€L÷ô ×ÑØ�|‰|‹~Ø�k‰k‹mØØ�~‰~Óô	ð rg   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´   r.   c                ó´   •— t        | «      t        ‰«      k(  sJ | › d‰› �«       ‚ ‰| d ‰ «      }t        j                  |‰d   «      gg | ‰d  ¢z   } ‰|«      S )Nz != r   )rÈ   rQ   rù  )rU  Ú	var_indexÚ
weight_idxÚindices_loaderÚindices_ndimrP  Úweight_loaderÚweight_sizes      €€€€€re   r   zembedding.<locals>.fn	  s{   ø€ Ü�3‹xœ3˜x›=Ò(Ð@¨S¨E°°h°ZÐ*@Ó@Ð(Ù" 3 }¨Ð#5Ó6ˆ	Ü×+Ñ+¨I°{À1±~ÓFÐGð K
Ø��ÐðK
ñ 
ˆ
ñ ˜ZÓ(Ð(rg   r]  )rÁ  rÎ  Ú	embeddingrÄ  rk   rB   Ústrr»   r_  rÈ   rÉ   r?   rç   rn   )Úweightr
  Úpadding_idxÚscale_grad_by_freqÚsparser   r  r  rP  r  r  s         @@@@@re   r  r  ÷  s  ü€ áØ7Ô¤§¡× 6Ñ 6Ó7Ø�G˜[Ð*<¸fó
ð 	
ñ Ðˆ:Ü�fœiÔ(Ð(Ð(Ü�gœyÔ)Ð)Ð)Ø”C˜×)Ñ)Ó+Ó,Ñ,Ð,Ð,à×&Ñ&Ó(€MØ×(Ñ(Ó*€NÜ�w×'Ñ'Ó)Ó*€LØ—/‘/Ó#€KØ6�×!Ñ!Ó#Ð6 k°!°" oÐ6€H÷)ð )ô ×ÑØ× Ñ Ó"Ø×ÑÓ ØØô	ð rg   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Â   rú  ©r™   rs   s     re   r›   z.check_and_broadcast_indices.<locals>.<genexpr>  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Â   rú  r  s     re   r›   z.check_and_broadcast_indices.<locals>.<genexpr>!  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�   rj   rk   rB   rÈ   r  rþ   rn   )r
  rv   rs   r¥   Ú
valid_idxsÚnew_indicess         re   Úcheck_and_broadcast_indicesr    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 )NFr.   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   rh  r.   ©r   Úwrap_neg)rÈ   r  ro   rQ   rù  )rU  r=  Ú	new_indexÚfirst_tensor_indexÚstart_offsetÚnext_idxrs   Úloaderrè   r   Úindexed_sizer
  Úindices_loadersÚnon_consecutive_tensorsÚoutput_sizeÚtensor_indicesÚtensor_sizer  rN  s            €€€€€€€€€€re   r   z*index_output_size_and_inner_fn.<locals>.fnW  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ÐErg   )rÿ   Úpairwiserj   rÈ   )r`  r
  r!  r"  r  r  rN  r   r  ÚpreviousÚcurrentrs   r$  r  r   r  r   s    ````````      @@re   Úindex_output_size_and_inner_fnr&  3  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_helperr?   rç   rn   r»   )r¥   r
  r   r   r\  r  s         re   Ú
index_implr)  |  sB   € Ü0°°G¸UÓCÑ€K�˜1ä×ÑØ�|‰|‹~Ø�k‰k‹mØØô	ð rg   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ö   )rU  Úindex_inner_fnrN  s    €€re   r\  z#index_impl_helper.<locals>.inner_fn¦  s   ø€ Ù™ sÓ+Ó,Ð,rg   )rk   ri   rž   r_  r  rn   rÈ   rÉ   r  Ú
IndexErrorr&  )r¥   r
  r   r  r!  rs   r  r"  r`  r  r   r\  r,  rN  s               @@re   r(  r(  ‡  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¼  )r)  r�   r�  rÁ  rÎ  r:  rØ  ©r¥   r
  s     re   r:  r:  ¬  sT   € ð
Ü˜!˜W¨DÔ1Ð1øÜò 
à	�	‰	ŒØMÔ¤§
¡
× 1Ñ 1ÀuÔMØˆwó
ò 	
ð
ús   ‚ �AAÁAc                ó   — t        | |d¬«      S )NFr/  )r)  r0  s     re   Ú_unsafe_indexr2  ¸  s   € ä�a˜¨Ô.Ð.rg   c                ó6   — t        t        | «      |||dd¬«      S )NTF©r   Úmay_realize©Úindex_put_impl_r«  ©r¥   r
  rý   Ú
accumulates       re   Ú	index_putr:  Å  s    € äÜˆa‹�'˜6 :°TÀuôð rg   c                ó6   — t        t        | «      |||dd¬«      S )NFr4  r6  r8  s       re   Ú_unsafe_index_putr<  Ì  s    € äÜˆa‹�'˜6 :°UÈôð rg   c                óÈ   — |j                  «       | j                  «       k7  rt        || j                  «       «      }|rt        | |«      }t        | t	        |d   || «      «      S rõ  )rn   rÚ  r¡   rS  r  )rC  r
  rñ   r9  s       re   Úindex_put_as_masked_fillr>  Ó  sV   € Ø×ÑÓ˜TŸ_™_Ó.Ò.Ü˜% §¡Ó!2Ó3ˆÙÜ�D˜%Ó ˆÜ�Tœ5 ¨¡¨U°DÓ9Ó:Ð:rg   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 )Nr.   )Ú,_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_rR   r]   r^   ra   Ú_overloadnamer/   Úgraph_partitionr|  r}  Údisable_cudagraphs_reasonr1   ÚIndexPutFallback)	rC  r
  rý   r9  r@  r©  ri  r“   rA  s	            re   Úindex_put_fallbackrI  Û  s¬   € ÝCäœ$Ÿ/™/¬1¯7©7×+?Ñ+?×+FÑ+F×+TÑ+TÓU€Kô
 �g‰g×"Ñ"€Gä×"Ò"ØÐÙ8¸ÔAà\ˆØ!Ÿ,™,×*Ñ*¨=¸$Ó?Ð?ˆ;Ð?Ø�EÐ*¨;¨-Ð8ˆCØ,/Œ�‰Ô)ä×Ñ˜ T¨7°F¸JÔGØ€Krg   c                ó$   — t        | |||dd¬«      S )NTr4  ©r7  ©rC  r
  rý   r9  s       re   rD  rD  ò  s   € äØˆg�v˜z°À4ôð rg   c                ó$   — t        | |||dd¬«      S )NFTr4  rK  rL  s       re   Ú_unsafe_index_put_rN  ù  s   € äØˆg�v˜z°ÀDôð rg   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)Nri  F)rk   rB   rm   r1   r5   r�  rå   rò  r˜   ri  ra   r{   rQ   rÎ  ÚrandpermrÄ  )Úindices    re   Ú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ð	ð rg   c              3  ó.   •K  — | ]  } ‰|«      –— Œ y ­wr—   rö   )r™   rR  rS  s     €re   r›   z"index_put_impl_.<locals>.<genexpr>  s   øè ø€ ò H
Ø39Ñ& v×.ñH
ùr	  r.   r   rh  r/  Ú
atomic_add©rv   r·   r\  r^  Úoutput_indexerÚscatter_mode©rÜ   r�  rm   )%r1   Útry_get_namer  r  r�  rü  rÈ   r»   r{   rÂ   rú  r  rÉ   r>  r>  Ú$are_deterministic_algorithms_enabledrI  rK   rÏ  rò   r  rn   r�   r_  rk   rB   ri   r&  r-  ÚScatterrÏ  ÚMutationLayoutSHOULDREMOVErR   r]   rs  rÜ   rt  )rC  r
  rý   r9  r   r5  r®  r  r:  r`  Úx_ndimr!  rs   r  r"  r  Úexpected_vals_sizer\  rv   Úscatterr\  rS  s                        @re   r7  r7     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_fnrU  Úself_loaders   €€€re   rC  z8_unsafe_masked_index.<locals>.inner_fn.<locals>.<lambda>Œ  s   ø€ ©KÑ8HÈÓ8MÓ,N€ rg   )r·   r{   rÂ   rQ   rò   r¨  )rU  Úmask_valrd  Úfillr®  Úmask_loaderre  s   ` €€€€€re   r\  z&_unsafe_masked_index.<locals>.inner_fn‡  sK   ù€ Ø�:‰:œŸ™Ò#Ü—|‘|¡K°Ó$4´e·j±jÓA‰Há" 3Ó'ˆHÜ�z‰z˜(Õ$NÐPTÓUÐUrg   r]  )r(  r_  r?   rç   rn   r»   )
rC  r®  r
  rg  r^  r  r\  rd  rh  re  s
    ` `   @@@re   Ú_unsafe_masked_indexri    sw   ü€ ä"3Øˆg˜U¨Uô#Ñ€FˆAÐð ×"Ñ"Ó$€KØ×"Ñ"Ó$€K÷Vð Vô ×ÑØ�‰Ó Ø�n‰nÓØØô	ð rg   c           	     óä   — t        ||d«      }| j                  «       }t        t        |«      «      D �cg c]#  }||   rt	        ||   ||    ||   dz
  «      nd ‘Œ% }}t        | ||d¬«      S c c}w )Nr   r.   T)r9  )r  rÉ   r  rÈ   rg  r<  )r¥   r®  r
  rý   Úmasked_valuer?  rs   Úclamped_indicess           re   Ú#_unsafe_masked_index_put_accumulaterm  –  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—   )rQ   r»  r¼  ©rî   ÚminÚmaxs      re   rg  rg  £  s   € ä�;‰;�sœCŸK™K¨¨QÓ/Ó0Ð0rg   c                óP   — t        | «      }t        ||||«      }t        ||«       |S r—   )r«  r{  Úcopy_)rC  rT  rè   r”  re  r0  Úoutput_views          re   Úas_strided_scatterru  ¨  s*   € ä�4‹[€FÜ˜V T¨6°>ÓB€KÜ	ˆ+�sÔØ€Mrg   c                ó2   — t        t        | «      |||fi |¤ŽS r—   )Úscatter_r«  )r¥   rÌ   r:  rT  rú   s        re   r`  r`  °  s   € ä”E˜!“H˜c 5¨#Ñ8°Ñ8Ð8rg   ©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 implrx  )rk   rB   rP   r»   r
   r{   r·   rä   rn   r1   ÚScatterFallback)r©  rC  rÌ   r:  rT  r  ry  Úsrc_is_tensors           re   Úscatter_fallbackr}  µ  sŠ   € ô ˜s¤IÓ.€MÜØØØ�‰ÓÜŒU�[‰[©]˜#Ÿ-™-œ/ÄÀSÃ	ÓJá!.ˆ�‰Ó×Ò°JØôô 	×ÑØØØØØØØ%õ	
ð ˆàrg   ©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¡   r$  r€  Úprod)
r˜   rÎ  rw  rR   r]   r^   ra   rE  r}  Úscatter_reduce_)rC  rÌ   r:  rT  r  r©  Úfallback_results          re   rw  rw  ×  s�   € àÐ.Ñ.Ð.Ð.Ø€~ÜœdŸm™m¬Q¯W©W×-AÑ-A×-HÑ-H×-VÑ-VÓWˆÜ*Ø˜˜s E¨3°vô
ˆð Ð&Ø"Ð"à�‚Ø‰Ø	�:Ò	ØˆÜ˜4  e¨S°&Ó9Ð9rg   c                ó0   — t        t        | «      |||«      S r—   )Úscatter_add_r«  ©r¥   rÌ   r:  rT  s       re   Úscatter_addr‡  é  s   € äœ˜a› # u¨cÓ2Ð2rg   c                ó    — t        | |||d«      S )Nr$  )r‚  r†  s       re   r…  r…  î  s   € ä˜1˜c 5¨#¨uÓ5Ð5rg   c                ó4   — t        t        | «      ||||fi |¤ŽS r—   )r‚  r«  )r¥   rÌ   r:  rT  Úreduction_typerú   s         re   Úscatter_reducer‹  ó  s   € äœ5 ›8 S¨%°°nÑOÈÑOÐOrg   )ry  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)Nr$  r�  ÚmeanÚamaxÚaminr.   ré  zKaten.scatter_reduce_.two is not the unique overload of aten.scatter_reduce_rx  r´   r   c                óª   •— ‰j                  «       }t        |«      }t        | «      }t        j                   ‰| «      |dk(  rdn|‰   d¬«      |‰<   |S )Nr   r.   F)r  )rÉ   rÈ   ri   rQ   rù  )rU  r?  rm  Úindirect_idxrÌ   rû  rC  s       €€€re   rW  z'scatter_reduce_.<locals>.output_indexer&  sU   ø€ à—‘“ˆÜ�5‹zˆÜ˜C“yˆÜ×1Ñ1Ù˜Ó D¨A¢I™q°5¸±:Èô
ˆ�SÑð Ðrg   c                ó`   •— ‰r ‰| «      S t        j                  ‰‰j                  «       «      S r—   ©rQ   rS  r»   )rU  rC  rT  r   s    €€€re   r   zscatter_reduce_.<locals>.fn0  s*   ø€ ÙÙ˜c“?Ð"ô —<‘<  T§^¡^Ó%5Ó6Ð6rg   c                ó   — | dk(  ry| �J ‚y )Nr$  rU  rö   r~  s    re   Úbackend_reduce_strz+scatter_reduce_.<locals>.backend_reduce_str8  s   € Ø�UŠ?Øð �>Ð!�>Ørg   c                óL   •— t        j                  d‰j                  «       «      S rõ  r“  )r:  rC  s    €re   rC  z!scatter_reduce_.<locals>.<lambda>H  s   ø€ ¤3§<¡<°°4·>±>Ó3CÓ#D€ rg   rV  rY  )rÈ   rÎ  r‚  r¤   rk   r    r)  r}  ré  rB   r  r»   rÉ   rÏ  rü  ri  r�  r_  rn   r1   r\  rÏ  r]  rR   r]   rs  rÜ   rt  )rC  rÌ   r:  rT  r  ry  rƒ  rm  rW  r   r•  rv   Úzero_outr\  r`  rû  r   s   `` `           @@re   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˜"‹~ˆØ€Krg   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ç      à?Fr/  )
rQ   rR  r{   rí  r¡   rS  rz  rò   rÿ  rù  )r¥   r¾  rè   Úexacts      €re   Ú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Ô:Ð:rg   c                ó”   •— | ‰ d  }| d ‰  } ‰
g |¢t        |‰‰«      D ���cg c]  \  }}} ‰	|||«      ‘Œ c}}}¢«      S c c}}}w r—   )r  )rU  r¥   r/  rs   r  rè   Úi_sizesÚ
inv_scalesrã  rœ  rN  s         €€€€€re   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r]  )Úrealize_hintr_  rÉ   rR   r]   râ   r  rÈ   r  rj   r?   rç   rn   r»   )r¥   r   Úscales_xrã  r›  Úbatchrs   Úo_sizesÚor¾  r   rž  rŸ  rœ  rN  s      ``      @@@@re   Úupsample_nearestndr¥  m  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 )Nr.   ©rã  ©r¥  ©r¥   r   rÈ  s      re   Úupsample_nearest1drª  œ  s   € ä˜a ¨v¨i¸1Ô=Ð=rg   c                ó$   — t        | ||fdd¬«      S )Nr.   T©rã  r›  r¨  r©  s      re   Ú_upsample_nearest_exact1dr­  ¡  s   € ä˜a ¨v¨i¸1ÀDÔIÐIrg   c                ó$   — t        | |||fd¬«      S )Nr,   r§  r¨  ©r¥   r   Úscales_hÚscales_ws       re   Úupsample_nearest2dr²  ¦  s   € ô ˜a ¨x¸Ð.BÀaÔHÐHrg   c                ó&   — t        | |||fdd¬«      S )Nr,   Tr¬  r¨  r¯  s       re   Ú_upsample_nearest_exact2dr´  ­  s   € ô ˜a ¨x¸Ð.BÀaÈtÔTÐTrg   c                ó&   — t        | ||||fd¬«      S )Nr©   r§  r¨  ©r¥   r   Úscales_dr°  r±  s        re   Úupsample_nearest3dr¸  ´  s   € ô ˜a ¨x¸À8Ð.LÐPQÔRÐRrg   c                ó(   — t        | ||||fdd¬«      S )Nr©   Tr¬  r¨  r¶  s        re   Ú_upsample_nearest_exact3drº  ¿  s#   € ô Ø	ˆ;˜ 8¨XÐ6¸!À4ôð rg   c                ó,   ‡ — t        ˆ fd„|D «       «      S )Nc              3  óJ   •K  — | ]  }t        j                  |‰«      –— Œ y ­wr—   r²  )r™   rî   r·   s     €re   r›   z$_create_constants.<locals>.<genexpr>Í  s   øè ø€ Ò6¨A”—‘˜a ×'Ñ6ùs   ƒ #)rž   )r·   rt   s   ` re   r¹  r¹  Ì  s   ø€ ÜÓ6°Ô6Ó6Ð6rg   c                óÀ   ‡‡‡— | j                  «       Š| j                  «       Šˆˆˆfd„}t        j                  | j	                  «       | j                  «       |‰¬«      S )Nc                óŒ   •— t        | «      } t        | «      t        ‰«      k(  sJ ‚‰D ]  }‰|   dz
  | |   z
  | |<   Œ  ‰| «      S rú  )ri   rÈ   )rU  rÌ   r  r  rN  s     €€€re   r  zrev.<locals>.loaderÖ  sW   ø€ Ü�3‹iˆÜ�3‹xœ3˜u›:Ò%Ð%Ð%Øò 	3ˆCØ˜c™
 Q™¨#¨c©(Ñ2ˆC�ŠHð	3ñ ˜‹}Ðrg   r]  )r_  rÉ   r?   rç   rn   r»   )r¥   r  r  r  rN  s    ` @@re   Úrevr¿  Ð  sM   ú€ ð �}‰}‹€HØ�J‰J‹L€Eöô ×ÑØ�|‰|‹~Ø�k‰k‹mØØô	ð rg   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*                  «      }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.
        Tr.   r   F)rR   r]   r^   rž   r_   rÈ   ra   rÎ  ÚmmrÄ  Úaddmm)r^   r_   s     re   Ú_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
ñ  
ð àrg   Nrª   r,   r.   r   r©   F)rÌ   r|  r}  rg  ÚinductorÚinplace_padding)rÈ   rÉ   r�  rk   r1   rB   rm   rå   rÏ  r/   Úcan_inplace_pad_graph_inputÚInputBufferrÜ   Úfreeze_layoutr’  r”  rè   rR   r]   Úbuffer_to_padded_sizer{  rx  rŒ  Úfill_r   )r¥   ÚpaddingrÏ  rÄ  r  r�  r@  ÚnpadÚstride0ÚrowsizeÚbufnameÚpadded_sizeÚ	resized_xÚsliced_xs                 re   Ú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×!Ñ! 'Ñ*ÜØ	ØØ�‰Ø�‰ó	€Iô �i Q¨g¸7ÀT¹>ÐQVÔW€HÜ	ˆ(�JÔäˆZÑÐ*Ó+¨qÑ0Ó+ØÐrg   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—   )rk   r´   ©r™   rÓ  s     re   r›   z_pad_as_cat.<locals>.<genexpr>O  s   è ø€ Ò3 aŒz˜!œS×!Ñ3ùr  Nr,   r.   r   rà   rF  rÅ  Úpad_rewritten_as_cat)r  rÉ   rÈ   ri   r  rj   rn   rä   r»   r   rÔ  r   r  )r¥   rÌ  rÏ  r  rm  Ú	pad_pairsÚpad_dimÚ
pad_amountrs   Úleftr-  rv   Ú	pad_shaper·   Úfill_value_typedÚ
pad_tensors                   re   Ú_pad_as_catrà  E  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Ü��:ˆ Ó(Ð(rg   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 )Nr,   r   c              3  ó&   K  — | ]	  }|d k(  –— Œ y­w©r   Nrö   r×  s     re   r›   z"constant_pad_nd.<locals>.<genexpr>}  s   è ø€ Ò
#�aˆ1��6Ñ
#ùr  r.   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:  rN  s   €€re   rC  z/constant_pad_nd.<locals>.mask.<locals>.<lambda>¤  s   ø€ ©°«€ rg   )	r  ro   Úrange_mask_lowÚrange_mask_highr  r  rQ   r§  r¨  )r:  r®  rU  r  r  r–  ÚboundsrÏ  Ú
mask_sizesrã  rN  s   `     €€€€€re   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ÐDrg   c                ó¾   •— t        | d ‰ «      }t        | ‰d  ‰«      D ]  \  }\  }}|j                  ||z
  «       Œ t        |«      t        | «      k(  sJ ‚ ‰|«      S r—   )ri   r  ro   rÈ   )r:  r  rU  r  Ú_highÚbounds_precompr®  rã  s        €€€re   Ú	offset_fnz"constant_pad_nd.<locals>.offset_fn¦  si   ø€ Ü˜˜r ˜“Oˆ	Ü!$ U¨1¨2 Y°Ó!?ò 	(ÑˆC‘�#�uØ×Ñ˜S 3™YÕ'ð	(ä�9‹~¤ U£Ò+Ð+Ð+Ù�I‹Ðrg   r]  )rÈ   r  r«  r/   rÆ  rÔ  rà  rÉ   ri   r(  r  ro   rR   r]   râ   Úlookup_precomputed_sizer¼   r-  r   r»   r_  r?   rç   rn   )r¥   rÌ  rÏ  rq   r  ÚlÚhr   r  r  rè   rí  rè  rì  r®  ré  rã  rN  s     `         @@@@@@re   r  r  z  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ØØô	ð rg   c                óÜ   — t        j                  t        j                  | t        j                  «      t        j                  t        j                  |«      t        j                  «      «      S r—   )rQ   r¥  rR  r{   r¤  r¼   r¹  )rs   r  s     re   ræ  ræ  ¶  s@   € Ü�6‰6Ü�‰�qœ%Ÿ+™+Ó&Ü�‰”u—}‘} SÓ)¬5¯;©;Ó7óð rg   c                ó¶   — t        j                  t        j                  | t        j                  «      t        j                  |t        j                  «      «      S r—   )rQ   r¦  rR  r{   r¤  )rs   r  s     re   rç  rç  ½  s7   € Ü�6‰6Ü�‰�qœ%Ÿ+™+Ó&Ü�‰�tœUŸ[™[Ó)óð rg   c                óV   — t        j                  t        | |«      t        | |«      «      S r—   )rQ   r§  ræ  rç  )rs   r  r  s      re   Ú
range_maskrô  Ä  s'   € Ü�8‰8Ü�q˜#ÓÜ˜˜4Ó óð rg   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   €€€€€re   rC  z;constant_boundary_condition.<locals>.load.<locals>.<lambda>ß  s$   ø€ ÐOÔ3°A°~È3ÔOØ"�f�N˜r�Nó€ rg   c                 ó   •—  ‰g ‰¢‰ ¢«      S r—   rö   )rú  rü  rN  s   €€€re   rC  z;constant_boundary_condition.<locals>.load.<locals>.<lambda>å  s   ø€ ©(°>°V°>¸b°>Ó*B€ rg   )r  r  rQ   r§  r  rô  r¨  )r:  rs   r®  rú  rü  rÌ   rÏ  rð  rû  rÌ  Ú	padding_hr¥   rN  s      @@€€€€€€€€re   rm  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É   r_  )	r¥   rÏ  rÌ  rû  rÌ   rm  rð  rþ  rN  s	   ````` @@@re   rù  rù  Ë  sE   ÿ€ ð 	
�
‰
‹�c�T�UÐ€AØ�}‰}‹€HàÒ$˜A˜3 ™9€I÷
ó 
ð* €Krg   ©Ú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 )Nr.   r,   r   F)	rÈ   r(   rR   r]   râ   r  r¼   r\  r  )	r¥   rs   Úkernel_sizer”  rÌ  Ú	ceil_moder   Úx_outÚx_alts	            re   Úpooling_sizer  ë  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Ø�)ÐÐrg   c               ól   — t        | |«      } t        j                  t        j                  | «      }|dkD  S )Né   )rL   r  r  r?  rz  )r  Ún_dimÚwindow_sizes      re   Ú%should_fallback_max_pool_with_indicesr  	  s/   € Ü˜{¨EÓ2€KÜ×"Ñ"¤8§<¡<°Ó=€KØ˜ÑÐrg   ©Ú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   r.   r,   ©r	  )rL   rk   rB   rÈ   rÉ   r  )r¥   r  r”  rÌ  r   r	  r  Úuse_fallbacks           re   Úmax_pool_checksr    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ØÐ"Ø˜Ò.Ð.Ð.à˜ ¨°<Ð?Ð?rg   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 )
Nrÿ  Fú-infc              3  ó&   K  — | ]	  }|d kD  –— Œ y­wrH  rö   r  s     re   r›   z)_max_pool_with_offsets.<locals>.<genexpr>K  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  )rU  Úreduction_idxrü  Úbhrs   rú  r   r	  rÌ  r”  rN  s         €€€€€re   Úfn_innerz(_max_pool_with_offsets.<locals>.fn_innerP  sƒ   ø€ Ø�W�u�f�ˆØ�%��ˆ\ˆô ˜5“\ö
àð �‰U�V˜A‘YÑ =°Ñ#3°h¸q±kÑ#AÑBÀWÈQÁZÓOð
ˆð 
ñ ˜˜&˜ 2˜Ó'Ð'ùò	
s   ›$Arq  ©rŠ  Ú
input_noderv   Ú	dst_dtyper§  r\  r^  Úreduction_rangesÚargmax)r   r?  r  r  r  r·   r{   rÂ   rw  r5  rÌ  rp  ri   r  rù  r_  r@   rç   rn   r¤  rk   rm   r�  )r¥   r  r”  rÌ  r   r  r	  r¢  Údhwr  Údhw_outr·   Ú	min_valuerP  r  r¨  ÚoffsetsrN  s     ``` `          @re   Ú_max_pool_with_offsetsr#  ,  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)NFr  r  ©Úunroll_reductions_thresholdr  )rÈ   r  r/   r   r#  rò   r{   rù  )
r¥   r  r”  rÌ  r   r  r	  r  r¨  r"  s
             re   Ú!_low_memory_max_pool_with_offsetsr'  w  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—   )rQ   rù  r0   Ú_flattened_index_to_ndrR  Ú_flatten_indexr{   r¤  )rU  rx  Úoffset_sympyr  ÚidhwÚincrements_to_indexÚ
input_sizer  r	  Úoffsets_loaderr
  s        €€€€€€re   Ú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ó
ð 	
rg   r]  )rÈ   r_  r¼   rw  r  r  r?  rz  r?   rç   rn   r{   r¤  rÉ   )	r"  r  r/  r.  r1  r
  r	  r0  r
  s	    ```  @@@re   Ú_pool_offsets_to_indicesr2  š  s�   ý€ ô �Ó€EØ×(Ñ(Ó*€NÜ—-‘-¤	× 0Ñ 0´·±¸{Ó KÓL€K÷
ñ 
ô ×ÑØ×!Ñ!Ó#Ü�k‰kØ#Ø×ÑÓ!ô	€Gð €Nrg   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  )rU  r  r  rs   r   r	  rÌ  r”  s       €€€€re   r.  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È   r2  )r"  r  r/  r”  rÌ  r   r.  r	  s      ``` @re   Ú'_low_memory_max_pool_offsets_to_indicesr5  ¹  s-   û€ ô �Ó€E÷
ô $Ø�˜jÐ*=óð rg   c           	     óž   — t        | |||||¬«      \  }}}}}t        | ||||||¬«      \  }}	t        |	|| j                  | d  |||«      }
||
fS )Nr  )r  r#  r5  r?  )r¥   r  r”  rÌ  r   r  r	  r  rq   r"  r
  s              re   Ú_max_pool_with_indicesr7  Î  s}   € ô 1@Ø	ˆ;˜ ¨¸ô1Ñ-€K�˜ (¨Aô *Ø	ˆ;˜ ¨°9ÀEô�L€Cˆô 6ØØØ	�‰���ÐØØØó€Gð �ˆ<Ðrg   c           	     ó&   — t        | |||||d¬«      S ©Nr,   r  ©r7  ©r¥   r  r”  rÌ  r   r  s         re   Úmax_pool2d_with_indicesr<  ì  ó    € ô "Ø	ˆ;˜ ¨°9ÀAôð rg   c           	     ó&   — t        | |||||d¬«      S ©Nr©   r  r:  r;  s         re   Úmax_pool3d_with_indicesr@  û  r=  rg   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   r.   r,   ry  )rv   r·   rè   rY  c              3  ó&   K  — | ]	  }|d k7  –— Œ y­wrH  rö   r  s     re   r›   z3max_pool2d_with_indices_backward.<locals>.<genexpr>:  s   è ø€ Ò
$�aˆ1��6Ñ
$ùr  c              3  ó�   •K  — | ]=  }t        t        |‰d    «      t        d t        |‰d    z
  ‰d    «      «      z
  d«      –— Œ? y­w©r   r.   N©rq  r(   ©r™   rð  r  r”  s     €€re   r›   z3max_pool2d_with_indices_backward.<locals>.<genexpr>G  ó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©r.   r   NrE  ©r™   Úwr  r”  s     €€re   r›   z3max_pool2d_with_indices_backward.<locals>.<genexpr>K  rG  rH  r  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   r.   éþÿÿÿFr/  rh  r£  )rQ   rR  r{   rÿ  r(   r»  rS  r¼  r  r¡   rù  rÞ  rŸ  r  rí  r§  r¦  )rU  rü  rð  rL  Ú
index_testÚphstartÚpwstartÚphendÚpwendÚgradientÚph_Úpw_ÚphÚpwÚ
grad_indexÚindex_actualÚ	grad_partr   r®  Úgrad_loaderÚh_window_sizer  Úindices_sizer  rÌ  Úpooled_heightÚpooled_widthr”  Úw_window_sizeÚwidths                      €€€€€€€€€€€re   r   z,max_pool2d_with_indices_backward.<locals>.fnZ  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 Ð#Ð#Ð#Øˆrg   r]  )rk   rB   rÈ   rÉ   r   rƒ  rm   r?   rn   r1   rÏ  rÊ  r»   Údecide_layoutry  r  Ú)fallback_max_pool2d_with_indices_backwardr_  ri   rq  r  rç   rò  r2  )Úgrad_outputr¥   r  r”  rÌ  r   r  r
  Ú	gO_striderm   rv   Úx_bufferÚx_strideÚis_channels_lastÚ_batchÚ_heightr  rP  r
  r   rq   r\  r]  r  r^  r_  r`  ra  rb  s     ```                @@@@@@@@re   Ú max_pool2d_with_indices_backwardrl    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àˆ
rg   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_indexrú  Úiwrü  Úw_start_indexrN  s   €€€€€€re   rC  z3pad_adaptive_loader.<locals>.load.<locals>.<lambda>¶  s&   ø€ ‘HÐN˜vÐN }°rÑ'9ÐN¸=È2Ñ;MÐNÓO€ rg   )rQ   r§  r¦  rR  r{   r¤  r¨  )rü  Ú
incrementsÚstart_indicesÚend_indicesÚh_end_indexÚw_end_indexr®  rp  rú  rq  rr  Úpad_valrN  s   `      @@@@€€re   rm  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Øó
ð 	
rg   ©r_  )r¥   rx  rm  rN  s    ` @re   Úpad_adaptive_loaderrz  ¡  s   ù€ Ø�}‰}‹€Hõ
ð, €Krg   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_outrp  rv  rr  rw  s
             re   Ú 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ÐArg   c                ód   ‡‡‡‡‡‡— |\  }}|\  }}	t        | |||||	«      \  ŠŠŠŠˆˆˆˆˆˆfd„}
|
S )Nc                ó  •— | �^ }}} ‰|«      } ‰|«      } ‰|«      } ‰|«      }d }	t        j                  t        ‰d   «      t        ‰d   «      «      D ]$  \  }
} |||
|g||g||g«      }|	€|}	Œ ‰||	«      }	Œ& |	S rý  )rÿ   Úproductr  )rU  r  rü  r  Úbwrp  rv  rr  rw  r¨  rú  rq  r$  Úh_end_index_fnÚh_start_index_fnÚkernel_maxesÚ
pooling_fnÚw_end_index_fnÚw_start_index_fns                €€€€€€re   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ð ˆrg   ©r‚  )r  r€  r‰  Úin_sizesÚ	out_sizesrŠ  r~  r  r€  r�  r   r‡  rˆ  r‹  rŒ  s     `  `     @@@@re   Ú_adaptive_pooling_fnr�  Ç  sP   ý€ ð �J€Dˆ$Ø�L€Eˆ5ô 	)Ø�Y  d¨E°5ó	ñØØØØ÷
ñ ð. €Irg   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  rQ   rR  r{   r¤  r  Úgt)rU  r  rü  r  r†  rp  rv  rr  rw  ÚmaxvalÚmaxindexrú  rq  r$  r:  r‡  rˆ  r‰  rŠ  r‹  r  rŒ  s                  €€€€€€€re   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ð, ˆrg   r�  )r  r€  r‰  rŽ  r�  rŠ  r~  r€  r�  r   r‡  rˆ  r‹  r  rŒ  s     `  `    @@@@@re   Ú_adaptive_pooling_fn_with_idxr–  ð  sQ   þ€ ð �J€Dˆ$Ø�L€Eˆ5ô 	)Ø�Y  d¨E°5ó	ñØØØØ÷
!ò !ðF €Irg   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'r,   r   rF  r.   r  c                ó    — t        | |z  |«      S r—   ©r(   ©r:  r|  r}  s      re   r  z)_adaptive_avg_pool2d.<locals>.start_indexP  ó   € Ü˜ ™¨7Ó3Ð3rg   c                ó2   — t        | dz   |z  |z   dz
  |«      S rú  r™  rš  s      re   r€  z'_adaptive_avg_pool2d.<locals>.end_indexS  ó"   € Ü˜ ™ gÑ-°Ñ7¸!Ñ;¸WÓEÐErg   ©r  r€  r‰  rŽ  r�  rŠ  c                ó^   •— t        j                   ‰| t        ‰«      «       ‰| ‰«      «      S r—   )rQ   Útruedivrz  )rU  Úfn_sumÚones_loaderr¥   s    €€€re   r   z _adaptive_avg_pool2d.<locals>.fna  s-   ø€ Ü�{‰{Ù�3Ô+¨AÓ.Ó/±¸¸[Ó1Ió
ð 	
rg   r]  )r»   r{   r¤  r·  rk   rB   rÈ   r   rÉ   rR   r]   râ   r  r«  rO  rn   r(   Ú
avg_pool2drE   ri   Úfallback_adaptive_avg_pool2dr�  rQ   r¡   rz  Ú	ones_liker?   rç   )r¥   r   r¢  r~  r  r€  r�  Úo_sizer  Úh_kernel_maxÚw_kernel_maxrP  r·   r
  r  r€  r   Úrvr¡  r¢  s   `                 @@re   Ú_adaptive_avg_pool2drª  *  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ð €Irg   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 Longr,   r   rF  r.   r  c                ó    — t        | |z  |«      S r—   r™  rš  s      re   r  z(adaptive_max_pool2d.<locals>.start_indexš  r›  rg   c                ó2   — t        | dz   |z  |z   dz
  |«      S rú  r™  rš  s      re   r€  z&adaptive_max_pool2d.<locals>.end_index�  r�  rg   rž  c           	     ó<   •—  ‰| t        ‰t        d«      «      «      S ©Nr  ©rz  r5  )rU  Úinner_func_max_valr¥   s    €€re   Úinner_fn_max_valz-adaptive_max_pool2d.<locals>.inner_fn_max_val²  ó   ø€ Ù! #Ô':¸1¼eÀF»mÓ'LÓMÐMrg   c           	     ó<   •—  ‰| t        ‰t        d«      «      «      S r¯  r°  )rU  Úinner_func_max_idxr¥   s    €€re   Úinner_fn_max_idxz-adaptive_max_pool2d.<locals>.inner_fn_max_idxµ  r³  rg   r]  )r»   r{   r¤  r·  rk   rB   rÈ   r   rÉ   rR   r]   râ   r  rO  rn   Ú
ValueErrorrE   ri   Úfallback_adaptive_max_pool2dr�  rQ   r»  r–  r?   rç   )r¥   r   r¢  r~  r  r€  r�  r¦  r§  r¨  rP  r·   r
  r  r€  r²  r¶  r©  Úrirµ  r±  s   `                  @@re   Úadaptive_max_pool2drº  u  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€Mrg   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©   r.   r   r,   )rÉ   rÈ   rQ   rR  r»   r{   r¤  r   rò   Úfloat64r  rŸ  r7  r¦  rù  r¼   rw  )rü  rs   Úsamples_shapeÚsampleÚi_exprÚdiffÚout_sz_exprrZ  Úseq_ir®  rÌ   Úin_szÚ	kernel_szÚndimsÚout_szÚsamplesÚsamples_loaders             €€€€€€€re   rm  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ÐXrg   ry  )rÈ  rÄ  rÇ  rÅ  rÌ   rÆ  rm  rÉ  s   `````` @re   Ú_fractional_pooling_offsetsrÊ  Ç  s@   þ€ Ø�C‰[€FØ�#‰J€EØ˜#‘€IØ×(Ñ(Ó*€N÷!Yò !YðF €Krg   c                ó"   — t        | |||d¬«      S r9  ©Ú_fractional_max_pool©r¥   r  r   Úrandom_sampless       re   Úfractional_max_pool2drÐ  ó  ó   € ä  ;°¸^ÐSTÔUÐUrg   c                ó"   — t        | |||d¬«      S r?  rÌ  rÎ  s       re   Úfractional_max_pool3drÓ  ø  rÑ  rg   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)	Nr  r%  )rÈ  rÄ  rÇ  rÅ  rÆ  rÌ   c                ó6   •— | d ‰  } ‰g |¢ ‰| |«      ¢«      S r—   rö   )rU  r  rü  r.  r	  rN  s      €€€re   r  z&_fractional_max_pool.<locals>.fn_inner  s.   ø€ Ø˜˜5˜&�\ˆFÙÐO˜fÐOÑ':¸3ÀÓ'NÐOÓPÐPrg   c                ó~   •— | d ‰  }| ‰ d  }t        ‰«      D �cg c]  } ‰|   |||   «      ||   z   ‘Œ c}S c c}w r—   r  )rU  r  rü  Úbdhwr  Údhw_index_fnr	  s        €€re   r.  z1_fractional_max_pool.<locals>.increments_to_index  s^   ø€ Ø˜˜5˜&�\ˆFØ˜�v�w�<ˆDô ˜u›öàð  �˜Q‘ ¨¨Q©Ó0°=ÀÑ3CÓCòð ùò s   ›:rq  r  r  )r   r?  r/   r   r  rÊ  r_  ri   r»   r@   rç   rn   r{   r¤  rk   rB   rm   r�  r2  )r¥   r  r   rÏ  r	  r¢  Úinp_dhwr  r  rP  r·   r¨  r"  r
  rØ  r.  rN  s       `         @@@re   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   r.   )Údivisor_overridec                óF   — t        | |z  t        j                  |«      «      S r—   )r'   r¼   rw  rš  s      re   r  z0upsample_nearest2d_backward.<locals>.start_indexV  s   € Ü�u˜w‘¬¯©°gÓ(>Ó?Ð?rg   c                ó   •—  ‰| dz   ||«      S rú  rö   )r:  r|  r}  r  s      €re   r€  z.upsample_nearest2d_backward.<locals>.end_indexY  s   ø€ Ù˜E A™I¨°Ó9Ð9rg   rž  c                ó(   •—  ‰| t        ‰«      «      S r—   )rz  )rU  r¡  r¥   s    €€re   r   z'upsample_nearest2d_backward.<locals>.fne  s   ø€ Ù�cÔ.¨qÓ1Ó2Ð2rg   r]  )r   rÉ   rR   r]   râ   r  r£  r(   rE   r�  rQ   r¡   r?   rç   rn   r»   ri   )r¥   r   r/  r°  r±  rj  Úinp_hÚinp_wÚout_hÚout_wr§  r¨  r€  r   r©  r¡  r  s   `              @@re   Úupsample_nearest2d_backwardrã  A  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ð €Irg   c           
     ó(   — t        | ||||||d¬«      S )Nr,   rø  ©Ú_avg_poolnd©r¥   r  r”  rÌ  r  Úcount_include_padrÛ  s          re   r£  r£  s  ó)   € ô Ø	ØØØØØØØô	ð 	rg   c           
     ó(   — t        | ||||||d¬«      S )Nr©   rø  rå  rç  s          re   Ú
avg_pool3drë  ‰  ré  rg   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   r.   r,   r£  rø  TF)rÎ   rÄ   c                óœ   •— | d ‰  }| ‰ d  }|}t        ‰«      D �cg c]  }||   ‰|   z  ||   z   ‰|   z
  ‘Œ }} ‰	g |¢|¢«      S c c}w r—   r  )
rU  r  rü  r  rú  rs   rÌ   rÌ  r”  rN  s
         €€€€re   r  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	r  c              3  óœ   K  — | ]D  \  }}t         j                  j                  j                  t	        j
                  ||«      «      –— ŒF y ­wr—   )rR   r]   râ   Ústatically_known_truer¼   ÚNe)r™   rù   r  s      re   r›   z_avg_poolnd.<locals>.<genexpr>â  s;   è ø€ ò  áˆAˆqô 	
�‰×Ñ×.Ñ.¬u¯x©x¸¸1«~×>ñ ùs   ‚A
Ar%  r$  r  rm   c                óº  •— | ‰ d  }g }t        ‰«      D ]¡  }||   ‰|   z  ‰|   z
  }t        j                  |‰
|   z   ‰	|   ‰|   z   «      }‰s/t        j                  |d«      }t        j                  |‰	|   «      }t	        j
                  ||z
  t        j                  «      }|j                  |«       Œ£ t        j                  t        j                  |«      S rõ  )r  r¼   r`  ra  rQ   rR  r{   rÿ  ro   r  r  rz  )rU  r  Údivide_factorsrs   ÚhstartÚhendÚfactorrè  rÌ   rð  r  rÌ  r”  s          €€€€€€re   Úfn_countz_avg_poolnd.<locals>.fn_count  sÏ   ø€ Ø�c�T�U�ˆBàˆNÜ˜3“Zò .�Ø˜A™ ¨¡Ñ*¨W°Q©ZÑ7�Ü—y‘y ¨+°a©.Ñ!8¸!¸A¹$ÀÈÁÑ:KÓL�Ù(Ü"ŸY™Y v¨qÓ1�FÜ Ÿ9™9 T¨1¨Q©4Ó0�DÜŸ™¨¨v©´u·{±{ÓC�Ø×%Ñ% fÕ-ð.ô ×#Ñ#¤C§G¡G¨^Ó<Ð<rg   r]  )#rL   rk   rB   rÈ   rÉ   r   r  r  r  r  rù  r_  ri   r»   rÔ   r   rE  r  r  r?  rz  Úfallbacks_avg_poolndr/   r   Ú
contextlibÚnullcontextrn   r@   rç   rí   rm   r�  Údiv_primr?   rò   )r¥   r  r”  rÌ  r  rè  rÛ  rÌ   r¢  rs   r€  Ú
ceil_modesÚhad_paddingrP  r·   Úoutput_dtyper  r
  ÚfallbackÚcontextrv   r©  Údivisorr¨  rö  Údivide_factorrð  rN  s    ``` ` `                  @@re   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 zeror,   ry  r.   c              3  ó�   •K  — | ]=  }t        t        |‰d    «      t        d t        |‰d    z
  ‰d    «      «      z
  d«      –— Œ? y­wrD  rE  rF  s     €€re   r›   z&avg_pool2d_backward.<locals>.<genexpr>X  rG  rH  c              3  ó�   •K  — | ]=  }t        t        |‰d    «      t        dt        |‰d    z
  ‰d    «      «      z
  d «      –— Œ? y­wrJ  rE  rK  s     €€re   r›   z&avg_pool2d_backward.<locals>.<genexpr>\  rG  rH  r  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   r.   )
rQ   rS  r{   rÿ  rÞ  rz  r¼  r¡   rR  r»  )rW  rX  Ústride_hÚstride_wÚpad_hÚpad_wÚkernel_hÚkernel_wró  Úwstartrô  Úwendr  Úheightr  rÌ  r”  rb  s                €€€€€re   Ú!compute_pool_size_without_paddingz>avg_pool2d_backward.<locals>.compute_pool_size_without_paddingo  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ˆØÐrg   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   r.   Fr/  r£  )rQ   rR  r(   r{   rÿ  r»  rS  r¼  r  r¡   r   rù  rÞ  r§  r¦  r  rí  )rU  rü  rð  rL  rP  rQ  rR  rS  rT  rU  rV  rW  rX  r¾  Úpartr®  r  rè  rÛ  r\  r]  rü  r  rÌ  r_  r`  r”  ra  s                   €€€€€€€€€€€€re   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 Ð#Ð#Ð#Øˆrg   r]  )rk   rB   rÈ   rÉ   r   r  r_  ri   r»   rq  r  Úfallback_avg_pool2d_backwardr?   rç   rn   )re  r¥   r  r”  rÌ  r  rè  rÛ  r  Ú_h_outÚ
ceil_mode1Ú_w_outÚ
ceil_mode2rP  r·   r
  r   r©  r  r\  r]  rü  r  r_  r`  ra  rb  s     ``` ``          @@@@@@@@@re   Úavg_pool2d_backwardr  /  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ð €Irg   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   r  )r   r   r   r©   )rª   r«   r.   r,   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rD  )rq  )r™   r  rs   r  r”  s     €€€re   r›   z0avg_pool3d_backward.<locals>.<genexpr>.<genexpr>  sF   øè ø€ ò 
àô ��V˜A‘Y‘¤ Q¨¨[¸©^Ñ);ÀÀqÁ	Ñ(IÓ!JÑJÈA×Nñ
ùs   ƒ58r,   N)rq  r  )r™   rs   r  r”  s    @€€re   r›   z&avg_pool3d_backward.<locals>.<genexpr>  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—   ©rQ   rS  r{   rÿ  ©r™   r  s     re   r›   zQavg_pool3d_backward.<locals>.compute_pool_size_without_padding.<locals>.<genexpr>  s   è ø€ Ò'UÈ¬¯©°Q¼¿¹×(DÑ'Uùó   ‚.0c              3  ód   K  — | ](  }t        j                  |t        j                  «      –— Œ* y ­wr—   r  r×  s     re   r›   zQavg_pool3d_backward.<locals>.compute_pool_size_without_padding.<locals>.<genexpr>  s   è ø€ ÒMÀœsŸ|™|¨A¬u¯{©{×;ÑMùr!  c              3  ód   K  — | ](  }t        j                  |t        j                  «      –— Œ* y ­wr—   r  )r™   rù   s     re   r›   zQavg_pool3d_backward.<locals>.compute_pool_size_without_padding.<locals>.<genexpr>   s$   è ø€ ò (
Ø-.ŒC�L‰L˜œEŸK™K×(ñ(
ùr!  c              3  óx   K  — | ]2  \  }}}t        j                  t        j                  ||«      |«      –— Œ4 y ­wr—   )rQ   rÞ  rz  )r™   rÓ  r  Úpads       re   r›   zQavg_pool3d_backward.<locals>.compute_pool_size_without_padding.<locals>.<genexpr>$  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—   )rQ   r¼  r¡   rR  r{   rÿ  )r™   r|  rù   rÌ   r%  s        re   r›   zQavg_pool3d_backward.<locals>.compute_pool_size_without_padding.<locals>.<genexpr>*  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ã  ©rQ   r»  rS  r{   rÿ  )r™   r|  s     re   r›   zQavg_pool3d_backward.<locals>.compute_pool_size_without_padding.<locals>.<genexpr>5  s2   è ø€ ò "
àô �K‰K˜œsŸ|™|¨A¬u¯{©{Ó;×<ñ"
ùó   ‚AAc              3  ó’   K  — | ]?  \  }}t        j                  |t        j                  |t        j                  «      «      –— ŒA y ­wr—   ©rQ   r¼  rR  r{   rÿ  )r™   r}  rÌ   s      re   r›   zQavg_pool3d_backward.<locals>.compute_pool_size_without_padding.<locals>.<genexpr>9  s6   è ø€ ò 
á��Sô �K‰K˜œSŸ^™^¨C´·±Ó=×>ñ
ùó   ‚AA)r  rQ   rz  rÞ  )ÚpdrW  rX  Ústride_dr  r  Úpad_dr	  r
  Úkernel_dr  r  Údstartró  r  Údendrô  r  r  Údepthr  r  rÌ  r”  rb  s                      €€€€€€re   r  z>avg_pool3d_backward.<locals>.compute_pool_size_without_padding  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ó
ˆð Ðrg   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  r%  s      re   r›   z2avg_pool3d_backward.<locals>.fn.<locals>.<genexpr>D  s   è ø€ ÒA™v˜q #�1�s•7ÑAùr>  c              3  óŒ   K  — | ]<  \  }}}t        j                  t        ||z
  |z   |«      t        j                  «      –— Œ> y ­wr—   ©rQ   rR  r(   r{   rÿ  )r™   r  rù   r  s       re   r›   z2avg_pool3d_backward.<locals>.fn.<locals>.<genexpr>F  s<   è ø€ ò %
á��1�aô �N‰Nœ8 A¨¡E¨A¡I¨qÓ1´5·;±;×?ñ%
ùr)  c              3  ó„   K  — | ]8  \  }}t        j                  t        ||«      d z   t        j                  «      –— Œ: y­wrH  r7  )r™   r  r  s      re   r›   z2avg_pool3d_backward.<locals>.fn.<locals>.<genexpr>K  s6   è ø€ ò 
á��1ô �N‰Nœ8 A q›>¨AÑ-¬u¯{©{×;ñ
ùs   ‚>A c              3  óŒ   K  — | ]<  }t        j                  |t        j                  d t        j                  «      «      –— Œ> y­wrã  r(  )r™   Úpstarts     re   r›   z2avg_pool3d_backward.<locals>.fn.<locals>.<genexpr>P  s2   è ø€ ò %
àô �K‰K˜¤§¡¨Q´·±Ó <×=ñ%
ùr)  c              3  ó’   K  — | ]?  \  }}t        j                  |t        j                  |t        j                  «      «      –— ŒA y ­wr—   r+  )r™   ÚpendÚ
pooled_dims      re   r›   z2avg_pool3d_backward.<locals>.fn.<locals>.<genexpr>T  s6   è ø€ ò 
á ��jô �K‰K˜œcŸn™n¨Z¼¿¹ÓE×Fñ
ùr,  c              3  ó’   K  — | ]?  \  }}t        j                  |t        j                  |t        j                  «      «      –— ŒA y ­wr—   )rQ   r¡   rS  r{   rÿ  )r™   r:  Úp_s      re   r›   z2avg_pool3d_backward.<locals>.fn.<locals>.<genexpr>`  s6   è ø€ ò "á&˜F Bô Ÿ™ ¬¯©°R¼¿¹Ó(E×Fñ"ùr,  r   r.   r,   Fr/  r£  )r  r  rQ   r   rù  r¼  rÞ  rS  r{   rÿ  r§  r¦  r  rí  r¡   )#rU  rü  r  rð  rL  ÚpdstartrP  rQ  ÚpdendrR  rS  rT  Úpd_rU  rV  r-  rW  rX  r¾  r  r®  r  rè  Úd_window_sizerÛ  r\  r]  rü  r  rÌ  Úpooled_depthr_  r`  r”  ra  s#                        €€€€€€€€€€€€€€re   r   zavg_pool3d_backward.<locals>.fnB  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 Ð#Ð#Ð#Øˆrg   r]  )rk   rB   rÈ   rÉ   r   r  r_  r  ri   r»   r  Úfallback_avg_pool3d_backwardr?   rç   rn   )!re  r¥   r  r”  rÌ  r  rè  rÛ  rj  Ú_d_outÚceil_mode_dr  Úceil_mode_hr  Úceil_mode_wr  rP  r·   r
  r   r©  r  rC  r3  r\  r]  rü  r  rD  r_  r`  ra  rb  s!     ``` ``             @@@@@@@@@@@@re   Úavg_pool3d_backwardrJ  Ú  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ð €Irg   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í  ©rh  zinvalid axis: r.   zreduction axis not unique)rÉ   rk   r´   r  rÈ   rž   ri   r&   )r¥   rÄ  rè   rs   s       re   Ú_validate_reduction_axisrM  ¢  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Ð-Ø€Krg   )rŠ  c               óJ  ‡‡‡‡‡‡‡— |�t        | |«      } | j                  «       Št        t           t	        | |«      «      }g }g Šg Šg Št        t        ‰«      «      D ]Q  }||v r&‰j                  |«       ‰j                  ‰|   «       Œ-‰j                  |«       |j                  ‰|   «       ŒS dŠ|dv rßt        ‰«      dkD  rÑt        | «      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(        j*                  j,                  |
|<   Œ! n|}
| j/                  «       Št1        | j3                  «       |xs | j5                  «       | j5                  «       |	|
‰¬«      S )NF©r  Úargminr.   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¼   r-  r  rQ   rR  r{   r¤  )r:  Úreduction_indexrs   r  rU  Úvarrñ   ÚrindexÚ
linear_idxÚinner_loaderÚkeepdimsÚkept_idxÚreduced_idxÚreduced_sizesÚshould_compute_logical_indexrè   s            €€€€€€€re   r  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)rv   r  r§  r\  r^  r  )rò   rÉ   r&   r´   rM  r  rÈ   ro   r:   rk   rm   r>   r1   rá   rå   ÚBufferrw  Úis_transposedÚis_contiguousri   r¼   r)  r*  r_  r  rn   r»   )r¥   rÄ  rW  r·   rK  rŠ  Ú
kept_sizesrs   r�  r  rP  rV  rX  rY  rZ  r[  rè   s     `        @@@@@@re   Ú_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Õ&ð'ð $)Ð àÐ.Ñ.Ü�Ó Ò"Ü�aŒLä�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¯;©;«=Ø—+‘+“-ØØØ&ôð rg   c                ó   ‡ ‡— 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 )NrO  )rÄ  rW  r·   rK  rŠ  )rŠ  r  rö   )r»   r{   rÂ   r:   rò   rÿ  r`  r@   rç   rk   rm   r�  )r¥   rÄ  rW  r·   rú   r¨  rK  rŠ  s         €€re   r„  zmake_reduction.<locals>.inner  s™   ø€ ð
 Ð2Ñ2Ø—‘“¤§¡Ò+Ü˜!”ä˜œEŸK™KÓ(ˆAÜ&ØØØØØ"7Ø)ô
ˆô ×!Ñ!ÐX°ÈAÑXÐQWÑXˆÜØ�K‰K×ÑÜô
ð �N‰NÔØˆrg   rÚ   rö   )rŠ  rK  r„  s   `` re   Úmake_reductionrc    s   ù€ ð°T÷ ð4 €Lrg   c               óÊ   — |�t        | |«      } t        | |«      }t        | j                  «       | j	                  «       f| j                  «       f| j                  «       |¬«      S )N)rv   ÚdtypesÚ	inner_fnsrè   rÄ  )rò   ri  r  rn   r»   r_  rÉ   )r¥   rÄ  r·   s      re   Ú_make_scan_innerrg  $  sZ   € ØÐÜ�Q˜ÓˆÜ˜˜DÓ!€DäØ�|‰|‹~Ø—‘“ÐØ—=‘=“?Ð$Ø�Z‰Z‹\Øôð rg   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™   rs   rè   s     €re   r›   zmean.<locals>.<genexpr>=  ó   øè ø€ Ò0 a˜$˜q�'Ñ0ùr÷   r9  )rò   rÉ   rM  r»   r{   rH  rG  r5  Úsum_rO   r1   r8   rn   r7   rç   ri   Údiv)r¥   rÄ  Úkeepdimr·   rý  Ú
sum_resultÚdenomrè   s          @re   r�  r�  2  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Ð9rg   c                ó2  ‡
— |€d}| j                  «       Š
t        | |«      }t        | |d¬«      }|r|j                  «        t	        t        | |«      «      }t        |||«      }t        ˆ
fd„|D «       «      }|rt        j                  ||z
  d«      }t        j                  || j                  «       | j                  «       ¬«      }t        j                  |t!        |j                  «       «      «      }t#        ||«      }	|s|	fS |r|nt%        ||«      }|	|fS )Nr.   T)rn  c              3  ó(   •K  — | ]	  }‰|   –— Œ y ­wr—   rö   rj  s     €re   r›   z var_mean_sum_.<locals>.<genexpr>P  rk  r÷   r   r9  )rÉ   rM  r�  r�  ÚsquarerÞ  rl  rO   r¼   ra  r1   r8   r»   rn   r7   rç   ri   rm  r  )r¥   rÄ  Ú
correctionrn  Úreturn_meanÚx_meanÚdiffsro  rp  Úx_varrè   s             @re   Úvar_mean_sum_ry  C  sö   ø€ ØÐØˆ
à�:‰:‹<€DÜ# A tÓ,€DÜ�!�T 4Ô(€FÙØ�‰Ôä”3�q˜&“>Ó"€EÜ�e˜T 7Ó+€JäÓ0¨4Ô0Ó0€EÙÜ—	‘	˜% *Ñ,¨aÓ0ˆÜ×Ñ e°1·;±;³=ÈÏÉËÔX€EÜ×Ñ˜e¤T¨*×*=Ñ*=Ó*?Ó%@ÓA€EÜ�
˜EÓ"€EÙØˆxˆá‰V¤G¨F°DÓ$9€FØ�&ˆ=Ðrg   c                ól  — t        | |«      }t        | ||d d ¬«      }|d   }t        |d   «      }| j                  «       }|r|j                  dk(  st
        j                  }nt
        j                  j                  }t        |t        j                  «      xr t        |«      |k  xr t        |«      dk7  S )N©rÄ  rW  r·   rK  r^  r  rà   r.   )rM  r`  rO   rn   rä   r/   r&  ÚcppÚuse_two_step_variance_thresholdrk   r¼   r¹  r´   )r¥   rÄ  rn  rú   r^  Úreduction_numelrv   Ú	thresholds           re   Úuse_two_step_variancer€  ]  s­   € ô $ A tÓ,€DÜ"Ø	�˜w¨dÈ$ô€Fð �HÑ€FÜ# FÐ+=Ñ$>Ó?€OØ�\‰\‹^€FÙ�v—{‘{ eÒ+Ü×6Ñ6‰	ô —J‘J×>Ñ>ˆ	ä�?¤E§M¡MÓ2ò 	'Ü�Ó  IÑ-ò	'ä˜&Ó! QÑ&ðrg   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 )Nr.   r{  r\  r  r§  Úwelford_reduce)rf  rŠ  r·   c              3  ó(   •K  — | ]	  }‰|   –— Œ y ­wr—   rö   rj  s     €re   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—   )
rk   r¼   r½   Ú	is_numberrQ   rò   rR  r{   r¤  rS  r;  s     re   Úget_constant_or_index_exprz5var_mean_welford_.<locals>.get_constant_or_index_expr�  sG   € Ü�aœŸ™Ô$¨Q¯[ª[Ü—<‘<¤§¡¨q´%·+±+Ó >ÀÓFÐFÜ�|‰|˜A˜uÓ%Ð%rg   c                óŒ   •—  ‰‰‰«      } ‰‰‰«      }t        j                  d‰«      }| t        j                  |||z
  «      z  S rõ  )rQ   rS  r»  )rm   ÚcÚNÚzerort  r·   r†  Úrnumels       €€€€re   rœ  z#var_mean_welford_.<locals>.scale_fn’  sE   ø€ Ù& z°5Ó9ˆÙ& v¨uÓ5ˆÜ�|‰|˜A˜uÓ%ˆØ”c—k‘k $¨¨A©Ó.Ñ.Ð.rg   rö   )r`  r�  r1   ÚWelfordReductionrç   r»   r�  rÉ   rM  rO   r…  )r¥   rÄ  rt  rn  ru  rú   r  r�  Úm2r  rœ  rS  r·   r†  r‹  rè   s     `         @@@@re   Úvar_mean_welford_rŽ  u  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€Mrg   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Ä  rt  rn  ru  )rÄ  rn  c              3  ó:   •K  — | ]  }t        |‰d ¬«      –— Œ y­w)FrÇ  N)rò   )r™   r¥   rë  s     €re   r›   z#var_mean_helper_.<locals>.<genexpr>³  s   øè ø€ ÒF¸!”8˜A˜y¨u×5Ð5ÑFùs   ƒr   rö   )r»   r   rò   r  r/   ÚmtiaÚdisable_welford_reductionr€  ry  rŽ  rž   )	r¥   rÄ  rt  rn  ru  rÒ   rú   r0  rë  s	           @re   Úvar_mean_helper_r“     sœ   ø€ Ø—‘“€IÜ)¨)Ó4€MÜ��M¨Ô.€AÜØ
ØØØØô€Fô �K‰K×1Ò1Ü$ Q¨T¸7ÕCô 	Ñ˜Òô
 Ñ( Ñ(ð ô ÓF¸vÔFÓF€FÙ'ˆ6�!‰9Ð3¨VÐ3rg   )rt  rn  c               ó"   — t        | |||d¬«      S )NF©rÄ  rt  rn  ru  ©r“  ©r¥   rÄ  rt  rn  s       re   Úvar_r˜  ·  s   € äØ	� °WÈ%ôð rg   c               ó"   — t        | |||d¬«      S )NTr•  r–  r—  s       re   Úvar_meanrš  ¾  s   € äØ	� °WÈ$ôð rg   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   r.   r,   )Úpow_recursiverQ   rº  rS  rz  )r¥   r1  r·   r¨  s       re   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‰�!‚|Ü—‘˜ Ó#ˆØ€Mrg   c                ó.   — t        j                  | |«      S r—   )rQ   rç  ©rî   r/  s     re   Ú
pow_nativerŸ  Ô  s   € ä�7‰7�1�a‹=Ðrg   )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š  r.   c              3  ór   K  — | ]/  }t        |t        j                  «      sŒ|j                  «       –— Œ1 y ­wr—   )rk   r1   rB   r»   r  s     re   r›   zpow.<locals>.<genexpr>ì  s#   è ø€ ÒN 1´*¸QÄÇÁÕ2M�—‘—ÑNùs   ‚7¢7iàÿÿÿé    r   c                óF   •— t         ‰| «      ‰‰j                  «       «      S r—   )rœ  r»   )rU  rî   r/  r  s    €€€re   r   zpow.<locals>.fnö  s   ø€ Ü ¡¨£¨a°·±³Ó?Ð?rg   r]  r,   )rk   r5  r¾   rç  r´   Úsqrtr«  rF  r   r_  r?   rç   rn   r»   rÉ   r    r)  r   Úexp2Úfallback_pow_scalarÚfallback_pow_tensor_scalarÚfallback_pow_tensor_tensorrŸ  )rî   r/  r·   Úis_integer_powÚembed_exponentr   r  s   ``    @re   rç  rç  â  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˜ÓÐrg   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 )Nr]  ©Úunsafe_alias)rk   rB   rm   r1   rå   r?   rç   rn   r»   r_  rÉ   r5   r;   Úis_input_bufferÚis_module_bufferÚ	NopKernelr�  r]  Úrealize_into)Úchangedr$  r­  Úchanged_datarc   s        re   rS  rS    s*  € Ü�'œ9Ô%Ø—|‘|‰àˆÜ�#”yÔ!Ø�h‰hˆä�cœ2Ÿ=™=Ô)ä×ÑØ×%Ñ%Ó'Ø×#Ñ#Ó%Ø—_‘_Ó&Ø×#Ñ#Ó%ô	
ˆô ˜$¤¬:Ð 6Ô7Ð7Ð7Ø�i‰iˆÜ˜#œrŸ}™}Ô-Ð-Ð-ä�,¤§¡Ô.Ø×$Ñ$Ô&à×(Ñ(Ô*Ü�l×'Ñ'¬¯©Ô6ð 	�‰ŒØŸH™HˆÔØˆä×!Ñ!×.Ñ.Øˆ\¨ð /ô ð €Nrg   c                ó.   — t        | t        | |«      «      S r—   )rS  r)  )r¥   rÏ  s     re   rË  rË  8  s   € ä�Qœ	 ! ZÓ0Ó1Ð1rg   c                óÂ   — | |u r| S t        || j                  «       «      }t        || j                  «       «      }t	        || j                  «       «      }t        | |«      S r—   ©rÚ  rn   rò   r»   r-  rÉ   rS  )rÅ  rT  rØ  s      re   rs  rs  =  sR   € à
ˆc�zàˆ
Ü
�C˜Ÿ™Ó)Ó
*€CÜ
�3˜Ÿ™›Ó
(€CÜ
��c—l‘l“nÓ
%€CÜ�S˜#ÓÐrg   c                ó.   — t        j                  | |«      S r—   )rQ   Úfloordivrž  s     re   r¸  r¸  H  ó   € ä�<‰<˜˜1ÓÐrg   c                ó.   — t        j                  | |«      S r—   )rQ   Útruncdivrž  s     re   r»  r»  M  r¹  rg   c                ó.   — t        j                  | |«      S r—   )rQ   Údiv_rnrž  s     re   Ú_div_rnr¾  R  s   € ä�:‰:�a˜ÓÐrg   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 )Nr2  z5floordiv operands can not be boolean at the same timer7  z5truncdiv operands can not be boolean at the same time)rÀ   rÃ   r¸  r2  r¾  r»  r7  rm  )rî   r/  Úrounding_modeÚboth_integerÚboth_booleans        re   Údiv_moderÃ  W  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Ðrg   c                ó¸   — t        | «      xr t        |«      }|rt        | |«      S t        t        j                  j
                  «      } t        |«      | |«      S r—   )rÃ   Úlogical_andr=   rÎ  rz  rÞ  r…  )rî   r/  Ú	both_boolr   s       re   rz  rz  k  sN   € ä Ó"Ò9¤°qÓ'9€IÙÜ˜1˜aÓ Ð äœŸ™×*Ñ*Ó+ˆØ!Œ~˜bÓ! ! QÓ'Ð'rg   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)rk   r1   r;   Úget_constant_valuerm   r5   r�  ró   ÚLoopsr{   Ú	_inductorÚops_handlerÚExtractConstantsHandlerrn   rR   Úset_ops_handlerr   ÚobjectrÊ  r\  Úinner_fn_argsÚvirtualizedÚOpsValuerñ   )r¥   r†  rq   s      re   rÉ  rÉ  u  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     re   r›   zdiv_prim.<locals>.<genexpr>—  s"   è ø€ ÒOÀ1”o aÓ(Ò>¬O¸AÓ,>Ó>ÑOùs   ‚"$rà   r   Úinfrã  c                 ó&   — t        j                  | Ž S r—   )rQ   r   r  s    re   r   zdiv_prim.<locals>.fn§  s   € Ü�{‰{˜DÐ!Ð!rg   )r  r»  rÉ  rn   rä   rñ   ÚmathÚcopysignr5  rz  r…  )rî   r/  Úis_integralr   rº  r   s         re   rú  rú  •  s§   € äÑOÈÈAÈÔOÓO€KáÜ˜˜1‹~Ðô & aÓ(Ð(ˆÐ5¸!¿,¹,».×:MÑ:MÐQVÒ:Vð �=‰=˜AÒÜŸ™¤u¨U£|°W·]±]ÓC‰Jà˜wŸ}™}Ñ,ˆJÜ�1�jÓ!Ð!ò"ð Œ>˜"Ó˜a Ó#Ð#rg   c                óZ   — t        | |ft        j                  ¬«      \  } }t        | |«      S r¨  )rN  r   ÚINT_TO_FLOATrú  rž  s     re   rm  rm  ­  s0   € ô Ø	
ˆAˆÔ$C×$PÑ$Pô�D€A€qô �A�q‹>Ðrg   c                óh   — t        | «      xs t        | «      }|rd„ }nd„ } t        |«      | |«      S )Nc                ó.   — t        j                  | |«      S r—   )rQ   Úmodrž  s     re   r   zfmod.<locals>.fn¿  s   € Ü—7‘7˜1˜a“=Ð rg   c                ó.   — t        j                  | |«      S r—   )rQ   Úfmodrž  s     re   r   zfmod.<locals>.fnÄ  s   € Ü—8‘8˜A˜q“>Ð!rg   )rÃ   rÀ   r…  )rî   r/  rÙ  r   s       re   rà  rà  ¹  s9   € ä! !Ó$Ò:¬¸Ó(:€Káó	!ò
	"ð Œ>˜"Ó˜a Ó#Ð#rg   c               ó¼   — t        | j                  «       «      st        | j                  «       «      r|€t        j                  }t        d|¬«      } || |||¬«      S )Nr$  rª  r¶   ©r   r»   r   r{   r¤  rc  ©r¥   rÄ  rW  r·   r   s        re   rl  rl  Ê  sK   € ô 	˜Ÿ™›Ô'Ô+;¸A¿K¹K»MÔ+JØ
ˆ-Ü—‘ˆä	˜°UÔ	;€BÙˆa��x uÔ-Ð-rg   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   rh  TrÇ  c                ó@   — | \  }|\  }t        j                  ||«      fS r—   )rQ   r¡   ©Úa_tupleÚb_tuplerî   r/  s       re   Ú
combine_fnzcumsum.<locals>.combine_fnè  ó#   € Ø‰ˆØ‰ˆÜ—‘˜˜1“ÐÐrg   ©rÄ  r·   rê  ©rÌ   r·   rö   )r   r»   r   r{   r¤  rÈ   rÉ   rò   rg  r1   ÚScanrç   Úfallback_cumsum©r¥   rÄ  r·   rê  rú   r¨  s         re   Úcumsumrñ  Ü  s¶   € ô 	˜Ÿ™›Ô'Ô+;¸A¿K¹K»MÔ+JØ
ˆ-Ü—‘ˆä
ˆ1�:‰:‹<Ó˜AÒØ�w‰ÐˆØÒ&˜Ÿ™›ˆÜ˜˜5 tÔ,Ð,ò ô
 ˜a d°%Ô8€FÜ—‘—‘Ñ? Ñ?°JÒ?�I€VØ€~Ü˜q d°%Ô8Ð8Ø€Mrg   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—   )rQ   rz  rç  s       re   rê  zcumprod.<locals>.combine_fn   rë  rg   rì  rê  rí  rö   )r   r»   r   r{   r¤  rÈ   rÉ   rò   rg  r1   rî  rç   Úfallback_cumprodrð  s         re   Úcumprodrõ  ô  s¶   € ô 	˜Ÿ™›Ô'Ô+;¸A¿K¹K»MÔ+JØ
ˆ-Ü—‘ˆä
ˆ1�:‰:‹<Ó˜AÒØ�w‰ÐˆØÒ&˜Ÿ™›ˆÜ˜˜5 tÔ,Ð,ò ô
 ˜a d°%Ô8€FÜ—‘—‘Ñ? Ñ?°JÒ?�I€VØ€~Ü  t°5Ô9Ð9Ø€Mrg   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—   )rQ   r¼  r»  r'  r  Úlog1pÚexp)rè  ré  rî   r/  Úmin_vÚmax_vr®  s          re   Úlog_add_exp_helperz(logcumsumexp.<locals>.log_add_exp_helper  s{   € Ø‰ˆØ‰ˆÜ—‘˜A˜qÓ!ˆÜ—‘˜A˜qÓ!ˆØ˜‘¤C§I¡I¨eÓ$4Ð#4Ñ5ˆÜ—	‘	˜$¤§	¡	¬#¯'©'°%¸%±-Ó*@Ó AÀEÑ IÈ1ÓMÐOÐOrg   r   rå  rì  rê  rø  rö   )	r»   rÈ   rÉ   r«  rg  r1   rî  rç   Úfallback_logcumsumexp)r¥   rÌ   rü  r·   rú   r¨  s         re   Úlogcumsumexprþ    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Ø€Mrg   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  F©r·   Úarg_break_ties_leftrì  re  c                óR   •— t        j                  | ‰   t        j                  «      S r—   ©rQ   rR  r{   r¤  ©rU  rÄ  s    €re   rC  zcummax.<locals>.<lambda>1  ó   ø€ ”C—N‘N 3 t¡9¬e¯k©kÓ:€ rg   rf  rê  rø  rö   )rÈ   rÉ   r«  r¿  r{   r¤  r»   r1   Úget_reduction_combine_fnrg  r_  rî  rç   Úfallback_cummax©r¥   rÄ  r·   rê  rú   rý   r
  s    `     re   Úcummaxr	  "  óÕ   ø€ ä
ˆ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ˆ?Ðrg   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¶   rP  Fr   rì  re  c                óR   •— t        j                  | ‰   t        j                  «      S r—   r  r  s    €re   rC  zcummin.<locals>.<lambda>H  r  rg   rf  rê  rø  rö   )rÈ   rÉ   r«  r¿  r{   r¤  r»   r1   r  rg  r_  rî  rç   Úfallback_cumminr  s    `     re   Úcumminr  9  r
  rg   c               ó¼   — t        | j                  «       «      st        | j                  «       «      r|€t        j                  }t        d|¬«      } || |||¬«      S )Nr�  rª  r¶   râ  rã  s        re   r�  r�  P  sK   € ô 	˜Ÿ™›Ô'Ô+;¸A¿K¹K»MÔ+JØ
ˆ-Ü—‘ˆä	˜°eÔ	<€BÙˆa��x uÔ-Ð-rg   c                ó^   — t        | t        j                  «      }  t        d«      | ||¬«      S )Nr  ©rÄ  rW  )rò   r{   rÂ   rc  ©r¥   rÌ   rn  s      re   Ú
reduce_anyr  [  s(   € ä�”E—J‘JÓ€AØ Œ>˜%Ó  ¨°wÔ?Ð?rg   c                óZ   — |�t        | ||¬«      t        | ||¬«      fS t        | d |¬«      S ©Nr  )Úreduce_amaxÚreduce_argmaxr  s      re   Ú
reduce_maxr  a  ó:   € à
€ä˜ ¨gÔ6Ü˜! #°Ô8ð
ð 	
ô
 �q˜t¨gÔ6Ð6rg   c                óZ   — |�t        | ||¬«      t        | ||¬«      fS t        | d |¬«      S r  )Úreduce_aminÚreduce_argminr  s      re   Ú
reduce_minr  l  r  rg   Úxor_sumrq  rp  r  rª  rP  Ú
logical_or)r€  rƒ  rv  ©Ú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"                  |«      j$                  «      st'        | |||¬«      S t)        |dd||d¬«      }dgt        |«      z  }	t        |«      r||	|<   t+        ||	«      }t-        ||«      }t.        j0                  j3                  || j4                  |j4                  f| j7                  «       |j7                  «       f||||¬«      \  }
}|
€t'        | |||¬«      S |€J ‚|
t9        |t        j                  «      fS )NFr   r.   r   r›  )rv   re  rf  rè   rÄ  r!  r"  )rÉ   rn   r   rÈ   r«  rÐ  r{   r¤  r/   ÚtritonÚdecompose_sort_opsrÿ  Úint16rR   r]   râ   Ústatically_known_ltrÌ  rq  Úsort_fallbackr˜  rÏ  r-  r1   ÚSortrç   r·   r_  rò   )r¥   r!  rÌ   r"  r?  rv   rn  Ú	idx_dtyper
  Ú
view_shaperý   s              re   Ú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×Ñ×/Ñ/°¼%¿+¹+ÀiÓ:P×:TÑ:TÔUÜ˜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Ð1rg   c                ó    — t        | d||¬«      S )NFr   )r,  )r¥   rÌ   r"  s      re   Úsortr.  º  s   € ä�q ¨C¸JÔGÐGrg   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 )Nr.   r   rø  r,   )r/   r$  r%  Úmedian_fallbackrÉ   r  r  r?  rz  r¼   r¹  rÏ  r,  r]  )rC  rè   r¿  ÚflatÚsorted_valsr  rù   s          re   Úmedian_defaultr3  Î  s�   € ä�=‰=×+Ò+Ü˜tÓ$Ð$Ø�=‰=‹?€DÜ×ÑœXŸ\™\¨4´·±¸qÓ1AÓB€EÜ��u�gÓ€DÜ  ¨1Ô-�N€K�Ø	�‰�qÑ€AÜ�+˜q !Ó$Ð$rg   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Ì   r.   r,   )r/   r$  r%  Úmedian_dim_fallbackrÉ   rÈ   r«  rÐ  rn   r{   r¤  r   r,  r]  r>  )rC  rÌ   rn  r?  rm  r2  Úsorted_idxsrã  rù   rý   r
  s              re   Ú
median_dimr8  Ú  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ˆ?Ðrg   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   Tr5  r.   Fr›  c           	     óì   •— t        j                  t        j                   ‰| «      t        j                  dt        j
                  «      «      t        j                  dt        j
                  «      «      S ©Nr.   r   )rQ   r»  rÞ  rS  r{   r¤  )rU  Úpositions_loader0s    €re   Ú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Ó(ó
ð 	
rg   r]  c           
     óè   •— t        j                  t        j                   ‰| «       ‰| «      «      t        j                   ‰| «      t        j                  dt
        j                  «      «      «      S rõ  )rQ   Úor_ÚnerŸ  rS  r{   r¤  )rU  Úpositions_loaderÚshifted_loaderÚsorted_loaders    €€€re   Úis_boundary_fnz$mode_default.<locals>.is_boundary_fn  sO   ø€ Ü�w‰wÜ�F‰F‘= Ó%¡~°cÓ':Ó;Ü�F‰FÑ# CÓ(¬#¯,©,°q¼%¿+¹+Ó*FÓGó
ð 	
rg   c                óŽ   •— t        j                   ‰| «       ‰| «      t        j                  dt        j                  «      «      S r=  )rQ   r  rS  r{   r¤  )rU  Úis_boundary_loaderÚpositions_loader2s    €€re   Úboundary_pos_fnz%mode_default.<locals>.boundary_pos_fn.  s6   ø€ Ü�y‰yÙ˜sÓ#Ù˜cÓ"Ü�L‰L˜œUŸ[™[Ó)ó
ð 	
rg   c                ó´   •— t        j                  t        j                   ‰| «       ‰| «      «      t        j                  dt        j
                  «      «      S rú  )rQ   r¡   rÞ  rS  r{   r¤  )rU  Úlast_boundary_loaderÚpositions_loader3s    €€re   Ú
run_len_fnz mode_default.<locals>.run_len_fnC  s@   ø€ Ü�w‰wÜ�G‰GÑ% cÓ*Ñ,@ÀÓ,EÓFÜ�L‰L˜œEŸK™KÓ(ó
ð 	
rg   r  )r/   r$  r%  Úmode_fallbackrÉ   rÈ   rn   r«  rÐ  r{   r¤  r   r,  r˜  r¼   r¹  rÏ  r-  r_  r?   rç   rF   rþ  rÂ   r	  r  r  )!rC  rÌ   rn  r?  rm  rv   r2  r7  rã  Ú	positionsÚpos_view_shaper=  Úprev_positionsÚshifted_valsrD  Úis_boundaryrH  Úboundary_posÚlast_boundaryr  rL  Úrun_lenÚmax_posÚ	mode_valsÚ	mode_idxsrF  rJ  rA  r<  rG  rK  rB  rC  s!                            @@@@@@@@re   Úmode_defaultrY  î  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ÐÐrg   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   )r/   r$  r%  Útopk_fallbackrÉ   rÈ   r«  rÐ  rn   r{   r¤  r   r,  rŒ  )rC  rù   rÌ   Úlargestrò  r?  rm  r2  r7  rý   r
  s              re   Ú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ˆ?Ðrg   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   Tr5  r.   )r/   r$  r%  Úkthvalue_fallbackrÉ   rÈ   r«  rÐ  rn   r{   r¤  r   r,  r]  r>  )
rC  rù   rÌ   rn  r?  rm  r2  r7  rý   r
  s
             re   Úkthvaluer`  m  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ˆ?Ðrg   c                ó<   — t        | |t        j                  |¬«      S )N©rÜ   rÎ   r‚  )rß  r   rÛ  )r`   rÜ   r‚  s      re   Úregister_pointwise_numericrc  €  s!   € ÜØ
ØÜ;×HÑHØ'ô	ð rg   c                ób   — t        | j                  «       t        | t        j                  ¬«      S r¨  )rN   rÞ  rß  r   rÛ  r  s    re   Ú register_pointwise_numeric_ldf64re  ‰  s'   € Ü'¨¯©Ô4ÜØ
Ü;×HÑHôð rg   )r€  )rñ   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 )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.
    rP  N©rg  Ú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ú  )
rQ   rT  Úmul_rnrz  rk   r¼   rÇ   rR  rS  r¡   )rU  Úself_valÚt1_valÚt2_valÚt1_times_t2Ú
value_exprr·   re  Ú	t1_loaderÚ	t2_loaderÚuse_fmarñ   s         €€€€€€re   r\  zaddcmul.<locals>.inner_fnÀ  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ÐFrg   r]  )rÔ   r   rE  r_  rn   rw  r{   rx  ry  rä   r?   rç   rÉ   ©rC  Útensor1Útensor2rñ   rv   r\  r·   re  rp  rq  rr  s      `  @@@@@re   Úaddcmulrv  œ  sØ   ý€ ô  ØØØÜ;×CÑCô	€Eð ×"Ñ"Ó$€KØ×#Ñ#Ó%€IØ×#Ñ#Ó%€Ið �_‰_Ó€Fà×Ñò 	+Ü—‘×!Ñ!Ð!ò	+à˜$Ðò	+ð �K‰K˜?Ð*ð	 ÷Gñ Gô< ×ÑØ�‰Ó ØØØ�}‰}‹ô	ð rg   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.
    rP  Nrg  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ú  )rQ   r½  r   r¡   rk   r¼   rÇ   rR  rS  rT  rz  )rU  rk  rl  rm  Ú	t1_div_t2ro  r·   re  rp  rq  rr  rñ   s         €€€€€€re   r\  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ÐDrg   r]  )rÔ   r   rÛ  r_  rn   rw  r{   rx  ry  rä   r?   rç   rÉ   rs  s      `  @@@@@re   Úaddcdivrz  æ  sØ   ý€ ô" ØØØÜ;×HÑHô	€Eð ×"Ñ"Ó$€KØ×#Ñ#Ó%€IØ×#Ñ#Ó%€Ið �_‰_Ó€Fà×Ñò 	+Ü—‘×!Ñ!Ð!ò	+à˜$Ðò	+ð �K‰K˜?Ð*ð	 ÷Eñ Eô: ×ÑØ�‰Ó ØØØ�}‰}‹ô	ð rg   rñ   r  Úlogical_not)rv  )rÎ   r  rK  Úidentity)r›  Úpointwise_overrides_datac              #  óF  ‡K  — t         |   Št        | ‰j                  d «      }|€y ˆfd„}t        |t        j
                  j                  «      r9|j                  «       D ]%  }t        ||«      }|‰j                   ||«      f–— Œ' y |‰j                   ||«      f–— y ­w)Nc                ó4   •— ‰j                   €t        | «      S y r—   )r$  rÁ  )r`   rm   s    €re   Úmake_triton_fallbackz6_get_pointwise_overrides.<locals>.make_triton_fallback”  s   ø€ Ø�;‰;ÐÜ# BÓ'Ð'ð rg   )	r}  r˜   rÜ   rk   r{   r|   r¢   r¤   rÎ   )ÚnsrÜ   r`   r€  Úolnamer»  rm   s         @re   Ú_get_pointwise_overridesrƒ  Ž  s�   øè ø€ Ü# DÑ)€DÜ	��T—Y‘Y Ó	%€BØ	€zØô(ô �"”e—j‘j×1Ñ1Ô2Ø—l‘l“nò 	IˆFÜ˜˜VÓ$ˆBØ�d×.Ñ.Ñ0DÀRÓ0HÐHÓHñ	Ið �$×*Ñ*Ñ,@ÀÓ,DÐDÓDùs   ƒBB!rb  c                ód   ‡— | t         |<   t        j                  | «       ˆfd„}t        | |«       y )Nc                 ó„   •—  ‰| i |¤Ž}g }t        | d   |«      D ]"  \  }}|j                  t        ||d¬«      «       Œ$ |S )Nr   Tr¬  )r  ro   rS  )rt   rú   ÚresultsÚmut_resultsrÐ   r¨  Úoutplace_ops         €re   r   z$register_foreach_inplace.<locals>.fná  sV   ø€ Ù˜tÐ. vÑ.ˆØˆÜ˜t A™w¨Ó0ò 	J‰KˆC�Ø×Ñœy¨¨fÀ4ÔHÕIð	Jð Ðrg   )rZ   rŽ  r¡   r  )Úaten_opÚoutplace_aten_oprˆ  r   s     ` re   Úregister_foreach_inplacer‹  Ý  s.   ø€ Ø07ÔÐ,Ñ-Ü×Ñ˜GÔ$ôô ˜w¨Õ+rg   c                ó2   ‡— t        | d ¬«      ˆfd„«       }|S )NrP  c                 ól   •—  ‰| i |¤Ž}t        || d   j                  «       «      }t        | d   |«      S rõ  )rò   r»   rS  )rt   rú   r¨  rˆ  s      €re   r   zregister_inplace.<locals>.fn  s<   ø€ á˜dÐ- fÑ-ˆÜ˜& $ q¡'×"3Ñ"3Ó"5Ó6ˆÜ˜˜a™ &Ó)Ð)rg   )r$  )r‰  rˆ  r   s    ` re   Úregister_inplacerŽ    s#   ø€ Ü�w°DÔ9ó*ó :ð*ð
 €Irg   c                 ó   — y r—   rö   ro  s      re   Úsym_constrain_ranger�  7  ó   € àrg   c                óÆ   — t         j                  j                  j                  d   }t	        |t
        j                  «      r|j                  j                  S t        |«      S rd  ©
rR   r]   r^   r|  rk   r{   rl  rc   rm  r´   ©rî   rÌ   r$  s      re   r†  r†  <  óA   € ä
�'‰'×
Ñ
×
#Ñ
# EÑ
*€CÜ�#”u—|‘|Ô$Ø�x‰x�}‰}Ðä�3‹xˆrg   c                óÆ   — t         j                  j                  j                  d   }t	        |t
        j                  «      r|j                  j                  S t        |«      S rd  r“  r”  s      re   Ú
sym_strider—  E  r•  rg   c                ó"   — | j                  «       S r—   )rü  ©rî   s    re   Ú	sym_numelrš  N  s   € à�;‰;‹=Ðrg   c                 ó~   — t        | «      dk(  rt        | d   t        t        f«      r| d   } t	        j
                  | Ž S r;  )rÈ   rk   ri   rž   r¼   ÚAddr  s    re   Úsym_sumr�  W  s8   € ô ˆ4ƒy�A‚~œ* T¨!¡W¬t´U¨mÔ<Ø�A‰wˆÜ�9‰9�dÐÐrg   c                ó   — t        d«      ‚)NzHelpful for debuggingr�   )rC  rt   rú   s      re   ÚfoobarrŸ  `  s   € ä
Ð5Ó
6Ð6rg   c                ó8   — | j                  «        t        | «      S r—   )r�  r«  r¿   s    re   Ú_realizer¡  e  s   € à‡I�I„KÜ�‹8€Org   c                óR   — | j                  «        t        j                  | |«       | S r—   )r�  r1   ÚResizeStorageBytes)ÚvariablerP  s     re   Úresize_storage_bytes_r¥  k  s#   € à×ÑÔÜ×Ñ˜( HÔ-Ø€Org   c                ó”   — | j                  «        |j                  «        t        j                  t        j                  | |«      «      S r—   )r�  rB   rç   r1   ÚSetSourceTensorKernel)rC  Úsource_tensors     re   Úset__source_tensorr©  r  s5   € à‡L�L„NØ×ÑÔÜ×ÑœB×4Ñ4°T¸=ÓIÓJÐJrg   rs  c                óÂ   — | |u r| S t        || j                  «       «      }t        || j                  «       «      }t	        || j                  «       «      }t        | |«      S r—   r¶  )rÅ  rT  s     re   Ú
fsdp_copy_r«  {  sR   € à�#‰:àˆJÜ˜˜SŸ^™^Ó-Ó.ˆÜ�s˜CŸM™M›OÓ,ˆÜ�S˜#Ÿ,™,›.Ó)ˆÜ˜˜cÓ"Ð"rg   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   rF  c              3  óp   K  — | ].  }t         j                  j                  j                  |d «      –— Œ0 y­wrã  )rR   r]   râ   rl  r   s     re   r›   zresize.<locals>.<genexpr>«  s,   è ø€ ò 2Ø;<Œ�‰×Ñ×0Ñ0°°A×6ñ2ùs   ‚46r.   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   €€re   rC  z*resize.<locals>.inner_fn.<locals>.<lambda>¿  s   ø€ ©°Z°LÓ(A€ rg   )rQ   rR  r{   r¤  r¦  r¨  )	rU  Úflat_index_exprÚlimitr®  r±  r²  Ú	old_numelÚout_indexerÚuninitialized_vals	       @€€€€re   r\  zresize.<locals>.inner_fnº  sZ   ù€ Ù  Ó%ˆ
ÜŸ.™.¨´U·[±[ÓAˆÜ—‘˜y¬%¯+©+Ó6ˆÜ�v‰v�o uÓ-ˆÜ�z‰z˜$Ô AÐCTÓUÐUrg   r]  )+rk   rB   ri   rž   r{   Úcontiguous_formatÚpreserve_formatr·  Úchannels_lastrÈ   Úchannels_last_3drü  r»   rI  r[  rC  ÚdeterministicÚfill_uninitialized_memoryr   r5  r   rÌ  rq  rR   r]   râ   rl  rö  rƒ  r  rÏ  rm   r1   r5   r�  r{  r_  rÊ  Ú stride_ordered_for_memory_formatr“  rÌ  r?   rç   )r¥   rè   r�  r·   rv   r@  Úhas_overlappingÚx_flatÚ
out_strider\  rq   r²  rµ  r¶  r·  s              @@@@re   ÚresizerÂ  †  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ð €Jrg   )Ú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_argsr1   ÚUserDefinedTritonKernelrû   rk   rB   )	rÆ  Úconstant_args_idxrÇ  rÈ  rú   rÅ  Úconstant_argsr]  r$  s	            re   Útriton_kernel_wrap_rÏ  Í  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—   rd  r  s     re   r›   zcond.<locals>.<genexpr>è  s#   è ø€ Ò
M°aŒ:�aœÓ Ò1¤Y¨q£\Ó1Ñ
Mùrf  z"control flow operator: torch.cond.rA  rB  )r  rR   r]   r^   r|  r}  rG  r1   ÚConditionalrç   ri   ÚmaprB   )ÚpredÚtrue_fnÚfalse_fnÚoperandsr“   rA  r¨  s          re   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Ó-Ó.Ð.rg   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—   rd  r  s     re   r›   zwhile_loop.<locals>.<genexpr>ö  s+   è ø€ ò *àô 	�1”fÓÒ.¤)¨A£,Ó.ñ*ùrf  z(control flow operator: torch.while_loop.rA  rB  )r/   rF  r  rR   r]   r^   r|  r}  rG  r1   Ú	WhileLooprç   rk   r   ri   rÓ  Ú_maybe_wrap_as_tensor_box)Úcond_fnÚbody_fnÚcarried_inputsÚadditional_inputsÚstack_outputr“   rA  r¨  s           re   Ú
while_looprá  ò  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ÐDrg   )rà  c                óˆ   — t        j                  j                  | g|¢­Ž }t        t	        t
        j                  |«      «      S r—   )r1   ÚInvokeSubgraphrç   ri   rÓ  rB   )Úsubgraph_fnÚ
identifierr×  r¨  s       re   Úinvoke_subgraphræ     s5   € ä×Ñ×%Ñ% kÐ=°HÒ=€FÜ””I×$Ñ$ fÓ-Ó.Ð.rg   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˜  r0  zNo output node found in graph)Ú_MISSINGrj   r]   Únodesr`   rR   ÚenvÚfetch_args_kwargs_from_envr{   r&  ÚInterpreterr0  r^   Úrun_noder·  )r²  rt   r0  rs   rc   Úoutput_argsrú   Úsaved_current_nodes           re   Úprocess_subgraph_nodesrð     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                óì  — g }| D ]B  }t        |t        «      sŒ|j                  «        |j                  |j	                  «       «       ŒD 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                  t        |«      «      }| sJ ‚t
        j                  j                  |d D ]E  }	|D ]>  }
|	j                  }|€J ‚t
        j                  j                   |   j#                  |
«       Œ@ ŒG |S )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,   r˜  r  N)rk   r9   r�  ro   rÿ  rR   r]   r^   rt   rÈ   Ú
operationsr²  Ú
find_nodesrð  ri   Úoperation_nameÚadditional_buffer_depsr¡   )Úadditional_depsrä  rt   Ú	dep_namesÚdepÚoriginal_argsÚ
arg_offsetÚoperation_lenr0  r`   Údep_nameÚop_names               re   Úcontrol_deps_op_loweringrÿ  ;   sP  € ð €IØò )ˆÜ˜#œvÔ&Øà�‰ŒØ×Ñ˜Ÿ™›Õ(ð)ô —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ò BˆØ!ò 	BˆHØ×'Ñ'ˆGØÐ&Ð&Ð&Ü�G‰G×*Ñ*¨7Ñ3×7Ñ7¸ÕAñ	BðBð €Mrg   )Ú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˜  r0  )rR   r]   r^   r|  r}  rj   r²  ré  r`   rê  rë  rÿ   r   rý   r�  Úcodegen_low_precisionÚlow_precision_codegen_opsr¡   rž  Úinvoke_quant_opsr{   r&  rì  r0  rí  )
rä  r 	  r×  r0  r	  rs   rc   rt   rú   r  s
             re   Úinvoke_quant_tracerr	  j   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ð( €Mrg   c                óØ  ‡
— ddl m}m} t        |«      dkD  rt	        d«      ‚t        j                  ||«      D �cg c](  } ||j                  «       |j                  «       ¬«      ‘Œ* }} || |«      Š
ˆ
fd„}t        |d   dd ¬«      }t        d„ |D «       «      |d	<   t        d
„ |D «       «      |d<   t        j                  j                  d|ddœ|¤Ž}	|	d   €t	        d«      ‚|	S c c}w )Nr.   )ÚInputDescriptorÚlower_pointwise_subgraphr   zSUnable to generate code for associative_scan op, because there are lifted argumentsrF  c                ód   •—  ‰g t        j                  | «      ¢t        j                  |«      ¢­Ž S r—   )rp  rš  )ÚlhsÚrhsÚlowered_combine_fns     €re   Úwrapped_combine_fnz,associative_scan.<locals>.wrapped_combine_fn˜   s6   ø€ Ù!ð 
Ü×Ñ Ó$ð
ä×Ñ Ó$ò
ð 	
rg   rì  c              3  ó<   K  — | ]  }|j                  «       –— Œ y ­wr—   ©r»   r  s     re   r›   z#associative_scan.<locals>.<genexpr>Ÿ   s   è ø€ Ò7¨q˜QŸ[™[Ÿ]Ñ7ùr  re  c              3  ó<   K  — | ]  }|j                  «       –— Œ y ­wr—   ry  r  s     re   r›   z#associative_scan.<locals>.<genexpr>    s   è ø€ Ò<°A §¡§Ñ<ùr  rf  F)rê  Úcan_fallback_to_atenz/Unable to generate code for associative_scan oprö   )r±  r	  r		  rÈ   r·  rÿ   r   r»   rn   rg  rž   r1   rî  rç   )rê  Úxsrß  r	  r		  r¥   Úsubgraph_inputsr	  rú   r¨  r	  s             @re   Úassociative_scanr	  ‡   sÿ   ø€ ÷ Mä
ÐÓ Ò!ÜØaó
ð 	
ô —‘  RÓ(öàñ 	˜aŸk™k›m°A·L±L³NÖCð€Oð ñ 2°*¸oÓNÐô
ô ˜b ™e¨!°4Ô8€FÜÑ7°BÔ7Ó7€Fˆ8ÑÜÑ<¸Ô<Ó<€Fˆ;ÑÜ�W‰W�^‰^ð Ø%Ø"ñð ñ€Fð
 ˆa�yÐÜÐLÓMÐMØ€Mùò-s   »-C'c                 ó   — y r—   rö   )Útokenss    re   Ú_sink_tokensr	  «   r‘  rg   c                  ó   — y r—   rö   rö   rg   re   Ú_make_tokenr	  °   r‘  rg   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ÚTracingContextr.   zMultiple effects NYIc                ó"   — | j                  «       S r—   )r�  r™  s    re   rC  zwith_effects.<locals>.<lambda>Ö   s   € °!·)±)³+€ rg   c                óZ   — t        | t        j                  «      r| j                  «       S | S r—   r  r¿   s    re   r�  z"with_effects.<locals>.wrap_tensorsÙ   r‚  rg   zCNo operation nodes were generated when lowering effectful operator ú.c                  ó   — yrº   rö   rö   rg   re   rC  zwith_effects.<locals>.<lambda>é   s   � rg   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)Nrm   Úget_example)
rk   r1   ÚTorchBindObjectÚ	get_valuerB   rm   rí   r%	  ÚAttributeErrorr�   )rî   r—  s     re   Ú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{   rQ   Úhigher_orderræ  Útorch._guardsr	  r	  Útry_getÚhop_dispatch_set_cacheÚ	get_cacherk   Úget_effectsrÈ   rF  rW  rR   r]   ró  rW   rp  rN  rB   rƒ  r1   r„  rç   Úeffectful_opsr}  Úhas_side_effectsrÿ  Úadditional_star_depsr¡   r·  r  r´  rµ  rž   ri   Úreturns)Útokenr`   rt   rú   r	  r	  Úeffect_typer	  r	  Útracing_ctxÚinvoke_subgraph_cacheÚeffectsrü  r¨  r�  Úprev_effect_bufferÚnew_oprþ  r)	  Úschema_argsÚschema_kwargsÚschemaÚeÚ	error_msgs                           re   Úwith_effectsrA	  µ   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                óN  — t        | |ddd¬«      }|d   }t        j                  j                  j	                  t        |«      «      }t        j                  j                  di |¤d|dœ¤Ž\  }}|dk(  rXt        j                  j                  j                  |t        j                  «      r t        j                  d| d|d	œ|¤Ž\  }}||fS t        j                  d
«       t!        | |d¬«      }	t#        t$        j&                     t)        | |	«      «      }
t+        |
|d¬«      }|	|fS )zn
    Lowering inductor_prims.prepare_softmax_online to compute max/sum in one pass if no split is needed.
    TNr{  r  Úonline_softmax_reduce)rŠ  r~  r.   r,   )r  Ú
num_outputÚreduction_hintzTOnline softmax is disabled on the fly since Inductor decides to split the reduction.)rW  rö   )r`  rR   r]   râ   ÚsimplifyrO   r1   r@   Ú
num_splitsÚstatically_known_geqr/   r&  r<   rç   r´  Údebugr  rW   rÎ  rù  rÞ  rl  )r¥   rÌ   rú   r  r‹  ÚhintÚ	num_splitÚ
max_tensorÚ
sum_tensorrŽ  rù  Úxsums               re   Úprepare_softmax_onlinerQ	  #!  s'  € ô
 #Ø	�˜d¨$Àdô€Fð Ð0Ñ1ÐÜ�W‰W×Ñ×&Ñ&¤}Ð5EÓ'FÓG€FÜ—l‘l×-Ñ-ñ Ø
ðà.Øó�O€Dˆ)ð �A‚~œ!Ÿ'™'×*Ñ*×?Ñ?Ø”×2Ñ2ôô "8×!>Ñ!>ð "
Ø Q°tñ"
Ø?Eñ"
Ñˆ
�Jð ˜:Ð%Ð%ô 	�	‰	Øbô	
ô ˜1˜c¨DÔ1ˆÜœŸ™Ñ!¤# a¨£,Ó/ˆÜ�C˜ tÔ,ˆØ�TˆzÐrg   c                 ó„   — t         j                  j                  «       xr! t         j                  j                  «       dk\  S )z.Check if we're on SM100+ hardware (Blackwell).)r°   r   )r{   rg  Úis_availableÚget_device_capabilityrö   rg   re   Ú_is_sm100_or_laterrU	  Q!  s,   € ä�:‰:×"Ñ"Ó$ÒV¬¯©×)IÑ)IÓ)KÈwÑ)VÐVrg   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 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.
    zFcvt_e8m0_rceil requires 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,rTr.   )ÚasmÚconstraintsr·   Úis_pureÚpack)rU	  r�   r»   r{   rí  rH  rG  r·  rò   r  r#  rQ   Úinline_asm_elementwiseÚuint16r…  rú  )rË   r·   r   r¨  s       re   Úcvt_e8m0_rceil_loweringr]	  V!  sÈ   € ô ÔÜ!ØTó
ð 	
ð �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Ó(Ð(rg   )rY	  rZ	  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	  re  s     re   r›   z/lower_inline_asm_elementwise.<locals>.<genexpr>„!  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™   r  rU  s     €re   r›   zAlower_inline_asm_elementwise.<locals>.inner_fn.<locals>.<genexpr>ˆ!  s   øè ø€ Ò7 V‘V˜C—[Ñ7ùr	  )rW	  rX	  r·   rY	  rZ	  Úinput_dtypes)rž   rQ   r[	  r{   rH  rG  rò   rí  )
rU  Úvalsr¨  Úasm_strrX	  r·   rb	  rY	  rt  rZ	  s
   `  €€€€€€€re   r\  z.lower_inline_asm_elementwise.<locals>.inner_fn‡!  sh   ù€ ÜÓ7¨wÔ7Ó7ˆÜ×+Ñ+ØØØ#ØØØØ%ò
ˆð ”U—]‘]¤E§N¡NÐ3Ñ3Ü—\‘\ &¬%¯-©-Ó8ˆFØˆrg   r   r]  )	rþ   rž   r_  r1   r?   rç   rn   ri   rÉ   )
rd	  rX	  r·   rY	  rZ	  rJ  rË   r\  rb	  rt  s
   `````   @@re   Úlower_inline_asm_elementwisere	  |!  sŽ   þ€ ô  Ð'€FäÑ;°FÔ;Ó;€LØ,2Ö3 Sˆs�‰Õ Ò3€G÷ò ô$ �<‰<×ÑØ�a‰y×#Ñ#Ó%ØØÜ�F˜1‘I×&Ñ&Ó(Ó)ð	 ó ð ùò) 4s   ¦B)r…  )Úquantized_lowerings)Úmkldnn_lowerings)Újagged_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)	rk   r{   r|   r}   rW   r}  r$  rÁ  r�  )r`   Úold_handlers     re   Úforce_fallbackrk	  ¸!  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*r/  )rp   zIterable[Any]rÏ   z4defaultdict[tuple[Any, bool], list[tuple[int, Any]]])r   úCallable[..., Any]rÏ   zCallable[..., Any] | None)r�   ztorch._C.TagrÏ   z%Callable[..., tuple[Any, Any]] | None)r’   rÂ   r“   r  rÏ   ÚNone)r   zuCollection[torch._ops.OpOverload | torch._ops.OpOverloadPacket] | torch._ops.OpOverload | torch._ops.OpOverloadPacketrÏ   zlist[Any] | None)r   z3torch._ops.OpOverloadPacket | torch._ops.OpOverloadr§   zCallable[..., tuple[Any, Any]]rÏ   rm	  )r·   zint | torch.dtyperÏ   r  )r¥   r	   rÏ   z'TypeGuard[TensorBox | sympy.Expr | int])r¥   r	   rÏ   zTypeGuard[TensorBox | bool])rt   r	   rÎ   r   rÄ   rÂ   rÏ   r  )r`   z9Any | torch._ops.OpOverloadPacket | torch._ops.OpOverloadrÝ   r  rÏ   rÂ   )r¥   rB   rv   útorch.devicerÏ   rB   )rt   ú	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Ö   r1  r  rl	  rÏ   rl	  )
r  rl	  r  rÂ   rÎ   rp	  r  rÂ   r   rV   )rÎ   rp	  rÏ   z.Callable[[Callable[_P, _T]], Callable[_P, _T]]rc  )NNNFFN)FrZ  )FT)r¥   rB   r·   r  r¬  rÂ   rl  rÂ   )r¥   rB   r·   r  )r¥   rB   rv   rn	  )F)r¥   rB   rã  rB   r—   )r¥   rB   r  zSequence[sympy.Expr]rÏ   rB   rí  )r’  rB   rÈ  rB   rÊ  rB   rÄ  r´   rÇ  r´   rÆ  r´   r·   r  rÏ   rB   )r’  rB   rÈ  rB   rÊ  rB   rÄ  r´   rÇ  r´   rÆ  r´   r·   r  rë  útorch.dtype | NonerÏ   rB   )r’  rB   r¾  r5  r¿  r´   rÇ  r´   rÆ  r´   r·   r  rÏ   rB   )r’  rB   r¾  r5  r¿  r´   rÇ  r´   rÆ  r´   r·   r  rë  rq	  rÏ   rB   )r’  rB   r¾  rB   r¿  rB   rÇ  r´   rÆ  r´   r·   r  rÏ   rB   )r’  rB   r¾  rB   r¿  rB   rÇ  r´   rÆ  r´   r·   r  rë  rq	  rÏ   rB   )r   r   r.   )rx  r´   r?  r´   r@  r´   rL  )T)rw   ztorch.Tensor)rc   ztorch.fx.Node)NTFN)rv   rn	  )
rè   ú	list[int]rÍ  rB   r  r  rx  r´   r  r  )
r  r´   r  r´   rè   rr	  rÍ  rB   rx  r´   )r%  rB   rÏ   z.tuple[str, sympy.Expr, sympy.Expr, sympy.Expr])r%  rB   rÏ   ztuple[str, sympy.Expr])r9  rB   rC  rB   r,  rÂ   r-  rÂ   r.  ú
str | Noner/  úTensorBox | NonerÏ   rB   )r’  rB   rH  rB   r,  rÂ   r-  rÂ   )r.   )rÌ   r´   r:  r´   )r   NNr.   )NNN)rh  FF)rÌ   r´   )r©  r1  rÌ   r´   r  rs	  ry  rÂ   )rÌ   r´   r  rs	  )rÌ   r´   ry  rÂ   )r,   F)r¡  ztuple[float | None, ...]rã  r´   r›  rÂ   )rÈ  úfloat | None)r°  ru	  r±  ru	  )r·  ru	  r°  ru	  r±  ru	  )r¥   rB   rÌ  zSequence[int]rÏ  r5  rÏ   rt	  )rs   ú
sympy.Exprr  zsympy.Expr | int)rs   rv	  r  rv	  )rs   rv	  r  rv	  r  rv	  )Nrã  N)
r"  rB   r  úSequence[int | torch.SymInt]r/  rw	  r.  zlCallable[[Sequence[int | torch.SymInt], Sequence[int | torch.SymInt]], torch._inductor.virtualized.OpsValue]rÏ   rB   )Nr   r.   F)r£  )NNNN)rö   r   FTN)rŠ  rS   rÚ   )r¥   r.  rÏ   zir.Constant | None)rh  F)rh  TT)r`   ztorch._ops.OpOverloadPacket)rÏ   z-list[ir.TensorBox | ir.ShapeAsConstantBuffer])rä  úir.Subgraphrå  r  )r²  ztorch.fx.GraphModulert   ro	  )rä  rx	  )rê  rx	  rß  ztuple[torch.Tensor]r0  (B  Ú
__future__r   rø  rì  r  rÿ   Úloggingr×  r?  r¬  rm  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._pytreerC  Ú_pytreerp  Útorch._dynamo.utilsr   Ú(torch._higher_order_ops.associative_scanr   rÊ  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"   rh  r#   r$   r%   Útorch.utils._ordered_setr&   Útorch.utils._sympy.functionsr'   r(   r)   r*   r+   Ú_dynamo.utilsr-   Ú r/   r0   r1   r2   Údecompositionr3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rÑ  rQ   rR   rÌ  rS   rT   rU   ÚFALLBACK_ALLOW_LISTÚ	getLoggerrÞ  r´  rW   Ú__annotations__rX   rY   r|   r}   r  rÎ  Útr_c10drÂ  r    Ú_higher_order_opsrº  rb   rŽ  rZ   Úquantized_decomposedrf   rx   r�   r~   r”   rŸ   r¨   r{  r�  r£  r  ÚbmmÚconvolutionÚconvolution_backwardr<  r@  rl  rÂ  r²  r´  Ú_int_mmrú  rù  r&  rÿ  r¤  rH  rí  r½  Ú	complex32Ú	complex64rÂ   rG  rµ   r¸   rÀ   rÃ   rÔ   rØ   rÞ   rê   r
  r  r!  rE  r$  r2  rN  r`  r…  r•  r�  rò   rÃ  rÆ  rÓ  rÏ  r·   rÖ  rÚ  Ú
device_putrÜ  rß  rÛ  rà  rñ  r   r  r  rþ   ÚaliasÚdetachÚdetach_ÚliftÚview_ofr  rí   r  r  r!  r%  r'  r-  r/  r2  r5  rÄ  r7  r-  rB  rD  rS  Ú_unsafe_viewÚreshaperV  Úslicern  rŒ  r›  r²  Úquantize_per_channelrÌ  rÓ  r“   rÖ  Ú_functional_assert_asyncrÙ  Údequantize_per_channelrà  Úquantize_per_tensorrå  Údequantize_per_tensorrè  r@  ró  rö  r  rO  rQ  rU  r]  rb  rd  rf  rq  r>  ru  ri  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ÚstreamsÚrecord_eventÚ
wait_eventÚsynchronize_eventÚsynchronize_deviceÚforce_stride_orderrö  rÍ  rø  r   rû  Úlookup_seedr  r
  Úrandomr  Úrand_eager_offsetÚrand_eager_offsetsr   r'  r*  rB  rØ  r7  Ú	NO_OPMATHrL  rQ  rS  rˆ   r2  rY  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_normrh  Ú_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Ú	nanmedianrQ  Ú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Ú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Úmasked_scatterÚmasked_scatter_backwardr   ÚangleÚ_efficientzerotensorÚ(_sparse_coo_tensor_with_dims_and_tensorsÚ	to_sparseÚ
_to_sparserÊ   rÖ  r  rn  Ú#_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˜  ÚarangeÚ
start_steprœ  r¡  r©  r«  Úscalar_tensorr¼  Ú
LongTensorr¾  rÄ  rÆ  rÈ  rÐ  r)  rÔ  rO  rÓ  r	  r¿  r¥  Ú
zeros_likerå  ré  rÜ  rð  rô  rö  rþ  r  r  r&  r)  r(  r:  r2  r:  r<  r>  rI  rD  rN  r7  ri  Úfallback__unsafe_masked_indexrm  Ú,fallback__unsafe_masked_index_put_accumulaterg  ru  r`  r}  rw  r‡  r…  r‹  r‚  r¥  rª  r­  r¸  rº  r¹  r¿  rÔ  rà  r  ræ  rç  rô  rù  r  r  r  r#  r'  r2  r5  r7  rd  rz  r‚  r�  r–  rª  r¤  rº  r¸  rÊ  rÐ  rÓ  rÍ  rã  rë  Ú
avg_pool1dr÷  ræ  r  rJ  rE  rM  r`  rc  rg  r�  ry  r€  rŽ  r“  rS  r˜  rš  rœ  rŸ  rç  ÚTensor_Tensorr¨  ÚScalarr¦  ÚTensor_Scalarr§  rS  rË  rs  r¸  r»  r¾  rm  rÃ  rz  rÉ  rú  Útrue_dividerà  r$  rl  rñ  rï  rõ  rô  rþ  rý  r	  r  r  r  r�  r  r  rq  r  rp  r  r  rŽ  r  r�  r  r  r  rP  r  r¡   r.  r!  r(  r,  r]  r[  r`  r_  Úmedianr0  rÌ   r6  r  rM  r3  r8  rY  rc  re  Úrsqrtrù  r¥  Úexpm1Úrelury  r¤  rs  rÞ  rv  rz  Ú_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_erfrø  ÚtanÚtanhrÅ  r{  r  Úlogical_xorr»  r¼  Ú	clamp_minÚ	clamp_maxÚnegrº  Ú	remainderÚsignÚsignbitÚ	_neg_viewÚler¦  r¥  r“  rŸ  r@  ÚcoshÚsinhÚacosÚacoshÚasinÚasinhÚatan2ÚatanÚatanhrØ  ÚerfcÚerfinvÚhypotÚlog10Úlog2Ú	nextafterÚcodegen.commonr›  r}  rƒ  rÜ   r`   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û   ÚmethodÚfuncr�  rŸ  Ú_inductor_testr�  r¡  rÅ  r¥  Úset_Úsource_Tensorr©  Úfsdpr«  rÂ  Ú*torch._higher_order_ops.auto_functionalizerÃ  rÏ  r+	  r’   rá  Úwhile_loop_stack_outputr#  ræ  rÏ  rè  rð  Ú.torch._inductor.fx_passes.control_dependenciesrñ  rÿ  Úinvoke_quantr	  r	  r	  r	  rA	  Úcomm_loweringrB	  rC	  rQ	  rU	  Úcvt_e8m0_rceilr]	  r[	  re	  r…  rf	  Úregister_quantized_opsÚregister_woq_mm_opsrg	  Úregister_onednn_fusion_opsrh	  Úregister_jagged_opsÚcontextmanagerrk	  rö   rg   re   ú<module>r±
     s\=  ðæ "ã Û Û Û Û Û Û Û 	Û 
Û Ý #ß DÓ Dß ?Õ ?Ý 'Ý ã ã Û +Û ß $Ð $Ý (Ý HÝ 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ð
ð	"ðð ô	ð"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ôò*#ô4?òDð: ØØ $ØØØôfôR5òpðB 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ñ. �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ñ>ó :ð>ñ4 �5×)Ò)¸tÔDñ
ó Eð
ñ �4—>’>°tÔ<ñ#ó =ð#ñ �4—;’;Óñ4ó  ð4ñn �4×$Ò$¸$Ô?Ù�4—9’9°$Ô7Ù�4—<’<°TÔ:ó1ó ;ó 8ó @ð1ñ �4—<’<°TÔ:ñ>ó ;ð>ñ �4—:’:°4Ô8Ø˜1 #§+¢+°A¸Tò eEó 9ðeEñP �4—?’?¸Ô=óJó >ðJñ8 �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ôð %)ñ,Øð,àð,ð ð,ð ð	,ð
 ð,ð ð,ð "ð,ð ó,óñ,ñ^ �4—8’8Óób:ó ñb:ñJ �4—=’=°dÔ;õ5Eó <ñ5Eñp �4×%Ò%¸4Ô@õ6ó Añ6ñ �4×(Ò(¸dÔCõó Dññ �4—;’;°DÔ9ñ=Có :ñ=Cñ@ �4—:’:°4Ô8óó 9ññ4 �4×(Ò(¸dÔCó ó Dñ ñ �4—;’;°DÔ9óó :ññ �4—;’;°DÔ9ñDó :ñDñ8 �4—>’>°tÔ<ñó =ññ �4—?’?¸Ô=ñó >ñõñ �4—8’8Óóó ñõð$ ‡‚ñó ñ÷÷D
3÷%6ðT Ø	ØØõ6Nór	,ñ �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ò ˆ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õ .ñ �4×$Ò$×+Ò+ÀÔFð
 ØØØ#ñ^Øð^à
ð^ð ð	^ð
 ð^ð ð^ð ð^ð ó^ó Gñ^ñB Ø‡N‚N×ÒÐ/N×/XÒ/Xôð Øñ7Øð7àð7ð ð	7ð
 ó7óñ7ótóóóóóó óñ0 �d×)Ò)×1Ò1Ñ3JÔ KóaòJ ˆ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×'Ò'Ñ)@Ô AÚ ˆ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�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�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×!Ò!Ô "Ú ˆd×*Ò*Ô +ò ˆd×"Ò"Ñ$6Ô 7Ú ˆd�jŠjÔ ò ˆd×'Ò'Ô (ò ˆd×;Ò;Ô <Ú ˆd�nŠnÔ Ú ˆd�oŠoÔ ò ˆd�jŠj×ÒÔ ò Ø×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—:’:ÓØ"ó ó ñóñ* ˆ4Ð"Ô#Ø+Ñ�d×*Ò*Ó+©EÔ2ñ �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ó 5ó Lð5ñp �5—?’?Ó#ó4ó $ñ4ñ �5×#Ò#Ó$ñ+ó %ñ+ñ �4×+Ò+Ó,ñ)"ó -ñ)"ñX �4×&Ò&Ó'ñó (ññ �4×/Ò/Ó0à%)ñØ59À$óó 1ñóó<Kóñ8 �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÷O÷dð ô<ñ �4—9’9Óñ:¨tõ :ó ñ:ô ô4ô0(ôV4ñ. �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·;²;Õ?ó�ñ Ø‡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Ø-.õ Fó 1ñFñR �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—<’<°u·z²zÖ Bà !Ñ �$—.’.Ó !¡#Ô &á �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Ô 7Ù ˜4×,Ò,×3Ò3±SÔ 9Ù ˜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×'Ò'Ó)ò 8�L�F‰DØ1ÑÑ(©Ó0Ó1±$Õ7ð8ñ �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Ô:ò+ó ;ñ+ñ\ �5×*Ò*×7Ò7ÈTÔRØDH÷ ó Sññ8 Ð&¸DÔAð Øð Ø4Gô ó Bñ ñF �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ñ*ôZWñ
 �>×0Ò0ÀdÔKò")ó Lñ")ñJ Ø	×Ò×2Ò2Èôð 37¸Qõóñ÷F Ð ñ ‘Ô ç !Ð !ð +Ñ × *Ò *Ô ,Ø 'Ñ × 'Ò 'Ô )ç Ð ð ,Ñ × +Ò +Ô -ç Ð ð %Ñ × $Ò $Ô &ð ×Òôó òrg   