basic_arithmetics.py 1.6 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 15 16 17
#
# Copyright(C) 2013-2017 Max-Planck-Society
#
# NIFTy is being developed at the Max-Planck-Institut fuer Astrophysik
# and financially supported by the Studienstiftung des deutschen Volkes.
18

Martin Reinecke's avatar
Martin Reinecke committed
19
from __future__ import division
Martin Reinecke's avatar
Martin Reinecke committed
20
from .field import Field
Martin Reinecke's avatar
Martin Reinecke committed
21
from . import dobj
22 23


24
__all__ = ['sqrt', 'exp', 'log', 'conjugate']
25 26


Martin Reinecke's avatar
Martin Reinecke committed
27 28 29 30
def _math_helper(x, function, out):
    if not isinstance(x, Field):
        raise TypeError("This function only accepts Field objects.")
    if out is not None:
Martin Reinecke's avatar
Martin Reinecke committed
31
        if not isinstance(out, Field) or x.domain != out.domain:
Martin Reinecke's avatar
Martin Reinecke committed
32 33 34
            raise ValueError("Bad 'out' argument")
        function(x.val, out=out.val)
        return out
35
    else:
Martin Reinecke's avatar
Martin Reinecke committed
36
        return Field(domain=x.domain, val=function(x.val))
37 38


Martin Reinecke's avatar
Martin Reinecke committed
39
def sqrt(x, out=None):
Martin Reinecke's avatar
Martin Reinecke committed
40
    return _math_helper(x, dobj.sqrt, out)
41

Martin Reinecke's avatar
PEP8  
Martin Reinecke committed
42

Martin Reinecke's avatar
Martin Reinecke committed
43
def exp(x, out=None):
Martin Reinecke's avatar
Martin Reinecke committed
44
    return _math_helper(x, dobj.exp, out)
45

Martin Reinecke's avatar
PEP8  
Martin Reinecke committed
46

Martin Reinecke's avatar
Martin Reinecke committed
47
def log(x, out=None):
Martin Reinecke's avatar
Martin Reinecke committed
48
    return _math_helper(x, dobj.log, out)
49

Martin Reinecke's avatar
PEP8  
Martin Reinecke committed
50

Martin Reinecke's avatar
Martin Reinecke committed
51
def conjugate(x, out=None):
Martin Reinecke's avatar
Martin Reinecke committed
52
    return _math_helper(x, dobj.conjugate, out)