Spaces:
Running
Running
test: non-simplifying sympify
Browse files- pysr/test/test_torch.py +24 -1
pysr/test/test_torch.py
CHANGED
|
@@ -4,6 +4,7 @@ import numpy as np
|
|
| 4 |
import pandas as pd
|
| 5 |
import sympy
|
| 6 |
|
|
|
|
| 7 |
from pysr import PySRRegressor, sympy2torch
|
| 8 |
|
| 9 |
|
|
@@ -153,10 +154,32 @@ class TestTorch(unittest.TestCase):
|
|
| 153 |
decimal=3,
|
| 154 |
)
|
| 155 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 156 |
def test_feature_selection_custom_operators(self):
|
| 157 |
rstate = np.random.RandomState(0)
|
| 158 |
X = pd.DataFrame({f"k{i}": rstate.randn(2000) for i in range(10, 21)})
|
| 159 |
-
|
|
|
|
|
|
|
|
|
|
| 160 |
y = X["k15"] ** 2 + 2 * cos_approx(X["k20"])
|
| 161 |
|
| 162 |
model = PySRRegressor(
|
|
|
|
| 4 |
import pandas as pd
|
| 5 |
import sympy
|
| 6 |
|
| 7 |
+
import pysr
|
| 8 |
from pysr import PySRRegressor, sympy2torch
|
| 9 |
|
| 10 |
|
|
|
|
| 154 |
decimal=3,
|
| 155 |
)
|
| 156 |
|
| 157 |
+
def test_avoid_simplification(self):
|
| 158 |
+
# SymPy should not simplify without permission
|
| 159 |
+
torch = self.torch
|
| 160 |
+
ex = pysr.export_sympy.pysr2sympy(
|
| 161 |
+
"square(exp(sign(0.44796443))) + 1.5 * x1",
|
| 162 |
+
# ^ Normally this would become exp1 and require
|
| 163 |
+
# its own mapping
|
| 164 |
+
feature_names_in=["x1"],
|
| 165 |
+
extra_sympy_mappings={"square": lambda x: x**2},
|
| 166 |
+
)
|
| 167 |
+
m = pysr.export_torch.sympy2torch(ex, ["x1"])
|
| 168 |
+
rng = np.random.RandomState(0)
|
| 169 |
+
X = rng.randn(10, 1)
|
| 170 |
+
np.testing.assert_almost_equal(
|
| 171 |
+
m(torch.tensor(X)).detach().numpy(),
|
| 172 |
+
np.square(np.exp(np.sign(0.44796443))) + 1.5 * X[:, 0],
|
| 173 |
+
decimal=3,
|
| 174 |
+
)
|
| 175 |
+
|
| 176 |
def test_feature_selection_custom_operators(self):
|
| 177 |
rstate = np.random.RandomState(0)
|
| 178 |
X = pd.DataFrame({f"k{i}": rstate.randn(2000) for i in range(10, 21)})
|
| 179 |
+
|
| 180 |
+
def cos_approx(x):
|
| 181 |
+
return 1 - (x**2) / 2 + (x**4) / 24 + (x**6) / 720
|
| 182 |
+
|
| 183 |
y = X["k15"] ** 2 + 2 * cos_approx(X["k20"])
|
| 184 |
|
| 185 |
model = PySRRegressor(
|