Example #1
0
    def test_equality(self):
        """Test __eq__ and __ne__
        """
        frame = ast.Frame(2)
        zoomMap = ast.ZoomMap(2, 1.5)
        frameSet1 = ast.FrameSet(frame, zoomMap, frame)
        frameSet2 = ast.FrameSet(frame, zoomMap, frame)
        self.assertTrue(frameSet1 == frameSet2)
        self.assertFalse(frameSet1 != frameSet2)
        self.assertEqual(frameSet1, frameSet2)

        # the base attribute of frameSet1 is not set; set the base attribute
        # of framesSet2 and make sure the frame sets are now not equal
        self.assertFalse(frameSet1.test("Base"))
        frameSet2.base = 1
        self.assertTrue(frameSet2.test("Base"))
        self.assertFalse(frameSet1 == frameSet2)
        self.assertTrue(frameSet1 != frameSet2)
        self.assertNotEqual(frameSet1, frameSet2)

        # make sure base is unset in the inverse of the inverse of frameSet1,
        # else the equality test will fail for hard-to-understand reasons
        self.assertFalse(frameSet1.inverted().inverted().test("Base"))
        self.assertNotEqual(frameSet1, frameSet1.inverted())
        self.assertEqual(frameSet1, frameSet1.inverted().inverted())
        self.assertFalse(frameSet1.inverted().inverted().test("Base"))

        frame3 = ast.Frame(2)
        frame3.title = "Frame 3"
        frameSet3 = ast.FrameSet(frame3)
        self.assertNotEqual(frameSet1, frameSet3)
Example #2
0
    def test_FrameSetPermutationUnequal(self):
        """Test that permuting FrameSet axes with nIn != nOut

        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.

        Make nIn != nOut in order to test DM-9899
        FrameSet.permAxes would fail if nIn != nOut
        """
        # Initial mapping: 3 inputs, 2 outputs: 1-1, 2-2, 3=z
        # Test using arbitrary values for x,y,z
        x = 75.1
        y = -53.2
        z = 0.123
        frame1 = ast.Frame(3)
        permMap = ast.PermMap([1, 2, -1], [1, 2], [z])
        frame2 = ast.Frame(2)
        frameSet = ast.FrameSet(frame1, permMap, frame2)
        self.assertAlmostEqual(frameSet.applyForward([x, y, z]), [x, y])
        self.assertAlmostEqual(frameSet.applyInverse([x, y]), [x, y, z])

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

        # permuting again puts things back
        frameSet.permAxes([2, 1])
        self.assertAlmostEqual(frameSet.applyForward([x, y, z]), [x, y])
        self.assertAlmostEqual(frameSet.applyInverse([x, y]), [x, y, z])
Example #3
0
    def test_FrameSetPermutationSkyFrame(self):
        """Test permuting FrameSet 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()
        frameSet = ast.FrameSet(frame1, unitMap, frame2)
        self.assertAlmostEqual(frameSet.applyForward([x, y]), [x, y])
        self.assertAlmostEqual(frameSet.applyInverse([x, y]), [x, y])

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

        # permuting again puts things back
        frameSet.permAxes([2, 1])
        self.assertAlmostEqual(frameSet.applyForward([x, y]), [x, y])
        self.assertAlmostEqual(frameSet.applyInverse([x, y]), [x, y])
Example #4
0
    def test_FrameSetRemoveFrame(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)
        self.assertEqual(frame.getNObject(), initialNumFrames + 1)

        newFrame = ast.Frame(2, "Ident=current")
        self.assertEqual(frame.getNObject(), initialNumFrames + 2)
        zoomMap = ast.ZoomMap(2, 0.5, "Ident=zoom")
        initialNumZoomMap = zoomMap.getNObject()
        frameSet.addFrame(1, zoomMap, newFrame)
        self.assertEqual(frameSet.nFrame, 2)
        self.assertEqual(frame.getNObject(), initialNumFrames + 3)
        self.assertEqual(zoomMap.getNObject(), initialNumZoomMap + 1)

        # remove the frame named "base", leaving the frame named "current"
        frameSet.removeFrame(1)
        self.assertEqual(frameSet.nFrame, 1)
        # removing one frame leaves frame, newFrame and a copy of newFrame in FrameSet
        self.assertEqual(frame.getNObject(), initialNumFrames + 2)
        self.assertEqual(zoomMap.getNObject(), initialNumZoomMap)
        frameDeep = frameSet.getFrame(1)
        self.assertEqual(frameDeep.ident, "current")

        # it is not allowed to remove the last frame
        with self.assertRaises(RuntimeError):
            frameSet.removeFrame(1)
Example #5
0
    def test_FrameSetRemapFrame(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)
        self.assertEqual(frame.getNObject(), initialNumFrames + 1)

        newFrame = ast.Frame(2, "Ident=current")
        self.assertEqual(frame.getNObject(), initialNumFrames + 2)
        zoom = 0.5
        zoomMap = ast.ZoomMap(2, zoom, "Ident=zoom")
        initialNumZoomMap = zoomMap.getNObject()
        frameSet.addFrame(1, zoomMap, newFrame)
        self.assertEqual(frameSet.nFrame, 2)
        self.assertEqual(frame.getNObject(), initialNumFrames + 3)
        self.assertEqual(zoomMap.getNObject(), initialNumZoomMap + 1)

        input_data = np.array([
            [0.0, 0.1, -1.5],
            [5.1, 0.0, 3.1],
        ])
        predicted_output1 = input_data * zoom
        assert_allclose(frameSet.applyForward(input_data), predicted_output1)
        self.checkMappingPersistence(frameSet, input_data)

        shift = (0.5, -1.5)
        shiftMap = ast.ShiftMap(shift, "Ident=shift")
        initialNumShiftMap = shiftMap.getNObject()
        self.assertEqual(zoomMap.getNObject(), initialNumZoomMap + 1)
        frameSet.remapFrame(1, shiftMap)
        self.assertEqual(zoomMap.getNObject(), initialNumZoomMap + 1)
        self.assertEqual(shiftMap.getNObject(), initialNumShiftMap + 1)
        predicted_output2 = (input_data.T - shift).T * zoom
        assert_allclose(frameSet.applyForward(input_data), predicted_output2)
    def test_FrameDictFrameSetConstructor(self):
        frameSet = ast.FrameSet(self.frame1, self.zoomMap, self.frame2)
        frameDict = ast.FrameDict(frameSet)
        indata = np.array([[1.1, 2.1, 3.1], [1.2, 2.2, 3.2]])
        predictedOut = indata * self.zoom
        assert_allclose(frameDict.applyForward(indata), predictedOut)
        assert_allclose(frameDict.applyInverse(predictedOut), indata)

        frameDict2 = makeFrameDict(frameSet)
        self.assertEqual(frameDict2.getRefCount(), 1)
Example #7
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
Example #8
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)
Example #9
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")
Example #10
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")
Example #11
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)