Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
101 commits
Select commit Hold shift + click to select a range
36b2228
chore(deps): consolidate npm/docs dependency bumps (#1237)
MilesCranmerBot Jun 28, 2026
61e656a
chore: sync docs npm dependencies (#1252)
MilesCranmerBot Jul 2, 2026
b7a9932
ci: reduce low-signal Actions usage (#1241)
MilesCranmerBot Jul 13, 2026
5137ed7
chore(deps): bump actions/cache from 5 to 6 (#1243)
dependabot[bot] Jul 13, 2026
da89979
ci: restore Docker large nightly workflow validation (#1259)
MilesCranmerBot Jul 13, 2026
88cd5fa
chore(deps): bump julia-actions/cache from 2 to 3 (#1244)
dependabot[bot] Jul 13, 2026
3a38748
chore(deps): bump googleapis/release-please-action from 4 to 5 (#1261)
dependabot[bot] Jul 15, 2026
58d6844
chore(deps): bump codecov/codecov-action from 5 to 7 (#1260)
dependabot[bot] Jul 15, 2026
49f44a4
feat!: switch to SlurmClusterManager.jl for slurm allocations (#794)
MilesCranmer Jul 18, 2026
899a815
chore(deps): bump conda-incubator/setup-miniconda from 3 to 4 (#1266)
dependabot[bot] Jul 18, 2026
db7c7b9
chore(deps): bump actions/setup-node from 6 to 7 (#1265)
dependabot[bot] Jul 18, 2026
fdedcc8
docs: add agent skill for using PySR effectively (#1264)
MilesCranmer Jul 24, 2026
2bd7db2
docs: use Float32 literals in custom loss example (#1276)
MilesCranmerBot Aug 3, 2026
5ecf2f5
chore: update repo URLs after transfer to astroautomata/PySR (#1272)
MilesCranmerBot Aug 3, 2026
d5f0bb0
feat!: remove ParametricExpressionSpec (#1277)
MilesCranmerBot Aug 4, 2026
f4dc86b
fix!: enable annealing by default (#1283)
MilesCranmerBot Aug 10, 2026
ed1948c
ci: use trusted publishing for PyPI (#1256)
MilesCranmerBot Aug 10, 2026
6de3ce8
refactor: delegate automatic batching to backend (#1285)
MilesCranmerBot Aug 10, 2026
10b3637
docs: update contributors list (#1286)
MilesCranmerBot Aug 10, 2026
e20c880
feat: expose new plugin interface + upgrade to v2.0.0-beta.3 (#1282)
MilesCranmerBot Aug 10, 2026
b89f920
feat: set precompile_float64=false preference for SymbolicRegression …
MilesCranmerBot Aug 10, 2026
37711d4
chore: release 2.0.0b1
MilesCranmerBot Aug 11, 2026
2b8d8d3
chore: release 2.0.0b1
MilesCranmer Aug 11, 2026
55834ba
chore: release 2.0.0-beta.1
MilesCranmerBot Aug 11, 2026
9cfb720
chore: release 2.0.0-beta.1
MilesCranmer Aug 11, 2026
085cad0
chore(master): release 2.0.0-beta.1
github-actions[bot] Aug 11, 2026
71242e8
fix: avoid duplicate PyPI attestations (#1292)
MilesCranmerBot Aug 11, 2026
4f17f44
chore(deps): bump actions/setup-python from 5 to 7 (#1268)
dependabot[bot] Aug 11, 2026
e2a159b
feat: support custom value types via TypeSpec (#1280)
MilesCranmerBot Aug 18, 2026
30aa53f
chore(master): release 2.0.0-beta.2 (#1293)
github-actions[bot] Aug 18, 2026
b99a314
docs: replace python feature card (#1303)
MilesCranmerBot Aug 20, 2026
3f37488
deps: raise jax, ipython, ipykernel, and pytest-cov ceilings (#1307)
MilesCranmerBot Aug 20, 2026
0d78783
fix: preserve custom JAX mappings in checkpoints (#1199)
MilesCranmerBot Aug 20, 2026
b49c627
test: fix search until exact type spec result (#1305)
MilesCranmerBot Aug 21, 2026
459a720
docs: add PDE discovery example and skill guidance (#1311)
MilesCranmerBot Aug 21, 2026
494798e
deps: raise juliacall ceiling to 0.9.36 (#1312)
MilesCranmerBot Aug 21, 2026
b0bb321
docs: add PySR v1 to v2 migration guide (#1302)
MilesCranmerBot Aug 22, 2026
78166cd
chore(master): release 2.0.0-beta.3 (#1304)
github-actions[bot] Aug 22, 2026
85c2cc6
test: cover fresh-process unpickling of template expressions (#1313)
MilesCranmerBot Aug 22, 2026
a42f606
ci: clarify conda-forge package canary (#1314)
MilesCranmerBot Aug 24, 2026
6115158
feat: support guesses with custom types (#1316)
MilesCranmerBot Aug 24, 2026
74e0e8d
chore(master): release 2.0.0-beta.4 (#1317)
github-actions[bot] Aug 24, 2026
a84b0fc
chore: release 2.0.0 (#1318)
MilesCranmer Aug 25, 2026
d64ef62
docs: update SKILL.md to v2 (#1321)
MilesCranmerBot Aug 26, 2026
7727b01
docs: add two research showcase papers (#1323)
MilesCranmerBot Aug 27, 2026
5bd53f6
feat: stop searches gracefully on interrupt instead of killing the ke…
MilesCranmerBot Aug 29, 2026
b3f91a1
feat: stop autoloading the juliacall IPython extension by default (#1…
MilesCranmerBot Aug 29, 2026
4f59582
chore(master): release 2.1.0 (#1322)
github-actions[bot] Aug 29, 2026
493c7f6
chore: group Dependabot npm version updates (#1320)
MilesCranmerBot Aug 30, 2026
9909624
docs: correct AdaptiveMutationWeightsPlugin default state (#1332)
MilesCranmerBot Sep 1, 2026
11b9815
test: give the multithreaded type spec search enough budget (#1331)
MilesCranmerBot Sep 1, 2026
82c5d70
docs: update the stable redirect on every release (#1328)
MilesCranmerBot Sep 1, 2026
b15bf62
feat: release the GIL during the search (#1330)
MilesCranmerBot Sep 1, 2026
e180079
feat: stop searches gracefully on Windows interrupts (#1329)
MilesCranmerBot Sep 2, 2026
65b887a
chore(master): release 2.2.0 (#1333)
github-actions[bot] Sep 2, 2026
b87067a
fix: require juliacall 0.9.29+ and Python 3.10+ (#1335)
MilesCranmerBot Sep 2, 2026
f8ffb0e
chore(master): release 2.2.1 (#1341)
github-actions[bot] Sep 2, 2026
8ffc78a
docs: replace README header video with a logo hero (#1342)
MilesCranmerBot Sep 2, 2026
21e2ed5
docs: tweak badges (#1344)
MilesCranmerBot Sep 3, 2026
e694439
feat: expose search tracing on PySRRegressor (#1347)
MilesCranmerBot Sep 3, 2026
5114e66
docs: generate legacy top-level redirects from the stable release (#1…
MilesCranmerBot Sep 3, 2026
24cc669
docs: redirect nested documentation pages through stable (#1348)
MilesCranmerBot Sep 4, 2026
203f13c
fix: migrate tracing to JSON with SymbolicRegression 2.4 (#1354)
MilesCranmerBot Sep 6, 2026
fe41c38
feat: seed template parameters through guesses (#1352)
MilesCranmerBot Sep 6, 2026
567ed69
fix(docker): use Debian Trixie base (#1356)
MilesCranmerBot Sep 7, 2026
0caa20a
docs: clarify guesses and template parameters (#1353)
MilesCranmerBot Sep 7, 2026
4abb9e1
chore(master): release 2.3.0 (#1343)
github-actions[bot] Sep 7, 2026
61b9027
fix: restore Python executable for JuliaCall 0.9.35 (#1362)
MilesCranmerBot Sep 10, 2026
ea70a6c
chore(master): release 2.3.1 (#1363)
github-actions[bot] Sep 10, 2026
4c61b90
feat: add TypeSpec definitions for methods on the generated type (#1359)
MilesCranmerBot Sep 10, 2026
f3420e8
feat: add an optional invalid value hook (#1361)
MilesCranmerBot Sep 10, 2026
3406f1a
ci: use Dockerfile defaults for Docker deployment (#1365)
MilesCranmerBot Sep 10, 2026
11d1ae2
docs: update README and documentation to the new PySR logo (#1357)
MilesCranmerBot Sep 10, 2026
9eb5eca
chore(master): release 2.4.0 (#1364)
github-actions[bot] Sep 10, 2026
1129d79
ci: speed up tests and split CI into four shards (#1366)
MilesCranmerBot Sep 16, 2026
49773c3
docs: expand examples and split into topic pages (#1350)
MilesCranmerBot Sep 16, 2026
876d3bb
docs: restore accurate Python API feature card (#1368)
MilesCranmerBot Sep 16, 2026
240ed5d
chore(master): release 2.4.1 (#1367)
github-actions[bot] Sep 16, 2026
aecba32
docs: link Julia docs to the pinned backend version (#1370)
MilesCranmerBot Sep 17, 2026
b566bdb
docs: document complexity_mapping, guesses in SKILL (#1372)
MilesCranmerBot Sep 17, 2026
8507021
docs: fix <details> headings (#1374)
MilesCranmerBot Sep 18, 2026
57ed43a
docs: compress agent skill (#1375)
MilesCranmerBot Sep 18, 2026
258872e
docs: explain agent skill installation in README (#1377)
MilesCranmerBot Sep 18, 2026
51aea3e
deps: require JuliaCall 0.9.36 and remove workaround (#1380)
MilesCranmerBot Sep 20, 2026
5f14395
feat: enable concurrent GC sweeping by default (#1379)
MilesCranmerBot Sep 20, 2026
ad266a8
chore(master): release 2.5.0 (#1373)
github-actions[bot] Sep 20, 2026
7873cfa
docs: serve documentation at pysr.ai (#1384)
MilesCranmerBot Sep 23, 2026
e999da7
docs: point Julia documentation links to julia.pysr.ai (#1387)
MilesCranmerBot Sep 23, 2026
e5b5454
docs: fix broken links, version menu, same-tab nav, and favicon (#1388)
MilesCranmerBot Sep 24, 2026
da64e04
fix: stop searches gracefully on Windows console Ctrl-C (#1386)
MilesCranmerBot Sep 27, 2026
bdc5f9b
chore: update backend to v2.4.2 (#1390)
github-actions[bot] Sep 27, 2026
58e238e
chore(master): release 2.5.1 (#1385)
github-actions[bot] Sep 27, 2026
f60d7e4
docs: update moved UAV skin friction paper link (#1391)
MilesCranmerBot Sep 27, 2026
415700d
perf: copy NumPy fit data through PyArray (#1393)
MilesCranmerBot Sep 28, 2026
6954e4f
test: compare JAX and Torch exports with the fitted equation (#1397)
MilesCranmerBot Sep 28, 2026
81cb12b
perf: pass operators and constraints to Julia as typed values (#1394)
MilesCranmerBot Sep 28, 2026
bfba1b6
perf: check for Julia functions with isa (#1395)
MilesCranmerBot Sep 28, 2026
cc0df52
chore(master): release 2.5.2 (#1392)
github-actions[bot] Sep 28, 2026
e5461b9
chore: update backend to v2.5.0 (#1398)
github-actions[bot] Sep 29, 2026
a59fbb7
chore(master): release 2.6.0
MilesCranmer Sep 29, 2026
94a37d2
docs: describe backend changes in 2.6.0 release notes
MilesCranmerBot Sep 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,14 @@ updates:
directory: "/docs"
schedule:
interval: "daily"
groups:
js-deps:
patterns:
- "*"
update-types:
- "major"
- "minor"
- "patch"

- package-ecosystem: "pip"
directory: "/"
Expand Down
129 changes: 75 additions & 54 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,106 +3,117 @@ name: Linux
on:
push:
branches:
- '**'
- master
- 'release-*'
paths:
- '**'
tags:
- 'v*.*.*'
pull_request:
branches:
- 'master'
- 'release-*'
paths:
- '**'
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

permissions:
contents: write

jobs:
test:
runs-on: ${{ matrix.os }}
name: Test (${{ matrix.config.test-id }}, Julia ${{ matrix.config.julia-version }}, Python ${{ matrix.config.python-version }}, shard ${{ matrix.shard-index }})
runs-on: ${{ matrix.config.os }}
timeout-minutes: 60
env:
COVERAGE_PROCESS_START: "${{ github.workspace }}/.coveragerc"
defaults:
run:
shell: bash
strategy:
fail-fast: false
matrix:
julia-version: ['1']
python-version: ['3.13']
os: [ubuntu-latest]
test-id: [main]
include:
- julia-version: '1.10'
python-version: '3.10'
os: ubuntu-latest
test-id: include
- julia-version: '1'
python-version: '3.13'
os: ubuntu-latest
test-id: include
- julia-version: '1'
python-version: '3.9'
os: ubuntu-latest
test-id: include

config:
- {julia-version: '1', python-version: '3.14', os: ubuntu-latest, test-id: main}
- {julia-version: '1.10', python-version: '3.10', os: ubuntu-latest, test-id: include}
- {julia-version: '1', python-version: '3.14', os: ubuntu-latest, test-id: include}
- {julia-version: '1', python-version: '3.10', os: ubuntu-latest, test-id: include}
shard-index: [0, 1, 2, 3]
steps:
- uses: actions/checkout@v7
- name: "Set up Julia"
uses: julia-actions/setup-julia@v2
uses: julia-actions/setup-julia@v3
with:
version: ${{ matrix.julia-version }}
version: ${{ matrix.config.julia-version }}
- name: "Cache Julia"
uses: julia-actions/cache@v2
uses: julia-actions/cache@v3
with:
cache-name: ${{ matrix.os }}-test-${{ matrix.julia-version }}-${{ matrix.python-version }}
cache-name: ${{ matrix.config.os }}-test-${{ matrix.config.julia-version }}-${{ matrix.config.python-version }}
cache-packages: false
- name: "Set up Python"
uses: actions/setup-python@v6
uses: actions/setup-python@v7
with:
python-version: ${{ matrix.python-version }}
python-version: ${{ matrix.config.python-version }}
cache: pip
- name: "Install PySR"
run: |
python -m pip install --upgrade pip
pip install '.[dev]'
python -c 'import pysr'
- name: "Assert Julia version"
if: ${{ matrix.julia-version != '1'}}
run: python3 -c "from pysr import jl; assert jl.VERSION.major == jl.seval('v\"${{ matrix.julia-version }}\"').major; assert jl.VERSION.minor == jl.seval('v\"${{ matrix.julia-version }}\"').minor"
if: ${{ matrix.config.julia-version != '1'}}
run: python3 -c "from pysr import jl; assert jl.VERSION.major == jl.seval('v\"${{ matrix.config.julia-version }}\"').major; assert jl.VERSION.minor == jl.seval('v\"${{ matrix.config.julia-version }}\"').minor"
- name: "Set up coverage for subprocesses"
run: echo 'import coverage; coverage.process_startup()' > "${{ github.workspace }}/sitecustomize.py"
- name: "Run tests"
run: coverage run -m pysr test main,cli,startup
run: coverage run -m pysr test main,cli,startup,interrupt
env:
PYSR_TEST_SHARD_COUNT: "4"
PYSR_TEST_SHARD_INDEX: ${{ matrix.shard-index }}
- name: "Run JAX tests"
run: coverage run --append -m pysr test jax
if: ${{ matrix.test-id == 'main' }}
if: ${{ matrix.config.test-id == 'main' && matrix.shard-index == 0 }}
- name: "Run Torch tests"
run: coverage run --append -m pysr test torch
if: ${{ matrix.test-id == 'main' }}
if: ${{ matrix.config.test-id == 'main' && matrix.shard-index == 0 }}
- name: "Build coverage report"
run: coverage xml
- name: "Upload results to Codecov"
uses: codecov/codecov-action@v5
uses: codecov/codecov-action@v7
with:
token: ${{ secrets.CODECOV_TOKEN }}
slug: astroautomata/PySR

required_tests:
name: test (1, 3.14, ubuntu-latest, ${{ matrix.test-id }})
needs: test
if: ${{ always() }}
runs-on: ubuntu-latest
strategy:
matrix:
test-id: [main, include]
steps:
- name: Require all test shards to pass
run: test "${{ needs.test.result }}" = success

dev_install:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: ['ubuntu-latest']
python-version: ['3.13']
python-version: ['3.14']
julia-version: ['1']
include:
- os: ubuntu-latest
python-version: '3.10'
julia-version: '1.10'
steps:
- uses: actions/checkout@v7
- uses: actions/setup-python@v6
- uses: actions/setup-python@v7
- name: "Install PySR"
run: |
python -m pip install --upgrade pip
Expand All @@ -111,37 +122,41 @@ jobs:
run: PYSR_TEST_JULIA_VERSION=${{ matrix.julia-version }} PYSR_TEST_PYTHON_VERSION=${{ matrix.python-version }} python -m pysr test dev

conda_test:
name: Conda (Python ${{ matrix.python-version }}, shard ${{ matrix.shard-index }})
runs-on: ${{ matrix.os }}
defaults:
run:
shell: bash -l {0}
strategy:
fail-fast: false
matrix:
# NOTE: pin to a known-supported CPython; `3` can resolve to free-threaded
# builds (e.g. 3.14t) which PythonCall.jl doesn't support.
python-version: ['3.13']
python-version: ['3.14']
os: ['ubuntu-latest']

shard-index: [0, 1, 2, 3]
steps:
- uses: actions/checkout@v7
- name: "Cache conda"
uses: actions/cache@v5
uses: actions/cache@v6
env:
CACHE_NUMBER: 0
with:
path: ~/conda_pkgs_dir
key: ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-${{ hashFiles('environment.yml') }}
- name: "Set up Conda"
uses: conda-incubator/setup-miniconda@v3
uses: conda-incubator/setup-miniconda@v4
with:
miniforge-variant: Miniforge3
miniforge-version: latest
auto-activate-base: true
python-version: ${{ matrix.python-version }}
activate-environment: pysr-test
environment-file: environment.yml
- name: "Set up Julia"
uses: julia-actions/setup-julia@v3
with:
version: "1"
- name: "Cache Julia"
uses: julia-actions/cache@v2
uses: julia-actions/cache@v3
with:
cache-name: ${{ matrix.os }}-conda-${{ matrix.python-version }}
cache-packages: false
Expand All @@ -151,6 +166,9 @@ jobs:
python3 -c 'import pysr'
- name: "Run tests"
run: cd /tmp && python -m pysr test main
env:
PYSR_TEST_SHARD_COUNT: "4"
PYSR_TEST_SHARD_INDEX: ${{ matrix.shard-index }}

types:
name: Check types
Expand All @@ -161,14 +179,14 @@ jobs:
strategy:
matrix:
python-version:
- '3.13'
- '3.14'
- '3.10'
os: ['ubuntu-latest']

steps:
- uses: actions/checkout@v7
- name: "Set up Python"
uses: actions/setup-python@v6
uses: actions/setup-python@v7
with:
python-version: ${{ matrix.python-version }}
cache: pip
Expand All @@ -184,21 +202,22 @@ jobs:
if: ${{ matrix.python-version == '3.10' }}

beartype:
name: Test with beartype
name: Test with beartype (shard ${{ matrix.shard-index }})
runs-on: ubuntu-latest
defaults:
run:
shell: bash -l {0}
env:
PYSR_USE_BEARTYPE: "1"
strategy:
fail-fast: false
matrix:
python-version: ['3.13']

python-version: ['3.14']
shard-index: [0, 1, 2, 3]
steps:
- uses: actions/checkout@v7
- name: "Set up Python"
uses: actions/setup-python@v6
uses: actions/setup-python@v7
with:
python-version: ${{ matrix.python-version }}
cache: pip
Expand All @@ -208,6 +227,9 @@ jobs:
pip install '.[dev]'
- name: "Run tests"
run: python -m pysr test main,jax,torch
env:
PYSR_TEST_SHARD_COUNT: "4"
PYSR_TEST_SHARD_INDEX: ${{ matrix.shard-index }}

autodiff_backends:
name: Test autodiff backends
Expand All @@ -217,17 +239,17 @@ jobs:
shell: bash -l {0}
strategy:
matrix:
python-version: ['3.13']
python-version: ['3.14']
julia-version: ['1']

steps:
- uses: actions/checkout@v7
- name: "Set up Julia"
uses: julia-actions/setup-julia@v2
uses: julia-actions/setup-julia@v3
with:
version: ${{ matrix.julia-version }}
- name: "Set up Python"
uses: actions/setup-python@v6
uses: actions/setup-python@v7
with:
python-version: ${{ matrix.python-version }}
cache: pip
Expand All @@ -251,11 +273,11 @@ jobs:

steps:
- uses: actions/checkout@v7
- uses: actions/setup-python@v6
- uses: actions/setup-python@v7
with:
python-version: ${{ matrix.python-version }}
cache: pip
- uses: julia-actions/setup-julia@v2
- uses: julia-actions/setup-julia@v3
with:
version: ${{ matrix.julia-version }}

Expand All @@ -282,10 +304,9 @@ jobs:
steps:
- uses: actions/checkout@v7
- name: "Set up Python"
uses: actions/setup-python@v6
uses: actions/setup-python@v7
with:
python-version: '3.x'
cache: pip
- name: "Install validator deps"
run: |
python -m pip install --upgrade pip
Expand Down
21 changes: 16 additions & 5 deletions .github/workflows/CI_Windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,32 +15,38 @@ on:
- '**'
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
test:
name: Test (shard ${{ matrix.shard-index }})
runs-on: ${{ matrix.os }}
timeout-minutes: 60
defaults:
run:
shell: bash
strategy:
fail-fast: false
matrix:
julia-version: ['1']
python-version: ['3.13']
python-version: ['3.14']
os: [windows-latest]

shard-index: [0, 1, 2, 3]
steps:
- uses: actions/checkout@v7
- name: "Set up Julia"
uses: julia-actions/setup-julia@v2
with:
version: ${{ matrix.julia-version }}
- name: "Cache Julia"
uses: julia-actions/cache@v2
uses: julia-actions/cache@v3
with:
cache-name: ${{ matrix.os }}-test-${{ matrix.julia-version }}-${{ matrix.python-version }}
cache-packages: false
- name: "Set up Python"
uses: actions/setup-python@v6
uses: actions/setup-python@v7
with:
python-version: ${{ matrix.python-version }}
cache: pip
Expand All @@ -51,8 +57,13 @@ jobs:
python -c 'import pysr'
- name: "Run tests"
run: |
python -m pysr test main,cli,startup
python -m pysr test main,cli,startup,interrupt
env:
PYSR_TEST_SHARD_COUNT: "4"
PYSR_TEST_SHARD_INDEX: ${{ matrix.shard-index }}
- name: "Install Torch"
run: pip install torch # (optional import)
if: ${{ matrix.shard-index == 0 }}
- name: "Run Torch tests"
run: python -m pysr test torch
if: ${{ matrix.shard-index == 0 }}
Loading
Loading