Coverage for aixcalibuha/utils/__init__.py: 33%
33 statements
« prev ^ index » next coverage.py v7.4.4, created at 2026-04-20 14:06 +0000
« prev ^ index » next coverage.py v7.4.4, created at 2026-04-20 14:06 +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 TimeSeriesData
10import pandas as pd
13def convert_mat_to_suffix(mat_result_file, variable_names, suffix_files, parquet_engine='pyarrow', compression='snappy'):
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 suffix for the output files.
20 :param str parquet_engine: The engine to use for saving parquet files.
21 """
22 df = TimeSeriesData(mat_result_file, variable_names=variable_names).to_df()
23 df_path = Path(mat_result_file).with_suffix("." + suffix_files)
24 if suffix_files == "csv":
25 df.to_csv(df_path)
26 elif suffix_files == "parquet":
27 df_for_disk = df.copy()
28 for col in df_for_disk.columns:
29 if isinstance(df_for_disk[col].dtype, pd.SparseDtype):
30 df_for_disk[col] = df_for_disk[col].sparse.to_dense()
31 df.to_parquet(
32 df_path,
33 engine=parquet_engine,
34 compression=compression,
35 index=True
36 )
37 else:
38 raise ValueError(f"Unsupported file suffix: {suffix_files}. "
39 "Supported suffixes are 'csv' and 'parquet'.")
40 os.remove(mat_result_file)
41 return df_path
44def empty_postprocessing(mat_result, **_kwargs):
45 return mat_result
48def validate_cal_class_input(
49 calibration_classes: Union[CalibrationClass, List[CalibrationClass]]
50) -> List[CalibrationClass]:
51 """Check if given list contains only CalibrationClass objects or is one
52 and return a list in both cases. Else raise an error"""
53 if isinstance(calibration_classes, list):
54 for cal_class in calibration_classes:
55 if not isinstance(cal_class, CalibrationClass):
56 raise TypeError(f"calibration_classes is of type {type(cal_class).__name__} "
57 f"but should be CalibrationClass")
58 elif isinstance(calibration_classes, CalibrationClass):
59 calibration_classes = [calibration_classes]
60 else:
61 raise TypeError(f"calibration_classes is of type {type(calibration_classes).__name__} "
62 f"but should be CalibrationClass or list")
63 return calibration_classes
66class MaxIterationsReached(Exception):
67 """
68 Exception raised for when the calibration
69 ends because the maximum number of
70 allowed iterations is reached.
71 """
73class MaxTimeReached(Exception):
74 """
75 Exception raised for when the calibration
76 ends because the maximum calibration time is reached.
77 """