コード例 #1
0
def test_query_new_predicate():
    neurolang = frontend.NeurolangDL()

    central = ExplicitVBR(np.array([[0, 0, 5], [1, 1, 8]]), np.eye(4))
    inferior_posterior = ExplicitVBR(np.array([[0, -10, -10], [1, -5, -5]]),
                                     np.eye(4))

    inferior_central = ExplicitVBR(np.array([[0, 0, -1], [1, 1, 2]]),
                                   np.eye(4))
    inferior_anterior = ExplicitVBR(np.array([[0, 2, 2], [1, 5, 3]]),
                                    np.eye(4))

    regions_ = {
        (inferior_posterior, ),
        (inferior_central, ),
        (inferior_anterior, ),
    }
    regions = neurolang.add_tuple_set(regions_)

    def posterior_and_inferior(y, z):
        return neurolang.symbols.anatomical_posterior_of(
            y, z) & neurolang.symbols.anatomical_inferior_of(y, z)

    x = neurolang.new_region_symbol(name="x")
    query_result = neurolang.query(
        (x, ),
        regions(x) & posterior_and_inferior(x, central))
    assert len(query_result) == 1
    assert next(iter(query_result)) == (inferior_posterior, )
コード例 #2
0
def test_neurolang_dl_query():
    neurolang = frontend.NeurolangDL()
    r = neurolang.new_symbol(name="r")
    x = neurolang.new_symbol(name="x")
    y = neurolang.new_symbol(name="y")
    z = neurolang.new_symbol(name="z")

    dataset = {(i, i * 2) for i in range(10)}
    q = neurolang.add_tuple_set(dataset, name="q")
    sol = neurolang.query((x, y), q(x, y))
    assert sol == dataset

    sol = neurolang.query(tuple(), q(x, x))
    assert sol
    assert neurolang.query(q(x, x))

    sol = neurolang.query(tuple(), q(100, x))
    assert not sol
    assert not neurolang.query(q(100, x))

    sol = neurolang.query((x, ), q(x, y) & q(y, z))
    res = set((x, ) for x in range(5))
    assert sol == res

    r[x, y] = q(x, y)
    r[x, z] = r[x, y] & q(y, z)
    sol = neurolang.query((y, ), r(1, y))
    assert sol == set((x, ) for x in (2, 4, 8, 16))
コード例 #3
0
def test_neurolang_dl_datalog_code():
    neurolang = frontend.NeurolangDL()
    neurolang.execute_datalog_program("""
    A(4, 5)
    A(5, 6)
    A(6, 5)
    B(x,y) :- A(x, y)
    B(x,y) :- B(x, z),A(z, y)
    C(x) :- B(x, y), y == 5
    D("x")
    """)

    res = neurolang.solve_all()

    assert res["A"].row_type == Tuple[int, int]
    assert res["A"].to_unnamed() == {(4, 5), (5, 6), (6, 5)}
    assert res["B"].to_unnamed() == {
        (4, 5),
        (5, 6),
        (6, 5),
        (4, 6),
        (5, 5),
        (6, 6),
    }
    assert res["C"].to_unnamed() == {(4, ), (5, ), (6, )}
    assert res["D"].to_unnamed() == {
        ("x", ),
    }
コード例 #4
0
def test_translate_expression_to_fronted_expression():
    qr = frontend.NeurolangDL()
    tr = qre.TranslateExpressionToFrontEndExpression(qr)

    assert tr.walk(exp.Constant(1)) == 1

    symbol_exp = exp.Symbol("a")
    symbol_fe = tr.walk(symbol_exp)
    assert symbol_fe.expression == symbol_exp
    assert symbol_fe.query_builder == tr.query_builder

    fa_exp = symbol_exp(exp.Constant(1))
    fa_fe = symbol_fe(1)
    fa_fe_tr = tr.walk(fa_exp)
    assert fa_fe_tr.expression == fa_exp
    assert fa_fe_tr == fa_fe

    fact_exp = Fact(fa_exp)
    fact_fe = tr.walk(fact_exp)
    assert fact_fe.expression == fact_exp
    assert fact_fe.consequent == fa_fe

    imp_exp = Implication(symbol_exp(exp.Symbol("x")),
                          exp.Symbol("b")(exp.Symbol("x")))
    imp_fe = tr.walk(imp_exp)
    assert imp_fe.expression == imp_exp
    assert imp_fe.consequent == tr.walk(imp_exp.consequent)
    assert imp_fe.antecedent == tr.walk(imp_exp.antecedent)
