o
    پi                     @   s   d dl Z d dlZd dlmZ d dlmZmZ d dlZd dl	Z	G dd dZ
dd Zdejd	ejfd
dZdeeef fddZdd Ze
 ZdS )    N)Path)AnyDictc                   @   s(   e Zd Zdd Zedd Zdd ZdS )
DumpLoaderc                 C   s8   t jd}|d u| _| jrt|| _t|| _d S d S )NSGLANG_DUMP_LOADER_DIR)osenvironget_enabler   
_directory	read_meta_df)self	directory r   V/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/debug_utils/dump_loader.py__init__   s   

zDumpLoader.__init__c                 C   s   | j S N)r
   )r   r   r   r   enable   s   zDumpLoader.enablec           	   
   K   s   | j sJ dddlm} |j}td||d|}t| j|d}|d us3J d|d|d| j| j|d	  }tj	|d
d}t
|trNd|v rN|d }td|d|d|dt| d	 |S )Nz3Please call DumpLoader.load only when it is enabledr   )dumper)nameforward_pass_id)
conditionsz,DumpLoader cannot find row given query name=z kwargs=z self._directory=filenameF)weights_onlyvaluez[DumpLoader] load from path=z (query: name=z
, output: )r   )r
   sglang.srt.debug_utils.dumperr   _forward_pass_iddictfind_rowr   r   torchload
isinstanceprinttype)	r   r   kwargsr   r   r   rowpathoutputr   r   r   r"      s    
 zDumpLoader.loadN)__name__
__module____qualname__r   propertyr   r"   r   r   r   r   r   
   s
    
r   c           	      C   s  t | } |  sJ d| dg }| dD ]B}z$i }|jdD ]}|d\}}|||< q"|dt|ji| W q tyY } zt	d| d|  W Y d }~qd }~ww t
|}|t
d	tt
d
tt
dt}t|}|d
d}|S )Nz
directory=z should be a directoryz*.pt___=r   z[DumpLoader] skip loading z due to error r   rank
dump_index)r   is_dirglobstemsplitappendstrr   	Exceptionr$   pl	DataFramewith_columnscolcastint_add_duplicate_indexsort)	r   rowspfull_kwargskvkvedfr   r   r   r   .   s8   

 
r   rH   returnc                 C   sF   dd | j D }| |dg } | td|dd} | S )Nc                 S   s   g | ]}|d vr|qS ))r   r1   r   ).0cr   r   r   
<listcomp>N   s    z(_add_duplicate_index.<locals>.<listcomp>r1      duplicate_index)columnsr@   r;   r9   	cum_countoversubalias)rH   
group_colsr   r   r   r?   M   s   r?   r   c                    sd    tdd  fdd  D }t|dkr$td| d S t|dkr0| d S d S )Nc                 S   s   | |@ S r   r   )abr   r   r   <lambda>Y   s    zfind_row.<locals>.<lambda>c                    sN   g | ]#}|j v r | d urt|t | j| knt| qS r   )rO   r9   r<   _cast_to_polars_dtypeschemais_null)rJ   r<   r   rH   r   r   rL   Z   s    
zfind_row.<locals>.<listcomp>rM   z(find_row find ambiguous results: df_sub=r   )filter	functoolsreducekeyslenr$   to_dicts)rH   r   df_subr   r[   r   r    V   s   r    c                 C   s`   |t jt jt jt jfv rt| S |t jt jfv rt| S |t j	kr%t
| S |t jkr.t| S | S r   )r9   Int64Int32UInt64UInt32r>   Float64Float32floatBooleanboolStringr7   )r   target_dtyper   r   r   rX   l   s   

rX   )r]   r   pathlibr   typingr   r   polarsr9   r!   r   r   r:   r?   r7   r    rX   dump_loaderr   r   r   r   <module>   s    $	
