
    '}hm             -       f   d dl Z d dlmZ d dlmZ d dlmZmZmZm	Z	m
Z
 d dlZd dlmZ d dlmZmZmZ d dlmZmZmZmZ d dlmZ d dlmZmZ d d	lmZmZmZmZm Z m!Z!m"Z" d d
l#m$Z$m%Z%m&Z&m'Z'm(Z( d dl)m*Z*m+Z+ d dl,m-Z. ej^                  j`                  Z0ejb                  je                  ddd      Z3d Z4defdZ5d Z6d Z7 e4e0jp                  e0jr                  g       e(       dddejt                  ddfd              Z; e4e0jx                  jz                  e0jx                  j|                  g       e(       d               Z? e4e0j                  jz                  e0j                  j|                  g       e(       ddd              Z@ e4e0j                         e(       d               ZA e4e0j                  jz                  e0j                  j|                  e0j                  jz                  e0j                  j|                  g       e(dd      d               ZD e4e0j                  jz                  e0j                  j|                  g       e(       d               ZEd  ZF e4e0j                  jz                  e0j                  j|                  g       e(       d!               ZH e4e0j                  jz                  e0j                  j|                  g       e(       d"               ZJ e4e0j                  j                        dd#d$       ZM e4e0j                  jz                        ej                  dddd%d&       ZO e4e0j                  jz                        ej                  dddd%d'       ZQ e4e0j                  j                        ej                  dddd%d(       ZS e4e0j                  jz                        ddddd%d)       ZU e4e0j                  jz                  e0j                  j|                  g       e(       d*               ZW e4e0j                  jz                        dd+       ZYd, ZZ e4e0j                  jz                        d-        Z\ e4e0j                        	 	 	 dd.ed/ed0ed1ee   d2ee^   d3eej                     fd4       Z` e4e0j                        	 	 	 	 dd5ej"                  d6ej"                  d1ee   d7ee   d3eej                     d8ebfd9       Zc e4e0j                  jz                        d:d;d<ed=eed>ed?ej"                  d@e^dAebdBefdC       Zf e4e0j                  jz                        d:d;d<ed=eed>ed?ej"                  d@e^dAebdBefdD       Zh e(        e4e0j                  jz                        dE               Zj e4e0j                  jz                        dddd dddFdGed@e^dHee   dee   dIee   dJeedKebdBefdL       Zl e4e0j                  jz                  e0j                  j                  g       e(       dM               Zo e4e0j                  j                        ddN       Zq e4e0j                  jz                  e0j                  j                  g       e(       dO               Zs e4e0j                  j                        ddP       Zt e4e0j                  jz                        dQ        Zv e4e0j                  j|                        dR        Zw e4e0j                  jz                        dS        Zy e4e0j                  j                        dT        Z{ e4e0j                  jz                        dU        Z} e4e0j                  jz                        ddddddVdW       Z e4e0j                   jz                        ddX       Z e4e0j                  jz                        ddY       Z e4e0j                  jz                        ddZ       Z e4e0j                  jz                        d[        Z e4e0j                  j                        d\        Zd<ed]e^fd^Zd<ed_ed`e^fdaZ	 ddbed]e^dcebfddZdd_ed]e^dee^fdfZd_edgedhebd]e^fdiZ	 ddke^djed.edle^fdmZdne^fdoZ e4e0j                  jz                  e0j                  j                   g       e(dpdq      	 	 dd_edne^dsebfdt              Z e4e0j$                  jz                  e0j&                  j|                  g       e(       d.edBefdu              Z e4e0j*                  g       e(dpdq      d.efdv              ZdwedBefdxZ e4e0j0                         e(       d<ed_edyebdBefdz              Z e4e0j2                         e(       dd<ed_edyebdBefd{              Z e4e0j4                         e(       dd<edyebdBefd|              Z e4e0j6                         e(       dd<edyebdBefd}              Z e4e0j8                  jz                        dd_edyebd~ebfd       Z e4e0j:                  jz                  e0j:                  j|                  g       e(       d.ededBefd              Z e4e0j<                  jz                        dd_ed~ebfd       Z e4e0j@                  jz                  e0j@                  j|                  g       e(ddd      dddd<edebd~ebdBe	eeef   fd              Z e4e0jD                  jz                  e0jD                  j|                  g       e(       dddededgedebdBef
d              Z e4e0jH                  jz                  e0jH                  j|                  g       e(ddrd      d:dd_edebdBe	eeef   fd              Z e4e0jL                  jz                  e0jL                  j|                  g       e(ddd      d:ddd_edebd~ebdBe	eeef   fd              Z e4e0jP                  jz                  e0jP                  j|                  g       e(       d:dddededgedhebdebdBefd              Z e4e0jT                         e(ddrd      	 	 ddededebdebdBe	eeef   f
d              Zde^dBe	ebebf   fdZ e4e0jZ                  jz                  e0jZ                  j|                  g       e(dd      	 dd_ede^dBe	eef   fd              Z e4e0j^                  jz                  e0j^                  j`                  g       e(dddd      d_edBe	eeeef   fd              Z e4e0jb                  jz                        	 	 	 dd_edebdebdee^   fd       ZdededBe	eee   eee   f   fdZdeded`ee^   dBe	eef   fdZd.ededBebfdZ e4e0jl                        d:ddddddd_edgedhebd~ebdjee   dee   dee   dee   dBe	eeeef   fd       Z e4e0jn                  jz                  e0jn                  j|                  g      d:dddd_edgedyebdhebdebdee   dBefd       Z e4e0jr                         e(dd      	 	 	 dd<ed_edyebdebdebdBe	eef   fd              Z e4e0jv                  jz                        d        Z e4e0jz                         e(       	 	 dd.edededhebdebdBefd              Zd Zd Z e4e0j                         e(       d               Z e4e0j                         e(       d               Zd Z e4e0j                         e(d      d               Z e4e0j                         e(d      d               Zd Z e4e0j                         e(       d               Z e4e0j                         e(       d               Z e4e0j                  jz                  e0j                  j                  e0j                  jz                  e0j                  j                  g       e(d      d               ZdÄ Z e4e0j                         e(       dĄ               Z e4e0j                         e(       dń               Z e4e0j                  jz                  e0j                  j                  e0j                  jz                  e0j                  j                  g       e(d      dƄ               Z e4e0j                         e(       dd<ededBefdȄ              Z e4e0j                         e(       ded<edededBef
d˄              Z e4e0j                  jz                  e0j                  j|                  g       e(       ddd͜d΄              Z e4e0j                  jz                  e0j                  j|                  g       e(       dd#dτ              Z e4e0j                  j                        ddЄ       Z e4e0j                  j                        ddф       Z e4e0j                  jz                        	 	 dd҄       Z e4e0j                         e(       dӄ               ZdԄ ZddՄZ	 ddej"                  d/ej"                  de
eee   eef   de
eee   eef   de
eee   eef   debdeedee
eee   eef      fd݄Zdބ Z e4e0j                  jz                        dej"                  d/ej"                  d1ej"                  deee   deee   deee   debdeee   deefd߄       Zej                  j                  rejb                  je                  ddd      Z e4ej^                  j                  j                  jz                        d        Z e4ej^                  j                  j                  jz                        d        Zej                  j                  rKejb                  je                  ddd      Z e4ej^                  j                  j                        d        Zejb                  je                  ddd      Z e4ej^                  j                  j                   jz                        d        Z e4ej^                  j                  j                  jz                         e4ej^                  j                  j                  j                        d               Zejb                  je                  ddd      Z e4ej^                  j                  j                        	 	 	 	 dd       Zd Z	 e4e0j                  jz                        	 	 	 	 	 dd       Zd Z e4e0j                  jz                        d        Z e4e0j                         e(       	 	 	 	 	 dd              Z e4e0j"                         e(d      d               Z e4e0j&                  jz                        d        Z e4e0j*                  jz                        d        Z e4e0j.                  jz                        d        Z e4e0j2                         e(d      d               Zdedee^fdZ e4e0j8                         e(dd      d               Z e4e0j<                         e(d      d               Z e4e0j@                         e(dd      d               Z! e4e0jD                         e(d      d               Z# e4e0jH                  j"                        dd       Z% e4e0jL                  jz                  e0jL                  j|                  g       e(       d               Z' e4e0jP                  jz                  e0jP                  j|                  g       e(       dddeedeefd               Z( e4e0jR                  j"                  e0jT                  j"                  g      d        Z+ e4e0jX                  jz                  g      d        Z- e4e0j\                  jz                  e0j\                  j|                  g       e(       ddd͜d              Z/d Z0 e0g e0jb                  e0jd                  e0jf                  e0jh                  e0jj                  e0jl                  e0jn                  e0jp                  e0jr                  e0jt                  e0jv                  e0jx                  e0jz                  e0j|                  e0j~                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                        ddd       ZW e0g e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                  e0j                        ddd       Z~ e4e0j                  j                   g      d        Zd	 Z e4e0j                  e0j                  g      d
        Z e4e0j                  e0j                  g      d        Z e4e0j                  j                  e0j                  j                  g      dd       Z e4e0j                  j"                  e0j                  j"                  g      d        Z e4e0j                  j                  e0j                  j                  g      dd       Z e4e0j"                  jz                  g      dddd       Z e4e0j&                  jz                  g      dddd       Z e4e0j*                  g       e(       d               Z e4e0j.                  g      d        Z e4e0j2                  g      d        Z e4e0j6                  g      d        Z e4e0j:                  jz                        d        Z e4e0j>                         e(       d               Z e4e0jB                  jz                        	 	 	 	 	 	 dސd       Z e4e0jF                  jz                        d        ZdΐdZ e4e0jL                  jz                  e0jL                  j|                  g       e(       dddd              Z e4e0jP                  jz                  e0jR                  jz                  g      d        Z e4e0jP                  j                  e0jP                  jV                  e0jR                  j                  e0jR                  jV                  e0jX                  jz                  e0jX                  jZ                  g       e(dd      dd              Z e4e0j^                  jz                        d        Z e4e0jb                  jz                        d         Z e4e0jf                  jz                        d!        Z e4e0jj                  j                  e0jl                  j                  e0jj                  j"                  e0jl                  j"                  e0jn                  jz                  e0jp                  jz                  e0jr                  jz                  g      d"        Z e4e0jv                  j                  e0jx                  j                  e0jv                  j"                  e0jx                  j"                  g      dd#       Z e4e0j|                  jz                  e0j|                  j~                  g      d$        Zd% Z e4e0j                  j"                  e0j                  j                  g      d&        Z e4e0j                  j"                  e0j                  j                  g      d'        Z e4e0j                  jz                        d(        Z e4e0j                  j"                  e0j                  j                  g      d)        Z e4e0j                  j"                  e0j                  j                  g      d*        Z e4e0j                  jz                        d+        Z e4e0j                  jz                  e0j                  jz                  g      dʐd,       Z e4e0j                  j                        d-        Z e4e0j                        d.        Z e4e0j                         e(       d/               Z e4e0j                        d0        Z e4e0j                  jz                        dʐd1       Z e4e0j                  jz                        d2        Zܐdېd3Z e4e0j                  jz                        d4        Zߐd5 Zd6 Zd7 Zd8 Z	 dd.ed9eed:eed;eed<eed=eed>eed?eed@eedAeedBeedCeedDeedEeedFeedGeedHeedIeedJeedKeedke^dLebf,dMZdN Zd.eded9eed:eed;eed<eed=eed>eed?eed@eedAeedBeedFeedGeedHeedIeedJeedKeedke^f&dOZdP Z e4e0j                  jz                        dQ        Z e4e0j                  jz                        	 dܐdR       Z e4e0j                  jz                        dS        Z e4e0j                         e(       dT               ZdU Z e4e0j                         e(       dV               Z e4e0j                         e(dd      	 	 	 	 dܐdW              Z e4e0j                         e(d      dX               Zd.edYefdZZ G d[ d\e      Zd.edYed]eefd^Z e4e0j                  jz                        d_        Z e4e0j                         e(       d`               Z e4e0j                         e(dda      db               Z e4e0j                  jz                  g      dc        Z e4e0j                  jz                        	 	 	 	 	 ddd       Z e4e0j                   j                        de        Z e4e0j                  jz                        df        Z e4e0j                  jz                        ddg       Zdd=eedheediebfdjZdk Zdl Z e4e0j                  jz                        dʐdm       Z
dʐdnZdېdoZdp ZdېdqZddrZ e4e0j                   jz                        ds        Z e4e0j$                        dt        Z e4e0j(                  j*                  e0j(                  j,                  e0j(                  j.                  e0j(                  j0                  g       e(       dېdu              Z e4e0j4                  j*                  e0j4                  j,                  e0j4                  j.                  e0j4                  j0                  g      dېdv       Z e4e0j8                  g      	 dېdwedxedyedzeded{ed|ed}ed~eedeedeېdebdededee   fd       Z e4e0j<                  g      	 	 	 	 ddxedyedzedeېdebdee   dee   fd       Z e4e0j@                  g      	 	 d͐dwedxedyedzeded{edeېdebdee   dee   fd       Z! e4e0jD                  g      	 	 ddwedxedyedzedee   ded{edededeېdeeb   debdee   fd       Z# e4e0jH                  g      	 dېdwedxedyedzeded{ed|ed}ed~eedeedeېdebdededee   fd       Z% e4e0jL                  g      	 	 d͐dwedxedyedzed1ee   dee   dee   deedeed{edeېdededeedebdee   deee   f"d       Z' e4e0jP                  jz                  g      	 	 	 	 	 	 dd<ej"                  dej"                  d1eej"                     d3eej                     deej"                     deej"                     deej"                     debfd       Z) e4e0jT                  jV                  e0jT                  jX                  g       e(       dΐd              Z- e4e0j\                  jV                        dΐd       Z/ e4e0j`                  jz                  e0j`                  j|                  g       e(       ddd#d              Z1d Z2d Z3 e4e0jh                  jz                  e0jj                  jz                  g      dېd       Z4 e4e0jl                  jz                  e0jn                  jz                  g      d͐d       Z6 e4e0jp                  jz                  e0jr                  jz                  g      	 	 ddedee
eeejt                  f      dee
eeejt                  f      dee   dee   f
d       Z8 e4e0jv                  jz                  e0jx                  jz                  g      dːd       Z; e4e0jz                  jz                  e0jz                  j|                  e0jz                  jZ                  e0jz                  j~                  g      dd       Z@ e4e0j                  j|                        dddd       ZBd ZC e4e0j                  jz                        	 d͐d       ZE e4e0j                  jz                        d        ZF e4e0j                  jz                        d        ZGd ZHd ZI e4e0j                  jz                  e0j                  jz                  g      dߐd       ZL e4e0j                  jz                        dd       ZM e4e0j                  jz                        dd       ZOej                  ZQd ZR e4e0j                  jz                        d        ZS e4e0j                  jz                        d        ZT e4e0j                  jz                        d        ZV e4e0j                  jz                        d        ZW e4e0j                  j"                  e0j                  j                  g       e(       dddd              ZZ e4e0j                  jz                  e0j                  jz                  g      	 d͐d       Z] e4e0j                  jz                        d        Z^ e4e0j                  jz                  e0j                  j|                  g       e(       dːd              Z_ e4ej^                  j`                  j                        d        Z` e4ej^                  j`                  j                        d        Za e4e0j                         e(       dddddd              Zcd Zd e4e0j                         e(       dddÜdĄ              Zf e4e0j                         e(       deed<edBefdƄ              ZhdǄ ZidȄ Zj eie0j                          eie0j                          eie0j                          eie0j                          eie0j                          eie0j                          eie0j                          eie0j                          eie0j                          eje0j                          eje0j                          eje0j                          eje0j                          eje0j                          eje0j                          eje0j                          eje0j                          eje0j                          eje0j                          eje0j                          eje0j                         d dl)Zd dlZd dlZdɄ Z e        y(      N)Enum)partial)ListOptionalSequenceTupleUnion)SymBoolSymFloatTensor)_add_op_to_registry_convert_out_paramsglobal_decomposition_table
meta_table)
OpOverload)_prim_elementwise_meta$ELEMENTWISE_PRIM_TYPE_PROMOTION_KIND)corresponding_complex_dtypecorresponding_real_dtypeelementwise_dtypesELEMENTWISE_TYPE_PROMOTION_KINDIntLikemake_contiguous_strides_for
TensorLike)_maybe_convert_to_dtype_maybe_resize_out_resize_output_check_safe_copy_outout_wrapper)_broadcast_shapes_maybe_broadcast)_pytreeatenIMPLMetac                       fd}|S )Nc                 V     t                 fd}t        j                  |        S )Nc                 (    t        t        |        y N)r   r   )opfns    X/var/www/html/test/engine/venv/lib/python3.12/site-packages/torch/_meta_registrations.pyregisterz0register_meta.<locals>.wrapper.<locals>.register/   s    
B3    )r   pytree	tree_map_)r+   r-   r*   s   ` r,   wrapperzregister_meta.<locals>.wrapper,   s)     $	4 	2&	r.    )r*   r1   s   ` r,   register_metar3   +   s     Nr.   type_promotionc                     t        j                  |d| i\  }}|D cg c]  }t        ||       }}t        | }t	        |dt
        j                  iS c c}w )Ntype_promotion_kindr4   )utilsr   r   r!   r   r   DEFAULT)r4   args_result_dtypexs        r,   elementwise_metar=   8   ss    
 ..	*OA| ?CC#A|4CDC T"D "	BJJ  Ds   Ac                     t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  i}|j                  | |       S r)   )torch	complex32halfcfloatfloatcdoubledoubleget)dtypefrom_complexs     r,   toRealValueTyperI   L   sE    ekku||L
 E5))r.   c                 l     t        t         g|       t        j                   k(   fd       y )Nc                      d d  S )Nzoutput with shape z# doesn't match the broadcast shape r2   )broadcasted_shape
self_shapes   r,   <lambda>z)check_inplace_broadcast.<locals>.<lambda>Y   s    $ZL0STeSfg r.   )tupler    r?   _check)rM   
args_shaperL   s   ` @r,   check_inplace_broadcastrR   U   s0    /
HZHI	LLZ'gr.   Fc	                 <   	 t         t        j                        r(t        j                   j	                         dk(  d        t        t        j                        r(t        j                  j	                         dk(  d        t        d  fD              rZt        j                  t        j                               		nFt        j                  t        j                        	fd       nxs t        j                         t        t        j                        sJ t        j                  t        t               fd       t        t              sJ t        j                  dk\  d        t        j                  f|d||	      S )
Nr   c                       yNz:linspace only supports 0-dimensional start and end tensorsr2   r2   r.   r,   rN   z(meta_linspace_logspace.<locals>.<lambda>m       r.   c                       yrU   r2   r2   r.   r,   rN   z(meta_linspace_logspace.<locals>.<lambda>r   rV   r.   c              3   <   K   | ]  }t        |t                y wr)   )
isinstancecomplex).0args     r,   	<genexpr>z)meta_linspace_logspace.<locals>.<genexpr>u   s     
C:c7#
C   c                      d  d S )Nzlinspace(): inferred dtype z& can't be safely cast to passed dtype r2   )default_complex_dtyperG   s   r,   rN   z(meta_linspace_logspace.<locals>.<lambda>~   s    56K5LLrsxryz r.   c                      dt              j                   dt               j                   dt              j                   dS )Nz4received an invalid combination of arguments - got (, ))type__name__)endstartstepss   r,   rN   z(meta_linspace_logspace.<locals>.<lambda>   sD     u+r$s),,-RU0D0D/EQH r.   c                       y)Nz$number of steps must be non-negativer2   r2   r.   r,   rN   z(meta_linspace_logspace.<locals>.<lambda>   rV   r.   meta)rG   layoutdevice
pin_memoryrequires_grad)rY   r?   r   rP   dimanyr7   r   get_default_dtypeis_complex_dtyperG   _check_typer   empty)
rg   rf   rh   baserG   rl   rk   rm   rn   r`   s
   ``` `    @r,   meta_linspace_logspacerv   ]   sL    %&IIK1P	
 #u||$GGINP	

 
CsE/B
CC % A A##%!
 =)ELL&&u-z
 2002eU[[))) 
5'"	H
 eW%%%	LL!KL;;	# r.   c                    t        j                  j                  t         j                  k(  fd       t        j                  | j                         dk(  xr j                         dk7   d        | j                  j                        S )Nc                  "    d j                    S )Nz2take(): Expected a long tensor for index, but got rG   indexs   r,   rN   zmeta_take.<locals>.<lambda>   s    DU[[MR r.   r   c                       y)Nz*take(): tried to take from an empty tensorr2   r2   r.   r,   rN   zmeta_take.<locals>.<lambda>   rV   r.   )r?   rP   rG   long_check_indexnumel	new_emptyshape)selfr{   s    `r,   	meta_taker      sm     
LLuzz!R
 
ZZ\Q55;;=A#56< >>%++&&r.   ro   c                T     j                   }j                   }t        j                  ||k(  d        t        j                   j                        dk(  xr j                        dk(   fd       t	         j
                  j
                        } j                  |      S )Nc                       y)Nz=linalg.cross: inputs must have the same number of dimensions.r2   r2   r.   r,   rN   zlinalg_cross.<locals>.<lambda>   rV   r.      c                  V    d  dj                          dj                          S )Nzlinalg.cross: inputs dimension z must have length 3. Got  and size)ro   otherr   s   r,   rN   zlinalg_cross.<locals>.<lambda>   s6    -cU 399S>"%

3'8: r.   )ndimr?   rP   r   r    r   r   )r   r   ro   x_dy_d	out_shapes   ```   r,   linalg_crossr      s     ))C
**C	LLs
O 
LL		#!4

31 4	
 "$**ekk:I>>)$$r.   c                 |    t        | d       t        | d       t        j                  | t        j                        S )Nzlinalg.matrix_expmemory_format)squareCheckInputscheckFloatingOrComplexr?   
empty_likecontiguous_formatr   s    r,   linalg_matrix_expr      s3     d/04!45D0G0GHHr.   valuesindicesc                 Z   t        j                  | j                  | j                  | j                        }t        j                  | j                  | j                  t         j
                        }| j                         dk7  r%| j                  dk7  rt        || j                         ||fS )Nrl   rG   r   )	r?   rt   r   rl   rG   int64r   r   maybe_wrap_dim)r   ro   r   r   s       r,   	cummaxminr      sp    
 [[DKKtzzJFkk$**T[[LGzz|qTYY!^sDII&7?r.   c                 t    t        || j                         t        j                  |       j	                         S r)   )r   r   r?   r   
contiguous)r   ro   s     r,   logcumsumexpr      s,     3		"D!,,..r.   c                    |j                   }t        |      }||z
  }t        t        |            }t        |      D 	cg c]  }	d }
}	|D ]  }d|
|<   	 g g }}|D ]*  }|
|   s|j	                  |       |j	                  |       , ||z   }t        |      }|j                         |d | }|j                  fdd       |||d  z   }|j                  |      }dgt        |j                  |d        z   }|j                  |      }|j                  d      }||d<   |}t        t        |            D ]  }|||      ||dz   <    | j                  |      } t        |      D 	cg c]  }	d }}	d}|dz
  }|dk\  r0|| j                  d      z  |||   <   ||||      z  }|dz  }|dk\  r0t        ||      D ]  }| j                  d||z
  z         |||   <   ! | j                  ||| j                               S c c}	w c c}	w )NFTc                     |    S r)   r2   r<   self_stridess    r,   rN   z_exec_fft.<locals>.<lambda>   s    <? r.   keyreverser   r      )r   lenlistrangeappendstridesortpermuter   reshaper   
