Ë
    °Ó^j_^  ã                   ó‚  — d Z ddlmZmZmZmZmZ ddlZddl	m
Z
 ddlmZmZ ddlmZmZ ddlmZ dd	lmZ dd
lmZmZmZ ddlmZmZmZ ddlmZ dee   dee   ddfd„Z G d„ de«      Z  G d„ de«      Z! ee e!«        G d„ deee«      Z" G d„ de«      Z# ee"e#«        G d„ de«      Z$ G d„ de«      Z% ee$e%«       y)z8Xgboost pyspark integration submodule for estimator API.é    )ÚAnyÚListÚOptionalÚTypeÚUnionN)Úkeyword_only)ÚParamÚParams)ÚHasProbabilityColÚHasRawPredictionCol)ÚSparkSessioné   )ÚConfig)ÚXGBClassifierÚ	XGBRankerÚXGBRegressoré   )Ú_ClassificationModelÚ_SparkXGBEstimatorÚ_SparkXGBModel)Úget_class_nameÚ	estimatorÚmodelÚreturnc                 óü  ‡ ‡‡	— ‰ j                  «       }dt        dt        fˆ	fd„Š	dt        dt        ddfˆ ˆˆ	fd„}|j	                  «       D ]J  }dt        ‰ j                  «       «      › d	|› �}t        t        j                  «       ||¬
«      } |||«       ŒL ‰ j                  «       }|j	                  «       D ]T  }dt        ‰ j                  «       «      › d|› �}|dk(  r|dz  }t        t        j                  «       ||¬
«      } |||«       ŒV ‰ j                  «       }|j	                  «       D ]J  }dt        ‰ j                  «       «      › d|› �}t        t        j                  «       ||¬
«      } |||«       ŒL y)zyThis function automatically infer to xgboost parameters and set them
    into corresponding pyspark estimators and modelsÚvr   c                 óX  •— t        | t        j                  «      r#t        j                  | «      j	                  «       S t        | t
        «      r*| j                  «       D ��ci c]  \  }}| ‰|«      “Œ c}}S t        | t        «      r| D �cg c]
  } ‰|«      ‘Œ c}S | S c c}}w c c}w ©N)Ú
isinstanceÚnpÚgenericÚarrayÚitemÚdictÚitemsÚlist)r   ÚkÚnvÚparam_value_converters      €úb/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/xgboost/spark/estimator.pyr)   z?_set_pyspark_xgb_cls_param_attrs.<locals>.param_value_converter   s‡   ø€ Ü�aœŸ™Ô$ä—8‘8˜A“;×#Ñ#Ó%Ð%Ü�aœÔØ>?¿g¹g»i×H±U°Q¸�AÑ,¨RÓ0Ñ0ÓHÐHÜ�aœÔØ89Ö:°"Ñ)¨"Õ-Ò:Ð:Øˆùó Iùâ:s   Á"B!ÂB'Ú	attr_nameÚparamNc                 óH   •— ‰|_         t        ‰| |«       t        ‰| |«       y r   )ÚtypeConverterÚsetattr)r+   r,   r   r   r)   s     €€€r*   Úset_param_attrsz9_set_pyspark_xgb_cls_param_attrs.<locals>.set_param_attrs)   s#   ø€ Ø3ˆÔÜ�	˜9 eÔ,Ü��y %Õ(ó    zRefer to XGBoost doc of z for this param )ÚnameÚdocz.fit() for this param Ú	callbacksz°The callbacks can be arbitrary functions. It is saved using cloudpickle which is not a fully self-contained format. It may fail to load with different versions of dependencies.z.predict() for this param )Ú_get_xgb_params_defaultr   Ústrr	   Úkeysr   Ú_xgb_clsr
   Ú_dummyÚ_get_fit_params_defaultÚ_get_predict_params_default)
