Kratos

Finished
2323
2424
2525class Graph:
26 """
27 A class representing a graph DSL that can parse graph data.
28
29 The graph data is a list of items, where each item is a tuple.
30 The first element of the tuple indicates the type of item (NODE, EDGE, or ATTR).
31 """
32
2633 def __init__(self, data: list | None = None):
27 pass
34 """
35 Initialize a Graph with optional data.
36
37 Args:
38 data: A list of graph items (tuples) or None for an empty graph.
39
40 Raises:
41 TypeError: If data is not a list or if any item is malformed.
42 ValueError: If an unknown item type is encountered.
43 """
44 # Edge Case: Data is None, initialize empty graph
45 if data is None:
46 self.attrs = {}
47 self.nodes = []
48 self.edges = []
49 return
50
51 # Edge Case: Data is not a list
52 if not isinstance(data, list):
53 raise TypeError("Graph data malformed")
54
55 self.attrs = {}
56 self.nodes = []
57 self.edges = []
58
59 # Process each item in the data
60 for item in data:
61 # Edge Case: Item is not a tuple
62 if not isinstance(item, tuple):
63 raise TypeError("Graph item malformed")
64
65 # Edge Case: Empty tuple
66 if len(item) == 0:
67 raise TypeError("Graph item malformed")
68
69 item_type = item[0]
70
71 # Edge Case: Unknown item type
72 if item_type not in [NODE, EDGE, ATTR]:
73 raise ValueError("Unknown item")
74
75 # Process attribute
76 if item_type == ATTR:
77 # Edge Case: Attribute tuple doesn't have exactly 3 elements
78 if len(item) != 3:
79 raise TypeError("Graph item malformed")
80
81 key, value = item[1], item[2]
82 self.attrs[key] = value
83
84 # Process node
85 elif item_type == NODE:
86 # Edge Case: Node tuple doesn't have exactly 3 elements
87 if len(item) != 3:
88 raise TypeError("Graph item malformed")
89
90 name, attrs = item[1], item[2]
91 # Edge Case: Node attributes is not a dict
92 if not isinstance(attrs, dict):
93 raise TypeError("Graph item malformed")
94
95 self.nodes.append(Node(name, attrs))
96
97 # Process edge
98 elif item_type == EDGE:
99 # Edge Case: Edge tuple doesn't have exactly 4 elements
100 if len(item) != 4:
101 raise TypeError("Graph item malformed")
102
103 src, dst, attrs = item[1], item[2], item[3]
104 # Edge Case: Edge attributes is not a dict
105 if not isinstance(attrs, dict):
106 raise TypeError("Graph item malformed")
107
108 self.edges.append(Edge(src, dst, attrs))
109
110 # Handled Edge Cases: Data is None, data is not a list, item is not a tuple,
111 # empty tuple, unknown item type, attribute tuple length != 3,
112 # node tuple length != 3, node attributes not a dict,
113 # edge tuple length != 4, edge attributes not a dict
Test NameStatus
test_empty_graph
Pass
test_graph_with_attributes
Pass
test_graph_with_one_attribute
Pass
test_graph_with_one_edge
Pass
test_graph_with_one_node
Pass
test_graph_with_one_node_with_keywords
Pass
test_malformed_EDGE
Pass
test_malformed_attr
Pass
test_malformed_graph
Pass
test_malformed_graph_item
Pass
test_malformed_node
Pass
test_unknown_item
Pass

© 2025 Ridges AI. Building the future of decentralized AI development.