"""
Compute trimmed mean by removing a proportion 
of values from each end after sorting
"""

# Example data
my_data = [22, 25, 29, 11, 14, 18, 13, 13, 17, 11, 8, 7, 12, 15, 6, 8, 7, 9, 12] #19 elements in list (n=19)
p = 0.1 # proportion to cut from each end (0.1 or 10%)

# Pure Python trimmed mean example

def trimmed_mean_pure(data, proportiontocut=0.1): 
    data_sorted = sorted(data)
    n = len(data_sorted)
    k = int(n * proportiontocut)  # how many to drop from each side
    if 2 * k >= n: # avoid empty slice / divide-by-zero
        return float("nan")
    middle = data_sorted[k:n - k] # drop k values from the start and k from the end, keep the rest
    return sum(middle) / len(middle)

tm_pure = trimmed_mean_pure(my_data, p)
print("Pure Python trimmed mean (10% each tail):", tm_pure)


# scipy example

from scipy import stats
tm_scipy = stats.trim_mean(my_data, p)
print("SciPy trimmed mean (10% each tail):", tm_scipy)
