a
    þdâ  ã                   @   s"   d Z ddlZd	dd„Zdd„ ZdS )
zC Batch size decay and retry helpers.

Copyright 2022 Ross Wightman
é    Né   Fc                 C   sj   | dkrdS t dt | d ¡t d¡  ƒ}t|| dƒ}|| | d | |  } |rf| d rf| d8 } | S )ay   power of two batch-size decay with intra steps

    Decay by stepping between powers of 2:
    * determine power-of-2 floor of current batch size (base batch size)
    * divide above value by num_intra_steps to determine step size
    * floor batch_size to nearest multiple of step_size (from base batch size)
    Examples:
     num_steps == 4 --> 64, 56, 48, 40, 32, 28, 24, 20, 16, 14, 12, 10, 8, 7, 6, 5, 4, 3, 2, 1
     num_steps (no_odd=True) == 4 --> 64, 56, 48, 40, 32, 28, 24, 20, 16, 14, 12, 10, 8, 6, 4, 2
     num_steps == 2 --> 64, 48, 32, 24, 16, 12, 8, 6, 4, 3, 2, 1
     num_steps == 1 --> 64, 32, 16, 8, 4, 2, 1
    é   r   r   )ÚintÚmathÚlogÚmax)Z
batch_sizeZnum_intra_stepsZno_oddZbase_batch_sizeZ	step_size© r   ú_/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/timm/utils/decay_batch.pyÚdecay_batch_step   s     r
   c                 C   s$   |   ¡ } d| v rdS d| v r dS dS )z_ check failure error string for conditions where batch decay retry should not be attempted
    zrequired rankFÚillegalT)Úlower)Z	error_strr   r   r	   Úcheck_batch_size_retry    s    r   )r   F)Ú__doc__r   r
   r   r   r   r   r	   Ú<module>   s   
