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

100 lines
26 KiB
Plaintext
Raw Normal View History

<EFBFBD>
<00><><EFBFBD>iQ<00><00><00>dZddlZddlmcmZddlZddlZ ddl
m Z m Z m Z mZmZddlmZddlmZddlmZddlmZejd<08><00><00>Zejd <09><00><00>Zd
<EFBFBD>Zd <0B>Zd <0C>Zd <0A>Zd<0E>Zd<0F>Z d<10>Z!d<11>Z"d<12>Z#d<13>Z$d<14>Z%d<15>Z&dS)z%Unit tests for task execution engine.<2E>N)<05> execute_task<73> call_tool<6F>extract_insights<74>_fallback_task_execution<6F>
_find_tool)<01> AnalysisTask)<01>DataAccessLayer)<01>CalculateStatisticsTool)<01>GetValueCountsToolc<00>><00>tjgd<01>gd<02>gd<03>d<04><03><00>S)zCreate sample data for testing.)
<EFBFBD><00><00><00><00><00><00><00><00> <00>
)
<EFBFBD>A<>Brrrrrrrr)
r<00><00><00>(<00>2<00><<00>F<00>P<00>Z<00>d)<03>value<75>category<72>score)<02>pd<70> DataFrame<6D><00><00>@D:\code\iov_data_analysis_agent_old\tests\test_task_execution.py<70> sample_datar*s=<00><00> <0E><<3C>0<>0<>0<>F<>F<>F<>:<3A>:<3A>:<3A><06><06> <07> <07>r(c<00>:<00>t<00><00>t<00><00>gS)z Create sample tools for testing.)r
r r'r(r)<00> sample_toolsr,s <00><00> <20>!<21>!<21><1A><1C><1C> <06>r(c<00>r<00>tdddddg<01><06><00>}t|<00><00>}t|||<03><00>}|j}d}||k}|s<>t jd|fd||f<02><00>d t j<00><00>vst j|<04><00>rt j |<04><00>nd t j |<05><00>t j |<06><00>d
<EFBFBD>z}d d |iz} tt j | <09><00><00><00><00>d x}x}}|j }d}||k}|s<>t jd|fd||f<02><00>d t j<00><00>vst j|<04><00>rt j |<04><00>nd t j |<05><00>t j |<06><00>d
<EFBFBD>z}d d |iz} tt j | <09><00><00><00><00>d x}x}}|j }
t|
t<00><00>} | <0B>sddt j<00><00>vst jt<00><00>rt j t<00><00>ndd t j<00><00>vst j|<04><00>rt j |<04><00>nd t j |
<EFBFBD><00>dt j<00><00>vst jt<00><00>rt j t<00><00>ndt j | <0B><00>d<12>z} tt j | <0C><00><00><00><00>d x}
} |j}d}||k}|s<>t jd|fd||f<02><00>d t j<00><00>vst j|<04><00>rt j |<04><00>nd t j |<05><00>t j |<06><00>d
<EFBFBD>z}d d |iz} tt j | <09><00><00><00><00>d x}x}}d S)z#Test successful fallback execution.<2E>task_1zCalculate StatisticszCalculate basic statisticsr<00>calculate_statistics<63><05>id<69>name<6D> description<6F>priority<74>required_tools<6C><01>==)z/%(py2)s
{%(py2)s = %(py0)s.task_id
} == %(py5)s<>result<6C><03>py0<79>py2<79>py5<79>assert %(py7)s<>py7N)z1%(py2)s
{%(py2)s = %(py0)s.task_name
} == %(py5)szRassert %(py6)s
{%(py6)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.success
}, %(py4)s)
}<7D>
isinstance<EFBFBD>bool)r:<00>py1<79>py3<79>py4<79>py6r<00><01>>=<3D>z6%(py2)s
{%(py2)s = %(py0)s.execution_time
} >= %(py5)s)rr r<00>task_id<69>
@pytest_ar<61>_call_reprcompare<72> @py_builtins<6E>locals<6C>_should_repr_global_name<6D> _saferepr<70>AssertionError<6F>_format_explanation<6F> task_name<6D>successr?r@<00>execution_time) r*r,<00>task<73> data_accessr8<00> @py_assert1<74> @py_assert4<74> @py_assert3<74> @py_format6<74> @py_format8<74> @py_assert2<74> @py_assert5<74> @py_format7s r)<00>test_fallback_execution_successr^&s,<00><00> <17> <13> #<23>0<><12>.<2E>/<2F>  <06> <06> <06>D<EFBFBD>"<22>+<2B>.<2E>.<2E>K<EFBFBD> %<25>d<EFBFBD>L<EFBFBD>+<2B> F<> F<>F<EFBFBD>%<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>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>+<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>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>%<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>%r(c<00><><00>tdddddg<01><06><00>}t|<00><00>}t|g|<02><00>}|j}| }|sxddt j<00><00>vst j|<03><00>rt j|<03><00>ndt j|<04><00>d <09>z}tt j
|<06><00><00><00><00>d
x}}|j }d
}||u}|s<>t j d |fd ||f<02><00>dt j<00><00>vst j|<03><00>rt j|<03><00>ndt j|<04><00>t j|<07><00>d <0A>z}dd|iz} tt j
| <09><00><00><00><00>d
x}x}}d
S)z&Test fallback execution with no tools.r.<00> Test Task<73>Testr<00>nonexistent_toolr0z/assert not %(py2)s
{%(py2)s = %(py0)s.success
}r8)r:r;N<><01>is not)z1%(py2)s
{%(py2)s = %(py0)s.error
} is not %(py5)sr9r=r>) rr rrRrKrLrIrMrNrOrP<00>errorrJ)
r*rTrUr8rVrX<00> @py_format4rWrYrZs
r)<00> test_fallback_execution_no_toolsrg9s<><00><00> <17> <13> <18><1A><12>*<2A>+<2B>  <06> <06> <06>D<EFBFBD>"<22>+<2B>.<2E>.<2E>K<EFBFBD> %<25>d<EFBFBD>B<EFBFBD> <0B> <<3C> <<3C>F<EFBFBD><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#r(c<00><><00>|d}t|<00><00>}t||d<02><03><00>}t|t<00><00>}|<05>sddt j<00><00>vst jt<00><00>rt jt<00><00>nddt j<00><00>vst j|<04><00>rt j|<04><00>nddt j<00><00>vst jt<00><00>rt jt<00><00>ndt j|<05><00>d<08>z}tt j
|<06><00><00><00><00>d }d
}||v}|s<>t j d |fd ||f<02><00>t j|<07><00>dt j<00><00>vst j|<04><00>rt j|<04><00>ndd <0A>z} dd| iz}
tt j
|
<EFBFBD><00><00><00><00>d x}}d S)zTest successful tool calling.rr"<00><01>column<6D>5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}r?r8<00>dict<63>r:rAr;rCNrR)<01>in)z%(py1)s in %(py3)s)rArB<00>assert %(py5)sr<) r rr?rlrKrLrIrMrNrOrPrJ) r*r,<00>toolrUr8rX<00> @py_format5<74> @py_assert0r[rfrYs r)<00>test_call_tool_successrsJs<00><00> <17><01>?<3F>D<EFBFBD>!<21>+<2B>.<2E>.<2E>K<EFBFBD> <16>t<EFBFBD>[<5B><17> 9<> 9<> 9<>F<EFBFBD>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23><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>r(c<00><><00>|d}t|<00><00>}t||d<02><03><00>}t|t<00><00>}|<05>sddt j<00><00>vst jt<00><00>rt jt<00><00>nddt j<00><00>vst j|<04><00>rt j|<04><00>nddt j<00><00>vst jt<00><00>rt jt<00><00>ndt j|<05><00>d<08>z}tt j
|<06><00><00><00><00>d }d S)
z*Test tool calling with invalid parameters.r<00>nonexistent_columnrirkr?r8rlrmN) r rr?rlrKrLrIrMrNrOrP)r*r,rprUr8rXrqs r)<00>"test_call_tool_with_invalid_paramsrvUs><00><00> <17><01>?<3F>D<EFBFBD>!<21>+<2B>.<2E>.<2E>K<EFBFBD> <16>t<EFBFBD>[<5B>1E<31> F<> F<> F<>F<EFBFBD>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#r(c<00><><00>ddd<03>ddid<06>ddd d
d <0B>id <0C>g}t|d <0A><0E><00>}t|t<00><00>}|<02>sddtj<00><00>vst jt<00><00>rt jt<00><00>nddtj<00><00>vst j|<01><00>rt j|<01><00>nddtj<00><00>vst jt<00><00>rt jt<00><00>ndt j|<02><00>d<13>z}tt j |<03><00><00><00><00>d }t|<01><00>}d}||k}|s<>t j d|fd||f<02><00>dtj<00><00>vst jt<00><00>rt jt<00><00>nddtj<00><00>vst j|<01><00>rt j|<01><00>ndt j|<04><00>t j|<05><00>d<18>z}dd|iz}tt j |<08><00><00><00><00>d x}x}}d S)zTest simple insight extraction.<2E>thoughtzStarting analysis)<02>type<70>content<6E>actionr/)ryrp<00>params<6D> observation<6F>datag@g<>(\<5C><><EFBFBD>@)<02>mean<61>std)ryr8N<><01>clientrkr?<00>insights<74>listrmr)<01>>)z/%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} > %(py6)s<>len)r:rArBrDzassert %(py8)s<>py8) rr?r<>rKrLrIrMrNrOrPr<>rJ) <09>historyr<79>rXrqr[r\rWr]<00> @py_format9s r)<00>test_extract_insights_simpler<65>`s<><00><00><1B>':<3A>;<3B>;<3B><19>#9<>R<EFBFBD>H<>H<><1E>6<EFBFBD>C<EFBFBD><04>3M<33>3M<33>*N<>O<>O<><06>G<EFBFBD>  <20><07><04>5<>5<>5<>H<EFBFBD>%<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><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C>r(c<00>l<00>tgd<01><02><00>}t|t<00><00>}|<01>sddtj<00><00>vst jt<00><00>rt jt<00><00>nddtj<00><00>vst j|<00><00>rt j|<00><00>nddtj<00><00>vst jt<00><00>rt jt<00><00>ndt j|<01><00>d<07>z}tt j |<02><00><00><00><00>d}dS)z+Test insight extraction with empty history.Nr<4E>rkr?r<>r<>rm)
rr?r<>rKrLrIrMrNrOrP)r<>rXrqs r)<00>#test_extract_insights_empty_historyr<79>ns%<00><00><1F><02>4<EFBFBD>0<>0<>0<>H<EFBFBD>%<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>%r(c<00><><00>t|d<01><00>}d}||u}|s<>tjd|fd||f<02><00>dtj<00><00>vstj|<01><00>rtj|<01><00>ndtj|<02><00>d<06>z}dd|iz}ttj|<05><00><00><00><00>dx}}|j }d}||k}|s<>tjd |fd
||f<02><00>dtj<00><00>vstj|<01><00>rtj|<01><00>ndtj|<03><00>tj|<06><00>d <0B>z}d d |iz}ttj|<08><00><00><00><00>dx}x}}dS)zTest finding an existing tool.r/Nrc<00>z%(py0)s is not %(py3)srp<00>r:rBror<r6)z,%(py2)s
{%(py2)s = %(py0)s.name
} == %(py5)sr9r=r>)
rrIrJrKrLrMrNrOrPr2) r,rpr[rVrfrYrWrXrZs r)<00>test_find_tool_existsr<73>us<><00><00> <15>l<EFBFBD>$:<3A> ;<3B> ;<3B>D<EFBFBD><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.r(c<00>l<00>t|d<01><00>}d}||u}|s<>tjd|fd||f<02><00>dtj<00><00>vstj|<01><00>rtj|<01><00>ndtj|<02><00>d<06>z}dd|iz}ttj|<05><00><00><00><00>dx}}dS) z!Test finding a non-existent tool.rbN)<01>is)z%(py0)s is %(py3)srpr<>ror<) rrIrJrKrLrMrNrOrP)r,rpr[rVrfrYs r)<00>test_find_tool_not_existsr<73>}s<><00><00> <15>l<EFBFBD>$6<> 7<> 7<>D<EFBFBD><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17><17>r(c<00> <00>tdddddg<01><06><00>}t|<00><00>}t|||<03><00>}d}t||<05><00>}|s<>dd t j<00><00>vst jt<00><00>rt jt<00><00>nd d
t j<00><00>vst j|<04><00>rt j|<04><00>nd
t j|<05><00>t j|<06><00>d <0B>z}tt j
|<07><00><00><00><00>d x}}d }t||<05><00>}|s<>dd t j<00><00>vst jt<00><00>rt jt<00><00>nd d
t j<00><00>vst j|<04><00>rt j|<04><00>nd
t j|<05><00>t j|<06><00>d <0B>z}tt j
|<07><00><00><00><00>d x}}d}t||<05><00>}|s<>dd t j<00><00>vst jt<00><00>rt jt<00><00>nd d
t j<00><00>vst j|<04><00>rt j|<04><00>nd
t j|<05><00>t j|<06><00>d <0B>z}tt j
|<07><00><00><00><00>d x}}d}t||<05><00>}|s<>dd t j<00><00>vst jt<00><00>rt jt<00><00>nd d
t j<00><00>vst j|<04><00>rt j|<04><00>nd
t j|<05><00>t j|<06><00>d <0B>z}tt j
|<07><00><00><00><00>d x}}d}t||<05><00>}|s<>dd t j<00><00>vst jt<00><00>rt jt<00><00>nd d
t j<00><00>vst j|<04><00>rt j|<04><00>nd
t j|<05><00>t j|<06><00>d <0B>z}tt j
|<07><00><00><00><00>d x}}d}t||<05><00>}|s<>dd t j<00><00>vst jt<00><00>rt jt<00><00>nd d
t j<00><00>vst j|<04><00>rt j|<04><00>nd
t j|<05><00>t j|<06><00>d <0B>z}tt j
|<07><00><00><00><00>d x}}d}t||<05><00>}|s<>dd t j<00><00>vst jt<00><00>rt jt<00><00>nd d
t j<00><00>vst j|<04><00>rt j|<04><00>nd
t j|<05><00>t j|<06><00>d <0B>z}tt j
|<07><00><00><00><00>d x}}d}t||<05><00>}|s<>dd t j<00><00>vst jt<00><00>rt jt<00><00>nd d
t j<00><00>vst j|<04><00>rt j|<04><00>nd
t j|<05><00>t j|<06><00>d <0B>z}tt j
|<07><00><00><00><00>d x}}d S)z1Test that execution result has correct structure.r.r`rarr/r0rHz5assert %(py5)s
{%(py5)s = %(py0)s(%(py1)s, %(py3)s)
}<7D>hasattrr8)r:rArBr<NrQrRr~<00>visualizationsr<73>rerS) rr rr<>rKrLrIrMrNrOrP)r*r,rTrUr8r[rWrYs r)<00>test_execution_result_structurer<65><00>s<><00><00> <17> <13> <18><1A><12>.<2E>/<2F>  <06> <06> <06>D<EFBFBD>"<22>+<2B>.<2E>.<2E>K<EFBFBD> %<25>d<EFBFBD>L<EFBFBD>+<2B> F<> F<>F<EFBFBD>&<26>%<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>'<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>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>%<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>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>,<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>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>&<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>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>,<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>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,r(c<00><><00>tddddddg<02><07><00>}t|<00><00>}t|||<03><00>}d}||u}|s<>tjd |fd
||f<02><00>d t j<00><00>vstj|<04><00>rtj|<04><00>nd tj|<05><00>d <0C>z}d d|iz}ttj
|<08><00><00><00><00>dx}}dS)z,Test execution with multiple required tools.r.zMulti-tool TaskzUse multiple toolsrr/<00>get_value_countsr0Nrcr<>r8r<>ror<) rr rrIrJrKrLrMrNrOrP) r*r,rTrUr8r[rVrfrYs r)<00>"test_execution_with_multiple_toolsr<73><00>s<00><00> <17> <13> <1E>(<28><12>.<2E>0B<30>C<>  <06> <06> <06>D<EFBFBD>"<22>+<2B>.<2E>.<2E>K<EFBFBD> %<25>d<EFBFBD>L<EFBFBD>+<2B> F<> F<>F<EFBFBD><1E><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D>r(c<00>t<00>tdddddg<01><06><00>}t|<00><00>}t|||<03><00>}|j}d}||k}|s<>t jd|fd ||f<02><00>d
t j<00><00>vst j|<04><00>rt j |<04><00>nd
t j |<05><00>t j |<06><00>d <0B>z}d d |iz} tt j | <09><00><00><00><00>dx}x}}|j}d}||k}|s<>t jd|fd||f<02><00>d
t j<00><00>vst j|<04><00>rt j |<04><00>nd
t j |<05><00>t j |<06><00>d <0B>z}d d |iz} tt j | <09><00><00><00><00>dx}x}}dS)z$Test that execution time is tracked.r.r`rarr/r0rrErGr8r9r=r>Nr)<01><)z5%(py2)s
{%(py2)s = %(py0)s.execution_time
} < %(py5)s) rr rrSrIrJrKrLrMrNrOrP)
r*r,rTrUr8rVrWrXrYrZs
r)<00>test_execution_time_trackingr<67><00>s<00><00> <17> <13> <18><1A><12>.<2E>/<2F>  <06> <06> <06>D<EFBFBD>"<22>+<2B>.<2E>.<2E>K<EFBFBD> %<25>d<EFBFBD>L<EFBFBD>+<2B> F<> F<>F<EFBFBD>%<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>%<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>%r(c<00><><00>tj<00><00>}tdddddg<01><06><00>}t|<00><00>}t <00><00>g}t |||<02><00>}d}||u}|s<>t jd|fd ||f<02><00>d
tj <00><00>vst j
|<04><00>rt j |<04><00>nd
t j |<05><00>d <0B>z}d d |iz}tt j |<08><00><00><00><00>dx}}dS)zTest execution with empty data.r.r`rarr/r0Nrcr<>r8r<>ror<)r%r&rr r
rrIrJrKrLrMrNrOrP) <09>
empty_datarTrU<00>toolsr8r[rVrfrYs r)<00>test_execution_with_empty_datar<61><00>s2<00><00><13><1C><1E><1E>J<EFBFBD> <17> <13> <18><1A><12>.<2E>/<2F>  <06> <06> <06>D<EFBFBD>"<22>*<2A>-<2D>-<2D>K<EFBFBD> $<24> &<26> &<26> '<27>E<EFBFBD> %<25>d<EFBFBD>E<EFBFBD>;<3B> ?<3F> ?<3F>F<EFBFBD><1E><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D><1D>r()'<27>__doc__<5F>builtinsrK<00>_pytest.assertion.rewrite<74> assertion<6F>rewriterI<00>pytest<73>pandasr%<00>src.engines.task_executionrrrrr<00>src.models.analysis_planr<00>src.data_accessr <00>src.tools.stats_toolsr
<00>src.tools.query_toolsr <00>fixturer*r,r^rgrsrvr<>r<>r<>r<>r<>r<>r<>r<>r'r(r)<00><module>r<>s<><00><01>+<2B>+<2B><00><00><00><00><00><00><00><00><00><00><00><00><00> <0A> <0A> <0A> <0A><13><13><13><13><02><02><02><02><02><02><02><02><02><02><02><02><02><02>2<>1<>1<>1<>1<>1<>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>9<>9<>9<>9<>9<>9<>4<>4<>4<>4<>4<>4<><08><1E><07><07><10><1E><07><08><1E><06><06><10><1E><06>&<26>&<26>&<26>&$<24>$<24>$<24>"<1F><1F><1F>$<24>$<24>$<24> <1D> <1D> <1D>&<26>&<26>&<26>/<2F>/<2F>/<2F><18><18><18>-<2D>-<2D>-<2D>0<1E><1E><1E>"&<26>&<26>&<26>"<1E><1E><1E><1E>r(