Spaces:
Sleeping
Sleeping
Commit
·
744d6e2
1
Parent(s):
25e2bc3
Use shared env instead of temp directory
Browse files- pysr/sr.py +16 -16
pysr/sr.py
CHANGED
|
@@ -15,6 +15,8 @@ from sklearn.base import BaseEstimator, RegressorMixin
|
|
| 15 |
from collections import OrderedDict
|
| 16 |
from hashlib import sha256
|
| 17 |
|
|
|
|
|
|
|
| 18 |
is_julia_warning_silenced = False
|
| 19 |
|
| 20 |
|
|
@@ -26,7 +28,7 @@ def install(julia_project=None, quiet=False): # pragma: no cover
|
|
| 26 |
|
| 27 |
julia.install(quiet=quiet)
|
| 28 |
|
| 29 |
-
julia_project,
|
| 30 |
|
| 31 |
Main = init_julia()
|
| 32 |
Main.eval("using Pkg")
|
|
@@ -36,8 +38,10 @@ def install(julia_project=None, quiet=False): # pragma: no cover
|
|
| 36 |
|
| 37 |
# Can't pass IO to Julia call as it evaluates to PyObject, so just directly
|
| 38 |
# use Main.eval:
|
| 39 |
-
Main.eval(
|
| 40 |
-
|
|
|
|
|
|
|
| 41 |
# Install SymbolicRegression.jl:
|
| 42 |
_add_sr_to_julia_project(Main, io_arg)
|
| 43 |
|
|
@@ -73,8 +77,8 @@ sympy_mappings = {
|
|
| 73 |
"div": lambda x, y: x / y,
|
| 74 |
"mult": lambda x, y: x * y,
|
| 75 |
"sqrt_abs": lambda x: sympy.sqrt(abs(x)),
|
| 76 |
-
"square": lambda x: x**2,
|
| 77 |
-
"cube": lambda x: x**3,
|
| 78 |
"plus": lambda x, y: x + y,
|
| 79 |
"sub": lambda x, y: x - y,
|
| 80 |
"neg": lambda x: -x,
|
|
@@ -277,16 +281,12 @@ class CallableEquation:
|
|
| 277 |
|
| 278 |
def _get_julia_project(julia_project):
|
| 279 |
if julia_project is None:
|
| 280 |
-
|
| 281 |
-
|
| 282 |
-
tmp_dir = tempfile.mkdtemp()
|
| 283 |
-
tmp_dir = Path(tmp_dir)
|
| 284 |
-
# Will create Project.toml in temp dir:
|
| 285 |
-
julia_project = tmp_dir
|
| 286 |
else:
|
| 287 |
-
|
| 288 |
julia_project = Path(julia_project)
|
| 289 |
-
return julia_project,
|
| 290 |
|
| 291 |
|
| 292 |
def silence_julia_warning():
|
|
@@ -1010,7 +1010,7 @@ class PySRRegressor(BaseEstimator, RegressorMixin):
|
|
| 1010 |
else:
|
| 1011 |
X, y = _denoise(X, y, Xresampled=Xresampled)
|
| 1012 |
|
| 1013 |
-
self.julia_project,
|
| 1014 |
|
| 1015 |
tmpdir = Path(tempfile.mkdtemp(dir=self.params["tempdir"]))
|
| 1016 |
|
|
@@ -1044,11 +1044,11 @@ class PySRRegressor(BaseEstimator, RegressorMixin):
|
|
| 1044 |
io_arg = f"io={io}" if is_julia_version_greater_eq(Main, "1.6") else ""
|
| 1045 |
|
| 1046 |
Main.eval(
|
| 1047 |
-
f'Pkg.activate("{_escape_filename(self.julia_project)}", {io_arg})'
|
| 1048 |
)
|
| 1049 |
from julia.api import JuliaError
|
| 1050 |
|
| 1051 |
-
if
|
| 1052 |
# Install SymbolicRegression.jl:
|
| 1053 |
_add_sr_to_julia_project(Main, io_arg)
|
| 1054 |
|
|
|
|
| 15 |
from collections import OrderedDict
|
| 16 |
from hashlib import sha256
|
| 17 |
|
| 18 |
+
from .version import __version__
|
| 19 |
+
|
| 20 |
is_julia_warning_silenced = False
|
| 21 |
|
| 22 |
|
|
|
|
| 28 |
|
| 29 |
julia.install(quiet=quiet)
|
| 30 |
|
| 31 |
+
julia_project, is_shared = _get_julia_project(julia_project)
|
| 32 |
|
| 33 |
Main = init_julia()
|
| 34 |
Main.eval("using Pkg")
|
|
|
|
| 38 |
|
| 39 |
# Can't pass IO to Julia call as it evaluates to PyObject, so just directly
|
| 40 |
# use Main.eval:
|
| 41 |
+
Main.eval(
|
| 42 |
+
f'Pkg.activate("{_escape_filename(julia_project)}", shared = Bool({int(is_shared)}), {io_arg})'
|
| 43 |
+
)
|
| 44 |
+
if is_shared:
|
| 45 |
# Install SymbolicRegression.jl:
|
| 46 |
_add_sr_to_julia_project(Main, io_arg)
|
| 47 |
|
|
|
|
| 77 |
"div": lambda x, y: x / y,
|
| 78 |
"mult": lambda x, y: x * y,
|
| 79 |
"sqrt_abs": lambda x: sympy.sqrt(abs(x)),
|
| 80 |
+
"square": lambda x: x ** 2,
|
| 81 |
+
"cube": lambda x: x ** 3,
|
| 82 |
"plus": lambda x, y: x + y,
|
| 83 |
"sub": lambda x, y: x - y,
|
| 84 |
"neg": lambda x: -x,
|
|
|
|
| 281 |
|
| 282 |
def _get_julia_project(julia_project):
|
| 283 |
if julia_project is None:
|
| 284 |
+
is_shared = True
|
| 285 |
+
julia_project = f"pysr-{__version__}"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 286 |
else:
|
| 287 |
+
is_shared = False
|
| 288 |
julia_project = Path(julia_project)
|
| 289 |
+
return julia_project, is_shared
|
| 290 |
|
| 291 |
|
| 292 |
def silence_julia_warning():
|
|
|
|
| 1010 |
else:
|
| 1011 |
X, y = _denoise(X, y, Xresampled=Xresampled)
|
| 1012 |
|
| 1013 |
+
self.julia_project, is_shared = _get_julia_project(self.julia_project)
|
| 1014 |
|
| 1015 |
tmpdir = Path(tempfile.mkdtemp(dir=self.params["tempdir"]))
|
| 1016 |
|
|
|
|
| 1044 |
io_arg = f"io={io}" if is_julia_version_greater_eq(Main, "1.6") else ""
|
| 1045 |
|
| 1046 |
Main.eval(
|
| 1047 |
+
f'Pkg.activate("{_escape_filename(self.julia_project)}", shared = Bool({int(is_shared)}), {io_arg})'
|
| 1048 |
)
|
| 1049 |
from julia.api import JuliaError
|
| 1050 |
|
| 1051 |
+
if is_shared:
|
| 1052 |
# Install SymbolicRegression.jl:
|
| 1053 |
_add_sr_to_julia_project(Main, io_arg)
|
| 1054 |
|