• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

WassimTenachi / PhySO / #7

12 Oct 2023 02:46PM UTC coverage: 83.315% (+11.2%) from 72.134%
#7

push

coveralls-python

WassimTenachi
Feynman problem tests

99 of 99 new or added lines in 1 file covered. (100.0%)

4609 of 5532 relevant lines covered (83.32%)

0.83 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

69.7
/physo/benchmark/FeynmanDataset/tests/FeynmanProblem_UnitTest.py
1
import time
1✔
2
import unittest
1✔
3
import numpy as np
1✔
4
import torch
1✔
5

6
# Internal imports
7
import physo.benchmark.FeynmanDataset.FeynmanProblem as Feyn
1✔
8

9
class FeynmanProblemTest(unittest.TestCase):
1✔
10
    def test_loading_csv(self):
1✔
11
        # Loading bulk equations
12
        try:
1✔
13
            bulk_df = Feyn.load_feynman_bulk_equations_csv(Feyn.PATH_FEYNMAN_EQS_CSV)
1✔
14
        except:
×
15
            self.fail("Failed to load bulk equations csv")
×
16
        # Loading bonus equations
17
        try:
1✔
18
            bonus_df = Feyn.load_feynman_bonus_equations_csv(Feyn.PATH_FEYNMAN_EQS_BONUS_CSV)
1✔
19
        except:
×
20
            self.fail("Failed to load bonus equations csv")
×
21

22
        assert len(bulk_df) == 100, "Bulk equations csv has wrong number of equations."
1✔
23
        assert len(bonus_df) == 20, "Bonus equations csv has wrong number of equations."
1✔
24

25
        assert np.array_equal(bulk_df.columns, bonus_df.columns), "Bulk and bonus equations dfs have different columns"
1✔
26

27
        # Loading all equations
28
        try:
1✔
29
            eqs_df = Feyn.EQS_FEYNMAN_DF
1✔
30
        except:
×
31
            self.fail("Failed to load all equations csv")
×
32

33
        assert len(eqs_df) == 120, "All equations df has wrong number of equations."
1✔
34

35
        expected_columns = np.array(['Filename', 'Name', 'Set', 'Number', 'Output', 'Formula', '# variables',
1✔
36
                           'v1_name', 'v1_low', 'v1_high', 'v2_name', 'v2_low', 'v2_high',
37
                           'v3_name', 'v3_low', 'v3_high', 'v4_name', 'v4_low', 'v4_high',
38
                           'v5_name', 'v5_low', 'v5_high', 'v6_name', 'v6_low', 'v6_high',
39
                           'v7_name', 'v7_low', 'v7_high', 'v8_name', 'v8_low', 'v8_high',
40
                           'v9_name', 'v9_low', 'v9_high', 'v10_name', 'v10_low', 'v10_high'])
41
        assert np.array_equal(eqs_df.columns,expected_columns)
1✔
42

43
        return None
1✔
44

45
    def test_get_units(self):
1✔
46

47
        # Test length
48
        assert len(Feyn.get_units("v")) == Feyn.FEYN_UNITS_VECTOR_SIZE, "Wrong length for units vector"
1✔
49
        # Test v
50
        assert np.array_equal(Feyn.get_units('v'), np.array([1., -1., 0., 0., 0.])), "Failed to get units for v"
1✔
51
        # Test a
52
        assert np.array_equal(Feyn.get_units('a'), np.array([1., -2., 0., 0., 0.])), "Failed to get units for a"
1✔
53
        # Test L_ind
54
        assert np.array_equal(Feyn.get_units('L_ind'), np.array([-2., 4., -1., 0., 2.])), "Failed to get units for L_ind"
1✔
55
        # Test mu_drift (corrected from original paper)
56
        assert np.array_equal(Feyn.get_units('mu_drift'), np.array([0., 1., -1., 0., 0.])), "Failed to get units for mu_drift"
1✔
57

58
        return None
1✔
59

60
    def test_FeynmanProblem(self):
1✔
61

62
        # Test loading a problem
63
        try:
1✔
64
            relatpb = Feyn.FeynmanProblem(eq_name ="I.15.1")
1✔
65
        except:
×
66
            self.fail("Failed to load a problem")
×
67
        assert relatpb.eq_name == "I.15.1", "Wrong eq_name."
1✔
68

69
        try:
1✔
70
            relatpb = Feyn.FeynmanProblem(18)
1✔
71
        except:
×
72
            self.fail("Failed to load a problem")
×
73
        assert relatpb.eq_name == "I.15.1", "Wrong eq_name."
1✔
74

75
        # Test variable names on sample problem
76
        expected_original_var_names = ['m_0', 'v', 'c']
1✔
77
        expected_original_y_name    = 'p'
