blob: 614086fdd972f12cb7c9e79c0dba200a3ce2e167 [file] [log] [blame]
Javi Merinoe4d10d72015-06-22 16:43:04 +01001# $Copyright:
2# ----------------------------------------------------------------
3# This confidential and proprietary software may be used only as
4# authorised by a licensing agreement from ARM Limited
5# (C) COPYRIGHT 2015 ARM Limited
6# ALL RIGHTS RESERVED
7# The entire notice above must be reproduced on all authorised
8# copies and copies may only be made to the extent permitted
9# by a licensing agreement from ARM Limited.
10# ----------------------------------------------------------------
11# File: test_constraint.py
12# ----------------------------------------------------------------
13# $
14#
15
16import pandas as pd
17import unittest
18
19from cr2.plotter import AttrConf
20from cr2.plotter.Constraint import ConstraintManager
21
22class TestConstraintManager(unittest.TestCase):
23 """Test cr2.plotter.ConstraintManager"""
24
25 def __init__(self, *args, **kwargs):
26 """Init some common data for the tests"""
27
28 self.dfrs = [pd.DataFrame({"load": [1, 2, 2, 3],
29 "freq": [2, 3, 3, 4],
30 "cpu": [0, 1, 0, 1]}),
31 pd.DataFrame({"load": [2, 3, 2, 1],
32 "freq": [1, 2, 2, 1],
33 "cpu": [1, 0, 1, 0]})]
Javi Merino9a08e4c2015-06-22 17:59:45 +010034 self.cols = ["load", "freq"]
Javi Merinoe4d10d72015-06-22 16:43:04 +010035 super(TestConstraintManager, self).__init__(*args, **kwargs)
36
37 def test_one_constraint(self):
38 """Test that the constraint manager works with one constraint"""
39
40 dfr = self.dfrs[0]
41
42 c_mgr = ConstraintManager(dfr, "load", None, AttrConf.PIVOT, {})
43
Javi Merinob23658c2015-06-22 17:04:02 +010044 self.assertEquals(len(c_mgr), 1)
Javi Merinoe4d10d72015-06-22 16:43:04 +010045
Javi Merinob23658c2015-06-22 17:04:02 +010046 constraint = iter(c_mgr).next()
47 series = constraint.result[AttrConf.PIVOT_VAL]
Javi Merinoe4d10d72015-06-22 16:43:04 +010048 self.assertEquals(series.to_dict().values(),
49 dfr["load"].to_dict().values())
50
51 def test_no_pivot_multiple_runs(self):
52 """Test that the constraint manager works with multiple runs and no pivots"""
53
54 c_mgr = ConstraintManager(self.dfrs, "load", None, AttrConf.PIVOT, {})
55
Javi Merinob23658c2015-06-22 17:04:02 +010056 self.assertEquals(len(c_mgr), 2)
Javi Merinoe4d10d72015-06-22 16:43:04 +010057
Javi Merinob23658c2015-06-22 17:04:02 +010058 for constraint, orig_dfr in zip(c_mgr, self.dfrs):
Javi Merinoe4d10d72015-06-22 16:43:04 +010059 series = constraint.result[AttrConf.PIVOT_VAL]
60 self.assertEquals(series.to_dict().values(),
61 orig_dfr["load"].to_dict().values())
62
Javi Merino9a08e4c2015-06-22 17:59:45 +010063 def test_no_pivot_zipped_columns_and_runs(self):
64 """Test the constraint manager with multiple columns and runs zipped"""
Javi Merinoe4d10d72015-06-22 16:43:04 +010065
Javi Merino9a08e4c2015-06-22 17:59:45 +010066 c_mgr = ConstraintManager(self.dfrs, self.cols, None, AttrConf.PIVOT, {})
Javi Merinoe4d10d72015-06-22 16:43:04 +010067
Javi Merinob23658c2015-06-22 17:04:02 +010068 self.assertEquals(len(c_mgr), 2)
Javi Merinoe4d10d72015-06-22 16:43:04 +010069
Javi Merino9a08e4c2015-06-22 17:59:45 +010070 for constraint, orig_dfr, col in zip(c_mgr, self.dfrs, self.cols):
Javi Merinoe4d10d72015-06-22 16:43:04 +010071 series = constraint.result[AttrConf.PIVOT_VAL]
72 self.assertEquals(series.to_dict().values(),
73 orig_dfr[col].to_dict().values())
74
Javi Merino9a08e4c2015-06-22 17:59:45 +010075 def test_no_pivot_multicolumns_multiruns(self):
76 """Test the constraint manager with multiple runs that can have each multiple columns"""
77
78 c_mgr = ConstraintManager(self.dfrs, self.cols, None, AttrConf.PIVOT,
79 {}, zip_constraints=False)
80
81 self.assertEquals(len(c_mgr), 4)
82
83 expected_series = [dfr[col] for dfr in self.dfrs for col in self.cols]
84 for constraint, orig_series in zip(c_mgr, expected_series):
85 series = constraint.result[AttrConf.PIVOT_VAL]
86 self.assertEquals(series.to_dict(), orig_series.to_dict())
87
Javi Merinoe4d10d72015-06-22 16:43:04 +010088 def test_no_pivot_filters(self):
89 """Test the constraint manager with filters"""
90
91 simple_filter = {"freq": [2]}
92
93 c_mgr = ConstraintManager(self.dfrs, "load", None, AttrConf.PIVOT,
94 simple_filter)
95
Javi Merinob23658c2015-06-22 17:04:02 +010096 num_constraints = len(c_mgr)
Javi Merinoe4d10d72015-06-22 16:43:04 +010097 self.assertEquals(num_constraints, 2)
98
Javi Merinob23658c2015-06-22 17:04:02 +010099 constraint_iter = iter(c_mgr)
100 constraint = constraint_iter.next()
101 self.assertEquals(len(constraint.result), 1)
Javi Merinoe4d10d72015-06-22 16:43:04 +0100102
Javi Merinob23658c2015-06-22 17:04:02 +0100103 constraint = constraint_iter.next()
104 series_second_frame = constraint.result[AttrConf.PIVOT_VAL]
Javi Merinoe4d10d72015-06-22 16:43:04 +0100105 self.assertEquals(series_second_frame.to_dict().values(), [3, 2])
106
107 def test_pivoted_data(self):
108 """Test the constraint manager with a pivot and one run"""
109
110 c_mgr = ConstraintManager(self.dfrs[0], "load", None, "cpu", {})
111
Javi Merinob23658c2015-06-22 17:04:02 +0100112 self.assertEquals(len(c_mgr), 1)
Javi Merinoe4d10d72015-06-22 16:43:04 +0100113
Javi Merinob23658c2015-06-22 17:04:02 +0100114 constraint = iter(c_mgr).next()
Javi Merinoe4d10d72015-06-22 16:43:04 +0100115 results = dict([(k, v.to_dict().values()) for k, v in constraint.result.items()])
116 expected_results = {0: [1, 2], 1: [2, 3]}
117
118 self.assertEquals(results, expected_results)
119
120 def test_pivoted_multirun(self):
121 """Test the constraint manager with a pivot and multiple runs"""
122
123 c_mgr = ConstraintManager(self.dfrs, "load", None, "cpu", {})
124
Javi Merinob23658c2015-06-22 17:04:02 +0100125 self.assertEquals(len(c_mgr), 2)
Javi Merinoe4d10d72015-06-22 16:43:04 +0100126
Javi Merinob23658c2015-06-22 17:04:02 +0100127 constraint_iter = iter(c_mgr)
128 constraint = constraint_iter.next()
Javi Merinoe4d10d72015-06-22 16:43:04 +0100129 self.assertEquals(constraint.result[0].to_dict().values(), [1, 2])
130
Javi Merinob23658c2015-06-22 17:04:02 +0100131 constraint = constraint_iter.next()
Javi Merinoe4d10d72015-06-22 16:43:04 +0100132 self.assertEquals(constraint.result[1].to_dict().values(), [2, 2])
133
134 def test_pivoted_multiruns_multicolumns(self):
135 """Test the constraint manager with multiple runs and columns"""
136
137 c_mgr = ConstraintManager(self.dfrs, ["load", "freq"], None, "cpu", {})
Javi Merinob23658c2015-06-22 17:04:02 +0100138 self.assertEquals(len(c_mgr), 2)
Javi Merinoe4d10d72015-06-22 16:43:04 +0100139
Javi Merinob23658c2015-06-22 17:04:02 +0100140 constraint_iter = iter(c_mgr)
141 constraint = constraint_iter.next()
Javi Merinoe4d10d72015-06-22 16:43:04 +0100142 self.assertEquals(constraint.result[1].to_dict().values(), [2, 3])
143
Javi Merinob23658c2015-06-22 17:04:02 +0100144 constraint = constraint_iter.next()
Javi Merinoe4d10d72015-06-22 16:43:04 +0100145 self.assertEquals(constraint.result[0].to_dict().values(), [2, 1])
146
147 def test_pivoted_with_filters(self):
148 """Test the constraint manager with pivoted data and filters"""
149
150 simple_filter = {"load": [2]}
151 c_mgr = ConstraintManager(self.dfrs[0], "freq", None, "cpu",
152 simple_filter)
153
Javi Merinob23658c2015-06-22 17:04:02 +0100154 self.assertEquals(len(c_mgr), 1)
Javi Merinoe4d10d72015-06-22 16:43:04 +0100155
Javi Merinob23658c2015-06-22 17:04:02 +0100156 constraint = iter(c_mgr).next()
Javi Merinoe4d10d72015-06-22 16:43:04 +0100157 result = constraint.result
158
159 self.assertEquals(result[0].iloc[0], 3)
160 self.assertEquals(result[1].iloc[0], 3)