Beispiel #1
0
def test__in_mem_knn__refresh__underlying_data_model_and_similarity_is_refreshed(
):
    fake_model = AbstractRecordDataModel()
    fake_model.get_records = mock.Mock(return_value=[])
    fake_model.refresh = mock.Mock()
    fake_sim = AbstractRecordSimilarity()
    fake_sim.get_similarity = mock.Mock(return_value=1.0)
    fake_sim.refresh = mock.Mock()
    fake_nhood = AbstractRecordNeighbourhood()
    fake_nhood.get_neighbours = mock.Mock(return_value=[])

    sut = InMemoryRecordNeighbourhood(
        fake_model,
        fake_sim,
        50,
        nhood_factory=lambda dm, sim, num_nh: fake_nhood)

    sut = InMemoryRecordNeighbourhood(fake_model, fake_sim, 50)

    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
Beispiel #2
0
def test__combine_rec_similarity__get_similarity():
    record_caesar = 'caesar'
    record_brutus = 'brutus'

    sims = []

    fake_sim1 = AbstractRecordSimilarity()
    fake_sim1.get_similarity = mock.Mock(
        side_effect=lambda f, t: sims[0])
    fake_sim2 = AbstractRecordSimilarity()
    fake_sim2.get_similarity = mock.Mock(
        side_effect=lambda f, t: sims[1])

    sut = CombinedRecordSimilarity(fake_sim1, fake_sim2, weight=0.25)

    sims = [0.8, 1.0]
    assert sut.get_similarity(record_caesar, record_brutus) == 0.95

    sims = [0.0, 1.0]
    assert sut.get_similarity(record_caesar, record_brutus) == 0.75

    sims = [float('nan'), 1.0]
    assert sut.get_similarity(record_caesar, record_brutus) == 0.75

    sims = [1.0, float('nan')]
    assert sut.get_similarity(record_caesar, record_brutus) == 0.25

    sims = [float('nan'), float('nan')]
    assert math.isnan(sut.get_similarity(record_caesar, record_brutus))
Beispiel #3
0
def create_k_nearest_neighbourhood(k, doc_sims, docs):
    fake_model = AbstractRecordDataModel()
    fake_model.get_records = mock.Mock(return_value=docs)
    record_sim = AbstractRecordSimilarity()
    record_sim.get_similarity = mock.Mock(
        side_effect=lambda from_id, to_id: doc_sims[to_id])

    return KNearestRecordNeighbourhood(k=k,
                                       data_model=fake_model,
                                       record_sim=record_sim)
Beispiel #4
0
def create_k_nearest_neighbourhood(k, doc_sims, docs):
    fake_model = AbstractRecordDataModel()
    fake_model.get_records = mock.Mock(
        return_value=docs)
    record_sim = AbstractRecordSimilarity()
    record_sim.get_similarity = mock.Mock(
        side_effect=lambda from_id, to_id: doc_sims[to_id])

    return KNearestRecordNeighbourhood(
        k=k, data_model=fake_model, record_sim=record_sim)
Beispiel #5
0
def test__in_mem_knn__get_nbours():
    record_caesar = 'caesar'
    record_brutus = 'brutus'
    record_napoleon = 'napoleon'

    nbours = {
        record_caesar: [
            record_brutus
        ],
        record_brutus: [
            record_caesar
        ],
        record_napoleon: []
    }
    sims = {
        record_caesar: {
            record_brutus: 0.9
        },
        record_brutus: {
            record_caesar: 0.8
        },
        record_napoleon: {}
    }

    fake_model = AbstractRecordDataModel()
    fake_model.get_records = mock.Mock(return_value=nbours.keys())
    fake_sim = AbstractRecordSimilarity()
    fake_sim.get_similarity = mock.Mock(
        side_effect=lambda from_r, to_r: sims[from_r][to_r])
    fake_nhood = AbstractRecordNeighbourhood()
    fake_nhood.get_neighbours = mock.Mock(
        side_effect=lambda r: nbours[r])

    sut = InMemoryRecordNeighbourhood(
        fake_model, fake_sim, 50,
        nhood_factory=lambda dm, sim, num_nh: fake_nhood)

    assert sut.get_neighbours(record_caesar) == nbours[record_caesar]
    assert sut.get_neighbours(record_brutus) == nbours[record_brutus]
    assert sut.get_neighbours(record_napoleon) == nbours[record_napoleon]

    assert sut.get_neighbours('unknown') == []

    assert sut.get_similarity(record_caesar, record_brutus) ==\
        sims[record_caesar][record_brutus]
    assert sut.get_similarity(record_brutus, record_caesar) ==\
        sims[record_brutus][record_caesar]

    assert math.isnan(sut.get_similarity(record_caesar, record_napoleon))
    assert math.isnan(sut.get_similarity(record_napoleon, record_caesar))

    assert math.isnan(sut.get_similarity('unknown', record_napoleon))
    assert math.isnan(sut.get_similarity(record_caesar, 'unknown'))
