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

356 lines
81 KiB
Plaintext
Raw Normal View History

<EFBFBD>
<00>ݪi<DDAA>X<00><00><><00>dZddlZddlmcmZddlZddlZ ddl
Z ddl m Z m Z ddlmZmZddlmZmZmZmZddlmZmZmZmZddlmZmZGd<08>d <09><00>ZGd
<EFBFBD>d <0B><00>ZGd <0C>d <0A><00>Z Gd<0E>d<0F><00>Z!Gd<10>d<11><00>Z"Gd<12>d<13><00>Z#Gd<14>d<15><00>Z$Gd<16>d<17><00>Z%Gd<18>d<19><00>Z&Gd<1A>d<1B><00>Z'Gd<1C>d<1D><00>Z(Gd<1E>d<1F><00>Z)dS) u工具系统的单元测试。<E8AF95>N)<02>datetime<6D> timedelta)<02> AnalysisTool<6F> ToolRegistry)<04>GetColumnDistributionTool<6F>GetValueCountsTool<6F>GetTimeSeriesTool<6F>GetCorrelationTool)<04>CalculateStatisticsTool<6F>PerformGroupbyTool<6F>DetectOutliersTool<6F>CalculateTrendTool)<02> DataProfile<6C>
ColumnInfoc<00>$<00>eZdZdZd<02>Zd<03>Zd<04>ZdS)<06>TestGetColumnDistributionToolu测试列分布工具。c<00><><00>t<00><00>}tjdgd<02>i<01><00>}|<01>|d<01><03><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<08>z}d d
|iz}tt j |<07><00><00><00><00>d x}}|d }d}||k}|slt jd |fd||f<02><00>t j|<04><00>t j|<08><00>d<0F>z} dd| iz}
tt j |
<EFBFBD><00><00><00><00>d x}x}}|d}d}||k}|slt jd |fd||f<02><00>t j|<04><00>t j|<08><00>d<0F>z} dd| iz}
tt j |
<EFBFBD><00><00><00><00>d x}x}}|d}d}||k}|slt jd |fd||f<02><00>t j|<04><00>t j|<08><00>d<0F>z} dd| iz}
tt j |
<EFBFBD><00><00><00><00>d x}x}}|d} t| <0B><00>}d} || k} | s<>t jd | fd|| f<02><00>dtj<00><00>vst j t<00><00>rt jt<00><00>ndt j| <0B><00>t j|<08><00>t j| <0C><00>d<18>z}dd|iz}tt j |<0F><00><00><00><00>d x} x}x} } d S)<1B>测试基本功能。<E883BD>status)<06>open<65>closedr<00>pendingrr<00><01>column<6D> distribution<6F><01>in<69>z%(py1)s in %(py3)s<>result<6C><02>py1<79>py3<79>assert %(py5)s<>py5Nr<00><01>==<3D>z%(py1)s == %(py4)s<>r!<00>py4<79>assert %(py6)s<>py6<79> total_count<6E><00> unique_count<6E><00>z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)s<>len<65><04>py0<79>py2r)<00>py7<79>assert %(py9)s<>py9) r<00>pd<70> DataFrame<6D>execute<74>
@pytest_ar<61>_call_reprcompare<72> _saferepr<70> @py_builtins<6E>locals<6C>_should_repr_global_name<6D>AssertionError<6F>_format_explanationr1)<10>self<6C>tool<6F>dfr<00> @py_assert0<74> @py_assert2<74> @py_format4<74> @py_format6<74> @py_assert3<74> @py_format5<74> @py_format7<74> @py_assert1<74> @py_assert6<74> @py_assert5<74> @py_format8<74> @py_format10s <20>7D:\code\iov_data_analysis_agent_old\tests\test_tools.py<70>test_basic_functionalityz6TestGetColumnDistributionTool.test_basic_functionalitys-<00><00>(<28>*<2A>*<2A><04> <0F>\<5C> <14>M<>M<>M<>
<EFBFBD> <0B> <0B><02><16><1C><1C>b<EFBFBD><18><1C>2<>2<><06>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>+<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>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>/<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>/<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>c<00><><00>t<00><00>}tjdtt d<02><00><00><00>i<01><00>}|<01>|dd<03><04><00>}|d}t |<04><00>}d}||k}|s<>tjd|fd||f<02><00>dtj
<00><00>vstj t <00><00>rtj t <00><00>ndtj |<04><00>tj |<05><00>tj |<06><00>d <09>z}d
d |iz} ttj| <09><00><00><00><00>d x}x}x}}d S) u测试 top_n 参数限制。<E588B6>value<75><00>)r<00>top_nrr%r0r1r2r6r7N)rr8r9<00>list<73>ranger:r1r;r<r>r?r@r=rArB)
rCrDrErrMrJrNrOrPrQs
rR<00>test_top_n_limitz.TestGetColumnDistributionTool.test_top_n_limit*sa<00><00>(<28>*<2A>*<2A><04> <0F>\<5C> <13>T<EFBFBD>%<25><02>)<29>)<29>_<EFBFBD>_<EFBFBD>
<EFBFBD> <0B> <0B><02><16><1C><1C>b<EFBFBD><17><01><1C>:<3A>:<3A><06>/<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>/<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>/rTc<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<6C><03><00>r/<00> nonexistentr<00>errorrrrr r#r$N) rr8r9r:r;r<r=r>r?r@rArB<00>rCrDrErrFrGrHrIs rR<00>test_nonexistent_columnz5TestGetColumnDistributionTool.test_nonexistent_column5s <00><00>(<28>*<2A>*<2A><04> <0F>\<5C>6<EFBFBD>9<EFBFBD>9<EFBFBD>9<EFBFBD>-<2D> .<2E> .<2E><02><15><1C><1C>b<EFBFBD><1D><1C>7<>7<><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> rTN)<07>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__rSr\re<00>rTrRrrsG<00><00><00><00><00><00>"<22>"<22> 0<> 0<> 0<> 0<> 0<> 0<>!<21>!<21>!<21>!<21>!rTrc<00><00>eZdZdZd<02>Zd<03>ZdS)<05>TestGetValueCountsToolu测试值计数工具。c<00><00>t<00><00>}tjdgd<02>i<01><00>}|<01>|d<01><03><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<08>z}d d
|iz}tt j |<07><00><00><00><00>d x}}|dd }d }||k}|slt jd|fd||f<02><00>t j|<04><00>t j|<08><00>d<10>z} dd| iz}
tt j |
<EFBFBD><00><00><00><00>d x}x}}|dd}d}||k}|slt jd|fd||f<02><00>t j|<04><00>t j|<08><00>d<10>z} dd| iz}
tt j |
<EFBFBD><00><00><00><00>d x}x}}|dd}d}||k}|slt jd|fd||f<02><00>t j|<04><00>t j|<08><00>d<10>z} dd| iz}
tt j |
<EFBFBD><00><00><00><00>d x}x}}d S)r<00>category)<06>A<>Bro<00>Crpror<00> value_countsrrrr r#r$Nror/r%r'r(r*r+rprarqr`) rr8r9r:r;r<r=r>r?r@rArB) rCrDrErrFrGrHrIrJrKrLs rRrSz/TestGetValueCountsTool.test_basic_functionalityBs1<00><00>!<21>#<23>#<23><04> <0F>\<5C> <16>6<>6<>6<>
<EFBFBD> <0B> <0B><02><16><1C><1C>b<EFBFBD><1A><1C>4<>4<><06>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>/<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>/<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>/<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>/<2F>/<2F>/<2F>/<2F>/rTc<00><><00>t<00><00>}tjdgd<02>i<01><00>}|<01>|dd<03><04><00>}|d}d}||u}|slt jd|fd||f<02><00>t j|<04><00>t j|<05><00>d<08>z}d d
|iz}tt j|<08><00><00><00><00>d x}x}}|d d } d}| |z
}
t|
<EFBFBD><00>} d} | | k} | s<>t jd| fd| | f<02><00>dtj <00><00>vst j t<00><00>rt jt<00><00>ndt j| <09><00>t j|<05><00>t j| <0B><00>t j| <0C><00>d<13>z}dd|iz}tt j|<0F><00><00><00><00>d x} x}x}
x} x} } |d d} d}| |z
}
t|
<EFBFBD><00>} d} | | k} | s<>t jd| fd| | f<02><00>dtj <00><00>vst j t<00><00>rt jt<00><00>ndt j| <09><00>t j|<05><00>t j| <0B><00>t j| <0C><00>d<13>z}dd|iz}tt j|<0F><00><00><00><00>d x} x}x}
x} x} } d S)u测试归一化计数。rn)rororprpT)r<00> normalize<7A>
normalized<EFBFBD><01>is)z%(py1)s is %(py4)sr(r*r+Nrrrog<00>?<3F>{<14>G<EFBFBD>z<EFBFBD>?<3F><01><<3C>z<%(py7)s
{%(py7)s = %(py0)s((%(py2)s - %(py4)s))
} < %(py10)s<>abs<62>r3r4r)r5<00>py10<31>assert %(py12)s<>py12rp) rr8r9r:r;r<r=rArBr|r>r?r@)rCrDrErrFrJrGrKrLrMrOrN<00> @py_assert9<74> @py_assert8<74> @py_format11<31> @py_format13s rR<00>test_normalized_countsz-TestGetValueCountsTool.test_normalized_countsPs~<00><00>!<21>#<23>#<23><04> <0F>\<5C> <16>,<2C>,<2C>,<2C>
<EFBFBD> <0B> <0B><02><16><1C><1C>b<EFBFBD><1A>t<EFBFBD><1C>D<>D<><06>+<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><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><rTN)rfrgrhrirSr<>rjrTrRrlrl?s8<00><00><00><00><00><00>"<22>"<22> 0<> 0<> 0<> =<3D> =<3D> =<3D> =<3D> =rTrlc<00>$<00>eZdZdZd<02>Zd<03>Zd<04>ZdS)<06>TestGetTimeSeriesToolu测试时间序列工具。c<00><00>t<00><00>}tjddd<03><04><00>}tj|t d<02><00>d<05><02><00>}|<01>|ddd<08> <09><00>}d
}||v}|s<>t jd |fd ||f<02><00>t j|<05><00>d tj
<00><00>vst j |<04><00>rt j|<04><00>nd d<0E>z}dd|iz}tt j |<08><00><00><00><00>dx}}|d}d} || k}|slt jd|fd|| f<02><00>t j|<05><00>t j| <09><00>d<15>z}
dd|
iz} tt j | <0B><00><00><00><00>dx}x}} |d}d} || k}|slt jd|fd|| f<02><00>t j|<05><00>t j| <09><00>d<15>z}
dd|
iz} tt j | <0B><00><00><00><00>dx}x}} |d
} t| <0C><00>} d} | | k}|s<>t jd|fd| | f<02><00>dtj
<00><00>vst j t<00><00>rt jt<00><00>ndt j| <0C><00>t j| <09><00>t j| <0A><00>d<1D>z}dd|iz}tt j |<10><00><00><00><00>dx} x} x}} dS) r<00>
2020-01-01<30>
<00>D<><02>periods<64>freq<65><02>daterVr<>rV<00>sum)<03> time_column<6D> value_column<6D> aggregation<6F> time_seriesrrrr r#r$Nr<4E>r%r'r(r*r+r<>r<00><01>><3E>z/%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} > %(py7)sr1r2r6r7)r r8<00>
date_ranger9r[r:r;r<r=r>r?r@rArBr1)rCrD<00>datesrErrFrGrHrIrJrKrLrMrNrOrPrQs rRrSz.TestGetTimeSeriesTool.test_basic_functionalityas<><00><00> <20>"<22>"<22><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>
<16><1C><1C>b<EFBFBD>f<EFBFBD>7<EFBFBD>X]<5D><1C>^<5E>^<5E><06>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>-<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>-<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>-<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>-rTc<00><><00>t<00><00>}tjddd<03><04><00>}tjd|i<01><00>}|<01>|dd<06><07><00>}d}||v}|s<>t jd |fd
||f<02><00>t j|<05><00>d tj <00><00>vst j
|<04><00>rt j|<04><00>nd d <0C>z}d d|iz}tt j |<08><00><00><00><00>dx}}|d} t| <09><00>}
d} |
| k} | s<>t jd| fd|
| f<02><00>dtj <00><00>vst j
t<00><00>rt jt<00><00>ndt j| <09><00>t j|
<EFBFBD><00>t j| <0B><00>d<14>z} dd| iz}tt j |<0E><00><00><00><00>dx} x}
x} } dS)<17>测试计数聚合。r<E38082>rXr<>r<>r<><00>count)r<>r<>r<>rrrr r#r$Nrr<>r<>r1r2r6r7)r r8r<>r9r:r;r<r=r>r?r@rArBr1)rCrDr<>rErrFrGrHrIrMrJrNrOrPrQs rR<00>test_count_aggregationz,TestGetTimeSeriesTool.test_count_aggregationqs*<00><00> <20>"<22>"<22><04><12> <0A>l<EFBFBD>A<EFBFBD>C<EFBFBD>@<40>@<40>@<40><05> <0F>\<5C>6<EFBFBD>5<EFBFBD>/<2F> *<2A> *<2A><02><15><1C><1C>b<EFBFBD>f<EFBFBD>'<27><1C>J<>J<><06>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>-<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>-<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>-rTc<00><><00>t<00><00>}tjddd<03><04><00>}tjd|i<01><00>}|<01>|d<05><06><00>}|d}t |<05><00>}d}||k}|s<>t jd |fd
||f<02><00>d tj <00><00>vst j
t
<00><00>rt j t
<00><00>nd t j |<05><00>t j |<06><00>t j |<07><00>d <0C>z} d d| iz}
tt j |
<EFBFBD><00><00><00><00>dx}x}x}}|d} d}| |k} | slt jd| fd| |f<02><00>t j | <0B><00>t j |<06><00>d<13>z} dd| iz}tt j |<0E><00><00><00><00>dx} x} }|d} d}| |k} | slt jd| fd| |f<02><00>t j | <0B><00>t j |<06><00>d<13>z} dd| iz}tt j |<0E><00><00><00><00>dx} x} }dS)u*测试输出限制不超过100行。r<E38082><00><>r<>r<>r<><00>r<>r<><00>d<00><01><=<3D>z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} <= %(py7)sr1r2r6r7N<> total_pointsr%r'r(r*r+<00>returned_points)r r8r<>r9r:r1r;r<r>r?r@r=rArB)rCrDr<>rErrMrJrNrOrPrQrFrGrKrLs rR<00>test_output_limitz'TestGetTimeSeriesTool.test_output_limit|s<><00><00> <20>"<22>"<22><04><12> <0A>l<EFBFBD>C<EFBFBD>c<EFBFBD>B<>B<>B<><05> <0F>\<5C>6<EFBFBD>5<EFBFBD>/<2F> *<2A> *<2A><02><15><1C><1C>b<EFBFBD>f<EFBFBD><1C>5<>5<><06>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<>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<>,<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>/rTN<>rfrgrhrirSr<>r<>rjrTrRr<>r<>^sG<00><00><00><00><00><00>%<25>%<25>.<2E>.<2E>.<2E> .<2E> .<2E> .<2E>
0<>
0<>
0<>
0<>
0rTr<>c<00><00>eZdZdZd<02>Zd<03>ZdS)<05>TestGetCorrelationToolu测试相关性分析工具。c<00>
<00>t<00><00>}tjgd<01>gd<02>gd<03>d<04><03><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 <09>z}d
d |iz}tt j |<07><00><00><00><00>d x}}d }|d}||v}|slt jd|fd||f<02><00>t j|<04><00>t j|<08><00>d<0F>z} dd| iz}
tt j |
<EFBFBD><00><00><00><00>d x}x}}d}|d}||v}|slt jd|fd||f<02><00>t j|<04><00>t j|<08><00>d<0F>z} dd| iz}
tt j |
<EFBFBD><00><00><00><00>d x}x}}|dd d} d}| |z
} t| <0C><00>} d}| |k}|s<>t jd|fd| |f<02><00>dtj<00><00>vst j t<00><00>rt jt<00><00>ndt j| <0B><00>t j|<08><00>t j| <0A><00>t j|<0E><00>d<18>z}dd|iz}tt j |<11><00><00><00><00>d x} x}x} x} x}}d S)r)r`rar/<00>rX)rar<>r-<00>r<>)r`r`r`r`r`)<03>x<>y<>z<>correlation_matrixrrrr r#r$Nr<4E><00>z%(py1)s in %(py4)sr(r*r+r<>g<00>?rxryr{r|r}rr<>) r
r8r9r:r;r<r=r>r?r@rArBr|)rCrDrErrFrGrHrIrJrKrLrMrOrNr<>r<>r<>r<>s rRrSz/TestGetCorrelationTool.test_basic_functionality<74>s<><00><00>!<21>#<23>#<23><04> <0F>\<5C> <20><1F><1F>!<21>!<21>!<21> <20><1F><1F>
<EFBFBD>
<EFBFBD> <0B> <0B><02> <16><1C><1C>b<EFBFBD>!<21>!<21><06>-<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>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>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<>2<>2<>2<>2<>2<>2<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>GrTc<00><><00>t<00><00>}tjgd<01>gd<02>d<03><02><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<08>z}d d
|iz}tt j |<07><00><00><00><00>d x}}d S) u!测试数值列不足的情况。r_<00><03>a<>b<>c)r<><00>textrcrrrr r#r$N) r
r8r9r:r;r<r=r>r?r@rArBrds rR<00>!test_insufficient_numeric_columnsz8TestGetCorrelationTool.test_insufficient_numeric_columns<6E>s<00><00>!<21>#<23>#<23><04> <0F>\<5C><1A><19><19>#<23>O<EFBFBD>O<EFBFBD>
<EFBFBD>
<EFBFBD> <0B> <0B><02>
<16><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> rTN)rfrgrhrirSr<>rjrTrRr<>r<><00>s;<00><00><00><00><00><00>(<28>(<28>H<01>H<01>H<01>"
!<21>
!<21>
!<21>
!<21>
!rTr<>c<00><00>eZdZdZd<02>Zd<03>ZdS)<05>TestCalculateStatisticsToolu测试统计计算工具。c<00><><00>t<00><00>}tjdgd<02>i<01><00>}|<01>|d<01><03><00>}|d}d}||k}|slt jd|fd||f<02><00>t j|<04><00>t j|<05><00>d<08>z}d d
|iz}tt j|<08><00><00><00><00>d x}x}}|d }d}||k}|slt jd|fd||f<02><00>t j|<04><00>t j|<05><00>d<08>z}d d
|iz}tt j|<08><00><00><00><00>d x}x}}|d }d}||k}|slt jd|fd||f<02><00>t j|<04><00>t j|<05><00>d<08>z}d d
|iz}tt j|<08><00><00><00><00>d x}x}}|d}d}||k}|slt jd|fd||f<02><00>t j|<04><00>t j|<05><00>d<08>z}d d
|iz}tt j|<08><00><00><00><00>d x}x}}|d}d}||k}|slt jd|fd||f<02><00>t j|<04><00>t j|<05><00>d<08>z}d d
|iz}tt j|<08><00><00><00><00>d x}x}}d S)r<00>values)
r`rar/r<>rXr-<00>r<><00> r<>r<00>meang@r%r'r(r*r+N<>median<61>minr`<00>maxr<78>r<>) r r8r9r:r;r<r=rArB<00> rCrDrErrFrJrGrKrLs rRrSz4TestCalculateStatisticsTool.test_basic_functionality<74>s<><00><00>&<26>(<28>(<28><04> <0F>\<5C> <14>5<>5<>5<>
<EFBFBD> <0B> <0B><02><16><1C><1C>b<EFBFBD><18><1C>2<>2<><06>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$rTc<00><><00>t<00><00>}tjdgd<02>i<01><00>}|<01>|d<01><03><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<08>z}d d
|iz}tt j |<07><00><00><00><00>d x}}d S) u测试非数值列。r<E38082>r<>rrcrrrr r#r$N<> r r8r9r:r;r<r=r>r?r@rArBrds rR<00>test_non_numeric_columnz3TestCalculateStatisticsTool.test_non_numeric_column<6D>s<00><00>&<26>(<28>(<28><04> <0F>\<5C> <12>O<EFBFBD>O<EFBFBD>O<EFBFBD>
<EFBFBD> <0B> <0B><02><16><1C><1C>b<EFBFBD><16><1C>0<>0<><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> rTN)rfrgrhrirSr<>rjrTrRr<>r<><00>s8<00><00><00><00><00><00>%<25>%<25> %<25> %<25> %<25> !<21> !<21> !<21> !<21> !rTr<>c<00>$<00>eZdZdZd<02>Zd<03>Zd<04>ZdS)<06>TestPerformGroupbyToolu测试分组聚合工具。c<00><><00>t<00><00>}tjgd<01>gd<02>d<03><02><00>}|<01>|ddd<06><07><00>}d}||v}|s<>t jd |fd
||f<02><00>t j|<04><00>d tj<00><00>vst j |<03><00>rt j|<03><00>nd d <0C>z}d d|iz}tt j |<07><00><00><00><00>dx}}|d}t|<08><00>} d}
| |
k} | s<>t jd| fd| |
f<02><00>dtj<00><00>vst j t<00><00>rt jt<00><00>ndt j|<08><00>t j| <09><00>t j|
<EFBFBD><00>d<14>z} dd| iz} tt j | <0A><00><00><00><00>dx}x} x} }
td<17>|dD<00><00><00><00>}|d}d} || k}|slt jd|fd|| f<02><00>t j|<04><00>t j| <09><00>d<1A>z}dd|iz}tt j |<10><00><00><00><00>dx}x}} dS)r<00>rorprorpro)r<>rW<00><00>(<00>2<00>rnrVrnrVr<><00><03>group_byr<79>r<><00>groupsrrrr r#r$Nrar%r0r1r2r6r7c3<00>2K<00>|]}|ddk<00>|V<00><00>dS<00><03>grouproNrj<00><02>.0<EFBFBD>gs rR<00> <genexpr>zBTestPerformGroupbyTool.test_basic_functionality.<locals>.<genexpr><3E><00>0<00><00><00><00>H<>H<>Q<EFBFBD>a<EFBFBD><07>j<EFBFBD>C<EFBFBD>6G<36>6G<36>q<EFBFBD>6G<36>6G<36>6G<36>6G<36>H<>HrT<00>Zr'r(r*r+)r r8r9r:r;r<r=r>r?r@rArBr1<00>next)rCrDrErrFrGrHrIrMrJrNrOrPrQ<00>group_arKrLs rRrSz/TestPerformGroupbyTool.test_basic_functionality<74>s<00><00>!<21>#<23>#<23><04> <0F>\<5C>1<>1<>1<>)<29>)<29>)<29>
<EFBFBD>
<EFBFBD> <0B> <0B><02>
<16><1C><1C>b<EFBFBD>:<3A>G<EFBFBD>Y^<5E><1C>_<>_<><06>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29><16>H<>H<>&<26><18>"2<>H<>H<>H<>H<>H<><07>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%rTc<00><><00>t<00><00>}tjdgd<02>i<01><00>}|<01>|d<01><03><00>}|d}t |<04><00>}d}||k}|s<>t jd|fd||f<02><00>dtj<00><00>vst j t<00><00>rt j
t<00><00>ndt j
|<04><00>t j
|<05><00>t j
|<06><00>d <09>z}d
d |iz} tt j | <09><00><00><00><00>d x}x}x}}td <0A>|dD<00><00><00><00>}
|
d} d}| |k} | slt jd| fd| |f<02><00>t j
| <0B><00>t j
|<05><00>d<11>z} dd| iz}tt j |<0E><00><00><00><00>d x} x} }d S)r<>rnr<>)r<>r<>rar%r0r1r2r6r7Nc3<00>2K<00>|]}|ddk<00>|V<00><00>dSr<>rjr<>s rRr<>z@TestPerformGroupbyTool.test_count_aggregation.<locals>.<genexpr><3E>r<>rTrVr/r'r(r*r+)r r8r9r:r1r;r<r>r?r@r=rArBr<>)rCrDrErrMrJrNrOrPrQr<>rFrGrKrLs rRr<>z-TestPerformGroupbyTool.test_count_aggregation<6F>s)<00><00>!<21>#<23>#<23><04> <0F>\<5C> <16>1<>1<>1<>
<EFBFBD> <0B> <0B><02><16><1C><1C>b<EFBFBD>:<3A><1C>6<>6<><06>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29><16>H<>H<>&<26><18>"2<>H<>H<>H<>H<>H<><07>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$<24>$rTc<00><><00>t<00><00>}tjd<01>td<02><00>D<00><00>td<02><00>d<03><02><00>}|<01>|ddd<06><07><00>}|d}t |<04><00>}d }||k}|s<>t jd
|fd ||f<02><00>d tj <00><00>vst j
t
<00><00>rt j t
<00><00>nd t j |<04><00>t j |<05><00>t j |<06><00>d <0A>z}dd|iz} tt j | <09><00><00><00><00>dx}x}x}}|d}
d}|
|k} | slt jd| fd|
|f<02><00>t j |
<EFBFBD><00>t j |<05><00>d<14>z} dd| iz} tt j | <0A><00><00><00><00>dx}
x} }|d}
d }|
|k} | slt jd| fd|
|f<02><00>t j |
<EFBFBD><00>t j |<05><00>d<14>z} dd| iz} tt j | <0A><00><00><00><00>dx}
x} }dS)u*测试输出限制不超过100组。c<00><00>g|]}d|<01><00><02><02>S)<01>cat_rj)r<><00>is rR<00>
<listcomp>z<TestPerformGroupbyTool.test_output_limit.<locals>.<listcomp><3E>s<00><00>8<>8<>8<><01><1A><01><1A><1A>8<>8<>8rTr<>r<>rnrVr<>r<>r<>r<>r<>r<>r1r2r6r7N<> total_groupsr%r'r(r*r+<00>returned_groups)r r8r9r[r:r1r;r<r>r?r@r=rArB)rCrDrErrMrJrNrOrPrQrFrGrKrLs rRr<>z(TestPerformGroupbyTool.test_output_limit<69>s<><00><00>!<21>#<23>#<23><04> <0F>\<5C>8<>8<>U<EFBFBD>3<EFBFBD>Z<EFBFBD>Z<EFBFBD>8<>8<>8<><1A>3<EFBFBD>Z<EFBFBD>Z<EFBFBD>
<EFBFBD>
<EFBFBD> <0B> <0B><02>
<16><1C><1C>b<EFBFBD>:<3A>G<EFBFBD>Y^<5E><1C>_<>_<><06>+<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>+<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>,<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>/rTNr<4E>rjrTrRr<>r<><00>sG<00><00><00><00><00><00>%<25>%<25>&<26>&<26>&<26> %<25> %<25> %<25> 0<> 0<> 0<> 0<> 0rTr<>c<00><00>eZdZdZd<02>Zd<03>ZdS)<05>TestDetectOutliersToolu测试异常值检测工具。c<00><><00>t<00><00>}tjdgd<02>i<01><00>}|<01>|dd<03><04><00>}|d}d}||k}|slt jd|fd||f<02><00>t j|<04><00>t j|<05><00>d <09>z}d
d |iz}tt j|<08><00><00><00><00>d x}x}}d }|d}||v}|slt jd|fd||f<02><00>t j|<04><00>t j|<05><00>d <09>z}d
d |iz}tt j|<08><00><00><00><00>d x}x}}d S)u测试 IQR 方法。r<E38082><00>
r`rar/r<>rXr-r<>r<>r<>r<><00>iqr)r<00>method<6F> outlier_countrr<><00>z%(py1)s > %(py4)sr(r*r+Nr<4E><00>outlier_valuesrr<><00> r r8r9r:r;r<r=rArBr<>s rR<00>test_iqr_methodz&TestDetectOutliersTool.test_iqr_method<6F>s<><00><00>!<21>#<23>#<23><04> <0F>\<5C> <14>6<>6<>6<>
<EFBFBD> <0B> <0B><02><16><1C><1C>b<EFBFBD><18>%<25><1C>@<40>@<40><06>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.rTc<00><><00>t<00><00>}tjdgd<02>i<01><00>}|<01>|ddd<04><05><00>}|d}d}||k}|slt jd|fd ||f<02><00>t j|<04><00>t j|<05><00>d
<EFBFBD>z}d d |iz}tt j|<08><00><00><00><00>d x}x}}|d}d}||k}|slt jd|fd||f<02><00>t j|<04><00>t j|<05><00>d
<EFBFBD>z}d d |iz}tt j|<08><00><00><00><00>d x}x}}d S)u测试 Z-score 方法。r<E38082>r<><00>zscorera)rr<><00> thresholdr<64>rr<>r<>r(r*r+Nr<4E>r%r'r<>r<>s rR<00>test_zscore_methodz)TestDetectOutliersTool.test_zscore_methods<><00><00>!<21>#<23>#<23><04> <0F>\<5C> <14>6<>6<>6<>
<EFBFBD> <0B> <0B><02><16><1C><1C>b<EFBFBD><18>(<28>a<EFBFBD><1C>P<>P<><06>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<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>+rTN)rfrgrhrir<>r<>rjrTrRr<>r<><00>s8<00><00><00><00><00><00>(<28>(<28> /<2F> /<2F> /<2F>
,<2C>
,<2C>
,<2C>
,<2C>
,rTr<>c<00><00>eZdZdZd<02>Zd<03>ZdS)<05>TestCalculateTrendToolu测试趋势计算工具。c<00><><00>t<00><00>}tjddd<03><04><00>}tj|t d<02><00>d<05><02><00>}|<01>|dd<07><08><00>}|d }d
}||k}|slt jd |fd ||f<02><00>t j|<05><00>t j|<06><00>d <0A>z}dd|iz} tt j
| <09><00><00><00><00>dx}x}}|d}d}||k}|slt jd|fd||f<02><00>t j|<05><00>t j|<06><00>d <0A>z}dd|iz} tt j
| <09><00><00><00><00>dx}x}}|d}d}||k}|slt jd|fd||f<02><00>t j|<05><00>t j|<06><00>d <0A>z}dd|iz} tt j
| <09><00><00><00><00>dx}x}}dS)u测试上升趋势。r<E38082>r<>r<>r<>r<>r<>rV<00>r<>r<><00>trend<6E>
increasingr%r'r(r*r+N<>sloperr<>r<><00> r_squaredg<64><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?) rr8r<>r9r[r:r;r<r=rArB<00>
rCrDr<>rErrFrJrGrKrLs
rR<00>test_increasing_trendz,TestCalculateTrendTool.test_increasing_trendss<00><00>!<21>#<23>#<23><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>
<16><1C><1C>b<EFBFBD>f<EFBFBD>7<EFBFBD><1C>K<>K<><06>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(rTc
<00><><00>t<00><00>}tjddd<03><04><00>}tj|t t ddd<06><00><00><00>d<07><02><00>}|<01>|dd <09>
<EFBFBD><00>}|d }d }||k}|sltjd |fd||f<02><00>tj |<05><00>tj |<06><00>d<0F>z}dd|iz} ttj | <09><00><00><00><00>dx}x}}|d}d}||k}|sltjd|fd||f<02><00>tj |<05><00>tj |<06><00>d<0F>z}dd|iz} ttj | <09><00><00><00><00>dx}x}}dS)u测试下降趋势。r<E38082>r<>r<>r<>r<00><><EFBFBD><EFBFBD><EFBFBD>r<EFBFBD>r<>rVr<>r<><00>
decreasingr%r'r(r*r+Nr<4E>ry)z%(py1)s < %(py4)s) rr8r<>r9rZr[r:r;r<r=rArBr<>s
rR<00>test_decreasing_trendz,TestCalculateTrendTool.test_decreasing_trend&s<><00><00>!<21>#<23>#<23><04><12> <0A>l<EFBFBD>B<EFBFBD>S<EFBFBD>A<>A<>A<><05> <0F>\<5C><19><19>%<25><02>A<EFBFBD>r<EFBFBD>*<2A>*<2A>+<2B>+<2B>
<EFBFBD>
<EFBFBD> <0B> <0B><02>
<16><1C><1C>b<EFBFBD>f<EFBFBD>7<EFBFBD><1C>K<>K<><06>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"rTN)rfrgrhrirrrjrTrRr<>r<>s8<00><00><00><00><00><00>%<25>%<25> )<29> )<29> )<29> #<23> #<23> #<23> #<23> #rTr<>c<00><00>eZdZdZd<02>Zd<03>ZdS)<05>TestToolParameterValidationu测试工具参数验证。c<00>r<00>t<00><00>}tjdgd<02>i<01><00>}|<01>|<02><00>}g}d}||v}|}|sd}||u} | }|<07>sXt jd|fd||f<02><00>t j|<05><00>dtj<00><00>vst j |<03><00>rt j|<03><00>ndd<08>z}
d d
|
iz} |<04>
| <0B><00>|s<>t jd | fd ||f<02><00>dtj<00><00>vst j |<03><00>rt j|<03><00>ndt j|<08><00>d <0A>z} dd| iz} |<04>
| <0A><00>t j |d<10><00>iz}dd|iz}tt j |<0F><00><00><00><00>dx}x}x}x}x} }dS)u测试缺少必需参数。<E695B0>colr_rcNr<00>z%(py3)s in %(py5)sr<00>r"r$<00>%(py7)sr5rv)z%(py9)s is %(py12)s)r7r<>z%(py14)s<>py14r`zassert %(py17)s<>py17)rr8r9r:r;r<r=r>r?r@<00>append<6E>_format_booloprArB)rCrDrErrMrG<00> @py_assert4rF<00> @py_assert11<31> @py_assert10rIrPr<><00> @py_format15<31> @py_format16<31> @py_format18s rR<00>test_missing_required_parameterz;TestToolParameterValidation.test_missing_required_parameter8s2<00><00>(<28>*<2A>*<2A><04> <0F>\<5C>5<EFBFBD>)<29>)<29>)<29>,<2C> -<2D> -<2D><02><16><1C><1C>b<EFBFBD>!<21>!<21><06> 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<>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<>2rTc<00><><00>t<00><00>}tjddgddgd<05><02><00>}|<01>|ddd<08> <09><00>}d
}||v}|s<>t jd |fd ||f<02><00>t j|<04><00>d tj<00><00>vst j |<03><00>rt j|<03><00>nd d<0E>z}dd|iz}tt j |<07><00><00><00><00>dx}}dS)u测试无效的聚合方法。rorpr`rar<>rnrV<00>invalidr<64>rcrrrr r#r$N) r r8r9r:r;r<r=r>r?r@rArBrds rR<00>test_invalid_aggregation_methodz;TestToolParameterValidation.test_invalid_aggregation_methodCs!<00><00>!<21>#<23>#<23><04> <0F>\<5C><1C>c<EFBFBD>
<EFBFBD><17><11>V<EFBFBD>
<EFBFBD>
<EFBFBD> <0B> <0B><02>
<16><1C><1C>b<EFBFBD>:<3A>G<EFBFBD>Yb<59><1C>c<>c<><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> rTN)rfrgrhrirrrjrTrRrr5s8<00><00><00><00><00><00>%<25>%<25> 3<> 3<> 3<>
!<21>
!<21>
!<21>
!<21>
!rTrc<00>$<00>eZdZdZd<02>Zd<03>Zd<04>ZdS)<06>TestToolErrorHandlingu测试工具错误处理。c<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。rbrrcrrrr r#r$Nr<4E>rds rR<00>test_empty_dataframez*TestToolErrorHandling.test_empty_dataframeSs<><00><00>&<26>(<28>(<28><04> <0F>\<5C>^<5E>^<5E><02><15><1C><1C>b<EFBFBD><1D><1C>7<>7<><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> rTc<00>8<00>t<00><00>}tjdgd<02>i<01><00>}|<01>|d<01><03><00>}g}d}||v}|}|s|d}d} || k}
|
}|<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
<EFBFBD>z} d d | iz} |<04>
| <0C><00>|s`t jd |
fd|| f<02><00>t j|<08><00>t j| <09><00>d<0F>z} dd| iz}|<04>
|<0E><00>t j |d<12><00>iz}dd|iz}tt j |<10><00><00><00><00>dx}x}x}x}x}x}
} dS)u测试全部为空值的列。r<E38082>)NNNrrcr<>rrr rr
r r5r%)z%(py10)s == %(py13)s)r~<00>py13z%(py15)s<>py15r`zassert %(py18)s<>py18N)r r8r9r:r;r<r=r>r?r@rrrArB)rCrDrErrMrGrrFr<><00> @py_assert12rrIrP<00> @py_format14r<00> @py_format17<31> @py_format19s rR<00>test_all_null_valuesz*TestToolErrorHandling.test_all_null_values\s%<00><00>&<26>(<28>(<28><04> <0F>\<5C> <14>(<28>(<28>(<28>
<EFBFBD> <0B> <0B><02><16><1C><1C>b<EFBFBD><18><1C>2<>2<><06> 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<>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<>8rTc<00><><00>t<00><00>}tjdgd<02>i<01><00>}|<01>|d<01><03><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<08>z}d d
|iz}tt j |<07><00><00><00><00>d x}}d S) u测试无效的日期列。<E58897>not_dater<65>r<>rcrrrr r#r$N) r r8r9r:r;r<r=r>r?r@rArBrds rR<00>test_invalid_date_columnz.TestToolErrorHandling.test_invalid_date_columnhs<00><00> <20>"<22>"<22><04> <0F>\<5C> <16><0F><0F><0F>
<EFBFBD> <0B> <0B><02><16><1C><1C>b<EFBFBD>j<EFBFBD><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> rTN)rfrgrhrirr&r)rjrTrRrrPsG<00><00><00><00><00><00>%<25>%<25>!<21>!<21>!<21>
9<>
9<>
9<> !<21> !<21> !<21> !<21> !rTrc<00>*<00>eZdZdZd<02>Zd<03>Zd<04>Zd<05>ZdS)<07>TestToolRegistryu测试工具注册表。c<00><><00>t<00><00>}t<00><00>}|<01>|<02><00>|<01>|j<00><00>}|j}|j}||k}|s<>t jd|fd||f<02><00>dtj<00><00>vst j |<03><00>rt j
|<03><00>ndt j
|<04><00>dtj<00><00>vst j |<02><00>rt j
|<02><00>ndt j
|<05><00>d<05>z}dd|iz}tt j |<08><00><00><00><00>dx}x}}dS) u测试注册和检索工具。r%)zF%(py2)s
{%(py2)s = %(py0)s.name
} == %(py6)s
{%(py6)s = %(py4)s.name
}<7D> retrievedrD)r3r4r)r+<00>assert %(py8)s<>py8N) rr<00>register<65>get_tool<6F>namer;r<r>r?r@r=rArB) rC<00>registryrDr-rMrOrJrL<00> @py_format9s rR<00>test_register_and_retrievez+TestToolRegistry.test_register_and_retrievewsk<00><00><1F>><3E>><3E><08>(<28>*<2A>*<2A><04><10><19><19>$<24><1F><1F><1F><1C>%<25>%<25>d<EFBFBD>i<EFBFBD>0<>0<> <09>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*rTc<00>4<00>t<00><00>}t<00><00>}|<01>|<02><00>|<01>|j<00><00>t jt<00><00>5|<01>|j<00><00>ddd<01><00>dS#1swxYwYdS)u测试注销工具。N) rrr0<00>
unregisterr2<00>pytest<73>raises<65>KeyErrorr1)rCr3rDs rR<00>test_unregisterz TestToolRegistry.test_unregister<65>s<><00><00><1F>><3E>><3E><08>(<28>*<2A>*<2A><04><10><19><19>$<24><1F><1F><1F><10><1B><1B>D<EFBFBD>I<EFBFBD>&<26>&<26>&<26> <13>]<5D>8<EFBFBD> $<24> $<24> )<29> )<29> <14> <1D> <1D>d<EFBFBD>i<EFBFBD> (<28> (<28> (<28> )<29> )<29> )<29> )<29> )<29> )<29> )<29> )<29> )<29> )<29> )<29> )<29><><EFBFBD><EFBFBD> )<29> )<29> )<29> )<29> )<29> )s<00>%B <03> B<07>Bc<00><><00>t<00><00>}t<00><00>}t<00><00>}|<01>|<02><00>|<01>|<03><00>|<01><00><00>}t |<04><00>}d}||k}|s<>t jd|fd||f<02><00>dtj <00><00>vst j
t
<00><00>rt j t
<00><00>nddtj <00><00>vst j
|<04><00>rt j |<04><00>ndt j |<05><00>t j |<06><00>d<06>z}dd|iz} tt j | <09><00><00><00><00>d x}x}}|j}
|
|v} | s<>t jd
| fd |
|f<02><00>d tj <00><00>vst j
|<02><00>rt j |<02><00>nd t j |
<EFBFBD><00>dtj <00><00>vst j
|<04><00>rt j |<04><00>ndd <0A>z} dd| iz}tt j |<08><00><00><00><00>d x}
} |j}
|
|v} | s<>t jd
| fd |
|f<02><00>dtj <00><00>vst j
|<03><00>rt j |<03><00>ndt j |
<EFBFBD><00>dtj <00><00>vst j
|<04><00>rt j |<04><00>ndd <0A>z} dd| iz}tt j |<08><00><00><00><00>d x}
} d S)u测试列出所有工具。rar%<00>z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr1<00>tools<6C>r3r!r"r+r.r/Nr)z,%(py2)s
{%(py2)s = %(py0)s.name
} in %(py4)s<>tool1<6C>r3r4r)r*r+<00>tool2)rrrr0<00>
list_toolsr1r;r<r>r?r@r=rArBr2) rCr3r@rBr>rGrOrrLr4rMrJrKs rR<00>test_list_toolsz TestToolRegistry.test_list_tools<6C>s<><00><00><1F>><3E>><3E><08>)<29>+<2B>+<2B><05>"<22>$<24>$<24><05><10><19><19>%<25> <20> <20> <20><10><19><19>%<25> <20> <20> <20><18>#<23>#<23>%<25>%<25><05><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"rTc <00><><00>t<00><00>}|<01>t<00><00><00><00>|<01>t<00><00><00><00>|<01>t <00><00><00><00>t dddt dddd<07><08><00>t d d
dd<02><08><00>gd <0B> <0C><00>}|<01>|<02><00>}t|<03><00>}d }||k}|s<>tj
d|fd||f<02><00>dtj <00><00>vstj t<00><00>rtjt<00><00>nddtj <00><00>vstj |<03><00>rtj|<03><00>ndtj|<04><00>tj|<05><00>d<12>z}dd|iz}ttj|<08><00><00><00><00>dx}x}}dS)u测试获取适用的工具。<E585B7>test.csvr<76>rarV<00>numeric<69>r<><00>r2<00>dtype<70> missing_rater.r<>r<00>unknown)<05> file_path<74> row_count<6E> column_count<6E>columns<6E> inferred_typerr<><00>z/%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} > %(py6)sr1<00>
applicabler?r.r/N)rr0rr r rr<00>get_applicable_toolsr1r;r<r>r?r@r=rArB) rCr3<00>profilerSrGrOrrLr4s rR<00>test_get_applicable_toolsz*TestToolRegistry.test_get_applicable_tools<6C>s<><00><00><1F>><3E>><3E><08> <11><19><19>3<>5<>5<>6<>6<>6<><10><19><19>1<>3<>3<>4<>4<>4<><10><19><19>+<2B>-<2D>-<2D>.<2E>.<2E>.<2E><1E> <20><19><1A><1A><07>y<EFBFBD>s<EFBFBD>Y[<5B>\<5C>\<5C>\<5C><1A><06>j<EFBFBD>s<EFBFBD>Y\<5C>]<5D>]<5D>]<5D><0E>$<24> 
<EFBFBD> 
<EFBFBD> 
<EFBFBD><07><1E>2<>2<>7<EFBFBD>;<3B>;<3B>
<EFBFBD> #<23>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"rTN)rfrgrhrir5r;rDrVrjrTrRr+r+tsV<00><00><00><00><00><00>"<22>"<22>+<2B>+<2B>+<2B> )<29> )<29> )<29> #<23> #<23> #<23>#<23>#<23>#<23>#<23>#rTr+c<00>B<00>eZdZdZd<02>Zd<03>Zd<04>Zd<05>Zd<06>Zd<07>Z d<08>Z
d <09>Z d
S) <0B>TestToolManageru测试工具管理器。c <00>*<00>ddlm}t<00><00>}|<02>t <00><00><00><00>|<02>t <00><00><00><00>|<02>t <00><00><00><00>||<02><00>}tdddtdddd<04> <09><00>gd
id d <0C> <0A><00>}|<03> |<04><00>}d<0E>|D<00><00>}d}||v}|s<>tj d|fd||f<02><00>tj |<07><00>dtj<00><00>vstj|<06><00>rtj |<06><00>ndd<13>z} dd| iz}
t!tj|
<EFBFBD><00><00><00><00>dx}}d}||v}|s<>tj d|fd||f<02><00>tj |<07><00>dtj<00><00>vstj|<06><00>rtj |<06><00>ndd<13>z} dd| iz}
t!tj|
<EFBFBD><00><00><00><00>dx}}dS)u3测试为包含时间字段的数据选择工具。r<00><01> ToolManagerrFr<>r`r<>rrHrIrL<00>Y@<40> Test data<74>rMrNrOrPrQ<00>
key_fields<EFBFBD> quality_score<72>summaryc<00><00>g|] }|j<00><02>
Srj<00>r2<00>r<>rDs rRr<>zGTestToolManager.test_select_tools_for_datetime_data.<locals>.<listcomp><3E><00><00><00>2<>2<>2<>D<EFBFBD>d<EFBFBD>i<EFBFBD>2<>2<>2rT<00>get_time_seriesrr<00>
tool_namesr r#r$N<>calculate_trend)<12>src.tools.tool_managerr[rr0r rrrr<00> select_toolsr;r<r=r>r?r@rArB<00> rCr[r3<00>managerrUr>rgrFrGrHrIs rR<00>#test_select_tools_for_datetime_dataz3TestToolManager.test_select_tools_for_datetime_data<74>s<><00><00>6<>6<>6<>6<>6<>6<> <20>><3E>><3E><08><10><19><19>+<2B>-<2D>-<2D>.<2E>.<2E>.<2E><10><19><19>,<2C>.<2E>.<2E>/<2F>/<2F>/<2F><10><19><19>3<>5<>5<>6<>6<>6<><1D>+<2B>h<EFBFBD>'<27>'<27><07><1E> <20><19><1A><1A><06>j<EFBFBD>s<EFBFBD>Y\<5C>]<5D>]<5D>]<5D><0E>$<24><19><1F><1F> 
<EFBFBD> 
<EFBFBD> 
<EFBFBD><07><18>$<24>$<24>W<EFBFBD>-<2D>-<2D><05>2<>2<>E<EFBFBD>2<>2<>2<>
<EFBFBD> /<2F>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.rTc <00><><00>ddlm}t<00><00>}|<02>t <00><00><00><00>|<02>t <00><00><00><00>|<02>t <00><00><00><00>||<02><00>}tdddtdddd <09>
<EFBFBD><00>td ddd <09>
<EFBFBD><00>gd id d<0E><0F><00>}|<03> |<04><00>}d<10>|D<00><00>}d}||v}|s<>tj d|fd||f<02><00>tj |<07><00>dtj<00><00>vstj|<06><00>rtj |<06><00>ndd<15>z} dd| iz}
t!tj|
<EFBFBD><00><00><00><00>dx}}d}||v}|s<>tj d|fd||f<02><00>tj |<07><00>dtj<00><00>vstj|<06><00>rtj |<06><00>ndd<15>z} dd| iz}
t!tj|
<EFBFBD><00><00><00><00>dx}}d}||v}|s<>tj d|fd||f<02><00>tj |<07><00>dtj<00><00>vstj|<06><00>rtj |<06><00>ndd<15>z} dd| iz}
t!tj|
<EFBFBD><00><00><00><00>dx}}dS)u3测试为包含数值字段的数据选择工具。rrZrFr<>ra<00>value1rGrHr<>rI<00>value2rLr\r]r^c<00><00>g|] }|j<00><02>
Srjrcrds rRr<>zFTestToolManager.test_select_tools_for_numeric_data.<locals>.<listcomp><3E>rerT<00>calculate_statisticsrrrgr r#r$N<>detect_outliers<72>get_correlation)rir[rr0r r r
rrrjr;r<r=r>r?r@rArBrks rR<00>"test_select_tools_for_numeric_dataz2TestToolManager.test_select_tools_for_numeric_data<74>sd<00><00>6<>6<>6<>6<>6<>6<><1F>><3E>><3E><08><10><19><19>1<>3<>3<>4<>4<>4<><10><19><19>,<2C>.<2E>.<2E>/<2F>/<2F>/<2F><10><19><19>,<2C>.<2E>.<2E>/<2F>/<2F>/<2F><1D>+<2B>h<EFBFBD>'<27>'<27><07><1E> <20><19><1A><1A><08> <09><03>Z\<5C>]<5D>]<5D>]<5D><1A><08> <09><03>Z\<5C>]<5D>]<5D>]<5D><0E>$<24><19><1F><1F> 
<EFBFBD> 
<EFBFBD> 
<EFBFBD><07><18>$<24>$<24>W<EFBFBD>-<2D>-<2D><05>2<>2<>E<EFBFBD>2<>2<>2<>
<EFBFBD> 4<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.rTc <00>p<00>ddlm}t<00><00>}|<02>t <00><00><00><00>|<02>t <00><00><00><00>|<02>t <00><00><00><00>||<02><00>}tdddtdddd <09>
<EFBFBD><00>gd id d <0A><0E><00>}|<03> |<04><00>}d<0F>|D<00><00>}d}||v}|s<>tj d|fd||f<02><00>tj |<07><00>dtj<00><00>vstj|<06><00>rtj |<06><00>ndd<14>z} dd| iz}
t!tj|
<EFBFBD><00><00><00><00>dx}}d}||v}|s<>tj d|fd||f<02><00>tj |<07><00>dtj<00><00>vstj|<06><00>rtj |<06><00>ndd<14>z} dd| iz}
t!tj|
<EFBFBD><00><00><00><00>dx}}d}||v}|s<>tj d|fd||f<02><00>tj |<07><00>dtj<00><00>vstj|<06><00>rtj |<06><00>ndd<14>z} dd| iz}
t!tj|
<EFBFBD><00><00><00><00>dx}}dS)u3测试为包含分类字段的数据选择工具。rrZrFr<>r`rn<00> categoricalrHrXrIrLr\r]r^c<00><00>g|] }|j<00><02>
Srjrcrds rRr<>zJTestToolManager.test_select_tools_for_categorical_data.<locals>.<listcomp>rerT<00>get_column_distributionrrrgr r#r$N<>get_value_counts<74>perform_groupby)rir[rr0rrr rrrjr;r<r=r>r?r@rArBrks rR<00>&test_select_tools_for_categorical_dataz6TestToolManager.test_select_tools_for_categorical_data<74>sO<00><00>6<>6<>6<>6<>6<>6<><1F>><3E>><3E><08><10><19><19>3<>5<>5<>6<>6<>6<><10><19><19>,<2C>.<2E>.<2E>/<2F>/<2F>/<2F><10><19><19>,<2C>.<2E>.<2E>/<2F>/<2F>/<2F><1D>+<2B>h<EFBFBD>'<27>'<27><07><1E> <20><19><1A><1A>
<EFBFBD>-<2D>c<EFBFBD>`a<>b<>b<>b<><0E>$<24><19><1F><1F> 
<EFBFBD> 
<EFBFBD> 
<EFBFBD><07><18>$<24>$<24>W<EFBFBD>-<2D>-<2D><05>2<>2<>E<EFBFBD>2<>2<>2<>
<EFBFBD> 7<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>/<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>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.rTc <00>`<00>ddlm}t<00><00>}|<02>t <00><00><00><00>||<02><00>}t dddt dddd <09>
<EFBFBD><00>gd id d <0A><0E><00>}|<03>|<04><00>}d<0F>|D<00><00>}d}||v}|s<>tj d|fd||f<02><00>tj
|<07><00>dtj <00><00>vstj |<06><00>rtj
|<06><00>ndd<14>z} dd| iz}
ttj|
<EFBFBD><00><00><00><00>dx}}dS)u0测试不为非地理数据选择地理工具。rrZrFr<>r`rVrGrHr<>rIrLr\r]r^c<00><00>g|] }|j<00><02>
Srjrcrds rRr<>zFTestToolManager.test_no_geo_tools_for_non_geo_data.<locals>.<listcomp>5rerT<00>create_map_visualization)<01>not in)z%(py1)s not in %(py3)srgr r#r$N)rir[rr0rrrrjr;r<r=r>r?r@rArBrks rR<00>"test_no_geo_tools_for_non_geo_dataz2TestToolManager.test_no_geo_tools_for_non_geo_datas<><00><00>6<>6<>6<>6<>6<>6<><1F>><3E>><3E><08><10><19><19>3<>5<>5<>6<>6<>6<><1D>+<2B>h<EFBFBD>'<27>'<27><07><1E> <20><19><1A><1A><07>y<EFBFBD>s<EFBFBD>Y[<5B>\<5C>\<5C>\<5C><0E>$<24><19><1F><1F> 
<EFBFBD> 
<EFBFBD> 
<EFBFBD><07><18>$<24>$<24>W<EFBFBD>-<2D>-<2D><05>2<>2<>E<EFBFBD>2<>2<>2<>
<EFBFBD> <<3C>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;rTc <00>|<00><0E>ddlm}t<00><00>}||<02><00>}tdddt dddd<04> <09><00>gd
id d <0C> <0A><00>}|<03>|<04><00>}|<03><00><00><00>t<00><0E><00>}d}||k}|s<>tj d|fd||f<02><00>dtj <00><00>vstj t<00><00>rtj t<00><00>nddtj <00><00>vstj <00><0E><00>rtj <00><0E><00>ndtj |<06><00>tj |<07><00>d<12>z} dd| iz}
ttj|
<EFBFBD><00><00><00><00>dx}x}}<07>fd<16>dD<00><00>} t!| <0B><00>} | s<>ddtj <00><00>vstj t <00><00>rtj t <00><00>ndtj | <0B><00>tj | <0C><00>d<1A>z} ttj| <0A><00><00><00><00>dx} } dS)u测试识别缺失的工具。rrZrFr<>r`r<>rrHrIrLr\r]r^r<>rRr1<00>missingr?r.r/Nc3<00> <00>K<00>|]}|<01>vV<00><00> dS)Nrj)r<>rDr<>s <20>rRr<>z>TestToolManager.test_identify_missing_tools.<locals>.<genexpr>Xs+<00><><00><00><00>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>VrT)rfrh<00>,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}<7D>anyrA)rir[rrrrj<00>get_missing_toolsr1r;r<r>r?r@r=rArBr<>)rCr[<00>empty_registryrlrUr>rGrOrrLr4rMrJrKr<>s @rR<00>test_identify_missing_toolsz+TestToolManager.test_identify_missing_tools:s<><00><><00>6<>6<>6<>6<>6<>6<>&<26><1E><1E><0E><1D>+<2B>n<EFBFBD>-<2D>-<2D><07><1E> <20><19><1A><1A><06>j<EFBFBD>s<EFBFBD>Y\<5C>]<5D>]<5D>]<5D><0E>$<24><19><1F><1F> 
<EFBFBD> 
<EFBFBD> 
<EFBFBD><07><18>$<24>$<24>W<EFBFBD>-<2D>-<2D><05><1A>+<2B>+<2B>-<2D>-<2D><07> <20><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>V<>VrTc <00><00>ddlm}t<00><00>}||<02><00>}tdddt dddd<04> <09><00>gd
id d <0C> <0A><00>}|<03>|<04><00>|j}|<05><00>}t|<06><00>}d}||k} | <09>stj d| fd||f<02><00>dtj <00><00>vstj t<00><00>rtj t<00><00>nddtj <00><00>vstj |<03><00>rtj |<03><00>ndtj |<05><00>tj |<06><00>tj |<07><00>tj |<08><00>d<12>z}
dd|
iz} ttj| <0B><00><00><00><00>dx}x}x}x} }|<03><00><00>|j}|<05><00>}t|<06><00>}d}||k} | <09>stj d| fd||f<02><00>dtj <00><00>vstj t<00><00>rtj t<00><00>nddtj <00><00>vstj |<03><00>rtj |<03><00>ndtj |<05><00>tj |<06><00>tj |<07><00>tj |<08><00>d<12>z}
dd|
iz} ttj| <0B><00><00><00><00>dx}x}x}x} }dS)u!测试清空缺失工具列表。rrZrFr<>r`r<>rrHrIrLr\r]r^r<>)zn%(py7)s
{%(py7)s = %(py0)s(%(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.get_missing_tools
}()
})
} > %(py10)sr1rl)r3r!r"r$r5r~rr<>Nr%)zo%(py7)s
{%(py7)s = %(py0)s(%(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.get_missing_tools
}()
})
} == %(py10)s)rir[rrrrjr<>r1r;r<r>r?r@r=rArB<00>clear_missing_tools) rCr[r<>rlrUrGrrNr<>r<>r<>r<>s rR<00>test_clear_missing_toolsz(TestToolManager.test_clear_missing_toolsZsy<00><00>6<>6<>6<>6<>6<>6<>%<25><1E><1E><0E><1D>+<2B>n<EFBFBD>-<2D>-<2D><07><1E> <20><19><1A><1A><06>j<EFBFBD>s<EFBFBD>Y\<5C>]<5D>]<5D>]<5D><0E>$<24><19><1F><1F> 
<EFBFBD> 
<EFBFBD> 
<EFBFBD><07> <10><1C><1C>W<EFBFBD>%<25>%<25>%<25>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<>3<> <10>#<23>#<23>%<25>%<25>%<25>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4<>4rTc<00>h<00>ddlm}t<00><00>}t<00><00>}t <00><00>}|<02>|<03><00>|<02>|<04><00>||<02><00>}||g}|<05>|<06><00>}t|<07><00>}d} || k}
|
s<EFBFBD>tj d|
fd|| f<02><00>dtj <00><00>vstj t<00><00>rtj t<00><00>nddtj <00><00>vstj |<07><00>rtj |<07><00>ndtj |<08><00>tj | <09><00>d<08>z} d d
| iz} ttj| <0C><00><00><00><00>d x}x}
} d <0C>|D<00><00>} t!| <0A><00>}|s<>d dtj <00><00>vstj t <00><00>rtj t <00><00>ndtj | <0A><00>tj |<0E><00>d<0F>z}ttj|<0F><00><00><00><00>d x} }d<10>|D<00><00>} t!| <0A><00>}|s<>d dtj <00><00>vstj t <00><00>rtj t <00><00>ndtj | <0A><00>tj |<0E><00>d<0F>z}ttj|<0F><00><00><00><00>d x} }d<11>|D<00><00>} t!| <0A><00>}|s<>d dtj <00><00>vstj t <00><00>rtj t <00><00>ndtj | <0A><00>tj |<0E><00>d<0F>z}ttj|<0F><00><00><00><00>d x} }d S)u测试获取工具描述。rrZrar%r=r1<00> descriptionsr?r.r/Nc3<00>K<00>|]}d|vV<00><00> dS)r2Nrj<00>r<><00>descs rRr<>z=TestToolManager.test_get_tool_descriptions.<locals>.<genexpr><3E>s*<00><00><00><00>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;rTr<><00>allrAc3<00>K<00>|]}d|vV<00><00> dS)<02> descriptionNrjr<>s rRr<>z=TestToolManager.test_get_tool_descriptions.<locals>.<genexpr><3E>s*<00><00><00><00>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>BrTc3<00>K<00>|]}d|vV<00><00> dS)<02>
parametersNrjr<>s rRr<>z=TestToolManager.test_get_tool_descriptions.<locals>.<genexpr><3E>s*<00><00><00><00>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>ArT)rir[rrr r0<00>get_tool_descriptionsr1r;r<r>r?r@r=rArBr<>)rCr[r3r@rBrlr>r<>rGrOrrLr4rMrJrKs rR<00>test_get_tool_descriptionsz*TestToolManager.test_get_tool_descriptionsvs<><00><00>6<>6<>6<>6<>6<>6<><1F>><3E>><3E><08>)<29>+<2B>+<2B><05>'<27>)<29>)<29><05><10><19><19>%<25> <20> <20> <20><10><19><19>%<25> <20> <20> <20><1D>+<2B>h<EFBFBD>'<27>'<27><07><16><05><0E><05><1E>4<>4<>U<EFBFBD>;<3B>;<3B> <0C>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>B<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>A<>ArTc <00>d<00>ddlm}t<00><00>}t<00><00>}|<02>|<03><00>||<02><00>}t dddt dddd <09>
<EFBFBD><00>t d d dd <0A>
<EFBFBD><00>gdidd<10><11><00>}|<04>|<05><00>}d<12>|D<00><00>}t|<07><00>}t|<07><00>} t| <09><00>}
||
k} | <0B>s<>tj d| fd||
f<02><00>dtj <00><00>vstjt<00><00>rtjt<00><00>nddtj <00><00>vstj|<07><00>rtj|<07><00>ndtj|<08><00>dtj <00><00>vstjt<00><00>rtjt<00><00>nddtj <00><00>vstjt<00><00>rtjt<00><00>nddtj <00><00>vstj|<07><00>rtj|<07><00>ndtj| <09><00>tj|
<EFBFBD><00>d<18>z} dd| iz} t!tj| <0A><00><00><00><00>dx}x} x} }
dS)u测试工具去重。rrZrFr<>rarnrwrHrXrIrVrGr<>rLr\r]r^c<00><00>g|] }|j<00><02>
Srjrcrds rRr<>z;TestToolManager.test_tool_deduplication.<locals>.<listcomp><3E>rerTr%)zn%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py11)s
{%(py11)s = %(py5)s(%(py9)s
{%(py9)s = %(py6)s(%(py7)s)
})
}r1rg<00>set)r3r!r"r$r+r5r7<00>py11zassert %(py13)srN)rir[rrr0rrrjr1r<>r;r<r>r?r@r=rArB)rCr[r3rDrlrUr>rgrGr<>rr<00> @py_format12r#s rR<00>test_tool_deduplicationz'TestToolManager.test_tool_deduplication<6F>s<><00><00>6<>6<>6<>6<>6<>6<><1F>><3E>><3E><08>(<28>*<2A>*<2A><04><10><19><19>$<24><1F><1F><1F><1D>+<2B>h<EFBFBD>'<27>'<27><07><1E> <20><19><1A><1A>
<EFBFBD>-<2D>c<EFBFBD>`a<>b<>b<>b<><1A><07>y<EFBFBD>s<EFBFBD>Y[<5B>\<5C>\<5C>\<5C><0E>$<24><19><1F><1F> 
<EFBFBD> 
<EFBFBD> 
<EFBFBD><07><18>$<24>$<24>W<EFBFBD>-<2D>-<2D><05>2<>2<>E<EFBFBD>2<>2<>2<>
<EFBFBD> 7<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6rTN) rfrgrhrirmrur|r<>r<>r<>r<>r<>rjrTrRrXrX<00>s<><00><00><00><00><00><00>"<22>"<22>/<2F>/<2F>/<2F>B /<2F> /<2F> /<2F>D/<2F>/<2F>/<2F>B<<3C><<3C><<3C>:W<01>W<01>W<01>@5<>5<>5<>8B<01>B<01>B<01>(7<>7<>7<>7<>7rTrX)*ri<00>builtinsr><00>_pytest.assertion.rewrite<74> assertion<6F>rewriter;r8<00>pandasr8<00>numpy<70>nprr<00>src.tools.baserr<00>src.tools.query_toolsrrr r
<00>src.tools.stats_toolsr r r r<00>
src.modelsrrrrlr<>r<>r<>r<>r<>r<>rrr+rXrjrTrR<00><module>r<>s<00><01>$<24>$<24><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>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>5<>5<>5<>5<>5<>5<>5<>5<><02><02><02><02><02><02><02><02><02><02><02><02> <02><02><02><02><02><02><02><02><02><02><02><02> /<2F>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>$!<21>$!<21>$!<21>$!<21>$!<21>$!<21>$!<21>$!<21>N=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>>(0<>(0<>(0<>(0<>(0<>(0<>(0<>(0<>V!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>B!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21><,0<>,0<>,0<>,0<>,0<>,0<>,0<>,0<>^,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>:#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>B!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>6!!<21>!!<21>!!<21>!!<21>!!<21>!!<21>!!<21>!!<21>H>#<23>>#<23>>#<23>>#<23>>#<23>>#<23>>#<23>>#<23>Dr7<>r7<>r7<>r7<>r7<>r7<>r7<>r7<>r7<>r7rT