as_stridedstorage_offset)outr   	out_sizesro   forwardr   signal_ndim
batch_dimsdim_permuter:   is_transformed_dimdleftright	batch_endtmpinputbatched_sizes
batch_sizebatched_out_sizesiout_stridesbatch_numelr   s                          @r,   	_exec_fftr      sK   99Dc(K#J uT{#K).t5A%55 % $1% b%D !!$KKNLLO	
 ,KD	I;;=L
jy
!CHH*DH9IJ//KLL%E D4JK 899MMM-(EAJ!M!%3s8_ 5#,SV#4!a% 5
++'
(C $Dk*1*K*KQA
q&&1CJJqM&AKN#yQ00	Q q& :t$ G&)jja*n1E&FKN#G>>)[#2D2D2FGGS 6@ +s   	G='	Hc                     | j                   j                  sJ | j                  }| j                  |      }|s|S |d d  }| j	                         |j                  fdd       t        || |||      }|S )Nc                     |    S r)   r2   r   s    r,   rN   zmeta_fft_c2c.<locals>.<lambda>  s    <? r.   Tr   )rG   
is_complexr   r   r   r   r   )r   ro   normalizationr   r   outputsorted_dimsr   s          @r,   meta_fft_c2cr     sv     ::    

I^^I&Fa&K;;=L2DAvtYWEFMr.   c                     | j                   j                  sJ t        | j                               }|r|d   }||   dz  dz   }|||<   | j	                  |t        j                  | j                               S )Nr      r   ry   )rG   is_floating_pointr   r   r   r7   r   )r   ro   r   onesidedoutput_sizeslast_dimlast_dim_halfsizes          r,   meta_fft_r2cr   "  s|     ::''''		$Lr7)(3q8A=!2X>>E==djjI   r.   )	generatorc                B    t        |t        j                  | g            S r)   )r   r?   Size)nr   r   s      r,   meta_randpermr   2  s    S%**aS/22r.   rG   rk   rl   rm   c                6    t        j                  | ||||      S Nr   r?   rt   )r   rG   rk   rl   rm   s        r,   meta_randperm_defaultr   7  s      ;;	vf r.   c                6    t        j                  |||||      S r   r   )highr   rG   rk   rl   rm   s         r,   meta_randintr   @  s      ;;E&J r.   c                6    t        j                  |||||      S r   r   )lowr   r   rG   rk   rl   rm   s          r,   meta_randint_lowr   I  s      ;;E&J r.   c                6    t        j                  | ||||      S r   r   )r   rG   rk   rl   rm   s        r,   meta_rand_defaultr   Y  s    ;;E&J r.   c                     | j                   j                  sJ t        | j                               }|||d   <   | j	                  |t        | j                               S )Nr   ry   )rG   r   r   r   r   rI   )r   ro   r   lastdimr   s        r,   meta_fft_c2rr   `  sQ     ::    		$L#LR>>,odjj.I>JJr.   c                 .   t        j                  |       dk(  rt        d      t        |t              ra|j                  | |      }| j                         |j                         k7  r.t        j                  j                  || j                                | S )Nr   zQmore than one element of the written-to tensor refers to a single memory location)
r?   _debug_has_internal_overlapRuntimeErrorrY   r   tor   r#   expand_copydefault)r   srcnon_blockingintermediates       r,   
meta_copy_r   i  s{     ((.!3_
 	
 #vvvdL199;,++--$$\499;?Kr.   c                     t        | j                               }t        | j                               }|| j                         k\  rdn
||   ||   z  }|j	                  |d       |j	                  ||       ||fS Nr   )r   r   r   ro   insert)tensorro   result_sizesresult_strides
new_strides        r,   inferUnsqueezeGeometryr  |  sq    &L&--/*NVZZ\)|C/@>RUCV/VJQ#z*''r.   c                     t        || j                         dz         }t        | |      \  }}| j                  ||       | S r   )r   ro   r  as_strided_)r   ro   g_sizes	g_stridess       r,   meta_unsqueeze_r    s>    
dhhj1n
-C/c:GYWi(Kr.   r   weight_metabias_activation_opt	out_dtypec                 8   t        | j                        }|*|j                  d      |j                  d      k(  sJ d       |j                  d      | j                  d      dz  k(  sJ |j                  d      |d<   t        | j                        dk(  sJ d       d| j                  d      f}|7| j                  t
        j                  k(  r|t
        j                  k(  sJ d       | j                  ||| j                  n|      j                  ||      }|S )	Nr   zoutput size mismatchr   r   r   z*we can only handle the squashed input casez9out_dtype is only supported for i8i8->i32 linear operatorry   )
r   r   r   r   rG   r?   int8int32r   r   )	r   r  r  r	  r
  r  r   transposed_stridesr   s	            r,   meta_sparse_structured_linearr    s    $L{{1~1-E/EE-;;q>UZZ^a////{{1~L u{{q N"NN UZZ]+KK5::%)u{{*B	GF	GB__&.ekkI   j12 
 Mr.   compressed_Adense_Balphatranspose_resultc                    |j                   t        j                  t        j                  t        j                  t        j
                  hv sJ d       | j                   |j                   k(  sJ d       t        |j                        dk(  sJ d       | j                   t        j
                  k(  }|rdnd}|j                  d      }|j                  d      }	| j                         d	z  ||z  z  }
||
|j                  d      k(  sJ |:|r1|t        j                  t        j                  t        j                  hv sJ d
       |r|	|
fn|
|	f}|j                  ||      }|S )Nz2_cslt_sparse_mm only supports fp16, bf16, and int8zinputs must have the same dtyper   z'_cslt_sparse_mm only supports 2d inputs
   	   r   r      z?out_dtype is only supported for i8i8->fp16, bf16, or i32 matmulry   )rG   r?   float32float16bfloat16r  r   r   r   r   r  r   )r  r  r	  r  r  r  is_int8_input_typecompression_factorkr   moutput_shaperesults                r,   meta__cslt_sparse_mmr"    sc    ==

	  <
 <<  .Q0QQ.w}}"M$MM"%++uzz91qQAQA					"(:Q(>?ADIIaL   !iMMNNKK4
 '
 	M M		M 

 .Aq6Aq6L|9=FMr.   T)include_selfr   ro   r{   sourcereducer#  returnc                L    t        j                  | t         j                        S Nr   )r?   r   r   r   ro   r{   r$  r%  r#  s         r,   meta_index_reducer*    s     D0G0GHHr.   c                    | S r)   r2   r)  s         r,   meta_index_reduce_r,    s	     Kr.   c                     t        | j                               }| j                         dkD  r|j                         ||<   | j	                  |      S )Nr   )r   r   ro   r   r   )r   ro   r{   result_sizes       r,   meta_index_selectr/    s@     tyy{#KxxzA~ ;;=C>>+&&r.   )lengthsr   offsetsaxisunsafeinitialdatar0  r1  r2  r3  c                     |t        d       fd}| ||j                        S |+|j                  d d |j                  d   dz
  fz   }	 ||	      S t        d      )Nz?segment_reduce(): indices based reduction is not supported yet.c                     t        j                  | j                  dz   d  z   j                  dt         j                        S )Nr   rj   rG   rl   r   )r?   rt   r   rG   r   )lengths_shaper2  r5  s    r,   segment_reduce_lengths_tensorz:meta_segment_reduce.<locals>.segment_reduce_lengths_tensor	  s>    {{DJJtaxz22**11	
 	
r.   r   r   z<segment_reduce(): Either lengths or offsets must be defined.)NotImplementedErrorr   r   )
r5  r%  r0  r   r1  r2  r3  r4  r:  r9  s
   `    `    r,   meta_segment_reducer<    s|     !M
 	

 ,W]];; cr*gmmB.?!.C-EE,];;
U
VVr.   c                 $    | j                  d      S Nr2   r   r   s    r,   meta_maxr@         >>"r.   c                     t        j                  | j                  |f      }t        | ||      }| j	                  |      | j	                  |t
        j                        fS Nry   r7   reduction_dimsr   _compute_reduction_shaper   r?   r}   r   ro   keepdimr   s       r,   meta_max_dimrI  "  R    


tzzC6
2C+D#w?L|$|5::6 r.   c                 $    | j                  d      S r>  r?  r   s    r,   meta_minrL  ,  rA  r.   c                     t        j                  | j                  |f      }t        | ||      }| j	                  |      | j	                  |t
        j                        fS rC  rD  rG  s       r,   meta_min_dimrN  2  rJ  r.   c                     | j                         rt        | j                        }nt        | t        j
                        \  }}t        j                  | |      S )Nr6   ry   )r   r   rG   r   r   INT_TO_FLOATr?   r   )r   r;   r:   s      r,   
meta_anglerR  <  sI    /

;, ? L L
< D55r.   c                     t        j                  || j                         | j                         |j	                  t        j
                  |             S r)   )r?   _resize_output_r   rl   copy_angle)r   r   s     r,   meta_angle_outrW  H  s6    	#tyy{DKK899U[[&''r.   c                      y r)   r2   )vals    r,   assert_asyncrZ  N      
r.   c                      y r)   r2   )rY  
assert_msgs     r,   assert_async_metar^  S  r[  r.   c                      y r)   r2   )ss    r,   
print_metara  X  r[  r.   rG   rk   rl   rm   r   c                 0    t        j                  g d      S )Nrj   rl   r   rb  s        r,   make_dep_tokenre  ]  s     ;;r&))r.   c                 h    ddl m} t        | t        t        f      rt        d       || ||       y )Nr   )constrain_range'Constraining SymFloat or Symbool is nyiminmax)%torch.fx.experimental.symbolic_shapesrg  rY   r   r
   
ValueError)r   rj  rk  rg  s       r,   sym_constrain_rangern  i  s/     F$7+,BCCDcs+r.   c                 6    t         j                  | ||       |S Nri  )r#   rn  r   rj  rk  	dep_tokens       r,   functional_sym_constrain_rangers  s  s    Ts4r.   c                 h    ddl m} t        | t        t        f      rt        d       || ||       y )Nr   )_constrain_range_for_sizerh  ri  )rl  ru  rY   r   r
   rm  )r   rj  rk  ru  s       r,   sym_constrain_range_for_sizerv  y  s/     P$7+,BCCd5r.   c                 6    t         j                  | ||       |S rp  )r#   rv  rq  s       r,   'functional_sym_constrain_range_for_sizerx    s    %%d%=r.   c                     |S r)   r2   )rY  r]  rr  s      r,   functional_assert_async_metarz    s    r.   f_namec                     | j                         dk\  s
J | d       | j                  d      | j                  d      k(  s.J | d| j                  d       d| j                  d       d       y )Nr   z3: The input tensor must have at least 2 dimensions.r   z5: A must be batches of square matrices, but they are  by 	 matrices)ro   r   )r   r{  s     r,   r   r     s    
aF
DEF99R=DII
  s
FtyyQS}oUYZ^ZcZcdfZgYhhqrs r.   Anamec                     t        j                   j                  j                  k(   fd       t        j                   j                  j                  k(   fd       t        j                  j	                  d      j	                  d      k(  fd       t        j                  j	                  d       j	                  d      k(   fd       y )Nc                  >    dj                    d j                    dS )Nz:Expected b and A to be on the same device, but found b on z
 and A on 	 instead.rd  r  r   s   r,   rN   z(linearSolveCheckInputs.<locals>.<lambda>  s%    H{{m:ahhZy: r.   c                  >    dj                    d j                    dS )Nz=Expected b and A to have the same dtype, but found b of type z and A of type r  ry   r  s   r,   rN   z(linearSolveCheckInputs.<locals>.<lambda>  s%    Kzzl/!'')= r.   r   r}  c                  R    d j                  d       d j                  d       dS )Nz3A must be batches of square matrices, but they are r}  r~  r   r  r   r  s   r,   rN   z(linearSolveCheckInputs.<locals>.<lambda>  s0    FF2J<tAFF2J<yB r.   c                      d d j                  d       d j                  d       dj                  d       dj                  d       
S )NzIncompatible matrix sizes for z: each A matrix is r   r~  z but each b matrix is r}  r   )r  r  r   s   r,   rN   z(linearSolveCheckInputs.<locals>.<lambda>  sR    ,TF 3D$TYYr]O4		"H r.   )r?   rP   rl   rG   r   )r   r  r  s   ```r,   linearSolveCheckInputsr    s    
 
LLqxx	
 
LL

agg	
 
LL	r
affRj 	
 
LL	r
diim#	
r.   tallow_low_precision_dtypesc                 J   | j                   t        j                  | j                         xs | j	                         fd       |sYt        j                  t        j
                  t        j                  t        j                  t        j                  fv fd       y y )Nc                       d  S )Nz<: Expected a floating point or complex tensor as input. Got r2   rG   r{  s   r,   rN   z(checkFloatingOrComplex.<locals>.<lambda>  s    6(VW\V]^ r.   c                       d  S )Nz*: Low precision dtypes not supported. Got r2   r  s   r,   rN   z(checkFloatingOrComplex.<locals>.<lambda>  s    vhHP r.   )	rG   r?   rP   r   r   rC   rE   rB   rD   )r  r{  r  rG   s    ` @r,   r   r     sn     GGE	LL	/^ &ekk5<<u}}MMP	
 &r.   arg_namec                 ^    t        j                  | j                         dk\  fd       y )Nr   c                       d  dS )Nz: The input tensor z! must have at least 2 dimensions.r2   )r  r{  s   r,   rN   zcheckIsMatrix.<locals>.<lambda>  s    6(-hZ7XY r.   )r?   rP   ro   )r  r{  r  s    ``r,   checkIsMatrixr    s    	LL	1Yr.   Br   c                      t                t               t        j                  r# j	                  d      j	                  d      k(  n" j	                  d      j	                  d      k(   fd       y )Nr}  r   c                       drdnd d j                  d       d j                  d       dj                  d       dj                  d       d	S )
Nz2: Incompatible shapes of A and B for the equation zAX = BzXA = Bz (r}  r<   r   r   rc   r   )r  r  r{  r   s   r,   rN   z#checkInputsSolver.<locals>.<lambda>  s[    hHxX.AaffRj\qvvbzl!AFF2J<qJ r.   )r   r  r?   rP   r   )r  r  r   r{  s   ````r,   checkInputsSolverr    s[     a !V	LL$(r
affRj affRjAFF2J.F	
r.   r!  fn_nameresult_namec                 r     t        j                  j                  j                  k(   fd       y )Nc            	      L      d d dj                    dj                    	S )Nz: Expected z5 and input tensors to be on the same device, but got z on z and input on rd  )r  r   r!  r  s   r,   rN   z!checkSameDevice.<locals>.<lambda>  s5    i{;-/dm4nU\\NL r.   )r?   rP   rl   )r  r!  r   r  s   ````r,   checkSameDevicer    s&     
LL%	
r.   UPLOc                       j                         }t        j                  t               dk(  xr |dk(  xs |dk(   fd       y )Nr   ULc                      d  S )Nz1Expected UPLO argument to be 'L' or 'U', but got r2   )r  s   r,   rN   zcheckUplo.<locals>.<lambda>  s    CD6J r.   )upperr?   rP   r   )r  UPLO_uppercases   ` r,   	checkUplor    s<    ZZ\N	LLD	QKNc1J^s5JJr.   eigenvalueseigenvectorsr  	compute_vc                 T   t        | d       t        |       t        | j                        }|r/| j	                  |      }|j                  |t        |d             n| j	                  dg      }|j                          | j	                  |t        | j                              }||fS )Nzlinalg.eighF	row_majorr   ry   )
r   r  r   r   r   r  r   poprI   rG   )r  r  r  r   vecsvalss         r,   meta__linalg_eighr     s     a'dOME{{5! ;EU ST{{A3	IIK;;uOAGG$<;=D:r.   c                     t        | d       t        j                  | j                        r| j                  nt        j                  | j                        }| j                  | j                  d d |      S )Nzlinalg.eigvalsr   ry   r   r7   rr   rG   r   r   r   )r   complex_dtypes     r,   meta__linalg_eigvalsr    sc     e-. !!%++. 	..u{{; 
 ??5;;s+=?AAr.   c                 0   t        | d       t        j                  | j                        r| j                  nt        j                  | j                        }| j                  | j                  d d |      }| j                  | j                  |      }||fS )Nz
linalg.eigr   ry   r  )r   r  r   vectorss       r,   meta_linalg_eigr  #  s     e\* !!%++. 	..u{{; 
 __U[["-]_CFooekko?G7?r.   r   c                 v    | j                   j                  t        j                        j	                  dd      S )Nr   r}  r   )mTcloner?   r   	transpose)r   s    r,   cloneBatchedColumnMajorr  1  s*    66<<e&=&=<>HHRPPr.   r  c                     t        |       S r)   )r  )r   r  r  s      r,   _cholesky_solve_helperr  5  s     #4((r.   c                      t        j                   j                  dk\   fd       t        j                  j                  dk\  fd       t         d      \  }}t	        |||      S )Nr   c                  $    d j                    dS )Nz-b should have at least 2 dimensions, but has  dimensions insteadr   r   s   r,   rN   z cholesky_solve.<locals>.<lambda>@  s    ?		{J]^ r.   c                  $    d j                    dS )Nz-u should have at least 2 dimensions, but has r  r  r  s   r,   rN   z cholesky_solve.<locals>.<lambda>D  s    ?xGZ[ r.   cholesky_solve)r?   rP   r   !_linalg_broadcast_batch_dims_namer  )r   r  r  self_broadcastedA_broadcasteds   ``   r,   r  r  ;  sh     
LL		Q^ 
LL	![ 'Ha!'#m ""2M5IIr.   c                     | j                         dk(  r%t        j                  | t        j                        S t	        | d       t        |       S )Nr   r   cholesky)r   r?   r   legacy_contiguous_formatr   r  r   r  s     r,   r  r  L  s@     zz|qE4R4RSSdJ'"4((r.   c                 0    t        | d       t        |       S )Ncholesky_inverse)r   r  r  s     r,   r  r  U  s     d./"4((r.   check_errorsc                    t        | d       t        | d       | j                  }t        |      }t	        |d      }| j                  |      }|j                  ||       | j                  |d|dz
   t        j                        }||fS )Nzlinalg.choleskyFr   r   ry   )	r   r   r   r   r   r   r  r?   r  )r  r  r  A_shaper   	L_stridesr  infoss           r,   linalg_cholesky_exr  ]  s    a*+1/0ggGw<D ,GU;I	GAMM'9% KKD1H-U[[KAEe8Or.   tauc                 @    t        j                   j                  dk\  d        t        j                   j                  d       j                  d      k\  d        t        j                   j                  d      j                  d      k\  d        t        j                   j                  j                  z
  dk(   fd        j                  dkD  r: j                  d d }j                  d d t        j                  |k(  fd	       t        j                  j
                   j
                  k(   fd
       t        d d       t        j                   j                  t         j                  d       j
                   j                        S )Nr   c                       y)NzHtorch.linalg.householder_product: input must have at least 2 dimensions.r2   r2   r.   r,   rN   z,linalg_householder_product.<locals>.<lambda>v  rV   r.   r}  r   c                       y)Nzbtorch.linalg.householder_product: input.shape[-2] must be greater than or equal to input.shape[-1]r2   r2   r.   r,   rN   z,linalg_householder_product.<locals>.<lambda>z  rV   r.   c                       y)Nz`torch.linalg.householder_product: input.shape[-1] must be greater than or equal to tau.shape[-1]r2   r2   r.   r,   rN   z,linalg_householder_product.<locals>.<lambda>~  rV   r.   r   c                  <    dj                    d j                    S )Nzptorch.linalg.householder_product: Expected tau to have one dimension less than input, but got tau.ndim equal to  and input.ndim is equal to r  r   r  s   r,   rN   z,linalg_householder_product.<locals>.<lambda>  '    )),
2Nuzzl\ r.   c                      d  S )Nzltorch.linalg.householder_product: Expected batch dimensions of tau to be equal to input.shape[:-2], but got r2   actual_batch_tau_shapes   r,   rN   z,linalg_householder_product.<locals>.<lambda>      66L5MO r.   c                  <    dj                    d j                    S )Nz,torch.linalg.householder_product: tau dtype z does not match input dtype ry   r  s   r,   rN   z,linalg_householder_product.<locals>.<lambda>  s#    :399+*5;;-9 r.   z torch.linalg.householder_productr  Fr  r   r   rG   rl   )
r?   rP   r   r   r   rG   r  empty_stridedr   rl   )r   r  expected_batch_tau_shaper  s   `` @r,   linalg_householder_productr  o  sK   
 
LL

aZ 
LL

2%**R.(t 
LL

2#((2,&r
 
LL

SXX"	
 zzA~#(;;s#3 !$3B"&>>	
 
LL		U[[ 	
 6UEJ[[*5;;%Hkk||	 r.   c                 2   t        | d       t        | dd       | j                  | j                        }|j	                  | j                  t        | j                  d             | j                  | j                  d d t        j                        }||fS )Nzlinalg.inv_exF)r  r  r}  ry   r   r   r   r   r  r   r?   r  )r  r  r  r  s       r,   linalg_inv_ex_metar    sq    a)1o%P	AGGAMM!''6qww%PQKKEKKK8Ee8Or.   LDpivotsinfo)	hermitianr  r  c                   t        | d       t        | d       t        j                  | j                  t        | j                  d      | j                  | j                        }| j                  | j                  d d t        j                        }| j                  | j                  d d t        j                        }|||fS )Nztorch.linalg.ldl_factor_exFr  r  r   ry   r}  )
r   r   r?   r  r   r   rG   rl   r   int)r   r  r  r  r  r  s         r,   linalg_ldl_factor_ex_metar    s     d894!=>			ZZ*4::Gjj{{	
B ^^DJJsO599^=F>>$**Sb/>;Dvtr.   )r  c                d    t         d       t         d       t         d       t        j                  j
                  dk\  fd        j                  d d }t        j                  |j                  k(  fd       t        j                  t        j                  j                        fd       t        j                   j                  j                  k(   fd       t               \  }}t        j                  |t        |d	      j                  j                  
      S )Nztorch.linalg.ldl_solver   c                  $    d j                    dS )NzMtorch.linalg.ldl_solve: Expected B to have at least 2 dimensions, but it has r  r  )r  s   r,   rN   z'linalg_ldl_solve_meta.<locals>.<lambda>      &&!46 r.   r   c                  $    d j                    dS )Nzjtorch.linalg.ldl_solve: Expected LD.shape[:-1] and pivots.shape to be the same, but got pivots with shape  insteadr   r  s   r,   rN   z'linalg_ldl_solve_meta.<locals>.<lambda>      ))/h@ r.   c                  "    d j                    S )Nz<torch.linalg.ldl_solve: Expected pivots to be integers. Got ry   r  s   r,   rN   z'linalg_ldl_solve_meta.<locals>.<lambda>  s    Nv||n] r.   c                  <    dj                    d j                    S )Nz!torch.linalg.ldl_solve: LD dtype z does not match b dtype ry   )r  r  s   r,   rN   z'linalg_ldl_solve_meta.<locals>.<lambda>  s"    3BHH:=UVWV]V]U^_ r.   Fr  r  )r   r   r  r?   rP   r   r   r7   is_integer_dtyperG   _linalg_broadcast_batch_dimsr  r   rl   )r  r  r  r  expected_pivots_shapeB_broadcast_sizer:   s   ```    r,   linalg_ldl_solve_metar    s    
 b232781b":;	LL	!	
 HHSbM	LL-	
 
LLv||,] 
LL
AGG_ 7q"=a*+;uMggxx	 r.   Pr  )pivotr  c                h    t        j                   j                  dk\   fd       t         j                        }|d   }|d   }t        ||      }||d<   |r j                  |      }n j                  dg      }||d<    j                  |      }||d<   ||d<    j                  |      }|||fS )Nr   c                  $    d j                    dS )Nz@linalg.lu: Expected tensor with 2 or more dimensions. Got size: r  r  r  s   r,   rN   z linalg_lu_meta.<locals>.<lambda>  s    RSTSZSZR[[cd r.   r}  r   r   )r?   rP   r   r   r   rj  r   )	r  r  sizesr  r   r  r  r  r  s	   `        r,   linalg_lu_metar    s     
LL	!d
 MEb	Ab	AAq	AE"IKKKKE"I	EAE"IE"I	EAa7Nr.   LU)r  r  c                    t        j                   j                  dk\   fd       t         j                        }|d   }|d   }t        j
                  |t        |d       j                   j                        }|j                          t        ||      |d<    j                  |t         j                        }|j                           j                  |t         j                        }|||fS )	Nr   c                  $    d j                    dS )NzFtorch.lu_factor: Expected tensor with 2 or more dimensions. Got size: r  r  r  s   r,   rN   z*linalg_lu_factor_ex_meta.<locals>.<lambda>  s    XYZY`Y`Xaaij r.   r}  r   Fr  r  ry   )r?   rP   r   r   r   r  r   rG   rl   r  rj  r   r  )	r  r  r  r  r  r   r  r  r  s	   `        r,   linalg_lu_factor_ex_metar  
  s    
 
LL	!j
 MEb	Ab	A			*5EBggxx	
B 
IIKAq	E"I[[eii[0F 
IIK;;uEII;.Dvtr.   )r   adjointr  c                    t         d       t        j                   j                  j                  k(   fd       t        j                  j                  t        j                  k(  d        t         d       t         |d       t        j                   j                  d      j                  d      k(  d        t        j                   j                  d d j                  k(  fd       t               \  }}t        j                  |t        ||       j                  j                  	      }|j                         d
k7  r"|s |j                         r|j                         }|S )Nztorch.linalg.lu_solvec                  >    dj                    d j                    dS )NzPlinalg.lu_solve: Expected LU and B to have the same dtype, but found LU of type  and B of type r  ry   )r  r  s   r,   rN   z&linalg_lu_solve_meta.<locals>.<lambda>9  s(    $$&HH:_QWWIXO r.   c                       y)NzElinalg.lu_solve: pivots should be a Tensor of scalar type torch.int32r2   r2   r.   r,   rN   z&linalg_lu_solve_meta.<locals>.<lambda>@  rV   r.   zlinalg.lu_solver   c                       y)NzYlinalg.lu_solve: Number of pivots per batch should be same as the dimension of the matrixr2   r2   r.   r,   rN   z&linalg_lu_solve_meta.<locals>.<lambda>H  rV   r.   c                  $    d j                    dS )Nzclinalg.lu_solve: Expected LU.shape[:-1] and pivots.shape to be the same, but got pivots with shape r  r  r  s   r,   rN   z&linalg_lu_solve_meta.<locals>.<lambda>N  r  r.   r  r  r   )r   r?   rP   rG   r  r   r  r   r   r  r  r   rl   r   r   conj)r  r  r  r   r  r  r:   r!  s   ```     r,   linalg_lu_solve_metar  +  s.    267	LL
AGG	
 
LL		!W b12b!T#45	LL
v{{2&k 
LL
"%	
 7q"=a  *+;4xPggxx	F ||~4[[]FMr.   unpack_dataunpack_pivotsc                     t        j                   j                  dk\   fd       |r2t        j                  |j                  t         j                  k(  d        t         j                        }|d   }|d   }t        ||      }||d<   |r j                  |      }n j                  dg      }|r2||d<    j                  |      }	||d<   ||d<    j                  |      }
n$ j                  dg      }	 j                  dg      }
||	|
fS )Nr   c                  $    d j                    dS )NzFtorch.lu_unpack: Expected tensor with 2 or more dimensions. Got size: r  r  )r  s   r,   rN   z lu_unpack_meta.<locals>.<lambda>n  s    XY[YaYaXbbjk r.   c                       	 y)Nztorch.lu_unpack: LU_pivots is expected to be a contiguous tensor of torch.int32 dtype.
Note: this function is intended to be used with the output produced by torch.linalg.lu_factorr2   r2   r.   r,   rN   z lu_unpack_meta.<locals>.<lambda>s  s    p r.   r}  r   r   )	r?   rP   r   rG   r  r   r   rj  r   )r  r  r  r  r  r  r   r  r  r  r  s   `          r,   lu_unpack_metar  d  s     
LL
1k LLEKK'	
 NEb	Ab	AAq	AE"ILLLL!b	LLb	b	LLLL!LL!a7Nr.   modec                       dk(  rd}d}||fS  dk(  rd}d}||fS  dk(  rd}d}||fS t        j                  d fd       fS )NreducedTcompleteFrc                      d  dS )Nzqr received unrecognized mode 'z=' but expected one of 'reduced' (default), 'r', or 'complete'r2   )r  s   r,   rN   z _parse_qr_mode.<locals>.<lambda>  s    1$ 8N O r.   r?   rP   )r  	compute_qr  s   `  r,   _parse_qr_moder    s    y	 g 
		 g 
	 g 		
 gr.   QRc                    t        | d       t        | d       t        |      \  }}| j                  d   }| j                  d   }t	        ||      }|rMt        | j                        }|r|n||d<   | j                  |      }|j                  |t        |d             n| j                  dg      }t        | j                        }	|s|s|n||	d<   | j                  |	      }
|
j                  |	t        |	d             ||
fS )Nz	linalg.qrr}  r   Fr  r   )	r  r   r  r   rj  r   r   r  r   )r  r  r  reduced_moder  r   r  Q_shaper   R_shaper!  s              r,   linalg_qr_metar&    s     ![!1k*,T2I|	A	AAq	Aqww-'aQKK 	g:7eTUKK 177mG#9!!GBK	GAMM'6w%PQa4Kr.   sign	logabsdetc                    t        | d       t        | dd       | j                  }| j                  |d d       }| j                  |d d t	        | j
                              }t        j                  |t        |d      | j
                  | j                        }| j                  |d d t        j                        }||||fS )Nzlinalg.slogdetFr}  ry   r  r   )r   r   r   r   rI   rG   r?   r  r   rl   r  )r  r   r'  r(  r  r  s         r,   _linalg_slogdetr*    s     a)*1.6GGE;;uSbz"DE#2Joagg.FGI			*5%8ggxx	
B [[s5;;[7FB&&r.   full_matrices
compute_uvdriverc                 b   t        | d       t        | d       t        | j                  d d       }| j                  d   }| j                  d   }t	        ||      }|r|||r|n|gz   }| j                  |      }	|	j                  |t        |d             ||r|n||gz   }
| j                  |
      }t        |       dk(  }|j                  |
t        |
|             n$| j                  dg      }	| j                  dg      }| j                  ||gz   t        | j                              }|	||fS )	Nz
linalg.svdr}  r   Fr  cudar   ry   )r  r   r   r   rj  r   r  r   device_hintrI   rG   )r  r+  r,  r-  r   r  r   r  U_shaper  V_shapeVis_cudaSs                 r,   _linalg_svd_metar6    s#    !\"1l+aggcrl#J	A	AAq	A11==KK 	g:7eTU]1==KK 
 a.F*	g:7gVW KKKK 	
J!$OAGG,DEAa7Nr.   arg1arg2c                    | j                   d d }|j                   d d }t        ||      }t        |      }|| j                  d      | j                  d      gz  }t        |      }||j                  d      |j                  d      gz  }||fS )Nr}  r   )r   r    r   r   )r7  r8  arg1_batch_sizesarg2_batch_sizesexpand_batch_portionarg1_expand_sizearg2_expand_sizes          r,   r  r    s     zz#2zz#2,-=?OP012		"66012		"66---r.   c                     |rt        | ||       t        | |      \  }}|| j                  k(  r| n| j                  |      }||j                  k(  r|n|j                  |      }||fS r)   )r  r  r   expand)r7  r8  r  r=  r>  arg1_broadcastedarg2_broadcasteds          r,   r  r    sv     tT40)EdD)Q&& !DJJ.DKK@P4Q  !DJJ.DKK@P4Q  ---r.   r   c                     | j                   d d }|j                  dk(  xs- | j                  dz
  |j                  k(  xr |j                   |k(  }|S )Nr   r   )r   r   )r   r   expected_batched_rhs_shapevector_cases       r,   linalg_solve_is_vector_rhsrF    sS    !&Sb!1**/ 

Q%**$R8R)R  r.   )r   r  r!  r  r  r  c                    t         d       t        j                   j                  j                  k(   fd       t	               }|rj                  d      n}	t         |	|d       t        |	       \  }
}t        j                  |xs | d        |r|
d d n|
}t        j                  |t        ||       j                  j                        } j                  } j                  }t        j                  |t        |d       j                   j                        } j                  |d d t        j                        } j                  |d d t        j                        }||||f}||||f}t        d	 |D              rbt!        ||      D ]S  \  }}t#        ||j                         |j%                  |j                  |j'                                t)        ||d
       U |S )Nzlinalg.solvec                  >    d j                    dj                    dS )NzKlinalg.solve: Expected A and B to have the same dtype, but found A of type r  r  ry   )r  r  s   r,   rN   z"_linalg_solve_ex.<locals>.<lambda>5  s%    Ywwiqwwix9 r.   r   c                       	 y)Nzlinalg.solve: Vector broadcasting of the left hand side is not supported for left=False. In this case linalg.solve is equivalent to B / A.squeeze(-1)r2   r2   r.   r,   rN   z"_linalg_solve_ex.<locals>.<lambda>@  s    K r.   r  Fry   r}  c              3   $   K   | ]  }|d u 
 y wr)   r2   )r[   r<   s     r,   r]   z#_linalg_solve_ex.<locals>.<genexpr>X  s     
