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
« 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
13def convert_mat_to_suffix(mat_result_file, variable_names, suffix_files, parquet_engine='pyarrow'):
14 """
15 Postprocess the mat result files.
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
33def empty_postprocessing(mat_result, **_kwargs):
34 return mat_result
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
55class MaxIterationsReached(Exception):
56 """
57 Exception raised for when the calibration
58 ends because the maximum number of
59 allowed iterations is reached.
60 """
63class MaxTimeReached(Exception):
64 """
65 Exception raised for when the calibration
66 ends because the maximum calibration time is reached.
67 """