LSST Applications g2079a07aa2+86d27d4dc4,g2305ad1205+a659bff248,g2bbee38e9b+3c60f8fe34,g337abbeb29+3c60f8fe34,g33d1c0ed96+3c60f8fe34,g3502564af9+d77d6d1350,g3a166c0a6a+3c60f8fe34,g487adcacf7+25d9892218,g4be5004598+d77d6d1350,g50ff169b8f+96c6868917,g52b1c1532d+585e252eca,g591dd9f2cf+4d81263f9a,g5cd07815a0+980d2b1c3b,g607f77f49a+d77d6d1350,g858d7b2824+d77d6d1350,g88963caddf+83e433e629,g99cad8db69+a4d3c48eeb,g9ddcbc5298+9a081db1e4,ga1e77700b3+bcf1af89ad,ga57fefb910+9a39d7b2d7,gae0086650b+585e252eca,gb065fddaf9+4f9fd82a2c,gb0e22166c9+60f28cb32d,gb363559e06+d84b1d3d07,gb3b7280ab2+4563d032e1,gb4b16eec92+babe958938,gba4ed39666+c2a2e4ac27,gbb8dafda3b+ed6854b564,gc120e1dc64+b72d212f87,gc28159a63d+3c60f8fe34,gc3e9b769f7+921dbcd359,gcf0d15dbbd+9a39d7b2d7,gdaeeff99f8+f9a426f77a,gddc38dedce+585e252eca,ge79ae78c31+3c60f8fe34,w.2024.21
LSST Data Management Base Package
Loading...
Searching...
No Matches
_disableArithmetic.py
Go to the documentation of this file.
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
22from ._imageLib import ImageSliceF, ImageSliceD
23
24__all__ = ("disableImageArithmetic", "disableMaskArithmetic")
25
26
27def wrapNotImplemented(cls, attr):
28 """Wrap a method providing a helpful error message about image arithmetic
29
30 Parameters
31 ----------
32 cls : `type`
33 Class in which the method is to be defined.
34 attr : `str`
35 Name of the method.
36
37 Returns
38 -------
39 method : callable
40 Wrapped method.
41 """
42 existing = getattr(cls, attr, None)
43
44 def notImplemented(self, other):
45 """Provide a helpful error message about image arithmetic
46
47 Unless we're operating on an ImageSlice, in which case it might be
48 defined.
49
50 Parameters
51 ----------
52 self : subclass of `lsst.afw.image.ImageBase`
53 Image someone's attempting to do arithmetic with.
54 other : anything
55 The operand of the arithmetic operation.
56 """
57 if existing is not None and isinstance(other, (ImageSliceF, ImageSliceD)):
58 return existing(self, other)
59 raise NotImplementedError("This arithmetic operation is not implemented, in order to prevent the "
60 "accidental proliferation of temporaries. Please use the in-place "
61 "arithmetic operations (e.g., += instead of +) or operate on the "
62 "underlying arrays.")
63 return notImplemented
64
65
67 """Add helpful error messages about image arithmetic"""
68 for attr in ("__add__", "__sub__", "__mul__", "__truediv__",
69 "__radd__", "__rsub__", "__rmul__", "__rtruediv__"):
70 setattr(cls, attr, wrapNotImplemented(cls, attr))
71
72
74 """Add helpful error messages about mask arithmetic"""
75 for attr in ("__or__", "__and__", "__xor__",
76 "__ror__", "__rand__", "__rxor__"):
77 setattr(cls, attr, wrapNotImplemented(cls, attr))