&Q1D=
&s   )	copy_fromcopy_toexact_dtype)r   r?   rP   rG   rF  	unsqueezer  r  r  r   rl   r   r   r   r  allzipr   r  r   r   )r  r  r   r  r!  r  r  r  rE  B_B_broad_shaper:   result_shaperesult_r   r   LU_pivots_info_r   resr  os   ``                     r,   _linalg_solve_exrZ  &  s    1n-	LL	177	
 -Q2K'RQBaT>23B:M1	LLK	
 *5="%-L!!*<TBggxx	G GGE66D


*5%8ggxx	C kk%*EKKk8GKKcr
%++K6E2vt
$CC%
(C

&#
&&SM 	FDAqa)MM!''188:.QuE	F Jr.   )r   unitriangularr   r[  r   c                   || j                  dg      }t        |t              sJ t        | ||d       t	        || d       \  }}|j                  dd      j                         xr |j                         }|rt        ||j                        }|S t        ||j                        r=|j                  |j                  dd      j                         |j                  dd       |S )Nr   zlinalg.solve_triangularr}  r   )r   rY   r   r  r  r  is_contiguousis_conjr   r   r   resize_
transpose_)	r  r  r  r   r[  r   rQ  A_avoid_copy_As	            r,   linalg_solve_triangular_metarc  b  s     {kk1#c:&&&aD";<.q!T:FB<<B'557HBJJLLRXX. J  RXX.KKR,223NN2r"Jr.   solutioncloned_coefficientr  c                     t        j                   j                  dk\   fd       t        j                  j                  dk\  fd       t         d       j                  t         j
                  k(  rt               \  }}t        j                  |t        |d       j                   j                        }t        j                  |t        |d      j                  j                        }||fS j                  t         j                  k(  sj                  t         j                  k(  r+t        j                         } j                  dg      }||fS t        j                  dd	        fS )
