예제 #1
0
def test__in_mem_dm__get_hit_rows_for_queries():
    query_rome = 'rome'
    query_caesar = 'caesar'

    record_brutus = 'brutus'
    record_caesar = 'caesar'

    hits = {
        query_rome: {
            record_caesar: Hit(1.0, datetime(1999, 1, 1)),
            record_brutus: Hit(2.0, datetime(1999, 1, 1)),
        },
        query_caesar: {
            record_caesar: Hit(1.0, datetime(1999, 1, 1)),
        }
    }
    fake_model = AbstractQueryDataModel()
    fake_model.get_hit_rows = mock.Mock(
        return_value=hits.iteritems())

    sut = InMemoryQueryDataModel(fake_model)

    ret_hits = list(sut.get_hit_rows_for_queries([query_rome]))
    assert len(ret_hits) == 1

    query, q_hits = ret_hits[0]

    assert query == query_rome

    for record, hit in q_hits.iteritems():
        assert hits[query_rome][record] == hit
예제 #2
0
def test__ThresholdQueryNeighbourhood():
    query_string = 'fat cat'

    similarities = {
        'fat rat': 0.5,
        'fat fat': 0.49,
    }

    fake_model = AbstractQueryDataModel()
    fake_sim = AbstractQuerySimilarity()

    def query_sim(query1, query2):
        return similarities[query2]

    def get_queries():
        return similarities.keys()

    fake_sim.get_similarity = mock.Mock(side_effect=query_sim)
    fake_model.get_queries = mock.Mock(side_effect=get_queries)

    sut = ThresholdQueryNeighbourhood(data_model=fake_model,
                                      query_sim=fake_sim,
                                      sim_threshold=0.5)

    nbours = list(sut.get_neighbours(query_string))

    assert len(nbours) == 1
    assert nbours[0] == 'fat rat'
예제 #3
0
def test__in_mem_dm__get_hit_rows_for_queries():
    query_rome = 'rome'
    query_caesar = 'caesar'

    record_brutus = 'brutus'
    record_caesar = 'caesar'

    hits = {
        query_rome: {
            record_caesar: Hit(1.0, datetime(1999, 1, 1)),
            record_brutus: Hit(2.0, datetime(1999, 1, 1)),
        },
        query_caesar: {
            record_caesar: Hit(1.0, datetime(1999, 1, 1)),
        }
    }
    fake_model = AbstractQueryDataModel()
    fake_model.get_hit_rows = mock.Mock(return_value=hits.iteritems())

    sut = InMemoryQueryDataModel(fake_model)

    ret_hits = list(sut.get_hit_rows_for_queries([query_rome]))
    assert len(ret_hits) == 1

    query, q_hits = ret_hits[0]

    assert query == query_rome

    for record, hit in q_hits.iteritems():
        assert hits[query_rome][record] == hit
예제 #4
0
def test__in_mem_dm__get_hit_rows_for_queries__unknown_query():
    query_rome = 'rome'
    query_caesar = 'caesar'

    query_unknown = 'unknown'

    record_brutus = 'brutus'
    record_caesar = 'caesar'

    hits = {
        query_rome: {
            record_caesar: Hit(1.0, datetime(1999, 1, 1)),
            record_brutus: Hit(2.0, datetime(1999, 1, 1)),
        },
        query_caesar: {
            record_caesar: Hit(1.0, datetime(1999, 1, 1)),
        }
    }
    fake_model = AbstractQueryDataModel()
    fake_model.get_hit_rows = mock.Mock(return_value=hits.iteritems())

    sut = InMemoryQueryDataModel(fake_model)

    ret_hits = list(sut.get_hit_rows_for_queries([query_unknown]))
    assert len(ret_hits) == 0
예제 #5
0
def test__in_mem_dm__get_hit_rows_for_queries__unknown_query():
    query_rome = 'rome'
    query_caesar = 'caesar'

    query_unknown = 'unknown'

    record_brutus = 'brutus'
    record_caesar = 'caesar'

    hits = {
        query_rome: {
            record_caesar: Hit(1.0, datetime(1999, 1, 1)),
            record_brutus: Hit(2.0, datetime(1999, 1, 1)),
        },
        query_caesar: {
            record_caesar: Hit(1.0, datetime(1999, 1, 1)),
        }
    }
    fake_model = AbstractQueryDataModel()
    fake_model.get_hit_rows = mock.Mock(
        return_value=hits.iteritems())

    sut = InMemoryQueryDataModel(fake_model)

    ret_hits = list(sut.get_hit_rows_for_queries([query_unknown]))
    assert len(ret_hits) == 0
