
    oi                     <   / S Qr SSKJr  SSKJrJr  SSKrSSK	J
r  SSKrSSKrSSKrSSKrSSKrSSKJr  SSKJr  S r S\R*                  \R*                  \R*                  S	\R,                  \R,                  \R,                  S
\R.                  \R.                  \R.                  0rS r SSKr\R                  R6                  r\R                  R:                  r\R                  R>                  r S r! S r" SS jr# S\$S\$4S jr%SS\$S\\&   S\4S jjr'S r(g))Version
_get_dtypeis_main_processis_distributeddistributed_functiontorch_distributed_get_rank    )r   )versionPackageNotFoundErrorN)Optional)FileLockc           
      @    [        U [        5      (       a  U $ S nS n[        U [        5      (       a  U nOG[        U SS 5      =(       d    [        U SS 5      n[        U SS 5      nUS;   a  U(       a   [	        U5      nUS;   a  [        U 5      n[        U5      nUS:X  a  U(       a   [	        U5      n[        R                  " SU5      nUS LnUc  [        R                  " SU5      nSnUc  [        S	U 35      eUR                  S
5      R                  S5      nU(       a
  XQ:w  a  US-  n[        U5      $ ! [
         a    S n Nf = f! [
         a     Nf = f!   S
SKJnJn  U" U" 5       S   S
   5      n[        SU  SUR                    SUR"                   S35      e= f)N__name____package____version__)N unknown)Nr   r   z[0-9]+(?:\.[0-9]+)*FzInvalid version format: r   .z.1)getframeinfostack   z$Unsloth: Could not get version for `z`
File name = [z] Line number = [])
isinstanceTrueVersionstrgetattrimportlib_versionr
   rematchsearch
ValueErrorgrouprstripinspectr   r   RuntimeErrorfilenamelineno)	r	   rawpackage_namer   match_at_startnew_versionr   r   callers	            K/home/james-whalen/.local/lib/python3.13/site-packages/unsloth_zoo/utils.pyr   r   &   s   0
g{++Ngs##C"7J=fR_aeAfL'=$7C+++L9C *g,C#h)'5
 /5d*=II4c:E"N=7u=>>kk!n++C0k04K;''5 , C (  
/egajm,27) <"OO,,=fmm_AO
 	
s[   E AE 1D5 <)E &E 1BE 5EE EE 
EE EE AFfloat32float16bfloat16c                      [         U    $ !   [        U 5      [        L a#  U R                  5       n [	        [
        U S 5      s $ [        U [
        R                  5      (       a  U s $  g = fN)__DTYPE_MAPtyper   lowerr   torchr   dtype)r6   s    r,   r   r   e   s]    5!!;#KKME5%..u{{++L ,s    5A'!A'c                      [        5       (       a  [        5       S:H  $ [        5       (       a#  [        R                  R                  SS5      S:H  $ g)Nr   RANK0T) torch_distributed_is_initializedr   *torch_distributed_is_torchelastic_launchedosenvironget     r,   r   r   w   s?    ')))+q00	3	5	5zz~~fc*c11r@   c                  8    [        5       =(       d
    [        5       $ r1   )r:   r;   r?   r@   r,   r   r      s    +-]1[1]]r@   c                 r   Uc   e[        5       (       d  U" U0 UD6nU S:X  a  U$ U$ [        5       (       a  U" U0 UD6nU S:X  a  U/O
[        U5      nO[        U 5       Vs/ s H  nS PM     nn[        5       (       a*  [        R
                  " USS9  [        R                  " 5         U S:X  a  US   $ U$ s  snf )Nr   r   )src)r:   r   listrangedistbroadcast_object_listbarrier)nfunctionargskwargsoutobj_list_s          r,   r   r      s     ,--''1fs%#% ''FC5S	"'(+(QD(+ ())""815q&8A;.h. ,s    B4targetreturnc                     [         R                  " U 5      R                  S-  nUR                  SSS9  [	        US[         R                  " U 5      R
                   3-  5      $ )z"str needs to be a valid file path z.locksT)parentsexist_okz.lock.)pathlibPathparentmkdirr   name)rP   	locks_dirs     r,   _lock_path_forr[      sR    V$++h6IOOD4O0yVGLL$8$=$=#>??@@r@   timeoutc                     [        U 5      nUc)  [        [        R                  R	                  SS5      5      n[        X!S9$ )a*  
Get a lock for a target file.
target: str, the path to the file to lock
timeout: int, the timeout in seconds for the lock
If timeout is not provided, it will use the value of
the environment variable UNSLOTH_LOCK_TIMEOUT, otherwise 10 seconds.

Returns:
    FileLock, the lock for the target file
UNSLOTH_LOCK_TIMEOUT10)r\   )r[   intr<   r=   r>   r   )rP   r\   	lock_paths      r,   get_lockrb      s8     v&Ibjjnn%;TBCI//r@   c                     [        U SS 5      nU(       aJ  SSKJn  [        U[        5      (       a  UR                  SS 5      $ [        X5      (       a  [        USS 5      $ g )Nquantization_configr   )AutoQuantizationConfigquant_method)r   transformers.quantizersre   r   dictr>   )configquant_configre   s      r,   get_quant_typerk      sT    6#8$?LBlD))##ND99==<>>r@   )r   Nr1   ))__all__packaging.versionr   r   importlib.metadatar	   r   r
   r5   torch.distributeddistributedrF   r<   time
contextlibr   rU   typingr   filelockr   r-   r.   r/   r2   r   	functoolsis_initializedr:   is_torchelastic_launchedr;   get_rankr   r   r   r   r   r[   r`   rb   rk   r?   r@   r,   <module>ry      s   " 5 Q    	   	   3	h  u}}	MM5==u}}	MM5==	NNENN	  #(#4#4#C#C  -2->->-W-W *"..77  ^ /4 A3 A3 A0S 08C= 0H 0"r@   