Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
fd062f7
Update test.yml
fkiraly Dec 29, 2025
ac4c670
identifiers
fkiraly Dec 29, 2025
04c473a
Update test.yml
fkiraly Dec 29, 2025
af04191
Update test.yml
fkiraly Dec 29, 2025
4d8cfc0
Merge branch 'main' into CI-newer-pythons
fkiraly Dec 29, 2025
16309a6
Update test.yml
fkiraly Dec 29, 2025
62c0651
Update test.yml
fkiraly Dec 29, 2025
e902465
Update test.yml
fkiraly Dec 29, 2025
00f1b29
Update test.yml
fkiraly Dec 29, 2025
520e11d
Merge branch 'main' into CI-newer-pythons
fkiraly Dec 29, 2025
406205a
mark xfail
JATAYU000 Dec 30, 2025
9af62fa
Merge branch 'CI-newer-pythons' into pr/1579
fkiraly Dec 30, 2025
f38efad
Update test.yml
fkiraly Dec 30, 2025
9220d36
Update test.yml
fkiraly Dec 30, 2025
f5a13bb
Update test.yml
fkiraly Dec 30, 2025
b740101
More xfail skips
JATAYU000 Dec 31, 2025
7179d4b
Only remove newly added
JATAYU000 Dec 31, 2025
28b5f97
Merge branch 'pr/1584' into pr/1579
fkiraly Dec 31, 2025
cd2ba6d
Merge branch 'main' into task_exception
fkiraly Dec 31, 2025
a2300b7
Merge branch 'main' into more_test_skips
fkiraly Dec 31, 2025
9889bbf
Update test_run_functions.py
fkiraly Dec 31, 2025
f4c186c
Merge branch 'task_exception' of https://github.com/JATAYU000/openml-…
fkiraly Dec 31, 2025
48022c7
Merge branch 'pr/1584' into pr/1579
fkiraly Dec 31, 2025
9b2adff
Merge branch 'main' into more_test_skips
fkiraly Dec 31, 2025
ed894c1
Update test_run_functions.py
fkiraly Dec 31, 2025
7b3e69c
Merge branch 'more_test_skips' of https://github.com/JATAYU000/openml…
fkiraly Dec 31, 2025
725cbce
Update test_run_functions.py
fkiraly Dec 31, 2025
b1e06ec
Revert all xfails which passed
JATAYU000 Dec 31, 2025
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
88 changes: 56 additions & 32 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,74 +23,97 @@ jobs:
test:
name: (${{ matrix.os }}, Py${{ matrix.python-version }}, sk${{ matrix.scikit-learn }}, sk-only:${{ matrix.sklearn-only }})
runs-on: ${{ matrix.os }}

strategy:
fail-fast: false
matrix:
python-version: ["3.11"]
scikit-learn: ["1.3.*", "1.4.*", "1.5.*"]
python-version: ["3.10", "3.11", "3.12", "3.13"]
scikit-learn: ["1.3.*", "1.4.*", "1.5.*", "1.6.*", "1.7.*"]
os: [ubuntu-latest]
sklearn-only: ["true"]
fail-fast: false

exclude:
# incompatible version combinations
- python-version: "3.13"
scikit-learn: "1.3.*"
- python-version: "3.13"
scikit-learn: "1.4.*"

include:
# Full test run on Windows
- os: windows-latest
python-version: "3.12"
scikit-learn: "1.5.*"
sklearn-only: "false"

# Coverage run
- os: ubuntu-latest
python-version: "3.12"
scikit-learn: "1.5.*"
sklearn-only: "false"
code-cov: true

steps:
- uses: actions/checkout@v6
with:
fetch-depth: 2

- name: Setup Python ${{ matrix.python-version }}
if: matrix.os != 'windows-latest' # windows-latest only uses preinstalled Python (3.9.13)
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install test dependencies