Nr   c                  $    d j                    dS )NzMtorch.triangular_solve: Expected b to have at least 2 dimensions, but it has r  r  r   s   r,   rN   z'triangular_solve_meta.<locals>.<lambda>  s    ))$79 r.   c                  $    d j                    dS )NzMtorch.triangular_solve: Expected A to have at least 2 dimensions, but it has r  r  r  s   r,   rN   z'triangular_solve_meta.<locals>.<lambda>  r  r.   triangular_solveFr  r  r   c                       y)Nz+triangular_solve: Got an unexpected layout.r2   r2   r.   r,   rN   z'triangular_solve_meta.<locals>.<lambda>  rV   r.   )r?   rP   r   r  rk   stridedr  r  r   rG   rl   
sparse_csr
sparse_bsrr   r   )	r   r  r  r  r[  self_broadcast_sizeA_broadcast_sizerd  re  s	   ``       r,   triangular_solve_metarp  |  sL    
LL		Q	
 
LL	!	
 4$67xx5== 0LTST0U--&&$./BeT**;;	
 #00!./?5Q''88	
 ''' 
U%%	%U5E5E)E##D)!^^QC0 ''' 	UQR'''r.   c                 l   t        | d       t        | d       | j                  | j                  d d       }| j                  | j                        }|j	                  | j                  t        | j                  d             | j                  | j                  d d t        j                        }|||fS )Nz
linalg.detr}  Fr  r   ry   r  )r  detr  r  s       r,   _linalg_det_metars    s    a&1l+
++aggcrl
#C	
QWW	BNN17775QR[["U[[[9FF?r.   c                 0    t        j                   j                  dk\  d        t        j                  j                  dk\  d        |rdndt        j                  j                     j                  d   k\  fd       t        j                  j                      j                  d   k(  fd       t        j                  j                  d    j                  d   k  d        t        j                   j                  j                  z
  d	k(   fd
       t        j                   j                  j                  k(   fd        j                  dkD  re j                  d d }j                  d d t        j                  |k(  fd       j                  d d t        j                  |k(  fd       t        j                  j                   j                  k(   fd       t        j                  j                   j                  k(   fd       t        d d       t        d d       t        j                  j                  t        j                  d      j                  j                        S )Nr   c                       y)Nz3torch.ormqr: input must have at least 2 dimensions.r2   r2   r.   r,   rN   zormqr.<locals>.<lambda>  rV   r.   c                       y)Nz3torch.ormqr: other must have at least 2 dimensions.r2   r2   r.   r,   rN   zormqr.<locals>.<lambda>  rV   r.   r}  r   c                      d  dS )Ntorch.ormqr: other.shape[z0] must be greater than or equal to tau.shape[-1]r2   left_size_conditions   r,   rN   zormqr.<locals>.<lambda>  s    +,?+@@pq r.   c                      d  dS )Nrx  z"] must be equal to input.shape[-2]r2   ry  s   r,   rN   zormqr.<locals>.<lambda>  s    +,?+@@bc r.   c                       y)NzHtorch.ormqr: tau.shape[-1] must be less than or equal to input.shape[-1]r2   r2   r.   r,   rN   zormqr.<locals>.<lambda>  rV   r.   r   c                  <    dj                    d j                    S )Nz[torch.ormqr: Expected tau to have one dimension less than input, but got tau.ndim equal to r  r  r  s   r,   rN   zormqr.<locals>.<lambda>  r  r.   c                  <    dj                    d j                    S )Nzhtorch.ormqr: Expected other to have the same number of dimensions as input, but got other.ndim equal to r  r  r   r   s   r,   rN   zormqr.<locals>.<lambda>  s+    ++0::,6RSXS]S]R^` r.   c                      d  S )NzWtorch.ormqr: Expected batch dimensions of tau to be equal to input.shape[:-2], but got r2   r  s   r,   rN   zormqr.<locals>.<lambda>  r  r.   c                      d  S )NzYtorch.ormqr: Expected batch dimensions of other to be equal to input.shape[:-2], but got r2   )actual_batch_other_shapes   r,   rN   zormqr.<locals>.<lambda>  s    66N5OQ r.   c                  <    d j                    dj                    S )NzPtorch.ormqr: Expected input and tau to have the same dtype, but input has dtype z and tau has dtype ry   r  s   r,   rN   zormqr.<locals>.<lambda>  s'    ##(;;-/B399+O r.   c                  <    d j                    dj                    S )NzRtorch.ormqr: Expected input and other to have the same dtype, but input has dtype z and other has dtype ry   r  s   r,   rN   zormqr.<locals>.<lambda>  s'    ##(;;-/DU[[MS r.   ztorch.ormqrr  r   Fr  r  )	r?   rP   r   r   rG   r  r  r   rl   )	r   r  r   r   r  expected_batch_shaper  r  rz  s	   ```   @@@r,   ormqrr    s    
LL

aV 
LL

aV !%""	LL'(CIIbM9q 
LL'(EKKO;c
 
LL		"R(Z
 
LL

SXX"	
 
LL

ejj 	
 zzA~${{3B/!$3B"&::	
 $);;s#3 $(<<	
 
LL		U[[ 	
 
LLu{{"	
 M3u5M5%9[[*5;;%Hkk||	 r.   c                t    t        j                  t              dz  k(  fd        j                  }|dz   k(  }|}| }|r*t	        d|      D ]  }|xr  j                  |      dk7  } n)t	        d|      D ]  }|xr  j                  |      dk7  } t        j                  |xs | fd       y )Nr   c                  ,    dd z   dt               S )Nzpadding size is expected to be r   z, but got: r   )ro   paddings   r,   rN   z,_padding_check_valid_input.<locals>.<lambda>  s    1!c'+c'l^T r.   r   r   c                  :    d dz    d dz    dj                    S )Nz	Expected r   zD or r   zcD (batch mode) tensor with possibly 0 batch size and other non-zero dimensions for input, but got: r  )ro   r   s   r,   rN   z,_padding_check_valid_input.<locals>.<lambda>/  s2    aycAgY /AAFO r.   )r?   rP   r   r   r   r   )r   r  ro   	input_dimis_batch_modevalid_batch_modevalid_non_batch_moder   s   ```     r,   _padding_check_valid_inputr    s    	LLGCT
 

I#'*M$,,q)$ 	GA/FEJJqMQ4F	G q)$ 	OA#7#NEJJqMQ<N 	O 
LL00	
r.   c                   	
 d}dd} j                   dk(  r j                  d      }dz  |dz  }t         |d       |\  	
 j                  |      } j                        	z   
z   |r&t        j                  	k  xr 
k   	
fd       t        j                  dk\  fd        j                   dk(  r j                  |f      S  j                  ||f      S )Nr   r   r   r   c                  4    d d d  dj                    S NzcArgument #4: Padding size should be less than the corresponding input dimension, but got: padding (rb   ) at dimension 
 of input r  dim_wr   pad_lpad_rs   r,   rN   z_pad1d_common.<locals>.<lambda>K  2    %%*G2eWOE7*UZU`U`Tac r.   c                      d  d S )Nz
input (W: z%) is too small. Calculated output W: r2   )input_woutput_ws   r,   rN   z_pad1d_common.<locals>.<lambda>S  s    *WI%J8*U r.   r   )r   r   r  r?   rP   r   )r   r  is_reflection	dim_planenbatchnplaner  r  r  r  r  s   `     @@@@@r,   _pad1d_commonr  6  s    IEFzzQA
Q	ug15LE5ZZ	"FjjG&HGO/	
 
LLAU
 zzQ1229::r.   c                     t        | |d      S NTr  r  r   r  s     r,   meta_reflection_pad1dr  \       t<<r.   c                     t        | |d      S NFr  r  r  s     r,   meta_replication_pad1dr  b       u==r.   c                    d|s#t        j                  t        |      dk(  d        j                  dk(  rdz  |\  j	                        }|z   z   |r&t        j                  |k  xr |k  fd       t        j                   j	                        k(   fd       j                  j                        S )Nr   r   c                       y)Nz padding size is expected to be 2r2   r2   r.   r,   rN   z(_pad1d_backward_common.<locals>.<lambda>k  rV   r.   r   c                  4    d d d  dj                    S r  r  r  s   r,   rN   z(_pad1d_backward_common.<locals>.<lambda>x  r  r.   c                  2    d dj                          S Nz(grad_output width unexpected. Expected: , Got: r   r  grad_outputr  s   r,   rN   z(_pad1d_backward_common.<locals>.<lambda>  "    :8*GKL\L\]bLcKde r.   r?   rP   r   r   r   r   r   )	r  r   r  r  r  r  r  r  r  s	   ``   @@@@r,   _pad1d_backward_commonr  h  s    ES\Q&(RSzzQ
LE5jjG&HGO/	
 
LLK$$U++e
 ??5;;''r.   
grad_inputc                      t        | ||d      S r  r  r  r   r  s      r,   meta_reflection_pad1d_backwardr    s     "+ugTRRr.   c                      t        | ||d      S r  r  r  s      r,   meta_replication_pad1d_backwardr    s     "+ugUSSr.   c                   	
 ddd}d}t         |d        j                  }|dk(  r  j                  d      }dz  dz  |dz  }|\   j                  |      } j                        	 j                        
	z   z   
z   z   |rLt        j                  
k  xr 
k   fd       t        j                  	k  xr 	k   fd       t        j                  dk\  xs dk\  	
fd        j                  d	k(  r j                  |f      S  j                  ||f      S )
Nr   r   r   r      c                  4    d d d  dj                    S r  r  r  s   r,   rN   z_pad2d_common.<locals>.<lambda>  r  r.   c                  4    d d d  dj                    S NzcArgument #6: Padding size should be less than the corresponding input dimension, but got: padding (rb   r  r  r  dim_hr   pad_bpad_ts   r,   rN   z_pad2d_common.<locals>.<lambda>  r  r.   c                       d  d d d S )Nz
input (H:  W: z%) is too small. Calculated output H: r2   )input_hr  output_hr  s   r,   rN   z_pad2d_common.<locals>.<lambda>  s*    	gY /$$,:T(= r.   r   r  r   r   r?   rP   r   )r   r  r  
dim_slicesr  r   r  r  r  r  r  r  r  r  r  r  r  s   `      @@@@@@@@@@r,   _pad2d_commonr    sU   EEJFug15::DqyA

a
!(E5%ZZ
#FjjGjjG&H&HGO/	
 	GO/	
 
LLA&Q	
 zzQ(;<<(CDDr.   c                     t        | |d      S r  r  r  s     r,   meta_reflection_pad2dr    r  r.   c                     t        | |d      S r  r  r  s     r,   meta_replication_pad2dr    r  r.   c                     ddd}d}|j                   }|j                         dk(  r|d   }dz  dz  |dz  }|\  }}}}	||   }
|   }|   }||z   |	z   ||z   |z   t        j                   j	                        k(   fd       t        j                   j	                        k(   fd       |j                  |j                         S )Nr   r   r   r  c                  2    d dj                          S r  r   r  s   r,   rN   z%meta_pad2d_backward.<locals>.<lambda>  r  r.   c                  2    d dj                          S Nz)grad_output height unexpected. Expected: r  r   r  r  r  s   r,   rN   z%meta_pad2d_backward.<locals>.<lambda>  "    ;H:W[M]M]^cMdLef r.   )r   ro   r?   rP   r   r   )r  r   r  r  r  rM   r  r  r  r  r  r  r  r  r  r  r  s   `            @@@@r,   meta_pad2d_backwardr    s     EEIFJxxzQA

Q	!(E5%	"FGG&H&H	LLK$$U++e 
LLK$$U++f >>$**%%r.   c          	      $   	
 d	ddd}t         |d        j                  dk(  }|r% j                  d      }	dz  	dz  dz  |dz  }|\   j                  |      } j                        
 j                         j                  	      
z   z   z   z   z   z   |rrt        j                  k  xr k  	 fd       t        j                  k  xr k   fd       t        j                  
k  xr 
k   fd	       t        j                  dk\  xs dk\  xs dk\  
fd
       |r j                  |f      S  j                  |f      S )Nr   r   r   r   r      c                  4    d d d  dj                    S r  r  r  s   r,   rN   z_pad3d_common.<locals>.<lambda>  r  r.   c                  4    d d d  dj                    S r  r  r  s   r,   rN   z_pad3d_common.<locals>.<lambda>   r  r.   c                  4    d d d  dj                    S )NzcArgument #8: Padding size should be less than the corresponding input dimension, but got: padding (rb   r  r  r  )dim_dr   pad_bkpad_fs   r,   rN   z_pad3d_common.<locals>.<lambda>'  s2    %%*G2fX_UG:V[VaVaUbd r.   c                  ,    d  d d d d d S )Nz
input (D:  H: r  z%) is too small. Calculated output D: r2   )input_dr  r  output_dr  r  s   r,   rN   z_pad3d_common.<locals>.<lambda>/  s7    	gYd7) <$$,:T(4zK r.   r  )r   r  r  r  
batch_moder  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  s   `      @@@@@@@@@@@@@@@r,   _pad3d_commonr    s   EEEIug15qJA


Q	07-E5%vZZ	"FjjGjjGjjG'H&H&HGO/	
 	GO/	
 	GO0 0	
 
LLA7Q7(a-	
 	
 (HMNN(HEFFr.   c                     t        | |d      S r  r  r  s     r,   meta_reflection_pad3dr  ;  r  r.   c                     t        | |d      S r  r  r  s     r,   meta_replication_pad3dr  A  r  r.   c                     t        j                  t        |      dk(  d        |j                  dkD  sJ  j                  |j                  k(  sJ ddd|j                  dk(  rdz  dz  dz  |\  }}}}}}|j	                        }	|j	                        }
|j	                        }|	|z   |z   |
|z   |z   ||z   |z   t        j                   j	                        k(   fd       t        j                   j	                        k(   fd       t        j                   j	                        k(   fd	       |j                  |j                        S )
N   c                       y)Nz padding size is expected to be 6r2   r2   r.   r,   rN   z%meta_pad3d_backward.<locals>.<lambda>Q  rV   r.   r   r   r   r  c                  2    d dj                          S r  r   r  s   r,   rN   z%meta_pad3d_backward.<locals>.<lambda>i  r  r.   c                  2    d dj                          S r  r   r  s   r,   rN   z%meta_pad3d_backward.<locals>.<lambda>m  r  r.   c                  2    d dj                          S )Nz(grad_output depth unexpected. Expected: r  r   )r  r  r  s   r,   rN   z%meta_pad3d_backward.<locals>.<lambda>q  r  r.   r  )r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  s   `           @@@@@@r,   meta_pad3d_backwardr  G  s_    
LLW"$NO::>>uzz)))EEEzzQ


07-E5%vjjGjjGjjG'H&H&H	LLK$$U++e 
LLK$$U++f 
LLK$$U++e
 ??5;;''r.   pc                 J   t        j                  | j                         d        | j                  d      }|dk  r0| j	                  dg      j                  t         j                        S | j	                  ||dz
  z  dz  f      j                  t         j                        S )Nc                       y)Nz(_pdist_forward requires contiguous inputr2   r2   r.   r,   rN   z%meta__pdist_forward.<locals>.<lambda>{  rV   r.   r   r   r   r   )r?   rP   r]  r   r   r   r  )r   r  r   s      r,   meta__pdist_forwardr  w  s     
LLP 			!AAv~~qc"%%E4R4R%SS~~qAE{a/125588 6 
 	
r.   gradpdistc                     t        j                  |j                         d        t        j                  |j                         d        t        j                  |t         j                        S )Nc                       y)Nz._pdist_backward requires self to be contiguousr2   r2   r.   r,   rN   z&meta__pdist_backward.<locals>.<lambda>  rV   r.   c                       y)Nz/_pdist_backward requires pdist to be contiguousr2   r2   r.   r,   rN   z&meta__pdist_backward.<locals>.<lambda>  rV   r.   r   )r?   rP   r]  r   r  )r  r   r  r  s       r,   meta__pdist_backwardr    sW     
LLV 
LLX D0N0NOOr.   r   )betar  c                   	
 j                  d      }j                  d      }j                  d      } j                  |||f       t        j                  j	                         dk(  d        t        j                  j	                         dk(  d        t        j                   j
                  j
                  cxk(  xr j
                  k(  nc  fd       j                  }j                  	|d   
|d   t        j                  	d   
k(  xr 	d   k(  	
fd        j                   j                               S )	Nr   r   r   r   c                       yNzbatch1 must be a 3D tensorr2   r2   r.   r,   rN   zmeta_baddbmm.<locals>.<lambda>  rV   r.   c                       yNzbatch2 must be a 3D tensorr2   r2   r.   r,   rN   zmeta_baddbmm.<locals>.<lambda>  rV   r.   c                  V    dj                    d j                    dj                    S )Nz+Input dtypes must be the same, got: input: z
, batch1: z
, batch2: ry   )batch1batch2r   s   r,   rN   zmeta_baddbmm.<locals>.<lambda>  s0    =djj\TZT`T`Saaklrlxlxkyz r.   c            	      .    d d d d    d d    d	S Nz@Expected size for first two dimensions of batch2 tensor to be: [rb   z] but got: [r   r   ].r2   batch2_sizesbscontraction_sizes   r,   rN   zmeta_baddbmm.<locals>.<lambda>  s:    t2&'|LO3DB|TUFWWY[ r.   )r   r@  r?   rP   ro   rG   r   r   )r   r  r  r   r  dim1dim2dim3batch1_sizesr  r  r  s   ```      @@@r,   meta_baddbmmr    s    ;;q>D;;q>D;;q>D;;dD)*D	LL"$HI	LL"$HI	LL

fll2fll2z <<L<<L	aB#A	LLQ2E,q/5E"E	
 >>$))+&&r.   c                H    t        j                  |       j                         S r)   r?   r   r   )r   r   s     r,   meta_bernoullir    s     D!,,..r.   c                     | S r)   r2   r   r  r   s      r,   meta_bernoulli_r        Kr.   c                 H    t        j                  |       j                         S r)   r  r  s      r,   meta_bernoulli_pr    s     D!,,..r.   c                     t        j                  |
| j                         k  d        t        j                  | t         j                        }t        j                  |       |fS )Nc                       y)NzJError in fused_moving_avg_obs_fake_quant_cpu: ch_axis must be < self.dim()r2   r2   r.   r,   rN   z6meta__fused_moving_avg_obs_fq_helper.<locals>.<lambda>  rV   r.   ry   )r?   rP   ro   r   bool)r   observer_onfake_quant_onrunning_minrunning_maxscale
zero_pointaveraging_const	quant_min	quant_maxch_axisper_row_fake_quantsymmetric_quantmasks                 r,   $meta__fused_moving_avg_obs_fq_helperr.    sO      
LL$((*\ D

3DT"D))r.   c                 H   t        j                  | j                         dk(  d        t        j                  |j                         dk(  d        | j                  \  |j                  \  t        j                  k(  fd       | j	                        S )Nr   c                       y)Nza must be 2Dr2   r2   r.   r,   rN   zmeta_mm.<locals>.<lambda>  rV   r.   c                       y)Nzb must be 2Dr2   r2   r.   r,   rN   zmeta_mm.<locals>.<lambda>  rV   r.   c            	      "    d d  d d d	S )Nz/a and b must have same reduction dim, but got [rb   z] X [r  r2   )M1M2Nr  s   r,   rN   zmeta_mm.<locals>.<lambda>  s(    A!Brd%PRtSUVWUXXZ[ r.   )r?   rP   ro   r   r   )abr3  r4  r5  r  s     @@@@r,   meta_mmr8    sz     
LLA56	LLA56GGEArGGEB	LL
b[ ;;q!r.   c                      |r(t         fdt         j                        D              S t        j                   j
                        S )Nc              3   H   K   | ]  }|vrj                   |   nd   yw)r   Nr  )r[   r   dimsr   s     r,   r]   z+_compute_reduction_shape.<locals>.<genexpr>  s$     UqatmTZZ]:Us   ")rO   r   r   r7   compute_reduction_output_shaper   )r   r;  rH  s   `` r,   rF  rF    s7    UE$))DTUUU//

DAAr.   c                 x    t        | t        j                  j                        r| j                  j
                  S y)Nr/  )rY   r?   _subclasses
FakeTensorfake_devicerd   )r   s    r,   r0  r0    s-    &%++667!!&&&r.   input_tensorr   r  dilationis_transposedgroupsoutput_paddingc                    dt         dt         dt         dt         dt         dt         fd}dt         dt         dt         dt         dt         dt         dt         fd	}	|j                  d
d  }
| j                  d
d  }|r||j                  d   z  }n<|j                  d   }|j                  d   |z  | j                  d   k7  rt        d      | j                  d   |g}t        |t              r|gt        |      z  }n t        |      dk(  r|d   gt        |      z  }t        |t              r|gt        |      z  }n t        |      dk(  r|d   gt        |      z  }t        |t              r|gt        |      z  }n t        |      dk(  r|d   gt        |      z  }d }|rCt        |t              r|gt        |      z  }n#t        |      dk(  r|d   gt        |      z  }n|}t        t        |            D ]]  }|r/|j                   |	||   ||   ||   |
|   ||   ||                4|j                   |||   ||   ||   |
|   ||                _ |S )Nlnr  r   r  r`  r&  c                 6    | d|z  z   ||dz
  z  z
  dz
  |z  dz   S )a  
        Formula to apply to calculate the length of some dimension of the output

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

        Args:
            ln: length of the dimension
            p: padding in that dim
            d: dilation in that dim
            k: kernel size in that dim
            s: stride in that dim
        Returns:
            The output length
        r   r   r2   )rG  r  r   r  r`  s        r,   _formulaz+calc_conv_nd_return_shape.<locals>._formula  s.     QU
Q!a%[(1,2Q66r.   r*   c                 <    | dz
  |z  d|z  z
  ||dz
  z  z   |z   dz   S )a  
        Formula to apply to calculate the length of some dimension of the output
        if transposed convolution is used.
        See: https://pytorch.org/docs/stable/generated/torch.nn.ConvTranspose2d.html

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

        Returns:
            The output length
        r   r   r2   )rG  r  r   r  r`  r*   s         r,   _formula_transposedz6calc_conv_nd_return_shape.<locals>._formula_transposed  s2    " Q!|a!e#a1q5k1B6::r.   r   r   r   zInvalid channel dimensions)r  r   r   rY   r   r   r   r   )rA  r  r   r  rB  rC  rD  rE  rI  rK  kernel_sizer;  out_channels	ret_shapeoutput_padding_listr   s                   r,   calc_conv_nd_return_shaperP    s   7S 7S 7S 7S 7S 7S 7"; ; ; ; ; ; ;QT ;& ,,qr"Kab!DQ/||A<<?V#|'9'9!'<<;<<##A&5I&'"CI%	V	)s4y('7#)c$i'	W	1:,T*(G$:D	)	X!	QK=3t9,/3ng.#1"2SY"> A%#1!#4"5D	"A"03t9 #GAJQKN1I'*	 a'!*hqk;q>6RS9U$ r.   c                 b    t         j                  j                  |       t         j                  k(  S r)   r?   _prims_commonsuggest_memory_formatchannels_lasttens    r,   is_channels_lastrX  \  s$    44S9U=P=PPPr.   c	           
            fd}	t         ||||||r|nd       }
d}d} j                  |      dk(  rd|
|<    j                  |
      }|j                   |	             }|S )Nc                  d   t               dk(  r&t               st              r+t        j                  S t               rt        j                  S  j	                  t        j
                        rt        j
                  S  j	                  t        j                        rt        j                  S y Nr/  r   )r0  rX  r?   rU  r]  r   preserve_format)rA  r  s   r,   pick_memory_formatz%meta_conv.<locals>.pick_memory_formatl  s    |$.-1A&1I***-***%%E4K4K%L***''e6K6K'L((( Mr.   r   r   r   )rP  r   r   r   )rA  r  r	  r   r  rB  rC  rE  rD  r]  	shape_outinput_channels_dimoutput_channels_dimr   s   ``            r,   	meta_convra  `  s    
) *'T	I +,1)*	%&

 
 
+C
&&13&
4CJr.   mkldnnc
           
          t        | ||||d|g       }
| j                  |
      }t        j                  }|j	                  |      }|S )NFr   )rP  r   r?   rU  r   )rA  r  r	  r  r   rB  rD  attrscalars	algorithmr^  r   out_memory_formats                r,   meta_mkldnn_convolution_defaultrh    sS     .&&'8UFB
	 $$Y/!//ff#4f5
r.   c                 b    | j                  g | j                  d d |j                  d         S Nr   r   r   r   )rA  r  r	  rd  re  rf  s         r,   meta_linear_pointwise_defaultrl    s5     %%&Q(:(:3B(?&Qa&QRRr.   mklc                 b    | j                  g | j                  d d |j                  d         S rj  rk  )rA  packed_weightorig_weightr	  r   s        r,   meta_mkl_linearrq    s<      ))@,$$Sb)@;+<+<Q+?@ r.   onednnc           
          t        | ||||	d|
d       }|t        j                  t        j                  fv sJ | j	                  ||      }|j                  t        j                        }|S )NFry   r   )rP  r?   r  r  r   r   rU  )r<   x_scalex_zpww_scalew_zpr	  r   r  rB  rD  output_scaleoutput_zero_pointoutput_dtyperd  re  rf  r^  r   s                      r,   meta_qconv2d_pointwiser|    sp    ( .	
	 u~~>>>>kk)<k8ff5#6#6f7
r.   c                     t        | j                        }|j                  d   |d<   |	t        j                  t        j                  fv sJ | j                  ||	      }|S )Nr   r   ry   )r   r   r?   r  r  r   )r<   rt  ru  rv  rw  rx  r	  ry  rz  r{  post_op_namepost_op_argspost_op_algorithmr   r   s                  r,   meta_qlinear_pointwiser    sU    " AGG}771:Ru~~>>>>kk,lk;
r.   	quantizedr   c                 .   t        | |||||      \  }}}| j                         dk(  r| j                  d      nd}	t        j                  }
| j                         dk(  r|||g}n|	|||g}t        j
                  || j                  | j                  |
      S Nr  r   r   r8  )#max_pool2d_checks_and_compute_shapero   r   r?   rU  rt   rG   rl   r   rL  r   r  rB  	ceil_modenInputPlaneoutputHeightoutputWidthr  r   r   s               r,   meta_quantized_max_pool2dr  	  s     0;9
		
 $)99;!#3B++99;!{;DK{CD{{++<<'	
 	
r.   c                      t        j                   j                         k(  xr  j                     k(   fd       y )Nc                  j    d  d d ddj                          d dj                      z   S )NzExpected a tensor of dimension z and tensor.size[z] == rb   zbut got : dimension z] = ro   r   )ro   dim_sizer   r   s   r,   rN   z check_dim_size.<locals>.<lambda>#	  sP    1#6GzQVW[V\\^_ .?zfll[cNdMe
fg r.   )r?   rP   ro   r   )r   ro   r  r   s   ````r,   check_dim_sizer   	  s6    	LL

>X 6$ >	gr.   c                    d } |d|      \  }}	t        j                  t        |      dv d        t        |      dk(  r||	}}
n%t        |      dk(  r|d   |d   }}
n |d|      \  }
} |d|      \  }}t        j                  |d u xs |dk7  d	        | j                         d
k(  r| j	                  d      nd}| j	                  d      }| j	                  d      }| j	                  d      }t        ||||
d|      }t        ||	||d|      }t        j                  |       }t        | ||	|
|||dd||||||       | j                         dk(  r|||g}n||||g}t        j                  || j                  | j                  |      S )Nc                      t        j                  t        |      dv  fd       |d   }t        |      dk(  r|n|d   }||fS )Nr   r   c                      d  dS )Nzavg_pool2d: 4 must either be a single int, or a tuple of two intsr2   r  s   r,   rN   z1meta_avg_pool2d.<locals>.unpack.<locals>.<lambda>5	      l4&(\] r.   r   r   r?   rP   r   r  rY  HWs   `   r,   unpackzmeta_avg_pool2d.<locals>.unpack2	  G    H]	
 FSQACF!tr.   rL  r   r   r   c                       yNzOavg_pool2d: stride must either be omitted, a single int, or a tuple of two intsr2   r2   r.   r,   rN   z!meta_avg_pool2d.<locals>.<lambda>>	  rV   r.   r   r   r   r  c                       yNzdivisor must be not zeror2   r2   r.   r,   rN   z!meta_avg_pool2d.<locals>.<lambda>K	  rV   r.   r  r  r}  r   r   r8  )r?   rP   r   ro   r   pooling_output_shaper7   rT  pool2d_shape_checkrt   rG   rl   )r   rL  r   r  r  count_include_paddivisor_overrider  kHkWdHdWpadHpadWr  r  inputHeight
inputWidthr  r  r   r   s                         r,   meta_avg_pool2dr  (	  s    M;/FB	LLFy a 6{aRB	V	F1IB&)B	7+JD$	LLD 9$4$9*
  %yy{a/UZZ^QF**R.K**R.KBJ'Rr1iPL&z2tRINK//6M



		$ yy{a\;7\;?;;kk||#	 r.   c                     t        | ||||||dd|	|
||||       | j                         }|	}t        |||dz
  |       t        |||dz
  |       t        |||dz
  |       y )Nr   r   r   )r  ro   r  )r   
gradOutputr  r  r  r  r  r  r  r  r  r  r  r  
mem_formatr   nOutputPlanes                    r,   avg_pool2d_backward_shape_checkr  v	  s    " 



		$ 99;DL:tTAX|<:tTAX|<:tTAX{;r.   c                    t        j                  t        |      dk(  xs t        |      dk(  d        |d   }t        |      dk(  r|n|d   }	t        j                  t        |      dk(  xs t        |      dk(  xs t        |      dk(  d        t        |      dk(  r|n|d   }
t        |      dk(  r|	nt        |      dk(  r|
n|d   }t        j                  t        |      dk(  xs t        |      dk(  d        |d   }t        |      dk(  r|n|d   }t        j                  |d u xs |dk7  d        |j                  }|j	                         dk(  r|d	   nd}|d
   }|d   }|d   }t        ||||
d|      }t        ||	||d|      }t        j                  |      }t        || |||	|
|||||||||       t        j                  ||j                  |j                  |      S )Nr   r   c                       y)NzKavg_pool2d: kernel_size must either be a single int, or a tuple of two intsr2   r2   r.   r,   rN   z*meta_avg_pool2d_backward.<locals>.<lambda>	  rV   r.   r   c                       yr  r2   r2   r.   r,   rN   z*meta_avg_pool2d_backward.<locals>.<lambda>	  rV   r.   c                       y)NzGavg_pool2d: padding must either be a single int, or a tuple of two intsr2   r2   r.   r,   rN   z*meta_avg_pool2d_backward.<locals>.<lambda>	  rV   r.   c                       yr  r2   r2   r.   r,   rN   z*meta_avg_pool2d_backward.<locals>.<lambda>	  rV   r.   r  r  r  r}  r   r8  )r?   rP   r   r   ro   r  r7   rT  r  rt   rG   rl   )gradOutput_r   rL  r   r  r  r  r  r  r  r  r  r  r  
input_sizer  r  r  r  r  r  r  s                         r,   meta_avg_pool2d_backwardr  	  s    
LLKA6[!1Q!6] 
QB;1$+a.B	LLFq@CK1,@Fq0@a 6{aVAYB6{a3v;!+;RB	LLG.S\Q.Y 1:Dw<1$4'!*D	LLD 9$4$9*
 J$yy{a/Z^QFR.KR.KBJ'Rr1iPL&z2tRINK,,U3J#



$ ;;kk|| 	 r.   c                 N   t        j                  t        |      dv d        |d   }t        |      dk(  r|n|d   }t        |      dk(  r|n|d   }	t        j                  | xs t        |      dv d        |s|n|d   }
|s|nt        |      dk(  r|
n|d   }|s|	nt        |      dk(  r|
n|d   }t        j                  t        |      dv d        |d   }t        |      dk(  r|n|d   }t        |      dk(  r|n|d   }t        j                  | j                  dv d	        t        j                  | xs |dk7  d
        | j	                  d      }| j	                  d      }| j	                  d      }| j	                  d      }| j	                  d      }t        ||||
d|      }t        ||||d|      }t        ||	||d|      }t        | ||||	|
|||||ddd||||||dd       | j                  dk(  r| j                  ||||f      S | j                  |||||f      S )Nr   r   c                       yNzFavg_pool3d: kernel_size must be a single int, or a tuple of three intsr2   r2   r.   r,   rN   z!meta_avg_pool3d.<locals>.<lambda>	  rV   r.   r   r   r   c                       yNzJavg_pool3d: stride must be omitted, a single int, or a tuple of three intsr2   r2   r.   r,   rN   z!meta_avg_pool3d.<locals>.<lambda> 
  rV   r.   c                       yNzBavg_pool3d: padding must be a single int, or a tuple of three intsr2   r2   r.   r,   rN   z!meta_avg_pool3d.<locals>.<lambda>
  rV   r.   r  r  c                       yNz9non-empty 4D or 5D (batch mode) tensor expected for inputr2   r2   r.   r,   rN   z!meta_avg_pool3d.<locals>.<lambda>
  rV   r.   c                       yr  r2   r2   r.   r,   rN   z!meta_avg_pool3d.<locals>.<lambda>
  rV   r.   r  r  r}  r   zavg_pool3d()T)check_input_sizer  )r?   rP   r   r   r   r  pool3d_shape_checkr   )r   rL  r   r  r  r  r  kTr  r  dTr  r  padTr  r  r  nslicesitimeiheightiwidthotimeoheightowidths                           r,   meta_avg_pool3dr  	  sU    
LLKF"X 
QB;1$+a.B;1$+a.B	LL
+c&kV+\ vayBc&kQ&6F1IBc&kQ&6F1IB	LLGT 1:Dw<1$4'!*Dw<1$4'!*D	LL

fK
 
LL5 0A 5*
 ZZ]FjjnGJJrNEjjnGZZ^F D"aCE"7Bb!YGG!&"dB9EF





			-2 zzQ@AAHIIr.   c                    t        j                  t        |      dv d        |d   }t        |      dk(  r|n|d   }	t        |      dk(  r|n|d   }
t        j                  | xs t        |      dv d        |s|n|d   }|s|	nt        |      dk(  r|n|d   }|s|
nt        |      dk(  r|n|d   }t        j                  t        |      dv d        |d   }t        |      dk(  r|n|d   }t        |      dk(  r|n|d   }t        j                  |j                  dv d	        t        j                  | xs |dk7  d
        |j	                  d      }|j	                  d      }|j	                  d      }|j	                  d      }t        ||||d|      }t        ||	||d|      }t        ||
||d|      }t        || |||	|
||||||||||||d       |j                  |j                        S )Nr  c                       yr  r2   r2   r.   r,   rN   z*meta_avg_pool3d_backward.<locals>.<lambda>O
  rV   r.   r   r   r   c                       yr  r2   r2   r.   r,   rN   z*meta_avg_pool3d_backward.<locals>.<lambda>W
  rV   r.   c                       yr  r2   r2   r.   r,   rN   z*meta_avg_pool3d_backward.<locals>.<lambda>_
  rV   r.   r  c                       yr  r2   r2   r.   r,   rN   z*meta_avg_pool3d_backward.<locals>.<lambda>g
  rV   r.   c                       yr  r2   r2   r.   r,   rN   z*meta_avg_pool3d_backward.<locals>.<lambda>l
  rV   r.   r  r  r}  r   zavg_pool3d_backward())	r?   rP   r   r   r   r  avg_pool3d_backward_shape_checkr   r   )r  r   rL  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  otime_for_shape_checkoheight_for_shape_checkowidth_for_shape_checks                           r,   meta_avg_pool3d_backwardr  A
  s    
LLKF"X 
QB;1$+a.B;1$+a.B	LL
+c&kV+\ vayBc&kQ&6F1IBc&kQ&6F1IB	LLGT 1:Dw<1$4'!*Dw<1$4'!*D	LL

fK
 
LL5 0A 5*
 jjnGJJrNEjjnGZZ^F0D"aS27Bb!YW1&"dB9U#





', ??5;;''r.   c                 ,    t        j                   j                  dk(  xs  j                  dk(   fd        j                  d d t	        |      z   }t        j                         }t        j                  | j                   j                  |      S )Nr   r  c                  "    d j                    S )Nz"Expected 3D or 4D tensor, but got r  r   s   r,   rN   z*meta_adaptive_avg_pool2d.<locals>.<lambda>
      4TZZLA r.   r}  r8  )
r?   rP   r   r   rO   r7   rT  rt   rG   rl   )r   output_sizer   r   s   `   r,   meta_adaptive_avg_pool2dr  
  s|    	LL		Q($))q.A ::cr?U;%77L//5M ;;jj{{#	 r.   c                      t        j                   j                  dk(  xs  j                  dk(   fd        j                   j                  d d t        |      z         S )Nr  r  c                  "    d j                    S )Nz"Expected 4D or 5D tensor, but got r  r   s   r,   rN   z*meta_adaptive_avg_pool3d.<locals>.<lambda>
  r  r.   r  )r?   rP   r   r   r   rO   )r   r  s   ` r,   meta_adaptive_avg_pool3dr  
  sO    	LL		Q($))q.A >>$**Sb/E+,>>??r.   c                      j                   }t        d|      D ].  t        j                   j	                        dkD   fd       0 t        j                  |dk(  xs |dk(  fd       t        j                  j
                   j
                  k(   fd       t        j                  }t              rt        j                  }j                  j                        j                  |      S )	Nr   r   c                  *    d j                    d dS )Nz{adaptive_avg_pool2d_backward(): Expected grad_output to have non-zero                       size for non-batch dimensions,  with dimension  being emptyr  )grad_outr   s   r,   rN   z4meta__adaptive_avg_pool2d_backward.<locals>.<lambda>
  s&     66>nn5EEUVWUXXdf r.   r   r  c                  "    d j                    S )NzBadaptive_avg_pool2d_backward(): Expected 3D or 4D tensor, but got r  r   s   r,   rN   z4meta__adaptive_avg_pool2d_backward.<locals>.<lambda>
  s    TUYU_U_T`a r.   c                  <    dj                    d j                    S Nzexpected dtype z! for `grad_output` but got dtype ry   )r  r   s   r,   rN   z4meta__adaptive_avg_pool2d_backward.<locals>.<lambda>
  s    /$**-Nx~~N^_ r.   r   )r   r   r?   rP   r   rG   r   rX  rU  r   r   r   )r  r   r   r   r   s   ``  @r,   "meta__adaptive_avg_pool2d_backwardr  
  s    ==D1d^ 
MM!q f	

 
LL	TQYa 
LL

hnn$_ ++M++>>$**%((}(EEr.   c                 d    t        | d       t        j                  |t        j                        S )Nadaptive_avg_pool3d_backwardr   )!_adaptive_pool_empty_output_checkr?   r   r  r  r   s     r,   "meta__adaptive_avg_pool3d_backwardr  
  s(     &k3QRD0N0NOOr.   r  c                       j                   }t        d|      D ]/  t        j                   j	                        dkD   fd       1 y )Nr   r   c                  .      dj                    d dS )Nzc(): Expected grad_output to have non-zero size for non-batch dimensions, but grad_output has sizes r  r  r  )r  r  r   s   r,   rN   z3_adaptive_pool_empty_output_check.<locals>.<lambda>
  s/    * --8->->,??OPQsR^` r.   )r   r   r?   rP   r   )r  r  r   r   s   `` @r,   r  r  
  sG    D1d^ 
Q!#	

r.   c                      j                   }t        j                  |dv  fd       t        d|      D ].  t        j                   j	                        dkD   fd       0 t        j                  t        |      dk(  d        d}d}d} j                   dk(  r j	                  d      }|dz  } j	                  |dz
        }|\  }} j                   d	k(  r;|||f} j                  |      }	 j                  |t        j                  
      }
|	|
fS ||||f}t        j                         } j                  |      j                  |      }	 j                  |t        j                  
      j                  |      }
|	|
fS )Nr   r  c                  "    d j                    S )Nz:adaptive_max_pool2d(): Expected 3D or 4D tensor, but got: r  r   s   r,   rN   z*meta_adaptive_max_pool2d.<locals>.<lambda>
      LU[[MZ r.   r   r   c                  *    dj                    d  dS )Nzjadaptive_max_pool2d(): Expected input to have non-zero size for non-batch dimensions, but input has sizes r  r  r  r   r   s   r,   rN   z*meta_adaptive_max_pool2d.<locals>.<lambda>
  %    '',{{m3CA3lT r.   r   c                       y)NzCadaptive_max_pool2d(): internal error: output_size.size() must be 2r2   r2   r.   r,   rN   z*meta_adaptive_max_pool2d.<locals>.<lambda>
  rV   r.   r  r   ry   r   )r   r?   rP   r   r   r   r   r   r7   rT  r   )r   r  r   dimHsizeBsizeDosizeHosizeWr   r   r   r   r   s   `           @r,   meta_adaptive_max_pool2dr
  
  s|    ::D	LLZ 1d^ 
JJqMA	

 
LLKAU
 DEEzzQ

1	JJtax E NFFzzQFF+	ooi(//)5;;/?G|E662	33E:ooi(++-+H//)5;;/?BB' C 
 G|r.   c                 N     j                   }t        j                  |dv  fd       t         d       t        j                  j                   j                  k(   fd       t        j                        }j                  j                        j                  |      S )Nr  c                  "    d j                    S )NzKadaptive_max_pooling2d_backward(): Expected 3D or 4D grad_output, but got: r  r  s   r,   rN   z3meta_adaptive_max_pool2d_backward.<locals>.<lambda>  s    ]^i^o^o]pq r.   adaptive_max_pool2d_backwardc                  <    dj                    d j                    S r  ry   )r  r   s   r,   rN   z3meta_adaptive_max_pool2d_backward.<locals>.<lambda>  s!    /%++.OP[PaPaObc r.   r   )
r   r?   rP   r  rG   r7   rT  r   r   r   )r  r   r   r   r   s   ``   r,   !meta_adaptive_max_pool2d_backwardr    s     D	LLq
 &k3QR	LL{(((c
 //6M??5;;'***GGr.   c                      j                   }t        j                  |dv  fd       t        d|      D ].  t        j                   j	                        dkD   fd       0 t        j                  t        |      dk(  d        d}d}d}|dk(  r j	                  d      }|dz  } j	                  |      }|\  }}}|d	k(  r||||f}	n|||||f}	 j                  |	      }
 j                  |	t        j                  
      }|
|fS )Nr  c                  "    d j                    S )Nz:adaptive_max_pool3d(): Expected 4D or 5D tensor, but got: r  r  s   r,   rN   z*meta_adaptive_max_pool3d.<locals>.<lambda>   r   r.   r   r   c                  *    dj                    d  dS )Nzjadaptive_max_pool3d(): Expected input to have non-zero size for non-batch dimensions, but input has sizes r  r  r  r  s   r,   rN   z*meta_adaptive_max_pool3d.<locals>.<lambda>%  r  r.   r   c                       y)NzCadaptive_max_pool3d(): internal error: output_size.size() must be 3r2   r2   r.   r,   rN   z*meta_adaptive_max_pool3d.<locals>.<lambda>-  rV   r.   r  r  ry   )r   r?   rP   r   r   r   r   r   )r   r  r   dimDr  r  osizeTr  r	  r   r   r   r   s   `           @r,   meta_adaptive_max_pool3dr    s    ::D	LLZ 1d^ 
JJqMA	

 
LLKAU
 DEEqy

1	JJtE(FFFqyFFF3	E666:	
//)
$Cooiu{{o;G<r.   c                 P    t        | d       |j                  |j                        S )Nadaptive_max_pool3d_backward)r  r   r   )r  r   r   s      r,   !meta_adaptive_max_pool3d_backwardr  F  s"     &k3QR??5;;''r.   c                 >    |t        d      | j                  |      S )Nz:cannot repeat_interleave a meta tensor without output_size)r   r   )repeatsr  s     r,   meta_repeat_interleave_Tensorr  M  s%    WXX[))r.   c                     | j                   j                  sJ |j                   j                  sJ t        | j                  |j                        }| j	                  |t        | j                               S rC  )rG   r   r    r   r   r   )realimagr   s      r,   meta_complexr!  T  s[     ::''''::''''!$**djj9I>>)+Ftzz+R>SSr.   )
fill_valuer   r"  c                d    | j                  || j                         ft        j                        S rC  )r   ro   r?   r}   )r   r   r"  s      r,   nonzero_staticr$  ]  s&     >>4,EJJ>??r.   c           
          t        j                  t              d        g }t              D ]  \  ft        j                  j                  t         j
                  t         j                  t         j                  t         j                  fv d        j                  t         j                  t         j                  fv rȉj                         }t        |      t        j                  j                  z    j                  k   fd       t        j                        D ]`  t        j                  j                      j                  z      k(   fd       |j                  |j                  d             b ]|j                         p|j                          |t        j                  t               j                  k   fd       dd lm} t%         |j&                         t               j                  k  r*j                  d        t               j                  k  r*d}d}D ]  |dk(  rd}|dk(  rd	} n d
}|sg }g }t              D ]*  \  	|j                         |j                         , t              D ]*  \  	|j                         |j                         ,  j)                  |       |g }	g }
g }t              D ]\  \  }@|r|
j                   j                  |          )|	j                   j                  |          Ht%        j                        }^  j+                  |	|z   |
z         S )Nc                       y)Nz#at least one index must be providedr2   r2   r.   r,   rN   z#meta_index_Tensor.<locals>.<lambda>e  rV   r.   c                       y)Nz?tensors used as indices must be long, int, byte or bool tensorsr2   r2   r.   r,   rN   z#meta_index_Tensor.<locals>.<lambda>m  rV   r.   c                  "    d j                    S )N)too many indices for tensor of dimension r  r   s   r,   rN   z#meta_index_Tensor.<locals>.<lambda>t  s    G		{S r.   c            	      N    dj                    d  dj                    dz    S )NzThe shape of the mask z
 at index z0 does not match the shape of the indexed tensor r  )r   r{   jr  r   s   r,   rN   z#meta_index_Tensor.<locals>.<lambda>y  s<    "8ZPQs SJJN**U_`ade`e_f!h r.   r   c                  <    dj                    dt                dS )Nr)  z (got rc   )r   r   )r   r   s   r,   rN   z#meta_index_Tensor.<locals>.<lambda>  s!    ;DII;fSQX\NZ[\ r.   r   Fr   T)r?   rP   r   	enumeraterG   r}   r  r  nonzeror   r~   r   r   r   r   selecttorch._refs_refsr   r!   r   r   )r   r   r!  r.  refsstatehas_contiguous_subspacer;  transposed_indicesbefore_shapeafter_shapereplacement_shapero   r   r{   r+  r  s   ``           @@@@r,   meta_index_Tensorr9  c  s   	LLg MN &(Fg& !5LL

EIIuzz5::NNY {{uzz5::66--/K""

Ndii/S uzz* 8A&&A$**QU*;;h
 MM'..A"678 e$MM% /!0 G	LLG		!\
 (4(('23G
g,
"t g,
" E# 'A: aZ} ' #'
 #!'* 	1HAu A"))%0	1 "'* 	1HAu}A"))%0	1 ||D!$ !LK#%( 2
U= ""4::c?3##DJJsO4 $U[[ 12 >>,)::[HIIr.   c                     d }d }d }|
d   r| j                  |j                               }|
d   r| j                  |j                               }|
d   r| j                  |      }|||fS )Nr   r   r   r   r   )grad_output_input_weight_bias_sizes_optr   r  rB  
transposedrE  rD  output_maskbackend_grad_inputbackend_grad_weightbackend_grad_biass                 r,   meta_convolution_backwardrE    sy      1~)33FKKMB1~*44W\\^D1~(22>B 35FGGr.   c                   j                  d      }j                  d      }| j                  ||f      } t        j                  j	                         dk(  d        t        j                  j	                         dk(  d        t        j                  j                  d      j                  d      k(  fd       t        j                  j                  d      j                  d      k(  fd       t        j                  | j                  d      |k(  xr | j                  d      |k(  d	        | j                  | j                               S )
Nr   r   r   c                       yr  r2   r2   r.   r,   rN   zmeta_addbmm.<locals>.<lambda>  rV   r.   c                       yr  r2   r2   r.   r,   rN   zmeta_addbmm.<locals>.<lambda>  rV   r.   r   c                  P    d j                  d       dj                  d       S )Nz8batch1 and batch2 must have same number of batches, got r   r   r   r  r  s   r,   rN   zmeta_addbmm.<locals>.<lambda>  s.    J6;;WX>JZZ_`f`k`klm`n_op r.   c            
          d j                  d       d j                  d       dj                  d       dj                  d       d	S )Nz#Incompatible matrix sizes for bmm (r   r<   r   r   rc   r   rJ  s   r,   rN   zmeta_addbmm.<locals>.<lambda>  sQ    1&++a.1A6;;q>BR S;;q>"!FKKN#316 r.   c                       y)Nz.self tensor does not match matmul output shaper2   r2   r.   r,   rN   zmeta_addbmm.<locals>.<lambda>  rV   r.   )r   r@  r?   rP   ro   r   )r   r  r  r   r  r  r  s    ``    r,   meta_addbmmrM    s    ;;q>D;;q>D;;d|$D	LL"$HI	LL"$HI	LLA&++a.(p 
LLA&++a.(	
 
LL		!51!5@ >>$))+&&r.   c                       fd}|S )Nc                 @      fd}t        j                  |        S )Nc                     t        |       j                  d      d   }t        t        |j	                  dd            }t        t        | t        |             y )N.r   	_foreach_ 
_scalar_op)strsplitgetattrr#   replacer   r   r   )r*   op_name	scalar_opr+   s      r,   r-   z8register_meta_foreach.<locals>.wrapper.<locals>.register  sM    "gmmC(+Ggook2&FGI(r.   )r/   r0   )r+   r-   opss   ` r,   r1   z&register_meta_foreach.<locals>.wrapper   s    	 	3'	r.   r2   )r\  r1   s   ` r,   register_meta_foreachr]    s    " Nr.   rT  c           	        	
 t        j                  t        d   t              fd       t	        d         
t        j                  
dkD  d        d}t        dd        D ]  \  	t        t              r-|dz  }t        j                  t	              
k(  	
fd       Ct        t              r@t        j                  j                         dk(  xr j                         dk(  fd        n g }t        
      D ]?  }t        |      D cg c]
  }|   |    }}|j                   | g ||d  i |       A |S c c}w )Nr   c                  (    dt         d          dS )Nz1The first argument must be List[Tensor], but got r   rQ  rd   r9   s   r,   rN   z,_meta_foreach_out_of_place.<locals>.<lambda>A  s    DT$q']OSTU r.   c                       y)Nz*Tensor list must have at least one tensor.r2   r2   r.   r,   rN   z,_meta_foreach_out_of_place.<locals>.<lambda>G  rV   r.   r   c                  4    ddz    d dt                dS )Nzself and argument-r   z must match in length, but got r   rQ  r  )r\   iargnelems   r,   rN   z,_meta_foreach_out_of_place.<locals>.<lambda>P  s.    (a 1$gU3s8*A7 r.   c                  N    d j                          d j                          dS )Nz.scalar tensor expected to be 0 dim but it has z dimensions and 
 elements.)ro   r   )r\   s   r,   rN   z,_meta_foreach_out_of_place.<locals>.<lambda>X  s+    Dwwyk!1#))+jJ r.   )r?   rP   rY   r   r   r-  r   ro   r   r   r   )rU  r9   kwargsnlistsr!  elemr   	each_argsr\   rd  re  s    `      @@@r,   _meta_foreach_out_of_placerl    sG   V 
LL47D!V
 QLE	LL	>
 FtABx( 	cc4 aKFLLCE! V$LL	Q3399;!#3 '* Fe H,1&M:qT!WT]:	:jF)Fd67mFvFGH M ;s   Ec                     t        |d| i| y NrU  )rl  )rU  r9   rh  s      r,   _meta_foreach_inplacero  h  s    V FFvF
r.   c                     t        j                  t        t              fd       D cg c]  }t        j                  |       c}S c c}w )Nc                       dt                S Nz'exponent must be a tensor list but got r`  )exponents   r,   rN   z5meta__foreach_pow_scalar_and_tensor.<locals>.<lambda>  s    9$x.9IJ r.   )r?   rP   rY   r   r   )r   rs  es    ` r,   #meta__foreach_pow_scalar_and_tensorru    s?     
LL8T"J *22AEQ222s   Ac                      t        j                  t         t              xr t        t               fd       t        j                  t	               dkD  xr t	               t	              k(   fd       y )Nc                  :    dt               dt                dS )Nz9The first two arguments of must be List[Tensor], but got r   rQ  r`  r   r   s   r,   rN   z3_check_foreach_binop_tensor_lists.<locals>.<lambda>  s'    Dzl%U}A7 r.   r   c                  :    dt               dt                dS )Nz>self and other must be non-empty and match in length, but got r   rQ  r  rx  s   r,   rN   z3_check_foreach_binop_tensor_lists.<locals>.<lambda>  s'    4yks5zl!5 r.   )r?   rP   rY   r   r   r   r   s   ``r,   !_check_foreach_binop_tensor_listsr{    sZ    	LL4::eT#:	
 
LLD	A1#d)s5z1	
r.   c                  4    t        | dt        j                  iS rn  )rl  r#   	clamp_minra  s    r,   meta__foreach_binop_scalarr~    s     &tGGGr.   c                  6    t        | dt        j                  i y rn  )ro  r#   
clamp_min_ra  s    r,   meta__foreach_binop__scalarr    s     4<DOO<
r.   c                     t        j                  t        d  fD               fd       t        j                  t               dkD  d        t        j                  t               t              k(  xr t               t              k(  d         D cg c]  }t        j                  |       c}S c c}w )Nc              3   <   K   | ]  }t        |t                y wr)   rY   r   r[   ls     r,   r]   z.meta__foreach_addcop_scalar.<locals>.<genexpr>       BAJq$Br^   c                  P    dt                dt               dt               S )Nz,All arguments must be List[Tensor], but got rb   , and r`  r   tensor1tensor2s   r,   rN   z-meta__foreach_addcop_scalar.<locals>.<lambda>  0    Dzl"T']O6$w-J r.   r   c                       yNz$input tensor list must not be empty.r2   r2   r.   r,   rN   z-meta__foreach_addcop_scalar.<locals>.<lambda>  rV   r.   c                       yNz0All input tensor lists must have the same lengthr2   r2   r.   r,   rN   z-meta__foreach_addcop_scalar.<locals>.<lambda>  rV   r.   )r?   rP   rO  r   r   )r   r  r  scalarr`  s   ```  r,   meta__foreach_addcop_scalarr    s     
LLB$)ABB	
 
LLTQ NO	LLD	S\!?c$i3w<&?B
 *..AEQ...s   B=c                 r    t        j                  t        d  fD              xr t        t         j                         fd       t        j                  t               dkD  d        t        j                  t               t              k(  xr t               t              k(  d        y )Nc              3   <   K   | ]  }t        |t                y wr)   r  r  s     r,   r]   z.meta__foreach_addcop_tensor.<locals>.<genexpr>  r  r^   c            
      h    dt               dt               dt               dt                S )Nzi_foreach_addc*_ op expects arguments of type: List[Tensor], List[Tensor], List[Tensor], tensor, but got: rb   r  r`  )re  r   r  r  s   r,   rN   z-meta__foreach_addcop_tensor.<locals>.<lambda>  s;    T
|2d7m_BtG}oVDQXM?\ r.   r   c                       yr  r2   r2   r.   r,   rN   z-meta__foreach_addcop_tensor.<locals>.<lambda>  rV   r.   c                       yr  r2   r2   r.   r,   rN   z-meta__foreach_addcop_tensor.<locals>.<lambda>  rV   r.   )r?   rP   rO  rY   r   r   )r   r  r  re  s   ````r,   meta__foreach_addcop_tensorr    s    	LLB$)ABB 	.w-	
 
LLTQ NO	LLD	S\!?c$i3w<&?Br.   c                 6    t        j                  t        d  fD               fd       t        j                  t               dkD  d        t        j                  t               t              k(  xr t               t              k(  d        y )Nc              3   <   K   | ]  }t        |t                y wr)   r  r  s     r,   r]   z/meta__foreach_addcop__scalar.<locals>.<genexpr>  r  r^   c                  P    dt                dt               dt               S )Nz?All arguments of _foreach_addc*_ must be List[Tensor], but got rb   r  r`  r  s   r,   rN   z.meta__foreach_addcop__scalar.<locals>.<lambda>  r  r.   r   c                       yr  r2   r2   r.   r,   rN   z.meta__foreach_addcop__scalar.<locals>.<lambda>  rV   r.   c                       yr  r2   r2   r.   r,   rN   z.meta__foreach_addcop__scalar.<locals>.<lambda>  rV   r.   )r?   rP   rO  r   )r   r  r  r  s   ``` r,   meta__foreach_addcop__scalarr    su     
LLB$)ABB	
 
LLTQ NO	LLD	S\!?c$i3w<&?Br.   )
grad_scale	found_infc       	         n    | |||||fD ])  t        j                  t        t              fd       + y )Nc                       dt                S rr  r`  r  s   r,   rN   z#meta__fused_adam_.<locals>.<lambda>      =d1gYG r.   r?   rP   rY   r   )r   gradsexp_avgsexp_avg_sqsmax_exp_avg_sqsstate_stepslrbeta1beta2weight_decayepsamsgradmaximizer  r  r  s                  @r,   meta__fused_adam_r  	  s:    & E8[/;O 
q$G	

r.   c       	             | |||||fD ])  t        j                  t        t              fd       + d } ||        ||       ||       ||       ||      fS )Nc                       dt                S rr  r`  r  s   r,   rN   z"meta__fused_adam.<locals>.<lambda>9  r  r.   c                 R    | D cg c]  }t        j                  |       c}S c c}w r)   r?   r   )tensor_listr  s     r,   empty_like_listz)meta__fused_adam.<locals>.empty_like_list<  s!    -89  #999s   $r  )r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  s                   @r,   meta__fused_adamr  #  ss    & E8[/;O 
q$G	

: 	!$( r.   c                 j    t        j                   j                         dk(  d        t        j                  j                         dk(  d        t        j                   j                  t         j                  u  fd       t        j                  j                  t         j                  u fd       t        j                   j                  d      j                  d      k(   fd        j                   j                  d      j                  d      ft         j                  	      S )
Nr   c                       y)Nza must be a 2D tensorr2   r2   r.   r,   rN   zmeta__int_mm.<locals>.<lambda>K  rV   r.   c                       y)Nzb must be a 2D tensorr2   r2   r.   r,   rN   zmeta__int_mm.<locals>.<lambda>L  rV   r.   c                  "    d j                    S )Nzexpected self to be int8, got ry   )r6  s   r,   rN   zmeta__int_mm.<locals>.<lambda>O      0	: r.   c                  "    d j                    S )Nzexpected mat2 to be int8, got ry   )r7  s   r,   rN   zmeta__int_mm.<locals>.<lambda>S  r  r.   r   r   c            
          d j                  d       d j                  d       dj                  d       dj                  d       d	S )Nz'Incompatible matrix sizes for _int_mm (r   r<   r   r   rc   r   r6  r7  s   r,   rN   zmeta__int_mm.<locals>.<lambda>W  sM    5affQi[!&&) M66!9+Qqvvayk, r.   ry   )r?   rP   ro   rG   r  r   r   r  r  s   ``r,   meta__int_mmr  H  s     
LLA>?	LLA>?	LL	5::: 
LL	5::: 
LL	q	QVVAY	
 ;;q	166!9-U[[;AAr.   c                 `    t        j                   j                         dk(  d        t        j                   j                  t         j                  u  fd        j                  d      } j                  d      } j                  |dz  ||dz  z  d|dz  ft         j                  	      S )
Nr   c                       yNzw must be a 2D tensorr2   r2   r.   r,   rN   z2meta__convert_weight_to_int4pack.<locals>.<lambda>a  rV   r.   c                  "    d j                    S Nzexpected w to be int32, got ry   rv  s   r,   rN   z2meta__convert_weight_to_int4pack.<locals>.<lambda>d      .qwwi8 r.   r   r      r      ry   )r?   rP   ro   rG   r  r   r   )rv  inner_k_tilesr   r  s   `   r,    meta__convert_weight_to_int4packr  _  s    	LLA>?	LL	5;;8 	
q	A	q	A;;F-"$%Q		
 kk   r.   c                     t        j                   j                         dk(  d        t        j                  j                         dk(  d        t        j                   j                  t         j                  u  fd       t        j                  j                  t         j
                  u fd        j                   j                  d      j                  d      dz   j                  	      S )
Nr   c                       yNzx must be a 2D tensorr2   r2   r.   r,   rN   z*meta__weight_int4pack_mm.<locals>.<lambda>u  rV   r.   r  c                       y)Nzw must be a 4D tensorr2   r2   r.   r,   rN   z*meta__weight_int4pack_mm.<locals>.<lambda>v  rV   r.   c                  "    d j                    S Nzexpected x to be bf16, got ry   r<   s   r,   rN   z*meta__weight_int4pack_mm.<locals>.<lambda>y      -aggY7 r.   c                  "    d j                    S r  ry   r  s   r,   rN   z*meta__weight_int4pack_mm.<locals>.<lambda>}  r  r.   r   r  ry   )r?   rP   ro   rG   r  r  r   r   )r<   rv  q_group_sizeq_scale_and_zeross   ``  r,   meta__weight_int4pack_mmr  s  s    	LLA>?	LLA>?	LL	5>>!7 
LL	5;;8 ;;qvvay!&&)a-qww;??r.   c                     t        j                   j                         dk(  d        t        j                   j                  t         j                  u  fd       t        j                  j                         dk(  d        t        j                  j                  t         j
                  u fd        j                   j                  d      j                  d       j                        S )Nr   c                       yr  r2   r2   r.   r,   rN   z*meta__weight_int8pack_mm.<locals>.<lambda>  rV   r.   c                  "    d j                    S r  ry   r  s   r,   rN   z*meta__weight_int8pack_mm.<locals>.<lambda>  r  r.   c                       yr  r2   r2   r.   r,   rN   z*meta__weight_int8pack_mm.<locals>.<lambda>  rV   r.   c                  "    d j                    S )Nzexpected w to be int8, got ry   r  s   r,   rN   z*meta__weight_int8pack_mm.<locals>.<lambda>  r  r.   r   ry   )r?   rP   ro   rG   r  r  r   r   )r<   rv  q_scaless   `` r,   meta__weight_int8pack_mmr    s    	LLA>?	LL	5>>!7 
LLA>?	LL	5::7 ;;qvvay!&&)177;;;r.   c                 f    t        j                   j                         dk\   fd       t        j                  j                         dk\  fd       t        j                   j                  d      j                  d      k(   fd       t        j                  t	        j
                   j                        d        t        j                  t	        j
                  j                        d        t        j                  |dk\  d	        t        j                  d
v fd        j                  d      }j                  d      } j                  d d }j                  d d }t        t        j                  ||            }|j                  ||g        j                  |      S )Nr   c                  ,    d j                          dS )Nz1cdist only supports at least 2D tensors, X1 got: Dr   )x1s   r,   rN   z$meta_cdist_forward.<locals>.<lambda>      CBFFH:QO r.   c                  ,    d j                          dS )Nz1cdist only supports at least 2D tensors, X2 got: r  r   )x2s   r,   rN   z$meta_cdist_forward.<locals>.<lambda>  r  r.   r   c                  P    d j                  d       dj                  d       S )Nz4X1 and X2 must have the same number of columns. X1: r   z X2: r   )r  r  s   r,   rN   z$meta_cdist_forward.<locals>.<lambda>  s,    Frwwr{mSXY[Y`Y`acYdXef r.   c                       y)Nz=cdist only supports floating-point dtypes, X1 got: {x1.dtype}r2   r2   r.   r,   rN   z$meta_cdist_forward.<locals>.<lambda>  rV   r.   c                       y)Nz=cdist only supports floating-point dtypes, X2 got: {x2.dtype}r2   r2   r.   r,   rN   z$meta_cdist_forward.<locals>.<lambda>  rV   r.   r   c                       y)Nz)cdist only supports non-negative p valuesr2   r2   r.   r,   rN   z$meta_cdist_forward.<locals>.<lambda>  rV   r.   Nr   r   c                      d  S )Nz%possible modes: None, 1, 2, but was: r2   )compute_modes   r,   rN   z$meta_cdist_forward.<locals>.<lambda>  s    7~F r.   r}  )r?   rP   ro   r   r7   is_float_dtyperG   r   r   broadcast_shapesextendr   )	r  r  r  r  r1r2batch_tensor1batch_tensor2r   s	   `` `     r,   meta_cdist_forwardr    sJ   	LL
AO 
LL
AO 
LL
rwwr{"f 
LLRXX&O 
LLRXX&O 
LLaLM	LL$F 
B	BHHSbMMHHSbMM..}mLMLR!<<%%r.   c                 4   |j                   d   }|j                   d   }|j                   d   }|j                   d d }|j                   d d }	t        t        j                  ||	            }
|
j	                         }|j                  ||g       t        j                  |
      }|dk(  s|dk(  s
|dk(  s|dk(  rt        j                  |      S |t        |j                         k7  r|j                  |      }t        j                  |t        j                        S )Nr   r}  r   r   )r   r   r?   r  copyr  mathprod
zeros_liker@  r   r   )r  r  r  r  cdistc1r  r  r  r  r<  tensor1_expand_sizebatch_products                r,   meta_cdist_backwardr    s     
"B	"B	"BHHSbMMHHSbMM 6 6}m TU.335Bx(II23M	Qw"'R1W(:##d288n,YY*+Be.E.EFFr.   c	                 j    t        j                  j                  t         j                  t         j                  fv fd       t        j                  j                  t         j                  t         j                  fv fd       t        j                  t        j                   j                         fd       j                  d      }	|rt        j                  |	dk\  d        |	dz  }	 j                  |	 j                  d            }
t        d      \  }}}t        j                  ||k(  d        t        j                  j                   j                  k(   fd	       t        j                  j                  dk(  fd
       t        j                  j                         j                         k(  fd       fdd fd}t              dk7  rxj                  j                  d            }j                  j                               }||k(  r"j                  |	 j                  d            }n܉j                  d      }n | |
|      }|||fv s|s!j                  j                  d            }nj                  d      }j                  |	      }j                  d   }||k(  rA|rt        j                  |dk\  d        |dz  }j                  | j                  d         }nj                  |j                               }|
|||fS )Nc                  "    d j                    S )Nz(expected indices to be long or int, got ry   r   s   r,   rN   z$meta_embedding_bag.<locals>.<lambda>      :7==/J r.   c                  "    d j                    S )Nz(expected offsets to be long or int, got ry   )r1  s   r,   rN   z$meta_embedding_bag.<locals>.<lambda>  r  r.   c                  "    d j                    S )Nz/expected weight to be floating point type, got ry   )r  s   r,   rN   z$meta_embedding_bag.<locals>.<lambda>  s    A&,,P r.   r   r   c                       yNz1include_last_offset: numBags should be at least 1r2   r2   r.   r,   rN   z$meta_embedding_bag.<locals>.<lambda>  rV   r.   r   c                       y)Nz@embedding_bag: per_sample_weights only supported with mode='sum'r2   r2   r.   r,   rN   z$meta_embedding_bag.<locals>.<lambda>  rV   r.   c                  >    dj                    d j                    dS )Nzexpected weight (z) and per_sample_weights (z) to have same dtypery   )per_sample_weightsr  s   r,   rN   z$meta_embedding_bag.<locals>.<lambda>  s%    '~5OPbPhPhOii}~ r.   c                  $    d j                    dS )Nz1expected per_sample_weights to be 1D tensor, got r  r  )r  s   r,   rN   z$meta_embedding_bag.<locals>.<lambda>  s    GHZH_H_G``ab r.   c                  N    dj                          d j                          dS )Nz%expected per_sample_weights.numel() (z$ to be the same as indices.numel() (rc   r   )r   r  s   r,   rN   z$meta_embedding_bag.<locals>.<lambda>  s4    78J8P8P8R7S T66=mmo5FaI r.   c                 D     | ||      xr |j                  d      dk(  S Nr   r   r   )r   r%  r   padding_idxis_fast_path_index_selects       r,   is_fast_path_index_select_scalez;meta_embedding_bag.<locals>.is_fast_path_index_select_scale  s(    %c6;?XELLQROWXDX	
r.   c                     | j                   t        j                  k(  xs | j                   t        j                  k(  xr1 | j	                  d      dk(  xr |j	                  d      dk(  xr |dk  S Nr   r   )rG   r?   rC   rA   r   )r   r   r  s      r,   r  z5meta_embedding_bag.<locals>.is_fast_path_index_select
  sb    YY%++%@ejj)@  

1" a A%  a		
r.   c                 2    | | |||      S  | ||      S r)   r2   )r   r%  r   r  r  r  s       r,   is_fast_pathz(meta_embedding_bag.<locals>.is_fast_path  s)    23v{SS,S&+FFr.   cpuc                       yr	  r2   r2   r.   r,   rN   z$meta_embedding_bag.<locals>.<lambda>,  rV   r.   )r?   rP   rG   r}   r  r7   r  r   r   r   r   r   r0  r   )r  r   r1  scale_grad_by_freqr  sparser  include_last_offsetr  num_bagsr   MODE_SUM	MODE_MEANMODE_MAXr  
offset2bagbag_sizemax_indicesfast_path_sumnumBagsr  r  s   ```   `             @@r,   meta_embedding_bagr(    s    
LL%**eii00J 
LL%**eii00J 
LLV\\*P
 ||AHMG	
 	AhA7F$)!H!Hi%HV	
 	$$4~	
 	##q(b	
 	$$&'--/9	



G 7u$&&w||A7
$$W\\^48!++Hfkk!nEK!++A.K$V-?UIx(( **7<<?;J **1-J$$X.--"8"qLO 1!++GV\\!_EK!++HMMO<K:x44r.   c                     t        | ||g| \  }}}}t        |      dk(  r|j                  |j                               }||||fS )Nr  )r(  r0  r   r   )r  r   r1  r9   r   r#  r$  r%  s           r,   meta_embedding_bag_forward_onlyr*  5  sX    0B1#'1-FJ+ 7u$$$W\\^4:x44r.   c                     |r|S | j                   j                  s| j                   j                  r| j                   S |rt        j                  S | j                   S r)   )rG   r   r   r?   r}   )r   rG   promote_int_to_longs      r,   _get_reduction_dtyper-  ?  sD    {{$$(>(>{{	zz;;r.   ry   c                    t        | |d      }t        j                  | j                  |      }t	        | ||      }| j                  ||      S )NT)r,  ry   )r-  r7   rE  r   rF  r   )r   r;  rH  rG   r{  r   s         r,   meta_nansumr/  L  sI     (u$OLT2D+E4AL??<|?<<r.   c           	          t        j                  | j                  t        t	        | j                                           }| j                  |      S r)   )r7   r<  r   rO   r   ro   r   )r   r   s     r,   meta_medianr1  U  s<    77U5-.L ??<((r.   c                    t        |       dk(  rt        j                  d       t        j                  | j                  |f      }t        | ||      }| j                  |      | j                  |t        j                        fS )Nr/  zmedian CUDA with indices outputry   )	r0  r7   alert_not_deterministicrE  r   rF  r   r?   r}   )r   ro   rH  r   s       r,   meta_median_mode_dimr4  ]  sp     5V#%%&GH


u{{SF
3C+E3@L%EJJ7 r.   c                     | S r)   r2   r   s    r,   meta_logical_not_r6  s  r  r.   c                 R   t        j                  t        |      | j                         k\  d        t        |      | j                         z
  }d|z  t	        | j
                        z   }t        t        |            D cg c]  }||   ||   z   }}| j                  |      S c c}w )Nc                       y)NzZNumber of dimensions of repeat dims can not be smaller than number of dimensions of tensorr2   r2   r.   r,   rN   zmeta_repeat.<locals>.<lambda>|  rV   r.   r  )r?   rP   r   ro   rO   r   r   r   )r   r  num_new_dimensionspadded_sizer   target_sizes         r,   meta_repeatr<  x  s    	LLG
"l W
2++eDJJ.??K8=c'l8KL1;q>GAJ.LKL>>+&& Ms   ?B$c                     | S r)   r2   r   s    r,   
meta_zero_r>    r  r.   c                 z    t        |t        j                        r t        | j                  |j                         | S r)   rY   r?   r   rR   r   rz  s     r,   meta_binop_inplacerA    s)     %&

EKK8Kr.   c                 z    t        |t        j                        r t        | j                  |j                         | S r)   r@  )r   r   r  s      r,   meta_binop_inplace_alpharC    s)     %&

EKK8Kr.   c                 8    t        | t        j                        S Nr4   )r=   r   r8   )r   rh  s     r,   
meta_roundrG    s    <DD r.   c                 l    t        j                  t        j                  j                         fd       t        t         j                        r8t        j                  t        j                  j                         fd       y t        j                  t        t               fd       y )Nc                  &      dj                    S )Nz7: Expected input tensor to have an integral dtype. Got ry   )r  r   s   r,   rN   z#shift_dtype_check.<locals>.<lambda>  s    7)RSWS]S]R^_ r.   c                  &      dj                    S )Nz6: Expected shift value to have an integral dtype. Got ry   r  rY  s   r,   rN   z#shift_dtype_check.<locals>.<lambda>  s    wiUVYV_V_U`a r.   c                        d S )Nz): Expected shift value to be an int. Got r2   rK  s   r,   rN   z#shift_dtype_check.<locals>.<lambda>  s    wiHN r.   )r?   rP   r7   r  rG   rY   r   r   )r  r   rY  s   ```r,   shift_dtype_checkrM    sp    	LLtzz*_ #u||$""399-a	

 	sG$N	
r.   c                 T    t        d| |       t        | |t        j                        S )NrshiftrF  rM  r=   r   r8   rz  s     r,   meta_rshiftsrQ    )    he,e$C$K$K r.   c                 T    t        d| |       t        | |t        j                        S )NlshiftrF  rP  rz  s     r,   meta_lshiftsrU    rR  r.   c                 8    | j                  | j                        S r)   rk  r   s    r,   	meta_zerorW    s    >>$**%%r.   c                     | S r)   r2   r   rY  s     r,   
meta_fill_rZ    r  r.   c                 ,    t        j                  |       S r)   r  rY  s     r,   	meta_fillr\        D!!r.   c                     | S r)   r2   r   s    r,   
meta_relu_r_    r  r.   c                 ,    t        j                  |       S r)   r  r   r   r   
accumulates       r,   meta_index_putrc    r]  r.   c                 F    t        | j                  |j                         | S r)   )rR   r   )r   r-  values      r,   meta_masked_fill_rf    s    DJJ

3Kr.   c                     t        j                  |j                  t         j                  t         j                  fv d        t        j                  | j                  |j                  k(  d        | S )Nc                       y)NzMask must be bool or uint8r2   r2   r.   r,   rN   z&meta_masked_scatter_.<locals>.<lambda>  rV   r.   c                       y)Nzdmasked_scatter: expected self and source to have same dtypes but got {self.dtype} and {source.dtype}r2   r2   r.   r,   rN   z&meta_masked_scatter_.<locals>.<lambda>  rV   r.   )r?   rP   rG   r   uint8)r   r-  r$  s      r,   meta_masked_scatter_rk    sT    	LL

uzz5;;//1U 
LL

fll"	9
 Kr.   c                     t        | |      \  } }t        j                  | t        j                        }t	        |||      S r(  )r!   r?   r   r   rk  )r   r-  r$  r   s       r,   meta_masked_scatterrm    s;     "$-JD$d%2I2IJFf55r.   c                 $    | j                  |      S r)   r?  )r   r-  r  s      r,   meta_masked_scatter_backwardro    s    >>%  r.   c                     | S r)   r2   ra  s       r,   meta_index_put_rq    r  r.   c                 8    | j                  | j                        S r)   )viewr   r   s    r,   
meta_aliasrt    s    99TZZ  r.   c                 H  	
 t        j                  | j                         dk(  d        t        j                  |j                         dk(  d        | j                         }|j                         |d   	|d   
|d   }d   }	||ft        j                  d   	k(  xr d   
k(  	
fd       |j	                        }|sUSt        j                  j                         dk(  d        t        j                  j                         k(  fd	       |S )
Nr   c                       yr  r2   r2   r.   r,   rN   z)common_meta_baddbmm_bmm.<locals>.<lambda>  rV   r.   c                       yr  r2   r2   r.   r,   rN   z)common_meta_baddbmm_bmm.<locals>.<lambda>  rV   r.   r   r   r   c            	      .    d d d d    d d    d	S r
  r2   r  s   r,   rN   z)common_meta_baddbmm_bmm.<locals>.<lambda>%  s5    RSURV
l<?*;2l1o=NbR r.   c                       y)Nzself must be a 3D tensorr2   r2   r.   r,   rN   z)common_meta_baddbmm_bmm.<locals>.<lambda>.  rV   r.   c                  0    d  dj                          S )Nz*Expected an input tensor shape with shape z but got shape: r   )r  self_baddbmms   r,   rN   z)common_meta_baddbmm_bmm.<locals>.<lambda>1  s!    @M]^j^o^o^q]rs r.   )r?   rP   ro   r   r   )r  r  is_bmmr{  r  res_rowsres_colsr   r  r  r  r  s      `    @@@@r,   common_meta_baddbmm_bmmr    s	   	LL"$HI	LL"$HI;;=L;;=L	aB#AAHAHx*K	LLQ2E,q/5E"E	R k*Fl.\%%'1,.PQ;.s	

 Mr.   c                     t        | |d      S )NT)r  )r   mat2s     r,   meta_bmmr  7  s    "4t44r.   c                 h    | |z  }| |z  }|dk7  r"t        |dk        t        |dk        k7  r|dz  }|S r  )r   )r<   yqr  s       r,   div_rtnr  <  sB    	QA	AA 	Av4A;$q1u+-	QHr.   c                     t        | |z   |z   ||dz
  z  z
  dz
  |r|dz
  ndz   |      dz   }|r|dz
  |z  | |z   k\  r|dz  }|S r  )r  )	inputSize
kernelSizer  r  r   rB  r  
outputSizes           r,   pooling_output_shape_pad_lrr  F  s     	 *q.)* 	
 'vzA/ 	
 		  Nf$	E(99!OJr.   c           	          t        j                  |dk7  d        t        j                  dk\  fd       t        j                  dz
  z  dz   dz  k  fd       t        | ||      S )Nr   c                       y)Nzstride should not be zeror2   r2   r.   r,   rN   z&pooling_output_shape.<locals>.<lambda>\  rV   r.   c                      d  S )Nz'pad must be non-negative, but got pad: r2   )pads   r,   rN   z&pooling_output_shape.<locals>.<lambda>]  s    %LSE#R r.   r   r   c                      d d d  S )NzApad should be at most half of effective kernel size, but got pad=z, kernel_size=z and dilation=r2   )rB  r  r  s   r,   rN   z&pooling_output_shape.<locals>.<lambda>`  s'    OPSu U%,nXJ@ r.   )r?   rP   r  )r  r  r  r   rB  r  s    `` ` r,   r  r  [  ss    	LL1AB	LLRS	LLa8+a/A55	
 ':sC9 r.   c           	      >   	
  j                         }	t        j                  dkD  xr dkD  d        t        j                  |dkD  xr |dkD  d        t        j                  |dkD  xr |dkD  d         j                  d      dk7  xr  j                  d      dk7  }|t        j                  k(  r5t        j                  |dk(  xr |xr  j                  d      dk7  d	        nWt        j                  |dk(  xr  j                  d      dk7  xr |xs |dk(  xr |xr  j                  d      dk7   fd
       t        j                  dz  k\  xr dz  k\  fd       t        j                  dk\  xr dk\  
	fd       y )Nr   c                       y)NzCkernel size should be greater than zero, but got kH: {kH}, kW: {kW}r2   r2   r.   r,   rN   z$pool2d_shape_check.<locals>.<lambda>  rV   r.   c                       y)Nz>stride should be greater than zero, but got dH: {dH}, dW: {dW}r2   r2   r.   r,   rN   z$pool2d_shape_check.<locals>.<lambda>  rV   r.   c                       y)Nz\dilation should be greater than zero, but got dilationH: {dilationH}, dilationW: {dilationW}r2   r2   r.   r,   rN   z$pool2d_shape_check.<locals>.<lambda>  rV   r.   r   r   r  r   c                       y)NzExpected 4D (batch mode) tensor expected for input with channels_last layout with optional 0 dim batch size for input, but got: {input.size()}r2   r2   r.   r,   rN   z$pool2d_shape_check.<locals>.<lambda>  rV   r.   c                  *    d j                          S )NzYExpected 3D or 4D (batch mode) tensor with optional 0 dim batch size for input, but got: r   r  s   r,   rN   z$pool2d_shape_check.<locals>.<lambda>  s    opupzpzp|o}~ r.   c                       d d d d  S )NzKpad should be smaller than or equal to half of kernel size, but got padW = z	, padH = z, kW = z, kH = r2   )r  r  r  r  s   r,   rN   z$pool2d_shape_check.<locals>.<lambda>  s&     ygbT> r.   c                  .    d d  d d d d dS NzGiven input size: (r<   z). Calculated output size: (z). Output size is too smallr2   )r  r  r  r  r  r  s   r,   rN   z$pool2d_shape_check.<locals>.<lambda>  s:    %k]!K=* N$$0><.+ O## r.   )ro   r?   rP   r   rU  )r   r  r  r  r  r  r  	dilationH	dilationWr  r  r  r  r  r   r   
valid_dimsr  s   ```  ``  `````   @r,   r  r  j  s   " 99;DL	LL
Q26U 
LL
Q26P 
LLA')a-n
 A!#:

1(:J+++AI;*;A!);Q	
 	QY<5::a=A-<* A	?j?UZZ]a-?~	
 
LL
a4+B!GtO	> 
LLq.\Q.	# 	#r.   r  r  r  r  r  r  r  pTpHpW	dilationTr  r  r  r  r  r  r  r  r  c           
      J   	
  j                   }t        j                  dkD  xr dkD  xr dkD  fd       t        j                  dkD  xr dkD  xr dkD  fd       t        j                  dkD  xr dkD  xr dkD  fd       t        j                  |dv  fd       t        |      D ]:  |dk(  rdk(  rt        j                   j	                        dkD   fd       < |r/t        j                  k\  xr k\  xr k\  fd	       t        j                  d
z  k\  xr d
z  
k\  xr d
z  	k\  	
fd       t        j                  dk\  xr dk\  xr dk\  fd       y )Nr   c                      d d  d S )Nz5kernel size should be greater than zero, but got kT: z, kH: z, kW: r2   )r  r  r  s   r,   rN   z$pool3d_shape_check.<locals>.<lambda>  #    $fRDrd, r.   c                      d d  d S )Nz0stride should be greater than zero, but got dT: z, dH: z, dW: r2   )r  r  r  s   r,   rN   z$pool3d_shape_check.<locals>.<lambda>  r  r.   c                      d d  d S )Nz9dilation should be greater than zero, but got dilationT: z, dilationH: z, dilationW: r2   )r  r  r  s   r,   rN   z$pool3d_shape_check.<locals>.<lambda>  s$    #M)M)V r.   r  c                  &      dj                    S )Nz/: Expected 4D or 5D tensor for input, but got: r  )r  r   s   r,   rN   z$pool3d_shape_check.<locals>.<lambda>  s    7)J5;;-X r.   r  c                  L      dj                    dj                         dS )NzZ: Expected input's non-batch dimensions to have positive length, but input has a shape of z and non-batch dimension z has length zero!)r   r   r  r   r   s   r,   rN   z$pool3d_shape_check.<locals>.<lambda>  s3    ) --2[[M+EJJqM?:KM r.   c                  .    d d  d d d d dS )Nzinput image (T: r  r  z ) smaller than kernel size (kT:  kH:  kW: rc   r2   )r  r  r  r  r  r  s   r,   rN   z$pool3d_shape_check.<locals>.<lambda>  s9    "5'gYd6( C$$&4uRDbT< r.   r   c                  ,    d d d  d d d S )NzHpad should be smaller than or equal to half of kernel size, but got kT: r  r  z padT: z padW: z padH: r2   )r  r  r  r  r  r  s   r,   rN   z$pool3d_shape_check.<locals>.<lambda>  s6    $eB4uRDt72$gbTK r.   r   c                  :    d d d  d d d d d dS r  r2   )r  r  r  r  r  r  r  s   r,   rN   z$pool3d_shape_check.<locals>.<lambda>  sI    !'!E7!G9AfX F((/y%'!F8 L'( r.   )r   r?   rP   r   r   )r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   s   `````````````````````  @r,   r  r    s   0 ::D	LL
Q$26$b1f	
 
LL
Q$26$b1f	
 
LLA9)a-9IM	
 
LLX
 4[ 
19aJJqMA	
	
 RK:GrM:fl 	
 
LL
Q"6a26"q&B,	
 	
 
LL
3v{3w!|	
 	
r.   c                 j   | j                   }t        | |||||||	|
||||||||||||       t        |||dz
  |       t        |||dz
  |       t        |||dz
  |       t        |||dz
  |       t        |||dz
  |       t        |||dz
  |       t        |||dz
  |       t        |||dz
  |       y )Nr  r   r   r   r   r  r  )r   r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   s                           r,   max_pool3d_backward_shape_checkr    s    2 ::D








+0 ;dQh8;dQh6;dQh8;dQh77D$(G47D$(E27D$(G47D$(F3r.   c                     | j                   }t        | ||||||||	|
|ddd|||||||d       t        |||dz
  |       t        |||dz
  |       t        |||dz
  |       t        |||dz
  |       y )Nr   Tr  r   r   r  )r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   s                       r,   r  r  C  s    * ::D








			-2 ;dQh8;dQh6;dQh8;dQh7r.   c                    d } |d|      \  }}t        j                  t        |      dv d        t        |      dk(  r||}
}	n |d|      \  }	}
 |d|      \  }} |d|      \  }}| j                  d	      }| j                  d
      }| j                  d      }t	        j
                  |       }|t         j                  k(  r)t        j                  | j                         dk(  d        nR|t         j                  k(  r(t        j                  | j                         dv d        nt        j                  dd        t        ||||	||      }t        ||||
||      }t        | |||	|
||||||||||       |||fS )Nc                      t        j                  t        |      dv  fd       |d   }t        |      dk(  r|n|d   }||fS )Nr  c                      d  dS )Nzmax_pool2d: r  r2   r  s   r,   rN   zEmax_pool2d_checks_and_compute_shape.<locals>.unpack.<locals>.<lambda>  r  r.   r   r   r  r  s   `   r,   r  z3max_pool2d_checks_and_compute_shape.<locals>.unpack}  r  r.   rL  r  c                       y)NzOmax_pool2d: stride must either be omitted, a single int, or a tuple of two intsr2   r2   r.   r,   rN   z5max_pool2d_checks_and_compute_shape.<locals>.<lambda>  rV   r.   r   r   r  rB  r  r}  r   r  c                       y)NzMnon-empty 4D (batch mode) tensor expected for input with channels_last layoutr2   r2   r.   r,   rN   z5max_pool2d_checks_and_compute_shape.<locals>.<lambda>  rV   r.   r  c                       y)Nz9non-empty 3D or 4D (batch mode) tensor expected for inputr2   r2   r.   r,   rN   z5max_pool2d_checks_and_compute_shape.<locals>.<lambda>  rV   r.   Fc                       y)Nz?Unsupport memory format. Supports only ChannelsLast, Contiguousr2   r2   r.   r,   rN   z5max_pool2d_checks_and_compute_shape.<locals>.<lambda>  rV   r.   )r?   rP   r   r   r7   rT  rU  ro   r   r  r  )r   rL  r   r  rB  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  s                        r,   r  r  y  s    M;/FB	LLFy a 6{aRB&)B	7+JD$!*h7Iy**R.K**R.KBJ//6M+++IIK1c	
 
%11	1IIK6!O	

 	U	

 (Rr9iXL&z2tRIVK



$ k11r.   c                 |    t        |||||      \  }t        j                  j                   j                  k(   fd       |j                  fd}	 |	         |	|       t        j                        }
t        j                  j                  j                  j                  |
      S )Nc                  <    dj                    d j                    S )NzExpected dtype z  for `gradOutput` but got dtype ry   r  s   r,   rN   z7meta_max_pool2d_with_indices_backward.<locals>.<lambda>  s     /$**-MkN_N_M`a r.   c                 l    t        | dz
         t        | dz
         t        | dz
         y )Nr   r   r   )r  )r  r  r   r  r  s    r,   _check_dim_sizez>meta_max_pool2d_with_indices_backward.<locals>._check_dim_size  s9    q$q,7q$q,7q$q+6r.   r8  )
r  r?   rP   rG   r   r7   rT  rt   r   rl   )r  r   rL  r   r  rB  r  r   r  r  r   r  r   r  r  s   ``         @@@@r,   %meta_max_pool2d_with_indices_backwardr    s     	,k67Hi		
 
LL

k'''a
 L99D7
 K G//5M;;

jj{{#	 r.   c                    t        | |||||      \  }}}| j                         dk(  r| j                  d      nd}	t        j                  |       }
| j                         dk(  r|||g}n|	|||g}t        j                  || j                  | j                  |
      t        j                  |t
        j                  | j                  |
      fS r  )
r  ro   r   r7   rT  r?   rt   rG   rl   r   r  s               r,   meta_max_pool2d_with_indicesr    s     	,{FGXy		
  %yy{a/UZZ^QF//6Myy{a\;7\;?++<<'		
 	++<<'		
 r.   c           	         
 t        j                   j                  dv  fd        j                  }t        |dz
  |      D ]?  
t        j                   j	                  
      dkD  d j	                          d
 d       A t        j                  t              dk(  d	        t        j                  t        |      dk(  d
         j	                  d      } j	                  d       j	                  d      |dk(  r j	                  d      }nd}t        j                   j                  j                  k(  d        t        j                  j                  dk(  fd       j	                  d      }j	                  d      }j	                  d      
t        j                  ||k\  d       t        j                  ||k(  d        t        j                  
dk(  
fd       t        j                  |d   d   z   dz
  k  fd       t        j                  |d   d   z   dz
  k  fd        j                         dk(  r|||d   |d   g}	n||d   |d   g}	t        j                  |	 j                   j                        t        j                  |	t         j                   j                        fS )Nr  c                  "    d j                    S )Nz:fractional_max_pool2d: Expected 3D or 4D tensor, but got: r  self_s   r,   rN   z,meta_fractional_max_pool2d.<locals>.<lambda>  s    LUZZLY r.   r   r   z^fractional_max_pool2d: Expected input to have non-zero  size for non-batch dimenions, but got r  z emptyr   c                       y)NzNfractional_max_pool2d: kernel_size musteither be a single int or tuple of Intsr2   r2   r.   r,   rN   z,meta_fractional_max_pool2d.<locals>.<lambda>   rV   r.   c                       y)NzOfractional_max_pool2d: output_size must either be a single int or tuple of Intsr2   r2   r.   r,   rN   z,meta_fractional_max_pool2d.<locals>.<lambda>%  rV   r.   r  r}  r   r  r   c                       y)Nz6Expect _random_samples to have the same dtype as inputr2   r2   r.   r,   rN   z,meta_fractional_max_pool2d.<locals>.<lambda>3  rV   r.   c                  "    d j                    S )Nz1Expect _random samples to have 3 dimensions got, r  )random_sampless   r,   rN   z,meta_fractional_max_pool2d.<locals>.<lambda>7  s    CNDWDWCXY r.   z=Expect _random_samples.size(0) no less then input batch size.c                       y)Nz<Expect _random_samples.size(1) equals to input channel size.r2   r2   r.   r,   rN   z,meta_fractional_max_pool2d.<locals>.<lambda>C  rV   r.   c                      d  dS )Nz/Expect _random_samples.size(2) equals to 2 got rQ  r2   )r   s   r,   rN   z,meta_fractional_max_pool2d.<locals>.<lambda>E  s    #RSTRUUV!W r.   c                      dd    d  S )Nz%fractional_max_pool2d: kernel height r   z' is too large relative to input height r2   )input_heightrL  s   r,   rN   z,meta_fractional_max_pool2d.<locals>.<lambda>I  s    7A7GGno{n|} r.   c                      dd    d  S )Nz$fractional_max_pool2d: kernel width r   z& is too large relative to input width r2   )input_widthrL  s   r,   rN   z,meta_fractional_max_pool2d.<locals>.<lambda>M  s    6{1~6FFlmxlyz r.   rG   rl   )r?   rP   r   r   r   r   rG   ro   rt   rl   r   )r  rL  r  r  r   input_channelsinput_batchr   cr   r   r  r  s   `` `      @@@r,   meta_fractional_max_pool2dr    s   	LL

