from typing import List from .analyzer import Analyzer, Result from .analyzer.biogames import BoardDurationAnalyzer, SimulationRoundsAnalyzer, ActivationSequenceAnalyzer, \ BiogamesCategorizer from .analyzer.default import LogEntryCountAnalyzer, LocationAnalyzer, LogEntrySequenceAnalyzer, ActionSequenceAnalyzer, \ CategorizerStub from .analyzer.locomotion import LocomotionActionAnalyzer, CacheSequenceAnalyzer from .analyzer.mask import MaskSpatials from .render import Render from .render.biogames import SimulationRoundsRender, BoardDurationHistRender, BoardDurationBoxRender from .render.default import PrintRender, JSONRender, TrackRender, HeatMapRender from .render.locomotion import LocomotionActionRelativeRender, LocomotionActionAbsoluteRender, \ LocomotionActionRatioRender __FALLBACK__ = PrintRender __MAPPING__ = { LocomotionActionAnalyzer: [ LocomotionActionAbsoluteRender, LocomotionActionRelativeRender, LocomotionActionRatioRender, ], LogEntryCountAnalyzer: [ JSONRender, ], SimulationRoundsAnalyzer: [ JSONRender, SimulationRoundsRender, ], BoardDurationAnalyzer: [ BoardDurationHistRender, BoardDurationBoxRender, ], ActivationSequenceAnalyzer: [ JSONRender, ], LocationAnalyzer: [ TrackRender, HeatMapRender, ], } def get_renderer(cls: type) -> [type]: if cls not in __MAPPING__: return [__FALLBACK__] return __MAPPING__[cls] def render(cls: type, results: List[Result]): for r in get_renderer(cls): p = r() p.result_types.append(cls) rendered = p.render(results) if rendered: print(str(r))