Spaces:
Sleeping
Sleeping
| """Utility functions for MelanoScope AI.""" | |
| import logging | |
| from typing import List, Any | |
| import numpy as np | |
| import pandas as pd | |
| from ..config.settings import ModelConfig | |
| logger = logging.getLogger(__name__) | |
| def probabilities_to_ints(probabilities: np.ndarray, total_sum: int = ModelConfig.PROBABILITY_SUM) -> np.ndarray: | |
| """Convert probabilities to integers that sum to total_sum.""" | |
| try: | |
| probabilities = np.array(probabilities) | |
| positive_values = np.maximum(probabilities, 0) | |
| total_positive = positive_values.sum() | |
| if total_positive == 0: | |
| return np.zeros_like(probabilities, dtype=int) | |
| scaled = positive_values / total_positive * total_sum | |
| rounded = np.round(scaled).astype(int) | |
| # Fix rounding errors | |
| diff = total_sum - rounded.sum() | |
| if diff != 0: | |
| max_idx = int(np.argmax(positive_values)) | |
| rounded = rounded.flatten() | |
| rounded[max_idx] += diff | |
| rounded = rounded.reshape(scaled.shape) | |
| return rounded | |
| except Exception as e: | |
| logger.error(f"Error converting probabilities: {e}") | |
| raise ValueError(f"Invalid probability values: {e}") | |
| def create_empty_dataframe(classes: List[str]) -> pd.DataFrame: | |
| """Create empty probability dataframe.""" | |
| return pd.DataFrame({"item": classes, "probability": [0] * len(classes)}) | |
| def format_confidence(probability: float, precision: int = ModelConfig.PROBABILITY_PRECISION) -> str: | |
| """Format probability as percentage string.""" | |
| try: | |
| return f"{probability * 100:.{precision}f}%" | |
| except Exception as e: | |
| logger.error(f"Error formatting confidence: {e}") | |
| return "0.0%" | |