o
    id                     @   s&  U d Z ddlZddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
Z
ddlmZ ed	efd
dZdd Ze  ZrddlmZ e  Z- dZeeesZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ W d   n1 s|w   Y  ejZejZejZ ejZ!e	e
j"e
j#e$e
j%f Z&e Z'e(ee&dB f e)d< e Z*e(ee&dB f e)d< defddZ+defddZ,de
j"e-B e.B dB de$fddZ/d-dede
j"e-B e.B dB fdd Z0d-dede
j"e-B e.B dB fd!d"Z1d#d$ Z2d%d& Z3d'd( Z4nd)d* Z2d+d* Z3d,d* Z4e2Z5e3Z6e4Z7dS ).
    N)contextmanagernullcontext)metadata)
ModuleType)Tuple)versiontorchc                 c   s(    | j j}dd | j _d V  || j _d S )Nc                   S   s   dS )NF r   r   r   Y/home/ubuntu/.local/lib/python3.10/site-packages/spaces/zero/torch/bitsandbytes_legacy.py<lambda>       z"cuda_unavailable.<locals>.<lambda>)cudais_available)r
   _is_availabler   r   r   cuda_unavailable   s
   r   c               	      s  zdd l  W n
 ty   Y d S w z
ttd} W n
 ty%   Y d S w | tdk r5td|  d| tdk rC fdd}nd	d }|  }1 zdd l}W n tyc   Y W d    d S w t|tsut	d
 W d    |S W d    |S 1 sw   Y  |S )Nr   bitsandbytesz0.40.0z4ZeroGPU requires bitsandbytes >= 0.40.0 (installed: )z0.43.1c                      s   t  S N)r   r   r
   r   r   r   $   s    z+maybe_import_bitsandbytes.<locals>.<lambda>c                   S   s   t  S r   r   r   r   r   r   r   &   s    u;   ↑ Those bitsandbytes warnings are expected on ZeroGPU ↑)
r
   ImportErrorr	   parser   RuntimeErrorr   
isinstancer   print)bnb_versioncontextctxr   r   r   r   maybe_import_bitsandbytes   s>   



r   )WeakTensorKeyDictionary)	CUDASetup)
cextension)
functional)
Int8Params)
Params4bitto_ops_8bitto_ops_4bitselfc                 O   j   t jjj|i |}|^}}t|t jst| g|R i |S |jdkr/t| g|R i |S |t| < | S Nr   )	r
   _C_nn	_parse_tor   device_param_to_8bittyper&   r(   argskwargsparsedr.   _r   r   r   _to_op_register_8bitH      
r6   c                 O   r)   r*   )	r
   r+   r,   r-   r   r.   _param_to_4bitr0   r'   r1   r   r   r   _to_op_register_4bitR   r7   r9   r.   returnc                 C   s8   | d u rdS t | trdS t | trt| } | jdkS )NTr   )r   intstrr
   r.   r0   )r.   r   r   r   _cuda_op_arg_check\   s   



r=   c                 K   &   t |st| |fi |S d t| < | S r   )r=   _param_cuda_8bitr&   r(   r.   r3   r   r   r   _cuda_op_register_8bite      rA   c                 K   r>   r   )r=   _param_cuda_4bitr'   r@   r   r   r   _cuda_op_register_4bitl   rB   rD   c                   C      t t_tt_tt_tt_d S r   )r6   r$   torA   r   r9   r%   rD   r   r   r   r   _patchs      
rG   c                   C   rE   r   )r/   r$   rF   r?   r   r8   r%   rC   r   r   r   r   _unpatchy   rH   rI   c                  C   s   t d urd t _tt tjt_t D ]} | \}}|r#|\}}}}nd\}}t	|d||d|_
qt D ]} | \}}|rD|\}}}}nd\}}t|d||d|_
q5d S )N)NNr   )r.   dtypememory_format)r!   	_instance	importlibreloadr"   libr#   r&   itemsr/   datar'   r8   )optensorparsed_argsr5   rJ   rK   r   r   r   _move   s2   


rU   c                   C      d S r   r   r   r   r   r   r      r   r   c                   C   rV   r   r   r   r   r   r   r      r   c                   C   rV   r   r   r   r   r   r   r      r   r   )8__doc__rM   
contextlibr   r   r   typesr   typingr   r
   	packagingr	   r   r   import_contexttorch.utils.weakr    
import_ctxr!   r   bitsandbytes.cuda_setup.mainr   r"   r#   bitsandbytes.nnr$   r%   rF   r/   r   r?   r8   rC   r.   rJ   boolrK   TensorToArgsr&   dict__annotations__r'   r6   r9   r;   r<   r=   rA   rD   rG   rI   rU   patchunpatchmover   r   r   r   <module>   sX    

	
 
"	"