r   r   Úparams_dictr0   r2   r3   Ú	param_objÚfit_params_dictÚpredict_params_dictr)   s
   ``       @r*   Ú _set_pyspark_xgb_cls_param_attrsr@      s›  ú€ ð
 ×3Ñ3Ó5€Kð¤ð ¬õ ð)¤3ð )¬uð )¸÷ )ð
 × Ñ Ó"ò )ˆà&Ü˜i×0Ñ0Ó2Ó3Ð4Ð4DÀTÀFðLð 	ô
 !¤§¡£°tÀÔEˆ	Ù˜˜iÕ(ð)ð  ×7Ñ7Ó9€OØ×$Ñ$Ó&ò )ˆà&¤~°i×6HÑ6HÓ6JÓ'KÐ&LØ$ T Fð,ð 	ð �;ÒØð6ñˆCô
 œ&Ÿ-™-›/°¸#Ô>ˆ	Ù˜˜iÕ(ð)ð $×?Ñ?ÓAÐØ#×(Ñ(Ó*ò )ˆà&¤~°i×6HÑ6HÓ6JÓ'KÐ&LØ(¨¨ð0ð 	ô œ&Ÿ-™-›/°¸#Ô>ˆ	Ù˜˜iÕ(ñ)r1   c            "       ó  ‡ — e Zd ZdZedddddddddddddddœd	eeee   f   d
ededee   dee   dee   dee   de	dee   de
de
de
dee
   dee   deddf ˆ fd„«       Zedee   fd„«       Zeded   fd„«       Zdeddfˆ fd„Zˆ xZS )ÚSparkXGBRegressoraˆ  SparkXGBRegressor is a PySpark ML estimator. It implements the XGBoost regression
    algorithm based on XGBoost python library, and it can be used in PySpark Pipeline
    and PySpark ML meta algorithms like
    - :py:class:`~pyspark.ml.tuning.CrossValidator`/
    - :py:class:`~pyspark.ml.tuning.TrainValidationSplit`/
    - :py:class:`~pyspark.ml.classification.OneVsRest`

    SparkXGBRegressor automatically supports most of the parameters in
    :py:class:`xgboost.XGBRegressor` constructor and most of the parameters used in
    :py:meth:`xgboost.XGBRegressor.fit` and :py:meth:`xgboost.XGBRegressor.predict`
    method.

    To enable GPU support, set `device` to `cuda` or `gpu`.

    SparkXGBRegressor doesn't support setting `base_margin` explicitly as well, but
    support another param called `base_margin_col`. see doc below for more details.

    SparkXGBRegressor doesn't support `validate_features` and `output_margin` param.

    SparkXGBRegressor doesn't support setting `nthread` xgboost param, instead, the
    `nthread` param for each xgboost worker will be set equal to `spark.task.cpus`
    config value.


    Parameters
    ----------

    features_col:
        When the value is string, it requires the features column name to be vector type.
        When the value is a list of string, it requires all the feature columns to be numeric types.
    label_col:
        Label column name. Default to "label".
    prediction_col:
        Prediction column name. Default to "prediction"
    pred_contrib_col:
        Contribution prediction column name.
    validation_indicator_col:
        For params related to `xgboost.XGBRegressor` training with
        evaluation dataset's supervision,
        set :py:attr:`xgboost.spark.SparkXGBRegressor.validation_indicator_col`
        parameter instead of setting the `eval_set` parameter in `xgboost.XGBRegressor`
        fit method.
    weight_col:
        To specify the weight of the training and validation dataset, set
        :py:attr:`xgboost.spark.SparkXGBRegressor.weight_col` parameter instead of setting
        `sample_weight` and `sample_weight_eval_set` parameter in `xgboost.XGBRegressor`
        fit method.
    base_margin_col:
        To specify the base margins of the training and validation
        dataset, set :py:attr:`xgboost.spark.SparkXGBRegressor.base_margin_col` parameter
        instead of setting `base_margin` and `base_margin_eval_set` in the
        `xgboost.XGBRegressor` fit method.

    num_workers:
        How many XGBoost workers to be used to train.
        Each XGBoost worker corresponds to one spark task.
    device:

        .. versionadded:: 2.0.0

        Device for XGBoost workers, available options are `cpu`, `cuda`, and `gpu`.

    force_repartition:
        Boolean value to specify if forcing the input dataset to be repartitioned
        before XGBoost training.
    repartition_random_shuffle:
        Boolean value to specify if randomly shuffling the dataset when repartitioning is required.
    enable_sparse_data_optim:
        Boolean value to specify if enabling sparse data optimization, if True,
        Xgboost DMatrix object will be constructed from sparse matrix instead of
        dense matrix.
    launch_tracker_on_driver:
        Boolean value to indicate whether the tracker should be launched on the driver side or
        the executor side.
    coll_cfg:
        The collective configuration. See :py:class:`~xgboost.collective.Config`

    kwargs:
        A dictionary of xgboost parameters, please refer to
        https://xgboost.readthedocs.io/en/stable/parameter.html

    Note
    ----

    The Parameters chart above contains parameters that need special handling.
    For a full list of parameters, see entries with `Param(parent=...` below.

    This API is experimental.


    Examples
    --------

    >>> from xgboost.spark import SparkXGBRegressor
    >>> from pyspark.ml.linalg import Vectors
    >>> df_train = spark.createDataFrame([
    ...     (Vectors.dense(1.0, 2.0, 3.0), 0, False, 1.0),
    ...     (Vectors.sparse(3, {1: 1.0, 2: 5.5}), 1, False, 2.0),
    ...     (Vectors.dense(4.0, 5.0, 6.0), 2, True, 1.0),
    ...     (Vectors.sparse(3, {1: 6.0, 2: 7.5}), 3, True, 2.0),
    ... ], ["features", "label", "isVal", "weight"])
    >>> df_test = spark.createDataFrame([
    ...     (Vectors.dense(1.0, 2.0, 3.0), ),
    ...     (Vectors.sparse(3, {1: 1.0, 2: 5.5}), )
    ... ], ["features"])
    >>> xgb_regressor = SparkXGBRegressor(max_depth=5, missing=0.0,
    ... validation_indicator_col='isVal', weight_col='weight',
    ... early_stopping_rounds=1, eval_metric='rmse')
    >>> xgb_reg_model = xgb_regressor.fit(df_train)
    >>> xgb_reg_model.transform(df_test)

    ÚfeaturesÚlabelÚ
