/ tests / metrics / data_drift / test_target_by_features_table.py
test_target_by_features_table.py
 1  import json
 2  from typing import Optional
 3  
 4  import pandas as pd
 5  import pytest
 6  
 7  from evidently.legacy.metrics import TargetByFeaturesTable
 8  from evidently.legacy.options.agg_data import RenderOptions
 9  from evidently.legacy.options.base import Options
10  from evidently.legacy.pipeline.column_mapping import ColumnMapping
11  from evidently.legacy.report import Report
12  
13  
14  @pytest.mark.parametrize(
15      "current_data, reference_data, data_mapping, metric, expected_json",
16      (
17          (
18              pd.DataFrame({"target": [1, 2, 3]}),
19              pd.DataFrame({"target": [1, 2, 3]}),
20              None,
21              TargetByFeaturesTable(),
22              {},
23          ),
24          (
25              pd.DataFrame({"target": [1, 2, 3]}),
26              pd.DataFrame({"target": [1, 2, 3]}),
27              None,
28              TargetByFeaturesTable(),
29              {},
30          ),
31      ),
32  )
33  def test_target_by_features_table_success(
34      current_data: pd.DataFrame,
35      reference_data: pd.DataFrame,
36      data_mapping: Optional[ColumnMapping],
37      metric: TargetByFeaturesTable,
38      expected_json: dict,
39  ) -> None:
40      report = Report(metrics=[metric], options=Options(render=RenderOptions(raw_data=True)))
41      report.run(current_data=current_data, reference_data=reference_data, column_mapping=data_mapping)
42      assert report.show()
43      result_json = report.json()
44      result = json.loads(result_json)
45      assert result["metrics"][0]["metric"] == "TargetByFeaturesTable"
46      assert result["metrics"][0]["result"] == expected_json