예제 #1
0
    def makeFrameSet(self, baseFrame, currFrame):
        """Make a FrameSet

        The FrameSet will contain 4 frames and three transforms connecting them.
        The idenity of each frame is provided by self.frameIdentDict

        Frame       Index   Mapping from this frame to the next
        `baseFrame`   1     `ast.UnitMap(nIn)`
        Frame(nIn)    2     `polyMap`
        Frame(nOut)   3     `ast.UnitMap(nOut)`
        `currFrame`   4

        where:
        - `nIn` = `baseFrame.nAxes`
        - `nOut` = `currFrame.nAxes`
        - `polyMap` = `makeTwoWayPolyMap(nIn, nOut)`

        Returns
        ------
        `ast.FrameSet`
            The FrameSet as described above

        Parameters
        ----------
        baseFrame : `ast.Frame`
            base frame
        currFrame : `ast.Frame`
            current frame
        """
        nIn = baseFrame.nAxes
        nOut = currFrame.nAxes
        polyMap = makeTwoWayPolyMap(nIn, nOut)

        # The only way to set the Ident of a frame in a FrameSet is to set it in advance,
        # and I don't want to modify the inputs, so replace the input frames with copies
        baseFrame = baseFrame.copy()
        baseFrame.ident = self.frameIdentDict[1]
        currFrame = currFrame.copy()
        currFrame.ident = self.frameIdentDict[4]

        frameSet = ast.FrameSet(baseFrame)
        frame2 = ast.Frame(nIn)
        frame2.ident = self.frameIdentDict[2]
        frameSet.addFrame(ast.FrameSet.CURRENT, ast.UnitMap(nIn), frame2)
        frame3 = ast.Frame(nOut)
        frame3.ident = self.frameIdentDict[3]
        frameSet.addFrame(ast.FrameSet.CURRENT, polyMap, frame3)
        frameSet.addFrame(ast.FrameSet.CURRENT, ast.UnitMap(nOut), currFrame)
        return frameSet
예제 #2
0
    def test_TranMapNotSymmetric(self):
        zoomfac = 0.5
        unitMap = ast.UnitMap(2)
        zoomMap = ast.ZoomMap(2, zoomfac)
        tranmap = ast.TranMap(unitMap, zoomMap)
        # adding to a TranMap increases by 1
        self.assertEqual(unitMap.getRefCount(), 2)
        # adding to a TranMap increases by 1
        self.assertEqual(zoomMap.getRefCount(), 2)

        self.assertIsInstance(tranmap, ast.TranMap)
        self.assertIsInstance(tranmap, ast.Mapping)
        self.assertEqual(tranmap.nIn, 2)
        self.assertEqual(tranmap.nOut, 2)

        self.checkCopy(tranmap)

        indata = np.array([
            [1.0, 2.0, -6.0, 30.0, 1.0],
            [3.0, 99.0, -5.0, 21.0, 0.0],
        ],
                          dtype=float)
        outdata = tranmap.applyForward(indata)
        assert_allclose(outdata, indata)
        outdata_roundtrip = tranmap.applyInverse(outdata)
        assert_allclose(indata, outdata_roundtrip * zoomfac)

        with self.assertRaises(AssertionError):
            self.checkRoundTrip(tranmap, indata)
        self.checkMappingPersistence(tranmap, indata)
예제 #3
0
    def test_FrameDictPermutationSkyFrame(self):
        """Test permuting FrameDict axes using a SkyFrame

        Permuting the axes of the current frame of a frame set
        *in situ* (by calling `permAxes` on the frame set itself)
        should update the connected mappings.
        """
        # test with arbitrary values that will not be wrapped by SkyFrame
        x = 0.257
        y = 0.832
        frame1 = ast.Frame(2)
        unitMap = ast.UnitMap(2)
        frame2 = ast.SkyFrame()
        frameDict = ast.FrameDict(frame1, unitMap, frame2)
        self.assertAlmostEqual(frameDict.applyForward([x, y]), [x, y])
        self.assertAlmostEqual(frameDict.applyInverse([x, y]), [x, y])

        # permuting the axes of the current frame also permutes the mapping
        frameDict.permAxes([2, 1])
        self.assertAlmostEqual(frameDict.applyForward([x, y]), [y, x])
        self.assertAlmostEqual(frameDict.applyInverse([x, y]), [y, x])

        # permuting again puts things back
        frameDict.permAxes([2, 1])
        self.assertAlmostEqual(frameDict.applyForward([x, y]), [x, y])
        self.assertAlmostEqual(frameDict.applyInverse([x, y]), [x, y])
예제 #4
0
    def test_multiprocessing(self):
        """Make sure we can return objects from multiprocessing

        This tests DM-13316: AST errors when using multiprocessing
        to return astshim objects.
        """
        numProcesses = 2
        naxes = 1
        params = [naxes] * numProcesses
        pool = multiprocessing.Pool(processes=numProcesses)
        results = pool.map(ast.UnitMap, params)
        self.assertEqual(results, [ast.UnitMap(naxes)] * numProcesses)
