def testObsMetaData(self): """ Test that CompoundCatalogDBObject can handle ObservationMetaData properly """ obs = ObservationMetaData(pointingRA = 180.0, pointingDec = 0.0, boundType = 'box', boundLength = (80.0, 25.0), mjd=53580.0) class testDbClass22(testStarDB1): database = self.dbName driver = 'sqlite' class testDbClass23(testStarDB2): database = self.dbName driver = 'sqlite' db1 = testDbClass22 db2 = testDbClass23 compoundDb = CompoundCatalogDBObject([db1, db2]) colnames = ['%s_id' % db1.objid, '%s_raJ2000' % db1.objid, '%s_decJ2000' % db1.objid, '%s_magMod' % db1.objid, '%s_raJ2000' % db2.objid, '%s_decJ2000' % db2.objid, '%s_magMod' % db2.objid] results = compoundDb.query_columns(colnames=colnames, obs_metadata=obs) good_rows = [] for chunk in results: for line in chunk: ix = line['id'] good_rows.append(ix) self.assertAlmostEqual(line['%s_raJ2000' % db1.objid], self.controlArray['ra'][ix], 10) self.assertAlmostEqual(line['%s_decJ2000' % db1.objid], self.controlArray['dec'][ix], 10) self.assertAlmostEqual(line['%s_magMod' % db1.objid], self.controlArray['mag'][ix], 10) self.assertAlmostEqual(line['%s_raJ2000' % db2.objid], 2.0*self.controlArray['ra'][ix], 10) self.assertAlmostEqual(line['%s_decJ2000' % db2.objid], 2.0*self.controlArray['dec'][ix], 10) self.assertAlmostEqual(line['%s_magMod' % db2.objid], 2.0*self.controlArray['mag'][ix], 10) self.assertTrue(self.controlArray['ra'][ix]>100.0) self.assertTrue(self.controlArray['ra'][ix]<260.0) self.assertTrue(self.controlArray['dec'][ix]>-25.0) self.assertTrue(self.controlArray['dec'][ix]<25.0) bad_rows = [ix for ix in range(self.controlArray.shape[0]) if ix not in good_rows] in_bounds = [rr>100.0 and rr<260.0 and dd>-25.0 and dd<25.0 \ for (rr, dd) in \ zip(self.controlArray['ra'][bad_rows], self.controlArray['dec'][bad_rows])] self.assertFalse(True in in_bounds) self.assertTrue(len(good_rows)>0) self.assertTrue(len(bad_rows)>0)
def testNoneMapping(self): """ Test that Nones are handled correctly in the CatalogDBObject column mappings """ db1 = dbClass1(database=self.dbName, driver='sqlite') db2 = dbClass6(database=self.dbName, driver='sqlite') colNames = ['class1_aa', 'class1_bb', 'class6_a', 'class6_b'] compoundDb = CompoundCatalogDBObject([db1, db2]) results = compoundDb.query_columns(colnames=colNames) for chunk in results: numpy.testing.assert_array_almost_equal(chunk['class1_aa'], self.controlArray['a'], decimal=6) numpy.testing.assert_array_equal(chunk['class1_bb'], self.controlArray['d']) numpy.testing.assert_array_almost_equal(chunk['class6_a'], self.controlArray['a'], decimal=6) numpy.testing.assert_array_almost_equal(chunk['class6_b'], self.controlArray['b'], decimal=6)
def testChunks(self): """ Verify that CompoundCatalogDBObject handles chunk_size correctly """ db1 = dbClass1(database=self.dbName, driver='sqlite') db2 = dbClass2(database=self.dbName, driver='sqlite') db3 = dbClass3(database=self.dbName, driver='sqlite') dbList = [db1, db2, db3] compoundDb = CompoundCatalogDBObject(dbList) colNames = ['id', 'class1_aa', 'class1_bb', 'class2_aa', 'class2_bb', 'class3_aa', 'class3_bb', 'class3_cc'] results = compoundDb.query_columns(colnames=colNames, chunk_size=10) ct = 0 for chunk in results: ct += len(chunk['class1_aa']) rows = chunk['id'] self.assertTrue(len(rows)<=10) numpy.testing.assert_array_almost_equal(chunk['class1_aa'], self.controlArray['a'][rows], decimal=6) numpy.testing.assert_array_equal(chunk['class1_bb'], self.controlArray['d'][rows]) numpy.testing.assert_array_almost_equal(chunk['class2_aa'], 2.0*self.controlArray['b'][rows], decimal=6) numpy.testing.assert_array_almost_equal(chunk['class2_bb'], self.controlArray['a'][rows], decimal=6) numpy.testing.assert_array_almost_equal(chunk['class3_aa'], self.controlArray['c'][rows]-3.0, decimal=6) numpy.testing.assert_array_almost_equal(chunk['class3_bb'], self.controlArray['a'][rows], decimal=6) numpy.testing.assert_array_almost_equal(chunk['class3_cc'], 3.0*self.controlArray['b'][rows], decimal=6) self.assertEqual(ct, 100)
def testObsMetadataAndConstraint(self): """ Test that CompoundCatalogDBObject correctly handles an ObservationMetaData and a constraint at the same time """ obs = ObservationMetaData(unrefractedRA = 180.0, unrefractedDec = 0.0, boundType = 'box', boundLength = (80.0, 25.0)) db1 = testStarDB1(database=self.dbName, driver='sqlite') db2 = testStarDB2(database=self.dbName, driver='sqlite') compoundDb = CompoundCatalogDBObject([db1, db2]) colnames = ['testStar1_id', 'testStar1_raJ2000', 'testStar1_decJ2000', 'testStar1_magMod', 'testStar2_raJ2000', 'testStar2_decJ2000', 'testStar2_magMod'] results = compoundDb.query_columns(colnames=colnames, obs_metadata=obs, constraint='mag>15.0') good_rows = [] for chunk in results: for line in chunk: ix = line['id'] good_rows.append(ix) self.assertAlmostEqual(line['testStar1_raJ2000'], self.controlArray['ra'][ix], 10) self.assertAlmostEqual(line['testStar1_decJ2000'], self.controlArray['dec'][ix], 10) self.assertAlmostEqual(line['testStar1_magMod'], self.controlArray['mag'][ix], 10) self.assertAlmostEqual(line['testStar2_raJ2000'], 2.0*self.controlArray['ra'][ix], 10) self.assertAlmostEqual(line['testStar2_decJ2000'], 2.0*self.controlArray['dec'][ix], 10) self.assertAlmostEqual(line['testStar2_magMod'], 2.0*self.controlArray['mag'][ix], 10) self.assertTrue(self.controlArray['ra'][ix]>100.0) self.assertTrue(self.controlArray['ra'][ix]<260.0) self.assertTrue(self.controlArray['dec'][ix]>-25.0) self.assertTrue(self.controlArray['dec'][ix]<25.0) self.assertTrue(self.controlArray['mag'][ix]>15.0) bad_rows = [ix for ix in range(self.controlArray.shape[0]) if ix not in good_rows] in_bounds = [rr>100.0 and rr<260.0 and dd>-25.0 and dd<25.0 and mm>150.0 \ for (rr, dd, mm) in \ zip(self.controlArray['ra'][bad_rows], self.controlArray['dec'][bad_rows], \ self.controlArray['mag'][bad_rows])] self.assertFalse(True in in_bounds) self.assertTrue(len(good_rows)>0) self.assertTrue(len(bad_rows)>0) self.assertEqual(len(good_rows)+len(bad_rows), self.controlArray.shape[0])
def testContraint(self): """ Test that CompoundCatalogDBObject runs correctly with a constraint """ class testDbClass24(testStarDB1): database = self.dbName driver = 'sqlite' class testDbClass25(testStarDB2): database = self.dbName driver = 'sqlite' db1 = testDbClass24 db2 = testDbClass25 compoundDb = CompoundCatalogDBObject([db1, db2]) colnames = ['%s_id' % db1.objid, '%s_raJ2000' % db1.objid, '%s_decJ2000' % db1.objid, '%s_magMod' % db1.objid, '%s_raJ2000' % db2.objid, '%s_decJ2000' % db2.objid, '%s_magMod' % db2.objid] results = compoundDb.query_columns(colnames=colnames, constraint='mag<11.0') good_rows = [] for chunk in results: for line in chunk: ix = line['id'] good_rows.append(ix) self.assertAlmostEqual(line['%s_raJ2000' % db1.objid], self.controlArray['ra'][ix], 10) self.assertAlmostEqual(line['%s_decJ2000' % db1.objid], self.controlArray['dec'][ix], 10) self.assertAlmostEqual(line['%s_magMod' % db1.objid], self.controlArray['mag'][ix], 10) self.assertAlmostEqual(line['%s_raJ2000' % db2.objid], 2.0*self.controlArray['ra'][ix], 10) self.assertAlmostEqual(line['%s_decJ2000' % db2.objid], 2.0*self.controlArray['dec'][ix], 10) self.assertAlmostEqual(line['%s_magMod' % db2.objid], 2.0*self.controlArray['mag'][ix], 10) self.assertTrue(self.controlArray['mag'][ix]<11.0) bad_rows = [ix for ix in range(self.controlArray.shape[0]) if ix not in good_rows] in_bounds = [mm<11.0 for mm in self.controlArray['mag'][bad_rows]] self.assertFalse(True in in_bounds) self.assertTrue(len(good_rows)>0) self.assertTrue(len(bad_rows)>0) self.assertEqual(len(good_rows)+len(bad_rows), self.controlArray.shape[0])
def testCompoundCatalogDBObject(self): """ Verify that CompoundCatalogDBObject returns the expected columns. """ db1 = dbClass1(database=self.dbName, driver='sqlite') db2 = dbClass2(database=self.dbName, driver='sqlite') db3 = dbClass3(database=self.dbName, driver='sqlite') dbList = [db1, db2, db3] compoundDb = CompoundCatalogDBObject(dbList) colNames = ['class1_aa', 'class1_bb', 'class2_aa', 'class2_bb', 'class3_aa', 'class3_bb', 'class3_cc'] results = compoundDb.query_columns(colnames=colNames) for chunk in results: numpy.testing.assert_array_almost_equal(chunk['class1_aa'], self.controlArray['a'], decimal=6) numpy.testing.assert_array_equal(chunk['class1_bb'], self.controlArray['d']) numpy.testing.assert_array_almost_equal(chunk['class2_aa'], 2.0*self.controlArray['b'], decimal=6) numpy.testing.assert_array_almost_equal(chunk['class2_bb'], self.controlArray['a'], decimal=6) numpy.testing.assert_array_almost_equal(chunk['class3_aa'], self.controlArray['c']-3.0, decimal=6) numpy.testing.assert_array_almost_equal(chunk['class3_bb'], self.controlArray['a'], decimal=6) numpy.testing.assert_array_almost_equal(chunk['class3_cc'], 3.0*self.controlArray['b'], decimal=6)
def testNoneMapping(self): """ Test that Nones are handled correctly in the CatalogDBObject column mappings """ class testDbClass20(dbClass1): database = self.dbName driver = 'sqlite' class testDbClass21(dbClass6): database = self.dbName driver = 'sqlite' db1 = testDbClass20 db2 = testDbClass21 colNames = ['%s_aa' % db1.objid, '%s_bb' % db1.objid, '%s_a' % db2.objid, '%s_b' % db2.objid] compoundDb = CompoundCatalogDBObject([db1, db2]) results = compoundDb.query_columns(colnames=colNames) for chunk in results: numpy.testing.assert_array_almost_equal(chunk['%s_aa' % db1.objid], self.controlArray['a'], decimal=6) numpy.testing.assert_array_equal(chunk['%s_bb' % db1.objid], self.controlArray['d']) numpy.testing.assert_array_almost_equal(chunk['%s_a' % db2.objid], self.controlArray['a'], decimal=6) numpy.testing.assert_array_almost_equal(chunk['%s_b' % db2.objid], self.controlArray['b'], decimal=6)
def testChunks(self): """ Verify that CompoundCatalogDBObject handles chunk_size correctly """ class testDbClass17(dbClass1): database = self.dbName driver = 'sqlite' class testDbClass18(dbClass2): database = self.dbName driver = 'sqlite' class testDbClass19(dbClass3): database = self.dbName driver = 'sqlite' db1 = testDbClass17 db2 = testDbClass18 db3 = testDbClass19 dbList = [db1, db2, db3] compoundDb = CompoundCatalogDBObject(dbList) colNames = ['id', '%s_aa' % db1.objid, '%s_bb' % db1.objid, '%s_aa' % db2.objid, '%s_bb' % db2.objid, '%s_aa' % db3.objid, '%s_bb' % db3.objid, '%s_cc' % db3.objid] results = compoundDb.query_columns(colnames=colNames, chunk_size=10) ct = 0 for chunk in results: ct += len(chunk['%s_aa' % db1.objid]) rows = chunk['id'] self.assertTrue(len(rows)<=10) numpy.testing.assert_array_almost_equal(chunk['%s_aa' % db1.objid], self.controlArray['a'][rows], decimal=6) numpy.testing.assert_array_equal(chunk['%s_bb' % db1.objid], self.controlArray['d'][rows]) numpy.testing.assert_array_almost_equal(chunk['%s_aa' % db2.objid], 2.0*self.controlArray['b'][rows], decimal=6) numpy.testing.assert_array_almost_equal(chunk['%s_bb' % db2.objid], self.controlArray['a'][rows], decimal=6) numpy.testing.assert_array_almost_equal(chunk['%s_aa' % db3.objid], self.controlArray['c'][rows]-3.0, decimal=6) numpy.testing.assert_array_almost_equal(chunk['%s_bb' % db3.objid], self.controlArray['a'][rows], decimal=6) numpy.testing.assert_array_almost_equal(chunk['%s_cc' % db3.objid], 3.0*self.controlArray['b'][rows], decimal=6) self.assertEqual(ct, 100)
def testCompoundCatalogDBObject(self): """ Verify that CompoundCatalogDBObject returns the expected columns. """ class testDbClass9(dbClass1): database = self.dbName driver = 'sqlite' class testDbClass10(dbClass2): database = self.dbName driver = 'sqlite' class testDbClass11(dbClass3): database = self.dbName driver = 'sqlite' db1 = testDbClass9 db2 = testDbClass10 db3 = testDbClass11 dbList = [db1, db2, db3] compoundDb = CompoundCatalogDBObject(dbList) colNames = ['%s_aa' % db1.objid, '%s_bb' % db1.objid, '%s_aa' % db2.objid, '%s_bb' % db2.objid, '%s_aa' % db3.objid, '%s_bb' % db3.objid, '%s_cc' % db3.objid] results = compoundDb.query_columns(colnames=colNames) for chunk in results: numpy.testing.assert_array_almost_equal(chunk['%s_aa' % db1.objid], self.controlArray['a'], decimal=6) numpy.testing.assert_array_equal(chunk['%s_bb' % db1.objid], self.controlArray['d']) numpy.testing.assert_array_almost_equal(chunk['%s_aa' % db2.objid], 2.0*self.controlArray['b'], decimal=6) numpy.testing.assert_array_almost_equal(chunk['%s_bb' % db2.objid], self.controlArray['a'], decimal=6) numpy.testing.assert_array_almost_equal(chunk['%s_aa' % db3.objid], self.controlArray['c']-3.0, decimal=6) numpy.testing.assert_array_almost_equal(chunk['%s_bb' % db3.objid], self.controlArray['a'], decimal=6) numpy.testing.assert_array_almost_equal(chunk['%s_cc' % db3.objid], 3.0*self.controlArray['b'], decimal=6)