Source code for desdeo_tools.interaction.validators

import pandas as pd


class ValidationError(Exception):
    """Raised when an error related to the validation is encountered.
    """


[docs]def validate_ref_point_with_ideal_and_nadir( dimensions_data: pd.DataFrame, reference_point: pd.DataFrame ): validate_ref_point_dimensions(dimensions_data, reference_point) validate_ref_point_data_type(reference_point) validate_ref_point_with_ideal(dimensions_data, reference_point) validate_with_ref_point_nadir(dimensions_data, reference_point)
[docs]def validate_ref_point_with_ideal( dimensions_data: pd.DataFrame, reference_point: pd.DataFrame ): validate_ref_point_dimensions(dimensions_data, reference_point) ideal_fitness = dimensions_data.loc["ideal"] * dimensions_data.loc["minimize"] ref_point_fitness = reference_point * dimensions_data.loc["minimize"] if not (ideal_fitness <= ref_point_fitness).all(axis=None): problematic_columns = ideal_fitness.index[ (ideal_fitness > ref_point_fitness).values.tolist()[0] ].values msg = ( f"Reference point should be worse than or equal to the ideal point\n" f"The following columns have problematic values: {problematic_columns}" ) raise ValidationError(msg)
[docs]def validate_with_ref_point_nadir( dimensions_data: pd.DataFrame, reference_point: pd.DataFrame ): validate_ref_point_dimensions(dimensions_data, reference_point) nadir_fitness = dimensions_data.loc["nadir"] * dimensions_data.loc["minimize"] ref_point_fitness = reference_point * dimensions_data.loc["minimize"] if not (ref_point_fitness <= nadir_fitness).all(axis=None): problematic_columns = nadir_fitness.index[ (nadir_fitness < ref_point_fitness).values.tolist()[0] ].values msg = ( f"Reference point should be better than or equal to the nadir point\n" f"The following columns have problematic values: {problematic_columns}" ) raise ValidationError(msg)
[docs]def validate_ref_point_dimensions( dimensions_data: pd.DataFrame, reference_point: pd.DataFrame ): if not dimensions_data.shape[1] == reference_point.shape[1]: msg = ( f"There is a mismatch in the number of columns of the dataframes.\n" f"Columns in dimensions data: {dimensions_data.columns}\n" f"Columns in the reference point provided: {reference_point.columns}" ) raise ValidationError(msg) if not all(dimensions_data.columns == reference_point.columns): msg = ( f"There is a mismatch in the column names of the dataframes.\n" f"Columns in dimensions data: {dimensions_data.columns}\n" f"Columns in the reference point provided: {reference_point.columns}" ) raise ValidationError(msg)
[docs]def validate_ref_point_data_type(reference_point: pd.DataFrame): for dtype in reference_point.dtypes: if not ((dtype == int) or (dtype == float)): msg = ( f"Type of data in reference point dataframe should be int or float.\n" f"Provided datatype: {dtype}" ) raise ValidationError(msg)