Skip to content

v0.17.0

Compare
Choose a tag to compare
@MilesCranmer MilesCranmer released this 12 Feb 05:51
· 85 commits to master since this release
93a1cee

What's Changed

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 as PyList{Any}; see JuliaPy/PythonCall.jl#441)
    • Wrapped equation_search code with jl.PythonCall.GC.disable() to avoid multithreading-related segfaults (JuliaPy/PythonCall.jl#298)
    • Manually convert np.str_ to str before passing to variable_names, otherwise it becomes a PyArray and not a String (might be worth adding a workaround, it seems like PyJulia does this automatically)
  • (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() and python -m pysr install because JuliaCall now handles this.
    • python -m pysr install will not give a warning and do nothing.
  • (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 customizing juliapkg.json. See updated documentation for instructions.
  • (BREAKING) Switch from python -m pysr.test [test] to python -m pysr test [test].
  • Switches to pyproject.toml for building rather than setup.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
  • 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 in SymbolicRegression.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