Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 72 additions & 0 deletions math_utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
"""
Basic mathematical calculations utility module.

Resolves: https://github.com/rwtamCaltech/PhasenetGaMMaLocalTestScripts/issues/4
"""

import math


def add(a, b):
"""Return the sum of a and b."""
return a + b


def subtract(a, b):
"""Return the difference of a minus b."""
return a - b


def multiply(a, b):
"""Return the product of a and b."""
return a * b


def divide(a, b):
"""Return a divided by b.

Raises ValueError if b is zero.
"""
if b == 0:
raise ValueError("Cannot divide by zero.")
return a / b


def power(base, exp):
"""Return base raised to the power of exp."""
return base ** exp


def square_root(n):
"""Return the square root of n.

Raises ValueError if n is negative.
"""
if n < 0:
raise ValueError("Cannot compute square root of a negative number.")
return math.sqrt(n)


def mean(values):
"""Return the arithmetic mean of a non-empty list of numbers.

Raises ValueError if values is empty.
"""
if not values:
raise ValueError("Cannot compute mean of an empty list.")
return sum(values) / len(values)


def median(values):
"""Return the median of a non-empty list of numbers.

Raises ValueError if values is empty.
"""
if not values:
raise ValueError("Cannot compute median of an empty list.")
sorted_vals = sorted(values)
n = len(sorted_vals)
mid = n // 2
if n % 2 == 1:
return sorted_vals[mid]
return (sorted_vals[mid - 1] + sorted_vals[mid]) / 2