fY ::D4!8T" 
JJqMA66;jjl^CSTUSVV\^	

 
LLKA	2
 
LLKA	2 ZZ^N::b>L**R.Kqyjjm	LL~+++H 
LLq Y
 	AAAAAA	LL	[G 
LL	^N 
LLaWX	LLAQ'!+|;} 
LLAQ'!+{:z
 yy{a^[^[^LAA? 	++<<	

 	++<<	
 r.   c                 (   	 t        j                  d       t        j                  j                  t        j
                  k(  fd       t        j                  t              dk(  fd       \  }}t        j                   j                  dv  fd       t        j                   j                  j                  k(   fd       t        d j                        D ].  	t        j                   j                  	      d	kD  	 fd
       0  j                         } j                  dk(  r'|j                  d	      }|j                  |||f      }|S |j                  d	      }|j                  d      }|j                  ||||f      }|S )Nmax_unpooling2d_forward_outc                  "    d j                    S )Nz2elements in indices should be type int64 but got: ry   r  s   r,   rN   z#meta_max_unpool2d.<locals>.<lambda>j  s    DW]]OT r.   r   c                  "    dt                dS )NzMThere should be exactly two elements (height, width) in output_size, but got rg  r  r  s   r,   rN   z#meta_max_unpool2d.<locals>.<lambda>n      ;'(
4 r.   r  c                  $    d j                    dS )NzLInput to max_unpooling2d should be a 3d or 4d Tensor, but got a tensor with  dimensions.r  r  s   r,   rN   z#meta_max_unpool2d.<locals>.<lambda>x  s    %%*ZZL> r.   c                  <    dj                    d j                    S NzBExpected shape of indices to be same as that of the input tensor (z%) but got indices tensor with shape: r  )r   r  s   r,   rN   z#meta_max_unpool2d.<locals>.<lambda>  ,    PQVQ\Q\P] ^229--B r.   r   r   c                  *    dj                    d  dS )NzZmax_unpooling2d(): Expected input to have non-zero size for non-batch dimensions, but got r   being empty.r  )r   r  s   r,   rN   z#meta_max_unpool2d.<locals>.<lambda>  s%     ;;-'7s-I r.   r   )r7   r3  r?   rP   rG   r   r   r   r   r   r   r   r   )
r  r   r  r  r  r   	nchannelsr!  r  r   s
   ```      @r,   meta_max_unpool2dr  c  sW    
!!"?@	LL$T 
LLKA	
 "OGV	LL

f	
 
LLw}}$	
 1ejj! 
JJqMA	

 DzzQIIaL	GV <= M	 1IIaL	GV DEMr.   c                     t        j                  j                  t         j                  k(  d        t        j                   j                  dv  fd       t        j                  t              dk(  fd       t        j                  t              dk(  fd       t        j                  t              dk(  fd       t        j                   j                  j                  k(   fd       t        d	 j                        D ]/  t        j                   j                        d
kD   fd       1 t        j                  d
   d
kD  xr d	   d
kD  xr d   d
kD  fd       y )Nc                       y)Nz(elements in indices should be type int64r2   r2   r.   r,   rN   z._max_unpooling3d_shape_check.<locals>.<lambda>  rV   r.   r  c                  $    d j                    dS )NzLInput to max_unpooling3d should be a 4d or 5d Tensor, but got a tensor with r  r  r  s   r,   rN   z._max_unpooling3d_shape_check.<locals>.<lambda>  s    ^_d_i_i^jjvw r.   r   c                  "    dt                dS )NzVThere should be exactly three elements (depth, height, width) in output_size, but got rg  r  r  s   r,   rN   z._max_unpooling3d_shape_check.<locals>.<lambda>  r  r.   c                  "    dt                dS )NzRThere should be exactly three elements (depth, height, width) in stride, but got: rg  r  r  s   r,   rN   z._max_unpooling3d_shape_check.<locals>.<lambda>  s    dehioepdqq{| r.   c                  "    dt                dS )NzSThere should be exactly three elements (depth, height, width) in padding, but got: rg  r  )r  s   r,   rN   z._max_unpooling3d_shape_check.<locals>.<lambda>  s    efijqfress}~ r.   c                  <    dj                    d j                    S r  r  )r   r   s   r,   rN   z._max_unpooling3d_shape_check.<locals>.<lambda>  r  r.   r   r   c                  .      dj                    d dS )NzI: Expected input to have non-zero size for non-batch dimensions, but got r  r  r  r  s   r,   rN   z._max_unpooling3d_shape_check.<locals>.<lambda>  s*    )  ;;-'7s-I r.   r   c                      d  S )Nz5strides should be greater than zero, but got stride: r2   r  s   r,   rN   z._max_unpooling3d_shape_check.<locals>.<lambda>  s    GxP r.   )	r?   rP   rG   r   r   r   r   r   r   )r   r   r  r   r  r  r   s   ``````@r,   _max_unpooling3d_shape_checkr    s/   	LL$&X 
LL

fw 
LLKA	
 
LLFq| 
LLG~ 
LLw}}$	
 1ejj! 
JJqMA	

 
LLq	A9&)a-9F1IMPr.   c                 Z   t        j                  d       t        | ||||d       | j                         }|\  }}}| j                  dk(  r(|j                  d      }	|j                  |	|||f      }
|
S |j                  d      }|j                  d      }	|j                  ||	|||f      }
|
S )Nmax_unpooling3d_forward_outzmax_unpooling3d()r  r   r   )r7   r3  r  r   r   r   r   )r  r   r  r   r  r   odepthr  r  r  r!  r  s               r,   meta_max_unpool3dr    s     
!!"?@ wVW6I D)FGVzzQIIaL	FGV DE M	 1IIaL	FGV LMMr.   c                 |   t        j                  t        |      dv d        |d   }t        |      dk(  r|n|d   }t        |      dk(  r|n|d   }t        j                  | xs t        |      dv d        |s|n|d   }	|s|nt        |      dk(  r|	n|d   }
|s|nt        |      dk(  r|	n|d   }t        j                  t        |      dv d        |d   }t        |      dk(  r|n|d   }t        |      dk(  r|n|d   }t        j                  t        |      dv d        |d   }t        |      dk(  r|n|d   }t        |      dk(  r|n|d   }t        j                  | j                  d	v d
        | j                  dk(  r| j	                  d      nd}| j	                  d      }| j	                  d      }| j	                  d      }| j	                  d      }t        ||||	||      }t        ||||
||      }t        ||||||      }t        | |||||	|
|||||||||||||d       | j                  dk(  xr& t        j                  |       t         j                  k(  }| j                  dk(  rK| j                  d      }|j                          xr  |j                  t         j                        }||||f}n|||||f}| j                  |      }| j                  |t         j                        }|r@|j                  t         j                        }|j                  t         j                        }||fS )Nr  c                       yNzMmax_pool3d: kernel_size must either be a single int, or a tuple of three intsr2   r2   r.   r,   rN   z.meta_max_pool3d_with_indices.<locals>.<lambda>  rV   r.   r   r   r   c                       yNzQmax_pool3d: stride must either be omitted, a single int, or a tuple of three intsr2   r2   r.   r,   rN   z.meta_max_pool3d_with_indices.<locals>.<lambda>  rV   r.   c                       yNzImax_pool3d: padding must either be a single int, or a tuple of three intsr2   r2   r.   r,   rN   z.meta_max_pool3d_with_indices.<locals>.<lambda>  rV   r.   c                       yNzJmax_pool3d: dilation must be either a single int, or a tuple of three intsr2   r2   r.   r,   rN   z.meta_max_pool3d_with_indices.<locals>.<lambda>  rV   r.   r  c                       yr  r2   r2   r.   r,   rN   z.meta_max_pool3d_with_indices.<locals>.<lambda>  rV   r.   r  r  r  r}  r   zmax_pool3d_with_indices()r  r   ry   )r?   rP   r   r   r   r  r  r7   rT  channels_last_3drN  r]  r   r   r   )r   rL  r   r  rB  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rU  input_channels_last_checkr   r   r   s                                  r,   meta_max_pool3d_with_indicesr    sJ    
LLKF"_ 
QB;1$+a.B;1$+a.B	LL
+c&kV+c vayBc&kQ&6F1IBc&kQ&6F1IB	LLG[ 
B7|q gajB7|q gajB	LLH\ I ]a/	Xa[I ]a/	Xa[I	LL

fK
  %zzQUZZ^AFjjnGJJrNEjjnGZZ^F BIyIE"7BB	9MG!&"b"iKF








#+2 	

aXE77>%BXBXX  zzQ$)OOA$6!)7799
'5500 6 
 	
 eWf5	WeWf=	
//)
$Cooiu{{o;Gff5#9#9f:**5+A+A*B<r.   c                    t        j                  t        |      dv d        |d   }t        |      dk(  r|n|d   }	t        |      dk(  r|n|d   }
t        j                  | xs t        |      dv d        |s|n|d   }|s|	nt        |      dk(  r|n|d   }|s|
nt        |      dk(  r|n|d   }t        j                  t        |      dv d        |d   }t        |      dk(  r|n|d   }t        |      dk(  r|n|d   }t        j                  t        |      dv d        |d   }t        |      dk(  r|n|d   }t        |      dk(  r|n|d   }t        j                  |j                  d	v d
        |j	                  d      }|j	                  d      }|j	                  d      }|j	                  d      }| j	                  d      }| j	                  d      }| j	                  d      }t        || ||||	|
|||||||||||||||d       |j                  dk(  xr& t        j                  |      t         j                  k(  }|j                  dk(  rD|j                  d      }|j                          xr  |j                  t         j                        }|j                  |j                        }|r |j                  t         j                        }|S )Nr  c                       yr  r2   r2   r.   r,   rN   z7meta_max_pool3d_with_indices_backward.<locals>.<lambda>Z  rV   r.   r   r   r   c                       yr  r2   r2   r.   r,   rN   z7meta_max_pool3d_with_indices_backward.<locals>.<lambda>b  rV   r.   c                       yr  r2   r2   r.   r,   rN   z7meta_max_pool3d_with_indices_backward.<locals>.<lambda>j  rV   r.   c                       yr  r2   r2   r.   r,   rN   z7meta_max_pool3d_with_indices_backward.<locals>.<lambda>r  rV   r.   r  c                       yr  r2   r2   r.   r,   rN   z7meta_max_pool3d_with_indices_backward.<locals>.<lambda>z  rV   r.   r  r  r}  r   z"max_pool3d_with_indices_backward()r  r  r   )r?   rP   r   r   r   r  r7   rT  r  rN  r]  r   r   r   )r  r   rL  r   r  rB  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rU  r  r  s                                 r,   %meta_max_pool3d_with_indices_backwardr  L  s    
LLKF"_ 
QB;1$+a.B;1$+a.B	LL
+c&kV+c vayBc&kQ&6F1IBc&kQ&6F1IB	LLG[ 
B7|q gajB7|q gajB	LLH\ I ]a/	Xa[I ]a/	Xa[I	LL

fK
 jjnGJJrNEjjnGZZ^FR Er"Gb!F#








,/6 	

aXE77>%BXBXX  zzQ$)OOA$6!)7799
'5500 6 
 	 -J]]1G1G]H
r.   gridc                 z    t        j                   j                  j                  k(   fd       t        j                   j                  t         j                  k(  xr j                  t         j                  k(   fd       t        j                   j
                  d   j
                  d   k(   fd       t        j                  j
                  d    j                  dz
  k(   fd       t        d j                        D ],  t        j                   j
                     dkD   fd       . y )	Nc                  <    dj                    d j                    S )NzNgrid_sampler(): expected input and grid to be on same device, but input is on z and grid is on rd  r  r   s   r,   rN   z+check_grid_sampler_common.<locals>.<lambda>  s'    \\N"24;;-A r.   c                  <    dj                    d j                    S )NzTgrid_sampler(): expected input and grid to have torch.strided layout, but input has z and grid has )rk   r	  s   r,   rN   z+check_grid_sampler_common.<locals>.<lambda>  s&    nT[[MC r.   r   c                  <    dj                    d j                    S )NzZgrid_sampler(): expected grid and input to have same batch size, but got input with sizes  and grid with sizes r  r	  s   r,   rN   z+check_grid_sampler_common.<locals>.<lambda>  s'      %},A$**O r.   r   r   c                  B    dj                   dz
   d j                   S )Nz+grid_sampler(): expected grid to have size r   z, in last dimension, but got grid with sizes )r   r   r	  s   r,   rN   z+check_grid_sampler_common.<locals>.<lambda>  s,    9%**q.9I J226**? r.   c                  *    dj                    d  dS )NzYgrid_sampler(): expected input to have non-empty spatial dimensions, but input has sizes r  r  r  r  s   r,   rN   z+check_grid_sampler_common.<locals>.<lambda>  r  r.   )r?   rP   rl   rk   rk  r   r   r   )r   r  r   s   ``@r,   check_grid_sampler_commonr    s    	LL#	
 
LL%F$++*F	
 
LLA$**Q-'	
 
LL

2%**q.(	
 1ejj! 
KKNQ	

r.   c                       e Zd ZdZdZdZy)GridSamplerInterpolationr   r   r   N)re   
__module____qualname__BILINEARNEARESTBICUBICr2   r.   r,   r  r    s    HGGr.   r  interpolation_modec                     t        j                   j                  dk(  xr  j                  j                  k(   fd       t        j                   j                  dk(  xr |t        j                  j
                  k(   d        y )Nr  c                  <    dj                    d j                    S )Nzdgrid_sampler(): expected 5D input and grid with same number of dimensions, but got input with sizes r  r  r	  s   r,   rN   z'check_grid_sampler_3d.<locals>.<lambda>  s&    449KK=#DJJ<1 r.   c                       y)Nz<grid_sampler(): bicubic interpolation only supports 4D inputr2   r2   r.   r,   rN   z'check_grid_sampler_3d.<locals>.<lambda>  rV   r.   )r?   rP   r   r  r  re  )r   r  r  s   `` r,   check_grid_sampler_3dr    sp    	LL

a3EJJ$))3	
 
LLJJ!O M"&>&F&F&L&LL	
 	Or.   c                     |d   }|r&t        j                  |t         j                        }nd }t        j                  |t         j                        }	||	fS Nr   r   )r?   r  r   r   
r  r   r  r  padding_modealign_cornersrA  input_requires_gradr  	grad_grids
             r,   grid_sampler_2d_backward_metar#    sQ     &a.%%e5;R;RS

  U5L5LMI	""r.   c                     t        | |       t        | ||       | j                  d   }| j                  d   }|j                  d   }|j                  d   }|j                  d   }	| j                  |||||	f      S )Nr   r   r   r   )r  r  r   r   )
r   r  r  r  r   r5  Cout_Dout_Hout_Ws
             r,   grid_sampler_3dr)    sv     eT*%'9:AAAAJJqMEJJqMEJJqME??Aq%677r.   r"  c                     t        ||       t        |||       |d   }|r&t        j                  |t        j                        }nd }t        j
                  |t        j                        }	||	fS r  )r  r  r?   r  r  r   r  s
             r,   grid_sampler_3d_backwardr+    sm     eT*%'9:%a.%%!?!?

 
  U5S5STIy  r.   c                     |j                  dd       }|st        j                  |      }||d<   t        j                  | g|i |S )NrG   )rF   r7   	get_dtyper?   rt   )r   r"  r9   rh  rG   s        r,   fullr.  1  sE    JJw%E
+F7O;;t-d-f--r.   c                 N   |t         j                  k(  rt        j                  |d u d        t        j                  d|| j                  n|||| j
                  n||      }| j                  r>|j                  | j                         | j                         | j                                n/|j                  | j                         | j                         d       |j                  d       |S t        j                  j                  | |||||      }|j!                  d       |S )Nc                       y)Nz9memory format option is only supported by strided tensorsr2   r2   r.   r,   rN   zzeros_like.<locals>.<lambda>G  rV   r.   r   r   Trb  )r?   
sparse_coorP   rt   rG   rl   	is_sparsesparse_resize_and_clear_r   
sparse_dim	dense_dimro   _coalesced_r#   r   r   fill_)r   rG   rk   rl   rm   r   rX  s          r,   r  r  ;  s     !!!T!O	

 kk %$**5"(.4;;f!
 >>((		T__.0@ ((dhhj!D

//
!
!# " C IIaLJr.   c                      j                         }t        j                  |dk7  d        dk\  rn|z    j                        }t        j                   |kD  xs |k\    fd       dk\  rn|z   t	         j                               }t	         j                               } j                         |   z  z   }|= |=  j                  |||      S )Nr   c                       y)Nz-select() cannot be applied to a 0-dim tensor.r2   r2   r.   r,   rN   zmeta_select.<locals>.<lambda>m  rV   r.   c                  6    d dj                          d  S )Nzselect(): index z! out of range for tensor of size z at dimension r   ro   r{   r   s   r,   rN   zmeta_select.<locals>.<lambda>u  s%    "5')J99;-~cU, r.   )ro   r?   r~   r   r   r   r   r   )r   ro   r{   r   r   new_sizer   new_storage_offsets   ```     r,   meta_selectr>  h  s    88:D		?
 #sTzC99S>D	Vd]+etm,	, aZEUT\EDIIK Hdkkm$J,,.C1HH3??8Z1CDDr.   c                 ,    t        j                  |       S r)   r7   clone_preserve_strides)r   r   ro   r{   s       r,   meta_select_scatterrB        ''--r.   c                 ,    t        j                  |       S r)   r@  )r   r   ro   rg   rf   steps         r,   meta_slice_scatterrF    rC  r.   dim_post_exprwrap_scalarc                 v    |dk  r|sJ d}| }|dz
  }| |k  s| |kD  rJ d|  d| d| d       | dk  r| |z  } | S )Nr   r   zdim z out of bounds (rb   rc   r2   )ro   rG  rH  rj  rk  s        r,   r   r     sm    {.C
!
Cc	S3YR4u4DSEC5PQ)RR'
Qw}Jr.   c                 J    | j                         dk(  rdS | j                  |   S r  r  )r  ro   s     r,   ensure_nonempty_sizerK    s!    11.!''#,.r.   c                 :    t         j                         d      }t        j                         d      }t        j                  ||k(  d        t	        |      D ];  k7  s	t        j                  t              t               k   fd       = y )Nr   c                       y)NzDIndex tensor must have the same number of dimensions as input tensorr2   r2   r.   r,   rN   z$gather_shape_check.<locals>.<lambda>  rV   r.   c                  N    d dj                    dj                    d  z   S )Nz!Size does not match at dimension z expected index  to be smaller than self  apart from dimension r  )ro   r   r{   r   s   r,   rN   z$gather_shape_check.<locals>.<lambda>  s6    ;A3>Nu{{m\-djj\9OPSuUV r.   )rk  ro   r?   rP   r   rK  )r   ro   r{   	self_dims
index_dimsr   s   ```  @r,   gather_shape_checkrS    s    DHHJ"IUYY[!$J	LLZV 9 8LL$UA.2FtQ2OOVr.   c                    t        || j                               }j                         dk(  }|sAt        j                  j
                  t        j                  k(  fd       t        | |       | j                  j                        S )Nr   c                  "    d j                    S )Nz2gather(): Expected dtype int64 for index, but got ry   rz   s   r,   rN   zmeta_gather.<locals>.<lambda>  s    HV r.   )
r   ro   r   r?   rP   rG   r}   rS  r   r   )r   ro   r{   sparse_gradwrapped_dimis_index_emptys     `   r,   meta_gatherrY    sh     dhhj1K[[]a'NKK5::%V	
 	4e4>>%++&&r.   c                     |r6| dk(  ry| dk(  ry| dk(  ry| dk(  ry| d	k(  ry
t        j                  dd        y | dk(  ry| dk(  ryt        j                  dd        y )Nsum
REDUCE_ADDr  REDUCE_MULTIPLYmeanREDUCE_MEANamaxREDUCE_MAXIMUMaminREDUCE_MINIMUMFc                       y)Nz=reduce argument must be either sum, prod, mean, amax or amin.r2   r2   r.   r,   rN   z#get_operator_enum.<locals>.<lambda>  rV   r.   addmultiplyc                       y)Nz/reduce argument must be either add or multiply.r2   r2   r.   r,   rN   z#get_operator_enum.<locals>.<lambda>  rV   r.   r  )reduce_use_new_optionss     r,   get_operator_enumrj    s{    e$ ##S	
 	e
"$UUVr.   c                      |j                         dk7  r4t        j                  |j                  t        j                  k(   fd       |1t        j                  |j                  |j                  k(   fd       y y )Nr   c                        dS )Nz"(): Expected dtype int64 for indexr2   method_names   r,   rN   z,scatter_gather_dtype_check.<locals>.<lambda>  s    {m#EF r.   c                        dS )Nz0(): Expected self.dtype to be equal to src.dtyper2   rm  s   r,   rN   z,scatter_gather_dtype_check.<locals>.<lambda>  s    {m#ST r.   )r   r?   rP   rG   r}   )rn  r   r{   src_opts   `   r,   scatter_gather_dtype_checkrq    s\    {{}KK5::%F	

 JJ'--'T	
 r.   c                     t        | d      S r   )rk  r   s    r,   ensure_nonempty_dimrs    s    sA;r.   c                     j                         dk(  ry t        j                  t         j	                               t        j	                               k(  d        d}t         j	                               }t        |      D ]'  }t        |      }|k(  r|t         |      kD  s%d} n |s1/t        |      D ]!  }t        |      }|t        |      kD  sd} n ft        j                  t         j	                               t        j	                               k(  d        t        j                  |  fd       y t        j                  |  fd       y )Nr   c                       yNzCIndex tensor must have the same number of dimensions as self tensorr2   r2   r.   r,   rN   z%scatter_shape_check.<locals>.<lambda>  rV   r.   FTc                       yrv  r2   r2   r.   r,   rN   z%scatter_shape_check.<locals>.<lambda>  rV   r.   c                  b    dj                    dj                    d  dj                    z   S )NExpected index rO  rP  z and to be smaller than src r  )ro   r{   r   rp  s   r,   rN   z%scatter_shape_check.<locals>.<lambda>  s8    oekk]2KDJJ<X&se+GWX r.   c                  H    dj                    dj                    d  z   S )Nry  rO  rP  r  r;  s   r,   rN   z%scatter_shape_check.<locals>.<lambda>  s,    oekk]2KDJJ<X&se,- r.   )r   r?   rP   rs  ro   r   rK  )r   ro   r{   rp  is_wrong_shaperQ  r   index_d_sizes   ````    r,   scatter_shape_checkr}    sH   {{}	LLDHHJ'+>uyy{+KKU
 N#DHHJ/I 9 +E158.tQ77!N g1y! 	A/q9L27A>>!%		 
+/B599;/OOY	
 	X	
 	-	
r.   c                     t        || j                               }t        d| ||       t        | |||       |t	        ||       y y )Nscatter)r   ro   rq  r}  rj  )r   ro   r{   r   rh  ri  rW  s          r,   scatter_meta_implr    sE     dhhj1Ky$s;k5#6'?3 r.   c                 V    t        | |||d       | j                  | j                        S Nre  r  r   r   r   ro   r{   r   s       r,   meta_scatter_addr  %  s%    dCU3>>$**%%r.   c                 $    t        | |||d       | S r  r  r  s       r,   meta_scatter_add_r  +  s    dCU3Kr.   c                     t        |t        j                        r|nd }t        | ||||       | j	                  | j
                        S r)   )rY   r?   r   r  r   r   r   ro   r{   src_or_valuer%  r   s         r,   meta_scatterr  1  s;     %\5<<@,dCdCV4>>$**%%r.   c                 `    t        |t        j                        r|nd }t        | ||||       | S r)   )rY   r?   r   r  r  s         r,   meta_scatter_r  @  s-     %\5<<@,dCdCV4Kr.   r  queryr   re  	logsumexp	cum_seq_q	cum_seq_kmax_qmax_k	dropout_p	is_causalphilox_seedphilox_offsetr%  c                 J   t        j                  |j                  dd            j                  dd      }t        j                  |j                  dd            j                  dd      }t        j                  |j                  dd            j                  dd      }|||fS r  )r?   r   r  )r  r  r   re  r   r  r  r  r  r  r  r  r  r  r%  grad_qgrad_kgrad_vs                     r,   'meta__scaled_dot_product_flash_backwardr  N  s    , eooa34>>q!DFcmmAq12<<QBFeooa34>>q!DF66!!r.   	attn_maskc                    | j                  d      }| j                  d      }| j                  d      }	| j                  d      }
t        j                  ||	||
f| j                  | j                        j                  dd      }t        j                  ||	|ft        j                  | j                        j                  dd      }||fS )Nr   r   r   r   r  )r   r?   rt   rG   rl   r  rC   )r  r   re  r  r  r  r%  r   	num_headsmax_seqlen_batch_qhead_dim	attentionr  s                r,   0meta__scaled_dot_product_flash_attention_for_cpur  j  s     AJ

1IAzz!}H	'H=kk|| i1o	 
 	

 kk|| i1o  	 r.   c
                    |j                  d      }
|j                  d      }|j                  d      }|j                  d      }|j                  d      }t        j                  |
|||fd|j                  |j                        }t        j                  |
|||fd|j                  |j                        }t        j                  |
|||fd|j                  |j                        }|||fS )Nr   r   r   r   r   r   r   r   r  )r   r?   empty_permutedrG   rl   )r  r  r   re  r   r  r  r  r  r%  r   r  r  len_qlen_kr  r  r  s                     r,   9meta__scaled_dot_product_flash_attention_for_cpu_backwardr    s    & AJ

1Izz!}HJJqMEHHQKE!!	Yx0kk||	F !!	Yx0iizz	F !!	Yx0kk||	F 66!!r.   	attn_biasgrad_input_maskc                    |j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }t        j                  ||||fd|j                  |j                        }t        j                  ||||fd|j                  |j                        }t        j                  ||||fd|j                  |j                        }d }|~|
d   ry|j                  d      }|dz  dk(  r|n
|dz   |dz  z
  }t        |j                               }||d<   t        j                  ||j                  |j                        }|d	d |f   }||||fS )
Nr   r   r   r   r  r  r   r  .)r   r?   r  rG   rl   r   rt   )r  r  r   re  r  r   r  r  r  r  r  r  r%  r   r  r  r  
head_dim_vr  r  r  r  	grad_biaslastDimlastDimAligned	new_sizess                             r,   +meta__scaled_dot_product_efficient_backwardr    s{   ( AJ

1IJJqMEzz!}HAJHHQKE!!	Yx0kk||	F !!	Yx0iizz	F !!	Yz2kk||	F I!3..$$+bLA$57R<'TV,;V)*	&	"KKY__Y5E5E
	 c8G8m,	669,,r.   c                     t        j                  |      }t        j                  |      }t        j                  |      }|||fS r)   r  )r  r  r   re  r   r  r  r  r  r  r  r  r  r  r%  
grad_querygrad_key
grad_values                     r,   meta__flash_attention_backwardr    sA    , !!%(J$H!!%(Jx++r.   cu_seqlens_qcu_seqlens_kmax_seqlen_qmax_seqlen_kcustom_mask_typebias_requires_gradnum_splits_keyc                    t        j                  |      }t        j                  |      }t        j                  |      }|z|j                  d      }|dz  dk(  r|n
|dz   |dz  z
  }t        |j                               }||d<   t        j                  ||j
                  |j                        }|dd |f   }n!t        j                  d|j                        }||||fS )Nr   r  r   r  .r2   rd  )r?   r   r   r   rt   rG   rl   )r  r  r   re  r	  r  r  r  r  r  r  r  r  r  r  r%  r  r  r  r  r  r  r  r  s                           r,   "meta__efficient_attention_backwardr    s    0 !!%(J$H!!%(J))B-$+bLA$57R<'TV,;V%	&	"KK	DKKP	c8G8m,	KK5<<8	xY66r.   r  scale_ascale_bscale_resultuse_fast_accumc                     d }d }	d }
t        j                   j                         dk(  xr j                         dk(   fd       t        j                   | j                               d        t        j                   |	j                  j                               d        t        j                   j                  d      d	z  d
k(   fd       t        j                  j                  d
      d	z  d
k(  xr j                  d      d	z  d
k(  fd       t        j                   |
 j                        xr  |
j                         fd       ||n j                  }t        j                   j                  d
      j                  d      | j                        t        j                  dt         j                   j                        fS )Nc                 ,    | d   | d   kD  xr | d   dk(  S r  r2   r  s    r,   is_row_majorz$meta_scaled_mm.<locals>.is_row_majorM  s"    ay6!9$7a7r.   c                 ,    |d   dk(  xr |d   | d   k(  S r  r2   )r   r   s     r,   is_col_majorz$meta_scaled_mm.<locals>.is_col_majorP  s"    ayA~7&)uQx"77r.   c                     | t         j                  t         j                  t         j                  t         j                  fv S r)   )r?   float8_e4m3fnfloat8_e5m2float8_e4m3fnuzfloat8_e5m2fnuzry   s    r,   is_fp8_typez#meta_scaled_mm.<locals>.is_fp8_typeS  s8    !!!!	
 
 	
r.   r   c                  L    dj                          d j                          S )Nz%Inputs must be 2D but got self.dim()=z and mat2.dim()=r   r  r   s   r,   rN   z meta_scaled_mm.<locals>.<lambda>]  s'    7
|CSTXT\T\T^S_` r.   c                       y)Nzself must be row_majorr2   r2   r.   r,   rN   z meta_scaled_mm.<locals>.<lambda>a  rV   r.   c                       y)Nzmat2 must be col_majorr2   r2   r.   r,   rN   z meta_scaled_mm.<locals>.<lambda>e  rV   r.   r   r  r   c                  ,    d j                  d       S )NzBExpected self.size(0) to be divisible by 16, but got self.size(1)=r   r   r   s   r,   rN   z meta_scaled_mm.<locals>.<lambda>i  s    TUYU^U^_`UaTbc r.   c                  "    d j                    S )Nz>Expected both dimensions of mat2 to be divisble by 16 but got r  )r  s   r,   rN   z meta_scaled_mm.<locals>.<lambda>m  s    PQUQ[Q[P\] r.   c                  <    dj                    d j                    S )Nz8Expected both inputs to be fp8 types but got self.dtype=z and mat2.dtype=ry   r  s   r,   rN   z meta_scaled_mm.<locals>.<lambda>q  s"    J4::,Vfgkgqgqfrs r.   r  r2   )
r?   rP   ro   r   r   r   rG   rt   rl   r  )r   r  r	  r  r  r  r  r  r  r  r  
_out_dtypes   ``          r,   meta_scaled_mmr  B  sp   88
 
LL
a+DHHJ!O` 
LLT[[]#( 
LLTZZ/( 
LL		!rQc 
LL		!rQ9499Q<"#4#9] 
LLDJJ;K

$;s (3J;;		!diil*T[[{{2U]]4;;?@ @r.   c                 Z    t        | ||||d       | j                  | j                        S NT)ri  r  r   ro   r{   r   r%  r#  s         r,   meta_scatter_reduce_twor  y  s)     dCVTJ>>$**%%r.   c                 (    t        | ||||d       | S r  r  r  s         r,   meta_scatter_reduce__twor    s    dCVTJKr.   c                t    t        j                  d j                         cxk  xr dk  nc  fd        j                         dk(  r0t        j                  |t         j                   j
                        S t        j                   j                  d      |t         j                   j
                        S )Nr   r   c                  *    d j                          S )Nz@The probabilty distributions dimensions must be 1 or 2, but got r   r  s   r,   rN   z"meta_multinomial.<locals>.<lambda>  s    RSXS\S\S^R_` r.   r   r  )r?   rP   ro   rt   r}   rl   r   )r   num_samplesreplacementr   s   `   r,   meta_multinomialr    s|     
LL	EIIK1` yy{a{{;ejjNN;;

1{%**U\\ r.   c                 "    d}| D ]  }||z  }	 |S r   r2   )vsr  vs      r,   multiply_integersr    s$    	A 	QHr.   c                 L    t        j                  t              k(  fd       dz   t        j                  t               k(   fd       t        j                  t        d  dd  D              xr t        d D               fd        d d \  }}||gS )Nc                  &    d  dt               S )Nz%It is expected output_size equals to , but got size r  )num_spatial_dimsr  s   r,   rN   z'upsample_common_check.<locals>.<lambda>  s    78H7IY\]hYiXjk r.   r   c                  &    d  dt               S )Nz$It is expected input_size equals to r  r  )expected_input_dimsr  s   r,   rN   z'upsample_common_check.<locals>.<lambda>  s    67J6K?[^_i[jZkl r.   c              3   &   K   | ]	  }|d kD    ywr   Nr2   r[   r`  s     r,   r]   z(upsample_common_check.<locals>.<genexpr>  s     *aAE*   c              3   &   K   | ]	  }|d kD    ywr  r2   r  s     r,   r]   z(upsample_common_check.<locals>.<genexpr>  s     2NQ1q52Nr  c                      d  d S )NzDInput and output sizes should be greater than 0, but got input size z and output size r2   )r  r  s   r,   rN   z'upsample_common_check.<locals>.<lambda>  s      \!2;-A r.   )r?   rP   r   rO  )r  r  r  r  channelsr  s   ```  @r,   upsample_common_checkr    s    	LLK,,k +Q.	LLJ..l
 
