print(sum([1, 2, 3, 4, 5]))

print(sum([]))


# Use a list
print(sum([1, 2, 3, 4, 5]))


# Use a tuple
print(sum((1, 2, 3, 4, 5)))


# Use a set
print(sum({1, 2, 3, 4, 5}))


# Use a range
print(sum(range(1, 6)))
print(sum(range(10)))
print(sum(range(10), 10))


# Use a dictionary
print(sum({1: "one", 2: "two", 3: "three"}))

print(sum({1: "one", 2: "two", 3: "three"}.keys()))


print(sum([x ** 2 for x in range(1, 6)]))


print(sum([1, 2, 3, 4, 5], 100))  # Positional argument

print(sum([1, 2, 3, 4, 5], start=100))  # Keyword argument


from decimal import Decimal
from fractions import Fraction

# Sum floating-point numbers
print(sum([10.2, 12.5, 11.8]))

print(sum([10.2, 12.5, 11.8, float("inf")]))

print(sum([10.2, 12.5, 11.8, float("nan")]))


# Sum complex numbers
print(sum([3 + 2j, 5 + 6j]))


# Sum Decimal numbers
print(sum([Decimal("10.2"), Decimal("12.5"), Decimal("11.8")]))


# Sum Fraction numbers
print(sum([Fraction(51, 5), Fraction(25, 2), Fraction(59, 5)]))


from math import fsum

print(sum([0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]))

print(fsum([0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]))

print(sum([0.1, 0.2]))

print(fsum([0.1, 0.2]))

print(f"{0.1:.28f}")

print(f"{0.2:.28f}")

print(sum([1e-16, 1, 1e16]))
print(fsum([1e-16, 1, 1e16]))

print(sum([1, 1, 1e100, -1e100] * 10_000))
print(fsum([1, 1, 1e100, -1e100] * 10_000))


lst = [[1, 2, 3], [4, 5], [6]]
print(sum(lst, []))  # [1, 2, 3, 4, 5, 6]


cumulative_sales = 0

monday = [50, 27, 42]
cumulative_sales = sum(monday, start=cumulative_sales)
print(cumulative_sales)


tuesday = [12, 32, 15]
cumulative_sales = sum(tuesday, start=cumulative_sales)
print(cumulative_sales)


wednesday = [20, 24, 42]
cumulative_sales = sum(wednesday, start=cumulative_sales)
print(cumulative_sales)


def average(data_points):
    if (num_points := len(data_points)) == 0:
        raise ValueError("average requires at least one data point")
    return sum(data_points) / num_points


print(average([2, 3, 4, 2, 3, 6, 4, 2]))


x_vector = (1, 2, 3)
y_vector = (4, 5, 6)

print(sum(x * y for x, y in zip(x_vector, y_vector)))
