npv2k1's picture
feat: enhance development setup with Black and Ruff configuration, update README, and remove unused loader module
696363c
Raw
History Blame Contribute Delete
1.53 kB
"""Mathematical utility functions."""
from typing import List, Union
Number = Union[int, float]
def calculate_mean(numbers: List[Number]) -> float:
"""Calculate the arithmetic mean of a list of numbers.
Args:
numbers: A list of integers or floating point numbers
Returns:
float: The arithmetic mean of the input numbers
Raises:
ValueError: If the input list is empty
TypeError: If any element is not a number
"""
if not numbers:
raise ValueError("Cannot calculate mean of empty list")
if not all(isinstance(x, (int, float)) for x in numbers):
raise TypeError("All elements must be numbers")
return sum(numbers) / len(numbers)
def calculate_median(numbers: List[Number]) -> float:
"""Calculate the median value from a list of numbers.
Args:
numbers: A list of integers or floating point numbers
Returns:
float: The median value of the input numbers
Raises:
ValueError: If the input list is empty
TypeError: If any element is not a number
"""
if not numbers:
raise ValueError("Cannot calculate median of empty list")
if not all(isinstance(x, (int, float)) for x in numbers):
raise TypeError("All elements must be numbers")
sorted_numbers = sorted(numbers)
length = len(sorted_numbers)
if length % 2 == 0:
mid = length // 2
return (sorted_numbers[mid - 1] + sorted_numbers[mid]) / 2
else:
return sorted_numbers[length // 2]