Coverage for python/lsst/afw/display/virtualDevice.py: 87%

57 statements  

« prev     ^ index     » next       coverage.py v7.4.4, created at 2024-04-15 02:23 -0700

1# This file is part of afw. 

2# 

3# Developed for the LSST Data Management System. 

4# This product includes software developed by the LSST Project 

5# (https://www.lsst.org). 

6# See the COPYRIGHT file at the top-level directory of this distribution 

7# for details of code ownership. 

8# 

9# This program is free software: you can redistribute it and/or modify 

10# it under the terms of the GNU General Public License as published by 

11# the Free Software Foundation, either version 3 of the License, or 

12# (at your option) any later version. 

13# 

14# This program is distributed in the hope that it will be useful, 

15# but WITHOUT ANY WARRANTY; without even the implied warranty of 

16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 

17# GNU General Public License for more details. 

18# 

19# You should have received a copy of the GNU General Public License 

20# along with this program. If not, see <https://www.gnu.org/licenses/>. 

21 

22 

23class DisplayImpl: 

24 """Back-end for display objects. 

25 

26 Parameters 

27 ---------- 

28 display 

29 The display object that we're providing the implementation for 

30 verbose : `bool` 

31 be chatty? 

32 """ 

33 def __init__(self, display, verbose=False): 

34 self.display = display 

35 self.verbose = verbose 

36 

37 def __del__(self): 

38 self._close() 

39 

40 def _close(self): 

41 """Close the display, cleaning up any allocated resources 

42 """ 

43 if hasattr(self, "verbose") and self.verbose and hasattr(self, "display"): 

44 print("virtual[%s]._close()" % (self.frame)) 

45 

46 def _buffer(self, enable=True): 

47 """Enable or disable buffering of writes to the display 

48 

49 Parameters 

50 ---------- 

51 enable : `bool` 

52 `True` or `False`, as appropriate 

53 """ 

54 if self.verbose: 54 ↛ exitline 54 didn't return from function '_buffer', because the condition on line 54 was never false

55 print("virtual[%s]._buffer(%s)" % (self.frame, enable)) 

56 

57 def _dot(self, symb, c, r, size, ctype, *args, **kwargs): 

58 """Draw a symbol at (c, r) 

59 

60 Parameters 

61 ---------- 

62 symb 

63 The desired symbol. See `dot` for details 

64 c : `float` 

65 (x) column position 

66 r : `float` 

67 (y) row position 

68 size : `int` 

69 Size of symbol, in pixels 

70 ctype : `str` 

71 The desired color, either e.g. `lsst.afw.display.RED` or a color name known to X11 

72 *args 

73 Extra arguments to backend 

74 **kwargs 

75 Extra keyword arguments to backend 

76 """ 

77 if self.verbose: 

78 print("virtual[%s]._dot('%s', %.2f, %.2f, size=%g, ctype=%s, %s, %s)" % 

79 (self.frame, symb, c, r, size, ctype, args, kwargs)) 

80 

81 def _drawLines(self, points, ctype): 

82 """Draw line defined by the list points 

83 

84 Parameters 

85 ---------- 

86 points : `list` of `tuple` of `float` 

87 A list of 0-indexed positions [(x, y), (x, y), ...] 

88 ctype : `str` 

89 The desired color, either e.g. `lsst.afw.display.RED` or a color name known to X11 

90 """ 

91 if self.verbose: 91 ↛ exitline 91 didn't return from function '_drawLines', because the condition on line 91 was never false

92 print("virtual[%s]._drawLines(%s, ctype=%s)" % 

93 (self.frame, points, ctype)) 

94 

95 def _erase(self): 

96 """Erase all glyphs drawn on display 

97 """ 

98 if self.verbose: 

99 print("virtual[%s]._erase()" % (self.frame)) 

100 

101 def _flush(self): 

102 """Flush any I/O buffers 

103 """ 

104 if self.verbose: 104 ↛ exitline 104 didn't return from function '_flush', because the condition on line 104 was never false

105 print("virtual[%s]._flush()" % self.frame) 

106 

107 def _setCallback(self, what, func): 

108 if self.verbose > 1: 108 ↛ 109line 108 didn't jump to line 109, because the condition on line 108 was never true

