Coverage for aixcalibuha/utils/__init__.py: 61%

28 statements  

« prev     ^ index     » next       coverage.py v7.4.4, created at 2026-04-30 14:23 +0000

1""" 

2Package containing utility functions used in different packages. 

3Contains a statistics analyzer and a visualizer. 

4""" 

5import os 

6from typing import Union, List 

7from pathlib import Path 

8from aixcalibuha import CalibrationClass 

9from ebcpy import load_time_series_data 

10import pandas as pd 

11 

12 

13def convert_mat_to_suffix(mat_result_file, variable_names, suffix_files, parquet_engine='pyarrow'): 

14 """ 

15 Postprocess the mat result files. 

16 

17 :param str mat_result_file: The path to the MATLAB result file. 

18 :param List[str] variable_names: The names of the variables to extract. 

19 :param str suffix_files: The file format for the output files. 

20 Options: 'csv', 'parquet', 'parquet.snappy', 'parquet.gzip', etc. 

21 :param str parquet_engine: The engine to use for saving parquet files. 

22 """ 

23 df = load_time_series_data(mat_result_file, variable_names=variable_names) 

24 for col in df.columns: 

25 if isinstance(df[col].dtype, pd.SparseDtype): 

26 df[col] = df[col].sparse.to_dense() 

27 df_path = Path(mat_result_file).with_suffix("." + suffix_files) 

28 df.tsd.save(df_path, engine=parquet_engine) 

29 os.remove(mat_result_file) 

30 return df_path 

31 

32 

33def empty_postprocessing(mat_result, **_kwargs): 

34 return mat_result 

35 

36 

37def validate_cal_class_input( 

38 calibration_classes: Union[CalibrationClass, List[CalibrationClass]] 

39) -> List[CalibrationClass]: 

40 """Check if given list contains only CalibrationClass objects or is one 

41 and return a list in both cases. Else raise an error""" 

42 if isinstance(calibration_classes, list): 

43 for cal_class in calibration_classes: 

44 if not isinstance(cal_class, CalibrationClass): 

45 raise TypeError(f"calibration_classes is of type {type(cal_class).__name__} " 

46 f"but should be CalibrationClass") 

47 elif isinstance(calibration_classes, CalibrationClass): 

48 calibration_classes = [calibration_classes] 

49 else: 

50 raise TypeError(f"calibration_classes is of type {type(calibration_classes).__name__} " 

51 f"but should be CalibrationClass or list") 

52 return calibration_classes 

53 

54 

55class MaxIterationsReached(Exception): 

56 """ 

57 Exception raised for when the calibration 

58 ends because the maximum number of 

59 allowed iterations is reached. 

60 """ 

61 

62 

63class MaxTimeReached(Exception): 

64 """ 

65 Exception raised for when the calibration 

66 ends because the maximum calibration time is reached. 

67 """