Coverage for python/lsst/afw/math/_spatialCell.py: 46%

45 statements  

« prev     ^ index     » next       coverage.py v7.2.7, created at 2023-07-08 03:13 -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__all__ = [] # import this module only for its side effects 

23 

24from lsst.pex.exceptions import NotFoundError 

25from lsst.utils import continueClass 

26from ._math import (SpatialCellCandidate, SpatialCellCandidateIterator, SpatialCell, SpatialCellSet, 

27 SpatialCellImageCandidate) 

28 

29 

30@continueClass 

31class SpatialCellCandidateIterator: # noqa: F811 

32 def __iter__(self): 

33 while True: 

34 try: 

35 yield self.__deref__() 

36 except NotFoundError: 

37 return 

38 self.__incr__() 

39 

40 

41@continueClass 

42class SpatialCellCandidate: # noqa: F811 

43 def __repr__(self): 

44 return (f"center=({self.getXCenter()},{self.getYCenter()}), " 

45 f"status={self.getStatus().name}, rating={self.getCandidateRating()}") 

46 

47 

48@continueClass 

49class SpatialCellImageCandidate: # noqa: F811 

50 def __repr__(self): 

51 # NOTE: super doesn't work outside of class members, but this is only 

52 # single inheritance. 

53 string = (f"{SpatialCellCandidate.__repr__(self)}, size=({self.getWidth()}, {self.getHeight()}), " 

54 f"chi2={self.getChi2()}") 

55 return string 

56 

57 

58@continueClass 

59class SpatialCell: # noqa: F811 

60 def __iter__(self): 

61 return self.begin().__iter__() 

62 

63 def __getitem__(self, idx): 

64 idx = int(idx) 

65 num_cells = len(self) 

66 if idx < -num_cells or idx >= num_cells: 

67 raise IndexError("idx={} < -{} or >= {})".format(idx, 

68 num_cells, num_cells)) 

69 if idx < 0: 

70 idx += num_cells 

71 for i, cell in enumerate(self): 

72 if i >= idx: 

73 return cell 

74 

75 def __repr__(self): 

76 candidates = "\n".join(f"({str(x)})" for x in self) 

77 # If there are no candidates, don't make a multi-line list. 

78 candidatesStr = f"\n{candidates}" if self.size() != 0 else "" 

79 return (f"{self.getLabel()}: bbox={self.getBBox()}, ignoreBad={self.getIgnoreBad()}, " 

80 f"candidates=[{candidatesStr}]") 

81 

82 

83@continueClass 

84class SpatialCellSet: # noqa: F811 

85 def __repr__(self): 

86 cellsStr = "\n".join(str(cell) for cell in self.getCellList()) 

87 return (f"bbox={self.getBBox()}, {len(self.getCellList())} cells\n{cellsStr}")