v0.17.0
What's Changed
- Bump docker/build-push-action from 3 to 5 by @dependabot in #510
- Bump actions/cache from 3 to 4 by @dependabot in #526
- Update colab notebook to use juliaup by @MilesCranmer in #531
- Bump peter-evans/create-pull-request from 5 to 6 by @dependabot in #539
- (BREAKING) Rewrite Julia interface with PyJulia -> JuliaCall; other changes by @MilesCranmer @cjdoris @mkitti in #535
Detailed changes from #535
- (BREAKING) Changed PyJulia with JuliaCall
- Need to change
eval
->seval
- Manually converting to
Vector
when calling SymbolicRegression.jl functions (otherwise would get passed asPyList{Any}
; see JuliaPy/PythonCall.jl#441) - Wrapped
equation_search
code withjl.PythonCall.GC.disable()
to avoid multithreading-related segfaults (JuliaPy/PythonCall.jl#298) - Manually convert
np.str_
tostr
before passing tovariable_names
, otherwise it becomes aPyArray
and not aString
(might be worth adding a workaround, it seems like PyJulia does this automatically)
- Need to change
- (BREAKING) Julia is now installed automatically when you import
pysr
(via JuliaCall) - (BREAKING) The user no longer needs to run
python -m pysr install
. The install process is done by JuliaCall at import time.- Removed code related to
pysr.install()
andpython -m pysr install
because JuliaCall now handles this. python -m pysr install
will not give a warning and do nothing.
- Removed code related to
- (BREAKING) Remove the feynman problems dataset. Didn't seem good to have a dataset within a library itself.
- (BREAKING) Deprecated
julia_project
argument (ignored; no effect). The user now needs to set this up by customizingjuliapkg.json
. See updated documentation for instructions. - (BREAKING) Switch from
python -m pysr.test [test]
topython -m pysr test [test]
. - Switches to
pyproject.toml
for building rather thansetup.py
. However,setup.py install
should still work. - Dependencies are now managed by pyjuliapkg rather than the custom code we made. Simplifies things a lot!
- Rather than storing the raw julia variables in
PySRRegressor
, I am now storing a serialized version of them. This means you can now pickle the search state and warm-start the search from a file, in another Python process!- Not breaking! Because
self.raw_julia_state_
will deserialize it automatically for you
- Not breaking! Because
- SymbolicRegression is now available to import from PySR:
from pysr import SymbolicRegression as SR
x1 = SR.Node(feature=1) # Create expressions manually
- SymbolicRegression options are accessible in
<model>.julia_options_
(generated from a serialized format for pickle safety) so that the user can call a variety of functions inSymbolicRegression.jl
directly. - Deprecated various kwargs to match SymbolicRegression.jl (old names will still work, so this is not breaking):
ncyclesperiteration => ncycles_per_iteration
loss => elementwise_loss
full_objective => loss_function
- Fixes Jupyter printing by automatically loading the
juliacall.ipython
extension at import time - Adds Zygote.jl to environment by default
- Does unittesting on an example Jupyter notebook
Full Changelog: v0.16.9...v0.17.0