- name: Install test dependencies and scikit-learn
run: |
python -m pip install --upgrade pip
pip install -e .[test]
- name: Install scikit-learn ${{ matrix.scikit-learn }}
run: |
pip install scikit-learn==${{ matrix.scikit-learn }}
- name: Install numpy for Python 3.8
# Python 3.8 & scikit-learn<0.24 requires numpy<=1.23.5
if: ${{ matrix.python-version == '3.8' && matrix.scikit-learn == '0.23.1' }}
run: |
pip install numpy==1.23.5
- name: "Install NumPy 1.x and SciPy <1.11 for scikit-learn < 1.4"
if: ${{ contains(fromJSON('["1.0.*", "1.1.*", "1.2.*", "1.3.*"]'), matrix.scikit-learn) }}
run: |
# scipy has a change to the 'mode' behavior which breaks scikit-learn < 1.4
# numpy 2.0 has several breaking changes
pip install "numpy<2.0" "scipy<1.11"
- name: Install scipy ${{ matrix.scipy }}
if: ${{ matrix.scipy }}
run: |
pip install scipy==${{ matrix.scipy }}
pip install -e .[test] scikit-learn==${{ matrix.scikit-learn }}

- name: Store repository status
id: status-before
if: matrix.os != 'windows-latest'
run: |
git_status=$(git status --porcelain -b)
echo "BEFORE=$git_status" >> $GITHUB_ENV
echo "Repository status before tests: $git_status"

- name: Show installed dependencies
run: python -m pip list

- name: Run tests on Ubuntu Test
if: matrix.os == 'ubuntu-latest'
run: |
if [ ${{ matrix.code-cov }} ]; then codecov='--cov=openml --long --cov-report=xml'; fi
# Most of the time, running only the scikit-learn tests is sufficient
if [ ${{ matrix.sklearn-only }} = 'true' ]; then marks='sklearn and not production'; else marks='not production'; fi
echo pytest -n 4 --durations=20 --dist load -sv $codecov -o log_cli=true -m "$marks"
if [ "${{ matrix.code-cov }}" = "true" ]; then
codecov="--cov=openml --long --cov-report=xml"
fi

if [ "${{ matrix.sklearn-only }}" = "true" ]; then
marks="sklearn and not production"
else
marks="not production"
fi

pytest -n 4 --durations=20 --dist load -sv $codecov -o log_cli=true -m "$marks"

- name: Run tests on Ubuntu Production
if: matrix.os == 'ubuntu-latest'
run: |
if [ ${{ matrix.code-cov }} ]; then codecov='--cov=openml --long --cov-report=xml'; fi
# Most of the time, running only the scikit-learn tests is sufficient
if [ ${{ matrix.sklearn-only }} = 'true' ]; then marks='sklearn and production'; else marks='production'; fi
echo pytest -n 4 --durations=20 --dist load -sv $codecov -o log_cli=true -m "$marks"
if [ "${{ matrix.code-cov }}" = "true" ]; then
codecov="--cov=openml --long --cov-report=xml"
fi

if [ "${{ matrix.sklearn-only }}" = "true" ]; then
marks="sklearn and production"
else
marks="production"
fi

pytest -n 4 --durations=20 --dist load -sv $codecov -o log_cli=true -m "$marks"

- name: Run tests on Windows
if: matrix.os == 'windows-latest'
run: | # we need a separate step because of the bash-specific if-statement in the previous one.
pytest -n 4 --durations=20 --dist load -sv --reruns 5 --reruns-delay 1

- name: Check for files left behind by test
if: matrix.os != 'windows-latest' && always()
run: |
Expand All @@ -102,6 +125,7 @@ jobs:
echo "Not all generated files have been deleted!"
exit 1
fi

- name: Upload coverage
if: matrix.code-cov && always()
uses: codecov/codecov-action@v4
Expand Down
3 changes: 1 addition & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -50,12 +50,11 @@ classifiers = [
"Operating System :: Unix",
"Operating System :: MacOS",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
]
license = { file = "LICENSE" }

Expand Down
7 changes: 7 additions & 0 deletions tests/test_runs/test_run_functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -625,6 +625,7 @@ def _run_and_upload_regression(
sentinel=sentinel,
)