109 print("setCallback %s -> %s" % (what, func)) 

110 

111 def _getEvent(self): 

112 """Return an event generated by a keypress or mouse click 

113 """ 

114 from .interface import Event 

115 ev = Event("q") 

116 

117 if self.verbose: 117 ↛ 120line 117 didn't jump to line 120, because the condition on line 117 was never false

118 print("virtual[%s]._getEvent() -> %s" % (self.frame, ev)) 

119 

120 return ev 

121 

122 def _getMaskTransparency(self): 

123 """Return the mask transparency for a display 

124 """ 

125 if self.verbose: 

126 print("virtual[%s]._getMaskTransparency()" % self.frame) 

127 

128 def _mtv(self, image, wcs=None, mask=None, title=""): 

129 """Display an image and maybe a mask overlay on a display 

130 

131 Parameters 

132 ---------- 

133 image : `lsst.afw.image.Image` 

134 `~lsst.afw.image.Image` to display 

135 mask : `lsst.afw.image.Mask` 

136 `~lsst.afw.image.Mask` to display 

137 wcs : `lsst.afw.geom.SkyWcs` 

138 A Wcs to associate with data 

139 title : `str` 

140 Name to display with the data 

141 """ 

142 if self.verbose: 

143 print("virtual[%s]._mtv(image=%s, mask=%s, wcs=%s, title=\"%s\")" % 

144 (self.frame, "Image" if image else None, 

145 "Mask" if mask else None, "Wcs" if wcs else None, title)) 

146 

147 def _setImageColormap(self, cmap): 

148 """Set the desired colormap 

149 

150 Parameters 

151 ---------- 

152 cmap : `str` 

153 the name of a colormap (e.g. "gray") or a backend-specific object 

154 """ 

155 if self.verbose: 

156 print("virtual[%s]._setImageColormap(cmap=\"%s\")" % (self.frame, cmap)) 

157 

158 def _setMaskTransparency(self, transparency, maskplane): 

159 """Set the transparency of a maskplane 

160 

161 Parameters 

162 ---------- 

163 transparency : `float` 

164 The desired transparency, in the range [0, 100] 

165 maskplane 

166 The maskplane to set (None: all) 

167 """ 

168 if self.verbose: 

169 print("virtual[%s]._setMaskTransparency(%g, maskplane=\"%s\")" % 

170 (self.frame, transparency, maskplane)) 

171 

172 def _scale(self, algorithm, min, max, *args, unit=None, **kwargs): 

173 """Set the scaling from DN to displayed pixels 

174 

175 Parameters 

176 ---------- 

177 algorithm 

178 Scaling algorithm (e.g. linear) 

179 min 

180 The minimum value of the stretch (or "zscale" or "minmax") 

181 max 

182 The maximum value of the stretch 

183 unit 

184 Units for min and max (e.g. Percent, Absolute, Sigma) 

185 *args 

186 Optional arguments to the backend 

187 **kwargs 

188 Optional keyword arguments to the backend 

189 """ 

190 if self.verbose: 190 ↛ exitline 190 didn't return from function '_scale', because the condition on line 190 was never false

191 print("virtual[%s]._scale(%s, %s, %s, %s, %s, %s)" % (self.frame, algorithm, 

192 min, max, unit, args, kwargs)) 

193 

194 def _show(self): 

195 """Show the requested display 

196 """ 

197 if self.verbose: 197 ↛ exitline 197 didn't return from function '_show', because the condition on line 197 was never false

198 print("virtual[%s]._show()" % self.frame) 

199 

200 def _pan(self, r, c): 

201 """Pan to a row and column 

202 

203 Parameters 

204 ---------- 

205 c : `float` 

206 Desired column (x) position 

207 r : `float` 

208 Desired row (y) position 

209 """ 

210 if self.verbose: 

211 print("virtual[%s]._pan(%.2f, %.2f)" % (self.frame, r, c)) 

212 

213 def _zoom(self, zoomfac): 

214 """Set the zoom 

215 

216 Parameters 

217 ---------- 

218 zoomfac : `float` 

219 Zoom factor to use 

220 """ 

221 if self.verbose: 

222 print("virtual[%s]._zoom(%g)" % (self.frame, zoomfac))