predictionNr   F)Úfeatures_colÚ	label_colÚprediction_colÚpred_contrib_colÚvalidation_indicator_colÚ
weight_colÚbase_margin_colÚnum_workersÚdeviceÚforce_repartitionÚrepartition_random_shuffleÚenable_sparse_data_optimÚlaunch_tracker_on_driverÚcoll_cfgrF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   Úkwargsr   c                ó^   •— t         ‰| �  «        | j                  } | j                  di |¤Ž y ©N© ©ÚsuperÚ__init__Ú_input_kwargsÚ	setParams)ÚselfrF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   Úinput_kwargsÚ	__class__s                    €r*   rZ   zSparkXGBRegressor.__init__Â   s,   ø€ ô( 	‰ÑÔØ×)Ñ)ˆØˆ�‰Ñ&˜Ó&r1   c                 ó   — t         S r   ©r   ©Úclss    r*   r8   zSparkXGBRegressor._xgb_clsÚ   ó   € äÐr1   ÚSparkXGBRegressorModelc                 ó   — t         S r   )re   rb   s    r*   Ú_pyspark_model_clsz$SparkXGBRegressor._pyspark_model_clsÞ   s   € ä%Ð%r1   Úspark_sessionc                 óp   •— t         ‰| �  |«       | j                  | j                  «      rt	        d«      ‚y )NzCSpark Xgboost regressor estimator does not support `qid_col` param.©rY   Ú_validate_paramsÚ	isDefinedÚqid_colÚ
ValueError©r]   rh   r_   s     €r*   rk   z"SparkXGBRegressor._validate_paramsâ   s5   ø€ Ü‰Ñ  Ô/Ø�>‰>˜$Ÿ,™,Ô'ÜØUóð ð (r1   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r6   r   r   ÚintÚboolr   r   rZ   Úclassmethodr   r   r8   rg   r   rk   Ú__classcell__©r_   s   @r*   rB   rB   P   sm  ø„ ñoðb ð /9Ø Ø*Ø*.Ø26Ø$(Ø)-ØØ $Ø"'Ø+0Ø).Ø37Ø%)ò!'ð ˜C  c¡˜NÑ+ð'ð ð	'ð
 ð'ð # 3™-ð'ð #+¨3¡-ð'ð ˜S‘Mð'ð " #™ð'ð ð'ð ˜‘ð'ð  ð'ð %)ð'ð #'ð'ð #+¨4¡.ð'ð  ˜6Ñ"ð!'ð" ð#'ð$ 
