Esempio n. 1
0
    def testPolynomialFunction1D(self):
        def basic1DPoly(x, params):
            ii = len(params) - 1
            retVal = params[ii]
            while ii > 0:
                ii -= 1
                retVal = retVal * x + params[ii]
            return retVal

        maxOrder = 4
        deltaParam = 0.3
        errMsg = "{} = {} != {} for x={}, params={}; {}"

        # test value using order constructor
        for order in range(maxOrder):
            numParams = order + 1
            params = nrange(numParams, deltaParam, deltaParam)
            f = afwMath.PolynomialFunction1D(params)
            g = afwMath.PolynomialFunction1D(order)
            g.setParameters(params)
            h = f.clone()

            self.assertEqual(f.getOrder(), order)
            self.assertEqual(g.getOrder(), order)

            for x in np.arange(-10.0, 10.1, 1.0):
                predVal = basic1DPoly(x, params)
                msg = errMsg.format(
                    type(f).__name__, f(x), predVal, x, params,
                    "params constructor")
                self.assertFloatsAlmostEqual(f(x),
                                             predVal,
                                             msg=msg,
                                             atol=self.atol,
                                             rtol=None)
                msg = errMsg.format(
                    type(g).__name__, g(x), predVal, x, params,
                    "order constructor")
                self.assertFloatsAlmostEqual(g(x),
                                             predVal,
                                             msg=msg,
                                             atol=self.atol,
                                             rtol=None)
                msg = errMsg.format(
                    type(h).__name__, h(x), predVal, x, params, "clone")
                self.assertFloatsAlmostEqual(h(x),
                                             predVal,
                                             msg=msg,
                                             atol=self.atol,
                                             rtol=None)
Esempio n. 2
0
 def testCast(self):
     instances = []
     kVec = makeGaussianKernelList(9, 9, [(2.0, 2.0, 0.0)])
     kParams = [0.0] * len(kVec)
     instances.append(afwMath.LinearCombinationKernel(kVec, kParams))
     instances.append(
         afwMath.AnalyticKernel(7, 7,
                                afwMath.GaussianFunction2D(2.0, 2.0, 0.0)))
     instances.append(
         afwMath.DeltaFunctionKernel(5, 5, afwGeom.Point2I(1, 1)))
     instances.append(
         afwMath.FixedKernel(afwImage.ImageD(afwGeom.Extent2I(7, 7))))
     instances.append(
         afwMath.SeparableKernel(3, 3, afwMath.PolynomialFunction1D(0),
                                 afwMath.PolynomialFunction1D(0)))
     for instance in instances:
         Class = type(instance)
         base = instance.clone()
         self.assertEqual(type(base), afwMath.Kernel)
         derived = Class.cast(base)
         self.assertEqual(type(derived), Class)
Esempio n. 3
0
    def testPolynomialFunction1D(self):
        """A test for PolynomialFunction1D
        """
        def basic1DPoly(x, params):
            """1-dimensional polynomial function"""
            ii = len(params) - 1
            retVal = params[ii]
            while ii > 0:
                ii -= 1
                retVal = retVal * x + params[ii]
            return retVal

        maxOrder = 4
        deltaParam = 0.3

        # test value using order constructor
        for order in range(maxOrder):
            numParams = order + 1
            params = nrange(numParams, deltaParam, deltaParam)
            f = afwMath.PolynomialFunction1D(params)
            g = afwMath.PolynomialFunction1D(order)
            g.setParameters(params)
            h = f.clone()

            self.assertEqual(f.getOrder(), order)
            self.assertEqual(g.getOrder(), order)
            #             self.assertEqual(h.getOrder(), order)

            for x in numpy.arange(-10.0, 10.1, 1.0):
                predVal = basic1DPoly(x, params)
                if not numpy.allclose(predVal, f(x)):
                    self.fail("%s = %s != %s for x=%s, params=%s; params constructor" % \
                        (type(f).__name__, f(x), predVal, x, params))
                if not numpy.allclose(predVal, g(x)):
                    self.fail("%s = %s != %s for x=%s, params=%s; order constructor" % \
                        (type(f).__name__, g(x), predVal, x, params))
                if not numpy.allclose(predVal, h(x)):
                    self.fail("%s = %s != %s for x=%s, params=%s; clone" % \
                        (type(h).__name__, h(x), predVal, x, params))
