From ba66c541aefb7d96367f8ba114b28cca890fec48 Mon Sep 17 00:00:00 2001 From: Ben Kogan Date: Thu, 12 Feb 2026 13:59:40 -0800 Subject: [PATCH 01/11] basic changes --- .github/workflows/daily_precommit.yml | 7 +++++-- recipe/meta.yaml | 7 +++++-- scripts/conda_build.sh | 1 + setup.py | 3 ++- tox.ini | 2 +- 5 files changed, 14 insertions(+), 6 deletions(-) diff --git a/.github/workflows/daily_precommit.yml b/.github/workflows/daily_precommit.yml index 0ef646e975..2f78cab436 100644 --- a/.github/workflows/daily_precommit.yml +++ b/.github/workflows/daily_precommit.yml @@ -110,6 +110,7 @@ jobs: - { os: {image_name: ubuntu-latest-64-cores, download_name: linux}, python-version: "3.11", cloud-provider: gcp } - { os: {image_name: ubuntu-latest-64-cores, download_name: linux}, python-version: "3.12", cloud-provider: aws } - { os: {image_name: ubuntu-latest-64-cores, download_name: linux}, python-version: "3.13", cloud-provider: azure } + - { os: {image_name: ubuntu-latest-64-cores, download_name: linux}, python-version: "3.14", cloud-provider: gcp } # macOS + rotating cloud providers - { os: {image_name: macos-latest, download_name: macos}, python-version: "3.9", cloud-provider: gcp } @@ -117,6 +118,7 @@ jobs: - { os: {image_name: macos-latest, download_name: macos}, python-version: "3.11", cloud-provider: azure } - { os: {image_name: macos-latest, download_name: macos}, python-version: "3.12", cloud-provider: gcp } - { os: {image_name: macos-latest, download_name: macos}, python-version: "3.13", cloud-provider: aws } + - { os: {image_name: macos-latest, download_name: macos}, python-version: "3.14", cloud-provider: azure } # Windows + rotating cloud providers - { os: {image_name: windows-latest-64-cores, download_name: windows}, python-version: "3.9", cloud-provider: azure } @@ -124,6 +126,7 @@ jobs: - { os: {image_name: windows-latest-64-cores, download_name: windows}, python-version: "3.11", cloud-provider: aws } - { os: {image_name: windows-latest-64-cores, download_name: windows}, python-version: "3.12", cloud-provider: azure } - { os: {image_name: windows-latest-64-cores, download_name: windows}, python-version: "3.13", cloud-provider: gcp } + - { os: {image_name: windows-latest-64-cores, download_name: windows}, python-version: "3.14", cloud-provider: aws } steps: - name: Checkout Code uses: actions/checkout@v4 @@ -418,7 +421,7 @@ jobs: image_name: windows-latest - download_name: ubuntu image_name: ubuntu-latest - python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"] + python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"] cloud-provider: [azure] steps: - name: Checkout Code @@ -558,7 +561,7 @@ jobs: os: - image_name: macos-latest download_name: macos # it includes doctest - python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"] + python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"] cloud-provider: [azure] steps: - name: Checkout Code diff --git a/recipe/meta.yaml b/recipe/meta.yaml index e85a0dad44..6c54171a04 100644 --- a/recipe/meta.yaml +++ b/recipe/meta.yaml @@ -24,10 +24,11 @@ build: string: "py311_{{ build_number }}" # [py==311] string: "py312_{{ build_number }}" # [py==312] string: "py313_{{ build_number }}" # [py==313] + string: "py314_{{ build_number }}" # [py==314] {% endif %} -{% if noarch_build and py not in [39, 310, 311, 312, 313] %} -error: "Noarch build for Python version {{ py }} is not supported. Supported versions: 3.9, 3.10, 3.11, 3.12, or 3.13." +{% if noarch_build and py not in [39, 310, 311, 312, 313, 314] %} +error: "Noarch build for Python version {{ py }} is not supported. Supported versions: 3.9, 3.10, 3.11, 3.12, 3.13, or 3.14." {% else %} requirements: host: @@ -51,6 +52,8 @@ requirements: - python >=3.12,<3.13.0a0 {% elif noarch_build and py == 313 %} - python >=3.13,<3.14.0a0 + {% elif noarch_build and py == 314 %} + - python >=3.14,<3.15.0a0 {% else %} - python {% endif %} diff --git a/scripts/conda_build.sh b/scripts/conda_build.sh index 783051b6fe..a520d39183 100755 --- a/scripts/conda_build.sh +++ b/scripts/conda_build.sh @@ -4,3 +4,4 @@ conda build recipe/ -c sfe1ed40 --python=3.10 --numpy=1.21 conda build recipe/ -c sfe1ed40 --python=3.11 --numpy=1.23 conda build recipe/ -c sfe1ed40 --python=3.12 --numpy=1.26 conda build recipe/ -c sfe1ed40 --python=3.13 --numpy=2.2.0 +conda build recipe/ -c sfe1ed40 --python=3.14 --numpy=2.4.2 diff --git a/setup.py b/setup.py index dc12bb82d6..c6ac98458a 100644 --- a/setup.py +++ b/setup.py @@ -32,7 +32,7 @@ "python-dateutil", # Snowpark IR "tzlocal", # Snowpark IR ] -REQUIRED_PYTHON_VERSION = ">=3.9, <3.14" +REQUIRED_PYTHON_VERSION = ">=3.9, <3.15" if os.getenv("SNOWFLAKE_IS_PYTHON_RUNTIME_TEST", False): REQUIRED_PYTHON_VERSION = ">=3.9" @@ -249,6 +249,7 @@ def run(self): "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Topic :: Database", "Topic :: Software Development", "Topic :: Software Development :: Libraries", diff --git a/tox.ini b/tox.ini index 190992de62..28f4527b66 100644 --- a/tox.ini +++ b/tox.ini @@ -177,7 +177,7 @@ commands = coverage combine coverage report -m coverage xml -o {env:COV_REPORT_DIR:{toxworkdir}}/coverage.xml coverage html -d {env:COV_REPORT_DIR:{toxworkdir}}/htmlcov --show-contexts -depends = py39, py310, py311, py312, py313 +depends = py39, py310, py311, py312, py313, py314 [testenv:docs] basepython = python3.9 From 95d2573f5549128e994c507b656aed5832423c7d Mon Sep 17 00:00:00 2001 From: Ben Kogan Date: Fri, 13 Feb 2026 12:39:34 -0800 Subject: [PATCH 02/11] more --- .github/workflows/precommit.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/precommit.yml b/.github/workflows/precommit.yml index 8e42794cc8..d706e59a69 100644 --- a/.github/workflows/precommit.yml +++ b/.github/workflows/precommit.yml @@ -233,7 +233,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest] - python-version: ["3.13"] + python-version: ["3.14"] cloud-provider: [azure] steps: - name: Checkout Code @@ -436,7 +436,7 @@ jobs: fail-fast: false matrix: os: [ ubuntu-latest ] - python-version: [ "3.13" ] # Test latest python + python-version: [ "3.14" ] # Test latest python cloud-provider: [ gcp ] # Test only one csp steps: - name: Checkout Code From 037733be6892ce28b03976967535b86f3df60c9a Mon Sep 17 00:00:00 2001 From: Ben Kogan Date: Fri, 13 Feb 2026 12:44:06 -0800 Subject: [PATCH 03/11] add 314 to matrix --- .github/workflows/precommit.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/precommit.yml b/.github/workflows/precommit.yml index d706e59a69..9d900b4903 100644 --- a/.github/workflows/precommit.yml +++ b/.github/workflows/precommit.yml @@ -132,6 +132,10 @@ jobs: - python-version: "3.13" cloud-provider: gcp os: windows-latest-64-cores + # run py 3.14 tests on aws/ubuntu + - python-version: "3.14" + cloud-provider: aws + os: ubuntu-latest-64-cores steps: - name: Checkout Code uses: actions/checkout@v4 From 6e7fc918f2c351913ec216f29eacda9ca59c4e46 Mon Sep 17 00:00:00 2001 From: Ben Kogan Date: Fri, 13 Feb 2026 13:16:26 -0800 Subject: [PATCH 04/11] fix uuid annotation --- .../_internal/analyzer/snowflake_plan.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/snowflake/snowpark/_internal/analyzer/snowflake_plan.py b/src/snowflake/snowpark/_internal/analyzer/snowflake_plan.py index 69138e1701..dff8affb9f 100644 --- a/src/snowflake/snowpark/_internal/analyzer/snowflake_plan.py +++ b/src/snowflake/snowpark/_internal/analyzer/snowflake_plan.py @@ -7,7 +7,7 @@ from logging import getLogger import re import sys -import uuid +import uuid as uuid_lib from collections import defaultdict, deque from enum import Enum from dataclasses import dataclass @@ -383,7 +383,7 @@ def add_single_quote(string: str) -> str: # and it's a reading XML query. def search_read_file_node( - node: Union[SnowflakePlan, Selectable] + node: Union[SnowflakePlan, Selectable], ) -> Optional[ReadFileNode]: source_plan = ( node.source_plan @@ -435,7 +435,7 @@ def __init__( # during the compilation stage. schema_query: Optional[str], post_actions: Optional[List["Query"]] = None, - expr_to_alias: Optional[Dict[uuid.UUID, str]] = None, + expr_to_alias: Optional[Dict[uuid_lib.UUID, str]] = None, source_plan: Optional[LogicalPlan] = None, is_ddl_on_temp_object: bool = False, api_calls: Optional[List[Dict]] = None, @@ -479,7 +479,9 @@ def __init__( if self.session._join_alias_fix else defaultdict(dict) ) - self._uuid = from_selectable_uuid if from_selectable_uuid else str(uuid.uuid4()) + self._uuid = ( + from_selectable_uuid if from_selectable_uuid else str(uuid_lib.uuid4()) + ) # We set the query line intervals for the last query in the queries list self.set_last_query_line_intervals() # In the placeholder query, subquery (child) is held by the ID of query plan @@ -1680,9 +1682,9 @@ def find_and_update_table_function_plan(self, plan: SnowflakePlan) -> SnowflakeP if len( node.snowflake_plan.children_plan_nodes ) == 1 and table_function_join_node.right_cols == ["*"]: - child_plan: Union[ - SnowflakePlan, Selectable - ] = node.snowflake_plan.children_plan_nodes[0] + child_plan: Union[SnowflakePlan, Selectable] = ( + node.snowflake_plan.children_plan_nodes[0] + ) if isinstance(child_plan, Selectable): child_plan = child_plan.snowflake_plan From 82f926791ea906d80c0c68f63baca4c471358fb9 Mon Sep 17 00:00:00 2001 From: Ben Kogan Date: Fri, 13 Feb 2026 13:31:11 -0800 Subject: [PATCH 05/11] more in matrix --- .github/workflows/precommit.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/precommit.yml b/.github/workflows/precommit.yml index 9d900b4903..a4d51972a2 100644 --- a/.github/workflows/precommit.yml +++ b/.github/workflows/precommit.yml @@ -136,6 +136,14 @@ jobs: - python-version: "3.14" cloud-provider: aws os: ubuntu-latest-64-cores + # run py 3.14 doctests on azure/macos + - python-version: "3.14" + cloud-provider: azure + os: macos-latest + # # run py 3.14 tests on gcp on windows + - python-version: "3.14" + cloud-provider: gcp + os: windows-latest-64-cores steps: - name: Checkout Code uses: actions/checkout@v4 From bdf80e98f9c94fd4ac3409ab89743042ff22dc3a Mon Sep 17 00:00:00 2001 From: Ben Kogan Date: Fri, 13 Feb 2026 13:36:20 -0800 Subject: [PATCH 06/11] fix formatting --- src/snowflake/snowpark/_internal/analyzer/snowflake_plan.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/snowflake/snowpark/_internal/analyzer/snowflake_plan.py b/src/snowflake/snowpark/_internal/analyzer/snowflake_plan.py index dff8affb9f..54a28628e7 100644 --- a/src/snowflake/snowpark/_internal/analyzer/snowflake_plan.py +++ b/src/snowflake/snowpark/_internal/analyzer/snowflake_plan.py @@ -1682,9 +1682,9 @@ def find_and_update_table_function_plan(self, plan: SnowflakePlan) -> SnowflakeP if len( node.snowflake_plan.children_plan_nodes ) == 1 and table_function_join_node.right_cols == ["*"]: - child_plan: Union[SnowflakePlan, Selectable] = ( - node.snowflake_plan.children_plan_nodes[0] - ) + child_plan: Union[ + SnowflakePlan, Selectable + ] = node.snowflake_plan.children_plan_nodes[0] if isinstance(child_plan, Selectable): child_plan = child_plan.snowflake_plan From 4b2273eb108268dcc2f80e270024782ee75528be Mon Sep 17 00:00:00 2001 From: Ben Kogan Date: Fri, 13 Feb 2026 14:03:06 -0800 Subject: [PATCH 07/11] fix copy --- .github/workflows/precommit.yml | 48 +++++++++---------- .../snowpark/_internal/analyzer/expression.py | 5 +- 2 files changed, 27 insertions(+), 26 deletions(-) diff --git a/.github/workflows/precommit.yml b/.github/workflows/precommit.yml index a4d51972a2..3a94d2e3d0 100644 --- a/.github/workflows/precommit.yml +++ b/.github/workflows/precommit.yml @@ -108,30 +108,30 @@ jobs: # matrix is empty for pre-commit, tests are only added # through the include directive include: - # only run py3.9 tests on ubuntu+aws to isolate 3.9 failures - - python-version: "3.9" - os: ubuntu-latest-64-cores - cloud-provider: aws - # only run gcp tests with latest python and ubuntu - - cloud-provider: gcp - python-version: "3.12" - os: ubuntu-latest-64-cores - # only run azure tests with latest python and ubuntu - - cloud-provider: azure - python-version: "3.12" - os: ubuntu-latest-64-cores - # run py 3.13 tests on aws/ubuntu - - python-version: "3.13" - cloud-provider: aws - os: ubuntu-latest-64-cores - # run py 3.12 doctests on azure/macos - - python-version: "3.12" - cloud-provider: azure - os: macos-latest - # run py 3.13 tests on gcp on windows - - python-version: "3.13" - cloud-provider: gcp - os: windows-latest-64-cores + # # only run py3.9 tests on ubuntu+aws to isolate 3.9 failures + # - python-version: "3.9" + # os: ubuntu-latest-64-cores + # cloud-provider: aws + # # only run gcp tests with latest python and ubuntu + # - cloud-provider: gcp + # python-version: "3.12" + # os: ubuntu-latest-64-cores + # # only run azure tests with latest python and ubuntu + # - cloud-provider: azure + # python-version: "3.12" + # os: ubuntu-latest-64-cores + # # run py 3.13 tests on aws/ubuntu + # - python-version: "3.13" + # cloud-provider: aws + # os: ubuntu-latest-64-cores + # # run py 3.12 doctests on azure/macos + # - python-version: "3.12" + # cloud-provider: azure + # os: macos-latest + # # run py 3.13 tests on gcp on windows + # - python-version: "3.13" + # cloud-provider: gcp + # os: windows-latest-64-cores # run py 3.14 tests on aws/ubuntu - python-version: "3.14" cloud-provider: aws diff --git a/src/snowflake/snowpark/_internal/analyzer/expression.py b/src/snowflake/snowpark/_internal/analyzer/expression.py index d95dcdc95a..0d62d5a47d 100644 --- a/src/snowflake/snowpark/_internal/analyzer/expression.py +++ b/src/snowflake/snowpark/_internal/analyzer/expression.py @@ -2,7 +2,6 @@ # Copyright (c) 2012-2025 Snowflake Computing Inc. All rights reserved. # -import copy import uuid from typing import TYPE_CHECKING, AbstractSet, Any, Dict, List, Optional, Tuple @@ -158,7 +157,9 @@ def expr_id(self) -> uuid.UUID: return self._expr_id def __copy__(self): - new = copy.copy(super()) + cls = self.__class__ + new = cls.__new__(cls) + new.__dict__.update(self.__dict__) new._expr_id = None # type: ignore return new From bf1a4a87fd95cad611feb7fbf3c9afc19557c7ec Mon Sep 17 00:00:00 2001 From: Ben Kogan Date: Fri, 13 Feb 2026 14:49:49 -0800 Subject: [PATCH 08/11] bunch more fixes --- .github/workflows/precommit.yml | 48 ++++++++++++++-------------- src/snowflake/snowpark/mock/_plan.py | 2 +- tests/integ/test_stored_procedure.py | 7 +++- tests/integ/test_udf.py | 7 +++- tests/mock/test_functions.py | 6 +++- tests/unit/test_code_generation.py | 6 ++-- 6 files changed, 46 insertions(+), 30 deletions(-) diff --git a/.github/workflows/precommit.yml b/.github/workflows/precommit.yml index 3a94d2e3d0..a4d51972a2 100644 --- a/.github/workflows/precommit.yml +++ b/.github/workflows/precommit.yml @@ -108,30 +108,30 @@ jobs: # matrix is empty for pre-commit, tests are only added # through the include directive include: - # # only run py3.9 tests on ubuntu+aws to isolate 3.9 failures - # - python-version: "3.9" - # os: ubuntu-latest-64-cores - # cloud-provider: aws - # # only run gcp tests with latest python and ubuntu - # - cloud-provider: gcp - # python-version: "3.12" - # os: ubuntu-latest-64-cores - # # only run azure tests with latest python and ubuntu - # - cloud-provider: azure - # python-version: "3.12" - # os: ubuntu-latest-64-cores - # # run py 3.13 tests on aws/ubuntu - # - python-version: "3.13" - # cloud-provider: aws - # os: ubuntu-latest-64-cores - # # run py 3.12 doctests on azure/macos - # - python-version: "3.12" - # cloud-provider: azure - # os: macos-latest - # # run py 3.13 tests on gcp on windows - # - python-version: "3.13" - # cloud-provider: gcp - # os: windows-latest-64-cores + # only run py3.9 tests on ubuntu+aws to isolate 3.9 failures + - python-version: "3.9" + os: ubuntu-latest-64-cores + cloud-provider: aws + # only run gcp tests with latest python and ubuntu + - cloud-provider: gcp + python-version: "3.12" + os: ubuntu-latest-64-cores + # only run azure tests with latest python and ubuntu + - cloud-provider: azure + python-version: "3.12" + os: ubuntu-latest-64-cores + # run py 3.13 tests on aws/ubuntu + - python-version: "3.13" + cloud-provider: aws + os: ubuntu-latest-64-cores + # run py 3.12 doctests on azure/macos + - python-version: "3.12" + cloud-provider: azure + os: macos-latest + # run py 3.13 tests on gcp on windows + - python-version: "3.13" + cloud-provider: gcp + os: windows-latest-64-cores # run py 3.14 tests on aws/ubuntu - python-version: "3.14" cloud-provider: aws diff --git a/src/snowflake/snowpark/mock/_plan.py b/src/snowflake/snowpark/mock/_plan.py index a0275600ae..0e25cb862f 100644 --- a/src/snowflake/snowpark/mock/_plan.py +++ b/src/snowflake/snowpark/mock/_plan.py @@ -590,7 +590,7 @@ def handle_function_expression( if param_name in exp.named_arguments: type_hint = str(type_hints.get(param_name, "")) keep_literal = "Column" not in type_hint - if type_hint == "typing.Optional[dict]": + if type_hint in ["typing.Optional[dict]", "dict | None"]: to_pass_kwargs[param_name] = json.loads( exp.named_arguments[param_name].sql.replace("'", '"') ) diff --git a/tests/integ/test_stored_procedure.py b/tests/integ/test_stored_procedure.py index ceaabb37fd..a5e3efd1bc 100644 --- a/tests/integ/test_stored_procedure.py +++ b/tests/integ/test_stored_procedure.py @@ -1181,7 +1181,12 @@ def _(_: Session, x, y: int) -> int: def _(_: Session, x: int, y: Union[int, float]) -> Union[int, float]: return x + y - assert "invalid type typing.Union[int, float]" in str(ex_info) + msgs = [ + "invalid type typing.Union[int, float]", + # python 3.14 changed the string representation of Union types + "invalid type int | float", + ] + assert any(msg in str(ex_info) for msg in msgs) with pytest.raises(TypeError) as ex_info: diff --git a/tests/integ/test_udf.py b/tests/integ/test_udf.py index b87956589e..bf09d74287 100644 --- a/tests/integ/test_udf.py +++ b/tests/integ/test_udf.py @@ -1458,7 +1458,12 @@ def _(x, y: int) -> int: def _(x: int, y: Union[int, float]) -> Union[int, float]: return x + y - assert "invalid type typing.Union[int, float]" in str(ex_info) + msgs = [ + "invalid type typing.Union[int, float]", + # python 3.14 changed the string representation of Union types + "invalid type int | float", + ] + assert any(msg in str(ex_info) for msg in msgs) with pytest.raises(ValueError) as ex_info: diff --git a/tests/mock/test_functions.py b/tests/mock/test_functions.py index df70994af6..90f610dc51 100644 --- a/tests/mock/test_functions.py +++ b/tests/mock/test_functions.py @@ -631,7 +631,11 @@ def test_ai_complete(session): # Mock the ai_complete function to return a simple response @patch("ai_complete") def mock_ai_complete( - model=None, prompt=None, response_format=None, model_parameters=None, **kwargs + model=None, + prompt=None, + response_format=None, + model_parameters=None, + **kwargs, ) -> ColumnEmulator: """Simple mock that returns 'AI response: ' for each input.""" assert ( diff --git a/tests/unit/test_code_generation.py b/tests/unit/test_code_generation.py index 52d15eeab6..52c7e54769 100644 --- a/tests/unit/test_code_generation.py +++ b/tests/unit/test_code_generation.py @@ -3,6 +3,7 @@ # import math +import pickle import pytest @@ -617,17 +618,18 @@ def func(): def test_variable_serialization(): nonlocalvar = "abc" + expected_hex = pickle.dumps(nonlocalvar).hex() def add(x, y): return x + y + nonlocalvar assert ( generate_source_code(add, code_as_comment=False) - == """\ + == f"""\ from __future__ import annotations import pickle -nonlocalvar = pickle.loads(bytes.fromhex('80049507000000000000008c03616263942e')) # nonlocalvar is of type and serialized by snowpark-python +nonlocalvar = pickle.loads(bytes.fromhex('{expected_hex}')) # nonlocalvar is of type and serialized by snowpark-python def add(x, y): return x + y + nonlocalvar func = add\ From 8752417a7d4b18f78c5689941066b6acdea67c07 Mon Sep 17 00:00:00 2001 From: Ben Kogan Date: Wed, 18 Feb 2026 11:31:50 -0800 Subject: [PATCH 09/11] try fix build --- recipe/meta.yaml | 3 ++- setup.py | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/recipe/meta.yaml b/recipe/meta.yaml index 6c54171a04..d3914e943b 100644 --- a/recipe/meta.yaml +++ b/recipe/meta.yaml @@ -38,7 +38,8 @@ requirements: - wheel # Snowpark IR - protobuf==3.20.1 # [py<=310] - - protobuf==4.25.3 # [py>310] + - protobuf==4.25.3 # [py>310 and py<314] + - protobuf==5.29.3 # [py>=314] # mypy-protobuf 3.7.0 requires protobuf >= 5.26 - mypy-protobuf <=3.6.0 run: diff --git a/setup.py b/setup.py index c6ac98458a..276820bfd1 100644 --- a/setup.py +++ b/setup.py @@ -71,7 +71,7 @@ # Snowpark pandas 3rd party library testing. Cap the scipy version because # Snowflake cannot find newer versions of scipy for python 3.11+. See # SNOW-2452791. - "scipy<=1.16.0", + "scipy<=1.16.3", "statsmodels", # Snowpark pandas 3rd party library testing "scikit-learn", # Snowpark pandas 3rd party library testing # plotly version restricted due to foreseen change in query counts in version 6.0.0+ @@ -80,7 +80,8 @@ # snowflake-ml-python is available on python 3.12. "snowflake-ml-python>=1.8.0; python_version<'3.12'", "s3fs", # Used in tests that read CSV files from s3 - "ray", # Used in data movement tests + # ray currently has no compatible wheels for Python 3.14. + "ray; python_version<'3.14'", # Used in data movement tests ] # read the version From 168a75cef192b2fc5b87f811914d7d96c8b6b1d7 Mon Sep 17 00:00:00 2001 From: Ben Kogan Date: Wed, 18 Feb 2026 11:58:05 -0800 Subject: [PATCH 10/11] add 3.14 to matrix --- .github/workflows/daily_precommit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/daily_precommit.yml b/.github/workflows/daily_precommit.yml index 2f78cab436..8733b70352 100644 --- a/.github/workflows/daily_precommit.yml +++ b/.github/workflows/daily_precommit.yml @@ -491,7 +491,7 @@ jobs: fail-fast: false matrix: os: [macos-latest, windows-latest, ubuntu-latest] - python-version: ["3.9", "3.10", "3.11", "3.12"] # SNOW-2230787 test failing on Python 3.13 + python-version: ["3.9", "3.10", "3.11", "3.12", "3.14"] # SNOW-2230787 test failing on Python 3.13 cloud-provider: [gcp] protobuf-version: ["3.20.1", "4.25.3", "5.28.3"] steps: From 5a33bf947732b0e273335d9d3a6406c8ca551353 Mon Sep 17 00:00:00 2001 From: Ben Kogan Date: Wed, 18 Feb 2026 13:18:51 -0800 Subject: [PATCH 11/11] add libprotobuf --- recipe/meta.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/recipe/meta.yaml b/recipe/meta.yaml index d3914e943b..ba8cd6e524 100644 --- a/recipe/meta.yaml +++ b/recipe/meta.yaml @@ -40,6 +40,7 @@ requirements: - protobuf==3.20.1 # [py<=310] - protobuf==4.25.3 # [py>310 and py<314] - protobuf==5.29.3 # [py>=314] + - libprotobuf >=5.29.3 # [py>=314] # mypy-protobuf 3.7.0 requires protobuf >= 5.26 - mypy-protobuf <=3.6.0 run: