snowflake-ml-python 1.46.0__tar.gz → 1.48.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.
Files changed (546) hide show
  1. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/CHANGELOG.md +48 -1
  2. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/PKG-INFO +51 -3
  3. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/pyproject.toml +1 -1
  4. snowflake_ml_python-1.48.0/snowflake/ml/experiment/_source_info.py +487 -0
  5. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/experiment/experiment_tracking.py +60 -5
  6. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/aggregation.py +10 -0
  7. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/feature_group.py +21 -0
  8. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/feature_store.py +199 -13
  9. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/feature_view.py +54 -0
  10. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/realtime_registration.py +6 -4
  11. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/spec/builder.py +53 -35
  12. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/tile_sql_generator.py +26 -23
  13. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/jobs/_utils/stage_utils.py +9 -1
  14. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/jobs/job_definition.py +29 -6
  15. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/jobs/manager.py +15 -6
  16. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/lineage/lineage_node.py +1 -1
  17. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_client/model/batch_inference_specs.py +10 -3
  18. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_client/model/model_version_impl.py +3 -1
  19. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_client/ops/service_ops.py +3 -1
  20. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_model_composer/model_method/function_generator.py +5 -1
  21. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_model_composer/model_method/infer_function.py_template +11 -11
  22. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_model_composer/model_method/infer_function_init_once.py_template +11 -11
  23. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_model_composer/model_method/infer_partitioned.py_template +10 -10
  24. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_model_composer/model_method/infer_partitioned_init_once.py_template +10 -10
  25. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_model_composer/model_method/infer_table_function.py_template +10 -10
  26. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_model_composer/model_method/infer_table_function_init_once.py_template +10 -10
  27. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/catboost.py +1 -2
  28. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/huggingface/_handler.py +2 -0
  29. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/huggingface/_task_handler.py +2 -0
  30. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/huggingface/document_question_answering.py +2 -0
  31. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/huggingface/image_classification.py +2 -0
  32. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/huggingface/image_feature_extraction.py +2 -0
  33. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/huggingface/image_text_to_text.py +2 -0
  34. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/huggingface/image_to_text.py +2 -0
  35. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/huggingface/object_detection.py +2 -0
  36. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/huggingface/video_classification.py +2 -0
  37. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/huggingface/visual_question_answering.py +2 -0
  38. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/huggingface/zero_shot_image_classification.py +2 -0
  39. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/huggingface/zero_shot_object_detection.py +2 -0
  40. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/lightgbm.py +1 -2
  41. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/sklearn.py +1 -18
  42. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/snowmlmodel.py +17 -22
  43. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/xgboost.py +1 -1
  44. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_runtime/_snowml_inference_alternative_requirements.py +2 -1
  45. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_signatures/snowpark_handler.py +5 -1
  46. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/openai_signatures.py +44 -0
  47. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/type_hints.py +1 -1
  48. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/calibration/calibrated_classifier_cv.py +18 -5
  49. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/cluster/affinity_propagation.py +18 -5
  50. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/cluster/agglomerative_clustering.py +18 -5
  51. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/cluster/birch.py +18 -5
  52. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/cluster/bisecting_k_means.py +18 -5
  53. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/cluster/dbscan.py +18 -5
  54. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/cluster/feature_agglomeration.py +18 -5
  55. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/cluster/k_means.py +18 -5
  56. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/cluster/mean_shift.py +18 -5
  57. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/cluster/mini_batch_k_means.py +18 -5
  58. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/cluster/optics.py +18 -5
  59. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/cluster/spectral_biclustering.py +18 -5
  60. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/cluster/spectral_clustering.py +18 -5
  61. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/cluster/spectral_coclustering.py +18 -5
  62. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/compose/column_transformer.py +18 -5
  63. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/compose/transformed_target_regressor.py +18 -5
  64. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/covariance/elliptic_envelope.py +18 -5
  65. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/covariance/empirical_covariance.py +18 -5
  66. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/covariance/graphical_lasso.py +18 -5
  67. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/covariance/graphical_lasso_cv.py +18 -5
  68. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/covariance/ledoit_wolf.py +18 -5
  69. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/covariance/min_cov_det.py +18 -5
  70. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/covariance/oas.py +18 -5
  71. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/covariance/shrunk_covariance.py +18 -5
  72. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/decomposition/dictionary_learning.py +18 -5
  73. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/decomposition/factor_analysis.py +18 -5
  74. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/decomposition/fast_ica.py +18 -5
  75. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/decomposition/incremental_pca.py +18 -5
  76. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/decomposition/kernel_pca.py +18 -5
  77. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/decomposition/mini_batch_dictionary_learning.py +18 -5
  78. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/decomposition/mini_batch_sparse_pca.py +18 -5
  79. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/decomposition/pca.py +18 -5
  80. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/decomposition/sparse_pca.py +18 -5
  81. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/decomposition/truncated_svd.py +18 -5
  82. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/discriminant_analysis/linear_discriminant_analysis.py +18 -5
  83. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/discriminant_analysis/quadratic_discriminant_analysis.py +18 -5
  84. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/ensemble/ada_boost_classifier.py +18 -5
  85. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/ensemble/ada_boost_regressor.py +18 -5
  86. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/ensemble/bagging_classifier.py +18 -5
  87. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/ensemble/bagging_regressor.py +18 -5
  88. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/ensemble/extra_trees_classifier.py +18 -5
  89. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/ensemble/extra_trees_regressor.py +18 -5
  90. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/ensemble/gradient_boosting_classifier.py +18 -5
  91. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/ensemble/gradient_boosting_regressor.py +18 -5
  92. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/ensemble/hist_gradient_boosting_classifier.py +18 -5
  93. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/ensemble/hist_gradient_boosting_regressor.py +18 -5
  94. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/ensemble/isolation_forest.py +18 -5
  95. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/ensemble/random_forest_classifier.py +18 -5
  96. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/ensemble/random_forest_regressor.py +18 -5
  97. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/ensemble/stacking_regressor.py +18 -5
  98. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/ensemble/voting_classifier.py +18 -5
  99. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/ensemble/voting_regressor.py +18 -5
  100. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/feature_selection/generic_univariate_select.py +18 -5
  101. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/feature_selection/select_fdr.py +18 -5
  102. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/feature_selection/select_fpr.py +18 -5
  103. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/feature_selection/select_fwe.py +18 -5
  104. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/feature_selection/select_k_best.py +18 -5
  105. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/feature_selection/select_percentile.py +18 -5
  106. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/feature_selection/sequential_feature_selector.py +18 -5
  107. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/feature_selection/variance_threshold.py +18 -5
  108. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/framework/base.py +30 -5
  109. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/gaussian_process/gaussian_process_classifier.py +18 -5
  110. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/gaussian_process/gaussian_process_regressor.py +18 -5
  111. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/impute/iterative_imputer.py +18 -5
  112. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/impute/knn_imputer.py +18 -5
  113. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/impute/missing_indicator.py +18 -5
  114. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/impute/simple_imputer.py +6 -0
  115. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/kernel_approximation/additive_chi2_sampler.py +18 -5
  116. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/kernel_approximation/nystroem.py +18 -5
  117. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/kernel_approximation/polynomial_count_sketch.py +18 -5
  118. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/kernel_approximation/rbf_sampler.py +18 -5
  119. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/kernel_approximation/skewed_chi2_sampler.py +18 -5
  120. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/kernel_ridge/kernel_ridge.py +18 -5
  121. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/lightgbm/lgbm_classifier.py +18 -5
  122. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/lightgbm/lgbm_regressor.py +18 -5
  123. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/ard_regression.py +18 -5
  124. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/bayesian_ridge.py +18 -5
  125. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/elastic_net.py +18 -5
  126. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/elastic_net_cv.py +18 -5
  127. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/gamma_regressor.py +18 -5
  128. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/huber_regressor.py +18 -5
  129. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/lars.py +18 -5
  130. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/lars_cv.py +18 -5
  131. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/lasso.py +18 -5
  132. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/lasso_cv.py +18 -5
  133. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/lasso_lars.py +18 -5
  134. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/lasso_lars_cv.py +18 -5
  135. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/lasso_lars_ic.py +18 -5
  136. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/linear_regression.py +18 -5
  137. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/logistic_regression.py +18 -5
  138. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/logistic_regression_cv.py +18 -5
  139. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/multi_task_elastic_net.py +18 -5
  140. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/multi_task_elastic_net_cv.py +18 -5
  141. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/multi_task_lasso.py +18 -5
  142. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/multi_task_lasso_cv.py +18 -5
  143. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/orthogonal_matching_pursuit.py +18 -5
  144. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/passive_aggressive_classifier.py +18 -5
  145. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/passive_aggressive_regressor.py +18 -5
  146. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/perceptron.py +18 -5
  147. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/poisson_regressor.py +18 -5
  148. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/ransac_regressor.py +18 -5
  149. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/ridge.py +18 -5
  150. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/ridge_classifier.py +18 -5
  151. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/ridge_classifier_cv.py +18 -5
  152. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/ridge_cv.py +18 -5
  153. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/sgd_classifier.py +18 -5
  154. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/sgd_one_class_svm.py +18 -5
  155. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/sgd_regressor.py +18 -5
  156. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/theil_sen_regressor.py +18 -5
  157. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/tweedie_regressor.py +18 -5
  158. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/manifold/isomap.py +18 -5
  159. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/manifold/mds.py +18 -5
  160. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/manifold/spectral_embedding.py +18 -5
  161. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/manifold/tsne.py +18 -5
  162. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/mixture/bayesian_gaussian_mixture.py +18 -5
  163. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/mixture/gaussian_mixture.py +18 -5
  164. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/model_selection/grid_search_cv.py +5 -4
  165. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/model_selection/randomized_search_cv.py +5 -4
  166. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/multiclass/one_vs_one_classifier.py +18 -5
  167. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/multiclass/one_vs_rest_classifier.py +18 -5
  168. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/multiclass/output_code_classifier.py +18 -5
  169. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/naive_bayes/bernoulli_nb.py +18 -5
  170. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/naive_bayes/categorical_nb.py +18 -5
  171. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/naive_bayes/complement_nb.py +18 -5
  172. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/naive_bayes/gaussian_nb.py +18 -5
  173. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/naive_bayes/multinomial_nb.py +18 -5
  174. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/neighbors/k_neighbors_classifier.py +18 -5
  175. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/neighbors/k_neighbors_regressor.py +18 -5
  176. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/neighbors/kernel_density.py +18 -5
  177. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/neighbors/local_outlier_factor.py +18 -5
  178. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/neighbors/nearest_centroid.py +18 -5
  179. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/neighbors/nearest_neighbors.py +18 -5
  180. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/neighbors/neighborhood_components_analysis.py +18 -5
  181. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/neighbors/radius_neighbors_classifier.py +18 -5
  182. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/neighbors/radius_neighbors_regressor.py +18 -5
  183. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/neural_network/bernoulli_rbm.py +18 -5
  184. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/neural_network/mlp_classifier.py +18 -5
  185. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/neural_network/mlp_regressor.py +18 -5
  186. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/preprocessing/polynomial_features.py +18 -5
  187. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/semi_supervised/label_propagation.py +18 -5
  188. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/semi_supervised/label_spreading.py +18 -5
  189. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/svm/linear_svc.py +18 -5
  190. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/svm/linear_svr.py +18 -5
  191. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/svm/nu_svc.py +18 -5
  192. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/svm/nu_svr.py +18 -5
  193. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/svm/svc.py +18 -5
  194. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/svm/svr.py +18 -5
  195. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/tree/decision_tree_classifier.py +18 -5
  196. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/tree/decision_tree_regressor.py +18 -5
  197. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/tree/extra_tree_classifier.py +18 -5
  198. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/tree/extra_tree_regressor.py +18 -5
  199. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/xgboost/xgb_classifier.py +18 -5
  200. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/xgboost/xgb_regressor.py +18 -5
  201. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/xgboost/xgbrf_classifier.py +18 -5
  202. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/xgboost/xgbrf_regressor.py +18 -5
  203. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/registry/_manager/model_parameter_reconciler.py +3 -61
  204. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/registry/registry.py +6 -6
  205. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/version.py +1 -1
  206. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake_ml_python.egg-info/PKG-INFO +51 -3
  207. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake_ml_python.egg-info/SOURCES.txt +1 -0
  208. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake_ml_python.egg-info/requires.txt +2 -1
  209. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/LICENSE.txt +0 -0
  210. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/README.md +0 -0
  211. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/setup.cfg +0 -0
  212. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/cortex/__init__.py +0 -0
  213. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/cortex/_classify_text.py +0 -0
  214. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/cortex/_complete.py +0 -0
  215. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/cortex/_embed_text_1024.py +0 -0
  216. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/cortex/_embed_text_768.py +0 -0
  217. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/cortex/_extract_answer.py +0 -0
  218. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/cortex/_finetune.py +0 -0
  219. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/cortex/_sentiment.py +0 -0
  220. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/cortex/_sse_client.py +0 -0
  221. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/cortex/_summarize.py +0 -0
  222. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/cortex/_translate.py +0 -0
  223. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/cortex/_util.py +0 -0
  224. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/env.py +0 -0
  225. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/env_utils.py +0 -0
  226. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/exceptions/dataset_error_messages.py +0 -0
  227. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/exceptions/dataset_errors.py +0 -0
  228. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/exceptions/error_codes.py +0 -0
  229. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/exceptions/error_messages.py +0 -0
  230. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/exceptions/exceptions.py +0 -0
  231. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/exceptions/fileset_error_messages.py +0 -0
  232. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/exceptions/fileset_errors.py +0 -0
  233. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/exceptions/modeling_error_messages.py +0 -0
  234. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/exceptions/sql_error_codes.py +0 -0
  235. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/file_utils.py +0 -0
  236. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/human_readable_id/adjectives.txt +0 -0
  237. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/human_readable_id/animals.txt +0 -0
  238. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/human_readable_id/hrid_generator.py +0 -0
  239. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/human_readable_id/hrid_generator_base.py +0 -0
  240. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/init_utils.py +0 -0
  241. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/lineage/lineage_utils.py +0 -0
  242. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/migrator_utils.py +0 -0
  243. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/platform_capabilities.py +0 -0
  244. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/relax_version_strategy.py +0 -0
  245. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/telemetry.py +0 -0
  246. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/type_utils.py +0 -0
  247. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/utils/connection_params.py +0 -0
  248. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/utils/db_utils.py +0 -0
  249. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/utils/formatting.py +0 -0
  250. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/utils/identifier.py +0 -0
  251. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/utils/import_utils.py +0 -0
  252. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/utils/jwt_generator.py +0 -0
  253. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/utils/mixins.py +0 -0
  254. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/utils/parallelize.py +0 -0
  255. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/utils/pkg_version_utils.py +0 -0
  256. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/utils/query_result_checker.py +0 -0
  257. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/utils/result.py +0 -0
  258. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/utils/service_logger.py +0 -0
  259. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/utils/snowflake_env.py +0 -0
  260. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/utils/snowpark_dataframe_utils.py +0 -0
  261. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/utils/sql_identifier.py +0 -0
  262. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/utils/table_manager.py +0 -0
  263. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/utils/tee.py +0 -0
  264. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/utils/temp_file_utils.py +0 -0
  265. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/_internal/utils/url.py +0 -0
  266. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/data/__init__.py +0 -0
  267. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/data/_internal/arrow_ingestor.py +0 -0
  268. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/data/data_connector.py +0 -0
  269. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/data/data_ingestor.py +0 -0
  270. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/data/data_source.py +0 -0
  271. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/data/ingestor_utils.py +0 -0
  272. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/data/torch_utils.py +0 -0
  273. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/dataset/__init__.py +0 -0
  274. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/dataset/dataset.py +0 -0
  275. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/dataset/dataset_factory.py +0 -0
  276. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/dataset/dataset_metadata.py +0 -0
  277. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/dataset/dataset_reader.py +0 -0
  278. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/experiment/__init__.py +0 -0
  279. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/experiment/_client/artifact.py +0 -0
  280. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/experiment/_client/experiment_tracking_sql_client.py +0 -0
  281. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/experiment/_entities/__init__.py +0 -0
  282. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/experiment/_entities/experiment.py +0 -0
  283. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/experiment/_entities/run.py +0 -0
  284. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/experiment/_entities/run_metadata.py +0 -0
  285. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/experiment/_experiment_info.py +0 -0
  286. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/experiment/_logging/__init__.py +0 -0
  287. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/experiment/_logging/experiment_logger.py +0 -0
  288. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/experiment/_logging/experiment_logging_context.py +0 -0
  289. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/experiment/callback/keras.py +0 -0
  290. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/experiment/callback/lightgbm.py +0 -0
  291. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/experiment/callback/xgboost.py +0 -0
  292. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/experiment/utils.py +0 -0
  293. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/__init__.py +0 -0
  294. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/_compute_fn_validation.py +0 -0
  295. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/access_manager.py +0 -0
  296. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/entity.py +0 -0
  297. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/examples/airline_features/entities.py +0 -0
  298. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/examples/airline_features/features/plane_features.py +0 -0
  299. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/examples/airline_features/features/weather_features.py +0 -0
  300. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/examples/airline_features/source.yaml +0 -0
  301. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/examples/citibike_trip_features/entities.py +0 -0
  302. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/examples/citibike_trip_features/features/station_feature.py +0 -0
  303. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/examples/citibike_trip_features/features/trip_feature.py +0 -0
  304. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/examples/citibike_trip_features/source.yaml +0 -0
  305. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/examples/example_helper.py +0 -0
  306. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/examples/new_york_taxi_features/entities.py +0 -0
  307. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/examples/new_york_taxi_features/features/location_features.py +0 -0
  308. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/examples/new_york_taxi_features/features/trip_features.py +0 -0
  309. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/examples/new_york_taxi_features/source.yaml +0 -0
  310. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/examples/source_data/airline.yaml +0 -0
  311. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/examples/source_data/citibike_trips.yaml +0 -0
  312. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/examples/source_data/fraud_transactions.yaml +0 -0
  313. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/examples/source_data/nyc_yellow_trips.yaml +0 -0
  314. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/examples/source_data/winequality_red.yaml +0 -0
  315. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/examples/wine_quality_features/entities.py +0 -0
  316. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/examples/wine_quality_features/features/managed_wine_features.py +0 -0
  317. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/examples/wine_quality_features/features/static_wine_features.py +0 -0
  318. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/examples/wine_quality_features/source.yaml +0 -0
  319. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/feature.py +0 -0
  320. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/feature_view_append_only_validation.py +0 -0
  321. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/feature_view_refresh_freq.py +0 -0
  322. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/interval_utils.py +0 -0
  323. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/metadata_manager.py +0 -0
  324. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/online_service.py +0 -0
  325. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/online_service_http_client.py +0 -0
  326. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/realtime_config.py +0 -0
  327. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/realtime_dataset.py +0 -0
  328. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/realtime_dataset_udf.py +0 -0
  329. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/request_source.py +0 -0
  330. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/spec/__init__.py +0 -0
  331. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/spec/enums.py +0 -0
  332. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/spec/models.py +0 -0
  333. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/spec/table_schema_evolution.py +0 -0
  334. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/stream_config.py +0 -0
  335. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/stream_source.py +0 -0
  336. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/feature_store/streaming_registration.py +0 -0
  337. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/fileset/embedded_stage_fs.py +0 -0
  338. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/fileset/fileset.py +0 -0
  339. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/fileset/sfcfs.py +0 -0
  340. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/fileset/snowfs.py +0 -0
  341. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/fileset/stage_fs.py +0 -0
  342. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/jobs/__init__.py +0 -0
  343. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/jobs/_interop/__init__.py +0 -0
  344. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/jobs/_interop/data_utils.py +0 -0
  345. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/jobs/_interop/dto_schema.py +0 -0
  346. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/jobs/_interop/exception_utils.py +0 -0
  347. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/jobs/_interop/legacy.py +0 -0
  348. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/jobs/_interop/protocols.py +0 -0
  349. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/jobs/_interop/results.py +0 -0
  350. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/jobs/_interop/utils.py +0 -0
  351. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/jobs/_utils/__init__.py +0 -0
  352. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/jobs/_utils/arg_protocol.py +0 -0
  353. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/jobs/_utils/constants.py +0 -0
  354. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/jobs/_utils/feature_flags.py +0 -0
  355. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/jobs/_utils/payload_utils.py +0 -0
  356. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/jobs/_utils/query_helper.py +0 -0
  357. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/jobs/_utils/runtime_env_utils.py +0 -0
  358. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/jobs/_utils/scripts/__init__.py +0 -0
  359. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/jobs/_utils/scripts/constants.py +0 -0
  360. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/jobs/_utils/scripts/get_instance_ip.py +0 -0
  361. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/jobs/_utils/scripts/mljob_launcher.py +0 -0
  362. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/jobs/_utils/scripts/signal_workers.py +0 -0
  363. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/jobs/_utils/scripts/start_mlruntime.sh +0 -0
  364. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/jobs/_utils/scripts/startup.sh +0 -0
  365. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/jobs/_utils/scripts/worker_shutdown_listener.py +0 -0
  366. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/jobs/_utils/type_utils.py +0 -0
  367. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/jobs/decorators.py +0 -0
  368. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/jobs/job.py +0 -0
  369. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/lineage/__init__.py +0 -0
  370. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/__init__.py +0 -0
  371. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_client/model/batch_inference_serialization.py +0 -0
  372. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_client/model/batch_inference_task.py +0 -0
  373. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_client/model/inference_engine_utils.py +0 -0
  374. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_client/model/model_impl.py +0 -0
  375. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_client/ops/deployment_step.py +0 -0
  376. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_client/ops/metadata_ops.py +0 -0
  377. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_client/ops/model_ops.py +0 -0
  378. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_client/ops/param_ops.py +0 -0
  379. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_client/ops/param_utils.py +0 -0
  380. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_client/service/import_model_spec_schema.py +0 -0
  381. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_client/service/inference_job_service_spec.py +0 -0
  382. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_client/service/model_deployment_spec.py +0 -0
  383. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_client/service/model_deployment_spec_schema.py +0 -0
  384. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_client/sql/_base.py +0 -0
  385. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_client/sql/model.py +0 -0
  386. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_client/sql/model_version.py +0 -0
  387. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_client/sql/service.py +0 -0
  388. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_client/sql/stage.py +0 -0
  389. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_client/sql/tag.py +0 -0
  390. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_model_composer/huggingface_lazy_uploader.py +0 -0
  391. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_model_composer/model_composer.py +0 -0
  392. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_model_composer/model_manifest/model_manifest.py +0 -0
  393. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_model_composer/model_manifest/model_manifest_schema.py +0 -0
  394. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_model_composer/model_method/constants.py +0 -0
  395. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_model_composer/model_method/model_method.py +0 -0
  396. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_model_composer/model_method/utils.py +0 -0
  397. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_model_composer/model_user_file/model_user_file.py +0 -0
  398. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_env/model_env.py +0 -0
  399. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handler.py +0 -0
  400. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/_base.py +0 -0
  401. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/_utils.py +0 -0
  402. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/custom.py +0 -0
  403. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/huggingface/__init__.py +0 -0
  404. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/huggingface/_default.py +0 -0
  405. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/huggingface/_openai_chat_wrapper.py +0 -0
  406. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/huggingface/_utils.py +0 -0
  407. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/huggingface/audio_classification.py +0 -0
  408. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/huggingface/audio_text_to_text.py +0 -0
  409. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/huggingface/automatic_speech_recognition.py +0 -0
  410. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/huggingface/conversational.py +0 -0
  411. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/huggingface/fill_mask.py +0 -0
  412. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/huggingface/question_answering.py +0 -0
  413. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/huggingface/summarization.py +0 -0
  414. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/huggingface/table_question_answering.py +0 -0
  415. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/huggingface/text2text_generation.py +0 -0
  416. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/huggingface/text_classification.py +0 -0
  417. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/huggingface/text_generation.py +0 -0
  418. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/huggingface/token_classification.py +0 -0
  419. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/huggingface/translation.py +0 -0
  420. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/huggingface/video_text_to_text.py +0 -0
  421. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/huggingface/zero_shot_audio_classification.py +0 -0
  422. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/huggingface/zero_shot_text_classification.py +0 -0
  423. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/keras.py +0 -0
  424. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/mlflow.py +0 -0
  425. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/prophet.py +0 -0
  426. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/pytorch.py +0 -0
  427. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/sentence_transformers.py +0 -0
  428. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/tensorflow.py +0 -0
  429. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers/torchscript.py +0 -0
  430. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers_migrator/base_migrator.py +0 -0
  431. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers_migrator/pytorch_migrator_2023_12_01.py +0 -0
  432. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers_migrator/tensorflow_migrator_2023_12_01.py +0 -0
  433. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers_migrator/tensorflow_migrator_2025_01_01.py +0 -0
  434. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_handlers_migrator/torchscript_migrator_2023_12_01.py +0 -0
  435. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_meta/model_blob_meta.py +0 -0
  436. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_meta/model_meta.py +0 -0
  437. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_meta/model_meta_schema.py +0 -0
  438. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_meta/model_sample_input_data.py +0 -0
  439. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_meta_migrator/base_migrator.py +0 -0
  440. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_meta_migrator/migrator_plans.py +0 -0
  441. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_meta_migrator/migrator_v1.py +0 -0
  442. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_packager.py +0 -0
  443. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_runtime/model_runtime.py +0 -0
  444. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_save_options.py +0 -0
  445. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_packager/model_task/model_task_utils.py +0 -0
  446. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_signatures/base_handler.py +0 -0
  447. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_signatures/builtins_handler.py +0 -0
  448. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_signatures/core.py +0 -0
  449. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_signatures/dmatrix_handler.py +0 -0
  450. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_signatures/numpy_handler.py +0 -0
  451. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_signatures/pandas_handler.py +0 -0
  452. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_signatures/pytorch_handler.py +0 -0
  453. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_signatures/tensorflow_handler.py +0 -0
  454. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/_signatures/utils.py +0 -0
  455. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/batch/__init__.py +0 -0
  456. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/code_path.py +0 -0
  457. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/compute_pool.py +0 -0
  458. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/custom_model.py +0 -0
  459. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/event_handler.py +0 -0
  460. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/inference_engine.py +0 -0
  461. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/model_signature.py +0 -0
  462. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/models/huggingface.py +0 -0
  463. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/models/huggingface_pipeline.py +0 -0
  464. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/target_platform.py +0 -0
  465. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/task.py +0 -0
  466. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/model/volatility.py +0 -0
  467. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/_internal/estimator_utils.py +0 -0
  468. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/_internal/local_implementations/pandas_handlers.py +0 -0
  469. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/_internal/local_implementations/pandas_trainer.py +0 -0
  470. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/_internal/model_specifications.py +0 -0
  471. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/_internal/model_trainer.py +0 -0
  472. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/_internal/model_trainer_builder.py +0 -0
  473. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/_internal/model_transformer_builder.py +0 -0
  474. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/_internal/snowpark_implementations/distributed_hpo_trainer.py +0 -0
  475. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/_internal/snowpark_implementations/distributed_search_udf_file.py +0 -0
  476. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/_internal/snowpark_implementations/snowpark_handlers.py +0 -0
  477. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/_internal/snowpark_implementations/snowpark_trainer.py +0 -0
  478. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/_internal/snowpark_implementations/xgboost_external_memory_trainer.py +0 -0
  479. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/_internal/transformer_protocols.py +0 -0
  480. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/calibration/__init__.py +0 -0
  481. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/cluster/__init__.py +0 -0
  482. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/compose/__init__.py +0 -0
  483. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/covariance/__init__.py +0 -0
  484. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/decomposition/__init__.py +0 -0
  485. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/discriminant_analysis/__init__.py +0 -0
  486. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/ensemble/__init__.py +0 -0
  487. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/feature_selection/__init__.py +0 -0
  488. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/framework/_utils.py +0 -0
  489. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/gaussian_process/__init__.py +0 -0
  490. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/impute/__init__.py +0 -0
  491. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/kernel_approximation/__init__.py +0 -0
  492. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/kernel_ridge/__init__.py +0 -0
  493. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/lightgbm/__init__.py +0 -0
  494. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/linear_model/__init__.py +0 -0
  495. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/manifold/__init__.py +0 -0
  496. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/metrics/__init__.py +0 -0
  497. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/metrics/classification.py +0 -0
  498. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/metrics/correlation.py +0 -0
  499. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/metrics/covariance.py +0 -0
  500. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/metrics/metrics_utils.py +0 -0
  501. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/metrics/ranking.py +0 -0
  502. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/metrics/regression.py +0 -0
  503. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/mixture/__init__.py +0 -0
  504. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/model_selection/__init__.py +0 -0
  505. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/multiclass/__init__.py +0 -0
  506. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/naive_bayes/__init__.py +0 -0
  507. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/neighbors/__init__.py +0 -0
  508. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/neural_network/__init__.py +0 -0
  509. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/parameters/disable_distributed_hpo.py +0 -0
  510. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/parameters/disable_model_tracer.py +0 -0
  511. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/parameters/enable_anonymous_sproc.py +0 -0
  512. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/pipeline/__init__.py +0 -0
  513. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/pipeline/pipeline.py +0 -0
  514. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/preprocessing/__init__.py +0 -0
  515. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/preprocessing/binarizer.py +0 -0
  516. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/preprocessing/k_bins_discretizer.py +0 -0
  517. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/preprocessing/label_encoder.py +0 -0
  518. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/preprocessing/max_abs_scaler.py +0 -0
  519. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/preprocessing/min_max_scaler.py +0 -0
  520. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/preprocessing/normalizer.py +0 -0
  521. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/preprocessing/one_hot_encoder.py +0 -0
  522. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/preprocessing/ordinal_encoder.py +0 -0
  523. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/preprocessing/robust_scaler.py +0 -0
  524. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/preprocessing/standard_scaler.py +0 -0
  525. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/semi_supervised/__init__.py +0 -0
  526. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/svm/__init__.py +0 -0
  527. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/tree/__init__.py +0 -0
  528. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/modeling/xgboost/__init__.py +0 -0
  529. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/monitoring/_client/model_monitor_sql_client.py +0 -0
  530. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/monitoring/_client/queries/record_count.ssql +0 -0
  531. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/monitoring/_client/queries/rmse.ssql +0 -0
  532. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/monitoring/_manager/model_monitor_manager.py +0 -0
  533. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/monitoring/entities/model_monitor_config.py +0 -0
  534. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/monitoring/explain_visualize.py +0 -0
  535. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/monitoring/model_monitor.py +0 -0
  536. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/monitoring/shap.py +0 -0
  537. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/registry/__init__.py +0 -0
  538. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/registry/_manager/model_manager.py +0 -0
  539. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/utils/authentication.py +0 -0
  540. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/utils/connection_params.py +0 -0
  541. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/utils/html_utils.py +0 -0
  542. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/utils/sparse.py +0 -0
  543. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/utils/sql_client.py +0 -0
  544. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake/ml/utils/stage_file.py +0 -0
  545. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake_ml_python.egg-info/dependency_links.txt +0 -0
  546. {snowflake_ml_python-1.46.0 → snowflake_ml_python-1.48.0}/snowflake_ml_python.egg-info/top_level.txt +0 -0
