
    Pi%                        d dl mZmZmZ d dlZd dlmZ d dlmZm	Z	 d dl
mZmZ d dlmZ ej        j        Z ed          dej        d	ej        d
ej        dededej        fd            Z ed          dej        d	ej        d
ej        dededej        fd            Z ed          dej        d	ej        d
ej        dej        dej        dej        dej        fd            Z ed          dej        d	ej        d
ej        dej        dej        dej        dej        fd            Z ed          dej        dej        d	ej        d
ej        dededej        dej        fd            Z ed          dej        dej        d	ej        d
ej        dededej        dej        fd            Z G d de          Zej        Zej        Z eej        j                  d             Z eej        j                  d             Z  eej!        j                  d             Z" eej#        j$                  d              Z% eej&        j                  d!             Z' eej(        j                  d"             Z) eej*        j                  d#             Z+ eej,        j                  d$             Z- eej.        j/        j0                  d%             Z1dS )&    )ListOptionalTupleN)return_and_correct_aliasing)broadcast_batch_dimsbsr_dense_addmm)register_custom_opregister_custom_op_impl)TorchAOBaseTensorzblocksparse::bsr_to_densecrow_indicescol_indicesvaluesMKreturnc                 Z    t          j        | ||||f                                          S )N)r   r   r   size)torchsparse_bsr_tensorto_denser   r   r   r   r   s        p/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/torchao/sparsity/blocksparse.pybsr_to_denser      s7     "!{6QRTUPV  hjj    c                 H    t          j        ||f|j        |j                  S )Ndtypedevice)r   emptyr   r   r   s        r   bsr_to_dense_abstractr        s#     ;1vV\&-HHHHr   zblocksparse::int_addmmA
left_alpharight_alphac           
      |   |j         t          j        k    sJ |j        d         }|j        d         }|j        d         }t          j        | ||||f          }	t          t          |	|          }
|                    |
||fz   t          j                  }t          ||	|dd|||          
                                S )Nr   )r      r   )alphabetaoutr"   r#   )r   r   int8shaper   r   blocksparse_int_addmm	new_emptybfloat16r   t)r   r   r   r!   r"   r#   r   r   N
weight_bsroriginal_batch_dims_broadcastedr+   s               r   r.   r.   +   s     <5:%%%%A	A	A({FRSUVQWXXXJ&:z1' '# ++5A>en+
U
UC		 	 	 acc	
r   c                     |j         d         }|j         d         }t          j        ||ft          j        |j                                                  S )Nr%   r   )r-   r   r   r0   r   r1   )r   r   r   r!   r"   r#   r2   r   s           r   blocksparse_int_addmm_abstractr6   I   sG     	
AA;1vU^AHEEEGGIIIr   zblocksparse::addmmx_paddedbiasc                     |J t          j        |||||f          }| j        d         }|                     ||f          }	t	          |	|| dd|	           |	S )Nr'   r(   r   )r)   r*   r+   )r   r   r-   r/   r   )
r7   r   r   r   r   r   r8   bsrN_paddedr+   s
             r   blocksparse_addmmr<   X   s}     <<<

!,V1a&
Q
Q
QC~a H


a]
+
+C    Jr   c                 J    | j         d         }|                     ||f          S )Nr(   )r-   r/   )r7   r   r   r   r   r   r8   r;   s           r   blocksparse_addmm_abstractr>   q   s(     ~a Hq(m,,,r   c                      e Zd ZU eej                 ed<   eej                 ed<   eej                 ed<   eed<   g dZe		 ddej
        dedeej                 deej                 deej                 defd	            Zd
efdZd
eee         eej
        eef         f         fdZedeej
        eef         d
ej        fd            Zed             Zd ZdS )BlockSparseTensorbsr_crow_indicesbsr_col_indices
bsr_values	blocksize)rA   rB   rC   Fr-   requires_gradc                     |t          d          |}|j        |j        |j        |d}t	          j        j        | |fi |}	||	_        ||	_        ||	_	        ||	_
        |	S )NzCNo values passed to BlockSparseTensor: bsr_values must be provided!)r   r   layoutrE   )
