from typing import List from .analyzer import Analyzer, Result from .analyzer.biogames import BoardDurationAnalyzer, SimulationRoundsAnalyzer, ActivationSequenceAnalyzer from .analyzer.default import LogEntryCountAnalyzer, LocationAnalyzer, LogEntrySequenceAnalyzer, ActionSequenceAnalyzer from .analyzer.locomotion import LocomotionActionAnalyzer, CacheSequenceAnalyzer from .analyzer.mask import MaskSpatials from .render import Render from .render.default import PrintRender, JSONRender, TrackRender, HeatMapRender from .render.locomotion import LocomotionActionRelativeRender, LocomotionActionAbsoluteRender, \ LocomotionActionRatioRender from .render.biogames import SimulationRoundsRender, BoardDurationHistRender, BoardDurationBoxRender __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))