@@ -1,6 +1,53 @@
1
1
  # Release History
2
2
 
3
- ## 1.46.0
3
+ ## 1.48.0
4
+
5
+ ### New Features
6
+
7
+ * Experiment Tracking: `ExperimentTracking` now captures best-effort source provenance (entry-point filename and any
8
+ surrounding git commit, branch, and remote URL) for each new run by default. Pass `capture_source_info=False` to
9
+ disable it. Collection is always non-fatal and never blocks run creation.
10
+
11
+ ### Bug Fixes
12
+
13
+ ### Behavior Changes
14
+
15
+ ### Deprecations
16
+
17
+ ## 1.47.0 (2026-07-15)
18
+
19
+ ### New Features
20
+
21
+ * Experiment Tracking: Added `ExperimentTracking.list_model_versions` to retrieve the model versions that were
22
+ logged under a run. Models logged via `log_model` inside a run are linked to that run through Snowflake lineage,
23
+ and this method traverses that lineage to return the corresponding `ModelVersion` objects.
24
+
25
+ ```python
26
+ from snowflake.ml.experiment import ExperimentTracking
27
+
28
+ exp = ExperimentTracking(session)
29
+ exp.set_experiment("MY_EXPERIMENT")
30
+ with exp.start_run(run_name="MY_RUN"):
31
+ exp.log_model(model, model_name="MY_MODEL", sample_input_data=X)
32
+
33
+ model_versions = exp.list_model_versions(run_name="MY_RUN")
34
+ ```
35
+
36
+ ### Bug Fixes
37
+
38
+ * Experiment Tracking: Fix a bug where `.set_experiment` does not recreate an experiment deleted in Snowsight
39
+
40
+ ### Behavior Changes
41
+
42
+ * Registry: `enable_explainability` now defaults to `False` for all model types when logging a model. Previously it
43
+ defaulted to `True` for XGBoost, LightGBM, and CatBoost models and was auto-enabled for supported scikit-learn and
44
+ Snowpark ML modeling models when running in the Warehouse. To generate an `explain` method, explicitly pass
45
+ `options={"enable_explainability": True}` to `log_model` (this requires `sample_input_data` for supported model
46
+ types).
47
+
48
+ ### Deprecations
49
+
50
+ ## 1.46.0 (2026-07-07)
4
51
 