Beispiel #6
0
def create_recommender(preferences=default_prefs, doc_sims=doc_sims):
    data_model = AbstractRecordDataModel()
    data_model.get_preferences_of_session = mock.Mock(
        side_effect=lambda s_id: preferences)
    record_sim = AbstractRecordSimilarity()
    record_sim.get_similarity = mock.Mock(
        side_effect=lambda from_id, to_id: doc_sims[from_id][to_id])
    record_nhood = AbstractRecordNeighbourhood()
    record_nhood.get_neighbours = mock.Mock(
        side_effect=lambda doc_id: doc_sims[doc_id].keys())

    return RecordBasedRecommender(
        data_model, record_nhood, record_sim)
Beispiel #7
0
def test__in_mem_knn__get_nbours():
    record_caesar = 'caesar'
    record_brutus = 'brutus'
    record_napoleon = 'napoleon'

    nbours = {
        record_caesar: [record_brutus],
        record_brutus: [record_caesar],
        record_napoleon: []
    }
    sims = {
        record_caesar: {
            record_brutus: 0.9
        },
        record_brutus: {
            record_caesar: 0.8
        },
        record_napoleon: {}
    }

    fake_model = AbstractRecordDataModel()
    fake_model.get_records = mock.Mock(return_value=nbours.keys())
    fake_sim = AbstractRecordSimilarity()
    fake_sim.get_similarity = mock.Mock(
        side_effect=lambda from_r, to_r: sims[from_r][to_r])
    fake_nhood = AbstractRecordNeighbourhood()
    fake_nhood.get_neighbours = mock.Mock(side_effect=lambda r: nbours[r])

    sut = InMemoryRecordNeighbourhood(
        fake_model,
        fake_sim,
        50,
        nhood_factory=lambda dm, sim, num_nh: fake_nhood)

    assert sut.get_neighbours(record_caesar) == nbours[record_caesar]
    assert sut.get_neighbours(record_brutus) == nbours[record_brutus]
    assert sut.get_neighbours(record_napoleon) == nbours[record_napoleon]

    assert sut.get_neighbours('unknown') == []

    assert sut.get_similarity(record_caesar, record_brutus) ==\
        sims[record_caesar][record_brutus]
    assert sut.get_similarity(record_brutus, record_caesar) ==\
        sims[record_brutus][record_caesar]

    assert math.isnan(sut.get_similarity(record_caesar, record_napoleon))
    assert math.isnan(sut.get_similarity(record_napoleon, record_caesar))

    assert math.isnan(sut.get_similarity('unknown', record_napoleon))
    assert math.isnan(sut.get_similarity(record_caesar, 'unknown'))
Beispiel #8
0
def test__combine_rec_similarity__get_similarity__underlying_sims_are_called():
    record_caesar = 'caesar'
    record_brutus = 'brutus'

    fake_sim1 = AbstractRecordSimilarity()
    fake_sim1.get_similarity = mock.Mock(return_value=0.8)
    fake_sim2 = AbstractRecordSimilarity()
    fake_sim2.get_similarity = mock.Mock(return_value=1.0)

    sut = CombinedRecordSimilarity(fake_sim1, fake_sim2, weight=0.25)
    sut.get_similarity(record_caesar, record_brutus)

    fake_sim1.get_similarity.assert_called_with(record_caesar, record_brutus)
    fake_sim2.get_similarity.assert_called_with(record_caesar, record_brutus)
