def test_cast_to_uint_from_int(self): adapter = iopro.MongoAdapter(TestMongoAdapter.hostname, TestMongoAdapter.port, TestMongoAdapter.db_name, 'test_ints') arr1 = adapter[['f0', 'f1', 'f2', 'f3', 'f4']][:] adapter.set_field_types({ 'f0': 'u8', 'f1': 'u8', 'f2': 'u8', 'f3': 'u8', 'f4': 'u8' }) self.assertTrue(adapter.is_field_type_set('f1')) for i in range(5): self.assertTrue(adapter.is_field_type_set(i)) array = adapter[:] self.assertEqual(array.size, nrecords) self.assertEqual(array.dtype, numpy.dtype('u8,u8,u8,u8,u8')) sorted = numpy.sort(array) for i in range(nrecords): self.assertEqual(sorted[-i].item(), ((i*-5+0) & 0xffffffffffffffff, \ (i*-5+1) & 0xffffffffffffffff, \ (i*-5+2) & 0xffffffffffffffff, \ (i*-5+3) & 0xffffffffffffffff, \ (i*-5+4) & 0xffffffffffffffff))
def test_further_slicing(self): adapter = iopro.MongoAdapter(TestMongoAdapter.hostname, TestMongoAdapter.port, TestMongoAdapter.db_name, 'test_ints') array_list_all = adapter[['f0', 'f1', 'f2', 'f3', 'f4']][:] self.assertEqual(array_list_all.size, nrecords) array_str_1011 = adapter['f0'][10:11] self.assertEqual(array_str_1011.size, 1) array_str_int = adapter['f0'][10] self.assertEqual(array_str_int.size, 1) self.assertEqual(array_str_int, array_str_1011) array_list_10 = adapter[['f0']][10] self.assertEqual(array_str_int, array_list_10) array_list_515 = adapter[['f0']][5:15] self.assertEqual(array_list_515.size, 10) self.assertEqual(array_list_515[5:6], array_str_int) for i in range(5): self.assertEqual(array_list_515[5 + i][0], array_list_all[10 + i][0]) self.assertTrue(numpy.allclose(array_list_515['f0'][5:10], \ array_list_all['f0'][10:15]))
def test_field_subset(self): adapter = iopro.MongoAdapter(TestMongoAdapter.hostname, TestMongoAdapter.port, TestMongoAdapter.db_name, 'test_uints') array = adapter['f0'][:] array.sort() self.assertEqual(array.size, nrecords) self.assertEqual(array.dtype, numpy.dtype([('f0', 'u8')])) for i in range(nrecords): self.assertEqual(array[i].item(), (i * 5, )) array = adapter[['f0', 'f4']][:] array.sort() self.assertEqual(array.size, nrecords) self.assertEqual(array.dtype, numpy.dtype([('f0', 'u8'), ('f4', 'u8')])) for i in range(nrecords): self.assertEqual(array[i].item(), (i * 5, i * 5 + 4)) array = adapter[('f0', 'f1', 'f2', 'f3', 'f4')][:] array.sort() self.assertEqual(array.size, nrecords) self.assertEqual(array.dtype, numpy.dtype('u8,u8,u8,u8,u8')) for i in range(nrecords): self.assertEqual( array[i].item(), (i * 5, i * 5 + 1, i * 5 + 2, i * 5 + 3, i * 5 + 4))
def test_floats(self): adapter = iopro.MongoAdapter(TestMongoAdapter.hostname, TestMongoAdapter.port, TestMongoAdapter.db_name, 'test_floats') array = adapter[['f0', 'f1', 'f2', 'f3', 'f4']][:] self.assertEqual(array.size, nrecords) self.assertEqual(array.dtype, numpy.dtype('f8,f8,f8,f8,f8')) sorted = numpy.sort(array) for i in range(nrecords): self.assertEqual(sorted[i].item(), (i * 5 + 0.1, i * 5 + 0.1 + 1, i * 5 + 0.1 + 2, i * 5 + 0.1 + 3, i * 5 + 0.1 + 4))
def test_ints(self): adapter = iopro.MongoAdapter(TestMongoAdapter.hostname, TestMongoAdapter.port, TestMongoAdapter.db_name, 'test_ints') array = adapter[['f0', 'f1', 'f2', 'f3', 'f4']][:] self.assertEqual(array.size, nrecords) self.assertEqual(array.dtype, numpy.dtype('i8,i8,i8,i8,i8')) sorted = numpy.sort(array) for i in range(nrecords): self.assertEqual( sorted[nrecords - 1 - i].item(), (i * -5, i * -5 + 1, i * -5 + 2, i * -5 + 3, i * -5 + 4))
def test_set_field_types(self): adapter = iopro.MongoAdapter(TestMongoAdapter.hostname, TestMongoAdapter.port, TestMongoAdapter.db_name, 'test_ints') adapter[['f0', 'f1', 'f2', 'f3', 'f4']] adapter.set_field_types({'f0': 'f8', 'f4': 'O'}) array = adapter[:] self.assertEqual(array.size, nrecords) self.assertEqual(array.dtype, numpy.dtype('f8,i8,i8,i8,O')) sorted = numpy.sort(array) for i in range(nrecords): self.assertEqual(sorted[nrecords - 1 - i].item(), (float( i * -5), i * -5 + 1, i * -5 + 2, i * -5 + 3, str(i * -5 + 4)))
def test_behavior_of_floats_that_hold_uints(self): adapter = iopro.MongoAdapter( TestMongoAdapter.hostname, TestMongoAdapter.port, TestMongoAdapter.db_name, 'test_behavior_of_floats_that_hold_uints') array = adapter[['f0', 'f1', 'f2', 'f3', 'f4']][:] self.assertEqual(array.size, nrecords) self.assertEqual(array.dtype, numpy.dtype('u8,u8,u8,u8,u8')) sorted = numpy.sort(array) for i in range(nrecords): self.assertEqual( sorted[i].item(), (i * 5, i * 5 + 1, i * 5 + 2, i * 5 + 3, i * 5 + 4))
def test_type_inference(self): adapter = iopro.MongoAdapter(TestMongoAdapter.hostname, TestMongoAdapter.port, TestMongoAdapter.db_name, 'test_type_inference') array = adapter[['f0', 'f1', 'f2', 'f3', 'f4']][:] self.assertEqual(array.size, nrecords) self.assertEqual(array.dtype, numpy.dtype('f8,O,u8,u8,u8')) sorted = numpy.sort(array) for i in range(nrecords - 1): self.assertEqual(sorted[i].item(), (float( i * 5), str(i * 5 + 1), i * 5 + 2, i * 5 + 3, i * 5 + 4)) self.assertEqual(sorted[-1].item(), (float(4995.5), '4996', 4997, 4998, 4999))
def test_slice_overflow(self): """ Test using a value for slice end that is larger than max uint32 size. Expected behavior is to round slice end down to max uint32 value (effectively reading as many records as possible). """ adapter = iopro.MongoAdapter(TestMongoAdapter.hostname, TestMongoAdapter.port, TestMongoAdapter.db_name, 'test_uints') adapter.set_field_names(['f0', 'f1', 'f2', 'f3', 'f4']) array = adapter[0:999999999999999999] self.assertEqual(array.size, nrecords) self.assertEqual(array.dtype, numpy.dtype('u8,u8,u8,u8,u8')) sorted = numpy.sort(array) for i in range(nrecords): self.assertEqual( sorted[i].item(), (i * 5, i * 5 + 1, i * 5 + 2, i * 5 + 3, i * 5 + 4))
def test_cast_to_int_from_float(self): adapter = iopro.MongoAdapter(TestMongoAdapter.hostname, TestMongoAdapter.port, TestMongoAdapter.db_name, 'test_floats') adapter[['f0', 'f1', 'f2', 'f3', 'f4']] adapter.set_field_types({ 'f0': 'i8', 'f1': 'i8', 'f2': 'i8', 'f3': 'i8', 'f4': 'i8' }) array = adapter[:] self.assertEqual(array.size, nrecords) self.assertEqual(array.dtype, numpy.dtype('i8,i8,i8,i8,i8')) sorted = numpy.sort(array) for i in range(nrecords): self.assertEqual( sorted[i].item(), (i * 5, i * 5 + 1, i * 5 + 2, i * 5 + 3, i * 5 + 4))
def test_array_slicing(self): adapter = iopro.MongoAdapter(TestMongoAdapter.hostname, TestMongoAdapter.port, TestMongoAdapter.db_name, 'test_uints') control = adapter[['f0', 'f1', 'f2', 'f3', 'f4']][:] array = adapter[['f0', 'f1', 'f2', 'f3', 'f4']][0:nrecords] self.assertEqual(array.size, nrecords) self.assertEqual(array.dtype, numpy.dtype('u8,u8,u8,u8,u8')) for i in range(nrecords): self.assertEqual(array[i].item(), control[i].item()) array = adapter[['f0', 'f1', 'f2', 'f3', 'f4']][-1] self.assertEqual(array.size, 1) self.assertEqual(array.dtype, numpy.dtype('u8,u8,u8,u8,u8')) self.assertEqual(array[0].item(), control[-1].item()) array = adapter[['f0', 'f1', 'f2', 'f3', 'f4']][::2] self.assertEqual(array.size, nrecords // 2) self.assertEqual(array.dtype, numpy.dtype('u8,u8,u8,u8,u8')) for i in range(0, nrecords // 2, 2): self.assertEqual(array[i].item(), control[i * 2].item())
def test_missing_fill_values(self): adapter = iopro.MongoAdapter(TestMongoAdapter.hostname, TestMongoAdapter.port, TestMongoAdapter.db_name, 'test_missing_ints', infer_types=False) # Force f1 type to integer adapter.set_field_types({'f1': 'u8'}) adapter.set_missing_values({0: ['NA']}) adapter.set_fill_values({0: 99, 1: 999, 4: 9999}, loose=True) array = adapter[['f0', 'f1', 'f2', 'f3', 'f4']][:] self.assertEqual(array.size, nrecords) self.assertEqual(array.dtype, numpy.dtype('u8,u8,u8,u8,u8')) # Records 0,5,10... contains 'NA' and 'NaN' values in f0 # that should convert to 99. # Records 1,6,11... contains values in f1 that can't be converted to int; # these should convert to 999. # Records 4,9,14... contains missing values in f4 # that should convert to 9999. for i in range(nrecords): if i % 5 == 0: self.assertEqual( array[i], (99, i * 5 + 1, i * 5 + 2, i * 5 + 3, i * 5 + 4)) elif i % 5 == 1: self.assertEqual(array[i], (i * 5, 999, i * 5 + 2, i * 5 + 3, i * 5 + 4)) elif i % 5 == 4: self.assertEqual( array[i], (i * 5, i * 5 + 1, i * 5 + 2, i * 5 + 3, 9999)) else: self.assertEqual( array[i], (i * 5, i * 5 + 1, i * 5 + 2, i * 5 + 3, i * 5 + 4))
def run_adapter_vs_pymongo(self, col_name, cast=False): adapter = iopro.MongoAdapter(TestMongoAdapter.hostname, TestMongoAdapter.port, TestMongoAdapter.db_name, col_name) array = adapter[['f0', 'f1', 'f2', 'f3', 'f4']][:] try: mongo_conn = pymongo.MongoClient(TestMongoAdapter.hostname, TestMongoAdapter.port) except: warnings.warn( 'Could not run Mongo tests: could not connect to Mongo database.' ) self.assertTrue(True) return mongo_db = mongo_conn['MongoAdapter_tests'] col = mongo_db[col_name] i = 0 for rec in col.find(): self.check_field('f0', array, i, rec, cast) self.check_field('f1', array, i, rec, cast) self.check_field('f2', array, i, rec, cast) self.check_field('f3', array, i, rec, cast) self.check_field('f4', array, i, rec, cast) i += 1
raise Exception( "Could not connect to Mongo database. You must have a mongo demon running on port 27017 for this to work. Have you run '$ mongod'?" ) mongo_db = mongo_conn[db_name] col = mongo_db[colxn_name] if col.count() > 0: col.remove() for i in range(nrecords): record = { 'f0': float(i * 5 + 0.1), 'f1': float(i * 5 + 1 + 0.1), 'f2': float(i * 5 + 2 + 0.1), 'f3': float(i * 5 + 3 + 0.1), 'f4': float(i * 5 + 4 + 0.1) } col.insert(record) # test out iopro's MongoAdapter adapter = iopro.MongoAdapter(hostname, port, db_name, colxn_name) adapter[[ 'f0', 'f1', 'f2', 'f3', 'f4' ]] # this is equivalent to set_field_names(['f0', 'f1', 'f2', 'f3', 'f4']) print('get_field_names(): ' + repr(adapter.get_field_names())) adapter.set_field_types({'f1': 'i8'}) print("get_field_types() = " + repr(adapter.get_field_types())) print("adapter[:] = \n" + repr(adapter[:]))
def test_slice_no_fields(self): adapter = iopro.MongoAdapter(TestMongoAdapter.hostname, TestMongoAdapter.port, TestMongoAdapter.db_name, 'test_ints') array = adapter[:] self.assertEqual(array.size, nrecords)
y = getobs(x, 5, variance) request = BASE_URL + "/" + str(exp_id) + "/setReward.json" request += "?key=" + key request += "&context={\"question\":" + str(question_nr) + "}" request += "&action={\"x\":" + str(float(x)) request += ",\"t\":" + str(float(t)) + "}" request += "&reward=" + str(float(y)) response = urllib.request.urlopen(request) reader = codecs.getreader("utf-8") obj = json.load(reader(response)) # log x track_x = np.append(track_x, x) plt.plot(track_x) plt.show() #change the following to pymongo for greater compatibility adapter = iopro.MongoAdapter('localhost', 27017, 'logs', 'logs') results = adapter[['type', 'q', 't', 'x', 'y', 'x0']][:] results = np.sort(results, order='t') selection_setreward = np.where(results['type'][:] == 'setreward') selection_question = np.where(results['q'][:] == question_nr) intersect = np.intersect1d(selection_setreward, selection_question) t_x = results[['t', 'x0']][intersect] plt.plot(t_x[['t']], t_x[['x0']]) plt.show()
def test_int_list(self): adapter = iopro.MongoAdapter(TestMongoAdapter.hostname, TestMongoAdapter.port, TestMongoAdapter.db_name, 'test_ints') array = adapter['f0'][[0, 1, 2]] self.assertEqual(array.size, 3)