Пример #1
0
def test_vertical_space():
    spaces = list(VerticalSpace())
    assert 0 == len(spaces)

    spaces = list(VerticalSpace(dict(a=10)))
    assert [dict(a=10)] == spaces

    spaces = list(VerticalSpace(dict(a=10), [dict(b=11), dict(c=12)]))
    assert [dict(a=10), dict(b=11), dict(c=12)] == spaces

    spaces = list(VerticalSpace(HorizontalSpace(a=10), dict(b=10)))
    assert [dict(a=10), dict(b=10)] == spaces

    raises(ValueError, lambda: VerticalSpace(10))

    assert not VerticalSpace(HorizontalSpace(a=10),
                             dict(b=10)).has_random_parameter

    space = VerticalSpace(Space(a=Grid(1, 2), b=Rand(0.0, 1.0)),
                          Space(c=Choice(3, 4)))
    ec = list(space.encode())
    assert space.has_random_parameter
    assert list(space.sample(5, 0)) == list(space.sample(5, 0))
    assert list(space.sample(5, 0)) != list(space.sample(5, 1))
    dicts = list(space.sample(5, 0))
    assert 15 == len(dicts)
    assert 5 == len(set(d["b"] for d in dicts if "b" in d))
    assert ec == list(space.encode())
Пример #2
0
def test_horizontal_space():
    spaces = list(HorizontalSpace())
    assert 1 == len(spaces)
    assert {} == spaces[0]

    spaces = list(HorizontalSpace(a=10, b=[1, 2], c=dict(x=1)))
    assert 1 == len(spaces)
    assert dict(a=10, b=[1, 2], c=dict(x=1)) == spaces[0]

    spaces = list(HorizontalSpace(dict(a=10, b=[1, 2], c=dict(x=1))))
    assert 1 == len(spaces)
    assert dict(a=10, b=[1, 2], c=dict(x=1)) == spaces[0]

    spaces = list(HorizontalSpace(dict(a=10), dict(b=[1, 2], c=dict(x=1))))
    assert 1 == len(spaces)
    assert dict(a=10, b=[1, 2], c=dict(x=1)) == spaces[0]

    raises(ValueError, lambda: HorizontalSpace(10))

    assert not HorizontalSpace(dict(a=10, b=[1, 2],
                                    c=dict(x=1))).has_random_parameter

    space = HorizontalSpace(Space(a=Grid(1, 2), b=Rand(0.0, 1.0)),
                            Space(c=Choice(3, 4)))
    ec = list(space.encode())
    assert space.has_random_parameter
    assert list(space.sample(5, 0)) == list(space.sample(5, 0))
    assert list(space.sample(5, 0)) != list(space.sample(5, 1))
    dicts = list(space.sample(5, 0))
    assert 10 == len(dicts)
    assert 5 == len(set(d["b"] for d in dicts))
    assert ec == list(space.encode())
Пример #3
0
def test_space_with_funct():
    s = Space(a=1, b=FuncParam(lambda x, y: x + y, x=Grid(0, 1), y=Grid(3, 4)))
    assert [
        dict(a=1, b=3),
        dict(a=1, b=4),
        dict(a=1, b=4),
        dict(a=1, b=5),
    ] == list(s)

    u = Grid(0, 1)
    s = Space(a=u, b=FuncParam(lambda x, y: x + y, x=u, y=u))
    assert [
        dict(a=0, b=0),
        dict(a=1, b=2),
    ] == list(s)
Пример #4
0
def test_single_space_sample():
    assert not Space(a=1).has_stochastic
    assert not Space(a=1, b=Grid(1, 2)).has_stochastic
    assert Space(a=1, b=[Grid(1, 2), Rand(0.0, 1.0)]).has_stochastic

    dicts = list(Space(a=1, b=Grid(1, 2)).sample(100))
    assert 2 == len(dicts)

    dicts = list(Space(a=1, b=RandInt(1, 2)).sample(100))
    assert 100 == len(dicts)

    space = Space(a=1, b=[Grid(1, 2), Rand(0.0, 1.0)], c=Choice("a", "b"))
    assert list(space.sample(5, 0)) == list(space.sample(5, 0))
    assert list(space.sample(5, 0)) != list(space.sample(5, 1))
    dicts = list(space.sample(5, 0))
    assert 10 == len(dicts)
    assert 5 == len(set(d.template["b"][1] for d in dicts))
Пример #5
0
def test_single_space():
    raises(ValueError, lambda: Space("abc"))
    raises(ValueError, lambda: Space(1))
    raises(ValueError, lambda: Space(1, 2))

    space = Space(a=1, b=Grid(2, 3, 4))
    dicts = list(space)
    dicts = list(space)  # make sure iteration doesn't alter the object
    assert 3 == len(dicts)
    assert dict(a=1, b=2) == dicts[0]
    assert dict(a=1, b=3) == dicts[1]

    dicts = list(Space(dict(a=Grid(None, "x"), b=Grid(2, 3))))
    assert 4 == len(dicts)

    dicts = list(
        Space(TuningParametersTemplate(dict(a=1, b=[Grid(2, 3),
                                                    Grid(4, 5)]))))
    assert 4 == len(dicts)
    assert dict(a=1, b=[2, 4]) == dicts[0]
    assert dict(a=1, b=[2, 5]) == dicts[1]
    assert dict(a=1, b=[3, 4]) == dicts[2]
    assert dict(a=1, b=[3, 5]) == dicts[3]

    dicts = list(Space(a=1, b=dict(x=Grid(2, 3), y=Grid(4, 5))))
    assert 4 == len(dicts)
    assert dict(a=1, b=dict(x=2, y=4)) == dicts[0]
    assert dict(a=1, b=dict(x=2, y=5)) == dicts[1]
    assert dict(a=1, b=dict(x=3, y=4)) == dicts[2]
    assert dict(a=1, b=dict(x=3, y=5)) == dicts[3]
