
    9jT                     "    d dl Z d Zd Z	 ddZy)    Nc                 p   | j                         dk7  rt        d| j                          d      | j                  d   dz  dk7  rt        d| j                  d          | j                  t        j
                  k7  rt        d| j                         | d d dd df   dz  d	z  | d d dd df   dz  z  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weights    i/media/conek/DATA/Code/OCR/venv/lib/python3.12/site-packages/torch/quantization/_quantized_conversions.pypack_int4_to_int8r      s    zz|q6vzz|nAFGG||AaA&,,q/ARSTT||uzz!>v||nMNNAqt!tG_s"q(VAqt!tG_s-BCC    c                 j   | j                         dk7  rt        d| j                          d      | j                  t        j                  k7  rt        d| j                         t        j
                  | dz  | dz	  dz  fd      j                  | j                  d   d| j                  d	   z        S )
Nr   r   r   r   r	   r
   )r   r   r   )r   r   r   r   r   stackviewr   r   s    r   unpack_int8_to_int4r      s    zz|q6vzz|nAFGG||uzz!>v||nMNN;;v{c&9:BGGQV\\!_, r   c                    | j                         dk7  rt        d| j                          d      | j                  t        j                  k7  rt        d| j                         |t        j                  k7  r!|t        j
                  k7  rt        d|       | j                  j                  dk7  r"t        d| j                  j                         | j                  }|so|t        j                  k(  r| j                  }nQ|t        j
                  k(  r>t        t        | j                  t        j                              j                        }n| }j                  \  }}|t        j
                  k(  rdnd	}||z  d
k7  rt        d| d|       |d	z  d
k7  rt        d|       |t        j
                  k(  rkt        j                  g d|      t        j                  d
|dz  |      j                  dd      dz  j!                  |dz  d      z   j                  d      }njt        j                  g d|      t        j                  d
|dz  |      j                  dd      dz  j!                  |dz  d      z   j                  d      }|j#                  d||      }|t        j
                  k(  rdnd}	d|	z  }
t        j                  d
||	z  |      |dz  |	z  z  j                  dd      j%                  d|dz  |	z        j                  d      }t        j                  d
|dz  |
z  |      |	|
z  z  j                  dd      j%                  d|
      j                  d      j%                  |      }t        j                  d
|	|      |
z  j                  dd      j%                  d|dz        j                  d      j%                  ||	z        }t        j                  d
|
|      j%                  |dz  |z  |
z        }||z   |z   |z   }|j                  d      j                  t        j&                        }t        j(                  |      }|j+                  d
||       |j                  | j                        }|j                  d      }t        j,                  |      }|t        j                  k(  rt|j/                  t        j0                        dz   j/                  |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<   n|t        j
                  k(  ry|dz  dz   dz  }|dd d   dz  |d
d d   z  }|dz	  dz  dz   dz  }|dd d   dz  |d
d d   z  }|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z  }|dz  }|j                  ||      j                  t        j2                        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tmps                    r   8quantized_weight_reorder_for_mixed_dtypes_linear_cutlassrL   "   s    zz|q6vzz|nAFGG||uzz!>v||nMNN%.. 8DVHMNN}}V#;FMM<N<N;OPQQ]]F UZZ88Du~~%$%8UZZ9P%Q%S%STD::LE5enn,b"Gw!:7)6%QRRrzQB5'JKK LLF ||Au{6:BB2qIBNVVR	 $r( 	 LLF ||Au{6:BB2qIBNVVR	 $r( 	 ??1mT2D ENN*QF6\F 
a&	8EQJ<O	P	b!	5A:&	'	b	 	 
a!v-f	=&	Q	b!	6		b	 	 
a	/&	8	b!	5A:		b		  	 <<6&188!e9Kv9UVD$;%,L
))B-

U[[
)CC DMM!\3'99V\\"D ))B-CC Dvveii 3&**3995AYQTT
AYQTT
AYQTT
AYQTT
	5>>	!sa3&QTT
a41:-(c!Q&#-QTT
a41:-!$Q$ZQTT
!$Q$ZQTT
!$Q$ZQTT
!$Q$ZQTT

!99UE"''44r   )F)r   r   r   rL    r   r   <module>rN      s    D $p5r   