Как создать сложную структуру данных с помощью гипотезы Python

Я пытаюсь использовать гипотезу для создания текстовой стратегии со сложным форматом. Я не знаю, как построить такую ​​структуру данных.

Я попытался построить различные элементы как композиты, чтобы затем использовать их как стратегии для других композитов. Однако аргумент elements в стратегии списков требует SearchStrategy вместо составной, как я надеялся. Просматривая документы, я не мог понять, помогут ли в этом случае сборки, отображение или плоская карта.

Моя (упрощенная) попытка ниже.

@st.composite
def composite_coords(draw):
    lat = draw(st.decimals(min_value=-10, max_value=-1, allow_nan=False, places=16))
    long = draw(st.decimals(min_value=50, max_value=90, allow_nan=False, places=16))
    return [float(long), float(lat)]


@st.composite
def composite_polygon_coords(draw):
    polygon_coords = draw(st.lists(
        elements=composite_coords, min_size=3
    ))
    return polygon_coords.append(polygon_coords[0])


@st.composite
def composite_polygons(draw):
    polygons = draw(st.lists(
        elements=composite_polygon_coords, min_size=1
    ))
    polygon = {
        'type': 'Polygon',
        'coordinates': polygons
    }
    return poly.dumps(polygon)


@given(composite_polygons())
def test_valid_polygon(polygon):
    result = validate(polygon)
    assert result == polygon

person Mr-Love    schedule 25.10.2019    source источник


Ответы (1)


Декоратор @st.composite дает вам функцию, которая возвращает стратегию - вам просто нужно вызвать их, и все будет в порядке.

person Zac Hatfield-Dodds    schedule 25.10.2019
comment
ах, я пробовал это раньше, просто была еще одна проблема, из-за которой композитный_polygon_coords () возвращал список None, что заставило меня поверить, что он не работает. - person Mr-Love; 28.10.2019