MilesCranmer commited on
Commit
a2fd8f3
1 Parent(s): 08fbf08

Force tests to import locally

Browse files
pysr/test/__init__.py CHANGED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ from .test import runtests
2
+ from .test_env import runtests as runtests_env
3
+ from .test_jax import runtests as runtests_jax
4
+ from .test_torch import runtests as runtests_torch
pysr/test/test.py CHANGED
@@ -4,14 +4,6 @@ import inspect
4
  import unittest
5
  import numpy as np
6
  from sklearn import model_selection
7
- from pysr import PySRRegressor
8
- from pysr.sr import (
9
- run_feature_selection,
10
- _handle_feature_selection,
11
- _csv_filename_to_pkl_filename,
12
- idx_model_selection,
13
- )
14
- from pysr.export_latex import to_latex
15
  from sklearn.utils.estimator_checks import check_estimator
16
  import sympy
17
  import pandas as pd
@@ -20,6 +12,15 @@ import pickle as pkl
20
  import tempfile
21
  from pathlib import Path
22
 
 
 
 
 
 
 
 
 
 
23
  DEFAULT_PARAMS = inspect.signature(PySRRegressor.__init__).parameters
24
  DEFAULT_NITERATIONS = DEFAULT_PARAMS["niterations"].default
25
  DEFAULT_POPULATIONS = DEFAULT_PARAMS["populations"].default
@@ -856,3 +857,21 @@ class TestLaTeXTable(unittest.TestCase):
856
  + self.create_true_latex(middle_part, include_score=True)
857
  )
858
  self.assertEqual(latex_table_str, true_latex_table_str)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  import unittest
5
  import numpy as np
6
  from sklearn import model_selection
 
 
 
 
 
 
 
 
7
  from sklearn.utils.estimator_checks import check_estimator
8
  import sympy
9
  import pandas as pd
 
12
  import tempfile
13
  from pathlib import Path
14
 
15
+ from .. import PySRRegressor
16
+ from ..sr import (
17
+ run_feature_selection,
18
+ _handle_feature_selection,
19
+ _csv_filename_to_pkl_filename,
20
+ idx_model_selection,
21
+ )
22
+ from ..export_latex import to_latex
23
+
24
  DEFAULT_PARAMS = inspect.signature(PySRRegressor.__init__).parameters
25
  DEFAULT_NITERATIONS = DEFAULT_PARAMS["niterations"].default
26
  DEFAULT_POPULATIONS = DEFAULT_PARAMS["populations"].default
 
857
  + self.create_true_latex(middle_part, include_score=True)
858
  )
859
  self.assertEqual(latex_table_str, true_latex_table_str)
860
+
861
+
862
+ def runtests():
863
+ """Run all tests in test.py."""
864
+ suite = unittest.TestSuite()
865
+ loader = unittest.TestLoader()
866
+ test_cases = [
867
+ TestPipeline,
868
+ TestBest,
869
+ TestFeatureSelection,
870
+ TestMiscellaneous,
871
+ TestLaTeXTable,
872
+ ]
873
+ for test_case in test_cases:
874
+ tests = loader.loadTestsFromTestCase(test_case)
875
+ suite.addTests(tests)
876
+ runner = unittest.TextTestRunner()
877
+ return runner.run(suite)
pysr/test/test_env.py CHANGED
@@ -2,9 +2,10 @@
2
 
3
  import unittest
4
  import os
5
- from pysr import julia_helpers
6
  from tempfile import TemporaryDirectory
7
 
 
 
8
 
9
  class TestJuliaProject(unittest.TestCase):
10
  """Various tests for working with Julia projects."""
@@ -46,3 +47,12 @@ class TestJuliaProject(unittest.TestCase):
46
  del os.environ["JULIA_DEPOT_PATH"]
47
  else:
48
  os.environ["JULIA_DEPOT_PATH"] = old_env
 
 
 
 
 
 
 
 
 
 
2
 
3
  import unittest
4
  import os
 
5
  from tempfile import TemporaryDirectory
6
 
7
+ from .. import julia_helpers
8
+
9
 
10
  class TestJuliaProject(unittest.TestCase):
11
  """Various tests for working with Julia projects."""
 
47
  del os.environ["JULIA_DEPOT_PATH"]
48
  else:
49
  os.environ["JULIA_DEPOT_PATH"] = old_env
50
+
51
+
52
+ def runtests():
53
+ """Run all tests in test_env.py."""
54
+ loader = unittest.TestLoader()
55
+ suite = unittest.TestSuite()
56
+ suite.addTests(loader.loadTestsFromTestCase(TestJuliaProject))
57
+ runner = unittest.TextTestRunner()
58
+ return runner.run(suite)
pysr/test/test_jax.py CHANGED
@@ -1,18 +1,20 @@
1
  import unittest
