def test_incremental_assembler_add_statement_duplicate():
    ev3 = Evidence('eidos', text='3')
    s3 = Influence(e1, e2, ev3)
    s3h = s3.get_hash(matches_fun=location_matches_compositional)
    ia = IncrementalAssembler([s1, s2])
    delta = ia.add_statements([s3])
    assert not delta.new_stmts, delta.new_stmts
    assert delta.new_evidences == {s3h: [ev3]}, delta.new_evidences
    assert not delta.new_refinements, delta.new_refinements
    # TODO: test beliefs
    assert set(ia.get_all_supporting_evidence(s1h)) == {ev1, ev2, ev3}
    assert set(ia.get_all_supporting_evidence(s2h)) == {ev2}
def test_incremental_assembler_add_statement_new_refinement():
    ev4 = Evidence('eidos', text='4')
    s4 = Influence(e2, e4, ev4)
    s4h = s4.get_hash(matches_fun=location_matches_compositional)
    ia = IncrementalAssembler([s1, s2])
    delta = ia.add_statements([s4])
    assert delta.new_stmts, {s4h: s4}
    assert delta.new_evidences == {s4h: [ev4]}, delta.new_evidences
    assert delta.new_refinements == {(s1h, s4h), (s2h, s4h)}, \
        delta.new_refinements
    # TODO: test beliefs
    assert set(ia.get_all_supporting_evidence(s1h)) == {ev1, ev2, ev4}
    assert set(ia.get_all_supporting_evidence(s2h)) == {ev2, ev4}
    assert set(ia.get_all_supporting_evidence(s4h)) == {ev4}
                            }))
e2 = Event(Concept('y',
                   db_refs={'WM': [[('wm/concept/agriculture/crop', 1.0),
                                    None, None, None]],
                            'TEXT': 'some_text2'}))
e3 = Event(Concept('z',
                   db_refs={'WM': [[('wm/concept/crisis_or_disaster', 1.0),
                                    None, None, None]]}))
e4 = Event(Concept('a',
                   db_refs={'WM': [[('wm/concept/agriculture/crop/cereals', 1.0),
                                    None, None, None]]}))
ev1 = Evidence('eidos', text='1')
ev2 = Evidence('eidos', text='2')
s1 = Influence(e1, e2, ev1)
s2 = Influence(e2, e2, ev2)
s1h = s1.get_hash(matches_fun=location_matches_compositional)
s2h = s2.get_hash(matches_fun=location_matches_compositional)
assert s1.get_hash() == s1h


def test_assembly_delta_construct_serialize():
    new_stmts = {s1h: s1, s2h: s2}
    new_evidences = {s1h: s1.evidence, s2h: s2.evidence}
    new_refinements = [(s2h, s1h)]
    beliefs = {s1h: 1.0, s2h: 0.5}
    ad = AssemblyDelta(new_stmts=new_stmts,
                       new_evidences=new_evidences,
                       new_refinements=new_refinements,
                       beliefs=beliefs)
    adj = ad.to_json()
    assert 'evidence' not in adj['new_stmts'][s1h]