def setUp(self): self.analog_scheme = Rim('analog')
def test_groups(self): scheme = Rim('digital') self.assertIsInstance(scheme.groups, dict) self.assertIsNone(scheme.groups['__default_group_name__']['report']) self.assertIsNone(scheme.groups['__default_group_name__']['filters']) scheme.lists = [ 'gender', 'column1c', 'q06', 'sta_wo', 'abschluss', 'q04' ] scheme.add_group(name='Apple', filter='ownership==1') self.assertIn('Apple', scheme.groups) scheme.add_group(name='Samsung', filter={'ownership': 2}) self.assertIn('Samsung', scheme.groups) # Try an invalid filter # It should not contain any filters since it was called incorrectly with self.assertRaises(Exception): scheme.add_group(name='Motorola', filter='ownership3') # Check to see if the available methods to add filter are equal self.assertEqual(scheme.groups['Samsung']['filters']['ownership'], 2) self.assertEqual(scheme.groups['Apple']['filters']['ownership'], 1) # Test for changes to valid filter scheme.group_filter(group_name='Apple', filter='ownership==8') self.assertEqual(scheme.groups['Apple']['filters']['ownership'], 8) # Test for changes to an non-existing filter, NOTE: the group_filter function actually creates the group motorola scheme.group_filter(group_name='Motorola', filter='ownership==12') self.assertEqual(scheme.groups['Motorola']['filters']['ownership'], 12) #Test for invalid filter type #Test for invalid group with dictionary with self.assertRaises(ValueError): scheme.group_filter(group_name='Motorola', filter=[]) with self.assertRaises(ValueError): scheme.group_filter(group_name='Ferrari', filter={'ownership': 3}) # Try to change a filter for invalid group self.assertNotIn('doesnotexist', scheme.groups.keys()) # Try to make illegal changes to filter in a valid group self.assertNotEqual(scheme.groups['Apple']['filters']['ownership'], 1) with self.assertRaises(Exception): scheme.group_filter(group_name='Apple', filter='ownership1') #The targets should be empty lists for key in scheme.groups['Apple']['targets']: self.assertEqual(scheme.groups['Apple']['targets'][key], []) #Test for incorrect target change with self.assertRaises(ValueError): scheme.set_targets(group_name='Apple', targets={'gender': 1234}) #Test for setting targets to a list that wasn't given # with self.assertRaises(ValueError): # scheme.set_targets(group_name='Apple', targets={'doesnotexist': [80, 20]}) #Set valid targets valid_targets = { 'gender': [50, 50], 'column1c': [20, 18, 25, 21, 16], 'q04': [20, 55, 12.5, 12.5], 'sta_wo': [50, 50], 'abschluss': [60, 40], 'q06': [20, 20, 20, 20, 20] } scheme.set_targets(group_name='Apple', targets=valid_targets) #Test that only the most recently set targets are still in the scheme self.assertNotIn('doesnotexist', scheme.groups['Apple']['targets'].keys()) #Test that the targets were applied to the lists corrected for key in scheme.groups['Apple']['targets']: self.assertEqual(scheme.groups['Apple']['targets'][key], valid_targets[key]) #add group_targets scheme.group_targets({"Apple": 30, "Samsung": 40, "Motorola": 30}) self.assertItemsEqual(scheme._group_targets.keys(), ['Motorola', 'Apple', 'Samsung']) self.assertItemsEqual(scheme._group_targets.values(), [0.3, 0.3, 0.4])
def setUp(self): ''' Simple engine without meta - engine_A ''' path_data = 'tests/engine_A_data.csv' data = pd.read_csv(path_data) # Setup engine_A self.engine_A = WeightEngine(data=data) self.scheme_name_A1 = 'scheme_name_A1' self.scheme_name_A2 = 'scheme_name_A2' self.scheme_name_A3 = 'scheme_name_A3' # Setup schemes to use in tests self.scheme_A1 = Rim(self.scheme_name_A1) self.scheme_A1.lists = ['column1', 'column2'] self.scheme_A1.add_group( name='Senior Type 1', filter='column3==1', targets={ 'column1': [32.00, 31.00, 37.00], 'column2': [23.13, 14.32, 4.78, 4.70, 2.65, 2.61, 3.47, 31.04, 13.3] }) self.scheme_A1.add_group(name='Senior Type 2', filter='column3==1', targets={ 'column1': [33.40, 33.40, 33.20], 'column2': [ 11.11, 11.11, 11.11, 11.11, 11.11, 11.11, 11.11, 11.11, 11.11 ] }) self.scheme_A1.add_group( name='Senior Type 3', filter='column3==3', targets={ 'column1': [33.2, 29.7, 37.1], 'column2': [23.13, 14.32, 4.78, 4.70, 2.65, 2.61, 3.47, 31.04, 13.3] }) self.scheme_A1.add_group( name='Senior Type 4', filter='column3==4', targets={ 'column1': [33.2, 29.7, 37.1], 'column2': [23.13, 14.32, 4.78, 4.70, 2.65, 2.61, 3.47, 32.34, 12.00] }) self.scheme_A2 = Rim(self.scheme_name_A2) self.scheme_A2.lists = ['column1', 'column2'] self.scheme_A2.add_group( name='Senior Type 1', filter='column3==1', targets={ 'column1': [37.00, 32.00, 31.00], 'column2': [13.3, 23.13, 14.32, 4.78, 4.70, 2.65, 2.61, 3.47, 31.04] }) self.scheme_A2.add_group(name='Senior Type 2', filter='column3==1', targets={ 'column1': [33.2, 33.40, 33.40], 'column2': [ 11.11, 11.11, 11.11, 11.11, 11.11, 11.11, 11.11, 11.11, 11.11 ] }) self.scheme_A2.add_group( name='Senior Type 3', filter='column3==3', targets={ 'column1': [37.1, 33.2, 29.7], 'column2': [13.3, 23.13, 14.32, 4.78, 4.70, 2.65, 2.61, 3.47, 31.04] }) self.scheme_A2.add_group( name='Senior Type 4', filter='column3==4', targets={ 'column1': [37.1, 33.2, 29.7], 'column2': [12.00, 23.13, 14.32, 4.78, 4.70, 2.65, 2.61, 3.47, 32.34] }) self.scheme_A3 = Rim(self.scheme_name_A3) self.scheme_A3.lists = ['profile_gender'] self.scheme_A3.targets = {'profile_gender': [47, 53]} self.scheme_A3.add_group(name='11-19', filter='age_group=2', targets=self.scheme_A3.targets) self.scheme_A3.add_group(name='31-39', filter='age_group=4', targets=self.scheme_A3.targets) self.scheme_A3.add_group(name='41-49', filter='age_group=5', targets=self.scheme_A3.targets) self.scheme_A3.add_group(name='51-59', filter='age_group=6', targets=self.scheme_A3.targets) self.scheme_A3.group_targets({ '11-19': 25, '31-39': 25, '41-49': 25, '51-59': 25 }) ''' Complex engine with meta - engine_B ''' path_data = 'tests/engine_B_data.csv' path_meta = 'tests/engine_B_meta.json' data = pd.read_csv(path_data) meta = json.load(file(path_meta)) self.scheme_name_B1 = 'scheme_name_B1' engine_B = WeightEngine(data=data, meta=meta) # Setup schemes to use in tests self.scheme_B1 = Rim(self.scheme_name_B1) self.scheme_B1.lists = ['profile_gender', 'age_group']