Coverage for python/lsst/afw/typehandling/_SimpleGenericMap.py: 61%

17 statements  

« prev     ^ index     » next       coverage.py v6.5.0, created at 2024-03-20 00:40 -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__ = ["SimpleGenericMap"] 

23 

24from lsst.utils import continueClass 

25from ._typehandling import SimpleGenericMapS 

26from ._GenericMap import MutableGenericMap, AutoKeyMeta 

27 

28 

29class SimpleGenericMap(MutableGenericMap, metaclass=AutoKeyMeta): 

30 """A `dict`-like `~collections.abc.MutableMapping` for use when sharing a 

31 map between C++ and Python. 

32 

33 For compatibility with C++, ``SimpleGenericMap`` has the following 

34 restrictions: 

35 

36 - all keys must be of the same type 

37 - values must be built-in types or subclasses of 

38 `lsst.afw.typehandling.Storable`. Almost any user-defined class in 

39 C++ or Python can have `~lsst.afw.typehandling.Storable` as a mixin. 

40 

41 As a safety precaution, `~lsst.afw.typehandling.Storable` objects that are 

42 added from C++ may be copied when you retrieve them from Python, making it 

43 impossible to modify them in-place. This issue does not affect objects that 

44 are added from Python, or objects that are always passed by 

45 :cpp:class:`shared_ptr` in C++. 

46 

47 Parameters 

48 ---------- 

49 mapping : `collections.abc.Mapping`, optional 

50 iterable : iterable, optional 

51 dtype : `type`, optional 

52 The type of key the map accepts. Not required if ``mapping`` or 

53 ``iterable`` is provided. 

54 **kwargs 

55 Aside from the ``dtype`` keyword, a ``SimpleGenericMap`` takes the same 

56 input arguments as `dict`. 

57 """ 

58 @classmethod 

59 def fromkeys(cls, iterable, value=None): 

60 return cls({key: value for key in iterable}) 

61 

62 

63SimpleGenericMap.register(str, SimpleGenericMapS) 

64 

65 

66# pybind11-generated constructor, can only create empty map 

67_oldInit = SimpleGenericMapS.__init__ 

68 

69 

70@continueClass 

71class SimpleGenericMapS: # noqa: F811 

72 def __init__(self, source=None, **kwargs): 

73 _oldInit(self) 

74 if source: 

75 self.update(source, **kwargs) 

76 else: 

77 self.update(**kwargs)