1
1
import secrets
2
2
import pytest
3
- from precisely import assert_that , contains_exactly
4
3
5
4
from cassandra .cluster import Session
6
5
from ragstack_knowledge_graph .knowledge_graph import CassandraKnowledgeGraph
7
6
from ragstack_knowledge_graph .traverse import Node , Relation
8
7
9
8
from .conftest import DataFixture
10
9
10
+
11
11
def test_no_embeddings (db_session : Session , db_keyspace : str ) -> None :
12
12
uid = secrets .token_hex (8 )
13
13
node_table = f"entities_{ uid } "
@@ -22,6 +22,7 @@ def test_no_embeddings(db_session: Session, db_keyspace: str) -> None:
22
22
)
23
23
graph .insert ([Node (name = "a" , type = "b" )])
24
24
25
+
25
26
def test_traverse_marie_curie (marie_curie : DataFixture ) -> None :
26
27
(result_nodes , result_edges ) = marie_curie .graph_store .graph .subgraph (
27
28
start = Node ("Marie Curie" , "Person" ),
@@ -40,45 +41,67 @@ def test_traverse_marie_curie(marie_curie: DataFixture) -> None:
40
41
Node (name = "Professor" , type = "Profession" ),
41
42
]
42
43
expected_edges = {
43
- Relation (Node ("Marie Curie" , "Person" ), Node ("Polish" , "Nationality" ), "HAS_NATIONALITY" ),
44
- Relation (Node ("Marie Curie" , "Person" ), Node ("French" , "Nationality" ), "HAS_NATIONALITY" ),
45
44
Relation (
46
- Node ("Marie Curie" , "Person" ), Node ("Physicist" , "Profession" ), "HAS_PROFESSION"
45
+ Node ("Marie Curie" , "Person" ),
46
+ Node ("Polish" , "Nationality" ),
47
+ "HAS_NATIONALITY" ,
48
+ ),
49
+ Relation (
50
+ Node ("Marie Curie" , "Person" ),
51
+ Node ("French" , "Nationality" ),
52
+ "HAS_NATIONALITY" ,
53
+ ),
54
+ Relation (
55
+ Node ("Marie Curie" , "Person" ),
56
+ Node ("Physicist" , "Profession" ),
57
+ "HAS_PROFESSION" ,
58
+ ),
59
+ Relation (
60
+ Node ("Marie Curie" , "Person" ),
61
+ Node ("Chemist" , "Profession" ),
62
+ "HAS_PROFESSION" ,
47
63
),
48
- Relation (Node ("Marie Curie" , "Person" ), Node ("Chemist" , "Profession" ), "HAS_PROFESSION" ),
49
64
Relation (
50
- Node ("Marie Curie" , "Person" ), Node ("Professor" , "Profession" ), "HAS_PROFESSION"
65
+ Node ("Marie Curie" , "Person" ),
66
+ Node ("Professor" , "Profession" ),
67
+ "HAS_PROFESSION" ,
51
68
),
52
69
Relation (
53
70
Node ("Marie Curie" , "Person" ),
54
71
Node ("Radioactivity" , "Scientific concept" ),
55
72
"RESEARCHED" ,
56
73
),
57
74
Relation (Node ("Marie Curie" , "Person" ), Node ("Nobel Prize" , "Award" ), "WON" ),
58
- Relation (Node ("Marie Curie" , "Person" ), Node ("Pierre Curie" , "Person" ), "MARRIED_TO" ),
75
+ Relation (
76
+ Node ("Marie Curie" , "Person" ), Node ("Pierre Curie" , "Person" ), "MARRIED_TO"
77
+ ),
59
78
Relation (
60
79
Node ("Marie Curie" , "Person" ),
61
80
Node ("University of Paris" , "Organization" ),
62
81
"WORKED_AT" ,
63
82
),
64
83
}
65
- assert_that (result_edges , contains_exactly ( * expected_edges ) )
66
- assert_that (result_nodes , contains_exactly ( * expected_nodes ) )
84
+ assert sorted (result_edges ) == sorted ( expected_edges )
85
+ assert sorted (result_nodes ) == sorted ( expected_nodes )
67
86
68
87
69
88
def test_fuzzy_search (marie_curie : DataFixture ) -> None :
70
89
if not marie_curie .has_embeddings :
71
- pytest .skip ("Fuzzy search requires embeddings. Run with openai environment variables" )
72
- result_nodes = marie_curie .graph_store .graph .query_nearest_nodes (["Marie" , "Poland" ])
90
+ pytest .skip (
91
+ "Fuzzy search requires embeddings. Run with openai environment variables"
92
+ )
93
+ result_nodes = marie_curie .graph_store .graph .query_nearest_nodes (
94
+ ["Marie" , "Poland" ]
95
+ )
73
96
expected_nodes = [
74
97
Node (name = "Marie Curie" , type = "Person" ),
75
98
Node (name = "Polish" , type = "Nationality" , properties = {"European" : True }),
76
99
]
77
- assert_that (result_nodes , contains_exactly ( * expected_nodes ) )
100
+ assert sorted (result_nodes ) == sorted ( expected_nodes )
78
101
79
102
result_nodes = marie_curie .graph_store .graph .query_nearest_nodes (["European" ], k = 2 )
80
103
expected_nodes = [
81
104
Node (name = "Polish" , type = "Nationality" , properties = {"European" : True }),
82
105
Node (name = "French" , type = "Nationality" , properties = {"European" : True }),
83
106
]
84
- assert_that (result_nodes , contains_exactly ( * expected_nodes ) )
107
+ assert sorted (result_nodes ) == sorted ( expected_nodes )
0 commit comments