def test_empty_if_not_commit(self):
        '''
		This test verifies that the database is empty when reconnected but without any commit made during the previous session.
		'''
        db = binarytree.connect('test2.dbdb')
        db.set(0, 'a')
        db.close()
        db = binarytree.connect('test2.dbdb')
        with self.assertRaises(KeyError):
            db.get(0)

        db.close()
    def test_del_key_after_commit_2(self):
        '''
		This test verifies that deletion does not affect key, value pairs and still be commited and reloaded
		'''
        db = binarytree.connect('test9.dbdb')
        db.set(0, 'a')
        db.set(1, 'b')
        db.set(-1, 'c')
        db.set(-2, 'd')
        db.delete(0)
        db.commit()
        db.close()

        db = binarytree.connect('test8.dbdb')
        self.assertEqual([db.get(1), db.get(-1), db.get(-2)], ['b', 'c', 'd'])

        db.close()
    def test_del_key_after_commit_1(self):
        '''
		This test verifies that deletion of keys can be commited and reloaded.
		'''
        db = binarytree.connect('test8.dbdb')
        db.set(0, 'a')
        db.set(1, 'b')
        db.set(-1, 'c')
        db.set(-2, 'd')
        db.delete(0)
        db.commit()
        db.close()

        db = binarytree.connect('test8.dbdb')
        with self.assertRaises(KeyError):
            db.get(0)

        db.close()
    def test_get_closer_after_commit(self):
        '''
		This test verifies that we can query keys that are smaller or equal than a particular key, when changes where made in a previous session which
		has been commited.
		'''
        db = binarytree.connect('test5.dbdb')
        db.set(0, 'a')
        db.set(1, 'b')
        db.set(-1, 'c')
        db.set(-2, 'd')
        db.commit()
        db.close()

        db = binarytree.connect('test5.dbdb')

        self.assertEqual(db.get_closer_than(0), [(0, 'a'), (-1, 'c'),
                                                 (-2, 'd')])

        db.close()
    def test_set_get_after_commit(self):
        '''
		This test verifies that we obtained the right values when searching for keys, when changes where made in a previous session which
		has been commited.
		'''
        db = binarytree.connect('test3.dbdb')
        db.set(0, 'a')
        db.set(1, 'b')
        db.set(-1, 'c')
        db.set(-2, 'd')
        db.commit()
        db.close()

        db = binarytree.connect('test3.dbdb')
        self.assertEqual(
            [db.get(0), db.get(1),
             db.get(-1), db.get(-2)], ['a', 'b', 'c', 'd'])

        db.close()
    def test_overwrite_value_before_commit(self):
        '''
		This test checks that the no duplicate property can be commited
		'''
        db = binarytree.connect('test11.dbdb')
        db.set(0, 'a')
        db.set(1, 'b')
        db.set(-1, 'c')
        db.set(-2, 'd')

        db.set(-1, 'new')

        db.commit()
        db.close()

        db = binarytree.connect('test11.dbdb')

        self.assertEqual(db.get(-1), 'new')

        db.close()
Пример #7
0
def in_radius_from_vantage(ts_stand, v_str, test=False):
    '''
    Return the points in the circle of radius 2*k_corr(ts_stand, vantage_stand)
    Args:
    -----
    - ts_stand: standardised ArrayTimeSeries
    - v_str: index of the vantage point as a string
    '''
    if test:
        v = pickle.load(open("../ts_data/ts_{}.p".format(v_str), "rb"))
    else:
        v = pickle.load(open("ts_data/ts_{}.p".format(v_str), "rb"))
    v_stand = util.stand(v, v.mean(), v.std())
    d = 2 * (1 - util.kernel_corr(ts_stand, v_stand))
    if not test:
        db = binarytree.connect('dbs/db_{}.dbdb'.format(v_str))
    else:
        db = binarytree.connect('../dbs/db_{}.dbdb'.format(v_str))
    closest_in_vantage = [x[1] for x in db.get_closer_than(2 * d)]
    db.close()
    return closest_in_vantage
    def test_set_get_before_commit(self):
        '''
		This test verifies that while the database is still connected, we obtained the right values when searching for keys.
		'''
        db = binarytree.connect('test1.dbdb')
        db.set(0, 'a')
        db.set(1, 'b')
        db.set(-1, 'c')
        db.set(-2, 'd')

        self.assertEqual([db.get(0), db.get(-2)], ['a', 'd'])

        db.close()
