
    Ng                          d Z ddlZddZd ZdS )zC Batch size decay and retry helpers.

Copyright 2022 Ross Wightman
    N   Fc                     | dk    rdS t          dt          j        | dz
            t          j        d          z  z            }t          ||z  d          }|| |z
  dz
  |z  |z  z   } |r
| dz  r| dz  } | 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)
batch_sizenum_intra_stepsno_oddbase_batch_size	step_sizes        R/var/www/html/ai-engine/env/lib/python3.11/site-packages/timm/utils/decay_batch.pydecay_batch_stepr      s     Qq!a 8 8DHQKK GHIIOO6::I Z/%AA%E)$SW`#``J *q. a
    c                 F    |                                  } 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)	error_strs    r   check_batch_size_retryr       s:     !!I)## uIu4r   )r   F)__doc__r   r   r    r   r   <module>r      sG        0    r   