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

395 lines
59 KiB
Plaintext
Raw Normal View History

<EFBFBD>
vժi<D5AA>(<00><00><00>dZddlZddlmcmZddlZddlZddl m Z ddl
m Z m Z m Z mZmZmZmZGd<05>d<06><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>ZdS)z Unit tests for core data models.<2E>N)<01>datetime)<07>
ColumnInfo<EFBFBD> DataProfile<6C>AnalysisObjective<76>RequirementSpec<65> AnalysisTask<73> AnalysisPlan<61>AnalysisResultc<00>$<00>eZdZdZd<02>Zd<03>Zd<04>ZdS)<06>TestColumnInfozTests for ColumnInfo model.c
<00><> <00>tddddgd<05>ddd<08><02> <09><00>}|j}d}||k}|s<>tjd
|fd ||f<02><00>d t j<00><00>vstj|<01><00>rtj|<01><00>nd tj|<02><00>tj|<03><00>d <0A>z}dd|iz}ttj |<06><00><00><00><00>dx}x}}|j
}d}||k}|s<>tjd
|fd||f<02><00>d t j<00><00>vstj|<01><00>rtj|<01><00>nd tj|<02><00>tj|<03><00>d <0A>z}dd|iz}ttj |<06><00><00><00><00>dx}x}}|j }d}||k}|s<>tjd
|fd||f<02><00>d t j<00><00>vstj|<01><00>rtj|<01><00>nd tj|<02><00>tj|<03><00>d <0A>z}dd|iz}ttj |<06><00><00><00><00>dx}x}}|j }d}||k}|s<>tjd
|fd||f<02><00>d t j<00><00>vstj|<01><00>rtj|<01><00>nd tj|<02><00>tj|<03><00>d <0A>z}dd|iz}ttj |<06><00><00><00><00>dx}x}}|j }t|<07><00>}d}||k} | <09>stjd
| fd||f<02><00>dt j<00><00>vstjt<00><00>rtjt<00><00>ndd t j<00><00>vstj|<01><00>rtj|<01><00>nd tj|<07><00>tj|<03><00>tj|<08><00>d<17>z}
dd|
iz} ttj | <0B><00><00><00><00>dx}x}x} }|jd} d}| |k}|sltjd
|fd| |f<02><00>tj| <0C><00>tj|<04><00>d<1C>z} dd| iz}ttj |<0E><00><00><00><00>dx} x}}dS)z$Test creating a ColumnInfo instance.<2E>age<67>numericg<63><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>2)<05><00><00>#<00>(<00>-g<00>A@gffffff$@)<02>mean<61>std)<06>name<6D>dtype<70> missing_rate<74> unique_count<6E> sample_values<65>
statistics<EFBFBD><01>==<3D>z,%(py2)s
{%(py2)s = %(py0)s.name
} == %(py5)s<>col<6F><03>py0<79>py2<79>py5<79>assert %(py7)s<>py7N)z-%(py2)s
{%(py2)s = %(py0)s.dtype
} == %(py5)s)z4%(py2)s
{%(py2)s = %(py0)s.missing_rate
} == %(py5)s)z4%(py2)s
{%(py2)s = %(py0)s.unique_count
} == %(py5)s<>)zS%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.sample_values
})
} == %(py8)s<>len<65>r#<00>py1<79>py3r%<00>py8<79>assert %(py10)s<>py10r<00>z%(py1)s == %(py4)s<>r+<00>py4<79>assert %(py6)s<>py6)rr<00>
@pytest_ar<61>_call_reprcompare<72> @py_builtins<6E>locals<6C>_should_repr_global_name<6D> _saferepr<70>AssertionError<6F>_format_explanationrrrrr)r)<0F>selfr!<00> @py_assert1<74> @py_assert4<74> @py_assert3<74> @py_format6<74> @py_format8<74> @py_assert2<74> @py_assert7<74> @py_assert6<74> @py_format9<74> @py_format11<31> @py_assert0<74> @py_format5<74> @py_format7s <20>8D:\code\iov_data_analysis_agent_old\tests\test_models.py<70>test_create_column_infoz&TestColumnInfo.test_create_column_infos<><00><00><18><16><1B><1D><1B>.<2E>.<2E>.<2E> $<24>T<EFBFBD>2<>2<> 
<EFBFBD>
<EFBFBD>
<EFBFBD><03> !<21> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<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>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<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>-<2D>-<2D>c<00><><00>tddddgd<05><01><06><00>}|<01><00><00>}|d}d}||k}|sltjd|fd ||f<02><00>tj|<03><00>tj|<04><00>d
<EFBFBD>z}d d |iz}t tj|<07><00><00><00><00>d x}x}}|d}d}||k}|sltjd|fd ||f<02><00>tj|<03><00>tj|<04><00>d
<EFBFBD>z}d d |iz}t tj|<07><00><00><00><00>d x}x}}tj|<02><00>}|j} |j}
| |
k}|s<>tjd|fd| |
f<02><00>dtj
<00><00>vstj |<08><00>rtj|<08><00>ndtj| <09><00>dtj
<00><00>vstj |<01><00>rtj|<01><00>ndtj|
<EFBFBD><00>d<12>z}dd|iz} t tj| <0B><00><00><00><00>d x} x}}
|j } |j }
| |
k}|s<>tjd|fd| |
f<02><00>dtj
<00><00>vstj |<08><00>rtj|<08><00>ndtj| <09><00>dtj
<00><00>vstj |<01><00>rtj|<01><00>ndtj|
<EFBFBD><00>d<12>z}dd|iz} t tj| <0B><00><00><00><00>d x} x}}
|j } |j }
| |
k}|s<>tjd|fd| |
f<02><00>dtj
<00><00>vstj |<08><00>rtj|<08><00>ndtj| <09><00>dtj
<00><00>vstj |<01><00>rtj|<01><00>ndtj|
<EFBFBD><00>d<12>z}dd|iz} t tj| <0B><00><00><00><00>d x} x}}
d S)z&Test ColumnInfo to_dict and from_dict.<2E>status<75> categorical<61><00>)<03>open<65>closed<65>pending)rrrrrrrr0r1r3r4Nr<00>zF%(py2)s
{%(py2)s = %(py0)s.name
} == %(py6)s
{%(py6)s = %(py4)s.name
}<7D> col_restoredr!<00>r#r$r2r4<00>assert %(py8)sr-<00>zH%(py2)s
{%(py2)s = %(py0)s.dtype
} == %(py6)s
{%(py6)s = %(py4)s.dtype
})zX%(py2)s
{%(py2)s = %(py0)s.sample_values
} == %(py6)s
{%(py6)s = %(py4)s.sample_values
})r<00>to_dictr5r6r:r;r<<00> from_dictrr7r8r9rr) r=r!<00>col_dictrHr@rCrIrJrWr><00> @py_assert5rFs rK<00>test_column_info_serializationz-TestColumnInfo.test_column_info_serialization's<00><00><18><19><1F><1C><1A>7<>7<>7<> 
<EFBFBD>
<EFBFBD>
<EFBFBD><03><17>;<3B>;<3B>=<3D>=<3D><08>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>1<>!<21>+<2B>H<EFBFBD>5<>5<> <0C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>>rMc<00><><00>tdddd<04><05><00>}|<01><00><00>}tj|<02><00>}|j}|j}||k}|s<>t jd|fd||f<02><00>dt j<00><00>vst j|<03><00>rt j |<03><00>ndt j |<04><00>d t j<00><00>vst j|<01><00>rt j |<01><00>nd t j |<05><00>d
<EFBFBD>z}d d |iz}tt j |<08><00><00><00><00>d x}x}}|j }|j }||k}|s<>t jd|fd||f<02><00>dt j<00><00>vst j|<03><00>rt j |<03><00>ndt j |<04><00>d t j<00><00>vst j|<01><00>rt j |<01><00>nd t j |<05><00>d
<EFBFBD>z}d d |iz}tt j |<08><00><00><00><00>d x}x}}d S)z#Test ColumnInfo JSON serialization.<2E>
created_atrrQi<><00>rrrrrrVrWr!rXrYr-NrZ) r<00>to_json<6F> from_jsonrr5r6r7r8r9r:r;r<r) r=r!<00>json_strrWr>r^r@rJrFs rK<00>test_column_info_jsonz$TestColumnInfo.test_column_info_json:s<><00><00><18><1D><1C><1C><1D> 
<EFBFBD>
<EFBFBD>
<EFBFBD><03><17>;<3B>;<3B>=<3D>=<3D><08>!<21>+<2B>H<EFBFBD>5<>5<> <0C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.rMN)<07>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__rLr_rf<00>rMrKr r sG<00><00><00><00><00><00>%<25>%<25>.<2E>.<2E>.<2E>$?<3F>?<3F>?<3F>& /<2F> /<2F> /<2F> /<2F> /rMr c<00><00>eZdZdZd<02>Zd<03>ZdS)<05>TestDataProfilezTests for DataProfile model.c
<00><><00>tdddd<04><05><00>tdddd<08><05><00>g}td dd
|d dd id d<0E><0F><00>}|j}d }||k}|s<>tjd|fd||f<02><00>dt j<00><00>vstj|<02><00>rtj|<02><00>ndtj|<03><00>tj|<04><00>d<13>z}dd|iz}ttj
|<07><00><00><00><00>dx}x}}|j }d}||k}|s<>tjd|fd||f<02><00>dt j<00><00>vstj|<02><00>rtj|<02><00>ndtj|<03><00>tj|<04><00>d<13>z}dd|iz}ttj
|<07><00><00><00><00>dx}x}}|j }d }||k}|s<>tjd|fd||f<02><00>dt j<00><00>vstj|<02><00>rtj|<02><00>ndtj|<03><00>tj|<04><00>d<13>z}dd|iz}ttj
|<07><00><00><00><00>dx}x}}|j }t|<08><00>}d
} || k}
|
<EFBFBD>stjd|
fd|| f<02><00>dt j<00><00>vstjt<00><00>rtjt<00><00>nddt j<00><00>vstj|<02><00>rtj|<02><00>ndtj|<08><00>tj|<04><00>tj| <09><00>d<1B>z} dd| iz} ttj
| <0C><00><00><00><00>dx}x}x}
} |j}d }||k}|s<>tjd|fd||f<02><00>dt j<00><00>vstj|<02><00>rtj|<02><00>ndtj|<03><00>tj|<04><00>d<13>z}dd|iz}ttj
|<07><00><00><00><00>dx}x}}dS)z%Test creating a DataProfile instance.<2E>idrrQ<00>drbrOrPrR<00>test.csv<73><00>ticketz ticket statusg`U@zTest data profile)<08> file_path<74> row_count<6E> column_count<6E>columns<6E> inferred_type<70>
key_fields<EFBFBD> quality_score<72>summaryr)z1%(py2)s
{%(py2)s = %(py0)s.file_path
} == %(py5)s<>profiler"r&r'N)z1%(py2)s
{%(py2)s = %(py0)s.row_count
} == %(py5)s)z5%(py2)s
{%(py2)s = %(py0)s.inferred_type
} == %(py5)s)zM%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.columns
})
} == %(py8)sr)r*r.r/)z5%(py2)s
{%(py2)s = %(py0)s.quality_score
} == %(py5)s)rrrtr5r6r7r8r9r:r;r<rurxrwr)rz) r=rwr|r>r?r@rArBrCrDrErFrGs rK<00>test_create_data_profilez(TestDataProfile.test_create_data_profileMsS<00><00> <17>D<EFBFBD> <09><03>RU<52> V<> V<> V<> <16>H<EFBFBD>M<EFBFBD><03>Z[<5B> \<5C> \<5C> \<5C>
<EFBFBD><07>
<1E> <20><19><1A><1B>"<22> <20>/<2F>2<><1E>'<27> 
<EFBFBD> 
<EFBFBD> 
<EFBFBD><07> /<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>'<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>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<>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<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>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,rMc <00>` <00>tdddd<04><05><00>g}tddd|d<08> <09><00>}|<02><00><00>}|d
}d}||k}|sltjd |fd ||f<02><00>tj|<04><00>tj|<05><00>d <0A>z}dd|iz}t tj|<08><00><00><00><00>dx}x}}|d}d}||k}|sltjd |fd ||f<02><00>tj|<04><00>tj|<05><00>d <0A>z}dd|iz}t tj|<08><00><00><00><00>dx}x}}|d} t| <09><00>}d}
||
k} | s<>tjd | fd||
f<02><00>dtj
<00><00>vstj t<00><00>rtjt<00><00>ndtj| <09><00>tj|<05><00>tj|
<EFBFBD><00>d<15>z} dd| iz} t tj| <0A><00><00><00><00>dx} x}x} }
tj |<03><00>}|j } |j } | | k}|s<>tjd |fd| | f<02><00>dtj
<00><00>vstj |<0E><00>rtj|<0E><00>ndtj| <09><00>dtj
<00><00>vstj |<02><00>rtj|<02><00>ndtj| <0B><00>d<1B>z}dd|iz}t tj|<0F><00><00><00><00>dx} x}} |j} |j} | | k}|s<>tjd |fd| | f<02><00>dtj
<00><00>vstj |<0E><00>rtj|<0E><00>ndtj| <09><00>dtj
<00><00>vstj |<02><00>rtj|<02><00>ndtj| <0B><00>d<1B>z}dd|iz}t tj|<0F><00><00><00><00>dx} x}} |j}t|<06><00>}|j}t|<11><00>}||k}
|
<EFBFBD>s<>tjd |
fd||f<02><00>dtj
<00><00>vstj t<00><00>rtjt<00><00>nddtj
<00><00>vstj |<0E><00>rtj|<0E><00>ndtj|<06><00>tj|<10><00>dtj
<00><00>vstj t<00><00>rtjt<00><00>nddtj
<00><00>vstj |<02><00>rtj|<02><00>ndtj|<11><00>tj|<12><00>d <20>z}d!d"|iz}t tj|<14><00><00><00><00>dx}x}x}
x}}dS)#z'Test DataProfile to_dict and from_dict.rorrQrprbrq<00><00>sales)rtrurvrwrxrtrr0r1r3r4Nrxrw)z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)sr))r#r$r2r'zassert %(py9)s<>py9)zP%(py2)s
{%(py2)s = %(py0)s.file_path
} == %(py6)s
{%(py6)s = %(py4)s.file_path
}<7D>profile_restoredr|rXrYr-)zP%(py2)s
{%(py2)s = %(py0)s.row_count
} == %(py6)s
{%(py6)s = %(py4)s.row_count
})z<>%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.columns
})
} == %(py12)s
{%(py12)s = %(py7)s(%(py10)s
{%(py10)s = %(py8)s.columns
})
}<7D>r#r+r,r%r'r-r/<00>py12<31>assert %(py14)s<>py14)rrr[r5r6r:r;r<r)r7r8r9r\rtrurw)r=rwr|<00> profile_dictrHr@rCrIrJr>rEr^rB<00> @py_format10r<30>rFr?<00> @py_assert9<74> @py_assert11<31> @py_format13<31> @py_format15s rK<00>test_data_profile_serializationz/TestDataProfile.test_data_profile_serializationes <00><00> <17>D<EFBFBD> <09><03>RU<52> V<> V<> V<>
<EFBFBD><07><1E> <20><19><1A><1B>!<21> 
<EFBFBD>
<EFBFBD>
<EFBFBD><07><1F><EFBFBD><EFBFBD>(<28>(<28> <0C>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<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>7<>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<>&<26>0<><1C>><3E>><3E><18>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>DrMN)rgrhrirjr}r<>rkrMrKrmrmJs=<00><00><00><00><00><00>&<26>&<26>-<2D>-<2D>-<2D>0E<01>E<01>E<01>E<01>ErMrmc<00><00>eZdZdZd<02>Zd<03>ZdS)<05>TestAnalysisObjectivez"Tests for AnalysisObjective model.c<00><><00>tddddgd<05><06><00>}|j}d}||k}|s<>tjd|fd||f<02><00>d t j<00><00>vstj|<01><00>rtj|<01><00>nd tj|<02><00>tj|<03><00>d
<EFBFBD>z}d d |iz}ttj |<06><00><00><00><00>d x}x}}|j
}d}||k}|s<>tjd|fd||f<02><00>d t j<00><00>vstj|<01><00>rtj|<01><00>nd tj|<02><00>tj|<03><00>d
<EFBFBD>z}d d |iz}ttj |<06><00><00><00><00>d x}x}}|j }t|<07><00>}d}||k} | <09>stjd| fd||f<02><00>dt j<00><00>vstjt<00><00>rtjt<00><00>ndd t j<00><00>vstj|<01><00>rtj|<01><00>nd tj|<07><00>tj|<03><00>tj|<08><00>d<12>z}
dd|
iz} ttj | <0B><00><00><00><00>d x}x}x} }d S)z,Test creating an AnalysisObjective instance.zHealth Analysis<69>Analyze ticket health<74>
close_rate<EFBFBD> avg_durationr()r<00> description<6F>metrics<63>priorityrr <00>objr"r&r'N<>z0%(py2)s
{%(py2)s = %(py0)s.priority
} == %(py5)srr)zM%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.metrics
})
} == %(py8)sr)r*r.r/) rrr5r6r7r8r9r:r;r<r<>r<>r)) r=r<>r>r?r@rArBrCrDrErFrGs rK<00>test_create_objectivez+TestAnalysisObjective.test_create_objective<76>sD<00><00><1F>"<22>/<2F>!<21>><3E>2<><16> 
<EFBFBD>
<EFBFBD>
<EFBFBD><03> -<2D>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20> <20>$<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>$<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>$rMc<00><><00>tdddg<01><04><00>}|<01><00><00>}tj|<02><00>}|j}|j}||k}|s<>t jd|fd||f<02><00>dt j<00><00>vst j|<03><00>rt j |<03><00>ndt j |<04><00>dt j<00><00>vst j|<01><00>rt j |<01><00>ndt j |<05><00>d <09>z}d
d |iz}tt j |<08><00><00><00><00>d x}x}}|j }|j }||k}|s<>t jd|fd ||f<02><00>dt j<00><00>vst j|<03><00>rt j |<03><00>ndt j |<04><00>dt j<00><00>vst j|<01><00>rt j |<01><00>ndt j |<05><00>d <09>z}d
d |iz}tt j |<08><00><00><00><00>d x}x}}d S)z%Test AnalysisObjective serialization.<2E>TestzTest objective<76>metric1<63>rr<>r<>rrV<00> obj_restoredr<64>rXrYr-N)zL%(py2)s
{%(py2)s = %(py0)s.metrics
} == %(py6)s
{%(py6)s = %(py4)s.metrics
}) rr[r\rr5r6r7r8r9r:r;r<r<>) r=r<><00>obj_dictr<74>r>r^r@rJrFs rK<00>test_objective_serializationz2TestAnalysisObjective.test_objective_serialization<6F>s<><00><00><1F><17>(<28><1E>K<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD><03> <17>;<3B>;<3B>=<3D>=<3D><08>(<28>2<>8<EFBFBD><<3C><<3C> <0C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2rMN)rgrhrirjr<>r<>rkrMrKr<>r<>~s8<00><00><00><00><00><00>,<2C>,<2C> %<25> %<25> %<25> 3<> 3<> 3<> 3<> 3rMr<>c<00><00>eZdZdZd<02>Zd<03>ZdS)<05>TestRequirementSpecz Tests for RequirementSpec model.c<00><><00>tdddg<01><04><00>g}td|dgddg<02> <09><00>}|j}d}||k}|s<>tjd
|fd ||f<02><00>d t j<00><00>vstj|<02><00>rtj|<02><00>nd tj|<03><00>tj|<04><00>d <0A>z}dd|iz}ttj
|<07><00><00><00><00>dx}x}}|j }t|<08><00>}d} || k}
|
<EFBFBD>stjd
|
fd|| f<02><00>dt j<00><00>vstjt<00><00>rtjt<00><00>ndd t j<00><00>vstj|<02><00>rtj|<02><00>nd tj|<08><00>tj|<04><00>tj| <09><00>d<14>z} dd| iz} ttj
| <0C><00><00><00><00>dx}x}x}
} |j }t|<08><00>}d} || k}
|
<EFBFBD>stjd
|
fd|| f<02><00>dt j<00><00>vstjt<00><00>rtjt<00><00>ndd t j<00><00>vstj|<02><00>rtj|<02><00>nd tj|<08><00>tj|<04><00>tj| <09><00>d<14>z} dd| iz} ttj
| <0C><00><00><00><00>dx}x}x}
} dS)z)Test creating a RequirementSpec instance.<2E>Obj1zFirst objective<76>m1r<31>r<><00>no_pii<69>report<72>charts)<04>
user_input<EFBFBD>
objectives<EFBFBD> constraints<74>expected_outputsr)z2%(py2)s
{%(py2)s = %(py0)s.user_input
} == %(py5)s<>specr"r&r'Nr<00>zP%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.objectives
})
} == %(py8)sr)r*r.r/)zQ%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.constraints
})
} == %(py8)s)rrr<>r5r6r7r8r9r:r;r<r<>r)r<>) r=r<>r<>r>r?r@rArBrCrDrErFrGs rK<00>test_create_requirement_specz0TestRequirementSpec.test_create_requirement_spec<65>s<><00><00> <1E>6<EFBFBD>7H<37>SW<53>RX<52> Y<> Y<> Y<>
<EFBFBD>
<EFBFBD><1F>.<2E>!<21>!<21>
<EFBFBD>&<26><08>1<> 
<EFBFBD>
<EFBFBD>
<EFBFBD><04> :<3A>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>)<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>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)rMc <00>b<00>tdddg<01><04><00>g}td|<01><06><00>}|<02><00><00>}tj|<03><00>}|j}|j}||k}|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
tj<00><00>vst j |<02><00>rt j
|<02><00>nd
t j
|<06><00>d <0B>z}d d |iz} tt j | <09><00><00><00><00>dx}x}}|j }
t|
<EFBFBD><00>} |j } t| <0C><00>} | | k}|<0E>s<>t jd|fd| | f<02><00>dtj<00><00>vst j t<00><00>rt j
t<00><00>ndd tj<00><00>vst j |<04><00>rt j
|<04><00>nd t j
|
<EFBFBD><00>t j
| <0B><00>dtj<00><00>vst j t<00><00>rt j
t<00><00>ndd
tj<00><00>vst j |<02><00>rt j
|<02><00>nd
t j
| <0C><00>t j
| <0A><00>d<11>z}dd|iz}tt j |<10><00><00><00><00>dx}
x} x}x} } dS)z#Test RequirementSpec serialization.r<>r<>r<>r<>z
Test input)r<>r<>r)zR%(py2)s
{%(py2)s = %(py0)s.user_input
} == %(py6)s
{%(py6)s = %(py4)s.user_input
}<7D> spec_restoredr<64>rXrYr-N<>z<>%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.objectives
})
} == %(py12)s
{%(py12)s = %(py7)s(%(py10)s
{%(py10)s = %(py8)s.objectives
})
}r)r<>r<>r<>)rrr[r\r<>r5r6r7r8r9r:r;r<r<>r))r=r<>r<><00> spec_dictr<74>r>r^r@rJrFrCr?r<>r<>rEr<>r<>s rK<00>#test_requirement_spec_serializationz7TestRequirementSpec.test_requirement_spec_serialization<6F>sl<00><00> <1E>6<EFBFBD>v<EFBFBD><04>v<EFBFBD> N<> N<> N<>
<EFBFBD>
<EFBFBD><1F>#<23>!<21>
<EFBFBD>
<EFBFBD>
<EFBFBD><04>
<19>L<EFBFBD>L<EFBFBD>N<EFBFBD>N<EFBFBD> <09>'<27>1<>)<29><<3C><<3C> <0A>:<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>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>DrMN)rgrhrirjr<>r<>rkrMrKr<>r<><00>s=<00><00><00><00><00><00>*<2A>*<2A>*<2A>*<2A>*<2A>"E<01>E<01>E<01>E<01>ErMr<>c<00><00>eZdZdZd<02>Zd<03>ZdS)<05>TestAnalysisTaskzTests for AnalysisTask model.c <00><00>tdddddgdgd<07><08><00>}|j}d}||k}|s<>tjd |fd
||f<02><00>d t j<00><00>vstj|<01><00>rtj|<01><00>nd tj|<02><00>tj|<03><00>d <0C>z}d d|iz}ttj |<06><00><00><00><00>dx}x}}|j
}d}||k}|s<>tjd |fd||f<02><00>d t j<00><00>vstj|<01><00>rtj|<01><00>nd tj|<02><00>tj|<03><00>d <0C>z}d d|iz}ttj |<06><00><00><00><00>dx}x}}|j }t|<07><00>}d}||k} | <09>stjd | fd||f<02><00>dt j<00><00>vstjt<00><00>rtjt<00><00>ndd t j<00><00>vstj|<01><00>rtj|<01><00>nd tj|<07><00>tj|<03><00>tj|<08><00>d<14>z}
dd|
iz} ttj | <0B><00><00><00><00>dx}x}x} }|j }d}||k}|s<>tjd |fd||f<02><00>d t j<00><00>vstj|<01><00>rtj|<01><00>nd tj|<02><00>tj|<03><00>d <0C>z}d d|iz}ttj |<06><00><00><00><00>dx}x}}dS)z'Test creating an AnalysisTask instance.<2E>task_1zCalculate statisticszCalculate basic statisticsr(<00>task_0<5F>
stats_toolzStatistics summary)rorr<>r<><00> dependencies<65>required_tools<6C>expected_outputr)z*%(py2)s
{%(py2)s = %(py0)s.id
} == %(py5)s<>taskr"r&r'Nr<4E>r)zR%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.dependencies
})
} == %(py8)sr)r*r.r/rU)z.%(py2)s
{%(py2)s = %(py0)s.status
} == %(py5)s)rror5r6r7r8r9r:r;r<r<>r<>r)rO) r=r<>r>r?r@rArBrCrDrErFrGs rK<00>test_create_taskz!TestAnalysisTask.test_create_task<73>s3<00><00><1B><17>'<27>4<><16>"<22><1A>(<28>><3E>0<>
<EFBFBD>
<EFBFBD>
<EFBFBD><04> #<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>!<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>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>'<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>'rMc<00><><00>tdddd<04><05><00>}|<01><00><00>}tj|<02><00>}|j}|j}||k}|s<>t jd|fd||f<02><00>dt j<00><00>vst j|<03><00>rt j |<03><00>ndt j |<04><00>d t j<00><00>vst j|<01><00>rt j |<01><00>nd t j |<05><00>d
<EFBFBD>z}d d |iz}tt j |<08><00><00><00><00>d x}x}}|j }|j }||k}|s<>t jd|fd||f<02><00>dt j<00><00>vst j|<03><00>rt j |<03><00>ndt j |<04><00>d t j<00><00>vst j|<01><00>rt j |<01><00>nd t j |<05><00>d
<EFBFBD>z}d d |iz}tt j |<08><00><00><00><00>d x}x}}d S)z Test AnalysisTask serialization.r<><00> Test taskr<6B>rR<00>rorr<>r<>r)zB%(py2)s
{%(py2)s = %(py0)s.id
} == %(py6)s
{%(py6)s = %(py4)s.id
}<7D> task_restoredr<64>rXrYr-NrV) rr[r\ror5r6r7r8r9r:r;r<r) r=r<><00> task_dictr<74>r>r^r@rJrFs rK<00>test_task_serializationz(TestAnalysisTask.test_task_serialization<6F>s<><00><00><1B><17><1C><1E><16> 
<EFBFBD>
<EFBFBD>
<EFBFBD><04><19>L<EFBFBD>L<EFBFBD>N<EFBFBD>N<EFBFBD> <09>$<24>.<2E>y<EFBFBD>9<>9<> <0A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<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>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.rMN)rgrhrirjr<>r<>rkrMrKr<>r<><00>s8<00><00><00><00><00><00>'<27>'<27>(<28>(<28>(<28>" /<2F> /<2F> /<2F> /<2F> /rMr<>c<00><00>eZdZdZd<02>Zd<03>ZdS)<05>TestAnalysisPlanzTests for AnalysisPlan model.c<00>6 <00>tdddg<01><04><00>g}tdddd<07><08><00>g}t||d d
id <0B> <0C><00>}|j}t |<04><00>}d }||k}|<07>st jd|fd||f<02><00>dtj<00><00>vst j t<00><00>rt j
t<00><00>nddtj<00><00>vst j |<03><00>rt j
|<03><00>ndt j
|<04><00>t j
|<05><00>t j
|<06><00>d<12>z}dd|iz} tt j | <09><00><00><00><00>dx}x}x}}|j }t |<04><00>}d }||k}|<07>st jd|fd||f<02><00>dtj<00><00>vst j t<00><00>rt j
t<00><00>nddtj<00><00>vst j |<03><00>rt j
|<03><00>ndt j
|<04><00>t j
|<05><00>t j
|<06><00>d<12>z}dd|iz} tt j | <09><00><00><00><00>dx}x}x}}|j}
d }|
|k} | s<>t jd| fd|
|f<02><00>dtj<00><00>vst j |<03><00>rt j
|<03><00>ndt j
|
<EFBFBD><00>t j
|<05><00>d<18>z} dd| iz} tt j | <0A><00><00><00><00>dx}
x} }|j}t!|t"<00><00>}|<0E>sddtj<00><00>vst j t <00><00>rt j
t <00><00>nddtj<00><00>vst j |<03><00>rt j
|<03><00>ndt j
|<04><00>dtj<00><00>vst j t"<00><00>rt j
t"<00><00>ndt j
|<0E><00>d<1E>z}tt j |<0F><00><00><00><00>dx}}dS)z'Test creating an AnalysisPlan instance.r<>r<>r<>r<><00>t1<74>Task 1r(r<><00>tool1<6C>config1i,)r<><00>tasks<6B> tool_config<69>estimated_durationrrr<>r)<00>planr*r.r/N)zK%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.tasks
})
} == %(py8)s)z:%(py2)s
{%(py2)s = %(py0)s.estimated_duration
} == %(py5)sr"r&r'zUassert %(py6)s
{%(py6)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.created_at
}, %(py4)s)
}<7D>
isinstancer)r#r+r,r2r4)rrr r<>r)r5r6r7r8r9r:r;r<r<>r<>rar<>r)r=r<>r<>r<>rCr?rDrErFrGr>r@rArBr^rJs rK<00>test_create_planz!TestAnalysisPlan.test_create_plan<61>s <00><00> <1E>6<EFBFBD>v<EFBFBD><04>v<EFBFBD> N<> N<> N<>
<EFBFBD>
<EFBFBD> <19>D<EFBFBD>x<EFBFBD>V<EFBFBD>a<EFBFBD> P<> P<> P<>
<EFBFBD><05><1C>!<21><17> <20>)<29>,<2C>"<22> 
<EFBFBD>
<EFBFBD>
<EFBFBD><04> )<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>#<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>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>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<>4rMc <00><<00>tdddg<01><04><00>g}tdddd<07><08><00>g}t||<02> <09><00>}|<03><00><00>}tj|<04><00>}|j}t |<06><00>}|j}t |<08><00>} || k}
|
<EFBFBD>s<>tjd
|
fd || f<02><00>d tj
<00><00>vstj t <00><00>rtj t <00><00>nd d tj
<00><00>vstj |<05><00>rtj |<05><00>nd tj |<06><00>tj |<07><00>d tj
<00><00>vstj t <00><00>rtj t <00><00>nd dtj
<00><00>vstj |<03><00>rtj |<03><00>ndtj |<08><00>tj | <09><00>d<0F>z} dd| iz} ttj| <0C><00><00><00><00>dx}x}x}
x}} |j}t |<06><00>}|j}t |<08><00>} || k}
|
<EFBFBD>s<>tjd
|
fd|| f<02><00>d tj
<00><00>vstj t <00><00>rtj t <00><00>nd d tj
<00><00>vstj |<05><00>rtj |<05><00>nd tj |<06><00>tj |<07><00>d tj
<00><00>vstj t <00><00>rtj t <00><00>nd dtj
<00><00>vstj |<03><00>rtj |<03><00>ndtj |<08><00>tj | <09><00>d<0F>z} dd| iz} ttj| <0C><00><00><00><00>dx}x}x}
x}} dS)z Test AnalysisPlan serialization.r<>r<>r<>r<>r<>r<>r(r<>)r<>r<>rr<>r)<00> plan_restoredr<64>r<>r<>r<>N)z<>%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.tasks
})
} == %(py12)s
{%(py12)s = %(py7)s(%(py10)s
{%(py10)s = %(py8)s.tasks
})
})rrr r[r\r<>r)r5r6r7r8r9r:r;r<r<>) r=r<>r<>r<><00> plan_dictr<74>rCr?r<>r<>rEr<>r<>s rK<00>test_plan_serializationz(TestAnalysisPlan.test_plan_serialization<6F>s?<00><00> <1E>6<EFBFBD>v<EFBFBD><04>v<EFBFBD> N<> N<> N<>
<EFBFBD>
<EFBFBD> <19>D<EFBFBD>x<EFBFBD>V<EFBFBD>a<EFBFBD> P<> P<> P<>
<EFBFBD><05><1C>z<EFBFBD><15>?<3F>?<3F>?<3F><04><18>L<EFBFBD>L<EFBFBD>N<EFBFBD>N<EFBFBD> <09>$<24>.<2E>y<EFBFBD>9<>9<> <0A>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<>:<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>:<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>:rMN)rgrhrirjr<>r<>rkrMrKr<>r<><00>s8<00><00><00><00><00><00>'<27>'<27>5<>5<>5<>*;<3B>;<3B>;<3B>;<3B>;rMr<>c<00>$<00>eZdZdZd<02>Zd<03>Zd<04>ZdS)<06>TestAnalysisResultzTests for AnalysisResult model.c <00>&<00>tdddddidgdgd<08> <09><00>}|j}d}||k}|s<>tjd
|fd ||f<02><00>d t j<00><00>vstj|<01><00>rtj|<01><00>nd tj|<02><00>tj|<03><00>d <0A>z}dd|iz}ttj |<06><00><00><00><00>dx}x}}|j
}d}||u}|s<>tjd|fd||f<02><00>d t j<00><00>vstj|<01><00>rtj|<01><00>nd tj|<02><00>tj|<03><00>d <0A>z}dd|iz}ttj |<06><00><00><00><00>dx}x}}|j d}d}||k}|sltjd
|fd||f<02><00>tj|<07><00>tj|<04><00>d<14>z} dd| iz}
ttj |
<EFBFBD><00><00><00><00>dx}x}}|j }t|<08><00>}d} || k} | <0C>stjd
| fd|| f<02><00>dt j<00><00>vstjt<00><00>rtjt<00><00>ndd t j<00><00>vstj|<01><00>rtj|<01><00>nd tj|<08><00>tj|<03><00>tj| <0B><00>d<1A>z} dd| iz}ttj |<0E><00><00><00><00>dx}x}x} } |j}d}||u}|s<>tjd|fd||f<02><00>d t j<00><00>vstj|<01><00>rtj|<01><00>nd tj|<02><00>tj|<03><00>d <0A>z}dd|iz}ttj |<06><00><00><00><00>dx}x}}dS)z)Test creating an AnalysisResult instance.r<>r<>T<>countrpz
chart1.pngz Key finding 1g@)<07>task_id<69> task_name<6D>success<73>data<74>visualizations<6E>insights<74>execution_timer)z/%(py2)s
{%(py2)s = %(py0)s.task_id
} == %(py5)s<>resultr"r&r'N<><01>is<69>z/%(py2)s
{%(py2)s = %(py0)s.success
} is %(py5)sr0r1r3r4r)zN%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.insights
})
} == %(py8)sr)r*r.r/)z-%(py2)s
{%(py2)s = %(py0)s.error
} is %(py5)s)r
r<>r5r6r7r8r9r:r;r<r<>r<>r<>r)<00>error)r=r<>r>r?r@rArBrHrCrIrJrDrErFrGs rK<00>test_create_resultz%TestAnalysisResult.test_create_results<><00><00><1F><1C>!<21><18><19>3<EFBFBD><1E>(<28>><3E>%<25>&<26><1E>
<EFBFBD>
<EFBFBD>
<EFBFBD><06> *<2A>)<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>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>#<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>#rMc<00>,<00>tdddd<04><05><00>}|j}d}||u}|s<>tjd|fd||f<02><00>dt j<00><00>vstj|<01><00>rtj|<01><00>ndtj|<02><00>tj|<03><00>d <09>z}d
d |iz}ttj |<06><00><00><00><00>d x}x}}|j
}d}||k}|s<>tjd |fd||f<02><00>dt j<00><00>vstj|<01><00>rtj|<01><00>ndtj|<02><00>tj|<03><00>d <09>z}d
d |iz}ttj |<06><00><00><00><00>d x}x}}d S)zTest AnalysisResult with error.r<>z Failed taskFzTool execution failed)r<>r<>r<>r<>r<>r<>r<>r"r&r'Nr)z-%(py2)s
{%(py2)s = %(py0)s.error
} == %(py5)s) r
r<>r5r6r7r8r9r:r;r<r<>)r=r<>r>r?r@rArBs rK<00>test_result_with_errorz)TestAnalysisResult.test_result_with_error&s<><00><00><1F><1C>#<23><19>)<29> 
<EFBFBD>
<EFBFBD>
<EFBFBD><06> '<27>&<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>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<>6rMc<00><><00>tdddddi<01><06><00>}|<01><00><00>}tj|<02><00>}|j}|j}||k}|s<>t jd|fd||f<02><00>d t j<00><00>vst j|<03><00>rt j |<03><00>nd t j |<04><00>d
t j<00><00>vst j|<01><00>rt j |<01><00>nd
t j |<05><00>d <0B>z}d d |iz}tt j |<08><00><00><00><00>dx}x}}|j }|j }||k}|s<>t jd|fd||f<02><00>d t j<00><00>vst j|<03><00>rt j |<03><00>nd t j |<04><00>d
t j<00><00>vst j|<01><00>rt j |<01><00>nd
t j |<05><00>d <0B>z}d d |iz}tt j |<08><00><00><00><00>dx}x}}|j }|j }||k}|s<>t jd|fd||f<02><00>d t j<00><00>vst j|<03><00>rt j |<03><00>nd t j |<04><00>d
t j<00><00>vst j|<01><00>rt j |<01><00>nd
t j |<05><00>d <0B>z}d d |iz}tt j |<08><00><00><00><00>dx}x}}dS)z"Test AnalysisResult serialization.r<>r<>T<>key<65>value)r<>r<>r<>r<>r)zL%(py2)s
{%(py2)s = %(py0)s.task_id
} == %(py6)s
{%(py6)s = %(py4)s.task_id
}<7D>result_restoredr<64>rXrYr-N)zL%(py2)s
{%(py2)s = %(py0)s.success
} == %(py6)s
{%(py6)s = %(py4)s.success
})zF%(py2)s
{%(py2)s = %(py0)s.data
} == %(py6)s
{%(py6)s = %(py4)s.data
})r
r[r\r<>r5r6r7r8r9r:r;r<r<>r<>) r=r<><00> result_dictr<74>r>r^r@rJrFs rK<00>test_result_serializationz,TestAnalysisResult.test_result_serialization2s<><00><00><1F><1C><1C><18><17><17>!<21> 
<EFBFBD>
<EFBFBD>
<EFBFBD><06><1D>n<EFBFBD>n<EFBFBD>&<26>&<26> <0B>(<28>2<>;<3B>?<3F>?<3F><0F>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<>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<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2rMN)rgrhrirjr<>r<>r<>rkrMrKr<>r<>sG<00><00><00><00><00><00>)<29>)<29>$<24>$<24>$<24>$
7<>
7<>
7<>3<>3<>3<>3<>3rMr<>)rj<00>builtinsr7<00>_pytest.assertion.rewrite<74> assertion<6F>rewriter5<00>pytest<73>jsonr<00>
src.modelsrrrrrr r
r rmr<>r<>r<>r<>r<>rkrMrK<00><module>r<>s<><00><01>&<26>&<26><00><00><00><00><00><00><00><00><00><00><00><00><00> <0A> <0A> <0A> <0A> <0B> <0B> <0B> <0B><1D><1D><1D><1D><1D><1D><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02>5/<2F>5/<2F>5/<2F>5/<2F>5/<2F>5/<2F>5/<2F>5/<2F>p1E<01>1E<01>1E<01>1E<01>1E<01>1E<01>1E<01>1E<01>h3<>3<>3<>3<>3<>3<>3<>3<>>#E<01>#E<01>#E<01>#E<01>#E<01>#E<01>#E<01>#E<01>L!/<2F>!/<2F>!/<2F>!/<2F>!/<2F>!/<2F>!/<2F>!/<2F>H';<3B>';<3B>';<3B>';<3B>';<3B>';<3B>';<3B>';<3B>T/3<>/3<>/3<>/3<>/3<>/3<>/3<>/3<>/3<>/3rM