class TestGraphNt0(KnowledgeGraphTester): @pytest.fixture() def graph(self): return TablesKnowledgeGraph(os.path.join(DATA_PATH, 'nt-0.graph')) num_rows = 10 columns = { 'year', 'division', 'league', 'regular_season', 'playoffs', 'open_cup', 'avg_attendance' } sample_original_strings = { 'fb:row.row.year': 'Year', 'fb:row.row.avg_attendance': 'Avg. Attendance', 'fb:cell.2007': '2007', 'fb:cell.3rd_usl_3rd': '3rd, USL (3rd)', 'fb:part.western': 'Western', 'fb:cell.does_not_exist': None, 'fb:row.row.index': None, 'N4': None, } symmetric_triples = [ ({'fb:row.r1'}, 'fb:row.row.year', {'fb:cell.2001'}), ({'fb:row.r6', 'fb:row.r9', 'fb:row.r10'}, 'fb:row.row.open_cup', {'fb:cell.3rd_round'}), ({'fb:row.r4', 'fb:row.r5', 'fb:row.r8'}, 'fb:row.row.open_cup', {'fb:cell.4th_round', 'fb:cell.1st_round'}), ({'fb:cell.7_169', 'fb:cell.8_567'}, 'fb:cell.cell.number', {7169.0, 8567.0}), ({'fb:cell.2001', 'fb:cell.2002', 'fb:cell.2003'}, 'fb:cell.cell.date', {Date(2001, -1, -1), Date(2002, -1, -1), Date(2003, -1, -1)}), ({'fb:cell.3rd_usl_3rd'}, 'fb:cell.cell.num2', {3.0}), ({'fb:row.r4', 'fb:row.r7'}, 'fb:row.row.next', {'fb:row.r5', 'fb:row.r8'}), ({'fb:row.r3', 'fb:row.r10', 'fb:row.r4'}, 'fb:row.row.index', {3.0, 10.0, 4.0}), ] join_triples = [ ({'fb:row.r2'}, 'fb:row.row.next', {'fb:row.r3', 'fb:row.r42', 'fb:row.r1'}), ({'fb:row.r3', 'fb:row.r5'}, 'fb:row.row.index', {3.0, 5.0, 3.14, '4.0'}), #({'fb:row.r{}'.format(x) for x in xrange(1, 11)}, 'fb:type.object.type', {'fb:type.row'}), # Not supported anymore; use `type-row` instead ({'fb:row.r{}'.format(x) for x in xrange(1, 11) if x != 5}, 'fb:row.row.index', NeqInfiniteSet(5.0)), ({'fb:row.r{}'.format(x) for x in xrange(1, 11) if x != 5}, 'fb:row.row.year', NeqInfiniteSet('fb:cell.2005')), ({'fb:cell.2003', 'fb:cell.2004', 'fb:cell.2005'}, 'fb:cell.cell.number', RangeInfiniteSet('>=', 2003.0, '<', 2006.0)), ({'fb:cell.2003', 'fb:cell.2004', 'fb:cell.2005'}, 'fb:cell.cell.date', RangeInfiniteSet('>=', Date(2003, -1, -1), '<', Date(2006, -1, -1))), ] reversed_join_triples = [ ({'fb:cell.1st_western', 'fb:5th', 'fb:row.row.year'}, 'fb:cell.cell.part', {'fb:part.1st', 'fb:part.western'}), ]
def test_date_range(self): a = RangeInfiniteSet('>', Date(2010, 2, 14), '<=', Date(2011, 12, 1)) assert Date(2010, 2, 13) not in a assert Date(2010, 2, 14) not in a assert Date(2010, 2, 15) in a assert Date(2010, 3, 1) in a assert Date(2011, 2, 1) in a assert Date(2011, 12, 1) in a assert Date(2012, 5, 7) not in a
def test_parse_value(self): assert parse_number('2.3') == 2.3 assert parse_number('-4') == -4 with pytest.raises(Exception): parse_number('3.45m') assert parse_date('1961-08-04') == Date(1961, 8, 4) assert parse_date('XXXX-12-xx') == Date(-1, 12, -1) with pytest.raises(Exception): parse_date('xx-xx-xx') assert parse_value('10') == 10.0 assert parse_value('-3.14') == -3.14 assert parse_value('xx-8-24') == Date(-1, 8, 24) assert parse_value('40 kg') == '40 kg' assert parse_value('xx-xx-xx') == 'xx-xx-xx'
def test_neq(self): a = NeqInfiniteSet(3.0) assert 3.0 not in a assert 6.0 in a assert Date(2010, 1, 2) not in a assert 'fb:cell.puppy' not in a a = NeqInfiniteSet(Date(2010, 1, 2)) assert 3.0 not in a assert Date(2010, 1, 2) not in a assert Date(2010, -1, 2) in a assert 'fb:cell.puppy' not in a a = NeqInfiniteSet('fb:cell.puppy') assert 'fb:cell.puppy' not in a assert 'fb:cell.kitten' in a assert 'fb:part.robot' not in a
def test_basic_range(self): a = RangeInfiniteSet('>', 4.0) assert 2.0 not in a assert 4.0 not in a assert 8.0 in a assert Date(2010, -1, -1) not in a a = RangeInfiniteSet('>=', 4.0) assert 2.0 not in a assert 4.0 in a assert 8.0 in a a = RangeInfiniteSet('<', 4.0) assert 2.0 in a assert 4.0 not in a assert 8.0 not in a a = RangeInfiniteSet('<=', 4.0) assert 2.0 in a assert 4.0 in a assert 8.0 not in a a = RangeInfiniteSet('>', 4.0, '<=', 8.0) assert 2.0 not in a assert 4.0 not in a assert 6.0 in a assert 8.0 in a assert 10.0 not in a assert 'fb:cell.obama' not in a
def test_ensure_same_type(self): assert ensure_same_type({4.0}) == 'N' assert ensure_same_type({ 'fb:cell.puppy': {4.0}, 'fb:cell.kitten': {6.0, 7.0} }) == 'N' assert ensure_same_type({ Date(2010, 1, 2): {4.0}, 'fb:cell.kitten': {6.0, 7.0} }) == 'N' assert ensure_same_type({4.0, 5.0, 20.0, -2.5}) == 'N' assert ensure_same_type({4.0, 5.0, 20.0, -2.5}, 'N') == 'N' assert ensure_same_type({4.0, 5.0, 20.0, -2.5}, ['D', 'N']) == 'N' assert ensure_same_type({Date(-1, 11, 14), Date(-1, 12, 3)}) == 'D' assert ensure_same_type({'fb:cell.puppy', 'fb:cell.kitten'}) == 'fb:cell' assert ensure_same_type({'fb:cell.puppy', 'fb:cell.kitten'}, 'fb:cell') == 'fb:cell' assert ensure_same_type( {x: {(x * 1.)**y for y in xrange(x)} for x in [2, 3, 5, 7]}) == 'N' assert ensure_same_type({ x: {'fb:hello.' + str(y) for y in xrange(x)} for x in [2, 3, 5, 7] }) == 'fb:hello' with pytest.raises(ValueError): ensure_same_type('4.0') with pytest.raises(ValueError): ensure_same_type(set()) with pytest.raises(ValueError): ensure_same_type(set(), 'N') with pytest.raises(ValueError): ensure_same_type({4.0: set(), 5.0: set()}, 'D') with pytest.raises(ValueError): ensure_same_type({4.0: {5.0}, 6.0: {2.0, 'fb:cell.kitten'}}) with pytest.raises(ValueError): ensure_same_type({'fb:row.row.name'}) with pytest.raises(ValueError): ensure_same_type({2.25, 4.6, -5}, 'D') with pytest.raises(ValueError): ensure_same_type({ 'fb:part.puppy': {1.2}, 'fb:cell.kitten': {2.4} }, ['D', 'fb:cell'])
def test_get_type(self): assert get_type(4.0) == 'N' assert get_type(Date(-1, -1, 2)) == 'D' assert get_type('fb:cell.puppy') == 'fb:cell' with pytest.raises(Exception): get_type('argmax') with pytest.raises(Exception): get_type('fb:row.row.name')
def test_operations(self, executor): e = executor # aggregates d = self.run( e, 'fb:cell.usl_a_league fb:row.row.league ' '!fb:row.row.avg_attendance !fb:cell.cell.number') self.run(e, 'sum', d, [{24928.0}]) self.run(e, 'avg', d, [{6232.0}]) self.run(e, 'min', d, [{5628.0}]) self.run(e, 'max', d, [{7169.0}]) self.run(e, 'count', d, [{4.0}]) self.run( e, 'fb:cell.usl_a_league fb:row.row.league ' '!fb:row.row.division count', None, [{1.0}]) d = self.run( e, 'fb:cell.usl_a_league fb:row.row.league ' '!fb:row.row.avg_attendance') self.run_error(e, 'sum', d) d = self.run(e, 'type-row !fb:row.row.year !fb:cell.cell.date') self.run(e, 'min', d, [{Date(2001, -1, -1)}]) self.run(e, 'max', d, [{Date(2010, -1, -1)}]) self.run(e, 'count', d, [{10.0}]) # merge d = self.run( e, 'fb:cell.usl_a_league fb:row.row.league ' 'fb:cell.quarterfinals fb:row.row.playoffs') self.run(e, 'and', d, [{'fb:row.r1', 'fb:row.r4'}]) self.run(e, 'or count', d, [{6.0}]) self.run(e, 'type-row N3 fb:row.row.index != and count', None, [{9.0}]) self.run( e, 'type-row !fb:row.row.avg_attendance !fb:cell.cell.number ' 'N6000 > N8000 < and and count', None, [{4.0}]) # diff self.run( e, 'N11 fb:cell.2001 fb:row.row.year ' '!fb:row.row.regular_season !fb:cell.cell.number diff', None, [{7.0}]) self.run( e, 'fb:cell.2001 fb:cell.2004 or fb:row.row.year ' '!fb:row.row.regular_season !fb:cell.cell.number N3 diff', None, [{1.0, 2.0}])
def test_generic_date_and(self): a = GenericDateInfiniteSet(Date(-1, 4, -1)) assert a & {Date(2010, 4, 2), Date(2010, 5, 3), Date(2011, 4, 7)} == \ {Date(2010, 4, 2), Date(2011, 4, 7)} assert {Date(2010, 4, 2), Date(2010, 5, 3), Date(2011, 4, 7)} & a== \ {Date(2010, 4, 2), Date(2011, 4, 7)}
def test_generic_date(self): a = GenericDateInfiniteSet(Date(2010, 4, -1)) assert Date(2010, 4, 2) in a assert Date(2010, 5, 3) not in a assert Date(2010, -1, -1) not in a assert 4.0 not in a assert a.min_() == Date(2010, 4, 1) assert a.max_() == Date(2010, 4, 30) a = GenericDateInfiniteSet(Date(-1, 4, 20)) assert Date(2010, 4, 20) in a assert Date(2010, 5, 20) not in a assert Date(-1, 4, -1) not in a assert 4.0 not in a assert a.min_() == a.max_() == Date(-1, 4, 20)
def test_date(self): assert Date(2012, 12, -1) == Date(2012, 12, -1) assert len({Date(-1, 4, 14), Date(-1, 4, 14)}) == 1 with pytest.raises(Exception): Date(-1, -1, -1) with pytest.raises(Exception): Date(1990, 0, 12) with pytest.raises(Exception): Date(1990, 4, 32) assert Date(2012, 8, -1) < Date(2012, 12, 4) # Not sure if this is the behavior we want ... assert Date(-1, 8, 24) < Date(2012, 8, 29) with pytest.raises(Exception): # Cannot compare across types Date(1984, -1, -1) > 1985.0
def test_neq_and(self): assert NeqInfiniteSet(3.0) & {3.0, 4.0, Date(2010, 1, 2)} == {4.0} assert {3.0, 4.0, Date(2010, 1, 2)} & NeqInfiniteSet(3.0) == {4.0} assert NeqInfiniteSet(Date(2010, -1, 2)) & \ {3.0, 4.0, Date(2010, 1, 2), Date(2010, -1, 2), Date(2010, -1, -1)} == \ {Date(2010, 1, 2), Date(2010, -1, -1)}