예제 #5
0
    def test_FrameSetBasics(self):
        frame = ast.Frame(2, "Ident=base")
        initialNumFrames = frame.getNObject(
        )  # may be >1 when run using pytest
        frameSet = ast.FrameSet(frame)
        self.assertIsInstance(frameSet, ast.FrameSet)
        self.assertEqual(frameSet.nFrame, 1)

        # Make sure the frame is deep copied
        frame.ident = "newIdent"
        self.assertEqual(frameSet.getFrame(frameSet.BASE).ident, "base")
        self.assertEqual(frame.getRefCount(), 1)
        self.assertEqual(frame.getNObject(), initialNumFrames + 1)

        # add a new frame and mapping; make sure they are deep copied
        newFrame = ast.Frame(2, "Ident=current")
        mapping = ast.UnitMap(2, "Ident=mapping")
        initialNumUnitMap = mapping.getNObject()
        self.assertEqual(frame.getNObject(), initialNumFrames + 2)
        frameSet.addFrame(1, mapping, newFrame)
        self.assertEqual(frameSet.nFrame, 2)
        newFrame.ident = "newFrameIdent"
        mapping.ident = "newMappingIdent"
        self.assertEqual(frameSet.getFrame(frameSet.CURRENT).ident, "current")
        self.assertEqual(frameSet.getMapping().ident, "mapping")
        self.assertEqual(newFrame.getRefCount(), 1)
        self.assertEqual(frame.getNObject(), initialNumFrames + 3)
        self.assertEqual(mapping.getRefCount(), 1)
        self.assertEqual(mapping.getNObject(), initialNumUnitMap + 1)

        # make sure BASE is available on the class and instance
        self.assertEqual(ast.FrameSet.BASE, frameSet.BASE)

        baseframe = frameSet.getFrame(frameSet.BASE)
        self.assertEqual(frame.getNObject(), initialNumFrames + 4)
        self.assertEqual(baseframe.ident, "base")
        self.assertEqual(frameSet.base, 1)
        currframe = frameSet.getFrame(frameSet.CURRENT)
        self.assertEqual(frame.getNObject(), initialNumFrames + 5)
        self.assertEqual(currframe.ident, "current")
        self.assertEqual(frameSet.current, 2)

        self.checkCopy(frameSet)

        input_data = np.array([
            [0.0, 0.1, -1.5],
            [5.1, 0.0, 3.1],
        ])
        self.checkMappingPersistence(frameSet, input_data)
예제 #6
0
    def testFrameSetFrameMappingFrameConstructor(self):
        baseFrame = ast.Frame(2, "Ident=base")
        mapping = ast.UnitMap(2, "Ident=mapping")
        currFrame = ast.Frame(2, "Ident=current")
        frameSet = ast.FrameSet(baseFrame, mapping, currFrame)
        self.assertEqual(frameSet.nFrame, 2)
        self.assertEqual(frameSet.base, 1)
        self.assertEqual(frameSet.current, 2)

        # make sure all objects were deep copied
        baseFrame.ident = "newBase"
        mapping.ident = "newMapping"
        currFrame.ident = "newCurrent"
        self.assertEqual(frameSet.getFrame(frameSet.BASE).ident, "base")
        self.assertEqual(frameSet.getFrame(frameSet.CURRENT).ident, "current")
        self.assertEqual(frameSet.getMapping().ident, "mapping")
예제 #7
0
    def test_FrameSetGetFrame(self):
        frame = ast.Frame(2, "Ident=base")
        frameSet = ast.FrameSet(frame)
        self.assertIsInstance(frameSet, ast.FrameSet)
        self.assertEqual(frameSet.nFrame, 1)

        newFrame = ast.Frame(2, "Ident=current")
        frameSet.addFrame(1, ast.UnitMap(2), newFrame)
        self.assertEqual(frameSet.nFrame, 2)

        # check that getFrame returns a deep copy
        baseFrameDeep = frameSet.getFrame(ast.FrameSet.BASE)
        self.assertEqual(baseFrameDeep.ident, "base")
        self.assertEqual(baseFrameDeep.getRefCount(), 1)
        baseFrameDeep.ident = "modifiedBase"
        self.assertEqual(frameSet.getFrame(ast.FrameSet.BASE).ident, "base")
        self.assertEqual(frame.ident, "base")
예제 #8
0
    def test_UnitMapBasics(self):
        unitmap = ast.UnitMap(3)
        self.assertEqual(unitmap.className, "UnitMap")
        self.assertEqual(unitmap.nIn, 3)
        self.assertEqual(unitmap.nOut, 3)

        self.checkBasicSimplify(unitmap)
        self.checkCopy(unitmap)

        indata = np.array([
            [1.1, 2.2, 3.3, 4.4],
            [-43.5, 1309.31, 0.005, -36.5],
            [0.0, -2.3, 44.4, 3.14],
        ])
        outdata = unitmap.applyForward(indata)
        assert_allclose(outdata, indata)
        self.checkRoundTrip(unitmap, indata)
        self.checkMappingPersistence(unitmap, indata)
예제 #9
0
    def test_FrameSetGetMapping(self):
        frame = ast.Frame(2, "Ident=base")
        frameSet = ast.FrameSet(frame)
        self.assertIsInstance(frameSet, ast.FrameSet)
        self.assertEqual(frameSet.nFrame, 1)

        newFrame = ast.Frame(2)
        mapping = ast.UnitMap(2, "Ident=mapping")
        initialNumUnitMap = mapping.getNObject()  # may be >1 when run using pytest
        frameSet.addFrame(1, mapping, newFrame)
        self.assertEqual(frameSet.nFrame, 2)
        self.assertEqual(mapping.getNObject(), initialNumUnitMap + 1)

        # check that getMapping returns a deep copy
        mappingDeep = frameSet.getMapping(1, 2)
        self.assertEqual(mappingDeep.ident, "mapping")
        mappingDeep.ident = "modifiedMapping"
        self.assertEqual(mapping.ident, "mapping")
        self.assertEqual(mappingDeep.getRefCount(), 1)
        self.assertEqual(mapping.getNObject(), initialNumUnitMap + 2)
예제 #10
0
 def testNormMapMap(self):
     """Check that NormMap(Mapping) is an error"""
     with self.assertRaises(TypeError):
         astshim.NormMap(astshim.UnitMap(1))