2
  import numpy as np
3
- from pysr import sympy2jax, PySRRegressor
4
  import pandas as pd
5
- from jax import numpy as jnp
6
- from jax import random
7
  import sympy
8
  from functools import partial
9
 
 
 
10
 
11
  class TestJAX(unittest.TestCase):
12
  def setUp(self):
13
  np.random.seed(0)
14
 
15
  def test_sympy2jax(self):
 
 
 
16
  x, y, z = sympy.symbols("x y z")
17
  cosx = 1.0 * sympy.cos(x) + y
18
  key = random.PRNGKey(0)
@@ -22,6 +24,8 @@ class TestJAX(unittest.TestCase):
22
  self.assertTrue(jnp.all(jnp.isclose(f(X, params), true)).item())
23
 
24
  def test_pipeline_pandas(self):
 
 
25
  X = pd.DataFrame(np.random.randn(100, 10))
26
  y = np.ones(X.shape[0])
27
  model = PySRRegressor(
@@ -53,6 +57,8 @@ class TestJAX(unittest.TestCase):
53
  )
54
 
55
  def test_pipeline(self):
 
 
56
  X = np.random.randn(100, 10)
57
  y = np.ones(X.shape[0])
58
  model = PySRRegressor(progress=False, max_evals=10000, output_jax_format=True)
@@ -112,3 +118,12 @@ class TestJAX(unittest.TestCase):
112
 
113
  np.testing.assert_almost_equal(y.values, np_output, decimal=3)
114
  np.testing.assert_almost_equal(y.values, jax_output, decimal=3)
 
 
 
 
 
 
 
 
 
 
1
  import unittest
2
  import numpy as np
 
3
  import pandas as pd
 
 
4
  import sympy
5
  from functools import partial
6
 
7
+ from .. import sympy2jax, PySRRegressor
8
+
9
 
10
  class TestJAX(unittest.TestCase):
11
  def setUp(self):
12
  np.random.seed(0)
13
 
14
  def test_sympy2jax(self):
15
+ from jax import numpy as jnp
16
+ from jax import random
17
+
18
  x, y, z = sympy.symbols("x y z")
19
  cosx = 1.0 * sympy.cos(x) + y
20
  key = random.PRNGKey(0)
 
24
  self.assertTrue(jnp.all(jnp.isclose(f(X, params), true)).item())
25
 
26
  def test_pipeline_pandas(self):
27
+ from jax import numpy as jnp
28
+
29
  X = pd.DataFrame(np.random.randn(100, 10))
30
  y = np.ones(X.shape[0])
31
  model = PySRRegressor(
 
57
  )
58
 
59
  def test_pipeline(self):
60
+ from jax import numpy as jnp
61
+
62
  X = np.random.randn(100, 10)
63
  y = np.ones(X.shape[0])
64
  model = PySRRegressor(progress=False, max_evals=10000, output_jax_format=True)
 
118
 
119
  np.testing.assert_almost_equal(y.values, np_output, decimal=3)
120
  np.testing.assert_almost_equal(y.values, jax_output, decimal=3)
121
+
122
+
123
+ def runtests():
124
+ """Run all tests in test_jax.py."""
125
+ loader = unittest.TestLoader()
126
+ suite = unittest.TestSuite()
127
+ suite.addTests(loader.loadTestsFromTestCase(TestJAX))
128
+ runner = unittest.TextTestRunner()
129
+ return runner.run(suite)
pysr/test/test_torch.py CHANGED
@@ -1,22 +1,26 @@
1
  import unittest
2
  import numpy as np
3
  import pandas as pd
4
- from pysr import sympy2torch, PySRRegressor
 
 
5
 
6
  # Need to initialize Julia before importing torch...
7
- import platform
8
 
9
- if platform.system() == "Darwin":
10
- # Import PyJulia, then Torch
11
- from pysr.julia_helpers import init_julia
12
 
13
- Main = init_julia()
14
- import torch
15
- else:
16
- # Import Torch, then PyJulia
17
- # https://github.com/pytorch/pytorch/issues/78829
18
- import torch
19
- import sympy
 
 
 
 
 
 
20
 
21
 
22
  class TestTorch(unittest.TestCase):
@@ -24,6 +28,7 @@ class TestTorch(unittest.TestCase):
24
  np.random.seed(0)
25
 
26
  def test_sympy2torch(self):
 
27
  x, y, z = sympy.symbols("x y z")
28
  cosx = 1.0 * sympy.cos(x) + y
29
 
@@ -35,6 +40,7 @@ class TestTorch(unittest.TestCase):
35
  )
36
 
37
  def test_pipeline_pandas(self):
 
