o
    0h                     @   s(   d dl Z dd Zdd Z	d	ddZdS )
    Nc                 C   sn   |   dksJ | jd d dksJ | jtjksJ | d d dd df d@ d> | d d dd df d@ B S )N      r         )dimshapedtypetorchint8weight r   ]/var/www/vscode/kcb/lib/python3.10/site-packages/torch/quantization/_quantized_conversions.pypack_int4_to_int8   s   8r   c                 C   sV   |   dksJ | jtjksJ tj| d@ | d? d@ fdd| jd d| jd  S )Nr   r   r   )r   r   r   )r   r   r	   r
   stackviewr   r   r   r   r   unpack_int8_to_int4   s
   r   Fc                 C   s2  |   dksJ | jtjksJ |tjks|tjksJ | jjdks$J | j}|sC|tjkr2| j}n|tjkrBtt	| 
tjj}n| }|j\}}||tjkrRdnd dksYJ |d dksaJ |tjkrtjg d|dtjd|d |dd	d
d |d d 
d	}n"tjg d|dtjd|d |dd	d
d |d d 
d	}|d
||}|tjkrdnd}d| }	tjd|| |d|d |  
d	d
d
|d | 
d	}
tjd|d |	 |d||	  
d	d
d
|	
d	|}tjd||d|	 
d	d
d
|d 
d	|| }tjd|	|d|d | |	 }|
| | | }|
d	
tj}t|}|d|| |
| j}|
d	}t|}|tjkr|tjd |j}|dd d |dd d< |dd d |d
d d< |d
d d |dd d< |dd d |dd d< nh|tjkr|d@ d d@ }
|
d
d d d> |
dd d B }
|d? d@ d d@ }|d
d d d> |dd d B }|
dd d |dd d< |
d
d d |d
d d< |dd d |dd d< |d
d d |dd d< |tjkr|d9 }|d }|
||
tjS )Nr   cuda    @   r   )r   r         r      	      r      
               r   )device   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
   quint4x2r!   typeTr   r   r   r   tensorarangereshapeexpand
index_copyrepeatint32
zeros_likescatter_
empty_liketointuint8)r   dtypeq	transposer!   outpncolsnrowscols_permutedmagic0magic1tmp0tmp1tmp2tmp3outp_offsetstmpr   r   r   8quantized_weight_reorder_for_mixed_dtypes_linear_cutlass   s   



  	
"


  rC   )F)r	   r   r   rC   r   r   r   r   <module>   s
   
