Source code for pedal.questions.setup

"""
Initialize and setup the Questions tool.
"""

from pedal.core.report import MAIN_REPORT, Report
from pedal.questions.constants import TOOL_NAME

import hashlib


def _name_hash(name: str) -> int:
    """ Turn a string name into a unique hashcode using MD5 """
    name = ",".join(str(x) for x in bytes(name, 'utf-8'))
    return hashlib.md5(name.encode('utf8')).digest()[0]


[docs] def reset(report=MAIN_REPORT): """ Remove all settings for the Questions tool. Seed will be 0. Args: report: The report object Returns: This tool's data """ report[TOOL_NAME] = { 'seed': 0 } return report[TOOL_NAME]
Report.register_tool(TOOL_NAME, reset)
[docs] def set_seed(seed_value, report=MAIN_REPORT): """ Sets the seed that will be used in selecting questions. Args: seed_value (int or str or iterable[int]): The value to use when selecting questions, deterministically. If int, the same index will be used for all questions. If an iterable of ints, each one will serve as the index for the corresponding problem (throws an exception if the iterable isn't long enough). If a string, it will be hashed to a value (the hash is deterministic across platforms) that will be modulo'd to be in the right range for the pool. Presently, hashing generates values from [0, 256) so you need to limit your questions to 256. report (Report): The report object to store data and feedback in. If left None, defaults to the global MAIN_REPORT. """ report['questions']['seed'] = seed_value