示例#1
0
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)
示例#2
0
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()
示例#3
0
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()
示例#4
0
 def setUp(self):
     self.Cm = CliqueMaster()
     self.seq = range(10)
     sys.stderr = open(os.devnull, 'w')
示例#5
0
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)
示例#7
0
	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
示例#8
0
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(" ")
示例#9
0
 def setUp(self):
     self.Cm = CliqueMaster()
     self.seq = range(10)
     sys.stderr = open(os.devnull, 'w')
示例#10
0
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)
示例#11
0
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()