import numpy as np from src.models import KeypadSize def random_property_rotation( user_keypad: np.ndarray, prop_rotation: list[int] ) -> np.ndarray: transposed = user_keypad.T if len(prop_rotation) != len(transposed): raise ValueError("prop_rotation must be the same length as the number of properties") for idx, prop_set in enumerate(transposed): rotation = prop_rotation[idx] rotation = rotation % len(prop_set) if len(prop_set) > 0 else 0 transposed[idx] = np.roll(prop_set, rotation) return transposed.T def keypad_md_table(keypad_list: np.ndarray, keypad_size: KeypadSize) -> str: assert (keypad_size.total_props == len(keypad_list)) keypad = keypad_list.reshape(-1, keypad_size.props_per_key) table = "||" + "".join([f"position {idx}|" for idx in range(keypad_size.props_per_key)]) table += "\n|" + "".join("-|" for _ in range(keypad_size.props_per_key + 1)) for key in range(keypad_size.numb_of_keys): table += f"\n|key {key}|" table += "|".join([str(prop) for prop in keypad[key]]) table += "|" return table