5
52
  ### New Features
6
53
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: snowflake-ml-python
3
- Version: 1.46.0
3
+ Version: 1.48.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:
@@ -240,6 +240,7 @@ Requires-Dist: cryptography
240
240
  Requires-Dist: fsspec[http]<2026,>=2024.6.1
241
241
  Requires-Dist: h2<5,>=4.3.0
242
242
  Requires-Dist: importlib_resources<7,>=6.1.1
243
+ Requires-Dist: jinja2<4,>=3.1.0
243
244
  Requires-Dist: numpy<3,>=1.23
244
245
  Requires-Dist: packaging<26,>=20.9
245
246
  Requires-Dist: pandas<3,>=2.1.4
@@ -250,7 +251,7 @@ Requires-Dist: pyjwt<3,>=2.0.0
250
251
  Requires-Dist: pytimeparse<2,>=1.1.8
251
252
  Requires-Dist: pyyaml<7,>=6.0
252
253
  Requires-Dist: retrying<2,>=1.3.3
253
- Requires-Dist: scikit-learn<1.8
254
+ Requires-Dist: scikit-learn<1.9
254
255
  Requires-Dist: scipy<2,>=1.9
255
256
  Requires-Dist: shap<1,>=0.46.0
256
257
  Requires-Dist: snowflake-connector-python[pandas]<5,>=3.17.3