ValueErrorr   r   rG   r   Tensor_make_wrapper_subclassrD   rA   rC   rB   )
clsr-   rD   rA   rB   rC   rE   previous_tensorkwargstensors
             r   __new__zBlockSparseTensor.__new__   s     U   )O &,$*%,*	
 
 4S%JJ6JJ$"2&!0r   r   c                 T    t          | d          sJ | j        j         d| j         dS )Nr-   z(shape=))hasattr	__class____name__r-   )selfs    r   __repr__zBlockSparseTensor.__repr__   s6    tW%%%%%.)??$*????r   c                 ~     t          t           fd j                            } j         j         j        f}||fS )Nc                 (    t          |           d uS )N)getattr)xrU   s    r   <lambda>z6BlockSparseTensor.__tensor_flatten__.<locals>.<lambda>   s    WT1--T9 r   )listfilter	__slots__r-   rE   rD   )rU   inner_tensorstensor_metas   `  r   __tensor_flatten__z$BlockSparseTensor.__tensor_flatten__   sK    99994>JJ
 
 z4#5t~Fk))r   r`   c           
          |\  }}} | |||                     dd           |                     dd           |                     dd           |          S )NrA   rB   rC   r-   rD   rA   rB   rC   rE   )get)rK   r_   r`   
outer_sizeouter_strider-   rE   rD   s           r   __tensor_unflatten__z&BlockSparseTensor.__tensor_unflatten__   sm     +6'}is*../A4HH)--.?FF$((t<<'
 
 
 	
r   c                     |                     |          } | |j        ||                                |                                |                                d          S )NFrc   )to_sparse_bsrr-   r   r   r   )rK   dense_tensorrD   
bsr_tensors       r   
from_densezBlockSparseTensor.from_dense   sg    !//	::
s$'4466&2244!((**
 
 
 	
r   c           	          t          | j        | j         || j                   || j                   || j                  | j                  S )Nrc   )r@   r-   rD   rA   rB   rC   rE   )rU   funcs     r   apply_fn_to_shardz#BlockSparseTensor.apply_fn_to_shard   sX     *n!T$"788 D!566tDO,,,
 
 
 	
r   N)F)rT   
__module____qualname__r   r   rI   __annotations__intr^   staticmethodSizeboolrO   strrV   r   r   ra   classmethodrg   rl   ro    r   r   r@   r@      s        u|,,,,el++++&&&&NNNEEEI $ z  #5<0	
 "%,/ U\*    \:@# @ @ @ @*E$s)U5:tS;P5Q*Q$R * * * * 
 5:tS01
 

 
 
 [
$ 

 

 [


 
 
 
 
r   r@   c                 l    t          | |||d                             t          j                            S Nr   )r   ro   r   detachrn   typesargsrM   s       r   block_sparse_detachr      s1    &dFDG55elCC  r   c           	         t          |          dk    sJ t          |          dk    sJ |d         dk    sJ |d         }|                                dk    sJ |j        rJ t          |j        dz   |j        |                                |                                |                                	                    d          d          S )N   r   r%   )r(   F)rE   )
lendimrE   r@   r-   rD   r   r   r   	unsqueeze)rn   r~   r   rM   r:   s        r   block_sparse_unsqueezer      s    t99>>>>v;;!8q====
q'C7799>>>>    	D

r""   r   c                     t          |          dk    sJ t          |          dk    sJ |\  }}d }t          |t          j                  r!t          |t                    r |||          S  |||          S )Nr   r   c                    t          | t                    sJ t          |t          j                  sJ |                                 dk    sJ |                                dk    sJ | j        rJ |                    d          dk    sJ |                    |                    d          |                    d          | j        z  | j        d          }|	                    dd          
                    d|                                           }|                                 |z  }t          | j        | j        |                                 |                                 |          S )N   r   r(   )
isinstancer@   r   rI   r   rE   r   viewrD   	transposeindex_selectr   r   r-   r   )r:   r1   	t_blockedmasked_t
new_valuess        r   my_mulz block_sparse_mul.<locals>.my_mul   s.   #011111!U\*****wwyyA~~~~uuww!||||$$$$vvayyA~~~~FF166!99affQii3=&@#-QRSS	&&q!,,99!S__=N=NOOZZ\\H,
 Is}c&6&6&8&8#//:K:KZ
 
 	
r   )r   r   r   rI   r@   )rn   r~   r   rM   r:   r1   r   s          r   block_sparse_mulr      s    t99>>>>v;;!FC
 
 
 #u|$$ A7H)I)I va~~6#q>>r   c                 4   |\  }}t          |          t          k    sJ t          |          dk    sJ |d         }|dk    sJ t          j        j                            |                                |                                |j	        d                   S )Nr(   r   )
typer\   r   r   opsblocksparsesumr   r   r-   )rn   r~   r   rM   r:   r   s         r   block_sparse_sumr     s    HC99s88q====
a&C!88889 $$SZZ\\33C3C3E3EsyQR|TTTr   c                 @    |d         j                                         S r{   )rC   r|   r}   s       r   block_sparse_valuesr     s    7$$&&&r   c                 @    |d         j                                         S r{   )rA   r|   r}   s       r   block_sparse_crow_indicesr   "  s    7#**,,,r   c                 @    |d         j                                         S r{   )rB   r|   r}   s       r   block_sparse_col_indicesr   '  s    7"))+++r   c                 2    |d         j         j        d         S r{   )rC   r-   r}   s       r   block_sparse__nnzr   ,  s    7#A&&r   c           	         |\  }}}|                     d|                    d                                                    }|j        d         }|j        d         }	t          j        j                            ||                                |	                                |
                                ||	d           }
|
                                }||S ||z   S )Nr%   r   r(   )reshaper   r1   r-   r   r   r   addmmr   r   r   )rn   r~   r   rM   x_origwr8   rZ   r   r   r+   out_origs               r   block_sparse_linearr   1  s    OFAtr6;;r??++--//A	
A	
A
)

%
%				

		 C uuwwH|d?r   )2typingr   r   r   r   torch.utils._python_dispatchr   torchao.kernel.bsr_triton_opsr   r   torchao.opsr	   r
   torchao.utilsr   r   atenrI   rs   r   r    r.   r6   r<   r>   r@   
implementsimplements_torch_functionr|   defaultr   r   r   mulr   r   dim_IntListr   r   r   r   r   r   r   _nnzr   nn
functionallinearr   ry   r   r   <module>r      sZ   ) ( ( ( ( ( ( ( ( (  D D D D D D O O O O O O O O C C C C C C C C + + + + + +y~ 455	,		 L	 		
 	 \	 	 	 65	 /00I,II LI 	I
 I \I I I 10I 122
,

 L
 |	

 
 
 \
 
 
 32
: ,--J,JJ LJ |	J
 J J \J J J .-J -..l,  L	
   , \   /.0 ())
-l
-,
- 
- L	
-
 
- 
- ,
- \
- 
- 
- *)
-Y
 Y
 Y
 Y
 Y
) Y
 Y
 Y
z )
-G  DK    !  DN"##  $#" DHO  0 DH !!U U "!U DK  ' ' ! ' D%&&- - '&- D$%%, , &%, DI' ' ' 58.566  76  r   