""" Test the parser eval interface """ import pytest import stanza from stanza.models.constituency import tree_reader from stanza.protobuf import EvaluateParserRequest, EvaluateParserResponse from stanza.server.parser_eval import build_request, collate, EvaluateParser, ParseResult from stanza.tests.server.test_java_protobuf_requests import check_tree from stanza.tests import * pytestmark = [pytest.mark.travis, pytest.mark.client] def build_one_tree_treebank(fake_scores=True): text = "((S (VP (VB Unban)) (NP (NNP Mox) (NNP Opal))))" trees = tree_reader.read_trees(text) assert len(trees) == 1 gold = trees[0] if fake_scores: prediction = (gold, 1.0) treebank = [ParseResult(gold, [prediction], None, None)] return treebank else: prediction = gold return collate([gold], [prediction]) def check_build(fake_scores=True): treebank = build_one_tree_treebank(fake_scores) request = build_request(treebank) assert len(request.treebank) == 1 check_tree(request.treebank[0].gold, treebank[0][0], None) assert len(request.treebank[0].predicted) == 1 if fake_scores: check_tree(request.treebank[0].predicted[0], treebank[0][1][0][0], treebank[0][1][0][1]) else: check_tree(request.treebank[0].predicted[0], treebank[0][1][0], None) def test_build_tuple_request(): check_build(True) def test_build_notuple_request(): check_build(False) def test_score_one_tree_tuples(): treebank = build_one_tree_treebank(True) with EvaluateParser() as ep: response = ep.process(treebank) assert response.f1 == pytest.approx(1.0) def test_score_one_tree_notuples(): treebank = build_one_tree_treebank(False) with EvaluateParser() as ep: response = ep.process(treebank) assert response.f1 == pytest.approx(1.0)