          tuple
              (`hours`, `minutes`, `seconds`) as ints
          """
          hrs = int(timestamp // 3600)
          if hrs < 10:
              hrs = f"{hrs:02d}"
          mins = f"{(int(timestamp % 3600) // 60):02d}"
          secs = f"{(int(timestamp % 3600) % 60):02d}"
          return hrs, mins, secs
  
  
 
</s> remove             (`hours`, `minutes`, `seconds`) as ints
 </s> add             (`hours`, `minutes`, `seconds`) as strings </s> remove     def _ewma_vectorized_safe(self):
 </s> add     def _ewma_vectorized_safe(self) -> None: </s> remove         raise ValueError("Invalid log level: %s" % loglevel)
 </s> add         raise ValueError(f"Invalid log level: {loglevel}") </s> remove         mean = np.mean(data)
        limit = np.std(data)
 </s> add         mean = np.mean(np.nan_to_num(data))
        limit = np.std(np.nan_to_num(data))
        hrs = f"{hrs:02d}" if hrs < 10 else str(hrs)
          tuple
              (`hours`, `minutes`, `seconds`) as ints
          """
          hrs = int(timestamp // 3600)
        hrs = f"{hrs:02d}" if hrs < 10 else str(hrs)
        hrs = f"{hrs:02d}" if hrs < 10 else str(hrs)
          mins = f"{(int(timestamp % 3600) // 60):02d}"
          secs = f"{(int(timestamp % 3600) % 60):02d}"
          return hrs, mins, secs
  
  
keep keep keep keep replace replace keep keep keep keep keep
 Bugfixes:
  - Stats graph - Handle NaNs in data
  - logger - de-elevate matplotlib font messages 
lib/gui/analysis/stats.py