Source code for pvcracks.powerloss.powerloss_functions

# -*- coding: utf-8 -*-
"""
Created on Mon Aug  7 12:04:49 2023

@authors: nrjost
"""

import pickle
import numpy as np
import pandas as pd

[docs]def load_xgb_models( pmpp_model_path: str = "xgb_model_pmpp_diff_percent_3CH.pkl", voc_model_path: str = "xgb_model_Voc_diff_percent_3CH.pkl" ): """ Load two XGBoost models from disk: - A model trained on pmpp_diff_% (power loss %) - A model trained on Voc_diff_% Parameters ---------- pmpp_model_path : str Path to the pickle file for the pmpp_diff_% model. voc_model_path : str Path to the pickle file for the Voc_diff_% model. Returns ------- pmpp_model, voc_model : xgboost.XGBRegressor The loaded XGBRegressor models. """ with open(pmpp_model_path, "rb") as f: pmpp_model = pickle.load(f) with open(voc_model_path, "rb") as f: voc_model = pickle.load(f) return pmpp_model, voc_model
[docs]def predict_power_and_voc( latent_vectors, pmpp_model, voc_model ) -> pd.DataFrame: """ Given latent vectors, predict: - power loss (%) using the pmpp model - Voc difference (%) using the Voc model Parameters ---------- latent_vectors : array-like Either - a 2D numpy array of shape (n_samples, latent_dim), or - a 1D object-dtype numpy array / list of 1D arrays (each of length latent_dim) pmpp_model : xgboost.XGBRegressor Loaded model for pmpp_diff_%. voc_model : xgboost.XGBRegressor Loaded model for Voc_diff_%. Returns ------- results : pandas.DataFrame DataFrame with columns: - "power_loss_%" - "Voc_diff_%" and one row per input latent vector. """ # Convert to numpy array X = np.array(latent_vectors) # If object-dtype (e.g. array of arrays), stack into a 2D array if X.dtype == object: X = np.vstack(X) if X.ndim != 2: raise ValueError( f"Expected latent_vectors to be 2D or object-dtype array of 1D vectors; got shape {X.shape}" ) # Make predictions power_loss_preds = pmpp_model.predict(X) voc_diff_preds = voc_model.predict(X) # Pack into DataFrame results = pd.DataFrame({ "power_loss_%": power_loss_preds, "Voc_diff_%": voc_diff_preds }) return results