Skip to content

ODSC-88492: ADS Python 3.13 support readiness#1396

Closed
cheryloracle wants to merge 20 commits into
oracle:mainfrom
cheryloracle:csa/odsc-88492
Closed

ODSC-88492: ADS Python 3.13 support readiness#1396
cheryloracle wants to merge 20 commits into
oracle:mainfrom
cheryloracle:csa/odsc-88492

Conversation

@cheryloracle

Copy link
Copy Markdown
Member

Summary

Implemented Python 3.13 readiness for ADS across the agreed initial support scope. The branch documents the Python 3.13 dependency surface, gates known incompatible optional extras below Python 3.13, updates CI coverage, validates build/install behavior, fixes source-tree version fallback behavior, and updates runtime validation messaging so ADS model artifact checks accept Python 3.13 while still rejecting unsupported future versions.

Core package support is validated for Python 3.13.13: base ADS install resolves with modern NumPy, pandas, scikit-learn, scipy, matplotlib, OCI SDK, and OCIFS; fresh sdist and wheel artifacts build successfully; editable, sdist, and wheel installs pass dependency checks; and import/default setup tests pass in the Python 3.13 environment.

The initial Python 3.13 support claim is intentionally scoped. Core ADS, model artifact/runtime paths, job/runtime helper paths, service conda translation, selected Aqua client/recommendation paths, opctl/operator utility paths, and vault helpers were validated. Older or native-heavy optional stacks are documented as deferred or partially validated, with ODSC-TBD follow-up placeholders for service conda owners before broader support is claimed.

