
    Ki                         d Z ddl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  G d	 d
ee	          ZdS )zwClassifier utilities for MySQL Connector/Python.

Provides a scikit-learn compatible classifier backed by HeatWave ML.
    )OptionalUnionN)ClassifierMixin)MyBaseMLModel)ML_TASK)	copy_dict)MySQLConnectionAbstractc                   "   e Zd ZdZ	 	 	 	 ddedee         dee         dee         dee         f
dZd	e	e
j        ej        f         d
ej        fdZd	e	e
j        ej        f         d
ej        fdZd	e	e
j        ej        f         d
e
j        fdZdS )MyClassifiera  
    MySQL HeatWave scikit-learn compatible classifier estimator.

    Provides prediction and probability output from a model deployed in MySQL,
    and manages fit, explain, and prediction options as per HeatWave ML interface.

    Attributes:
        predict_extra_options (dict): Dictionary of optional parameters passed through
            to the MySQL backend for prediction and probability inference.
        _model (MyModel): Underlying interface for database model operations.
        fit_extra_options (dict): See MyBaseMLModel.

    Args:
        db_connection (MySQLConnectionAbstract): Active MySQL connector DB connection.
        model_name (str, optional): Custom name for the model.
        fit_extra_options (dict, optional): Extra options for fitting.
        explain_extra_options (dict, optional): Extra options for explanations.
        predict_extra_options (dict, optional): Extra options for predict/predict_proba.

    Methods:
        predict(X): Predict class labels.
        predict_proba(X): Predict class probabilities.
    Ndb_connection
model_namefit_extra_optionsexplain_extra_optionspredict_extra_optionsc                     t          j        | |t          j        ||           t	          |          | _        t	          |          | _        dS )a  
        Initialize a MyClassifier.

        Args:
            db_connection: Active MySQL connector database connection.
            model_name: Optional, custom model name.
            fit_extra_options: Optional fit options.
            explain_extra_options: Optional explain options.
            predict_extra_options: Optional predict/predict_proba options.

        Raises:
            DatabaseError:
                If a database connection issue occurs.
                If an operational error occurs during execution.
        )r   r   N)r   __init__r   CLASSIFICATIONr   r   r   )selfr   r   r   r   r   s         R/var/www/html/analyses/venv/lib/python3.11/site-packages/mysql/ai/ml/classifier.pyr   zMyClassifier.__init__G   sZ    . 	"!/	
 	
 	
 	
 &//D%E%E"%./D%E%E"""    Xreturnc                 x    | j                             || j                  }|d                                         S )a  
        Predict class labels for the input features using the MySQL model.

        References:
            https://dev.mysql.com/doc/heatwave/en/mys-hwaml-ml-predict-table.html
                A full list of supported options can be found under "ML_PREDICT_TABLE Options"

        Args:
            X: Input samples as a numpy array or pandas DataFrame.

        Returns:
            ndarray: Array of predicted class labels, shape (n_samples,).

        Raises:
            DatabaseError:
                If provided options are invalid or unsupported,
                or if the model is not initialized, i.e., fit or import has not
                been called
                If a database connection issue occurs.
                If an operational error occurs during execution.
        options
Prediction)_modelpredictr   to_numpy)r   r   results      r   r   zMyClassifier.predicth   s8    0 $$Q0J$KKl#,,...r   c                    | j                             || j                  }t          |d         j        d         d                                                   t          j        |d                             fd                    S )a*  
        Predict class probabilities for the input features using the MySQL model.

        References:
            https://dev.mysql.com/doc/heatwave/en/mys-hwaml-ml-predict-table.html
                A full list of supported options can be found under "ML_PREDICT_TABLE Options"

        Args:
            X: Input samples as a numpy array or pandas DataFrame.

        Returns:
            ndarray: Array of shape (n_samples, n_classes) with class probabilities.

        Raises:
            DatabaseError:
                If provided options are invalid or unsupported,
                or if the model is not initialized, i.e., fit or import has not
                been called
                If a database connection issue occurs.
                If an operational error occurs during execution.
        r   
ml_resultsr   probabilitiesc                 "      fdD             S )Nc                 ,    g | ]}d          |         S )r#    ).0
class_name	ml_results     r   
<listcomp>z@MyClassifier.predict_proba.<locals>.<lambda>.<locals>.<listcomp>   s0     # # #?IIo.z:# # #r   r&   )r)   classess   `r   <lambda>z,MyClassifier.predict_proba.<locals>.<lambda>   s,     # # # #MT# # # r   )	r   r   r   sortedilockeysnpstackmap)r   r   r    r+   s      @r   predict_probazMyClassifier.predict_proba   s    0 $$Q0J$KK-215oFKKMMNNx< $$    
 
 	
r   c                 H    | j                             || j                   dS )ai  
        Explain model predictions using provided data.

        References:
            https://dev.mysql.com/doc/heatwave/en/mys-hwaml-ml-explain-table.html
                A full list of supported options can be found under "ML_EXPLAIN_TABLE Options"

        Args:
            X: DataFrame for which predictions should be explained.

        Returns:
            DataFrame containing explanation details (feature attributions, etc.)

        Raises:
            DatabaseError:
                If provided options are invalid or unsupported,
                or if the model is not initialized, i.e., fit or import has not
                been called
                If a database connection issue occurs.
                If an operational error occurs during execution.

        Notes:
            Temporary input/output tables are cleaned up after explanation.
        r   N)r   explain_predictionsr   )r   r   s     r   r5   z MyClassifier.explain_predictions   s(    6 	''43M'NNNNNr   )NNNN)__name__
__module____qualname____doc__r	   r   strdictr   r   pd	DataFramer0   ndarrayr   r3   r5   r&   r   r   r   r   .   s5        6 %),00404F F.F SMF $D>	F
  (~F  (~F F F FB/r|RZ/0/	/ / / /6"
r|RZ/0"
	"
 "
 "
 "
HOr|RZ/0O	O O O O O Or   r   )r9   typingr   r   numpyr0   pandasr<   sklearn.baser   mysql.ai.ml.baser   mysql.ai.ml.modelr   mysql.ai.utilsr   mysql.connector.abstractsr	   r   r&   r   r   <module>rG      s   :  # " " " " " " "         ( ( ( ( ( ( * * * * * * % % % % % % $ $ $ $ $ $ = = = = = =TO TO TO TO TO=/ TO TO TO TO TOr   