コード例 #5
0
def test_first_column_sugar_head_s():
    qr = frontend.NeurolangDL()
    qr.add_tuple_set({(1, 'one'), (2, 'two')}, name='dd')

    with qr.scope as e:
        e.r.s['one'] = e.dd('one')
        res_all = qr.solve_all()

    assert set(res_all['r']) == {('one', 1)}
コード例 #6
0
def test_head_constant():
    qr = frontend.NeurolangDL()
    qr.add_tuple_set({(1, )}, name='dd')

    with qr.scope as e:
        e.r['one', e.x] = e.dd(e.x)
        res_all = qr.solve_all()

    assert set(res_all['r']) == {('one', 1)}
コード例 #7
0
def test_first_column_sugar_body_s():
    qr = frontend.NeurolangDL()
    qr.add_tuple_set({('one', 1), ('two', 2)}, name='dd')

    with qr.scope as e:
        e.s[e.x] = (e.x == e.y) & e.dd('one', e.y)
        e.r[e.x] = (e.x == (e.dd.s['one']))
        res_all = qr.solve_all()

    assert res_all['r'] == res_all['s']
コード例 #8
0
ファイル: test_frontend.py プロジェクト: tgy/NeuroLang
def test_neurolang_dl_solve_all():
    neurolang = frontend.NeurolangDL()
    r = neurolang.new_symbol(name='r')
    x = neurolang.new_symbol(name='x')

    dataset = {(i, i * 2) for i in range(10)}
    q = neurolang.add_tuple_set(dataset, name='q')
    r[x] = q(x, x)
    sol = neurolang.solve_all()
    assert sol['q'] == dataset
    assert sol['r'] == set((i, ) for i, j in dataset if i == j)
    assert len(sol) == 2
コード例 #9
0
def test_neurolang_dl_set_destroy():
    neurolang = frontend.NeurolangDL()
    contains_ = neurolang.add_symbol(contains)

    a = neurolang.add_tuple_set([(frozenset((0, 1, 2)), )], name="a")
    with neurolang.scope as e:
        e.q[e.y] = a[e.x] & contains_(e.x, e.y)
        res = neurolang.solve_all()

    q = res["q"].to_unnamed()
    assert len(q) == 3
    assert set(q) == {(0, ), (1, ), (2, )}
コード例 #10
0
def test_neurosynth_region(mock_ns_regions):
    mock_ns_regions.return_value = {
        ExplicitVBR(np.array([[1, 0, 0], [1, 1, 0]]), np.eye(4))
    }
    neurolang = frontend.NeurolangDL()
    s = neurolang.load_neurosynth_term_regions("gambling", 10,
                                               "gambling_regions")
    res = neurolang[s]
    mock_ns_regions.assert_called()

    assert res.type is AbstractSet[Tuple[ExplicitVBR]]
    assert res.value == frozenset((t, ) for t in mock_ns_regions.return_value)
コード例 #11
0
def test_neurolange_dl_negation():
    neurolang = frontend.NeurolangDL()
    s = neurolang.new_symbol(name="s")
    x = neurolang.new_symbol(name="x")
    y = neurolang.new_symbol(name="y")

    dataset = {(i, i * 2) for i in range(10)}
    q = neurolang.add_tuple_set(dataset, name="q")
    s[x, y] = ~q(x, x) & q(x, y)

    res = neurolang.solve_all()

    assert res["s"].to_unnamed() == {(i, j) for i, j in dataset if i != j}
