o
    j(                     @  s\  d Z ddlmZ ddlZddlZddlZddlZddlmZ ej	
dd ddlmZ ddlmZ edZee jd	 d
 ZdZdZdZdZdZdZdZdZdddddZddddddddd d!d"
Zd#d$d#d%d$d#d#d#d$d$d"
ZdMd)d*Z dMd+d,Z!dNd.d/Z"dOd1d2Z#dPd6d7Z$dQd;d<Z%dRd?d@Z&dSdCdDZ'dTdHdIZ(dOdJdKZ)e*dLkre)  dS dS )Uz9Plot the Llama-3.1-8B-Instruct LongBench appendix figure.    )annotationsN)PathZMPLCONFIGDIRz/tmp/matplotlib-kv-llm)font_managerz[/home/scm/Project/kv-llm/evaluation/results/figures/longbench_llama31_8b_instruct_data.json   ZpicsZllama31_longbench_appendix_2x5z0.00snapkv)z
Full Cache#9a9a9a-)z0.50z0.75z0.80z0.85z0.88z0.90z0.95)              ?      ?皙?g333333?g)\(??gffffff?)r	   g(\?g{Gz?g?gQ?gQ?gp=
ף?r   )z.95z.90z.88z.85z.80z.75z.500)zHubKV(+ KVZip)#006400xr         ?)ZKVZipr   r   z--g(\?)zExpected Attentionz#4f60ff+r   r   )ZSnapKVz#E69F00^r   r   )z!kvzip_head_nms_gated_k5_p0.5_mildZkvzipZexpected_attentionr   Z2WikiMQAZ	GovReportZHotpotQAZLCCZ	MultiNewsZMultiFieldQAZMuSiQueZQasperZQMSumZSAMSum)
Zlongbench_2wikimqaZlongbench_gov_reportZlongbench_hotpotqaZlongbench_lccZlongbench_multi_newsZlongbench_multifieldqa_enZlongbench_musiqueZlongbench_qasperZlongbench_qmsumZlongbench_samsumzF1 (%)zROUGE-L (%)zSimilarity (%)ratiofloatreturnc                 C  s   | t d kr
td S | t d krtd S tt dd t dd tdd tdd D ]$\}}}}||   kr;|krOn q+| | ||  }||||     S q+td|  )zCMap true compression ratios to the display scale used in the paper.r   Nr   z'Ratio outside supported display scale: )X_TICKSX_TICK_POSITIONSzip
ValueError)r   Z
left_ratioZright_ratioZleft_posZ	right_posalpha r   0paper/scripts/plot_llama31_longbench_appendix.pyscaled_compression_ratioD   s   (r   c                 C  s   t d t|  S )zADisplay high compression on the left and full cache on the right.r   )r   r   r   r   r   r   axis_positionS   s   r!   strc                  C  sh   t dt  d t  d f} | D ]}| r"tjt|  dS qdd tjjD }d|v r2dS dS )Nz"insights/fonts/Times New Roman.ttfz&.local/share/fonts/Times New Roman.ttfz$.local/share/fonts/TimesNewRoman.ttfzTimes New Romanc                 S  s   h | ]}|j qS r   name).0Zfontr   r   r   	<setcomp>b   s    z"pick_serif_font.<locals>.<setcomp>zDejaVu Serif)r   homeexistsr   ZfontManagerZaddfontr"   Zttflist)Z
candidatespathZ	availabler   r   r   pick_serif_fontX   s   

r*   Nonec                  C  s   t  } tji d| d| gdddddddd	d
d	ddddddddddddddddddddddd d S )Nzfont.familyz
font.serifz	font.size   zaxes.titlesize
   zaxes.labelsizezxtick.labelsize   zytick.labelsizezlegend.fontsize	   zaxes.linewidthr   zxtick.directioninzytick.directionzxtick.major.size   zytick.major.sizezxtick.major.widthzytick.major.widthz
figure.dpii,  zsavefig.dpi*   )zpdf.fonttypezps.fonttype)r*   pltZrcParamsupdate)Z
serif_fontr   r   r   configure_styleh   sR   	
r5   valueslist[float]tuple[float, float]c           	      C  s   dd | D }t |}t|}t|| d}|dkrd}n|dkr$d}n|dkr+d}n	|d	kr2d
}nd}t|d |d }tdt|| | | }t dt|| | | }||krdt d|| }||fS )Nc                 S  s   g | ]	}t |r|qS r   )mathisfinite)r%   valuer   r   r   
<listcomp>   s    zy_limits.<locals>.<listcomp>r      r
   r,      g       @2   g      @g      $@g{Gz?g{Gz?r	   g      Y@)minmaxr9   ZfloorZceil)	r6   ZfinitelohispansteppadZy0Zy1r   r   r   y_limits   s&   rG   r)   r   dictc                 C  sZ   | j ddd}t|}W d    n1 sw   Y  d|vs$|d s+td|  |S )Nrzutf-8)encodingdatasetszNo datasets found in )openjsonloadr   )r)   fdatar   r   r   	load_data   s   rQ   datasetmethodc                 C  s4   |  di  |i  |tj}|d urt|S tjS )NZscores)getr9   nanr   )rR   rS   r   Z	raw_scorer   r   r   score_at   s   rV   rP   
