HYPERDOA / hyperdoa /utils.py
pwh9882's picture
initial commit
37ed720
"""
Utility functions for HYPERDOA.
This module provides common utilities for reproducibility and device management.
"""
import random
import numpy as np
import torch
# Constants for angle conversion
R2D = 180.0 / np.pi # Radians to degrees
D2R = np.pi / 180.0 # Degrees to radians
def set_seed(seed: int = 42) -> None:
"""Set random seed for reproducibility across all libraries.
Sets seeds for Python's random module, NumPy, and PyTorch (including CUDA).
Args:
seed: Random seed value
Example:
>>> set_seed(42)
>>> np.random.rand() # Will always produce the same value
"""
random.seed(seed)
np.random.seed(seed)
torch.manual_seed(seed)
if torch.cuda.is_available():
torch.cuda.manual_seed(seed)
torch.cuda.manual_seed_all(seed)
def get_device(device: str = None) -> torch.device:
"""Get compute device for PyTorch operations.
Args:
device: Device string ("cuda", "cpu", or None for auto-detect)
Returns:
torch.device object
Example:
>>> device = get_device() # Auto-detect
>>> device = get_device("cpu") # Force CPU
"""
if device is None:
return torch.device("cuda" if torch.cuda.is_available() else "cpu")
return torch.device(device)