snowflake-ml-python 1.37.0__tar.gz → 1.39.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_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/CHANGELOG.md +56 -1
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/PKG-INFO +57 -3
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/pyproject.toml +1 -1
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/env_utils.py +20 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/aggregation.py +18 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/feature.py +13 -2
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/feature_store.py +190 -35
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/feature_view.py +194 -4
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/online_service.py +0 -5
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/tile_sql_generator.py +260 -11
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/jobs/_utils/constants.py +1 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/jobs/_utils/payload_utils.py +8 -1
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/jobs/job_definition.py +5 -1
- snowflake_ml_python-1.39.0/snowflake/ml/model/_client/model/batch_inference_task.py +220 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_model_composer/model_composer.py +2 -1
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_model_composer/model_method/function_generator.py +5 -1
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_model_composer/model_method/infer_partitioned.py_template +0 -5
- snowflake_ml_python-1.39.0/snowflake/ml/model/_model_composer/model_method/infer_partitioned_init_once.py_template +106 -0
- snowflake_ml_python-1.39.0/snowflake/ml/model/_model_composer/model_method/infer_table_function_init_once.py_template +106 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_model_composer/model_method/model_method.py +4 -4
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_env/model_env.py +36 -4
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/huggingface/fill_mask.py +1 -1
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/huggingface/image_classification.py +1 -1
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/huggingface/image_feature_extraction.py +1 -1
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/huggingface/object_detection.py +1 -1
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/huggingface/question_answering.py +1 -1
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/huggingface/table_question_answering.py +1 -1
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/huggingface/text_classification.py +8 -1
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/huggingface/video_classification.py +1 -1
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/huggingface/visual_question_answering.py +1 -1
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/huggingface/zero_shot_audio_classification.py +1 -1
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/huggingface/zero_shot_image_classification.py +1 -1
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/huggingface/zero_shot_object_detection.py +1 -1
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/huggingface/zero_shot_text_classification.py +1 -1
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/sentence_transformers.py +58 -5
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_meta/model_meta.py +19 -4
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_packager.py +2 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_runtime/_snowml_inference_alternative_requirements.py +0 -1
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_signatures/utils.py +95 -24
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/batch/__init__.py +2 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/type_hints.py +2 -2
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/_internal/snowpark_implementations/snowpark_trainer.py +28 -3
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/registry/_manager/model_manager.py +1 -1
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/registry/_manager/model_parameter_reconciler.py +147 -23
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/utils/stage_file.py +74 -2
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/version.py +1 -1
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake_ml_python.egg-info/PKG-INFO +57 -3
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake_ml_python.egg-info/SOURCES.txt +3 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake_ml_python.egg-info/requires.txt +0 -1
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/LICENSE.txt +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/README.md +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/setup.cfg +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/cortex/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/cortex/_classify_text.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/cortex/_complete.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/cortex/_embed_text_1024.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/cortex/_embed_text_768.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/cortex/_extract_answer.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/cortex/_finetune.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/cortex/_sentiment.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/cortex/_sse_client.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/cortex/_summarize.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/cortex/_translate.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/cortex/_util.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/env.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/exceptions/dataset_error_messages.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/exceptions/dataset_errors.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/exceptions/error_codes.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/exceptions/error_messages.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/exceptions/exceptions.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/exceptions/fileset_error_messages.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/exceptions/fileset_errors.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/exceptions/modeling_error_messages.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/exceptions/sql_error_codes.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/file_utils.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/human_readable_id/adjectives.txt +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/human_readable_id/animals.txt +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/human_readable_id/hrid_generator.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/human_readable_id/hrid_generator_base.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/init_utils.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/lineage/lineage_utils.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/migrator_utils.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/platform_capabilities.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/relax_version_strategy.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/telemetry.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/type_utils.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/utils/connection_params.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/utils/db_utils.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/utils/formatting.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/utils/identifier.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/utils/import_utils.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/utils/jwt_generator.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/utils/mixins.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/utils/parallelize.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/utils/pkg_version_utils.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/utils/query_result_checker.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/utils/result.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/utils/service_logger.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/utils/snowflake_env.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/utils/snowpark_dataframe_utils.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/utils/sql_identifier.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/utils/table_manager.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/utils/tee.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/utils/temp_file_utils.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/utils/url.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/data/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/data/_internal/arrow_ingestor.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/data/data_connector.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/data/data_ingestor.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/data/data_source.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/data/ingestor_utils.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/data/torch_utils.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/dataset/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/dataset/dataset.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/dataset/dataset_factory.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/dataset/dataset_metadata.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/dataset/dataset_reader.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/experiment/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/experiment/_client/artifact.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/experiment/_client/experiment_tracking_sql_client.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/experiment/_entities/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/experiment/_entities/experiment.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/experiment/_entities/run.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/experiment/_entities/run_metadata.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/experiment/_experiment_info.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/experiment/_logging/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/experiment/_logging/experiment_logger.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/experiment/_logging/experiment_logging_context.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/experiment/callback/keras.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/experiment/callback/lightgbm.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/experiment/callback/xgboost.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/experiment/experiment_tracking.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/experiment/utils.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/access_manager.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/entity.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/examples/airline_features/entities.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/examples/airline_features/features/plane_features.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/examples/airline_features/features/weather_features.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/examples/airline_features/source.yaml +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/examples/citibike_trip_features/entities.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/examples/citibike_trip_features/features/station_feature.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/examples/citibike_trip_features/features/trip_feature.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/examples/citibike_trip_features/source.yaml +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/examples/example_helper.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/examples/new_york_taxi_features/entities.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/examples/new_york_taxi_features/features/location_features.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/examples/new_york_taxi_features/features/trip_features.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/examples/new_york_taxi_features/source.yaml +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/examples/source_data/airline.yaml +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/examples/source_data/citibike_trips.yaml +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/examples/source_data/fraud_transactions.yaml +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/examples/source_data/nyc_yellow_trips.yaml +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/examples/source_data/winequality_red.yaml +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/examples/wine_quality_features/entities.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/examples/wine_quality_features/features/managed_wine_features.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/examples/wine_quality_features/features/static_wine_features.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/examples/wine_quality_features/source.yaml +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/interval_utils.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/metadata_manager.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/online_service_http_client.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/request_source.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/spec/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/spec/builder.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/spec/enums.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/spec/models.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/stream_config.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/stream_source.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/streaming_registration.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/fileset/embedded_stage_fs.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/fileset/fileset.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/fileset/sfcfs.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/fileset/snowfs.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/fileset/stage_fs.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/jobs/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/jobs/_interop/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/jobs/_interop/data_utils.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/jobs/_interop/dto_schema.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/jobs/_interop/exception_utils.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/jobs/_interop/legacy.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/jobs/_interop/protocols.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/jobs/_interop/results.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/jobs/_interop/utils.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/jobs/_utils/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/jobs/_utils/arg_protocol.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/jobs/_utils/feature_flags.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/jobs/_utils/query_helper.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/jobs/_utils/runtime_env_utils.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/jobs/_utils/scripts/constants.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/jobs/_utils/scripts/get_instance_ip.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/jobs/_utils/scripts/mljob_launcher.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/jobs/_utils/scripts/signal_workers.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/jobs/_utils/scripts/start_mlruntime.sh +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/jobs/_utils/scripts/startup.sh +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/jobs/_utils/scripts/worker_shutdown_listener.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/jobs/_utils/stage_utils.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/jobs/_utils/type_utils.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/jobs/decorators.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/jobs/job.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/jobs/manager.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/lineage/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/lineage/lineage_node.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_client/model/batch_inference_definition.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_client/model/batch_inference_serialization.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_client/model/batch_inference_specs.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_client/model/inference_engine_utils.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_client/model/model_impl.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_client/model/model_version_impl.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_client/ops/deployment_step.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_client/ops/metadata_ops.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_client/ops/model_ops.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_client/ops/param_ops.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_client/ops/param_utils.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_client/ops/service_ops.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_client/service/import_model_spec_schema.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_client/service/model_deployment_spec.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_client/service/model_deployment_spec_schema.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_client/sql/_base.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_client/sql/model.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_client/sql/model_version.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_client/sql/service.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_client/sql/stage.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_client/sql/tag.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_model_composer/model_manifest/model_manifest.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_model_composer/model_manifest/model_manifest_schema.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_model_composer/model_method/constants.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_model_composer/model_method/infer_function.py_template +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_model_composer/model_method/infer_function_init_once.py_template +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_model_composer/model_method/infer_table_function.py_template +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_model_composer/model_method/utils.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_model_composer/model_user_file/model_user_file.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handler.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/_base.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/_utils.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/catboost.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/custom.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/huggingface/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/huggingface/_default.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/huggingface/_handler.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/huggingface/_openai_chat_wrapper.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/huggingface/_task_handler.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/huggingface/_utils.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/huggingface/audio_text_to_text.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/huggingface/automatic_speech_recognition.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/huggingface/conversational.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/huggingface/document_question_answering.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/huggingface/image_text_to_text.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/huggingface/image_to_text.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/huggingface/summarization.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/huggingface/text2text_generation.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/huggingface/text_generation.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/huggingface/token_classification.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/huggingface/translation.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/huggingface/video_text_to_text.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/keras.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/lightgbm.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/mlflow.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/prophet.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/pytorch.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/sklearn.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/snowmlmodel.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/tensorflow.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/torchscript.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers/xgboost.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers_migrator/base_migrator.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers_migrator/pytorch_migrator_2023_12_01.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers_migrator/tensorflow_migrator_2023_12_01.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers_migrator/tensorflow_migrator_2025_01_01.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_handlers_migrator/torchscript_migrator_2023_12_01.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_meta/model_blob_meta.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_meta/model_meta_schema.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_meta_migrator/base_migrator.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_meta_migrator/migrator_plans.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_meta_migrator/migrator_v1.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_runtime/model_runtime.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_packager/model_task/model_task_utils.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_signatures/base_handler.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_signatures/builtins_handler.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_signatures/core.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_signatures/dmatrix_handler.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_signatures/numpy_handler.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_signatures/pandas_handler.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_signatures/pytorch_handler.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_signatures/snowpark_handler.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/_signatures/tensorflow_handler.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/code_path.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/compute_pool.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/custom_model.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/event_handler.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/inference_engine.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/model_signature.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/models/huggingface.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/models/huggingface_pipeline.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/openai_signatures.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/target_platform.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/task.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/model/volatility.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/_internal/estimator_utils.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/_internal/local_implementations/pandas_handlers.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/_internal/local_implementations/pandas_trainer.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/_internal/model_specifications.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/_internal/model_trainer.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/_internal/model_trainer_builder.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/_internal/model_transformer_builder.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/_internal/snowpark_implementations/distributed_hpo_trainer.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/_internal/snowpark_implementations/distributed_search_udf_file.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/_internal/snowpark_implementations/snowpark_handlers.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/_internal/snowpark_implementations/xgboost_external_memory_trainer.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/_internal/transformer_protocols.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/calibration/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/calibration/calibrated_classifier_cv.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/cluster/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/cluster/affinity_propagation.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/cluster/agglomerative_clustering.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/cluster/birch.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/cluster/bisecting_k_means.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/cluster/dbscan.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/cluster/feature_agglomeration.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/cluster/k_means.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/cluster/mean_shift.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/cluster/mini_batch_k_means.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/cluster/optics.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/cluster/spectral_biclustering.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/cluster/spectral_clustering.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/cluster/spectral_coclustering.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/compose/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/compose/column_transformer.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/compose/transformed_target_regressor.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/covariance/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/covariance/elliptic_envelope.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/covariance/empirical_covariance.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/covariance/graphical_lasso.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/covariance/graphical_lasso_cv.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/covariance/ledoit_wolf.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/covariance/min_cov_det.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/covariance/oas.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/covariance/shrunk_covariance.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/decomposition/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/decomposition/dictionary_learning.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/decomposition/factor_analysis.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/decomposition/fast_ica.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/decomposition/incremental_pca.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/decomposition/kernel_pca.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/decomposition/mini_batch_dictionary_learning.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/decomposition/mini_batch_sparse_pca.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/decomposition/pca.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/decomposition/sparse_pca.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/decomposition/truncated_svd.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/discriminant_analysis/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/discriminant_analysis/linear_discriminant_analysis.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/discriminant_analysis/quadratic_discriminant_analysis.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/ensemble/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/ensemble/ada_boost_classifier.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/ensemble/ada_boost_regressor.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/ensemble/bagging_classifier.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/ensemble/bagging_regressor.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/ensemble/extra_trees_classifier.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/ensemble/extra_trees_regressor.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/ensemble/gradient_boosting_classifier.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/ensemble/gradient_boosting_regressor.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/ensemble/hist_gradient_boosting_classifier.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/ensemble/hist_gradient_boosting_regressor.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/ensemble/isolation_forest.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/ensemble/random_forest_classifier.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/ensemble/random_forest_regressor.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/ensemble/stacking_regressor.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/ensemble/voting_classifier.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/ensemble/voting_regressor.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/feature_selection/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/feature_selection/generic_univariate_select.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/feature_selection/select_fdr.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/feature_selection/select_fpr.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/feature_selection/select_fwe.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/feature_selection/select_k_best.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/feature_selection/select_percentile.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/feature_selection/sequential_feature_selector.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/feature_selection/variance_threshold.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/framework/_utils.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/framework/base.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/gaussian_process/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/gaussian_process/gaussian_process_classifier.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/gaussian_process/gaussian_process_regressor.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/impute/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/impute/iterative_imputer.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/impute/knn_imputer.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/impute/missing_indicator.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/impute/simple_imputer.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/kernel_approximation/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/kernel_approximation/additive_chi2_sampler.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/kernel_approximation/nystroem.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/kernel_approximation/polynomial_count_sketch.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/kernel_approximation/rbf_sampler.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/kernel_approximation/skewed_chi2_sampler.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/kernel_ridge/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/kernel_ridge/kernel_ridge.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/lightgbm/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/lightgbm/lgbm_classifier.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/lightgbm/lgbm_regressor.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/ard_regression.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/bayesian_ridge.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/elastic_net.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/elastic_net_cv.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/gamma_regressor.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/huber_regressor.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/lars.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/lars_cv.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/lasso.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/lasso_cv.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/lasso_lars.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/lasso_lars_cv.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/lasso_lars_ic.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/linear_regression.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/logistic_regression.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/logistic_regression_cv.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/multi_task_elastic_net.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/multi_task_elastic_net_cv.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/multi_task_lasso.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/multi_task_lasso_cv.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/orthogonal_matching_pursuit.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/passive_aggressive_classifier.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/passive_aggressive_regressor.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/perceptron.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/poisson_regressor.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/ransac_regressor.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/ridge.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/ridge_classifier.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/ridge_classifier_cv.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/ridge_cv.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/sgd_classifier.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/sgd_one_class_svm.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/sgd_regressor.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/theil_sen_regressor.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/linear_model/tweedie_regressor.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/manifold/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/manifold/isomap.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/manifold/mds.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/manifold/spectral_embedding.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/manifold/tsne.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/metrics/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/metrics/classification.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/metrics/correlation.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/metrics/covariance.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/metrics/metrics_utils.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/metrics/ranking.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/metrics/regression.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/mixture/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/mixture/bayesian_gaussian_mixture.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/mixture/gaussian_mixture.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/model_selection/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/model_selection/grid_search_cv.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/model_selection/randomized_search_cv.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/multiclass/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/multiclass/one_vs_one_classifier.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/multiclass/one_vs_rest_classifier.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/multiclass/output_code_classifier.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/naive_bayes/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/naive_bayes/bernoulli_nb.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/naive_bayes/categorical_nb.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/naive_bayes/complement_nb.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/naive_bayes/gaussian_nb.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/naive_bayes/multinomial_nb.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/neighbors/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/neighbors/k_neighbors_classifier.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/neighbors/k_neighbors_regressor.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/neighbors/kernel_density.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/neighbors/local_outlier_factor.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/neighbors/nearest_centroid.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/neighbors/nearest_neighbors.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/neighbors/neighborhood_components_analysis.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/neighbors/radius_neighbors_classifier.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/neighbors/radius_neighbors_regressor.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/neural_network/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/neural_network/bernoulli_rbm.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/neural_network/mlp_classifier.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/neural_network/mlp_regressor.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/parameters/disable_distributed_hpo.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/parameters/disable_model_tracer.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/parameters/enable_anonymous_sproc.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/pipeline/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/pipeline/pipeline.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/preprocessing/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/preprocessing/binarizer.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/preprocessing/k_bins_discretizer.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/preprocessing/label_encoder.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/preprocessing/max_abs_scaler.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/preprocessing/min_max_scaler.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/preprocessing/normalizer.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/preprocessing/one_hot_encoder.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/preprocessing/ordinal_encoder.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/preprocessing/polynomial_features.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/preprocessing/robust_scaler.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/preprocessing/standard_scaler.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/semi_supervised/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/semi_supervised/label_propagation.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/semi_supervised/label_spreading.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/svm/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/svm/linear_svc.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/svm/linear_svr.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/svm/nu_svc.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/svm/nu_svr.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/svm/svc.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/svm/svr.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/tree/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/tree/decision_tree_classifier.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/tree/decision_tree_regressor.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/tree/extra_tree_classifier.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/tree/extra_tree_regressor.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/xgboost/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/xgboost/xgb_classifier.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/xgboost/xgb_regressor.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/xgboost/xgbrf_classifier.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/modeling/xgboost/xgbrf_regressor.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/monitoring/_client/model_monitor_sql_client.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/monitoring/_client/queries/record_count.ssql +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/monitoring/_client/queries/rmse.ssql +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/monitoring/_manager/model_monitor_manager.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/monitoring/entities/model_monitor_config.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/monitoring/explain_visualize.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/monitoring/model_monitor.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/monitoring/shap.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/registry/__init__.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/registry/registry.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/utils/authentication.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/utils/connection_params.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/utils/html_utils.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/utils/sparse.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/utils/sql_client.py +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake_ml_python.egg-info/dependency_links.txt +0 -0
- {snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake_ml_python.egg-info/top_level.txt +0 -0
|
@@ -1,9 +1,64 @@
|
|
|
1
1
|
# Release History
|
|
2
2
|
|
|
3
|
-
## 1.
|
|
3
|
+
## 1.39.0
|
|
4
4
|
|
|
5
5
|
### New Features
|
|
6
6
|
|
|
7
|
+
### Bug Fixes
|
|
8
|
+
|
|
9
|
+
* Feature Store: `update_feature_view` now correctly handles every transition between duration-based
|
|
10
|
+
and CRON-based `refresh_freq`. Previously a CRON expression was forwarded to the Dynamic Table's
|
|
11
|
+
`TARGET_LAG` (which Snowflake rejects), `duration → cron` failed because the companion Task did not
|
|
12
|
+
yet exist, and `cron → duration` left the Task orphaned and continuing to fire on its old schedule.
|
|
13
|
+
All four `(old, new)` transitions now correctly create, alter, or drop the Task as needed, with
|
|
14
|
+
symmetric rollback on failure.
|
|
15
|
+
|
|
16
|
+
### Behavior Changes
|
|
17
|
+
|
|
18
|
+
* Feature Store: For CRON-based feature views, `get_feature_view()`, `list_feature_views()`, and
|
|
19
|
+
`register_feature_view()` now return the original cron expression as `refresh_freq` instead of
|
|
20
|
+
`"DOWNSTREAM"`. The underlying Dynamic Table still uses `TARGET_LAG = 'DOWNSTREAM'` with a companion
|
|
21
|
+
Task — this is purely a display change so the round-trip preserves what the user passed in.
|
|
22
|
+
|
|
23
|
+
* Registry: When `target_platforms` includes WAREHOUSE and pip installs are needed without a user-supplied
|
|
24
|
+
`pip` artifact repository, `log_model` injects `snowflake.snowpark.pypi_shared_repository` after
|
|
25
|
+
verifying access. This applies to explicit `pip_requirements` and to pip-only packaging when there are
|
|
26
|
+
no user conda dependencies. If `pypi_shared_repository` is inaccessible in the pip-only case, automatic packaging
|
|
27
|
+
dependencies fall back to conda instead of forcing pip-only without an index.
|
|
28
|
+
|
|
29
|
+
### Deprecations
|
|
30
|
+
|
|
31
|
+
## 1.38.0
|
|
32
|
+
|
|
33
|
+
### New Features
|
|
34
|
+
|
|
35
|
+
### Bug Fixes
|
|
36
|
+
|
|
37
|
+
### Behavior Changes
|
|
38
|
+
|
|
39
|
+
* Registry: For HuggingFace `text-generation` pipelines whose tokenizer defines a chat template, the
|
|
40
|
+
auto-inferred signature now matches the OpenAI Chat Completions API
|
|
41
|
+
(`_OPENAI_CHAT_SIGNATURE_WITH_PARAMS_SPEC`). Inputs are a single `messages` column and inference
|
|
42
|
+
controls (`temperature`, `max_completion_tokens`, `stop`, `n`, `stream`, `top_p`, `frequency_penalty`,
|
|
43
|
+
`presence_penalty`) move from `inputs` to `params` with default values. Predictions return the OpenAI
|
|
44
|
+
response shape (`id`, `object`, `created`, `model`, `choices`, `usage`); the generated text is at
|
|
45
|
+
`choices[0].message.content` instead of `outputs[0].generated_text`.
|
|
46
|
+
|
|
47
|
+
* Registry: For HuggingFace `image-text-to-text`, `video-text-to-text`, and `audio-text-to-text`
|
|
48
|
+
pipelines, the auto-inferred signature now uses `_OPENAI_CHAT_SIGNATURE_WITH_PARAMS_SPEC` instead of
|
|
49
|
+
`_OPENAI_CHAT_SIGNATURE_SPEC`. The input column set narrows to just `messages`, and the inference
|
|
50
|
+
controls move to `params` with default values; the output schema is unchanged.
|
|
51
|
+
|
|
52
|
+
### Deprecations
|
|
53
|
+
|
|
54
|
+
## 1.37.0 (2026-04-29)
|
|
55
|
+
|
|
56
|
+
### New Features
|
|
57
|
+
|
|
58
|
+
* Registry (PrPr): The `model_init_once` save option now applies to **TABLE_FUNCTION** model methods (including
|
|
59
|
+
partitioned table functions) for warehouse deployments, in addition to scalar **FUNCTION** methods. The generated
|
|
60
|
+
handler uses the same eager `@udf_init_once` model load path as UDFs.
|
|
61
|
+
|
|
7
62
|
* Experiment Tracking: `end_run` now accepts an optional `status` argument (`"FINISHED"` or `"FAILED"`) to explicitly
|
|
8
63
|
set the final run status. When a run's context manager exits with an exception, the status is automatically set to
|
|
9
64
|
`"FAILED"`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: snowflake-ml-python
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.39.0
|
|
4
4
|
Summary: The machine learning client library that is used for interacting with Snowflake to build machine learning solutions.
|
|
5
5
|
Author-email: "Snowflake, Inc" <support@snowflake.com>
|
|
6
6
|
License:
|
|
@@ -250,7 +250,6 @@ Requires-Dist: pyjwt<3,>=2.0.0
|
|
|
250
250
|
Requires-Dist: pytimeparse<2,>=1.1.8
|
|
251
251
|
Requires-Dist: pyyaml<7,>=6.0
|
|
252
252
|
Requires-Dist: retrying<2,>=1.3.3
|
|
253
|
-
Requires-Dist: s3fs<2026,>=2024.6.1
|
|
254
253
|
Requires-Dist: scikit-learn<1.8
|
|
255
254
|
Requires-Dist: scipy<2,>=1.9
|
|
256
255
|
Requires-Dist: shap<1,>=0.46.0
|
|
@@ -417,10 +416,65 @@ NOTE: Version 1.7.0 is used as example here. Please choose the the latest versio
|
|
|
417
416
|
|
|
418
417
|
# Release History
|
|
419
418
|
|
|
420
|
-
## 1.
|
|
419
|
+
## 1.39.0
|
|
421
420
|
|
|
422
421
|
### New Features
|
|
423
422
|
|
|
423
|
+
### Bug Fixes
|
|
424
|
+
|
|
425
|
+
* Feature Store: `update_feature_view` now correctly handles every transition between duration-based
|
|
426
|
+
and CRON-based `refresh_freq`. Previously a CRON expression was forwarded to the Dynamic Table's
|
|
427
|
+
`TARGET_LAG` (which Snowflake rejects), `duration → cron` failed because the companion Task did not
|
|
428
|
+
yet exist, and `cron → duration` left the Task orphaned and continuing to fire on its old schedule.
|
|
429
|
+
All four `(old, new)` transitions now correctly create, alter, or drop the Task as needed, with
|
|
430
|
+
symmetric rollback on failure.
|
|
431
|
+
|
|
432
|
+
### Behavior Changes
|
|
433
|
+
|
|
434
|
+
* Feature Store: For CRON-based feature views, `get_feature_view()`, `list_feature_views()`, and
|
|
435
|
+
`register_feature_view()` now return the original cron expression as `refresh_freq` instead of
|
|
436
|
+
`"DOWNSTREAM"`. The underlying Dynamic Table still uses `TARGET_LAG = 'DOWNSTREAM'` with a companion
|
|
437
|
+
Task — this is purely a display change so the round-trip preserves what the user passed in.
|
|
438
|
+
|
|
439
|
+
* Registry: When `target_platforms` includes WAREHOUSE and pip installs are needed without a user-supplied
|
|
440
|
+
`pip` artifact repository, `log_model` injects `snowflake.snowpark.pypi_shared_repository` after
|
|
441
|
+
verifying access. This applies to explicit `pip_requirements` and to pip-only packaging when there are
|
|
442
|
+
no user conda dependencies. If `pypi_shared_repository` is inaccessible in the pip-only case, automatic packaging
|
|
443
|
+
dependencies fall back to conda instead of forcing pip-only without an index.
|
|
444
|
+
|
|
445
|
+
### Deprecations
|
|
446
|
+
|
|
447
|
+
## 1.38.0
|
|
448
|
+
|
|
449
|
+
### New Features
|
|
450
|
+
|
|
451
|
+
### Bug Fixes
|
|
452
|
+
|
|
453
|
+
### Behavior Changes
|
|
454
|
+
|
|
455
|
+
* Registry: For HuggingFace `text-generation` pipelines whose tokenizer defines a chat template, the
|
|
456
|
+
auto-inferred signature now matches the OpenAI Chat Completions API
|
|
457
|
+
(`_OPENAI_CHAT_SIGNATURE_WITH_PARAMS_SPEC`). Inputs are a single `messages` column and inference
|
|
458
|
+
controls (`temperature`, `max_completion_tokens`, `stop`, `n`, `stream`, `top_p`, `frequency_penalty`,
|
|
459
|
+
`presence_penalty`) move from `inputs` to `params` with default values. Predictions return the OpenAI
|
|
460
|
+
response shape (`id`, `object`, `created`, `model`, `choices`, `usage`); the generated text is at
|
|
461
|
+
`choices[0].message.content` instead of `outputs[0].generated_text`.
|
|
462
|
+
|
|
463
|
+
* Registry: For HuggingFace `image-text-to-text`, `video-text-to-text`, and `audio-text-to-text`
|
|
464
|
+
pipelines, the auto-inferred signature now uses `_OPENAI_CHAT_SIGNATURE_WITH_PARAMS_SPEC` instead of
|
|
465
|
+
`_OPENAI_CHAT_SIGNATURE_SPEC`. The input column set narrows to just `messages`, and the inference
|
|
466
|
+
controls move to `params` with default values; the output schema is unchanged.
|
|
467
|
+
|
|
468
|
+
### Deprecations
|
|
469
|
+
|
|
470
|
+
## 1.37.0 (2026-04-29)
|
|
471
|
+
|
|
472
|
+
### New Features
|
|
473
|
+
|
|
474
|
+
* Registry (PrPr): The `model_init_once` save option now applies to **TABLE_FUNCTION** model methods (including
|
|
475
|
+
partitioned table functions) for warehouse deployments, in addition to scalar **FUNCTION** methods. The generated
|
|
476
|
+
handler uses the same eager `@udf_init_once` model load path as UDFs.
|
|
477
|
+
|
|
424
478
|
* Experiment Tracking: `end_run` now accepts an optional `status` argument (`"FINISHED"` or `"FAILED"`) to explicitly
|
|
425
479
|
set the final run status. When a run's context manager exits with an exception, the status is automatically set to
|
|
426
480
|
`"FAILED"`.
|
|
@@ -8,7 +8,7 @@ description = "The machine learning client library that is used for interacting
|
|
|
8
8
|
classifiers = [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Environment :: Other Environment", "Intended Audience :: Developers", "Intended Audience :: Education", "Intended Audience :: Information Technology", "Intended Audience :: System Administrators", "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Topic :: Database", "Topic :: Software Development", "Topic :: Software Development :: Libraries", "Topic :: Software Development :: Libraries :: Application Frameworks", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Scientific/Engineering :: Information Analysis",]
|
|
9
9
|
requires-python = ">=3.9, <3.14"
|
|
10
10
|
dynamic = [ "version", "readme",]
|
|
11
|
-
dependencies = [ "anyio>=3.5.0,<5", "cachetools>=3.1.1,<6", "cloudpickle>=2.0.0", "cryptography", "fsspec[http]>=2024.6.1,<2026", "h2>=4.3.0,<5", "importlib_resources>=6.1.1, <7", "numpy>=1.23,<3", "packaging>=20.9,<26", "pandas>=2.1.4,<3", "platformdirs<5", "pyarrow<19.0.0", "pydantic>=2.8.2, <3", "pyjwt>=2.0.0, <3", "pytimeparse>=1.1.8,<2", "pyyaml>=6.0,<7", "retrying>=1.3.3,<2", "
|
|
11
|
+
dependencies = [ "anyio>=3.5.0,<5", "cachetools>=3.1.1,<6", "cloudpickle>=2.0.0", "cryptography", "fsspec[http]>=2024.6.1,<2026", "h2>=4.3.0,<5", "importlib_resources>=6.1.1, <7", "numpy>=1.23,<3", "packaging>=20.9,<26", "pandas>=2.1.4,<3", "platformdirs<5", "pyarrow<19.0.0", "pydantic>=2.8.2, <3", "pyjwt>=2.0.0, <3", "pytimeparse>=1.1.8,<2", "pyyaml>=6.0,<7", "retrying>=1.3.3,<2", "scikit-learn<1.8", "scipy>=1.9,<2", "shap>=0.46.0,<1", "snowflake-connector-python[pandas]>=3.17.3,<5", "snowflake-snowpark-python>=1.17.0,<2,!=1.26.0", "sqlparse>=0.4,<1", "tqdm<5", "typing-extensions>=4.1.0,<5", "xgboost<4",]
|
|
12
12
|
[[project.authors]]
|
|
13
13
|
name = "Snowflake, Inc"
|
|
14
14
|
email = "support@snowflake.com"
|
{snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/_internal/env_utils.py
RENAMED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import collections
|
|
2
2
|
import copy
|
|
3
|
+
import os
|
|
3
4
|
import pathlib
|
|
4
5
|
import re
|
|
6
|
+
import sys
|
|
5
7
|
import textwrap
|
|
6
8
|
import warnings
|
|
7
9
|
from enum import Enum
|
|
@@ -54,6 +56,24 @@ def get_execution_context() -> str:
|
|
|
54
56
|
return "EXTERNAL"
|
|
55
57
|
|
|
56
58
|
|
|
59
|
+
def is_local_conda_environment() -> bool:
|
|
60
|
+
"""Return True if the active Python interpreter appears to run inside a conda env
|
|
61
|
+
or under conda session context (e.g. a venv created inside an activated conda env).
|
|
62
|
+
|
|
63
|
+
Uses the presence of a ``conda-meta`` directory under :py:data:`sys.prefix`, which is
|
|
64
|
+
standard for conda-created environments. A nested venv typically has ``sys.prefix``
|
|
65
|
+
pointing at the venv without ``conda-meta``; conda still sets ``CONDA_PREFIX`` when
|
|
66
|
+
an environment is activated, so a non-empty ``CONDA_PREFIX`` is treated as conda context.
|
|
67
|
+
|
|
68
|
+
Returns:
|
|
69
|
+
``True`` if ``sys.prefix`` contains ``conda-meta`` or ``CONDA_PREFIX`` is set and
|
|
70
|
+
non-empty, else ``False``.
|
|
71
|
+
"""
|
|
72
|
+
if os.path.isdir(os.path.join(sys.prefix, "conda-meta")):
|
|
73
|
+
return True
|
|
74
|
+
return bool(os.environ.get("CONDA_PREFIX", "").strip())
|
|
75
|
+
|
|
76
|
+
|
|
57
77
|
def _validate_pip_requirement_string(req_str: str) -> requirements.Requirement:
|
|
58
78
|
"""Validate the input pip requirement string according to PEP 508.
|
|
59
79
|
|
{snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/aggregation.py
RENAMED
|
@@ -27,6 +27,7 @@ class AggregationType(Enum):
|
|
|
27
27
|
- Simple aggregations (SUM, COUNT, AVG, MIN, MAX, STD, VAR): Stored as scalar partial results in tiles
|
|
28
28
|
- Sketch aggregations (APPROX_COUNT_DISTINCT, APPROX_PERCENTILE): Stored as mergeable state in tiles
|
|
29
29
|
- List aggregations (LAST_N, LAST_DISTINCT_N, FIRST_N, FIRST_DISTINCT_N): Stored as arrays in tiles
|
|
30
|
+
- Secondary-key array (_SECONDARY_KEY_ARRAY): Internal-only ARRAY_AGG of the secondary-key column
|
|
30
31
|
"""
|
|
31
32
|
|
|
32
33
|
SUM = "sum"
|
|
@@ -42,6 +43,7 @@ class AggregationType(Enum):
|
|
|
42
43
|
LAST_DISTINCT_N = "last_distinct_n"
|
|
43
44
|
FIRST_N = "first_n"
|
|
44
45
|
FIRST_DISTINCT_N = "first_distinct_n"
|
|
46
|
+
_SECONDARY_KEY_ARRAY = "secondary_key_array"
|
|
45
47
|
|
|
46
48
|
def is_simple(self) -> bool:
|
|
47
49
|
"""Check if this is a simple aggregation (scalar result per tile).
|
|
@@ -81,6 +83,10 @@ class AggregationType(Enum):
|
|
|
81
83
|
AggregationType.APPROX_PERCENTILE,
|
|
82
84
|
)
|
|
83
85
|
|
|
86
|
+
def is_secondary_key_array(self) -> bool:
|
|
87
|
+
"""Check if this is the synthesized secondary-key ``ARRAY_AGG`` type."""
|
|
88
|
+
return self == AggregationType._SECONDARY_KEY_ARRAY
|
|
89
|
+
|
|
84
90
|
|
|
85
91
|
# Internal column name prefixes used in tile tables.
|
|
86
92
|
# WARNING: Changing these will break existing registered tiled feature views.
|
|
@@ -169,6 +175,18 @@ class AggregationSpec:
|
|
|
169
175
|
f"'{self.output_column}', got: {percentile}"
|
|
170
176
|
)
|
|
171
177
|
|
|
178
|
+
# Validate _SECONDARY_KEY_ARRAY specs
|
|
179
|
+
if self.function.is_secondary_key_array():
|
|
180
|
+
if self.params:
|
|
181
|
+
raise ValueError(
|
|
182
|
+
f"_SECONDARY_KEY_ARRAY aggregation '{self.output_column}' must not carry params, "
|
|
183
|
+
f"got: {self.params}"
|
|
184
|
+
)
|
|
185
|
+
if is_lifetime_window(self.window):
|
|
186
|
+
raise ValueError(
|
|
187
|
+
f"_SECONDARY_KEY_ARRAY aggregation '{self.output_column}' cannot use a lifetime window."
|
|
188
|
+
)
|
|
189
|
+
|
|
172
190
|
# Validate lifetime window support
|
|
173
191
|
# Only simple scalar aggregations support lifetime (O(1) via cumulative columns)
|
|
174
192
|
if is_lifetime_window(self.window):
|
{snowflake_ml_python-1.37.0 → snowflake_ml_python-1.39.0}/snowflake/ml/feature_store/feature.py
RENAMED
|
@@ -12,9 +12,14 @@ from typing import Any, Optional
|
|
|
12
12
|
from snowflake.ml.feature_store.aggregation import (
|
|
13
13
|
AggregationSpec,
|
|
14
14
|
AggregationType,
|
|
15
|
+
interval_to_seconds,
|
|
15
16
|
is_lifetime_window,
|
|
16
17
|
)
|
|
17
18
|
|
|
19
|
+
_NO_OFFSET = "0"
|
|
20
|
+
_KEYS = "keys"
|
|
21
|
+
_LIFETIME = "lifetime"
|
|
22
|
+
|
|
18
23
|
|
|
19
24
|
class Feature:
|
|
20
25
|
"""Fluent builder for defining features in a FeatureView.
|
|
@@ -92,10 +97,16 @@ class Feature:
|
|
|
92
97
|
def _default_output_name(self) -> str:
|
|
93
98
|
"""Generate a default output column name."""
|
|
94
99
|
if is_lifetime_window(self._window):
|
|
95
|
-
window_suffix =
|
|
100
|
+
window_suffix = _LIFETIME
|
|
96
101
|
else:
|
|
97
102
|
window_suffix = self._window.replace(" ", "").lower()
|
|
98
|
-
|
|
103
|
+
function_value = _KEYS if self._function.is_secondary_key_array() else self._function.value
|
|
104
|
+
base_name = f"{self._column}_{function_value}_{window_suffix}"
|
|
105
|
+
|
|
106
|
+
offset_seconds = interval_to_seconds(self._offset) if self._offset != _NO_OFFSET else 0
|
|
107
|
+
if offset_seconds > 0:
|
|
108
|
+
offset_suffix = self._offset.replace(" ", "").lower()
|
|
109
|
+
base_name = f"{base_name}_offset_{offset_suffix}"
|
|
99
110
|
return base_name.upper()
|
|
100
111
|
|
|
101
112
|
# Factory methods for creating features
|
|
@@ -1963,10 +1963,11 @@ class FeatureStore:
|
|
|
1963
1963
|
self._session.sql(f"DROP DYNAMIC TABLE IF EXISTS {fully_qualified_name}").collect(
|
|
1964
1964
|
statement_params=self._telemetry_stmp
|
|
1965
1965
|
)
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1966
|
+
# CRON-based FVs have a companion Task with the same name. Drop it
|
|
1967
|
+
# unconditionally — IF EXISTS makes this a no-op for duration-based FVs.
|
|
1968
|
+
self._session.sql(f"DROP TASK IF EXISTS {fully_qualified_name}").collect(
|
|
1969
|
+
statement_params=self._telemetry_stmp
|
|
1970
|
+
)
|
|
1970
1971
|
|
|
1971
1972
|
# Delete online feature table if it exists
|
|
1972
1973
|
if feature_view.online:
|
|
@@ -3000,30 +3001,127 @@ class FeatureStore:
|
|
|
3000
3001
|
)
|
|
3001
3002
|
|
|
3002
3003
|
def _build_offline_update_queries(
|
|
3003
|
-
self,
|
|
3004
|
-
|
|
3005
|
-
|
|
3004
|
+
self,
|
|
3005
|
+
feature_view: FeatureView,
|
|
3006
|
+
refresh_freq: Optional[str],
|
|
3007
|
+
warehouse: Optional[str],
|
|
3008
|
+
desc: str,
|
|
3009
|
+
) -> tuple[list[tuple[str, str]], list[tuple[str, str]]]:
|
|
3010
|
+
"""Build offline update operations and their rollback operations.
|
|
3011
|
+
|
|
3012
|
+
For CRON-based refresh, the DT must keep ``TARGET_LAG = 'DOWNSTREAM'``
|
|
3013
|
+
and the actual cron schedule lives on a companion Task — Dynamic Tables
|
|
3014
|
+
do not accept cron expressions in ``TARGET_LAG``. Duration-based refresh
|
|
3015
|
+
sets ``TARGET_LAG`` directly on the DT and there is no Task.
|
|
3016
|
+
|
|
3017
|
+
The presence/absence of the companion Task is what disambiguates a
|
|
3018
|
+
user-set ``refresh_freq='DOWNSTREAM'`` from a cron-driven FV (whose DT
|
|
3019
|
+
also carries ``TARGET_LAG='DOWNSTREAM'``) when reading state back via
|
|
3020
|
+
``get_feature_view``. Maintain that invariant across all four
|
|
3021
|
+
``(old_kind, new_kind)`` transitions:
|
|
3022
|
+
|
|
3023
|
+
duration ↔ duration : DT-only ALTER; no Task involvement.
|
|
3024
|
+
duration → cron : ALTER DT to DOWNSTREAM, then create the Task.
|
|
3025
|
+
cron → duration : ALTER DT to the new lag, then drop the Task.
|
|
3026
|
+
cron ↔ cron : ALTER DT, then SUSPEND/SET SCHEDULE/RESUME the Task.
|
|
3027
|
+
|
|
3028
|
+
("duration" above includes a literal ``"DOWNSTREAM"`` value.)
|
|
3029
|
+
|
|
3030
|
+
Args:
|
|
3031
|
+
feature_view: The currently registered ``FeatureView`` whose
|
|
3032
|
+
offline state is being mutated; supplies the existing
|
|
3033
|
+
refresh_freq/warehouse/desc used to construct the rollback.
|
|
3034
|
+
refresh_freq: New refresh frequency requested by the caller, or
|
|
3035
|
+
``None`` to keep the existing value.
|
|
3036
|
+
warehouse: New warehouse identifier requested by the caller, or
|
|
3037
|
+
``None`` to keep the existing value.
|
|
3038
|
+
desc: New description to set on the DT/view.
|
|
3039
|
+
|
|
3040
|
+
Returns:
|
|
3041
|
+
A tuple of ``(operations, rollback_operations)`` where each is a
|
|
3042
|
+
list of ``(op_type, sql)`` tuples consumable by
|
|
3043
|
+
``_execute_atomic_operations``.
|
|
3044
|
+
"""
|
|
3045
|
+
fqn = feature_view.fully_qualified_name()
|
|
3046
|
+
|
|
3006
3047
|
if feature_view.status == FeatureViewStatus.STATIC:
|
|
3007
|
-
|
|
3008
|
-
|
|
3009
|
-
|
|
3010
|
-
|
|
3011
|
-
|
|
3012
|
-
|
|
3013
|
-
|
|
3014
|
-
|
|
3015
|
-
|
|
3016
|
-
|
|
3017
|
-
|
|
3018
|
-
|
|
3019
|
-
|
|
3020
|
-
|
|
3021
|
-
|
|
3022
|
-
|
|
3023
|
-
|
|
3024
|
-
|
|
3025
|
-
|
|
3026
|
-
|
|
3048
|
+
return [("OFFLINE_UPDATE", f"ALTER VIEW {fqn} SET COMMENT = '{desc}'")], []
|
|
3049
|
+
|
|
3050
|
+
# Managed (Dynamic-Table-backed) FVs always have a refresh_freq — the
|
|
3051
|
+
# only refresh_freq=None case is an external (View-backed) FV, which
|
|
3052
|
+
# is STATIC and handled above.
|
|
3053
|
+
assert feature_view.refresh_freq is not None, "Managed FV must have a refresh_freq"
|
|
3054
|
+
new_warehouse = SqlIdentifier(warehouse) if warehouse else feature_view.warehouse
|
|
3055
|
+
old_warehouse = feature_view.warehouse
|
|
3056
|
+
effective_freq: str = refresh_freq if refresh_freq is not None else feature_view.refresh_freq
|
|
3057
|
+
new_is_cron = effective_freq != "DOWNSTREAM" and timeparse(effective_freq) is None
|
|
3058
|
+
old_freq: str = feature_view.refresh_freq
|
|
3059
|
+
old_is_cron = old_freq != "DOWNSTREAM" and timeparse(old_freq) is None
|
|
3060
|
+
|
|
3061
|
+
new_target_lag = "DOWNSTREAM" if new_is_cron else effective_freq
|
|
3062
|
+
old_target_lag = "DOWNSTREAM" if old_is_cron else old_freq
|
|
3063
|
+
|
|
3064
|
+
def alter_dt(op_type: str, *, target_lag: str, wh: Optional[SqlIdentifier], comment: str) -> tuple[str, str]:
|
|
3065
|
+
return (
|
|
3066
|
+
op_type,
|
|
3067
|
+
f"ALTER DYNAMIC TABLE {fqn} SET TARGET_LAG = '{target_lag}'" f" WAREHOUSE = {wh} COMMENT = '{comment}'",
|
|
3068
|
+
)
|
|
3069
|
+
|
|
3070
|
+
def create_task_ops(op_type: str, *, cron_expr: str, wh: Optional[SqlIdentifier]) -> list[tuple[str, str]]:
|
|
3071
|
+
# CREATE OR REPLACE keeps the operation idempotent even if a stale
|
|
3072
|
+
# task with the same name happens to exist (e.g. partial prior failure).
|
|
3073
|
+
task_obj_info = _FeatureStoreObjInfo(
|
|
3074
|
+
_FeatureStoreObjTypes.FEATURE_VIEW_REFRESH_TASK, snowml_version.VERSION
|
|
3075
|
+
)
|
|
3076
|
+
tag_path = self._get_fully_qualified_name(_FEATURE_STORE_OBJECT_TAG)
|
|
3077
|
+
return [
|
|
3078
|
+
(
|
|
3079
|
+
op_type,
|
|
3080
|
+
f"CREATE OR REPLACE TASK {fqn} WAREHOUSE = {wh} "
|
|
3081
|
+
f"SCHEDULE = 'USING CRON {cron_expr}' "
|
|
3082
|
+
f"AS ALTER DYNAMIC TABLE {fqn} REFRESH",
|
|
3083
|
+
),
|
|
3084
|
+
(op_type, f"ALTER TASK {fqn} SET TAG {tag_path}='{task_obj_info.to_json()}'"),
|
|
3085
|
+
(op_type, f"ALTER TASK {fqn} RESUME"),
|
|
3086
|
+
]
|
|
3087
|
+
|
|
3088
|
+
def drop_task_op(op_type: str) -> tuple[str, str]:
|
|
3089
|
+
return (op_type, f"DROP TASK IF EXISTS {fqn}")
|
|
3090
|
+
|
|
3091
|
+
def alter_task_schedule_ops(op_type: str, *, cron_expr: str) -> list[tuple[str, str]]:
|
|
3092
|
+
# ALTER TASK SET SCHEDULE requires the task to be suspended.
|
|
3093
|
+
return [
|
|
3094
|
+
(op_type, f"ALTER TASK {fqn} SUSPEND"),
|
|
3095
|
+
(op_type, f"ALTER TASK {fqn} SET SCHEDULE = 'USING CRON {cron_expr}'"),
|
|
3096
|
+
(op_type, f"ALTER TASK {fqn} RESUME"),
|
|
3097
|
+
]
|
|
3098
|
+
|
|
3099
|
+
operations: list[tuple[str, str]] = [
|
|
3100
|
+
alter_dt("OFFLINE_UPDATE", target_lag=new_target_lag, wh=new_warehouse, comment=desc)
|
|
3101
|
+
]
|
|
3102
|
+
if old_is_cron and new_is_cron:
|
|
3103
|
+
operations.extend(alter_task_schedule_ops("OFFLINE_UPDATE", cron_expr=effective_freq))
|
|
3104
|
+
elif old_is_cron and not new_is_cron:
|
|
3105
|
+
operations.append(drop_task_op("OFFLINE_UPDATE"))
|
|
3106
|
+
elif not old_is_cron and new_is_cron:
|
|
3107
|
+
operations.extend(create_task_ops("OFFLINE_UPDATE", cron_expr=effective_freq, wh=new_warehouse))
|
|
3108
|
+
|
|
3109
|
+
rollback_ops: list[tuple[str, str]] = [
|
|
3110
|
+
alter_dt(
|
|
3111
|
+
"OFFLINE_ROLLBACK",
|
|
3112
|
+
target_lag=old_target_lag,
|
|
3113
|
+
wh=old_warehouse,
|
|
3114
|
+
comment=feature_view.desc,
|
|
3115
|
+
)
|
|
3116
|
+
]
|
|
3117
|
+
if old_is_cron and new_is_cron:
|
|
3118
|
+
rollback_ops.extend(alter_task_schedule_ops("OFFLINE_ROLLBACK", cron_expr=old_freq))
|
|
3119
|
+
elif old_is_cron and not new_is_cron:
|
|
3120
|
+
rollback_ops.extend(create_task_ops("OFFLINE_ROLLBACK", cron_expr=old_freq, wh=old_warehouse))
|
|
3121
|
+
elif not old_is_cron and new_is_cron:
|
|
3122
|
+
rollback_ops.append(drop_task_op("OFFLINE_ROLLBACK"))
|
|
3123
|
+
|
|
3124
|
+
return operations, rollback_ops
|
|
3027
3125
|
|
|
3028
3126
|
@dataclass(frozen=True)
|
|
3029
3127
|
class _OnlineUpdateStrategy:
|
|
@@ -3156,12 +3254,11 @@ class FeatureStore:
|
|
|
3156
3254
|
rollback_operations: list[tuple[str, Union[str, FeatureView]]] = []
|
|
3157
3255
|
|
|
3158
3256
|
# Plan offline updates
|
|
3159
|
-
|
|
3257
|
+
offline_ops, offline_rollback_ops = self._build_offline_update_queries(
|
|
3160
3258
|
feature_view, refresh_freq, warehouse, desc
|
|
3161
3259
|
)
|
|
3162
|
-
operations.
|
|
3163
|
-
|
|
3164
|
-
rollback_operations.append(("OFFLINE_ROLLBACK", offline_rollback))
|
|
3260
|
+
operations.extend(offline_ops)
|
|
3261
|
+
rollback_operations.extend(offline_rollback_ops)
|
|
3165
3262
|
|
|
3166
3263
|
# Plan online updates
|
|
3167
3264
|
online_strategy = self._plan_online_update(feature_view, online_config)
|
|
@@ -3395,8 +3492,24 @@ class FeatureStore:
|
|
|
3395
3492
|
all_feature_cols = [spec.get_sql_column_name() for spec in feature_view.aggregation_specs]
|
|
3396
3493
|
if feature_names:
|
|
3397
3494
|
# Filter to requested features
|
|
3398
|
-
|
|
3399
|
-
|
|
3495
|
+
requested = {SqlIdentifier(f).resolved() for f in feature_names}
|
|
3496
|
+
keys_cols_to_keep: set[str] = set()
|
|
3497
|
+
keys_spec_by_window_offset = {
|
|
3498
|
+
(spec.window, spec.offset): spec
|
|
3499
|
+
for spec in feature_view.aggregation_specs
|
|
3500
|
+
if spec.function.is_secondary_key_array()
|
|
3501
|
+
}
|
|
3502
|
+
if keys_spec_by_window_offset:
|
|
3503
|
+
for spec in feature_view.aggregation_specs:
|
|
3504
|
+
if spec.function.is_secondary_key_array():
|
|
3505
|
+
continue
|
|
3506
|
+
if SqlIdentifier(spec.get_sql_column_name()).resolved() in requested:
|
|
3507
|
+
keys_spec = keys_spec_by_window_offset.get((spec.window, spec.offset))
|
|
3508
|
+
if keys_spec is not None:
|
|
3509
|
+
keys_cols_to_keep.add(keys_spec.get_sql_column_name())
|
|
3510
|
+
all_feature_cols = [
|
|
3511
|
+
c for c in all_feature_cols if SqlIdentifier(c).resolved() in requested or c in keys_cols_to_keep
|
|
3512
|
+
]
|
|
3400
3513
|
|
|
3401
3514
|
feature_cols_str = ", ".join(all_feature_cols)
|
|
3402
3515
|
# CTE name format matches generator: FV{index:03d}
|
|
@@ -4981,6 +5094,34 @@ FROM {batch_cte_names[0]}{''.join(merge_join_parts)}
|
|
|
4981
5094
|
|
|
4982
5095
|
return complete_query
|
|
4983
5096
|
|
|
5097
|
+
def _resolve_task_schedule(self, fv_name: SqlIdentifier, fallback: str) -> str:
|
|
5098
|
+
"""Look up the Task schedule for a cron-driven feature view.
|
|
5099
|
+
|
|
5100
|
+
CRON-based FVs use ``TARGET_LAG = 'DOWNSTREAM'`` on the DT while the
|
|
5101
|
+
actual cron schedule lives on a companion Task with the same name.
|
|
5102
|
+
This helper retrieves that schedule so the reconstructed
|
|
5103
|
+
``FeatureView`` carries the real cron expression instead of
|
|
5104
|
+
``'DOWNSTREAM'``.
|
|
5105
|
+
|
|
5106
|
+
Args:
|
|
5107
|
+
fv_name: Resolved physical name of the feature view (e.g. ``FV$V1``).
|
|
5108
|
+
fallback: Value to return when no Task is found (i.e. the FV was
|
|
5109
|
+
truly registered with ``refresh_freq='DOWNSTREAM'``).
|
|
5110
|
+
|
|
5111
|
+
Returns:
|
|
5112
|
+
The cron expression from the Task (with the ``USING CRON `` prefix
|
|
5113
|
+
stripped), or ``fallback`` if no Task exists.
|
|
5114
|
+
"""
|
|
5115
|
+
task_rows = self._session.sql(
|
|
5116
|
+
f"SHOW TASKS LIKE '{fv_name.resolved()}' IN SCHEMA {self._config.full_schema_path}"
|
|
5117
|
+
).collect(statement_params=self._telemetry_stmp)
|
|
5118
|
+
if not task_rows:
|
|
5119
|
+
return fallback
|
|
5120
|
+
schedule: str = task_rows[0]["schedule"]
|
|
5121
|
+
if schedule.upper().startswith("USING CRON "):
|
|
5122
|
+
schedule = schedule[len("USING CRON ") :]
|
|
5123
|
+
return schedule
|
|
5124
|
+
|
|
4984
5125
|
def _get_entity_name(self, raw_name: SqlIdentifier) -> SqlIdentifier:
|
|
4985
5126
|
return SqlIdentifier(identifier.concat_names([_ENTITY_TAG_PREFIX, raw_name]))
|
|
4986
5127
|
|
|
@@ -5238,7 +5379,14 @@ FROM {batch_cte_names[0]}{''.join(merge_join_parts)}
|
|
|
5238
5379
|
values.append(row["owner"])
|
|
5239
5380
|
values.append(row["comment"])
|
|
5240
5381
|
values.append(fv_metadata.entities)
|
|
5241
|
-
|
|
5382
|
+
# CRON-based FVs use TARGET_LAG='DOWNSTREAM' on the DT and store the actual
|
|
5383
|
+
# cron expression on a companion Task. Recover it so list_feature_views()
|
|
5384
|
+
# surfaces the same value the user originally passed in (matching the
|
|
5385
|
+
# round-trip behavior of get_feature_view / register_feature_view).
|
|
5386
|
+
target_lag = row["target_lag"] if "target_lag" in row else None
|
|
5387
|
+
if target_lag == "DOWNSTREAM":
|
|
5388
|
+
target_lag = self._resolve_task_schedule(FeatureView._get_physical_name(name, version), target_lag)
|
|
5389
|
+
values.append(target_lag)
|
|
5242
5390
|
values.append(row["refresh_mode"] if "refresh_mode" in row else None)
|
|
5243
5391
|
values.append(row["scheduling_state"] if "scheduling_state" in row else None)
|
|
5244
5392
|
values.append(row["warehouse"] if "warehouse" in row else None)
|
|
@@ -5460,6 +5608,13 @@ FROM {batch_cte_names[0]}{''.join(merge_join_parts)}
|
|
|
5460
5608
|
else:
|
|
5461
5609
|
feature_descs = self._fetch_column_descs("DYNAMIC TABLE", fv_name)
|
|
5462
5610
|
|
|
5611
|
+
# CRON-based FVs use TARGET_LAG='DOWNSTREAM' on the DT and store the
|
|
5612
|
+
# actual cron expression on a companion Task. Recover it so the
|
|
5613
|
+
# round-trip (register → get → update) preserves what the user passed.
|
|
5614
|
+
refresh_freq = row["target_lag"]
|
|
5615
|
+
if refresh_freq == "DOWNSTREAM":
|
|
5616
|
+
refresh_freq = self._resolve_task_schedule(fv_name, refresh_freq)
|
|
5617
|
+
|
|
5463
5618
|
fv = FeatureView._construct_feature_view(
|
|
5464
5619
|
name=name,
|
|
5465
5620
|
entities=entities,
|
|
@@ -5473,7 +5628,7 @@ FROM {batch_cte_names[0]}{''.join(merge_join_parts)}
|
|
|
5473
5628
|
else FeatureViewStatus.MASKED
|
|
5474
5629
|
),
|
|
5475
5630
|
feature_descs=feature_descs,
|
|
5476
|
-
refresh_freq=
|
|
5631
|
+
refresh_freq=refresh_freq,
|
|
5477
5632
|
database=self._config.database.identifier(),
|
|
5478
5633
|
schema=self._config.schema.identifier(),
|
|
5479
5634
|
warehouse=(
|