LL*:ab>**Ns2N+2N/N	A ""1~FHH+{++r.   c                 4    t        j                   j                         dk7  xs t         j	                         dd         fd       t         j	                         |d      } j                  |      j                  t        j                               S )Nr   r   c                  *    d j                          S )Nz>Non-empty 3D data tensor expected but got a tensor with sizes r   r  s   r,   rN   z$upsample_nearest1d.<locals>.<lambda>      PQVQ[Q[Q]P^_ r.   r  r   
r?   rP   r   r  r   r  r   r   r7   rT  )r   r  scalesfull_output_sizes   `   r,   upsample_nearest1dr         
LLA/

QR0@A_ -

kA ??+,//11%8 0  r.   c                     t        j                   j                         dk7  xs t         j	                         dd         fd       t         j	                         |d      } j                  |      }t        j                         } j                  \  }}}} j                  j                  dk(  r|dk  rt         j                  }|j                  |      }|S )	Nr   r   c                  *    d j                          S Nz>Non-empty 4D data tensor expected but got a tensor with sizes r   r  s   r,   rN   z$upsample_nearest2d.<locals>.<lambda>  r  r.   r   r  r/  r  r   )r?   rP   r   r  r   r  r   r7   rT  r   rl   rd   r   r   )	r   r  scales_hscales_wr  r   r   r:   
n_channelss	   `        r,   upsample_nearest2dr    s     
LLA/