コード例 #12
0
def test_neurolang_dl_solve_all():
    neurolang = frontend.NeurolangDL()
    r = neurolang.new_symbol(name="r")
    x = neurolang.new_symbol(name="x")

    dataset = {(i, i * 2) for i in range(10)}
    q = neurolang.add_tuple_set(dataset, name="q")
    r[x] = q(x, x)
    sol = neurolang.solve_all()
    assert sol["q"].to_unnamed() == dataset
    assert sol["r"].to_unnamed() == set((i, ) for i, j in dataset if i == j)
    assert len(sol) == 2
    assert neurolang.predicate_parameter_names(r) == ("x", )
コード例 #13
0
def test_neurolang_dl_datalog_code_list_symbols():
    neurolang = frontend.NeurolangDL()
    original_symbols = set(neurolang.symbols)
    neurolang.execute_datalog_program("""
    A(4, 5)
    A(5, 6)
    A(6, 5)
    B(x,y) :- A(x, y)
    B(x,y) :- B(x, z),A(z, y)
    C(x) :- B(x, y), y == 5
    D("x")
    """)

    assert set(neurolang.symbols) == {"A", "B", "C", "D"} | original_symbols
コード例 #14
0
def test_neurolang_dl_attribute_access():
    neurolang = frontend.NeurolangDL()
    one_element = namedtuple("t", ("x", "y"))(1, 2)

    a = neurolang.add_tuple_set([(one_element, )], name="a")
    with neurolang.scope as e:
        e.q[e.x] = a[e.x]
        e.r[e.y] = a[e.w] & (e.y == e.w.x)
        res = neurolang.solve_all()

    q = res["q"]
    r = res["r"]
    assert len(q) == 1
    el = next(q.to_unnamed().itervalues())[0]
    assert el == one_element
    assert r.to_unnamed() == {(one_element.x, )}
コード例 #15
0
def test_neurolang_dl_aggregation_environment_direct_query():
    neurolang = frontend.NeurolangDL()

    @neurolang.add_symbol
    def sum_(x):
        return sum(x)

    with neurolang.environment as e:
        for i in range(10):
            e.q[i % 2, i] = True

        e.p[e.x, sum_(e.y)] = e.q[e.x, e.y]
        sol = neurolang.query((e.x, e.y), e.p(e.x, e.y))

    res_q = {(0, 2 + 4 + 6 + 8), (1, 1 + 3 + 5 + 7 + 9)}

    assert sol == res_q
コード例 #16
0
def test_add_set_neurolangdl():
    neurolang = frontend.NeurolangDL()

    s = neurolang.add_tuple_set(range(10), int)
    res = neurolang[s]

    assert s.type is AbstractSet[int]
    assert res.type is AbstractSet[int]
    assert res.value == frozenset((i, ) for i in range(10))

    v = frozenset(zip(("a", "b", "c"), range(3)))
    s = neurolang.add_tuple_set(v, (str, int))
    res = neurolang[s]

    assert s.type is AbstractSet[Tuple[str, int]]
    assert res.type is AbstractSet[Tuple[str, int]]
    assert res.value == v
コード例 #17
0
def test_neurolange_dl_named_sets():
    neurolang = frontend.NeurolangDL()
    r = neurolang.new_symbol(name="r")
    s = neurolang.new_symbol(name="s")
    x = neurolang.new_symbol(name="x")
    y = neurolang.new_symbol(name="y")

    dataset = {(i, i * 2) for i in range(10)}
    q = neurolang.add_tuple_set(dataset, name="q")
    r[x] = q(x, x)
    s[x, y] = q(x, x) & (y == x)

    res = neurolang.solve_all()

    assert res["r"].columns == ("x", )
    assert res["r"].row_type == Tuple[int]
    assert res["r"].to_unnamed() == {(i, ) for i, j in dataset if i == j}
