A weather station sends its readings as one long list. Each hour it records the same measurements in the same order (say temperature, humidity, then wind), and then the next hour's measurements follow straight after.
n_features says how many measurements make up one hour. If the station lost power part-way through an hour, the list ends with a few leftover values that don't make a complete hour. Ignore those leftovers.
Task: write feature_ranges(stream, n_features). Lay the complete hours out as a table with one row per hour and one column per measurement, then return a dict:
"samples" — how many complete hours there are,"ranges" — for each measurement, in column order, its largest value minus its smallest value, rounded to 2 decimal places.There is always at least one complete hour.