Source code for reiz.visual

"""Creating and managing visual stimuli
"""
import os
from os import environ as _env
from reiz._visual.complex import Mural, Image, Cross, Circle, Background, Line, Bar
from reiz._visual.complex import Polygon, Trapezoid, Cylinder
from reiz._visual.colors import COLORS, get_color
from types import SimpleNamespace
from typing import Dict, NewType, Any
from pathlib import Path
from pkg_resources import resource_filename

libConf = NewType(
    "libConf", Dict[str, Dict[str, Any]]
)  #: Dict[str, Dict[str, Any], a dictionary of types and respective keywords arguments

_defaults = libConf(
    {
        "Mural": {
            "post": {"text": "Run endet"},
            "pre": {"text": "Run beginnt"},
            "eo": {"text": "Augen offen"},
            "ec": {"text": "Augen zu"},
            "ready": {"text": "Bereit machen"},
            "los": {"text": "Los"},
            "go": {"text": "Go!"},
            "imagine": {"text": "Bewegung vorstellen"},
            "move": {"text": "Bewegung starten"},
            "count": {"text": "Zahlen berechnen"},
            "relax": {"text": "Entspannen"},
            "rating": {
                "text": "0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10",
                "fontsize": 0.75,
            },
        },
        "Cross": {"fixation": {"color": "white"},},
        "Image": {"logo": {"imgpath": resource_filename(__name__, "data/logo.png")},},
    }
)  #: libConf


[docs]def read_folder(folder: str = None) -> SimpleNamespace: """"read image files in a the specified folder into a library args ---- folder:str the path to the folder with the images The function selects all files ending in .png and .jpg. It collects them into a SimpleNamespace, so you can use dot notation to select the images. These fields are named based on the filename. Some basic sanitization is performed, but is nonetheless best if the files already have names which could be called safely from python. For example, files should be named 'image_file.png' instead of 'image-file.png'. """ folder = folder or resource_filename(__name__, "data/") def sanitize(fname: str) -> str: return fname.replace("-", "_").replace(" ", "_").replace(":", "_") conf = dict() conf["Image"] = dict() pth = Path(folder).expanduser().absolute() print(pth) for file in pth.glob("*.png"): print(file) conf["Image"][sanitize(file.stem)] = {"imgpath": str(file)} for file in pth.glob("*.jpg"): print(file) conf["Image"][sanitize(file.stem)] = {"imgpath": str(file)} return make_library(conf)
[docs]def make_library(settings: libConf = None, failraise=False) -> SimpleNamespace: """create a library of visual stimuli from a dictionary of arguments args ---- settings: a dictionary of types with kwargs appropriate to the respective type as dictionary failraise:bool raise an exception if a key is not recognized. defaults to False returns ------- library: a library of instances of stimuli which can be adressed in dot.notation """ if settings is None: settings = _defaults library = dict() for key in settings.keys(): for name, args in settings[key].items(): if key.lower() == "mural": library[name] = Mural(**args) elif key.lower() == "cross": library[name] = Cross(**args) elif key.lower() == "image": library[name] = Image(**args) else: if failraise: raise (f"{key} with {args} can't be processed") library = SimpleNamespace(**library) return library
if not "DOC" in _env.keys(): library = make_library() else: # pragma: no cover mock = dict() for t, item in _defaults.items(): for k, v in item.items(): mock[k] = t library = SimpleNamespace(**mock) #: a library of visual stimuli print("Generating sphinx documentation. Skipping visual library") __doc__ += f""" During import, a basic library will be created. By default, it contains the following set of visual stimuli: {', '.join([str(k) for k in library.__dict__])}. These stimuli can be addressed by dot.notation from :data:`reiz.visual.library`, for example like :data:`reiz.visual.library.go` .. automodule:: reiz._visual.complex :members: Mural, Image, Cross, Circle, Background, Line, Bar, Polygon, Trapezoid, Cylinder .. automodule:: reiz._visual.colors :members: COLORS, get_color Create libraries of visual stimuli .................................. """