ô%'ó ð'ð. ð˜˜lÑ+ò ó ðð ð& 4Ð(@Ñ#Aò &ó ð&ð¨lð ¸t÷ ñ r1   rB   c                   ó,   — e Zd ZdZedee   fd„«       Zy)re   zt
    The model returned by :func:`xgboost.spark.SparkXGBRegressor.fit`

    .. Note:: This API is experimental.
    r   c                 ó   — t         S r   ra   rb   s    r*   r8   zSparkXGBRegressorModel._xgb_clsñ   rd   r1   N)rp   rq   rr   rs   rv   r   r   r8   rW   r1   r*   re   re   ê   s'   „ ñð ð˜˜lÑ+ò ó ñr1   re   c            &       ó   ‡ — e Zd ZdZedddddddddddd	d	d	ddd
œdeeee   f   dededededee   dee   dee   dee   de	dee   de
de
de
dee
   dee   deddf$ˆ fd„«       Zedee   fd„«       Zeded   fd „«       Zd!eddfˆ fd"„Zˆ xZS )#ÚSparkXGBClassifierat  SparkXGBClassifier is a PySpark ML estimator. It implements the XGBoost
    classification algorithm based on XGBoost python library, and it can be used in
    PySpark Pipeline and PySpark ML meta algorithms like
    - :py:class:`~pyspark.ml.tuning.CrossValidator`/
    - :py:class:`~pyspark.ml.tuning.TrainValidationSplit`/
    - :py:class:`~pyspark.ml.classification.OneVsRest`

    SparkXGBClassifier automatically supports most of the parameters in
    :py:class:`xgboost.XGBClassifier` constructor and most of the parameters used in
    :py:meth:`xgboost.XGBClassifier.fit` and :py:meth:`xgboost.XGBClassifier.predict`
    method.

    To enable GPU support, set `device` to `cuda` or `gpu`.

    SparkXGBClassifier doesn't support setting `base_margin` explicitly as well, but
    support another param called `base_margin_col`. see doc below for more details.

    SparkXGBClassifier doesn't support setting `output_margin`, but we can get output
    margin from the raw prediction column. See `raw_prediction_col` param doc below for
    more details.

    SparkXGBClassifier doesn't support `validate_features` and `output_margin` param.

    SparkXGBClassifier doesn't support setting `nthread` xgboost param, instead, the
    `nthread` param for each xgboost worker will be set equal to `spark.task.cpus`
    config value.


    Parameters
    ----------

    features_col:
        When the value is string, it requires the features column name to be vector type.
        When the value is a list of string, it requires all the feature columns to be numeric types.
    label_col:
        Label column name. Default to "label".
    prediction_col:
        Prediction column name. Default to "prediction"
    probability_col:
        Column name for predicted class conditional probabilities. Default to probabilityCol
    raw_prediction_col:
        The `output_margin=True` is implicitly supported by the
        `rawPredictionCol` output column, which is always returned with the predicted margin
        values.
    pred_contrib_col:
        Contribution prediction column name.
    validation_indicator_col:
        For params related to `xgboost.XGBClassifier` training with
        evaluation dataset's supervision,
        set :py:attr:`xgboost.spark.SparkXGBClassifier.validation_indicator_col`
        parameter instead of setting the `eval_set` parameter in `xgboost.XGBClassifier`
        fit method.
    weight_col:
        To specify the weight of the training and validation dataset, set
        :py:attr:`xgboost.spark.SparkXGBClassifier.weight_col` parameter instead of setting
        `sample_weight` and `sample_weight_eval_set` parameter in `xgboost.XGBClassifier`
        fit method.
    base_margin_col:
        To specify the base margins of the training and validation
        dataset, set :py:attr:`xgboost.spark.SparkXGBClassifier.base_margin_col` parameter
        instead of setting `base_margin` and `base_margin_eval_set` in the
        `xgboost.XGBClassifier` fit method.

    num_workers:
        How many XGBoost workers to be used to train.
        Each XGBoost worker corresponds to one spark task.
    device:

        .. versionadded:: 2.0.0

        Device for XGBoost workers, available options are `cpu`, `cuda`, and `gpu`.

    force_repartition:
        Boolean value to specify if forcing the input dataset to be repartitioned
        before XGBoost training.
    repartition_random_shuffle:
        Boolean value to specify if randomly shuffling the dataset when repartitioning is required.
    enable_sparse_data_optim:
        Boolean value to specify if enabling sparse data optimization, if True,
        Xgboost DMatrix object will be constructed from sparse matrix instead of
        dense matrix.
    launch_tracker_on_driver:
        Boolean value to indicate whether the tracker should be launched on the driver side or
        the executor side.
    coll_cfg:
        The collective configuration. See :py:class:`~xgboost.collective.Config`

    kwargs:
        A dictionary of xgboost parameters, please refer to
        https://xgboost.readthedocs.io/en/stable/parameter.html

    Note
    ----

    The Parameters chart above contains parameters that need special handling.
    For a full list of parameters, see entries with `Param(parent=...` below.

    This API is experimental.

    Examples
    --------

    >>> from xgboost.spark import SparkXGBClassifier
    >>> from pyspark.ml.linalg import Vectors
    >>> df_train = spark.createDataFrame([
    ...     (Vectors.dense(1.0, 2.0, 3.0), 0, False, 1.0),
    ...     (Vectors.sparse(3, {1: 1.0, 2: 5.5}), 1, False, 2.0),
    ...     (Vectors.dense(4.0, 5.0, 6.0), 0, True, 1.0),
    ...     (Vectors.sparse(3, {1: 6.0, 2: 7.5}), 1, True, 2.0),
    ... ], ["features", "label", "isVal", "weight"])
    >>> df_test = spark.createDataFrame([
    ...     (Vectors.dense(1.0, 2.0, 3.0), ),
    ... ], ["features"])
    >>> xgb_classifier = SparkXGBClassifier(max_depth=5, missing=0.0,
    ...     validation_indicator_col='isVal', weight_col='weight',
    ...     early_stopping_rounds=1, eval_metric='logloss')
    >>> xgb_clf_model = xgb_classifier.fit(df_train)
    >>> xgb_clf_model.transform(df_test).show()

    rC   rD   rE   ÚprobabilityÚrawPredictionNr   F)rF   rG   rH   Úprobability_colÚraw_prediction_colrI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rF   rG   rH   r   r€   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   r   c                ó‚   •— t         ‰| �  «        | j                  } | j                  di |¤Ž | j	                  d ¬«       y )N)Ú	objectiverW   )rY   rZ   r[   r\   Ú_setDefault)r]   rF   rG   rH   r   r€   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   r^   r_   s                      €r*   rZ   zSparkXGBClassifier.__init__s  s?   ø€ ô, 	‰ÑÔð
 ×)Ñ)ˆØˆ�‰Ñ&˜Ò&Ø×Ñ 4ÐÕ(r1   c                 ó   — t         S r   ©r   rb   s    r*   r8   zSparkXGBClassifier._xgb_cls’  ó   € äÐr1   ÚSparkXGBClassifierModelc                 ó   — t         S r   )r‡   rb   s    r*   rg   z%SparkXGBClassifier._pyspark_model_cls–  s   € ä&Ð&r1   rh   c                 ó¨   •— t         ‰| �  |«       | j                  | j                  «      rt	        d«      ‚| j                  d«      rt	        d«      ‚y )NzDSpark Xgboost classifier estimator does not support `qid_col` param.r‚   zHSetting custom 'objective' param is not allowed in 'SparkXGBClassifier'.)rY   rk   rl   rm   rn   ÚgetOrDefaultro   s     €r*   rk   z#SparkXGBClassifier._validate_paramsš  sU   ø€ Ü‰Ñ  Ô/Ø�>‰>˜$Ÿ,™,Ô'ÜØVóð ð ×Ñ˜[Ô)ÜØZóð ð *r1   )rp   rq   rr   rs   r   r   r6   r   r   rt   ru   r   r   rZ   rv   r   r   r8   rg   r   rk   rw   rx   s   @r*   r|   r|   ù   s‡  ø„ ñwðr ð /9Ø Ø*Ø,Ø"1Ø*.Ø26Ø$(Ø)-ØØ $Ø"'Ø+0Ø).Ø37Ø%)ò%)ð ˜C  c¡˜NÑ+ð)ð ð	)ð
 ð)ð ð)ð  ð)ð # 3™-ð)ð #+¨3¡-ð)ð ˜S‘Mð)ð " #™ð)ð ð)ð ˜‘ð)ð  ð)ð %)ð)ð  #'ð!)ð" #+¨4¡.ð#)ð$ ˜6Ñ"ð%)ð& ð')ð( 
