Coverage for tests/test_semiEmpiricalPrior.py : 26%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
# # LSST Data Management System # # Copyright 2008-2016 AURA/LSST. # # This product includes software developed by the # LSST Project (http://www.lsst.org/). # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the LSST License Statement and # the GNU General Public License along with this program. If not, # see <https://www.lsstcorp.org/LegalNotices/>. #
# a prior with broad ramps and non-zero slope; broad ramps makes evaluating numerical # derivatives easier, and we want to do that to check the analytic ones numpy.random.seed(500) self.ctrl = lsst.meas.modelfit.SemiEmpiricalPrior.Control() self.ctrl.ellipticityCore = 4.0 self.ctrl.ellipticitySigma = 10.0 self.ctrl.logRadiusMinOuter = self.ctrl.logRadiusMinInner - 8.0 self.ctrl.logRadiusMu = 2.0 self.ctrl.logRadiusSigma = 5.0 self.ctrl.logRadiusNu = 2.0 self.prior = lsst.meas.modelfit.SemiEmpiricalPrior(self.ctrl) self.amplitudes = numpy.array([1.0], dtype=lsst.meas.modelfit.Scalar) dtype = numpy.dtype([("eta1", float), ("eta2", float), ("lnR", float), ("p", float), ("d_eta1", float), ("d_eta2", float), ("d_lnR", float), ("d2_eta1_eta1", float), ("d2_eta1_eta2", float), ("d2_eta1_lnR", float), ("d2_eta2_eta2", float), ("d2_eta2_lnR", float), ("d2_lnR_lnR", float)]) self.data = numpy.loadtxt(os.path.join(os.path.dirname( os.path.realpath(__file__)), "data", "SEP.txt"), dtype=dtype)
del self.prior del self.amplitudes
for row in self.data: p = self.prior.evaluate(numpy.array([row["eta1"], row["eta2"], row["lnR"]]), self.amplitudes) self.assertFloatsAlmostEqual(row["p"], p)
for row in self.data: grad = numpy.zeros(4, dtype=float) hess = numpy.zeros((4, 4), dtype=float) self.prior.evaluateDerivatives( numpy.array([row["eta1"], row["eta2"], row["lnR"]]), self.amplitudes, grad[:3], grad[3:], hess[:3, :3], hess[3:, 3:], hess[:3, 3:] ) self.assertFloatsAlmostEqual(row["d_eta1"], grad[0]) self.assertFloatsAlmostEqual(row["d_eta2"], grad[1]) self.assertFloatsAlmostEqual(row["d_lnR"], grad[2])
for row in self.data: grad = numpy.zeros(4, dtype=float) hess = numpy.zeros((4, 4), dtype=float) self.prior.evaluateDerivatives( numpy.array([row["eta1"], row["eta2"], row["lnR"]]), self.amplitudes, grad[:3], grad[3:], hess[:3, :3], hess[3:, 3:], hess[:3, 3:] ) self.assertFloatsAlmostEqual(row["d2_eta1_eta1"], hess[0, 0]) self.assertFloatsAlmostEqual(row["d2_eta1_eta2"], hess[0, 1]) self.assertFloatsAlmostEqual(row["d2_eta1_lnR"], hess[0, 2]) self.assertFloatsAlmostEqual(row["d2_eta2_eta2"], hess[1, 1]) self.assertFloatsAlmostEqual(row["d2_eta2_lnR"], hess[1, 2]) self.assertFloatsAlmostEqual(row["d2_lnR_lnR"], hess[2, 2])
b = numpy.broadcast(eta1, eta2, lnR) p = numpy.zeros(b.shape, dtype=lsst.meas.modelfit.Scalar) for i, (eta1i, eta2i, lnRi) in enumerate(b): p.flat[i] = self.prior.evaluate(numpy.array([eta1i, eta2i, lnRi]), self.amplitudes) return p
lsst.utils.tests.init()
lsst.utils.tests.init() unittest.main() |