9191 pyqt6-ver : ' !=6.6.0'
9292 # https://bugreports.qt.io/projects/PYSIDE/issues/PYSIDE-2346
9393 pyside6-ver : ' !=6.5.1'
94+ - name-suffix : " Free-threaded"
95+ os : ubuntu-22.04
96+ python-version : ' 3.13t'
97+ # https://www.riverbankcomputing.com/pipermail/pyqt/2023-November/045606.html
98+ pyqt6-ver : ' !=6.6.0'
99+ # https://bugreports.qt.io/projects/PYSIDE/issues/PYSIDE-2346
100+ pyside6-ver : ' !=6.5.1'
94101 - os : macos-12 # This runner is on Intel chips.
95102 python-version : ' 3.10'
96103 # https://bugreports.qt.io/projects/PYSIDE/issues/PYSIDE-2346
@@ -111,10 +118,18 @@ jobs:
111118
112119 - name : Set up Python ${{ matrix.python-version }}
113120 uses : actions/setup-python@v5
121+ if : matrix.python-version != '3.13t'
114122 with :
115123 python-version : ${{ matrix.python-version }}
116124 allow-prereleases : true
117125
126+ - name : Set up Python ${{ matrix.python-version }}
127+ uses : deadsnakes/action@6c8b9b82fe0b4344f4b98f2775fcc395df45e494 # v3.1.0
128+ if : matrix.python-version == '3.13t'
129+ with :
130+ python-version : ' 3.13'
131+ nogil : true
132+
118133 - name : Install OS dependencies
119134 run : |
120135 case "${{ runner.os }}" in
@@ -160,6 +175,11 @@ jobs:
160175 texlive-luatex \
161176 texlive-pictures \
162177 texlive-xetex
178+ if [[ "${{ matrix.python-version }}" = '3.13t' ]]; then
179+ # TODO: Remove this once setup-python supports nogil distributions.
180+ sudo apt-get install -yy --no-install-recommends \
181+ python3.13-tk-nogil
182+ fi
163183 if [[ "${{ matrix.os }}" = ubuntu-20.04 ]]; then
164184 sudo apt-get install -yy --no-install-recommends libopengl0
165185 else # ubuntu-22.04
@@ -216,6 +236,15 @@ jobs:
216236 4-${{ runner.os }}-py${{ matrix.python-version }}-mpl-${{ github.ref }}-
217237 4-${{ runner.os }}-py${{ matrix.python-version }}-mpl-
218238
239+ - name : Install the nightly dependencies
240+ if : matrix.python-version == '3.13t'
241+ run : |
242+ python -m pip install pytz tzdata python-dateutil # Must be installed for Pandas.
243+ python -m pip install \
244+ --pre \
245+ --index-url https://pypi.anaconda.org/scientific-python-nightly-wheels/simple \
246+ --upgrade --only-binary=:all: numpy pandas pillow contourpy
247+
219248 - name : Install Python dependencies
220249 run : |
221250 # Upgrade pip and setuptools and wheel to get as clean an install as
@@ -241,6 +270,7 @@ jobs:
241270 # Sphinx is needed to run sphinxext tests
242271 python -m pip install --upgrade sphinx!=6.1.2
243272
273+ if [[ "${{ matrix.python-version }}" != '3.13t' ]]; then
244274 # GUI toolkits are pip-installable only for some versions of Python
245275 # so don't fail if we can't install them. Make it easier to check
246276 # whether the install was successful by trying to import the toolkit
@@ -286,6 +316,8 @@ jobs:
286316 echo 'wxPython is available' ||
287317 echo 'wxPython is not available'
288318
319+ fi # Skip backends on Python 3.13t.
320+
289321 - name : Install the nightly dependencies
290322 # Only install the nightly dependencies during the scheduled event
291323 if : github.event_name == 'schedule' && matrix.name-suffix != '(Minimum Versions)'
@@ -324,6 +356,9 @@ jobs:
324356
325357 - name : Run pytest
326358 run : |
359+ if [[ "${{ matrix.python-version }}" == '3.13t' ]]; then
360+ export PYTHON_GIL=0
361+ fi
327362 pytest -rfEsXR -n auto \
328363 --maxfail=50 --timeout=300 --durations=25 \
329364 --cov-report=xml --cov=lib --log-level=DEBUG --color=yes
0 commit comments