diff --git a/.github/workflows/core.yml b/.github/workflows/core.yml index 1eff078a51..aa17938239 100644 --- a/.github/workflows/core.yml +++ b/.github/workflows/core.yml @@ -88,7 +88,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.9', '3.10', '3.11', '3.12'] + python-version: ['3.9', '3.10', '3.11', '3.12', '3.13'] os: - linux - win64 @@ -101,8 +101,9 @@ jobs: # only generate coverage report for a single python version in the matrix # to avoid overloading Codecov cov-report: true + steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: ./.github/actions/display-debug-info - name: Set up Conda environment uses: conda-incubator/setup-miniconda@v3 @@ -110,6 +111,7 @@ jobs: activate-environment: ${{ env.IDAES_CONDA_ENV_NAME_DEV }} python-version: ${{ matrix.python-version }} miniforge-version: latest + - name: Set up idaes uses: ./.github/actions/setup-idaes with: @@ -128,7 +130,7 @@ jobs: name: coverage-report-${{ matrix.os }} path: coverage.xml if-no-files-found: error - + upload-coverage: name: Upload coverage report (Codecov) needs: [pytest] diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index ebe163df9c..0aa450688c 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -87,7 +87,6 @@ jobs: run: | import json from os import environ as env - def _display_on_run_dashboard(msg): # workflow warnings are displayed on the workflow run dashboard, # so we use this as a way to display a short summary of why this workflow is being run @@ -95,16 +94,13 @@ jobs: print(f'::warning ::{msg}') def _set_output(name, val): print(f'::set-output name={name}::{val}') - event_name = env["GITHUB_EVENT_NAME"] event_action = env["_GITHUB_EVENT_ACTION"] is_pr = 'pull_request' in event_name.lower() # if the event is not a PR event, the "is_pr_approved" env var will be set to an empty string, # which cannot be parsed as valid json is_pr_approved = json.loads(env.get("is_pr_approved") or "null") - workflow_trigger = 'undetermined' - if is_pr: if event_action == 'labeled': workflow_trigger = 'user_dispatch' @@ -114,11 +110,9 @@ jobs: workflow_trigger = 'unapproved_pr' else: workflow_trigger = 'not_pr' - msg = f'{workflow_trigger=} event/action={event_name}/{event_action or "N/A"} is_pr_approved={is_pr_approved or "N/A"}' _display_on_run_dashboard(msg) _set_output('workflow-trigger', workflow_trigger) - pytest: name: pytest (py${{ matrix.python-version }}/${{ matrix.os }}/integration) runs-on: ${{ matrix.runner-image }} @@ -132,7 +126,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.9', '3.10', '3.11', '3.12'] + python-version: ['3.9', '3.10', '3.11', '3.12', '3.13'] os: - linux - win64 @@ -170,7 +164,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.9', '3.10', '3.11', '3.12'] + python-version: ['3.9', '3.10', '3.11', '3.12', '3.13'] os: - linux - win64 @@ -259,4 +253,4 @@ jobs: run: | pushd "$(mktemp -d)" pip install pytest - pytest --pyargs idaes -W ignore -rs + pytest --pyargs idaes -W ignore -rs \ No newline at end of file diff --git a/README.md b/README.md index da9c1b779a..a5fe54b28a 100644 --- a/README.md +++ b/README.md @@ -86,6 +86,8 @@ for Python 3. The following sub-versions are supported: * Python 3.10 * Python 3.11 * Python 3.12 +* Python 3.13 + > [!IMPORTANT] > Note that Python 3.8 is no longer officially supported. diff --git a/docs/conf.py b/docs/conf.py index 3171de2567..e4623e69f6 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -90,7 +90,7 @@ todo_include_todos = False # Global constants for supported Python versions -IDAES_PV_MIN, IDAES_PV_MAX, IDAES_PV_DEFAULT = "3.9", "3.12", "3.10" +IDAES_PV_MIN, IDAES_PV_MAX, IDAES_PV_DEFAULT = "3.9", "3.13", "3.10" # This block of text will be virtually present at the end of every file. # Used here to define substitutions for re-used URLs, e.g. just add "|examples-site|" to diff --git a/setup.py b/setup.py index 8f8ad6d0c0..7c5880050a 100644 --- a/setup.py +++ b/setup.py @@ -37,9 +37,7 @@ class ExtraDependencies: """ ui = [ - # FIXME this must be changed to the PyPI distribution for the release - # "idaes-ui", - "idaes-ui @ git+https://github.com/IDAES/idaes-ui@main", + "idaes-ui", ] omlt = [ "omlt==1.1", # fix the version for now as package evolves @@ -52,11 +50,7 @@ class ExtraDependencies: coolprop = [ "coolprop>=7.0", # idaes.generic_models.properties.general.coolprop ] - testing = [ - "pytest", - "addheader", - "pyyaml", - ] + testing = ["pytest", "addheader", "pyyaml"] def __init__(self): self._data = dict(type(self).__dict__) @@ -156,6 +150,7 @@ def __getitem__(self, key): "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Scientific/Engineering :: Mathematics", "Topic :: Scientific/Engineering :: Chemistry",