
    Bjc                       d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZ d dlm	Z	m
ZmZmZ d dlmZ d dlZd dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$ d d	l%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ d d
l,m-Z- d dl.m/Z/ erd dl0m1Z1m2Z2 d dl%m3Z3 d dl4m5Z5 e(ej6        z  Z7 ed          Z8 ed          Z9 ed          Z:ej        j;        Z<g dZ=i Z>g Z?ej@        jA        jB        ZBddZCddZD eCg eBjE        jF        eBjE        jG        eBjH        jF        eBjH        jG        eBjI        jF        eBjI        jG        eBjJ        jF        eBjJ        jK        eBjJ        jG        eBjJ        jL        eBjM        jF        eBjM        jK        eBjM        jG        eBjM        jL        eBjN        jF        eBjN        jK        eBjN        j6        eBjN        jO        eBjN        jP        eBjN        jQ        eBjN        jG        eBjN        jL        eBjN        jR        eBjN        jS        eBjN        jT        eBjN        jU        eBjV        jF        eBjV        jG        eBjW        jF        eBjW        jG        eBjX        jF        eBjX        jG        eBjY        jF        eBjY        jG        eBjZ        jF        eBjZ        jG        eBj[        jF        eBj[        jG        R  Z\ eCeBj]        jF        eBj^        jF        eBj^        jG        eBj_        jF        eBj`        ja        eBj`        jb        eBjc        jF        eBjd        jF        eBjd        jG        eBje        jF        eBje        jG                  ZfeBjg        fZhddZiejj        dd             Zkdd$Zldd&Zmdd(Zn ele>jo                  dd-            Zp elek           elg e\          dd/                        Zq eleBjc        jF                  dd0            Zr elejA        js        jt        jF                  	 ddd4            Zt elejA        js        ju        jF                  dd6            Zu elejA        js        jv        jF                  	 ddd7            Zv eleBj`        jb                   eleBj`        ja                  dd8                        Zwdd9Zx elex          dd:            Zy eleBjz        jF                  dd;            Zz eleBj{        jF                  dd<            Z{ eld=           dd>            Z|	 	 	 dd@dAddJZ} eleBj~        jF                  	 	 	 dddK            Z eleBj        j                  ddP            Z eleBj        jF                  	 	 	 dddQ            Z eleBj        jF                  	 	 	 dddR            Z	 dddYZdd^Z	 	 dddaZ eleBj        jF                  ddc            Z eleBj        jF                   eleBj        jF                  d@dddde                        Z eleBj        jF                  ddfddi            Z eleBj        j6                  	 dddm            Z elejA        jB        j        jF                   elejA        jB        j        jF                  ddo                        Z elejA        jB        j        jF                  ddq            Z elejA        jB        j        jF                  ddr            Z elejA        jB        j        jF                  	 dddv            ZddxZ elejA        jB        j        j6                  	 	 	 	 ddd}            Z elejA        jB        j        jF                  dd            Z elejA        jB        j        jF                  	 	 	 dddddd            Z eld           dd            ZddZddZ eCddd          ZddZddZ eld           dd            Z eleBj        j6                  dd            Z eleBj        jF                  dd            Z eleBj        jF                   eleBj        jF                   eleBj        jF                   eleBj        jF                   eleBj        jF                  dd                                                            Z eleBj        jG                   eleBj        jG                  dd                        Z eleBj        jF                   eleBj        jF                  dd                        Z eleBj^        jF                   eleBj^        jG                   eleBj        jF                   eleBj        jF                  dd                                                Z eld efD                       dd            Z eleBj        jF        eBj        jF        g          dd            Z elejA        jB        j        jF                  	 	 ddd            Z elejA        jB        j        jF                  dd            Zi ZddZddZej        fddZ	 dddZejj        dd            ZdS )    )annotationsN)reduce)AnycastTYPE_CHECKINGTypeVar)	ParamSpec)no_python_dispatcher)
OpOverload)canonicalize_dimelementwise_dtypesELEMENTWISE_TYPE_PROMOTION_KINDis_boolean_dtypeis_contiguous(is_contiguous_for_memory_format_or_falseis_contiguous_or_falseis_float_dtypeis_integer_dtypemake_contiguous_strides_for	ShapeType)DataDependentOutputExceptionDynamicOutputShapeException
FakeTensorin_kernel_invocation_managerrun_fallback_kernelUnsupportedOperatorException)_normalize_function_or_errorcount_label)CallableSequence)FakeTensorMode)IntLikeType_P_R_T)op_implementations_checksget_fast_op_implsstride_incorrect_ophas_metaitemsreturndict[_T, bool]c                 8    t                               | d          S )NT)dictfromkeys)r+   s    _/var/www/html/Carbon-Document/venv/lib/python3.11/site-packages/torch/_subclasses/fake_impls.pyordered_setr2   I   s    ==%%%    devicetorch.deviceboolc                    | j         dk    S )Nhpu)typer4   s    r1   is_noncontiguous_supportedr;   O   s    ;%r3   type_r   c                    t           j        j                                        }|                     |          p*t          d |                                 D                       S )Nc              3  4   K   | ]}t          |          V  d S N)contains_tensor_types).0es     r1   	<genexpr>z(contains_tensor_types.<locals>.<genexpr>   s<       1 1%&a  1 1 1 1 1 1r3   )torch_C
TensorTypegetisSubtypeOfanycontainedTypes)r<   tensor_types     r1   r@   r@      sg    (%))++K[)) S 1 1*/*>*>*@*@1 1 1 . . r3   funcr   c                R   t          | t                    st          dt          |                      | j        }t          d |j        D                       rdS t          |j                  dk    o4|j        d         j        t          j
        j                                        u S )Nz func must be an OpOverload, got c              3  >   K   | ]}t          |j                  V  d S r?   )r@   r9   rA   args     r1   rC   z)_is_tensor_constructor.<locals>.<genexpr>   s-      
G
Gs **
G
G
G
G
G
Gr3   F   r   )
isinstancer   AssertionErrorr9   _schemarI   	argumentslenreturnsrD   rE   rF   rG   )rL   schemas     r1   _is_tensor_constructorrY      s    dJ'' NLT

LLMMM\F

G
Gf6F
G
G
GGG u 	FNq XV^A%6%;ux?R?V?V?X?X%Xr3   run_impl_checkUCallable[[OpOverload], bool] | OpOverload | list[OpOverload] | tuple[OpOverload, ...].Callable[[Callable[_P, _R]], Callable[_P, _R]]c                     d fd}|S )Nop_implCallable[_P, _R]r,   c                   t          t                    r&t          v rt          d           | t          <   nt          t          t
          f          rD ]} t          |          |            nJt                    st          dt                               t          
                    | f           | S )Nzduplicate registration: z%run_impl_check must be callable, got )rR   r   op_implementations_dictrS   listtupleregister_op_implcallabler9   r'   append)r^   oprZ   s     r1   impl_decoratorz(register_op_impl.<locals>.impl_decorator   s    nj11 	H!888$%P%P%PQQQ6=#N33u66 	H$ . .$ $$W----. N++ $RD<P<PRR   &,,ng-FGGGr3   r^   r_   r,   r_    )rZ   rh   s   ` r1   rd   rd      s)         " r3   rg   c                    | t           v S r?   ra   rg   s    r1   _is_op_registered_to_fake_rulern      s    (((r3   Nonec                    t                               | d            t          D ](\  }}|| u rt                              ||f            d S )d S r?   )ra   popr'   remove)rg   checkimpls      r1   _deregister_op_implru      sb    D)))0  tB;;%,,eT];;;EE  r3   	fake_moder"   argskwargsc                0    t          |         | |g|R i |S r?   rl   rv   rL   rw   rx   s       r1   #dispatch_to_op_implementations_dictr{      s)     #4(DJ4JJJ6JJJr3   r   c                   |t           v rt          d|           t          |||d          \  }}d|v rt          |          |t          v r$|d         j        }|                    d          f}nt          j        d          }d}|                    dd           }||n|}t          j        d	          |d<   t          |           5   ||i |}d d d            n# 1 swxY w Y   t          | ||          S )
Nz8func must not be in _non_kwarg_device_constructors, got Trw   rx   normalize_to_only_use_kwargsnamesinputcpurj   r4   meta)
_non_kwarg_device_constructorsrS   r   r   _like_tensor_constructorsr4   rq   rD   r   r   )	rv   rL   rw   rx   _
new_kwargsdefault_device
out_devicers	            r1   constructorsr      sp   
 ---MtMM
 
 	
 14T  MAz &*4000(((#G,3w'') e,,$//J)5>J <//Jx 
&i	0	0 & &D$%*%%& & & & & & & & & & & & & & &iJ///s   
	CC#&C#c                    t          |||d          \  }}|                    d          }t          |           5   ||          }d d d            n# 1 swxY w Y   |S )NTr~   r   )r   rq   r   )rv   rL   rw   rx   r   r   inpr   s           r1   non_kwarg_is_pinnedr      s     1dF  MAz ..
!
!C 
&i	0	0  DII              Hs   AAAnamestrobject | Nonec                    t          |           5   |||          }d d d            n# 1 swxY w Y   t          j        |d          }t          | |t          j        d                    S )Nr   r:   r   )r   rD   
empty_liker   r4   )rv   rL   r   rw   real_handlemeta_handles         r1   _record_function_enterr     s    
 
&i	0	0 ' 'd4&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ";v>>>Kiel5.A.ABBBs   )--handlec                    d S r?   rj   )rv   rL   r   s      r1   _record_function_exitr     s	     	Dr3   c                l    t          |           5   |||          cd d d            S # 1 swxY w Y   d S r?   r   )rv   rL   r   rw   s       r1   _record_function_enter_newr     s     
&i	0	0    tD$                                   s   )--c                P   t          |||d          \  }}|d         }|r|n|d         j        }t          j        d          |d<   |                    d          }t	          |           5   ||fi |}	d d d            n# 1 swxY w Y   | j                            | |	|          S )NTr   r4   r   r   )r   r4   rD   rq   r   fake_tensor_converterfrom_meta_and_device)
rv   rL   rw   rx   r   r   input_devicer   r   r   s
             r1   non_kwarg_tor   #  s
   
 1dF  MAz h'L!-M:g3F3MJ <//Jx
..
!
!C	%i	0	0 $ $D##
##$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ *??1j  s   +
BBBc                    dS )NFrj   rm   s    r1   r)   r)   7  s    5r3   c           	     :   dd| j         rt          fdt          j        ||                                          D                       }|s?t
                              ||f          \  }}t          | |||t          d                    S t          |          )	Nxobjectr,   r6   c                    t          | t                    r| j        S t          | t          j        t          j        t          j        f          rdS dS )NTF)rR   r   _has_symbolic_sizes_stridesrD   SymIntSymFloatSymBoolr   s    r1   is_symbolicz3workaround_stride_incorrect_op.<locals>.is_symbolicB  sF    a$$ 	100a%,FGG 	4ur3   c              3  .   K   | ]} |          V  d S r?   rj   )rA   r   r   s     r1   rC   z1workaround_stride_incorrect_op.<locals>.<genexpr>K  s<       
 
 KKNN
 
 
 
 
 
r3   z2Cannot run fallback kernel for stride_incorrect_op)r   r   r,   r6   )
allow_fallback_kernelsrI   	itertoolschainvaluespytreetree_flattenr   RuntimeErrorr   )rv   rL   rw   rx   require_dynamic	flat_args	args_specr   s          @r1   workaround_stride_incorrect_opr   <  s        '  
 
 
 
$-OD&--//$J$J
 
 
 
 
  
	#)#6#6f~#F#F Iy& QRR   't
,
,,r3   c                d    t          |           5   ||i |cd d d            S # 1 swxY w Y   d S r?   r   rz   s       r1   
resize_as_r   _  s     
&i	0	0 % %tT$V$$% % % % % % % % % % % % % % % % % %s   %))c                $    t          | |g|R i |S r?   )r   rz   s       r1   (_sparse_coo_tensor_with_dims_and_tensorsr   g  s$     	49$999&999r3   c                    t           j        j        | j        v o3| t          j        j        t          j        j        t          j	        j        fvS r?   )
rD   Tagdynamic_output_shapetagsatenindexTensornonzerodefaultrepeat_interleaverL   s    r1   <lambda>r   p  s>    /49< TJt|3T5K5RS	T r3   c                     t          |          r?   )r   rz   s       r1   	dyn_shaper   o  s     &d
+
++r3   TFunique_consecutiverP   dim
int | Nonesortedreturn_inversereturn_countsr   )tuple[FakeTensor, FakeTensor, FakeTensor]c                  | j         | j         j        st          |          |r|j        n|j        }||ddlm}	m}
  |
|                                          s|                                dk    rd}nz| j         	                                }t          j        dz
  }||                                n|                    |          } |
|          st          |          } |	||           ||r||_        n||_        ||                    |f          g}n/ |j        g |j        d |         ||j        |dz   d          R  g}|d uo|j        t#          j        d          k    }|s|r7|                    ||j        n|j        |         ft"          j                  }n!|                    dt"          j                  }|                    |           |s|rC|                    ||d         j        n|d         j        |         ft"          j                  }n!|                    dt"          j                  }|                    |           t+          |          S )Nr   _constrain_range_for_sizehas_free_symbolsrQ   maxr   dtype)	shape_envallow_dynamic_output_shape_opsr   unique_consecutive_memounique_memo%torch.fx.experimental.symbolic_shapesr   r   numelcreate_unbacked_symintsysmaxsizesizeint	new_emptyshapefake_devicerD   r4   int64rf   rc   )rv   rL   rP   r   r   r   r   r   nnzr   r   maxvalr   retreturn_if_dim_and_cpuinversecountss                    r1   _uniquer   z  s    	#"A 	$ *$///);
P#
%
%C #+	
 	
 	
 	
 	
 	
 	
 	

  		,, 	71A1A CC%<<>>C[1_F#&;CIIKKKCHHSMME##E** $U%%cv6666;! &.1++"%
{}}cV$$% s}JcioJsJSYsQwyy5IJJJKtOV5<PUCVCV0V 6. 6--CII39S>*;5;   
 
 ---55JJw 5- 5KCFLLc!fl3.?-A  
 
 q44JJv::r3   c           	     ,    t          | ||d |||          S r?   r   )rv   rL   rP   r   r   r   s         r1   unique2r     s     9dCv~}UUUr3   selfr   r   r#   c                   ddl m} |j        rt          S |                                }t          j        |dk    d            |dk    r|n||z   }|                    |          }t          |                                          }t          |	                                          }	d }
 ||dk              r!|
                                ||	|         z  z   }
n2 ||dk               r#|
                                ||z   |	|         z  z   }
|
B| j        | j        j        s| j        st          |          | j                                        }
||= |	|= |
t          d          |                    ||	|
          S )Nr   guard_or_falsec                     dS )Nz-select() cannot be applied to a 0-dim tensor.rj   rj   r3   r1   r   zmeta_select.<locals>.<lambda>  s    ? r3   z#new_storage_offset must not be None)r   r   	is_sparseNotImplementedr   rD   _check_indexr   rb   stridestorage_offsetr   allow_scalar_outputsr   r   rS   
as_strided)rv   rL   r   r   r   r   ndimr   new_size
new_stridenew_storage_offsets              r1   meta_selectr    s    EDDDDD~ 88::D		??  
 ##sTzC99S>>DDIIKK  Hdkkmm$$J~eqj!! V!0022UZ_5LL			"	" V!0022edljQTo5UU!&#8 '2 ' /t444 '0GGII3!BCCC??8Z1CDDDr3   c           
     h    t          | |||dk    r|n|t          |j        d          z  |||          S )Nr   rQ   )r   r   r   )rv   rL   rP   r   r   r   r   s          r1   
unique_dimr  
  sH     axxS3sx#3#33	 	 	r3   c           
     0    t          | |||d||d          S )NFTr   r   )rv   rL   rP   r   r   r   s         r1   r   r      s3     	 	 	 	r3   	old_shapeSequence[IntLikeType]
old_stride	new_shapesize_obliviouslist[IntLikeType] | Nonec                h   ddl mmm} d
fd}d
fd}t	          |           dk    rdgt	          |          z  S t          t          j        | d          } ||dk              }|r$ | || |                    rt          |          S dgt	          |          z  }	|rjt          t	          |          dz
  d	d	          D ]F}
|
t	          |          dz
  k    rd|	|
<   t          ||
dz            d          |	|
dz            z  |	|
<   G|	S t	          |          dz
  }
|d	         }d}d}t          t	          |           dz
  d	d	          D ]}|| |         z  }|dk    s3 || |dz
           dk              r |||dz
           ||z  k              r|
dk    rf |||k               s |||
         dk              rB||z  |	|
<   |||
         z  }|
dz  }
|
dk    r$ |||k               - |||
         dk              B |||k              r d S |dk    r||dz
           }d}d}|
d	k    rd S |	S )Nr   )r   guard_or_truesym_eqr   r   r,   c                "    r |           S | S r?   rj   )r   r   r  s    r1   maybe_guard_or_falsez-_compute_stride.<locals>.maybe_guard_or_falseB  s      	%!>!$$$r3   c                "    r |           S | S r?   rj   )r   r  r  s    r1   maybe_guard_or_truez,_compute_stride.<locals>.maybe_guard_or_trueH  s      	$ =###r3   rQ   )r   r   r,   r   )r   r   r  r  rV   r   operatormulrb   ranger   )r  r
  r  r  r  r  r  r   
zero_numelr  view_dchunk_base_stridetensor_numel
view_numeltensor_dr   r  s      `           @@r1   _compute_strider  6  sN                         9~~sS^^##8<A..E%%eqj11J  **66)Y+G+GHH  J%&C#i..$8J C	NNQ.B77 	 	FY!+++%&
6"" 	&1*-q11Jvz4JJ 6"" ^^aF%/^ !LJ#i..1,b"55  	(++q==	(Q, 71 <== ##8a<(L;L,LL   A++##J$=>> ''	&(9Q(>??  &02C%C
6"i//
! A++##J$=>> ''	&(9Q(>??  #":#=>> tt!||$.x!|$<! 
||tr3   atorch.Tensorr   ShapeType | tuple[ShapeType]c                &   ddl m t          j        |d          }t	          fd|                                 D                       pGt	          fd|                                 D                       pt	          fd|D                       S )Nr   has_guarding_hintFvalidatec              3  0   K   | ]} |           V  d S r?   rj   rA   sr%  s     r1   rC   z+_view_has_unbacked_input.<locals>.<genexpr>  s2      77!!!$$$777777r3   c              3  0   K   | ]} |           V  d S r?   rj   r)  s     r1   rC   z+_view_has_unbacked_input.<locals>.<genexpr>  s2      <<A$$Q'''<<<<<<r3   c              3  0   K   | ]} |           V  d S r?   rj   r)  s     r1   rC   z+_view_has_unbacked_input.<locals>.<genexpr>  s2      77A$$Q'''777777r3   )r   r%  utilsextract_shape_from_varargsrI   r   r   )r   r   r%  s     @r1   _view_has_unbacked_inputr/    s     HGGGGG,UUCCCE 	7777affhh77777 	8<<<<<<<<<	8777777777r3   size_oblivious_enabled
allow_copyc                    ddl m} ddlm}m} t          j        d          t          j                                                    j	        dk    rP }D ]:}t          j        |dk               t          j                            |d          };| u r |           S |S t                    dk    rU } j        D ]:}t          j        |dk               t          j                            |d          };| u r |           S |S t#          t$          j        d          }	t          j                                         |	k     fd           t                    t           j                  k    r% | | j                            r |           S |rt)                     r5nt+                     r%t-                    }
                     |
          S t1                                                                            |	          }|                     |          S |r>t          j        j        j        j        st?                     rtA           d|
          S |rCt-                    }
 !                    t          j"                                      |
          S d j         d                                  d d}tG          |          )Nr   )view_ofr   r  Fr&  rQ   r  c                      d j          d dS )Nz&Could not reshape a tensor with shape  as a tensor with shape !)r   )r   r   s   r1   r   z%_view_unbacked_meta.<locals>.<lambda>  s    bbbZ_bbb r3   )r  )r0  r1  memory_formatz Cannot view a tensor with shape z and strides r6  r7  )$torch._primsr3  r   r   r  r-  r.  
infer_sizer   r   rD   _check_refs	unsqueezerV   r   squeezer   r  r  r   r   r   r   r  r   r   fxexperimental_configbacked_size_obliviousr/  _view_unbacked_metaclonecontiguous_format
ValueError)r   r   r0  r1  r3  r   r  _alengthshape_numelstridesnew_stridesmsgs   ``           r1   rD  rD    s(    %$$$$$LLLLLLLL ,UUCCCE UAGGII..E 	v{{ 	/ 	/FL1%%%&&r2..BB7771::I 5zzQg 	- 	-FL1%%%$$R,,BB7771::Iua00K	L			[ bbbbb  
 5zzS\\!!nnVVE175K5K&L&L!wqzz$: ,a   , ,a@P@P ,-e44||E7+++!	!((**e4J  K ||E;///  
%;
#Au--
 #uUz
 
 
 	
  Y-e44wwU%<w==HHPWXXX
oQW
o
o188::
o
ogl
o
o
oC
S//r3   FakeTensor | Exceptionc           
        |j         s|j        rt          S t          j        g ||                                R  }t          |          rBt          | ||g|R  }t          t          |
                    t          j                            S t          | |t          t          |
                    t          j                            g|R  S Nr8  )r   	is_mkldnnr   r-  r;  r   r   
_view_metatyping_castr   rE  rD   rF  )rv   rL   r   r   views        r1   _reshape_copyrU    s     	{ ak  /e/QWWYY///Ea   
)T15u555

1H
II
 
 	
 
AGG%:QG$R$RSS
 	
 
 
 	
r3   r1  c                   t           j        j        j        j        st          ||          r%t          t          t          |||                    S t          t          t          j	        j
        |g|R d|i          S )NrV  r1  )rD   r@  rA  rB  rC  r/  rS  r   rD  r=  _reshape_view_helper)rv   rL   r   r1  r   s        r1   rR  rR    s     x$: 

>V	5? ? 

 +AuLLL
 
 	
 K,QNNNN:NN
 
 	
r3   )outrY  FakeTensor | Nonec               f    t          | ||g|R ddi}||S t                              d |          S )Nr1  Tc                B    |                      t          j                  S rP  )rE  rD   rF  r   s    r1   r   z!_view_meta_copy.<locals>.<lambda>$  s    !''(?'@@ r3   )rR  r   tree_map)rv   rL   r   rY  r   results         r1   _view_meta_copyr_    sN     	4DUDDDtDDF
??@@  r3   repeatsoutput_sizeIntLikeType | Nonec                    |L| j         | j         j        st          |          | j                                         }ddlm}  ||           |                    |          S Nr   r   )r   r   r   r   r   r   r   )rv   rL   r`  ra  r   s        r1   repeat_interleave_tensorrf  )  s     '&E ( .d333)@@BB 	TSSSSS!!+...[)))r3   Bint | float | bool | torch.SymInt | torch.SymFloat | torch.SymBoolc                   |j         x}|S | j        | j        j        s| j        st          |          t	          |j                  r| j                                        }nst          |j                  r| j                                        }nEt          |j                  r| j        
                                }nt          d|j                   ||_         |S )Nz local_scalar_dense/item NYI for )	item_memor   r   r   r   r   create_unbacked_symfloatr   r   r   create_unbacked_symboolNotImplementedError)rv   rL   rP   r   s       r1   local_scalar_denserm  A  s    
 ]'"4 #. #
 +4000ci   R88::	#)	$	$ R6688	#)	$	$ R7799!"PSY"P"PQQQCMHr3   list[FakeTensor]c                z    t           j        j        j                            |                              d          S )NrQ   )rD   opsr   r   r   unbind)rv   rL   rP   s      r1   nonzero_numpyrr  Z  s-     9>!))#..55a888r3   c                "   | j         | j         j        st          |          |j        x},ddlm}m} ddlm} ddl	m
}  ||                                          s|                                dk    rd}n| j                                         }t          j        dz
  } ||                                          s"t          |                                          }net!          j        |j                  j        }	 ||	j        |	j         j                  }
t-          |
j        |          rt          j        dz
  }n|
j        } |||           ||_        |                    ||                                fd|ft4          j                  S )Nr   r   IntInfinitybound_sympyrQ   r   r   )r   r   r   nonzero_memor   r   r   torch.utils._sympy.numbersru  torch.utils._sympy.value_rangesrw  r   r   r   r   r   mathprodr   nodeexprvar_to_rangerR   uppernew_empty_stridedr   rD   r   )rv   rL   rP   r   r   r   ru  rw  r   	prod_node
prod_ranges              r1   r   r   a  s    	#"A 	$ *$///(	
 	
 	
 	
 	
 	
 	
 	
 	;:::::??????		,, 	71A1A CC%<<>>C[1_F##CIIKK00 
.SYY[[)) Ici005	([NI$7$D 
 j.<< . [1_FF'-F%%cv6666  #swwyy!1As85; OOOr3   paddedoffsetstotal_Lc                   t          |          dk    r t          dt          |           d          |s| j        | j        j        st	          |          | j                                        }t          j        dz
  }ddlm	}m
}  ||                                          s!t          |                                          } ||d|           |g|j        dd          R }|                    |          S )NrQ   z&Only one jagged dim is supported, got z offsetsr   r   )minr      )rV   rS   r   r   r   r   r   r   r   r   r   r   r   r   r   )	rv   rL   r  r  r  r   r   r   output_shapes	            r1   _padded_dense_to_jagged_forwardr    s,    7||qKS\\KKK
 
 	
  >'&E ( .d333%<<>>q	
 	
 	
 	
 	
 	
 	
 	

  // 	)((F!!'qf====/fl122.//LL)))r3   r   c                v   ddl m}m}  | ||dk    || k                        r|S  | ||dk     ||  k                        r|| z   S  |||  k               rdS  ||| k              r| S  ||dk              rt          j        ||           S  ||dk               rt          j        || z   d          S d S )Nr   )r   sym_and)r   r   r  rD   sym_minsym_max)r   r   r   r  s       r1   _compute_slice_indexr    s   MMMMMMMM~ggeqj%4-8899 .		5TE>::	;	; 	.t|		&	& .q		%	% .	
	#	# .}UD)))			"	" .}UT\1---4r3   rQ   startendstepc                   ddl m}m} | j        }	|                                }
|
dk    rt          d          t          |                                |          }t          |                                          }t          |	                                          }|dk    rt          d          |dnt          ||         |          } ||t          j        k              s|||         nt          ||         |          }d }|U|S |||k              r||z
  |z   dz
  |z  }n5 |||k              rd}n#t          j        ||z
  d          }||z   dz
  |z  }|[|	t          d          |	                                }t          j        |dk               t          j        |||         k               ||         |z  }|!|                                |||         z  z   }n=|	t          d          |	                                }t          j        |dk               |||<   |||<   |j        rt)          d          |                    |||          S )Nr   )r   statically_known_truez,slice() cannot be applied to a 0-dim tensor.zslice step must be positiverQ   z$Must have shape_env to create symintz<Slice decomposition for quantized tensors aren't implemented)r   r   r  r   r   r   r   rb   r   r   r  r   r   rD   r  rS   r   r<  r   is_quantizedrl  r   )rv   rL   r   r   r  r  r  r   r  r   r   sizesrK  start_index	end_indexr  diffr  r   s                      r1   slice_forwardr    s          
 #I88::DqyyIJJJ
488::s
+
+CE4;;==!!Gqyy8999 }!!*>uSz5*Q*QK ! !344	38; 	c

!%*c22  $(H9#8>){233 		1!K/$6:tCHH^K9455 	1HH
 =[!8!<<DtaD0H  !GHHH3355X]###Xs+,,, $J ,,..ws|1KK !GHHH"99;;^q()))E#JGCL ?!J
 
 	
 ug~>>>r3   maskc                \   | j         | j         j        st          |          | j                                         }t          j        dz
  }ddlm}m} ddl	m
} ddlm}	  ||                                          s"t          |                                          }
net          j        |j                  j        } |	|j        |j         j                  }t+          |j        |          rt          j        dz
  }
n|j        }
|
dk    r|
} |||           |                    |f          S )NrQ   r   r   rt  rv  r  r   )r   r   r   r   r   r   r   r   r   ry  ru  rz  rw  r   r   r{  r|  r   r}  r~  r  rR   r  r   )rv   rL   r   r  r   r   r   r   ru  rw  num_elementsr  r  s                r1   masked_selectr    s_   
 	#"A 	$ *$///


4
4
6
6C [1_F        766666;;;;;;
 DJJLL)) ,4::<<((Idj)).	 [1D1QRR
j&44 	,;?LL%+Lacv....>>3&!!!r3   )r4   layouttr  torch.Size | NonerK  tuple[int, ...] | Noner   torch.dtype | Nonetorch.device | Noner  torch.layout | Nonec                  |?|                                 |k    r't          d| d|                                            |?|                                |k    r't          d| d|                                           |%|j        |k    rt          d| d|j                   |%|j        |k    rt          d| d|j                   |%|j        |k    rt          d| d|j                   d S d S )Nz!Tensor sizes mismatch! Expected: z, Got: z#Tensor strides mismatch! Expected: z!Tensor dtype mismatch! Expected: z"Tensor layout mismatch! Expected: z"Tensor device mismatch! Expected: )r   rS   r   r   r  r4   )rv   rL   r  r  rK  r   r4   r  s           r1   assert_tensor_metadatar  J  sT    6688u LELL!&&((LL   88::   RgRRahhjjRR   7e KEKK!'KK   8v NVNNAHNN   8v NVNNAHNN   r3   c                2    t           j        j        | j        v S r?   )rD   r   data_dependent_outputr   r   s    r1   r   r   r  s    uy>$)K r3   c                     t          |          r?   )r   rz   s       r1   data_depr  r  s     't
,
,,r3   indiceslist[FakeTensor | None]c                p    |D ]2}|.|j         t          j        t          j        fv rt	          |           3d S r?   )r   rD   r6   uint8r   )rL   r   r  r   s       r1   check_no_bool_index_tensorsr  {  sG      4 4U[0I!I!I-d3334 4r3   tuple[Any, ...]dict[str, Any]c                2   t          |||d          \  }}|d         j        }t          |           5   ||i |}t          |          s|                    |j                  }d d d            n# 1 swxY w Y   ||d         u r|S t          | ||          S NTr}   r   )r   r4   r   r;   r   r   r   )rv   rL   rw   rx   r   r   r   rY  s           r1   )run_and_return_new_tensor_of_input_devicer    s     14T  MAz G$+J	%i	0	0 + +dD#F##)*55 	+--	**C+ + + + + + + + + + + + + + +
 j!!!
ij111s   2A11A58A5r   primsprimc                    | j         t          v S r?   )	namespace_is_builtin_namespacesrm   s    r1   
is_builtinr    s    <111r3   c                f    t           j                            |                                 d          S )NMeta)rD   rE   ._dispatch_has_computed_kernel_for_dispatch_keyr   r   s    r1   r*   r*     s#    8BB499;;PVWWWr3   c                    t          |           o5|                                                     d          ot          |           S )Nzaten::_foreach_)r  r   
startswithr*   r   s    r1   r   r     s>    D!! 		011 r3   list[FakeTensor] | Nonec                  
 d t          j        ||                                          D             }	 t          |           5   ||i |}d d d            n# 1 swxY w Y   n# t          $ r
 t
          cY S w xY w|s|S |st          d          g }t          |          D ]X\  
}t          j	        |
fd|D                       \  }}	|
                    | j                            | ||                     Y|S )Nc                    g | ]O}t          |t          t          f          t          |          -t          |d          t          j                  M|PS )r   )rR   rb   rc   rV   rD   r   rO   s     r1   
<listcomp>z4foreach_run_and_map_input_device.<locals>.<listcomp>  sf       cD%=)) HH	
 s1vu|,,  r3   ztensor_lists must not be emptyc                     g | ]
}|         S rj   rj   )rA   tlis     r1   r  z4foreach_run_and_map_input_device.<locals>.<listcomp>  s    9W9W9WB"Q%9W9W9Wr3   )r   r   r   r   rl  r   rS   	enumerater   _find_common_devicerf   r   r   )rv   rL   rw   rx   tensor_listsout_metaout_fakemeta_tr4   r   r  s             @r1    foreach_run_and_map_input_devicer    s    ?499  L))44 	- 	-tT,V,,H	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-      ?=>>>Hx(( 
 
	6249W9W9W9W,9W9W9WXX	+@@66 	
 	
 	
 	
 Os5   A$ 	AA$ AA$ A A$ $A87A8c                    ddl m} t          |||d          \  }}|d         j        }| 5   ||i |}|                    |          cd d d            S # 1 swxY w Y   d S )Nr   )meta_index_TensorTr}   r   )torch._meta_registrationsr  r   r4   to)	rv   rL   rw   rx   r  r   r   r   rY  s	            r1   index_tensorr    s     <;;;;;04T  MAz G$+J	 " "000vvj!!" " " " " " " " " " " " " " " " " "s   AAA5tuple[FakeTensor, FakeTensor, FakeTensor, FakeTensor]c                V    ddl m} | 5   ||i |cd d d            S # 1 swxY w Y   d S )Nr   )meta_embedding_bag)r  r  )rv   rL   rw   rx   r  s        r1   embedding_bagr    s     =<<<<<	 3 3!!426223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3s   ""c                &    t          | |||          S r?   )r  rz   s       r1   multi_device_op_defaultr    s     5YdFSSSr3   c                    t          |           5   ||i | d d d            n# 1 swxY w Y   t          |||d          \  }}|d         S r  )r   r   )rv   rL   rw   rx   r   r   s         r1   multi_device_op_outr    s    
 
&i	0	0  df               14T  MAz gs   	%))c                H   t          ||d          \  }}|d         |d         j        t          j        j        k    p"j        dk    o                                dk    fd           t          | ||          }t          j        j	        u r|d         S |S )NTr}   r   r   r   rQ   c                 &    d  d dj          dS )NzMismatching z device between self (z) and values ()r:   )rL   self_devicer   s   r1   r   z index_put_impl.<locals>.<lambda>  s'    ftff;ffV\Vcfff r3   )
r   r   rD   r<  r   r   r  r   
index_put_r   )	rv   rL   rw   rx   r   r   rY  r  r   s	    `     @@r1   index_put_implr    s    
 14T  MAz !FW%1K	Lv))WfkQ.>.V6<<>>UVCVffffff  
 4ItT6
R
RCt&&&'""
r3   c                     t          |          r?   )r   rz   s       r1   nested_tensors_unsupportedr    s     't
,
,,r3   c                    g | ]X}|t           j        j        t           j        j        t           j        j        t           j        j        t           j        j        fvV|YS rj   )r   	is_pinnedr   r  r4   prim_Device_nested_tensor_from_tensor_listrY  )rA   r   s     r1   r  r  )  se        N"GNG0804

 
 	

 
 
r3   c                <    |t           v rt          d|           d S )NzNYI: )_device_not_kwarg_opsrS   rz   s       r1   nyir  (  s,      $$$^T^^,,, %$r3   KFakeTensor | tuple[FakeTensor | None, FakeTensor | None, FakeTensor | None]c           
     N    t          |||d          \  }}|d         }|d         }|j         5  |j        }ddlm t          fd|j        D                       ot          fd|j        D                       }	|	sd }
n|                    d	          }t          |d
         |d         |d         |d         |d         |d         |          }||                    d          |d<   t          j
        j        ||fi |}|dk    rJ|j        sC|j        s<|                                                    d          }|                    d          }t          j
                            |||          }
d d d            n# 1 swxY w Y   d fd}t#                     5   |di |}|t$          j        j        u r |||
          cd d d            S  ||d         |
           ||d         |
           ||d         d           fcd d d            S # 1 swxY w Y   d S )NTr}   r   weightr   r$  c              3  .   K   | ]} |          V  d S r?   rj   r)  s     r1   rC   zconv.<locals>.<genexpr>N  s/      DD!**1--DDDDDDr3   c              3  .   K   | ]} |          V  d S r?   rj   r)  s     r1   rC   zconv.<locals>.<genexpr>N  sH       M
 M
%&a  M
 M
 M
 M
 M
 M
r3   biasr   paddingdilation
transposedoutput_paddinggroups)r   r  r  r  r  r  r  
bias_sizes   r  r  torch.Tensor | Nonemem_fmttorch.memory_format | Noner,   rZ  c                (   | | S |{|                                  dk    rM|t          j        k    r=|                     d                              |                              d          } n|                     |          } t          |           S )Nr  r  r8  )r   rD   channels_lastr>  r  r?  r   )r  r  r4   rv   s     r1   convertzconv.<locals>.converts  s     9Huuww!||5+> > >KKNN%%G%<<DDQGGDDwD//)Q///r3   rQ   )r  r  r  r  r,   rZ  rj   )r   r   r   r   r%  allr   rG   r/   rD   rE   _select_conv_backendrQ  is_xpu
contiguousr>  %_conv_determine_backend_memory_formatr   r   convolutionr   )rv   rL   rw   rx   r   r   input_r  k
all_hintedr  r  select_kwargsconv_backendr  rY  r4   r%  s   `               @@r1   convr
  <  sr    14T  MAz  F!FF	 * *K 	LKKKKKDDDDv|DDDDD 
 M
 M
 M
 M
*0,M
 M
 M
 J
 J

  	 GG >>&))D/3!(+"9-#J/%l3)*:;!(+0 0 0M |.8nn\.J.Jl+ 88 "/ L Avvf.vv}v**,,66q99))!,,hDD GQ* * * * * * * * * * * * * * *X0 0 0 0 0 0 0 
&i	0	0 
 
d  Z  4#+++73((	
 
 
 
 
 
 
 
 A((A((A%%
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s*   EFFF%'H4HH!Hinputsweights	minlengthc                    | j         | j         j        st          |          | j                                         }ddlm}  ||           t          j        ||k               |                    |          S rd  )	r   r   r   r   r   r   rD   r<  r   )rv   rL   r  r  r  r  r   s          r1   bincountr    s     	#"A 	$ *$///"99;;HOOOOOOh'''	LY&'''H%%%r3   lengthsbatch_firsttuple[FakeTensor, FakeTensor]c                F   | j         | j         j        st          |          | j                                         }ddlm}  ||           |s|                    dd          }|j        dd          }|                    |          }|                    |f          }	||	fS )Nr   re  rQ   )	r   r   r   r   r   r   	transposer   r   )
rv   rL   r  r  r  new_batch_sizer   res_sizepacked_data
batch_sizes
             r1   _pack_padded_sequencer    s     	#"A 	$ *$///(??AANOOOOOOn--- (!!!Q''|ABBH""8,,K!!>"344J$$r3   c                     d fd}|S )Nr^   r_   r,   c                    | t           <   | S r?   )FAST_OP_IMPLEMENTATIONS)r^   rL   s    r1   rh   z-register_fast_op_impl.<locals>.impl_decorator  s    (/%r3   ri   rj   )rL   rh   s   ` r1   register_fast_op_implr    s)          r3   btuple[IntLikeType, ...]c                  
 ddl m} t          |           }t          |          }t          ||          }dg|z  }t	          |dz
  dd          D ]
|dz
  
z
  }|dz
  |z
  }|dz
  |z
  }	|dk    r| |         nd|	dk    r||	         ndt          j         |dk              p |dk              pk    
fd            |dk              rn|
<   t          |          S )Nr   r   rQ   r  c                     d d d  dS )NzThe size of tensor a (z#) must match the size of tensor b (z) at non-singleton dimension r  rj   )r  sizeAsizeBs   r1   r   zinfer_size.<locals>.<lambda>  s5     /U / /05/ /*+/ / / r3   )r   r   rV   r   r  rD   r<  rc   )r   r  r   dimsAdimsBr   expandedSizesoffsetdimAdimBr  r"  r#  s             @@@r1   r;  r;    sT    EDDDDDFFEFFEueD()sTzM4!8R$$ J JAqy6!qy6!199$!199$! 	N5A:&&V..!*D*DVQV/ / / / / /	
 	
 	
 %3N5A:$>$>I55Ear3   slow_refCallable[..., Any]type_promotion_kindr   Callable[..., FakeTensor]c                     d	 fd}|S )
Nmoder"   rw   r   rx   r,   r   c           	         d fd}t          d           }d }|D ]9}t          |t          j                  r|j        nd}||}t          ||          }:|t          d          d	d
lm}m	}	 |D ]]}t          |t          j                  rAt          |j                  t          |          k    r | |	|j        |                    r n^ |d          S t          j        d          }
|
}d }d}|D ]f}t          |t          j                  sd}||
k    r|j        j        dk    r|j        }|t          j        k    rd}Q|j        }Y||j        k    rd}g|rt!          |di\  }}d	}d}|D ]w}t          |t          j                  s||
k    r<|                                d	k    r$|j        |
k    r||k    r |d          c S |dz  }_|j        |k    r |d          c S xd}d}t%          |          rZ|D ]W}t          |t          j                  s|ot'          |t          j                  }|ot'          |t          j                  }X|rAt          d           t-           t          j        ||dt          j                  |          S |rAt          d           t-           t          j        ||dt          j                  |          S  |d          S )NrM  r   r,   r   c                p    t          d|             5   i cd d d            S # 1 swxY w Y   d S )Nzslow r   )rM  rw   rx   r/  r*  s    r1   slowz=make_fast_binary_impl.<locals>.fast_binary_impl.<locals>.slow  s    &&& 1 1x0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1s   +//zattempt fastrj   zfinal_shape must not be Noner   r4  z#both tensors nontrivially broadcastr   FTr,  rQ   errorr8  zfast is_contiguousr   )r   r4   r9  r:   zfast channels_lastzno contiguity match)rM  r   r,   r   )r   rR   rD   r   r   r;  rS   r   r   r  rV   r4   r9   r   DEFAULTr   r   r   r;   r   rF  r  r   empty)r/  rw   rx   r2  operandsfinal_shaperg   r   r   r  r   common_devicecommon_dtypehas_different_input_dtypesr   current_cpu_scalars_on_non_cpumax_cpu_scalars_on_non_cpudefinitely_contiguousdefinitely_channels_lastr*  r,  s   ```                r1   fast_binary_implz/make_fast_binary_impl.<locals>.fast_binary_impl  s#   	1 	1 	1 	1 	1 	1 	1 	1 	1
 	N###  )- 	9 	9B+5b%,+G+GOrxxRE"#
 %[%88KK !?@@@PPPPPPPP  
	? 
	?B2u|,,MMS%5%555"N66"(K#@#@AA 6  4=>>> l5!!&)+/%*" 	2 	2Bb%,// -1*##	%(?(? "	#&*I*QQQ15..#%8LL))-1*% 	 1/B OA| *+&%&" 	% 	%Bb%,// ##A")s:J:J15OOO4==(((.!3..m++tG}}$$$ , !%#' 
 &m44 	  !"el33 ) @%*A   & - @%*=   )( ! 	,---&!"'"9	   %	 	 	 	 $ 	,---&!"'"5	   %	 	 	 	 t)***r3   )r/  r"   rw   r   rx   r   r,   r   rj   )r*  r,  r?  s   `` r1   make_fast_binary_implr@    s7    K+ K+ K+ K+ K+ K+ K+Z r3   r   include_realc                X   t                      5  t          |           5  t          j        j        j                            |          }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |rt          | ||j        |j	                  S t          | ||j                  S )N)real_tensor)
r
   r   rD   rp  r   detachr   r   r4   rC  )rv   r   rA  rY  s       r1   fast_detachrE    s    
		 / /!=i!H!H / /in#++A../ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / O)S!(NNNNiah///s4   A,*A	A,A	A,A	A,,A03A0$dict[OpOverload, Callable[..., Any]]c                    dd l }  t          | j        j        j        j                  t          | j        j                              t          | j        j        j        j                  t          | j        j                              t          | j        j        j	        j                  t          | j        j	                              t          | j        j        j
        j                  t          | j        j
        t          j                              t          | j        j        j        j                  t                     t           S )Nr   )r,  )torch._refsr  rp  r   addr   r@  r=  subr  divr   INT_TO_FLOATrD  r   rE  r  )rD   s    r1   r(   r(     s'   4%).,344eko..   5%).,344eko..   5%).,344eko..   5%).,344KO ? L	
 	
 	
   9%)./788EEE""r3   )r+   r&   r,   r-   )r4   r5   r,   r6   )r<   r   r,   r6   )rL   r   r,   r6   )rZ   r[   r,   r\   )rg   r   r,   r6   )rg   r   r,   ro   )
rv   r"   rL   r   rw   r   rx   r   r,   r   )
rv   r"   rL   r   rw   r   rx   r   r,   r   )
rv   r"   rL   r   rw   r   rx   r   r,   r6   r?   )
rv   r"   rL   r   r   r   rw   r   r,   r   )rv   r"   rL   r   r   r   r,   ro   )
rv   r"   rL   r   r   r   rw   r   r,   r   )
rv   r"   rL   r   rw   r   rx   r   r,   ro   )TFF)rv   r"   rL   r   rP   r   r   r   r   r6   r   r6   r   r6   r   r6   r,   r   )rv   r"   rL   r   rP   r   r   r6   r   r6   r   r6   r,   r   )rv   r"   rL   r   r   r   r   r   r   r#   r,   r   )rv   r"   rL   r   rP   r   r   r   r   r6   r   r6   r   r6   r,   r   )FFN)rv   r"   rL   r   rP   r   r   r6   r   r6   r   r   r,   r   )F)
r  r	  r
  r	  r  r	  r  r6   r,   r  )r   r!  r   r"  r,   r6   )TF)
r   r!  r   r"  r0  r6   r1  r6   r,   r!  )
rv   r"   rL   r   r   r   r   r   r,   rN  )rv   r"   rL   r   r   r   r   r   r1  r6   r,   r   )rv   r"   rL   r   r   r   r   r#   rY  rZ  r,   r   )
rv   r"   rL   r   r`  r   ra  rb  r,   r   )rv   r"   rL   r   rP   r   r,   rg  )rv   r"   rL   r   rP   r   r,   rn  )rv   r"   rL   r   rP   r   r,   r   )rv   r"   rL   r   r  r   r  rn  r  rb  r,   r   )r   r#   r   r#   r,   rb  )r   NNrQ   )rv   r"   rL   r   r   r   r   r   r  r   r  r   r  r   r,   r   )
rv   r"   rL   r   r   r   r  r   r,   r   )NNN)rv   r"   rL   r   r  r   r  r  rK  r  r   r  r4   r  r  r  r,   ro   )rL   r   r   r   r  r  r,   ro   )
rv   r"   rL   r   rw   r  rx   r  r,   r   )
rv   r"   rL   r   rw   r   rx   r   r,   r  )
rv   r"   rL   r   rw   r   rx   r   r,   r  )
rv   r"   rL   r   rw   r   rx   r   r,   r  )Nr   )rv   r"   rL   r   r  r   r  rZ  r  r#   r,   r   )rv   r"   rL   r   r  r   r  r   r  r6   r,   r  )rL   r   r,   r\   )r   r	  r  r	  r,   r  )r*  r+  r,  r   r,   r-  )rv   r"   r   r   rA  r6   r,   r   )r,   rF  )
__future__r   	functoolsr   r{  r  r   r   typingr   r   rS  r   r   typing_extensionsr	   rD   torch._custom_optorch._loggingtorch._prims_common_prims_commonr-  torch._dispatch.pythonr
   
torch._opsr   r   r   r   r   r   r   r   r   r   r   r   torch._subclasses.fake_tensorr   r   r   r   r   r   torch.fx.operator_schemasr   torch.utils._statsr   collections.abcr    r!   r"   torch.typesr#   r   FakeTensorLiker$   r%   r&   _pytreer   __all__ra   r'   _opsrp  r   r2   r;   r   r   rY  	full_like	ones_like	rand_like	generatorgenerator_out
randn_likerandint_likeTensor_generator
Tensor_outTensor_generator_out	low_dtypelow_generator_dtypelow_dtype_outlow_generator_dtype_out
zeros_liker   r  new_full	new_zerosnew_onesr   _resize_output_r  
pin_memoryr  r4   r  r  _pin_memory_resize_outputr  _list_to_tensorr   r@   cacherY   rd   rn   ru   __contains__r{   r   r   profilerr   r   r   r   r)   r   r   r   r   r   _unique2r   selectr   r  r  r   r  r/  rD  rU  rT  _unsafe_viewrR  	view_copyr_  r   rf  item_local_scalar_denserm  rr  r   r  r  slicer  r  _assert_tensor_metadatar  r  r  r  r  r  r*   r  r   r  _embedding_bagr  _unsafe_index_putcopycopy_slice_scatterdiagonal_scatterr  r  	index_putr  r  _nested_view_from_buffer_nested_view_from_buffer_copyr  r  r  convolution_backwardr
  r  r  r  r  r;  r4  r@  rE  r(   rj   r3   r1   <module>r     s   " " " " " "           



       C C C C C C C C C C C C ' ' ' ' ' '          # # # # # # 7 7 7 7 7 7 ! ! ! ! ! !                                         C B B B B B * * * * * *  (22222222<<<<<<'''''' el*Yt__WT]]WT]]		      z~& & & &        (K 'O'O' 	N' 	N	'
 	N' 	N' 	N' 	N' 	N' 	N ' 	O' 	O' 	O' 	O!' 	'  	!'" 	#'$ 	&%'& 	 ''( 	*)'* 	+', 	#-'. 	/'0 	)1'2 	#3'4 	-5'6 	O7'8 	O9': 	N;'< 	N='> 	"?'@ 	A'B 	MC'D 	ME'F 	NG'H 	NI'J 	MK'L 	MM' ' ' T $ (0(,OGNGN   #'"6!8     	 	 	 	   4) ) ) )    )677K K K 87K ()).-.//0 0 0 0/ *)0@ $.())   *)  %)$;CDDRV	C 	C 	C 	C ED	C %)$:BCC	 	 	 DC	 %)$?GHHRV        IH  $'%&&$'.!!   "! '&$   
 %&&- - - '&-D $/)**% % % +*% $?GHH: : : IH: T T 
, , , 
,  O  %O O O O O Od $-'((
  V V V V )(V $+/"".E .E .E #".Eb $/)**      +** $)122
 !    322 !	L L L L L^   " $(	P P P P Pf $$,--
 
 
 .-
, $)#$$$#+,, 
 
 
 
 
 -, %$
( $.()) "     *)* $(/00
 '+	* * * * 10*. %).%-..%).4<==   >= /.. %)..6779 9 9 879 %).(011/P /P /P 21/Pd %).@HII #'%* %* %* %* JI%*P   & %).&-..
 J? J? J? J? /.J?Z %)..677(" (" (" 87("V %).8@AA
  $&* $# #'"&# # # # # BA#N KKLL- - - ML-4 4 4 42 2 2 2* %VWf== 2 2 2 2X X X X
   
      
 L $*#$$" " " %$"$ $%-..3 3 3 /.3 $(011$)#$$$*$%%$$,--$'/00T T T 10 .- &% %$ 21
T $)-  $$())
 
 
 *) ! 
 $.())$/)**   +* *)( $6>??$6:;;$/788$4<==- - - >= 98 <; @?-  &   - - - -
 4#+T-F-NOPPM M M QPM` %).)122
 "&& & & & 32&. %).6>??% % % @?%>  
   "  "  "  " N <[;bQ Q Q Q Qn DI0 0 0 0 0 # # # # # #r3   