def main(arguments):
    #Clean the databases or create the directory
    try:
        shutil.rmtree('dbs')
    except:
        pass
    os.mkdir('dbs')

    #Parse the number of vantage points wanted
    parser = argparse.ArgumentParser(
        description='Number of vantage points to generate')
    parser.add_argument('--n',
                        help='Number of vantage points',
                        type=int,
                        default=20)
    parser.add_argument('--nts',
                        help='Number of vantage points',
                        type=int,
                        default=1000)
    args = parser.parse_args(arguments)
    n = args.n
    nts = args.nts

    #sample the vantage points without replacement
    vantage = random.sample(range(nts), n)
    pickle.dump(vantage, open("ts_data/vantage_points.p", "wb"))
    print('Vantage Points are: ')
    for i in vantage:
        print('TS ' + str(i))

    tss = []

    #load the ts
    print('Loading the TS')
    for i in range(nts):
        tss.append(pickle.load(open("ts_data/ts_{}.p".format(i), "rb")))

    #Store the negative of the k_corr of each vantage points to the eveyr other timeseries in the DB
    print('Creating the DBS')
    for ct, i in enumerate(vantage):
        print(str(ct + 1) + '/' + str(len(vantage)) + ' Done')
        db = binarytree.connect('dbs/db_' + str(i) + '.dbdb')
        ts_i_stand = stand(tss[i], tss[i].mean(), tss[i].std())
        for j in range(0, nts):
            if j == i:
                continue
            kc = kernel_corr(ts_i_stand,
                             stand(tss[j], tss[j].mean(), tss[j].std()))
            db.set(2 * (1 - kc), 'ts_' + str(j))
        db.commit()
        db.close()
    def test_get_closer_before_commit(self):
        '''
		This test verifies that while the database is still connected, we can query keys that are smaller or equal than a particular key.
		'''
        db = binarytree.connect('test4.dbdb')
        db.set(0, 'a')
        db.set(1, 'b')
        db.set(-1, 'c')
        db.set(-2, 'd')

        self.assertEqual(db.get_closer_than(0), [(0, 'a'), (-1, 'c'),
                                                 (-2, 'd')])

        db.close()
    def test_del_key_before_commit_2(self):
        '''
		This test verifies that we can delete a key in the current sessions without affecting the other (key, value) in the tree.
		'''
        db = binarytree.connect('test7.dbdb')
        db.set(0, 'a')
        db.set(1, 'b')
        db.set(-1, 'c')
        db.set(-2, 'd')

        db.delete(0)
        self.assertEqual([db.get(1), db.get(-1), db.get(-2)], ['b', 'c', 'd'])

        db.close()
    def test_del_key_before_commit_1(self):
        '''
		This test verifies that we can delete a key in the current session.
		'''
        db = binarytree.connect('test6.dbdb')
        db.set(0, 'a')
        db.set(1, 'b')
        db.set(-1, 'c')
        db.set(-2, 'd')

        db.delete(0)
        with self.assertRaises(KeyError):
            db.get(0)

        db.close()
    def test_overwrite_value_before_commit(self):
        '''
		This test checks that no duplicate, i.e. a key cannot have two value, can be entered in the tree. 
		'''
        db = binarytree.connect('test10.dbdb')
        db.set(0, 'a')
        db.set(1, 'b')
        db.set(-1, 'c')
        db.set(-2, 'd')

        db.set(-1, 'new')

        self.assertEqual(db.get(-1), 'new')

        db.close()