Passed
Push — dev ( 5b3715...a42717 )
by Konstantinos
01:24
created

test_so_magic.test_somagic_scenario()   B

Complexity

Conditions 3

Size

Total Lines 72
Code Lines 47

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 47
dl 0
loc 72
rs 8.7345
c 0
b 0
f 0
cc 3
nop 3

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
import pytest
2
3
4
@pytest.mark.parametrize('train_args', [
5
    ([6, 8, 'toroid', 'hexagonal']),
6
    # ([12, 12, 'toroid', 'rectangular'])
7
])
8
def test_somagic_scenario(train_args, somagic, sample_collaped_json):
9
    somagic.load_data(sample_collaped_json, id='test_data')
10
    ATTRS = ['hybrid', 'indica', 'sativa']
11
    ATTRS2 = ['type_hybrid', 'type_indica', 'type_sativa']
12
    from functools import reduce
13
    UNIQUE_FLAVORS = reduce(lambda i, j: set(i).union(set(j)),
14
                            [_ for _ in somagic._data_manager.datapoints.observations['flavors'] if _ is not None])
15
16
    if not getattr(somagic.dataset, 'feature_vectors', None):
17
        cmd = somagic._data_manager.command.select_variables
18
        cmd.args = [[{'variable': 'type', 'columns': ATTRS2}, {'variable': 'flavors', 'columns': list(UNIQUE_FLAVORS)}]]
19
        cmd.execute()
20
21
        assert set([x['variable'] for x in somagic._data_manager.feature_manager.feature_configuration.variables]) == {'type', 'flavors'}
22
23
        assert all(type(x) == str for x in somagic._data_manager.datapoints.observations['type'])
24
        assert set(ATTRS) == set([_ for _ in somagic._data_manager.datapoints.observations['type']])
25
26
        import pandas as pd
27
        assert set(ATTRS) == set(pd.unique(somagic._data_manager.datapoints.observations['type']))
28
29
        cmd = somagic._data_manager.command.one_hot_encoding
30
        cmd.args = [somagic._data_manager.datapoints, 'type']
31
        cmd.execute()
32
33
        assert all(x in somagic._data_manager.datapoints.observations.columns for x in ATTRS2)
34
        assert all(sum([datarow[_] for _ in ATTRS2]) == 1 and len([datarow[_] for _ in ATTRS2 if datarow[_] == 1]) == 1 for index, datarow in somagic._data_manager.datapoints.observations[ATTRS2].iterrows())
35
36
        # cmd2
37
        assert set([type(x) for x in somagic._data_manager.datapoints.observations['flavors']]) == {list, type(None)}
38
39
        # assert all([type(x) == list for x in somagic._data_manager.datapoints.observations['flavors']])
40
41
        # set([]) pd.unique(somagic._data_manager.datapoints.observations['flavors'])
42
        MAX_FLAVORS_PER_DAATPOINT = max([len(x) for x in [_ for _ in somagic._data_manager.datapoints.observations['flavors'] if type(_) is list]])
43
        MIN = 0
44
        assert len(UNIQUE_FLAVORS) > 5
45
        nb_columns_before = len(somagic._data_manager.datapoints.observations.columns)
46
47
        cmd = somagic._data_manager.command.one_hot_encoding_list
48
        cmd.args = [somagic._data_manager.datapoints, 'flavors']
49
        cmd.execute()
50
51
        assert nb_columns_before + len(UNIQUE_FLAVORS) == len(somagic._data_manager.datapoints.observations.columns)
52
53
        assert all(x in somagic._data_manager.datapoints.observations.columns for x in UNIQUE_FLAVORS)
54
        assert all(0 <= sum([datarow[_] for _ in UNIQUE_FLAVORS]) <= MAX_FLAVORS_PER_DAATPOINT for index, datarow in somagic._data_manager.datapoints.observations[list(UNIQUE_FLAVORS)].iterrows())
55
56
    import numpy as np