@pytest.mark.skip(reason="failures_issue_1544")
@pytest.mark.sklearn()
def test_run_and_upload_logistic_regression(self):
lr = LogisticRegression(solver="lbfgs", max_iter=1000)
Expand All @@ -633,6 +634,7 @@ def test_run_and_upload_logistic_regression(self):
n_test_obs = self.TEST_SERVER_TASK_SIMPLE["n_test_obs"]
self._run_and_upload_classification(lr, task_id, n_missing_vals, n_test_obs, "62501")

@pytest.mark.skip(reason="failures_issue_1544")
@pytest.mark.sklearn()
def test_run_and_upload_linear_regression(self):
lr = LinearRegression()
Expand Down Expand Up @@ -663,6 +665,7 @@ def test_run_and_upload_linear_regression(self):
n_test_obs = self.TEST_SERVER_TASK_REGRESSION["n_test_obs"]
self._run_and_upload_regression(lr, task_id, n_missing_vals, n_test_obs, "62501")

@pytest.mark.skip(reason="failures_issue_1544")
@pytest.mark.sklearn()
def test_run_and_upload_pipeline_dummy_pipeline(self):
pipeline1 = Pipeline(
Expand All @@ -676,6 +679,7 @@ def test_run_and_upload_pipeline_dummy_pipeline(self):
n_test_obs = self.TEST_SERVER_TASK_SIMPLE["n_test_obs"]
self._run_and_upload_classification(pipeline1, task_id, n_missing_vals, n_test_obs, "62501")

@pytest.mark.skip(reason="failures_issue_1544")
@pytest.mark.sklearn()
@unittest.skipIf(
Version(sklearn.__version__) < Version("0.20"),
Expand Down Expand Up @@ -740,6 +744,7 @@ def get_ct_cf(nominal_indices, numeric_indices):
sentinel=sentinel,
)

@pytest.mark.skip(reason="failures_issue_1544")
@pytest.mark.sklearn()
@unittest.skip("https://github.com/openml/OpenML/issues/1180")
@unittest.skipIf(
Expand Down Expand Up @@ -792,6 +797,7 @@ def test_run_and_upload_knn_pipeline(self, warnings_mock):
call_count += 1
assert call_count == 3

@pytest.mark.skip(reason="failures_issue_1544")
@pytest.mark.sklearn()
def test_run_and_upload_gridsearch(self):
estimator_name = (
Expand Down Expand Up @@ -847,6 +853,7 @@ def test_run_and_upload_randomsearch(self):
trace = openml.runs.get_run_trace(run.run_id)
assert len(trace.trace_iterations) == 5

@pytest.mark.skip(reason="failures_issue_1544")
@pytest.mark.sklearn()
def test_run_and_upload_maskedarrays(self):
# This testcase is important for 2 reasons:
Expand Down
1 change: 1 addition & 0 deletions tests/test_tasks/test_learning_curve_task.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from __future__ import annotations

import pandas as pd
import pytest

from openml.tasks import TaskType, get_task

Expand Down
1 change: 1 addition & 0 deletions tests/test_tasks/test_regression_task.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import ast

import pandas as pd
import pytest

import openml
from openml.exceptions import OpenMLServerException
Expand Down
1 change: 1 addition & 0 deletions tests/test_tasks/test_supervised_task.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import pandas as pd

from openml.tasks import get_task
import pytest

from .test_task import OpenMLTaskTest

Expand Down
1 change: 1 addition & 0 deletions tests/test_tasks/test_task_functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ def test_get_task_lazy(self):
)

@mock.patch("openml.tasks.functions.get_dataset")
@pytest.mark.xfail(reason="failures_issue_1544")
def test_removal_upon_download_failure(self, get_dataset):
class WeirdException(Exception):
pass
Expand Down
1 change: 1 addition & 0 deletions tests/test_tasks/test_task_methods.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

import openml
from openml.testing import TestBase
import pytest


# Common methods between tasks
Expand Down