
    ^j              	       ^   d Z ddlmZmZmZmZ ddlZddlmZ dej                  fdZ		 	 	 ddee
ef   deej                     defd	Zddeej                     defd
ZdefdZd Zddedee   fdZ	 ddee   dee   deddfdZddede
dee
   ddfdZdededdfdZdedededdfdZy) zASmall optimizer helpers shared by timm optimizer implementations.    )ListOptionalSequenceUnionN)Tensorreturnc                      t        j                         t         j                  k(  rt         j                  S t         j                  S N)torchget_default_dtypefloat64float32     ^/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/optim/_helpers.py_get_scalar_dtyper   	   s)    !335F5==YEMMYr   valuedtypec                 6   t        | t              rf|xs | j                  }|| j                  nt	        j                  |      }| j                  |k(  r| j                  |k(  r| S | j                  ||      S t	        j                  | |xs
 t               |      S )Ndevicer   r   r   )
isinstancer   r   r   r   totensorr   )r   r   r   s      r   _init_scalarr      s    
 % $!'U\\&5I<<6!ekkU&:LxxvUx33<<U%A.?.A&QQr   c                 J    t        j                  d|xs
 t               |       S )Nr   r   )r   zerosr   r   s     r   _zeros_scalarr      s    ;;r!=*;*=fMMr   c                      t        t        d      r8t        t        j                  d      rt        j                  j                         S y)Ncompileris_compilingF)hasattrr   r!   r"   r   r   r   _is_compilingr$      s/    uj!gennn&M~~**,,r   c                     t         j                  j                         st               r| S t	        | t         j
                        r| j                         S | S r
   )r   jitis_scriptingr$   r   r   item)xs    r   
_get_valuer*   %   s9    99!!#!!U\\2166899r   supports_xlac                     g d}t         j                  j                         s.	 |j                  t         j                  j                                | r|j                  d       |S # t        $ r Y  w xY w)N)cudaxpuhpuxla)r   r&   r'   append_C_get_privateuse1_backend_nameAttributeError)r+   capturable_supported_devicess     r   !_get_capturable_supported_devicesr6   ,   se    #9 99!!#	(//0V0V0XY $++E2''	  		s   -A& &	A21A2paramsstate_stepsc                 p    t        |      t        fdt        | |      D              sJ d d       y )N)r+   c              3      K   | ]N  \  }}|j                   j                  |j                   j                  k(  xr |j                   j                  v  P y wr
   )r   type).0pstepr5   s      r   	<genexpr>z,_check_capturable_devices.<locals>.<genexpr>>   sJ      At 	
)))[ahhmm?[.[[s   AAzIIf capturable=True, params and state_steps must be on supported devices: .)r6   allzip)r7   r8   r+   r5   s      @r   _check_capturable_devicesrC   8   sQ    
 $ER^#_  6;/  s 
SSoRppqrs r   name	min_value	max_valuec                    t        j                  |      rI|j                         dk7  rt        |  d      t	        |j                         j                               }nt	        |      }||k  s|||k\  rt        d|  d|       y y )N   z# must be a scalar or scalar tensor.zInvalid z: )r   	is_tensornumel
ValueErrorfloatdetachcpu)rD   r   rE   rF   value_floats        r   _validate_scalarrP   D   s    u;;=Av%HIJJELLN..01ElY9#8[I=U8D6E7344 >V#8r   paramupdatec                 ~    t        j                  |      r| j                  ||z         y | j                  ||       y )N)alpha)r   rI   add_)rQ   rR   scales      r   _add_scaled_rW   O   s.    u

6E>"

6
'r   tensor1tensor2c                     t        j                  |      r| j                  ||z  |z         y | j                  |||       y )N)r   )r   rI   rU   addcdiv_)rQ   rX   rY   rV   s       r   _addcdiv_scaled_r\   V   s6    u

7W$u,-wu5r   )        NN)NN)T)r]   N)__doc__typingr   r   r   r   r   r   r   r   rL   r   r   boolr$   r*   strr6   rC   rP   rW   r\   r   r   r   <module>rb      sO   G 2 2  Z5;; Z
 '*'+RUF]#R $R 	RNhu{{&; Nv Nt :	(D 	(DI 	( "	s 	sf%	s 	s 
		s53 5% 5(SX/ 5ei 5( ( ($ (6F 6V 6f 6PT 6r   