예제 #6
0
def test__ThresholdQueryNeighbourhood():
    query_string = 'fat cat'

    similarities = {
        'fat rat': 0.5,
        'fat fat': 0.49,
    }

    fake_model = AbstractQueryDataModel()
    fake_sim = AbstractQuerySimilarity()

    def query_sim(query1, query2):
        return similarities[query2]

    def get_queries():
        return similarities.keys()

    fake_sim.get_similarity = mock.Mock(side_effect=query_sim)
    fake_model.get_queries = mock.Mock(side_effect=get_queries)

    sut = ThresholdQueryNeighbourhood(
        data_model=fake_model,
        query_sim=fake_sim,
        sim_threshold=0.5)

    nbours = list(sut.get_neighbours(query_string))

    assert len(nbours) == 1
    assert nbours[0] == 'fat rat'
예제 #7
0
def test__in_mem_dm__get_hit_rows():
    query_rome = 'rome'
    query_caesar = 'caesar'

    record_brutus = 'brutus'
    record_caesar = 'caesar'

    hits = {
        query_rome: {
            record_caesar: Hit(1.0, datetime(1999, 1, 1)),
            record_brutus: Hit(2.0, datetime(1999, 1, 1)),
        },
        query_caesar: {
            record_caesar: Hit(1.0, datetime(1999, 1, 1)),
        }
    }
    fake_model = AbstractQueryDataModel()
    fake_model.get_hit_rows = mock.Mock(
        return_value=hits.iteritems())

    sut = InMemoryQueryDataModel(fake_model)

    for query, q_hits in sut.get_hit_rows():
        for record, hit in q_hits.iteritems():
            assert hits[query][record] == hit
예제 #8
0
def test__in_mem_dm__refresh__underlying_data_model_is_refreshed():
    hits = {}
    fake_model = AbstractQueryDataModel()
    fake_model.get_hit_rows = mock.Mock(return_value=hits.iteritems())
    fake_model.refresh = mock.Mock()

    sut = InMemoryQueryDataModel(fake_model)

    refreshed_components = set()
    sut.refresh(refreshed_components)

    fake_model.refresh.assert_called_once_with(refreshed_components)
    assert fake_model in refreshed_components
    assert sut in refreshed_components
예제 #9
0
def test__in_mem_dm__refresh__underlying_data_model_is_refreshed():
    hits = {
    }
    fake_model = AbstractQueryDataModel()
    fake_model.get_hit_rows = mock.Mock(
        return_value=hits.iteritems())
    fake_model.refresh = mock.Mock()

    sut = InMemoryQueryDataModel(fake_model)

    refreshed_components = set()
    sut.refresh(refreshed_components)

    fake_model.refresh.assert_called_once_with(refreshed_components)
    assert fake_model in refreshed_components
    assert sut in refreshed_components
예제 #10
0
def test__thres_nhood__refresh__data_model_and_similarity_refreshed():
    fake_model = AbstractQueryDataModel()
    fake_model.refresh = mock.Mock()
    fake_sim = AbstractQuerySimilarity()
    fake_sim.refresh = mock.Mock()

    sut = ThresholdQueryNeighbourhood(data_model=fake_model,
                                      query_sim=fake_sim,
                                      sim_threshold=0.5)

    refreshed_components = set()
    sut.refresh(refreshed_components)

    assert fake_model in refreshed_components
    assert fake_sim in refreshed_components
    assert sut in refreshed_components
    assert fake_model.refresh.call_count == 1
    assert fake_sim.refresh.call_count == 1
예제 #11
0
def test__thres_nhood__refresh__data_model_and_similarity_refreshed():
    fake_model = AbstractQueryDataModel()
    fake_model.refresh = mock.Mock()
    fake_sim = AbstractQuerySimilarity()
    fake_sim.refresh = mock.Mock()

    sut = ThresholdQueryNeighbourhood(
        data_model=fake_model,
        query_sim=fake_sim,
        sim_threshold=0.5)

    refreshed_components = set()
    sut.refresh(refreshed_components)

    assert fake_model in refreshed_components
    assert fake_sim in refreshed_components
    assert sut in refreshed_components
    assert fake_model.refresh.call_count == 1
    assert fake_sim.refresh.call_count == 1
예제 #12
0
def test__in_mem_dm__refresh__data_is_reloaded():
    query_rome = 'rome'
    record_caesar = 'caesar'

    hits = {}
    fake_model = AbstractQueryDataModel()
    fake_model.get_hit_rows = mock.Mock(return_value=hits.iteritems())
    fake_model.refresh = mock.Mock()

    sut = InMemoryQueryDataModel(fake_model)

    assert {k: v for k, v in sut.get_hit_rows()} == {}

    hits[query_rome] = {
        record_caesar: Hit(1.0, datetime(1999, 1, 1)),
    }

    sut.refresh(set())

    for record_id, rec_prefs in sut.get_hit_rows():
        for session_id, pref in rec_prefs.iteritems():
            assert hits[record_id][session_id] == pref
