31 lines
1.1 KiB
Python
31 lines
1.1 KiB
Python
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
|