class TestClique(unittest.TestCase): def setUp(self): self.Cm = CliqueMaster() self.seq = range(10) sys.stderr = open(os.devnull, 'w') def test_delta_is_0(self): self.Cm._S = deque([ Clique((frozenset([1, 2]), (1, 1))) ]) self.Cm._times = {frozenset([1, 2]): [1]} self.Cm._nodes = {1: set([2]), 2: set([1])} R = self.Cm.getDeltaCliques(0) self.assertEqual(R, set([Clique((frozenset([1, 2]), (1, 1)))])) def test_negative_delta(self): pass def test_big_delta(self): self.Cm._S = deque([ Clique((frozenset([1, 2]), (1, 1))) ]) self.Cm._times = {frozenset([1, 2]): [1]} self.Cm._nodes = {1: set([2]), 2: set([1])} R = self.Cm.getDeltaCliques(100) self.assertEqual(R, set([Clique((frozenset([1, 2]), (-99, 101)))])) def test_simple_triangle_when_delta_is_5(self): self.Cm._S = deque([ Clique((frozenset([1, 2]), (1, 1))), Clique((frozenset([1, 3]), (2, 2))), Clique((frozenset([2, 3]), (3, 3))) ]) self.Cm._nodes = {1: set([2, 3]), 2: set([1, 3]), 3: set([1, 2])} self.Cm._times = { frozenset([1, 3]): [2], frozenset([1, 2]): [1], frozenset([2, 3]): [3]} R = self.Cm.getDeltaCliques(5) R_expected = set([ Clique((frozenset([1, 2, 3]), (-2, 6))), Clique((frozenset([1, 2]), (-4, 6))), Clique((frozenset([2, 3]), (-2, 8))), Clique((frozenset([1, 3]), (-3, 7))) ]) debug_msg = "\nGot :\n" + str(self.Cm) debug_msg += "\nExpected :\n" for c in R_expected: debug_msg += str(c) + "\n" self.assertEqual(R, R_expected, debug_msg) def test_two_links_alterning(self): pass def test_single_link_occurring_every_delta(self): self.Cm._S = deque([ Clique((frozenset([1, 2]), (1, 1))), Clique((frozenset([1, 2]), (3, 3))), ]) self.Cm._nodes = {1: set([2]), 2: set([1])} self.Cm._times = {frozenset([1, 2]): [1, 3]} R = self.Cm.getDeltaCliques(3) R_expected = set([ Clique((frozenset([1, 2]), (-2, 6))) ]) self.assertEqual(R, R_expected) def test_single_link_not_occurring_every_delta(self): self.Cm._S = deque([ Clique((frozenset([1, 2]), (1, 1))), Clique((frozenset([1, 2]), (3, 3))), ]) self.Cm._nodes = {1: set([2]), 2: set([1])} self.Cm._times = {frozenset([1, 2]): [1, 3]} R = self.Cm.getDeltaCliques(1) R_expected = set([ Clique((frozenset([1, 2]), (0, 2))), Clique((frozenset([1, 2]), (2, 4))) ]) self.assertEqual(R, R_expected) def test_triangle_and_many_occurrences_with_delta_too_small(self): self.Cm._S = deque([ Clique((frozenset([1, 2]), (1, 1))), Clique((frozenset([2, 3]), (2, 2))), Clique((frozenset([1, 3]), (3, 3))), Clique((frozenset([1, 2]), (4, 4))), ]) self.Cm._nodes = {1: set([2, 3]), 2: set([1, 3]), 3: set([1, 2])} self.Cm._times = { frozenset([1, 3]): [3], frozenset([1, 2]): [1, 4], frozenset([2, 3]): [2]} R = self.Cm.getDeltaCliques(2) R_expected = set([ Clique((frozenset([1, 2, 3]), (2, 4))), Clique((frozenset([1, 2]), (-1, 3))), Clique((frozenset([1, 3]), (1, 5))), Clique((frozenset([1, 2, 3]), (1, 3))), Clique((frozenset([1, 2]), (2, 6))), Clique((frozenset([2, 3]), (0, 4))) ]) debug_msg = "\nGot :\n" + str(self.Cm) debug_msg += "\nExpected :\n" for c in R_expected: debug_msg += str(c) + "\n" self.assertEqual(R, R_expected, debug_msg) def test_triangle_and_many_occurrences_with_delta_big(self): self.Cm._S = deque([ Clique((frozenset([1, 2]), (1, 1))), Clique((frozenset([2, 3]), (2, 2))), Clique((frozenset([1, 3]), (3, 3))), Clique((frozenset([1, 2]), (4, 4))), ]) self.Cm._nodes = {1: set([2, 3]), 2: set([1, 3]), 3: set([1, 2])} self.Cm._times = { frozenset([1, 3]): [3], frozenset([1, 2]): [1, 4], frozenset([2, 3]): [2]} R = self.Cm.getDeltaCliques(5) R_expected = set([ Clique((frozenset([1, 2]), (-4, 9))), Clique((frozenset([1, 2, 3]), (-2, 7))), Clique((frozenset([1, 3]), (-2, 8))), Clique((frozenset([2, 3]), (-3, 7))) ]) self.assertEqual(R, R_expected) def test_triangle_and_many_occurrences_with_delta_huge(self): self.Cm._S = deque([ Clique((frozenset([1, 2]), (1, 1))), Clique((frozenset([2, 3]), (2, 2))), Clique((frozenset([1, 3]), (3, 3))), Clique((frozenset([1, 2]), (4, 4))) ]) self.Cm._nodes = {1: set([2, 3]), 2: set([1, 3]), 3: set([1, 2])} self.Cm._times = { frozenset([1, 3]): [3], frozenset([1, 2]): [1, 4], frozenset([2, 3]): [2]} R = self.Cm.getDeltaCliques(100) R_expected = set([ Clique((frozenset([1, 2]), (-99, 104))), Clique((frozenset([1, 2, 3]), (-97, 102))), Clique((frozenset([1, 3]), (-97, 103))), Clique((frozenset([2, 3]), (-98, 102))) ]) debug_msg = "\nGot :\n" + str(self.Cm) debug_msg += "\nExpected :\n" for c in R_expected: debug_msg += str(c) + "\n" self.assertEqual(R, R_expected, debug_msg) def test_simultaneous_links(self): self.Cm._S = deque([ Clique((frozenset([1, 2]), (1, 1))), Clique((frozenset([2, 3]), (1, 1))), Clique((frozenset([1, 3]), (1, 1))) ]) self.Cm._nodes = {1: set([2, 3]), 2: set([1, 3]), 3: set([1, 2])} self.Cm._times = { frozenset([1, 2]): [1], frozenset([2, 3]): [1], frozenset([1, 3]): [1]} R = self.Cm.getDeltaCliques(5) R_expected = set([Clique((frozenset([1, 2, 3]), (-4, 6)))]) self.assertEqual(R, R_expected) def test_simultaneous_links_with_repeat(self): self.Cm._S = deque([ Clique((frozenset([1, 2]), (1, 1))), Clique((frozenset([2, 3]), (1, 1))), Clique((frozenset([1, 3]), (1, 1))), Clique((frozenset([2, 3]), (3, 3))) ]) self.Cm._nodes = {1: set([2, 3]), 2: set([1, 3]), 3: set([1, 2])} self.Cm._times = { frozenset([1, 2]): [1], frozenset([2, 3]): [1, 3], frozenset([1, 3]): [1]} R = self.Cm.getDeltaCliques(5) R_expected = set([ Clique((frozenset([1, 2, 3]), (-4, 6))), Clique((frozenset([2, 3]), (-4, 8))) ]) self.assertEqual(R, R_expected)
from CliqueMaster import CliqueMaster from Clique import Clique import sys # Initiate Cm = CliqueMaster() times = dict() nodes = dict() nb_lines = 0 resurrect = False # Read arguments from command line if len(sys.argv) == 2: delta = int(sys.argv[1]) else: sys.stderr.write( "Usage: cat <stream> | python main.py <int:delta>\ \n\n") sys.exit(1) if delta < 0: sys.stderr.write("Delta must be positive.\n") sys.exit(1) # Read stream for line in sys.stdin: contents = line.split(" ") t = int(contents[0]) u = contents[1].strip() v = contents[2].strip()
from CliqueMaster import CliqueMaster,minNone from Clique import Clique from CliqueCritique import CliqueCritique import sys import bisect Cm = CliqueMaster() times = dict() nodes = dict() delta = int(sys.argv[1]) nb_lines = 0 stock=[] for line in sys.stdin: contents = line.split(" ") t = int(contents[0]) u = int(contents[1]) v = int(contents[2]) link = frozenset([u,v]) time = (t,t) #if t==2: stock.append(CliqueCritique((link,(t,t),0,delta,t,t))) # Populate data structures if not times.has_key(link): times[link] = [] times[link].append(t) if not u in nodes: nodes[u] = set()
def setUp(self): self.Cm = CliqueMaster() self.seq = range(10) sys.stderr = open(os.devnull, 'w')
from CliqueMaster import CliqueMaster from Clique import Clique import sys # Initiate Cm = CliqueMaster() times = dict() nodes = dict() nb_lines = 0 resurrect = False # Read arguments from command line if len(sys.argv) != 2: sys.stderr.write( "Usage: cat <stream> | python main.py <delta>\ \n\n") sys.exit(1) omega = None delta = float(sys.argv[1]) old_t = None # Read stream sorted by b, then e for line in sys.stdin: contents = line.split() t = float(contents[0]) u = contents[1].strip() v = contents[2].strip() # Update value of omega
class TestClique(unittest.TestCase): def setUp(self): self.Cm = CliqueMaster() self.seq = range(10) sys.stderr = open(os.devnull, 'w') def test_delta_is_0(self): sousflot = list([ Clique((frozenset([1,2]),(1,1)),set([])) ]) for c in sousflot: c._td,c._tp = c._tb,c._tb self.Cm.addClique(c) self.Cm._times = {frozenset([1,2]):[1]} self.Cm._nodes = {1:set([2]), 2:set([1])} R = self.Cm.getSpace(10) self.assertEqual(R, set([CliqueCritique((frozenset([1,2]),0,10,1,1))])) def test_negative_delta(self): pass def test_big_delta(self): sousflot = list([ Clique((frozenset([1,2]),(1,1)),set([])) ]) for c in sousflot: c._td,c._tp = c._tb,c._tb self.Cm.addClique(c) self.Cm._times = {frozenset([1,2]):[1]} self.Cm._nodes = {1:set([2]), 2:set([1])} R = self.Cm.getSpace(100) self.assertEqual(R, set([CliqueCritique((frozenset([1,2]),0,100,1,1))])) def test_simple_triangle_when_delta_is_5(self): sousflot = list([ Clique((frozenset([1, 2]),(1,1)),set([])), Clique((frozenset([1, 3]),(2,2)),set([])), Clique((frozenset([2, 3]),(3,3)),set([])) ]) for c in sousflot: c._td,c._tp = c._tb,c._tb self.Cm.addClique(c) self.Cm._nodes = {1: set([2, 3]), 2: set([1, 3]), 3: set([1, 2])} self.Cm._times = {frozenset([1, 3]): [2], frozenset([1, 2]): [1], frozenset([2, 3]): [3]} R = self.Cm.getSpace(5) R_expected = set([ CliqueCritique((frozenset([1,2,3]),2,5,1,3)), CliqueCritique((frozenset([1,2]),0,5,1,1)), CliqueCritique((frozenset([2,3]),0,5,3,3)), CliqueCritique((frozenset([1,3]),0,5,2,2)) ]) debug_msg = "\nGot :\n" + str(self.Cm) debug_msg += "\nExpected :\n" for c in R_expected: debug_msg += str(c) + "\n" self.assertEqual(R, R_expected, debug_msg) def test_two_links_alterning(self): pass def test_single_link_occurring_every_delta(self): sousflot = list([ Clique((frozenset([1, 2]),(1,1)),set([])), Clique((frozenset([1, 2]),(3,3)),set([])) ]) for c in sousflot: c._td,c._tp = c._tb,c._tb self.Cm.addClique(c) self.Cm._nodes = {1: set([2]), 2: set([1])} self.Cm._times = {frozenset([1, 2]): [1, 3]} R = self.Cm.getSpace(5) R_expected = set([ CliqueCritique((frozenset([1,2]),0,2,1,1)), CliqueCritique((frozenset([1,2]),0,2,3,3)), CliqueCritique((frozenset([1,2]),2,5,3,1)) ]) debug_msg = "\nGot :\n" + str(self.Cm) debug_msg += "\nExpected :\n" for c in R_expected: debug_msg += str(c) + "\n" self.assertEqual(R, R_expected, debug_msg) def test_single_link_not_occurring_every_delta(self): sousflot = list([ Clique((frozenset([1, 2]),(1,1)),set([])), Clique((frozenset([1, 2]),(3,3)),set([])) ]) for c in sousflot: c._td,c._tp = c._tb,c._tb self.Cm.addClique(c) self.Cm._nodes = {1: set([2]), 2: set([1])} self.Cm._times = {frozenset([1, 2]): [1, 3]} R = self.Cm.getSpace(1) R_expected = set([ CliqueCritique((frozenset([1,2]),0,1,1,1)), CliqueCritique((frozenset([1,2]),0,1,3,3)) ]) debug_msg = "\nGot :\n" + str(self.Cm) debug_msg += "\nExpected :\n" for c in R_expected: debug_msg += str(c) + "\n" self.assertEqual(R, R_expected, debug_msg) def test_triangle_and_many_occurrences_with_delta_too_small(self): sousflot = list([ Clique((frozenset([1, 2]),(1,1)),set([])), Clique((frozenset([2, 3]),(2,2)),set([])), Clique((frozenset([1, 3]),(3,3)),set([])), Clique((frozenset([1, 2]),(4,4)),set([])) ]) for c in sousflot: c._td,c._tp = c._tb,c._tb self.Cm.addClique(c) self.Cm._nodes = {1: set([2, 3]), 2: set([1, 3]), 3: set([1, 2])} self.Cm._times = {frozenset([1, 3]): [3], frozenset([1, 2]): [1, 4], frozenset([2, 3]): [2]} R = self.Cm.getSpace(2) R_expected = set([ CliqueCritique((frozenset([1,2]),0,2,1,1)), CliqueCritique((frozenset([1,2]),0,2,4,4)), CliqueCritique((frozenset([1,3]),0,2,3,3)), CliqueCritique((frozenset([2,3]),0,2,2,2)), CliqueCritique((frozenset([1,2,3]),2,2,1,3)), CliqueCritique((frozenset([1,2,3]),2,2,2,4)) ]) debug_msg = "\nGot :\n" + str(self.Cm) debug_msg += "\nExpected :\n" for c in R_expected: debug_msg += str(c) + "\n" self.assertEqual(R, R_expected, debug_msg) def test_triangle_and_many_occurrences_with_delta_big(self): sousflot = list([ Clique((frozenset([1, 2]),(1,1)),set([])), Clique((frozenset([2, 3]),(2,2)),set([])), Clique((frozenset([1, 3]),(3,3)),set([])), Clique((frozenset([1, 2]),(4,4)),set([])) ]) for c in sousflot: c._td,c._tp = c._tb,c._tb self.Cm.addClique(c) self.Cm._nodes = {1: set([2, 3]), 2: set([1, 3]), 3: set([1, 2])} self.Cm._times = {frozenset([1, 3]): [3], frozenset([1, 2]): [1, 4], frozenset([2, 3]): [2]} R = self.Cm.getSpace(5) R_expected = set([ CliqueCritique((frozenset([1,2]),0,3,1,1)), CliqueCritique((frozenset([1,2]),0,3,4,4)), CliqueCritique((frozenset([1,2]),3,5,4,1)), CliqueCritique((frozenset([1,3]),0,5,3,3)), CliqueCritique((frozenset([2,3]),0,5,2,2)), CliqueCritique((frozenset([1,2,3]),2,3,1,3)), CliqueCritique((frozenset([1,2,3]),2,3,2,4)), CliqueCritique((frozenset([1,2,3]),3,5,2,3)) ]) debug_msg = "\nGot :\n" + str(self.Cm) debug_msg += "\nExpected :\n" for c in R_expected: debug_msg += str(c) + "\n" self.assertEqual(R, R_expected, debug_msg) def test_triangle_and_many_occurrences_with_delta_huge(self): sousflot = list([ Clique((frozenset([1, 2]),(1,1)),set([])), Clique((frozenset([2, 3]),(2,2)),set([])), Clique((frozenset([1, 3]),(3,3)),set([])), Clique((frozenset([1, 2]),(4,4)),set([])) ]) for c in sousflot: c._td,c._tp = c._tb,c._tb self.Cm.addClique(c) self.Cm._nodes = {1: set([2, 3]), 2: set([1, 3]), 3: set([1, 2])} self.Cm._times = {frozenset([1, 3]): [3], frozenset([1, 2]): [1, 4], frozenset([2, 3]): [2]} R = self.Cm.getSpace(100) R_expected = set([ CliqueCritique((frozenset([1,2]),0,3,1,1)), CliqueCritique((frozenset([1,2]),0,3,4,4)), CliqueCritique((frozenset([1,2]),3,100,4,1)), CliqueCritique((frozenset([1,3]),0,100,3,3)), CliqueCritique((frozenset([2,3]),0,100,2,2)), CliqueCritique((frozenset([1,2,3]),2,3,1,3)), CliqueCritique((frozenset([1,2,3]),2,3,2,4)), CliqueCritique((frozenset([1,2,3]),3,100,2,3)) ]) debug_msg = "\nGot :\n" + str(self.Cm) debug_msg += "\nExpected :\n" for c in R_expected: debug_msg += str(c) + "\n" self.assertEqual(R, R_expected, debug_msg) def test_simultaneouslinks(self): sousflot = list([ Clique((frozenset([1, 2]),(1,1))), Clique((frozenset([2, 3]),(1,1))), Clique((frozenset([1, 3]),(1,1))), ]) for c in sousflot: c._td,c._tp = c._tb,c._tb self.Cm.addClique(c) self.Cm._nodes = {1: set([2, 3]), 2: set([1, 3]), 3: set([1, 2])} self.Cm._times = {frozenset([1, 3]): [1], frozenset([1, 2]): [1], frozenset([2, 3]): [1]} R = self.Cm.getSpace(100) R_expected = set([ CliqueCritique((frozenset([1,2,3]),0,100,1,1)) ]) debug_msg = "\nGot :\n" + str(self.Cm) debug_msg += "\nExpected :\n" for c in R_expected: debug_msg += str(c) + "\n" self.assertEqual(R, R_expected, debug_msg) def test_simultaneouslinkswithadoublelink(self): sousflot = list([ Clique((frozenset([1, 2]),(1,1))), Clique((frozenset([2, 3]),(1,1))), Clique((frozenset([1, 3]),(1,1))), Clique((frozenset([2, 3]),(2,2))) ]) for c in sousflot: c._td,c._tp = c._tb,c._tb self.Cm.addClique(c) self.Cm._nodes = {1: set([2, 3]), 2: set([1, 3]), 3: set([1, 2])} self.Cm._times = {frozenset([1, 3]): [1], frozenset([1, 2]): [1], frozenset([2, 3]): [1,2]} R = self.Cm.getSpace(5) R_expected = set([ CliqueCritique((frozenset([1,2,3]),0,5,1,1)), CliqueCritique((frozenset([2,3]),1,5,2,1)), CliqueCritique((frozenset([2,3]),0,1,2,2)) ]) debug_msg = "\nGot :\n" + str(self.Cm) debug_msg += "\nExpected :\n" for c in R_expected: debug_msg += str(c) + "\n" self.assertEqual(R, R_expected, debug_msg) def test_extensionvsdeltamax(self): sousflot = list([ Clique((frozenset([1, 2]),(1,1))), Clique((frozenset([2, 3]),(2,2))), Clique((frozenset([1, 2]),(3,3))), Clique((frozenset([1, 2]),(6,6))), ]) for c in sousflot: c._td,c._tp = c._tb,c._tb self.Cm.addClique(c) self.Cm._nodes = {1: set([2]), 2: set([1, 3]), 3: set([2])} self.Cm._times = {frozenset([1, 2]): [1,3,6], frozenset([2, 3]): [2]} R = self.Cm.getSpace(10) R_expected = set([ CliqueCritique((frozenset([2,3]), 0,10,2,2)), CliqueCritique((frozenset([1,2]), 0,2,1,1)), CliqueCritique((frozenset([1,2]), 0,2,3,3)), CliqueCritique((frozenset([1,2]), 2,3,3,1)), CliqueCritique((frozenset([1,2]), 0,3,6,6)), CliqueCritique((frozenset([1,2]), 3,10,6,1)) ]) debug_msg = "\nGot :\n" + str(self.Cm) debug_msg += "\nExpected :\n" for c in R_expected: debug_msg += str(c) + "\n" self.assertEqual(R, R_expected, debug_msg) def test_ajoutdenoeudwhenmax(self): sousflot = list([ Clique((frozenset([1, 3]),(1,1))), Clique((frozenset([1, 2]),(2,2))), Clique((frozenset([2, 3]),(2,2))), Clique((frozenset([1, 3]),(4,4))), ]) for c in sousflot: c._td,c._tp = c._tb,c._tb self.Cm.addClique(c) self.Cm._nodes = {1: set([2,3]), 2: set([1, 3]), 3: set([1,2])} self.Cm._times = {frozenset([1, 2]): [2], frozenset([2, 3]): [2],frozenset([1, 3]): [1,4]} R = self.Cm.getSpace(5) R_expected = set([ CliqueCritique((frozenset([1,3]), 0,3,4,4)), CliqueCritique((frozenset([1,3]), 0,3,1,1)), CliqueCritique((frozenset([1,3]), 3,5,4,1)), CliqueCritique((frozenset([1,2]), 0,3,2,2)), CliqueCritique((frozenset([2,3]), 0,3,2,2)), CliqueCritique((frozenset([1,2,3]), 1,3,1,2)), CliqueCritique((frozenset([1,2,3]), 2,3,2,4)), CliqueCritique((frozenset([1,2,3]), 3,5,2,2)) ]) debug_msg = "\nGot :\n" + str(self.Cm) debug_msg += "\nExpected :\n" for c in R_expected: debug_msg += str(c) + "\n" self.assertEqual(R, R_expected, debug_msg) def test_ajoutdenoeudwhenmaxsuivitdajoutdelien(self): sousflot = list([ Clique((frozenset([1, 3]),(1,1))), Clique((frozenset([1, 2]),(2,2))), Clique((frozenset([2, 3]),(2,2))), Clique((frozenset([1, 3]),(3,3))), Clique((frozenset([1, 3]),(5,5))), ]) for c in sousflot: c._td,c._tp = c._tb,c._tb self.Cm.addClique(c) self.Cm._nodes = {1: set([2,3]), 2: set([1, 3]), 3: set([1,2])} self.Cm._times = {frozenset([1, 2]): [2], frozenset([2, 3]): [2],frozenset([1, 3]): [1,3,5]} R = self.Cm.getSpace(7) R_expected = set([ CliqueCritique((frozenset([1,3]), 0,2,1,1)), CliqueCritique((frozenset([1,3]), 0,2,3,3)), CliqueCritique((frozenset([1,3]), 0,2,5,5)), CliqueCritique((frozenset([1,2]), 0,2,2,2)), CliqueCritique((frozenset([3,2]), 0,2,2,2)), CliqueCritique((frozenset([1,3]), 2,7,5,1)), CliqueCritique((frozenset([1,2,3]), 1,2,1,2)), CliqueCritique((frozenset([1,2,3]), 1,2,2,3)), CliqueCritique((frozenset([1,2,3]), 2,7,2,2)) ]) debug_msg = "\nGot :\n" + str(self.Cm) debug_msg += "\nExpected :\n" for c in R_expected: debug_msg += str(c) + "\n" self.assertEqual(R, R_expected, debug_msg) def test_complexexemple_passageorder(self): sousflot = list([ Clique((frozenset([1, 2]),(1,1))), Clique((frozenset([1, 2]),(2,2))), Clique((frozenset([1, 3]),(2,2))), Clique((frozenset([1, 4]),(3,3))), Clique((frozenset([2, 3]),(5,5))), Clique((frozenset([4, 3]),(5,5))), Clique((frozenset([2, 4]),(5,5))), ]) for c in sousflot: c._td,c._tp = c._tb,c._tb self.Cm.addClique(c) self.Cm._nodes = {1: set([2,3,4]), 2: set([1,3,4]), 3: set([1,2,4]),4: set([1,2,3])} self.Cm._times = {frozenset([1, 2]): [1,2], frozenset([1, 3]): [2],frozenset([1, 4]): [3],frozenset([2, 3]): [5],frozenset([2, 4]): [5],frozenset([3, 4]): [5]} R = self.Cm.getSpace(10) R_expected = set([ CliqueCritique((frozenset([1,2]),0,1,1,1)), CliqueCritique((frozenset([1,2]),0,1,2,2)), CliqueCritique((frozenset([2,3,4]),0,10 ,5,5)), CliqueCritique((frozenset([1,3]),0,10,2,2)), CliqueCritique((frozenset([1,4]),0,10,3,3)), CliqueCritique((frozenset([1,2]),1,10,2,1)), CliqueCritique((frozenset([1,2,3,4]),3,10,2,5)) ]) debug_msg = "\nGot :\n" + str(self.Cm) debug_msg += "\nExpected :\n" for c in R_expected: debug_msg += str(c) + "\n" self.assertEqual(R, R_expected, debug_msg) def test_varianteajoutwhenmax(self): sousflot = list([ Clique((frozenset([1, 2]),(1,1))), Clique((frozenset([3, 1]),(4,4))), Clique((frozenset([2, 3]),(5,5))), Clique((frozenset([3, 1]),(6,6))), Clique((frozenset([2, 1]),(6,6))), ]) for c in sousflot: c._td,c._tp = c._tb,c._tb self.Cm.addClique(c) self.Cm._nodes = {1: set([2,3]), 2: set([1,3]), 3: set([1,2])} self.Cm._times = {frozenset([1, 2]): [1,6], frozenset([1, 3]): [4,6],frozenset([2, 3]): [5]} R = self.Cm.getSpace(10) R_expected = set([ CliqueCritique((frozenset([1,2]),0,5,1,1)), CliqueCritique((frozenset([1,2]),0,5,6,6)), CliqueCritique((frozenset([1,3]),0,2,4,4)), CliqueCritique((frozenset([2,3]),0,5,5,5)), CliqueCritique((frozenset([1,2,3]),5,10,5,5)), CliqueCritique((frozenset([1,3]),0,2,6,6)), CliqueCritique((frozenset([1,2,3]),4,5,1,5)), CliqueCritique((frozenset([1,2,3]),1,5,5,6)), CliqueCritique((frozenset([1,2]),5,10,6,1)), CliqueCritique((frozenset([1,3]),2,10,6,4)) ]) debug_msg = "\nGot :\n" + str(self.Cm) debug_msg += "\nExpected :\n" for c in R_expected: debug_msg += str(c) + "\n" self.assertEqual(R, R_expected, debug_msg) def test_transfertsuccess_same_td_tp(self): sousflot = list([ Clique((frozenset([1, 2]),(1,1))), Clique((frozenset([3, 2]),(3,3))), Clique((frozenset([1, 3]),(3,3))), Clique((frozenset([3, 1]),(4,4))), Clique((frozenset([2, 1]),(4,4))), Clique((frozenset([2, 3]),(4,4))), Clique((frozenset([2, 1]),(9,9))), ]) for c in sousflot: c._td,c._tp = c._tb,c._tb self.Cm.addClique(c) self.Cm._nodes = {1: set([2,3]), 2: set([1,3]), 3: set([1,2])} self.Cm._times = {frozenset([1, 2]): [1,4,9], frozenset([1, 3]): [3,4],frozenset([2, 3]): [3,4]} R = self.Cm.getSpace(10) R_expected = set([ CliqueCritique((frozenset([1,2]),0,3,1,1)), CliqueCritique((frozenset([2,3]),0,1,3,3)), CliqueCritique((frozenset([1,2,3]),3,10,4,3)), CliqueCritique((frozenset([1,2,3]),0,3,4,4)), CliqueCritique((frozenset([1,2]),0,5,9,9)), CliqueCritique((frozenset([1,2]),3,5,4,1)), CliqueCritique((frozenset([1,2]),5,10,9,1)), CliqueCritique((frozenset([1,3]),0,1,3,3)), CliqueCritique((frozenset([2,3]),1,3,4,3)), CliqueCritique((frozenset([1,3]),1,3,4,3)), CliqueCritique((frozenset([1,2,3]),2,3,1,3)) ]) debug_msg = "\nGot :\n" + str(self.Cm) debug_msg += "\nExpected :\n" for c in R_expected: debug_msg += str(c) + "\n" self.assertEqual(R, R_expected, debug_msg) def test_ajoutdeneouddivers(self): sousflot = list([ Clique((frozenset([3, 2]),(1,1))), Clique((frozenset([1, 2]),(2,2))), Clique((frozenset([1, 3]),(3,3))), Clique((frozenset([3, 2]),(3,3))), Clique((frozenset([2, 1]),(5,5))), ]) for c in sousflot: c._td,c._tp = c._tb,c._tb self.Cm.addClique(c) self.Cm._nodes = {1: set([2,3]), 2: set([1,3]), 3: set([1,2])} self.Cm._times = {frozenset([1, 2]): [2,5], frozenset([1, 3]): [3],frozenset([2, 3]): [1,3]} R = self.Cm.getSpace(10) R_expected = set([ CliqueCritique((frozenset([1,3]),0,3,3,3)), CliqueCritique((frozenset([2,3]),0,2,3,3)), CliqueCritique((frozenset([2,3]),0,2,1,1)), CliqueCritique((frozenset([1,2]),0,3,2,2)), CliqueCritique((frozenset([1,2]),0,3,5,5)), CliqueCritique((frozenset([1,2,3]),1,3,2,3)), CliqueCritique((frozenset([1,2,3]),2,3,3,5)), CliqueCritique((frozenset([2,3]),2,10,3,1)), CliqueCritique((frozenset([1,2]),3,10,5,2)), CliqueCritique((frozenset([1,2,3]),3,10,3,3)) ]) debug_msg = "\nGot :\n" + str(self.Cm) debug_msg += "\nExpected :\n" for c in R_expected: debug_msg += str(c) + "\n" self.assertEqual(R, R_expected, debug_msg)
def run(self): #graphTypes = ["Link stream", "Multiplex graph", "Simple graph"] self.delta = self.dataSet["Delta"] self.graph_type = self.dataSet["Input graph type"].getCurrentString() self.node_prop = self.dataSet["Node class - link stream"] self.one_boolean_property_per_clique = self.dataSet["Boolean property output"] #graphType = "Link stream" #if graph.getName() in graphTypes: # graphType = graph.getName() #node_prop = graph.getStringProperty("__original_node__") if self.graph_type == "Link stream" or self.graph_type == "Multiplex graph": self.time_stamp = self.dataSet["Time double property - Link stream / Multiplex graph"] #timeStamp = graph.getDoubleProperty("__timeStamp__") elif self.graph_type == "Simple graph": self.time_stamp = self.dataSet["Time vector property - Simple graph"] #timeStamp = graph.getDoubleVectorProperty("__timeStampList__") # Initiate Cm = CliqueMaster() times = dict() nodes = dict() nb_lines = 0 # Read stream # maybe just rewrite an individual accessor for 1 triplet # instead of the whole conversion # (needs the edge object for effective return) for contents in self.tripletGen(): #print contents t = contents[0] u = contents[1] v = contents[2] link = frozenset([u, v]) time = (t, t) Cm.addClique(Clique((link, time), set([]))) # Populate data structures if link not in times: times[link] = [] times[link].append(t) if u not in nodes: nodes[u] = set() if v not in nodes: nodes[v] = set() nodes[u].add(v) nodes[v].add(u) nb_lines = nb_lines + 1 Cm._times = times Cm._nodes = nodes tmp_std_err = sys.stderr sys.stderr = NullDevice() results = Cm.getDeltaCliques(self.delta) sys.stderr = tmp_std_err self.mapCliquesBack(results) return True
from CliqueMaster import CliqueMaster from Clique import Clique import sys import random # Initiate Cm = CliqueMaster() times = dict() nodes = dict() nb_lines = 0 resurrect = False # Read arguments from command line if len(sys.argv) == 2 and "resurrect" not in sys.argv[1]: delta = int(sys.argv[1]) elif len(sys.argv) == 3: if "resurrect" in sys.argv[2]: resurrect = True delta = int(sys.argv[1]) else: sys.stderr.write( "Usage: cat <stream> | python main.py <delta> [--resurrect=<err_file>]\ \n\n") sys.stderr.write(" --resurrect: Recover previous instance by providing\ an stderr output \ previous instance.\n\n") sys.exit(1) # Read stream for line in sys.stdin: contents = line.split(" ")
class TestClique(unittest.TestCase): def setUp(self): self.Cm = CliqueMaster() self.seq = range(10) sys.stderr = open(os.devnull, 'w') def test_delta_is_0(self): self.Cm._S = deque([Clique((frozenset([1, 2]), (1, 1)))]) self.Cm._times = {frozenset([1, 2]): [1]} self.Cm._nodes = {1: set([2]), 2: set([1])} R = self.Cm.getDeltaCliques(0) self.assertEqual(R, set([Clique((frozenset([1, 2]), (1, 1)))])) def test_negative_delta(self): pass def test_big_delta(self): self.Cm._S = deque([Clique((frozenset([1, 2]), (1, 1)))]) self.Cm._times = {frozenset([1, 2]): [1]} self.Cm._nodes = {1: set([2]), 2: set([1])} R = self.Cm.getDeltaCliques(100) self.assertEqual(R, set([Clique((frozenset([1, 2]), (-99, 101)))])) def test_simple_triangle_when_delta_is_5(self): self.Cm._S = deque([ Clique((frozenset([1, 2]), (1, 1))), Clique((frozenset([1, 3]), (2, 2))), Clique((frozenset([2, 3]), (3, 3))) ]) self.Cm._nodes = {1: set([2, 3]), 2: set([1, 3]), 3: set([1, 2])} self.Cm._times = { frozenset([1, 3]): [2], frozenset([1, 2]): [1], frozenset([2, 3]): [3] } R = self.Cm.getDeltaCliques(5) R_expected = set([ Clique((frozenset([1, 2, 3]), (-2, 6))), Clique((frozenset([1, 2]), (-4, 6))), Clique((frozenset([2, 3]), (-2, 8))), Clique((frozenset([1, 3]), (-3, 7))) ]) debug_msg = "\nGot :\n" + str(self.Cm) debug_msg += "\nExpected :\n" for c in R_expected: debug_msg += str(c) + "\n" self.assertEqual(R, R_expected, debug_msg) def test_two_links_alterning(self): pass def test_single_link_occurring_every_delta(self): self.Cm._S = deque([ Clique((frozenset([1, 2]), (1, 1))), Clique((frozenset([1, 2]), (3, 3))), ]) self.Cm._nodes = {1: set([2]), 2: set([1])} self.Cm._times = {frozenset([1, 2]): [1, 3]} R = self.Cm.getDeltaCliques(3) R_expected = set([Clique((frozenset([1, 2]), (-2, 6)))]) self.assertEqual(R, R_expected) def test_single_link_not_occurring_every_delta(self): self.Cm._S = deque([ Clique((frozenset([1, 2]), (1, 1))), Clique((frozenset([1, 2]), (3, 3))), ]) self.Cm._nodes = {1: set([2]), 2: set([1])} self.Cm._times = {frozenset([1, 2]): [1, 3]} R = self.Cm.getDeltaCliques(1) R_expected = set([ Clique((frozenset([1, 2]), (0, 2))), Clique((frozenset([1, 2]), (2, 4))) ]) self.assertEqual(R, R_expected) def test_triangle_and_many_occurrences_with_delta_too_small(self): self.Cm._S = deque([ Clique((frozenset([1, 2]), (1, 1))), Clique((frozenset([2, 3]), (2, 2))), Clique((frozenset([1, 3]), (3, 3))), Clique((frozenset([1, 2]), (4, 4))), ]) self.Cm._nodes = {1: set([2, 3]), 2: set([1, 3]), 3: set([1, 2])} self.Cm._times = { frozenset([1, 3]): [3], frozenset([1, 2]): [1, 4], frozenset([2, 3]): [2] } R = self.Cm.getDeltaCliques(2) R_expected = set([ Clique((frozenset([1, 2, 3]), (2, 4))), Clique((frozenset([1, 2]), (-1, 3))), Clique((frozenset([1, 3]), (1, 5))), Clique((frozenset([1, 2, 3]), (1, 3))), Clique((frozenset([1, 2]), (2, 6))), Clique((frozenset([2, 3]), (0, 4))) ]) debug_msg = "\nGot :\n" + str(self.Cm) debug_msg += "\nExpected :\n" for c in R_expected: debug_msg += str(c) + "\n" self.assertEqual(R, R_expected, debug_msg) def test_triangle_and_many_occurrences_with_delta_big(self): self.Cm._S = deque([ Clique((frozenset([1, 2]), (1, 1))), Clique((frozenset([2, 3]), (2, 2))), Clique((frozenset([1, 3]), (3, 3))), Clique((frozenset([1, 2]), (4, 4))), ]) self.Cm._nodes = {1: set([2, 3]), 2: set([1, 3]), 3: set([1, 2])} self.Cm._times = { frozenset([1, 3]): [3], frozenset([1, 2]): [1, 4], frozenset([2, 3]): [2] } R = self.Cm.getDeltaCliques(5) R_expected = set([ Clique((frozenset([1, 2]), (-4, 9))), Clique((frozenset([1, 2, 3]), (-2, 7))), Clique((frozenset([1, 3]), (-2, 8))), Clique((frozenset([2, 3]), (-3, 7))) ]) self.assertEqual(R, R_expected) def test_triangle_and_many_occurrences_with_delta_huge(self): self.Cm._S = deque([ Clique((frozenset([1, 2]), (1, 1))), Clique((frozenset([2, 3]), (2, 2))), Clique((frozenset([1, 3]), (3, 3))), Clique((frozenset([1, 2]), (4, 4))) ]) self.Cm._nodes = {1: set([2, 3]), 2: set([1, 3]), 3: set([1, 2])} self.Cm._times = { frozenset([1, 3]): [3], frozenset([1, 2]): [1, 4], frozenset([2, 3]): [2] } R = self.Cm.getDeltaCliques(100) R_expected = set([ Clique((frozenset([1, 2]), (-99, 104))), Clique((frozenset([1, 2, 3]), (-97, 102))), Clique((frozenset([1, 3]), (-97, 103))), Clique((frozenset([2, 3]), (-98, 102))) ]) debug_msg = "\nGot :\n" + str(self.Cm) debug_msg += "\nExpected :\n" for c in R_expected: debug_msg += str(c) + "\n" self.assertEqual(R, R_expected, debug_msg) def test_simultaneous_links(self): self.Cm._S = deque([ Clique((frozenset([1, 2]), (1, 1))), Clique((frozenset([2, 3]), (1, 1))), Clique((frozenset([1, 3]), (1, 1))) ]) self.Cm._nodes = {1: set([2, 3]), 2: set([1, 3]), 3: set([1, 2])} self.Cm._times = { frozenset([1, 2]): [1], frozenset([2, 3]): [1], frozenset([1, 3]): [1] } R = self.Cm.getDeltaCliques(5) R_expected = set([Clique((frozenset([1, 2, 3]), (-4, 6)))]) self.assertEqual(R, R_expected) def test_simultaneous_links_with_repeat(self): self.Cm._S = deque([ Clique((frozenset([1, 2]), (1, 1))), Clique((frozenset([2, 3]), (1, 1))), Clique((frozenset([1, 3]), (1, 1))), Clique((frozenset([2, 3]), (3, 3))) ]) self.Cm._nodes = {1: set([2, 3]), 2: set([1, 3]), 3: set([1, 2])} self.Cm._times = { frozenset([1, 2]): [1], frozenset([2, 3]): [1, 3], frozenset([1, 3]): [1] } R = self.Cm.getDeltaCliques(5) R_expected = set([ Clique((frozenset([1, 2, 3]), (-4, 6))), Clique((frozenset([2, 3]), (-4, 8))) ]) self.assertEqual(R, R_expected)
from CliqueMaster import CliqueMaster from Clique import Clique from CliqueCritique import CliqueCritique import sys Cm = CliqueMaster() times = dict() nodes = dict() delta = int(sys.argv[1]) nb_lines = 0 for line in sys.stdin: contents = line.split(" ") t = int(contents[0]) u = int(contents[1]) v = int(contents[2]) link = frozenset([u,v]) time = (t,t) #if t==2: # Cm.addClique(Clique((link, time, time))) # Cm.addCliqueCritique(CliqueCritique((link,(t,t),0))) # Populate data structures if not times.has_key(link): times[link] = [] times[link].append(t) if not u in nodes: nodes[u] = set()