コード例 #18
0
def test_query_regions_from_region_set():
    neurolang = frontend.NeurolangDL()

    central = ExplicitVBR(np.array([[0, 0, 5], [1, 1, 8]]), np.eye(4))

    i1 = ExplicitVBR(np.array([[0, 0, 2], [1, 1, 3]]), np.eye(4))
    i2 = ExplicitVBR(np.array([[0, 0, -1], [1, 1, 2]]), np.eye(4))
    i3 = ExplicitVBR(np.array([[0, 0, -10], [1, 1, -5]]), np.eye(4))
    regions_ = {(i1, ), (i2, ), (i3, )}
    regions = neurolang.add_tuple_set(regions_)

    x = neurolang.new_region_symbol(name="x")
    query_result = neurolang.query(
        (x, ),
        regions(x) & neurolang.symbols.inferior_of(x, central))

    assert len(query_result) == len(regions)
    assert query_result == {(i1, ), (i2, ), (i3, )}
コード例 #19
0
def test_aggregation_number_of_arrivals():
    neurolang = frontend.NeurolangDL()

    @neurolang.add_symbol
    def agg_count(x) -> int:
        return len(x)

    with neurolang.environment as e:
        e.A[0, 1] = True
        e.A[1, 2] = True
        e.A[2, 3] = True
        e.reachable[e.x, e.y] = e.A[e.x, e.y]
        e.reachable[e.x, e.y] = e.reachable[e.x, e.z] & e.A[e.z, e.y]

        e.count_destinations[e.x, agg_count(e.y)] = e.reachable[e.x, e.y]

        res = neurolang.query((e.x, e.c), e.count_destinations(e.x, e.c))

    assert res == {(0, 3), (1, 2), (2, 1)}
コード例 #20
0
    def setup_(self):
        nl = fe.NeurolangDL()

        destrieux_atlas = datasets.fetch_atlas_destrieux_2009()
        yeo_atlas = datasets.fetch_atlas_yeo_2011()

        img = nib.load(destrieux_atlas['maps'])
        aff = img.affine
        data = img.get_data()
        rset = []
        for label, name in destrieux_atlas['labels']:
            if label == 0:
                continue
            voxels = np.transpose((data == label).nonzero())
            if len(voxels) == 0:
                continue
            rset.append((name.decode('utf8'),
                         fe.ExplicitVBR(voxels,
                                        aff,
                                        image_dim=img.shape,
                                        prebuild_tree=True)))
        nl.add_tuple_set(rset, name='destrieux')

        img = nib.load(yeo_atlas['thick_17'])
        aff = img.affine
        data = img.get_data().squeeze()
        rset = []
        for label in range(1, 18):
            name = str(label)
            if label == 0:
                continue
            voxels = np.transpose((data == label).nonzero())
            if len(voxels) == 0:
                continue
            rset.append((name,
                         fe.ExplicitVBR(voxels,
                                        aff,
                                        image_dim=data.shape,
                                        prebuild_tree=True)))
        nl.add_tuple_set(rset, name='yeo')
        self.nl = nl
コード例 #21
0
def test_neurolang_dl_aggregation_direct_query():
    neurolang = frontend.NeurolangDL()
    q = neurolang.new_symbol(name="q")
    p = neurolang.new_symbol(name="p")
    x = neurolang.new_symbol(name="x")
    y = neurolang.new_symbol(name="y")

    @neurolang.add_symbol
    def sum_(x):
        return sum(x)

    for i in range(10):
        q[i % 2, i] = True

    p[x, sum_(y)] = q[x, y]

    sol = neurolang.query((x, y), p(x, y))

    res_q = {(0, 2 + 4 + 6 + 8), (1, 1 + 3 + 5 + 7 + 9)}

    assert sol == res_q
コード例 #22
0
def test_neurolange_dl_get_param_names():
    neurolang = frontend.NeurolangDL()
    r = neurolang.new_symbol(name="r")
    x = neurolang.new_symbol(name="x")

    dataset = {(i, i * 2) for i in range(10)}
    q = neurolang.add_tuple_set(dataset, name="q")
    r[x] = q(x, x)

    @neurolang.add_symbol
    def test_fun(x: int) -> int:
        """
        HELP TEST
        """
        return 0

    assert neurolang.predicate_parameter_names("q") == ("0", "1")
    assert neurolang.predicate_parameter_names(q) == ("0", "1")
    assert neurolang.predicate_parameter_names(r) == ("x", )
    assert neurolang.symbols[r].predicate_parameter_names == ("x", )
    assert r[x].help() is not None
    assert neurolang.symbols["test_fun"].help().strip() == "HELP TEST"