ô))ó ð)ð< ð˜˜mÑ,ò ó ðð ð' 4Ð(AÑ#Bò 'ó ð'ð	¨lð 	¸t÷ 	ñ 	r1   r|   c                   ó,   — e Zd ZdZedee   fd„«       Zy)r‡   zu
    The model returned by :func:`xgboost.spark.SparkXGBClassifier.fit`

    .. Note:: This API is experimental.
    r   c                 ó   — t         S r   r…   rb   s    r*   r8   z SparkXGBClassifierModel._xgb_cls­  r†   r1   N)rp   rq   rr   rs   rv   r   r   r8   rW   r1   r*   r‡   r‡   ¦  s'   „ ñð ð˜˜mÑ,ò ó ñr1   r‡   c            $       ó   ‡ — e Zd ZdZeddddddddddddddddœd	eeee   f   d
ededee   dee   dee   dee   dee   de	dee   de
de
de
dee
   dee   deddf"ˆ fd„«       Zedee   fd„«       Zeded   fd„«       Zdeddfˆ fd„Zˆ xZS ) ÚSparkXGBRankeraJ  SparkXGBRanker is a PySpark ML estimator. It implements the XGBoost
    ranking algorithm based on XGBoost python library, and it can be used in
    PySpark Pipeline and PySpark ML meta algorithms like
    :py:class:`~pyspark.ml.tuning.CrossValidator`/
    :py:class:`~pyspark.ml.tuning.TrainValidationSplit`/
    :py:class:`~pyspark.ml.classification.OneVsRest`

    SparkXGBRanker automatically supports most of the parameters in
    :py:class:`xgboost.XGBRanker` constructor and most of the parameters used in
    :py:meth:`xgboost.XGBRanker.fit` and :py:meth:`xgboost.XGBRanker.predict` method.

    To enable GPU support, set `device` to `cuda` or `gpu`.

    SparkXGBRanker doesn't support setting `base_margin` explicitly as well, but support
    another param called `base_margin_col`. see doc below for more details.

    SparkXGBRanker doesn't support setting `output_margin`, but we can get output margin
    from the raw prediction column. See `raw_prediction_col` param doc below for more
    details.

    SparkXGBRanker doesn't support `validate_features` and `output_margin` param.

    SparkXGBRanker doesn't support setting `nthread` xgboost param, instead, the
    `nthread` param for each xgboost worker will be set equal to `spark.task.cpus`
    config value.


    Parameters
    ----------

    features_col:
        When the value is string, it requires the features column name to be vector type.
        When the value is a list of string, it requires all the feature columns to be numeric types.
    label_col:
        Label column name. Default to "label".
    prediction_col:
        Prediction column name. Default to "prediction"
    pred_contrib_col:
        Contribution prediction column name.
    validation_indicator_col:
        For params related to `xgboost.XGBRanker` training with
        evaluation dataset's supervision,
        set :py:attr:`xgboost.spark.SparkXGBRanker.validation_indicator_col`
        parameter instead of setting the `eval_set` parameter in :py:class:`xgboost.XGBRanker`
        fit method.
    weight_col:
        To specify the weight of the training and validation dataset, set
        :py:attr:`xgboost.spark.SparkXGBRanker.weight_col` parameter instead of setting
        `sample_weight` and `sample_weight_eval_set` parameter in :py:class:`xgboost.XGBRanker`
        fit method.
    base_margin_col:
        To specify the base margins of the training and validation
        dataset, set :py:attr:`xgboost.spark.SparkXGBRanker.base_margin_col` parameter
        instead of setting `base_margin` and `base_margin_eval_set` in the
        :py:class:`xgboost.XGBRanker` fit method.
    qid_col:
        Query id column name.
    num_workers:
        How many XGBoost workers to be used to train.
        Each XGBoost worker corresponds to one spark task.
    device:

        .. versionadded:: 2.0.0

        Device for XGBoost workers, available options are `cpu`, `cuda`, and `gpu`.

    force_repartition:
        Boolean value to specify if forcing the input dataset to be repartitioned
        before XGBoost training.
    repartition_random_shuffle:
        Boolean value to specify if randomly shuffling the dataset when repartitioning is required.
    enable_sparse_data_optim:
        Boolean value to specify if enabling sparse data optimization, if True,
        Xgboost DMatrix object will be constructed from sparse matrix instead of
        dense matrix.
    launch_tracker_on_driver:
        Boolean value to indicate whether the tracker should be launched on the driver side or
        the executor side.
    coll_cfg:
        The collective configuration. See :py:class:`~xgboost.collective.Config`

    kwargs:
        A dictionary of xgboost parameters, please refer to
        https://xgboost.readthedocs.io/en/stable/parameter.html

    .. Note:: The Parameters chart above contains parameters that need special handling.
        For a full list of parameters, see entries with `Param(parent=...` below.

    .. Note:: This API is experimental.

    Examples
    --------

    >>> from xgboost.spark import SparkXGBRanker
    >>> from pyspark.ml.linalg import Vectors
    >>> ranker = SparkXGBRanker(qid_col="qid")
    >>> df_train = spark.createDataFrame(
    ...     [
    ...         (Vectors.dense(1.0, 2.0, 3.0), 0, 0),
    ...         (Vectors.dense(4.0, 5.0, 6.0), 1, 0),
    ...         (Vectors.dense(9.0, 4.0, 8.0), 2, 0),
    ...         (Vectors.sparse(3, {1: 1.0, 2: 5.5}), 0, 1),
    ...         (Vectors.sparse(3, {1: 6.0, 2: 7.5}), 1, 1),
    ...         (Vectors.sparse(3, {1: 8.0, 2: 9.5}), 2, 1),
    ...     ],
    ...     ["features", "label", "qid"],
    ... )
    >>> df_test = spark.createDataFrame(
    ...     [
    ...         (Vectors.dense(1.5, 2.0, 3.0), 0),
    ...         (Vectors.dense(4.5, 5.0, 6.0), 0),
    ...         (Vectors.dense(9.0, 4.5, 8.0), 0),
    ...         (Vectors.sparse(3, {1: 1.0, 2: 6.0}), 1),
    ...         (Vectors.sparse(3, {1: 6.0, 2: 7.0}), 1),
    ...         (Vectors.sparse(3, {1: 8.0, 2: 10.5}), 1),
    ...     ],
    ...     ["features", "qid"],
    ... )
    >>> model = ranker.fit(df_train)
    >>> model.transform(df_test).show()
    rC   rD   rE   Nr   F)rF   rG   rH   rI   rJ   rK   rL   rm   rM   rN   rO   rP   rQ   rR   rS   rF   rG   rH   rI   rJ   rK   rL   rm   rM   rN   rO   rP   rQ   rR   rS   rT   r   c                ó^   •— t         ‰| �  «        | j                  } | j                  di |¤Ž y rV   rX   )r]   rF   rG   rH   rI   rJ   rK   rL   rm   rM   rN   rO   rP   rQ   rR   rS   rT   r^   r_   s                     €r*   rZ   zSparkXGBRanker.__init__0  s,   ø€ ô* 	‰ÑÔØ×)Ñ)ˆØˆ�‰Ñ&˜Ó&r1   c                 ó   — t         S r   ©r   rb   s    r*   r8   zSparkXGBRanker._xgb_clsI  ó   € äÐr1   ÚSparkXGBRankerModelc                 ó   — t         S r   )r“   rb   s    r*   rg   z!SparkXGBRanker._pyspark_model_clsM  s   € ä"Ð"r1   rh   c                 óp   •— t         ‰| �  |«       | j                  | j                  «      st	        d«      ‚y )Nz@Spark Xgboost ranker estimator requires setting `qid_col` param.rj   ro   s     €r*   rk   zSparkXGBRanker._validate_paramsQ  s5   ø€ Ü‰Ñ  Ô/Ø�~‰~˜dŸl™lÔ+ÜØRóð ð ,r1   )rp   rq   rr   rs   r   r   r6   r   r   rt   ru   r   r   rZ   rv   r   r   r8   rg   r   rk   rw   rx   s   @r*   rŽ   rŽ   µ  s}  ø„ ñxðt ð /9Ø Ø*Ø*.Ø26Ø$(Ø)-Ø!%ØØ $Ø"'Ø+0Ø).Ø37Ø%)ò#'ð ˜C  c¡˜NÑ+ð'ð ð	'ð
 ð'ð # 3™-ð'ð #+¨3¡-ð'ð ˜S‘Mð'ð " #™ð'ð ˜#‘ð'ð ð'ð ˜‘ð'ð  ð'ð %)ð'ð #'ð'ð  #+¨4¡.ð!'ð" ˜6Ñ"ð#'ð$ ð%'ð& 