38
  X = pd.DataFrame(np.random.randn(100, 10))
39
  y = np.ones(X.shape[0])
40
  model = PySRRegressor(
@@ -69,6 +75,7 @@ class TestTorch(unittest.TestCase):
69
  )
70
 
71
  def test_pipeline(self):
 
72
  X = np.random.randn(100, 10)
73
  y = np.ones(X.shape[0])
74
  model = PySRRegressor(
@@ -103,6 +110,7 @@ class TestTorch(unittest.TestCase):
103
  )
104
 
105
  def test_mod_mapping(self):
 
106
  x, y, z = sympy.symbols("x y z")
107
  expression = x**2 + sympy.atanh(sympy.Mod(y + 1, 2) - 1) * 3.2 * z
108
 
@@ -120,6 +128,7 @@ class TestTorch(unittest.TestCase):
120
  )
121
 
122
  def test_custom_operator(self):
 
123
  X = np.random.randn(100, 3)
124
  y = np.ones(X.shape[0])
125
  model = PySRRegressor(
@@ -160,6 +169,7 @@ class TestTorch(unittest.TestCase):
160
  )
161
 
162
  def test_feature_selection_custom_operators(self):
 
163
  rstate = np.random.RandomState(0)
164
  X = pd.DataFrame({f"k{i}": rstate.randn(2000) for i in range(10, 21)})
165
  cos_approx = lambda x: 1 - (x**2) / 2 + (x**4) / 24 + (x**6) / 720
@@ -188,3 +198,12 @@ class TestTorch(unittest.TestCase):
188
 
189
  np.testing.assert_almost_equal(y.values, np_output, decimal=3)
190
  np.testing.assert_almost_equal(y.values, torch_output, decimal=3)
 
 
 
 
 
 
 
 
 
 
1
  import unittest
2
  import numpy as np
3
  import pandas as pd
4
+ import platform
5
+ import sympy
6
+ from .. import sympy2torch, PySRRegressor
7
 
8
  # Need to initialize Julia before importing torch...
 
9
 
 
 
 
10
 
11
+ def _import_torch():
12
+ if platform.system() == "Darwin":
13
+ # Import PyJulia, then Torch
14
+ from ..julia_helpers import init_julia
15
+
16
+ init_julia()
17
+
18
+ import torch
19
+ else:
20
+ # Import Torch, then PyJulia
21
+ # https://github.com/pytorch/pytorch/issues/78829
22
+ import torch
23
+ return torch
24
 
25
 
26
  class TestTorch(unittest.TestCase):
 
28
  np.random.seed(0)
29
 
30
  def test_sympy2torch(self):
31
+ torch = _import_torch()
32
  x, y, z = sympy.symbols("x y z")
33
  cosx = 1.0 * sympy.cos(x) + y
34
 
 
40
  )
41
 
42
  def test_pipeline_pandas(self):
43
+ torch = _import_torch()
44
  X = pd.DataFrame(np.random.randn(100, 10))
45
  y = np.ones(X.shape[0])
46
  model = PySRRegressor(
 
75
  )
76
 
77
  def test_pipeline(self):
78
+ torch = _import_torch()
79
  X = np.random.randn(100, 10)
80
  y = np.ones(X.shape[0])
81
  model = PySRRegressor(
 
110
  )
111
 
112
  def test_mod_mapping(self):
113
+ torch = _import_torch()
114
  x, y, z = sympy.symbols("x y z")
115
  expression = x**2 + sympy.atanh(sympy.Mod(y + 1, 2) - 1) * 3.2 * z
116
 
 
128
  )
129
 
130
  def test_custom_operator(self):
131
+ torch = _import_torch()
132
  X = np.random.randn(100, 3)
133
  y = np.ones(X.shape[0])
134
  model = PySRRegressor(
 
169
  )
170
 
171
  def test_feature_selection_custom_operators(self):
172
+ torch = _import_torch()
173
  rstate = np.random.RandomState(0)
174
  X = pd.DataFrame({f"k{i}": rstate.randn(2000) for i in range(10, 21)})
175
  cos_approx = lambda x: 1 - (x**2) / 2 + (x**4) / 24 + (x**6) / 720
 
198
 
199
  np.testing.assert_almost_equal(y.values, np_output, decimal=3)
200
  np.testing.assert_almost_equal(y.values, torch_output, decimal=3)
201
+
202
+
203
+ def runtests():
204
+ """Run all tests in test_torch.py."""
205
+ loader = unittest.TestLoader()
206
+ suite = unittest.TestSuite()
207
+ suite.addTests(loader.loadTestsFromTestCase(TestTorch))
208
+ runner = unittest.TextTestRunner()
209
+ return runner.run(suite)