def test_eval(self): entries = [Environment( {"text_query": "ab test", "ground_truth": "y = x + 1"}, set(["ground_truth"]) )] dataset = ListDataset(entries) d = get_samples(dataset, MockParserWithoutVariadicArgs()) aencoder = ActionSequenceEncoder(d, 0) action_sequence = GroundTruthToActionSequence(MockParserWithoutVariadicArgs())( "y = x + 1" ) transform = AddQueryForTreeGenDecoder(aencoder, 3,) query = transform( reference=[Token(None, "ab", "ab"), Token(None, "test", "test")], action_sequence=action_sequence, train=False ) assert np.array_equal( [ [-1, -1, -1], [2, -1, -1], [3, 2, -1], [4, 3, 2], [3, 2, -1], [5, 3, 2], [5, 3, 2], [4, 5, 3], [5, 3, 2], [6, 5, 3] ], query.numpy() )
def test_simple_case(self): entries = [Environment( {"ground_truth": "y = x + 1"}, set(["ground_truth"]) )] dataset = ListDataset(entries) d = get_samples(dataset, MockParser()) aencoder = ActionSequenceEncoder(d, 0) action_sequence = GroundTruthToActionSequence(MockParser())( ground_truth="y = x + 1" ) transform = EncodeActionSequence(aencoder) ground_truth = transform( action_sequence=action_sequence, reference=[Token(None, "foo", "foo"), Token(None, "bar", "bar")], ) assert np.array_equal( [ [3, -1, -1], [4, -1, -1], [-1, 1, -1], [1, -1, -1], [5, -1, -1], [-1, 2, -1], [1, -1, -1], [4, -1, -1], [-1, 3, -1], [1, -1, -1], [6, -1, -1], [-1, 4, -1], [1, -1, -1] ], ground_truth.numpy() )
def test_eval(self): entries = [Environment( {"text_query": "ab test", "ground_truth": "y = x + 1"}, set(["ground_truth"]) )] dataset = ListDataset(entries) d = get_samples(dataset, MockParserWithoutVariadicArgs()) aencoder = ActionSequenceEncoder(d, 0) action_sequence = GroundTruthToActionSequence(MockParserWithoutVariadicArgs())( "y = x + 1" ) transform = AddActionSequenceAsTree(aencoder,) matrix, depth = transform( reference=[Token(None, "ab", "ab"), Token(None, "test", "test")], action_sequence=action_sequence, train=False ) assert np.array_equal( [0, 1, 2, 3, 2, 3, 3, 4, 3, 4], depth.numpy() ) assert np.array_equal( [[0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 1, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], matrix.numpy() )
def test_n_dependent(self): entries = [Environment( {"text_query": "ab test", "ground_truth": "y = x + 1"}, set(["ground_truth"]) )] dataset = ListDataset(entries) d = get_samples(dataset, MockParserWithoutVariadicArgs()) aencoder = ActionSequenceEncoder(d, 0) action_sequence = GroundTruthToActionSequence(MockParserWithoutVariadicArgs())( "y = x + 1" ) transform = AddPreviousActionRules(aencoder, 2, n_dependent=3) prev_rule_action = transform( reference=[Token(None, "ab", "ab"), Token(None, "test", "test")], action_sequence=action_sequence, train=False, ) assert np.array_equal( [ # str -> "y" [[-1, -1, -1], [-1, 3, -1], [-1, -1, -1]], # Number -> number [[8, -1, -1], [9, -1, -1], [-1, -1, -1]], [[-1, -1, -1], [-1, 4, -1], [-1, -1, -1]], ], prev_rule_action.numpy() )
def test_eval(self): entries = [Environment( {"text_query": "foo bar", "ground_truth": "y = x + 1"}, set(["ground_truth"]) )] dataset = ListDataset(entries) d = get_samples(dataset, MockParser()) aencoder = ActionSequenceEncoder(d, 0) action_sequence = GroundTruthToActionSequence(MockParser())( "y = x + 1" ) transform = AddActions(aencoder) action_tensor = transform( reference=[Token(None, "foo", "foo"), Token(None, "bar", "bar")], action_sequence=action_sequence, train=False ) assert np.array_equal( [ [2, 2, 0], [4, 3, 1], [6, 4, 2], [6, 4, 2], [5, 3, 1], [6, 5, 5], [6, 5, 5], [5, 5, 5], [6, 4, 8], [6, 4, 8], [5, 5, 5], [9, 6, 11], [9, 6, 11], [-1, -1, -1] ], action_tensor.numpy() )
def test_eval(self): entries = [Environment( {"ground_truth": "y = x + 1"}, set(["ground_truth"]) )] dataset = ListDataset(entries) d = get_samples(dataset, MockParser()) aencoder = ActionSequenceEncoder(d, 0) action_sequence = GroundTruthToActionSequence(MockParser())( "y = x + 1" ) transform = AddPreviousActions(aencoder) prev_action_tensor = transform( reference=[Token(None, "foo", "foo"), Token(None, "bar", "bar")], action_sequence=action_sequence, train=False ) assert np.array_equal( [ [2, -1, -1], [3, -1, -1], [4, -1, -1], [-1, 1, -1], [1, -1, -1], [5, -1, -1], [-1, 2, -1], [1, -1, -1], [4, -1, -1], [-1, 3, -1], [1, -1, -1], [6, -1, -1], [-1, 4, -1], [1, -1, -1] ], prev_action_tensor.numpy() )
def prepare_encoder(self, dataset, parser): words = get_words(dataset, tokenize) chars = get_characters(dataset, tokenize) samples = get_samples(dataset, parser) qencoder = LabelEncoder(words, 2) cencoder = LabelEncoder(chars, 0) aencoder = ActionSequenceEncoder(samples, 2) return qencoder, cencoder, aencoder
def test_impossible_case(self): entries = [Environment( {"ground_truth": "y = x + 1"}, set(["ground_truth"]) )] dataset = ListDataset(entries) d = get_samples(dataset, MockParser()) d.tokens = [("", "y"), ("", "1")] aencoder = ActionSequenceEncoder(d, 0) action_sequence = GroundTruthToActionSequence(MockParser())( ground_truth="y = x + 1" ) transform = EncodeActionSequence(aencoder) with pytest.raises(RuntimeError): transform( reference=[Token(None, "foo", "foo"), Token(None, "bar", "bar")], action_sequence=action_sequence, )
def test_eval(self): entries = [Environment( {"text_query": "ab test", "ground_truth": "y = x + 1"}, set(["ground_truth"]) )] dataset = ListDataset(entries) d = get_samples(dataset, MockParserWithoutVariadicArgs()) aencoder = ActionSequenceEncoder(d, 0) action_sequence = GroundTruthToActionSequence(MockParserWithoutVariadicArgs())( "y = x + 1" ) transform = AddPreviousActionRules(aencoder, 2) prev_rule_action = transform( reference=[Token(None, "ab", "ab"), Token(None, "test", "test")], action_sequence=action_sequence, train=False ) assert np.array_equal( [ # None -> Root [[1, -1, -1], [2, -1, -1], [-1, -1, -1]], # Assign -> Name, expr [[3, -1, -1], [4, -1, -1], [5, -1, -1]], # Name -> str [[4, -1, -1], [6, -1, -1], [-1, -1, -1]], # str -> "x" [[-1, -1, -1], [-1, 1, -1], [-1, -1, -1]], # Op -> str, expr, expr [[7, -1, -1], [6, -1, -1], [5, -1, -1]], # str -> "+" [[-1, -1, -1], [-1, 2, -1], [-1, -1, -1]], # Name -> str [[4, -1, -1], [6, -1, -1], [-1, -1, -1]], # str -> "y" [[-1, -1, -1], [-1, 3, -1], [-1, -1, -1]], # Number -> number [[8, -1, -1], [9, -1, -1], [-1, -1, -1]], [[-1, -1, -1], [-1, 4, -1], [-1, -1, -1]], ], prev_rule_action.numpy() )