o
    ÔÙ¾ip  ã                	   @   sz   d Z ddlZddlmZ dedededee fdd	„Zd
ee dee dee fdd„Zdedededee fdd„Z	dS )z!Utilities for Prometheus Metrics.é    N)ÚListÚmiddleÚbaseÚcountÚreturnc                 C   sd   g }t  |d ¡}d}| | ¡ t|ƒD ]}||9 }| | | ¡ | td| | ƒ¡ qtt|ƒƒS )Né   é   r   )ÚmathÚceilÚappendÚrangeÚmaxÚsortedÚset)r   r   r   ÚbucketsÚ
half_countÚdistanceÚi© r   úL/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/metrics/utils.pyÚtwo_sides_exponential_buckets   s   
r   Úbuckets_ruleÚdefault_bucketsc                 C   s¦   | sdg} t | ƒdksJ ‚| d }|dkr4| dd … \}}}t|ƒdks(J dƒ‚tt|ƒt|ƒt|ƒƒS |dkr>tt|ƒƒS |dksDJ ‚ttdd	„ | dd … D ƒƒƒS )
NÚdefaultr   Útser   g      ð?zBase must be greater than 1.0Úcustomc                 S   s   g | ]}t |ƒ‘qS r   )Úfloat)Ú.0Úxr   r   r   Ú
<listcomp>1   s    z$generate_buckets.<locals>.<listcomp>)Úlenr   r   Úintr   r   )r   r   Úruler   r   r   r   r   r   Úgenerate_buckets"   s   r#   ÚstartÚwidthÚlengthc                 C   s(   g }t |ƒD ]}| | ||  ¡ q|S )N)r   r   )r$   r%   r&   r   r   r   r   r   Úexponential_buckets4   s   r'   )
Ú__doc__r	   Útypingr   r   r!   r   Ústrr#   r'   r   r   r   r   Ú<module>   s(   ÿÿÿ
þÿÿ
þ"