
    Pi/                     T    d dl Z d dlmZ dededefdZ G d de j                  ZdS )	    N)tree_mapsizealignment_valuereturnc                     d| dz
  |z  z   |z  S N    )r   r   s     r/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/torchao/swizzle/swizzle_tensor.py_get_min_alignmentr      s    $(./?BB    c                       e Zd ZdZ	 ddej        defdZddZd Z	d Z
d	 Zd
 Zed             Zd Zedd            Zej        j        ZdS )SwizzleTensorz
    A Python-only swizzled tensor subclass.

    Intended usage of this abstraction:
    Swizzle weight Tensor to avoid LDS use during GEMMs on ROCm hardware.
    Foriginalshallowc                 n    t          j        |d          }t           j                            | |          S )Nmeta)device)torch
empty_likeTensor_make_subclass)clsr   r   wrappers       r   __new__zSwizzleTensor.__new__   s1    
 "8F;;;|**3888r   c                 r   |rd S |j         dk    s
J d            |j        dk    s|j        dk    sJ |j        dk    rdnd}|j        dk    rdnd}|j         dk    r|j        \  }}d}|j         d	k    r|j        \  }}}t          |d          }t          ||          }	||z
  }
|	|z
  }t          j        j                            |d|d|
fd
d          }|j         dk    r8|                    |dz  d|	|z  d|          }|	                    ddd	dd          }|j         d	k    r:|                    ||dz  d|	|z  d|          }|	                    ddd	ddd          }|
                                | _        || _        || _        || _        || _        |	| _        |
| _        || _        |j         | _        d| _        d S )N   z"SwizzleTensor only supports ndim 2r	       @         r      constant      F)ndimitemsizeshaper   r   nn
functionalpadviewpermute
contiguousxBMKalignedMalignedKpaddedMpaddedKoriginal_ndimis_transposed)selfr   r   kdivlastdimr1   r2   r0   r3   r4   r5   r6   r/   s                r   __init__zSwizzleTensor.__init__    s    	F}!!!#G!!! A%%):a)?)?)??&!++rr(A--!!2=A>DAqA=AnGAq!%a,,%a..Q,Q,H##Hq'1g.F
TUVV=Ax2~r8t+;QHHA		!Q1a((A=Aq(b."h$.>7KKA		!Q1a++A  %]"r   c                 J    | j         j         d|                                  dS )Nz
(original=))	__class____name__	unswizzler9   s    r   __repr__zSwizzleTensor.__repr__C   s(    .)HHT^^5E5EHHHHr   c                    d }| j         dk    r| j                            ddddd                                          }|                    | j        | j                  }|d| j        d| j        f         }|                    | j        | j                  }| j	        r|j
        }| j         dk    r| j                            dddddd                                          }|                    | j        | j        | j                  }|d| j        d| j        d| j        f         }|                    | j        | j        | j                  }|S )Nr   r   r"   r	   r$   r%   )r7   r/   r-   r.   reshaper3   r4   r1   r2   r8   Tr0   )r9   undones     r   rA   zSwizzleTensor.unswizzleF   s,   ""V^^Aq!Q22==??F^^DM4=AAFAJDF
23F^^DFDF33F! """V^^Aq!Q155@@BBF^^DFDM4=IIFAJDF
AJ>?F^^DFDFDF;;Fr   c                    | j         dk    r5| j                            | j        | j                  }| j        r|j        }|S | j         dk    r;| j                            | j        | j        | j                  }| j        r|j        }|S d S )Nr   r"   )r7   r/   rE   r3   r4   r8   rF   r0   )r9   tmps     r   	as_tensorzSwizzleTensor.as_tensorV   s    ""&..>>C! eJ""&..FFC! eJ	 #"r   c           	         | j         dk    r| j        | j        fn| j        | j        | j        ff}t	          t          j        || j        | j        ddd          }| j	        |_	        | j        |_        | j        |_        | j        |_        | j
        |_
        | j        |_        | j        |_        | j        |_        | j         |_         | j         |_        |S )Nr   r   )dtypelayoutr   T)r7   r1   r2   r0   r   r   emptyrL   rM   r/   r3   r4   r5   r6   r8   )r9   r(   new_objs      r   shallow_transposezSwizzleTensor.shallow_transposec   s     $ 2a 7 7TVTVdfdfdf=U
  KdjVTTT
 
 F	F	F	F	==,, $ 2$($6 6r   c                 l    t          j        | j        r| j        | j        fn| j        | j        f          S N)r   Sizer8   r2   r1   rB   s    r   r(   zSwizzleTensor.shapew   s1    zd.@V4646**tvtvFVWWWr   c                 4    | j         r	d| j        fn| j        dfS r   )r8   r2   rB   s    r   stridezSwizzleTensor.stride{   s     "0A46{{tvqkAr   Nc                     ddl m} ||v r ||         |||          S d }d }t          | |t          ||          i t          ||                    S )Nr   )SWIZZLE_OPS_TABLEc                 X    t          | t                    r|                                 n| S rR   )
isinstancer   rA   es    r   unwrapz0SwizzleTensor.__torch_dispatch__.<locals>.unwrap   s#    $.q-$@$@G1;;===aGr   c                 X    t          | t          j                  rt          |           n| S rR   )rY   r   r   r   rZ   s    r   wrapz.SwizzleTensor.__torch_dispatch__.<locals>.wrap   s&    '1!U\'B'BI=###Ir   )torchao.swizzle.swizzle_opsrW   r   )r   functypesargskwargsrW   r\   r^   s           r   __torch_dispatch__z SwizzleTensor.__torch_dispatch__~   s     	BAAAAA$$$*$T*4v>>>	H 	H 	H	J 	J 	J ddHVT$:$:Whvv>V>VWWXXXr   )FrR   )r@   
__module____qualname____doc__r   r   boolr   r<   rC   rA   rJ   rP   propertyr(   rU   classmethodrd   _C_disabled_torch_function_impl__torch_function__r
   r   r   r   r      s         9 9,9 9 9 9 9!# !# !# !#FI I I       ( X X XXB B B Y Y Y [Y  ?r   r   )r   torch.utils._pytreer   intr   r   r   r
   r   r   <module>rp      s     ( ( ( ( ( (CS C3 C3 C C C C@ @ @ @ @EL @ @ @ @ @r   