o
    $i                     @   s   d dl mZmZmZmZ d dlZd dlZd dlm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ erFd d
lmZ eddG dd deZdS )    )TYPE_CHECKINGListOptionalUnionN)is_object_dtype)TENSOR_COLUMN_NAME)DataBatchType)%_unwrap_ndarray_object_type_if_needed)LightGBMCheckpoint)	Predictor)	PublicAPI)Preprocessorbeta)	stabilityc                	       s   e Zd ZdZ	ddejded f fddZdd	 Ze	d
e
dd fddZ	ddedeeee ee f  defddZ	ddddeeee ee f  dejfddZ  ZS )LightGBMPredictorzA predictor for LightGBM models.

    Args:
        model: The LightGBM booster to use for predictions.
        preprocessor: A preprocessor used to transform data batches prior
            to prediction.
    Nmodelpreprocessorr   c                    s   || _ t | d S N)r   super__init__)selfr   r   	__class__ b/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/ray/train/lightgbm/lightgbm_predictor.pyr      s   zLightGBMPredictor.__init__c                 C   s   | j j d| jd| jdS )Nz(model=z, preprocessor=))r   __name__r   _preprocessor)r   r   r   r   __repr__"   s   zLightGBMPredictor.__repr__
checkpointreturnc                 C   s   |  }| }| ||dS )zInstantiate the predictor from a LightGBMCheckpoint.

        Args:
            checkpoint: The checkpoint to load the model and preprocessor from.

        )r   r   )	get_modelget_preprocessor)clsr   r   r   r   r   r   from_checkpoint(   s   z!LightGBMPredictor.from_checkpointdatafeature_columnsc                 K   s   t j| |fd|i|S )a  Run inference on data batch.

        Args:
            data: A batch of input data.
            feature_columns: The names or indices of the columns in the
                data to use as features to predict on. If None, then use
                all columns in ``data``.
            **predict_kwargs: Keyword arguments passed to
                ``lightgbm.Booster.predict``.

        Examples:
            .. testcode::

                import numpy as np
                import lightgbm as lgbm
                from ray.train.lightgbm import LightGBMPredictor

                train_X = np.array([[1, 2], [3, 4]])
                train_y = np.array([0, 1])

                model = lgbm.LGBMClassifier().fit(train_X, train_y)
                predictor = LightGBMPredictor(model=model.booster_)

                data = np.array([[1, 2], [3, 4]])
                predictions = predictor.predict(data)

                # Only use first and second column as the feature
                data = np.array([[1, 2, 8], [3, 4, 9]])
                predictions = predictor.predict(data, feature_columns=[0, 1])

                import pandas as pd
                import lightgbm as lgbm
                from ray.train.lightgbm import LightGBMPredictor

                train_X = pd.DataFrame([[1, 2], [3, 4]], columns=["A", "B"])
                train_y = pd.Series([0, 1])

                model = lgbm.LGBMClassifier().fit(train_X, train_y)
                predictor = LightGBMPredictor(model=model.booster_)

                # Pandas dataframe.
                data = pd.DataFrame([[1, 2], [3, 4]], columns=["A", "B"])
                predictions = predictor.predict(data)

                # Only use first and second column as the feature
                data = pd.DataFrame([[1, 2, 8], [3, 4, 9]], columns=["A", "B", "C"])
                predictions = predictor.predict(data, feature_columns=["A", "B"])

        Returns:
            Prediction result.

        r&   )r   predict)r   r%   r&   predict_kwargsr   r   r   r'   4   s   :zLightGBMPredictor.predictzpd.DataFramec           	      K   s   d }t |v rF|t   }t|}|r|d d |f }tj||d}| }i }|jD ]}|j| }t|r;t	 ||< q*|rE|j
|dd}n|rL|| }t| jj|fi |}t|jdkrfdg|_|S dd tt|jD |_|S )N)columnsF)copy   predictionsc                 S   s   g | ]}d | qS )predictions_r   ).0ir   r   r   
<listcomp>   s    z5LightGBMPredictor._predict_pandas.<locals>.<listcomp>)r   to_numpyr	   pd	DataFrameinfer_objectsr)   dtypesr   CategoricalDtypeastyper   r'   lenrange)	r   r%   r&   r(   feature_namesupdate_dtypescolumndtypedfr   r   r   _predict_pandasr   s6   

z!LightGBMPredictor._predict_pandasr   )r   
__module____qualname____doc__lightgbmBoosterr   r   r   classmethodr
   r$   r   r   r   strintr'   r2   r3   r?   __classcell__r   r   r   r   r      s6    	
Ar   )typingr   r   r   r   rC   pandasr2   pandas.api.typesr   ray.air.constantsr   ray.air.data_batch_typer   "ray.air.util.data_batch_conversionr	   ray.train.lightgbmr
   ray.train.predictorr   ray.util.annotationsr   ray.data.preprocessorr   r   r   r   r   r   <module>   s    