ô''ó ð'ð0 ð˜˜i™ò ó ðð ð# 4Ð(=Ñ#>ò #ó ð#ð¨lð ¸t÷ ñ r1   rŽ   c                   ó,   — e Zd ZdZedee   fd„«       Zy)r“   zq
    The model returned by :func:`xgboost.spark.SparkXGBRanker.fit`

    .. Note:: This API is experimental.
    r   c                 ó   — t         S r   r‘   rb   s    r*   r8   zSparkXGBRankerModel._xgb_cls`  r’   r1   N)rp   rq   rr   rs   rv   r   r   r8   rW   r1   r*   r“   r“   Y  s&   „ ñð ð˜˜i™ò ó ñr1   r“   )&rs   Útypingr   r   r   r   r   Únumpyr    Úpysparkr   Úpyspark.ml.paramr	   r
   Úpyspark.ml.param.sharedr   r   Úpyspark.sqlr   Ú
collectiver   Úsklearnr   r   r   Úcorer   r   r   Úutilsr   r@   rB   re   r|   r‡   rŽ   r“   rW   r1   r*   ú<module>r¢      sä   ðÙ >÷
 4Õ 3ã Ý  ß *ß JÝ $å ß <Ñ <÷ñ õ
 "ð5)ØÐ&Ñ'ð5)Ø04°^Ñ0Dð5)à	ó5)ôpWÐ*ô Wôt	˜^ô 	ñ !Ð!2Ð4JÔ KôjÐ+Ð->Ð@Sô jôZ	Ð2ô 	ñ !Ð!3Ð5LÔ MôaÐ'ô aôH	˜.ô 	ñ ! Ð1DÕ Er1   