What's Changed
* Bump docker/build-push-action from 3 to 5 by dependabot in https://github.com/MilesCranmer/PySR/pull/510
* Bump actions/cache from 3 to 4 by dependabot in https://github.com/MilesCranmer/PySR/pull/526
* Update colab notebook to use juliaup by MilesCranmer in https://github.com/MilesCranmer/PySR/pull/531
* Bump peter-evans/create-pull-request from 5 to 6 by dependabot in https://github.com/MilesCranmer/PySR/pull/539
* (BREAKING) Rewrite Julia interface with PyJulia -> JuliaCall; other changes by MilesCranmer cjdoris mkitti in https://github.com/MilesCranmer/PySR/pull/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 as `PyList{Any}`; see https://github.com/JuliaPy/PythonCall.jl/issues/441)
- Wrapped `equation_search` code with `jl.PythonCall.GC.disable()` to avoid multithreading-related segfaults (https://github.com/JuliaPy/PythonCall.jl/issues/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:
python
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**: https://github.com/MilesCranmer/PySR/compare/v0.16.9...v0.17.0