Tests Run

  • python -c "from pathlib import Path; p=Path('docs/source/python_313_dependency_audit.rst'); s=p.read_text(); assert 'CI and Runtime Support Gates\n----------------------------' in s; assert 'run-unittests-default_setup.yml' in s; assert 'PYTHON_VER_PATTERN' in s; print('Audit doc structural check OK')"
  • python -c "from pathlib import Path; s=Path('docs/source/python_313_dependency_audit.rst').read_text(); assert 'Concrete Dependency Actions\n---------------------------' in s; assert 'Test and Development Dependencies\n---------------------------------' in s; assert 'test-requirements-operators.txt' in s; assert 'scikit-surprise' in s; print('Dependency audit structural check OK')"
  • python -c "import tomllib; d=tomllib.load(open('pyproject.toml','rb')); boosted=d['project']['optional-dependencies']['boosted']; notebook=d['project']['optional-dependencies']['notebook']; assert "scikit-learn>=1.0,<1.6.0; python_version < '3.13'" in boosted; assert "scikit-learn>=1.0,<1.6.0; python_version < '3.13'" in notebook; print('pyproject marker check OK')"
  • python -c "from packaging.requirements import Requirement; r=Requirement("scikit-learn>=1.0,<1.6.0; python_version < '3.13'"); assert r.marker.evaluate({'python_version':'3.12'}); assert not r.marker.evaluate({'python_version':'3.13'}); print('marker evaluation OK')"
  • .venv-py313/bin/python -c "import ads; print(ads.version)"
  • .venv-py313/bin/python -m pytest -q tests/unitary/default_setup/test_import.py tests/unitary/default_setup/model/test_model_introspect.py::TestPythonVersionCheck::test_python_version_check
  • .venv-py313/bin/python -m pytest -q tests/unitary/default_setup/telemetry/test_agent.py
  • .venv-py313/bin/python -m pytest -q tests/unitary/default_setup/model/test_model_artifact.py
  • .venv-py313/bin/python -m pytest -q tests/unitary/default_setup/model/test_model_introspect.py::TestPythonVersionCheck::test_python_version_check tests/unitary/default_setup/model/test_model_artifact.py
  • .venv-py313/bin/python -c "import tomllib, re; d=tomllib.load(open('pyproject.toml','rb')); assert 'Programming Language :: Python :: 3.13' in d['project']['classifiers']; from ads.model.model_artifact_boilerplate.artifact_introspection_test import model_artifact_validate as at; assert re.match(at.PYTHON_VER_PATTERN, '3.13'); assert not re.match(at.PYTHON_VER_PATTERN, '3.14'); assert '3.6 through 3.13' in at.TESTS['runtime_env_python']['error_msg']; print('metadata validation check OK')"
  • .venv-py313/bin/python -c "import yaml; [yaml.safe_load(open(p)) for p in ['.github/workflows/run-unittests-default_setup.yml', '.github/workflows/run-unittests-py310-py311.yml']]; print('workflow yaml parse OK')"
  • .venv-py313/bin/python -m build --sdist --wheel --outdir /tmp/ads-wwo7-build
  • .venv-py313/bin/python -m pip check
  • .venv-py313-sdist/bin/python -m pip check
  • .venv-py313-wheel/bin/python -m pip check
  • .venv-py313/bin/python -m pip install --dry-run --no-deps /tmp/ads-wwo7-build/oracle_ads-2.15.2.tar.gz
  • .venv-py313/bin/python -m pip install --dry-run --no-deps /tmp/ads-wwo7-build/oracle_ads-2.15.2-py3-none-any.whl
  • /usr/bin/env NoDependency=True .venv-py313/bin/python -m pytest -v -p no:warnings --durations=5 tests/unitary/default_setup (passed: 1237 passed, 13 skipped, 2 xfailed)
  • .venv-py313/bin/python -m pytest -v -p no:warnings --durations=5 -n auto --dist loadfile tests/unitary with Python 3.13 deferred-extra ignore paths (local max-extra limitation: 1831 passed, 9 skipped, 2 xfailed, 29 failed, 24 errors due missing optional/max-extra deps)
  • .venv-py313/bin/python -m pytest -q tests/unitary/default_setup/model/test_model_artifact.py tests/unitary/default_setup/model/test_model_introspect.py tests/unitary/default_setup/model/test_artifact_uploader.py tests/unitary/default_setup/model/test_artifact_downloader.py tests/unitary/default_setup/model/test_artifact_populate_metadata.py (47 passed, 2 skipped)
  • .venv-py313/bin/python -m pytest -q tests/unitary/default_setup/model/test_model_metadata.py tests/unitary/default_setup/jobs/test_jobs_serializer.py tests/unitary/default_setup/jobs/test_jobs_serialization.py tests/unitary/default_setup/model/test_onnx_transformer.py (141 passed)
  • .venv-py313/bin/python -m pytest -q tests/unitary/default_setup/jobs/test_jobs_python.py tests/unitary/default_setup/jobs/test_jobs_base.py tests/unitary/default_setup/jobs/test_jobs_container_runtime.py tests/unitary/default_setup/jobs/test_jobs_runtimes_artifact.py tests/unitary/default_setup/jobs/test_jobs_validator.py tests/unitary/default_setup/runtime_dependency/test_common_runtime_dependency.py (55 passed)
  • .venv-py313/bin/python -m pytest -q tests/unitary/with_extras/aqua/test_client.py tests/unitary/with_extras/aqua/test_global.py tests/unitary/with_extras/aqua/test_recommend.py (85 passed)
  • .venv-py313/bin/python -m pytest -q tests/unitary/with_extras/opctl/test_opctl_utils.py tests/unitary/with_extras/operator/test_operator_config.py tests/unitary/with_extras/operator/test_common_dictionary_merger.py (7 passed)
  • .venv-py313/bin/python -m pytest -q tests/unitary/with_extras/vault/test_vault_vault.py (3 passed)
  • python -c "from pathlib import Path; s=Path('docs/source/python_313_dependency_audit.rst').read_text(); assert 'Service Conda Support Matrix\n----------------------------' in s; assert '1237 passed, 13 skipped' in s; assert 'ODSC-TBD' in s; assert 'Aqua notebook server extension' in s; print('python 3.13 docs follow-up check OK')"
  • python -c "import tomllib, pathlib, re; p=tomllib.load(open('pyproject.toml','rb')); assert 'Programming Language :: Python :: 3.13' in p['project']['classifiers']; assert "scikit-learn>=1.0,<1.6.0; python_version < '3.13'" in p['project']['optional-dependencies']['boosted']; assert "scikit-learn>=1.0,<1.6.0; python_version < '3.13'" in p['project']['optional-dependencies']['notebook']; doc=pathlib.Path('docs/source/python_313_dependency_audit.rst').read_text(); assert 'Service Conda Support Matrix' in doc; assert 'ODSC-TBD' in doc; print('acceptance metadata/doc check OK')"
  • .venv-py313/bin/python -c "import tomllib, re; d=tomllib.load(open('pyproject.toml','rb')); assert 'Programming Language :: Python :: 3.13' in d['project']['classifiers']; from ads.model.model_artifact_boilerplate.artifact_introspection_test import model_artifact_validate as at; assert re.match(at.PYTHON_VER_PATTERN, '3.13'); assert not re.match(at.PYTHON_VER_PATTERN, '3.14'); print('runtime metadata check OK')"
  • git diff --check

@oracle-contributor-agreement oracle-contributor-agreement Bot added the OCA Verified All contributors have signed the Oracle Contributor Agreement. label Jul 14, 2026
@cheryloracle

Copy link
Copy Markdown
Member Author

Closing canceled CSA task CSA-9bdf43c6f844.

@cheryloracle
cheryloracle deleted the csa/odsc-88492 branch July 15, 2026 21:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

OCA Verified All contributors have signed the Oracle Contributor Agreement.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant