
    &`i                     d    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	 Zd
e	de	dee	         f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                    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         }n1t          |           dk    r| d         |v r| dd         }| dd         }	 t          |          }n0# t          $ r# t          d                    |                    w xY w||S |	                    d          rd}n8t          |          dk    rd}n"t          d                    |                     |dk    r"t          d                    |                     |d         |vr"t          d                    |                     t          ||d                            }|||z  z  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exponents         y/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/autoscaler/_private/kuberay/utils.pyparse_quantityr0      s   $ (S%122 !x     I 8}}HFF
8}}hrlc11B<9$$crc]Fbcc]F	X!			 9 9#2#"##E E E E4;;FCCDDDE ~s C	V		077AABBB ~~077AABBBay	!!077AABBBy+,,HT8^$$s   C -C?topologyacceleratorreturnc                     | r[|rYt           |         }d |                     d          D             }t          d |          }d}|dk    s|dk    rd}||z  }| 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                 ,    g | ]}t          |          S  )r"   ).0
chip_counts     r/   
<listcomp>z.tpu_node_selectors_to_type.<locals>.<listcomp>g   s    QQQz3z??QQQ    xc                     | |z  S )Nr6   )r;   ys     r/   <lambda>z,tpu_node_selectors_to_type.<locals>.<lambda>h   s
    A r:   r   r   r	   r   -N)!gke_tpu_accelerator_to_generationsplitr   )r1   r2   
generationchip_dimensions	num_chipsdefault_num_cores_per_chip	num_coress          r/   tpu_node_selectors_to_typerG   Y   s      	+K 	+6{C
QQX^^C=P=PQQQ--??	%&"u!4!4)*& ::	**y***4r:   N)decimalr   r   	functoolsr   typingr   r@   r0   r$   rG   r6   r:   r/   <module>rK      s    . - - - - - - -            
 !% % !D% D% D%N 3 8C=      r:   