1✔
78
        expected_standard_var_names = ['x0', 'x1', 'x2']
1✔
79
        expected_standard_y_name    = 'y'
1✔
80
        relatpb = Feyn.FeynmanProblem(18, original_var_names = True) # With original var names
1✔
81
        assert np.array_equal(relatpb.X_names,          expected_original_var_names), "Wrong X_names."
1✔
82
        assert np.array_equal(relatpb.X_names_original, expected_original_var_names), "Wrong X_names."
1✔
83
        assert np.array_equal(relatpb.y_name,          expected_original_y_name), "Wrong y_name."
1✔
84
        assert np.array_equal(relatpb.y_name_original, expected_original_y_name), "Wrong y_name."
1✔
85
        assert relatpb.n_vars == 3, "Wrong n_vars."
1✔
86

87
        relatpb = Feyn.FeynmanProblem(18, original_var_names = False) # Without original var names
1✔
88
        assert np.array_equal(relatpb.X_names,          expected_standard_var_names), "Wrong X_names."
1✔
89
        assert np.array_equal(relatpb.X_names_original, expected_original_var_names), "Wrong X_names."
1✔
90
        assert np.array_equal(relatpb.y_name,          expected_standard_y_name), "Wrong y_name."
1✔
91
        assert np.array_equal(relatpb.y_name_original, expected_original_y_name), "Wrong y_name."
1✔
92
        assert relatpb.n_vars == 3, "Wrong n_vars."
1✔
93

94
        # Test units on sample problem
95
        relatpb = Feyn.FeynmanProblem(18)
1✔
96
        assert np.array_equal(relatpb.X_units, np.array([[ 0.,  0.,  1.,  0.,  0.],
1✔
97
                                                         [ 1., -1.,  0.,  0.,  0.],
98
                                                         [ 1., -1.,  0.,  0.,  0.]])), "Wrong X_units."
99
        assert np.array_equal(relatpb.y_units, np.array([1., 0., 0., 0., 0.])), "Wrong y_units."
1✔
100

101
        # Test ranges on sample problem
102
        relatpb = Feyn.FeynmanProblem(18)
1✔
103
        assert np.array_equal(relatpb.X_lows , [1., 1., 3.]  ),  "Wrong X_lows."
1✔
104
        assert np.array_equal(relatpb.X_highs, [ 5.,  2., 10.]), "Wrong X_highs."
1✔
105

106
        return None
1✔
107

108
    def test_FeynmanProblem_datagen_all(self):
1✔
109
        verbose = False
1✔
110

111
        # Iterating through all Feynman problems (ie. equations)
112
        for i in range(Feyn.N_EQS):
1✔
113

114
            # Loading problem
115
            original_var_names = False  # replacing original symbols (e.g. theta, sigma etc.) by x0, x1 etc.
1✔
116
            # original_var_names = True  # using original symbols (e.g. theta, sigma etc.)
117
            pb = Feyn.FeynmanProblem(i, original_var_names=original_var_names)
1✔
118

119
            if verbose:
1✔
120
                print("\n------------------------ %i : %s ------------------------" % (pb.i_eq, pb.eq_name))
×
121
                print(pb)
×
122

123
                # Print expression with evaluated constants
124
                print("--- Expression with evaluated constants ---")
×
125
                print(pb.formula_sympy_eval)
×
126

127
                # Printing physical units of variables
128
                print("--- Units ---")
×
129
                print("X units : \n", pb.X_units)
×
130
                print("y units : \n", pb.y_units)
×
131

132
            # Loading data sample
133
            X_array, y_array = pb.generate_data_points(n_samples=100)
1✔
134

135
            # Printing min, max of data points and warning if absolute value is above WARN_LIM
136
            if verbose: print("--- min, max ---")
1✔
137
            WARN_LIM = 50
1✔
138
            xmin, xmax, ymin, ymax = X_array.min(), X_array.max(), y_array.min(), y_array.max()
1✔
139
            if verbose:
1✔
140
                print("X min = ", xmin)
×
141
                print("X max = ", xmax)
×
142
                print("y min = ", ymin)
×
143
                print("y max = ", ymax)
×
144
                if abs(xmin) > WARN_LIM:
×
145
                    print("-> xmin has high absolute value : %f" % (xmin))
×
146
                if abs(xmax) > WARN_LIM:
×
147
                    print("-> xmax has high absolute value : %f" % (xmax))
×
148
                if abs(ymin) > WARN_LIM:
×
149
                    print("-> ymin has high absolute value : %f" % (ymin))
×
150
                if abs(ymax) > WARN_LIM:
×
151
                    print("-> ymax has high absolute value : %f" % (ymax))
×
152

153

154
if __name__ == '__main__':
1✔
155
    unittest.main()
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc