Spaces:
Runtime error
Runtime error
| import sys; | |
| import validate.amr; | |
| import validate.eds; | |
| import validate.sdp; | |
| import validate.ucca; | |
| from validate.utilities import report; | |
| def test(graph, actions, stream = sys.stderr): | |
| n = 0; | |
| if not isinstance(graph.id, str) or len(graph.id) == 0: | |
| n += 1; | |
| report(graph, | |
| "missing or invalid ‘id’ property", | |
| stream = stream); | |
| if not isinstance(graph.flavor, int) or graph.flavor not in {0, 1, 2}: | |
| n += 1; | |
| report(graph, | |
| "missing or invalid ‘flavor’ property", | |
| stream = stream); | |
| if not isinstance(graph.framework, str) or \ | |
| graph.framework not in {"ccd", "dm", "pas", "psd", "ptg", "ud", | |
| "eds", "ucca", "amr", "drg"}: | |
| n += 1; | |
| report(graph, | |
| "missing or invalid ‘framework’ property", | |
| stream = stream); | |
| elif graph.flavor == 0 and \ | |
| graph.framework not in {"ccd", "dm", "pas", "psd", "ud"} or \ | |
| graph.flavor == 1 and graph.framework not in {"eds", "ptg", "ucca"} or \ | |
| graph.flavor == 2 and graph.framework not in {"amr", "drg"}: | |
| n += 1; | |
| report(graph, | |
| "invalid Flavor ({}) framework: ‘{}’" | |
| "".format(graph.flavor, graph.framework), stream = stream); | |
| if "input" in actions: | |
| if not isinstance(graph.input, str) or len(graph.input) == 0: | |
| n += 1; | |
| report(graph, | |
| "missing or invalid ‘input’ property", | |
| stream = stream); | |
| l = len(graph.input) if graph.input else 0; | |
| for node in graph.nodes: | |
| if not isinstance(node.id, int): | |
| n += 1; | |
| report(graph, | |
| "invalid identifier", | |
| node = node, stream = stream); | |
| if "anchors" in actions and node.anchors and l: | |
| for anchor in node.anchors: | |
| if anchor["from"] < 0 or anchor["from"] > l \ | |
| or anchor["to"] < 0 or anchor["to"] > l \ | |
| or anchor["from"] > anchor["to"]: | |
| n += 1; | |
| report(graph, | |
| "invalid anchor: {}".format(anchor), | |
| node = node, stream = stream); | |
| if "edges" in actions: | |
| # | |
| # the following is most likely redundant: the MRP input codec already has | |
| # to make sure all source and target identifiers actually exist. maybe | |
| # add a type check (int), though? | |
| # | |
| nodes = {node.id: node for node in graph.nodes}; | |
| for edge in graph.edges: | |
| if not isinstance(edge.src, int) or edge.src not in nodes: | |
| n += 1; | |
| report(graph, | |
| "invalid source", | |
| edge = edge, stream = stream); | |
| if not isinstance(edge.tgt, int) or edge.tgt not in nodes: | |
| n += 1; | |
| report(graph, | |
| "invalid target", | |
| edge = edge, stream = stream); | |
| num_attrib = len(edge.attributes) if edge.attributes else 0; | |
| num_values = len(edge.values) if edge.values else 0; | |
| if num_attrib != num_values: | |
| n += 1; | |
| report(graph, | |
| "unaligned ‘attributes’ vs. ‘values’", | |
| edge = edge, stream = stream); | |
| sdp = {"ccd", "dm", "pas", "psd"}; | |
| if graph.framework == "amr" and "amr" in actions: | |
| n += validate.amr.test(graph, actions, stream); | |
| elif graph.framework == "eds" and "eds" in actions: | |
| n += validate.eds.test(graph, actions, stream); | |
| elif graph.framework in sdp and (sdp & actions): | |
| n += validate.sdp.test(graph, actions, stream); | |
| elif graph.framework == "ucca" and "ucca" in actions: | |
| n += validate.ucca.test(graph, actions, stream); | |
| return n; | |