예제 #13
0
def test__in_mem_dm__get_queries():
    query_rome = 'rome'
    query_caesar = 'caesar'

    record_brutus = 'brutus'
    record_caesar = 'caesar'

    hits = {
        query_rome: {
            record_caesar: Hit(1.0, datetime(1999, 1, 1)),
            record_brutus: Hit(2.0, datetime(1999, 1, 1)),
        },
        query_caesar: {
            record_caesar: Hit(1.0, datetime(1999, 1, 1)),
        }
    }
    fake_model = AbstractQueryDataModel()
    fake_model.get_hit_rows = mock.Mock(return_value=hits.iteritems())

    sut = InMemoryQueryDataModel(fake_model)

    ret_queries = list(sut.get_queries())
    assert sorted(hits.keys()) == sorted(ret_queries)
예제 #14
0
def test__in_mem_dm__refresh__data_is_reloaded():
    query_rome = 'rome'
    record_caesar = 'caesar'

    hits = {}
    fake_model = AbstractQueryDataModel()
    fake_model.get_hit_rows = mock.Mock(
        return_value=hits.iteritems())
    fake_model.refresh = mock.Mock()

    sut = InMemoryQueryDataModel(fake_model)

    assert {k: v for k, v in sut.get_hit_rows()} == {}

    hits[query_rome] = {
        record_caesar: Hit(1.0, datetime(1999, 1, 1)),
    }

    sut.refresh(set())

    for record_id, rec_prefs in sut.get_hit_rows():
        for session_id, pref in rec_prefs.iteritems():
            assert hits[record_id][session_id] == pref
예제 #15
0
def test__q_recommender__refresh__underlying_components_are_refreshed():
    fake_model = AbstractQueryDataModel()
    fake_model.refresh = mock.Mock()
    fake_sim = AbstractQuerySimilarity()
    fake_sim.refresh = mock.Mock()
    fake_nhood = AbstractQueryNeighbourhood()
    fake_nhood.refresh = mock.Mock()

    sut = QueryBasedRecommender(
        data_model=fake_model,
        query_sim=fake_sim,
        query_nhood=fake_nhood,
        scorer=WeightedSumScorer(lambda r, hit_row: 1.0))

    refreshed_components = set()
    sut.refresh(refreshed_components)

    assert fake_model in refreshed_components
    assert fake_sim in refreshed_components
    assert fake_nhood in refreshed_components
    assert sut in refreshed_components
    assert fake_model.refresh.call_count == 1
    assert fake_sim.refresh.call_count == 1
    assert fake_nhood.refresh.call_count == 1
예제 #16
0
def test__in_mem_dm__get_queries():
    query_rome = 'rome'
    query_caesar = 'caesar'

    record_brutus = 'brutus'
    record_caesar = 'caesar'

    hits = {
        query_rome: {
            record_caesar: Hit(1.0, datetime(1999, 1, 1)),
            record_brutus: Hit(2.0, datetime(1999, 1, 1)),
        },
        query_caesar: {
            record_caesar: Hit(1.0, datetime(1999, 1, 1)),
        }
    }
    fake_model = AbstractQueryDataModel()
    fake_model.get_hit_rows = mock.Mock(
        return_value=hits.iteritems())

    sut = InMemoryQueryDataModel(fake_model)

    ret_queries = list(sut.get_queries())
    assert sorted(hits.keys()) == sorted(ret_queries)
예제 #17
0
def test__q_recommender__refresh__underlying_components_are_refreshed():
    fake_model = AbstractQueryDataModel()
    fake_model.refresh = mock.Mock()
    fake_sim = AbstractQuerySimilarity()
    fake_sim.refresh = mock.Mock()
    fake_nhood = AbstractQueryNeighbourhood()
    fake_nhood.refresh = mock.Mock()

    sut = QueryBasedRecommender(
        data_model=fake_model,
        query_sim=fake_sim,
        query_nhood=fake_nhood,
        scorer=WeightedSumScorer(lambda r, hit_row: 1.0))

    refreshed_components = set()
    sut.refresh(refreshed_components)

    assert fake_model in refreshed_components
    assert fake_sim in refreshed_components
    assert fake_nhood in refreshed_components
    assert sut in refreshed_components
    assert fake_model.refresh.call_count == 1
    assert fake_sim.refresh.call_count == 1
    assert fake_nhood.refresh.call_count == 1
예제 #18
0
def test__in_mem_dm__get_hit_rows():
    query_rome = 'rome'
    query_caesar = 'caesar'

    record_brutus = 'brutus'
    record_caesar = 'caesar'

    hits = {
        query_rome: {
            record_caesar: Hit(1.0, datetime(1999, 1, 1)),
            record_brutus: Hit(2.0, datetime(1999, 1, 1)),
        },
        query_caesar: {
            record_caesar: Hit(1.0, datetime(1999, 1, 1)),
        }
    }
    fake_model = AbstractQueryDataModel()
    fake_model.get_hit_rows = mock.Mock(return_value=hits.iteritems())

    sut = InMemoryQueryDataModel(fake_model)

    for query, q_hits in sut.get_hit_rows():
        for record, hit in q_hits.iteritems():
            assert hits[query][record] == hit