Spaces:
Sleeping
Sleeping
Commit
·
6e2fc47
1
Parent(s):
3ac3213
Add workaround for statically-linked libpython
Browse files- pysr/__init__.py +10 -1
- pysr/sr.py +50 -13
pysr/__init__.py
CHANGED
|
@@ -1,4 +1,13 @@
|
|
| 1 |
-
from .sr import
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2 |
from .feynman_problems import Problem, FeynmanProblem
|
| 3 |
from .export_jax import sympy2jax
|
| 4 |
from .export_torch import sympy2torch
|
|
|
|
| 1 |
+
from .sr import (
|
| 2 |
+
pysr,
|
| 3 |
+
get_hof,
|
| 4 |
+
best,
|
| 5 |
+
best_tex,
|
| 6 |
+
best_callable,
|
| 7 |
+
best_row,
|
| 8 |
+
install,
|
| 9 |
+
silence_julia_warning,
|
| 10 |
+
)
|
| 11 |
from .feynman_problems import Problem, FeynmanProblem
|
| 12 |
from .export_jax import sympy2jax
|
| 13 |
from .export_torch import sympy2torch
|
pysr/sr.py
CHANGED
|
@@ -12,6 +12,8 @@ from datetime import datetime
|
|
| 12 |
import warnings
|
| 13 |
from multiprocessing import cpu_count
|
| 14 |
|
|
|
|
|
|
|
| 15 |
|
| 16 |
def install(julia_project=None):
|
| 17 |
import julia
|
|
@@ -20,6 +22,7 @@ def install(julia_project=None):
|
|
| 20 |
|
| 21 |
julia_project = _get_julia_project(julia_project)
|
| 22 |
|
|
|
|
| 23 |
from julia import Pkg
|
| 24 |
|
| 25 |
Pkg.activate(f"{_escape_filename(julia_project)}")
|
|
@@ -293,19 +296,7 @@ def pysr(
|
|
| 293 |
if multithreading:
|
| 294 |
os.environ["JULIA_NUM_THREADS"] = str(procs)
|
| 295 |
|
| 296 |
-
|
| 297 |
-
|
| 298 |
-
info = JuliaInfo.load(julia="julia")
|
| 299 |
-
if not info.is_pycall_built():
|
| 300 |
-
raise ImportError(
|
| 301 |
-
"""
|
| 302 |
-
Required dependencies are not installed or built. Run the following code in the Python REPL:
|
| 303 |
-
|
| 304 |
-
>>> import pysr
|
| 305 |
-
>>> pysr.install()"""
|
| 306 |
-
)
|
| 307 |
-
|
| 308 |
-
from julia import Main
|
| 309 |
|
| 310 |
buffer_available = "buffer" in sys.stdout.__dir__()
|
| 311 |
|
|
@@ -964,3 +955,49 @@ def _get_julia_project(julia_project):
|
|
| 964 |
if julia_project is None:
|
| 965 |
return pkg_directory
|
| 966 |
return Path(julia_project)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
import warnings
|
| 13 |
from multiprocessing import cpu_count
|
| 14 |
|
| 15 |
+
is_julia_warning_silenced = False
|
| 16 |
+
|
| 17 |
|
| 18 |
def install(julia_project=None):
|
| 19 |
import julia
|
|
|
|
| 22 |
|
| 23 |
julia_project = _get_julia_project(julia_project)
|
| 24 |
|
| 25 |
+
init_julia()
|
| 26 |
from julia import Pkg
|
| 27 |
|
| 28 |
Pkg.activate(f"{_escape_filename(julia_project)}")
|
|
|
|
| 296 |
if multithreading:
|
| 297 |
os.environ["JULIA_NUM_THREADS"] = str(procs)
|
| 298 |
|
| 299 |
+
Main = init_julia()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 300 |
|
| 301 |
buffer_available = "buffer" in sys.stdout.__dir__()
|
| 302 |
|
|
|
|
| 955 |
if julia_project is None:
|
| 956 |
return pkg_directory
|
| 957 |
return Path(julia_project)
|
| 958 |
+
|
| 959 |
+
|
| 960 |
+
def silence_julia_warning():
|
| 961 |
+
global is_julia_warning_silenced
|
| 962 |
+
is_julia_warning_silenced = True
|
| 963 |
+
|
| 964 |
+
|
| 965 |
+
def init_julia():
|
| 966 |
+
"""Initialize julia binary, turning off compiled modules if needed."""
|
| 967 |
+
global is_julia_warning_silenced
|
| 968 |
+
from julia.core import JuliaInfo, UnsupportedPythonError
|
| 969 |
+
|
| 970 |
+
info = JuliaInfo.load(julia="julia")
|
| 971 |
+
if not info.is_pycall_built():
|
| 972 |
+
raise ImportError(
|
| 973 |
+
"""
|
| 974 |
+
Required dependencies are not installed or built. Run the following code in the Python REPL:
|
| 975 |
+
|
| 976 |
+
>>> import pysr
|
| 977 |
+
>>> pysr.install()"""
|
| 978 |
+
)
|
| 979 |
+
|
| 980 |
+
Main = None
|
| 981 |
+
try:
|
| 982 |
+
from julia import Main as _Main
|
| 983 |
+
|
| 984 |
+
Main = _Main
|
| 985 |
+
except UnsupportedPythonError:
|
| 986 |
+
if not is_julia_warning_silenced:
|
| 987 |
+
warnings.warn(
|
| 988 |
+
"""
|
| 989 |
+
Your Python version is statically linked to libpython. For example, this could be the python included with conda, or maybe your system's built-in python.
|
| 990 |
+
This will still work, but the precompilation cache for Julia will be turned off, which may result in slower startup times on the initial pysr() call.
|
| 991 |
+
|
| 992 |
+
To install a Python version that is dynamically linked to libpython, pyenv is recommended (https://github.com/pyenv/pyenv).
|
| 993 |
+
|
| 994 |
+
To silence this warning, you can run pysr.silence_julia_warning() after importing pysr."""
|
| 995 |
+
)
|
| 996 |
+
from julia.core import Julia
|
| 997 |
+
|
| 998 |
+
jl = Julia(compiled_modules=False)
|
| 999 |
+
from julia import Main as _Main
|
| 1000 |
+
|
| 1001 |
+
Main = _Main
|
| 1002 |
+
|
| 1003 |
+
return Main
|