numpy_do.py 2.64 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 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/>.
#
# Copyright(C) 2013-2018 Max-Planck-Society
#
# NIFTy is being developed at the Max-Planck-Institut fuer Astrophysik
# and financially supported by the Studienstiftung des deutschen Volkes.

19
20
21
# Data object module for NIFTy that uses simple numpy ndarrays.

import numpy as np
Philipp Arras's avatar
Philipp Arras committed
22
from numpy import empty, empty_like, exp, full, log
23
from numpy import ndarray as data_object
Philipp Arras's avatar
Philipp Arras committed
24
25
from numpy import ones, sqrt, tanh, vdot, zeros

Martin Reinecke's avatar
Martin Reinecke committed
26
27
from .random import Random

Martin Reinecke's avatar
Martin Reinecke committed
28
29
30
31
ntask = 1
rank = 0
master = True

32

Martin Reinecke's avatar
Martin Reinecke committed
33
34
35
36
def is_numpy():
    return True


Martin Reinecke's avatar
Martin Reinecke committed
37
38
39
40
41
42
43
44
45
46
47
48
49
50
def from_object(object, dtype, copy, set_locked):
    if dtype is None:
        dtype = object.dtype
    dtypes_equal = dtype == object.dtype
    if set_locked and dtypes_equal and locked(object):
        return object
    if not dtypes_equal and not copy:
        raise ValueError("cannot change data type without copying")
    if set_locked and not copy:
        raise ValueError("cannot lock object without copying")
    res = np.array(object, dtype=dtype, copy=copy)
    if set_locked:
        lock(res)
    return res
Martin Reinecke's avatar
Martin Reinecke committed
51
52
53
54
55


def from_random(random_type, shape, dtype=np.float64, **kwargs):
    generator_function = getattr(Random, random_type)
    return generator_function(dtype=dtype, shape=shape, **kwargs)
Martin Reinecke's avatar
Martin Reinecke committed
56

Martin Reinecke's avatar
Martin Reinecke committed
57

Martin Reinecke's avatar
Martin Reinecke committed
58
59
60
61
def local_data(arr):
    return arr


62
63
64
65
def ibegin_from_shape(glob_shape, distaxis=-1):
    return (0,)*len(glob_shape)


Martin Reinecke's avatar
Martin Reinecke committed
66
67
68
69
70
71
72
73
def ibegin(arr):
    return (0,)*arr.ndim


def np_allreduce_sum(arr):
    return arr


74
75
76
77
def np_allreduce_min(arr):
    return arr


Martin Reinecke's avatar
fixes    
Martin Reinecke committed
78
79
80
81
def np_allreduce_max(arr):
    return arr


Martin Reinecke's avatar
fixes    
Martin Reinecke committed
82
def distaxis(arr):
Martin Reinecke's avatar
Martin Reinecke committed
83
    return -1
Martin Reinecke's avatar
Martin Reinecke committed
84
85


Martin Reinecke's avatar
Martin Reinecke committed
86
def from_local_data(shape, arr, distaxis=-1):
Martin Reinecke's avatar
Martin Reinecke committed
87
    if tuple(shape) != arr.shape:
Martin Reinecke's avatar
Martin Reinecke committed
88
89
90
91
        raise ValueError
    return arr


92
def from_global_data(arr, sum_up=False, distaxis=-1):
Martin Reinecke's avatar
Martin Reinecke committed
93
94
95
    return arr


Martin Reinecke's avatar
Martin Reinecke committed
96
def to_global_data(arr):
Martin Reinecke's avatar
Martin Reinecke committed
97
98
99
    return arr


Martin Reinecke's avatar
Martin Reinecke committed
100
def redistribute(arr, dist=None, nodist=None):
Martin Reinecke's avatar
Martin Reinecke committed
101
102
103
    return arr


Martin Reinecke's avatar
fixes    
Martin Reinecke committed
104
def default_distaxis():
Martin Reinecke's avatar
Martin Reinecke committed
105
106
107
    return -1


108
def local_shape(glob_shape, distaxis=-1):
Martin Reinecke's avatar
Martin Reinecke committed
109
    return glob_shape
110
111
112
113
114
115
116
117


def lock(arr):
    arr.flags.writeable = False


def locked(arr):
    return not arr.flags.writeable