handwriting_features.features.validation package

Module contents

class handwriting_features.features.validation.HandwritingFeaturesValidation[source]

Bases: object

Class implementing the handwriting features validation

features_settings = {'acceleration': {'arguments': {'axis': {'default': 'xy', 'mandatory': False, 'options': ('x', 'y', 'xy'), 'type': [<class 'str'>]}, 'in_air': {'default': False, 'mandatory': False, 'options': (True, False), 'type': [<class 'bool'>]}, 'statistics': {'mandatory': False, 'options': dict_keys(['mean', 'std', 'cv_parametric', 'median', 'iqr', 'cv_nonparametric', 'quartile_1', 'quartile_3', 'percentile_5', 'percentile_95', 'slope_of_linear_regression']), 'type': [<class 'str'>, <class 'list'>, <class 'tuple'>]}}, 'properties': {'is_multi_valued': True}}, 'azimuth': {'arguments': {'in_air': {'default': False, 'mandatory': False, 'options': (True, False), 'type': [<class 'bool'>]}, 'statistics': {'mandatory': False, 'options': dict_keys(['mean', 'std', 'cv_parametric', 'median', 'iqr', 'cv_nonparametric', 'quartile_1', 'quartile_3', 'percentile_5', 'percentile_95', 'slope_of_linear_regression']), 'type': [<class 'str'>, <class 'list'>, <class 'tuple'>]}}, 'properties': {'is_multi_valued': True}}, 'jerk': {'arguments': {'axis': {'default': 'xy', 'mandatory': False, 'options': ('x', 'y', 'xy'), 'type': [<class 'str'>]}, 'in_air': {'default': False, 'mandatory': False, 'options': (True, False), 'type': [<class 'bool'>]}, 'statistics': {'mandatory': False, 'options': dict_keys(['mean', 'std', 'cv_parametric', 'median', 'iqr', 'cv_nonparametric', 'quartile_1', 'quartile_3', 'percentile_5', 'percentile_95', 'slope_of_linear_regression']), 'type': [<class 'str'>, <class 'list'>, <class 'tuple'>]}}, 'properties': {'is_multi_valued': True}}, 'number_of_changes_in_azimuth': {'arguments': {'fs': {'mandatory': True, 'type': [<class 'int'>, <class 'float'>]}}, 'properties': {'is_multi_valued': False}}, 'number_of_changes_in_pressure': {'arguments': {'fs': {'mandatory': True, 'type': [<class 'int'>, <class 'float'>]}}, 'properties': {'is_multi_valued': False}}, 'number_of_changes_in_tilt': {'arguments': {'fs': {'mandatory': True, 'type': [<class 'int'>, <class 'float'>]}}, 'properties': {'is_multi_valued': False}}, 'number_of_changes_in_velocity_profile': {'arguments': {'fs': {'mandatory': True, 'type': [<class 'int'>, <class 'float'>]}}, 'properties': {'is_multi_valued': False}}, 'number_of_changes_in_x_profile': {'arguments': {'fs': {'mandatory': True, 'type': [<class 'int'>, <class 'float'>]}}, 'properties': {'is_multi_valued': False}}, 'number_of_changes_in_y_profile': {'arguments': {'fs': {'mandatory': True, 'type': [<class 'int'>, <class 'float'>]}}, 'properties': {'is_multi_valued': False}}, 'number_of_inter_stroke_intersections': {'arguments': {}, 'properties': {'is_multi_valued': False}}, 'number_of_interruptions': {'arguments': {}, 'properties': {'is_multi_valued': False}}, 'number_of_interruptions_relative': {'arguments': {}, 'properties': {'is_multi_valued': False}}, 'number_of_intra_stroke_intersections': {'arguments': {'statistics': {'mandatory': False, 'options': dict_keys(['mean', 'std', 'cv_parametric', 'median', 'iqr', 'cv_nonparametric', 'quartile_1', 'quartile_3', 'percentile_5', 'percentile_95', 'slope_of_linear_regression']), 'type': [<class 'str'>, <class 'list'>, <class 'tuple'>]}}, 'properties': {'is_multi_valued': True}}, 'pressure': {'arguments': {'statistics': {'mandatory': False, 'options': dict_keys(['mean', 'std', 'cv_parametric', 'median', 'iqr', 'cv_nonparametric', 'quartile_1', 'quartile_3', 'percentile_5', 'percentile_95', 'slope_of_linear_regression']), 'type': [<class 'str'>, <class 'list'>, <class 'tuple'>]}}, 'properties': {'is_multi_valued': True}}, 'ratio_of_stroke_durations': {'arguments': {'statistics': {'mandatory': False, 'options': dict_keys(['mean', 'std', 'cv_parametric', 'median', 'iqr', 'cv_nonparametric', 'quartile_1', 'quartile_3', 'percentile_5', 'percentile_95', 'slope_of_linear_regression']), 'type': [<class 'str'>, <class 'list'>, <class 'tuple'>]}}, 'properties': {'is_multi_valued': True}}, 'ratio_of_writing_durations': {'arguments': {}, 'properties': {'is_multi_valued': False}}, 'relative_number_of_changes_in_azimuth': {'arguments': {'fs': {'mandatory': True, 'type': [<class 'int'>, <class 'float'>]}}, 'properties': {'is_multi_valued': False}}, 'relative_number_of_changes_in_pressure': {'arguments': {'fs': {'mandatory': True, 'type': [<class 'int'>, <class 'float'>]}}, 'properties': {'is_multi_valued': False}}, 'relative_number_of_changes_in_tilt': {'arguments': {'fs': {'mandatory': True, 'type': [<class 'int'>, <class 'float'>]}}, 'properties': {'is_multi_valued': False}}, 'relative_number_of_changes_in_velocity_profile': {'arguments': {'fs': {'mandatory': True, 'type': [<class 'int'>, <class 'float'>]}}, 'properties': {'is_multi_valued': False}}, 'relative_number_of_changes_in_x_profile': {'arguments': {'fs': {'mandatory': True, 'type': [<class 'int'>, <class 'float'>]}}, 'properties': {'is_multi_valued': False}}, 'relative_number_of_changes_in_y_profile': {'arguments': {'fs': {'mandatory': True, 'type': [<class 'int'>, <class 'float'>]}}, 'properties': {'is_multi_valued': False}}, 'relative_number_of_inter_stroke_intersections': {'arguments': {}, 'properties': {'is_multi_valued': False}}, 'relative_number_of_intra_stroke_intersections': {'arguments': {'statistics': {'mandatory': False, 'options': dict_keys(['mean', 'std', 'cv_parametric', 'median', 'iqr', 'cv_nonparametric', 'quartile_1', 'quartile_3', 'percentile_5', 'percentile_95', 'slope_of_linear_regression']), 'type': [<class 'str'>, <class 'list'>, <class 'tuple'>]}}, 'properties': {'is_multi_valued': True}}, 'relative_total_number_of_intra_stroke_intersections': {'arguments': {}, 'properties': {'is_multi_valued': False}}, 'stroke_duration': {'arguments': {'in_air': {'default': False, 'mandatory': False, 'options': (True, False), 'type': [<class 'bool'>]}, 'statistics': {'mandatory': False, 'options': dict_keys(['mean', 'std', 'cv_parametric', 'median', 'iqr', 'cv_nonparametric', 'quartile_1', 'quartile_3', 'percentile_5', 'percentile_95', 'slope_of_linear_regression']), 'type': [<class 'str'>, <class 'list'>, <class 'tuple'>]}}, 'properties': {'is_multi_valued': True}}, 'stroke_height': {'arguments': {'in_air': {'default': False, 'mandatory': False, 'options': (True, False), 'type': [<class 'bool'>]}, 'statistics': {'mandatory': False, 'options': dict_keys(['mean', 'std', 'cv_parametric', 'median', 'iqr', 'cv_nonparametric', 'quartile_1', 'quartile_3', 'percentile_5', 'percentile_95', 'slope_of_linear_regression']), 'type': [<class 'str'>, <class 'list'>, <class 'tuple'>]}}, 'properties': {'is_multi_valued': True}}, 'stroke_length': {'arguments': {'in_air': {'default': False, 'mandatory': False, 'options': (True, False), 'type': [<class 'bool'>]}, 'statistics': {'mandatory': False, 'options': dict_keys(['mean', 'std', 'cv_parametric', 'median', 'iqr', 'cv_nonparametric', 'quartile_1', 'quartile_3', 'percentile_5', 'percentile_95', 'slope_of_linear_regression']), 'type': [<class 'str'>, <class 'list'>, <class 'tuple'>]}}, 'properties': {'is_multi_valued': True}}, 'stroke_width': {'arguments': {'in_air': {'default': False, 'mandatory': False, 'options': (True, False), 'type': [<class 'bool'>]}, 'statistics': {'mandatory': False, 'options': dict_keys(['mean', 'std', 'cv_parametric', 'median', 'iqr', 'cv_nonparametric', 'quartile_1', 'quartile_3', 'percentile_5', 'percentile_95', 'slope_of_linear_regression']), 'type': [<class 'str'>, <class 'list'>, <class 'tuple'>]}}, 'properties': {'is_multi_valued': True}}, 'tilt': {'arguments': {'in_air': {'default': False, 'mandatory': False, 'options': (True, False), 'type': [<class 'bool'>]}, 'statistics': {'mandatory': False, 'options': dict_keys(['mean', 'std', 'cv_parametric', 'median', 'iqr', 'cv_nonparametric', 'quartile_1', 'quartile_3', 'percentile_5', 'percentile_95', 'slope_of_linear_regression']), 'type': [<class 'str'>, <class 'list'>, <class 'tuple'>]}}, 'properties': {'is_multi_valued': True}}, 'total_number_of_intra_stroke_intersections': {'arguments': {}, 'properties': {'is_multi_valued': False}}, 'velocity': {'arguments': {'axis': {'default': 'xy', 'mandatory': False, 'options': ('x', 'y', 'xy'), 'type': [<class 'str'>]}, 'in_air': {'default': False, 'mandatory': False, 'options': (True, False), 'type': [<class 'bool'>]}, 'statistics': {'mandatory': False, 'options': dict_keys(['mean', 'std', 'cv_parametric', 'median', 'iqr', 'cv_nonparametric', 'quartile_1', 'quartile_3', 'percentile_5', 'percentile_95', 'slope_of_linear_regression']), 'type': [<class 'str'>, <class 'list'>, <class 'tuple'>]}}, 'properties': {'is_multi_valued': True}}, 'vertical_peaks_distance': {'arguments': {'fs': {'mandatory': True, 'type': [<class 'int'>, <class 'float'>]}, 'statistics': {'mandatory': False, 'options': dict_keys(['mean', 'std', 'cv_parametric', 'median', 'iqr', 'cv_nonparametric', 'quartile_1', 'quartile_3', 'percentile_5', 'percentile_95', 'slope_of_linear_regression']), 'type': [<class 'str'>, <class 'list'>, <class 'tuple'>]}}, 'properties': {'is_multi_valued': True}}, 'vertical_peaks_duration': {'arguments': {'fs': {'mandatory': True, 'type': [<class 'int'>, <class 'float'>]}, 'statistics': {'mandatory': False, 'options': dict_keys(['mean', 'std', 'cv_parametric', 'median', 'iqr', 'cv_nonparametric', 'quartile_1', 'quartile_3', 'percentile_5', 'percentile_95', 'slope_of_linear_regression']), 'type': [<class 'str'>, <class 'list'>, <class 'tuple'>]}}, 'properties': {'is_multi_valued': True}}, 'vertical_peaks_indices': {'arguments': {'fs': {'mandatory': True, 'type': [<class 'int'>, <class 'float'>]}, 'statistics': {'mandatory': False, 'options': dict_keys(['mean', 'std', 'cv_parametric', 'median', 'iqr', 'cv_nonparametric', 'quartile_1', 'quartile_3', 'percentile_5', 'percentile_95', 'slope_of_linear_regression']), 'type': [<class 'str'>, <class 'list'>, <class 'tuple'>]}}, 'properties': {'is_multi_valued': True}}, 'vertical_peaks_values': {'arguments': {'fs': {'mandatory': True, 'type': [<class 'int'>, <class 'float'>]}, 'statistics': {'mandatory': False, 'options': dict_keys(['mean', 'std', 'cv_parametric', 'median', 'iqr', 'cv_nonparametric', 'quartile_1', 'quartile_3', 'percentile_5', 'percentile_95', 'slope_of_linear_regression']), 'type': [<class 'str'>, <class 'list'>, <class 'tuple'>]}}, 'properties': {'is_multi_valued': True}}, 'vertical_peaks_velocity': {'arguments': {'fs': {'mandatory': True, 'type': [<class 'int'>, <class 'float'>]}, 'statistics': {'mandatory': False, 'options': dict_keys(['mean', 'std', 'cv_parametric', 'median', 'iqr', 'cv_nonparametric', 'quartile_1', 'quartile_3', 'percentile_5', 'percentile_95', 'slope_of_linear_regression']), 'type': [<class 'str'>, <class 'list'>, <class 'tuple'>]}}, 'properties': {'is_multi_valued': True}}, 'vertical_valleys_distance': {'arguments': {'fs': {'mandatory': True, 'type': [<class 'int'>, <class 'float'>]}, 'statistics': {'mandatory': False, 'options': dict_keys(['mean', 'std', 'cv_parametric', 'median', 'iqr', 'cv_nonparametric', 'quartile_1', 'quartile_3', 'percentile_5', 'percentile_95', 'slope_of_linear_regression']), 'type': [<class 'str'>, <class 'list'>, <class 'tuple'>]}}, 'properties': {'is_multi_valued': True}}, 'vertical_valleys_duration': {'arguments': {'fs': {'mandatory': True, 'type': [<class 'int'>, <class 'float'>]}, 'statistics': {'mandatory': False, 'options': dict_keys(['mean', 'std', 'cv_parametric', 'median', 'iqr', 'cv_nonparametric', 'quartile_1', 'quartile_3', 'percentile_5', 'percentile_95', 'slope_of_linear_regression']), 'type': [<class 'str'>, <class 'list'>, <class 'tuple'>]}}, 'properties': {'is_multi_valued': True}}, 'vertical_valleys_indices': {'arguments': {'fs': {'mandatory': True, 'type': [<class 'int'>, <class 'float'>]}, 'statistics': {'mandatory': False, 'options': dict_keys(['mean', 'std', 'cv_parametric', 'median', 'iqr', 'cv_nonparametric', 'quartile_1', 'quartile_3', 'percentile_5', 'percentile_95', 'slope_of_linear_regression']), 'type': [<class 'str'>, <class 'list'>, <class 'tuple'>]}}, 'properties': {'is_multi_valued': True}}, 'vertical_valleys_values': {'arguments': {'fs': {'mandatory': True, 'type': [<class 'int'>, <class 'float'>]}, 'statistics': {'mandatory': False, 'options': dict_keys(['mean', 'std', 'cv_parametric', 'median', 'iqr', 'cv_nonparametric', 'quartile_1', 'quartile_3', 'percentile_5', 'percentile_95', 'slope_of_linear_regression']), 'type': [<class 'str'>, <class 'list'>, <class 'tuple'>]}}, 'properties': {'is_multi_valued': True}}, 'vertical_valleys_velocity': {'arguments': {'fs': {'mandatory': True, 'type': [<class 'int'>, <class 'float'>]}, 'statistics': {'mandatory': False, 'options': dict_keys(['mean', 'std', 'cv_parametric', 'median', 'iqr', 'cv_nonparametric', 'quartile_1', 'quartile_3', 'percentile_5', 'percentile_95', 'slope_of_linear_regression']), 'type': [<class 'str'>, <class 'list'>, <class 'tuple'>]}}, 'properties': {'is_multi_valued': True}}, 'writing_duration': {'arguments': {'in_air': {'default': False, 'mandatory': False, 'options': (True, False), 'type': [<class 'bool'>]}}, 'properties': {'is_multi_valued': False}}, 'writing_duration_overall': {'arguments': {}, 'properties': {'is_multi_valued': False}}, 'writing_height': {'arguments': {'in_air': {'default': False, 'mandatory': False, 'options': (True, False), 'type': [<class 'bool'>]}}, 'properties': {'is_multi_valued': False}}, 'writing_length': {'arguments': {'in_air': {'default': False, 'mandatory': False, 'options': (True, False), 'type': [<class 'bool'>]}}, 'properties': {'is_multi_valued': False}}, 'writing_stops': {'arguments': {'statistics': {'mandatory': False, 'options': dict_keys(['mean', 'std', 'cv_parametric', 'median', 'iqr', 'cv_nonparametric', 'quartile_1', 'quartile_3', 'percentile_5', 'percentile_95', 'slope_of_linear_regression']), 'type': [<class 'str'>, <class 'list'>, <class 'tuple'>]}}, 'properties': {'is_multi_valued': True}}, 'writing_tempo': {'arguments': {'in_air': {'default': False, 'mandatory': False, 'options': (True, False), 'type': [<class 'bool'>]}}, 'properties': {'is_multi_valued': False}}, 'writing_width': {'arguments': {'in_air': {'default': False, 'mandatory': False, 'options': (True, False), 'type': [<class 'bool'>]}}, 'properties': {'is_multi_valued': False}}}
classmethod validate(feature_name, feature_args=None, skip_validation=())[source]

Validate the feature arguments.

Parameters
  • feature_name (str) – feature name

  • feature_args (dict, optional) – feature arguments, defaults to None

  • skip_validation (Any[list, tuple], optional) – skip validation for args names, defaults to ()

Returns

validated feature arguments

Return type

dict