U
    Māhį  ć                   @   s&   d dl Z dd Zdd Zd	ddZdS )
é    Nc                 C   sn   |   ” dkst| jd d dks&t| jtjks6t| d d dd df d@ d> | d d dd df d@ B S )Né   é   r   é   é   )ŚdimŚAssertionErrorŚshapeŚdtypeŚtorchŚint8©Śweight© r   ś[/var/www/html/venv/lib/python3.8/site-packages/torch/quantization/_quantized_conversions.pyŚpack_int4_to_int8   s    r   c                 C   sV   |   ” dkst| jtjks t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   ŚstackŚviewr   r   r   r   r   Śunpack_int8_to_int4   s     ’r   Fc                 C   sn  |   ” dkst| jtjks t|tjks8|tjks8t| jjdksHt| j}|s|tjkrd| j}q|tjkrt	t
|  tj”j}n| }|j\}}||tjkr¤dnd dks²t|d dksĀt|tjkr0tjddddd	d
ddddddddddg|dtjd|d |d dd	”d  |d d”  d”}n`tjdd	dd
ddddddddddddg|dtjd|d |d dd	”d  |d d”  d”}| d	||”}|tjkr®d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rn| 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< nŠ|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rZ|d9 }|d }| ||” tj”S )Nr   Ścudaé    é@   r   r   é   é   r   é   é	   é   é   é
   é   é   é   é   r   )Śdeviceé   é’’’’é   )r   r   r	   r
   r   Zquint4x2r"   ŚtypeŚTr   r   r   r   ZtensorZarangeZreshapeŚexpandZ
index_copyŚrepeatZint32Z
zeros_likeZscatter_Z
empty_likeŚtoŚintZuint8)r   ZdtypeqZ	transposer"   ZoutpZncolsZnrowsZcols_permutedZmagic0Zmagic1Ztmp0Ztmp1Ztmp2Ztmp3Zoutp_offsetsŚtmpr   r   r   Ś8quantized_weight_reorder_for_mixed_dtypes_linear_cutlass   sĪ    


"ž  ’ü’ų"ž  ’ü’ų	  ’ 
žż’  ’ žżü’ ’ žżü’"


  r-   )F)r
   r   r   r-   r   r   r   r   Ś<module>   s   
 ’