Esempio n. 4
0
 def testCast(self):
     for instance in (afwMath.Chebyshev1Function1F(2),
                      afwMath.GaussianFunction1F(1.0),
                      afwMath.LanczosFunction1F(3),
                      afwMath.NullFunction1F(),
                      afwMath.PolynomialFunction1F(2)):
         Class = type(instance)
         base = instance.clone()
         self.assertEqual(type(base), afwMath.Function1F)
         derived = Class.cast(base)
         self.assertEqual(type(derived), Class)
     for instance in (afwMath.Chebyshev1Function1D(2),
                      afwMath.GaussianFunction1D(1.0),
                      afwMath.LanczosFunction1D(3),
                      afwMath.NullFunction1D(),
                      afwMath.PolynomialFunction1D(2)):
         Class = type(instance)
         base = instance.clone()
         self.assertEqual(type(base), afwMath.Function1D)
         derived = Class.cast(base)
         self.assertEqual(type(derived), Class)
     for instance in (afwMath.Chebyshev1Function2F(2),
                      afwMath.GaussianFunction2F(1.0, 1.0),
                      afwMath.DoubleGaussianFunction2F(1.0),
                      afwMath.LanczosFunction2F(3),
                      afwMath.NullFunction2F(),
                      afwMath.PolynomialFunction2F(2)):
         Class = type(instance)
         base = instance.clone()
         self.assertEqual(type(base), afwMath.Function2F)
         derived = Class.cast(base)
         self.assertEqual(type(derived), Class)
     for instance in (afwMath.Chebyshev1Function2D(2),
                      afwMath.GaussianFunction2D(1.0, 1.0),
                      afwMath.DoubleGaussianFunction2D(1.0),
                      afwMath.LanczosFunction2D(3),
                      afwMath.NullFunction2D(),
                      afwMath.PolynomialFunction2D(2)):
         Class = type(instance)
         base = instance.clone()
         self.assertEqual(type(base), afwMath.Function2D)
         derived = Class.cast(base)
         self.assertEqual(type(derived), Class)
Esempio n. 5
0
    def testComputeImageRaise(self):
        """Test Kernel.computeImage raises OverflowException iff doNormalize True and kernel sum exactly 0
        """
        kWidth = 4
        kHeight = 3

        polyFunc1 = afwMath.PolynomialFunction1D(0)
        polyFunc2 = afwMath.PolynomialFunction2D(0)
        analKernel = afwMath.AnalyticKernel(kWidth, kHeight, polyFunc2)
        kImage = afwImage.ImageD(analKernel.getDimensions())
        for coeff in (-1, -1e-99, 0, 1e99, 1):
            analKernel.setKernelParameters([coeff])

            analKernel.computeImage(kImage, False)
            fixedKernel = afwMath.FixedKernel(kImage)

            sepKernel = afwMath.SeparableKernel(
                kWidth, kHeight, polyFunc1, polyFunc1)
            sepKernel.setKernelParameters([coeff, coeff])

            kernelList = []
            kernelList.append(analKernel)
            lcKernel = afwMath.LinearCombinationKernel(kernelList, [1])
            self.assertFalse(lcKernel.isDeltaFunctionBasis())

            doRaise = (coeff == 0)
            self.basicTestComputeImageRaise(
                analKernel, doRaise, "AnalyticKernel")
            self.basicTestComputeImageRaise(
                fixedKernel, doRaise, "FixedKernel")
            self.basicTestComputeImageRaise(
                sepKernel, doRaise, "SeparableKernel")
            self.basicTestComputeImageRaise(
                lcKernel, doRaise, "LinearCombinationKernel")

        lcKernel.setKernelParameters([0])
        self.basicTestComputeImageRaise(
            lcKernel, True, "LinearCombinationKernel")