
    bi                        d dl Zd dlZd dlZd dlmZ ddlmZ ddlm	Z	m
Z
  ej                  e      Zej                  dk\  r( edd      d	ej                  d
ej                  fd       Z ee
e	      s edd      d	ej                  dej                  dedeej                  ej                  f   fd       Z edd      d	ej                  dej                  dej                  dedej(                  dej                  fd       Zyy)    N)get_ptr   )register_kernel) ErrorHandlerMockBNBNativeLibrarylib)      z bitsandbytes::int8_linear_matmulcpuABc                      t        j                  | j                  d| j                  d         |j	                               j                  g | j                  d d |j                  d    S )Nr   )torch_int_mmreshapeshapet)r   r   s     X/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/bitsandbytes/backends/cpu/ops.py_r      sh    u}}IIb!''"+&CCE
 '- 773B<- "#- 	-    z bitsandbytes::quantize_blockwisecode	blocksizereturnc           
         t        j                  |       | j                         }| j                  t         j                  k(  r|| z   }t        j
                  |f| j                  t         j                        }t        j                  | t         j                        }t        j                  t        |      t        |       t        |      t        |      t        j                  |      t        j                  |             ||fS ||z  }|dkD  }||z  |z   }t        j                  |f| j                  t         j                        }| j                  |      }	|	d ||z
   }
|
j                  ||z  |      }t        j                   |      j#                  d      d   |d ||z
   t        j$                  |d|d ||z
   j'                  dd      z  z  dd      }|j                  d      }|rkt        j                   |	||z
  d        j#                         |d<   t        j$                  |	||z
  d  d|d   z  z  dd      }t        j(                  ||gd      }t        j                   |j+                  d      |j-                  |j                        z
        }t        j.                  |d      j-                  t         j                        j-                  |j                        j                  | j0                        }||fS )N)devicedtyper   r   r   )dim   )r   _check_is_sizenumelr   float32emptyr   
empty_likeuint8r   cquantize_blockwise_cpu_fp32r   ct
c_longlongzerosr   absmaxclampviewcat	unsqueezetoargminr   )r   r   r   nblocksabsmaxoutremhas_rem
A_reshapedA_comA_com_reshapedscaled_Ascaled_A_remdiffs                  r   r   r      s   Y'GGI 77emm#YJ'F[[&1885==QF""1EKK8C,,
i(a 6 F{% i-CAgG)^g-F[[&1885==QF1JyS)E"]]1	>9EN).>)B)F)F2)F)Nq)QF%Vg%&{{>Q@R&7BR9S9X9XY[]^9_5_#`bdfghH''+H"YYz!c')'<=AACr
${{:a#gi+@Ar
N+SUWYZ[ 99h%=1E99X//3dgghoo6NNOD,,t,//<??PXXYZY`Y`aCF{r   z"bitsandbytes::dequantize_blockwiser4   r   c                     t        j                  |       t        j                   j                  t         j                  k(   fd       |t         j
                  k(  rt        j                   |      }t        j                  t        |      t               t        |      t        |      t        j                  |      t        j                   j                                      |S | j                  d      j                            }|j                  d   |z  }|j                  d   |z  }|dk7  r2t         j                   j"                  j%                  |d||z
  fdd      }|j'                  d|      |j'                  dd      z  j)                  |      j                  d      }|d ||z  |z    }|j                   j                        }|S )Nc                  "    d j                    S )NzA must be uint8, got r   )r   s   r   <lambda>z_.<locals>.<lambda>M   s    7LQWWI5V r   r   r   r   constant)modevaluer   )r   r    _checkr   r%   r"   r$   r   cdequantize_blockwise_cpu_fp32r   r'   r(   r!   r   intr   nn
functionalpadr-   r0   )r   r4   r   r   r   r5   r3   ress   `       r   r   r   H   sx    	Y'QWW+-VW EMM!""1E2C..
i(aggi($ 
 qyy}((*+CYYr]i/F))B-)+Caxhh))--cAy33Gj`a-b88B	*V[[Q-??CCEJRRSUVC0*S01C++agg&C
r   )ctypesr'   loggingr   bitsandbytes.functionalr   _opsr   
cextensionr   r   	getLogger__name__logger__version__Tensorr   
isinstancerF   tupler    r   r   <module>rX      s5      + # ?			8	$ 	7?-U\\ -ell - @- #787?'U\\ ' '# '%V[VbVbHbBc ' @'R 95A<<!&5:\\NQZ_ZeZe	 B[ 9r   