o
    `۷i                     @   s^   d dl mZmZ d dlmZ d dlmZ ddddddZd	d
 Zde	de	dee	 fddZ
dS )    )DecimalInvalidOperation)reduce)Optionalv4v5ev5pv6e)ztpu-v4-podsliceztpu-v5-lite-deviceztpu-v5-lite-podsliceztpu-v5p-sliceztpu-v6e-slicec                 C   sb  t | tttfrt| S dddddddddd	d

}t| } | }d}t| dkr@| d dkr@| d |v r?| dd }| dd }nt| dkrX| d |v rX| dd }| dd }zt|}W n tyl   td|w |du rs|S |	dr{d}nt|dkrd}ntd| |dkrtd| |d |vrtd| t||d  }|||  S )a  Parse kubernetes canonical form quantity like 200Mi to a decimal number.
    Supported SI suffixes:
    base1024: Ki | Mi | Gi | Ti | Pi | Ei
    base1000: n | u | m | "" | k | M | G | T | P | E

    See
    https://github.com/kubernetes/apimachinery/blob/master/pkg/api/resource/quantity.go

    Args:
        quantity: string. kubernetes canonical form quantity

    Returns:
        Decimal: The parsed quantity as a decimal number

    Raises:
        ValueError: On invalid or unknown input
                      )
numKkMGTPENizInvalid number format: {}i   i  z{} has unknown suffixkir   )

isinstanceintfloatr   strlenr   
ValueErrorformatendswith)quantity	exponentsnumbersuffixbaseexponent r-   [/home/ubuntu/vllm_env/lib/python3.10/site-packages/ray/autoscaler/_private/kuberay/utils.pyparse_quantity   sT   
r/   topologyacceleratorreturnc                 C   sd   | r0|r0t | }dd | dD }tdd |}d}|dks#|dkr%d	}|| }| d
| S dS )a  Convert Kubernetes gke-tpu nodeSelectors to TPU accelerator_type
    for a kuberay TPU worker group.
    Args:
        topology: value of the cloud.google.com/gke-tpu-topology Kubernetes
            nodeSelector, describes the physical topology of the TPU podslice.
        accelerator: value of the cloud.google.com/gke-tpu-accelerator nodeSelector,
            the name of the TPU accelerator, e.g. tpu-v4-podslice
    Returns:
        A string, accelerator_type, e.g. "v4-8".
    c                 S   s   g | ]}t |qS r-   )r    ).0
chip_countr-   r-   r.   
<listcomp>g   s    z.tpu_node_selectors_to_type.<locals>.<listcomp>xc                 S   s   | | S )Nr-   )r6   yr-   r-   r.   <lambda>h   s    z,tpu_node_selectors_to_type.<locals>.<lambda>r   r   r   r   -N)!gke_tpu_accelerator_to_generationsplitr   )r0   r1   
generationchip_dimensions	num_chipsdefault_num_cores_per_chip	num_coresr-   r-   r.   tpu_node_selectors_to_typeY   s   rA   N)decimalr   r   	functoolsr   typingr   r:   r/   r"   rA   r-   r-   r-   r.   <module>   s   	G