Пример #6
0
def test_dataset(tmpdir):
    factory = TuneObjectFactory()
    factory.set_temp_path(str(tmpdir))
    df = pd.DataFrame([[0]], columns=["a"])
    dag = FugueWorkflow()
    data = factory.make_dataset(dag, Space(a=1, b=1), df=df)
    assert isinstance(data, TuneDataset)
    assert factory.make_dataset(dag, data) is data
    # TODO: the unit test is not complete, but it's covered by other functions
    with raises(TuneCompileError):
        factory.make_dataset(dag, 1)
Пример #7
0
def test_operators():
    s1 = Space(a=1, b=Grid(2, 3))
    s2 = Space(c=Grid("a", "b"))
    assert [
        dict(a=1, b=2, c="a"),
        dict(a=1, b=2, c="b"),
        dict(a=1, b=3, c="a"),
        dict(a=1, b=3, c="b"),
    ] == list(s1 * s2)

    assert [
        dict(a=1, b=2),
        dict(a=1, b=3),
        dict(c="a"),
        dict(c="b"),
    ] == list(s1 + s2)

    assert [
        dict(a=1, b=2, c="a"),
        dict(a=1, b=3, c="a"),
        dict(a=1, b=2, c="b"),
        dict(a=1, b=3, c="b"),
    ] == list(s1 * [dict(c="a"), dict(c="b")])

    assert [
        dict(a=1, b=2),
        dict(a=1, b=3),
        dict(c="a"),
        dict(c="b"),
    ] == list(s1 + [dict(c="a"), dict(c="b")])

    s1 = Space(a=1, b=Grid(2, 3))
    s2 = Space(c=Grid("a", "b"))
    s3 = Space(d=5)
    assert ([
        dict(a=1, b=2),
        dict(a=1, b=3),
        dict(c="a"),
        dict(c="b"),
        dict(d=5),
    ] == list(sum([s1, s2, s3])) == list(sum([s1, s2, s3], None)))
Пример #8
0
def test_single_space():
    space = Space(a=1, b=Grid(2, 3, 4))
    dicts = list(space)
    dicts = list(space)  # make sure iteration doesn't alter the object
    assert 3 == len(dicts)
    assert dict(a=1, b=2) == dicts[0]
    assert dict(a=1, b=3) == dicts[1]

    dicts = list(Space(a=Grid(None, "x"), b=Grid(2, 3)))
    assert 4 == len(dicts)

    dicts = list(Space(a=1, b=[Grid(2, 3), Grid(4, 5)]))
    assert 4 == len(dicts)
    assert dict(a=1, b=[2, 4]) == dicts[0]
    assert dict(a=1, b=[2, 5]) == dicts[1]
    assert dict(a=1, b=[3, 4]) == dicts[2]
    assert dict(a=1, b=[3, 5]) == dicts[3]

    dicts = list(Space(a=1, b=dict(x=Grid(2, 3), y=Grid(4, 5))))
    assert 4 == len(dicts)
    assert dict(a=1, b=dict(x=2, y=4)) == dicts[0]
    assert dict(a=1, b=dict(x=2, y=5)) == dicts[1]
    assert dict(a=1, b=dict(x=3, y=4)) == dicts[2]
    assert dict(a=1, b=dict(x=3, y=5)) == dicts[3]
Пример #9
0
def test_iterative_study(tmpdir):
    def assert_metric(df: Iterable[Dict[str, Any]], metric: float) -> None:
        for row in df:
            assert row[TUNE_REPORT_METRIC] < metric

    study = IterativeStudy(F(), str(tmpdir))
    space = sum(
        Space(a=a, b=b)
        for a, b in [(1.1, 0.2), (0.8, -0.2), (1.2, -0.1), (0.7,
                                                            0.3), (1.0, 1.5)])
    dag = FugueWorkflow()
    dataset = TuneDatasetBuilder(space, str(tmpdir)).build(dag)
    result = study.optimize(
        dataset,
        J([1, 2, 3, 4]),
    )
    result.result(1).show()
    result.result(1).output(assert_metric, params=dict(metric=-2.8))

    dag.run()
Пример #10
0
def keras_space(model: Any, **params: Any) -> Space:
    expr = to_keras_spec_expr(model)
    _TYPE_DICT[expr] = to_keras_spec(model)
    data = {SPACE_MODEL_NAME: expr}
    data.update(params)
    return Space(**data)
Пример #11
0
def test_single_space_sample():
    assert not Space(a=1).has_random_parameter
    assert not Space(a=1, b=Grid(1, 2)).has_random_parameter
    assert Space(a=1, b=[Grid(1, 2), Rand(0.0, 1.0)]).has_random_parameter

    dicts = list(Space(a=1, b=Grid(1, 2)).sample(100))
    assert 2 == len(dicts)

    space = Space(a=1, b=[Grid(1, 2), Rand(0.0, 1.0)], c=Choice("a", "b"))
    ec = list(space.encode())
    assert list(space.sample(5, 0)) == list(space.sample(5, 0))
    assert list(space.sample(5, 0)) != list(space.sample(5, 1))
    dicts = list(space.sample(5, 0))
    assert 10 == len(dicts)
    assert 5 == len(set(d["b"][1] for d in dicts))
    assert ec == list(
        space.encode())  # make sure the instance value was not altered