unstructured_domain.py 1.55 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
Theo Steininger's avatar
Theo Steininger committed
13
#
14
# Copyright(C) 2013-2019 Max-Planck-Society
Theo Steininger's avatar
Theo Steininger committed
15
#
16
# NIFTy is being developed at the Max-Planck-Institut fuer Astrophysik.
Philipp Arras's avatar
Philipp Arras committed
17

Martin Reinecke's avatar
Martin Reinecke committed
18
from functools import reduce
Martin Reinecke's avatar
Martin Reinecke committed
19
from .domain import Domain
20
21


Martin Reinecke's avatar
Martin Reinecke committed
22
class UnstructuredDomain(Domain):
Martin Reinecke's avatar
5->6  
Martin Reinecke committed
23
    """A :class:`~nifty6.domains.domain.Domain` subclass for spaces with no
Martin Reinecke's avatar
Martin Reinecke committed
24
25
26
    associated geometry.

    Typically used for data spaces.
Martin Reinecke's avatar
Martin Reinecke committed
27
28
29
30
31
32

    Parameters
    ----------
    shape : tuple of int
        The required shape for an array which can hold the unstructured
        domain's data.
Martin Reinecke's avatar
Martin Reinecke committed
33
    """
Martin Reinecke's avatar
Martin Reinecke committed
34

Martin Reinecke's avatar
Martin Reinecke committed
35
    _needed_for_hash = ["_shape"]
Martin Reinecke's avatar
Martin Reinecke committed
36

37
    def __init__(self, shape):
38
        try:
39
            self._shape = tuple([int(i) for i in shape])
40
        except TypeError:
41
            self._shape = (int(shape), )
42

43
    def __repr__(self):
Martin Reinecke's avatar
Martin Reinecke committed
44
        return "UnstructuredDomain(shape={})".format(self.shape)
45

46
47
48
49
    @property
    def shape(self):
        return self._shape

Theo Steininger's avatar
Theo Steininger committed
50
    @property
Martin Reinecke's avatar
Martin Reinecke committed
51
    def size(self):
Theo Steininger's avatar
Theo Steininger committed
52
        return reduce(lambda x, y: x*y, self.shape)