snowflake-snowpark-python 1.51.1__tar.gz → 1.52.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/CHANGELOG.md +22 -0
- {snowflake_snowpark_python-1.51.1/src/snowflake_snowpark_python.egg-info → snowflake_snowpark_python-1.52.0}/PKG-INFO +4 -5
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/README.md +2 -2
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/setup.py +2 -3
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/analyzer_utils.py +1 -8
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/select_statement.py +2 -9
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/snowflake_plan.py +1 -7
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/snowflake_plan_node.py +1 -9
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/table_function.py +1 -9
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/code_generation.py +1 -7
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/compiler/cte_utils.py +6 -1
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/compiler/repeated_subquery_elimination.py +38 -10
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/debug_utils.py +1 -1
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/type_utils.py +1 -7
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/udf_utils.py +2 -8
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/utils.py +27 -3
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/xml_schema_inference.py +1 -1
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/column.py +1 -8
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/dataframe.py +17 -10
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/dataframe_ai_functions.py +4 -4
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/dataframe_na_functions.py +1 -9
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/dataframe_reader.py +57 -11
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/dataframe_stat_functions.py +1 -9
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/dataframe_writer.py +1 -9
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/files.py +1 -8
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/functions.py +5 -12
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/__init__.py +2 -2
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/ordered_dataframe.py +1 -8
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/indexing_overrides.py +1 -1
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/pd_extensions.py +1 -1
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/utils.py +2 -2
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/row.py +1 -9
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/secrets.py +39 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/session.py +17 -8
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/stored_procedure.py +1 -7
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/table.py +13 -8
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/types.py +3 -9
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/udaf.py +1 -7
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/udf.py +1 -7
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/udtf.py +1 -7
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/version.py +1 -1
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/window.py +1 -7
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0/src/snowflake_snowpark_python.egg-info}/PKG-INFO +4 -5
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/LICENSE.txt +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/MANIFEST.in +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/pyproject.toml +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/setup.cfg +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_functions/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_functions/general_functions.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_functions/scalar_functions.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/analyzer.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/binary_expression.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/binary_plan_node.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/datatype_mapper.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/expression.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/grouping_set.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/metadata_utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/query_plan_analysis_utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/schema_utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/sort_expression.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/table_merge_expression.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/unary_expression.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/unary_plan_node.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/analyzer/window_expression.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/ast/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/ast/batch.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/ast/builder.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/ast/utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/compiler/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/compiler/large_query_breakdown.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/compiler/plan_compiler.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/compiler/query_generator.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/compiler/telemetry_constants.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/compiler/utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/datasource_partitioner.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/datasource_reader.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/datasource_typing.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/dbms_dialects/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/dbms_dialects/base_dialect.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/dbms_dialects/databricks_dialect.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/dbms_dialects/mysql_dialect.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/dbms_dialects/oracledb_dialect.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/dbms_dialects/postgresql_dialect.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/dbms_dialects/sqlite3_dialect.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/dbms_dialects/sqlserver_dialect.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/drivers/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/drivers/base_driver.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/drivers/databricks_driver.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/drivers/oracledb_driver.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/drivers/psycopg2_driver.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/drivers/pymsql_driver.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/drivers/pyodbc_driver.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/drivers/sqlite_driver.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/jdbc.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/data_source/utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/error_message.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/event_table_telemetry.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/open_telemetry.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/packaging_utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/proto/generated/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/proto/generated/ast_pb2.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/proto/generated/ast_pb2.pyi +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/select_projection_complexity_utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/server_connection.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/snowpark_profiler.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/telemetry.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/temp_table_auto_cleaner.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/xml_reader.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/_internal/xpath_handlers.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/async_job.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/catalog.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/context.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/dataframe_analytics_functions.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/dataframe_profiler.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/exceptions.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/file_operation.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/lineage.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_analyzer.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_connection.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_constants.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_functions.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_nop_analyzer.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_nop_connection.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_nop_plan.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_options.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_pandas_util.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_plan.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_plan_builder.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_select_statement.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_snowflake_data_type.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_snowflake_to_pandas_converter.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_stage_registry.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_stored_procedure.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_telemetry.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_udaf.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_udf.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_udf_utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_udtf.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_util.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/_window_utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/mock/exceptions.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/config/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/config/__main__.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/config/envvars.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/config/pubsub.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/conftest.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/aggregation_utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/align_utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/apply_utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/binary_op_utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/concat_utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/cumulative_utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/cut_utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/frame.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/generator_utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/get_dummies_utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/groupby_utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/indexing_utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/io_utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/isin_utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/join_utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/pivot_utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/resample_utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/row_count_estimation.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/session.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/snowpark_pandas_types.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/statement_params_constants.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/telemetry.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/timestamp_utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/transpose_utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/type_utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/unpivot_utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/where_utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_internal/window_utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/_typing.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/compiler/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/compiler/doc_utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/compiler/ray_utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/compiler/snowflake_query_compiler.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/docstrings/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/docstrings/base.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/docstrings/dataframe.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/docstrings/datetime_index.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/docstrings/general.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/docstrings/groupby.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/docstrings/index.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/docstrings/io.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/docstrings/resample.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/docstrings/series.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/docstrings/series_utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/docstrings/shared_docs.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/docstrings/timedelta_index.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/docstrings/window.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/base_overrides.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/dataframe_extensions.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/dataframe_groupby_overrides.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/dataframe_overrides.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/datetime_index.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/general_overrides.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/index.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/io_overrides.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/resample_overrides.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/resampler_groupby_overrides.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/rolling_groupby_overrides.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/series_extensions.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/series_groupby_overrides.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/series_overrides.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/snow_partition_iterator.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/timedelta_index.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/extensions/window_overrides.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/io/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/io/factories.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/io/snow_io.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/utils/__init__.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/utils/error_message.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/utils/exceptions.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/utils/frontend_constants.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/utils/numpy_to_pandas.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/plugin/utils/warning_message.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/modin/utils.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/py.typed +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/query_history.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/relational_grouped_dataframe.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/stored_procedure_profiler.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/table_function.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/testing.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake/snowpark/udf_profiler.py +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake_snowpark_python.egg-info/SOURCES.txt +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake_snowpark_python.egg-info/dependency_links.txt +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake_snowpark_python.egg-info/namespace_packages.txt +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake_snowpark_python.egg-info/not-zip-safe +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake_snowpark_python.egg-info/requires.txt +0 -0
- {snowflake_snowpark_python-1.51.1 → snowflake_snowpark_python-1.52.0}/src/snowflake_snowpark_python.egg-info/top_level.txt +0 -0
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# Release History
|
|
2
2
|
|
|
3
|
+
## 1.52.0 (2026-06-10)
|
|
4
|
+
|
|
5
|
+
### Snowpark Python API Updates
|
|
6
|
+
|
|
7
|
+
#### New Features
|
|
8
|
+
|
|
9
|
+
- Added `get_wif_token` to `snowflake.snowpark.secrets` for workload identity federation tokens on the Snowflake server (not available in SPCS file-based secret environments).
|
|
10
|
+
|
|
11
|
+
#### Bug Fixes
|
|
12
|
+
|
|
13
|
+
- Fixed a bug where copying a `DataFrame` via `copy.copy()` lost post-aggregate state, causing subsequent `.limit()` or `.sort()` to generate incorrect SQL.
|
|
14
|
+
- Fixed a bug where calling `DataFrame.alias()` twice on the same DataFrame (e.g. for a self-join) caused both aliases to share the same internal column-mapping dictionary. This made `col("R", "col")` resolve to the same column as `col("L", "col")`, producing incorrect join conditions and filter expressions.
|
|
15
|
+
- Fixed a bug where `cloudpickle` could not be resolved when registering a Python stored procedure or UDF with `runtime_version='3.13'`.
|
|
16
|
+
|
|
17
|
+
#### Improvements
|
|
18
|
+
|
|
19
|
+
- Improved CTE optimization to deduplicate identical subtrees in self-joins, which were previously emitted as repeated subqueries.
|
|
20
|
+
|
|
21
|
+
#### Deprecations
|
|
22
|
+
|
|
23
|
+
- Removed support for Python 3.9.
|
|
24
|
+
|
|
3
25
|
## 1.51.1 (2026-05-28)
|
|
4
26
|
|
|
5
27
|
#### Documentation
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: snowflake-snowpark-python
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.52.0
|
|
4
4
|
Summary: Snowflake Snowpark for Python
|
|
5
5
|
Home-page: https://www.snowflake.com/
|
|
6
6
|
Author: Snowflake, Inc
|
|
@@ -22,7 +22,6 @@ Classifier: License :: OSI Approved :: Apache Software License
|
|
|
22
22
|
Classifier: Operating System :: OS Independent
|
|
23
23
|
Classifier: Programming Language :: SQL
|
|
24
24
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
25
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
26
25
|
Classifier: Programming Language :: Python :: 3.10
|
|
27
26
|
Classifier: Programming Language :: Python :: 3.11
|
|
28
27
|
Classifier: Programming Language :: Python :: 3.12
|
|
@@ -33,7 +32,7 @@ Classifier: Topic :: Software Development :: Libraries
|
|
|
33
32
|
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
|
34
33
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
35
34
|
Classifier: Topic :: Scientific/Engineering :: Information Analysis
|
|
36
|
-
Requires-Python: >=3.
|
|
35
|
+
Requires-Python: >=3.10, <3.15
|
|
37
36
|
Description-Content-Type: text/markdown
|
|
38
37
|
License-File: LICENSE.txt
|
|
39
38
|
Requires-Dist: setuptools>=40.6.0
|
|
@@ -149,9 +148,9 @@ If you don't have a Snowflake account yet, you can [sign up for a 30-day free tr
|
|
|
149
148
|
|
|
150
149
|
### Create a Python virtual environment
|
|
151
150
|
You can use [miniconda][miniconda], [anaconda][anaconda], or [virtualenv][virtualenv]
|
|
152
|
-
to create a Python 3.
|
|
151
|
+
to create a Python 3.10, 3.11, 3.12 or 3.13 virtual environment.
|
|
153
152
|
|
|
154
|
-
For Snowpark pandas, only Python 3.
|
|
153
|
+
For Snowpark pandas, only Python 3.10 or 3.11 is supported.
|
|
155
154
|
|
|
156
155
|
To have the best experience when using it with UDFs, [creating a local conda environment with the Snowflake channel][use snowflake channel] is recommended.
|
|
157
156
|
|
|
@@ -18,9 +18,9 @@ If you don't have a Snowflake account yet, you can [sign up for a 30-day free tr
|
|
|
18
18
|
|
|
19
19
|
### Create a Python virtual environment
|
|
20
20
|
You can use [miniconda][miniconda], [anaconda][anaconda], or [virtualenv][virtualenv]
|
|
21
|
-
to create a Python 3.
|
|
21
|
+
to create a Python 3.10, 3.11, 3.12 or 3.13 virtual environment.
|
|
22
22
|
|
|
23
|
-
For Snowpark pandas, only Python 3.
|
|
23
|
+
For Snowpark pandas, only Python 3.10 or 3.11 is supported.
|
|
24
24
|
|
|
25
25
|
To have the best experience when using it with UDFs, [creating a local conda environment with the Snowflake channel][use snowflake channel] is recommended.
|
|
26
26
|
|
|
@@ -32,10 +32,10 @@ INSTALL_REQ_LIST = [
|
|
|
32
32
|
"python-dateutil", # Snowpark IR
|
|
33
33
|
"tzlocal", # Snowpark IR
|
|
34
34
|
]
|
|
35
|
-
REQUIRED_PYTHON_VERSION = ">=3.
|
|
35
|
+
REQUIRED_PYTHON_VERSION = ">=3.10, <3.15"
|
|
36
36
|
|
|
37
37
|
if os.getenv("SNOWFLAKE_IS_PYTHON_RUNTIME_TEST", False):
|
|
38
|
-
REQUIRED_PYTHON_VERSION = ">=3.
|
|
38
|
+
REQUIRED_PYTHON_VERSION = ">=3.10"
|
|
39
39
|
|
|
40
40
|
PANDAS_REQUIREMENTS = [
|
|
41
41
|
f"snowflake-connector-python[pandas]{CONNECTOR_DEPENDENCY_VERSION}",
|
|
@@ -246,7 +246,6 @@ setup(
|
|
|
246
246
|
"Operating System :: OS Independent",
|
|
247
247
|
"Programming Language :: SQL",
|
|
248
248
|
"Programming Language :: Python :: 3 :: Only",
|
|
249
|
-
"Programming Language :: Python :: 3.9",
|
|
250
249
|
"Programming Language :: Python :: 3.10",
|
|
251
250
|
"Programming Language :: Python :: 3.11",
|
|
252
251
|
"Programming Language :: Python :: 3.12",
|
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
import json
|
|
7
7
|
import math
|
|
8
8
|
import os
|
|
9
|
-
import sys
|
|
10
9
|
import tempfile
|
|
11
10
|
from typing import Any, Dict, List, Optional, Tuple, Union, Literal, Sequence
|
|
12
11
|
|
|
@@ -52,13 +51,7 @@ from snowflake.snowpark._internal.utils import (
|
|
|
52
51
|
from snowflake.snowpark.row import Row
|
|
53
52
|
from snowflake.snowpark.types import DataType
|
|
54
53
|
|
|
55
|
-
|
|
56
|
-
# Python 3.9 can use both
|
|
57
|
-
# Python 3.10 needs to use collections.abc.Iterable because typing.Iterable is removed
|
|
58
|
-
if sys.version_info <= (3, 9):
|
|
59
|
-
from typing import Iterable
|
|
60
|
-
else:
|
|
61
|
-
from collections.abc import Iterable
|
|
54
|
+
from collections.abc import Iterable
|
|
62
55
|
|
|
63
56
|
LEFT_PARENTHESIS = "("
|
|
64
57
|
RIGHT_PARENTHESIS = ")"
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
# Copyright (c) 2012-2025 Snowflake Computing Inc. All rights reserved.
|
|
3
3
|
#
|
|
4
4
|
|
|
5
|
-
import sys
|
|
6
5
|
import uuid
|
|
7
6
|
import re
|
|
8
7
|
from abc import ABC, abstractmethod
|
|
@@ -90,13 +89,7 @@ from snowflake.snowpark._internal.utils import (
|
|
|
90
89
|
)
|
|
91
90
|
import snowflake.snowpark.context as context
|
|
92
91
|
|
|
93
|
-
|
|
94
|
-
# Python 3.9 can use both
|
|
95
|
-
# Python 3.10 needs to use collections.abc.Iterable because typing.Iterable is removed
|
|
96
|
-
if sys.version_info <= (3, 9):
|
|
97
|
-
from typing import Iterable
|
|
98
|
-
else:
|
|
99
|
-
from collections.abc import Iterable
|
|
92
|
+
from collections.abc import Iterable
|
|
100
93
|
|
|
101
94
|
SET_UNION = analyzer_utils.UNION
|
|
102
95
|
SET_UNION_ALL = analyzer_utils.UNION_ALL
|
|
@@ -963,7 +956,7 @@ class SelectStatement(Selectable):
|
|
|
963
956
|
new._snowflake_plan = None
|
|
964
957
|
new.flatten_disabled = False # by default a SelectStatement can be flattened.
|
|
965
958
|
new._api_calls = self._api_calls.copy() if self._api_calls is not None else None
|
|
966
|
-
new.df_aliased_col_name_to_real_col_name = (
|
|
959
|
+
new.df_aliased_col_name_to_real_col_name = deepcopy(
|
|
967
960
|
self.df_aliased_col_name_to_real_col_name
|
|
968
961
|
)
|
|
969
962
|
new._merge_projection_complexity_with_subquery = (
|
|
@@ -143,13 +143,7 @@ from snowflake.snowpark.row import Row
|
|
|
143
143
|
from snowflake.snowpark.types import StructType
|
|
144
144
|
import snowflake.snowpark.context as context
|
|
145
145
|
|
|
146
|
-
|
|
147
|
-
# Python 3.9 can use both
|
|
148
|
-
# Python 3.10 needs to use collections.abc.Iterable because typing.Iterable is removed
|
|
149
|
-
if sys.version_info <= (3, 9):
|
|
150
|
-
from typing import Iterable
|
|
151
|
-
else:
|
|
152
|
-
from collections.abc import Iterable
|
|
146
|
+
from collections.abc import Iterable
|
|
153
147
|
|
|
154
148
|
_logger = getLogger(__name__)
|
|
155
149
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# Copyright (c) 2012-2025 Snowflake Computing Inc. All rights reserved.
|
|
4
4
|
#
|
|
5
5
|
|
|
6
|
-
import
|
|
6
|
+
from collections.abc import Iterable
|
|
7
7
|
from enum import Enum
|
|
8
8
|
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple
|
|
9
9
|
|
|
@@ -17,14 +17,6 @@ from snowflake.snowpark._internal.analyzer.query_plan_analysis_utils import (
|
|
|
17
17
|
from snowflake.snowpark.row import Row
|
|
18
18
|
from snowflake.snowpark.types import StructType
|
|
19
19
|
|
|
20
|
-
# Python 3.8 needs to use typing.Iterable because collections.abc.Iterable is not subscriptable
|
|
21
|
-
# Python 3.9 can use both
|
|
22
|
-
# Python 3.10 needs to use collections.abc.Iterable because typing.Iterable is removed
|
|
23
|
-
if sys.version_info <= (3, 9):
|
|
24
|
-
from typing import Iterable
|
|
25
|
-
else:
|
|
26
|
-
from collections.abc import Iterable
|
|
27
|
-
|
|
28
20
|
if TYPE_CHECKING:
|
|
29
21
|
from snowflake.snowpark import Session
|
|
30
22
|
from snowflake.snowpark.udtf import UserDefinedTableFunction
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# Copyright (c) 2012-2025 Snowflake Computing Inc. All rights reserved.
|
|
3
3
|
#
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
from collections.abc import Iterable
|
|
6
6
|
from typing import Dict, List, Optional
|
|
7
7
|
|
|
8
8
|
from snowflake.snowpark._internal.analyzer.expression import Expression
|
|
@@ -13,14 +13,6 @@ from snowflake.snowpark._internal.analyzer.query_plan_analysis_utils import (
|
|
|
13
13
|
from snowflake.snowpark._internal.analyzer.snowflake_plan_node import LogicalPlan
|
|
14
14
|
from snowflake.snowpark._internal.analyzer.sort_expression import SortOrder
|
|
15
15
|
|
|
16
|
-
# Python 3.8 needs to use typing.Iterable because collections.abc.Iterable is not subscriptable
|
|
17
|
-
# Python 3.9 can use both
|
|
18
|
-
# Python 3.10 needs to use collections.abc.Iterable because typing.Iterable is removed
|
|
19
|
-
if sys.version_info <= (3, 9):
|
|
20
|
-
from typing import Iterable
|
|
21
|
-
else:
|
|
22
|
-
from collections.abc import Iterable
|
|
23
|
-
|
|
24
16
|
|
|
25
17
|
class TableFunctionPartitionSpecDefinition(Expression):
|
|
26
18
|
def __init__(
|
|
@@ -17,13 +17,7 @@ from typing import Any, Dict, List, Set, Tuple, Union
|
|
|
17
17
|
|
|
18
18
|
import opcode
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
# Python 3.9 can use both
|
|
22
|
-
# Python 3.10 needs to use collections.abc.Iterable because typing.Iterable is removed
|
|
23
|
-
if sys.version_info <= (3, 9):
|
|
24
|
-
from typing import Iterable
|
|
25
|
-
else:
|
|
26
|
-
from collections.abc import Iterable
|
|
20
|
+
from collections.abc import Iterable
|
|
27
21
|
|
|
28
22
|
logger = getLogger(__name__)
|
|
29
23
|
|
|
@@ -307,7 +307,12 @@ def encode_query_id(node: "TreeNode") -> Optional[str]:
|
|
|
307
307
|
if query_params:
|
|
308
308
|
string = f"{string}#{query_params}"
|
|
309
309
|
if hasattr(node, "expr_to_alias") and node.expr_to_alias:
|
|
310
|
-
|
|
310
|
+
# Hash by alias values only, not the UUID keys, since UUID keys are regenerated on every deep-copy/re-resolve (e.g. the two
|
|
311
|
+
# branches of a self-join). This lets nodes representing the same computation hash identically, enabling CTE dedup for self-joins.
|
|
312
|
+
# NOTE: since nodes with different UUID keys can now share a CTE, _replace_duplicate_node_with_cte must merge each duplicate's
|
|
313
|
+
# UUID→alias entries into the shared CTE so parent re-resolution can resolve any UUID variant (see companion comment there).
|
|
314
|
+
# Different alias values (e.g. a "_WITH_AD_GROUP" join suffix from _disambiguate) still hash differently, preserving SNOW-2261400.
|
|
315
|
+
string = f"{string}#{sorted(set(node.expr_to_alias.values()))}"
|
|
311
316
|
if (
|
|
312
317
|
hasattr(node, "df_aliased_col_name_to_real_col_name")
|
|
313
318
|
and node.df_aliased_col_name_to_real_col_name
|
|
@@ -108,6 +108,24 @@ class RepeatedSubqueryElimination:
|
|
|
108
108
|
total_num_ctes=self._total_number_ctes,
|
|
109
109
|
)
|
|
110
110
|
|
|
111
|
+
@staticmethod
|
|
112
|
+
def _has_alias_conflict(
|
|
113
|
+
node: TreeNode, existing_cte: Optional[SnowflakePlan]
|
|
114
|
+
) -> bool:
|
|
115
|
+
"""Whether sharing ``existing_cte`` for ``node`` would map the same expr_id to a
|
|
116
|
+
different alias. encode_query_id hashes expr_to_alias by alias values only, so
|
|
117
|
+
nodes mapping the same expr_id to different aliases can collide. Merging such a
|
|
118
|
+
node into the shared CTE would silently drop an entry and corrupt parent column
|
|
119
|
+
resolution, so in that case we skip the CTE and render the node inline."""
|
|
120
|
+
if existing_cte is None:
|
|
121
|
+
return False
|
|
122
|
+
node_expr_to_alias = getattr(node, "expr_to_alias", None) or {}
|
|
123
|
+
return any(
|
|
124
|
+
key in existing_cte.expr_to_alias
|
|
125
|
+
and existing_cte.expr_to_alias[key] != alias
|
|
126
|
+
for key, alias in node_expr_to_alias.items()
|
|
127
|
+
)
|
|
128
|
+
|
|
111
129
|
def _replace_duplicate_node_with_cte(
|
|
112
130
|
self,
|
|
113
131
|
root: TreeNode,
|
|
@@ -159,16 +177,20 @@ class RepeatedSubqueryElimination:
|
|
|
159
177
|
if node in visited_nodes:
|
|
160
178
|
continue
|
|
161
179
|
|
|
162
|
-
#
|
|
163
|
-
#
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
180
|
+
# Decide whether this node should be represented by a (new or shared) CTE:
|
|
181
|
+
# it must be a detected duplicate, and sharing the CTE must not introduce an
|
|
182
|
+
# alias conflict (see _has_alias_conflict). When it cannot be a CTE, the node
|
|
183
|
+
# is left inline and only the parent-propagation path applies, exactly like a
|
|
184
|
+
# non-duplicated node.
|
|
185
|
+
resolved_with_block = resolved_with_block_map.get(
|
|
186
|
+
node.encoded_node_id_with_query
|
|
187
|
+
)
|
|
188
|
+
is_cte_node = node.encoded_node_id_with_query in duplicated_node_ids and (
|
|
189
|
+
not self._has_alias_conflict(node, resolved_with_block)
|
|
190
|
+
)
|
|
191
|
+
if is_cte_node:
|
|
192
|
+
if resolved_with_block is None:
|
|
193
|
+
# no CTE block has been created for this node yet, create one.
|
|
172
194
|
if (
|
|
173
195
|
self._query_generator.session.reduce_describe_query_enabled
|
|
174
196
|
and context._is_snowpark_connect_compatible_mode
|
|
@@ -187,6 +209,12 @@ class RepeatedSubqueryElimination:
|
|
|
187
209
|
node.encoded_node_id_with_query
|
|
188
210
|
] = resolved_with_block
|
|
189
211
|
self._total_number_ctes += 1
|
|
212
|
+
elif getattr(node, "expr_to_alias", None):
|
|
213
|
+
# reuse the existing CTE block. expr_ids are regenerated on copy, so
|
|
214
|
+
# this node's keys differ from the node the CTE was built from; merge
|
|
215
|
+
# this node's entries so every expr_id variant stays resolvable during
|
|
216
|
+
# parent re-resolution.
|
|
217
|
+
resolved_with_block.expr_to_alias.update(node.expr_to_alias)
|
|
190
218
|
_update_parents(
|
|
191
219
|
node, should_replace_child=True, new_child=resolved_with_block
|
|
192
220
|
)
|
|
@@ -64,7 +64,7 @@ class DataFrameTraceNode:
|
|
|
64
64
|
code_lines[0] = code_lines[0][start_column:]
|
|
65
65
|
code_lines[-1] = code_lines[-1][:end_column]
|
|
66
66
|
else:
|
|
67
|
-
# For python 3.
|
|
67
|
+
# For python 3.10, we do not extract the end line from the source code
|
|
68
68
|
# so we just read the start line and return.
|
|
69
69
|
for line in itertools.islice(f, start_line - 1, start_line):
|
|
70
70
|
code_lines.append(line)
|
|
@@ -83,13 +83,7 @@ from snowflake.snowpark.types import (
|
|
|
83
83
|
File,
|
|
84
84
|
)
|
|
85
85
|
|
|
86
|
-
|
|
87
|
-
# Python 3.9 can use both
|
|
88
|
-
# Python 3.10 needs to use collections.abc.Iterable because typing.Iterable is removed
|
|
89
|
-
try:
|
|
90
|
-
from typing import Iterable # noqa: F401
|
|
91
|
-
except ImportError:
|
|
92
|
-
from collections.abc import Iterable # noqa: F401
|
|
86
|
+
from collections.abc import Iterable # noqa: F401
|
|
93
87
|
|
|
94
88
|
if installed_pandas:
|
|
95
89
|
from snowflake.snowpark.types import (
|
|
@@ -71,13 +71,7 @@ if installed_pandas:
|
|
|
71
71
|
PandasSeriesType,
|
|
72
72
|
)
|
|
73
73
|
|
|
74
|
-
|
|
75
|
-
# Python 3.9 can use both
|
|
76
|
-
# Python 3.10 needs to use collections.abc.Iterable because typing.Iterable is removed
|
|
77
|
-
if sys.version_info <= (3, 9):
|
|
78
|
-
from typing import Iterable
|
|
79
|
-
else:
|
|
80
|
-
from collections.abc import Iterable
|
|
74
|
+
from collections.abc import Iterable
|
|
81
75
|
|
|
82
76
|
logger = getLogger(__name__)
|
|
83
77
|
|
|
@@ -1276,7 +1270,7 @@ def resolve_imports_and_packages(
|
|
|
1276
1270
|
any(pkg.startswith("cloudpickle") for pkg in packages)
|
|
1277
1271
|
)
|
|
1278
1272
|
resolved_packages = packages + (
|
|
1279
|
-
[f"cloudpickle
|
|
1273
|
+
[f"cloudpickle>={cloudpickle.__version__}"]
|
|
1280
1274
|
if not has_cloudpickle
|
|
1281
1275
|
else []
|
|
1282
1276
|
)
|
|
@@ -1955,6 +1955,7 @@ class TimeTravelConfig(NamedTuple):
|
|
|
1955
1955
|
timestamp: Optional[str] = None
|
|
1956
1956
|
timestamp_type: Optional[str] = None
|
|
1957
1957
|
stream: Optional[str] = None
|
|
1958
|
+
version: Optional[int] = None
|
|
1958
1959
|
|
|
1959
1960
|
@staticmethod
|
|
1960
1961
|
def validate_and_normalize_params(
|
|
@@ -1964,6 +1965,7 @@ class TimeTravelConfig(NamedTuple):
|
|
|
1964
1965
|
timestamp: Optional[Union[str, datetime.datetime]] = None,
|
|
1965
1966
|
timestamp_type: Optional[Union[str, "TimestampTimeZone"]] = None,
|
|
1966
1967
|
stream: Optional[str] = None,
|
|
1968
|
+
version: Optional[int] = None,
|
|
1967
1969
|
) -> Optional["TimeTravelConfig"]:
|
|
1968
1970
|
"""
|
|
1969
1971
|
Validates and normalizes time travel parameters.
|
|
@@ -1986,7 +1988,7 @@ class TimeTravelConfig(NamedTuple):
|
|
|
1986
1988
|
ValueError: If parameters are invalid.
|
|
1987
1989
|
"""
|
|
1988
1990
|
time_travel_arg_count = sum(
|
|
1989
|
-
arg is not None for arg in (statement, offset, timestamp, stream)
|
|
1991
|
+
arg is not None for arg in (statement, offset, timestamp, stream, version)
|
|
1990
1992
|
)
|
|
1991
1993
|
|
|
1992
1994
|
# Validate mode
|
|
@@ -2003,10 +2005,28 @@ class TimeTravelConfig(NamedTuple):
|
|
|
2003
2005
|
f"Invalid time travel mode: {time_travel_mode}. Must be 'at' or 'before'."
|
|
2004
2006
|
)
|
|
2005
2007
|
|
|
2008
|
+
# version (Iceberg snapshot id) only works with 'at' mode — matches
|
|
2009
|
+
# Snowflake's ``AT(VERSION => <id>)`` grammar and Spark Iceberg's
|
|
2010
|
+
# ``snapshot-id`` option semantics ("read snapshot N", not "before N").
|
|
2011
|
+
if version is not None and time_travel_mode.lower() != "at":
|
|
2012
|
+
raise ValueError(
|
|
2013
|
+
"Iceberg snapshot version time travel can only be used with "
|
|
2014
|
+
"time_travel_mode='at', not 'before'."
|
|
2015
|
+
)
|
|
2016
|
+
|
|
2017
|
+
# Validate version type — snapshot IDs are 64-bit integers in Iceberg.
|
|
2018
|
+
# Reject bool explicitly because ``isinstance(True, int)`` is True in Python.
|
|
2019
|
+
if version is not None and (
|
|
2020
|
+
not isinstance(version, int) or isinstance(version, bool)
|
|
2021
|
+
):
|
|
2022
|
+
raise ValueError(
|
|
2023
|
+
f"'version' must be an int Iceberg snapshot id, got {type(version).__name__}."
|
|
2024
|
+
)
|
|
2025
|
+
|
|
2006
2026
|
# Validate exactly one parameter is provided
|
|
2007
2027
|
if time_travel_arg_count != 1:
|
|
2008
2028
|
raise ValueError(
|
|
2009
|
-
"Exactly one of 'statement', 'offset', 'timestamp', or '
|
|
2029
|
+
"Exactly one of 'statement', 'offset', 'timestamp', 'stream', or 'version' must be provided."
|
|
2010
2030
|
)
|
|
2011
2031
|
|
|
2012
2032
|
# Normalize timestamp
|
|
@@ -2040,6 +2060,7 @@ class TimeTravelConfig(NamedTuple):
|
|
|
2040
2060
|
timestamp=normalized_timestamp,
|
|
2041
2061
|
timestamp_type=timestamp_type,
|
|
2042
2062
|
stream=stream,
|
|
2063
|
+
version=version,
|
|
2043
2064
|
)
|
|
2044
2065
|
|
|
2045
2066
|
def generate_sql_clause(self) -> str:
|
|
@@ -2048,7 +2069,8 @@ class TimeTravelConfig(NamedTuple):
|
|
|
2048
2069
|
Args:
|
|
2049
2070
|
config: Time travel configuration.
|
|
2050
2071
|
Returns:
|
|
2051
|
-
SQL clause like " AT (TIMESTAMP => TO_TIMESTAMP_NTZ('...'))"
|
|
2072
|
+
SQL clause like " AT (TIMESTAMP => TO_TIMESTAMP_NTZ('...'))" or
|
|
2073
|
+
" AT (VERSION => 1234567890)" for Iceberg snapshot id time travel.
|
|
2052
2074
|
"""
|
|
2053
2075
|
clause = f" {self.time_travel_mode.upper()} "
|
|
2054
2076
|
|
|
@@ -2058,6 +2080,8 @@ class TimeTravelConfig(NamedTuple):
|
|
|
2058
2080
|
clause += f"(OFFSET => {self.offset})"
|
|
2059
2081
|
elif self.stream is not None:
|
|
2060
2082
|
clause += f"(STREAM => '{self.stream}')"
|
|
2083
|
+
elif self.version is not None:
|
|
2084
|
+
clause += f"(VERSION => {self.version})"
|
|
2061
2085
|
elif self.timestamp is not None:
|
|
2062
2086
|
if self.timestamp_type is not None:
|
|
2063
2087
|
timestamp_type = self.timestamp_type.upper()
|
|
@@ -112,7 +112,7 @@ def _infer_primitive_type(text: str) -> DataType:
|
|
|
112
112
|
pass
|
|
113
113
|
|
|
114
114
|
# Timestamp (Spark default: TimestampFormatter with CAST logic)
|
|
115
|
-
# Backward compatibility: Python 3.
|
|
115
|
+
# Backward compatibility: Python 3.10 fromisoformat doesn't support 'Z' suffix; replace with +00:00
|
|
116
116
|
try:
|
|
117
117
|
ts_text = text.replace("Z", "+00:00") if text.endswith("Z") else text
|
|
118
118
|
datetime.fromisoformat(ts_text)
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
# Copyright (c) 2012-2025 Snowflake Computing Inc. All rights reserved.
|
|
4
4
|
#
|
|
5
5
|
|
|
6
|
-
import sys
|
|
7
6
|
import typing
|
|
8
7
|
from typing import Any, Optional, Union
|
|
9
8
|
|
|
@@ -100,13 +99,7 @@ from snowflake.snowpark.types import (
|
|
|
100
99
|
)
|
|
101
100
|
from snowflake.snowpark.window import Window, WindowSpec
|
|
102
101
|
|
|
103
|
-
|
|
104
|
-
# Python 3.9 can use both
|
|
105
|
-
# Python 3.10 needs to use collections.abc.Iterable because typing.Iterable is removed
|
|
106
|
-
if sys.version_info <= (3, 9):
|
|
107
|
-
from typing import Iterable
|
|
108
|
-
else:
|
|
109
|
-
from collections.abc import Iterable
|
|
102
|
+
from collections.abc import Iterable
|
|
110
103
|
|
|
111
104
|
|
|
112
105
|
def _to_col_if_lit(
|
|
@@ -8,7 +8,6 @@ import datetime
|
|
|
8
8
|
import itertools
|
|
9
9
|
import random
|
|
10
10
|
import re
|
|
11
|
-
import sys
|
|
12
11
|
from collections import Counter
|
|
13
12
|
from decimal import Decimal
|
|
14
13
|
from functools import cached_property, reduce
|
|
@@ -235,13 +234,7 @@ from snowflake.snowpark.types import (
|
|
|
235
234
|
YearMonthIntervalType,
|
|
236
235
|
)
|
|
237
236
|
|
|
238
|
-
|
|
239
|
-
# Python 3.9 can use both
|
|
240
|
-
# Python 3.10 needs to use collections.abc.Iterable because typing.Iterable is removed
|
|
241
|
-
if sys.version_info <= (3, 9):
|
|
242
|
-
from typing import Iterable
|
|
243
|
-
else:
|
|
244
|
-
from collections.abc import Iterable
|
|
237
|
+
from collections.abc import Iterable
|
|
245
238
|
|
|
246
239
|
if TYPE_CHECKING:
|
|
247
240
|
import modin.pandas # pragma: no cover
|
|
@@ -1054,9 +1047,21 @@ class DataFrame:
|
|
|
1054
1047
|
else:
|
|
1055
1048
|
return copy.copy(self._plan)
|
|
1056
1049
|
|
|
1050
|
+
def _copy_agg_state(self, target: "DataFrame") -> None:
|
|
1051
|
+
"""Copy post-aggregate state to target so operations like .limit() and
|
|
1052
|
+
.sort() on the copy go through _build_post_agg_df and generate correct
|
|
1053
|
+
SQL (ORDER BY inside the aggregate subquery, not on the outer query)."""
|
|
1054
|
+
target._ops_after_agg = self._ops_after_agg
|
|
1055
|
+
target._agg_base_plan = self._agg_base_plan
|
|
1056
|
+
target._agg_base_select_statement = self._agg_base_select_statement
|
|
1057
|
+
target._pending_havings = self._pending_havings
|
|
1058
|
+
target._pending_order_bys = self._pending_order_bys
|
|
1059
|
+
|
|
1057
1060
|
def _copy_without_ast(self) -> "DataFrame":
|
|
1058
1061
|
"""Returns a shallow copy of the DataFrame without AST generation."""
|
|
1059
|
-
|
|
1062
|
+
result = DataFrame(self._session, self._copy_plan(), _emit_ast=False)
|
|
1063
|
+
self._copy_agg_state(result)
|
|
1064
|
+
return result
|
|
1060
1065
|
|
|
1061
1066
|
def __copy__(self) -> "DataFrame":
|
|
1062
1067
|
"""Implements shallow copy protocol for copy.copy(...)."""
|
|
@@ -1065,12 +1070,14 @@ class DataFrame:
|
|
|
1065
1070
|
stmt = self._session._ast_batch.bind()
|
|
1066
1071
|
with_src_position(stmt.expr.dataframe_ref, stmt)
|
|
1067
1072
|
self._set_ast_ref(stmt.expr)
|
|
1068
|
-
|
|
1073
|
+
result = DataFrame(
|
|
1069
1074
|
self._session,
|
|
1070
1075
|
self._copy_plan(),
|
|
1071
1076
|
_ast_stmt=stmt,
|
|
1072
1077
|
_emit_ast=self._session.ast_enabled,
|
|
1073
1078
|
)
|
|
1079
|
+
self._copy_agg_state(result)
|
|
1080
|
+
return result
|
|
1074
1081
|
|
|
1075
1082
|
if installed_pandas:
|
|
1076
1083
|
import pandas # pragma: no cover
|
|
@@ -1109,7 +1109,7 @@ class DataFrameAIFunctions:
|
|
|
1109
1109
|
>>> result = json.loads(result_df.collect()[0]["TRANSCRIPT"])
|
|
1110
1110
|
>>> len(result["segments"]) > 0
|
|
1111
1111
|
True
|
|
1112
|
-
>>> result["segments"][0]["text"].lower()
|
|
1112
|
+
>>> result["segments"][0]["text"].lower() # doctest: +SKIP
|
|
1113
1113
|
'the'
|
|
1114
1114
|
>>> 'start' in result["segments"][0] and 'end' in result["segments"][0]
|
|
1115
1115
|
True
|
|
@@ -1125,11 +1125,11 @@ class DataFrameAIFunctions:
|
|
|
1125
1125
|
>>> result = json.loads(result_df.collect()[0]["TRANSCRIPT"])
|
|
1126
1126
|
>>> result["audio_duration"] > 100 and len(result["segments"]) > 0
|
|
1127
1127
|
True
|
|
1128
|
-
>>> result["segments"][0]["speaker_label"]
|
|
1128
|
+
>>> result["segments"][0]["speaker_label"] # doctest: +SKIP
|
|
1129
1129
|
'SPEAKER_00'
|
|
1130
|
-
>>> 'jenny' in result["segments"][0]["text"].lower()
|
|
1130
|
+
>>> 'jenny' in result["segments"][0]["text"].lower() # doctest: +SKIP
|
|
1131
1131
|
True
|
|
1132
|
-
>>> 'start' in result["segments"][0] and 'end' in result["segments"][0]
|
|
1132
|
+
>>> 'start' in result["segments"][0] and 'end' in result["segments"][0] # doctest: +SKIP
|
|
1133
1133
|
True
|
|
1134
1134
|
"""
|
|
1135
1135
|
output_column_name = output_column or "AI_TRANSCRIBE_OUTPUT"
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
#
|
|
5
5
|
|
|
6
6
|
import math
|
|
7
|
-
import
|
|
7
|
+
from collections.abc import Iterable
|
|
8
8
|
from logging import getLogger
|
|
9
9
|
from typing import Dict, Optional, Union
|
|
10
10
|
|
|
@@ -33,14 +33,6 @@ from snowflake.snowpark.types import (
|
|
|
33
33
|
LongType,
|
|
34
34
|
)
|
|
35
35
|
|
|
36
|
-
# Python 3.8 needs to use typing.Iterable because collections.abc.Iterable is not subscriptable
|
|
37
|
-
# Python 3.9 can use both
|
|
38
|
-
# Python 3.10 needs to use collections.abc.Iterable because typing.Iterable is removed
|
|
39
|
-
if sys.version_info <= (3, 9):
|
|
40
|
-
from typing import Iterable
|
|
41
|
-
else:
|
|
42
|
-
from collections.abc import Iterable
|
|
43
|
-
|
|
44
36
|
_logger = getLogger(__name__)
|
|
45
37
|
|
|
46
38
|
|