У меня есть словарь, который представляет собой таблицу данных. Я хотел бы использовать гипотезу для генерации некоторых данных при соблюдении множества условий. Например, для следующего.
import hypothesis.strategies as st
rows = [f"row_0{i+1}0" for i in range(4)]
columns = [f"col_0{j+1}0" for j in range(4)]
row_dict = st.fixed_dictionaries({col: st.floats(allow_nan=False) for col in columns})
data = st.fixed_dictionaries({row: row_dict for row in rows})
Что выглядит как.
print(data.example())
{'row_010': {
'col_010': -2.00001,
'col_020': 1.175494351e-38,
'col_030': inf,
'col_040': 9007199254740992.0},
'row_020': {
'col_010': -1.7976931348623157e+308,
'col_020': -3.36705610739319e-252,
'col_030': 0.3333333333333333,
'col_040': -1.192092896e-07},
'row_030': {
'col_010': -2.312410659618345e+16,
'col_020': 9007199254740992.0,
'col_030': 0.99999,
'col_040': -0.3333333333333333},
'row_040': {
'col_010': 1.1,
'col_020': -2.719870222528507e-237,
'col_030': -4.935269787996911e+259,
'col_040': -inf}}
С этой общей структурой я стремлюсь генерировать тесты для различных функций проверки таблиц. Функции проверки будут проверять такие вещи, как, все ли значения в row_010
больше, чем в row_020
. Тем не менее, я изо всех сил пытаюсь придумать способ кратко построить эти правила. Я могу добиться того, что мне нужно, делая такие вещи, как (здесь только проверка двух значений).
data.filter(lambda d: d["row_010"]["col_010"] > d["row_020"]["col_010"])
Однако вскоре это становится довольно многословным при проверке словарей большего размера / более сложных условий. Есть ли способ обобщить эту процедуру, чтобы ее можно было применить ко многим ячейкам в таблице / более сложным условиям?
Примечание. Важным и досадным ограничением является то, что я не могу использовать встроенный в pandas функционале. Это было бы идеально, но, к сожалению, в настоящее время это невозможно.