QR0@A_ -

kA __-.F //6M  ++Az1a||F"zA~//];FMr.   r  r  r  r  c                 X    t        ||d      t        j                   j                  dk(   fd       t	        d      D ]2  t        j                   j                           k(   fd       4  j                  |      j                  t        j                               S )Nr   r  r  c                  "    d j                    S )NzFExpected grad_output to be a tensor of dimension 4 but got: dimension r  r  s   r,   rN   z-upsample_nearest2d_backward.<locals>.<lambda>  s    XYdYiYiXjk r.   c            
      D    d d     d dj                         S )NzCExpected grad_output to have the same shape as output; output.size(z) = z but got grad_output.size(r   )r  r  r   s   r,   rN   z-upsample_nearest2d_backward.<locals>.<lambda>  s>      !s$'7':&;,QCtK4D4DQ4G3HJ r.   r   )
r  r?   rP   r   r   r   r   r   r7   rT  )r  r  r  r  r  r  r   s   `    @@r,   upsample_nearest2d_backwardr
    s     -K! 
LLAk 1X 
Q#3A#66	

   ,//11+> 0  r.   c                 4    t        j                   j                         dk7  xs t         j	                         dd         fd       t         j	                         |d      } j                  |      j                  t        j                               S )Nr   r   c                  *    d j                          S )Nz>Non-empty 5D data tensor expected but got a tensor with sizes r   r  s   r,   rN   z$upsample_nearest3d.<locals>.<lambda>  r  r.   r   r  r   r  )r   r  scales_dr  r  r  s   `     r,   upsample_nearest3dr    r  r.   c                    t        j                  |       t        j                  | t         j                        }}||t        |t              sJ t        |t              sJ |j
                  }|j                         }	t        ||      }t        ||      }|j                  ||	       |j                  ||	       t        ||       t        ||       ||fS ||fS )Nry   )rK  rL  )
r?   r   r   rY   r   r   r   r   r  r   )
r   stablero   
descendingr   r   r  r   r   
out_strides
             r,   	meta_sortr    s     D!5#3#3D#LqAg1&*---':... GG	XXZ
"695#GY79j1Iz2F3G4wa4Kr.   )ro   r  c                &    t        | |||      d   S )N)r  ro   r  r   )r  )r   r  ro   r  s       r,   meta_argsortr  (  s    T&cjI!LLr.   c           	          t        j                   j                  dk(   fd       t        j                   j                  j                  k(   fd        j	                  d      t        j                  j                  dk(  fd       t        j                  j                         k(  fd       t        j                  j                  j                  k(  fd       t        j                  j                  dk(  fd        j	                  d	      z  z  t        j                  j                         k(   fd
       t        j                  t         fdfD              d        y )Nr   c                  "     j                    dS Nz != 2r  )input_gatess   r,   rN   z%rnn_cell_checkSizes.<locals>.<lambda>0      ;3C3C2DE0J r.   c                  :    j                    d j                    S N != r  )hidden_gatesr  s   r,   rN   z%rnn_cell_checkSizes.<locals>.<lambda>3  s     ;$$%T,*<*<)=> r.   r   c                  "     j                    dS )Nz != 1r  )
input_biass   r,   rN   z%rnn_cell_checkSizes.<locals>.<lambda>7  s    joo5Fe3L r.   c                  .    j                          d  S r  r  )
gates_sizer   s   r,   rN   z%rnn_cell_checkSizes.<locals>.<lambda>:  s    z'')*$zl; r.   c                  :    j                    d j                    S r  r  )hidden_biasr   s   r,   rN   z%rnn_cell_checkSizes.<locals>.<lambda>>  s     z''([->->,?@ r.   c                  "     j                    dS r  r  )prev_hiddens   r,   rN   z%rnn_cell_checkSizes.<locals>.<lambda>@  r  r.   r   c            
      `    j                          dj                  d       d d d  d
S )Nr  r   z * z // z (aka rc   )r   r   )expected_prev_hidden_numelfactorr"  r  r&  s   r,   rN   z%rnn_cell_checkSizes.<locals>.<lambda>D  sB    ;$$&'tK,<,<Q,?+@J<tTZS[[ab|a}}~ r.   c              3   P   K   | ]  }|j                   j                   k(    y wr)   rd  )r[   r<   r  s     r,   r]   z&rnn_cell_checkSizes.<locals>.<genexpr>G  s(      
 HH***
s   #&c                       y)Nz%expected all inputs to be same devicer2   r2   r.   r,   rN   z%rnn_cell_checkSizes.<locals>.<lambda>K  rV   r.   )r?   rP   r   r   r   r   rO  )r  r  r   r$  r)  r&  r(  r"  s   ``````@@r,   rnn_cell_checkSizesr,  -  s@    
LL!!Q&(JK	LL\///> !!!$JZ__)+LM*,;	
 	 1 11@	
 
LL!!Q&(JK!,!1!1!!4z!AV!K	LL99 
LL 
"J[I
 	
 	8r.   c                 
   t        | |||d|       t        j                  | t        j                        }t        j                  |t        j                        }t        j                  |t        j                        }|||fS )Nr  r   )r,  r?   r   r   )r  r  cxr   r$  	workspacehycys           r,   _thnn_fused_lstm_cell_metar2  O  sk     \:{ArR  E<S<STI			"E,C,C	DB			"E,C,C	DBIr.   c                 b   t        |      dk7  }|r t        |      }|d   }| j                  d   }nB|
r| j                  d   n| j                  d   }|
r| j                  d   n| j                  d   }d}|rdnd}|dk7  r|n|}|r|||z  g}n|
r||||z  gn||||z  g}| j                  |      }|	|z  ||g}|"t        j                  d| j
                        }n|j                  |      }|j                  |	|z  ||g      }|rdnd}| j                  |t        j                        }|||||fS )Nr   r   r   r   rd  ry   )r   r   r   r?   rt   rl   rj  )r   r  weight_stride0
weight_bufhxr.  r  hidden_size	proj_size
num_layersbatch_firstdropouttrainbidirectionalbatch_sizesdropout_stateis_input_packed
seq_length
mini_batchbatch_sizes_sumnum_directionsout_sizer   r   
cell_shaper1  r0  reserve_shapereserves                                r,   
_cudnn_rnnrI  Z  sS   & +&!+O%
 ^
++a.'2U[[^A
'2U[[^A
'QQN%NyH$h&?@	  X%>?j(^*CD 	
 __Y'F~-z;GJ	z[[5<<0\\*%	zN2JI	JB AAMoom5;;o?G2r7J..r.   c                 (   |r| j                   d   n| j                   d   }|r| j                   d   n| j                   d   }|
}|r|||gn|||g}| j                  |      }|"t        j                  d| j                        }n|j                  |j                         }|"t        j                  d| j                        }n|j                  |j                         }t        j                  d| j                  t        j
                        }||||fS )Nr   r   rd  r   )r   r   r?   rt   rl   rj  )r   w0w1w2w3hx_cx_r   r>  r  r7  r9  
has_biasesr=  r:  r<  rA  rB  output_chanelsr   r   r0  r1  r/  s                           r,   mkldnn_rnn_layerrS    s    & $/QEKKNJ#.QEKKNJ N  
Z0*n5 
 __Y'F
{[[5<<0]]399%
{[[5<<0]]399%Aell%++FI2r9$$r.   c                     | j                   dk(  r%t        j                  dk(  xs dk(  fd       y t        j                  | j                        dk7  fd       y )Nr   r   c                       d  S )Nz4: Expected reduction dim -1 or 0 for scalar but got r2   ro   r  s   r,   rN   z'zero_numel_check_dims.<locals>.<lambda>  s    wiSTWSXY r.   c                       d  dS )Nz: Expected reduction dim z to have non-zero size.r2   rV  s   r,   rN   z'zero_numel_check_dims.<locals>.<lambda>  s    wi8=TU r.   )r   r?   r~   r   )r   ro   r  s    ``r,   zero_numel_check_dimsrX    sR    yyA~1H!r	Y	

 	IIcNaU	
r.   c                      |(t        ||j                               }t        ||        y t        j                  |j                         dk7   fd       y )Nr   c                        dS )Nz@: Expected reduction dim to be specified for input.numel() == 0.r2   r  s   r,   rN   z%check_argmax_argmin.<locals>.<lambda>  s    tf\] r.   )r   ro   rX  r?   rP   r   )r  r   ro   s   `  r,   check_argmax_argminr[    sC    
S$((*-dC.JJLA]	
r.   c                     t        d| |       t        j                  | j                  ||fnd       }t	        | ||      }| j                  |t        j                        S )Nargmaxry   )r[  r7   rE  r   rF  r   r?   r   )r   ro   rH  r;  r   s        r,   argmax_argmin_metar^    sQ    $,