@@ -416,7 +417,54 @@ NOTE: Version 1.7.0 is used as example here. Please choose the the latest versio
416
417
 
417
418
  # Release History
418
419
 
419
- ## 1.46.0
420
+ ## 1.48.0
421
+
422
+ ### New Features
423
+
424
+ * Experiment Tracking: `ExperimentTracking` now captures best-effort source provenance (entry-point filename and any
425
+ surrounding git commit, branch, and remote URL) for each new run by default. Pass `capture_source_info=False` to
426
+ disable it. Collection is always non-fatal and never blocks run creation.
427
+
428
+ ### Bug Fixes
429
+
430
+ ### Behavior Changes
431
+
432
+ ### Deprecations
433
+
434
+ ## 1.47.0 (2026-07-15)
435
+
436
+ ### New Features
437
+
438
+ * Experiment Tracking: Added `ExperimentTracking.list_model_versions` to retrieve the model versions that were
439
+ logged under a run. Models logged via `log_model` inside a run are linked to that run through Snowflake lineage,
440
+ and this method traverses that lineage to return the corresponding `ModelVersion` objects.
441
+
442
+ ```python
443
+ from snowflake.ml.experiment import ExperimentTracking
444
+
445
+ exp = ExperimentTracking(session)
446
+ exp.set_experiment("MY_EXPERIMENT")
447
+ with exp.start_run(run_name="MY_RUN"):
448
+ exp.log_model(model, model_name="MY_MODEL", sample_input_data=X)
449
+
450
+ model_versions = exp.list_model_versions(run_name="MY_RUN")
451
+ ```
452
+
453
+ ### Bug Fixes
454
+
455
+ * Experiment Tracking: Fix a bug where `.set_experiment` does not recreate an experiment deleted in Snowsight
456
+
457
+ ### Behavior Changes
458
+
459
+ * Registry: `enable_explainability` now defaults to `False` for all model types when logging a model. Previously it
460
+ defaulted to `True` for XGBoost, LightGBM, and CatBoost models and was auto-enabled for supported scikit-learn and
461
+ Snowpark ML modeling models when running in the Warehouse. To generate an `explain` method, explicitly pass
462
+ `options={"enable_explainability": True}` to `log_model` (this requires `sample_input_data` for supported model
463
+ types).
464
+
465
+ ### Deprecations
466
+
467
+ ## 1.46.0 (2026-07-07)
420
468
 
