snowflake-ml-python 1.46.0__tar.gz → 1.47.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.46.0 → snowflake_ml_python-1.47.0}/CHANGELOG.md +34 -1
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/PKG-INFO +36 -3
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/pyproject.toml +1 -1
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/experiment/experiment_tracking.py +45 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/aggregation.py +10 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/feature_group.py +21 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/feature_store.py +199 -13
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/feature_view.py +54 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/realtime_registration.py +6 -4
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/spec/builder.py +53 -35
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/tile_sql_generator.py +26 -23
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/lineage/lineage_node.py +1 -1
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_client/model/batch_inference_specs.py +10 -3
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_client/model/model_version_impl.py +3 -1
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_client/ops/service_ops.py +3 -1
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/catboost.py +1 -2
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/huggingface/_handler.py +2 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/huggingface/_task_handler.py +2 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/huggingface/document_question_answering.py +2 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/huggingface/image_classification.py +2 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/huggingface/image_feature_extraction.py +2 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/huggingface/image_text_to_text.py +2 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/huggingface/image_to_text.py +2 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/huggingface/object_detection.py +2 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/huggingface/video_classification.py +2 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/huggingface/visual_question_answering.py +2 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/huggingface/zero_shot_image_classification.py +2 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/huggingface/zero_shot_object_detection.py +2 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/lightgbm.py +1 -2
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/sklearn.py +1 -18
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/snowmlmodel.py +17 -22
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/xgboost.py +1 -1
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_runtime/_snowml_inference_alternative_requirements.py +1 -1
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_signatures/snowpark_handler.py +5 -1
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/openai_signatures.py +44 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/type_hints.py +1 -1
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/calibration/calibrated_classifier_cv.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/cluster/affinity_propagation.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/cluster/agglomerative_clustering.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/cluster/birch.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/cluster/bisecting_k_means.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/cluster/dbscan.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/cluster/feature_agglomeration.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/cluster/k_means.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/cluster/mean_shift.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/cluster/mini_batch_k_means.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/cluster/optics.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/cluster/spectral_biclustering.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/cluster/spectral_clustering.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/cluster/spectral_coclustering.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/compose/column_transformer.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/compose/transformed_target_regressor.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/covariance/elliptic_envelope.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/covariance/empirical_covariance.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/covariance/graphical_lasso.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/covariance/graphical_lasso_cv.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/covariance/ledoit_wolf.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/covariance/min_cov_det.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/covariance/oas.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/covariance/shrunk_covariance.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/decomposition/dictionary_learning.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/decomposition/factor_analysis.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/decomposition/fast_ica.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/decomposition/incremental_pca.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/decomposition/kernel_pca.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/decomposition/mini_batch_dictionary_learning.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/decomposition/mini_batch_sparse_pca.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/decomposition/pca.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/decomposition/sparse_pca.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/decomposition/truncated_svd.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/discriminant_analysis/linear_discriminant_analysis.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/discriminant_analysis/quadratic_discriminant_analysis.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/ensemble/ada_boost_classifier.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/ensemble/ada_boost_regressor.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/ensemble/bagging_classifier.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/ensemble/bagging_regressor.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/ensemble/extra_trees_classifier.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/ensemble/extra_trees_regressor.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/ensemble/gradient_boosting_classifier.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/ensemble/gradient_boosting_regressor.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/ensemble/hist_gradient_boosting_classifier.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/ensemble/hist_gradient_boosting_regressor.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/ensemble/isolation_forest.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/ensemble/random_forest_classifier.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/ensemble/random_forest_regressor.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/ensemble/stacking_regressor.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/ensemble/voting_classifier.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/ensemble/voting_regressor.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/feature_selection/generic_univariate_select.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/feature_selection/select_fdr.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/feature_selection/select_fpr.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/feature_selection/select_fwe.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/feature_selection/select_k_best.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/feature_selection/select_percentile.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/feature_selection/sequential_feature_selector.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/feature_selection/variance_threshold.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/framework/base.py +30 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/gaussian_process/gaussian_process_classifier.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/gaussian_process/gaussian_process_regressor.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/impute/iterative_imputer.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/impute/knn_imputer.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/impute/missing_indicator.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/impute/simple_imputer.py +6 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/kernel_approximation/additive_chi2_sampler.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/kernel_approximation/nystroem.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/kernel_approximation/polynomial_count_sketch.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/kernel_approximation/rbf_sampler.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/kernel_approximation/skewed_chi2_sampler.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/kernel_ridge/kernel_ridge.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/lightgbm/lgbm_classifier.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/lightgbm/lgbm_regressor.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/ard_regression.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/bayesian_ridge.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/elastic_net.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/elastic_net_cv.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/gamma_regressor.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/huber_regressor.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/lars.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/lars_cv.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/lasso.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/lasso_cv.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/lasso_lars.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/lasso_lars_cv.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/lasso_lars_ic.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/linear_regression.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/logistic_regression.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/logistic_regression_cv.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/multi_task_elastic_net.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/multi_task_elastic_net_cv.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/multi_task_lasso.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/multi_task_lasso_cv.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/orthogonal_matching_pursuit.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/passive_aggressive_classifier.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/passive_aggressive_regressor.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/perceptron.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/poisson_regressor.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/ransac_regressor.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/ridge.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/ridge_classifier.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/ridge_classifier_cv.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/ridge_cv.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/sgd_classifier.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/sgd_one_class_svm.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/sgd_regressor.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/theil_sen_regressor.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/tweedie_regressor.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/manifold/isomap.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/manifold/mds.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/manifold/spectral_embedding.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/manifold/tsne.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/mixture/bayesian_gaussian_mixture.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/mixture/gaussian_mixture.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/model_selection/grid_search_cv.py +5 -4
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/model_selection/randomized_search_cv.py +5 -4
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/multiclass/one_vs_one_classifier.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/multiclass/one_vs_rest_classifier.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/multiclass/output_code_classifier.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/naive_bayes/bernoulli_nb.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/naive_bayes/categorical_nb.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/naive_bayes/complement_nb.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/naive_bayes/gaussian_nb.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/naive_bayes/multinomial_nb.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/neighbors/k_neighbors_classifier.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/neighbors/k_neighbors_regressor.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/neighbors/kernel_density.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/neighbors/local_outlier_factor.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/neighbors/nearest_centroid.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/neighbors/nearest_neighbors.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/neighbors/neighborhood_components_analysis.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/neighbors/radius_neighbors_classifier.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/neighbors/radius_neighbors_regressor.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/neural_network/bernoulli_rbm.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/neural_network/mlp_classifier.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/neural_network/mlp_regressor.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/preprocessing/polynomial_features.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/semi_supervised/label_propagation.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/semi_supervised/label_spreading.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/svm/linear_svc.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/svm/linear_svr.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/svm/nu_svc.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/svm/nu_svr.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/svm/svc.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/svm/svr.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/tree/decision_tree_classifier.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/tree/decision_tree_regressor.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/tree/extra_tree_classifier.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/tree/extra_tree_regressor.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/xgboost/xgb_classifier.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/xgboost/xgb_regressor.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/xgboost/xgbrf_classifier.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/xgboost/xgbrf_regressor.py +18 -5
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/registry/_manager/model_parameter_reconciler.py +3 -61
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/registry/registry.py +6 -6
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/version.py +1 -1
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake_ml_python.egg-info/PKG-INFO +36 -3
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake_ml_python.egg-info/requires.txt +1 -1
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/LICENSE.txt +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/README.md +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/setup.cfg +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/cortex/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/cortex/_classify_text.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/cortex/_complete.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/cortex/_embed_text_1024.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/cortex/_embed_text_768.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/cortex/_extract_answer.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/cortex/_finetune.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/cortex/_sentiment.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/cortex/_sse_client.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/cortex/_summarize.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/cortex/_translate.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/cortex/_util.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/env.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/env_utils.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/exceptions/dataset_error_messages.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/exceptions/dataset_errors.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/exceptions/error_codes.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/exceptions/error_messages.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/exceptions/exceptions.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/exceptions/fileset_error_messages.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/exceptions/fileset_errors.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/exceptions/modeling_error_messages.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/exceptions/sql_error_codes.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/file_utils.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/human_readable_id/adjectives.txt +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/human_readable_id/animals.txt +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/human_readable_id/hrid_generator.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/human_readable_id/hrid_generator_base.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/init_utils.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/lineage/lineage_utils.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/migrator_utils.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/platform_capabilities.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/relax_version_strategy.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/telemetry.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/type_utils.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/utils/connection_params.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/utils/db_utils.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/utils/formatting.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/utils/identifier.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/utils/import_utils.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/utils/jwt_generator.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/utils/mixins.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/utils/parallelize.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/utils/pkg_version_utils.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/utils/query_result_checker.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/utils/result.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/utils/service_logger.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/utils/snowflake_env.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/utils/snowpark_dataframe_utils.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/utils/sql_identifier.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/utils/table_manager.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/utils/tee.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/utils/temp_file_utils.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/_internal/utils/url.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/data/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/data/_internal/arrow_ingestor.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/data/data_connector.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/data/data_ingestor.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/data/data_source.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/data/ingestor_utils.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/data/torch_utils.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/dataset/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/dataset/dataset.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/dataset/dataset_factory.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/dataset/dataset_metadata.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/dataset/dataset_reader.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/experiment/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/experiment/_client/artifact.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/experiment/_client/experiment_tracking_sql_client.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/experiment/_entities/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/experiment/_entities/experiment.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/experiment/_entities/run.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/experiment/_entities/run_metadata.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/experiment/_experiment_info.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/experiment/_logging/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/experiment/_logging/experiment_logger.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/experiment/_logging/experiment_logging_context.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/experiment/callback/keras.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/experiment/callback/lightgbm.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/experiment/callback/xgboost.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/experiment/utils.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/_compute_fn_validation.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/access_manager.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/entity.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/examples/airline_features/entities.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/examples/airline_features/features/plane_features.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/examples/airline_features/features/weather_features.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/examples/airline_features/source.yaml +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/examples/citibike_trip_features/entities.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/examples/citibike_trip_features/features/station_feature.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/examples/citibike_trip_features/features/trip_feature.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/examples/citibike_trip_features/source.yaml +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/examples/example_helper.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/examples/new_york_taxi_features/entities.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/examples/new_york_taxi_features/features/location_features.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/examples/new_york_taxi_features/features/trip_features.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/examples/new_york_taxi_features/source.yaml +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/examples/source_data/airline.yaml +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/examples/source_data/citibike_trips.yaml +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/examples/source_data/fraud_transactions.yaml +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/examples/source_data/nyc_yellow_trips.yaml +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/examples/source_data/winequality_red.yaml +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/examples/wine_quality_features/entities.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/examples/wine_quality_features/features/managed_wine_features.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/examples/wine_quality_features/features/static_wine_features.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/examples/wine_quality_features/source.yaml +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/feature.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/feature_view_append_only_validation.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/feature_view_refresh_freq.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/interval_utils.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/metadata_manager.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/online_service.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/online_service_http_client.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/realtime_config.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/realtime_dataset.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/realtime_dataset_udf.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/request_source.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/spec/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/spec/enums.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/spec/models.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/spec/table_schema_evolution.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/stream_config.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/stream_source.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/streaming_registration.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/fileset/embedded_stage_fs.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/fileset/fileset.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/fileset/sfcfs.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/fileset/snowfs.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/fileset/stage_fs.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/jobs/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/jobs/_interop/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/jobs/_interop/data_utils.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/jobs/_interop/dto_schema.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/jobs/_interop/exception_utils.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/jobs/_interop/legacy.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/jobs/_interop/protocols.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/jobs/_interop/results.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/jobs/_interop/utils.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/jobs/_utils/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/jobs/_utils/arg_protocol.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/jobs/_utils/constants.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/jobs/_utils/feature_flags.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/jobs/_utils/payload_utils.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/jobs/_utils/query_helper.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/jobs/_utils/runtime_env_utils.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/jobs/_utils/scripts/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/jobs/_utils/scripts/constants.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/jobs/_utils/scripts/get_instance_ip.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/jobs/_utils/scripts/mljob_launcher.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/jobs/_utils/scripts/signal_workers.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/jobs/_utils/scripts/start_mlruntime.sh +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/jobs/_utils/scripts/startup.sh +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/jobs/_utils/scripts/worker_shutdown_listener.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/jobs/_utils/stage_utils.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/jobs/_utils/type_utils.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/jobs/decorators.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/jobs/job.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/jobs/job_definition.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/jobs/manager.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/lineage/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_client/model/batch_inference_serialization.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_client/model/batch_inference_task.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_client/model/inference_engine_utils.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_client/model/model_impl.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_client/ops/deployment_step.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_client/ops/metadata_ops.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_client/ops/model_ops.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_client/ops/param_ops.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_client/ops/param_utils.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_client/service/import_model_spec_schema.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_client/service/inference_job_service_spec.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_client/service/model_deployment_spec.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_client/service/model_deployment_spec_schema.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_client/sql/_base.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_client/sql/model.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_client/sql/model_version.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_client/sql/service.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_client/sql/stage.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_client/sql/tag.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_model_composer/huggingface_lazy_uploader.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_model_composer/model_composer.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_model_composer/model_manifest/model_manifest.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_model_composer/model_manifest/model_manifest_schema.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_model_composer/model_method/constants.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_model_composer/model_method/function_generator.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_model_composer/model_method/infer_function.py_template +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_model_composer/model_method/infer_function_init_once.py_template +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_model_composer/model_method/infer_partitioned.py_template +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_model_composer/model_method/infer_partitioned_init_once.py_template +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_model_composer/model_method/infer_table_function.py_template +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_model_composer/model_method/infer_table_function_init_once.py_template +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_model_composer/model_method/model_method.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_model_composer/model_method/utils.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_model_composer/model_user_file/model_user_file.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_env/model_env.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handler.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/_base.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/_utils.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/custom.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/huggingface/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/huggingface/_default.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/huggingface/_openai_chat_wrapper.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/huggingface/_utils.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/huggingface/audio_classification.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/huggingface/audio_text_to_text.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/huggingface/automatic_speech_recognition.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/huggingface/conversational.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/huggingface/fill_mask.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/huggingface/question_answering.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/huggingface/summarization.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/huggingface/table_question_answering.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/huggingface/text2text_generation.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/huggingface/text_classification.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/huggingface/text_generation.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/huggingface/token_classification.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/huggingface/translation.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/huggingface/video_text_to_text.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/huggingface/zero_shot_audio_classification.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/huggingface/zero_shot_text_classification.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/keras.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/mlflow.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/prophet.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/pytorch.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/sentence_transformers.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/tensorflow.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers/torchscript.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers_migrator/base_migrator.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers_migrator/pytorch_migrator_2023_12_01.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers_migrator/tensorflow_migrator_2023_12_01.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers_migrator/tensorflow_migrator_2025_01_01.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_handlers_migrator/torchscript_migrator_2023_12_01.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_meta/model_blob_meta.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_meta/model_meta.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_meta/model_meta_schema.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_meta/model_sample_input_data.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_meta_migrator/base_migrator.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_meta_migrator/migrator_plans.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_meta_migrator/migrator_v1.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_packager.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_runtime/model_runtime.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_save_options.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_packager/model_task/model_task_utils.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_signatures/base_handler.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_signatures/builtins_handler.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_signatures/core.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_signatures/dmatrix_handler.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_signatures/numpy_handler.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_signatures/pandas_handler.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_signatures/pytorch_handler.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_signatures/tensorflow_handler.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/_signatures/utils.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/batch/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/code_path.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/compute_pool.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/custom_model.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/event_handler.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/inference_engine.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/model_signature.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/models/huggingface.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/models/huggingface_pipeline.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/target_platform.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/task.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/model/volatility.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/_internal/estimator_utils.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/_internal/local_implementations/pandas_handlers.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/_internal/local_implementations/pandas_trainer.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/_internal/model_specifications.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/_internal/model_trainer.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/_internal/model_trainer_builder.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/_internal/model_transformer_builder.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/_internal/snowpark_implementations/distributed_hpo_trainer.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/_internal/snowpark_implementations/distributed_search_udf_file.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/_internal/snowpark_implementations/snowpark_handlers.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/_internal/snowpark_implementations/snowpark_trainer.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/_internal/snowpark_implementations/xgboost_external_memory_trainer.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/_internal/transformer_protocols.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/calibration/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/cluster/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/compose/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/covariance/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/decomposition/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/discriminant_analysis/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/ensemble/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/feature_selection/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/framework/_utils.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/gaussian_process/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/impute/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/kernel_approximation/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/kernel_ridge/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/lightgbm/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/linear_model/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/manifold/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/metrics/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/metrics/classification.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/metrics/correlation.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/metrics/covariance.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/metrics/metrics_utils.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/metrics/ranking.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/metrics/regression.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/mixture/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/model_selection/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/multiclass/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/naive_bayes/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/neighbors/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/neural_network/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/parameters/disable_distributed_hpo.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/parameters/disable_model_tracer.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/parameters/enable_anonymous_sproc.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/pipeline/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/pipeline/pipeline.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/preprocessing/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/preprocessing/binarizer.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/preprocessing/k_bins_discretizer.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/preprocessing/label_encoder.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/preprocessing/max_abs_scaler.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/preprocessing/min_max_scaler.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/preprocessing/normalizer.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/preprocessing/one_hot_encoder.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/preprocessing/ordinal_encoder.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/preprocessing/robust_scaler.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/preprocessing/standard_scaler.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/semi_supervised/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/svm/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/tree/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/modeling/xgboost/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/monitoring/_client/model_monitor_sql_client.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/monitoring/_client/queries/record_count.ssql +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/monitoring/_client/queries/rmse.ssql +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/monitoring/_manager/model_monitor_manager.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/monitoring/entities/model_monitor_config.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/monitoring/explain_visualize.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/monitoring/model_monitor.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/monitoring/shap.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/registry/__init__.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/registry/_manager/model_manager.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/utils/authentication.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/utils/connection_params.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/utils/html_utils.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/utils/sparse.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/utils/sql_client.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/utils/stage_file.py +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake_ml_python.egg-info/SOURCES.txt +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake_ml_python.egg-info/dependency_links.txt +0 -0
- {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake_ml_python.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,39 @@
|
|
|
1
1
|
# Release History
|
|
2
2
|
|
|
3
|
-
## 1.
|
|
3
|
+
## 1.47.0
|
|
4
|
+
|
|
5
|
+
### New Features
|
|
6
|
+
|
|
7
|
+
* Experiment Tracking: Added `ExperimentTracking.list_model_versions` to retrieve the model versions that were
|
|
8
|
+
logged under a run. Models logged via `log_model` inside a run are linked to that run through Snowflake lineage,
|
|
9
|
+
and this method traverses that lineage to return the corresponding `ModelVersion` objects.
|
|
10
|
+
|
|
11
|
+
```python
|
|
12
|
+
from snowflake.ml.experiment import ExperimentTracking
|
|
13
|
+
|
|
14
|
+
exp = ExperimentTracking(session)
|
|
15
|
+
exp.set_experiment("MY_EXPERIMENT")
|
|
16
|
+
with exp.start_run(run_name="MY_RUN"):
|
|
17
|
+
exp.log_model(model, model_name="MY_MODEL", sample_input_data=X)
|
|
18
|
+
|
|
19
|
+
model_versions = exp.list_model_versions(run_name="MY_RUN")
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### Bug Fixes
|
|
23
|
+
|
|
24
|
+
* Experiment Tracking: Fix a bug where `.set_experiment` does not recreate an experiment deleted in Snowsight
|
|
25
|
+
|
|
26
|
+
### Behavior Changes
|
|
27
|
+
|
|
28
|
+
* Registry: `enable_explainability` now defaults to `False` for all model types when logging a model. Previously it
|
|
29
|
+
defaulted to `True` for XGBoost, LightGBM, and CatBoost models and was auto-enabled for supported scikit-learn and
|
|
30
|
+
Snowpark ML modeling models when running in the Warehouse. To generate an `explain` method, explicitly pass
|
|
31
|
+
`options={"enable_explainability": True}` to `log_model` (this requires `sample_input_data` for supported model
|
|
32
|
+
types).
|
|
33
|
+
|
|
34
|
+
### Deprecations
|
|
35
|
+
|
|
36
|
+
## 1.46.0 (2026-07-07)
|
|
4
37
|
|
|
5
38
|
### New Features
|
|
6
39
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: snowflake-ml-python
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.47.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,7 @@ 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: scikit-learn<1.
|
|
253
|
+
Requires-Dist: scikit-learn<1.9
|
|
254
254
|
Requires-Dist: scipy<2,>=1.9
|
|
255
255
|
Requires-Dist: shap<1,>=0.46.0
|
|
256
256
|
Requires-Dist: snowflake-connector-python[pandas]<5,>=3.17.3
|
|
@@ -416,7 +416,40 @@ NOTE: Version 1.7.0 is used as example here. Please choose the the latest versio
|
|
|
416
416
|
|
|
417
417
|
# Release History
|
|
418
418
|
|
|
419
|
-
## 1.
|
|
419
|
+
## 1.47.0
|
|
420
|
+
|
|
421
|
+
### New Features
|
|
422
|
+
|
|
423
|
+
* Experiment Tracking: Added `ExperimentTracking.list_model_versions` to retrieve the model versions that were
|
|
424
|
+
logged under a run. Models logged via `log_model` inside a run are linked to that run through Snowflake lineage,
|
|
425
|
+
and this method traverses that lineage to return the corresponding `ModelVersion` objects.
|
|
426
|
+
|
|
427
|
+
```python
|
|
428
|
+
from snowflake.ml.experiment import ExperimentTracking
|
|
429
|
+
|
|
430
|
+
exp = ExperimentTracking(session)
|
|
431
|
+
exp.set_experiment("MY_EXPERIMENT")
|
|
432
|
+
with exp.start_run(run_name="MY_RUN"):
|
|
433
|
+
exp.log_model(model, model_name="MY_MODEL", sample_input_data=X)
|
|
434
|
+
|
|
435
|
+
model_versions = exp.list_model_versions(run_name="MY_RUN")
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
### Bug Fixes
|
|
439
|
+
|
|
440
|
+
* Experiment Tracking: Fix a bug where `.set_experiment` does not recreate an experiment deleted in Snowsight
|
|
441
|
+
|
|
442
|
+
### Behavior Changes
|
|
443
|
+
|
|
444
|
+
* Registry: `enable_explainability` now defaults to `False` for all model types when logging a model. Previously it
|
|
445
|
+
defaulted to `True` for XGBoost, LightGBM, and CatBoost models and was auto-enabled for supported scikit-learn and
|
|
446
|
+
Snowpark ML modeling models when running in the Warehouse. To generate an `explain` method, explicitly pass
|
|
447
|
+
`options={"enable_explainability": True}` to `log_model` (this requires `sample_input_data` for supported model
|
|
448
|
+
types).
|
|
449
|
+
|
|
450
|
+
### Deprecations
|
|
451
|
+
|
|
452
|
+
## 1.46.0 (2026-07-07)
|
|
420
453
|
|
|
421
454
|
### New Features
|
|
422
455
|
|
|
@@ -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", "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.
|
|
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", "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.9", "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"
|
|
@@ -24,6 +24,7 @@ from snowflake.ml.experiment._client import (
|
|
|
24
24
|
experiment_tracking_sql_client as sql_client,
|
|
25
25
|
)
|
|
26
26
|
from snowflake.ml.experiment._entities import run_metadata
|
|
27
|
+
from snowflake.ml.lineage import lineage_node
|
|
27
28
|
from snowflake.ml.model import type_hints
|
|
28
29
|
from snowflake.ml.utils import sql_client as sql_client_utils
|
|
29
30
|
|
|
@@ -196,21 +197,22 @@ class ExperimentTracking:
|
|
|
196
197
|
schema_name = sql_identifier.SqlIdentifier(schema_name) if schema_name is not None else self._schema_name
|
|
197
198
|
|
|
198
199
|
experiment_name = sql_identifier.SqlIdentifier(experiment_name)
|
|
199
|
-
if (
|
|
200
|
+
if not (
|
|
200
201
|
self._experiment
|
|
201
202
|
and self._experiment.name == experiment_name
|
|
202
203
|
and self._database_name == database_name
|
|
203
204
|
and self._schema_name == schema_name
|
|
204
205
|
):
|
|
205
|
-
|
|
206
|
+
# If the requested experiment differs from the current one, switch context (and drop any active run)
|
|
207
|
+
self._update_database_and_schema(database_name, schema_name)
|
|
208
|
+
self._experiment = entities.Experiment(experiment_name=experiment_name)
|
|
209
|
+
self._unset_run()
|
|
206
210
|
|
|
207
|
-
|
|
211
|
+
# Always attempt to create idempotently so an experiment that was deleted (e.g. via the UI) is restored.
|
|
208
212
|
self._sql_client.create_experiment(
|
|
209
213
|
experiment_name=experiment_name,
|
|
210
214
|
creation_mode=sql_client_utils.CreationMode(if_not_exists=True),
|
|
211
215
|
)
|
|
212
|
-
self._experiment = entities.Experiment(experiment_name=experiment_name)
|
|
213
|
-
self._unset_run()
|
|
214
216
|
return self._experiment
|
|
215
217
|
|
|
216
218
|
def delete_experiment(
|
|
@@ -267,6 +269,44 @@ class ExperimentTracking:
|
|
|
267
269
|
with experiment_info.ExperimentInfoPatcher(experiment_info=run._get_experiment_info()):
|
|
268
270
|
return self._registry.log_model(model, model_name=model_name, **kwargs)
|
|
269
271
|
|
|
272
|
+
def list_model_versions(self, run_name: Optional[str] = None) -> list[ml_model.ModelVersion]:
|
|
273
|
+
"""
|
|
274
|
+
List the model versions that were logged under a run.
|
|
275
|
+
|
|
276
|
+
Models logged via ``log_model`` inside a run are linked to that run through Snowflake lineage. This method
|
|
277
|
+
traverses that lineage to return the corresponding model versions.
|
|
278
|
+
|
|
279
|
+
Args:
|
|
280
|
+
run_name: The name of the run to list model versions from. If None, uses the currently active run.
|
|
281
|
+
|
|
282
|
+
Returns:
|
|
283
|
+
A list of ModelVersion objects that were logged under the run.
|
|
284
|
+
|
|
285
|
+
Raises:
|
|
286
|
+
RuntimeError: If no experiment is set, or if no run_name is provided and no run is active.
|
|
287
|
+
"""
|
|
288
|
+
if not self._experiment:
|
|
289
|
+
raise RuntimeError("No experiment set. Please set an experiment before listing model versions.")
|
|
290
|
+
|
|
291
|
+
if run_name:
|
|
292
|
+
resolved_run_name = sql_identifier.SqlIdentifier(run_name)
|
|
293
|
+
elif self._run:
|
|
294
|
+
resolved_run_name = self._run.name
|
|
295
|
+
else:
|
|
296
|
+
raise RuntimeError("No run is active. Please provide a run_name or start a run.")
|
|
297
|
+
|
|
298
|
+
experiment_fqn = self._sql_client.fully_qualified_object_name(
|
|
299
|
+
self._database_name, self._schema_name, self._experiment.name
|
|
300
|
+
)
|
|
301
|
+
run_node = lineage_node.LineageNode(
|
|
302
|
+
session=self._session,
|
|
303
|
+
name=experiment_fqn,
|
|
304
|
+
domain="experiment",
|
|
305
|
+
version=resolved_run_name.identifier(),
|
|
306
|
+
)
|
|
307
|
+
logged_models = run_node.lineage(direction="downstream", domain_filter={"model"})
|
|
308
|
+
return [model for model in logged_models if isinstance(model, ml_model.ModelVersion)]
|
|
309
|
+
|
|
270
310
|
def start_run(
|
|
271
311
|
self,
|
|
272
312
|
run_name: Optional[str] = None,
|
{snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/aggregation.py
RENAMED
|
@@ -19,6 +19,11 @@ from snowflake.ml.feature_store.interval_utils import ( # noqa: F401 - re-expor
|
|
|
19
19
|
parse_interval as parse_interval,
|
|
20
20
|
)
|
|
21
21
|
|
|
22
|
+
# Product-wide upper bound on ``n`` for the ordered-N list aggregations
|
|
23
|
+
# (last_n / first_n / last_distinct_n / first_distinct_n). Enforced at authoring
|
|
24
|
+
# time so users get a clear error, and matched by the engine's own bound.
|
|
25
|
+
_MAX_ORDERED_N = 100
|
|
26
|
+
|
|
22
27
|
|
|
23
28
|
class AggregationType(Enum):
|
|
24
29
|
"""Supported aggregation functions for tiled feature views.
|
|
@@ -161,6 +166,11 @@ class AggregationSpec:
|
|
|
161
166
|
raise ValueError(
|
|
162
167
|
f"Parameter 'n' must be a positive integer for aggregation " f"'{self.output_column}', got: {n}"
|
|
163
168
|
)
|
|
169
|
+
if n > _MAX_ORDERED_N:
|
|
170
|
+
raise ValueError(
|
|
171
|
+
f"Parameter 'n' must be between 1 and {_MAX_ORDERED_N} for "
|
|
172
|
+
f"{self.function.value} aggregation '{self.output_column}', got: {n}"
|
|
173
|
+
)
|
|
164
174
|
|
|
165
175
|
# Validate params for approx_percentile
|
|
166
176
|
if self.function == AggregationType.APPROX_PERCENTILE:
|
|
@@ -730,6 +730,26 @@ def _resolve_fg_output_columns(fg: FeatureGroup) -> list[str]:
|
|
|
730
730
|
return cols
|
|
731
731
|
|
|
732
732
|
|
|
733
|
+
def _normalize_join_key_datatype(datatype: Any) -> Any:
|
|
734
|
+
"""Collapse ``StringType`` VARCHAR length so join keys compare by logical type.
|
|
735
|
+
|
|
736
|
+
A shared string join key can surface with different VARCHAR lengths across
|
|
737
|
+
sources -- e.g. a tiled FeatureView exposes the unbounded ``StringType()``
|
|
738
|
+
default while a batch FeatureView read back through its materialized dynamic
|
|
739
|
+
table reports a length narrowed to its stored data. The length is irrelevant
|
|
740
|
+
to join semantics and to the response schema, so all ``StringType`` variants
|
|
741
|
+
normalize to the unbounded ``StringType()``. Other datatypes pass through
|
|
742
|
+
unchanged.
|
|
743
|
+
|
|
744
|
+
Args:
|
|
745
|
+
datatype: A Snowpark datatype from a source's join-key column.
|
|
746
|
+
|
|
747
|
+
Returns:
|
|
748
|
+
``StringType()`` for any ``StringType`` input; ``datatype`` otherwise.
|
|
749
|
+
"""
|
|
750
|
+
return StringType() if isinstance(datatype, StringType) else datatype
|
|
751
|
+
|
|
752
|
+
|
|
733
753
|
def _fg_join_key_field_types(fg: FeatureGroup, *, strict: bool = False) -> dict[str, Any]:
|
|
734
754
|
"""Resolve ``{join_key -> Snowpark datatype}`` across every source FV.
|
|
735
755
|
|
|
@@ -787,6 +807,7 @@ def _fg_join_key_field_types(fg: FeatureGroup, *, strict: bool = False) -> dict[
|
|
|
787
807
|
else:
|
|
788
808
|
iterator = ((f.name, f.datatype) for f in fv.output_schema.fields if f.name in pk)
|
|
789
809
|
for name, datatype in iterator:
|
|
810
|
+
datatype = _normalize_join_key_datatype(datatype)
|
|
790
811
|
previous = type_by_name.get(name)
|
|
791
812
|
if previous is None:
|
|
792
813
|
type_by_name[name] = datatype
|
|
@@ -1028,6 +1028,14 @@ class FeatureStore:
|
|
|
1028
1028
|
original_exception=ValueError(f"Entity {e.name} has not been registered."),
|
|
1029
1029
|
)
|
|
1030
1030
|
|
|
1031
|
+
# Fail fast if name+version or a column would overflow the Postgres online store identifiers.
|
|
1032
|
+
try:
|
|
1033
|
+
feature_view._validate_online_store_identifier_budget(version)
|
|
1034
|
+
except ValueError as e:
|
|
1035
|
+
raise snowml_exceptions.SnowflakeMLException(
|
|
1036
|
+
error_code=error_codes.INVALID_ARGUMENT, original_exception=e
|
|
1037
|
+
) from e
|
|
1038
|
+
|
|
1031
1039
|
# RTFVs are OFT-only (no DT/View, no preamble/postamble).
|
|
1032
1040
|
if feature_view.is_realtime_feature_view:
|
|
1033
1041
|
logger.warning("RealtimeFeatureView is in Public Preview since 1.43.0.")
|
|
@@ -1463,6 +1471,9 @@ class FeatureStore:
|
|
|
1463
1471
|
probe_fv._online_config = online_config
|
|
1464
1472
|
try:
|
|
1465
1473
|
probe_fv._validate_online_store_supported()
|
|
1474
|
+
probe_version = feature_view.version
|
|
1475
|
+
if probe_version is not None:
|
|
1476
|
+
probe_fv._validate_online_store_identifier_budget(probe_version)
|
|
1466
1477
|
except ValueError as e:
|
|
1467
1478
|
raise snowml_exceptions.SnowflakeMLException(
|
|
1468
1479
|
error_code=error_codes.INVALID_ARGUMENT, original_exception=e
|
|
@@ -1523,6 +1534,12 @@ class FeatureStore:
|
|
|
1523
1534
|
new_feature_view._online_config = online_config # no public setter; mirrors __init__
|
|
1524
1535
|
|
|
1525
1536
|
new_feature_view._validate()
|
|
1537
|
+
try:
|
|
1538
|
+
new_feature_view._validate_online_store_identifier_budget(feature_view._version)
|
|
1539
|
+
except ValueError as e:
|
|
1540
|
+
raise snowml_exceptions.SnowflakeMLException(
|
|
1541
|
+
error_code=error_codes.INVALID_ARGUMENT, original_exception=e
|
|
1542
|
+
) from e
|
|
1526
1543
|
# update_feature_view cannot mutate the structural invariants that
|
|
1527
1544
|
# validate_snapshot_config_for_register checks (entities, timestamp_col,
|
|
1528
1545
|
# refresh_mode, etc.); they were enforced once at registration. Only the
|
|
@@ -1932,10 +1949,6 @@ class FeatureStore:
|
|
|
1932
1949
|
Returns:
|
|
1933
1950
|
FeatureView object.
|
|
1934
1951
|
|
|
1935
|
-
Raises:
|
|
1936
|
-
SnowflakeMLException: [ValueError] FeatureView with name and version is not found,
|
|
1937
|
-
or incurred exception when reconstructing the FeatureView object.
|
|
1938
|
-
|
|
1939
1952
|
Example::
|
|
1940
1953
|
|
|
1941
1954
|
>>> fs = FeatureStore(...)
|
|
@@ -1958,10 +1971,58 @@ class FeatureStore:
|
|
|
1958
1971
|
desc:this is description
|
|
1959
1972
|
|
|
1960
1973
|
"""
|
|
1961
|
-
|
|
1962
|
-
version = FeatureViewVersion(version)
|
|
1974
|
+
return self._get_feature_view_impl(name, version)
|
|
1963
1975
|
|
|
1964
|
-
|
|
1976
|
+
@overload
|
|
1977
|
+
def _get_feature_view_impl(
|
|
1978
|
+
self,
|
|
1979
|
+
name: str,
|
|
1980
|
+
version: str,
|
|
1981
|
+
*,
|
|
1982
|
+
raise_if_not_found: Literal[True] = True,
|
|
1983
|
+
) -> FeatureView:
|
|
1984
|
+
...
|
|
1985
|
+
|
|
1986
|
+
@overload
|
|
1987
|
+
def _get_feature_view_impl(
|
|
1988
|
+
self,
|
|
1989
|
+
name: str,
|
|
1990
|
+
version: str,
|
|
1991
|
+
*,
|
|
1992
|
+
raise_if_not_found: Literal[False],
|
|
1993
|
+
) -> Optional[FeatureView]:
|
|
1994
|
+
...
|
|
1995
|
+
|
|
1996
|
+
def _get_feature_view_impl(
|
|
1997
|
+
self,
|
|
1998
|
+
name: str,
|
|
1999
|
+
version: str,
|
|
2000
|
+
*,
|
|
2001
|
+
raise_if_not_found: bool = True,
|
|
2002
|
+
) -> Optional[FeatureView]:
|
|
2003
|
+
"""Retrieve a registered FeatureView, optionally returning None instead of raising.
|
|
2004
|
+
|
|
2005
|
+
Private helper shared by :meth:`get_feature_view` and :meth:`delete_feature_view`.
|
|
2006
|
+
The public ``get_feature_view`` always raises on NOT_FOUND (``raise_if_not_found=True``).
|
|
2007
|
+
``delete_feature_view`` passes ``raise_if_not_found=False`` so it can detect an orphaned
|
|
2008
|
+
state (backing DT already dropped) and attempt cleanup without a separate backend probe.
|
|
2009
|
+
|
|
2010
|
+
Args:
|
|
2011
|
+
name: FeatureView name.
|
|
2012
|
+
version: FeatureView version.
|
|
2013
|
+
raise_if_not_found: When True (default) raises SnowflakeMLException on NOT_FOUND.
|
|
2014
|
+
When False, returns None instead.
|
|
2015
|
+
|
|
2016
|
+
Returns:
|
|
2017
|
+
FeatureView if found; None when not found and ``raise_if_not_found`` is False.
|
|
2018
|
+
|
|
2019
|
+
Raises:
|
|
2020
|
+
SnowflakeMLException: [ValueError] FeatureView not found and raise_if_not_found is True.
|
|
2021
|
+
"""
|
|
2022
|
+
name_id = SqlIdentifier(name)
|
|
2023
|
+
version_id = FeatureViewVersion(version)
|
|
2024
|
+
|
|
2025
|
+
fv_name = FeatureView._get_physical_name(name_id, version_id)
|
|
1965
2026
|
results = self._get_fv_backend_representations(fv_name)
|
|
1966
2027
|
if len(results) == 1:
|
|
1967
2028
|
return self._compose_feature_view(
|
|
@@ -1971,7 +2032,7 @@ class FeatureStore:
|
|
|
1971
2032
|
)
|
|
1972
2033
|
if len(results) == 0:
|
|
1973
2034
|
# RTFVs are OFT-only; the metadata table is the source of truth.
|
|
1974
|
-
rtfv_meta = self._metadata_manager.get_realtime_config(
|
|
2035
|
+
rtfv_meta = self._metadata_manager.get_realtime_config(name_id.resolved(), str(version_id))
|
|
1975
2036
|
if rtfv_meta is not None:
|
|
1976
2037
|
from snowflake.ml.feature_store.realtime_registration import (
|
|
1977
2038
|
compose_rtfv_from_metadata,
|
|
@@ -1979,9 +2040,11 @@ class FeatureStore:
|
|
|
1979
2040
|
|
|
1980
2041
|
return compose_rtfv_from_metadata(self, rtfv_meta)
|
|
1981
2042
|
|
|
2043
|
+
if not raise_if_not_found:
|
|
2044
|
+
return None
|
|
1982
2045
|
raise snowml_exceptions.SnowflakeMLException(
|
|
1983
2046
|
error_code=error_codes.NOT_FOUND,
|
|
1984
|
-
original_exception=ValueError(f"Failed to find FeatureView {
|
|
2047
|
+
original_exception=ValueError(f"Failed to find FeatureView {name_id}/{version_id}: {results}"),
|
|
1985
2048
|
)
|
|
1986
2049
|
|
|
1987
2050
|
@dispatch_decorator()
|
|
@@ -2603,6 +2666,24 @@ class FeatureStore:
|
|
|
2603
2666
|
----------------------
|
|
2604
2667
|
|
|
2605
2668
|
"""
|
|
2669
|
+
# For str+version input: look up the FV without raising on NOT_FOUND.
|
|
2670
|
+
# If the backing DT was dropped in a previous partial deletion, resolved will be None;
|
|
2671
|
+
# attempt streaming orphan cleanup. RTFVs are reconstructed from their OFT metadata
|
|
2672
|
+
# so they naturally return non-None here and continue on the normal deletion path.
|
|
2673
|
+
if isinstance(feature_view, str) and version is not None:
|
|
2674
|
+
resolved = self._get_feature_view_impl(feature_view, version, raise_if_not_found=False)
|
|
2675
|
+
if resolved is None:
|
|
2676
|
+
if self._cleanup_orphaned_feature_view_resources(feature_view, version):
|
|
2677
|
+
logger.warning(
|
|
2678
|
+
"feature store: FeatureView %s/%s backing object was already dropped; "
|
|
2679
|
+
"cleaned up orphaned artifacts.",
|
|
2680
|
+
feature_view,
|
|
2681
|
+
version,
|
|
2682
|
+
)
|
|
2683
|
+
return
|
|
2684
|
+
else:
|
|
2685
|
+
feature_view = resolved
|
|
2686
|
+
|
|
2606
2687
|
feature_view = self._validate_feature_view_name_and_version_input(feature_view, version)
|
|
2607
2688
|
|
|
2608
2689
|
# TODO: we should leverage lineage graph to check downstream deps, and block the deletion
|
|
@@ -2634,7 +2715,7 @@ class FeatureStore:
|
|
|
2634
2715
|
)
|
|
2635
2716
|
|
|
2636
2717
|
# Drop companion task first (if any), then snapshot artifacts for this FV.
|
|
2637
|
-
# This mirrors the overwrite cleanup ordering and guarantees we don
|
|
2718
|
+
# This mirrors the overwrite cleanup ordering and guarantees we don't
|
|
2638
2719
|
# leave a running CRON task targeting a deleted snapshot table.
|
|
2639
2720
|
fv_physical_name = FeatureView._get_physical_name(feature_view.name, feature_view.version)
|
|
2640
2721
|
self._cleanup_stale_feature_view_resources(
|
|
@@ -5557,6 +5638,100 @@ class FeatureStore:
|
|
|
5557
5638
|
e,
|
|
5558
5639
|
)
|
|
5559
5640
|
|
|
5641
|
+
def _cleanup_orphaned_feature_view_resources(self, fv_name: str, version: str) -> bool:
|
|
5642
|
+
"""Clean up orphaned companion artifacts for a partially deleted FeatureView.
|
|
5643
|
+
|
|
5644
|
+
Called when the backing DT/View no longer exists but companion artifacts
|
|
5645
|
+
may still be present. Handles:
|
|
5646
|
+
|
|
5647
|
+
- Streaming ref_count decrement and ``$UDF_TRANSFORMED`` / ``$UDF_TRANSFORMED$BACKFILL``
|
|
5648
|
+
table drops (streaming FVs).
|
|
5649
|
+
- The companion refresh Task (append-only / CRON-scheduled FVs) and, probed
|
|
5650
|
+
independently, the snapshot table and its status row (append-only FVs).
|
|
5651
|
+
- The ``$ONLINE`` companion Online Feature Table (any online-enabled FV), which is
|
|
5652
|
+
named after the FV and outlives a dropped offline DT.
|
|
5653
|
+
- FV metadata row deletion from the metadata table.
|
|
5654
|
+
|
|
5655
|
+
Args:
|
|
5656
|
+
fv_name: Feature view name string (as supplied by the caller).
|
|
5657
|
+
version: Feature view version string.
|
|
5658
|
+
|
|
5659
|
+
Returns:
|
|
5660
|
+
True if any orphaned artifacts were found and cleaned up; False if nothing
|
|
5661
|
+
existed (the caller should re-raise NOT_FOUND in that case).
|
|
5662
|
+
"""
|
|
5663
|
+
from snowflake.ml.feature_store.streaming_registration import (
|
|
5664
|
+
cleanup_streaming_feature_view,
|
|
5665
|
+
)
|
|
5666
|
+
|
|
5667
|
+
fv_name_id = SqlIdentifier(fv_name)
|
|
5668
|
+
fv_version = FeatureViewVersion(version)
|
|
5669
|
+
feature_view_name = FeatureView._get_physical_name(fv_name_id, fv_version)
|
|
5670
|
+
fully_qualified_name = self._get_fully_qualified_name(feature_view_name)
|
|
5671
|
+
online_table_name = FeatureView._get_online_table_name(feature_view_name)
|
|
5672
|
+
|
|
5673
|
+
streaming_meta = self._metadata_manager.get_streaming_metadata(fv_name, version)
|
|
5674
|
+
|
|
5675
|
+
# Append-only and CRON-scheduled FVs own a companion refresh Task named after the FV's
|
|
5676
|
+
# physical name; append-only FVs additionally accumulate a $SNAPSHOT table. When the
|
|
5677
|
+
# backing DT was dropped either can be left behind, and a partial deletion may have
|
|
5678
|
+
# removed one but not the other, so probe for each independently rather than inferring
|
|
5679
|
+
# the snapshot table's existence from the Task.
|
|
5680
|
+
has_refresh_task = bool(
|
|
5681
|
+
self._session.sql(
|
|
5682
|
+
f"SHOW TASKS LIKE '{feature_view_name.resolved()}' IN SCHEMA {self._config.full_schema_path}"
|
|
5683
|
+
).collect(statement_params=self._telemetry_stmp)
|
|
5684
|
+
)
|
|
5685
|
+
snapshot_table_name = FeatureView._get_snapshot_table_name(feature_view_name)
|
|
5686
|
+
has_snapshot_table = bool(
|
|
5687
|
+
self._session.sql(
|
|
5688
|
+
f"SHOW TABLES LIKE '{snapshot_table_name.resolved()}' IN SCHEMA {self._config.full_schema_path}"
|
|
5689
|
+
).collect(statement_params=self._telemetry_stmp)
|
|
5690
|
+
)
|
|
5691
|
+
|
|
5692
|
+
# Any online-enabled FV owns a $ONLINE Online Feature Table that is independent of the
|
|
5693
|
+
# offline DT, so it can outlive a dropped DT even for plain (non-streaming,
|
|
5694
|
+
# non-append-only) FVs. _find_object returns [] when the OFT preview is disabled.
|
|
5695
|
+
has_online_table = bool(self._find_object("ONLINE FEATURE TABLES", online_table_name))
|
|
5696
|
+
|
|
5697
|
+
# Nothing recoverable from metadata or the backend: let the caller re-raise NOT_FOUND.
|
|
5698
|
+
if streaming_meta is None and not has_refresh_task and not has_snapshot_table and not has_online_table:
|
|
5699
|
+
return False
|
|
5700
|
+
|
|
5701
|
+
if streaming_meta is not None:
|
|
5702
|
+
cleanup_streaming_feature_view(
|
|
5703
|
+
session=self._session,
|
|
5704
|
+
feature_view_name=feature_view_name,
|
|
5705
|
+
version=version,
|
|
5706
|
+
fv_name=fv_name,
|
|
5707
|
+
fv_metadata=_FeatureViewMetadata(entities=[], timestamp_col="", is_streaming=True),
|
|
5708
|
+
metadata_manager=self._metadata_manager,
|
|
5709
|
+
get_fully_qualified_name_fn=self._get_fully_qualified_name,
|
|
5710
|
+
telemetry_stmp=self._telemetry_stmp,
|
|
5711
|
+
)
|
|
5712
|
+
|
|
5713
|
+
# Drop the companion refresh Task and any append-only snapshot table independently:
|
|
5714
|
+
# both names are deterministic and the underlying drops use IF EXISTS, and a partial
|
|
5715
|
+
# deletion may have left only one of the two behind.
|
|
5716
|
+
if has_refresh_task:
|
|
5717
|
+
self._drop_companion_refresh_task(fully_qualified_name)
|
|
5718
|
+
if has_snapshot_table:
|
|
5719
|
+
self._drop_orphaned_snapshot_table(feature_view_name)
|
|
5720
|
+
|
|
5721
|
+
# Best-effort drop of the $ONLINE companion table, which is not covered by
|
|
5722
|
+
# cleanup_streaming_feature_view and is not returned by get_feature_view.
|
|
5723
|
+
if has_online_table:
|
|
5724
|
+
fq_online_name = self._get_fully_qualified_name(online_table_name)
|
|
5725
|
+
try:
|
|
5726
|
+
self._session.sql(f"DROP ONLINE FEATURE TABLE IF EXISTS {fq_online_name}").collect(
|
|
5727
|
+
statement_params=self._telemetry_stmp
|
|
5728
|
+
)
|
|
5729
|
+
except Exception as e:
|
|
5730
|
+
logger.warning("feature store: failed to drop online feature table %s: %s", fq_online_name, e)
|
|
5731
|
+
|
|
5732
|
+
self._metadata_manager.delete_feature_view_metadata(fv_name, version)
|
|
5733
|
+
return True
|
|
5734
|
+
|
|
5560
5735
|
def _cleanup_stale_feature_view_resources(
|
|
5561
5736
|
self,
|
|
5562
5737
|
feature_view: FeatureView,
|
|
@@ -5602,14 +5777,25 @@ class FeatureStore:
|
|
|
5602
5777
|
delete flows pass ``True`` explicitly.
|
|
5603
5778
|
"""
|
|
5604
5779
|
if not new_has_task:
|
|
5605
|
-
self.
|
|
5606
|
-
statement_params=self._telemetry_stmp
|
|
5607
|
-
)
|
|
5780
|
+
self._drop_companion_refresh_task(fully_qualified_name)
|
|
5608
5781
|
if drop_snapshot_table is None:
|
|
5609
5782
|
drop_snapshot_table = not feature_view.append_only
|
|
5610
5783
|
if drop_snapshot_table:
|
|
5611
5784
|
self._drop_orphaned_snapshot_table(feature_view_name)
|
|
5612
5785
|
|
|
5786
|
+
def _drop_companion_refresh_task(self, fully_qualified_name: str) -> None:
|
|
5787
|
+
"""Drop a feature view's companion refresh Task.
|
|
5788
|
+
|
|
5789
|
+
Append-only and CRON-scheduled FVs own a Task named identically to the offline
|
|
5790
|
+
object's fully qualified name. ``IF EXISTS`` makes this a safe no-op for FVs that
|
|
5791
|
+
never had a Task (Views and duration-based Dynamic Tables).
|
|
5792
|
+
|
|
5793
|
+
Args:
|
|
5794
|
+
fully_qualified_name: Fully qualified name of the offline object, which is also
|
|
5795
|
+
the companion Task name when one exists.
|
|
5796
|
+
"""
|
|
5797
|
+
self._session.sql(f"DROP TASK IF EXISTS {fully_qualified_name}").collect(statement_params=self._telemetry_stmp)
|
|
5798
|
+
|
|
5613
5799
|
def _create_snapshot_table(
|
|
5614
5800
|
self,
|
|
5615
5801
|
feature_view: FeatureView,
|
{snowflake_ml_python-1.46.0 → snowflake_ml_python-1.47.0}/snowflake/ml/feature_store/feature_view.py
RENAMED
|
@@ -58,6 +58,14 @@ _UDF_TRANSFORMED_TABLE_SUFFIX = "$UDF_TRANSFORMED"
|
|
|
58
58
|
_FEATURE_VIEW_VERSION_RE = re.compile(r"^[a-zA-Z0-9][a-zA-Z0-9_.\-]*$")
|
|
59
59
|
_FEATURE_VIEW_VERSION_MAX_LENGTH = 128
|
|
60
60
|
|
|
61
|
+
# Postgres online store identifiers must fit PostgreSQL's 63-byte limit (NAMEDATALEN - 1); longer names
|
|
62
|
+
# are silently truncated and can collide. name+version maps to "{name}${version}$UDF_TRANSFORMED"
|
|
63
|
+
# (17 bytes of affixes) and columns to a distinct-N tile column "_PARTIAL_FIRST_DISTINCT_1000_TS_<col>"
|
|
64
|
+
# (32 bytes), so each budget below leaves a 1-byte margin. The padding-guard test rechecks the affixes.
|
|
65
|
+
_PG_IDENTIFIER_BYTE_LIMIT = 63
|
|
66
|
+
_POSTGRES_ONLINE_MAX_NAME_VERSION_LEN = 45
|
|
67
|
+
_POSTGRES_ONLINE_MAX_COLUMN_LEN = 30
|
|
68
|
+
|
|
61
69
|
_RESULT_SCAN_QUERY_PATTERN = re.compile(
|
|
62
70
|
r".*FROM\s*TABLE\s*\(\s*RESULT_SCAN\s*\(.*",
|
|
63
71
|
flags=re.DOTALL | re.IGNORECASE | re.X,
|
|
@@ -2151,6 +2159,52 @@ Got {len(self._feature_df.queries['queries'])}: {self._feature_df.queries['queri
|
|
|
2151
2159
|
f"OnlineConfig(store_type=OnlineStoreType.POSTGRES) to enable online storage."
|
|
2152
2160
|
)
|
|
2153
2161
|
|
|
2162
|
+
def _validate_online_store_identifier_budget(self, version: FeatureViewVersion) -> None:
|
|
2163
|
+
"""Reject name+version or column names that would overflow the Postgres online store's identifiers.
|
|
2164
|
+
|
|
2165
|
+
Only the Postgres online store is affected; columns get a tighter budget than name+version.
|
|
2166
|
+
Enforced at registration and update, where the version is known.
|
|
2167
|
+
|
|
2168
|
+
Args:
|
|
2169
|
+
version: The feature view version being registered or updated.
|
|
2170
|
+
|
|
2171
|
+
Raises:
|
|
2172
|
+
ValueError: If the combined name+version or any column name exceeds its online store budget.
|
|
2173
|
+
"""
|
|
2174
|
+
if (
|
|
2175
|
+
self._online_config is None
|
|
2176
|
+
or not self._online_config.enable
|
|
2177
|
+
or self._online_config.store_type != OnlineStoreType.POSTGRES
|
|
2178
|
+
):
|
|
2179
|
+
return
|
|
2180
|
+
|
|
2181
|
+
name_version_len = len(self._name.resolved()) + len(str(version))
|
|
2182
|
+
if name_version_len > _POSTGRES_ONLINE_MAX_NAME_VERSION_LEN:
|
|
2183
|
+
raise ValueError(
|
|
2184
|
+
f"feature view name and version are too long for the Postgres online store: "
|
|
2185
|
+
f"'{self._name}' with version '{version}' uses {name_version_len} characters, but the "
|
|
2186
|
+
f"combined limit is {_POSTGRES_ONLINE_MAX_NAME_VERSION_LEN}. Shorten the name or version."
|
|
2187
|
+
)
|
|
2188
|
+
|
|
2189
|
+
resolved_columns: set[str] = set()
|
|
2190
|
+
try:
|
|
2191
|
+
inferred_columns = self._get_column_names()
|
|
2192
|
+
except Exception:
|
|
2193
|
+
inferred_columns = None
|
|
2194
|
+
for column in inferred_columns or []:
|
|
2195
|
+
resolved_columns.add(column.resolved())
|
|
2196
|
+
for entity in self._entities:
|
|
2197
|
+
for join_key in entity.join_keys:
|
|
2198
|
+
key = join_key if isinstance(join_key, SqlIdentifier) else SqlIdentifier(join_key)
|
|
2199
|
+
resolved_columns.add(key.resolved())
|
|
2200
|
+
|
|
2201
|
+
for resolved in sorted(resolved_columns):
|
|
2202
|
+
if len(resolved) > _POSTGRES_ONLINE_MAX_COLUMN_LEN:
|
|
2203
|
+
raise ValueError(
|
|
2204
|
+
f"column '{resolved}' is too long for the Postgres online store: {len(resolved)} "
|
|
2205
|
+
f"characters exceeds the limit of {_POSTGRES_ONLINE_MAX_COLUMN_LEN}. Rename the column."
|
|
2206
|
+
)
|
|
2207
|
+
|
|
2154
2208
|
def _validate_window_offset_alignment(self) -> None:
|
|
2155
2209
|
"""Validate that window and offset are multiples of feature_granularity.
|
|
2156
2210
|
|
|
@@ -30,6 +30,7 @@ from snowflake.ml._internal.utils.sql_identifier import SqlIdentifier
|
|
|
30
30
|
from snowflake.ml.feature_store import feature_view as fv_mod, online_service
|
|
31
31
|
from snowflake.ml.feature_store.entity import Entity
|
|
32
32
|
from snowflake.ml.feature_store.feature_group import (
|
|
33
|
+
_normalize_join_key_datatype,
|
|
33
34
|
build_source_refs,
|
|
34
35
|
hydrate_source_refs,
|
|
35
36
|
reject_name_collision,
|
|
@@ -248,7 +249,7 @@ def validate_rtfv_entity_contract(
|
|
|
248
249
|
# The upstream declares the entity but the column isn't in its
|
|
249
250
|
# output_schema; nothing to type-check here.
|
|
250
251
|
continue
|
|
251
|
-
datatype = field.datatype
|
|
252
|
+
datatype = _normalize_join_key_datatype(field.datatype)
|
|
252
253
|
prev = seen_types.get(jk)
|
|
253
254
|
if prev is None:
|
|
254
255
|
seen_types[jk] = (datatype, upstream_label)
|
|
@@ -358,11 +359,12 @@ def resolve_realtime_join_key_fields(feature_view: FeatureView) -> list[Any]:
|
|
|
358
359
|
field = field_by_name.get(key)
|
|
359
360
|
if field is None:
|
|
360
361
|
continue
|
|
362
|
+
datatype = _normalize_join_key_datatype(field.datatype)
|
|
361
363
|
previous = type_by_name.get(key)
|
|
362
364
|
if previous is None:
|
|
363
|
-
type_by_name[key] =
|
|
365
|
+
type_by_name[key] = datatype
|
|
364
366
|
source_by_name[key] = label
|
|
365
|
-
elif previous !=
|
|
367
|
+
elif previous != datatype:
|
|
366
368
|
# Registry-corruption path: register-time validator should have
|
|
367
369
|
# rejected this. Defense-in-depth so we don't synthesize a
|
|
368
370
|
# schema that depends on source order.
|
|
@@ -371,7 +373,7 @@ def resolve_realtime_join_key_fields(feature_view: FeatureView) -> list[Any]:
|
|
|
371
373
|
original_exception=RuntimeError(
|
|
372
374
|
f"realtime feature view: join key {key!r} has inconsistent "
|
|
373
375
|
f"datatypes across upstream sources ({source_by_name[key]} "
|
|
374
|
-
f"declares {previous}; {label} declares {
|
|
376
|
+
f"declares {previous}; {label} declares {datatype}). "
|
|
375
377
|
"Registry corruption -- the register-time validator should "
|
|
376
378
|
"have rejected this."
|
|
377
379
|
),
|