coSF4PD$T49E>>%u{{>33r.   c                 6    t        j                  d||||      S )Nr2   r   r   )r`  rG   rk   rl   rm   s        r,   scalar_tensorr`    s    ;;
%v* r.   c                    t        || j                         d      }t        j                  |dk\  xr) || j                         dkD  r| j	                  |      ndk  d        | j                         dk(  rdn| j	                  |      }t        j                  |dk\  xr ||k  d        t        | j                        }t        |      dkD  r|||<   | j                  |      | j                  |t        j                        fS )NT)rH  r   r   c                       y)Nzselected index k out of ranger2   r2   r.   r,   rN   ztopk_meta.<locals>.<lambda>  rV   r.   c                       y)Nzk not in range for dimensionr2   r2   r.   r,   rN   ztopk_meta.<locals>.<lambda>  rV   r.   ry   )
r   ro   r?   rP   r   r   r   r   r   r   )r   r  ro   largestsorted	sliceSizetopKSizes          r,   	topk_metarh    s     dhhjd
;C	LL	QA1488:>3qA/ XXZ1_$))C.I	LLa*AN,RSDJJH
8}q>>(#T^^HEKK^%PPPr.   c                    | | n|}t        j                  |j                         dk(  d        |j                         }| (t        j                  | j                         |k(  d        |(t        j                  |j                         |k(  d        t        j                  |j                         |k(  d        t        j                  |j                         |k(  d        t        j                  |j                         dk(  d        t        j                  |j	                         |d   |d	   z  d
z  k(  d        y )Nr   c                       yNrS  r2   r2   r.   r,   rN   z(checkLSTMBackwardSizes.<locals>.<lambda>  rV   r.   c                       yrk  r2   r2   r.   r,   rN   z(checkLSTMBackwardSizes.<locals>.<lambda>  rV   r.   c                       yrk  r2   r2   r.   r,   rN   z(checkLSTMBackwardSizes.<locals>.<lambda>  rV   r.   c                       yrk  r2   r2   r.   r,   rN   z(checkLSTMBackwardSizes.<locals>.<lambda>  rV   r.   c                       yrk  r2   r2   r.   r,   rN   z(checkLSTMBackwardSizes.<locals>.<lambda>   rV   r.   c                       yrk  r2   r2   r.   r,   rN   z(checkLSTMBackwardSizes.<locals>.<lambda>  rV   r.   r   r   r  c                       yrk  r2   r2   r.   r,   rN   z(checkLSTMBackwardSizes.<locals>.<lambda>  rV   r.   )r?   rP   ro   r   r   )grad_hygrad_cyr.  r1  r/  defined_gradexp_sizes          r,   checkLSTMBackwardSizesrv    s    %17wL	LL!!#q(*5  "HW\\^x/<W\\^x/<	LLh&
3	LLh&
3	LLA%z2	LL"hqkHQK&?!&CCZPr.   c                     | |yt        | ||||       t        j                  |t              }t        j                  |t              }|r|j	                  dd      nd }|||fS )NNNNr   r   F)rH  )rv  r?   r   legacy_contiguous_memory_formatr[  )	rr  rs  r.  r1  r/  has_bias
grad_gatesgrad_cxr  s	            r,   #_thnn_fused_lstm_cell_backward_implr}    sl    7?7GRY?!!!@J r1PQG4<
q%0$Iw	))r.   c                    d }d }d }|d   r|j                  | j                               }|d   s|d   rQ|j                  |j                  d      | j                  d      f      }|j                  |j                  d            }|||fS )Nr   r   r   r   r;  )r=  r<  r>  rA  r  grad_weightr  s          r,   linear_backwardr    s    JKI1~!++FKKM:
1~Q",,l.?.?.CV[[QS_-UV **<+<+<R+@A	Y//r.   c                     t         j                        dkD  r j                  d   ||z  z  dk(  sJ d j                   d|        d  fd} j                  d   ||z  z  } j                  d   |z  } j                  d	   |z  }g  j                  d d |||} j                  |      }|j                   |       
      }|S )Nr   r  r   z'Invalid input shape for pixel_shuffle: z with upscale_factor = c                 b    t         j                  j                  |       t         j                  k(  S r)   rR  rV  s    r,   rX  z,meta_pixel_shuffle.<locals>.is_channels_last'  s$    ""88=ATATTTr.   c                  2           r.t              dk(  rt        j                  S t        j                  S j	                  t        j                        rt        j                  S j	                  t        j
                        rt        j
                  S y r[  )r0  r?   r   rU  r]  r\  )rX  r   s   r,   r]  z.meta_pixel_shuffle.<locals>.pick_memory_format*  s|    D!4 F*...***e.E.EF***e.C.CD((( Er.   r}  r   r   )r   r   r   r   )	r   upscale_factorr]  r%  HrWrr   r   rX  s	   `       @r,   meta_pixel_shuffler  !  s     	DJJ!

2.>2Q RVW We	0<STbScdeWU	) 	

2>N:;A	B.	(B	B.	(B-$**Sb/-1-b-"-I
..
#C
&&13&
4CJr.   c                 X   | j                  | j                        }|j                  |j                        }|j                  |j                        }|j                  |j                        }|j                  |j                        }|j                  |j                        }|||||||fS r)   rk  )r   weight0weight1weight2weight3rO  cx_tmpr   hy_cy_grad_output_r_optgrad_hy_r_optgrad_cy_r_optr   r  r7  r9  rQ  r<  r=  r>  r:  r/  diff_xdiff_hxdiff_cxdiff_w1diff_w2diff_bs                                r,   mkldnn_rnn_layer_backwardr  ?  s    4 __U[[)FmmCII&Gv||,G.G.Gw}}-F7GVVWgEEr.   )	out_int32r   c                    t        j                  | |rt         j                  nt         j                        j	                         S rC  )r?   r   r  r   r   )r   
boundariesr  r   s       r,   meta_bucketizer  b  s/     9EKK%++jlr.   c                 B    t         j                         |d      }t        j                   j	                         dk7  xs# t        d  j                         dd  D               fd        j                  |      j                  t        j                               S )Nr   r  r   c              3   &   K   | ]	  }|d kD    ywr  r2   )r[   r   s     r,   r]   z,meta_upsample_bimode2d_aa.<locals>.<genexpr>t  s     !Ht$(!Hr  r   c                  *    d j                          S r  r   r  s   r,   rN   z+meta_upsample_bimode2d_aa.<locals>.<lambda>u  r  r.   r   )
r  r   r?   rP   r   rO  r   r   r7   rT  )r   r  r   r  r  r  s   `     r,   meta_upsample_bimode2d_aar  j  s     -

kA 
LLHc!Huzz|AB7G!HH_ ??+,//11%8 0  r.   c                 P   t        j                  |j                         dk(  d        t        j                  |j                         dk(  d        t        j                  |j                  j                  d        t        j                  |j                  j                  d        y )Nr   c                       y)Nz%found_inf must be a 1-element tensor.r2   r2   r.   r,   rN   z<_amp_foreach_non_finite_check_and_unscale_.<locals>.<lambda>  rV   r.   c                       y)Nz%inv_scale must be a 1-element tensor.r2   r2   r.   r,   rN   z<_amp_foreach_non_finite_check_and_unscale_.<locals>.<lambda>  rV   r.   c                       y)Nz!found_inf must be a float tensor.r2   r2   r.   r,   rN   z<_amp_foreach_non_finite_check_and_unscale_.<locals>.<lambda>  rV   r.   c                       y)Nz!inv_scale must be a float tensor.r2   r2   r.   r,   rN   z<_amp_foreach_non_finite_check_and_unscale_.<locals>.<lambda>  rV   r.   )r?   rP   r   rG   r   )r   r  	inv_scales      r,   *_amp_foreach_non_finite_check_and_unscale_r  }  s|    	LLQ O 
LLQ O 
LL))3 
LL))3r.   c                 V    t        | j                               }| j                  |      S r)   )r   r   r   )r   nanposinfneginfr.  s        r,   
nan_to_numr    s#     tyy{#K>>+&&r.   c                    | j                   t        j                  t        j                  t        j                  t        j
                  hvsJ d| j                    d       | j                  }t        ||      }t        ||      }||k(  r| S t        | j                               }t        | j                               }||   ||   c||<   ||<   ||   ||   c||<   ||<   | j                  ||       | S )Nz>torch.transpose_: in-place transposition is not supported for z layout)rk   r?   rl  
sparse_cscrm  
sparse_bscr   r   r   r   r   r  )r   dim0r  ndimsr   r   s         r,   r`  r`    s    ;;	  ]
 
H}T[\]  IIE$&D$&Dt|		D$++- F!'vd|F4L&,!$ZdDJT
T6"Kr.   c                    | j                   }| j                  r8| j                         }| j                         }|dk  r|dk(  s,J d| d| d       | j	                         dk  sJ d| d       t        | d|dk  rd      S d      S )	Nr   r   zEt_ expects a tensor with <= 2 sparse and 0 dense dimensions, but got z sparse and z dense dimensionsz6t_ expects a tensor with <= 2 dimensions, but self is r  r   )r   r2  r4  r5  ro   r`  )r   r  r4  r5  s       r,   t_r    s    IIE~~__&
NN$	!O	Q	HRS]R^^jktju  vG  H	H. HHJ!O	MCE7!L	M dAEAIq55155r.   )r  r   sidesorterc                   |rt         j                  nt         j                  }t        |t         j                        r%t        j
                  ||      j                         S t        j                  d|| j                        S )Nry   r2   r  )	r?   r  r   rY   r   r   r   rt   rl   )sorted_sequencer   r  r   r  r  rG   s          r,   meta_searchsortedr    sX    
 %EKK%++E$%E2==??{{2U?3I3IJJr.   c                      t        j                   t         j                  t         j                  t         j                  t         j
                  fv fd       y )Nc                      d  S )Nz/Unsupported input type encountered for isin(): r2   ry   s   r,   rN   z3_check_for_unsupported_isin_dtype.<locals>.<lambda>  s    A%I r.   )r?   rP   r   r  
complex128	complex64ry   s   `r,   !_check_for_unsupported_isin_dtyper    s5    	LLejj%..%2B2BEOOTTIr.   )assume_uniqueinvertc                   t        j                  t        | t              xs t        |t              d        t        | t              s!t        j                  | |j
                        } t        |t              s!t        j                  || j
                        }t        | j                         t        |j                         t        j                  | t         j                        S )Nc                       y)Nz<At least one of elements and test_elements must be a Tensor.r2   r2   r.   r,   rN   zmeta_isin.<locals>.<lambda>  rV   r.   rd  ry   )
r?   rP   rY   r   r   rl   r  rG   r   r   )elementstest_elementsr  r  s       r,   	meta_isinr    s     
LL8V$I
=&(IN h'<<1E1EFmV,]8??K%hnn5%m&9&9:HEJJ77r.   r   c                     t        j                  | dk\  d        t        |t        j                        \  }}t        j
                  ||      S )Nr   c                       y)Nz,polygamma(n, x) does not support negative n.r2   r2   r.   r,   rN   z meta_polygamma.<locals>.<lambda>  rV   r.   rP  ry   )r?   rP   r   r   rQ  r   )r   r   r:   r;   s       r,   meta_polygammar    sF     
LLaOP(;HHOA| D55r.   c                 B    t        |       t               d               }|S )Nc                 8    t        | t        j                        S rE  r=   r   rQ  r  s    r,   _fz)_create_unary_float_meta_func.<locals>._f  s      =JJ
 	
r.   r3   r   funcr  s     r,   _create_unary_float_meta_funcr    *    4]
  

 Ir.   c                 B    t        |       t               d               }|S )Nc                 :    t        | |t        j                        S rE  r  )r<   r  s     r,   r  z*_create_binary_float_meta_func.<locals>._f   s      q!@!M!M
 	
r.   r  r  s     r,   _create_binary_float_meta_funcr    r  r.   c                     i } dD ]  }t         |   }|D ]  }|| vs||   | |<    ! | j                         D ]  \  }}t        |t        j                  j
                        r,t        |t              sJ  |j                  t        j                  j                  j                        |       t        j                  j                  |j                         d      r|t         d   v rt        | d      |j                  r|j                         dv rd|j                         v rt        j!                  ||       	d|j                         v rt"        j!                  ||       3d|j                         v rt$        j!                  ||       ]d	|j                         v rt&        j!                  ||       t(        j!                  ||        y )
N)rj   post_autogradpre_autogradCompositeImplicitAutogradrj   z is a CompositeImplicitAutograd op, we shouldn't register meta function for it. Instead, we should let the decomposition run and write meta kernels for the base operators.>   aten::cloneaten::copy_aten::rot90aten::_to_copyaten::empty_stridedaten::constant_pad_ndaten::as_strided_scatterzmkldnn::zmkl::zonednn::zquantized::)r   itemsrY   r?   _opsHigherOrderOperatorr   py_impl_CDispatchKeyr%   %_dispatch_has_kernel_for_dispatch_keyr  r   is_view2_meta_lib_dont_use_me_use_register_meta_for_mkldnnimpl/_meta_lib_dont_use_me_use_register_meta_for_mkl2_meta_lib_dont_use_me_use_register_meta_for_onednn5_meta_lib_dont_use_me_use_register_meta_for_quantized'_meta_lib_dont_use_me_use_register_meta)activate_meta_tablerd   registryopoop_overloadr+   s         r,   activate_metar  *  s    : 9-d3 	9C--+3C=#C(	99 /446 4NR
 k5::#A#AB+z2226EHH00556r:8899 ;
 8@@""m $; ; 
     $
 
 [--//BGGUWXK,,..?DD[RTU{//11BGGUWX+"2"2"44EJJ 8<<["Mi4Nr.   )Frx  )NNNF)NN)Tr  )r!  )r  T)FF)TT)r  )FTN)TFF)TF)r   )g      ?N)r&  rV  r)   )r2   r   r  F)r2   r  FTN)Fr   FNFr   )NF)r   F)NNNNN)r   NNr   )NNF)g        FNN)FN)NNNNNF)Nr   FNN)NNNN)r   TT(  r  enumr   	functoolsr   typingr   r   r   r   r	   r?   torch._prims_commonrS  r7   r
   r   r   torch._decompr   r   r   r   
torch._opsr   torch._primsr   r   r   r   r   r   r   r   r   torch._prims_common.wrappersr   r   r   r   r   r0  r    r!   torch.utilsr"   r/   r\  r#   libraryLibraryr  r3   r=   rI   rR   linspacelogspacerk  rv   taker   r   r   r   r   cummaxcumminr   r   r   _fft_c2cr   _fft_r2cr   randpermgenerator_outr   r}   r   randintr   r   r   randr   _fft_c2rr   rU  r   r  
unsqueeze_r  _sparse_semi_structured_linearrV  rG   r  _cslt_sparse_mmr   r"  index_reducer  r*  index_reduce_r,  index_selectr/  segment_reducer<  rk  	unary_outr@  ro   rI  rj  rL  rN  rV  rR  rW  _assert_asyncrZ  msgr^  _printra  _make_dep_tokenre  rn  _functional_sym_constrain_rangers  rv  (_functional_sym_constrain_range_for_sizerx  _functional_assert_asyncrz  r   r  r   r  r  r  r  _linalg_eighr  r  _linalg_eigvalslinalg_eigvalsr  
linalg_eigr  r  r  r  r  r  r  r  linalg_inv_exr  linalg_ldl_factor_exr  linalg_ldl_solver  	linalg_lur  linalg_lu_factor_exr  linalg_lu_solver  	lu_unpackr  r  	linalg_qrr&  r*  r'  _linalg_svdr6  r  r  rF  rZ  linalg_solve_triangularrc  ri  rp  _linalg_detrs  r  r  r  reflection_pad1dr  replication_pad1dr  r  reflection_pad1d_backwardr  replication_pad1d_backwardr  r  reflection_pad2dr  replication_pad2dr  reflection_pad2d_backwardr  replication_pad2d_backwardr  r  reflection_pad3dr  replication_pad3dr  reflection_pad3d_backwardreplication_pad3d_backwardr  _pdist_forwardrC   r  _pdist_backwardr  baddbmmr  	bernoullir  
bernoulli_r  r  r  _fused_moving_avg_obs_fq_helperr.  mmr8  rF  r0  rP  rX  convolutionra  r  _has_mkldnnr  rb  _convolution_pointwiserh  _linear_pointwiserl  has_mklr  rm  _mkl_linearrq  r  rr  qconv2d_pointwiser|  qlinear_pointwiser   r  r  r  
max_pool2dr  r  
avg_pool2dr  r  avg_pool2d_backwardr  
avg_pool3dr  avg_pool3d_backwardr  _adaptive_avg_pool2dr  _adaptive_avg_pool3dr  _adaptive_avg_pool2d_backwardr  _adaptive_avg_pool3d_backwardr  r  adaptive_max_pool2dr
  r  r  adaptive_max_pool3dr  r  r  repeat_interleaver  rZ   r!  r$  r{   _unsafe_indexr9  convolution_backwardrE  addbmmrM  r]  _foreach_abs_foreach_acos_foreach_asin_foreach_atan_foreach_ceil_foreach_cos_foreach_cosh_foreach_erf_foreach_erfc_foreach_exp_foreach_expm1_foreach_frac_foreach_floor_foreach_lgamma_foreach_log_foreach_log10_foreach_log1p_foreach_log2_foreach_neg_foreach_norm_foreach_reciprocal_foreach_round_foreach_sigmoid_foreach_sign_foreach_sin_foreach_sinh_foreach_sqrt_foreach_tan_foreach_tanh_foreach_trunc_foreach_zero_foreach_add_foreach_sub_foreach_mul_foreach_div_foreach_clamp_min_foreach_clamp_max_foreach_lerprl  _foreach_abs__foreach_acos__foreach_asin__foreach_atan__foreach_ceil__foreach_cos__foreach_cosh__foreach_erf__foreach_erfc__foreach_exp__foreach_expm1__foreach_frac__foreach_floor__foreach_lgamma__foreach_log__foreach_log10__foreach_log1p__foreach_log2__foreach_neg__foreach_reciprocal__foreach_round__foreach_sigmoid__foreach_sign__foreach_sin__foreach_sinh__foreach_sqrt__foreach_tan__foreach_tanh__foreach_trunc__foreach_zero__foreach_add__foreach_sub__foreach_mul__foreach_div__foreach_clamp_min__foreach_clamp_max__foreach_lerp__foreach_copy_ro  _foreach_powScalarAndTensorru  r{  _foreach_maximum_foreach_minimumr~  _foreach_maximum__foreach_minimum_r  _foreach_addcdivScalar_foreach_addcmulr  _foreach_addcdiv__foreach_addcmul_r  r  _fused_adam_r  _fused_adamr  _int_mmr  _convert_weight_to_int4packr  _weight_int4pack_mmr  _weight_int8pack_mmr  _cdist_forwardr  _cdist_backwardr  _embedding_bagr(  _embedding_bag_forward_onlyr*  r-  nansumr/  median	nanmedianr1  
dim_valuesr  r   r4  logical_not_r6  repeatr<  zero_r>  mul_div_logical_and_logical_or_logical_xor_rA  add_sub_rC  rounddecimalsrG  rM  
__rshift__rQ  
__lshift__rU  zerorW  r7  rZ  fillr\  relu_r_  	index_put_unsafe_index_putrc  masked_fill_rf  masked_scatter_rk  masked_scatterrm  masked_scatter_backwardro  
index_put_rq  aliasrt  r  bmmr  r  r  r  r  r  r  r  r   max_pool2d_with_indices_backwardr  max_pool2d_with_indicesr  fractional_max_pool2dr  max_unpool2dr  r  max_unpool3dr  max_pool3d_with_indicesr   max_pool3d_with_indices_backwardr  r  r  r  grid_sampler_2d_backwardr#  r)  r+  r.  r  r/  r>  select_scatterrB  slice_scatterrF  r   rK  rS  gatherrY  rj  rq  rs  r}  r  scatter_addr  scatter_add_r  r  r   re  r%  value_reducer  scatter_r  ,_scaled_dot_product_flash_attention_backwardr  +_scaled_dot_product_flash_attention_for_cpur  4_scaled_dot_product_flash_attention_for_cpu_backwardr  0_scaled_dot_product_efficient_attention_backwardr  _flash_attention_backwardr  _efficient_attention_backwardr  
_scaled_mmr  scatter_reducetwotwo_outr  scatter_reduce_r  multinomialr  r  r  r  _upsample_nearest_exact1dr  _upsample_nearest_exact2dr
  "_upsample_nearest_exact2d_backwardSymIntr  _upsample_nearest_exact3dr   r  values_stabler  argsortr  r,  _thnn_fused_lstm_cellr2  rI  rS  rX  r[  r]  argminr^  r`  topkrh  r   ry  rv  r}  r  pixel_shuffler  r  	bucketize
Tensor_outr  _upsample_bilinear2d_aa_upsample_bicubic2d_aar  r  r  r`  r  searchsortedr  r  isinr  	polygammar  r  r  special_airy_aispecial_bessel_y0special_bessel_y1special_modified_bessel_i0special_modified_bessel_i1special_modified_bessel_k0special_modified_bessel_k1!special_scaled_modified_bessel_k0!special_scaled_modified_bessel_k1special_chebyshev_polynomial_tspecial_chebyshev_polynomial_uspecial_chebyshev_polynomial_vspecial_chebyshev_polynomial_w&special_shifted_chebyshev_polynomial_t&special_shifted_chebyshev_polynomial_u&special_shifted_chebyshev_polynomial_v&special_shifted_chebyshev_polynomial_wspecial_hermite_polynomial_hspecial_hermite_polynomial_hespecial_laguerre_polynomial_lspecial_legendre_polynomial_ptorch._refs.nn.functionaltorch._refs.specialr  r2   r.   r,   <module>r	     s0=      9 9  # + +  " U    < ) yy~~*/--*?*?PV*W '
3(* t}}-.
 

==5  /5p 		!!499==12'  3' !!))4+<+<+@+@AB%' %  C%$ t%%&I  'I 	[[$++//4;;+>+>P Xy! " !!))4+<+<+@+@AB/  C/1Hl %%t}}'8'89:  ;" %%t}}'8'89:  ; t}}**+"& 3 ,3 t}}$$%

4 & t||##$D$ % t||  ** ! tyy  !%)$tPT  " %%t}}'8'89:K  ;K tzz!!" #$( t&&' ( t223
 "%)'+  6
	
 c] $ 4B t##$ ""'+"!,,!\\! 6
! F	!
 $! ! %!H t  (() 	I
	I		I 	I LL		I
 	I 	I 	I *	I t!!))* 	
			 	 LL		
 	 	 	 +	 t  (()' * ' t""**+
 !% $ $ W
 W W f	 W
 f W f W  W  W  W , WF   $(("4"456  7 txx||    $(("4"456  7 txx||  tzz!!"6 #6 tzz~~( (
 t!!))* + t!!%%& ' t{{""# $ t##++, * -* t''//0, 1, t33;;< =
 t008896 :6 t<<DDE F
 t,,001 2
sF sC s$
$$ $R @D


8<
 V S C   	& EM		 	)/	>A	C  !!))4+<+<+H+HIJ]N+ 
  , K* $$,,d.A.A.E.EFGB B6 B  HB  !]N+	6 	 , "	Q QF Q t**+) )F )4 )F )  ,) t""#J JF J4 JF J  $J t}})6 )$ )6 )  ) t$$%)6 )$ )6 )  &) t&&../&  T  0" 	$$,,d.M.M.Q.QR .f .6 .f . .d t!!))*&   + ))1143L3L3P3PQRT8V$ 	
  	
 666!" % S& %%--t/D/D/H/HIJ@E####)#9=##  K#L &&(:(:;<S#s/3 f  fff>T8U   =4 ((00$2J2J2N2NOPT8V$ $548
666!" % Q> $$,,d.B.B.F.FGH 444 4
 4 4 4  I4n t~~S#s 	$$$ $ 	$
 666!"$  $P tTz!2 * &&(:(:;<S# 
 66>  =: $$,,d.B.B.G.GHIV[$1'v '%(F"G ' 2 J'$ t''(   	""" " SM	" )"J.
..
49d3i . .
..&.sm.
66>.$f V   t$$%
 ##!888 	8
 8 V8 	8 V8 6
8 6666)*8 &8v ,,44d6R6R6V6VWX   	
   
&	  Y2 t$$%Z-. +(
+(+( +( 	+(
 +( 66>+( / &+(^ t''(
 )
 tzz
 WW	W W 	W
 W W  Wt>#;L t$$%=  &= t%%&>  '>(< t--.\S  /S t../\T  0T2Ej t$$%=  &= t%%&>  '> &&..&&11''//''22	 \& &@<G~ t$$%=  &= t%%&>  '> &&..&&11''//''22	 \$( $(N t""#

f 

 

v 

  $

 t##$Pv PV P Pf PQW P  %P $$dll&6&678/0 '  9'2 &&(:(:;<&* /  =/
 t$$% & t~~ / !/
 t33;;< * =*. tww	  	B 7;b,,bLLb $s)S.!b 49c>"	b
 DIsN#b b b U49c>23bJQ t''(),,)LL) ,,) I	)
 #Y) 3i) ) I) ) ))X 	889>9N9N&&:6 599##::BBC D( 599##55==>S ?S
 xx:?--:O:O66;
7 
uyy}}00	1		 
2		 :?9N9N&&:6 599##55==>  ? D 599##55==>599##55<<= > ?, =BMM<Q<QVV=9 599&&112 
 3
< t&&' I (IZ(<X t''//0E 1EP t QJ   QJh t''(\K(  )K(\ t((001 2" t((001@ 2@ t1199:F ;F, t112\P  3P
	
6 	
S 	
 t''(UI+  )+\ t001\H  2H$ t''(UI'  )'T t001\(  2(
 t%%,,-* .* $$dll&6&678T  9T ##++T-@-@-D-DEF9; @# @3 @  G@ 

!!4#5#5#<#<=>`J ?`JF ))1123H 4H: ##T[[__56./q '  7'0* ''' 	' 		'
 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'  	!'" 	#'$ 	%'& 	''( 	)'* 	  +', 	-'. 	/'0 	1'2 	3'4 	5'6 	7'8 	9': 	;'< 	='> 	?'@ 	A'B 	C'D 	E'F 	G'H 	I'J 	K'L 	M')T 26 'U)T'T ''' 	' 		'
 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'  	!'" 	#'$ 	%'& 	''( 	!!)'* 	+', 	-'. 	/'0 	1'2 	3'4 	5'6 	7'8 	9': 	;'< 	='> 	?'@ 	A'B 	C'D 	E'F 	  G'H 	  I'J 	K'L 	M')T -1 U)T
 !!11233 43" HH
  $$$$//& &&--t/E/E/L/LMN O  %%%% !!))*+  !
 ,
2   (()*  !! +!H ~B  B* 0012 3& (()*@ +@ (()*< +< t""**+ & , &F t##$G  %G* t""**+
 	
e5 ,e5P t//7785 95
 ##T[[__56=$ =  7= ##T^^%;%;<=) >) !!					 Xy! "	 t  (() * t{{""#' $' tzz!!" # 								!!  !!

 									 

""DJJ$7$789 :
" &&(>(>?@ A &&(>(>?@ A tyy  !& "& 

!!4::#4#456 7 		  $))"2"234" 5" tzz!!" # &&(>(>(F(FGH" I" t  ''( )
 t##$	 %	 t""#6  $6 t++,! -! t&&' ( tzz!!"! #!B txx 5 !5*;h #-ZZZ 	Z 		Z
 	Z 	Z 	Z 	Z 	Z 	Z 	Z Z Z Z Z  !Z" #Z$ %Z& 'Z( )Z* +Z, -Zz;4|383838 38 		38
 	38 	38 	38 	38 	38 	38 	38 	38 38 38 38  !38" #38$ %38& '38lD2N t44<<=( >(V t++334JO 5B t))112Q 3Qh t  !4  "4n,^ t  !  ", t++,UI d  -dN t445\b  6bJ%
V %
6 %
Pt  v 3 $ t,,445# 6#$ t##$8  %8" t,,-\;'! ( .!, 		!!"#. $. t&&' ) ()X t{{E  E8 t""**+. ,. t!!))*. +.
	 	C 	d 	/
  t{{""#	' $	'6

+
^4 t''(& )&
 t  ! "
 !!	 & & ""	 99( """" 
" 	"
 
" " " " " " " " " " E?"
". 88 "&!	  	
   E?
D AA #'!'"'"'" 
'" 	'"
 
'" '" '" '" '" E?'"
'"T ==" !4-4-4- 
4- 	4-
 4- 
4- 4- 4- 4- 4- $Z4- 4- E?4-
4-n &&( ",,, 
, 	,
 
, , , , , , , , , , E?,
,0 *** "$(#!7!7!7 
!7 	!7
 6
!7 6"!7 6"!7 !7 !7 !7 !7 !7 !7 !7 !7  E?!!7" SM#!7
!7H ''() $('+&*&*+/ 3@
,,3@
,,3@ 5<<
 3@ $	3@
 ell#3@ ell#3@ 5<<(3@ 3@ *3@l ##'')<)<)D)DEF&  G&
 t##''( )
   (($*:*:*>*>?@	 	  A	,* 	$$d&D&D&L&LM

 	$$d&D&D&L&LM. ((00//77 !% $%U\\ 123 sELL012 uo	
 uo: 	$$d&D&D&L&LM

 									& t||""#&(U M $MD t))112@D 3 t&&'4/ (4/n t$$,,-$% .$%N


 ##T[[%8%89:4 ;4 t!!))* + tyy  !Q "Q  #("9"9 Q t77??@	* A	* t##++,	0 -	0 t!!))* +: t--556F 7FD %%t~~'@'@AB27u   C 	!!))4+F+F+N+NO @D  t>>FFG H$ '')<)<=>'  ?'
 uyy~~(() *4 uyy~~  !6 "6" t  !(-UdK  "K tyy8=e 8  8  t~~6c 6 6F 6  6 d22 3 d44 5 d44 5 d== > d== > d== > d== > dDD E dDD E tBB C tBB C tBB C tBB C tJJ K tJJ K tJJ K tJJ K t@@ A tAA B tAA B tAA B
    @NF r.   