예제 #1
0
 def setUp(self):
     self.analog_scheme = Rim('analog')
예제 #2
0
    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])
예제 #3
0
    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']