list[dict]c                   s   dd | d D }g }| d D ]8  d }|dkrqt  tt}g }|D ] fddtttdd	D }||d
 q$||||d q|S )Nc                 S  s    g | ]}|d  t v r|d  qS r#   )METHOD_STYLES)r%   rS   r   r   r   r<      s     z build_panels.<locals>.<listcomp>methodsrK   r$   Zlongbench_trecc                   s0   g | ]}t t |r|t |d qS ))r   score)r9   r:   rV   )r%   r   rR   rS   r   r   r<      s    T)keyreverse)rS   points)r$   
full_cacheseries)rV   FULL_CACHE_METHODFULL_CACHE_RATIOsortedCOMPRESSION_RATIOSr   append)rP   rY   panelsr$   r_   r`   r^   r   r[   r   build_panels   s   rg   	data_path
output_diroutput_stemc                 C  s   t   |jddd t| }t|}t|dkr!tdt| tjdddd\}}g }g }tt	|j
|D ]\}	\}
}g }t|d	 rn||d	  t\}}}|
j|d	 ||d
d|dd}|	dkrn|| || |d D ]^}|d }t| \}}}}}dd |d D }dd |d D }t|d	 r|ttt ||d	  || |
j|||||ddd||||dd\}|	dkr|| || qr|d }|
jt||ddd |
dtd d  |
dd ttD  |
t |
 d |
j!t"|d d!d"d# |
j#t$|  |
j%dd$d%d&d'd( |
&d |
j'( D ]}|)d' q(q7|j*d)d*d+d'd,d-d. |j+||d/d0d1dd2d3d4d
d5d6 || d7 }|| d8 }|j,|d9dd: |j,|d9dd: t-| t.d;|  t.d;|  d S )<NT)parentsexist_okr-   z9Expected 10 LongBench panels after excluding TREC, found    r1   )g      %@gffffff@)ZnrowsZncolsZfigsizer_   r   r   r   )color	linestyle	linewidthr   labelzorderr`   rS   c                 S  s   g | ]
}t t|d  qS r    )r!   r   r%   Zpointr   r   r   r<      s    zplot.<locals>.<listcomp>r^   c                 S  s   g | ]}|d  qS )rZ   r   rs   r   r   r   r<          g      ?g      @r   )rn   markerro   rp   Z
markersizeZmarkeredgewidthZmarkerfacecolorZmarkeredgecolorr   rq   rr   r$   Zbold)rF   Z
fontweightgQr   gQ?c                 S  s   g | ]}t |qS r   )r!   )r%   Ztickr   r   r   r<      rt   zCompression ratioz	Score (%)r/   g      ?)ZfontsizeZlabelpadmajor)r   )r      r   r   )whichro   rn   rp   g{Gz?gףp=
?g
ףp=
?r
   gRQ?)leftrightZbottomtopZhspaceZwspacezupper center)gHzG?gQ?r=   FZblackg @gffffff?)	locZbbox_to_anchorZncolZframeonZfancyboxZ	edgecolorZhandlelengthZcolumnspacingZhandletextpadz.pngz.pdfZtight)Zbbox_inchesZ
pad_incheszWrote )/r5   mkdirrQ   rg   lenr   r3   Zsubplots	enumerater   Zflatr9   r:   re   FULL_CACHE_STYLEZaxhlinerX   r!   r   rb   extendplotZ	set_title	TITLE_MAPrT   Zset_xlimr   Z
set_xticksreversedr   Zset_xticklabelsX_TICK_LABELS_DESCZ
set_xlabelZ
set_ylabelMETRIC_LABELSZset_ylimrG   ZgridZset_axisbelowZspinesr6   Zset_linewidthZsubplots_adjustZlegendZsavefigcloseprint)rh   ri   rj   rP   rf   ZfigZaxesZlegend_handlesZlegend_labelsZ	panel_idxZaxZpanelr6   Z
full_labelZ
full_colorZfull_linestyleZ	full_liner`   rS   rq   rn   ru   ro   r   Zx_valuesZy_valuesliner$   ZspineZpng_pathZpdf_pathr   r   r   r      s   
	








r   c                  C  s^   t jtd} | jdttdd | jdttdd | jdtdd	 |  }t	|j
|j|j d S )
N)descriptionz--datazPath to the exported data JSON.)typedefaulthelpz--output-dirzDirectory for figure outputs.z--output-stemz'Output filename stem without extension.)r   r   )argparseArgumentParser__doc__add_argumentr   	DATA_PATH
OUTPUT_DIROUTPUT_STEM
parse_argsr   rP   ri   rj   )parserargsr   r   r   main   s   r   __main__)r   r   r   r   )r   r"   )r   r+   )r6   r7   r   r8   )r)   r   r   rH   )rR   rH   rS   r"   r   r"   r   r   )rP   rH   r   rW   )rh   r   ri   r   rj   r"   r   r+   )+r   Z
__future__r   r   rM   r9   osZpathlibr   environ
setdefaultZmatplotlib.pyplotZpyplotr3   Z
matplotlibr   r   __file__Zresolverk   r   r   rb   ra   r   rd   r   r   r   rX   r   r   r   r!   r*   r5   rG   rQ   rV   rg   r   r   __name__r   r   r   r   <module>   s|   









a