421
469
  ### New Features
422
470
 
@@ -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.8", "scipy>=1.9,<2", "shap>=0.46.0,<1", "snowflake-connector-python[pandas]>=3.17.3,<5", "snowflake-snowpark-python>=1.17.0,<2,!=1.26.0", "sqlparse>=0.4,<1", "tqdm<5", "typing-extensions>=4.1.0,<5", "xgboost<4",]
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", "jinja2>=3.1.0,<4", "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"
@@ -0,0 +1,487 @@
1
+ """Best-effort source provenance for ExperimentTracking.start_run().
2
+
3
+ The public entry point is :meth:`SourceInfo.collect`, which inspects the
4
+ surrounding environment and returns a :class:`SourceInfo`. Its
5
+ :meth:`SourceInfo.to_json_dict` renders the JSON-serializable shape embedded in
6
+ ``ALTER EXPERIMENT ... ADD RUN ... WITH (SOURCE_INFO = ...)``.
7
+
8
+ Collection is strictly best-effort: any failure (missing ``git`` binary, not in a
9
+ repo, REPL) drops the field rather than raising.
10
+ """
11
+
12
+ import dataclasses
13
+ import importlib
14
+ import ipaddress
15
+ import json
16
+ import os
17
+ import re
18
+ import socket
19
+ import subprocess
20
+ import sys
21
+ from typing import Any, Optional
22
+ from urllib import parse as urllib_parse, request as urllib_request
23
+
24
+ _GIT_TIMEOUT_SEC = 2.0
25
+
26
+ # Cap the localhost call to the Jupyter sessions API; notebook-name resolution is
27
+ # best-effort and must never noticeably delay run creation.
28
+ _JUPYTER_SESSIONS_TIMEOUT_SEC = 0.5
29
+
30
+ # Strip embedded credentials from git remote URLs before sending them upstream.
31
+ # Examples handled:
32
+ # https://user:token@github.com/foo/bar.git -> https://github.com/foo/bar.git
33
+ # ssh://git:secret@host.example/repo -> ssh://host.example/repo
34
+ _URL_HTTPS_CRED_RE = re.compile(r"^(https?://)[^/@]+@")
35
+ _URL_SSH_CRED_RE = re.compile(r"^(ssh://)[^/@]+@")
36
+
37
+ # Sentinel argv[0] values that don't point to a user file.
38
+ _NON_FILE_ARGV0 = frozenset({"", "-c", "-"})
39
+
40
+ # Environment variables Snowflake injects to describe the running file. Their
41
+ # presence is how we recognize a Snowflake-managed file (a notebook or a .py
42
+ # workspace file), where the active file has no resolvable local filesystem path.
43
+ _SNOWFLAKE_FILE_DOMAIN_TYPE_ENV = "SNOWFLAKE_FILE_DOMAIN_TYPE"
44
+ _SNOWFLAKE_FILE_DOMAIN_NAME_ENV = "SNOWFLAKE_FILE_DOMAIN_NAME"
45
+ _SNOWFLAKE_MAIN_FILE_PATH_ENV = "SNOWFLAKE_MAIN_FILE_PATH"
46
+
47
+
48
+ @dataclasses.dataclass(frozen=True)
49
+ class GitInfo:
50
+ """Git provenance for the surrounding repository.
51
+
52
+ Any field may be ``None`` when it could not be resolved (e.g. ``remote_url``
53
+ when no ``origin`` remote is configured, or ``branch`` on a detached HEAD).
54
+ """
55
+
56
+ remote_url: Optional[str] = None
57
+ commit_hash: Optional[str] = None
58
+ branch: Optional[str] = None
59
+
60
+ def is_empty(self) -> bool:
61
+ return self.remote_url is None and self.commit_hash is None and self.branch is None
62
+
63
+
64
+ @dataclasses.dataclass(frozen=True)
65
+ class SourceInfo:
66
+ """Best-effort provenance attached to a run when it is created."""
67
+
68
+ entry_point: Optional[str] = None
69
+ git: Optional[GitInfo] = None
70
+ # Provenance specific to Snowflake-managed files (notebooks or .py workspace
71
+ # files), taken from the environment. The file's own path is carried by
72
+ # ``entry_point``, not duplicated here.
73
+ snowflake_file_domain_type: Optional[str] = None
74
+ snowflake_file_domain_name: Optional[str] = None
75
+
76
+ def is_empty(self) -> bool:
77
+ """Return True when there is nothing useful to send."""
78
+ return (
79
+ self.entry_point is None
80
+ and (self.git is None or self.git.is_empty())
81
+ and self.snowflake_file_domain_type is None
82
+ and self.snowflake_file_domain_name is None
83
+ )
84
+
85
+ def to_json_dict(self) -> dict[str, Any]:
86
+ """Render the payload for ``WITH (SOURCE_INFO = $$...$$)``.
87
+
88
+ Keys with no value are omitted entirely (rather than serialized as
89
+ ``null``) so the server only sees fields that were actually resolved.
90
+ Values containing ``$$`` are also dropped, since the payload is embedded
91
+ in a ``$$``-dollar-quoted SQL literal that a ``$$`` would break.
92
+
93
+ Returns:
94
+ A JSON-serializable dict whose keys (``entry_point``, ``git``,
95
+ ``snowflake_file_domain_type``, ``snowflake_file_domain_name``) are
96
+ included only when resolved. May be empty when nothing was collected.
97
+ """
98
+ out: dict[str, Any] = {}
99
+ if self.entry_point is not None and "$$" not in self.entry_point:
100
+ out["entry_point"] = self.entry_point
101
+ if self.git is not None:
102
+ git_dict = {
103
+ key: value
104
+ for key, value in dataclasses.asdict(self.git).items()
105
+ if value is not None and "$$" not in value
106
+ }
107
+ if git_dict:
108
+ out["git"] = git_dict
109
+ if self.snowflake_file_domain_type is not None and "$$" not in self.snowflake_file_domain_type:
110
+ out["snowflake_file_domain_type"] = self.snowflake_file_domain_type
111
+ if self.snowflake_file_domain_name is not None and "$$" not in self.snowflake_file_domain_name:
112
+ out["snowflake_file_domain_name"] = self.snowflake_file_domain_name
113
+ return out
114
+
115
+ @classmethod
116
+ def collect(cls) -> "SourceInfo":
117
+ """Collect source info from the surrounding environment. Never raises.
118
+
119
+ Returns:
120
+ A populated :class:`SourceInfo`, or an empty one when nothing could
121
+ be resolved or collection failed.
122
+ """
123
+ try:
124
+ # Snowflake-managed files (notebooks or .py workspace files) describe
125
+ # the running file via environment variables rather than a resolvable
126
+ # local path, so they are handled first and independently of the
127
+ # git/notebook-path machinery.
128
+ snowflake_file = _collect_snowflake_file()
129
+ if snowflake_file is not None:
130
+ return snowflake_file
131
+
132
+ # Resolve the notebook once so entry-point and git agree on the same file.
133
+ notebook_path = _resolve_notebook_path() if _in_ipython_kernel() else None
134
+ return cls(
135
+ entry_point=_detect_entry_point(notebook_path),
136
+ git=_collect_git(notebook_path),
137
+ )
138
+ except Exception:
139
+ return cls()
140
+
141
+
142
+ def _collect_snowflake_file() -> Optional[SourceInfo]:
143
+ """Collect source info when running inside a Snowflake-managed file.
144
+
145
+ Snowflake exposes the active file's location (a notebook or a .py workspace
146
+ file) through environment variables instead of a resolvable local filesystem
147
+ path. When any variable is present, the main-file path is recorded as the
148
+ entry point and the domain type and name are captured alongside it.
149
+
150
+ Returns:
151
+ A :class:`SourceInfo` populated from the Snowflake file environment, or
152
+ ``None`` when not running inside a Snowflake-managed file.
153
+ """
154
+ domain_type = os.environ.get(_SNOWFLAKE_FILE_DOMAIN_TYPE_ENV) or None
155
+ domain_name = os.environ.get(_SNOWFLAKE_FILE_DOMAIN_NAME_ENV) or None
156
+ main_file_path = os.environ.get(_SNOWFLAKE_MAIN_FILE_PATH_ENV) or None
157
+ if domain_type is None and domain_name is None and main_file_path is None:
158
+ return None
159
+ return SourceInfo(
160
+ entry_point=main_file_path,
161
+ snowflake_file_domain_type=domain_type,
162
+ snowflake_file_domain_name=domain_name,
163
+ )
164
+
165
+
166
+ def _git(*args: str, cwd: Optional[str] = None) -> Optional[str]:
167
+ """Run ``git <args>`` and return stripped stdout, or ``None`` on any failure."""
168
+ try:
169
+ out = subprocess.check_output(
170
+ ("git", *args),
171
+ cwd=cwd,
172
+ stderr=subprocess.DEVNULL,
173
+ timeout=_GIT_TIMEOUT_SEC,
174
+ text=True,
175
+ )
176
+ except Exception:
177
+ return None
178
+ out = out.strip()
179
+ return out or None
180
+
181
+
182
+ def _git_cwd(notebook_path: Optional[str] = None) -> Optional[str]:
183
+ """Pick a working directory for git resolution.
184
+
185
+ In a notebook kernel, anchors on the resolved notebook's own directory so the
186
+ captured repo matches the user's work. ``sys.argv[0]`` points at the kernel
187
+ launcher in site-packages and ``os.getcwd()`` is wherever the kernel happened
188
+ to start (often an unrelated repo, e.g. a Homebrew checkout), so neither is a
189
+ safe fallback in a kernel — git is simply dropped when the notebook path is
190
+ unknown.
191
+
192
+ Outside a kernel, anchors on the directory of the user's script
193
+ (``dirname(sys.argv[0])``) when that directory is inside a git work tree. A
194
+ real script outside any work tree yields ``None`` rather than ``os.getcwd()``,
195
+ so a run isn't stamped with an unrelated repo that merely happens to be the
196
+ working directory. ``os.getcwd()`` is used only when ``sys.argv[0]`` is not a
197
+ usable path hint (REPL, ``python -c``).
198
+
199
+ Args:
200
+ notebook_path: The resolved notebook path when running in a kernel, or
201
+ ``None``.
202
+
203
+ Returns:
204
+ An absolute directory to use as the git ``cwd``, or ``None`` if no safe
205
+ candidate is resolvable.
206
+ """
207
+ if _in_ipython_kernel():
208
+ if notebook_path and os.path.isabs(notebook_path):
209
+ return os.path.dirname(notebook_path) or None
210
+ return None
211
+
212
+ argv0 = sys.argv[0] if sys.argv else ""
213
+ if argv0 in _NON_FILE_ARGV0:
214
+ try:
215
+ return os.getcwd()
216
+ except Exception:
217
+ return None
218
+ try:
219
+ script_dir = os.path.dirname(os.path.abspath(argv0)) or None
220
+ except Exception:
221
+ return None
222
+ if script_dir and _git("rev-parse", "--is-inside-work-tree", cwd=script_dir):
223
+ return script_dir
224
+ return None
225
+
226
+
227
+ def _scrub_url(url: str) -> str:
228
+ """Remove embedded ``user[:pass]@`` credentials from a git remote URL."""
229
+ url = _URL_HTTPS_CRED_RE.sub(r"\1", url)
230
+ url = _URL_SSH_CRED_RE.sub(r"\1", url)
231
+ return url
232
+
233
+
234
+ def _collect_git(notebook_path: Optional[str] = None) -> Optional[GitInfo]:
235
+ """Collect commit hash, remote URL, and branch from the surrounding git repo.
236
+
237
+ Args:
238
+ notebook_path: The resolved notebook path when running in a kernel, or
239
+ ``None``. Used to anchor git resolution on the notebook's directory.
240
+
241
+ Returns:
242
+ A :class:`GitInfo` whose individual fields may be ``None`` when a single
243
+ field is unresolvable. Returns ``None`` when ``git`` is unavailable, the
244
+ directory is not a work tree, or every field came back empty.
245
+ """
246
+ cwd = _git_cwd(notebook_path)
247
+ # No safe anchoring directory (e.g. a script outside any work tree, or a
248
+ # kernel whose notebook path is unknown). Passing cwd=None to git would fall
249
+ # back to the process's current directory, stamping the run with an unrelated
250
+ # repo that merely happens to be where the interpreter was launched.
251
+ if cwd is None:
252
+ return None
253
+ # Cheap probe — short-circuits to a single subprocess call when the script
254
+ # is not inside a repo (the overwhelmingly common case for SPCS jobs).
255
+ if not _git("rev-parse", "--is-inside-work-tree", cwd=cwd):
256
+ return None
257
+
258
+ commit = _git("rev-parse", "HEAD", cwd=cwd)
259
+ remote = _git("config", "--get", "remote.origin.url", cwd=cwd)
260
+ branch = _git("rev-parse", "--abbrev-ref", "HEAD", cwd=cwd)
261
+ if branch == "HEAD": # detached HEAD has no branch
262
+ branch = None
263
+
264
+ if not (commit or remote or branch):
265
+ return None
266
+
267
+ return GitInfo(
268
+ remote_url=_scrub_url(remote) if remote else None,
269
+ commit_hash=commit,
270
+ branch=branch,
271
+ )
272
+
273
+
274
+ def _ipython_shell() -> Optional[Any]:
275
+ """Return the active IPython shell instance, or ``None`` if there isn't one.
276
+
277
+ Read-only: we never import IPython ourselves. If the ``IPython`` module is not
278
+ already loaded we are definitely not in an IPython session.
279
+
280
+ Returns:
281
+ The active IPython shell object, or ``None``.
282
+ """
283
+ ipython_module = sys.modules.get("IPython")
284
+ if ipython_module is None:
285
+ return None
286
+ try:
287
+ return ipython_module.get_ipython()
288
+ except Exception:
289
+ return None
290
+
291
+
292
+ def _in_ipython_kernel() -> bool:
293
+ """Return True when running inside an IPython/Jupyter kernel (incl. notebooks).
294
+
295
+ The active shell being a ``ZMQInteractiveShell`` distinguishes a kernel
296
+ (Jupyter, Snowflake Notebooks) from a plain terminal REPL
297
+ (``TerminalInteractiveShell``), where ``sys.argv[0]`` is still meaningful.
298
+
299
+ Returns:
300
+ True if the current process is an IPython kernel, False otherwise.
301
+ """
302
+ shell = _ipython_shell()
303
+ return shell is not None and type(shell).__name__ == "ZMQInteractiveShell"
304
+
305
+
306
+ def _jupyter_kernel_id() -> Optional[str]:
307
+ """Return this kernel's id from the ipykernel connection file, or ``None``.
308
+
309
+ The connection file is named ``kernel-<id>.json``.
310
+
311
+ Returns:
312
+ The kernel id, or ``None`` if it cannot be determined.
313
+ """
314
+ try:
315
+ import ipykernel
316
+
317
+ stem = os.path.splitext(os.path.basename(ipykernel.get_connection_file()))[0]
318
+ except Exception:
319
+ return None
320
+ _, _, kernel_id = stem.partition("-")
321
+ return kernel_id or None
322
+
323
+
324
+ def _jupyter_running_servers() -> list[dict[str, Any]]:
325
+ """Return info dicts for running Jupyter servers (``url``, ``token``, root).
326
+
327
+ Uses the canonical ``list_running_servers()`` from ``jupyter_server`` (modern)
328
+ and ``notebook`` (classic), covering both ``jupyter lab`` and ``jupyter
329
+ notebook``.
330
+
331
+ Returns:
332
+ Server info dicts; empty when the Jupyter packages are unavailable.
333
+ """
334
+ servers: list[dict[str, Any]] = []
335
+ for module_name in ("jupyter_server.serverapp", "notebook.notebookapp"):
336
+ try:
337
+ servers.extend(importlib.import_module(module_name).list_running_servers())
338
+ except Exception:
339
+ continue
340
+ return servers
341
+
342
+
343
+ def _is_loopback_url(url: str) -> bool:
344
+ """Return True only when ``url`` targets the local machine over http(s).
345
+
346
+ Confines the sessions-API request to the local Jupyter server: the scheme
347
+ must be ``http``/``https`` and the host must resolve exclusively to loopback
348
+ addresses. This prevents a stray or hostile ``list_running_servers()`` entry
349
+ from redirecting the request (and its auth token) to an off-box host.
350
+
351
+ Args:
352
+ url: The server URL reported by ``list_running_servers()``.
353
+
354
+ Returns:
355
+ True if the URL is safe to request against, False otherwise.
356
+ """
357
+ try:
358
+ parsed = urllib_parse.urlsplit(url)
359
+ except ValueError:
360
+ return False
361
+ if parsed.scheme not in ("http", "https"):
362
+ return False
363
+ host = parsed.hostname
364
+ if not host:
365
+ return False
366
+ try:
367
+ addr_infos = socket.getaddrinfo(host, parsed.port, proto=socket.IPPROTO_TCP)
368
+ except OSError:
369
+ return False
370
+ if not addr_infos:
371
+ return False
372
+ for addr_info in addr_infos:
373
+ ip_text = addr_info[4][0]
374
+ try:
375
+ if not ipaddress.ip_address(ip_text).is_loopback:
376
+ return False
377
+ except ValueError:
378
+ return False
379
+ return True
380
+
381
+
382
+ def _jupyter_session_notebook_path() -> Optional[str]:
383
+ """Resolve the active notebook path via the Jupyter server sessions API.
384
+
385
+ Matches this kernel's id against each running server's ``/api/sessions``
386
+ listing. The server-relative session path is joined with the server root to
387
+ yield an absolute path when the root is known. The HTTP call is capped by a
388
+ short timeout.
389
+
390
+ Returns:
391
+ The notebook path (absolute when the server root is known), or ``None``
392
+ if no session matches or the lookup fails.
393
+ """
394
+ kernel_id = _jupyter_kernel_id()
395
+ if not kernel_id:
396
+ return None
397
+ for server in _jupyter_running_servers():
398
+ url = str(server.get("url", "")).rstrip("/")
399
+ # Confine the request to the local Jupyter server so the auth token can
400
+ # never be sent off-box via an unexpected server entry.
401
+ if not url or not _is_loopback_url(url):
402
+ continue
403
+ # Carry the token in an Authorization header rather than the query string,
404
+ # keeping the credential out of request/proxy logs and process listings.
405
+ token = server.get("token", "")
406
+ request = urllib_request.Request(f"{url}/api/sessions")
407
+ if token:
408
+ request.add_header("Authorization", f"token {token}")
409
+ try:
410
+ with urllib_request.urlopen(request, timeout=_JUPYTER_SESSIONS_TIMEOUT_SEC) as response:
411
+ sessions = json.load(response)
412
+ except Exception:
413
+ continue
414
+ for session in sessions:
415
+ if session.get("kernel", {}).get("id") != kernel_id:
416
+ continue
417
+ path = session.get("path")
418
+ if isinstance(path, str) and path:
419
+ root = server.get("root_dir") or server.get("notebook_dir")
420
+ return os.path.join(root, path) if isinstance(root, str) and root else path
421
+ return None
422
+
423
+
424
+ def _resolve_notebook_path() -> Optional[str]:
425
+ """Best-effort resolution of the active notebook's absolute path.
426
+
427
+ Supports VS Code's Jupyter extension (the ``__vsc_ipynb_file__`` namespace
428
+ entry it injects) and vanilla ``jupyter notebook`` / JupyterLab servers
429
+ (matched via the sessions API). The path anchors both the entry point and
430
+ git resolution; unsupported frontends drop the field rather than guess.
431
+ Snowflake-managed files are handled separately via environment variables (see
432
+ :func:`_collect_snowflake_file`) and never reach this resolver.
433
+
434
+ Returns:
435
+ The notebook's absolute path, or ``None`` if it cannot be resolved.
436
+ """
437
+ shell = _ipython_shell()
438
+ if shell is not None:
439
+ try:
440
+ path = shell.user_ns.get("__vsc_ipynb_file__")
441
+ except Exception:
442
+ path = None
443
+ if isinstance(path, str) and path:
444
+ return path
445
+ return _jupyter_session_notebook_path()
446
+
447
+
448
+ def _detect_entry_point(notebook_path: Optional[str] = None) -> Optional[str]:
449
+ """Identify the user's entry-point file, git-root-relative when possible.
450
+
451
+ Falls back to a basename outside a repo to avoid leaking ``$HOME`` or
452
+ usernames.
453
+
454
+ Args:
455
+ notebook_path: The resolved notebook path when running in a kernel, or
456
+ ``None``.
457
+
458
+ Returns:
459
+ The repo-relative path (e.g. ``"train/main.py"``) when inside a git
460
+ work tree, otherwise the basename. In a notebook kernel, the resolved
461
+ ``.ipynb`` basename when available. ``None`` for REPL (``-c``, ``-``),
462
+ bare ``python`` invocations, and notebooks whose name cannot be resolved.
463
+ """
464
+ # In a kernel, sys.argv[0] is the launcher (e.g. ipykernel_launcher.py), not user
465
+ # code. Record the resolved notebook basename instead, and drop the field when it
466
+ # cannot be determined rather than recording the launcher path.
467
+ if _in_ipython_kernel():
468
+ return os.path.basename(notebook_path) if notebook_path else None
469
+
470
+ argv0 = sys.argv[0] if sys.argv else ""
471
+ if argv0 in _NON_FILE_ARGV0:
472
+ return None
473
+
474
+ try:
475
+ abs_main = os.path.abspath(argv0)
476
+ except Exception:
477
+ return os.path.basename(argv0) or None
478
+
479
+ root = _git("rev-parse", "--show-toplevel", cwd=os.path.dirname(abs_main) or None)
480
+ if root:
481
+ try:
482
+ return os.path.relpath(abs_main, root)
483
+ except ValueError:
484
+ # relpath raises on Windows when paths span drive letters.
485
+ pass
486
+
487
+ return os.path.basename(abs_main) or None