Beispiel #9
0
def test__knn__refresh__underlying_data_model_and_similarity_is_refreshed():
    fake_model = AbstractRecordDataModel()
    fake_model.refresh = mock.Mock()
    fake_sim = AbstractRecordSimilarity()
    fake_sim.refresh = mock.Mock()

    sut = KNearestRecordNeighbourhood(5, fake_model, fake_sim)

    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
Beispiel #10
0
def test__combine_rec_similarity__refresh__underlying_sim_metrics_are_refreshed():
    fake_sim1 = AbstractRecordSimilarity()
    fake_sim1.refresh = mock.Mock()
    fake_sim2 = AbstractRecordSimilarity()
    fake_sim2.refresh = mock.Mock()

    sut = CombinedRecordSimilarity(fake_sim1, fake_sim2, weight=0.25)

    refreshed_components = set()
    sut.refresh(refreshed_components)

    assert fake_sim1 in refreshed_components
    assert fake_sim2 in refreshed_components
    assert sut in refreshed_components
    assert fake_sim1.refresh.call_count == 1
    assert fake_sim2.refresh.call_count == 1
Beispiel #11
0
def test__knn__refresh__underlying_data_model_and_similarity_is_refreshed():
    fake_model = AbstractRecordDataModel()
    fake_model.refresh = mock.Mock()
    fake_sim = AbstractRecordSimilarity()
    fake_sim.refresh = mock.Mock()

    sut = KNearestRecordNeighbourhood(5, fake_model, fake_sim)

    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
Beispiel #12
0
def test__combine_rec_similarity__get_similarity():
    record_caesar = 'caesar'
    record_brutus = 'brutus'

    sims = []

    fake_sim1 = AbstractRecordSimilarity()
    fake_sim1.get_similarity = mock.Mock(side_effect=lambda f, t: sims[0])
    fake_sim2 = AbstractRecordSimilarity()
    fake_sim2.get_similarity = mock.Mock(side_effect=lambda f, t: sims[1])

    sut = CombinedRecordSimilarity(fake_sim1, fake_sim2, weight=0.25)

    sims = [0.8, 1.0]
    assert sut.get_similarity(record_caesar, record_brutus) == 0.95

    sims = [0.0, 1.0]
    assert sut.get_similarity(record_caesar, record_brutus) == 0.75

    sims = [float('nan'), 1.0]
    assert sut.get_similarity(record_caesar, record_brutus) == 0.75

    sims = [1.0, float('nan')]
    assert sut.get_similarity(record_caesar, record_brutus) == 0.25

    sims = [float('nan'), float('nan')]
    assert math.isnan(sut.get_similarity(record_caesar, record_brutus))
Beispiel #13
0
def test__in_mem_knn__refresh__data_is_reloaded():
    record_caesar = 'caesar'
    record_brutus = 'brutus'

    nbours = {
    }
    sims = {
    }

    fake_model = AbstractRecordDataModel()
    fake_model.get_records = mock.Mock(
        side_effect=lambda: nbours.keys())
    fake_model.refresh = mock.Mock()
    fake_sim = AbstractRecordSimilarity()
    fake_sim.get_similarity = mock.Mock(
        side_effect=lambda from_r, to_r: sims[from_r][to_r])
    fake_sim.refresh = mock.Mock()
    fake_nhood = AbstractRecordNeighbourhood()
    fake_nhood.get_neighbours = mock.Mock(
        side_effect=lambda r: nbours[r])

    sut = InMemoryRecordNeighbourhood(
        fake_model, fake_sim, 50,
        nhood_factory=lambda dm, sim, num_nh: fake_nhood)

    assert sut.get_neighbours(record_caesar) == []
    assert math.isnan(sut.get_similarity(record_caesar, record_brutus))

    nbours[record_caesar] = [record_brutus]
    nbours[record_brutus] = [record_caesar]
    sims[record_caesar] = {record_brutus: 0.9}
    sims[record_brutus] = {record_caesar: 0.8}

    sut.refresh(set())

    assert sut.get_neighbours(record_caesar) == nbours[record_caesar]
    assert sut.get_similarity(record_caesar, record_brutus) ==\
        sims[record_caesar][record_brutus]
