
    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 )zGeneric transformer utilities for MySQL Connector/Python.

Provides a scikit-learn compatible Transformer using HeatWave for fit/transform
and scoring operations.
    )OptionalUnionN)TransformerMixin)MyBaseMLModel)ML_TASK)	copy_dict)MySQLConnectionAbstractc                      e Zd ZdZej        dddddfdedeeef         dede	e         de	e
         d	e	e
         d
e	e
         fdZdej        dej        fdZdeej        ej        f         deej        ej        f         defdZdS )MyGenericTransformera  
    MySQL HeatWave scikit-learn compatible generic transformer.

    Can be used as the transformation step in an sklearn pipeline. Implements fit, transform,
    explain, and scoring capability, passing options for server-side transform logic.

    Args:
        db_connection (MySQLConnectionAbstract): Active MySQL connector database connection.
        task (str): ML task type for transformer (default: "classification").
        score_metric (str): Scoring metric to request from backend (default: "balanced_accuracy").
        model_name (str, optional): Custom name for the deployed model.
        fit_extra_options (dict, optional): Extra fit options.
        transform_extra_options (dict, optional): Extra options for transformations.
        score_extra_options (dict, optional): Extra options for scoring.

    Attributes:
        score_metric (str): Name of the backend metric to use for scoring
            (e.g. "balanced_accuracy").
        score_extra_options (dict): Dictionary of optional scoring parameters;
            passed to backend score.
        transform_extra_options (dict): Dictionary of inference (/predict)
            parameters for the backend.
        fit_extra_options (dict): See MyBaseMLModel.
        _model (MyModel): Underlying interface for database model operations.

    Methods:
        fit(X, y): Fit the underlying model using the provided features/targets.
        transform(X): Transform features using the backend model.
        score(X, y): Score data using backend metric and options.
    balanced_accuracyNdb_connectiontaskscore_metric
model_namefit_extra_optionstransform_extra_optionsscore_extra_optionsc                     t          j        | ||||           || _        t          |          | _        t          |          | _        dS )a  
        Initialize transformer with required and optional arguments.

        Args:
            db_connection: Active MySQL backend database connection.
            task: ML task type for transformer.
            score_metric: Requested backend scoring metric.
            model_name: Optional model name for storage.
            fit_extra_options: Optional extra options for fitting.
            transform_extra_options: Optional extra options for transformation/inference.
            score_extra_options: Optional extra scoring options.

        Raises:
            DatabaseError:
                If a database connection issue occurs.
                If an operational error occurs during execution.
        )r   r   N)r   __init__r   r   r   r   )selfr   r   r   r   r   r   r   s           S/var/www/html/analyses/venv/lib/python3.11/site-packages/mysql/ai/ml/transformer.pyr   zMyGenericTransformer.__init__M   s_    6 	!/	
 	
 	
 	
 )#,-@#A#A '01H'I'I$$$    Xreturnc                 D    | j                             || j                  S )aP  
        Transform input data to model predictions using the underlying helper.

        Args:
            X: DataFrame of features to predict/transform.

        Returns:
            pd.DataFrame: Results of transformation as returned by backend.

        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)_modelpredictr   )r   r   s     r   	transformzMyGenericTransformer.transformu   s"    ( {""1d.J"KKKr   yc                 R    | j                             ||| j        | j                  S )aK  
        Score the transformed data using the backend scoring interface.

        Args:
            X: Transformed features.
            y: Target labels or data for scoring.

        Returns:
            float: Score based on backend metric.

        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   )r   scorer   r   )r   r   r!   s      r   r#   zMyGenericTransformer.score   s2    . {  q$#T-E ! 
 
 	
r   )__name__
__module____qualname____doc__r   CLASSIFICATIONr	   r   strr   dictr   pd	DataFramer    npndarrayfloatr#    r   r   r   r   -   s3        D %,$:/$(,026.2&J &J.&J CL!&J 	&J
 SM&J $D>&J "*$&J &d^&J &J &J &JPLL	L L L L,
rz)*
 rz)*
 
	
 
 
 
 
 
r   r   )r'   typingr   r   numpyr-   pandasr+   sklearn.baser   mysql.ai.ml.baser   mysql.ai.ml.modelr   mysql.ai.utilsr   mysql.connector.abstractsr	   r   r0   r   r   <module>r9      s   8 
 # " " " " " " "         ) ) ) ) ) ) * * * * * * % % % % % % $ $ $ $ $ $ = = = = = =w
 w
 w
 w
 w
=*: w
 w
 w
 w
 w
r   