Spaces:
Paused
Paused
| """ | |
| General helper functions | |
| """ | |
| import time | |
| import logging | |
| from functools import wraps | |
| from typing import Any, Dict, Optional | |
| import numpy as np | |
| logger = logging.getLogger(__name__) | |
| def timing_decorator(func): | |
| """ | |
| Decorator to measure function execution time | |
| """ | |
| def wrapper(*args, **kwargs): | |
| start_time = time.time() | |
| result = func(*args, **kwargs) | |
| end_time = time.time() | |
| execution_time = end_time - start_time | |
| logger.info(f"{func.__name__} executed in {execution_time:.2f} seconds") | |
| return result | |
| return wrapper | |
| def create_success_response(data: Any, message: str = "Success") -> Dict[str, Any]: | |
| """ | |
| Create standardized success response | |
| """ | |
| return { | |
| "status": "success", | |
| "message": message, | |
| "data": data | |
| } | |
| def create_error_response(error: str, details: Optional[str] = None) -> Dict[str, Any]: | |
| """ | |
| Create standardized error response | |
| """ | |
| response = { | |
| "status": "error", | |
| "error": error | |
| } | |
| if details: | |
| response["details"] = details | |
| return response | |
| def convert_numpy_types(obj): | |
| """ | |
| Recursively convert numpy types to native Python types for JSON serialization | |
| """ | |
| if isinstance(obj, np.bool_): | |
| return bool(obj) | |
| elif isinstance(obj, (np.int_, np.intc, np.intp, np.int8, np.int16, np.int32, np.int64)): | |
| return int(obj) | |
| elif isinstance(obj, (np.float_, np.float16, np.float32, np.float64)): | |
| return float(obj) | |
| elif isinstance(obj, np.ndarray): | |
| return obj.tolist() | |
| elif isinstance(obj, dict): | |
| return {key: convert_numpy_types(value) for key, value in obj.items()} | |
| elif isinstance(obj, (list, tuple)): | |
| return [convert_numpy_types(item) for item in obj] | |
| else: | |
| return obj |