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
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)
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])
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)
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)
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")
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")
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)
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)
def testNormMapMap(self): """Check that NormMap(Mapping) is an error""" with self.assertRaises(TypeError): astshim.NormMap(astshim.UnitMap(1))