Files
vibe_data_ana/tests/__pycache__/test_viz_tools.cpython-311-pytest-8.3.3.pyc

209 lines
39 KiB
Plaintext
Raw Normal View History

<EFBFBD>
<00>ܪi<DCAA>+<00><00>D<00>dZddlZddlmcmZddlZddlZ ddl
Z ddl Z ddl mZddlZddlZddlmZmZmZmZddlmZmZejd<06><00><00>ZGd<07>d<08><00>ZGd <09>d
<EFBFBD><00>ZGd <0B>d <0C><00>ZGd <0A>d<0E><00>ZGd<0F>d<10><00>ZGd<11>d<12><00>Z dS)u!可视化工具的单元测试。<E8AF95>N)<01>Path)<04>CreateBarChartTool<6F>CreateLineChartTool<6F>CreatePieChartTool<6F>CreateHeatmapTool)<02> DataProfile<6C>
ColumnInfoc#<00>dK<00>tj<00><00>}|V<00>tj|d<01><02><00>dS)u创建临时输出目录。T)<01> ignore_errorsN)<04>tempfile<6C>mkdtemp<6D>shutil<69>rmtree)<01>temp_dirs <20>;D:\code\iov_data_analysis_agent_old\tests\test_viz_tools.py<70>temp_output_dirrs:<00><00><00><00><18><1F>!<21>!<21>H<EFBFBD>
<12>N<EFBFBD>N<EFBFBD>N<EFBFBD>
<EFBFBD>M<EFBFBD>(<28>$<24>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>c<00>*<00>eZdZdZd<02>Zd<03>Zd<04>Zd<05>ZdS)<07>TestCreateBarChartToolu测试柱状图工具。c<00><><00>t<00><00>}tjgd<01>gd<02>d<03><02><00>}tj<00>|d<04><00>}|<02>|d|<04><06><00>}|d}d}||u}|sltjd |fd
||f<02><00>tj |<06><00>tj |<07><00>d <0B>z} d d | iz}
ttj |
<EFBFBD><00><00><00><00>dx}x}}tj} | j }||<04><00>} | s<>ddtj<00><00>vstjt<00><00>rtj t<00><00>ndtj | <0B><00>tj |<07><00>dtj<00><00>vstj|<04><00>rtj |<04><00>ndtj | <0C><00>d<12>z} ttj | <0A><00><00><00><00>dx} x}} |d}d}||k}|sltjd|fd||f<02><00>tj |<06><00>tj |<07><00>d <0B>z} d d | iz}
ttj |
<EFBFBD><00><00><00><00>dx}x}}|d}d}||k}|sltjd|fd||f<02><00>tj |<06><00>tj |<07><00>d <0B>z} d d | iz}
ttj |
<EFBFBD><00><00><00><00>dx}x}}dS)<18>测试基本功能。<E883BD><06>A<>B<>Crrr)<06>
<00><00><00><00>r<00><02>category<72>valuez bar_chart.pngr"<00><02>x_column<6D> output_path<74>successT<73><01>is<69>z%(py1)s is %(py4)s<><02>py1<79>py4<79>assert %(py6)s<>py6N<36>bassert %(py7)s
{%(py7)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.path
}.exists
}(%(py5)s)
}<7D>osr&<00><05>py0<79>py2r-<00>py5<79>py7<79>
chart_type<EFBFBD>bar<61><01>==<3D>z%(py1)s == %(py4)sr%<00>r<00>pd<70> DataFramer1<00>path<74>join<69>execute<74>
@pytest_ar<61>_call_reprcompare<72> _saferepr<70>AssertionError<6F>_format_explanation<6F>exists<74> @py_builtins<6E>locals<6C>_should_repr_global_name<6D><0E>selfr<00>tool<6F>dfr&<00>result<6C> @py_assert0<74> @py_assert3<74> @py_assert2<74> @py_format5<74> @py_format7<74> @py_assert1<74> @py_assert6<74> @py_format8s r<00>test_basic_functionalityz/TestCreateBarChartTool.test_basic_functionality s<><00><00>!<21>#<23>#<23><04> <0F>\<5C>6<>6<>6<>-<2D>-<2D>-<2D>
<EFBFBD>
<EFBFBD> <0B> <0B><02>
<19>g<EFBFBD>l<EFBFBD>l<EFBFBD>?<3F>O<EFBFBD>D<>D<> <0B><15><1C><1C>b<EFBFBD>:<3A>;<3B><1C>O<>O<><06>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/rc<00><><00>t<00><00>}tjgd<01>gd<02>d<03><02><00>}tj<00>|d<04><00>}|<02>|dd|<04><07><00>}|d}d }||u}|sltjd
|fd ||f<02><00>tj |<06><00>tj |<07><00>d <0C>z} d d| iz}
ttj |
<EFBFBD><00><00><00><00>dx}x}}tj} | j }||<04><00>} | s<>ddtj<00><00>vstjt<00><00>rtj t<00><00>ndtj | <0B><00>tj |<07><00>dtj<00><00>vstj|<04><00>rtj |<04><00>ndtj | <0C><00>d<13>z} ttj | <0A><00><00><00><00>dx} x}} |d}d}||k}|sltjd|fd||f<02><00>tj |<06><00>tj |<07><00>d <0C>z} d d| iz}
ttj |
<EFBFBD><00><00><00><00>dx}x}}dS)u测试指定Y列。<E58897>rrr)<03>d<00><>i,r!zbar_chart_y.pngr"r#<00>r%<00>y_columnr&r'Tr(r*r+r.r/Nr0r1r&r2r^r9r;r<rKs r<00>test_with_y_columnz)TestCreateBarChartTool.test_with_y_column0s<><00><00>!<21>#<23>#<23><04> <0F>\<5C>'<27><0F><0F>$<24>_<EFBFBD>_<EFBFBD>
<EFBFBD>
<EFBFBD> <0B> <0B><02>
<19>g<EFBFBD>l<EFBFBD>l<EFBFBD>?<3F>4E<34>F<>F<> <0B><15><1C><1C> <0E><1F><1C>#<23> <1E>
<EFBFBD>
<EFBFBD><06> )<29>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,rc<00><00>t<00><00>}tjd<01>td<02><00>D<00><00>td<02><00>d<03><02><00>}tj<00>|d<04><00>}|<02>|ddd|<04><08><00>}|d }d
}||u}|sltj d |fd ||f<02><00>tj
|<06><00>tj
|<07><00>d <0A>z} dd| iz}
ttj |
<EFBFBD><00><00><00><00>dx}x}}|d}d}||k}|sltj d|fd||f<02><00>tj
|<06><00>tj
|<07><00>d <0A>z} dd| iz}
ttj |
<EFBFBD><00><00><00><00>dx}x}}dS)u测试 top_n 限制。c<00><00>g|]}d|<01><00><02><02>S<00><01>cat_<74><00><02>.0<EFBFBD>is r<00>
<listcomp>z;TestCreateBarChartTool.test_top_n_limit.<locals>.<listcomp>H<00><00><00>7<>7<>7<><01><1A><01><1A><1A>7<>7<>7r<00>2r!zbar_chart_top.pngr"r#r)r%r^<00>top_nr&r'Tr(r*r+r.r/N<> data_pointsr9r;) rr=r><00>ranger1r?r@rArBrCrDrErF<00> rLrrMrNr&rOrPrQrRrSrTs r<00>test_top_n_limitz'TestCreateBarChartTool.test_top_n_limitDs<><00><00>!<21>#<23>#<23><04> <0F>\<5C>7<>7<>U<EFBFBD>2<EFBFBD>Y<EFBFBD>Y<EFBFBD>7<>7<>7<><1A>2<EFBFBD>Y<EFBFBD>Y<EFBFBD>
<EFBFBD>
<EFBFBD> <0B> <0B><02>
<19>g<EFBFBD>l<EFBFBD>l<EFBFBD>?<3F>4G<34>H<>H<> <0B><15><1C><1C> <0E><1F><1C><14>#<23> <1E>
<EFBFBD>
<EFBFBD><06> )<29>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*rc<00><><00>t<00><00>}tjdgd<02>i<01><00>}|<01>|d<03><04><00>}d}||v}|s<>t jd|fd||f<02><00>t j|<04><00>dtj<00><00>vst j |<03><00>rt j|<03><00>ndd <09>z}d
d |iz}tt j |<07><00><00><00><00>d x}}d S) u测试不存在的列。<E58897>col1)<03><00><00><00> nonexistent<6E>r%<00>error<6F><01>in<69>z%(py1)s in %(py3)srO<00>r,<00>py3<79>assert %(py5)sr5N<> rr=r>rArBrCrDrHrIrJrErF<00>rLrMrNrOrPrR<00> @py_format4<74> @py_format6s r<00>test_nonexistent_columnz.TestCreateBarChartTool.test_nonexistent_columnXs <00><00>!<21>#<23>#<23><04> <0F>\<5C>6<EFBFBD>9<EFBFBD>9<EFBFBD>9<EFBFBD>-<2D> .<2E> .<2E><02><15><1C><1C>b<EFBFBD>=<3D><1C>9<>9<><06> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> rN)<08>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__rXr_ror<>rdrrrrsV<00><00><00><00><00><00>"<22>"<22>0<>0<>0<> -<2D>-<2D>-<2D>(+<2B>+<2B>+<2B>(!<21>!<21>!<21>!<21>!rrc<00>$<00>eZdZdZd<02>Zd<03>Zd<04>ZdS)<06>TestCreateLineChartToolu测试折线图工具。c<00>.<00>t<00><00>}tjtd<01><00>d<02>td<01><00>D<00><00>d<03><02><00>}tj<00>|d<04><00>}|<02>|dd|<04><07><00>}|d}d }||u}|sltj d
|fd ||f<02><00>tj
|<06><00>tj
|<07><00>d <0C>z} d d| iz}
ttj |
<EFBFBD><00><00><00><00>dx}x}}tj} | j }||<04><00>} | s<>ddtj<00><00>vstjt<00><00>rtj
t<00><00>ndtj
| <0B><00>tj
|<07><00>dtj<00><00>vstj|<04><00>rtj
|<04><00>ndtj
| <0C><00>d<13>z} ttj | <0A><00><00><00><00>dx} x}} |d}d}||k}|sltj d|fd||f<02><00>tj
|<06><00>tj
|<07><00>d <0C>z} d d| iz}
ttj |
<EFBFBD><00><00><00><00>dx}x}}dS)rrc<00><00>g|]}|dz<00><02>S<00>rsrdres rrhzDTestCreateLineChartTool.test_basic_functionality.<locals>.<listcomp>j<00><00><00>+<2B>+<2B>+<2B>A<EFBFBD>!<21>a<EFBFBD>%<25>+<2B>+<2B>+r<00><02>x<>yzline_chart.pngr<67>r<>r]r'Tr(r*r+r.r/Nr0r1r&r2r7<00>liner9r;)rr=r>rmr1r?r@rArBrCrDrErFrGrHrIrJrKs rrXz0TestCreateLineChartTool.test_basic_functionalityes<><00><00>"<22>$<24>$<24><04> <0F>\<5C><16>r<EFBFBD><19><19>+<2B>+<2B><15>r<EFBFBD><19><19>+<2B>+<2B>+<2B>
<EFBFBD>
<EFBFBD> <0B> <0B><02>
<19>g<EFBFBD>l<EFBFBD>l<EFBFBD>?<3F>4D<34>E<>E<> <0B><15><1C><1C> <0E><18><18>#<23> <1E>
<EFBFBD>
<EFBFBD><06> )<29>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-rc<00>&<00>t<00><00>}tjddd<03><04><00>}tj|t d<02><00>d<05><02><00>}t
j<00>|d<06><00>}|<02>|dd|<05> <09><00>}|d
}d }||u} | sltj
d | fd ||f<02><00>tj |<07><00>tj |<08><00>d<0E>z}
dd|
iz} ttj | <0B><00><00><00><00>dx}x} }t
j} | j}||<05><00>} | s<>ddtj<00><00>vstjt
<00><00>rtj t
<00><00>ndtj | <0C><00>tj |<08><00>dtj<00><00>vstj|<05><00>rtj |<05><00>ndtj | <0A><00>d<15>z}ttj |<0E><00><00><00><00>dx} x}} dS)u测试时间序列数据。z
2020-01-01r<00>D)<02>periods<64>freq)<02>dater#zline_chart_time.pngr<67>r#r]r'Tr(r*r+r.r/Nr0r1r&r2)rr=<00>
date_ranger>rmr1r?r@rArBrCrDrErFrGrHrIrJ)rLrrM<00>datesrNr&rOrPrQrRrSrTrUrVrWs r<00>test_with_datetimez*TestCreateLineChartTool.test_with_datetimeysG<00><00>"<22>$<24>$<24><04><12> <0A>l<EFBFBD>B<EFBFBD>S<EFBFBD>A<>A<>A<><05> <0F>\<5C><19><1A>2<EFBFBD>Y<EFBFBD>Y<EFBFBD>
<EFBFBD>
<EFBFBD> <0B> <0B><02>
<19>g<EFBFBD>l<EFBFBD>l<EFBFBD>?<3F>4I<34>J<>J<> <0B><15><1C><1C> <0E><1B><1C>#<23> <1E>
<EFBFBD>
<EFBFBD><06> )<29>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*rc<00><00>t<00><00>}tjtd<01><00>td<01><00>d<02><02><00>}tj<00>|d<03><00>}|<02>|dd|<04><06><00>}|d}d}||u}|sltj d |fd
||f<02><00>tj
|<06><00>tj
|<07><00>d <0B>z} d d | iz}
ttj |
<EFBFBD><00><00><00><00>dx}x}}|d}d}||k}|sltj d|fd||f<02><00>tj
|<06><00>tj
|<07><00>d <0B>z} d d | iz}
ttj |
<EFBFBD><00><00><00><00>dx}x}}dS)u测试大数据集采样。i<E38082>r<>zline_chart_large.pngr<67>r<>r]r'Tr(r*r+r.r/Nrli<>)<01><=)z%(py1)s <= %(py4)s) rr=r>rmr1r?r@rArBrCrDrErFrns r<00>test_large_dataset_samplingz3TestCreateLineChartTool.test_large_dataset_sampling<6E>s<><00><00>"<22>$<24>$<24><04> <0F>\<5C><16>t<EFBFBD><1B><1B><16>t<EFBFBD><1B><1B>
<EFBFBD>
<EFBFBD> <0B> <0B><02>
<19>g<EFBFBD>l<EFBFBD>l<EFBFBD>?<3F>4J<34>K<>K<> <0B><15><1C><1C> <0E><18><18>#<23> <1E>
<EFBFBD>
<EFBFBD><06> )<29>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,rN)r<>r<>r<>r<>rXr<>r<>rdrrr<>r<>bsG<00><00><00><00><00><00>"<22>"<22>.<2E>.<2E>.<2E>(+<2B>+<2B>+<2B>(-<2D>-<2D>-<2D>-<2D>-rr<>c<00><00>eZdZdZd<02>Zd<03>ZdS)<05>TestCreatePieChartToolu测试饼图工具。c<00><><00>t<00><00>}tjdgd<02>i<01><00>}tj<00>|d<03><00>}|<02>|d|<04><04><00>}|d}d}||u}|sltjd|fd||f<02><00>tj |<06><00>tj |<07><00>d <09>z} d
d | iz}
ttj |
<EFBFBD><00><00><00><00>d x}x}}tj} | j }||<04><00>} | s<>d dtj<00><00>vstjt<00><00>rtj t<00><00>ndtj | <0B><00>tj |<07><00>dtj<00><00>vstj|<04><00>rtj |<04><00>ndtj | <0C><00>d<10>z} ttj | <0A><00><00><00><00>d x} x}} |d}d}||k}|sltjd|fd||f<02><00>tj |<06><00>tj |<07><00>d <09>z} d
d | iz}
ttj |
<EFBFBD><00><00><00><00>d x}x}}|d}d}||k}|sltjd|fd||f<02><00>tj |<06><00>tj |<07><00>d <09>z} d
d | iz}
ttj |
<EFBFBD><00><00><00><00>d x}x}}d S)rr"rz pie_chart.png)<02>columnr&r'Tr(r*r+r.r/Nr0r1r&r2r7<00>pier9r;<00>
categoriesrt)rr=r>r1r?r@rArBrCrDrErFrGrHrIrJrKs rrXz/TestCreatePieChartTool.test_basic_functionality<74>s<><00><00>!<21>#<23>#<23><04> <0F>\<5C> <16>6<>6<>6<>
<EFBFBD> <0B> <0B><02><19>g<EFBFBD>l<EFBFBD>l<EFBFBD>?<3F>O<EFBFBD>D<>D<> <0B><15><1C><1C> <0E><1D>#<23><1E>
<EFBFBD>
<EFBFBD><06> )<29>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(rc<00><00>t<00><00>}tjdd<02>td<03><00>D<00><00>dzi<01><00>}tj<00>|d<05><00>}|<02>|dd|<04><06><00>}|d}d}||u}|sltj d |fd
||f<02><00>tj
|<06><00>tj
|<07><00>d <0B>z} d d | iz}
ttj |
<EFBFBD><00><00><00><00>dx}x}}|d}d}||k}|sltj d|fd||f<02><00>tj
|<06><00>tj
|<07><00>d <0B>z} d d | iz}
ttj |
<EFBFBD><00><00><00><00>dx}x}}dS)u测试 top_n 并归类其他。r"c<00><00>g|]}d|<01><00><02><02>Srbrdres rrhzATestCreatePieChartTool.test_top_n_with_others.<locals>.<listcomp><3E>rirr<00>zpie_chart_top.png)r<>rkr&r'Tr(r*r+r.r/Nr<4E><00>r9r;) rr=r>rmr1r?r@rArBrCrDrErFrns r<00>test_top_n_with_othersz-TestCreatePieChartTool.test_top_n_with_others<72>s<><00><00>!<21>#<23>#<23><04> <0F>\<5C> <16>7<>7<>U<EFBFBD>2<EFBFBD>Y<EFBFBD>Y<EFBFBD>7<>7<>7<>!<21>;<3B>
<EFBFBD> <0B> <0B><02><19>g<EFBFBD>l<EFBFBD>l<EFBFBD>?<3F>4G<34>H<>H<> <0B><15><1C><1C> <0E><1D><13>#<23> <1E>
<EFBFBD>
<EFBFBD><06> )<29>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(rN)r<>r<>r<>r<>rXr<>rdrrr<>r<><00>s8<00><00><00><00><00><00><1F><1F>)<29>)<29>)<29>&)<29>)<29>)<29>)<29>)rr<>c<00>$<00>eZdZdZd<02>Zd<03>Zd<04>ZdS)<06>TestCreateHeatmapToolu测试热力图工具。c<00>:<00>t<00><00>}tjtd<01><00>d<02>td<01><00>D<00><00>d<03>td<01><00>D<00><00>d<04><03><00>}tj<00>|d<05><00>}|<02>||<04><06><00>}|d}d}||u}|sltj d |fd
||f<02><00>tj
|<06><00>tj
|<07><00>d <0B>z} d d | iz}
ttj |
<EFBFBD><00><00><00><00>dx}x}}tj} | j }||<04><00>} | s<>ddtj<00><00>vstjt<00><00>rtj
t<00><00>ndtj
| <0B><00>tj
|<07><00>dtj<00><00>vstj|<04><00>rtj
|<04><00>ndtj
| <0C><00>d<12>z} ttj | <0A><00><00><00><00>dx} x}} |d}d}||k}|sltj d|fd||f<02><00>tj
|<06><00>tj
|<07><00>d <0B>z} d d | iz}
ttj |
<EFBFBD><00><00><00><00>dx}x}}|d} t#| <0B><00>}d} || k}|s<>tj d|fd|| f<02><00>dtj<00><00>vstjt"<00><00>rtj
t"<00><00>ndtj
| <0B><00>tj
|<07><00>tj
| <0C><00>d<1B>z} dd| iz}ttj |<0F><00><00><00><00>dx} x}x}} dS)rrc<00><00>g|]}|dz<00><02>Sr<>rdres rrhzBTestCreateHeatmapTool.test_basic_functionality.<locals>.<listcomp><3E>r<>rc<00><00>g|]}|dz<00><02>S)rtrdres rrhzBTestCreateHeatmapTool.test_basic_functionality.<locals>.<listcomp><3E>r<>r)r<>r<><00>zz heatmap.png)r&r'Tr(r*r+r.r/Nr0r1r&r2r7<00>heatmapr9r;<00>columnsrt<00>z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)s<>len<65>r3r4r-r6<00>assert %(py9)s<>py9)rr=r>rmr1r?r@rArBrCrDrErFrGrHrIrJr<>)rLrrMrNr&rOrPrQrRrSrTrUrVrW<00> @py_assert5<74> @py_format10s rrXz.TestCreateHeatmapTool.test_basic_functionality<74>s<00><00> <20>"<22>"<22><04> <0F>\<5C><16>r<EFBFBD><19><19>+<2B>+<2B><15>r<EFBFBD><19><19>+<2B>+<2B>+<2B>+<2B>+<2B><15>r<EFBFBD><19><19>+<2B>+<2B>+<2B>
<EFBFBD>
<EFBFBD> <0B> <0B><02> <19>g<EFBFBD>l<EFBFBD>l<EFBFBD>?<3F>M<EFBFBD>B<>B<> <0B><15><1C><1C>b<EFBFBD>k<EFBFBD><1C>:<3A>:<3A><06>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>0<>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*rc <00><00>t<00><00>}tjtd<01><00>tdd<02><00>tdd<03><00>tdd<04><00>d<05><04><00>}tj<00>|d<06><00>}|<02>|gd<07>|<04><08><00>}|d }d
}||u}|sltj d |fd ||f<02><00>tj
|<06><00>tj
|<07><00>d <0A>z} dd| iz}
ttj |
<EFBFBD><00><00><00><00>dx}x}}|d} t| <0B><00>}d} || k} | s<>tj d| fd|| f<02><00>dtj<00><00>vstjt<00><00>rtj
t<00><00>ndtj
| <0B><00>tj
|<07><00>tj
| <0C><00>d<16>z}dd|iz}ttj |<0F><00><00><00><00>dx} x}x} } d}|d}||v}|sltj d|fd||f<02><00>tj
|<06><00>tj
|<07><00>d <0A>z} dd| iz}
ttj |
<EFBFBD><00><00><00><00>dx}x}}dS)u测试指定列。rrr<00>()<04>a<>b<>c<>dzheatmap_cols.png)r<>r<>r<>)r<>r&r'Tr(r*r+r.r/Nr<4E>rtr9r<>r<>r<>r<>r<>r<>)<01>not in)z%(py1)s not in %(py4)s)rr=r>rmr1r?r@rArBrCrDrErFr<>rHrIrJ)rLrrMrNr&rOrPrQrRrSrTrUrVr<>rWr<>s r<00>test_with_specific_columnsz0TestCreateHeatmapTool.test_with_specific_columns<6E>s<00><00> <20>"<22>"<22><04> <0F>\<5C><16>r<EFBFBD><19><19><16>r<EFBFBD>2<EFBFBD><1D><1D><16>r<EFBFBD>2<EFBFBD><1D><1D><16>r<EFBFBD>2<EFBFBD><1D><1D> 
<EFBFBD>
<EFBFBD> <0B> <0B><02><19>g<EFBFBD>l<EFBFBD>l<EFBFBD>?<3F>4F<34>G<>G<> <0B><15><1C><1C> <0E>#<23>O<EFBFBD>O<EFBFBD>#<23><1E>
<EFBFBD>
<EFBFBD><06> )<29>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+rc<00><><00>t<00><00>}tjdtd<02><00>i<01><00>}|<01>|<02><00>}d}||v}|s<>t jd|fd||f<02><00>t j|<04><00>dtj <00><00>vst j
|<03><00>rt j|<03><00>ndd<07>z}dd |iz}tt j |<07><00><00><00><00>d
x}}d
S) u测试列数不足。r<E38082>rrwrxrzrOr{r}r5N) rr=r>rmrArBrCrDrHrIrJrErFrs r<00>test_insufficient_columnsz/TestCreateHeatmapTool.test_insufficient_columns<6E>s<00><00> <20>"<22>"<22><04> <0F>\<5C>3<EFBFBD><05>b<EFBFBD> <09> <09>*<2A> +<2B> +<2B><02><15><1C><1C>b<EFBFBD>!<21>!<21><06> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> rN)r<>r<>r<>r<>rXr<>r<>rdrrr<>r<><00>sG<00><00><00><00><00><00>"<22>"<22>+<2B>+<2B>+<2B>",<2C>,<2C>,<2C>*!<21>!<21>!<21>!<21>!rr<>c<00>$<00>eZdZdZd<02>Zd<03>Zd<04>ZdS)<06>#TestVisualizationToolsApplicabilityu*测试可视化工具的适用性判断。c <00><><00>t<00><00>}tdddtdddd<07><08><00>gd <09>
<EFBFBD><00>}|j}||<02><00>}d }||u}|s<>t jd |fd ||f<02><00>dt j<00><00>vst j|<01><00>rt j |<01><00>ndt j |<03><00>dt j<00><00>vst j|<02><00>rt j |<02><00>ndt j |<04><00>t j |<05><00>d<10>z}dd|iz}tt j |<08><00><00><00><00>dx}x}x}}dS)u测试柱状图适用性。<E680A7>test.csvr[rr<00>cat<61> categorical<61>r<><00><04>name<6D>dtype<70> missing_rate<74> unique_count<6E>unknown<77><05> file_path<74> row_count<6E> column_countr<74><00> inferred_typeTr(<00>zS%(py5)s
{%(py5)s = %(py2)s
{%(py2)s = %(py0)s.is_applicable
}(%(py3)s)
} is %(py8)srM<00>profile<6C>r3r4r|r5<00>py8<79>assert %(py10)s<>py10N) rrr <00> is_applicablerBrCrHrIrJrDrErF) rLrMr<>rU<00> @py_assert4<74> @py_assert7rV<00> @py_format9<74> @py_format11s r<00>test_bar_chart_applicabilityz@TestVisualizationToolsApplicability.test_bar_chart_applicabilitys<><00><00>!<21>#<23>#<23><04><1D> <20><19><1A><1A><05>]<5D><13>[\<5C>]<5D>]<5D>]<5D><0E>$<24>
<EFBFBD>
<EFBFBD>
<EFBFBD><07> 3<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2rc <00>.<00>t<00><00>}tdddtdddd<07><08><00>gd <09>
<EFBFBD><00>}|j}||<02><00>}d }||u}|s<>t jd |fd ||f<02><00>dt j<00><00>vst j|<01><00>rt j |<01><00>ndt j |<03><00>dt j<00><00>vst j|<02><00>rt j |<02><00>ndt j |<04><00>t j |<05><00>d<10>z}dd|iz}tt j |<08><00><00><00><00>dx}x}x}}tdddtdddd<07><08><00>gd <09>
<EFBFBD><00>} |j}|| <09><00>}d}||u}|s<>t jd |fd ||f<02><00>dt j<00><00>vst j|<01><00>rt j |<01><00>ndt j |<03><00>dt j<00><00>vst j| <09><00>rt j | <09><00>ndt j |<04><00>t j |<05><00>d<10>z}dd|iz}tt j |<08><00><00><00><00>dx}x}x}}dS)u测试折线图适用性。r<E38082>r[rrr#<00>numericr<63>rjr<>r<>r<>Tr(r<>rM<00>profile_numericr<63>r<>r<>N<>textF<74> profile_text) rrr r<>rBrCrHrIrJrDrErF)
rLrMr<>rUr<>r<>rVr<>r<>r<>s
r<00>test_line_chart_applicabilityzATestVisualizationToolsApplicability.test_line_chart_applicabilitys'<00><00>"<22>$<24>$<24><04>&<26> <20><19><1A><1A><07>y<EFBFBD>s<EFBFBD>Y[<5B>\<5C>\<5C>\<5C><0E>$<24>
<EFBFBD>
<EFBFBD>
<EFBFBD><0F> ;<3B>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>#<23> <20><19><1A><1A><06>f<EFBFBD>3<EFBFBD>UW<55>X<>X<>X<><0E>$<24>
<EFBFBD>
<EFBFBD>
<EFBFBD> <0C> 9<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8rc <00>R<00>t<00><00>}tdddtdddd<07><08><00>td ddd<07><08><00>gd
<EFBFBD> <0B><00>}|j}||<02><00>}d }||u}|s<>t jd |fd||f<02><00>dt j<00><00>vst j|<01><00>rt j |<01><00>ndt j |<03><00>dt j<00><00>vst j|<02><00>rt j |<02><00>ndt j |<04><00>t j |<05><00>d<11>z}dd|iz}tt j |<08><00><00><00><00>dx}x}x}}tdddtdddd<07><08><00>gd
<EFBFBD> <0B><00>} |j}|| <09><00>}d}||u}|s<>t jd |fd||f<02><00>dt j<00><00>vst j|<01><00>rt j |<01><00>ndt j |<03><00>dt j<00><00>vst j| <09><00>rt j | <09><00>ndt j |<04><00>t j |<05><00>d<11>z}dd|iz}tt j |<08><00><00><00><00>dx}x}x}}dS)u测试热力图适用性。r<E38082>r[rsr<>r<>r<>rjr<>r<>r<>r<>Tr(r<>rM<00>profile_sufficientr<74>r<>r<>NrrF<>profile_insufficient) rrr r<>rBrCrHrIrJrDrErF)
rLrMr<>rUr<>r<>rVr<>r<>r<>s
r<00>test_heatmap_applicabilityz>TestVisualizationToolsApplicability.test_heatmap_applicability-s?<00><00> <20>"<22>"<22><04>)<29> <20><19><1A><1A><03>9<EFBFBD>3<EFBFBD>UW<55>X<>X<>X<><1A><03>9<EFBFBD>3<EFBFBD>UW<55>X<>X<>X<><0E>$<24> 
<EFBFBD> 
<EFBFBD> 
<EFBFBD><1A> ><3E>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D> +<2B> <20><19><1A><1A><03>9<EFBFBD>3<EFBFBD>UW<55>X<>X<>X<><0E>$<24>
<EFBFBD>
<EFBFBD>
<EFBFBD><1C> A<01>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@<40>@rN)r<>r<>r<>r<>r<>r<>r<>rdrrr<>r<><00>sL<00><00><00><00><00><00>4<>4<> 3<> 3<> 3<>9<>9<>9<>8A<01>A<01>A<01>A<01>Arr<>c<00><00>eZdZdZd<02>Zd<03>ZdS)<05>TestVisualizationErrorHandlingu'测试可视化工具的错误处理。c<00>6<00>t<00><00>}tjdgd<02>i<01><00>}|<01>|dd<03><04><00>}g}d}||v}|}|s|d}d} || u}
|
}|<07>s-t jd|fd ||f<02><00>t j|<05><00>d
tj<00><00>vst j |<03><00>rt j|<03><00>nd
d <0B>z} d d | iz} |<04>
| <0C><00>|s`t jd|
fd|| f<02><00>t j|<08><00>t j| <09><00>d<10>z} dd| iz}|<04>
|<0E><00>t j |d<13><00>iz}dd|iz}tt j |<10><00><00><00><00>dx}x}x}x}x}x}
} dS)u测试无效的输出路径。r<E38082>rZz/invalid/path/chart.pngr$rwr'Trx)z%(py3)s in %(py5)srO)r|r5z%(py7)sr6r()z%(py10)s is %(py13)s)r<><00>py13z%(py15)s<>py15rrzassert %(py18)s<>py18N)rr=r>rArBrCrDrHrIrJ<00>append<6E>_format_booloprErF)rLrMrNrOrUrRr<>rP<00> @py_assert9<74> @py_assert12<31> @py_assert11r<31>rW<00> @py_format14<31> @py_format16<31> @py_format17<31> @py_format19s r<00>test_invalid_output_pathz7TestVisualizationErrorHandling.test_invalid_output_pathNs'<00><00>!<21>#<23>#<23><04> <0F>\<5C>5<EFBFBD>/<2F>/<2F>/<2F>2<> 3<> 3<><02><16><1C><1C> <0E><1A>1<><1E>
<EFBFBD>
<EFBFBD><06> ><3E>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=rc<00><><00>t<00><00>}tj<00><00>}|<01>|d<01><02><00>}d}||v}|s<>t jd|fd||f<02><00>t j|<04><00>dtj<00><00>vst j |<03><00>rt j|<03><00>ndd<07>z}dd |iz}tt j |<07><00><00><00><00>d
x}}d
S) u测试空 DataFrame。rurvrwrxrzrOr{r}r5Nr~rs r<00>test_empty_dataframez3TestVisualizationErrorHandling.test_empty_dataframe^s<><00><00>!<21>#<23>#<23><04> <0F>\<5C>^<5E>^<5E><02><15><1C><1C>b<EFBFBD>=<3D><1C>9<>9<><06> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> rN)r<>r<>r<>r<>r<>r<>rdrrr<>r<>Ks8<00><00><00><00><00><00>1<>1<>><3E>><3E>><3E> !<21>!<21>!<21>!<21>!rr<>)!r<><00>builtinsrH<00>_pytest.assertion.rewrite<74> assertion<6F>rewriterB<00>pytest<73>pandasr=<00>numpy<70>npr1<00>pathlibrr r<00>src.tools.viz_toolsrrrr<00>
src.modelsrr <00>fixturerrr<>r<>r<>r<>r<>rdrr<00><module>rs<><00><01>'<27>'<27><00><00><00><00><00><00><00><00><00><00><00><00><00> <0A> <0A> <0A> <0A><13><13><13><13><12><12><12><12> <09> <09> <09> <09><18><18><18><18><18><18><0F><0F><0F><0F> <0A> <0A> <0A> <0A><02><02><02><02><02><02><02><02><02><02><02><02> /<2F>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><08><1E>0<>0<><10><1E>0<>B!<21>B!<21>B!<21>B!<21>B!<21>B!<21>B!<21>B!<21>J=-<2D>=-<2D>=-<2D>=-<2D>=-<2D>=-<2D>=-<2D>=-<2D>@')<29>')<29>')<29>')<29>')<29>')<29>')<29>')<29>T0!<21>0!<21>0!<21>0!<21>0!<21>0!<21>0!<21>0!<21>fIA<01>IA<01>IA<01>IA<01>IA<01>IA<01>IA<01>IA<01>X!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!r