numpy_do.py 3.85 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
# 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/>.
#
14
# Copyright(C) 2013-2019 Max-Planck-Society
15
#
16
# NIFTy is being developed at the Max-Planck-Institut fuer Astrophysik.
17

18
# Data object module that uses simple numpy ndarrays.
19
20

import numpy as np
Philipp Arras's avatar
Philipp Arras committed
21
from numpy import absolute, clip, cos, cosh, empty, empty_like, exp, full, log
22
from numpy import ndarray as data_object
Philipp Arras's avatar
Philipp Arras committed
23
24
from numpy import ones, sign, sin, sinc, sinh, sqrt, tan, tanh, vdot, zeros

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

Martin Reinecke's avatar
Martin Reinecke committed
27
28
29
30
31
32
__all__ = ["ntask", "rank", "master", "local_shape", "data_object", "full",
           "empty", "zeros", "ones", "empty_like", "vdot", "exp",
           "log", "tanh", "sqrt", "from_object", "from_random",
           "local_data", "ibegin", "ibegin_from_shape", "np_allreduce_sum",
           "np_allreduce_min", "np_allreduce_max",
           "distaxis", "from_local_data", "from_global_data", "to_global_data",
Martin Reinecke's avatar
Martin Reinecke committed
33
           "redistribute", "default_distaxis", "is_numpy", "absmax", "norm",
Martin Reinecke's avatar
Martin Reinecke committed
34
           "lock", "locked", "uniform_full", "to_global_data_rw",
Martin Reinecke's avatar
tweaks    
Martin Reinecke committed
35
           "ensure_not_distributed", "ensure_default_distributed",
Martin Reinecke's avatar
Martin Reinecke committed
36
           "clip", "sin", "cos", "tan", "sinh",
37
           "cosh", "absolute", "sign", "sinc"]
Martin Reinecke's avatar
Martin Reinecke committed
38

Martin Reinecke's avatar
Martin Reinecke committed
39
40
41
42
ntask = 1
rank = 0
master = True

43

Martin Reinecke's avatar
Martin Reinecke committed
44
45
46
47
def is_numpy():
    return True


Martin Reinecke's avatar
Martin Reinecke committed
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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
62
63
64
65
66


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
67

Martin Reinecke's avatar
Martin Reinecke committed
68

Martin Reinecke's avatar
Martin Reinecke committed
69
70
71
72
def local_data(arr):
    return arr


73
74
75
76
def ibegin_from_shape(glob_shape, distaxis=-1):
    return (0,)*len(glob_shape)


Martin Reinecke's avatar
Martin Reinecke committed
77
78
79
80
81
82
83
84
def ibegin(arr):
    return (0,)*arr.ndim


def np_allreduce_sum(arr):
    return arr


85
86
87
88
def np_allreduce_min(arr):
    return arr


Martin Reinecke's avatar
fixes    
Martin Reinecke committed
89
90
91
92
def np_allreduce_max(arr):
    return arr


Martin Reinecke's avatar
fixes    
Martin Reinecke committed
93
def distaxis(arr):
Martin Reinecke's avatar
Martin Reinecke committed
94
    return -1
Martin Reinecke's avatar
Martin Reinecke committed
95
96


Martin Reinecke's avatar
Martin Reinecke committed
97
def from_local_data(shape, arr, distaxis=-1):
Martin Reinecke's avatar
Martin Reinecke committed
98
    if tuple(shape) != arr.shape:
Martin Reinecke's avatar
Martin Reinecke committed
99
        raise ValueError
100
101
    if arr.dtype.kind not in "fciub":
        raise TypeError
Martin Reinecke's avatar
Martin Reinecke committed
102
103
104
    return arr


105
def from_global_data(arr, sum_up=False, distaxis=-1):
106
107
    if arr.dtype.kind not in "fciub":
        raise TypeError
Martin Reinecke's avatar
Martin Reinecke committed
108
109
110
    return arr


Martin Reinecke's avatar
Martin Reinecke committed
111
def to_global_data(arr):
Martin Reinecke's avatar
Martin Reinecke committed
112
113
114
    return arr


115
116
117
118
def to_global_data_rw(arr):
    return arr.copy()


Martin Reinecke's avatar
Martin Reinecke committed
119
def redistribute(arr, dist=None, nodist=None):
Martin Reinecke's avatar
Martin Reinecke committed
120
121
122
    return arr


Martin Reinecke's avatar
fixes    
Martin Reinecke committed
123
def default_distaxis():
Martin Reinecke's avatar
Martin Reinecke committed
124
125
126
    return -1


127
def local_shape(glob_shape, distaxis=-1):
Martin Reinecke's avatar
Martin Reinecke committed
128
    return glob_shape
129
130
131
132
133
134
135
136


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


def locked(arr):
    return not arr.flags.writeable
Martin Reinecke's avatar
Martin Reinecke committed
137
138
139
140


def uniform_full(shape, fill_value, dtype=None, distaxis=-1):
    return np.broadcast_to(fill_value, shape)
Martin Reinecke's avatar
Martin Reinecke committed
141
142
143
144
145
146
147
148


def ensure_not_distributed(arr, axes):
    return arr, arr


def ensure_default_distributed(arr):
    return arr
Martin Reinecke's avatar
Martin Reinecke committed
149
150
151


def absmax(arr):
152
    return np.linalg.norm(arr.reshape(-1), ord=np.inf)
Martin Reinecke's avatar
Martin Reinecke committed
153
154
155


def norm(arr, ord=2):
156
    return np.linalg.norm(arr.reshape(-1), ord=ord)