Coverage for foxplot / hot_series.py: 88%

24 statements  

« prev     ^ index     » next       coverage.py v7.14.0, created at 2026-05-15 10:53 +0000

1#!/usr/bin/env python3 

2# -*- coding: utf-8 -*- 

3# 

4# SPDX-License-Identifier: Apache-2.0 

5 

6"""Series data unpacked from input dictionaries.""" 

7 

8from typing import Any, Dict 

9 

10import numpy as np 

11 

12from .labeled_series import LabeledSeries 

13from .series import Series 

14 

15 

16class HotSeries(LabeledSeries): 

17 """Indexed time-series in which we can still insert values. 

18 

19 Internally, this datastructure maps time indexes (the corresponding times 

20 themselves are stored in a different list) to values. 

21 """ 

22 

23 __indexed_values: Dict[int, Any] 

24 

25 def __init__(self, label: str): 

26 """Initialize a new indexed series. 

27 

28 Args: 

29 label: Label of the series in the input data. 

30 """ 

31 super().__init__(label) 

32 self.__indexed_values = {} 

33 

34 def __len__(self): 

35 """Length of the indexed series.""" 

36 return len(self.__indexed_values) 

37 

38 def __repr__(self): 

39 """String representation of the series.""" 

40 values = list(self.__indexed_values.values()) 

41 return f"Time series with values: {values}" 

42 

43 def _update(self, index: int, value: Any) -> None: 

44 """Update the value at a given time index. 

45 

46 Args: 

47 index: Time index. 

48 value: New value. 

49 """ 

50 self.__indexed_values[index] = value 

51 

52 def _freeze(self, max_index: int) -> Series: 

53 """Get indexed series as a list of values. 

54 

55 Args: 

56 max_index: The output list will range from 0 (first time from the 

57 input) to this maximum index (excluded). 

58 

59 Returns: 

60 Indexed series as a list of values. 

61 """ 

62 last_value = None 

63 values = [] 

64 for index in range(max_index): 

65 last_value = self.__indexed_values.get(index, last_value) 

66 values.append(last_value) 

67 array = ( 

68 np.array(values, dtype=np.float64) 

69 if isinstance(last_value, (int, float)) 

70 else np.array(values) 

71 ) 

72 return Series(label=self._label, values=array, times=None)