Beispiel #14
0
def test__refresh__underlying_components_are_refreshed():
    fake_model = AbstractRecordDataModel()
    fake_model.refresh = mock.Mock()
    fake_sim = AbstractRecordSimilarity()
    fake_sim.refresh = mock.Mock()
    fake_nhood = AbstractRecordNeighbourhood()
    fake_nhood.refresh = mock.Mock()

    sut = RecordBasedRecommender(
        data_model=fake_model,
        record_sim=fake_sim,
        record_nhood=fake_nhood)

    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
Beispiel #15
0
def test__in_mem_knn__refresh__data_is_reloaded():
    record_caesar = 'caesar'
    record_brutus = 'brutus'

    nbours = {}
    sims = {}

    fake_model = AbstractRecordDataModel()
    fake_model.get_records = mock.Mock(side_effect=lambda: nbours.keys())
    fake_model.refresh = mock.Mock()
    fake_sim = AbstractRecordSimilarity()
    fake_sim.get_similarity = mock.Mock(
        side_effect=lambda from_r, to_r: sims[from_r][to_r])
    fake_sim.refresh = mock.Mock()
    fake_nhood = AbstractRecordNeighbourhood()
    fake_nhood.get_neighbours = mock.Mock(side_effect=lambda r: nbours[r])

    sut = InMemoryRecordNeighbourhood(
        fake_model,
        fake_sim,
        50,
        nhood_factory=lambda dm, sim, num_nh: fake_nhood)

    assert sut.get_neighbours(record_caesar) == []
    assert math.isnan(sut.get_similarity(record_caesar, record_brutus))

    nbours[record_caesar] = [record_brutus]
    nbours[record_brutus] = [record_caesar]
    sims[record_caesar] = {record_brutus: 0.9}
    sims[record_brutus] = {record_caesar: 0.8}

    sut.refresh(set())

    assert sut.get_neighbours(record_caesar) == nbours[record_caesar]
    assert sut.get_similarity(record_caesar, record_brutus) ==\
        sims[record_caesar][record_brutus]
Beispiel #16
0
def test__in_mem_knn__refresh__underlying_data_model_and_similarity_is_refreshed():
    fake_model = AbstractRecordDataModel()
    fake_model.get_records = mock.Mock(return_value=[])
    fake_model.refresh = mock.Mock()
    fake_sim = AbstractRecordSimilarity()
    fake_sim.get_similarity = mock.Mock(return_value=1.0)
    fake_sim.refresh = mock.Mock()
    fake_nhood = AbstractRecordNeighbourhood()
    fake_nhood.get_neighbours = mock.Mock(return_value=[])

    sut = InMemoryRecordNeighbourhood(
        fake_model, fake_sim, 50,
        nhood_factory=lambda dm, sim, num_nh: fake_nhood)

    sut = InMemoryRecordNeighbourhood(fake_model, fake_sim, 50)

    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
Beispiel #17
0
def test__combine_rec_similarity__get_similarity__underlying_sims_are_called():
    record_caesar = 'caesar'
    record_brutus = 'brutus'

    fake_sim1 = AbstractRecordSimilarity()
    fake_sim1.get_similarity = mock.Mock(return_value=0.8)
    fake_sim2 = AbstractRecordSimilarity()
    fake_sim2.get_similarity = mock.Mock(return_value=1.0)

    sut = CombinedRecordSimilarity(fake_sim1, fake_sim2, weight=0.25)
    sut.get_similarity(record_caesar, record_brutus)

    fake_sim1.get_similarity.assert_called_with(record_caesar, record_brutus)
    fake_sim2.get_similarity.assert_called_with(record_caesar, record_brutus)
Beispiel #18
0
def test__combine_rec_similarity__refresh__underlying_sim_metrics_are_refreshed(
):
    fake_sim1 = AbstractRecordSimilarity()
    fake_sim1.refresh = mock.Mock()
    fake_sim2 = AbstractRecordSimilarity()
    fake_sim2.refresh = mock.Mock()

    sut = CombinedRecordSimilarity(fake_sim1, fake_sim2, weight=0.25)

    refreshed_components = set()
    sut.refresh(refreshed_components)

    assert fake_sim1 in refreshed_components
    assert fake_sim2 in refreshed_components
    assert sut in refreshed_components
    assert fake_sim1.refresh.call_count == 1
    assert fake_sim2.refresh.call_count == 1