Spaces:
Sleeping
Sleeping
Commit
·
4c9fe98
1
Parent(s):
fb2f513
Add early stop conditions to force speed testing
Browse files- test/test.py +25 -5
test/test.py
CHANGED
|
@@ -30,14 +30,22 @@ class TestPipeline(unittest.TestCase):
|
|
| 30 |
|
| 31 |
def test_linear_relation(self):
|
| 32 |
y = self.X[:, 0]
|
| 33 |
-
model = PySRRegressor(
|
|
|
|
|
|
|
|
|
|
| 34 |
model.fit(self.X, y)
|
| 35 |
print(model.equations_)
|
| 36 |
self.assertLessEqual(model.get_best()["loss"], 1e-4)
|
| 37 |
|
| 38 |
def test_multiprocessing(self):
|
| 39 |
y = self.X[:, 0]
|
| 40 |
-
model = PySRRegressor(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 41 |
model.fit(self.X, y)
|
| 42 |
print(model.equations_)
|
| 43 |
self.assertLessEqual(model.equations_.iloc[-1]["loss"], 1e-4)
|
|
@@ -55,6 +63,7 @@ class TestPipeline(unittest.TestCase):
|
|
| 55 |
# Test custom operators with constraints:
|
| 56 |
nested_constraints={"square_op": {"square_op": 3}},
|
| 57 |
constraints={"square_op": 10},
|
|
|
|
| 58 |
)
|
| 59 |
model.fit(self.X, y)
|
| 60 |
equations = model.equations_
|
|
@@ -95,6 +104,7 @@ class TestPipeline(unittest.TestCase):
|
|
| 95 |
procs=0,
|
| 96 |
temp_equation_file=True,
|
| 97 |
delete_tempfiles=False,
|
|
|
|
| 98 |
)
|
| 99 |
model.fit(X.copy(), y, weights=w)
|
| 100 |
|
|
@@ -124,6 +134,7 @@ class TestPipeline(unittest.TestCase):
|
|
| 124 |
unary_operators=[],
|
| 125 |
binary_operators=["plus"],
|
| 126 |
**self.default_test_kwargs,
|
|
|
|
| 127 |
)
|
| 128 |
self.assertTrue("None" in regressor.__repr__())
|
| 129 |
regressor.fit(X, y)
|
|
@@ -134,7 +145,7 @@ class TestPipeline(unittest.TestCase):
|
|
| 134 |
np.testing.assert_almost_equal(regressor.predict(X), y, decimal=1)
|
| 135 |
|
| 136 |
# Test if repeated fit works:
|
| 137 |
-
regressor.set_params(niterations=0, warm_start=True)
|
| 138 |
# This should exit immediately, and use the old equations
|
| 139 |
regressor.fit(X, y)
|
| 140 |
|
|
@@ -155,11 +166,18 @@ class TestPipeline(unittest.TestCase):
|
|
| 155 |
unary_operators="sq(x) = x^2",
|
| 156 |
binary_operators="plus",
|
| 157 |
extra_sympy_mappings={"sq": lambda x: x**2},
|
| 158 |
-
**
|
|
|
|
|
|
|
|
|
|
|
|
|
| 159 |
procs=0,
|
| 160 |
denoise=True,
|
|
|
|
|
|
|
| 161 |
)
|
| 162 |
model.fit(self.X, y)
|
|
|
|
| 163 |
self.assertLessEqual(model.get_best()[1]["loss"], 1e-2)
|
| 164 |
self.assertLessEqual(model.get_best()[1]["loss"], 1e-2)
|
| 165 |
|
|
@@ -191,6 +209,7 @@ class TestPipeline(unittest.TestCase):
|
|
| 191 |
**self.default_test_kwargs,
|
| 192 |
denoise=True,
|
| 193 |
nested_constraints={"/": {"+": 1, "-": 1}, "+": {"*": 4}},
|
|
|
|
| 194 |
)
|
| 195 |
model.fit(X, y, Xresampled=Xresampled)
|
| 196 |
self.assertNotIn("unused_feature", model.latex())
|
|
@@ -348,13 +367,14 @@ class TestMiscellaneous(unittest.TestCase):
|
|
| 348 |
def test_scikit_learn_compatibility(self):
|
| 349 |
"""Test PySRRegressor compatibility with scikit-learn."""
|
| 350 |
model = PySRRegressor(
|
| 351 |
-
max_evals=
|
| 352 |
verbosity=0,
|
| 353 |
progress=False,
|
| 354 |
random_state=0,
|
| 355 |
deterministic=True,
|
| 356 |
procs=0,
|
| 357 |
multithreading=False,
|
|
|
|
| 358 |
) # Return early.
|
| 359 |
|
| 360 |
check_generator = check_estimator(model, generate_only=True)
|
|
|
|
| 30 |
|
| 31 |
def test_linear_relation(self):
|
| 32 |
y = self.X[:, 0]
|
| 33 |
+
model = PySRRegressor(
|
| 34 |
+
**self.default_test_kwargs,
|
| 35 |
+
early_stop_condition="stop_if(loss, complexity) = loss < 1e-4 && complexity == 1",
|
| 36 |
+
)
|
| 37 |
model.fit(self.X, y)
|
| 38 |
print(model.equations_)
|
| 39 |
self.assertLessEqual(model.get_best()["loss"], 1e-4)
|
| 40 |
|
| 41 |
def test_multiprocessing(self):
|
| 42 |
y = self.X[:, 0]
|
| 43 |
+
model = PySRRegressor(
|
| 44 |
+
**self.default_test_kwargs,
|
| 45 |
+
procs=2,
|
| 46 |
+
multithreading=False,
|
| 47 |
+
early_stop_condition="stop_if(loss, complexity) = loss < 1e-4 && complexity == 1",
|
| 48 |
+
)
|
| 49 |
model.fit(self.X, y)
|
| 50 |
print(model.equations_)
|
| 51 |
self.assertLessEqual(model.equations_.iloc[-1]["loss"], 1e-4)
|
|
|
|
| 63 |
# Test custom operators with constraints:
|
| 64 |
nested_constraints={"square_op": {"square_op": 3}},
|
| 65 |
constraints={"square_op": 10},
|
| 66 |
+
early_stop_condition="stop_if(loss, complexity) = loss < 1e-4 && complexity == 3",
|
| 67 |
)
|
| 68 |
model.fit(self.X, y)
|
| 69 |
equations = model.equations_
|
|
|
|
| 104 |
procs=0,
|
| 105 |
temp_equation_file=True,
|
| 106 |
delete_tempfiles=False,
|
| 107 |
+
early_stop_condition="stop_if(loss, complexity) = loss < 1e-4 && complexity == 2",
|
| 108 |
)
|
| 109 |
model.fit(X.copy(), y, weights=w)
|
| 110 |
|
|
|
|
| 134 |
unary_operators=[],
|
| 135 |
binary_operators=["plus"],
|
| 136 |
**self.default_test_kwargs,
|
| 137 |
+
early_stop_condition="stop_if(loss, complexity) = loss < 1e-4 && complexity == 3",
|
| 138 |
)
|
| 139 |
self.assertTrue("None" in regressor.__repr__())
|
| 140 |
regressor.fit(X, y)
|
|
|
|
| 145 |
np.testing.assert_almost_equal(regressor.predict(X), y, decimal=1)
|
| 146 |
|
| 147 |
# Test if repeated fit works:
|
| 148 |
+
regressor.set_params(niterations=0, warm_start=True, early_stop_condition=None)
|
| 149 |
# This should exit immediately, and use the old equations
|
| 150 |
regressor.fit(X, y)
|
| 151 |
|
|
|
|
| 166 |
unary_operators="sq(x) = x^2",
|
| 167 |
binary_operators="plus",
|
| 168 |
extra_sympy_mappings={"sq": lambda x: x**2},
|
| 169 |
+
**{
|
| 170 |
+
k: v
|
| 171 |
+
for k, v in self.default_test_kwargs.items()
|
| 172 |
+
if k != "model_selection"
|
| 173 |
+
},
|
| 174 |
procs=0,
|
| 175 |
denoise=True,
|
| 176 |
+
early_stop_condition="stop_if(loss, complexity) = loss < 0.05 && complexity == 2",
|
| 177 |
+
model_selection="best",
|
| 178 |
)
|
| 179 |
model.fit(self.X, y)
|
| 180 |
+
print(model)
|
| 181 |
self.assertLessEqual(model.get_best()[1]["loss"], 1e-2)
|
| 182 |
self.assertLessEqual(model.get_best()[1]["loss"], 1e-2)
|
| 183 |
|
|
|
|
| 209 |
**self.default_test_kwargs,
|
| 210 |
denoise=True,
|
| 211 |
nested_constraints={"/": {"+": 1, "-": 1}, "+": {"*": 4}},
|
| 212 |
+
early_stop_condition="stop_if(loss, complexity) = loss < 1e-3 && complexity == 7",
|
| 213 |
)
|
| 214 |
model.fit(X, y, Xresampled=Xresampled)
|
| 215 |
self.assertNotIn("unused_feature", model.latex())
|
|
|
|
| 367 |
def test_scikit_learn_compatibility(self):
|
| 368 |
"""Test PySRRegressor compatibility with scikit-learn."""
|
| 369 |
model = PySRRegressor(
|
| 370 |
+
max_evals=1000,
|
| 371 |
verbosity=0,
|
| 372 |
progress=False,
|
| 373 |
random_state=0,
|
| 374 |
deterministic=True,
|
| 375 |
procs=0,
|
| 376 |
multithreading=False,
|
| 377 |
+
warm_start=False,
|
| 378 |
) # Return early.
|
| 379 |
|
| 380 |
check_generator = check_estimator(model, generate_only=True)
|