o
    kiT                     @   s(   d dl Z dd Zdd Z	d	ddZdS )
    Nc                 C   s   |   dkrtd|    d| jd d dkr#td| jd  | jtjkr1td| j | d d dd df d@ d	> | d d dd df d@ B S )
N   weight must be 2D, got D   r   z"weight.shape[1] must be even, got weight.dtype must be int8, got       )dimAssertionErrorshapedtypetorchint8weight r   s/var/www/addictedbytheproject.nl/epg/venv/lib/python3.10/site-packages/torch/quantization/_quantized_conversions.pypack_int4_to_int8   s   8r   c                 C   sr   |   dkrtd|    d| jtjkrtd| 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	   r
   r   r   r   stackviewr   r   r   r   r   unpack_int8_to_int4   s   r   Fc                 C   s  |   dkrtd|    d| jtjkrtd| j |tjkr/|tjkr/td| | jjdkr>td| jj | j}|s]|tjkrL| j}n|tjkr\t	t
| tjj}n| }|j\}}|tjkrkdnd	}|| d
kr}td| d| |d	 d
krtd| |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r8|d9 }|d }|||tjS )Nr   r   r   r   z%dtypeq must be int8 or quint4x2, got cudazweight must be on CUDA, got     @   r   znrows must be divisible by z, got z#ncols must be divisible by 64, got )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   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divisorcols_permutedmagic0magic1tmp0tmp1tmp2tmp3outp_offsetstmpr   r   r   8quantized_weight_reorder_for_mixed_dtypes_linear_cutlass"   s   



  

"


  rH   )F)r   r   r   rH   r   r   r   r   <module>   s
   