57
    setattr(somagic.dataset, 'feature_vectors', np.array(somagic._data_manager.datapoints.observations[ATTRS2 + list(UNIQUE_FLAVORS)]))
58
    # somagic.dataset.feature_vectors = np.array(somagic._data_manager.datapoints.observations[ATTRS2 + list(UNIQUE_FLAVORS)])
59
60
    assert hasattr(somagic.dataset, 'feature_vectors')
61
62
    print("ID", id(somagic.dataset))
63
    som = somagic.map.train(*train_args[:2], maptype=train_args[2], gridtype=train_args[3])
64
65
    attrs = ('height', 'width', 'type', 'grid_type')
66
    assert hasattr(som, 'dataset_name')
67
68
    assert som.dataset_name == sample_collaped_json
69
70
    assert all(hasattr(som, x) for x in attrs)
71
72
    assert som.width == train_args[0]
73
    assert som.height == train_args[1]
74
    assert som.type == train_args[2]
75
    assert som.grid_type == train_args[3]
76
77
78
@pytest.mark.parametrize('nb_objects, nb_observers', [
79
    (2, [(1, 1, 1),
80
         (1, 1, 1)]),
81
])
82
def test_somagic_objects(nb_objects, nb_observers):
83
    from green_magic import init_so_magic
84
    so_magic_instances = [init_so_magic() for _ in range(nb_objects)]
85
86
    assert id(so_magic_instances[0]._data_manager.backend) != id(so_magic_instances[1]._data_manager.backend)
87
    assert id(so_magic_instances[0]._data_manager.backend.engine) != id(so_magic_instances[1]._data_manager.backend.engine)
88
    assert id(so_magic_instances[0]._data_manager.backend.datapoints_manager) != id(so_magic_instances[1]._data_manager.backend.datapoints_manager)
89
90
    assert id(so_magic_instances[0]._data_manager.backend.datapoints_factory) != id(so_magic_instances[1]._data_manager.backend.datapoints_factory)
91
    assert id(so_magic_instances[0]._data_manager.backend.datapoints_factory.subject) != id(so_magic_instances[1]._data_manager.backend.datapoints_factory.subject)
92
    assert id(so_magic_instances[0]._data_manager.backend.datapoints_factory.subject._observers) != id(so_magic_instances[1]._data_manager.backend.datapoints_factory.subject._observers)
93
94
    assert id(so_magic_instances[0]._data_manager.backend.engine.command_factory) != id(so_magic_instances[1]._data_manager.backend.engine.command_factory)
95
96
    assert so_magic_instances[0]._data_manager.phi_class != so_magic_instances[1]._data_manager.phi_class
97
    assert id(so_magic_instances[0]._data_manager.phi_class) != id(so_magic_instances[1]._data_manager.phi_class)
98
    assert id(so_magic_instances[0]._data_manager.phi_class.subject) != id(so_magic_instances[1]._data_manager.phi_class.subject)
99
    assert id(so_magic_instances[0]._data_manager.phi_class.subject._observers) != id(so_magic_instances[1]._data_manager.phi_class.subject._observers)
100
101
    for i, s in enumerate(so_magic_instances):
102
        datapoints_fact = s._data_manager.backend.datapoints_factory
103
        cmd_fact = s._data_manager.backend.engine.command_factory
104
        phi_class = s._data_manager.phi_class
105
106
        subjects = [datapoints_fact.subject,
107
                    cmd_fact,
108
                    phi_class.subject
109
                    ]
110
        assert len(set([id(x._observers) for x in subjects])) == len(subjects)
111
112
        assert datapoints_fact.subject._observers[0] == s._data_manager.backend.datapoints_manager
113
        assert cmd_fact._observers[0] == s._data_manager.commands_manager.command.accumulator
114
        assert phi_class.subject._observers[0] == s._data_manager.built_phis
115
        assert all([len(subject._observers) == column for subject, column in zip(subjects, nb_observers[i])])
116