"""Lempel-Ziv complexity module.""" """ This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ __author__ = "Théo de la Hogue" __credits__ = [] __copyright__ = "Copyright 2023, Ecole Nationale de l'Aviation Civile (ENAC)" __license__ = "GPLv3" from argaze import GazeFeatures, DataFeatures from lempel_ziv_complexity import lempel_ziv_complexity class AOIScanPathAnalyzer(GazeFeatures.AOIScanPathAnalyzer): """Implementation of Lempel-Ziv complexity algorithm as described in: **Lounis C., Peysakhovich V., Causse M. (2020).** *Lempel-Ziv Complexity of dwell sequences: visual scanning pattern differences between novice and expert aircraft pilots.* Proceedings of the 1st International Workshop on Eye-Tracking in Aviation (ETAVI'20, 61-68). [https://doi.org/10.3929/ethz-b-000407653](https://doi.org/10.3929/ethz-b-000407653) """ @DataFeatures.PipelineStepInit def __init__(self, **kwargs): # Init AOIScanPathAnalyzer class super().__init__() self.__lempel_ziv_complexity = 0 @DataFeatures.PipelineStepMethod def analyze(self, aoi_scan_path: GazeFeatures.AOIScanPath): assert(len(aoi_scan_path) > 1) self.__lempel_ziv_complexity = lempel_ziv_complexity(aoi_scan_path.letter_sequence) @property def lempel_ziv_complexity(self) -> int: """Lempel-Ziv complexity.""" return self.__lempel_ziv_complexity