コード例 #23
0
def test_load_spherical_volume_datalog():
    neurolang = frontend.NeurolangDL()

    inferior = ExplicitVBR(np.array([[0, 0, 0], [1, 1, 1]]), np.eye(4))

    regions = neurolang.add_tuple_set({(inferior, "inferior_region")},
                                      name="regions")
    neurolang.sphere((0, 0, 0), 0.5, name="unit_sphere")
    assert neurolang.symbols["unit_sphere"].value == SphericalVolume((0, 0, 0),
                                                                     0.5)

    q = neurolang.new_symbol()
    x = neurolang.new_region_symbol(name="x")
    n = neurolang.new_region_symbol(name="n")
    query = neurolang.query(
        q(x),
        neurolang.symbols.overlapping(x, neurolang.symbols.unit_sphere)
        & regions(x, n),
    )

    assert len(query.value) == 1
    assert next(iter(query.value))[0] == inferior

    neurolang.make_implicit_regions_explicit(np.eye(4), (500, 500, 500))
    query = neurolang.query(
        q(x),
        neurolang.symbols.overlapping(x, neurolang.symbols.unit_sphere)
        & regions(x, n),
    )

    assert len(query.value) == 1
    assert next(iter(query.value))[0] == inferior

    sphere_constant = neurolang.symbols["unit_sphere"].value
    assert (isinstance(sphere_constant, ExplicitVBR)
            and np.array_equal(sphere_constant.affine, np.eye(4))
            and sphere_constant.image_dim == (500, 500, 500)
            and np.array_equal(sphere_constant.voxels, [[0, 0, 0]]))
コード例 #24
0
ファイル: test_frontend.py プロジェクト: tgy/NeuroLang
def test_neurolang_dl_aggregation():
    neurolang = frontend.NeurolangDL()
    q = neurolang.new_symbol(name='q')
    p = neurolang.new_symbol(name='p')
    r = neurolang.new_symbol(name='r')
    x = neurolang.new_symbol(name='x')
    y = neurolang.new_symbol(name='y')

    @neurolang.add_symbol
    def sum_(x):
        return sum(x)

    for i in range(10):
        q[i % 2, i] = True

    p[x, sum_(y)] = q[x, y]

    sol = neurolang.query(r(x, y), p(x, y))

    res_q = {(0, 2 + 4 + 8), (1, 1 + 5 + 9)}

    assert len(sol) == 2
    assert sol[r] == res_q
    assert sol[p] == res_q
コード例 #25
0
import numpy as np

from neurolang import frontend as fe

###############################################################################
# Load the Destrieux example from nilearn
# ---------------------------------------

destrieux_dataset = datasets.fetch_atlas_destrieux_2009()
destrieux_map = nib.load(destrieux_dataset['maps'])

###############################################################################
# Initialize the NeuroLang instance and load Destrieux's cortical parcellation
# -----------------------------------------------------------------------------

nl = fe.NeurolangDL()
destrieux = nl.new_symbol(name='destrieux')
d = []
for label_number, name in destrieux_dataset['labels']:
    if label_number == 0:
        continue
    name = name.decode()
    region = nl.create_region(destrieux_map, label=label_number)
    if region is None:
        continue
    name = name.replace('-', '_').replace(' ', '_')
    d.append((name.lower(), region))

destrieux = nl.add_tuple_set(d, name='destrieux')

###############################################################################
コード例 #26
0
def test_add_tuple_set_length():
    nl = fe.NeurolangDL()
    test = ['test0', 'test1', 'test2']
    nl.add_tuple_set(((e, ) for e in test), name='test')

    assert len(nl.symbols['test']) == 3